@zyno-io/dk-server-foundation 26.216.430 → 26.216.907
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/dist/src/app/config.d.ts +2 -0
- package/dist/src/app/config.d.ts.map +1 -1
- package/dist/src/app/config.js +1 -1
- package/dist/src/app/config.js.map +1 -1
- package/dist/src/database/postgres.d.ts.map +1 -1
- package/dist/src/database/postgres.js +2 -0
- package/dist/src/database/postgres.js.map +1 -1
- package/dist/src/srpc/SrpcServer.d.ts +0 -24
- package/dist/src/srpc/SrpcServer.d.ts.map +1 -1
- package/dist/src/srpc/SrpcServer.js +8 -89
- package/dist/src/srpc/SrpcServer.js.map +1 -1
- package/dist/src/srpc/WebSocketUpgradeHandler.d.ts +20 -0
- package/dist/src/srpc/WebSocketUpgradeHandler.d.ts.map +1 -0
- package/dist/src/srpc/WebSocketUpgradeHandler.js +183 -0
- package/dist/src/srpc/WebSocketUpgradeHandler.js.map +1 -0
- package/docs/yarn.lock +10 -10
- package/package.json +1 -1
- package/src/app/config.ts +2 -0
- package/src/database/postgres.ts +3 -0
- package/src/srpc/SrpcServer.ts +10 -92
- package/src/srpc/WebSocketUpgradeHandler.ts +196 -0
package/dist/src/app/config.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ export declare class BaseAppConfig {
|
|
|
15
15
|
PG_PASSWORD_SECRET?: string;
|
|
16
16
|
PG_DATABASE?: string;
|
|
17
17
|
PG_SCHEMA?: string;
|
|
18
|
+
PG_SSL?: boolean;
|
|
19
|
+
PG_SSL_REJECT_UNAUTHORIZED?: boolean;
|
|
18
20
|
PG_CONNECTION_LIMIT?: number;
|
|
19
21
|
PG_IDLE_TIMEOUT_SECONDS?: number;
|
|
20
22
|
AUTH_JWT_ISSUER?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/app/config.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IACtB,OAAO,EAAG,MAAM,CAAC;IAEjB,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IAEpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAQ;IAEvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAM;IAE9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAa;IAE/B,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,UAAU,EAAE,OAAO,GAAG,OAAO,CAAW;IACxC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAGhC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAElC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wBAAwB,SAAU;IAElC,yBAAyB,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAS;IAExE,8BAA8B,EAAE,OAAO,CAAS;IAEhD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,GAAG,UAAU,CAAU;IAC5C,SAAS,EAAE,MAAM,CAAe;IAChC,SAAS,EAAE,MAAM,CAAQ;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAS;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,EAAE,YAAY,GAAE,OAAc,GAAG,OAAO,CAK/G"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/app/config.ts"],"names":[],"mappings":"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"}
|
package/dist/src/app/config.js
CHANGED
|
@@ -19,7 +19,7 @@ class BaseAppConfig {
|
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
21
|
exports.BaseAppConfig = BaseAppConfig;
|
|
22
|
-
BaseAppConfig.__type = ['APP_ENV', 'PORT', 'MYSQL_HOST', 'MYSQL_PORT', 'MYSQL_USER', 'MYSQL_PASSWORD_SECRET', 'MYSQL_DATABASE', 'MYSQL_CONNECTION_LIMIT', 'MYSQL_MIN_IDLE_CONNECTIONS', 'MYSQL_IDLE_TIMEOUT_SECONDS', 'PG_HOST', 'PG_PORT', 'PG_USER', 'PG_PASSWORD_SECRET', 'PG_DATABASE', 'PG_SCHEMA', 'PG_CONNECTION_LIMIT', 'PG_IDLE_TIMEOUT_SECONDS', 'AUTH_JWT_ISSUER', 'AUTH_JWT_EXPIRATION_MINS', 'AUTH_JWT_COOKIE_NAME', 'AUTH_JWT_SECRET', 'AUTH_JWT_SECRET_B64', 'AUTH_JWT_ED_SECRET', 'AUTH_JWT_ENABLE_VERIFY', function () { return true; }, 'AUTH_BASIC_SECRET', 'CRYPTO_SECRET', 'CRYPTO_IV_LENGTH', function () { return 12; }, 'USE_REAL_IP_HEADER', 'MAIL_POSTMARK_SECRET', 'REDIS_SENTINEL_HOST', 'REDIS_SENTINEL_PORT', 'REDIS_SENTINEL_NAME', 'REDIS_HOST', 'REDIS_PORT', 'REDIS_PREFIX', 'CACHE_REDIS_SENTINEL_HOST', 'CACHE_REDIS_SENTINEL_PORT', 'CACHE_REDIS_SENTINEL_NAME', 'CACHE_REDIS_HOST', 'CACHE_REDIS_PORT', 'CACHE_REDIS_PREFIX', 'BROADCAST_REDIS_SENTINEL_HOST', 'BROADCAST_REDIS_SENTINEL_PORT', 'BROADCAST_REDIS_SENTINEL_NAME', 'BROADCAST_REDIS_HOST', 'BROADCAST_REDIS_PORT', 'BROADCAST_REDIS_PREFIX', 'BULL_REDIS_SENTINEL_HOST', 'BULL_REDIS_SENTINEL_PORT', 'BULL_REDIS_SENTINEL_NAME', 'BULL_REDIS_HOST', 'BULL_REDIS_PORT', 'BULL_REDIS_PREFIX', 'BULL_QUEUE', function () { return 'default'; }, 'MESH_REDIS_SENTINEL_HOST', 'MESH_REDIS_SENTINEL_PORT', 'MESH_REDIS_SENTINEL_NAME', 'MESH_REDIS_HOST', 'MESH_REDIS_PORT', 'MESH_REDIS_PREFIX', "local", "redis", 'MUTEX_MODE', function () { return 'local'; }, 'MUTEX_REDIS_SENTINEL_HOST', 'MUTEX_REDIS_SENTINEL_PORT', 'MUTEX_REDIS_SENTINEL_NAME', 'MUTEX_REDIS_HOST', 'MUTEX_REDIS_PORT', 'MUTEX_REDIS_PREFIX', 'ENABLE_OPENAPI_SCHEMA', 'ENABLE_JOB_RUNNER', 'SENTRY_DSN', 'OTEL_EXPORTER_OTLP_ENDPOINT', 'ALERTS_SLACK_WEBHOOK_URL', 'SRPC_AUTH_SECRET', 'SRPC_AUTH_CLOCK_DRIFT_MS', function () { return 30_000; }, "none", "e2e", "finish", "errors", 'HTTP_REQUEST_LOGGING_MODE', function () { return 'e2e'; }, 'HEALTHZ_ENABLE_REQUEST_LOGGING', function () { return false; }, 'MAIL_FROM', 'MAIL_FROM_NAME', "smtp", "postmark", 'MAIL_PROVIDER', function () { return 'smtp'; }, 'SMTP_HOST', function () { return '127.0.0.1'; }, 'SMTP_PORT', function () { return 1025; }, 'SMTP_USER', 'SMTP_PASSWORD_SECRET', 'SMTP_TLS', function () { return false; }, 'POSTMARK_SECRET', 'BaseAppConfig', '&3!\'3"8&3#8\'3$8&3%8&3&8&3\'8\'3(8\'3)8\'3*8&3+8\'3,8&3-8&3.8&3/8&308
|
|
22
|
+
BaseAppConfig.__type = ['APP_ENV', 'PORT', 'MYSQL_HOST', 'MYSQL_PORT', 'MYSQL_USER', 'MYSQL_PASSWORD_SECRET', 'MYSQL_DATABASE', 'MYSQL_CONNECTION_LIMIT', 'MYSQL_MIN_IDLE_CONNECTIONS', 'MYSQL_IDLE_TIMEOUT_SECONDS', 'PG_HOST', 'PG_PORT', 'PG_USER', 'PG_PASSWORD_SECRET', 'PG_DATABASE', 'PG_SCHEMA', 'PG_SSL', 'PG_SSL_REJECT_UNAUTHORIZED', 'PG_CONNECTION_LIMIT', 'PG_IDLE_TIMEOUT_SECONDS', 'AUTH_JWT_ISSUER', 'AUTH_JWT_EXPIRATION_MINS', 'AUTH_JWT_COOKIE_NAME', 'AUTH_JWT_SECRET', 'AUTH_JWT_SECRET_B64', 'AUTH_JWT_ED_SECRET', 'AUTH_JWT_ENABLE_VERIFY', function () { return true; }, 'AUTH_BASIC_SECRET', 'CRYPTO_SECRET', 'CRYPTO_IV_LENGTH', function () { return 12; }, 'USE_REAL_IP_HEADER', 'MAIL_POSTMARK_SECRET', 'REDIS_SENTINEL_HOST', 'REDIS_SENTINEL_PORT', 'REDIS_SENTINEL_NAME', 'REDIS_HOST', 'REDIS_PORT', 'REDIS_PREFIX', 'CACHE_REDIS_SENTINEL_HOST', 'CACHE_REDIS_SENTINEL_PORT', 'CACHE_REDIS_SENTINEL_NAME', 'CACHE_REDIS_HOST', 'CACHE_REDIS_PORT', 'CACHE_REDIS_PREFIX', 'BROADCAST_REDIS_SENTINEL_HOST', 'BROADCAST_REDIS_SENTINEL_PORT', 'BROADCAST_REDIS_SENTINEL_NAME', 'BROADCAST_REDIS_HOST', 'BROADCAST_REDIS_PORT', 'BROADCAST_REDIS_PREFIX', 'BULL_REDIS_SENTINEL_HOST', 'BULL_REDIS_SENTINEL_PORT', 'BULL_REDIS_SENTINEL_NAME', 'BULL_REDIS_HOST', 'BULL_REDIS_PORT', 'BULL_REDIS_PREFIX', 'BULL_QUEUE', function () { return 'default'; }, 'MESH_REDIS_SENTINEL_HOST', 'MESH_REDIS_SENTINEL_PORT', 'MESH_REDIS_SENTINEL_NAME', 'MESH_REDIS_HOST', 'MESH_REDIS_PORT', 'MESH_REDIS_PREFIX', "local", "redis", 'MUTEX_MODE', function () { return 'local'; }, 'MUTEX_REDIS_SENTINEL_HOST', 'MUTEX_REDIS_SENTINEL_PORT', 'MUTEX_REDIS_SENTINEL_NAME', 'MUTEX_REDIS_HOST', 'MUTEX_REDIS_PORT', 'MUTEX_REDIS_PREFIX', 'ENABLE_OPENAPI_SCHEMA', 'ENABLE_JOB_RUNNER', 'SENTRY_DSN', 'OTEL_EXPORTER_OTLP_ENDPOINT', 'ALERTS_SLACK_WEBHOOK_URL', 'SRPC_AUTH_SECRET', 'SRPC_AUTH_CLOCK_DRIFT_MS', function () { return 30_000; }, "none", "e2e", "finish", "errors", 'HTTP_REQUEST_LOGGING_MODE', function () { return 'e2e'; }, 'HEALTHZ_ENABLE_REQUEST_LOGGING', function () { return false; }, 'MAIL_FROM', 'MAIL_FROM_NAME', "smtp", "postmark", 'MAIL_PROVIDER', function () { return 'smtp'; }, 'SMTP_HOST', function () { return '127.0.0.1'; }, 'SMTP_PORT', function () { return 1025; }, 'SMTP_USER', 'SMTP_PASSWORD_SECRET', 'SMTP_TLS', function () { return false; }, 'POSTMARK_SECRET', 'BaseAppConfig', '&3!\'3"8&3#8\'3$8&3%8&3&8&3\'8\'3(8\'3)8\'3*8&3+8\'3,8&3-8&3.8&3/8&308)318)328\'338\'348&358\'368&378&388&398&3:8)3;><&3=8&3>8\'3?>@)3A8&3B8&3C8\'3D8&3E8&3F8\'3G8&3H8&3I8\'3J8&3K8&3L8\'3M8&3N8&3O8\'3P8&3Q8&3R8\'3S8&3T8&3U8\'3V8&3W8&3X8\'3Y8&3Z8&3[>\\&3]8\'3^8&3_8&3`8\'3a8&3b8P.c.dJ3e>f&3g8\'3h8&3i8&3j8\'3k8&3l8)3m8)3n8&3o8&3p8&3q8&3r8\'3s>tP.u.v.w.xJ3y>z)3{>|&3}8&3~8P..\u0080J3\u0081>\u0082&3\u0083>\u0084\'3\u0085>\u0086&3\u00878&3\u00888)3\u0089>\u008A&3\u008B85w\u008C'];
|
|
23
23
|
function isDevFeatureEnabled(envVar, defaultInDev = true) {
|
|
24
24
|
if (typeof envVar === 'boolean')
|
|
25
25
|
return envVar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/app/config.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/app/config.ts"],"names":[],"mappings":";;;AAmHA,kDAKC;AAxHD,mCAAgD;AAEhD,MAAa,aAAa;IAA1B;QA+BI,2BAAsB,GAAY,IAAI,CAAC;QAKvC,qBAAgB,GAAW,EAAE,CAAC;QAiC9B,eAAU,GAAW,SAAS,CAAC,CAAC,mDAAmD;QASnF,eAAU,GAAsB,OAAO,CAAC;QAkBxC,6BAAwB,GAAG,MAAM,CAAC;QAElC,8BAAyB,GAAyC,KAAK,CAAC;QAExE,mCAA8B,GAAY,KAAK,CAAC;QAIhD,kBAAa,GAAwB,MAAM,CAAC;QAC5C,cAAS,GAAW,WAAW,CAAC;QAChC,cAAS,GAAW,IAAI,CAAC;QAGzB,aAAQ,GAAY,KAAK,CAAC;KAE7B;;AA/GD,sCA+GC;yjBAhFqC,IAAI,oFAKX,EAAE,wpBAiCR,SAAS,yMASE,OAAO,sVAkBZ,MAAM,0FAEiC,KAAK,4DAE7B,KAAK,8FAIV,MAAM,uCACvB,WAAW,uCACX,IAAI,2EAGJ,KAAK;AAI7B,SAAgB,mBAAmB,CAAC,MAAoC,EAAE,eAAwB,IAAI;IAClG,IAAI,OAAO,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACvD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO,qBAAa,IAAI,cAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAsB,uBAAuB,IAAI,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAU/E,qBAAa,uBAAwB,SAAQ,2BAA2B;IACpE,uBAAuB;CAsB1B;AAED,MAAM,WAAW,8BAA+B,SAAQ,UAAU;IAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,8BAA8B,EACtC,QAAQ,GAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAM,GACzD,SAAS,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAsB,uBAAuB,IAAI,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAU/E,qBAAa,uBAAwB,SAAQ,2BAA2B;IACpE,uBAAuB;CAsB1B;AAED,MAAM,WAAW,8BAA+B,SAAQ,UAAU;IAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,8BAA8B,EACtC,QAAQ,GAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAM,GACzD,SAAS,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CA6ClD"}
|
|
@@ -56,12 +56,14 @@ function createPostgresDatabase(config, entities = []) {
|
|
|
56
56
|
const appConfig = (0, resolver_1.getAppConfig)();
|
|
57
57
|
const isProduction = appConfig.APP_ENV === 'production';
|
|
58
58
|
const { enableLocksTable, ...otherConfig } = config;
|
|
59
|
+
const ssl = appConfig.PG_SSL ? { rejectUnauthorized: appConfig.PG_SSL_REJECT_UNAUTHORIZED ?? true } : undefined;
|
|
59
60
|
const adapter = new PostgresDatabaseAdapter({
|
|
60
61
|
host: appConfig.PG_HOST,
|
|
61
62
|
port: appConfig.PG_PORT,
|
|
62
63
|
user: appConfig.PG_USER,
|
|
63
64
|
password: appConfig.PG_PASSWORD_SECRET,
|
|
64
65
|
database: appConfig.PG_DATABASE,
|
|
66
|
+
ssl,
|
|
65
67
|
max: appConfig.PG_CONNECTION_LIMIT ?? (isProduction ? 10 : 5),
|
|
66
68
|
idleTimeoutMillis: (appConfig.PG_IDLE_TIMEOUT_SECONDS ?? (isProduction ? 60 : 5)) * 1000,
|
|
67
69
|
...otherConfig
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":";;;AAmDA,
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,5 @@
|
|
|
1
1
|
import { IncomingMessage } from 'http';
|
|
2
2
|
import { BaseMessage, HandlerRequestData, InvokePrefixes, ISrpcServerOptions, RequestData, ResponseData, SrpcDisconnectCause, SrpcMeta, SrpcStream, TSrpcMessageHandlerFnOrClass } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* Monkey-patches `httpServer.emit` so that once an upgrade listener claims
|
|
5
|
-
* a socket (by setting UpgradeClaimedSymbol), no further listeners are
|
|
6
|
-
* invoked. This prevents consumer @AutoStart services from destroying
|
|
7
|
-
* sockets that an SrpcServer is already handling.
|
|
8
|
-
*
|
|
9
|
-
* Also installs a low-priority fallback that destroys any socket not
|
|
10
|
-
* claimed by any handler (via setImmediate, after all sync work).
|
|
11
|
-
*/
|
|
12
|
-
export declare function installUpgradeClaimHandling(httpServer: import('http').Server): void;
|
|
13
|
-
/**
|
|
14
|
-
* Returns `true` if the given socket has already been claimed by an
|
|
15
|
-
* upgrade handler (via `markUpgradeClaimed`).
|
|
16
|
-
*/
|
|
17
|
-
export declare function isUpgradeClaimed(socket: import('net').Socket): boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Mark a socket as claimed so that `installUpgradeClaimHandling`'s
|
|
20
|
-
* patched emit stops propagating the `'upgrade'` event to subsequent
|
|
21
|
-
* listeners. SrpcServer calls this automatically; consumer apps with
|
|
22
|
-
* their own WebSocket upgrade logic can call it to participate in the
|
|
23
|
-
* same claim protocol.
|
|
24
|
-
*/
|
|
25
|
-
export declare function markUpgradeClaimed(socket: import('net').Socket): void;
|
|
26
3
|
export declare class SrpcServer<TMeta extends SrpcMeta = SrpcMeta, TClientOutput extends BaseMessage = BaseMessage, TServerOutput extends BaseMessage = BaseMessage> {
|
|
27
4
|
private options;
|
|
28
5
|
private standardSrpcAuthKey?;
|
|
@@ -31,7 +8,6 @@ export declare class SrpcServer<TMeta extends SrpcMeta = SrpcMeta, TClientOutput
|
|
|
31
8
|
private logger;
|
|
32
9
|
private wsServer;
|
|
33
10
|
private httpServer;
|
|
34
|
-
private upgradeHandler;
|
|
35
11
|
private inboundType;
|
|
36
12
|
private outboundType;
|
|
37
13
|
private clientAuthorizer?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SrpcServer.d.ts","sourceRoot":"","sources":["../../../src/srpc/SrpcServer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"SrpcServer.d.ts","sourceRoot":"","sources":["../../../src/srpc/SrpcServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SrpcServer = void 0;
|
|
4
|
-
exports.installUpgradeClaimHandling = installUpgradeClaimHandling;
|
|
5
|
-
exports.isUpgradeClaimed = isUpgradeClaimed;
|
|
6
|
-
exports.markUpgradeClaimed = markUpgradeClaimed;
|
|
7
4
|
const tslib_1 = require("tslib");
|
|
8
5
|
const __ΩReturnType = ['T', 'args', '', 'ReturnType', 'l>e"!R"RPde#!P"@2"h"!/#qk#\'QRb!Pde"!p)w$y'];
|
|
9
6
|
const __ΩNonNullable = ['T', 'NonNullable', 'b!Pe"!PMKw"y'];
|
|
@@ -22,76 +19,12 @@ const helpers_1 = require("../helpers");
|
|
|
22
19
|
const services_1 = require("../services");
|
|
23
20
|
const telemetry_1 = require("../telemetry");
|
|
24
21
|
const SrpcByteStream_1 = require("./SrpcByteStream");
|
|
22
|
+
const WebSocketUpgradeHandler_1 = require("./WebSocketUpgradeHandler");
|
|
25
23
|
/*@ts-ignore*/
|
|
26
24
|
var { __ΩSrpcStream, __ΩRequestKeys, __ΩTSrpcMessageHandlerFnOrClass, __ΩSrpcDisconnectCause, __ΩIQueuedRequest, __ΩSrpcMeta, __ΩBaseMessage, __ΩSrpcMessageFns, __ΩISrpcServerOptions, __ΩHandlerRequestData, __ΩResponseData, __ΩRequestData } = require('./types');
|
|
27
25
|
const types_1 = require("./types");
|
|
28
26
|
const type_1 = require("@deepkit/type");
|
|
29
27
|
const StreamInfoSymbol = Symbol('srpc-info');
|
|
30
|
-
const UpgradeClaimedSymbol = Symbol('srpc-upgrade-claimed');
|
|
31
|
-
const _patchedServers = (WeakSet.Ω = [['!']], new WeakSet());
|
|
32
|
-
/**
|
|
33
|
-
* Monkey-patches `httpServer.emit` so that once an upgrade listener claims
|
|
34
|
-
* a socket (by setting UpgradeClaimedSymbol), no further listeners are
|
|
35
|
-
* invoked. This prevents consumer @AutoStart services from destroying
|
|
36
|
-
* sockets that an SrpcServer is already handling.
|
|
37
|
-
*
|
|
38
|
-
* Also installs a low-priority fallback that destroys any socket not
|
|
39
|
-
* claimed by any handler (via setImmediate, after all sync work).
|
|
40
|
-
*/
|
|
41
|
-
function installUpgradeClaimHandling(httpServer) {
|
|
42
|
-
if (_patchedServers.has(httpServer))
|
|
43
|
-
return;
|
|
44
|
-
_patchedServers.add(httpServer);
|
|
45
|
-
// Patch emit to stop propagation once a socket is claimed.
|
|
46
|
-
const originalEmit = httpServer.emit;
|
|
47
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
48
|
-
httpServer.emit = __assignType(function (event, ...args) {
|
|
49
|
-
if (event !== 'upgrade') {
|
|
50
|
-
return originalEmit.apply(this, [event, ...args]);
|
|
51
|
-
}
|
|
52
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
-
const socket = args[1];
|
|
54
|
-
const listeners = this.rawListeners('upgrade').slice();
|
|
55
|
-
for (const fn of listeners) {
|
|
56
|
-
fn.apply(this, args);
|
|
57
|
-
if (socket[UpgradeClaimedSymbol])
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
60
|
-
return listeners.length > 0;
|
|
61
|
-
}, ['this', 'event', 'args', '', 'P!2!P&+J2""@2#)/$']);
|
|
62
|
-
// Fallback: destroy sockets not claimed by any handler.
|
|
63
|
-
httpServer.on('upgrade', __assignType((_req, socket) => {
|
|
64
|
-
setImmediate(() => {
|
|
65
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
66
|
-
if (!socket[UpgradeClaimedSymbol] && !socket.destroyed) {
|
|
67
|
-
socket.write('HTTP/1.1 400 Bad Request\r\n\r\n');
|
|
68
|
-
socket.destroy();
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}, ['_req', 'socket', '', 'P"2!!2""/#']));
|
|
72
|
-
}
|
|
73
|
-
installUpgradeClaimHandling.__type = ['httpServer', 'installUpgradeClaimHandling', 'P!2!"/"'];
|
|
74
|
-
/**
|
|
75
|
-
* Returns `true` if the given socket has already been claimed by an
|
|
76
|
-
* upgrade handler (via `markUpgradeClaimed`).
|
|
77
|
-
*/
|
|
78
|
-
function isUpgradeClaimed(socket) {
|
|
79
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
80
|
-
return !!socket[UpgradeClaimedSymbol];
|
|
81
|
-
}
|
|
82
|
-
isUpgradeClaimed.__type = ['socket', 'isUpgradeClaimed', 'P!2!)/"'];
|
|
83
|
-
/**
|
|
84
|
-
* Mark a socket as claimed so that `installUpgradeClaimHandling`'s
|
|
85
|
-
* patched emit stops propagating the `'upgrade'` event to subsequent
|
|
86
|
-
* listeners. SrpcServer calls this automatically; consumer apps with
|
|
87
|
-
* their own WebSocket upgrade logic can call it to participate in the
|
|
88
|
-
* same claim protocol.
|
|
89
|
-
*/
|
|
90
|
-
function markUpgradeClaimed(socket) {
|
|
91
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
92
|
-
socket[UpgradeClaimedSymbol] = true;
|
|
93
|
-
}
|
|
94
|
-
markUpgradeClaimed.__type = ['socket', 'markUpgradeClaimed', 'P!2!$/"'];
|
|
95
28
|
class SrpcServer {
|
|
96
29
|
constructor(options) {
|
|
97
30
|
this.options = options;
|
|
@@ -133,25 +66,12 @@ class SrpcServer {
|
|
|
133
66
|
this.httpServer = app.getHttpWorker()['server'];
|
|
134
67
|
this.wsServer = new ws_1.default.Server({ noServer: true });
|
|
135
68
|
this.wsServer.on('connection', this.attachConnection.bind(this));
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
this.verifyClient({ origin: '', secure: false, req }, __assignType((allowed, code, message) => {
|
|
143
|
-
if (!allowed) {
|
|
144
|
-
socket.write(`HTTP/1.1 ${code ?? 403} ${message ?? 'Forbidden'}\r\n\r\n`);
|
|
145
|
-
socket.destroy();
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
this.wsServer.handleUpgrade(req, socket, head, __assignType(ws => {
|
|
149
|
-
this.wsServer.emit('connection', ws, req);
|
|
150
|
-
}, ['ws', '', 'P"2!"/"']));
|
|
151
|
-
}, ['allowed', 'code', 'message', '', 'P"2!"2""2#"/$']));
|
|
152
|
-
}, ['req', 'socket', 'head', '', 'P!2!"2"!2#"/$']);
|
|
153
|
-
this.httpServer.prependListener('upgrade', this.upgradeHandler);
|
|
154
|
-
installUpgradeClaimHandling(this.httpServer);
|
|
69
|
+
(0, WebSocketUpgradeHandler_1.installWebSocketUpgradeHandler)({
|
|
70
|
+
httpServer: this.httpServer,
|
|
71
|
+
wsPath: options.wsPath,
|
|
72
|
+
wsServer: this.wsServer,
|
|
73
|
+
verifyClient: this.verifyClient.bind(this)
|
|
74
|
+
});
|
|
155
75
|
this.logger.info('WebSocket server listening', { path: options.wsPath });
|
|
156
76
|
this.inactivityCheckInterval = setInterval(() => this.terminateInactiveStreams(), 15_000);
|
|
157
77
|
}
|
|
@@ -330,7 +250,6 @@ class SrpcServer {
|
|
|
330
250
|
}
|
|
331
251
|
close() {
|
|
332
252
|
clearInterval(this.inactivityCheckInterval);
|
|
333
|
-
this.httpServer.off('upgrade', this.upgradeHandler);
|
|
334
253
|
for (const stream of this.streamsById.values()) {
|
|
335
254
|
this.cleanupStream(stream, 'disconnect');
|
|
336
255
|
}
|
|
@@ -557,5 +476,5 @@ class SrpcServer {
|
|
|
557
476
|
}
|
|
558
477
|
}
|
|
559
478
|
exports.SrpcServer = SrpcServer;
|
|
560
|
-
SrpcServer.__type = [() => __ΩSrpcMeta, 'TMeta', () => __ΩBaseMessage, 'TClientOutput', () => __ΩBaseMessage, 'TServerOutput', 'standardSrpcAuthKey', 'authClockDriftMs', 'useRealIpHeader', () => __ΩScopedLogger, 'logger', 'wsServer', 'httpServer',
|
|
479
|
+
SrpcServer.__type = [() => __ΩSrpcMeta, 'TMeta', () => __ΩBaseMessage, 'TClientOutput', () => __ΩBaseMessage, 'TServerOutput', 'standardSrpcAuthKey', 'authClockDriftMs', 'useRealIpHeader', () => __ΩScopedLogger, 'logger', 'wsServer', 'httpServer', () => __ΩSrpcMessageFns, 'inboundType', () => __ΩSrpcMessageFns, 'outboundType', () => __ΩSrpcMeta, 'metadata', 'req', () => __ΩSrpcMeta, '', 'clientAuthorizer', 'clientId', false, 'clientKeyFetcher', 'streamConnectionHandlers', function () { return (Set.Ω = [[() => __ΩSrpcStream, 'stream', '', 'P!o!"2"$/#']], new Set()); }, 'streamMessageHandlers', function () { return (Map.Ω = [[() => __ΩRequestKeys, '!o!"'], ['resultType', () => __ΩTSrpcMessageHandlerFnOrClass, () => __ΩSrpcStream, 'handler', 'P&4!!o#"""o"$4$M']], new Map()); }, 'streamDisconnectionHandlers', function () { return (Set.Ω = [[() => __ΩSrpcStream, 'stream', () => __ΩSrpcDisconnectCause, 'cause', '', 'P!o!"2"n#2$$/%']], new Set()); }, () => __ΩReturnType, () => setInterval, 'inactivityCheckInterval', 'streamsById', function () { return (Map.Ω = [['&'], [() => __ΩSrpcStream, '!o!"']], new Map()); }, 'streamsByClientId', function () { return (Map.Ω = [['&'], [() => __ΩSrpcStream, '!o!"']], new Map()); }, () => __ΩISrpcServerOptions, 'options', 'constructor', 'origin', 'secure', 'info', 'res', 'code', 'message', 'cb', 'verifyClient', () => ws_1.default, 'ws', 'attachConnection', () => __ΩSrpcStream, 'stream', 'data', 'handleWsMessage', () => ws_1.default, 'write', () => __ΩSrpcStream, 'writeToStream', () => __ΩSrpcStream, () => __ΩSrpcDisconnectCause, 'cause', 'closeStreamWithError', () => __ΩSrpcMeta, 'meta', 'validateClientAuth', 'fetchClientKey', () => __ΩSrpcMeta, () => __ΩSrpcMeta, 'authorizer', 'setClientAuthorizer', false, 'fetcher', 'setClientKeyFetcher', 'close', () => __ΩSrpcStream, 'handleStreamEstablished', () => __ΩSrpcStream, 'handleStreamDisconnected', () => __ΩSrpcStream, 'err', 'handleStreamError', 'terminateInactiveStreams', () => __ΩSrpcStream, () => __ΩSrpcDisconnectCause, 'forceCause', 'cleanupStream', () => __ΩSrpcStream, 'handleStreamDataReceived', () => __ΩSrpcStream, () => __ΩNonNullable, "byteStreamOperation", 'op', 'handleByteSubstreamOperation', () => __ΩSrpcStream, 'requestId', () => __ΩPartial, 'handleClientRequest', () => __ΩTSrpcMessageHandlerFnOrClass, () => __ΩSrpcStream, 'handler', () => __ΩSrpcStream, 'runMessageHandler', () => __ΩSrpcStream, 'registerConnectionHandler', 'prefix', () => __ΩTSrpcMessageHandlerFnOrClass, () => __ΩSrpcStream, () => __ΩHandlerRequestData, () => __ΩResponseData, 'registerMessageHandler', () => __ΩSrpcStream, () => __ΩSrpcDisconnectCause, 'registerDisconnectHandler', () => __ΩSrpcStream, () => __ΩRequestData, 'timeoutMs', () => __ΩResponseData, 'invoke', () => SrpcServer, 'instanceFn', () => SrpcServer, "invoke", 'createInvoke', 'SrpcServer', 'n!c"n#c$n%c&&3\'8;\'3(;)3);n*3+;!3,;!3-;e!"o."3/;e!#o0"31;Pn223!24P)n5J`/6378;P&28P.9&J`/63:8;!3;;><!3=;>>!3?;>@iBoA"3C;!3D9>E!3F9>GPe""e"#oH#2I;"0JPP&4K)4L!44M2MP)2N\'2O8&2P8$/62Q"0R;PP7S2T!24"0U;Pe"!oV"2W!2X"0Y;PP7Z2Te"#2P"0[;Pe"!o\\"2We"#2X$0];Pe"!o^"2Wn_2`&2P"0a;Pnb2c!24"0d;P&28"0e;PPnf23!24P)ngJ`/62h"0iPP&28P.j&J`/62k"0lP"0mPe"!on"2W"0o;Pe"!op"2W$0q;Pe"!or"2W"2s$0t;P"0u;Pe"!ov"2Wnw2x8"0y;Pe"!oz"2We""2X$0{;Pe"!o|"2We"".~fo}"2$0\u0080;Pe"!o\u0081"2W&2\u0082e""2Pe"#o\u0083"`0\u0084;Pe"!o\u0086"""o\u0085$2\u0087e"!o\u0088"2W"2X"0\u0089;PPe#!o\u008A"2W$/62\u0087"0\u008BP"2\u008Ce"!o\u008E"e"""o\u008F#e"#"o\u0090#o\u008D$2\u0087"0\u0091PPe#!o\u0092"2Wn\u00932`$/62\u0087"0\u0094Pe"!o\u0095"2W"2\u008Ce"#"o\u0096#2X"2\u0097e"""o\u0098#`0\u0099PPP"""7\u009A/62\u009BP"""7\u009C.\u009Df0\u009Es5w\u009F'];
|
|
561
480
|
//# sourceMappingURL=SrpcServer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SrpcServer.js","sourceRoot":"","sources":["../../../src/srpc/SrpcServer.ts"],"names":[],"mappings":";;;AA4CA,kEAgCC;AAMD,4CAGC;AASD,gDAGC;;;;;;;;;AAjGD,kDAAuD;;kCAC1B,iBAAiB;AAC9C,mCAAqD;AAErD,oDAA2B;AAE3B,8CAAkD;AAClD,wCAAmC;AACnC,0CAAgD;AAChD,4CAAyE;AACzE,qDAAkD;;2PAkB3C,SAAS;AAjBhB,mCAiBiB;AACjB,wCAAqC;AAErC,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7C,MAAM,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAC5D,MAAM,eAAe,IAAO,OAAO,cAAX,IAAI,OAAO,EAAyB,CAAA,CAAC;AAE7D;;;;;;;;GAQG;AACH,SAAgB,2BAA2B,CAAC,UAAiC;IACzE,IAAI,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,OAAO;IAC5C,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEhC,2DAA2D;IAC3D,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;IACrC,8DAA8D;IAC9D,UAAU,CAAC,IAAI,gBAAG,UAAuC,KAAsB,EAAE,GAAG,IAAW;QAC3F,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAQ,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QACvD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YACxB,EAAe,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,MAAM,CAAC,oBAAoB,CAAC;gBAAE,MAAM;QAC5C,CAAC;QACD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,CAAC,qDAAA,CAAC;IAEF,wDAAwD;IACxD,UAAU,CAAC,EAAE,CAAC,SAAS,eAAE,CAAC,IAAI,EAAE,MAA4B,EAAE,EAAE;QAC5D,YAAY,CAAC,GAAG,EAAE;YACd,8DAA8D;YAC9D,IAAI,CAAE,MAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC9D,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACjD,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,wCAAC,CAAC;AACP,CAAC;;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,MAA4B;IACzD,8DAA8D;IAC9D,OAAO,CAAC,CAAE,MAAc,CAAC,oBAAoB,CAAC,CAAC;AACnD,CAAC;;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,MAA4B;IAC3D,8DAA8D;IAC7D,MAAc,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;AACjD,CAAC;;AAED,MAAa,UAAU;IAgCnB,YAAoB,OAAyD;QAAzD,YAAO,GAAP,OAAO,CAAkD;QAbrE,6BAAwB,IAAO,GAAG,0DAAP,IAAI,GAAG,EAAuC,EAAC;QAClF,8DAA8D;QACtD,0BAAqB,IAAO,GAAG,kJAAP,IAAI,GAAG,EAIpC,EAAC;QACI,gCAA2B,IAAO,GAAG,qGAAP,IAAI,GAAG,EAAmE,EAAC;QAGjG,gBAAW,IAAO,GAAG,6CAAP,IAAI,GAAG,EAA6B,EAAC;QACnD,sBAAiB,IAAO,GAAG,6CAAP,IAAI,GAAG,EAA6B,EAAC;QAGrE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;QAC5C,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAAQ,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAS,CAAC;YAC1E,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG;gBACV,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aACxB,CAAC;QACb,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;QAE1C,MAAM,SAAS,GAAG,IAAA,uBAAY,GAAE,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,gBAAgB,CAAC;QACtD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,wBAAwB,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,kBAAkB,IAAI,KAAK,CAAC;QAE7D,oEAAoE;QACpE,oEAAoE;QACpE,+DAA+D;QAC/D,sEAAsE;QACtE,MAAM,GAAG,GAAG,IAAA,YAAC,EAAC,6BAAiB,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjE,8DAA8D;QAC9D,IAAI,CAAC,cAAc,gBAAG,CAAC,GAAoB,EAAE,MAAW,EAAE,IAAY,EAAE,EAAE;YACtE,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,IAAI,QAAQ,KAAK,OAAO,CAAC,MAAM;gBAAE,OAAO;YAExC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAE3B,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,eAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;gBAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,GAAG,IAAI,OAAO,IAAI,WAAW,UAAU,CAAC,CAAC;oBAC1E,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,OAAO;gBACX,CAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,eAAE,EAAE,CAAC,EAAE;oBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9C,CAAC,yBAAC,CAAC;YACP,CAAC,uDAAC,CAAC;QACP,CAAC,iDAAA,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChE,2BAA2B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzE,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9F,CAAC;IAED,wCAAwC;IACxC,gCAAgC;IAExB,YAAY,CAChB,IAA+D,EAC/D,EAA2D;QAE3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAI,EAAE,kBAAkB,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QAEzD,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QAEzG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;YACrD,OAAO;YACP,cAAc;YACd,QAAQ;YACR,UAAU;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;YAC3F,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,mCAAmC,CAAC,CAAC;YACpD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,cACrC,MAAM,CAAC,EAAE;YACL,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC/E,0DAA0D;gBAC1D,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,uBAAuB,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;iBACZ,MAAM,cAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,6BAAC;iBACxC,GAAG,cAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,6BAAC,CACpD,CAAC;YAEF,8DAA8D;YAC7D,IAAI,CAAC,GAAW,CAAC,gBAAgB,CAAC,GAAG;gBAClC,cAAc;gBACd,QAAQ;gBACR,UAAU;gBACV,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC;gBAClC,OAAO;gBACP,IAAI,EAAE;oBACF,GAAG,IAAI;oBACP,GAAG,QAAQ;iBACd;aACJ,CAAC;YAEF,0DAA0D;YAC1D,EAAE,CAAC,IAAI,CAAC,CAAC;QACb,CAAC,2CACD,GAAG,CAAC,EAAE;YACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;YACrF,0DAA0D;YAC1D,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,6BAA6B,CAAC,CAAC;QAClD,CAAC,0BACJ,CAAC;IACN,CAAC;IAEO,gBAAgB,CAAC,EAAa,EAAE,GAAoB;QACxD,8DAA8D;QAC9D,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAI,GAAW,CAAC,gBAAgB,CAAC,CAAC;QAE5G,MAAM,QAAQ,GAAG,IAAA,WAAI,GAAE,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YAC3C,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,cAAc;YACd,IAAI;SACP,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAsB;YAC9B,GAAG,EAAE,EAAE;YACP,MAAM,GAAM,GAAG,+CAAP,IAAI,GAAG,EAA0B,CAAA;YACzC,EAAE,EAAE,QAAQ;YACZ,cAAc;YACd,OAAO;YACP,QAAQ;YACR,UAAU;YACV,WAAW;YACX,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,GAAG;YACf,IAAI;YACJ,UAAU,EAAE;gBACR,cAAc,EAAE,QAAQ;gBACxB,8DAA8D;gBAC9D,KAAK,eAAE,CAAC,WAAmB,EAAE,KAAU,EAAE,EAAE;oBACvC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAmB,CAAC,CAAC;oBACtG,OAAO,IAAI,CAAC;gBAChB,CAAC,8CAAA;gBACD,MAAM,eAAE,CAAC,WAAmB,EAAE,EAAE;oBAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,EAAmB,CAAC,CAAC;gBACpG,CAAC,kCAAA;gBACD,8DAA8D;gBAC9D,OAAO,eAAE,CAAC,WAAmB,EAAE,GAAS,EAAE,EAAE;oBACxC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;wBACX,mBAAmB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE;qBACnF,CAAC,CAAC;gBACxB,CAAC,6CAAA;gBACD,uBAAuB,wBAAvB,uBAAuB,CAAC,OAAmB;oBACvC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5B,CAAC;gBACD,uBAAuB,wBAAvB,uBAAuB,CAAC,OAAmB;oBACvC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBACD,iBAAiB,wBAAjB,iBAAiB;oBACb,OAAO,EAAE,CAAC,cAAc,CAAC;gBAC7B,CAAC;aACJ;SACJ,CAAC;QAEF,+BAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAErD,EAAE,CAAC,EAAE,CAAC,SAAS,eAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,2BAAC,CAAC;QAC7D,EAAE,CAAC,EAAE,CAAC,OAAO,eAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,0BAAC,CAAC;QAC3D,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,eAAe,CAAC,MAAyB,EAAE,IAAoB;QACnE,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxG,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACjF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,EAAa,EAAE,OAAsB;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa,CAAC,MAAyB,EAAE,IAAmB;QAChE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,oBAAoB,CAAC,MAAyB,EAAE,KAA0B,EAAE,OAAe;QAC/F,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,wCAAwC;IACxC,iBAAiB;IAET,KAAK,CAAC,kBAAkB,CAAC,IAAc,EAAE,GAAoB;QACjE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAEtC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5H,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,IAAI,CAAC,IAAA,wBAAe,EAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAgB;QACzC,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,mBAAmB,CAAC,UAAqF;QACrG,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;IACvC,CAAC;IAED,mBAAmB,CAAC,OAAsD;QACtE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IACpC,CAAC;IAED,KAAK;QACD,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,wCAAwC;IACxC,mBAAmB;IAEX,uBAAuB,CAAC,MAAyB;QACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE;gBAC5D,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,mBAAmB,EAAE,iBAAiB,CAAC,EAAE;aAC5C,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,wBAAwB,CAAC,OAAO,cAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,8BAAC,CAAC;QAElE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAmB,CAAC,CAAC;IAClE,CAAC;IAEO,wBAAwB,CAAC,MAAyB;QACtD,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,8DAA8D;IACtD,iBAAiB,CAAC,MAAyB,EAAE,GAAQ;QACzD,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEO,wBAAwB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAyB,EAAE,UAAgC;QAC7E,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC;YAAE,OAAO,CAAC,qBAAqB;QACxD,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAEvB,IAAI,UAAU;YAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,iCAAiC,UAAU,EAAE,CAAC,CAAC;QAC7G,IAAI,CAAC,2BAA2B,CAAC,OAAO,cAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,YAAY,CAAC,8BAAC,CAAC;QAEjG,MAAM,CAAC,MAAM,CAAC,OAAO,cAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,2BAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;YACzD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,mBAAmB;IAEX,wBAAwB,CAAC,MAAyB,EAAE,IAAmB;QAC3E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAmB,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC1C,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAElC,MAAM,SAAS,GAAG;YACd,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEvI,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC9F,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,iBAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,cAClD,QAAQ,CAAC,EAAE;YACP,8DAA8D;YAC9D,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAS,CAAC,CAAC;QAC/E,CAAC,6CACD,GAAG,CAAC,EAAE;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACtG,MAAM,WAAW,GAAG,GAAG,YAAY,iBAAS,IAAI,GAAG,CAAC,WAAW,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBACvB,SAAS;gBACT,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC9C,SAAS,EAAE,WAAW;aACR,CAAC,CAAC;QACxB,CAAC,0BACJ,CAAC;IACN,CAAC;IAEO,4BAA4B,CAAC,MAAyB,EAAE,EAAqD;QACjH,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,+BAAc,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,+BAAc,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,+BAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAAyB,EAAE,SAAiB,EAAE,OAAsB;QAClG,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;QAE9E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7C,OAAO,IAAA,0BAAc,EAAC,0BAA0B,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAC3E,IAAA,4BAAiB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE;oBAC5C,IAAI,CAAC;wBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;wBACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;wBACvF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;wBAC7C,OAAO;4BACH,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM;4BAChC,8DAA8D;yBAC1D,CAAC;oBACb,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;wBAC/C,MAAM,GAAG,CAAC;oBACd,CAAC;gBACL,CAAC,CAAC,CACL,CAAC;YACN,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAED,8DAA8D;IACtD,KAAK,CAAC,iBAAiB,CAAC,OAAkE,EAAE,MAAyB,EAAE,IAAS;QACpI,IAAI,IAAA,iCAAyB,EAAC,OAAO,CAAC,EAAE,CAAC;YACrC,8DAA8D;YAC9D,MAAM,eAAe,GAAG,IAAK,OAAe,EAAsD,CAAC;YACnG,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,wCAAwC;IACxC,aAAa;IAEb,yBAAyB,CAAC,OAA4C;QAClE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,sBAAsB,CAClB,MAAS,EACT,OAA8H;QAE9H,MAAM,UAAU,GAAG,GAAG,MAAM,SAAuC,CAAC;QACpE,MAAM,UAAU,GAAG,GAAG,MAAM,UAAU,CAAC;QACvC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE;YACvC,UAAU;YACV,OAAO;SACV,CAAC,CAAC;IACP,CAAC;IAED,yBAAyB,CAAC,OAAwE;QAC9F,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,MAAM,CACF,MAAyB,EACzB,MAAS,EACT,IAAmC,EACnC,SAAS,GAAG,MAAM;QAElB,MAAM,WAAW,GAAG,GAAG,MAAM,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG,GAAG,MAAM,UAAU,CAAC;QACvC,MAAM,SAAS,GAAG,IAAA,eAAK,GAAE,CAAC;QAE1B,MAAM,YAAY,GAAG,IAAA,2BAAe,GAAE,CAAC;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7I,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QAC3F,OAAO,IAAA,oBAAQ,EAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAC/C,IAAA,4BAAiB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE;YAC5C,IAAI,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC5F,8DAA8D;gBAC9D,MAAM,QAAQ,GAAG,OAAU,OAAO,cAAX,IAAI,OAAO,cAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACxD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;wBACzB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAC3B,OAAO;wBACP,MAAM;qBACT,CAAC,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAA8B,CAAC,CAAC;gBACtG,CAAC,2CAAC,CAAA,CAAC;gBAEH,qFAAqF;gBACrF,8DAA8D;gBAC9D,IAAK,QAAgB,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;oBACxC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBACpD,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAChD,8DAA8D;gBAC9D,OAAQ,QAAgB,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,MAAM,WAAW,GAAG,GAAG,YAAY,iBAAS,IAAI,GAAG,CAAC,WAAW,CAAC;gBAChE,IAAI,WAAW,EAAE,CAAC;oBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM,GAAG,CAAC;YACd,CAAC;QACL,CAAC,CAAC,CACL,CAAC;IACN,CAAC;IAED,MAAM,CAAC,YAAY,CACf,UAA0C;QAE1C,8DAA8D;QAC9D,MAAM,EAAE,gBAAG,CAAC,GAAG,IAAW,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC9B,6EAA6E;YAC7E,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAW,CAAC,CAAC;QACxD,CAAC,2BAAA,CAAC;QACF,OAAO,EAAwC,CAAC;IACpD,CAAC;;AApkBL,gCAqkBC;6gBAljB0C,GAAG,0DAAP,IAAI,GAAG,EAAuC,qDAE7C,GAAG,kJAAP,IAAI,GAAG,EAIpC,2DACuC,GAAG,qGAAP,IAAI,GAAG,EAAmE,8GAG9E,GAAG,6CAAP,IAAI,GAAG,EAA6B,iDAC1B,GAAG,6CAAP,IAAI,GAAG,EAA6B"}
|
|
1
|
+
{"version":3,"file":"SrpcServer.js","sourceRoot":"","sources":["../../../src/srpc/SrpcServer.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,kDAAuD;;kCAC1B,iBAAiB;AAC9C,mCAAqD;AAErD,oDAA2B;AAE3B,8CAAkD;AAClD,wCAAmC;AACnC,0CAAgD;AAChD,4CAAyE;AACzE,qDAAkD;AAClD,uEAA2E;;2PAkBpE,SAAS;AAjBhB,mCAiBiB;AACjB,wCAAqC;AAErC,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAE7C,MAAa,UAAU;IA8BnB,YAAoB,OAAyD;QAAzD,YAAO,GAAP,OAAO,CAAkD;QAbrE,6BAAwB,IAAO,GAAG,0DAAP,IAAI,GAAG,EAAuC,EAAC;QAClF,8DAA8D;QACtD,0BAAqB,IAAO,GAAG,kJAAP,IAAI,GAAG,EAIpC,EAAC;QACI,gCAA2B,IAAO,GAAG,qGAAP,IAAI,GAAG,EAAmE,EAAC;QAGjG,gBAAW,IAAO,GAAG,6CAAP,IAAI,GAAG,EAA6B,EAAC;QACnD,sBAAiB,IAAO,GAAG,6CAAP,IAAI,GAAG,EAA6B,EAAC;QAGrE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;QAC5C,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAAiC,CAAC;YACxD,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAA6B,CAAC;YAC9F,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC1B,CAAC;aAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,MAAM,GAAG;gBACV,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aACJ,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;QAE1C,MAAM,SAAS,GAAG,IAAA,uBAAY,GAAE,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC,gBAAgB,CAAC;QACtD,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,wBAAwB,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC,kBAAkB,IAAI,KAAK,CAAC;QAE7D,oEAAoE;QACpE,oEAAoE;QACpE,+DAA+D;QAC/D,sEAAsE;QACtE,MAAM,GAAG,GAAG,IAAA,YAAC,EAAC,6BAAiB,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjE,IAAA,wDAA8B,EAAC;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7C,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzE,IAAI,CAAC,uBAAuB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9F,CAAC;IAED,wCAAwC;IACxC,gCAAgC;IAExB,YAAY,CAChB,IAA+D,EAC/D,EAA2D;QAE3D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAI,EAAE,kBAAkB,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QAEzD,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;QAEzG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE;YACrD,OAAO;YACP,cAAc;YACd,QAAQ;YACR,UAAU;SACb,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;YAC3F,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,mCAAmC,CAAC,CAAC;YACpD,OAAO;QACX,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,cACrC,MAAM,CAAC,EAAE;YACL,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC/E,0DAA0D;gBAC1D,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,uBAAuB,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAC3B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;iBACZ,MAAM,cAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,6BAAC;iBACxC,GAAG,cAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,6BAAC,CACpD,CAAC;YAEF,8DAA8D;YAC7D,IAAI,CAAC,GAAW,CAAC,gBAAgB,CAAC,GAAG;gBAClC,cAAc;gBACd,QAAQ;gBACR,UAAU;gBACV,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC;gBAClC,OAAO;gBACP,IAAI,EAAE;oBACF,GAAG,IAAI;oBACP,GAAG,QAAQ;iBACd;aACJ,CAAC;YAEF,0DAA0D;YAC1D,EAAE,CAAC,IAAI,CAAC,CAAC;QACb,CAAC,2CACD,GAAG,CAAC,EAAE;YACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CAAC;YACrF,0DAA0D;YAC1D,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,6BAA6B,CAAC,CAAC;QAClD,CAAC,0BACJ,CAAC;IACN,CAAC;IAEO,gBAAgB,CAAC,EAAa,EAAE,GAAoB;QACxD,8DAA8D;QAC9D,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,GAAI,GAAW,CAAC,gBAAgB,CAAC,CAAC;QAE5G,MAAM,QAAQ,GAAG,IAAA,WAAI,GAAE,CAAC;QAExB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YAC3C,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,cAAc;YACd,IAAI;SACP,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAsB;YAC9B,GAAG,EAAE,EAAE;YACP,MAAM,GAAM,GAAG,+CAAP,IAAI,GAAG,EAA0B,CAAA;YACzC,EAAE,EAAE,QAAQ;YACZ,cAAc;YACd,OAAO;YACP,QAAQ;YACR,UAAU;YACV,WAAW;YACX,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,GAAG;YACf,IAAI;YACJ,UAAU,EAAE;gBACR,cAAc,EAAE,QAAQ;gBACxB,8DAA8D;gBAC9D,KAAK,eAAE,CAAC,WAAmB,EAAE,KAAU,EAAE,EAAE;oBACvC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAmB,CAAC,CAAC;oBACtG,OAAO,IAAI,CAAC;gBAChB,CAAC,8CAAA;gBACD,MAAM,eAAE,CAAC,WAAmB,EAAE,EAAE;oBAC5B,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,EAAmB,CAAC,CAAC;gBACpG,CAAC,kCAAA;gBACD,8DAA8D;gBAC9D,OAAO,eAAE,CAAC,WAAmB,EAAE,GAAS,EAAE,EAAE;oBACxC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;wBACX,mBAAmB,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE;qBACnF,CAAC,CAAC;gBACxB,CAAC,6CAAA;gBACD,uBAAuB,wBAAvB,uBAAuB,CAAC,OAAmB;oBACvC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC5B,CAAC;gBACD,uBAAuB,wBAAvB,uBAAuB,CAAC,OAAmB;oBACvC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBACD,iBAAiB,wBAAjB,iBAAiB;oBACb,OAAO,EAAE,CAAC,cAAc,CAAC;gBAC7B,CAAC;aACJ;SACJ,CAAC;QAEF,+BAAc,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAErD,EAAE,CAAC,EAAE,CAAC,SAAS,eAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,2BAAC,CAAC;QAC7D,EAAE,CAAC,EAAE,CAAC,OAAO,eAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,0BAAC,CAAC;QAC3D,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;QAE5D,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAEO,eAAe,CAAC,MAAyB,EAAE,IAAoB;QACnE,IAAI,CAAC,CAAC,IAAI,YAAY,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxG,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;QACjF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,EAAa,EAAE,OAAsB;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3D,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAEO,aAAa,CAAC,MAAyB,EAAE,IAAmB;QAChE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAEO,oBAAoB,CAAC,MAAyB,EAAE,KAA0B,EAAE,OAAe;QAC/F,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,wCAAwC;IACxC,iBAAiB;IAET,KAAK,CAAC,kBAAkB,CAAC,IAAc,EAAE,GAAoB;QACjE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,KAAK;YAAE,OAAO,KAAK,CAAC;QAEtC,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE5H,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,IAAI,CAAC,IAAA,wBAAe,EAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;YAChF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAgB;QACzC,IAAI,IAAI,CAAC,gBAAgB;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,mBAAmB,CAAC,UAAqF;QACrG,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;IACvC,CAAC;IAED,mBAAmB,CAAC,OAAsD;QACtE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;IACpC,CAAC;IAED,KAAK;QACD,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC5C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,wCAAwC;IACxC,mBAAmB;IAEX,uBAAuB,CAAC,MAAyB;QACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,IAAI,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE;gBAC5D,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,mBAAmB,EAAE,iBAAiB,CAAC,EAAE;aAC5C,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,wBAAwB,CAAC,OAAO,cAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,8BAAC,CAAC;QAElE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAmB,CAAC,CAAC;IAClE,CAAC;IAEO,wBAAwB,CAAC,MAAyB;QACtD,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,8DAA8D;IACtD,iBAAiB,CAAC,MAAyB,EAAE,GAAQ;QACzD,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEO,wBAAwB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,IAAI,MAAM,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAyB,EAAE,UAAgC;QAC7E,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC;YAAE,OAAO,CAAC,qBAAqB;QACxD,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAEvB,IAAI,UAAU;YAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,iCAAiC,UAAU,EAAE,CAAC,CAAC;QAC7G,IAAI,CAAC,2BAA2B,CAAC,OAAO,cAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,IAAI,YAAY,CAAC,8BAAC,CAAC;QAEjG,MAAM,CAAC,MAAM,CAAC,OAAO,cAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,2BAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAEtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;YACzD,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,mBAAmB;IAEX,wBAAwB,CAAC,MAAyB,EAAE,IAAmB;QAC3E,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAmB,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAC1C,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAElC,MAAM,SAAS,GAAG;YACd,QAAQ;YACR,QAAQ;YACR,SAAS;YACT,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;SAC1E,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEvI,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACpF,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC9F,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,iBAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,cAClD,QAAQ,CAAC,EAAE;YACP,8DAA8D;YAC9D,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAS,CAAC,CAAC;QAC/E,CAAC,6CACD,GAAG,CAAC,EAAE;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACtG,MAAM,WAAW,GAAG,GAAG,YAAY,iBAAS,IAAI,GAAG,CAAC,WAAW,CAAC;YAChE,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;gBACvB,SAAS;gBACT,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC9C,SAAS,EAAE,WAAW;aACR,CAAC,CAAC;QACxB,CAAC,0BACJ,CAAC;IACN,CAAC;IAEO,4BAA4B,CAAC,MAAyB,EAAE,EAAqD;QACjH,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,+BAAc,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,+BAAc,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,+BAAc,CAAC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAAyB,EAAE,SAAiB,EAAE,OAAsB;QAClG,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC;QAE9E,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC;YAClD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7C,OAAO,IAAA,0BAAc,EAAC,0BAA0B,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAC3E,IAAA,4BAAiB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE;oBAC5C,IAAI,CAAC;wBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;wBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;wBACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;wBACvF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;wBAC7C,OAAO;4BACH,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM;4BAChC,8DAA8D;yBAC1D,CAAC;oBACb,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;wBAC/C,MAAM,GAAG,CAAC;oBACd,CAAC;gBACL,CAAC,CAAC,CACL,CAAC;YACN,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC9C,CAAC;IAED,8DAA8D;IACtD,KAAK,CAAC,iBAAiB,CAAC,OAAkE,EAAE,MAAyB,EAAE,IAAS;QACpI,IAAI,IAAA,iCAAyB,EAAC,OAAO,CAAC,EAAE,CAAC;YACrC,8DAA8D;YAC9D,MAAM,eAAe,GAAG,IAAK,OAAe,EAAsD,CAAC;YACnG,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,wCAAwC;IACxC,aAAa;IAEb,yBAAyB,CAAC,OAA4C;QAClE,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,sBAAsB,CAClB,MAAS,EACT,OAA8H;QAE9H,MAAM,UAAU,GAAG,GAAG,MAAM,SAAuC,CAAC;QACpE,MAAM,UAAU,GAAG,GAAG,MAAM,UAAU,CAAC;QACvC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE;YACvC,UAAU;YACV,OAAO;SACV,CAAC,CAAC;IACP,CAAC;IAED,yBAAyB,CAAC,OAAwE;QAC9F,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,MAAM,CACF,MAAyB,EACzB,MAAS,EACT,IAAmC,EACnC,SAAS,GAAG,MAAM;QAElB,MAAM,WAAW,GAAG,GAAG,MAAM,SAAS,CAAC;QACvC,MAAM,UAAU,GAAG,GAAG,MAAM,UAAU,CAAC;QACvC,MAAM,SAAS,GAAG,IAAA,eAAK,GAAE,CAAC;QAE1B,MAAM,YAAY,GAAG,IAAA,2BAAe,GAAE,CAAC;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7I,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;QAC3F,OAAO,IAAA,oBAAQ,EAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,CAC/C,IAAA,4BAAiB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE;YAC5C,IAAI,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC5F,8DAA8D;gBAC9D,MAAM,QAAQ,GAAG,OAAU,OAAO,cAAX,IAAI,OAAO,cAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;oBACxD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;wBACzB,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;wBAC3B,OAAO;wBACP,MAAM;qBACT,CAAC,CAAC;oBACH,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAA8B,CAAC,CAAC;gBACtG,CAAC,2CAAC,CAAA,CAAC;gBAEH,qFAAqF;gBACrF,8DAA8D;gBAC9D,IAAK,QAAgB,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;oBACxC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBACpD,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAChD,8DAA8D;gBAC9D,OAAQ,QAAgB,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,MAAM,WAAW,GAAG,GAAG,YAAY,iBAAS,IAAI,GAAG,CAAC,WAAW,CAAC;gBAChE,IAAI,WAAW,EAAE,CAAC;oBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;gBACtD,CAAC;gBACD,MAAM,GAAG,CAAC;YACd,CAAC;QACL,CAAC,CAAC,CACL,CAAC;IACN,CAAC;IAED,MAAM,CAAC,YAAY,CACf,UAA0C;QAE1C,8DAA8D;QAC9D,MAAM,EAAE,gBAAG,CAAC,GAAG,IAAW,EAAE,EAAE;YAC1B,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC9B,6EAA6E;YAC7E,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAW,CAAC,CAAC;QACxD,CAAC,2BAAA,CAAC;QACF,OAAO,EAAwC,CAAC;IACpD,CAAC;;AAnjBL,gCAojBC;mfAniB0C,GAAG,0DAAP,IAAI,GAAG,EAAuC,qDAE7C,GAAG,kJAAP,IAAI,GAAG,EAIpC,2DACuC,GAAG,qGAAP,IAAI,GAAG,EAAmE,8GAG9E,GAAG,6CAAP,IAAI,GAAG,EAA6B,iDAC1B,GAAG,6CAAP,IAAI,GAAG,EAA6B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { IncomingMessage } from 'http';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
type UpgradeHandler = (req: IncomingMessage, socket: import('net').Socket, head: Buffer) => void;
|
|
4
|
+
type VerifyClientFn = (info: {
|
|
5
|
+
origin: string;
|
|
6
|
+
secure: boolean;
|
|
7
|
+
req: IncomingMessage;
|
|
8
|
+
}, cb: (res: boolean, code?: number, message?: string) => void) => void;
|
|
9
|
+
type UpgradeClaimHandlingOptions = {
|
|
10
|
+
unclaimedUpgradeRejectionDelayMs?: number;
|
|
11
|
+
};
|
|
12
|
+
type WebSocketUpgradeHandlerOptions = UpgradeClaimHandlingOptions & {
|
|
13
|
+
httpServer: import('http').Server;
|
|
14
|
+
wsPath: string;
|
|
15
|
+
wsServer: WebSocket.Server;
|
|
16
|
+
verifyClient: VerifyClientFn;
|
|
17
|
+
};
|
|
18
|
+
export declare function installWebSocketUpgradeHandler(options: WebSocketUpgradeHandlerOptions): UpgradeHandler;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=WebSocketUpgradeHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketUpgradeHandler.d.ts","sourceRoot":"","sources":["../../../src/srpc/WebSocketUpgradeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,SAAS,MAAM,IAAI,CAAC;AAU3B,KAAK,cAAc,GAAG,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAEjG,KAAK,cAAc,GAAG,CAClB,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,eAAe,CAAA;CAAE,EAC/D,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,KAC1D,IAAI,CAAC;AAEV,KAAK,2BAA2B,GAAG;IAC/B,gCAAgC,CAAC,EAAE,MAAM,CAAC;CAC7C,CAAC;AAEF,KAAK,8BAA8B,GAAG,2BAA2B,GAAG;IAChE,UAAU,EAAE,OAAO,MAAM,EAAE,MAAM,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC;IAC3B,YAAY,EAAE,cAAc,CAAC;CAChC,CAAC;AAiIF,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,8BAA8B,GAAG,cAAc,CAuCtG"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installWebSocketUpgradeHandler = installWebSocketUpgradeHandler;
|
|
4
|
+
const __ΩReturnType = ['T', 'args', '', 'ReturnType', 'l>e"!R"RPde#!P"@2"h"!/#qk#\'QRb!Pde"!p)w$y'];
|
|
5
|
+
function __assignType(fn, args) {
|
|
6
|
+
fn.__type = args;
|
|
7
|
+
return fn;
|
|
8
|
+
}
|
|
9
|
+
const UpgradeClaimedSymbol = Symbol('srpc-upgrade-claimed');
|
|
10
|
+
const UpgradeRejectTimerSymbol = Symbol('srpc-upgrade-reject-timer');
|
|
11
|
+
const UpgradeOriginalWriteSymbol = Symbol('srpc-upgrade-original-write');
|
|
12
|
+
const UpgradeWriteProbeBufferSymbol = Symbol('srpc-upgrade-write-probe-buffer');
|
|
13
|
+
const UpgradeClaimHandlingInstalledSymbol = Symbol('srpc-upgrade-claim-handling-installed');
|
|
14
|
+
const InstalledUpgradeHandlersSymbol = Symbol('srpc-installed-upgrade-handlers');
|
|
15
|
+
const DEFAULT_UNCLAIMED_UPGRADE_REJECTION_DELAY_MS = 1_000;
|
|
16
|
+
const __ΩUpgradeRejectionTimer = [() => __ΩReturnType, () => setTimeout, 'UpgradeRejectionTimer', 'i"o!"w#y'];
|
|
17
|
+
const __ΩUpgradeHandler = ['req', 'socket', 'head', '', 'UpgradeHandler', 'P!2!!2"!2#$/$w%y'];
|
|
18
|
+
const __ΩVerifyClientFn = ['origin', 'secure', 'req', 'info', 'res', 'code', 'message', '', 'cb', 'VerifyClientFn', 'PP&4!)4"!4#M2$P)2%\'2&8&2\'8$/(2)$/(w*y'];
|
|
19
|
+
const __ΩUpgradeClaimHandlingOptions = ['unclaimedUpgradeRejectionDelayMs', 'UpgradeClaimHandlingOptions', 'P\'4!8Mw"y'];
|
|
20
|
+
const __ΩWebSocketUpgradeHandlerOptions = [() => __ΩUpgradeClaimHandlingOptions, 'httpServer', 'wsPath', 'wsServer', () => __ΩVerifyClientFn, 'verifyClient', 'WebSocketUpgradeHandlerOptions', 'Pn!P!4"&4#!4$n%4&MKw\'y'];
|
|
21
|
+
function extractProbeChunk(chunk) {
|
|
22
|
+
if (typeof chunk === 'string')
|
|
23
|
+
return chunk;
|
|
24
|
+
if (Buffer.isBuffer(chunk))
|
|
25
|
+
return chunk.toString('latin1');
|
|
26
|
+
if (chunk instanceof Uint8Array)
|
|
27
|
+
return Buffer.from(chunk).toString('latin1');
|
|
28
|
+
return '';
|
|
29
|
+
}
|
|
30
|
+
extractProbeChunk.__type = ['chunk', 'extractProbeChunk', 'P#2!&/"'];
|
|
31
|
+
function clearUpgradeSuccessProbe(socket) {
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
33
|
+
const anySocket = socket;
|
|
34
|
+
const originalWrite = anySocket[UpgradeOriginalWriteSymbol];
|
|
35
|
+
if (!originalWrite)
|
|
36
|
+
return;
|
|
37
|
+
anySocket.write = originalWrite;
|
|
38
|
+
delete anySocket[UpgradeOriginalWriteSymbol];
|
|
39
|
+
delete anySocket[UpgradeWriteProbeBufferSymbol];
|
|
40
|
+
}
|
|
41
|
+
clearUpgradeSuccessProbe.__type = ['socket', 'clearUpgradeSuccessProbe', 'P!2!$/"'];
|
|
42
|
+
function installUpgradeSuccessProbe(socket) {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
const anySocket = socket;
|
|
45
|
+
if (anySocket[UpgradeOriginalWriteSymbol])
|
|
46
|
+
return;
|
|
47
|
+
const originalWrite = anySocket.write;
|
|
48
|
+
anySocket[UpgradeOriginalWriteSymbol] = originalWrite;
|
|
49
|
+
anySocket[UpgradeWriteProbeBufferSymbol] = '';
|
|
50
|
+
anySocket.write = __assignType(function (chunk, ...args) {
|
|
51
|
+
if (!anySocket[UpgradeClaimedSymbol]) {
|
|
52
|
+
const probeChunk = extractProbeChunk(chunk);
|
|
53
|
+
if (probeChunk) {
|
|
54
|
+
const previous = String(anySocket[UpgradeWriteProbeBufferSymbol] ?? '');
|
|
55
|
+
const probeBuffer = (previous + probeChunk).slice(0, 256);
|
|
56
|
+
anySocket[UpgradeWriteProbeBufferSymbol] = probeBuffer;
|
|
57
|
+
if (/^HTTP\/1\.[01]\s+101\b/i.test(probeBuffer.trimStart())) {
|
|
58
|
+
markUpgradeClaimed(socket);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return originalWrite.apply(this, [chunk, ...args]);
|
|
63
|
+
}, ['this', 'chunk', 'args', '', 'P#2!#2"#@2#"/$']);
|
|
64
|
+
socket.once('close', () => {
|
|
65
|
+
clearUpgradeSuccessProbe(socket);
|
|
66
|
+
clearUpgradeRejectionTimer(socket);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
installUpgradeSuccessProbe.__type = ['socket', 'installUpgradeSuccessProbe', 'P!2!$/"'];
|
|
70
|
+
function clearUpgradeRejectionTimer(socket) {
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
72
|
+
const timer = socket[UpgradeRejectTimerSymbol];
|
|
73
|
+
if (timer) {
|
|
74
|
+
clearTimeout(timer);
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
+
delete socket[UpgradeRejectTimerSymbol];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
clearUpgradeRejectionTimer.__type = ['socket', 'clearUpgradeRejectionTimer', 'P!2!$/"'];
|
|
80
|
+
/**
|
|
81
|
+
* Monkey-patches `httpServer.emit` so that once an upgrade listener claims
|
|
82
|
+
* a socket (by setting UpgradeClaimedSymbol), no further listeners are
|
|
83
|
+
* invoked. This prevents consumer @AutoStart services from destroying
|
|
84
|
+
* sockets that an SrpcServer is already handling.
|
|
85
|
+
*
|
|
86
|
+
* Also installs a low-priority fallback that destroys any socket not
|
|
87
|
+
* claimed by any handler (via delayed timeout).
|
|
88
|
+
*/
|
|
89
|
+
function installUpgradeClaimHandling(httpServer, options) {
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
91
|
+
const anyServer = httpServer;
|
|
92
|
+
if (anyServer[UpgradeClaimHandlingInstalledSymbol])
|
|
93
|
+
return;
|
|
94
|
+
anyServer[UpgradeClaimHandlingInstalledSymbol] = true;
|
|
95
|
+
const unclaimedUpgradeRejectionDelayMs = Math.max(0, options?.unclaimedUpgradeRejectionDelayMs ?? DEFAULT_UNCLAIMED_UPGRADE_REJECTION_DELAY_MS);
|
|
96
|
+
// Patch emit to stop propagation once a socket is claimed.
|
|
97
|
+
const originalEmit = httpServer.emit;
|
|
98
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
99
|
+
httpServer.emit = __assignType(function (event, ...args) {
|
|
100
|
+
if (event !== 'upgrade') {
|
|
101
|
+
return originalEmit.apply(this, [event, ...args]);
|
|
102
|
+
}
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
104
|
+
const socket = args[1];
|
|
105
|
+
installUpgradeSuccessProbe(socket);
|
|
106
|
+
const listeners = this.rawListeners('upgrade').slice();
|
|
107
|
+
for (const fn of listeners) {
|
|
108
|
+
fn.apply(this, args);
|
|
109
|
+
if (socket[UpgradeClaimedSymbol])
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
return listeners.length > 0;
|
|
113
|
+
}, ['this', 'event', 'args', '', 'P!2!P&+J2""@2#)/$']);
|
|
114
|
+
// Fallback: destroy sockets not claimed by any handler.
|
|
115
|
+
httpServer.on('upgrade', __assignType((_req, socket) => {
|
|
116
|
+
clearUpgradeRejectionTimer(socket);
|
|
117
|
+
const timer = setTimeout(() => {
|
|
118
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
119
|
+
if (!socket[UpgradeClaimedSymbol] && !socket.destroyed) {
|
|
120
|
+
socket.write('HTTP/1.1 400 Bad Request\r\n\r\n');
|
|
121
|
+
socket.destroy();
|
|
122
|
+
}
|
|
123
|
+
clearUpgradeRejectionTimer(socket);
|
|
124
|
+
}, unclaimedUpgradeRejectionDelayMs);
|
|
125
|
+
timer.unref?.();
|
|
126
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
127
|
+
socket[UpgradeRejectTimerSymbol] = timer;
|
|
128
|
+
socket.once('close', () => {
|
|
129
|
+
clearUpgradeSuccessProbe(socket);
|
|
130
|
+
clearUpgradeRejectionTimer(socket);
|
|
131
|
+
});
|
|
132
|
+
}, ['_req', 'socket', '', 'P"2!!2""/#']));
|
|
133
|
+
}
|
|
134
|
+
installUpgradeClaimHandling.__type = ['httpServer', () => __ΩUpgradeClaimHandlingOptions, 'options', 'installUpgradeClaimHandling', 'P!2!n"2#8"/$'];
|
|
135
|
+
/**
|
|
136
|
+
* Mark a socket as claimed so that `installUpgradeClaimHandling`'s
|
|
137
|
+
* patched emit stops propagating the `'upgrade'` event to subsequent
|
|
138
|
+
* listeners.
|
|
139
|
+
*/
|
|
140
|
+
function markUpgradeClaimed(socket) {
|
|
141
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
142
|
+
socket[UpgradeClaimedSymbol] = true;
|
|
143
|
+
clearUpgradeRejectionTimer(socket);
|
|
144
|
+
clearUpgradeSuccessProbe(socket);
|
|
145
|
+
}
|
|
146
|
+
markUpgradeClaimed.__type = ['socket', 'markUpgradeClaimed', 'P!2!$/"'];
|
|
147
|
+
function installWebSocketUpgradeHandler(options) {
|
|
148
|
+
const { httpServer, wsPath, wsServer, verifyClient, unclaimedUpgradeRejectionDelayMs } = options;
|
|
149
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
150
|
+
const anyServer = httpServer;
|
|
151
|
+
const installedHandlers =
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
153
|
+
anyServer[InstalledUpgradeHandlersSymbol] ?? new Map();
|
|
154
|
+
anyServer[InstalledUpgradeHandlersSymbol] = installedHandlers;
|
|
155
|
+
const existingHandler = installedHandlers.get(wsPath);
|
|
156
|
+
if (existingHandler) {
|
|
157
|
+
installUpgradeClaimHandling(httpServer, { unclaimedUpgradeRejectionDelayMs });
|
|
158
|
+
return existingHandler;
|
|
159
|
+
}
|
|
160
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
161
|
+
const upgradeHandler = __assignType((req, socket, head) => {
|
|
162
|
+
const pathname = req.url?.split('?')[0];
|
|
163
|
+
if (pathname !== wsPath)
|
|
164
|
+
return;
|
|
165
|
+
markUpgradeClaimed(socket);
|
|
166
|
+
verifyClient({ origin: '', secure: false, req }, __assignType((allowed, code, message) => {
|
|
167
|
+
if (!allowed) {
|
|
168
|
+
socket.write(`HTTP/1.1 ${code ?? 403} ${message ?? 'Forbidden'}\r\n\r\n`);
|
|
169
|
+
socket.destroy();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
wsServer.handleUpgrade(req, socket, head, __assignType(ws => {
|
|
173
|
+
wsServer.emit('connection', ws, req);
|
|
174
|
+
}, ['ws', '', 'P"2!"/"']));
|
|
175
|
+
}, ['allowed', 'code', 'message', '', 'P"2!"2""2#"/$']));
|
|
176
|
+
}, ['req', 'socket', 'head', '', 'P!2!"2"!2#"/$']);
|
|
177
|
+
httpServer.prependListener('upgrade', upgradeHandler);
|
|
178
|
+
installedHandlers.set(wsPath, upgradeHandler);
|
|
179
|
+
installUpgradeClaimHandling(httpServer, { unclaimedUpgradeRejectionDelayMs });
|
|
180
|
+
return upgradeHandler;
|
|
181
|
+
}
|
|
182
|
+
installWebSocketUpgradeHandler.__type = [() => __ΩWebSocketUpgradeHandlerOptions, 'options', () => __ΩUpgradeHandler, 'installWebSocketUpgradeHandler', 'Pn!2"n#/$'];
|
|
183
|
+
//# sourceMappingURL=WebSocketUpgradeHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebSocketUpgradeHandler.js","sourceRoot":"","sources":["../../../src/srpc/WebSocketUpgradeHandler.ts"],"names":[],"mappings":"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"}
|
package/docs/yarn.lock
CHANGED
|
@@ -757,16 +757,6 @@ __metadata:
|
|
|
757
757
|
languageName: node
|
|
758
758
|
linkType: hard
|
|
759
759
|
|
|
760
|
-
"@zyno-io/dk-server-foundation-docs@workspace:.":
|
|
761
|
-
version: 0.0.0-use.local
|
|
762
|
-
resolution: "@zyno-io/dk-server-foundation-docs@workspace:."
|
|
763
|
-
dependencies:
|
|
764
|
-
playwright: "npm:^1.58.2"
|
|
765
|
-
vitepress: "npm:^1.6.4"
|
|
766
|
-
vue: "npm:^3.5.28"
|
|
767
|
-
languageName: unknown
|
|
768
|
-
linkType: soft
|
|
769
|
-
|
|
770
760
|
"@types/estree@npm:1.0.8":
|
|
771
761
|
version: 1.0.8
|
|
772
762
|
resolution: "@types/estree@npm:1.0.8"
|
|
@@ -1057,6 +1047,16 @@ __metadata:
|
|
|
1057
1047
|
languageName: node
|
|
1058
1048
|
linkType: hard
|
|
1059
1049
|
|
|
1050
|
+
"@zyno-io/dk-server-foundation-docs@workspace:.":
|
|
1051
|
+
version: 0.0.0-use.local
|
|
1052
|
+
resolution: "@zyno-io/dk-server-foundation-docs@workspace:."
|
|
1053
|
+
dependencies:
|
|
1054
|
+
playwright: "npm:^1.58.2"
|
|
1055
|
+
vitepress: "npm:^1.6.4"
|
|
1056
|
+
vue: "npm:^3.5.28"
|
|
1057
|
+
languageName: unknown
|
|
1058
|
+
linkType: soft
|
|
1059
|
+
|
|
1060
1060
|
"abbrev@npm:^4.0.0":
|
|
1061
1061
|
version: 4.0.0
|
|
1062
1062
|
resolution: "abbrev@npm:4.0.0"
|
package/package.json
CHANGED
package/src/app/config.ts
CHANGED
package/src/database/postgres.ts
CHANGED
|
@@ -60,12 +60,15 @@ export function createPostgresDatabase(
|
|
|
60
60
|
|
|
61
61
|
const { enableLocksTable, ...otherConfig } = config;
|
|
62
62
|
|
|
63
|
+
const ssl = appConfig.PG_SSL ? { rejectUnauthorized: appConfig.PG_SSL_REJECT_UNAUTHORIZED ?? true } : undefined;
|
|
64
|
+
|
|
63
65
|
const adapter = new PostgresDatabaseAdapter({
|
|
64
66
|
host: appConfig.PG_HOST,
|
|
65
67
|
port: appConfig.PG_PORT,
|
|
66
68
|
user: appConfig.PG_USER,
|
|
67
69
|
password: appConfig.PG_PASSWORD_SECRET,
|
|
68
70
|
database: appConfig.PG_DATABASE,
|
|
71
|
+
ssl,
|
|
69
72
|
max: appConfig.PG_CONNECTION_LIMIT ?? (isProduction ? 10 : 5),
|
|
70
73
|
idleTimeoutMillis: (appConfig.PG_IDLE_TIMEOUT_SECONDS ?? (isProduction ? 60 : 5)) * 1000,
|
|
71
74
|
...otherConfig
|
package/src/srpc/SrpcServer.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { uuid7 } from '../helpers';
|
|
|
9
9
|
import { withLoggerContext } from '../services';
|
|
10
10
|
import { getTraceContext, withRemoteSpan, withSpan } from '../telemetry';
|
|
11
11
|
import { SrpcByteStream } from './SrpcByteStream';
|
|
12
|
+
import { installWebSocketUpgradeHandler } from './WebSocketUpgradeHandler';
|
|
12
13
|
import {
|
|
13
14
|
BaseMessage,
|
|
14
15
|
HandlerRequestData,
|
|
@@ -30,72 +31,6 @@ import {
|
|
|
30
31
|
import { uuid } from '@deepkit/type';
|
|
31
32
|
|
|
32
33
|
const StreamInfoSymbol = Symbol('srpc-info');
|
|
33
|
-
const UpgradeClaimedSymbol = Symbol('srpc-upgrade-claimed');
|
|
34
|
-
const _patchedServers = new WeakSet<import('http').Server>();
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Monkey-patches `httpServer.emit` so that once an upgrade listener claims
|
|
38
|
-
* a socket (by setting UpgradeClaimedSymbol), no further listeners are
|
|
39
|
-
* invoked. This prevents consumer @AutoStart services from destroying
|
|
40
|
-
* sockets that an SrpcServer is already handling.
|
|
41
|
-
*
|
|
42
|
-
* Also installs a low-priority fallback that destroys any socket not
|
|
43
|
-
* claimed by any handler (via setImmediate, after all sync work).
|
|
44
|
-
*/
|
|
45
|
-
export function installUpgradeClaimHandling(httpServer: import('http').Server) {
|
|
46
|
-
if (_patchedServers.has(httpServer)) return;
|
|
47
|
-
_patchedServers.add(httpServer);
|
|
48
|
-
|
|
49
|
-
// Patch emit to stop propagation once a socket is claimed.
|
|
50
|
-
const originalEmit = httpServer.emit;
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
|
-
httpServer.emit = function (this: import('http').Server, event: string | symbol, ...args: any[]): boolean {
|
|
53
|
-
if (event !== 'upgrade') {
|
|
54
|
-
return originalEmit.apply(this, [event, ...args]);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
-
const socket = args[1] as any;
|
|
59
|
-
const listeners = this.rawListeners('upgrade').slice();
|
|
60
|
-
for (const fn of listeners) {
|
|
61
|
-
(fn as Function).apply(this, args);
|
|
62
|
-
if (socket[UpgradeClaimedSymbol]) break;
|
|
63
|
-
}
|
|
64
|
-
return listeners.length > 0;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
// Fallback: destroy sockets not claimed by any handler.
|
|
68
|
-
httpServer.on('upgrade', (_req, socket: import('net').Socket) => {
|
|
69
|
-
setImmediate(() => {
|
|
70
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
71
|
-
if (!(socket as any)[UpgradeClaimedSymbol] && !socket.destroyed) {
|
|
72
|
-
socket.write('HTTP/1.1 400 Bad Request\r\n\r\n');
|
|
73
|
-
socket.destroy();
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Returns `true` if the given socket has already been claimed by an
|
|
81
|
-
* upgrade handler (via `markUpgradeClaimed`).
|
|
82
|
-
*/
|
|
83
|
-
export function isUpgradeClaimed(socket: import('net').Socket): boolean {
|
|
84
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
-
return !!(socket as any)[UpgradeClaimedSymbol];
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Mark a socket as claimed so that `installUpgradeClaimHandling`'s
|
|
90
|
-
* patched emit stops propagating the `'upgrade'` event to subsequent
|
|
91
|
-
* listeners. SrpcServer calls this automatically; consumer apps with
|
|
92
|
-
* their own WebSocket upgrade logic can call it to participate in the
|
|
93
|
-
* same claim protocol.
|
|
94
|
-
*/
|
|
95
|
-
export function markUpgradeClaimed(socket: import('net').Socket): void {
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
|
-
(socket as any)[UpgradeClaimedSymbol] = true;
|
|
98
|
-
}
|
|
99
34
|
|
|
100
35
|
export class SrpcServer<
|
|
101
36
|
TMeta extends SrpcMeta = SrpcMeta,
|
|
@@ -109,8 +44,6 @@ export class SrpcServer<
|
|
|
109
44
|
private logger: ScopedLogger;
|
|
110
45
|
private wsServer: WebSocket.Server;
|
|
111
46
|
private httpServer: import('http').Server;
|
|
112
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
|
-
private upgradeHandler: (...args: any[]) => void;
|
|
114
47
|
private inboundType: SrpcMessageFns<TClientOutput>;
|
|
115
48
|
private outboundType: SrpcMessageFns<TServerOutput>;
|
|
116
49
|
|
|
@@ -132,8 +65,8 @@ export class SrpcServer<
|
|
|
132
65
|
constructor(private options: ISrpcServerOptions<TClientOutput, TServerOutput>) {
|
|
133
66
|
const logLevel = options.logLevel ?? 'info';
|
|
134
67
|
if (logLevel === false) {
|
|
135
|
-
const noop = (() => {}) as
|
|
136
|
-
this.logger = { info: noop, warn: noop, error: noop, debug: noop } as
|
|
68
|
+
const noop = (() => {}) as (...args: unknown[]) => void;
|
|
69
|
+
this.logger = { info: noop, warn: noop, error: noop, debug: noop } as unknown as ScopedLogger;
|
|
137
70
|
options.debug = false;
|
|
138
71
|
} else if (logLevel === 'debug') {
|
|
139
72
|
const base = options.logger;
|
|
@@ -142,7 +75,7 @@ export class SrpcServer<
|
|
|
142
75
|
warn: base.warn.bind(base),
|
|
143
76
|
error: base.error.bind(base),
|
|
144
77
|
debug: base.debug.bind(base)
|
|
145
|
-
} as
|
|
78
|
+
} as unknown as ScopedLogger;
|
|
146
79
|
} else {
|
|
147
80
|
this.logger = options.logger;
|
|
148
81
|
}
|
|
@@ -163,26 +96,12 @@ export class SrpcServer<
|
|
|
163
96
|
this.wsServer = new WebSocket.Server({ noServer: true });
|
|
164
97
|
this.wsServer.on('connection', this.attachConnection.bind(this));
|
|
165
98
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
this.verifyClient({ origin: '', secure: false, req }, (allowed, code, message) => {
|
|
174
|
-
if (!allowed) {
|
|
175
|
-
socket.write(`HTTP/1.1 ${code ?? 403} ${message ?? 'Forbidden'}\r\n\r\n`);
|
|
176
|
-
socket.destroy();
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
this.wsServer.handleUpgrade(req, socket, head, ws => {
|
|
180
|
-
this.wsServer.emit('connection', ws, req);
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
};
|
|
184
|
-
this.httpServer.prependListener('upgrade', this.upgradeHandler);
|
|
185
|
-
installUpgradeClaimHandling(this.httpServer);
|
|
99
|
+
installWebSocketUpgradeHandler({
|
|
100
|
+
httpServer: this.httpServer,
|
|
101
|
+
wsPath: options.wsPath,
|
|
102
|
+
wsServer: this.wsServer,
|
|
103
|
+
verifyClient: this.verifyClient.bind(this)
|
|
104
|
+
});
|
|
186
105
|
|
|
187
106
|
this.logger.info('WebSocket server listening', { path: options.wsPath });
|
|
188
107
|
|
|
@@ -402,7 +321,6 @@ export class SrpcServer<
|
|
|
402
321
|
|
|
403
322
|
close() {
|
|
404
323
|
clearInterval(this.inactivityCheckInterval);
|
|
405
|
-
this.httpServer.off('upgrade', this.upgradeHandler);
|
|
406
324
|
for (const stream of this.streamsById.values()) {
|
|
407
325
|
this.cleanupStream(stream, 'disconnect');
|
|
408
326
|
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { IncomingMessage } from 'http';
|
|
2
|
+
import WebSocket from 'ws';
|
|
3
|
+
|
|
4
|
+
const UpgradeClaimedSymbol = Symbol('srpc-upgrade-claimed');
|
|
5
|
+
const UpgradeRejectTimerSymbol = Symbol('srpc-upgrade-reject-timer');
|
|
6
|
+
const UpgradeOriginalWriteSymbol = Symbol('srpc-upgrade-original-write');
|
|
7
|
+
const UpgradeWriteProbeBufferSymbol = Symbol('srpc-upgrade-write-probe-buffer');
|
|
8
|
+
const UpgradeClaimHandlingInstalledSymbol = Symbol('srpc-upgrade-claim-handling-installed');
|
|
9
|
+
const InstalledUpgradeHandlersSymbol = Symbol('srpc-installed-upgrade-handlers');
|
|
10
|
+
const DEFAULT_UNCLAIMED_UPGRADE_REJECTION_DELAY_MS = 1_000;
|
|
11
|
+
type UpgradeRejectionTimer = ReturnType<typeof setTimeout>;
|
|
12
|
+
type UpgradeHandler = (req: IncomingMessage, socket: import('net').Socket, head: Buffer) => void;
|
|
13
|
+
|
|
14
|
+
type VerifyClientFn = (
|
|
15
|
+
info: { origin: string; secure: boolean; req: IncomingMessage },
|
|
16
|
+
cb: (res: boolean, code?: number, message?: string) => void
|
|
17
|
+
) => void;
|
|
18
|
+
|
|
19
|
+
type UpgradeClaimHandlingOptions = {
|
|
20
|
+
unclaimedUpgradeRejectionDelayMs?: number;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
type WebSocketUpgradeHandlerOptions = UpgradeClaimHandlingOptions & {
|
|
24
|
+
httpServer: import('http').Server;
|
|
25
|
+
wsPath: string;
|
|
26
|
+
wsServer: WebSocket.Server;
|
|
27
|
+
verifyClient: VerifyClientFn;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
function extractProbeChunk(chunk: unknown): string {
|
|
31
|
+
if (typeof chunk === 'string') return chunk;
|
|
32
|
+
if (Buffer.isBuffer(chunk)) return chunk.toString('latin1');
|
|
33
|
+
if (chunk instanceof Uint8Array) return Buffer.from(chunk).toString('latin1');
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function clearUpgradeSuccessProbe(socket: import('net').Socket): void {
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
+
const anySocket = socket as any;
|
|
40
|
+
const originalWrite = anySocket[UpgradeOriginalWriteSymbol] as ((...args: unknown[]) => unknown) | undefined;
|
|
41
|
+
if (!originalWrite) return;
|
|
42
|
+
|
|
43
|
+
anySocket.write = originalWrite;
|
|
44
|
+
delete anySocket[UpgradeOriginalWriteSymbol];
|
|
45
|
+
delete anySocket[UpgradeWriteProbeBufferSymbol];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function installUpgradeSuccessProbe(socket: import('net').Socket): void {
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
50
|
+
const anySocket = socket as any;
|
|
51
|
+
if (anySocket[UpgradeOriginalWriteSymbol]) return;
|
|
52
|
+
|
|
53
|
+
const originalWrite = anySocket.write as (...args: unknown[]) => unknown;
|
|
54
|
+
anySocket[UpgradeOriginalWriteSymbol] = originalWrite;
|
|
55
|
+
anySocket[UpgradeWriteProbeBufferSymbol] = '';
|
|
56
|
+
|
|
57
|
+
anySocket.write = function (this: unknown, chunk: unknown, ...args: unknown[]) {
|
|
58
|
+
if (!anySocket[UpgradeClaimedSymbol]) {
|
|
59
|
+
const probeChunk = extractProbeChunk(chunk);
|
|
60
|
+
if (probeChunk) {
|
|
61
|
+
const previous = String(anySocket[UpgradeWriteProbeBufferSymbol] ?? '');
|
|
62
|
+
const probeBuffer = (previous + probeChunk).slice(0, 256);
|
|
63
|
+
anySocket[UpgradeWriteProbeBufferSymbol] = probeBuffer;
|
|
64
|
+
|
|
65
|
+
if (/^HTTP\/1\.[01]\s+101\b/i.test(probeBuffer.trimStart())) {
|
|
66
|
+
markUpgradeClaimed(socket);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return originalWrite.apply(this, [chunk, ...args]);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
socket.once('close', () => {
|
|
74
|
+
clearUpgradeSuccessProbe(socket);
|
|
75
|
+
clearUpgradeRejectionTimer(socket);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function clearUpgradeRejectionTimer(socket: import('net').Socket): void {
|
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
81
|
+
const timer = (socket as any)[UpgradeRejectTimerSymbol] as UpgradeRejectionTimer | undefined;
|
|
82
|
+
if (timer) {
|
|
83
|
+
clearTimeout(timer);
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
delete (socket as any)[UpgradeRejectTimerSymbol];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Monkey-patches `httpServer.emit` so that once an upgrade listener claims
|
|
91
|
+
* a socket (by setting UpgradeClaimedSymbol), no further listeners are
|
|
92
|
+
* invoked. This prevents consumer @AutoStart services from destroying
|
|
93
|
+
* sockets that an SrpcServer is already handling.
|
|
94
|
+
*
|
|
95
|
+
* Also installs a low-priority fallback that destroys any socket not
|
|
96
|
+
* claimed by any handler (via delayed timeout).
|
|
97
|
+
*/
|
|
98
|
+
function installUpgradeClaimHandling(httpServer: import('http').Server, options?: UpgradeClaimHandlingOptions) {
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
100
|
+
const anyServer = httpServer as any;
|
|
101
|
+
if (anyServer[UpgradeClaimHandlingInstalledSymbol]) return;
|
|
102
|
+
anyServer[UpgradeClaimHandlingInstalledSymbol] = true;
|
|
103
|
+
const unclaimedUpgradeRejectionDelayMs = Math.max(0, options?.unclaimedUpgradeRejectionDelayMs ?? DEFAULT_UNCLAIMED_UPGRADE_REJECTION_DELAY_MS);
|
|
104
|
+
|
|
105
|
+
// Patch emit to stop propagation once a socket is claimed.
|
|
106
|
+
const originalEmit = httpServer.emit;
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
108
|
+
httpServer.emit = function (this: import('http').Server, event: string | symbol, ...args: any[]): boolean {
|
|
109
|
+
if (event !== 'upgrade') {
|
|
110
|
+
return originalEmit.apply(this, [event, ...args]);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
114
|
+
const socket = args[1] as any;
|
|
115
|
+
installUpgradeSuccessProbe(socket);
|
|
116
|
+
const listeners = this.rawListeners('upgrade').slice();
|
|
117
|
+
for (const fn of listeners) {
|
|
118
|
+
(fn as (...args: unknown[]) => unknown).apply(this, args);
|
|
119
|
+
if (socket[UpgradeClaimedSymbol]) break;
|
|
120
|
+
}
|
|
121
|
+
return listeners.length > 0;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
// Fallback: destroy sockets not claimed by any handler.
|
|
125
|
+
httpServer.on('upgrade', (_req, socket: import('net').Socket) => {
|
|
126
|
+
clearUpgradeRejectionTimer(socket);
|
|
127
|
+
const timer = setTimeout(() => {
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
129
|
+
if (!(socket as any)[UpgradeClaimedSymbol] && !socket.destroyed) {
|
|
130
|
+
socket.write('HTTP/1.1 400 Bad Request\r\n\r\n');
|
|
131
|
+
socket.destroy();
|
|
132
|
+
}
|
|
133
|
+
clearUpgradeRejectionTimer(socket);
|
|
134
|
+
}, unclaimedUpgradeRejectionDelayMs);
|
|
135
|
+
timer.unref?.();
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
137
|
+
(socket as any)[UpgradeRejectTimerSymbol] = timer;
|
|
138
|
+
socket.once('close', () => {
|
|
139
|
+
clearUpgradeSuccessProbe(socket);
|
|
140
|
+
clearUpgradeRejectionTimer(socket);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Mark a socket as claimed so that `installUpgradeClaimHandling`'s
|
|
147
|
+
* patched emit stops propagating the `'upgrade'` event to subsequent
|
|
148
|
+
* listeners.
|
|
149
|
+
*/
|
|
150
|
+
function markUpgradeClaimed(socket: import('net').Socket): void {
|
|
151
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
152
|
+
(socket as any)[UpgradeClaimedSymbol] = true;
|
|
153
|
+
clearUpgradeRejectionTimer(socket);
|
|
154
|
+
clearUpgradeSuccessProbe(socket);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export function installWebSocketUpgradeHandler(options: WebSocketUpgradeHandlerOptions): UpgradeHandler {
|
|
158
|
+
const { httpServer, wsPath, wsServer, verifyClient, unclaimedUpgradeRejectionDelayMs } = options;
|
|
159
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
160
|
+
const anyServer = httpServer as any;
|
|
161
|
+
const installedHandlers =
|
|
162
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
163
|
+
(anyServer[InstalledUpgradeHandlersSymbol] as Map<string, UpgradeHandler> | undefined) ?? new Map();
|
|
164
|
+
anyServer[InstalledUpgradeHandlersSymbol] = installedHandlers;
|
|
165
|
+
|
|
166
|
+
const existingHandler = installedHandlers.get(wsPath);
|
|
167
|
+
if (existingHandler) {
|
|
168
|
+
installUpgradeClaimHandling(httpServer, { unclaimedUpgradeRejectionDelayMs });
|
|
169
|
+
return existingHandler;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
173
|
+
const upgradeHandler = (req: IncomingMessage, socket: any, head: Buffer) => {
|
|
174
|
+
const pathname = req.url?.split('?')[0];
|
|
175
|
+
if (pathname !== wsPath) return;
|
|
176
|
+
|
|
177
|
+
markUpgradeClaimed(socket);
|
|
178
|
+
|
|
179
|
+
verifyClient({ origin: '', secure: false, req }, (allowed, code, message) => {
|
|
180
|
+
if (!allowed) {
|
|
181
|
+
socket.write(`HTTP/1.1 ${code ?? 403} ${message ?? 'Forbidden'}\r\n\r\n`);
|
|
182
|
+
socket.destroy();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
wsServer.handleUpgrade(req, socket, head, ws => {
|
|
187
|
+
wsServer.emit('connection', ws, req);
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
httpServer.prependListener('upgrade', upgradeHandler);
|
|
193
|
+
installedHandlers.set(wsPath, upgradeHandler);
|
|
194
|
+
installUpgradeClaimHandling(httpServer, { unclaimedUpgradeRejectionDelayMs });
|
|
195
|
+
return upgradeHandler;
|
|
196
|
+
}
|