@furystack/rest-service 13.0.0 → 14.1.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/CHANGELOG.md +124 -0
- package/README.md +47 -28
- package/esm/actions/error-action.d.ts +7 -2
- package/esm/actions/error-action.d.ts.map +1 -1
- package/esm/actions/error-action.js +7 -2
- package/esm/actions/error-action.js.map +1 -1
- package/esm/actions/get-current-user.d.ts +1 -4
- package/esm/actions/get-current-user.d.ts.map +1 -1
- package/esm/actions/get-current-user.js +1 -4
- package/esm/actions/get-current-user.js.map +1 -1
- package/esm/actions/get-current-user.spec.js +10 -6
- package/esm/actions/get-current-user.spec.js.map +1 -1
- package/esm/actions/is-authenticated.d.ts +3 -4
- package/esm/actions/is-authenticated.d.ts.map +1 -1
- package/esm/actions/is-authenticated.js +3 -4
- package/esm/actions/is-authenticated.js.map +1 -1
- package/esm/actions/is-authenticated.spec.js +10 -6
- package/esm/actions/is-authenticated.spec.js.map +1 -1
- package/esm/actions/logout-action.spec.js +11 -9
- package/esm/actions/logout-action.spec.js.map +1 -1
- package/esm/actions/logout.d.ts +2 -6
- package/esm/actions/logout.d.ts.map +1 -1
- package/esm/actions/logout.js +3 -7
- package/esm/actions/logout.js.map +1 -1
- package/esm/actions/not-found-action.d.ts +1 -3
- package/esm/actions/not-found-action.d.ts.map +1 -1
- package/esm/actions/not-found-action.js +1 -3
- package/esm/actions/not-found-action.js.map +1 -1
- package/esm/actions/password-login-action.d.ts +5 -12
- package/esm/actions/password-login-action.d.ts.map +1 -1
- package/esm/actions/password-login-action.js +6 -13
- package/esm/actions/password-login-action.js.map +1 -1
- package/esm/actions/password-login-action.spec.js +23 -28
- package/esm/actions/password-login-action.spec.js.map +1 -1
- package/esm/authenticate.d.ts +5 -11
- package/esm/authenticate.d.ts.map +1 -1
- package/esm/authenticate.js +6 -12
- package/esm/authenticate.js.map +1 -1
- package/esm/authenticate.spec.js +41 -33
- package/esm/authenticate.spec.js.map +1 -1
- package/esm/authentication-providers/authentication-provider.d.ts +17 -0
- package/esm/authentication-providers/authentication-provider.d.ts.map +1 -1
- package/esm/authentication-providers/basic-auth-provider.d.ts +7 -0
- package/esm/authentication-providers/basic-auth-provider.d.ts.map +1 -1
- package/esm/authentication-providers/basic-auth-provider.js +7 -0
- package/esm/authentication-providers/basic-auth-provider.js.map +1 -1
- package/esm/authentication-providers/cookie-auth-provider.d.ts.map +1 -1
- package/esm/authentication-providers/cookie-auth-provider.js +8 -0
- package/esm/authentication-providers/cookie-auth-provider.js.map +1 -1
- package/esm/authorize.d.ts +5 -17
- package/esm/authorize.d.ts.map +1 -1
- package/esm/authorize.js +5 -17
- package/esm/authorize.js.map +1 -1
- package/esm/authorize.spec.js +34 -29
- package/esm/authorize.spec.js.map +1 -1
- package/esm/endpoint-generators/create-delete-endpoint.d.ts +6 -11
- package/esm/endpoint-generators/create-delete-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-delete-endpoint.js +7 -11
- package/esm/endpoint-generators/create-delete-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-delete-endpoint.spec.js +14 -21
- package/esm/endpoint-generators/create-delete-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-get-collection-endpoint.d.ts +11 -11
- package/esm/endpoint-generators/create-get-collection-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-collection-endpoint.js +13 -12
- package/esm/endpoint-generators/create-get-collection-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-get-collection-endpoint.spec.js +43 -70
- package/esm/endpoint-generators/create-get-collection-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-get-entity-endpoint.d.ts +6 -11
- package/esm/endpoint-generators/create-get-entity-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-entity-endpoint.js +7 -11
- package/esm/endpoint-generators/create-get-entity-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-get-entity-endpoint.spec.js +16 -33
- package/esm/endpoint-generators/create-get-entity-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +1 -1
- package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-openapi-document-action.js +1 -1
- package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -1
- package/esm/endpoint-generators/create-get-schema-action.d.ts +1 -1
- package/esm/endpoint-generators/create-get-schema-action.d.ts.map +1 -1
- package/esm/endpoint-generators/create-get-schema-action.js.map +1 -1
- package/esm/endpoint-generators/create-patch-endpoint.d.ts +7 -13
- package/esm/endpoint-generators/create-patch-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-patch-endpoint.js +8 -13
- package/esm/endpoint-generators/create-patch-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-patch-endpoint.spec.js +10 -17
- package/esm/endpoint-generators/create-patch-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/create-post-endpoint.d.ts +7 -13
- package/esm/endpoint-generators/create-post-endpoint.d.ts.map +1 -1
- package/esm/endpoint-generators/create-post-endpoint.js +8 -13
- package/esm/endpoint-generators/create-post-endpoint.js.map +1 -1
- package/esm/endpoint-generators/create-post-endpoint.spec.js +41 -14
- package/esm/endpoint-generators/create-post-endpoint.spec.js.map +1 -1
- package/esm/endpoint-generators/utils.d.ts +17 -2
- package/esm/endpoint-generators/utils.d.ts.map +1 -1
- package/esm/endpoint-generators/utils.js +33 -20
- package/esm/endpoint-generators/utils.js.map +1 -1
- package/esm/get-schema-from-api.d.ts +1 -1
- package/esm/get-schema-from-api.d.ts.map +1 -1
- package/esm/get-schema-from-api.js +1 -0
- package/esm/get-schema-from-api.js.map +1 -1
- package/esm/get-schema-from-api.spec.js.map +1 -1
- package/esm/helpers.d.ts +54 -88
- package/esm/helpers.d.ts.map +1 -1
- package/esm/helpers.js +90 -92
- package/esm/helpers.js.map +1 -1
- package/esm/helpers.spec.d.ts +2 -1
- package/esm/helpers.spec.d.ts.map +1 -1
- package/esm/helpers.spec.js +41 -38
- package/esm/helpers.spec.js.map +1 -1
- package/esm/http-authentication-settings.d.ts +56 -12
- package/esm/http-authentication-settings.d.ts.map +1 -1
- package/esm/http-authentication-settings.js +27 -29
- package/esm/http-authentication-settings.js.map +1 -1
- package/esm/http-server-pool.d.ts +64 -0
- package/esm/http-server-pool.d.ts.map +1 -0
- package/esm/http-server-pool.js +95 -0
- package/esm/http-server-pool.js.map +1 -0
- package/esm/http-server-pool.spec.d.ts +2 -0
- package/esm/http-server-pool.spec.d.ts.map +1 -0
- package/esm/http-server-pool.spec.js +193 -0
- package/esm/http-server-pool.spec.js.map +1 -0
- package/esm/http-user-context.d.ts +34 -44
- package/esm/http-user-context.d.ts.map +1 -1
- package/esm/http-user-context.js +75 -95
- package/esm/http-user-context.js.map +1 -1
- package/esm/http-user-context.spec.d.ts +8 -2
- package/esm/http-user-context.spec.d.ts.map +1 -1
- package/esm/http-user-context.spec.js +226 -332
- package/esm/http-user-context.spec.js.map +1 -1
- package/esm/identity-cache-keys.d.ts +28 -0
- package/esm/identity-cache-keys.d.ts.map +1 -0
- package/esm/identity-cache-keys.js +13 -0
- package/esm/identity-cache-keys.js.map +1 -0
- package/esm/identity-cache-keys.spec.d.ts +2 -0
- package/esm/identity-cache-keys.spec.d.ts.map +1 -0
- package/esm/identity-cache-keys.spec.js +21 -0
- package/esm/identity-cache-keys.spec.js.map +1 -0
- package/esm/identity-event-bus.d.ts +102 -0
- package/esm/identity-event-bus.d.ts.map +1 -0
- package/esm/identity-event-bus.js +151 -0
- package/esm/identity-event-bus.js.map +1 -0
- package/esm/identity-event-bus.spec.d.ts +2 -0
- package/esm/identity-event-bus.spec.d.ts.map +1 -0
- package/esm/identity-event-bus.spec.js +392 -0
- package/esm/identity-event-bus.spec.js.map +1 -0
- package/esm/index.d.ts +9 -4
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +9 -4
- package/esm/index.js.map +1 -1
- package/esm/login-response-strategy.d.ts +11 -10
- package/esm/login-response-strategy.d.ts.map +1 -1
- package/esm/login-response-strategy.js +7 -6
- package/esm/login-response-strategy.js.map +1 -1
- package/esm/login-response-strategy.spec.js +25 -29
- package/esm/login-response-strategy.spec.js.map +1 -1
- package/esm/openapi/generate-openapi-document.spec.js.map +1 -1
- package/esm/proxy-manager.spec.js +152 -176
- package/esm/proxy-manager.spec.js.map +1 -1
- package/esm/proxy-runtime.d.ts +27 -0
- package/esm/proxy-runtime.d.ts.map +1 -0
- package/esm/proxy-runtime.js +45 -0
- package/esm/proxy-runtime.js.map +1 -0
- package/esm/proxy-runtime.spec.d.ts +2 -0
- package/esm/proxy-runtime.spec.d.ts.map +1 -0
- package/esm/proxy-runtime.spec.js +39 -0
- package/esm/proxy-runtime.spec.js.map +1 -0
- package/esm/request-action-implementation.d.ts +25 -0
- package/esm/request-action-implementation.d.ts.map +1 -1
- package/esm/request-action-implementation.js +9 -0
- package/esm/request-action-implementation.js.map +1 -1
- package/esm/rest-api-runtime.d.ts +76 -0
- package/esm/rest-api-runtime.d.ts.map +1 -0
- package/esm/rest-api-runtime.js +131 -0
- package/esm/rest-api-runtime.js.map +1 -0
- package/esm/rest-api-runtime.spec.d.ts +2 -0
- package/esm/rest-api-runtime.spec.d.ts.map +1 -0
- package/esm/rest-api-runtime.spec.js +58 -0
- package/esm/rest-api-runtime.spec.js.map +1 -0
- package/esm/rest-service.integration.spec.d.ts +1 -1
- package/esm/rest-service.integration.spec.d.ts.map +1 -1
- package/esm/rest-service.integration.spec.js +57 -80
- package/esm/rest-service.integration.spec.js.map +1 -1
- package/esm/rest.integration.test.js +26 -84
- package/esm/rest.integration.test.js.map +1 -1
- package/esm/server-telemetry.d.ts +49 -0
- package/esm/server-telemetry.d.ts.map +1 -0
- package/esm/server-telemetry.js +25 -0
- package/esm/server-telemetry.js.map +1 -0
- package/esm/server-telemetry.spec.d.ts +2 -0
- package/esm/server-telemetry.spec.d.ts.map +1 -0
- package/esm/server-telemetry.spec.js +52 -0
- package/esm/server-telemetry.spec.js.map +1 -0
- package/esm/static-server-manager.spec.js +60 -125
- package/esm/static-server-manager.spec.js.map +1 -1
- package/esm/static-site-runtime.d.ts +21 -0
- package/esm/static-site-runtime.d.ts.map +1 -0
- package/esm/static-site-runtime.js +48 -0
- package/esm/static-site-runtime.js.map +1 -0
- package/esm/static-site-runtime.spec.d.ts +2 -0
- package/esm/static-site-runtime.spec.d.ts.map +1 -0
- package/esm/static-site-runtime.spec.js +30 -0
- package/esm/static-site-runtime.spec.js.map +1 -0
- package/esm/user-resolution-cache.d.ts +65 -0
- package/esm/user-resolution-cache.d.ts.map +1 -0
- package/esm/user-resolution-cache.js +101 -0
- package/esm/user-resolution-cache.js.map +1 -0
- package/esm/user-resolution-cache.spec.d.ts +2 -0
- package/esm/user-resolution-cache.spec.d.ts.map +1 -0
- package/esm/user-resolution-cache.spec.js +220 -0
- package/esm/user-resolution-cache.spec.js.map +1 -0
- package/esm/user-store.d.ts +39 -0
- package/esm/user-store.d.ts.map +1 -0
- package/esm/user-store.js +62 -0
- package/esm/user-store.js.map +1 -0
- package/esm/user-store.spec.d.ts +2 -0
- package/esm/user-store.spec.d.ts.map +1 -0
- package/esm/user-store.spec.js +72 -0
- package/esm/user-store.spec.js.map +1 -0
- package/esm/validate.d.ts +13 -12
- package/esm/validate.d.ts.map +1 -1
- package/esm/validate.integration.spec.js +27 -28
- package/esm/validate.integration.spec.js.map +1 -1
- package/esm/validate.js +12 -0
- package/esm/validate.js.map +1 -1
- package/package.json +14 -12
- package/src/actions/error-action.ts +7 -3
- package/src/actions/get-current-user.spec.ts +11 -10
- package/src/actions/get-current-user.ts +1 -4
- package/src/actions/is-authenticated.spec.ts +12 -7
- package/src/actions/is-authenticated.ts +3 -4
- package/src/actions/logout-action.spec.ts +12 -12
- package/src/actions/logout.ts +3 -7
- package/src/actions/not-found-action.ts +1 -3
- package/src/actions/password-login-action.spec.ts +30 -30
- package/src/actions/password-login-action.ts +6 -13
- package/src/authenticate.spec.ts +45 -51
- package/src/authenticate.ts +6 -12
- package/src/authentication-providers/authentication-provider.ts +17 -0
- package/src/authentication-providers/basic-auth-provider.ts +7 -0
- package/src/authentication-providers/cookie-auth-provider.ts +8 -0
- package/src/authorize.spec.ts +37 -39
- package/src/authorize.ts +6 -17
- package/src/endpoint-generators/create-delete-endpoint.spec.ts +16 -24
- package/src/endpoint-generators/create-delete-endpoint.ts +11 -17
- package/src/endpoint-generators/create-get-collection-endpoint.spec.ts +45 -78
- package/src/endpoint-generators/create-get-collection-endpoint.ts +17 -19
- package/src/endpoint-generators/create-get-entity-endpoint.spec.ts +17 -33
- package/src/endpoint-generators/create-get-entity-endpoint.ts +11 -17
- package/src/endpoint-generators/create-get-openapi-document-action.ts +2 -2
- package/src/endpoint-generators/create-get-schema-action.ts +1 -1
- package/src/endpoint-generators/create-patch-endpoint.spec.ts +11 -18
- package/src/endpoint-generators/create-patch-endpoint.ts +12 -23
- package/src/endpoint-generators/create-post-endpoint.spec.ts +45 -14
- package/src/endpoint-generators/create-post-endpoint.ts +13 -23
- package/src/endpoint-generators/utils.ts +36 -28
- package/src/get-schema-from-api.spec.ts +1 -1
- package/src/get-schema-from-api.ts +2 -1
- package/src/helpers.spec.ts +51 -41
- package/src/helpers.ts +140 -109
- package/src/http-authentication-settings.ts +78 -24
- package/src/http-server-pool.spec.ts +220 -0
- package/src/http-server-pool.ts +169 -0
- package/src/http-user-context.spec.ts +246 -378
- package/src/http-user-context.ts +122 -92
- package/src/identity-cache-keys.spec.ts +24 -0
- package/src/identity-cache-keys.ts +31 -0
- package/src/identity-event-bus.spec.ts +285 -0
- package/src/identity-event-bus.ts +230 -0
- package/src/index.ts +9 -4
- package/src/login-response-strategy.spec.ts +32 -31
- package/src/login-response-strategy.ts +14 -12
- package/src/openapi/generate-openapi-document.spec.ts +2 -2
- package/src/proxy-manager.spec.ts +158 -188
- package/src/proxy-runtime.spec.ts +50 -0
- package/src/proxy-runtime.ts +75 -0
- package/src/request-action-implementation.ts +25 -0
- package/src/rest-api-runtime.spec.ts +77 -0
- package/src/rest-api-runtime.ts +204 -0
- package/src/rest-service.integration.spec.ts +65 -85
- package/src/rest.integration.test.ts +27 -87
- package/src/server-telemetry.spec.ts +56 -0
- package/src/server-telemetry.ts +43 -0
- package/src/static-server-manager.spec.ts +63 -151
- package/src/static-site-runtime.spec.ts +39 -0
- package/src/static-site-runtime.ts +75 -0
- package/src/user-resolution-cache.spec.ts +241 -0
- package/src/user-resolution-cache.ts +164 -0
- package/src/user-store.spec.ts +86 -0
- package/src/user-store.ts +69 -0
- package/src/validate.integration.spec.ts +40 -35
- package/src/validate.ts +14 -12
- package/esm/api-manager.d.ts +0 -104
- package/esm/api-manager.d.ts.map +0 -1
- package/esm/api-manager.js +0 -179
- package/esm/api-manager.js.map +0 -1
- package/esm/proxy-manager.d.ts +0 -53
- package/esm/proxy-manager.d.ts.map +0 -1
- package/esm/proxy-manager.js +0 -84
- package/esm/proxy-manager.js.map +0 -1
- package/esm/server-manager.d.ts +0 -48
- package/esm/server-manager.d.ts.map +0 -1
- package/esm/server-manager.js +0 -100
- package/esm/server-manager.js.map +0 -1
- package/esm/static-server-manager.d.ts +0 -19
- package/esm/static-server-manager.d.ts.map +0 -1
- package/esm/static-server-manager.js +0 -65
- package/esm/static-server-manager.js.map +0 -1
- package/src/api-manager.ts +0 -304
- package/src/proxy-manager.ts +0 -102
- package/src/server-manager.ts +0 -135
- package/src/static-server-manager.ts +0 -90
|
@@ -1,26 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { defineStore, InMemoryStore, User } from '@furystack/core';
|
|
2
|
+
import { defineDataSet } from '@furystack/repository';
|
|
2
3
|
import { DefaultSession } from '../models/default-session.js';
|
|
3
|
-
import '
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { SessionStore, UserStore } from '../user-store.js';
|
|
5
|
+
/**
|
|
6
|
+
* Mock entity used by endpoint-generator specs.
|
|
7
|
+
*/
|
|
6
8
|
export class MockClass {
|
|
7
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Store token for {@link MockClass}. The default factory throws so each spec
|
|
12
|
+
* explicitly opts into an in-memory backing via `setupContext`.
|
|
13
|
+
*/
|
|
14
|
+
export const MockStore = defineStore({
|
|
15
|
+
name: 'test/MockStore',
|
|
16
|
+
model: MockClass,
|
|
17
|
+
primaryKey: 'id',
|
|
18
|
+
factory: () => {
|
|
19
|
+
throw new Error('MockStore is not configured in this injector');
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Data set token over {@link MockStore}.
|
|
24
|
+
*/
|
|
25
|
+
export const MockDataSet = defineDataSet({
|
|
26
|
+
name: 'test/MockDataSet',
|
|
27
|
+
store: MockStore,
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Binds in-memory implementations of {@link UserStore}, {@link SessionStore}
|
|
31
|
+
* and {@link MockStore} on the provided injector. Endpoint-generator specs
|
|
32
|
+
* and integration tests call this at setup time.
|
|
33
|
+
*/
|
|
8
34
|
export const setupContext = (i) => {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}))
|
|
13
|
-
.addStore(new InMemoryStore({
|
|
14
|
-
model: User,
|
|
15
|
-
primaryKey: 'username',
|
|
16
|
-
}))
|
|
17
|
-
.addStore(new InMemoryStore({
|
|
18
|
-
model: DefaultSession,
|
|
19
|
-
primaryKey: 'sessionId',
|
|
20
|
-
}));
|
|
21
|
-
getRepository(i)
|
|
22
|
-
.createDataSet(MockClass, 'id')
|
|
23
|
-
.createDataSet(User, 'username')
|
|
24
|
-
.createDataSet(DefaultSession, 'sessionId');
|
|
35
|
+
i.bind(UserStore, () => new InMemoryStore({ model: User, primaryKey: 'username' }));
|
|
36
|
+
i.bind(SessionStore, () => new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' }));
|
|
37
|
+
i.bind(MockStore, () => new InMemoryStore({ model: MockClass, primaryKey: 'id' }));
|
|
25
38
|
};
|
|
26
39
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;GAEG;AACH,MAAM,OAAO,SAAS;CAGrB;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;IACnC,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,GAAG,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;CACF,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,SAAS;CACjB,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAW,EAAQ,EAAE;IAChD,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;IACnF,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IACjG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACpF,CAAC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ApiEndpointSchema, RestApi, Schema } from '@furystack/rest';
|
|
2
|
-
import type { RestApiImplementation } from './api-
|
|
2
|
+
import type { RestApiImplementation } from './rest-api-runtime.js';
|
|
3
3
|
export declare const defaultSchema: Schema;
|
|
4
4
|
export declare const getSchemaFromApi: <T extends RestApiImplementation<RestApi>>({ api, name, description, version, }: {
|
|
5
5
|
api: T;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-schema-from-api.d.ts","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,iBAAiB,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"get-schema-from-api.d.ts","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,iBAAiB,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAElE,eAAO,MAAM,aAAa,EAAE,MA2B3B,CAAA;AAcD,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,sCAKxE;IACD,GAAG,EAAE,CAAC,CAAA;IACN,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,KAAG,iBAwBH,CAAA"}
|
|
@@ -42,6 +42,7 @@ export const getSchemaFromApi = ({ api, name = 'FuryStack API', description = 'A
|
|
|
42
42
|
if (!endpoints[methodKey]) {
|
|
43
43
|
endpoints[methodKey] = {};
|
|
44
44
|
}
|
|
45
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- false positive: TS narrows `endpointList` to a union the iterator can't index without this cast
|
|
45
46
|
Object.entries(endpointList).forEach(([url, requestAction]) => {
|
|
46
47
|
if (method && url && requestAction) {
|
|
47
48
|
endpoints[methodKey][url] = getDefinitionFromAction(url, requestAction);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-schema-from-api.js","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,WAAW,EAAE;QACX,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;aACF;YACD,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,kCAAkC;YAC/C,oBAAoB,EAAE,IAAI;SAC3B;KACF;CACF,CAAA;AAED,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAEnC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,MAA0C,EAAyB,EAAE;IAClH,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;QAC/F,UAAU,EAAE,YAAY,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;QACnH,eAAe,EACb,iBAAiB,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK;KAC9G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAA2C,EACzE,GAAG,EACH,IAAI,GAAG,eAAe,EACtB,WAAW,GAAG,uDAAuD,EACrE,OAAO,GAAG,OAAO,GAMlB,EAAqB,EAAE;IACtB,MAAM,SAAS,GAAmC,EAAE,CAAA;IAEpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAG,MAAgB,CAAA;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,YAAkE,CAAC,CAAC,OAAO,CACxF,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE;YACvB,IAAI,MAAM,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;gBACnC,SAAS,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI;QACJ,WAAW;QACX,OAAO;QACP,SAAS;KACV,CAAA;AACH,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"get-schema-from-api.js","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,WAAW,EAAE;QACX,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;aACF;YACD,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,kCAAkC;YAC/C,oBAAoB,EAAE,IAAI;SAC3B;KACF;CACF,CAAA;AAED,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAEnC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,MAA0C,EAAyB,EAAE;IAClH,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;QAC/F,UAAU,EAAE,YAAY,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;QACnH,eAAe,EACb,iBAAiB,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK;KAC9G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAA2C,EACzE,GAAG,EACH,IAAI,GAAG,eAAe,EACtB,WAAW,GAAG,uDAAuD,EACrE,OAAO,GAAG,OAAO,GAMlB,EAAqB,EAAE;IACtB,MAAM,SAAS,GAAmC,EAAE,CAAA;IAEpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAG,MAAgB,CAAA;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,+KAA+K;QAC/K,MAAM,CAAC,OAAO,CAAC,YAAkE,CAAC,CAAC,OAAO,CACxF,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE;YACvB,IAAI,MAAM,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;gBACnC,SAAS,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI;QACJ,WAAW;QACX,OAAO;QACP,SAAS;KACV,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-schema-from-api.spec.js","sourceRoot":"","sources":["../src/get-schema-from-api.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"get-schema-from-api.spec.js","sourceRoot":"","sources":["../src/get-schema-from-api.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,EAAE,UAAU,EAAsB,MAAM,oCAAoC,CAAA;AACnF,OAAO,gBAAgB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,aAAa,GAAuB,KAAK,IAAI,EAAE;IACnD,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG;YACV,GAAG,EAAE;gBACH,UAAU,EAAE,aAAa;aAC1B;SAC4C,CAAA;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE;gBACT,GAAG,EAAE;oBACH,UAAU,EAAE;wBACV,eAAe,EAAE,KAAK;wBACtB,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,aAAa;wBACrB,UAAU,EAAE,SAAS;qBACtB;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,GAAG,GAAG;YACV,GAAG,EAAE;gBACH,iBAAiB,EAAE,QAAQ,CAAC;oBAC1B,MAAM,EAAE,gBAAgB;oBACxB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC9C;SAC4C,CAAA;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE;gBACT,GAAG,EAAE;oBACH,iBAAiB,EAAE;wBACjB,eAAe,EAAE,KAAK;wBACtB,IAAI,EAAE,iBAAiB;wBACvB,MAAM,EAAE,gBAAgB;wBACxB,UAAU,EAAE,eAAe;qBAC5B;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/esm/helpers.d.ts
CHANGED
|
@@ -1,105 +1,71 @@
|
|
|
1
|
-
import type { User } from '@furystack/core';
|
|
2
1
|
import type { Injector } from '@furystack/inject';
|
|
3
2
|
import type { RestApi } from '@furystack/rest';
|
|
4
|
-
import type { ImplementApiOptions } from './api-manager.js';
|
|
5
3
|
import { HttpAuthenticationSettings } from './http-authentication-settings.js';
|
|
6
|
-
import type
|
|
7
|
-
import type {
|
|
8
|
-
import type
|
|
4
|
+
import { type ServerApi } from './http-server-pool.js';
|
|
5
|
+
import type { CorsOptions } from './models/cors-options.js';
|
|
6
|
+
import { type ProxyOptions } from './proxy-runtime.js';
|
|
7
|
+
import { type RestApiImplementation } from './rest-api-runtime.js';
|
|
8
|
+
import { type StaticServerOptions } from './static-site-runtime.js';
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* Options accepted by {@link useRestService}. Cross-cutting concerns
|
|
11
|
+
* (authentication, telemetry) have moved to DI tokens — they are not
|
|
12
|
+
* configured here.
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
export interface ImplementApiOptions<T extends RestApi> {
|
|
15
|
+
/** The structure of the implemented API. */
|
|
16
|
+
api: RestApiImplementation<T>;
|
|
17
|
+
/** Injector used to resolve request-scoped services and to acquire the HTTP server. */
|
|
18
|
+
injector: Injector;
|
|
19
|
+
/** Optional host name; defaults to `localhost`. */
|
|
20
|
+
hostName?: string;
|
|
21
|
+
/** Root path prepended to every API route. */
|
|
22
|
+
root: string;
|
|
23
|
+
/** Port the API should listen on. */
|
|
24
|
+
port: number;
|
|
25
|
+
/** Optional CORS configuration applied to every matched request. */
|
|
26
|
+
cors?: CorsOptions;
|
|
27
|
+
/** Optional query-string deserialiser override. */
|
|
28
|
+
deserializeQueryParams?: (param: string) => Record<string, unknown>;
|
|
29
|
+
/** When `true`, adds `GET /schema` and `GET /openapi.json` endpoints. */
|
|
30
|
+
enableGetSchema?: boolean;
|
|
31
|
+
/** OpenAPI display name. */
|
|
32
|
+
name?: string;
|
|
33
|
+
/** OpenAPI description. */
|
|
34
|
+
description?: string;
|
|
35
|
+
/** OpenAPI version. */
|
|
36
|
+
version?: string;
|
|
37
|
+
}
|
|
18
38
|
/**
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
39
|
+
* Acquires a pooled HTTP server (creating one if needed), compiles `api`
|
|
40
|
+
* and attaches a {@link ServerApi} that dispatches matching requests.
|
|
41
|
+
* Multiple `useRestService` calls on the same `port` + `hostName` share a
|
|
42
|
+
* single underlying HTTP server.
|
|
43
|
+
*/
|
|
44
|
+
export declare const useRestService: <T extends RestApi>(options: ImplementApiOptions<T>) => Promise<ServerApi>;
|
|
45
|
+
/**
|
|
46
|
+
* Installs HTTP authentication on the given injector: builds the provider
|
|
47
|
+
* chain (Basic + Cookie by default), appends any caller-provided providers
|
|
48
|
+
* and rebinds {@link HttpAuthenticationSettings}.
|
|
23
49
|
*
|
|
24
|
-
* @
|
|
25
|
-
*
|
|
50
|
+
* Prerequisite: {@link UserStore} and {@link SessionStore} must be bound to
|
|
51
|
+
* persistent implementations before calling this helper, since the Basic
|
|
52
|
+
* and Cookie providers need to read users and sessions immediately.
|
|
26
53
|
*/
|
|
27
|
-
export declare const useHttpAuthentication:
|
|
54
|
+
export declare const useHttpAuthentication: (injector: Injector, overrides?: Partial<HttpAuthenticationSettings>) => void;
|
|
28
55
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* @param options.injector The Injector instance
|
|
32
|
-
* @param options.settings Settings for the static file server
|
|
33
|
-
* @returns a promise that resolves when the server is ready
|
|
56
|
+
* Attaches a static-file {@link ServerApi} to the pooled HTTP server
|
|
57
|
+
* identified by `options.port`/`options.hostName`.
|
|
34
58
|
*/
|
|
35
59
|
export declare const useStaticFiles: (options: {
|
|
36
60
|
injector: Injector;
|
|
37
|
-
} & StaticServerOptions) => Promise<
|
|
61
|
+
} & StaticServerOptions) => Promise<ServerApi>;
|
|
38
62
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* and emits 'onProxyFailed' events for monitoring.
|
|
44
|
-
*
|
|
45
|
-
* WebSocket connections can also be proxied by setting `enableWebsockets: true`, allowing
|
|
46
|
-
* bidirectional real-time communication through the proxy.
|
|
47
|
-
*
|
|
48
|
-
* @param options The settings for the proxy server
|
|
49
|
-
* @param options.injector The Injector instance
|
|
50
|
-
* @param options.sourceBaseUrl The base URL path to match for proxying (e.g., '/api', '/old').
|
|
51
|
-
* Can be specified with or without a trailing slash.
|
|
52
|
-
* @param options.targetBaseUrl The target server URL (must be a valid HTTP/HTTPS URL)
|
|
53
|
-
* @param options.pathRewrite Optional function to rewrite the path before forwarding.
|
|
54
|
-
* Receives the path after sourceBaseUrl, including leading slash and query string.
|
|
55
|
-
* Example: for 'GET /api/users?active=true' with sourceBaseUrl='/api',
|
|
56
|
-
* pathRewrite receives '/users?active=true'
|
|
57
|
-
* @param options.sourceHostName The hostname for the source server (optional, defaults to all interfaces)
|
|
58
|
-
* @param options.sourcePort The port for the source server
|
|
59
|
-
* @param options.headers Optional function to transform request headers.
|
|
60
|
-
* **Note**: Receives headers AFTER filtering hop-by-hop headers
|
|
61
|
-
* (Connection, Keep-Alive, Transfer-Encoding, Upgrade, etc.) for security
|
|
62
|
-
* and protocol compliance. The proxy automatically adds X-Forwarded-* headers.
|
|
63
|
-
* This transformation applies to both HTTP and WebSocket requests.
|
|
64
|
-
* @param options.cookies Optional function to transform request cookies (array of cookie strings)
|
|
65
|
-
* @param options.responseCookies Optional function to transform response Set-Cookie headers
|
|
66
|
-
* @param options.timeout Optional timeout in milliseconds for proxy requests (default: 30000).
|
|
67
|
-
* If exceeded, the request is aborted and 502 is returned.
|
|
68
|
-
* Applies to both HTTP and WebSocket upgrade requests.
|
|
69
|
-
* @param options.enableWebsockets Optional flag to enable WebSocket proxying (default: false).
|
|
70
|
-
* When enabled, WebSocket upgrade requests will be forwarded to the target.
|
|
71
|
-
* @returns a promise that resolves when the proxy is set up
|
|
72
|
-
* @example
|
|
73
|
-
* ```ts
|
|
74
|
-
* // Basic HTTP proxy with timeout
|
|
75
|
-
* await useProxy({
|
|
76
|
-
* injector,
|
|
77
|
-
* sourceBaseUrl: '/api',
|
|
78
|
-
* targetBaseUrl: 'https://api.example.com',
|
|
79
|
-
* sourcePort: 3000,
|
|
80
|
-
* timeout: 5000,
|
|
81
|
-
* })
|
|
82
|
-
*
|
|
83
|
-
* // Proxy with WebSocket support
|
|
84
|
-
* await useProxy({
|
|
85
|
-
* injector,
|
|
86
|
-
* sourceBaseUrl: '/ws',
|
|
87
|
-
* targetBaseUrl: 'https://ws.example.com',
|
|
88
|
-
* sourcePort: 3000,
|
|
89
|
-
* enableWebsockets: true,
|
|
90
|
-
* })
|
|
91
|
-
*
|
|
92
|
-
* // Proxy with error monitoring (HTTP and WebSocket)
|
|
93
|
-
* const proxyManager = injector.getInstance(ProxyManager)
|
|
94
|
-
* proxyManager.subscribe('onProxyFailed', ({ from, to, error }) => {
|
|
95
|
-
* console.error(`HTTP Proxy failed: ${from} -> ${to}`, error)
|
|
96
|
-
* })
|
|
97
|
-
* proxyManager.subscribe('onWebSocketProxyFailed', ({ from, to, error }) => {
|
|
98
|
-
* console.error(`WebSocket Proxy failed: ${from} -> ${to}`, error)
|
|
99
|
-
* })
|
|
100
|
-
* ```
|
|
63
|
+
* Attaches a proxy {@link ServerApi} that forwards HTTP (and optionally
|
|
64
|
+
* WebSocket) traffic from `options.sourceBaseUrl` to `options.targetBaseUrl`.
|
|
65
|
+
* Emits `onProxyFailed` and `onWebSocketProxyFailed` events into the shared
|
|
66
|
+
* {@link ServerTelemetryToken} — subscribe there for observability.
|
|
101
67
|
*/
|
|
102
68
|
export declare const useProxy: (options: {
|
|
103
69
|
injector: Injector;
|
|
104
|
-
} & ProxyOptions) => Promise<
|
|
70
|
+
} & ProxyOptions) => Promise<ServerApi>;
|
|
105
71
|
//# sourceMappingURL=helpers.d.ts.map
|
package/esm/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAS9C,OAAO,EAAqC,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AACjH,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAgC,KAAK,qBAAqB,EAAqB,MAAM,uBAAuB,CAAA;AAEnH,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAG7F;;;;GAIG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,OAAO;IACpD,4CAA4C;IAC5C,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC7B,uFAAuF;IACvF,QAAQ,EAAE,QAAQ,CAAA;IAClB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,mDAAmD;IACnD,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnE,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,OAAO,EAAE,SAAS,mBAAmB,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,SAAS,CAwD1G,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,QAAQ,EAAE,YAAY,OAAO,CAAC,0BAA0B,CAAC,KAAG,IA+B3G,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,mBAAmB,KAAG,OAAO,CAAC,SAAS,CAO7G,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,YAAY,KAAG,OAAO,CAAC,SAAS,CAQhG,CAAA"}
|
package/esm/helpers.js
CHANGED
|
@@ -1,119 +1,117 @@
|
|
|
1
1
|
import { useSystemIdentityContext } from '@furystack/core';
|
|
2
2
|
import { PasswordAuthenticator } from '@furystack/security';
|
|
3
|
-
import {
|
|
3
|
+
import { PathHelper } from '@furystack/utils';
|
|
4
4
|
import { createBasicAuthProvider } from './authentication-providers/basic-auth-provider.js';
|
|
5
5
|
import { createCookieAuthProvider } from './authentication-providers/cookie-auth-provider.js';
|
|
6
6
|
import { authenticateUserWithDataSet, findSessionById, findUserByName } from './authentication-providers/helpers.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { CreateGetOpenApiDocumentAction } from './endpoint-generators/create-get-openapi-document-action.js';
|
|
8
|
+
import { CreateGetSchemaAction } from './endpoint-generators/create-get-schema-action.js';
|
|
9
|
+
import { defaultHttpAuthenticationSettings, HttpAuthenticationSettings } from './http-authentication-settings.js';
|
|
10
|
+
import { HttpServerPoolToken } from './http-server-pool.js';
|
|
11
|
+
import { HttpUserContext } from './http-user-context.js';
|
|
12
|
+
import { buildProxyServerApi } from './proxy-runtime.js';
|
|
13
|
+
import { compileApi, onRestApiMessage, shouldExecRequest } from './rest-api-runtime.js';
|
|
14
|
+
import { ServerTelemetryToken } from './server-telemetry.js';
|
|
15
|
+
import { buildStaticSiteServerApi } from './static-site-runtime.js';
|
|
10
16
|
/**
|
|
11
|
-
*
|
|
12
|
-
* @
|
|
13
|
-
*
|
|
17
|
+
* Acquires a pooled HTTP server (creating one if needed), compiles `api`
|
|
18
|
+
* and attaches a {@link ServerApi} that dispatches matching requests.
|
|
19
|
+
* Multiple `useRestService` calls on the same `port` + `hostName` share a
|
|
20
|
+
* single underlying HTTP server.
|
|
14
21
|
*/
|
|
15
|
-
export const useRestService = async (
|
|
22
|
+
export const useRestService = async (options) => {
|
|
23
|
+
const { injector, api, hostName, port, root, cors, deserializeQueryParams, enableGetSchema, name, description, version, } = options;
|
|
24
|
+
const extendedApi = enableGetSchema
|
|
25
|
+
? {
|
|
26
|
+
...api,
|
|
27
|
+
GET: {
|
|
28
|
+
...api.GET,
|
|
29
|
+
'/schema': CreateGetSchemaAction(api, name, description, version),
|
|
30
|
+
'/openapi.json': CreateGetOpenApiDocumentAction(api, name, description, version),
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
: api;
|
|
34
|
+
const supportedMethods = Object.keys(extendedApi);
|
|
35
|
+
const rootApiPath = PathHelper.normalize(root);
|
|
36
|
+
const compiledApi = compileApi(extendedApi, root);
|
|
37
|
+
const serverApi = {
|
|
38
|
+
shouldExec: ({ req }) => shouldExecRequest({
|
|
39
|
+
method: req.method?.toUpperCase(),
|
|
40
|
+
url: PathHelper.normalize(req.url || ''),
|
|
41
|
+
rootApiPath,
|
|
42
|
+
supportedMethods,
|
|
43
|
+
}),
|
|
44
|
+
onRequest: (msg) => onRestApiMessage({
|
|
45
|
+
...msg,
|
|
46
|
+
compiledApi,
|
|
47
|
+
rootApiPath,
|
|
48
|
+
port,
|
|
49
|
+
supportedMethods,
|
|
50
|
+
cors,
|
|
51
|
+
injector,
|
|
52
|
+
hostName,
|
|
53
|
+
deserializeQueryParams,
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
const pool = injector.get(HttpServerPoolToken);
|
|
57
|
+
const record = await pool.acquire({ port, hostName });
|
|
58
|
+
record.apis.push(serverApi);
|
|
59
|
+
return serverApi;
|
|
60
|
+
};
|
|
16
61
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* then appends any custom providers passed via settings.
|
|
62
|
+
* Installs HTTP authentication on the given injector: builds the provider
|
|
63
|
+
* chain (Basic + Cookie by default), appends any caller-provided providers
|
|
64
|
+
* and rebinds {@link HttpAuthenticationSettings}.
|
|
21
65
|
*
|
|
22
|
-
* @
|
|
23
|
-
*
|
|
66
|
+
* Prerequisite: {@link UserStore} and {@link SessionStore} must be bound to
|
|
67
|
+
* persistent implementations before calling this helper, since the Basic
|
|
68
|
+
* and Cookie providers need to read users and sessions immediately.
|
|
24
69
|
*/
|
|
25
|
-
export const useHttpAuthentication = (injector,
|
|
26
|
-
const mergedSettings =
|
|
70
|
+
export const useHttpAuthentication = (injector, overrides) => {
|
|
71
|
+
const mergedSettings = {
|
|
72
|
+
...defaultHttpAuthenticationSettings(),
|
|
73
|
+
...overrides,
|
|
74
|
+
};
|
|
27
75
|
const systemInjector = useSystemIdentityContext({ injector, username: 'useHttpAuthentication' });
|
|
28
|
-
const passwordAuthenticator = injector.
|
|
29
|
-
const userDataSet = mergedSettings.
|
|
30
|
-
const sessionDataSet = mergedSettings.
|
|
76
|
+
const passwordAuthenticator = injector.get(PasswordAuthenticator);
|
|
77
|
+
const userDataSet = systemInjector.get(mergedSettings.userDataSet);
|
|
78
|
+
const sessionDataSet = systemInjector.get(mergedSettings.sessionDataSet);
|
|
31
79
|
const providers = [];
|
|
32
80
|
if (mergedSettings.enableBasicAuth) {
|
|
33
81
|
providers.push(createBasicAuthProvider((username, password) => authenticateUserWithDataSet(passwordAuthenticator, userDataSet, systemInjector, username, password)));
|
|
34
82
|
}
|
|
35
83
|
providers.push(createCookieAuthProvider(mergedSettings.cookieName, (sessionId) => findSessionById(sessionDataSet, systemInjector, sessionId), (username) => findUserByName(userDataSet, systemInjector, username)));
|
|
36
|
-
providers.push(...(
|
|
84
|
+
providers.push(...(overrides?.authenticationProviders ?? []));
|
|
37
85
|
mergedSettings.authenticationProviders = providers;
|
|
38
|
-
injector.
|
|
86
|
+
injector.bind(HttpAuthenticationSettings, () => mergedSettings);
|
|
87
|
+
injector.invalidate(HttpAuthenticationSettings);
|
|
88
|
+
injector.invalidate(HttpUserContext);
|
|
39
89
|
};
|
|
40
90
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* @param options.injector The Injector instance
|
|
44
|
-
* @param options.settings Settings for the static file server
|
|
45
|
-
* @returns a promise that resolves when the server is ready
|
|
91
|
+
* Attaches a static-file {@link ServerApi} to the pooled HTTP server
|
|
92
|
+
* identified by `options.port`/`options.hostName`.
|
|
46
93
|
*/
|
|
47
|
-
export const useStaticFiles = (options) => {
|
|
94
|
+
export const useStaticFiles = async (options) => {
|
|
48
95
|
const { injector, ...settings } = options;
|
|
49
|
-
|
|
96
|
+
const pool = injector.get(HttpServerPoolToken);
|
|
97
|
+
const record = await pool.acquire({ port: settings.port, hostName: settings.hostName });
|
|
98
|
+
const serverApi = buildStaticSiteServerApi(settings);
|
|
99
|
+
record.apis.push(serverApi);
|
|
100
|
+
return serverApi;
|
|
50
101
|
};
|
|
51
102
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* and emits 'onProxyFailed' events for monitoring.
|
|
57
|
-
*
|
|
58
|
-
* WebSocket connections can also be proxied by setting `enableWebsockets: true`, allowing
|
|
59
|
-
* bidirectional real-time communication through the proxy.
|
|
60
|
-
*
|
|
61
|
-
* @param options The settings for the proxy server
|
|
62
|
-
* @param options.injector The Injector instance
|
|
63
|
-
* @param options.sourceBaseUrl The base URL path to match for proxying (e.g., '/api', '/old').
|
|
64
|
-
* Can be specified with or without a trailing slash.
|
|
65
|
-
* @param options.targetBaseUrl The target server URL (must be a valid HTTP/HTTPS URL)
|
|
66
|
-
* @param options.pathRewrite Optional function to rewrite the path before forwarding.
|
|
67
|
-
* Receives the path after sourceBaseUrl, including leading slash and query string.
|
|
68
|
-
* Example: for 'GET /api/users?active=true' with sourceBaseUrl='/api',
|
|
69
|
-
* pathRewrite receives '/users?active=true'
|
|
70
|
-
* @param options.sourceHostName The hostname for the source server (optional, defaults to all interfaces)
|
|
71
|
-
* @param options.sourcePort The port for the source server
|
|
72
|
-
* @param options.headers Optional function to transform request headers.
|
|
73
|
-
* **Note**: Receives headers AFTER filtering hop-by-hop headers
|
|
74
|
-
* (Connection, Keep-Alive, Transfer-Encoding, Upgrade, etc.) for security
|
|
75
|
-
* and protocol compliance. The proxy automatically adds X-Forwarded-* headers.
|
|
76
|
-
* This transformation applies to both HTTP and WebSocket requests.
|
|
77
|
-
* @param options.cookies Optional function to transform request cookies (array of cookie strings)
|
|
78
|
-
* @param options.responseCookies Optional function to transform response Set-Cookie headers
|
|
79
|
-
* @param options.timeout Optional timeout in milliseconds for proxy requests (default: 30000).
|
|
80
|
-
* If exceeded, the request is aborted and 502 is returned.
|
|
81
|
-
* Applies to both HTTP and WebSocket upgrade requests.
|
|
82
|
-
* @param options.enableWebsockets Optional flag to enable WebSocket proxying (default: false).
|
|
83
|
-
* When enabled, WebSocket upgrade requests will be forwarded to the target.
|
|
84
|
-
* @returns a promise that resolves when the proxy is set up
|
|
85
|
-
* @example
|
|
86
|
-
* ```ts
|
|
87
|
-
* // Basic HTTP proxy with timeout
|
|
88
|
-
* await useProxy({
|
|
89
|
-
* injector,
|
|
90
|
-
* sourceBaseUrl: '/api',
|
|
91
|
-
* targetBaseUrl: 'https://api.example.com',
|
|
92
|
-
* sourcePort: 3000,
|
|
93
|
-
* timeout: 5000,
|
|
94
|
-
* })
|
|
95
|
-
*
|
|
96
|
-
* // Proxy with WebSocket support
|
|
97
|
-
* await useProxy({
|
|
98
|
-
* injector,
|
|
99
|
-
* sourceBaseUrl: '/ws',
|
|
100
|
-
* targetBaseUrl: 'https://ws.example.com',
|
|
101
|
-
* sourcePort: 3000,
|
|
102
|
-
* enableWebsockets: true,
|
|
103
|
-
* })
|
|
104
|
-
*
|
|
105
|
-
* // Proxy with error monitoring (HTTP and WebSocket)
|
|
106
|
-
* const proxyManager = injector.getInstance(ProxyManager)
|
|
107
|
-
* proxyManager.subscribe('onProxyFailed', ({ from, to, error }) => {
|
|
108
|
-
* console.error(`HTTP Proxy failed: ${from} -> ${to}`, error)
|
|
109
|
-
* })
|
|
110
|
-
* proxyManager.subscribe('onWebSocketProxyFailed', ({ from, to, error }) => {
|
|
111
|
-
* console.error(`WebSocket Proxy failed: ${from} -> ${to}`, error)
|
|
112
|
-
* })
|
|
113
|
-
* ```
|
|
103
|
+
* Attaches a proxy {@link ServerApi} that forwards HTTP (and optionally
|
|
104
|
+
* WebSocket) traffic from `options.sourceBaseUrl` to `options.targetBaseUrl`.
|
|
105
|
+
* Emits `onProxyFailed` and `onWebSocketProxyFailed` events into the shared
|
|
106
|
+
* {@link ServerTelemetryToken} — subscribe there for observability.
|
|
114
107
|
*/
|
|
115
|
-
export const useProxy = (options) => {
|
|
108
|
+
export const useProxy = async (options) => {
|
|
116
109
|
const { injector, ...settings } = options;
|
|
117
|
-
|
|
110
|
+
const telemetry = injector.get(ServerTelemetryToken);
|
|
111
|
+
const pool = injector.get(HttpServerPoolToken);
|
|
112
|
+
const record = await pool.acquire({ port: settings.sourcePort, hostName: settings.sourceHostName });
|
|
113
|
+
const serverApi = buildProxyServerApi(settings, telemetry);
|
|
114
|
+
record.apis.push(serverApi);
|
|
115
|
+
return serverApi;
|
|
118
116
|
};
|
|
119
117
|
//# sourceMappingURL=helpers.js.map
|
package/esm/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAG1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAA;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAA;AAC7F,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACpH,OAAO,EAAE,8BAA8B,EAAE,MAAM,6DAA6D,CAAA;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,EAAE,iCAAiC,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AACjH,OAAO,EAAE,mBAAmB,EAAkB,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAA8B,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,wBAAwB,EAA4B,MAAM,0BAA0B,CAAA;AAiC7F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAqB,OAA+B,EAAsB,EAAE;IAC7G,MAAM,EACJ,QAAQ,EACR,GAAG,EACH,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,sBAAsB,EACtB,eAAe,EACf,IAAI,EACJ,WAAW,EACX,OAAO,GACR,GAAG,OAAO,CAAA;IAEX,MAAM,WAAW,GAAe,eAAe;QAC7C,CAAC,CAAC;YACE,GAAG,GAAG;YACN,GAAG,EAAE;gBACH,GAAG,GAAG,CAAC,GAAG;gBACV,SAAS,EAAE,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC;gBACjE,eAAe,EAAE,8BAA8B,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC;aACjF;SACF;QACH,CAAC,CAAC,GAAG,CAAA;IAEP,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IAEjD,MAAM,SAAS,GAAc;QAC3B,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CACtB,iBAAiB,CAAC;YAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,EAAW;YAC1C,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;YACxC,WAAW;YACX,gBAAgB;SACjB,CAAC;QACJ,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CACjB,gBAAgB,CAAC;YACf,GAAG,GAAG;YACN,WAAW;YACX,WAAW;YACX,IAAI;YACJ,gBAAgB;YAChB,IAAI;YACJ,QAAQ;YACR,QAAQ;YACR,sBAAsB;SACvB,CAAC;KACL,CAAA;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;IACrD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3B,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAkB,EAAE,SAA+C,EAAQ,EAAE;IACjH,MAAM,cAAc,GAA+B;QACjD,GAAG,iCAAiC,EAAE;QACtC,GAAG,SAAS;KACb,CAAA;IACD,MAAM,cAAc,GAAG,wBAAwB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAA;IAChG,MAAM,qBAAqB,GAAG,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;IACjE,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;IAClE,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;IAExE,MAAM,SAAS,GAA6B,EAAE,CAAA;IAC9C,IAAI,cAAc,CAAC,eAAe,EAAE,CAAC;QACnC,SAAS,CAAC,IAAI,CACZ,uBAAuB,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAC7C,2BAA2B,CAAC,qBAAqB,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CACpG,CACF,CAAA;IACH,CAAC;IACD,SAAS,CAAC,IAAI,CACZ,wBAAwB,CACtB,cAAc,CAAC,UAAU,EACzB,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,CAAC,EACzE,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,CACpE,CACF,CAAA;IACD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,uBAAuB,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7D,cAAc,CAAC,uBAAuB,GAAG,SAAS,CAAA;IAElD,QAAQ,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,CAAA;IAC/D,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAA;IAC/C,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;AACtC,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,OAAqD,EAAsB,EAAE;IAChH,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;IACvF,MAAM,SAAS,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IACpD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3B,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,OAA8C,EAAsB,EAAE;IACnG,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IACzC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACpD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAA;IAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAA;IACnG,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3B,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA"}
|
package/esm/helpers.spec.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.spec.d.ts","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"helpers.spec.d.ts","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AA4G3C,YAAY,EAAE,IAAI,EAAE,CAAA"}
|