@keetanetwork/anchor 0.0.23 → 0.0.25
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/lib/certificates.d.ts +1 -4
- package/lib/certificates.d.ts.map +1 -1
- package/lib/certificates.js +14 -148
- package/lib/certificates.js.map +1 -1
- package/lib/error.d.ts.map +1 -1
- package/lib/error.js +2 -1
- package/lib/error.js.map +1 -1
- package/lib/http-server/common.d.ts +11 -0
- package/lib/http-server/common.d.ts.map +1 -1
- package/lib/http-server/common.js +110 -1
- package/lib/http-server/common.js.map +1 -1
- package/lib/http-server/index.js +2 -2
- package/lib/http-server/index.js.map +1 -1
- package/lib/resolver.d.ts +28 -8
- package/lib/resolver.d.ts.map +1 -1
- package/lib/resolver.js +543 -302
- package/lib/resolver.js.map +1 -1
- package/lib/utils/asn1.d.ts +13 -0
- package/lib/utils/asn1.d.ts.map +1 -1
- package/lib/utils/asn1.js +1973 -0
- package/lib/utils/asn1.js.map +1 -1
- package/lib/utils/external.d.ts.map +1 -1
- package/lib/utils/external.js +2 -9
- package/lib/utils/external.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/services/asset-movement/client.d.ts +21 -11
- package/services/asset-movement/client.d.ts.map +1 -1
- package/services/asset-movement/client.js +396 -89
- package/services/asset-movement/client.js.map +1 -1
- package/services/asset-movement/common.d.ts +410 -35
- package/services/asset-movement/common.d.ts.map +1 -1
- package/services/asset-movement/common.js +10176 -1492
- package/services/asset-movement/common.js.map +1 -1
- package/services/asset-movement/server.d.ts +25 -14
- package/services/asset-movement/server.d.ts.map +1 -1
- package/services/asset-movement/server.js +247 -75
- package/services/asset-movement/server.js.map +1 -1
- package/services/fx/common.js +3 -3
- package/services/fx/server.d.ts +1 -1
- package/services/fx/server.d.ts.map +1 -1
- package/services/fx/server.js +1 -1
- package/services/fx/server.js.map +1 -1
- package/services/kyc/common.generated.js +2 -2
- package/services/kyc/iso20022.generated.js +54 -54
- package/services/kyc/iso20022.generated.js.map +1 -1
- package/services/kyc/server.d.ts +1 -1
- package/services/kyc/server.d.ts.map +1 -1
- package/services/kyc/server.js +1 -1
- package/services/kyc/server.js.map +1 -1
- package/services/kyc/utils/generate-kyc-schema.js +6 -34
- package/services/kyc/utils/generate-kyc-schema.js.map +1 -1
|
@@ -1,2 +1,111 @@
|
|
|
1
|
-
|
|
1
|
+
import * as __typia_transform__assertGuard from "typia/lib/internal/_assertGuard.js";
|
|
2
|
+
import * as __typia_transform__accessExpressionAsString from "typia/lib/internal/_accessExpressionAsString.js";
|
|
3
|
+
import { KeetaAnchorUserError } from "../error.js";
|
|
4
|
+
import { KeetaNet } from "../../client/index.js";
|
|
5
|
+
import { createAssertEquals } from "typia";
|
|
6
|
+
export const assertHTTPSignedField = (() => { const _io0 = (input, _exceptionable = true) => "string" === typeof input.nonce && "string" === typeof input.timestamp && "string" === typeof input.signature && (3 === Object.keys(input).length || Object.keys(input).every(key => {
|
|
7
|
+
if (["nonce", "timestamp", "signature"].some(prop => key === prop))
|
|
8
|
+
return true;
|
|
9
|
+
const value = input[key];
|
|
10
|
+
if (undefined === value)
|
|
11
|
+
return true;
|
|
12
|
+
return false;
|
|
13
|
+
})); const _ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input.nonce || __typia_transform__assertGuard._assertGuard(_exceptionable, {
|
|
14
|
+
method: "createAssertEquals",
|
|
15
|
+
path: _path + ".nonce",
|
|
16
|
+
expected: "string",
|
|
17
|
+
value: input.nonce
|
|
18
|
+
}, _errorFactory)) && ("string" === typeof input.timestamp || __typia_transform__assertGuard._assertGuard(_exceptionable, {
|
|
19
|
+
method: "createAssertEquals",
|
|
20
|
+
path: _path + ".timestamp",
|
|
21
|
+
expected: "string",
|
|
22
|
+
value: input.timestamp
|
|
23
|
+
}, _errorFactory)) && ("string" === typeof input.signature || __typia_transform__assertGuard._assertGuard(_exceptionable, {
|
|
24
|
+
method: "createAssertEquals",
|
|
25
|
+
path: _path + ".signature",
|
|
26
|
+
expected: "string",
|
|
27
|
+
value: input.signature
|
|
28
|
+
}, _errorFactory)) && (3 === Object.keys(input).length || (false === _exceptionable || Object.keys(input).every(key => {
|
|
29
|
+
if (["nonce", "timestamp", "signature"].some(prop => key === prop))
|
|
30
|
+
return true;
|
|
31
|
+
const value = input[key];
|
|
32
|
+
if (undefined === value)
|
|
33
|
+
return true;
|
|
34
|
+
return __typia_transform__assertGuard._assertGuard(_exceptionable, {
|
|
35
|
+
method: "createAssertEquals",
|
|
36
|
+
path: _path + __typia_transform__accessExpressionAsString._accessExpressionAsString(key),
|
|
37
|
+
expected: "undefined",
|
|
38
|
+
value: value
|
|
39
|
+
}, _errorFactory);
|
|
40
|
+
}))); const __is = (input, _exceptionable = true) => "object" === typeof input && null !== input && _io0(input, true); let _errorFactory; return (input, errorFactory) => {
|
|
41
|
+
if (false === __is(input)) {
|
|
42
|
+
_errorFactory = errorFactory;
|
|
43
|
+
((input, _path, _exceptionable = true) => ("object" === typeof input && null !== input || __typia_transform__assertGuard._assertGuard(true, {
|
|
44
|
+
method: "createAssertEquals",
|
|
45
|
+
path: _path + "",
|
|
46
|
+
expected: "HTTPSignedField",
|
|
47
|
+
value: input
|
|
48
|
+
}, _errorFactory)) && _ao0(input, _path + "", true) || __typia_transform__assertGuard._assertGuard(true, {
|
|
49
|
+
method: "createAssertEquals",
|
|
50
|
+
path: _path + "",
|
|
51
|
+
expected: "HTTPSignedField",
|
|
52
|
+
value: input
|
|
53
|
+
}, _errorFactory))(input, "$input", true);
|
|
54
|
+
}
|
|
55
|
+
return input;
|
|
56
|
+
}; })();
|
|
57
|
+
export function addSignatureToURL(input, data) {
|
|
58
|
+
let url;
|
|
59
|
+
if (typeof input === 'string') {
|
|
60
|
+
url = new URL(input);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
url = new URL(input.toString());
|
|
64
|
+
}
|
|
65
|
+
for (const key of ['nonce', 'timestamp', 'signature']) {
|
|
66
|
+
const searchKey = `signed.${key}`;
|
|
67
|
+
if (url.searchParams.has(searchKey)) {
|
|
68
|
+
throw (new KeetaAnchorUserError(`URL already has signed field parameter: ${searchKey}`));
|
|
69
|
+
}
|
|
70
|
+
url.searchParams.set(`signed.${key}`, data.signedField[key]);
|
|
71
|
+
}
|
|
72
|
+
url.searchParams.set('account', data.account.publicKeyString.get());
|
|
73
|
+
return (url);
|
|
74
|
+
}
|
|
75
|
+
export function parseSignatureFromURL(input) {
|
|
76
|
+
let url;
|
|
77
|
+
if (typeof input === 'string') {
|
|
78
|
+
url = new URL(input);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
url = new URL(input.toString());
|
|
82
|
+
}
|
|
83
|
+
const retVal = {};
|
|
84
|
+
const signedField = (() => {
|
|
85
|
+
const nonce = url.searchParams.get('signed.nonce');
|
|
86
|
+
const timestamp = url.searchParams.get('signed.timestamp');
|
|
87
|
+
const signature = url.searchParams.get('signed.signature');
|
|
88
|
+
if (!nonce && !timestamp && !signature) {
|
|
89
|
+
return (undefined);
|
|
90
|
+
}
|
|
91
|
+
if (!nonce || !timestamp || !signature) {
|
|
92
|
+
throw (new KeetaAnchorUserError('Incomplete signature fields in URL'));
|
|
93
|
+
}
|
|
94
|
+
return ({ nonce, timestamp, signature });
|
|
95
|
+
})();
|
|
96
|
+
if (signedField) {
|
|
97
|
+
retVal.signedField = signedField;
|
|
98
|
+
}
|
|
99
|
+
const account = (() => {
|
|
100
|
+
const accountParam = url.searchParams.get('account');
|
|
101
|
+
if (!accountParam) {
|
|
102
|
+
return (undefined);
|
|
103
|
+
}
|
|
104
|
+
return (KeetaNet.lib.Account.fromPublicKeyString(accountParam).assertAccount());
|
|
105
|
+
})();
|
|
106
|
+
if (account) {
|
|
107
|
+
retVal.account = account;
|
|
108
|
+
}
|
|
109
|
+
return (retVal);
|
|
110
|
+
}
|
|
2
111
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/lib/http-server/common.ts"],"names":[],"mappings":"","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/lib/http-server/common.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Account } from \"@keetanetwork/keetanet-client/lib/account.js\";\nimport { KeetaAnchorUserError } from \"../error.js\";\nimport { KeetaNet } from \"../../client/index.js\";\nimport { createAssertEquals } from \"typia\";\n\nexport type ExtractOk<T> = Omit<Extract<T, { ok: true }>, 'ok'>;\n\nexport interface HTTPSignedField {\n\tnonce: string;\n\t/* Date and time of the request in ISO 8601 format */\n\ttimestamp: string;\n\t/* Signature of the account public key and the nonce as an ASN.1 Sequence, Base64 DER */\n\tsignature: string;\n}\n\nexport const assertHTTPSignedField: (input: unknown) => HTTPSignedField = createAssertEquals<HTTPSignedField>();\n\nexport interface HTTPSignedFieldURLParameters {\n\tsignedField: HTTPSignedField;\n\taccount: Account;\n}\n\nexport function addSignatureToURL(input: URL | string, data: HTTPSignedFieldURLParameters): URL {\n\tlet url: URL;\n\n\tif (typeof input === 'string') {\n\t\turl = new URL(input);\n\t} else {\n\t\turl = new URL(input.toString());\n\t}\n\n\tfor (const key of [ 'nonce', 'timestamp', 'signature' ] as const) {\n\t\tconst searchKey = `signed.${key}`;\n\n\t\tif (url.searchParams.has(searchKey)) {\n\t\t\tthrow(new KeetaAnchorUserError(`URL already has signed field parameter: ${searchKey}`));\n\t\t}\n\n\t\turl.searchParams.set(`signed.${key}`, data.signedField[key]);\n\t}\n\n\turl.searchParams.set('account', data.account.publicKeyString.get());\n\n\treturn(url);\n}\n\nexport function parseSignatureFromURL(input: URL | string): Partial<HTTPSignedFieldURLParameters> {\n\tlet url: URL;\n\n\tif (typeof input === 'string') {\n\t\turl = new URL(input);\n\t} else {\n\t\turl = new URL(input.toString());\n\t}\n\n\tconst retVal: Partial<HTTPSignedFieldURLParameters> = {};\n\n\tconst signedField = ((): HTTPSignedField | undefined => {\n\t\tconst nonce = url.searchParams.get('signed.nonce');\n\t\tconst timestamp = url.searchParams.get('signed.timestamp');\n\t\tconst signature = url.searchParams.get('signed.signature');\n\n\t\tif (!nonce && !timestamp && !signature) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tif (!nonce || !timestamp || !signature) {\n\t\t\tthrow(new KeetaAnchorUserError('Incomplete signature fields in URL'));\n\t\t}\n\n\t\treturn({ nonce, timestamp, signature });\n\t})();\n\n\tif (signedField) {\n\t\tretVal.signedField = signedField;\n\t}\n\n\tconst account = ((): Account | undefined => {\n\t\tconst accountParam = url.searchParams.get('account');\n\t\tif (!accountParam) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\treturn(KeetaNet.lib.Account.fromPublicKeyString(accountParam).assertAccount());\n\t})();\n\n\tif (account) {\n\t\tretVal.account = account;\n\t}\n\n\treturn(retVal);\n}\n"]}
|
package/lib/http-server/index.js
CHANGED
|
@@ -37,9 +37,9 @@ export const AssertHTTPErrorData = (() => { const _io0 = input => "string" === t
|
|
|
37
37
|
return input;
|
|
38
38
|
}; })();
|
|
39
39
|
/**
|
|
40
|
-
* The maximum size of a request (
|
|
40
|
+
* The maximum size of a request (128MiB)
|
|
41
41
|
*/
|
|
42
|
-
const MAX_REQUEST_SIZE =
|
|
42
|
+
const MAX_REQUEST_SIZE = 128 * (1024 ** 2);
|
|
43
43
|
;
|
|
44
44
|
export class KeetaNetAnchorHTTPServer {
|
|
45
45
|
port;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/http-server/index.ts"],"names":[],"mappings":"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","sourcesContent":["import * as http from 'http';\nimport {\n\tKeetaAnchorError,\n\tKeetaAnchorUserError\n} from '../error.js';\nimport type { JSONSerializable } from '../utils/json.js';\nimport type { Logger, LogLevel } from '../log/index.js';\nimport { Log } from '../log/index.js';\nimport { createAssert } from 'typia';\nimport { assertNever } from '../utils/never.js';\n\nexport const AssertHTTPErrorData: (input: unknown) => { error: string; statusCode?: number; contentType?: string; } = createAssert<{ error: string; statusCode?: number; contentType?: string; }>();\n\n/**\n * The maximum size of a request (128KiB)\n */\nconst MAX_REQUEST_SIZE = 1024 * 128;\n\ntype RouteHandlerMethod<BodyDataType = JSONSerializable | undefined> = (urlParams: Map<string, string>, postData: BodyDataType, requestHeaders: http.IncomingHttpHeaders, requestUrl: URL) => Promise<{ output: string | Buffer; statusCode?: number; contentType?: string; headers?: { [headerName: string]: string; }; }>;\ntype RouteHandlerWithConfig = {\n\tbodyType: 'raw';\n\thandler: RouteHandlerMethod<Buffer>;\n} | {\n\tbodyType: 'parsed';\n\thandler: RouteHandlerMethod;\n} | {\n\tbodyType: 'none';\n\thandler: RouteHandlerMethod<undefined>;\n};\ntype RouteHandler = RouteHandlerMethod | RouteHandlerWithConfig;\nexport type Routes = { [route: string]: RouteHandler };\nexport type RoutesWithConfigs = { [route: string]: RouteHandlerWithConfig };\n\nexport interface KeetaAnchorHTTPServerConfig {\n\t/**\n\t * The port for the HTTP server to listen on (default is an ephemeral port).\n\t */\n\tport?: number;\n\n\t/**\n\t * Enable debug logging\n\t */\n\tlogger?: Logger;\n};\n\nexport abstract class KeetaNetAnchorHTTPServer<ConfigType extends KeetaAnchorHTTPServerConfig = KeetaAnchorHTTPServerConfig> implements Required<KeetaAnchorHTTPServerConfig> {\n\treadonly port: NonNullable<KeetaAnchorHTTPServerConfig['port']>;\n\treadonly logger: NonNullable<KeetaAnchorHTTPServerConfig['logger']>;\n\t#serverPromise?: Promise<void>;\n\t#server?: http.Server;\n\t#url: undefined | string | URL | ((object: this) => string);\n\treadonly #config: ConfigType;\n\n\tconstructor(config: ConfigType) {\n\t\tthis.#config = { ...config };\n\t\tthis.port = config.port ?? 0;\n\t\tthis.logger = config.logger ?? Log.Legacy('ANCHOR');\n\t}\n\n\tprotected abstract initRoutes(config: ConfigType): Promise<Routes>;\n\n\tprivate static routeMatch(requestURL: URL, routeURL: URL): ({ match: true; params: Map<string, string> } | { match: false }) {\n\t\tconst requestURLPaths = requestURL.pathname.split('/');\n\t\tconst routeURLPaths = routeURL.pathname.split('/');\n\n\t\tif (requestURLPaths.length !== routeURLPaths.length) {\n\t\t\treturn({ match: false });\n\t\t}\n\n\t\tconst params = new Map<string, string>();\n\t\tfor (let partIndex = 0; partIndex < requestURLPaths.length; partIndex++) {\n\t\t\tconst requestPath = requestURLPaths[partIndex];\n\t\t\tconst routePath = routeURLPaths[partIndex];\n\n\t\t\tif (routePath === undefined || requestPath === undefined) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\n\t\t\tif (routePath.startsWith(':')) {\n\t\t\t\tparams.set(routePath.slice(1), requestPath);\n\t\t\t} else if (requestPath !== routePath) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\t\t}\n\n\t\treturn({ match: true, params: params });\n\t}\n\n\tprivate static routeFind(method: string, requestURL: URL, routes: Routes): { route: Routes[keyof Routes]; params: Map<string, string> } | null {\n\t\tfor (const routeKey in routes) {\n\t\t\tconst route = routes[routeKey];\n\t\t\tif (route === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst [routeMethod, ...routePathParts] = routeKey.split(' ');\n\t\t\tconst routePath = `/${routePathParts.join(' ')}`.replace(/^\\/+/, '/');\n\n\t\t\tif (method !== routeMethod) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst routeURL = new URL(routePath, 'http://localhost');\n\t\t\tconst matchResult = this.routeMatch(requestURL, routeURL);\n\t\t\tif (matchResult.match) {\n\t\t\t\treturn({\n\t\t\t\t\troute: route,\n\t\t\t\t\tparams: matchResult.params\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn(null);\n\t}\n\n\tprivate static addCORS(routes: Routes): RoutesWithConfigs {\n\t\tconst newRoutes: RoutesWithConfigs = {};\n\n\t\tconst validMethods = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD']);\n\n\t\tconst methodsByPath: { [key: string]: Set<string>; } = {};\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!validMethods.has(method)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!(path in methodsByPath)) {\n\t\t\t\tmethodsByPath[path] = new Set<string>();\n\t\t\t}\n\n\t\t\tif (methodsByPath[path] === undefined) {\n\t\t\t\tthrow(new Error(`internal error: methodsByPath missing path for ${path}`));\n\t\t\t}\n\n\t\t\tmethodsByPath[path].add(method);\n\t\t}\n\n\t\tconst seenPaths = new Set<string>();\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tconst routeHandler = routes[routeKey];\n\t\t\tif (routeHandler === undefined) {\n\t\t\t\tthrow(new Error(`internal error: routeHandler missing for routeKey ${routeKey}`));\n\t\t\t}\n\n\t\t\tlet newRoute: RouteHandlerWithConfig;\n\n\t\t\tif (typeof routeHandler === 'function') {\n\t\t\t\tnewRoute = {\n\t\t\t\t\tbodyType: 'parsed',\n\t\t\t\t\thandler: routeHandler\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tnewRoute = routeHandler;\n\t\t\t}\n\n\t\t\tif (method !== 'ERROR') {\n\t\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\t\tnewRoutes[routeKey] = newRoute;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!validMethods.has(method)) {\n\t\t\t\t\tnewRoutes[routeKey] = newRoute;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst validMethodsForPath = methodsByPath[path];\n\n\t\t\tlet validMethodsForPathParts: string[] = [];\n\t\t\tif (validMethodsForPath !== undefined) {\n\t\t\t\tvalidMethodsForPath.add('OPTIONS');\n\t\t\t\tvalidMethodsForPathParts = Array.from(validMethodsForPath);\n\t\t\t} else {\n\t\t\t\tvalidMethodsForPathParts = [...Array.from(validMethods), 'OPTIONS'];\n\t\t\t}\n\n\t\t\tnewRoutes[routeKey] = {\n\t\t\t\tbodyType: newRoute.bodyType,\n\t\t\t\tasync handler(...args: Parameters<RouteHandlerMethod<unknown>>) {\n\t\t\t\t\t// This is typed properly, but TS can't infer it here\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst retval = await newRoute.handler(...args);\n\n\t\t\t\t\t/* Add CORS headers to the response for the original route handler */\n\t\t\t\t\tif (retval.contentType === 'application/json' || retval.contentType === undefined) {\n\t\t\t\t\t\tif (!('headers' in retval) || retval.headers === undefined) {\n\t\t\t\t\t\t\tretval.headers = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tretval.headers['Access-Control-Allow-Origin'] = '*';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn(retval);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (!seenPaths.has(path) && path !== '' && path !== undefined) {\n\t\t\t\tconst corsRouteKey = `OPTIONS ${path}`;\n\n\t\t\t\tnewRoutes[corsRouteKey] = {\n\t\t\t\t\tbodyType: 'none',\n\t\t\t\t\tasync handler() {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\toutput: '',\n\t\t\t\t\t\t\tstatusCode: 204,\n\t\t\t\t\t\t\tcontentType: 'text/plain',\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Access-Control-Allow-Origin': '*',\n\t\t\t\t\t\t\t\t'Access-Control-Allow-Methods': validMethodsForPathParts.join(', '),\n\t\t\t\t\t\t\t\t'Access-Control-Allow-Headers': 'Content-Type',\n\t\t\t\t\t\t\t\t'Access-Control-Max-Age': '86400'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tseenPaths.add(path);\n\t\t\t}\n\t\t}\n\n\t\treturn(newRoutes);\n\t}\n\n\tprivate async main(onSetPort?: (port: number) => void): Promise<void> {\n\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Starting HTTP server...');\n\n\t\tconst port = this.port;\n\n\t\tconst routes = KeetaNetAnchorHTTPServer.addCORS({\n\t\t\tERROR: async function(_ignore_params, postData) {\n\t\t\t\tconst errorInfo = AssertHTTPErrorData(postData);\n\n\t\t\t\tconst retval = {\n\t\t\t\t\toutput: errorInfo.error,\n\t\t\t\t\tstatusCode: errorInfo.statusCode ?? 400,\n\t\t\t\t\tcontentType: errorInfo.contentType ?? 'text/plain'\n\t\t\t\t};\n\n\t\t\t\treturn(retval);\n\t\t\t},\n\t\t\t...(await this.initRoutes(this.#config))\n\t\t});\n\n\t\tconst server = new http.Server(async (request, response) => {\n\t\t\tconst url = new URL(request.url ?? '/', `http://${request.headers.host ?? 'localhost'}`);\n\t\t\tconst method = request.method ?? 'GET';\n\n\t\t\t/*\n\t\t\t * Finalize the response by syncing the logger and ending\n\t\t\t * the response.\n\t\t\t */\n\t\t\tconst responseFinalize = async () => {\n\t\t\t\tif ('sync' in this.logger && typeof this.logger.sync === 'function') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.logger.sync();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore errors */\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresponse.end();\n\t\t\t};\n\n\t\t\t/*\n\t\t\t * Lookup the route based on the request\n\t\t\t */\n\t\t\tconst requestedRouteAndParams = KeetaNetAnchorHTTPServer.routeFind(method, url, routes);\n\t\t\tif (requestedRouteAndParams === null) {\n\t\t\t\tresponse.statusCode = 404;\n\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\tresponse.write('Not Found');\n\t\t\t\tawait responseFinalize();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Extract the route handler and the parameters from\n\t\t\t * the request\n\t\t\t */\n\t\t\tconst { route, params } = requestedRouteAndParams;\n\n\t\t\t/**\n\t\t\t * Attempt to run the route, catch any errors\n\t\t\t */\n\t\t\tlet result: Awaited<ReturnType<RouteHandlerMethod>> | undefined = undefined;\n\t\t\tlet generatedResult = false;\n\t\t\ttry {\n\t\t\t\tif (!request.method) {\n\t\t\t\t\tthrow(new Error('internal error: No request method'));\n\t\t\t\t}\n\n\t\t\t\tlet bodyData: JSONSerializable | Buffer | undefined;\n\n\t\t\t\tconst shouldCheckBody = ['POST', 'PUT', 'PATCH'].includes(request.method);\n\n\t\t\t\tif (typeof route === 'function') {\n\t\t\t\t\tthrow(new Error('internal error: Route handler missing body type configuration, should have been added in addCORS'));\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * If POST'ing, PUT'ing, or PATCH'ing, read and parse the request body\n\t\t\t\t */\n\t\t\t\tif (shouldCheckBody && route.bodyType !== 'none') {\n\t\t\t\t\tconst data = await request.map(function(chunk) {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\t\treturn(Buffer.from(chunk));\n\t\t\t\t\t}).reduce(function(prev, curr) {\n\t\t\t\t\t\tif (prev.length > MAX_REQUEST_SIZE) {\n\t\t\t\t\t\t\tthrow(new Error('Request too large'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!Buffer.isBuffer(curr)) {\n\t\t\t\t\t\t\tthrow(new Error(`internal error: Current item is not a buffer -- ${typeof curr}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn(Buffer.concat([prev, curr]));\n\t\t\t\t\t}, Buffer.from(''));\n\n\t\t\t\t\tif (route.bodyType === 'raw') {\n\t\t\t\t\t\tbodyData = data;\n\t\t\t\t\t} else if (route.bodyType === 'parsed' && request.headers['content-type'] === 'application/json') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t\tbodyData = JSON.parse(data.toString('utf-8'));\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tthrow(new Error('Invalid JSON data'));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Unsupported content type'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Call the route handler\n\t\t\t\t */\n\t\t\t\t// @ts-ignore\n\t\t\t\tresult = await route.handler(params, bodyData, request.headers, url);\n\n\t\t\t\tgeneratedResult = true;\n\t\t\t} catch (err) {\n\t\t\t\tlet logLevel: Lowercase<LogLevel> = 'error';\n\t\t\t\tif (KeetaAnchorError.isInstance(err)) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're able to safely cast this here because the cast\n\t\t\t\t\t * duplicates the logic.\n\t\t\t\t\t */\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\t\tlogLevel = err.logLevel.toLowerCase() as Lowercase<typeof err.logLevel>;\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * If an error occurs, log it and return an error page\n\t\t\t\t */\n\t\t\t\tthis.logger?.[logLevel]('KeetaAnchorHTTP.Server', err);\n\n\t\t\t\t/**\n\t\t\t\t * If it is a user error, provide a user-friendly error page\n\t\t\t\t */\n\t\t\t\tconst errorHandlerRoute = routes['ERROR'];\n\t\t\t\tif (errorHandlerRoute !== undefined) {\n\t\t\t\t\tlet errBody;\n\t\t\t\t\tif (KeetaAnchorError.isInstance(err) && err['userError']) {\n\t\t\t\t\t\terrBody = err.asErrorResponse('application/json');\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrBody = {\n\t\t\t\t\t\t\terror: JSON.stringify({ ok: false, error: 'Internal Server Error' }),\n\t\t\t\t\t\t\tstatusCode: 500,\n\t\t\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tresult = await errorHandlerRoute.handler(new Map(), errBody, request.headers, url);\n\t\t\t\t\tgeneratedResult = true;\n\t\t\t\t}\n\n\t\t\t\tif (!generatedResult) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Otherwise provide a generic error page\n\t\t\t\t\t */\n\t\t\t\t\tresponse.statusCode = 500;\n\t\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\t\tresponse.write('Internal Server Error');\n\t\t\t\t\tawait responseFinalize();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result === undefined) {\n\t\t\t\tthrow(new Error('internal error: No result'));\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Write the response to the client\n\t\t\t */\n\t\t\tresponse.statusCode = result.statusCode ?? 200;\n\n\t\t\tfor (const headerKey in result.headers ?? {}) {\n\t\t\t\tconst headerValue = result.headers?.[headerKey];\n\t\t\t\tif (headerValue !== undefined) {\n\t\t\t\t\tresponse.setHeader(headerKey, headerValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresponse.setHeader('Content-Type', result.contentType ?? 'application/json');\n\t\t\tresponse.write(result.output);\n\t\t\tawait responseFinalize();\n\t\t});\n\t\tthis.#server = server;\n\n\t\t/**\n\t\t * Create a promise to wait for the server to close\n\t\t */\n\t\tconst waiter = new Promise<void>((resolve) => {\n\t\t\tserver.on('close', () => {\n\t\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Server closed');\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\n\t\t/**\n\t\t * Start listening on the port\n\t\t */\n\t\tserver.listen(port, () => {\n\t\t\tconst address = server.address();\n\t\t\tif (address !== null && typeof address === 'object') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis.port = address.port;\n\t\t\t\tonSetPort?.(this.port);\n\t\t\t}\n\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Listening on port:', this.port);\n\t\t});\n\n\t\t/**\n\t\t * Wait for the server to close\n\t\t */\n\t\tawait waiter;\n\t}\n\n\t/**\n\t * Start the HTTP server and wait for it to be fully initialized.\n\t */\n\tasync start(): Promise<void> {\n\t\t/*\n\t\t * Start the server and wait for it to be initialized before returning\n\t\t */\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tthis.#serverPromise = this.main(function() {\n\t\t\t\tresolve();\n\t\t\t}).catch(function(error: unknown) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Wait for the server to terminate. This will only resolve once the\n\t * server has been stopped.\n\t */\n\tasync wait(): Promise<void> {\n\t\tawait this.#serverPromise;\n\t}\n\n\t/**\n\t * Stop the HTTP server and wait for it to be fully terminated.\n\t */\n\tasync stop(): Promise<void> {\n\t\tthis.#server?.close();\n\t\t// @ts-ignore\n\t\tthis.#server = undefined;\n\t\tawait this.wait();\n\t}\n\n\t/**\n\t * Get the URL of the server, which can be used to make requests to\n\t * it. This will use \"localhost\" as the hostname and the port that\n\t * the server is listening on by default but can be overridden by\n\t * setting a custom URL.\n\t */\n\tget url(): string {\n\t\tif (this.port === 0 || this.#server === undefined) {\n\t\t\tthrow(new Error('Server not started'));\n\t\t}\n\n\t\tif (this.#url !== undefined) {\n\t\t\tlet newURL: string;\n\t\t\tif (typeof this.#url === 'string') {\n\t\t\t\tnewURL = this.#url;\n\t\t\t} else if (this.#url instanceof URL || ('port' in this.#url && 'hostname' in this.#url && 'toString' in this.#url)) {\n\t\t\t\tnewURL = this.#url.toString();\n\t\t\t} else if (typeof this.#url === 'function') {\n\t\t\t\tnewURL = this.#url(this);\n\t\t\t} else {\n\t\t\t\tassertNever(this.#url);\n\t\t\t}\n\n\t\t\tconst newURLObj = new URL(newURL);\n\t\t\tnewURLObj.pathname = '/';\n\t\t\tnewURLObj.search = '';\n\n\t\t\treturn(newURLObj.toString());\n\t\t}\n\n\t\treturn(`http://localhost:${this.port}`);\n\t}\n\n\tset url(value: string | URL | ((object: this) => string)) {\n\t\tthis.#url = value;\n\t}\n\n\t[Symbol.asyncDispose](): Promise<void> {\n\t\treturn(this.stop());\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/http-server/index.ts"],"names":[],"mappings":"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","sourcesContent":["import * as http from 'http';\nimport {\n\tKeetaAnchorError,\n\tKeetaAnchorUserError\n} from '../error.js';\nimport type { JSONSerializable } from '../utils/json.js';\nimport type { Logger, LogLevel } from '../log/index.js';\nimport { Log } from '../log/index.js';\nimport { createAssert } from 'typia';\nimport { assertNever } from '../utils/never.js';\n\nexport const AssertHTTPErrorData: (input: unknown) => { error: string; statusCode?: number; contentType?: string; } = createAssert<{ error: string; statusCode?: number; contentType?: string; }>();\n\n/**\n * The maximum size of a request (128MiB)\n */\nconst MAX_REQUEST_SIZE = 128 * (1024 ** 2);\n\ntype RouteHandlerMethod<BodyDataType = JSONSerializable | undefined> = (urlParams: Map<string, string>, postData: BodyDataType, requestHeaders: http.IncomingHttpHeaders, requestUrl: URL) => Promise<{ output: string | Buffer; statusCode?: number; contentType?: string; headers?: { [headerName: string]: string; }; }>;\ntype RouteHandlerWithConfig = {\n\tbodyType: 'raw';\n\thandler: RouteHandlerMethod<Buffer>;\n} | {\n\tbodyType: 'parsed';\n\thandler: RouteHandlerMethod;\n} | {\n\tbodyType: 'none';\n\thandler: RouteHandlerMethod<undefined>;\n};\ntype RouteHandler = RouteHandlerMethod | RouteHandlerWithConfig;\nexport type Routes = { [route: string]: RouteHandler };\nexport type RoutesWithConfigs = { [route: string]: RouteHandlerWithConfig };\n\nexport interface KeetaAnchorHTTPServerConfig {\n\t/**\n\t * The port for the HTTP server to listen on (default is an ephemeral port).\n\t */\n\tport?: number;\n\n\t/**\n\t * Enable debug logging\n\t */\n\tlogger?: Logger;\n};\n\nexport abstract class KeetaNetAnchorHTTPServer<ConfigType extends KeetaAnchorHTTPServerConfig = KeetaAnchorHTTPServerConfig> implements Required<KeetaAnchorHTTPServerConfig> {\n\treadonly port: NonNullable<KeetaAnchorHTTPServerConfig['port']>;\n\treadonly logger: NonNullable<KeetaAnchorHTTPServerConfig['logger']>;\n\t#serverPromise?: Promise<void>;\n\t#server?: http.Server;\n\t#url: undefined | string | URL | ((object: this) => string);\n\treadonly #config: ConfigType;\n\n\tconstructor(config: ConfigType) {\n\t\tthis.#config = { ...config };\n\t\tthis.port = config.port ?? 0;\n\t\tthis.logger = config.logger ?? Log.Legacy('ANCHOR');\n\t}\n\n\tprotected abstract initRoutes(config: ConfigType): Promise<Routes>;\n\n\tprivate static routeMatch(requestURL: URL, routeURL: URL): ({ match: true; params: Map<string, string> } | { match: false }) {\n\t\tconst requestURLPaths = requestURL.pathname.split('/');\n\t\tconst routeURLPaths = routeURL.pathname.split('/');\n\n\t\tif (requestURLPaths.length !== routeURLPaths.length) {\n\t\t\treturn({ match: false });\n\t\t}\n\n\t\tconst params = new Map<string, string>();\n\t\tfor (let partIndex = 0; partIndex < requestURLPaths.length; partIndex++) {\n\t\t\tconst requestPath = requestURLPaths[partIndex];\n\t\t\tconst routePath = routeURLPaths[partIndex];\n\n\t\t\tif (routePath === undefined || requestPath === undefined) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\n\t\t\tif (routePath.startsWith(':')) {\n\t\t\t\tparams.set(routePath.slice(1), requestPath);\n\t\t\t} else if (requestPath !== routePath) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\t\t}\n\n\t\treturn({ match: true, params: params });\n\t}\n\n\tprivate static routeFind(method: string, requestURL: URL, routes: Routes): { route: Routes[keyof Routes]; params: Map<string, string> } | null {\n\t\tfor (const routeKey in routes) {\n\t\t\tconst route = routes[routeKey];\n\t\t\tif (route === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst [routeMethod, ...routePathParts] = routeKey.split(' ');\n\t\t\tconst routePath = `/${routePathParts.join(' ')}`.replace(/^\\/+/, '/');\n\n\t\t\tif (method !== routeMethod) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst routeURL = new URL(routePath, 'http://localhost');\n\t\t\tconst matchResult = this.routeMatch(requestURL, routeURL);\n\t\t\tif (matchResult.match) {\n\t\t\t\treturn({\n\t\t\t\t\troute: route,\n\t\t\t\t\tparams: matchResult.params\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn(null);\n\t}\n\n\tprivate static addCORS(routes: Routes): RoutesWithConfigs {\n\t\tconst newRoutes: RoutesWithConfigs = {};\n\n\t\tconst validMethods = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD']);\n\n\t\tconst methodsByPath: { [key: string]: Set<string>; } = {};\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!validMethods.has(method)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!(path in methodsByPath)) {\n\t\t\t\tmethodsByPath[path] = new Set<string>();\n\t\t\t}\n\n\t\t\tif (methodsByPath[path] === undefined) {\n\t\t\t\tthrow(new Error(`internal error: methodsByPath missing path for ${path}`));\n\t\t\t}\n\n\t\t\tmethodsByPath[path].add(method);\n\t\t}\n\n\t\tconst seenPaths = new Set<string>();\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tconst routeHandler = routes[routeKey];\n\t\t\tif (routeHandler === undefined) {\n\t\t\t\tthrow(new Error(`internal error: routeHandler missing for routeKey ${routeKey}`));\n\t\t\t}\n\n\t\t\tlet newRoute: RouteHandlerWithConfig;\n\n\t\t\tif (typeof routeHandler === 'function') {\n\t\t\t\tnewRoute = {\n\t\t\t\t\tbodyType: 'parsed',\n\t\t\t\t\thandler: routeHandler\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tnewRoute = routeHandler;\n\t\t\t}\n\n\t\t\tif (method !== 'ERROR') {\n\t\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\t\tnewRoutes[routeKey] = newRoute;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!validMethods.has(method)) {\n\t\t\t\t\tnewRoutes[routeKey] = newRoute;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst validMethodsForPath = methodsByPath[path];\n\n\t\t\tlet validMethodsForPathParts: string[] = [];\n\t\t\tif (validMethodsForPath !== undefined) {\n\t\t\t\tvalidMethodsForPath.add('OPTIONS');\n\t\t\t\tvalidMethodsForPathParts = Array.from(validMethodsForPath);\n\t\t\t} else {\n\t\t\t\tvalidMethodsForPathParts = [...Array.from(validMethods), 'OPTIONS'];\n\t\t\t}\n\n\t\t\tnewRoutes[routeKey] = {\n\t\t\t\tbodyType: newRoute.bodyType,\n\t\t\t\tasync handler(...args: Parameters<RouteHandlerMethod<unknown>>) {\n\t\t\t\t\t// This is typed properly, but TS can't infer it here\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tconst retval = await newRoute.handler(...args);\n\n\t\t\t\t\t/* Add CORS headers to the response for the original route handler */\n\t\t\t\t\tif (retval.contentType === 'application/json' || retval.contentType === undefined) {\n\t\t\t\t\t\tif (!('headers' in retval) || retval.headers === undefined) {\n\t\t\t\t\t\t\tretval.headers = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tretval.headers['Access-Control-Allow-Origin'] = '*';\n\t\t\t\t\t}\n\n\t\t\t\t\treturn(retval);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (!seenPaths.has(path) && path !== '' && path !== undefined) {\n\t\t\t\tconst corsRouteKey = `OPTIONS ${path}`;\n\n\t\t\t\tnewRoutes[corsRouteKey] = {\n\t\t\t\t\tbodyType: 'none',\n\t\t\t\t\tasync handler() {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\toutput: '',\n\t\t\t\t\t\t\tstatusCode: 204,\n\t\t\t\t\t\t\tcontentType: 'text/plain',\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t'Access-Control-Allow-Origin': '*',\n\t\t\t\t\t\t\t\t'Access-Control-Allow-Methods': validMethodsForPathParts.join(', '),\n\t\t\t\t\t\t\t\t'Access-Control-Allow-Headers': 'Content-Type',\n\t\t\t\t\t\t\t\t'Access-Control-Max-Age': '86400'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tseenPaths.add(path);\n\t\t\t}\n\t\t}\n\n\t\treturn(newRoutes);\n\t}\n\n\tprivate async main(onSetPort?: (port: number) => void): Promise<void> {\n\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Starting HTTP server...');\n\n\t\tconst port = this.port;\n\n\t\tconst routes = KeetaNetAnchorHTTPServer.addCORS({\n\t\t\tERROR: async function(_ignore_params, postData) {\n\t\t\t\tconst errorInfo = AssertHTTPErrorData(postData);\n\n\t\t\t\tconst retval = {\n\t\t\t\t\toutput: errorInfo.error,\n\t\t\t\t\tstatusCode: errorInfo.statusCode ?? 400,\n\t\t\t\t\tcontentType: errorInfo.contentType ?? 'text/plain'\n\t\t\t\t};\n\n\t\t\t\treturn(retval);\n\t\t\t},\n\t\t\t...(await this.initRoutes(this.#config))\n\t\t});\n\n\t\tconst server = new http.Server(async (request, response) => {\n\t\t\tconst url = new URL(request.url ?? '/', `http://${request.headers.host ?? 'localhost'}`);\n\t\t\tconst method = request.method ?? 'GET';\n\n\t\t\t/*\n\t\t\t * Finalize the response by syncing the logger and ending\n\t\t\t * the response.\n\t\t\t */\n\t\t\tconst responseFinalize = async () => {\n\t\t\t\tif ('sync' in this.logger && typeof this.logger.sync === 'function') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.logger.sync();\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t/* ignore errors */\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresponse.end();\n\t\t\t};\n\n\t\t\t/*\n\t\t\t * Lookup the route based on the request\n\t\t\t */\n\t\t\tconst requestedRouteAndParams = KeetaNetAnchorHTTPServer.routeFind(method, url, routes);\n\t\t\tif (requestedRouteAndParams === null) {\n\t\t\t\tresponse.statusCode = 404;\n\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\tresponse.write('Not Found');\n\t\t\t\tawait responseFinalize();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Extract the route handler and the parameters from\n\t\t\t * the request\n\t\t\t */\n\t\t\tconst { route, params } = requestedRouteAndParams;\n\n\t\t\t/**\n\t\t\t * Attempt to run the route, catch any errors\n\t\t\t */\n\t\t\tlet result: Awaited<ReturnType<RouteHandlerMethod>> | undefined = undefined;\n\t\t\tlet generatedResult = false;\n\t\t\ttry {\n\t\t\t\tif (!request.method) {\n\t\t\t\t\tthrow(new Error('internal error: No request method'));\n\t\t\t\t}\n\n\t\t\t\tlet bodyData: JSONSerializable | Buffer | undefined;\n\n\t\t\t\tconst shouldCheckBody = ['POST', 'PUT', 'PATCH'].includes(request.method);\n\n\t\t\t\tif (typeof route === 'function') {\n\t\t\t\t\tthrow(new Error('internal error: Route handler missing body type configuration, should have been added in addCORS'));\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * If POST'ing, PUT'ing, or PATCH'ing, read and parse the request body\n\t\t\t\t */\n\t\t\t\tif (shouldCheckBody && route.bodyType !== 'none') {\n\t\t\t\t\tconst data = await request.map(function(chunk) {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\t\treturn(Buffer.from(chunk));\n\t\t\t\t\t}).reduce(function(prev, curr) {\n\t\t\t\t\t\tif (prev.length > MAX_REQUEST_SIZE) {\n\t\t\t\t\t\t\tthrow(new Error('Request too large'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!Buffer.isBuffer(curr)) {\n\t\t\t\t\t\t\tthrow(new Error(`internal error: Current item is not a buffer -- ${typeof curr}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn(Buffer.concat([prev, curr]));\n\t\t\t\t\t}, Buffer.from(''));\n\n\t\t\t\t\tif (route.bodyType === 'raw') {\n\t\t\t\t\t\tbodyData = data;\n\t\t\t\t\t} else if (route.bodyType === 'parsed' && request.headers['content-type'] === 'application/json') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t\tbodyData = JSON.parse(data.toString('utf-8'));\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tthrow(new Error('Invalid JSON data'));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Unsupported content type'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * Call the route handler\n\t\t\t\t */\n\t\t\t\t// @ts-ignore\n\t\t\t\tresult = await route.handler(params, bodyData, request.headers, url);\n\n\t\t\t\tgeneratedResult = true;\n\t\t\t} catch (err) {\n\t\t\t\tlet logLevel: Lowercase<LogLevel> = 'error';\n\t\t\t\tif (KeetaAnchorError.isInstance(err)) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're able to safely cast this here because the cast\n\t\t\t\t\t * duplicates the logic.\n\t\t\t\t\t */\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\t\tlogLevel = err.logLevel.toLowerCase() as Lowercase<typeof err.logLevel>;\n\t\t\t\t}\n\n\t\t\t\t/**\n\t\t\t\t * If an error occurs, log it and return an error page\n\t\t\t\t */\n\t\t\t\tthis.logger?.[logLevel]('KeetaAnchorHTTP.Server', err);\n\n\t\t\t\t/**\n\t\t\t\t * If it is a user error, provide a user-friendly error page\n\t\t\t\t */\n\t\t\t\tconst errorHandlerRoute = routes['ERROR'];\n\t\t\t\tif (errorHandlerRoute !== undefined) {\n\t\t\t\t\tlet errBody;\n\t\t\t\t\tif (KeetaAnchorError.isInstance(err) && err['userError']) {\n\t\t\t\t\t\terrBody = err.asErrorResponse('application/json');\n\t\t\t\t\t} else {\n\t\t\t\t\t\terrBody = {\n\t\t\t\t\t\t\terror: JSON.stringify({ ok: false, error: 'Internal Server Error' }),\n\t\t\t\t\t\t\tstatusCode: 500,\n\t\t\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tresult = await errorHandlerRoute.handler(new Map(), errBody, request.headers, url);\n\t\t\t\t\tgeneratedResult = true;\n\t\t\t\t}\n\n\t\t\t\tif (!generatedResult) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Otherwise provide a generic error page\n\t\t\t\t\t */\n\t\t\t\t\tresponse.statusCode = 500;\n\t\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\t\tresponse.write('Internal Server Error');\n\t\t\t\t\tawait responseFinalize();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result === undefined) {\n\t\t\t\tthrow(new Error('internal error: No result'));\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Write the response to the client\n\t\t\t */\n\t\t\tresponse.statusCode = result.statusCode ?? 200;\n\n\t\t\tfor (const headerKey in result.headers ?? {}) {\n\t\t\t\tconst headerValue = result.headers?.[headerKey];\n\t\t\t\tif (headerValue !== undefined) {\n\t\t\t\t\tresponse.setHeader(headerKey, headerValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresponse.setHeader('Content-Type', result.contentType ?? 'application/json');\n\t\t\tresponse.write(result.output);\n\t\t\tawait responseFinalize();\n\t\t});\n\t\tthis.#server = server;\n\n\t\t/**\n\t\t * Create a promise to wait for the server to close\n\t\t */\n\t\tconst waiter = new Promise<void>((resolve) => {\n\t\t\tserver.on('close', () => {\n\t\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Server closed');\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\n\t\t/**\n\t\t * Start listening on the port\n\t\t */\n\t\tserver.listen(port, () => {\n\t\t\tconst address = server.address();\n\t\t\tif (address !== null && typeof address === 'object') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis.port = address.port;\n\t\t\t\tonSetPort?.(this.port);\n\t\t\t}\n\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Listening on port:', this.port);\n\t\t});\n\n\t\t/**\n\t\t * Wait for the server to close\n\t\t */\n\t\tawait waiter;\n\t}\n\n\t/**\n\t * Start the HTTP server and wait for it to be fully initialized.\n\t */\n\tasync start(): Promise<void> {\n\t\t/*\n\t\t * Start the server and wait for it to be initialized before returning\n\t\t */\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tthis.#serverPromise = this.main(function() {\n\t\t\t\tresolve();\n\t\t\t}).catch(function(error: unknown) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Wait for the server to terminate. This will only resolve once the\n\t * server has been stopped.\n\t */\n\tasync wait(): Promise<void> {\n\t\tawait this.#serverPromise;\n\t}\n\n\t/**\n\t * Stop the HTTP server and wait for it to be fully terminated.\n\t */\n\tasync stop(): Promise<void> {\n\t\tthis.#server?.close();\n\t\t// @ts-ignore\n\t\tthis.#server = undefined;\n\t\tawait this.wait();\n\t}\n\n\t/**\n\t * Get the URL of the server, which can be used to make requests to\n\t * it. This will use \"localhost\" as the hostname and the port that\n\t * the server is listening on by default but can be overridden by\n\t * setting a custom URL.\n\t */\n\tget url(): string {\n\t\tif (this.port === 0 || this.#server === undefined) {\n\t\t\tthrow(new Error('Server not started'));\n\t\t}\n\n\t\tif (this.#url !== undefined) {\n\t\t\tlet newURL: string;\n\t\t\tif (typeof this.#url === 'string') {\n\t\t\t\tnewURL = this.#url;\n\t\t\t} else if (this.#url instanceof URL || ('port' in this.#url && 'hostname' in this.#url && 'toString' in this.#url)) {\n\t\t\t\tnewURL = this.#url.toString();\n\t\t\t} else if (typeof this.#url === 'function') {\n\t\t\t\tnewURL = this.#url(this);\n\t\t\t} else {\n\t\t\t\tassertNever(this.#url);\n\t\t\t}\n\n\t\t\tconst newURLObj = new URL(newURL);\n\t\t\tnewURLObj.pathname = '/';\n\t\t\tnewURLObj.search = '';\n\n\t\t\treturn(newURLObj.toString());\n\t\t}\n\n\t\treturn(`http://localhost:${this.port}`);\n\t}\n\n\tset url(value: string | URL | ((object: this) => string)) {\n\t\tthis.#url = value;\n\t}\n\n\t[Symbol.asyncDispose](): Promise<void> {\n\t\treturn(this.stop());\n\t}\n}\n"]}
|
package/lib/resolver.d.ts
CHANGED
|
@@ -25,6 +25,16 @@ type ServiceMetadataCurrencyCodeCanonical = CurrencyInfo.ISOCurrencyCode | `$${s
|
|
|
25
25
|
type CurrencySearchInput = ServiceMetadataCurrencyCodeCanonical | CurrencyInfo.ISOCurrencyNumber | CurrencyInfo.Currency;
|
|
26
26
|
type CurrencySearchCanonical = ServiceMetadataCurrencyCodeCanonical;
|
|
27
27
|
type CountrySearchInput = CurrencyInfo.ISOCountryCode | CurrencyInfo.ISOCountryNumber | CurrencyInfo.Country;
|
|
28
|
+
type ServiceMetadataAuthenticationType = {
|
|
29
|
+
method: 'keeta-account';
|
|
30
|
+
type: 'required' | 'optional' | 'none';
|
|
31
|
+
};
|
|
32
|
+
type ServiceMetadataEndpoint = string | {
|
|
33
|
+
url: string;
|
|
34
|
+
options?: {
|
|
35
|
+
authentication?: ServiceMetadataAuthenticationType;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
28
38
|
/**
|
|
29
39
|
* Service Metadata General Structure
|
|
30
40
|
*/
|
|
@@ -150,13 +160,17 @@ type ServiceMetadata = {
|
|
|
150
160
|
assetMovement?: {
|
|
151
161
|
[id: string]: {
|
|
152
162
|
operations: {
|
|
153
|
-
initiateTransfer?:
|
|
154
|
-
getTransferStatus?:
|
|
155
|
-
|
|
156
|
-
|
|
163
|
+
initiateTransfer?: ServiceMetadataEndpoint;
|
|
164
|
+
getTransferStatus?: ServiceMetadataEndpoint;
|
|
165
|
+
createPersistentForwardingTemplate?: ServiceMetadataEndpoint;
|
|
166
|
+
listPersistentForwardingTemplate?: ServiceMetadataEndpoint;
|
|
167
|
+
createPersistentForwarding?: ServiceMetadataEndpoint;
|
|
168
|
+
listPersistentForwarding?: ServiceMetadataEndpoint;
|
|
169
|
+
listTransactions?: ServiceMetadataEndpoint;
|
|
170
|
+
shareKYC?: ServiceMetadataEndpoint;
|
|
157
171
|
};
|
|
158
172
|
supportedAssets: {
|
|
159
|
-
asset: KeetaNetAccountTokenPublicKeyString;
|
|
173
|
+
asset: KeetaNetAccountTokenPublicKeyString | ServiceMetadataCurrencyCodeCanonical | ([KeetaNetAccountTokenPublicKeyString | ServiceMetadataCurrencyCodeCanonical, KeetaNetAccountTokenPublicKeyString | ServiceMetadataCurrencyCodeCanonical]);
|
|
160
174
|
paths: {
|
|
161
175
|
pair: [AssetWithRailsMetadata, AssetWithRailsMetadata];
|
|
162
176
|
/**
|
|
@@ -228,10 +242,16 @@ type ServiceSearchCriteria<T extends Services> = {
|
|
|
228
242
|
countryCodes: CountrySearchInput[];
|
|
229
243
|
};
|
|
230
244
|
'assetMovement': {
|
|
231
|
-
asset?: MovableAssetSearchInput
|
|
245
|
+
asset?: MovableAssetSearchInput | {
|
|
246
|
+
from: MovableAssetSearchInput;
|
|
247
|
+
to: MovableAssetSearchInput;
|
|
248
|
+
};
|
|
232
249
|
from?: AssetLocationString;
|
|
233
250
|
to?: AssetLocationString;
|
|
234
|
-
|
|
251
|
+
/**
|
|
252
|
+
* Search for a provider which supports ANY of the following rail(s)
|
|
253
|
+
*/
|
|
254
|
+
rail?: Rail | Rail[] | undefined;
|
|
235
255
|
/**
|
|
236
256
|
* Search for a provider which supports ANY of the following
|
|
237
257
|
* KYC providers
|
|
@@ -462,5 +482,5 @@ declare class Resolver {
|
|
|
462
482
|
clearCache(): void;
|
|
463
483
|
}
|
|
464
484
|
export default Resolver;
|
|
465
|
-
export type { ServiceMetadata, ServiceMetadataExternalizable, ServiceSearchCriteria, Services, SharedLookupCriteria };
|
|
485
|
+
export type { ServiceMetadata, ServiceMetadataExternalizable, ServiceSearchCriteria, ServiceMetadataEndpoint, ServiceMetadataAuthenticationType, Services, SharedLookupCriteria };
|
|
466
486
|
//# sourceMappingURL=resolver.d.ts.map
|
package/lib/resolver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,8CAA8C,CAAC;AAC7G,OAAO,KAAK,YAAY,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAMpD,OAAO,EAA4E,KAAK,uBAAuB,EAAE,KAAK,mBAAmB,EAAE,KAAK,sBAAsB,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEtP,KAAK,WAAW,GAAG;IAAE,QAAQ,EAAE,sCAAsC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;CAAE,CAAC;AAEtF,KAAK,eAAe,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvE,QAAA,MAAM,eAAe,EAAE,OAAO,cAAc,CAAC,GAAG,CAAC,OAAoC,CAAC;AACtF,KAAK,mCAAmC,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,eAAe,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAEnL;;;;GAIG;AACH,KAAK,oCAAoC,GAAG,YAAY,CAAC,eAAe,GAAG,IAAI,MAAM,EAAE,CAAC;AACxF;;;GAGG;AACH,KAAK,mBAAmB,GAAG,oCAAoC,GAAG,YAAY,CAAC,iBAAiB,GAAG,YAAY,CAAC,QAAQ,CAAC;AACzH,KAAK,uBAAuB,GAAG,oCAAoC,CAAC;AACpE,KAAK,kBAAkB,GAAG,YAAY,CAAC,cAAc,GAAG,YAAY,CAAC,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC;AAM7G;;GAEG;AACH,KAAK,eAAe,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,WAAW,EAAE;SACX,YAAY,IAAI,oCAAoC,CAAC,CAAC,EAAE,mCAAmC;KAC5F,CAAC;IACF,QAAQ,EAAE;QACT,OAAO,CAAC,EAAE;YACT,CAAC,EAAE,EAAE,MAAM,GAAG;gBACb,UAAU,EAAE;oBACX,aAAa,CAAC,EAAE,MAAM,CAAC;iBACvB,CAAC;gBACF,aAAa,EAAE,MAAM,EAAE,CAAC;gBACxB,YAAY,EAAE,MAAM,EAAE,CAAC;gBACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;aACxB,CAAC;SACF,CAAC;QACF,GAAG,CAAC,EAAE;YACL,CAAC,EAAE,EAAE,MAAM,GAAG;gBACb,UAAU,EAAE;oBACX;;;;uBAIG;oBACH,aAAa,CAAC,EAAE,MAAM,CAAC;oBACvB;;;uBAGG;oBACH,WAAW,CAAC,EAAE,MAAM,CAAC;oBACrB;;;uBAGG;oBACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;oBAC5B;;;uBAGG;oBACH,eAAe,CAAC,EAAE,MAAM,CAAC;iBACzB,CAAC;gBACF;;;;;mBAKG;gBACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;gBACxB;;;;;mBAKG;gBACH,EAAE,EAAE,MAAM,CAAC;aACX,CAAC;SACF,CAAC;QACF;;;;;WAKG;QACH,EAAE,CAAC,EAAE;YACJ;;eAEG;YACH,CAAC,EAAE,EAAE,MAAM,GAAG;gBACb,UAAU,EAAE;oBACX;;;uBAGG;oBACH,WAAW,CAAC,EAAE,MAAM,CAAC;oBACrB;;;uBAGG;oBACH,QAAQ,EAAE,MAAM,CAAC;oBACjB;;;uBAGG;oBACH,cAAc,EAAE,MAAM,CAAC;oBACvB;;;uBAGG;oBACH,iBAAiB,EAAE,MAAM,CAAC;iBAC1B,CAAC;gBACF;;;;mBAIG;gBACH,IAAI,EAAE;oBACL;;;uBAGG;oBACH,aAAa,EAAE,mCAAmC,EAAE,CAAC;oBACrD;;;uBAGG;oBACH,EAAE,EAAE,mCAAmC,EAAE,CAAC;oBAC1C;;;;uBAIG;oBACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;iBACxB,EAAE,CAAC;aACJ,CAAA;SACD,CAAC;QACF,aAAa,CAAC,EAAE;YACf,CAAC,EAAE,EAAE,MAAM,GAAG;gBACb,UAAU,EAAE;oBACX,gBAAgB,CAAC,EAAE,MAAM,CAAC;oBAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;oBAC3B,0BAA0B,CAAC,EAAE,MAAM,CAAC;oBACpC,gBAAgB,CAAC,EAAE,MAAM,CAAA;iBACzB,CAAC;gBAEF,eAAe,EAAE;oBAChB,KAAK,EAAE,mCAAmC,CAAC;oBAE3C,KAAK,EAAE;wBACN,IAAI,EAAE,CAAE,sBAAsB,EAAE,sBAAsB,CAAE,CAAA;wBAExD;;;;2BAIG;wBACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;qBACxB,EAAE,CAAC;iBACJ,EAAE,CAAC;aACJ,CAAA;SACD,CAAC;QACF,KAAK,CAAC,EAAE;YACP,CAAC,EAAE,EAAE,MAAM,GAAG;gBAEb,cAAc,CAAC,EAAE,IAAI,CAAC;aACtB,CAAC;SACF,CAAC;KACF,CAAC;CACF,CAAC;AAEF,KAAK,6BAA6B,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAC;AAEvE;;GAEG;AACH,KAAK,QAAQ,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;AAElD;;GAEG;AACH,KAAK,qBAAqB,CAAC,CAAC,SAAS,QAAQ,IAAI;IAChD,SAAS,EAAE;QACV;;;WAGG;QACH,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;QACtC;;;WAGG;QACH,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;QACpC;;;;WAIG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,IAAI,EAAE;QACL;;;WAGG;QACH,iBAAiB,CAAC,EAAE,mBAAmB,GAAG,mCAAmC,CAAC;QAC9E;;;WAGG;QACH,kBAAkB,CAAC,EAAE,mBAAmB,GAAG,mCAAmC,CAAC;QAC/E;;;WAGG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,KAAK,EAAE;QACN;;;WAGG;QACH,YAAY,EAAE,kBAAkB,EAAE,CAAC;KACnC,CAAC;IACF,eAAe,EAAE;QAChB,KAAK,CAAC,EAAE,uBAAuB,CAAC;QAChC,IAAI,CAAC,EAAE,mBAAmB,CAAC;QAC3B,EAAE,CAAC,EAAE,mBAAmB,CAAC;QACzB,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ;;;WAGG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,OAAO,EAAE;QAER,cAAc,EAAE,IAAI,CAAC;KACrB,CAAC;CACF,CAAC,CAAC,CAAC,CAAC;AAEL,KAAK,4BAA4B,CAAC,OAAO,SAAS,QAAQ,IAAI;IAAE,CAAC,EAAE,EAAE,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAE9J,KAAK,yBAAyB,GAAG;KAC/B,OAAO,IAAI,QAAQ,GAAG;QACtB,QAAQ,EAAE,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,EAAE,4BAA4B,CAAC,OAAO,CAAC,CAAC;KAC/C;CACD,CAAC;AAqSF,KAAK,yBAAyB,GAAG,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AACnE,KAAK,YAAY,GAAG,yBAAyB,GAAG,gBAAgB,GAAG,eAAe,CAAC;AACnF,KAAK,eAAe,GAAG,CAAC,gBAAgB,GAAG,SAAS,CAAC,EAAE,CAAC;AACxD,KAAK,gBAAgB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAA;CAAE,CAAC;AAExE,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjG,UAAU,oBAAoB;IAC7B,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACvC;AAED,UAAU,2BAA2B,CAAC,SAAS,SAAS,yBAAyB,GAAG,yBAAyB,CAAE,SAAQ,oBAAoB;IAC1I,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC1C;AAED,UAAU,gBAAiB,SAAQ,oBAAoB,EAAE,2BAA2B;IACnF,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9C,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,UAAU,wBAAyB,SAAQ,oBAAoB,EAAE,2BAA2B,CAAC,MAAM,CAAC;IACnG,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,UAAU,wBAAyB,SAAQ,oBAAoB,EAAE,2BAA2B,CAAC,MAAM,CAAC;IACnG,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,UAAU,yBAA0B,SAAQ,oBAAoB,EAAE,2BAA2B,CAAC,OAAO,CAAC;IACrG,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtC;AAED,UAAU,wBAAwB,CAAC,CAAC,CAAE,SAAQ,oBAAoB;IACjE,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/B;AAED,UAAU,uBAAuB,CAAC,CAAC,SAAS,OAAO,EAAE,CAAE,SAAQ,oBAAoB;IAClF,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9B;AAGD,KAAK,YAAY,CAAC,CAAC,IAClB,CAAC,SAAS,MAAM,GAAG,wBAAwB,GAC3C,CAAC,SAAS,MAAM,GAAG,wBAAwB,GAC3C,CAAC,SAAS,OAAO,GAAG,yBAAyB,GAC7C,CAAC,SAAS,yBAAyB,GAAG,2BAA2B,CAAC,CAAC,CAAC,GACpE,CAAC,SAAS,OAAO,EAAE,GAAG,uBAAuB,CAAC;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC,GACrF,CAAC,SAAS,MAAM,GAAG,wBAAwB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAClE,CAAC,SAAS,SAAS,GAAG,SAAS,GAC/B,KAAK,CAAC;AAEP,KAAK,kBAAkB,CAAC,CAAC,SAAS,MAAM,IAAI;KAC1C,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC,CAAC;AAEF,KAAK,sBAAsB,CAAC,CAAC,SAAS,MAAM,IAAI;KAC9C,CAAC,IAAI,MAAM,CAAC,GAAG,CACf,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAClB,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC7B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,GAChC,sBAAsB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACtD,CAAC,CAAC,CAAC,CAAC,CACJ,GAAG,WAAW;CACf,CAAC;AACF,KAAK,gBAAgB,CAAC,CAAC,IAAI,sBAAsB,CAAC;IAAE,GAAG,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,KAAK,CAAC,CAAC;AAErE,KAAK,iBAAiB,GAAG,yBAAyB,GAAG,gBAAgB,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAQ3G;;GAEG;AACH,KAAK,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE;IACjC,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,IAAI,CAAC;CACd,GAAG;IACH,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;CACd,CAAC,CAAC;AAGH,KAAK,cAAc,GAAG;IACrB;;;;;;;;;;;OAWG;IACH,IAAI,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,CAAC;IACxD;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;IAC1D;;;OAGG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,KAAK,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CAC/D,CAAA;AAGD,KAAK,cAAc,GAAG;IACrB,UAAU,EAAE,cAAc,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE;QACP,QAAQ,EAAE,cAAc,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,MAAM,CAAC,EAAE,QAAQ,CAAC;CAClB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IAAE,KAAK,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAUtD,cAAM,QAAS,YAAW,kBAAkB;;IAQ3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAmD;IAEzF,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ;IAWpD;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,gBAAgB,CAAC,eAAe,CAAC,GAAG,MAAM;IAE1E,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM;IASzD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,gBAAgB,CAAC,eAAe,CAAC;IAIzF;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB;IAyB9D;;;;;;;;;OASG;WACU,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;WAElH,sBAAsB,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;gBAqErG,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,EAAE,cAAc;IA6BrD;;OAEG;YACW,aAAa;YA6Bb,eAAe;YA4Bf,YAAY;YAmCZ,OAAO;YAwEP,YAAY;IAqB1B,OAAO,CAAC,oBAAoB;YA0Cd,OAAO;IAyEf,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAClD,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAChD,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAC9D,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAC1C,KAAK,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3C,KAAK,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;CAQ3D;AAED,KAAK,aAAa,GAAG;IACpB,QAAQ,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;IACF,WAAW,EAAE;QACZ,KAAK,EAAE,MAAM,CAAC;KACd,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;KACb,CAAA;CACD,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CAAE,CAAC;AAExD,cAAM,QAAQ;;IAQb,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,QAAQ,CAAY;IAErD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAuBxB;gBAGU,MAAM,EAAE,cAAc;IA+ClC,IAAI,KAAK,IAAI,aAAa,CAEzB;YAEa,qBAAqB;YAwDrB,iBAAiB;YA8DjB,gBAAgB;IA0FxB,qBAAqB,CAAC,YAAY,EAAE,gBAAgB,EAAE,QAAQ,GAAE,qBAAqB,CAAC,eAAe,CAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAuDhI,2BAA2B;IA8MnC,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAmBhI,sBAAsB,IAAI,OAAO,CAAC,mCAAmC,EAAE,CAAC;IA2CxE,UAAU,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,mCAAmC,CAAC;QAAC,QAAQ,EAAE,uBAAuB,CAAC;KAAE,EAAE,CAAC;IA2C3G,yBAAyB,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;IAwE5D,WAAW,CAAC,YAAY,EAAE,mBAAmB,GAAG,mCAAmC,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,mCAAmC,CAAC;QAAC,QAAQ,EAAE,uBAAuB,CAAC;KAAE,GAAG,IAAI,CAAC;IA2FxL,MAAM,CAAC,CAAC,SAAS,MAAM,yBAAyB,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAmC5N,UAAU,IAAI,IAAI;CASlB;AAED,eAAe,QAAQ,CAAC;AACxB,YAAY,EACX,eAAe,EACf,6BAA6B,EAC7B,qBAAqB,EACrB,QAAQ,EACR,oBAAoB,EACpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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"}
|