@opra/core 0.25.1 → 0.25.3
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/cjs/adapter/endpoint-context.js +1 -1
- package/cjs/adapter/execution-context.host.js +1 -1
- package/cjs/adapter/http/http-adapter-base.js +14 -1
- package/cjs/adapter/interfaces/interceptor.interface.js +2 -0
- package/cjs/adapter/platform-adapter.host.js +1 -0
- package/cjs/index.js +2 -1
- package/esm/adapter/endpoint-context.js +1 -1
- package/esm/adapter/execution-context.host.js +1 -1
- package/esm/adapter/http/http-adapter-base.js +14 -1
- package/esm/adapter/interfaces/interceptor.interface.js +1 -0
- package/esm/adapter/platform-adapter.host.js +1 -0
- package/esm/index.js +2 -1
- package/package.json +2 -2
- package/types/adapter/endpoint-context.d.ts +1 -1
- package/types/adapter/execution-context.d.ts +2 -2
- package/types/adapter/execution-context.host.d.ts +2 -2
- package/types/adapter/interfaces/interceptor.interface.d.ts +2 -0
- package/types/adapter/platform-adapter.d.ts +2 -0
- package/types/adapter/platform-adapter.host.d.ts +2 -0
- package/types/augmentation/collection.augmentation.d.ts +8 -8
- package/types/augmentation/resource.augmentation.d.ts +1 -1
- package/types/augmentation/singleton.augmentation.d.ts +5 -5
- package/types/augmentation/storage.augmentation.d.ts +4 -4
- package/types/index.d.ts +2 -1
|
@@ -38,7 +38,20 @@ class HttpAdapterBase extends platform_adapter_host_js_1.PlatformAdapterHost {
|
|
|
38
38
|
outgoing.appendHeader(common_1.HttpHeaderCodes.Access_Control_Expose_Headers, Object.values(common_1.HttpHeaderCodes)
|
|
39
39
|
.filter(k => k.toLowerCase().startsWith('x-opra-')));
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
let i = 0;
|
|
42
|
+
let requestProcessed = false;
|
|
43
|
+
const next = async () => {
|
|
44
|
+
while (i < this._interceptors.length) {
|
|
45
|
+
const interceptor = this._interceptors[i++];
|
|
46
|
+
if (interceptor)
|
|
47
|
+
await interceptor(context, next);
|
|
48
|
+
}
|
|
49
|
+
if (!requestProcessed) {
|
|
50
|
+
requestProcessed = true;
|
|
51
|
+
await this.processRequest(context);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
await next();
|
|
42
55
|
}
|
|
43
56
|
catch (error) {
|
|
44
57
|
context.errors.push((0, common_1.wrapException)(error));
|
|
@@ -17,6 +17,7 @@ class PlatformAdapterHost extends strict_typed_events_1.AsyncEventEmitter {
|
|
|
17
17
|
this._controllers = new WeakMap();
|
|
18
18
|
this._initialized = false;
|
|
19
19
|
this._options = options || {};
|
|
20
|
+
this._interceptors = [...(options?.interceptors || [])];
|
|
20
21
|
this._logger = options?.logger && options.logger instanceof logger_js_1.Logger
|
|
21
22
|
? options.logger
|
|
22
23
|
: new logger_js_1.Logger({ instance: options?.logger });
|
package/cjs/index.js
CHANGED
|
@@ -18,7 +18,8 @@ tslib_1.__exportStar(require("./adapter/http/impl/http-incoming-message.host.js"
|
|
|
18
18
|
tslib_1.__exportStar(require("./adapter/http/impl/http-outgoing-message.host.js"), exports);
|
|
19
19
|
tslib_1.__exportStar(require("./adapter/http/http-server-request.js"), exports);
|
|
20
20
|
tslib_1.__exportStar(require("./adapter/http/http-server-response.js"), exports);
|
|
21
|
+
tslib_1.__exportStar(require("./adapter/http/helpers/multipart-helper.js"), exports);
|
|
22
|
+
tslib_1.__exportStar(require("./adapter/interfaces/interceptor.interface.js"), exports);
|
|
21
23
|
tslib_1.__exportStar(require("./adapter/interfaces/logger.interface.js"), exports);
|
|
22
24
|
tslib_1.__exportStar(require("./adapter/interfaces/request-handler.interface.js"), exports);
|
|
23
25
|
tslib_1.__exportStar(require("./adapter/services/logger.js"), exports);
|
|
24
|
-
tslib_1.__exportStar(require("./adapter/http/helpers/multipart-helper.js"), exports);
|
|
@@ -35,7 +35,20 @@ export class HttpAdapterBase extends PlatformAdapterHost {
|
|
|
35
35
|
outgoing.appendHeader(HttpHeaderCodes.Access_Control_Expose_Headers, Object.values(HttpHeaderCodes)
|
|
36
36
|
.filter(k => k.toLowerCase().startsWith('x-opra-')));
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
let i = 0;
|
|
39
|
+
let requestProcessed = false;
|
|
40
|
+
const next = async () => {
|
|
41
|
+
while (i < this._interceptors.length) {
|
|
42
|
+
const interceptor = this._interceptors[i++];
|
|
43
|
+
if (interceptor)
|
|
44
|
+
await interceptor(context, next);
|
|
45
|
+
}
|
|
46
|
+
if (!requestProcessed) {
|
|
47
|
+
requestProcessed = true;
|
|
48
|
+
await this.processRequest(context);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
await next();
|
|
39
52
|
}
|
|
40
53
|
catch (error) {
|
|
41
54
|
context.errors.push(wrapException(error));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -13,6 +13,7 @@ export class PlatformAdapterHost extends AsyncEventEmitter {
|
|
|
13
13
|
this._controllers = new WeakMap();
|
|
14
14
|
this._initialized = false;
|
|
15
15
|
this._options = options || {};
|
|
16
|
+
this._interceptors = [...(options?.interceptors || [])];
|
|
16
17
|
this._logger = options?.logger && options.logger instanceof Logger
|
|
17
18
|
? options.logger
|
|
18
19
|
: new Logger({ instance: options?.logger });
|
package/esm/index.js
CHANGED
|
@@ -15,7 +15,8 @@ export * from './adapter/http/impl/http-incoming-message.host.js';
|
|
|
15
15
|
export * from './adapter/http/impl/http-outgoing-message.host.js';
|
|
16
16
|
export * from './adapter/http/http-server-request.js';
|
|
17
17
|
export * from './adapter/http/http-server-response.js';
|
|
18
|
+
export * from './adapter/http/helpers/multipart-helper.js';
|
|
19
|
+
export * from './adapter/interfaces/interceptor.interface.js';
|
|
18
20
|
export * from './adapter/interfaces/logger.interface.js';
|
|
19
21
|
export * from './adapter/interfaces/request-handler.interface.js';
|
|
20
22
|
export * from './adapter/services/logger.js';
|
|
21
|
-
export * from './adapter/http/helpers/multipart-helper.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opra/core",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.3",
|
|
4
4
|
"description": "Opra schema package",
|
|
5
5
|
"author": "Panates",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"clean:cover": "rimraf ../../coverage/core"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@opra/common": "^0.25.
|
|
30
|
+
"@opra/common": "^0.25.3",
|
|
31
31
|
"accepts": "^1.3.8",
|
|
32
32
|
"content-disposition": "^0.5.4",
|
|
33
33
|
"content-type": "^1.0.5",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ExecutionContext } from './execution-context';
|
|
2
2
|
import type { Request } from './request';
|
|
3
3
|
import type { Response } from './response';
|
|
4
|
-
export interface EndpointContext<
|
|
4
|
+
export interface EndpointContext<TSession extends {} = {}> extends ExecutionContext<TSession> {
|
|
5
5
|
request: Request;
|
|
6
6
|
response: Response;
|
|
7
7
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { HttpServerRequest } from './http/http-server-request';
|
|
2
2
|
import type { HttpServerResponse } from './http/http-server-response';
|
|
3
3
|
import type { Protocol } from './platform-adapter';
|
|
4
|
-
export interface ExecutionContext<
|
|
4
|
+
export interface ExecutionContext<TSession extends {} = {}> {
|
|
5
5
|
readonly protocol: Protocol;
|
|
6
6
|
readonly platform: string;
|
|
7
|
-
|
|
7
|
+
session: TSession;
|
|
8
8
|
errors: Error[];
|
|
9
9
|
switchToHttp(): HttpMessageContext;
|
|
10
10
|
switchToWs(): WsMessageContext;
|
|
@@ -4,7 +4,7 @@ import type { HttpServerResponse } from './/http/http-server-response.js';
|
|
|
4
4
|
import type { ExecutionContext, HttpMessageContext, RpcMessageContext, WsMessageContext } from './execution-context.js';
|
|
5
5
|
import type { HttpServerRequest } from './http/http-server-request.js';
|
|
6
6
|
import { Protocol } from './platform-adapter.js';
|
|
7
|
-
export declare class ExecutionContextHost<
|
|
7
|
+
export declare class ExecutionContextHost<TSession extends {} = {}> extends AsyncEventEmitter implements ExecutionContext<TSession> {
|
|
8
8
|
readonly api: ApiDocument;
|
|
9
9
|
readonly platform: string;
|
|
10
10
|
readonly protocol: Protocol;
|
|
@@ -12,7 +12,7 @@ export declare class ExecutionContextHost<TSpace extends {} = {}> extends AsyncE
|
|
|
12
12
|
readonly ws?: WsMessageContext;
|
|
13
13
|
readonly rpc?: RpcMessageContext;
|
|
14
14
|
errors: Error[];
|
|
15
|
-
|
|
15
|
+
session: TSession;
|
|
16
16
|
constructor(api: ApiDocument, platform: string, protocol: {
|
|
17
17
|
http?: {
|
|
18
18
|
incoming: HttpServerRequest;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ApiDocument, FallbackLng, I18n, LanguageResource } from '@opra/common';
|
|
2
2
|
import { EndpointContext } from './endpoint-context.js';
|
|
3
|
+
import { Interceptor } from './interfaces/interceptor.interface.js';
|
|
3
4
|
import { ILogger } from './interfaces/logger.interface.js';
|
|
4
5
|
import { RequestHandler } from './interfaces/request-handler.interface.js';
|
|
5
6
|
export type Protocol = 'http' | 'ws' | 'rpc';
|
|
@@ -20,6 +21,7 @@ export declare namespace PlatformAdapter {
|
|
|
20
21
|
interface Options {
|
|
21
22
|
i18n?: I18n | I18nOptions | (() => Promise<I18n>);
|
|
22
23
|
logger?: ILogger;
|
|
24
|
+
interceptors?: Interceptor[];
|
|
23
25
|
on?: {
|
|
24
26
|
request?: (ctx: EndpointContext) => void | Promise<void>;
|
|
25
27
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AsyncEventEmitter } from 'strict-typed-events';
|
|
2
2
|
import { ApiDocument, I18n, Resource } from '@opra/common';
|
|
3
3
|
import { ExecutionContext } from './execution-context.js';
|
|
4
|
+
import { Interceptor } from './interfaces/interceptor.interface.js';
|
|
4
5
|
import type { PlatformAdapter, Protocol } from './platform-adapter';
|
|
5
6
|
import { Logger } from './services/logger.js';
|
|
6
7
|
/**
|
|
@@ -16,6 +17,7 @@ export declare abstract class PlatformAdapterHost extends AsyncEventEmitter impl
|
|
|
16
17
|
_options: PlatformAdapter.Options;
|
|
17
18
|
_i18n: I18n;
|
|
18
19
|
_logger: Logger;
|
|
20
|
+
_interceptors: Interceptor[];
|
|
19
21
|
protected constructor(api: ApiDocument, options?: PlatformAdapter.Options);
|
|
20
22
|
get platform(): string;
|
|
21
23
|
get protocol(): Protocol;
|
|
@@ -4,7 +4,7 @@ import type { Request as _Request } from '../adapter/request.js';
|
|
|
4
4
|
declare module "@opra/common" {
|
|
5
5
|
namespace Collection {
|
|
6
6
|
namespace Action {
|
|
7
|
-
interface Context extends Resource.Context {
|
|
7
|
+
interface Context<TSession extends {} = {}> extends Resource.Context<TSession> {
|
|
8
8
|
key?: any;
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -18,7 +18,7 @@ declare module "@opra/common" {
|
|
|
18
18
|
include?: string[];
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
interface Context extends EndpointContext {
|
|
21
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
22
22
|
request: Request;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -27,7 +27,7 @@ declare module "@opra/common" {
|
|
|
27
27
|
endpoint: 'delete';
|
|
28
28
|
key: any;
|
|
29
29
|
}
|
|
30
|
-
interface Context extends EndpointContext {
|
|
30
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
31
31
|
request: Request;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -38,7 +38,7 @@ declare module "@opra/common" {
|
|
|
38
38
|
filter?: any;
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
interface Context extends EndpointContext {
|
|
41
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
42
42
|
request: Request;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -57,7 +57,7 @@ declare module "@opra/common" {
|
|
|
57
57
|
count?: boolean;
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
-
interface Context extends EndpointContext {
|
|
60
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
61
61
|
request: Request;
|
|
62
62
|
}
|
|
63
63
|
}
|
|
@@ -71,7 +71,7 @@ declare module "@opra/common" {
|
|
|
71
71
|
include?: string[];
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
-
interface Context extends EndpointContext {
|
|
74
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
75
75
|
request: Request;
|
|
76
76
|
}
|
|
77
77
|
}
|
|
@@ -86,7 +86,7 @@ declare module "@opra/common" {
|
|
|
86
86
|
include?: string[];
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
|
-
interface Context extends EndpointContext {
|
|
89
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
90
90
|
request: Request;
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -98,7 +98,7 @@ declare module "@opra/common" {
|
|
|
98
98
|
filter?: any;
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
-
interface Context extends EndpointContext {
|
|
101
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
102
102
|
request: Request;
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -4,7 +4,7 @@ import type { Request as _Request } from '../adapter/request.js';
|
|
|
4
4
|
declare module "@opra/common" {
|
|
5
5
|
namespace Singleton {
|
|
6
6
|
namespace Action {
|
|
7
|
-
interface Context extends Resource.Context {
|
|
7
|
+
interface Context<TSession extends {} = {}> extends Resource.Context<TSession> {
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
namespace Create {
|
|
@@ -17,7 +17,7 @@ declare module "@opra/common" {
|
|
|
17
17
|
include?: string[];
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
interface Context extends EndpointContext {
|
|
20
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
21
21
|
request: Request;
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -25,7 +25,7 @@ declare module "@opra/common" {
|
|
|
25
25
|
interface Request extends _Request {
|
|
26
26
|
endpoint: 'delete';
|
|
27
27
|
}
|
|
28
|
-
interface Context extends EndpointContext {
|
|
28
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
29
29
|
request: Request;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -38,7 +38,7 @@ declare module "@opra/common" {
|
|
|
38
38
|
include?: string[];
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
interface Context extends EndpointContext {
|
|
41
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
42
42
|
request: Request;
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -52,7 +52,7 @@ declare module "@opra/common" {
|
|
|
52
52
|
include?: string[];
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
|
-
interface Context extends EndpointContext {
|
|
55
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
56
56
|
request: Request;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -7,20 +7,20 @@ import type { Request as _Request } from '../adapter/request.js';
|
|
|
7
7
|
declare module "@opra/common" {
|
|
8
8
|
namespace Storage {
|
|
9
9
|
namespace Action {
|
|
10
|
-
interface Context extends Resource.Context {
|
|
10
|
+
interface Context<TSession extends {} = {}> extends Resource.Context<TSession> {
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
namespace Delete {
|
|
14
14
|
interface Request extends _Request {
|
|
15
15
|
}
|
|
16
|
-
interface Context extends EndpointContext {
|
|
16
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
17
17
|
request: Request;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
namespace Get {
|
|
21
21
|
interface Request extends _Request {
|
|
22
22
|
}
|
|
23
|
-
interface Context extends EndpointContext {
|
|
23
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
24
24
|
request: Request;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -28,7 +28,7 @@ declare module "@opra/common" {
|
|
|
28
28
|
interface Request extends _Request {
|
|
29
29
|
parts: MultipartIterator;
|
|
30
30
|
}
|
|
31
|
-
interface Context extends EndpointContext {
|
|
31
|
+
interface Context<TSession extends {} = {}> extends EndpointContext<TSession> {
|
|
32
32
|
request: Request;
|
|
33
33
|
}
|
|
34
34
|
}
|
package/types/index.d.ts
CHANGED
|
@@ -15,7 +15,8 @@ export * from './adapter/http/impl/http-incoming-message.host.js';
|
|
|
15
15
|
export * from './adapter/http/impl/http-outgoing-message.host.js';
|
|
16
16
|
export * from './adapter/http/http-server-request.js';
|
|
17
17
|
export * from './adapter/http/http-server-response.js';
|
|
18
|
+
export * from './adapter/http/helpers/multipart-helper.js';
|
|
19
|
+
export * from './adapter/interfaces/interceptor.interface.js';
|
|
18
20
|
export * from './adapter/interfaces/logger.interface.js';
|
|
19
21
|
export * from './adapter/interfaces/request-handler.interface.js';
|
|
20
22
|
export * from './adapter/services/logger.js';
|
|
21
|
-
export * from './adapter/http/helpers/multipart-helper.js';
|