@morojs/moro 1.6.5 → 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 +8 -4
- 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.d.ts +7 -0
- package/dist/core/http/http-server.js +267 -123
- 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 +7 -1
- package/dist/core/http/uws-http-server.js +272 -189
- 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.d.ts +7 -5
- package/dist/core/logger/logger.js +68 -27
- 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/rate-limit/core.d.ts +5 -0
- package/dist/core/middleware/built-in/rate-limit/core.js +16 -8
- package/dist/core/middleware/built-in/rate-limit/core.js.map +1 -1
- package/dist/core/middleware/built-in/validation/core.js +42 -19
- 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.d.ts +8 -2
- package/dist/core/pooling/object-pool-manager.js +38 -18
- 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/routing/path-matcher.d.ts +6 -0
- package/dist/core/routing/path-matcher.js +46 -7
- package/dist/core/routing/path-matcher.js.map +1 -1
- package/dist/core/routing/unified-router.d.ts +4 -0
- package/dist/core/routing/unified-router.js +104 -43
- package/dist/core/routing/unified-router.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.d.ts +4 -0
- package/dist/core/utilities/hooks.js +134 -22
- 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 +592 -16
- 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/logger.d.ts +1 -0
- package/dist/types/module.d.ts +2 -2
- package/package.json +21 -1
|
@@ -5,6 +5,12 @@ export declare class AzureCDNAdapter implements CDNAdapter {
|
|
|
5
5
|
private resourceGroup;
|
|
6
6
|
private profileName;
|
|
7
7
|
private endpointName;
|
|
8
|
+
private clientId?;
|
|
9
|
+
private clientSecret?;
|
|
10
|
+
private tenantId?;
|
|
11
|
+
private accessToken?;
|
|
12
|
+
private tokenExpiry?;
|
|
13
|
+
private cacheControlMaxAge;
|
|
8
14
|
constructor(options: {
|
|
9
15
|
subscriptionId: string;
|
|
10
16
|
resourceGroup: string;
|
|
@@ -14,7 +20,9 @@ export declare class AzureCDNAdapter implements CDNAdapter {
|
|
|
14
20
|
clientId?: string;
|
|
15
21
|
clientSecret?: string;
|
|
16
22
|
tenantId?: string;
|
|
23
|
+
cacheControlMaxAge?: number;
|
|
17
24
|
});
|
|
25
|
+
private getAccessToken;
|
|
18
26
|
purge(urls: string[]): Promise<void>;
|
|
19
27
|
prefetch(urls: string[]): Promise<void>;
|
|
20
28
|
setHeaders(response: any): void;
|
|
@@ -6,23 +6,85 @@ export class AzureCDNAdapter {
|
|
|
6
6
|
resourceGroup;
|
|
7
7
|
profileName;
|
|
8
8
|
endpointName;
|
|
9
|
+
clientId;
|
|
10
|
+
clientSecret;
|
|
11
|
+
tenantId;
|
|
12
|
+
accessToken;
|
|
13
|
+
tokenExpiry;
|
|
14
|
+
cacheControlMaxAge;
|
|
9
15
|
constructor(options) {
|
|
10
16
|
this.subscriptionId = options.subscriptionId;
|
|
11
17
|
this.resourceGroup = options.resourceGroup;
|
|
12
18
|
this.profileName = options.profileName;
|
|
13
19
|
this.endpointName = options.endpointName;
|
|
14
20
|
this.endpoint = options.endpoint;
|
|
21
|
+
this.clientId = options.clientId;
|
|
22
|
+
this.clientSecret = options.clientSecret;
|
|
23
|
+
this.tenantId = options.tenantId;
|
|
24
|
+
this.cacheControlMaxAge = options.cacheControlMaxAge ?? 3600;
|
|
15
25
|
logger.info('Azure CDN adapter initialized', 'AzureCDN');
|
|
16
26
|
}
|
|
27
|
+
async getAccessToken() {
|
|
28
|
+
if (!this.clientId || !this.clientSecret || !this.tenantId) {
|
|
29
|
+
throw new Error('Azure credentials (clientId, clientSecret, tenantId) are required for API operations');
|
|
30
|
+
}
|
|
31
|
+
if (this.accessToken && this.tokenExpiry && Date.now() < this.tokenExpiry) {
|
|
32
|
+
return this.accessToken;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const tokenUrl = `https://login.microsoftonline.com/${this.tenantId}/oauth2/v2.0/token`;
|
|
36
|
+
const params = new URLSearchParams({
|
|
37
|
+
client_id: this.clientId,
|
|
38
|
+
client_secret: this.clientSecret,
|
|
39
|
+
scope: 'https://management.azure.com/.default',
|
|
40
|
+
grant_type: 'client_credentials',
|
|
41
|
+
});
|
|
42
|
+
const response = await fetch(tokenUrl, {
|
|
43
|
+
method: 'POST',
|
|
44
|
+
headers: {
|
|
45
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
46
|
+
},
|
|
47
|
+
body: params.toString(),
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const errorText = await response.text();
|
|
51
|
+
throw new Error(`Failed to get Azure access token: ${response.status} ${errorText}`);
|
|
52
|
+
}
|
|
53
|
+
const data = (await response.json());
|
|
54
|
+
this.accessToken = data.access_token;
|
|
55
|
+
this.tokenExpiry = Date.now() + (data.expires_in - 300) * 1000;
|
|
56
|
+
return this.accessToken;
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
logger.error('Failed to obtain Azure access token', 'AzureCDN', { error });
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
17
63
|
async purge(urls) {
|
|
64
|
+
if (!urls || urls.length === 0) {
|
|
65
|
+
logger.warn('No URLs provided for purge', 'AzureCDN');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
18
68
|
try {
|
|
19
|
-
const
|
|
69
|
+
const accessToken = await this.getAccessToken();
|
|
70
|
+
const purgeUrl = `https://management.azure.com/subscriptions/${this.subscriptionId}/resourceGroups/${this.resourceGroup}/providers/Microsoft.Cdn/profiles/${this.profileName}/endpoints/${this.endpointName}/purge?api-version=2021-06-01`;
|
|
20
71
|
const purgeData = {
|
|
21
72
|
contentPaths: urls.map(url => (url.startsWith('/') ? url : `/${url}`)),
|
|
22
73
|
};
|
|
23
74
|
logger.info(`Azure CDN cache purge requested: ${urls.length} URLs`, 'AzureCDN');
|
|
24
|
-
|
|
25
|
-
|
|
75
|
+
const response = await fetch(purgeUrl, {
|
|
76
|
+
method: 'POST',
|
|
77
|
+
headers: {
|
|
78
|
+
Authorization: `Bearer ${accessToken}`,
|
|
79
|
+
'Content-Type': 'application/json',
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify(purgeData),
|
|
82
|
+
});
|
|
83
|
+
if (!response.ok) {
|
|
84
|
+
const errorText = await response.text();
|
|
85
|
+
throw new Error(`Azure CDN purge failed: ${response.status} ${errorText}`);
|
|
86
|
+
}
|
|
87
|
+
logger.info(`Azure CDN cache purged successfully for ${urls.length} URLs`, 'AzureCDN');
|
|
26
88
|
}
|
|
27
89
|
catch (error) {
|
|
28
90
|
logger.error('Azure CDN purge failed', 'AzureCDN', { error, urls });
|
|
@@ -30,12 +92,43 @@ export class AzureCDNAdapter {
|
|
|
30
92
|
}
|
|
31
93
|
}
|
|
32
94
|
async prefetch(urls) {
|
|
33
|
-
|
|
34
|
-
|
|
95
|
+
if (!urls || urls.length === 0) {
|
|
96
|
+
logger.warn('No URLs provided for prefetch', 'AzureCDN');
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const accessToken = await this.getAccessToken();
|
|
101
|
+
const loadUrl = `https://management.azure.com/subscriptions/${this.subscriptionId}/resourceGroups/${this.resourceGroup}/providers/Microsoft.Cdn/profiles/${this.profileName}/endpoints/${this.endpointName}/load?api-version=2021-06-01`;
|
|
102
|
+
const loadData = {
|
|
103
|
+
contentPaths: urls.map(url => (url.startsWith('/') ? url : `/${url}`)),
|
|
104
|
+
};
|
|
105
|
+
logger.debug(`Azure CDN prefetch requested for ${urls.length} URLs`, 'AzureCDN');
|
|
106
|
+
const response = await fetch(loadUrl, {
|
|
107
|
+
method: 'POST',
|
|
108
|
+
headers: {
|
|
109
|
+
Authorization: `Bearer ${accessToken}`,
|
|
110
|
+
'Content-Type': 'application/json',
|
|
111
|
+
},
|
|
112
|
+
body: JSON.stringify(loadData),
|
|
113
|
+
});
|
|
114
|
+
if (!response.ok) {
|
|
115
|
+
const errorText = await response.text();
|
|
116
|
+
throw new Error(`Azure CDN prefetch failed: ${response.status} ${errorText}`);
|
|
117
|
+
}
|
|
118
|
+
logger.info(`Azure CDN prefetch completed successfully for ${urls.length} URLs`, 'AzureCDN');
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error('Azure CDN prefetch failed', 'AzureCDN', { error, urls });
|
|
122
|
+
throw error;
|
|
123
|
+
}
|
|
35
124
|
}
|
|
36
125
|
setHeaders(response) {
|
|
37
|
-
response.setHeader
|
|
38
|
-
|
|
126
|
+
if (!response || typeof response.setHeader !== 'function') {
|
|
127
|
+
logger.warn('Invalid response object provided to setHeaders', 'AzureCDN');
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
response.setHeader('Cache-Control', `public, max-age=${this.cacheControlMaxAge}`);
|
|
131
|
+
response.setHeader('X-CDN-Provider', 'Azure');
|
|
39
132
|
}
|
|
40
133
|
}
|
|
41
134
|
//# sourceMappingURL=azure.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure.js","sourceRoot":"","sources":["../../../../../../../src/core/middleware/built-in/cdn/adapters/cdn/azure.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,MAAM,MAAM,GAAG,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"azure.js","sourceRoot":"","sources":["../../../../../../../src/core/middleware/built-in/cdn/adapters/cdn/azure.ts"],"names":[],"mappings":"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"}
|
|
@@ -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>;
|