@opsimathically/nodenetproccalld 0.0.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/classes/apikeyauthorizer/ApiKeyAuthorizer.class.ts","../src/classes/configfileloader/ConfigFileLoader.class.ts","../node_modules/json5/dist/index.mjs","../src/classes/configvalidator/ConfigValidator.class.ts","../src/classes/daemoncli/DaemonCli.class.ts","../src/classes/networkprocedurecalldaemon/NetworkProcedureCallDaemon.class.ts","../src/classes/daemonprocess/DaemonProcess.class.ts","../src/classes/tlsmaterialgenerator/TlsMaterialGenerator.class.ts","../src/index.ts"],"sourcesContent":["import crypto from 'node:crypto';\n\nimport type { networkprocedurecall_auth_success_t } from '@opsimathically/networkprocedurecall';\n\nimport type {\n daemon_auth_callback_params_t,\n daemon_runtime_api_key_entry_t\n} from '@src/types/project_types';\n\nfunction SafeTimingEqual(params: { left_value: string; right_value: string }): boolean {\n const left_buffer = Buffer.from(params.left_value, 'utf8');\n const right_buffer = Buffer.from(params.right_value, 'utf8');\n\n if (left_buffer.length !== right_buffer.length) {\n const left_digest = crypto.createHash('sha256').update(left_buffer).digest();\n const right_digest = crypto.createHash('sha256').update(right_buffer).digest();\n crypto.timingSafeEqual(left_digest, right_digest);\n return false;\n }\n\n return crypto.timingSafeEqual(left_buffer, right_buffer);\n}\n\nexport class ApiKeyAuthorizer {\n private readonly api_key_entries: daemon_runtime_api_key_entry_t[];\n\n constructor(params: { api_key_entries: daemon_runtime_api_key_entry_t[] }) {\n this.api_key_entries = [...params.api_key_entries];\n }\n\n async authenticate(params: {\n auth_callback_params: daemon_auth_callback_params_t;\n }): Promise<'failed' | networkprocedurecall_auth_success_t> {\n for (const api_key_entry of this.api_key_entries) {\n if (!api_key_entry.enabled) {\n continue;\n }\n\n if (\n !SafeTimingEqual({\n left_value: api_key_entry.api_key,\n right_value: params.auth_callback_params.api_key\n })\n ) {\n continue;\n }\n\n if (\n !this.matchesIdentityConstraints({\n api_key_entry,\n auth_callback_params: params.auth_callback_params\n })\n ) {\n continue;\n }\n\n return {\n state: 'authenticated',\n privileges: [...api_key_entry.privileges]\n };\n }\n\n return 'failed';\n }\n\n private matchesIdentityConstraints(params: {\n api_key_entry: daemon_runtime_api_key_entry_t;\n auth_callback_params: daemon_auth_callback_params_t;\n }): boolean {\n const constraints = params.api_key_entry.identity_constraints;\n if (!constraints) {\n return true;\n }\n\n if (\n constraints.remote_address_regex &&\n !constraints.remote_address_regex.test(params.auth_callback_params.remote_address)\n ) {\n return false;\n }\n if (\n constraints.tls_peer_subject_regex &&\n !this.matchOptionalValue({\n regex: constraints.tls_peer_subject_regex,\n value: params.auth_callback_params.tls_peer_subject\n })\n ) {\n return false;\n }\n if (\n constraints.tls_peer_san_regex &&\n !this.matchOptionalValue({\n regex: constraints.tls_peer_san_regex,\n value: params.auth_callback_params.tls_peer_san\n })\n ) {\n return false;\n }\n if (\n constraints.tls_peer_fingerprint256_regex &&\n !this.matchOptionalValue({\n regex: constraints.tls_peer_fingerprint256_regex,\n value: params.auth_callback_params.tls_peer_fingerprint256\n })\n ) {\n return false;\n }\n if (\n constraints.tls_peer_serial_number_regex &&\n !this.matchOptionalValue({\n regex: constraints.tls_peer_serial_number_regex,\n value: params.auth_callback_params.tls_peer_serial_number\n })\n ) {\n return false;\n }\n\n return true;\n }\n\n private matchOptionalValue(params: { regex: RegExp; value?: string }): boolean {\n if (!params.value) {\n return false;\n }\n return params.regex.test(params.value);\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport JSON5 from 'json5';\n\nimport { ConfigValidator } from '@src/classes/configvalidator/ConfigValidator.class';\n\nimport type {\n daemon_config_paths_t,\n daemon_resolved_tls_mtls_t,\n daemon_runtime_config_t,\n daemon_tls_file_config_t\n} from '@src/types/project_types';\n\nfunction ReadUtf8File(params: { file_path: string }): string {\n try {\n return fs.readFileSync(params.file_path, 'utf8');\n } catch (error) {\n const error_message = error instanceof Error ? error.message : String(error);\n throw new Error(`Unable to read file \"${params.file_path}\": ${error_message}`);\n }\n}\n\nfunction ResolvePath(params: { file_path: string; base_dir: string }): string {\n if (path.isAbsolute(params.file_path)) {\n return params.file_path;\n }\n return path.resolve(params.base_dir, params.file_path);\n}\n\nfunction ParseJson5(params: { content: string; source_path: string }): unknown {\n try {\n return JSON5.parse(params.content);\n } catch (error) {\n const error_message = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid JSON5 in \"${params.source_path}\": ${error_message}`);\n }\n}\n\nexport class ConfigFileLoader {\n private readonly config_validator: ConfigValidator;\n\n constructor(params?: { config_validator?: ConfigValidator }) {\n this.config_validator = params?.config_validator ?? new ConfigValidator();\n }\n\n loadDaemonConfig(params: { config_paths: daemon_config_paths_t }): daemon_runtime_config_t {\n const server_config_path = ResolvePath({\n file_path: params.config_paths.server_config_path,\n base_dir: process.cwd()\n });\n const api_keys_config_path = ResolvePath({\n file_path: params.config_paths.api_keys_config_path,\n base_dir: process.cwd()\n });\n\n const server_config_raw = this.readJson5File({\n file_path: server_config_path\n });\n const api_keys_config_raw = this.readJson5File({\n file_path: api_keys_config_path\n });\n\n const server_config = this.config_validator.validateServerConfig({\n server_config_raw\n });\n const api_keys_config = this.config_validator.validateApiKeysConfig({\n api_keys_config_raw\n });\n\n const runtime_tls_mtls = this.resolveTlsMaterial({\n tls_file_config: server_config.tls_mtls,\n config_file_dir: path.dirname(server_config_path)\n });\n\n const runtime_api_keys = this.config_validator.toRuntimeApiKeysConfig({\n api_keys_config\n });\n\n return {\n server_config: {\n ...server_config,\n tls_mtls: runtime_tls_mtls\n },\n api_keys_config: {\n api_keys: runtime_api_keys\n }\n };\n }\n\n private readJson5File(params: { file_path: string }): unknown {\n const file_content = ReadUtf8File({\n file_path: params.file_path\n });\n return ParseJson5({\n content: file_content,\n source_path: params.file_path\n });\n }\n\n private resolveTlsMaterial(params: {\n tls_file_config: daemon_tls_file_config_t;\n config_file_dir: string;\n }): daemon_resolved_tls_mtls_t {\n const key_pem = this.readPemFile({\n pem_path: params.tls_file_config.key_file,\n config_file_dir: params.config_file_dir,\n label: 'tls_mtls.key_file'\n });\n const cert_pem = this.readPemFile({\n pem_path: params.tls_file_config.cert_file,\n config_file_dir: params.config_file_dir,\n label: 'tls_mtls.cert_file'\n });\n const ca_pem = this.readPemFile({\n pem_path: params.tls_file_config.ca_file,\n config_file_dir: params.config_file_dir,\n label: 'tls_mtls.ca_file'\n });\n const crl_pem = params.tls_file_config.crl_file\n ? this.readPemFile({\n pem_path: params.tls_file_config.crl_file,\n config_file_dir: params.config_file_dir,\n label: 'tls_mtls.crl_file'\n })\n : undefined;\n\n return {\n key_pem,\n cert_pem,\n ca_pem,\n crl_pem,\n min_version: params.tls_file_config.min_version,\n cipher_suites: params.tls_file_config.cipher_suites,\n handshake_timeout_ms: params.tls_file_config.handshake_timeout_ms,\n request_timeout_ms: params.tls_file_config.request_timeout_ms,\n max_frame_bytes: params.tls_file_config.max_frame_bytes\n };\n }\n\n private readPemFile(params: {\n pem_path: string;\n config_file_dir: string;\n label: string;\n }): string {\n const absolute_file_path = ResolvePath({\n file_path: params.pem_path,\n base_dir: params.config_file_dir\n });\n\n const pem_content = ReadUtf8File({\n file_path: absolute_file_path\n }).trim();\n\n if (!pem_content.includes('BEGIN')) {\n throw new Error(\n `File \"${absolute_file_path}\" for ${params.label} does not look like a PEM file.`\n );\n }\n\n return `${pem_content}\\n`;\n }\n}\n","// This is a generated file. Do not edit.\nvar Space_Separator = /[\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\nvar ID_Start = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC03-\\uDC37\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDF00-\\uDF19]|\\uD806[\\uDCA0-\\uDCDF\\uDCFF\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE83\\uDE86-\\uDE89\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]/;\nvar ID_Continue = /[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08BD\\u08D4-\\u08E1\\u08E3-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0AF9-\\u0AFF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D00-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1CD0-\\u1CD2\\u1CD4-\\u1CF9\\u1D00-\\u1DF9\\u1DFB-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312E\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FEA\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA8FD\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDDFD\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE33\\uDE38-\\uDE3A\\uDE3F\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE6\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD804[\\uDC00-\\uDC46\\uDC66-\\uDC6F\\uDC7F-\\uDCBA\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD00-\\uDD34\\uDD36-\\uDD3F\\uDD50-\\uDD73\\uDD76\\uDD80-\\uDDC4\\uDDCA-\\uDDCC\\uDDD0-\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC00-\\uDC4A\\uDC50-\\uDC59\\uDC80-\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDB5\\uDDB8-\\uDDC0\\uDDD8-\\uDDDD\\uDE00-\\uDE40\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEB7\\uDEC0-\\uDEC9\\uDF00-\\uDF19\\uDF1D-\\uDF2B\\uDF30-\\uDF39]|\\uD806[\\uDCA0-\\uDCE9\\uDCFF\\uDE00-\\uDE3E\\uDE47\\uDE50-\\uDE83\\uDE86-\\uDE99\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC40\\uDC50-\\uDC59\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDEF0-\\uDEF4\\uDF00-\\uDF36\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF44\\uDF50-\\uDF7E\\uDF8F-\\uDF9F\\uDFE0\\uDFE1]|\\uD821[\\uDC00-\\uDFEC]|\\uD822[\\uDC00-\\uDEF2]|\\uD82C[\\uDC00-\\uDD1E\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9D\\uDC9E]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]|\\uD83A[\\uDC00-\\uDCC4\\uDCD0-\\uDCD6\\uDD00-\\uDD4A\\uDD50-\\uDD59]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDED6\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uDB40[\\uDD00-\\uDDEF]/;\n\nvar unicode = {\n\tSpace_Separator: Space_Separator,\n\tID_Start: ID_Start,\n\tID_Continue: ID_Continue\n};\n\nvar util = {\n isSpaceSeparator (c) {\n return typeof c === 'string' && unicode.Space_Separator.test(c)\n },\n\n isIdStartChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c === '$') || (c === '_') ||\n unicode.ID_Start.test(c)\n )\n },\n\n isIdContinueChar (c) {\n return typeof c === 'string' && (\n (c >= 'a' && c <= 'z') ||\n (c >= 'A' && c <= 'Z') ||\n (c >= '0' && c <= '9') ||\n (c === '$') || (c === '_') ||\n (c === '\\u200C') || (c === '\\u200D') ||\n unicode.ID_Continue.test(c)\n )\n },\n\n isDigit (c) {\n return typeof c === 'string' && /[0-9]/.test(c)\n },\n\n isHexDigit (c) {\n return typeof c === 'string' && /[0-9A-Fa-f]/.test(c)\n },\n};\n\nlet source;\nlet parseState;\nlet stack;\nlet pos;\nlet line;\nlet column;\nlet token;\nlet key;\nlet root;\n\nvar parse = function parse (text, reviver) {\n source = String(text);\n parseState = 'start';\n stack = [];\n pos = 0;\n line = 1;\n column = 0;\n token = undefined;\n key = undefined;\n root = undefined;\n\n do {\n token = lex();\n\n // This code is unreachable.\n // if (!parseStates[parseState]) {\n // throw invalidParseState()\n // }\n\n parseStates[parseState]();\n } while (token.type !== 'eof')\n\n if (typeof reviver === 'function') {\n return internalize({'': root}, '', reviver)\n }\n\n return root\n};\n\nfunction internalize (holder, name, reviver) {\n const value = holder[name];\n if (value != null && typeof value === 'object') {\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const key = String(i);\n const replacement = internalize(value, key, reviver);\n if (replacement === undefined) {\n delete value[key];\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n }\n } else {\n for (const key in value) {\n const replacement = internalize(value, key, reviver);\n if (replacement === undefined) {\n delete value[key];\n } else {\n Object.defineProperty(value, key, {\n value: replacement,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n }\n }\n }\n\n return reviver.call(holder, name, value)\n}\n\nlet lexState;\nlet buffer;\nlet doubleQuote;\nlet sign;\nlet c;\n\nfunction lex () {\n lexState = 'default';\n buffer = '';\n doubleQuote = false;\n sign = 1;\n\n for (;;) {\n c = peek();\n\n // This code is unreachable.\n // if (!lexStates[lexState]) {\n // throw invalidLexState(lexState)\n // }\n\n const token = lexStates[lexState]();\n if (token) {\n return token\n }\n }\n}\n\nfunction peek () {\n if (source[pos]) {\n return String.fromCodePoint(source.codePointAt(pos))\n }\n}\n\nfunction read () {\n const c = peek();\n\n if (c === '\\n') {\n line++;\n column = 0;\n } else if (c) {\n column += c.length;\n } else {\n column++;\n }\n\n if (c) {\n pos += c.length;\n }\n\n return c\n}\n\nconst lexStates = {\n default () {\n switch (c) {\n case '\\t':\n case '\\v':\n case '\\f':\n case ' ':\n case '\\u00A0':\n case '\\uFEFF':\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read();\n return\n\n case '/':\n read();\n lexState = 'comment';\n return\n\n case undefined:\n read();\n return newToken('eof')\n }\n\n if (util.isSpaceSeparator(c)) {\n read();\n return\n }\n\n // This code is unreachable.\n // if (!lexStates[parseState]) {\n // throw invalidLexState(parseState)\n // }\n\n return lexStates[parseState]()\n },\n\n comment () {\n switch (c) {\n case '*':\n read();\n lexState = 'multiLineComment';\n return\n\n case '/':\n read();\n lexState = 'singleLineComment';\n return\n }\n\n throw invalidChar(read())\n },\n\n multiLineComment () {\n switch (c) {\n case '*':\n read();\n lexState = 'multiLineCommentAsterisk';\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read();\n },\n\n multiLineCommentAsterisk () {\n switch (c) {\n case '*':\n read();\n return\n\n case '/':\n read();\n lexState = 'default';\n return\n\n case undefined:\n throw invalidChar(read())\n }\n\n read();\n lexState = 'multiLineComment';\n },\n\n singleLineComment () {\n switch (c) {\n case '\\n':\n case '\\r':\n case '\\u2028':\n case '\\u2029':\n read();\n lexState = 'default';\n return\n\n case undefined:\n read();\n return newToken('eof')\n }\n\n read();\n },\n\n value () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n case 'n':\n read();\n literal('ull');\n return newToken('null', null)\n\n case 't':\n read();\n literal('rue');\n return newToken('boolean', true)\n\n case 'f':\n read();\n literal('alse');\n return newToken('boolean', false)\n\n case '-':\n case '+':\n if (read() === '-') {\n sign = -1;\n }\n\n lexState = 'sign';\n return\n\n case '.':\n buffer = read();\n lexState = 'decimalPointLeading';\n return\n\n case '0':\n buffer = read();\n lexState = 'zero';\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read();\n lexState = 'decimalInteger';\n return\n\n case 'I':\n read();\n literal('nfinity');\n return newToken('numeric', Infinity)\n\n case 'N':\n read();\n literal('aN');\n return newToken('numeric', NaN)\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"');\n buffer = '';\n lexState = 'string';\n return\n }\n\n throw invalidChar(read())\n },\n\n identifierNameStartEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read();\n const u = unicodeEscape();\n switch (u) {\n case '$':\n case '_':\n break\n\n default:\n if (!util.isIdStartChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u;\n lexState = 'identifierName';\n },\n\n identifierName () {\n switch (c) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n buffer += read();\n return\n\n case '\\\\':\n read();\n lexState = 'identifierNameEscape';\n return\n }\n\n if (util.isIdContinueChar(c)) {\n buffer += read();\n return\n }\n\n return newToken('identifier', buffer)\n },\n\n identifierNameEscape () {\n if (c !== 'u') {\n throw invalidChar(read())\n }\n\n read();\n const u = unicodeEscape();\n switch (u) {\n case '$':\n case '_':\n case '\\u200C':\n case '\\u200D':\n break\n\n default:\n if (!util.isIdContinueChar(u)) {\n throw invalidIdentifier()\n }\n\n break\n }\n\n buffer += u;\n lexState = 'identifierName';\n },\n\n sign () {\n switch (c) {\n case '.':\n buffer = read();\n lexState = 'decimalPointLeading';\n return\n\n case '0':\n buffer = read();\n lexState = 'zero';\n return\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n buffer = read();\n lexState = 'decimalInteger';\n return\n\n case 'I':\n read();\n literal('nfinity');\n return newToken('numeric', sign * Infinity)\n\n case 'N':\n read();\n literal('aN');\n return newToken('numeric', NaN)\n }\n\n throw invalidChar(read())\n },\n\n zero () {\n switch (c) {\n case '.':\n buffer += read();\n lexState = 'decimalPoint';\n return\n\n case 'e':\n case 'E':\n buffer += read();\n lexState = 'decimalExponent';\n return\n\n case 'x':\n case 'X':\n buffer += read();\n lexState = 'hexadecimal';\n return\n }\n\n return newToken('numeric', sign * 0)\n },\n\n decimalInteger () {\n switch (c) {\n case '.':\n buffer += read();\n lexState = 'decimalPoint';\n return\n\n case 'e':\n case 'E':\n buffer += read();\n lexState = 'decimalExponent';\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read();\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalPointLeading () {\n if (util.isDigit(c)) {\n buffer += read();\n lexState = 'decimalFraction';\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalPoint () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read();\n lexState = 'decimalExponent';\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read();\n lexState = 'decimalFraction';\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalFraction () {\n switch (c) {\n case 'e':\n case 'E':\n buffer += read();\n lexState = 'decimalExponent';\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read();\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n decimalExponent () {\n switch (c) {\n case '+':\n case '-':\n buffer += read();\n lexState = 'decimalExponentSign';\n return\n }\n\n if (util.isDigit(c)) {\n buffer += read();\n lexState = 'decimalExponentInteger';\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentSign () {\n if (util.isDigit(c)) {\n buffer += read();\n lexState = 'decimalExponentInteger';\n return\n }\n\n throw invalidChar(read())\n },\n\n decimalExponentInteger () {\n if (util.isDigit(c)) {\n buffer += read();\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n hexadecimal () {\n if (util.isHexDigit(c)) {\n buffer += read();\n lexState = 'hexadecimalInteger';\n return\n }\n\n throw invalidChar(read())\n },\n\n hexadecimalInteger () {\n if (util.isHexDigit(c)) {\n buffer += read();\n return\n }\n\n return newToken('numeric', sign * Number(buffer))\n },\n\n string () {\n switch (c) {\n case '\\\\':\n read();\n buffer += escape();\n return\n\n case '\"':\n if (doubleQuote) {\n read();\n return newToken('string', buffer)\n }\n\n buffer += read();\n return\n\n case \"'\":\n if (!doubleQuote) {\n read();\n return newToken('string', buffer)\n }\n\n buffer += read();\n return\n\n case '\\n':\n case '\\r':\n throw invalidChar(read())\n\n case '\\u2028':\n case '\\u2029':\n separatorChar(c);\n break\n\n case undefined:\n throw invalidChar(read())\n }\n\n buffer += read();\n },\n\n start () {\n switch (c) {\n case '{':\n case '[':\n return newToken('punctuator', read())\n\n // This code is unreachable since the default lexState handles eof.\n // case undefined:\n // return newToken('eof')\n }\n\n lexState = 'value';\n },\n\n beforePropertyName () {\n switch (c) {\n case '$':\n case '_':\n buffer = read();\n lexState = 'identifierName';\n return\n\n case '\\\\':\n read();\n lexState = 'identifierNameStartEscape';\n return\n\n case '}':\n return newToken('punctuator', read())\n\n case '\"':\n case \"'\":\n doubleQuote = (read() === '\"');\n lexState = 'string';\n return\n }\n\n if (util.isIdStartChar(c)) {\n buffer += read();\n lexState = 'identifierName';\n return\n }\n\n throw invalidChar(read())\n },\n\n afterPropertyName () {\n if (c === ':') {\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforePropertyValue () {\n lexState = 'value';\n },\n\n afterPropertyValue () {\n switch (c) {\n case ',':\n case '}':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n beforeArrayValue () {\n if (c === ']') {\n return newToken('punctuator', read())\n }\n\n lexState = 'value';\n },\n\n afterArrayValue () {\n switch (c) {\n case ',':\n case ']':\n return newToken('punctuator', read())\n }\n\n throw invalidChar(read())\n },\n\n end () {\n // This code is unreachable since it's handled by the default lexState.\n // if (c === undefined) {\n // read()\n // return newToken('eof')\n // }\n\n throw invalidChar(read())\n },\n};\n\nfunction newToken (type, value) {\n return {\n type,\n value,\n line,\n column,\n }\n}\n\nfunction literal (s) {\n for (const c of s) {\n const p = peek();\n\n if (p !== c) {\n throw invalidChar(read())\n }\n\n read();\n }\n}\n\nfunction escape () {\n const c = peek();\n switch (c) {\n case 'b':\n read();\n return '\\b'\n\n case 'f':\n read();\n return '\\f'\n\n case 'n':\n read();\n return '\\n'\n\n case 'r':\n read();\n return '\\r'\n\n case 't':\n read();\n return '\\t'\n\n case 'v':\n read();\n return '\\v'\n\n case '0':\n read();\n if (util.isDigit(peek())) {\n throw invalidChar(read())\n }\n\n return '\\0'\n\n case 'x':\n read();\n return hexEscape()\n\n case 'u':\n read();\n return unicodeEscape()\n\n case '\\n':\n case '\\u2028':\n case '\\u2029':\n read();\n return ''\n\n case '\\r':\n read();\n if (peek() === '\\n') {\n read();\n }\n\n return ''\n\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n throw invalidChar(read())\n\n case undefined:\n throw invalidChar(read())\n }\n\n return read()\n}\n\nfunction hexEscape () {\n let buffer = '';\n let c = peek();\n\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read();\n\n c = peek();\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read();\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nfunction unicodeEscape () {\n let buffer = '';\n let count = 4;\n\n while (count-- > 0) {\n const c = peek();\n if (!util.isHexDigit(c)) {\n throw invalidChar(read())\n }\n\n buffer += read();\n }\n\n return String.fromCodePoint(parseInt(buffer, 16))\n}\n\nconst parseStates = {\n start () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push();\n },\n\n beforePropertyName () {\n switch (token.type) {\n case 'identifier':\n case 'string':\n key = token.value;\n parseState = 'afterPropertyName';\n return\n\n case 'punctuator':\n // This code is unreachable since it's handled by the lexState.\n // if (token.value !== '}') {\n // throw invalidToken()\n // }\n\n pop();\n return\n\n case 'eof':\n throw invalidEOF()\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterPropertyName () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator' || token.value !== ':') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n parseState = 'beforePropertyValue';\n },\n\n beforePropertyValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n push();\n },\n\n beforeArrayValue () {\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n if (token.type === 'punctuator' && token.value === ']') {\n pop();\n return\n }\n\n push();\n },\n\n afterPropertyValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforePropertyName';\n return\n\n case '}':\n pop();\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n afterArrayValue () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'punctuator') {\n // throw invalidToken()\n // }\n\n if (token.type === 'eof') {\n throw invalidEOF()\n }\n\n switch (token.value) {\n case ',':\n parseState = 'beforeArrayValue';\n return\n\n case ']':\n pop();\n }\n\n // This code is unreachable since it's handled by the lexState.\n // throw invalidToken()\n },\n\n end () {\n // This code is unreachable since it's handled by the lexState.\n // if (token.type !== 'eof') {\n // throw invalidToken()\n // }\n },\n};\n\nfunction push () {\n let value;\n\n switch (token.type) {\n case 'punctuator':\n switch (token.value) {\n case '{':\n value = {};\n break\n\n case '[':\n value = [];\n break\n }\n\n break\n\n case 'null':\n case 'boolean':\n case 'numeric':\n case 'string':\n value = token.value;\n break\n\n // This code is unreachable.\n // default:\n // throw invalidToken()\n }\n\n if (root === undefined) {\n root = value;\n } else {\n const parent = stack[stack.length - 1];\n if (Array.isArray(parent)) {\n parent.push(value);\n } else {\n Object.defineProperty(parent, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n if (value !== null && typeof value === 'object') {\n stack.push(value);\n\n if (Array.isArray(value)) {\n parseState = 'beforeArrayValue';\n } else {\n parseState = 'beforePropertyName';\n }\n } else {\n const current = stack[stack.length - 1];\n if (current == null) {\n parseState = 'end';\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue';\n } else {\n parseState = 'afterPropertyValue';\n }\n }\n}\n\nfunction pop () {\n stack.pop();\n\n const current = stack[stack.length - 1];\n if (current == null) {\n parseState = 'end';\n } else if (Array.isArray(current)) {\n parseState = 'afterArrayValue';\n } else {\n parseState = 'afterPropertyValue';\n }\n}\n\n// This code is unreachable.\n// function invalidParseState () {\n// return new Error(`JSON5: invalid parse state '${parseState}'`)\n// }\n\n// This code is unreachable.\n// function invalidLexState (state) {\n// return new Error(`JSON5: invalid lex state '${state}'`)\n// }\n\nfunction invalidChar (c) {\n if (c === undefined) {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n }\n\n return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n}\n\nfunction invalidEOF () {\n return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n}\n\n// This code is unreachable.\n// function invalidToken () {\n// if (token.type === 'eof') {\n// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)\n// }\n\n// const c = String.fromCodePoint(token.value.codePointAt(0))\n// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`)\n// }\n\nfunction invalidIdentifier () {\n column -= 5;\n return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`)\n}\n\nfunction separatorChar (c) {\n console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`);\n}\n\nfunction formatChar (c) {\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n };\n\n if (replacements[c]) {\n return replacements[c]\n }\n\n if (c < ' ') {\n const hexString = c.charCodeAt(0).toString(16);\n return '\\\\x' + ('00' + hexString).substring(hexString.length)\n }\n\n return c\n}\n\nfunction syntaxError (message) {\n const err = new SyntaxError(message);\n err.lineNumber = line;\n err.columnNumber = column;\n return err\n}\n\nvar stringify = function stringify (value, replacer, space) {\n const stack = [];\n let indent = '';\n let propertyList;\n let replacerFunc;\n let gap = '';\n let quote;\n\n if (\n replacer != null &&\n typeof replacer === 'object' &&\n !Array.isArray(replacer)\n ) {\n space = replacer.space;\n quote = replacer.quote;\n replacer = replacer.replacer;\n }\n\n if (typeof replacer === 'function') {\n replacerFunc = replacer;\n } else if (Array.isArray(replacer)) {\n propertyList = [];\n for (const v of replacer) {\n let item;\n\n if (typeof v === 'string') {\n item = v;\n } else if (\n typeof v === 'number' ||\n v instanceof String ||\n v instanceof Number\n ) {\n item = String(v);\n }\n\n if (item !== undefined && propertyList.indexOf(item) < 0) {\n propertyList.push(item);\n }\n }\n }\n\n if (space instanceof Number) {\n space = Number(space);\n } else if (space instanceof String) {\n space = String(space);\n }\n\n if (typeof space === 'number') {\n if (space > 0) {\n space = Math.min(10, Math.floor(space));\n gap = ' '.substr(0, space);\n }\n } else if (typeof space === 'string') {\n gap = space.substr(0, 10);\n }\n\n return serializeProperty('', {'': value})\n\n function serializeProperty (key, holder) {\n let value = holder[key];\n if (value != null) {\n if (typeof value.toJSON5 === 'function') {\n value = value.toJSON5(key);\n } else if (typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n }\n\n if (replacerFunc) {\n value = replacerFunc.call(holder, key, value);\n }\n\n if (value instanceof Number) {\n value = Number(value);\n } else if (value instanceof String) {\n value = String(value);\n } else if (value instanceof Boolean) {\n value = value.valueOf();\n }\n\n switch (value) {\n case null: return 'null'\n case true: return 'true'\n case false: return 'false'\n }\n\n if (typeof value === 'string') {\n return quoteString(value, false)\n }\n\n if (typeof value === 'number') {\n return String(value)\n }\n\n if (typeof value === 'object') {\n return Array.isArray(value) ? serializeArray(value) : serializeObject(value)\n }\n\n return undefined\n }\n\n function quoteString (value) {\n const quotes = {\n \"'\": 0.1,\n '\"': 0.2,\n };\n\n const replacements = {\n \"'\": \"\\\\'\",\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\',\n '\\b': '\\\\b',\n '\\f': '\\\\f',\n '\\n': '\\\\n',\n '\\r': '\\\\r',\n '\\t': '\\\\t',\n '\\v': '\\\\v',\n '\\0': '\\\\0',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029',\n };\n\n let product = '';\n\n for (let i = 0; i < value.length; i++) {\n const c = value[i];\n switch (c) {\n case \"'\":\n case '\"':\n quotes[c]++;\n product += c;\n continue\n\n case '\\0':\n if (util.isDigit(value[i + 1])) {\n product += '\\\\x00';\n continue\n }\n }\n\n if (replacements[c]) {\n product += replacements[c];\n continue\n }\n\n if (c < ' ') {\n let hexString = c.charCodeAt(0).toString(16);\n product += '\\\\x' + ('00' + hexString).substring(hexString.length);\n continue\n }\n\n product += c;\n }\n\n const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b);\n\n product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]);\n\n return quoteChar + product + quoteChar\n }\n\n function serializeObject (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value);\n\n let stepback = indent;\n indent = indent + gap;\n\n let keys = propertyList || Object.keys(value);\n let partial = [];\n for (const key of keys) {\n const propertyString = serializeProperty(key, value);\n if (propertyString !== undefined) {\n let member = serializeKey(key) + ':';\n if (gap !== '') {\n member += ' ';\n }\n member += propertyString;\n partial.push(member);\n }\n }\n\n let final;\n if (partial.length === 0) {\n final = '{}';\n } else {\n let properties;\n if (gap === '') {\n properties = partial.join(',');\n final = '{' + properties + '}';\n } else {\n let separator = ',\\n' + indent;\n properties = partial.join(separator);\n final = '{\\n' + indent + properties + ',\\n' + stepback + '}';\n }\n }\n\n stack.pop();\n indent = stepback;\n return final\n }\n\n function serializeKey (key) {\n if (key.length === 0) {\n return quoteString(key, true)\n }\n\n const firstChar = String.fromCodePoint(key.codePointAt(0));\n if (!util.isIdStartChar(firstChar)) {\n return quoteString(key, true)\n }\n\n for (let i = firstChar.length; i < key.length; i++) {\n if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) {\n return quoteString(key, true)\n }\n }\n\n return key\n }\n\n function serializeArray (value) {\n if (stack.indexOf(value) >= 0) {\n throw TypeError('Converting circular structure to JSON5')\n }\n\n stack.push(value);\n\n let stepback = indent;\n indent = indent + gap;\n\n let partial = [];\n for (let i = 0; i < value.length; i++) {\n const propertyString = serializeProperty(String(i), value);\n partial.push((propertyString !== undefined) ? propertyString : 'null');\n }\n\n let final;\n if (partial.length === 0) {\n final = '[]';\n } else {\n if (gap === '') {\n let properties = partial.join(',');\n final = '[' + properties + ']';\n } else {\n let separator = ',\\n' + indent;\n let properties = partial.join(separator);\n final = '[\\n' + indent + properties + ',\\n' + stepback + ']';\n }\n }\n\n stack.pop();\n indent = stepback;\n return final\n }\n};\n\nconst JSON5 = {\n parse,\n stringify,\n};\n\nvar lib = JSON5;\n\nexport default lib;\n","import { z } from 'zod';\n\nimport type {\n daemon_api_key_entry_t,\n daemon_api_keys_config_file_t,\n daemon_compiled_identity_constraints_t,\n daemon_runtime_api_key_entry_t,\n daemon_server_config_file_t\n} from '@src/types/project_types';\n\nconst privilege_name_list = [\n 'invoke_functions',\n 'define_functions',\n 'undefine_functions',\n 'define_constants',\n 'undefine_constants',\n 'define_dependencies',\n 'undefine_dependencies',\n 'admin_privileges',\n 'all_privileges'\n] as const;\n\nconst tls_min_version_list = ['TLSv1.2', 'TLSv1.3'] as const;\n\nconst worker_runtime_options_schema = z\n .object({\n call_timeout_ms: z.number().int().positive().optional(),\n control_timeout_ms: z.number().int().positive().optional(),\n start_timeout_ms: z.number().int().positive().optional(),\n stop_timeout_ms: z.number().int().positive().optional(),\n restart_on_failure: z.boolean().optional(),\n max_restarts_per_worker: z.number().int().nonnegative().optional(),\n max_pending_calls_per_worker: z.number().int().positive().optional(),\n restart_base_delay_ms: z.number().int().positive().optional(),\n restart_max_delay_ms: z.number().int().positive().optional(),\n restart_jitter_ms: z.number().int().nonnegative().optional()\n })\n .strict();\n\nconst rate_limiter_schema = z\n .object({\n enabled: z.boolean().optional(),\n tokens_per_interval: z.number().int().positive().optional(),\n interval_ms: z.number().int().positive().optional(),\n burst_tokens: z.number().int().positive().optional(),\n disconnect_on_limit: z.boolean().optional()\n })\n .strict();\n\nconst abuse_controls_schema = z\n .object({\n connection_controls: z\n .object({\n max_concurrent_sockets: z.number().int().positive().optional(),\n max_concurrent_handshakes: z.number().int().positive().optional(),\n max_unauthenticated_sessions: z.number().int().positive().optional(),\n global_connection_window_ms: z.number().int().positive().optional(),\n global_max_new_connections_per_window: z.number().int().positive().optional(),\n per_ip_max_new_connections_per_window: z.number().int().positive().optional(),\n tls_handshake_timeout_ms: z.number().int().positive().optional(),\n auth_message_timeout_ms: z.number().int().positive().optional(),\n max_pre_auth_frame_bytes: z.number().int().positive().optional(),\n max_post_auth_frame_bytes: z.number().int().positive().optional()\n })\n .strict()\n .optional(),\n auth_controls: z\n .object({\n pending_auth_window_ms: z.number().int().positive().optional(),\n max_pending_auth_attempts_per_ip_per_window: z.number().int().positive().optional(),\n failed_auth_window_ms: z.number().int().positive().optional(),\n max_failed_auth_per_ip_per_window: z.number().int().positive().optional(),\n max_failed_auth_per_api_key_per_window: z.number().int().positive().optional(),\n block_duration_ms: z.number().int().positive().optional(),\n enable_blocklist: z.boolean().optional()\n })\n .strict()\n .optional(),\n request_controls: z\n .object({\n max_in_flight_requests_per_connection: z.number().int().positive().optional(),\n per_connection: rate_limiter_schema.optional(),\n per_api_key: rate_limiter_schema.optional(),\n per_ip: rate_limiter_schema.optional()\n })\n .strict()\n .optional(),\n observability: z\n .object({\n enable_console_log: z.boolean().optional()\n })\n .strict()\n .optional()\n })\n .strict();\n\nconst daemon_server_config_schema = z\n .object({\n information: z\n .object({\n server_name: z.string().min(1)\n })\n .strict(),\n network: z\n .object({\n bind_addr: z.string().min(1),\n tcp_listen_port: z.number().int().positive().max(65535)\n })\n .strict(),\n tls_mtls: z\n .object({\n key_file: z.string().min(1),\n cert_file: z.string().min(1),\n ca_file: z.string().min(1),\n crl_file: z.string().min(1).optional(),\n min_version: z.enum(tls_min_version_list).optional(),\n cipher_suites: z.string().min(1).optional(),\n handshake_timeout_ms: z.number().int().positive().optional(),\n request_timeout_ms: z.number().int().positive().optional(),\n max_frame_bytes: z.number().int().positive().optional()\n })\n .strict(),\n workerprocedurecall: z\n .object({\n count: z.number().int().positive(),\n constructor_options: worker_runtime_options_schema.optional(),\n start_options: worker_runtime_options_schema.optional()\n })\n .strict(),\n abuse_controls: abuse_controls_schema.optional(),\n observability: z\n .object({\n enable_console_log: z.boolean().optional(),\n log_worker_events: z.boolean().optional(),\n metrics_log_interval_ms: z.number().int().positive().optional()\n })\n .strict()\n .optional()\n })\n .strict();\n\nconst daemon_api_key_config_schema = z\n .object({\n api_keys: z\n .array(\n z\n .object({\n key_id: z.string().min(1),\n api_key: z.string().min(1),\n privileges: z.array(z.enum(privilege_name_list)).min(1),\n enabled: z.boolean().optional(),\n identity_constraints: z\n .object({\n remote_address_regex: z.string().min(1).optional(),\n tls_peer_subject_regex: z.string().min(1).optional(),\n tls_peer_san_regex: z.string().min(1).optional(),\n tls_peer_fingerprint256_regex: z.string().min(1).optional(),\n tls_peer_serial_number_regex: z.string().min(1).optional()\n })\n .strict()\n .optional()\n })\n .strict()\n )\n .min(1)\n })\n .strict();\n\nfunction BuildZodErrorMessage(params: { prefix: string; error: z.ZodError }): string {\n const message_lines = params.error.issues.map((issue) => {\n const issue_path = issue.path.length > 0 ? issue.path.join('.') : '<root>';\n return `${issue_path}: ${issue.message}`;\n });\n\n return `${params.prefix}\\n${message_lines.join('\\n')}`;\n}\n\nfunction CompileRegex(params: { source: string; label: string }): RegExp {\n try {\n return new RegExp(params.source);\n } catch (error) {\n const error_message = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid regex for ${params.label}: ${error_message}`);\n }\n}\n\nexport class ConfigValidator {\n validateServerConfig(params: { server_config_raw: unknown }): daemon_server_config_file_t {\n const parse_result = daemon_server_config_schema.safeParse(params.server_config_raw);\n if (!parse_result.success) {\n throw new Error(\n BuildZodErrorMessage({\n prefix: 'Invalid server config.',\n error: parse_result.error\n })\n );\n }\n\n return parse_result.data as daemon_server_config_file_t;\n }\n\n validateApiKeysConfig(params: { api_keys_config_raw: unknown }): daemon_api_keys_config_file_t {\n const parse_result = daemon_api_key_config_schema.safeParse(params.api_keys_config_raw);\n if (!parse_result.success) {\n throw new Error(\n BuildZodErrorMessage({\n prefix: 'Invalid api-keys config.',\n error: parse_result.error\n })\n );\n }\n\n this.assertUniqueApiKeys({\n api_keys: parse_result.data.api_keys as daemon_api_key_entry_t[]\n });\n this.assertUniqueKeyIds({\n api_keys: parse_result.data.api_keys as daemon_api_key_entry_t[]\n });\n\n return parse_result.data as daemon_api_keys_config_file_t;\n }\n\n toRuntimeApiKeysConfig(params: {\n api_keys_config: daemon_api_keys_config_file_t;\n }): daemon_runtime_api_key_entry_t[] {\n return params.api_keys_config.api_keys.map((api_key_entry) => {\n const compiled_identity_constraints = this.compileIdentityConstraints({\n api_key_entry\n });\n\n const runtime_entry: daemon_runtime_api_key_entry_t = {\n key_id: api_key_entry.key_id,\n api_key: api_key_entry.api_key,\n privileges: [...api_key_entry.privileges],\n enabled: api_key_entry.enabled ?? true,\n identity_constraints: compiled_identity_constraints\n };\n\n return runtime_entry;\n });\n }\n\n private compileIdentityConstraints(params: {\n api_key_entry: daemon_api_key_entry_t;\n }): daemon_compiled_identity_constraints_t | undefined {\n const constraints = params.api_key_entry.identity_constraints;\n if (!constraints) {\n return undefined;\n }\n\n const compiled_constraints: daemon_compiled_identity_constraints_t = {};\n if (constraints.remote_address_regex) {\n compiled_constraints.remote_address_regex = CompileRegex({\n source: constraints.remote_address_regex,\n label: `api_keys[${params.api_key_entry.key_id}].identity_constraints.remote_address_regex`\n });\n }\n if (constraints.tls_peer_subject_regex) {\n compiled_constraints.tls_peer_subject_regex = CompileRegex({\n source: constraints.tls_peer_subject_regex,\n label: `api_keys[${params.api_key_entry.key_id}].identity_constraints.tls_peer_subject_regex`\n });\n }\n if (constraints.tls_peer_san_regex) {\n compiled_constraints.tls_peer_san_regex = CompileRegex({\n source: constraints.tls_peer_san_regex,\n label: `api_keys[${params.api_key_entry.key_id}].identity_constraints.tls_peer_san_regex`\n });\n }\n if (constraints.tls_peer_fingerprint256_regex) {\n compiled_constraints.tls_peer_fingerprint256_regex = CompileRegex({\n source: constraints.tls_peer_fingerprint256_regex,\n label: `api_keys[${params.api_key_entry.key_id}].identity_constraints.tls_peer_fingerprint256_regex`\n });\n }\n if (constraints.tls_peer_serial_number_regex) {\n compiled_constraints.tls_peer_serial_number_regex = CompileRegex({\n source: constraints.tls_peer_serial_number_regex,\n label: `api_keys[${params.api_key_entry.key_id}].identity_constraints.tls_peer_serial_number_regex`\n });\n }\n\n return compiled_constraints;\n }\n\n private assertUniqueApiKeys(params: { api_keys: daemon_api_key_entry_t[] }): void {\n const seen_api_keys = new Set<string>();\n for (const api_key_entry of params.api_keys) {\n if (seen_api_keys.has(api_key_entry.api_key)) {\n throw new Error(`Duplicate api_key found in api-keys config: ${api_key_entry.api_key}`);\n }\n seen_api_keys.add(api_key_entry.api_key);\n }\n }\n\n private assertUniqueKeyIds(params: { api_keys: daemon_api_key_entry_t[] }): void {\n const seen_key_ids = new Set<string>();\n for (const api_key_entry of params.api_keys) {\n if (seen_key_ids.has(api_key_entry.key_id)) {\n throw new Error(`Duplicate key_id found in api-keys config: ${api_key_entry.key_id}`);\n }\n seen_key_ids.add(api_key_entry.key_id);\n }\n }\n}\n","import type { daemon_cli_options_t } from '@src/types/project_types';\n\nconst default_server_config_path = './config/server.config.json5';\nconst default_api_keys_config_path = './config/api_keys.config.json5';\nconst default_tls_output_dir = './config/certs';\nconst default_ca_common_name = 'nodenetproccalld-local-ca';\nconst default_server_common_name = 'localhost';\nconst default_client_common_name = 'nodenetproccalld-client';\nconst default_tls_valid_days = 825;\n\nexport class DaemonCli {\n parseOptions(): daemon_cli_options_t {\n const options: daemon_cli_options_t = {\n server_config_path: default_server_config_path,\n api_keys_config_path: default_api_keys_config_path,\n help: false,\n tls_generation: {\n enabled: false,\n output_dir: default_tls_output_dir,\n overwrite: false,\n ca_common_name: default_ca_common_name,\n server_common_name: default_server_common_name,\n client_common_name: default_client_common_name,\n valid_days: default_tls_valid_days\n }\n };\n\n const argv = process.argv.slice(2);\n for (let index = 0; index < argv.length; index += 1) {\n const token = argv[index];\n\n if (token === '--help' || token === '-h') {\n options.help = true;\n continue;\n }\n\n if (token === '--server-config') {\n const next_value = argv[index + 1];\n if (!next_value) {\n throw new Error('Missing value for --server-config');\n }\n options.server_config_path = next_value;\n index += 1;\n continue;\n }\n\n if (token === '--api-keys-config') {\n const next_value = argv[index + 1];\n if (!next_value) {\n throw new Error('Missing value for --api-keys-config');\n }\n options.api_keys_config_path = next_value;\n index += 1;\n continue;\n }\n\n if (token === '--generate-tls-material') {\n options.tls_generation.enabled = true;\n continue;\n }\n\n if (token === '--tls-output-dir') {\n const next_value = argv[index + 1];\n if (!next_value) {\n throw new Error('Missing value for --tls-output-dir');\n }\n options.tls_generation.output_dir = next_value;\n index += 1;\n continue;\n }\n\n if (token === '--tls-overwrite') {\n options.tls_generation.overwrite = true;\n continue;\n }\n\n if (token === '--tls-ca-cn') {\n const next_value = argv[index + 1];\n if (!next_value) {\n throw new Error('Missing value for --tls-ca-cn');\n }\n options.tls_generation.ca_common_name = next_value;\n index += 1;\n continue;\n }\n\n if (token === '--tls-server-cn') {\n const next_value = argv[index + 1];\n if (!next_value) {\n throw new Error('Missing value for --tls-server-cn');\n }\n options.tls_generation.server_common_name = next_value;\n index += 1;\n continue;\n }\n\n if (token === '--tls-client-cn') {\n const next_value = argv[index + 1];\n if (!next_value) {\n throw new Error('Missing value for --tls-client-cn');\n }\n options.tls_generation.client_common_name = next_value;\n index += 1;\n continue;\n }\n\n if (token === '--tls-valid-days') {\n const next_value = argv[index + 1];\n if (!next_value) {\n throw new Error('Missing value for --tls-valid-days');\n }\n\n const valid_days = Number(next_value);\n if (!Number.isInteger(valid_days) || valid_days <= 0) {\n throw new Error('--tls-valid-days must be a positive integer.');\n }\n\n options.tls_generation.valid_days = valid_days;\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument: ${token}`);\n }\n\n return options;\n }\n\n printHelp(): void {\n const help_text = [\n 'nodenetproccalld',\n '',\n 'Usage:',\n ' node dist/index.js [options]',\n '',\n 'Options:',\n ' --server-config <path> Path to server JSON5 config file.',\n ' Default: ./config/server.config.json5',\n ' --api-keys-config <path> Path to api keys JSON5 config file.',\n ' Default: ./config/api_keys.config.json5',\n ' --generate-tls-material Generate CA/server/client TLS material and exit.',\n ' --tls-output-dir <path> Output directory for generated TLS files.',\n ' Default: ./config/certs',\n ' --tls-overwrite Overwrite existing TLS files in output dir.',\n ' --tls-ca-cn <value> CA certificate common name.',\n ' Default: nodenetproccalld-local-ca',\n ' --tls-server-cn <value> Server certificate common name.',\n ' Default: localhost',\n ' --tls-client-cn <value> Client certificate common name.',\n ' Default: nodenetproccalld-client',\n ' --tls-valid-days <number> Certificate validity in days.',\n ' Default: 825',\n ' -h, --help Show this help message.'\n ].join('\\n');\n\n console.log(help_text);\n }\n}\n","import {\n NetworkProcedureCall,\n type networkprocedurecall_abuse_metrics_t,\n type networkprocedurecall_auth_callback_t,\n type networkprocedurecall_server_start_params_t\n} from '@opsimathically/networkprocedurecall';\nimport {\n WorkerProcedureCall,\n type worker_event_t\n} from '@opsimathically/workerprocedurecall';\n\nimport { ApiKeyAuthorizer } from '@src/classes/apikeyauthorizer/ApiKeyAuthorizer.class';\nimport { ConfigFileLoader } from '@src/classes/configfileloader/ConfigFileLoader.class';\n\nimport type {\n daemon_config_paths_t,\n daemon_runtime_config_t\n} from '@src/types/project_types';\n\ntype daemon_lifecycle_state_t = 'stopped' | 'starting' | 'running' | 'stopping';\ntype networkprocedurecall_workerprocedurecall_t = ConstructorParameters<\n typeof NetworkProcedureCall\n>[0]['workerprocedurecall'];\n\ntype daemon_runtime_snapshot_t = {\n lifecycle_state: daemon_lifecycle_state_t;\n server_name?: string;\n bind_addr?: string;\n tcp_listen_port?: number;\n worker_health_states?: unknown;\n abuse_metrics?: networkprocedurecall_abuse_metrics_t;\n};\n\nfunction ToIsoTimestamp(): string {\n return new Date().toISOString();\n}\n\nexport class NetworkProcedureCallDaemon {\n private readonly config_paths: daemon_config_paths_t;\n private readonly config_file_loader: ConfigFileLoader;\n\n private lifecycle_state: daemon_lifecycle_state_t = 'stopped';\n private daemon_config: daemon_runtime_config_t | null = null;\n private workerprocedurecall: WorkerProcedureCall | null = null;\n private networkprocedurecall: NetworkProcedureCall | null = null;\n private api_key_authorizer: ApiKeyAuthorizer | null = null;\n private worker_event_listener_id: number | null = null;\n private metrics_log_interval_handle: NodeJS.Timeout | null = null;\n\n constructor(params: {\n config_paths: daemon_config_paths_t;\n config_file_loader?: ConfigFileLoader;\n }) {\n this.config_paths = params.config_paths;\n this.config_file_loader = params.config_file_loader ?? new ConfigFileLoader();\n }\n\n async start(): Promise<void> {\n if (this.lifecycle_state === 'running') {\n throw new Error('Daemon is already running.');\n }\n if (this.lifecycle_state === 'starting') {\n throw new Error('Daemon startup is already in progress.');\n }\n if (this.lifecycle_state === 'stopping') {\n throw new Error('Daemon stop is in progress. Wait for stop to complete.');\n }\n\n this.lifecycle_state = 'starting';\n\n try {\n this.daemon_config = this.config_file_loader.loadDaemonConfig({\n config_paths: this.config_paths\n });\n this.api_key_authorizer = new ApiKeyAuthorizer({\n api_key_entries: this.daemon_config.api_keys_config.api_keys\n });\n\n const constructor_options =\n this.daemon_config.server_config.workerprocedurecall.constructor_options;\n this.workerprocedurecall = constructor_options\n ? new WorkerProcedureCall(constructor_options)\n : new WorkerProcedureCall();\n\n const log_worker_events =\n this.daemon_config.server_config.observability?.log_worker_events ?? true;\n if (log_worker_events) {\n this.worker_event_listener_id = this.workerprocedurecall.onWorkerEvent({\n listener: (worker_event): void => {\n this.logWorkerEvent({\n worker_event\n });\n }\n });\n }\n\n await this.workerprocedurecall.startWorkers({\n count: this.daemon_config.server_config.workerprocedurecall.count,\n ...(this.daemon_config.server_config.workerprocedurecall.start_options ?? {})\n });\n\n const networkprocedurecall_workerprocedurecall =\n this.workerprocedurecall as unknown as networkprocedurecall_workerprocedurecall_t;\n\n this.networkprocedurecall = new NetworkProcedureCall({\n workerprocedurecall: networkprocedurecall_workerprocedurecall\n });\n\n const auth_callback = this.createAuthCallback();\n const start_params = this.buildServerStartParams({\n auth_callback\n });\n await this.networkprocedurecall.start(start_params);\n\n this.startMetricsLogging();\n this.lifecycle_state = 'running';\n\n this.logMessage({\n severity: 'info',\n message:\n `Daemon started: ${start_params.information.server_name} ` +\n `on ${start_params.network.bind_addr}:${start_params.network.tcp_listen_port}`\n });\n } catch (error) {\n this.lifecycle_state = 'stopped';\n await this.stopBestEffort();\n throw error;\n }\n }\n\n async stop(): Promise<void> {\n if (this.lifecycle_state === 'stopped') {\n return;\n }\n if (this.lifecycle_state === 'stopping') {\n return;\n }\n\n this.lifecycle_state = 'stopping';\n await this.stopBestEffort();\n this.lifecycle_state = 'stopped';\n\n this.logMessage({\n severity: 'info',\n message: 'Daemon stopped.'\n });\n }\n\n getRuntimeSnapshot(): daemon_runtime_snapshot_t {\n return {\n lifecycle_state: this.lifecycle_state,\n server_name: this.daemon_config?.server_config.information.server_name,\n bind_addr: this.daemon_config?.server_config.network.bind_addr,\n tcp_listen_port: this.daemon_config?.server_config.network.tcp_listen_port,\n worker_health_states: this.workerprocedurecall?.getWorkerHealthStates(),\n abuse_metrics: this.networkprocedurecall?.getAbuseMetrics()\n };\n }\n\n private createAuthCallback(): networkprocedurecall_auth_callback_t {\n return async (auth_callback_params) => {\n const authorizer = this.requireApiKeyAuthorizer();\n return await authorizer.authenticate({\n auth_callback_params\n });\n };\n }\n\n private buildServerStartParams(params: {\n auth_callback: networkprocedurecall_auth_callback_t;\n }): networkprocedurecall_server_start_params_t {\n const daemon_config = this.requireDaemonConfig();\n const abuse_controls_from_file = daemon_config.server_config.abuse_controls;\n const enable_console_log = daemon_config.server_config.observability?.enable_console_log;\n\n let merged_abuse_controls = abuse_controls_from_file;\n if (enable_console_log !== undefined) {\n merged_abuse_controls = {\n ...(abuse_controls_from_file ?? {}),\n observability: {\n ...(abuse_controls_from_file?.observability ?? {}),\n enable_console_log\n }\n };\n }\n\n return {\n information: {\n server_name: daemon_config.server_config.information.server_name\n },\n network: {\n bind_addr: daemon_config.server_config.network.bind_addr,\n tcp_listen_port: daemon_config.server_config.network.tcp_listen_port\n },\n tls_mtls: {\n ...daemon_config.server_config.tls_mtls\n },\n abuse_controls: merged_abuse_controls,\n auth_callback: params.auth_callback\n };\n }\n\n private startMetricsLogging(): void {\n this.clearMetricsLoggingInterval();\n\n const daemon_config = this.requireDaemonConfig();\n const metrics_log_interval_ms =\n daemon_config.server_config.observability?.metrics_log_interval_ms;\n if (!metrics_log_interval_ms) {\n return;\n }\n\n this.metrics_log_interval_handle = setInterval(() => {\n if (!this.networkprocedurecall || !this.workerprocedurecall) {\n return;\n }\n\n const abuse_metrics = this.networkprocedurecall.getAbuseMetrics();\n const worker_health_states = this.workerprocedurecall.getWorkerHealthStates();\n\n this.logMessage({\n severity: 'info',\n message:\n `runtime_metrics abuse=${JSON.stringify(abuse_metrics)} ` +\n `worker_health=${JSON.stringify(worker_health_states)}`\n });\n }, metrics_log_interval_ms);\n\n this.metrics_log_interval_handle.unref();\n }\n\n private clearMetricsLoggingInterval(): void {\n if (this.metrics_log_interval_handle) {\n clearInterval(this.metrics_log_interval_handle);\n this.metrics_log_interval_handle = null;\n }\n }\n\n private async stopBestEffort(): Promise<void> {\n this.clearMetricsLoggingInterval();\n\n const stop_errors: unknown[] = [];\n\n if (this.networkprocedurecall) {\n try {\n await this.networkprocedurecall.stop();\n } catch (error) {\n stop_errors.push(error);\n }\n this.networkprocedurecall = null;\n }\n\n if (this.workerprocedurecall && this.worker_event_listener_id !== null) {\n try {\n this.workerprocedurecall.offWorkerEvent({\n listener_id: this.worker_event_listener_id\n });\n } catch (error) {\n stop_errors.push(error);\n }\n this.worker_event_listener_id = null;\n }\n\n if (this.workerprocedurecall) {\n try {\n await this.workerprocedurecall.stopWorkers();\n } catch (error) {\n stop_errors.push(error);\n }\n this.workerprocedurecall = null;\n }\n\n this.api_key_authorizer = null;\n this.daemon_config = null;\n\n if (stop_errors.length > 0) {\n const first_error = stop_errors[0];\n throw first_error;\n }\n }\n\n private requireDaemonConfig(): daemon_runtime_config_t {\n if (!this.daemon_config) {\n throw new Error('Daemon config is not initialized.');\n }\n return this.daemon_config;\n }\n\n private requireApiKeyAuthorizer(): ApiKeyAuthorizer {\n if (!this.api_key_authorizer) {\n throw new Error('ApiKeyAuthorizer is not initialized.');\n }\n return this.api_key_authorizer;\n }\n\n private logWorkerEvent(params: { worker_event: worker_event_t }): void {\n this.logMessage({\n severity: params.worker_event.severity,\n message: `worker_event ${JSON.stringify(params.worker_event)}`\n });\n }\n\n private logMessage(params: { severity: 'info' | 'warn' | 'error'; message: string }): void {\n const output_message = `[${ToIsoTimestamp()}] [${params.severity}] ${params.message}`;\n\n if (params.severity === 'error') {\n console.error(output_message);\n return;\n }\n if (params.severity === 'warn') {\n console.warn(output_message);\n return;\n }\n console.log(output_message);\n }\n}\n","import { NetworkProcedureCallDaemon } from '@src/classes/networkprocedurecalldaemon/NetworkProcedureCallDaemon.class';\n\nimport type { daemon_config_paths_t } from '@src/types/project_types';\n\nexport class DaemonProcess {\n private readonly daemon: NetworkProcedureCallDaemon;\n\n private is_running = false;\n private stop_in_progress = false;\n private stop_resolve: (() => void) | null = null;\n private readonly stop_waiter: Promise<void>;\n\n constructor(params: { config_paths: daemon_config_paths_t }) {\n this.daemon = new NetworkProcedureCallDaemon({\n config_paths: params.config_paths\n });\n this.stop_waiter = new Promise<void>((resolve) => {\n this.stop_resolve = resolve;\n });\n }\n\n async run(): Promise<void> {\n if (this.is_running) {\n throw new Error('DaemonProcess is already running.');\n }\n\n this.is_running = true;\n this.attachProcessHandlers();\n\n try {\n await this.daemon.start();\n } catch (error) {\n this.detachProcessHandlers();\n this.is_running = false;\n throw error;\n }\n\n await this.stop_waiter;\n }\n\n private attachProcessHandlers(): void {\n process.on('SIGINT', this.handleSignal);\n process.on('SIGTERM', this.handleSignal);\n process.on('uncaughtException', this.handleUncaughtException);\n process.on('unhandledRejection', this.handleUnhandledRejection);\n }\n\n private detachProcessHandlers(): void {\n process.off('SIGINT', this.handleSignal);\n process.off('SIGTERM', this.handleSignal);\n process.off('uncaughtException', this.handleUncaughtException);\n process.off('unhandledRejection', this.handleUnhandledRejection);\n }\n\n private readonly handleSignal = (signal: NodeJS.Signals): void => {\n void this.requestStop({\n reason: `Received ${signal}.`\n });\n };\n\n private readonly handleUncaughtException = (error: Error): void => {\n console.error(`Uncaught exception: ${error.stack ?? error.message}`);\n process.exitCode = 1;\n void this.requestStop({\n reason: 'Stopping daemon after uncaught exception.'\n });\n };\n\n private readonly handleUnhandledRejection = (error: unknown): void => {\n const error_message = error instanceof Error ? error.stack ?? error.message : String(error);\n console.error(`Unhandled rejection: ${error_message}`);\n process.exitCode = 1;\n void this.requestStop({\n reason: 'Stopping daemon after unhandled rejection.'\n });\n };\n\n private async requestStop(params: { reason: string }): Promise<void> {\n if (!this.is_running || this.stop_in_progress) {\n return;\n }\n\n this.stop_in_progress = true;\n console.log(params.reason);\n\n try {\n await this.daemon.stop();\n } catch (error) {\n const error_message = error instanceof Error ? error.stack ?? error.message : String(error);\n console.error(`Error while stopping daemon: ${error_message}`);\n process.exitCode = 1;\n } finally {\n this.detachProcessHandlers();\n this.is_running = false;\n this.stop_in_progress = false;\n if (this.stop_resolve) {\n this.stop_resolve();\n }\n }\n }\n}\n","import { execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport type {\n daemon_generated_tls_material_t,\n daemon_tls_generation_options_t\n} from '@src/types/project_types';\n\ntype tls_file_map_t = {\n ca_key_path: string;\n ca_cert_path: string;\n server_key_path: string;\n server_csr_path: string;\n server_cert_path: string;\n server_ext_path: string;\n client_key_path: string;\n client_csr_path: string;\n client_cert_path: string;\n client_ext_path: string;\n ca_serial_path: string;\n};\n\nfunction EnsurePositiveInteger(params: { value: number; label: string }): void {\n if (!Number.isInteger(params.value) || params.value <= 0) {\n throw new Error(`${params.label} must be a positive integer.`);\n }\n}\n\nfunction MakeDirRecursive(params: { dir_path: string }): void {\n fs.mkdirSync(params.dir_path, { recursive: true });\n}\n\nfunction WriteTextFile(params: { file_path: string; content: string }): void {\n fs.writeFileSync(params.file_path, params.content, 'utf8');\n}\n\nexport class TlsMaterialGenerator {\n generateTlsMaterial(params: {\n tls_generation_options: daemon_tls_generation_options_t;\n }): daemon_generated_tls_material_t {\n const options = params.tls_generation_options;\n EnsurePositiveInteger({\n value: options.valid_days,\n label: 'tls_generation.valid_days'\n });\n\n const output_dir = path.resolve(process.cwd(), options.output_dir);\n MakeDirRecursive({\n dir_path: output_dir\n });\n\n this.assertOpenSslAvailable();\n\n const tls_files = this.buildTlsFileMap({\n output_dir\n });\n this.assertTargetFilesAreWritable({\n tls_files,\n overwrite: options.overwrite\n });\n\n try {\n this.generateCa({\n tls_files,\n valid_days: options.valid_days,\n ca_common_name: options.ca_common_name\n });\n this.generateServerCertificate({\n tls_files,\n valid_days: options.valid_days,\n server_common_name: options.server_common_name\n });\n this.generateClientCertificate({\n tls_files,\n valid_days: options.valid_days,\n client_common_name: options.client_common_name\n });\n this.cleanupIntermediateFiles({\n tls_files\n });\n } catch (error) {\n throw new Error(\n `Failed to generate TLS material in \"${output_dir}\": ${this.getErrorMessage({\n error\n })}`\n );\n }\n\n return {\n output_dir,\n ca_key_path: tls_files.ca_key_path,\n ca_cert_path: tls_files.ca_cert_path,\n server_key_path: tls_files.server_key_path,\n server_cert_path: tls_files.server_cert_path,\n client_key_path: tls_files.client_key_path,\n client_cert_path: tls_files.client_cert_path\n };\n }\n\n private assertOpenSslAvailable(): void {\n try {\n execFileSync('openssl', ['version'], { stdio: 'ignore' });\n } catch {\n throw new Error(\n 'openssl command is required but was not found. Please install openssl and retry.'\n );\n }\n }\n\n private buildTlsFileMap(params: { output_dir: string }): tls_file_map_t {\n return {\n ca_key_path: path.join(params.output_dir, 'ca.key.pem'),\n ca_cert_path: path.join(params.output_dir, 'ca.cert.pem'),\n server_key_path: path.join(params.output_dir, 'server.key.pem'),\n server_csr_path: path.join(params.output_dir, 'server.csr.pem'),\n server_cert_path: path.join(params.output_dir, 'server.cert.pem'),\n server_ext_path: path.join(params.output_dir, 'server.ext'),\n client_key_path: path.join(params.output_dir, 'client.key.pem'),\n client_csr_path: path.join(params.output_dir, 'client.csr.pem'),\n client_cert_path: path.join(params.output_dir, 'client.cert.pem'),\n client_ext_path: path.join(params.output_dir, 'client.ext'),\n ca_serial_path: path.join(params.output_dir, 'ca.cert.srl')\n };\n }\n\n private assertTargetFilesAreWritable(params: {\n tls_files: tls_file_map_t;\n overwrite: boolean;\n }): void {\n const target_paths: string[] = [\n params.tls_files.ca_key_path,\n params.tls_files.ca_cert_path,\n params.tls_files.server_key_path,\n params.tls_files.server_cert_path,\n params.tls_files.client_key_path,\n params.tls_files.client_cert_path\n ];\n\n if (!params.overwrite) {\n for (const target_path of target_paths) {\n if (fs.existsSync(target_path)) {\n throw new Error(\n `Refusing to overwrite existing file \"${target_path}\". Use --tls-overwrite to replace existing material.`\n );\n }\n }\n return;\n }\n\n for (const target_path of target_paths) {\n fs.rmSync(target_path, { force: true });\n }\n fs.rmSync(params.tls_files.ca_serial_path, { force: true });\n }\n\n private generateCa(params: {\n tls_files: tls_file_map_t;\n valid_days: number;\n ca_common_name: string;\n }): void {\n this.runOpenSslCommand({\n args: [\n 'req',\n '-x509',\n '-newkey',\n 'rsa:4096',\n '-sha256',\n '-nodes',\n '-keyout',\n params.tls_files.ca_key_path,\n '-out',\n params.tls_files.ca_cert_path,\n '-days',\n String(params.valid_days),\n '-subj',\n `/CN=${params.ca_common_name}`\n ]\n });\n }\n\n private generateServerCertificate(params: {\n tls_files: tls_file_map_t;\n valid_days: number;\n server_common_name: string;\n }): void {\n WriteTextFile({\n file_path: params.tls_files.server_ext_path,\n content: [\n 'subjectAltName=DNS:localhost,IP:127.0.0.1',\n 'extendedKeyUsage=serverAuth',\n 'keyUsage=digitalSignature,keyEncipherment'\n ].join('\\n')\n });\n\n this.runOpenSslCommand({\n args: [\n 'req',\n '-new',\n '-newkey',\n 'rsa:4096',\n '-sha256',\n '-nodes',\n '-keyout',\n params.tls_files.server_key_path,\n '-out',\n params.tls_files.server_csr_path,\n '-subj',\n `/CN=${params.server_common_name}`\n ]\n });\n\n this.runOpenSslCommand({\n args: [\n 'x509',\n '-req',\n '-in',\n params.tls_files.server_csr_path,\n '-CA',\n params.tls_files.ca_cert_path,\n '-CAkey',\n params.tls_files.ca_key_path,\n '-CAserial',\n params.tls_files.ca_serial_path,\n '-CAcreateserial',\n '-out',\n params.tls_files.server_cert_path,\n '-days',\n String(params.valid_days),\n '-sha256',\n '-extfile',\n params.tls_files.server_ext_path\n ]\n });\n }\n\n private generateClientCertificate(params: {\n tls_files: tls_file_map_t;\n valid_days: number;\n client_common_name: string;\n }): void {\n const client_uri = `spiffe://nodenetproccalld/${params.client_common_name\n .replace(/[^a-zA-Z0-9_.-]/g, '_')\n .toLowerCase()}`;\n\n WriteTextFile({\n file_path: params.tls_files.client_ext_path,\n content: [\n 'extendedKeyUsage=clientAuth',\n 'keyUsage=digitalSignature,keyEncipherment',\n `subjectAltName=URI:${client_uri}`\n ].join('\\n')\n });\n\n this.runOpenSslCommand({\n args: [\n 'req',\n '-new',\n '-newkey',\n 'rsa:4096',\n '-sha256',\n '-nodes',\n '-keyout',\n params.tls_files.client_key_path,\n '-out',\n params.tls_files.client_csr_path,\n '-subj',\n `/CN=${params.client_common_name}`\n ]\n });\n\n this.runOpenSslCommand({\n args: [\n 'x509',\n '-req',\n '-in',\n params.tls_files.client_csr_path,\n '-CA',\n params.tls_files.ca_cert_path,\n '-CAkey',\n params.tls_files.ca_key_path,\n '-CAserial',\n params.tls_files.ca_serial_path,\n '-out',\n params.tls_files.client_cert_path,\n '-days',\n String(params.valid_days),\n '-sha256',\n '-extfile',\n params.tls_files.client_ext_path\n ]\n });\n }\n\n private cleanupIntermediateFiles(params: { tls_files: tls_file_map_t }): void {\n fs.rmSync(params.tls_files.server_csr_path, { force: true });\n fs.rmSync(params.tls_files.client_csr_path, { force: true });\n fs.rmSync(params.tls_files.server_ext_path, { force: true });\n fs.rmSync(params.tls_files.client_ext_path, { force: true });\n fs.rmSync(params.tls_files.ca_serial_path, { force: true });\n }\n\n private runOpenSslCommand(params: { args: string[] }): void {\n execFileSync('openssl', params.args, { stdio: 'ignore' });\n }\n\n private getErrorMessage(params: { error: unknown }): string {\n if (params.error instanceof Error) {\n return params.error.message;\n }\n return String(params.error);\n }\n}\n","import { ApiKeyAuthorizer } from '@src/classes/apikeyauthorizer/ApiKeyAuthorizer.class';\nimport { ConfigFileLoader } from '@src/classes/configfileloader/ConfigFileLoader.class';\nimport { ConfigValidator } from '@src/classes/configvalidator/ConfigValidator.class';\nimport { DaemonCli } from '@src/classes/daemoncli/DaemonCli.class';\nimport { DaemonProcess } from '@src/classes/daemonprocess/DaemonProcess.class';\nimport { NetworkProcedureCallDaemon } from '@src/classes/networkprocedurecalldaemon/NetworkProcedureCallDaemon.class';\nimport { TlsMaterialGenerator } from '@src/classes/tlsmaterialgenerator/TlsMaterialGenerator.class';\n\nexport {\n ApiKeyAuthorizer,\n ConfigFileLoader,\n ConfigValidator,\n DaemonCli,\n DaemonProcess,\n NetworkProcedureCallDaemon,\n TlsMaterialGenerator\n};\n\nexport type {\n daemon_api_key_entry_t,\n daemon_api_keys_config_file_t,\n daemon_api_key_identity_constraints_t,\n daemon_cli_options_t,\n daemon_config_paths_t,\n daemon_observability_config_t,\n daemon_generated_tls_material_t,\n daemon_runtime_api_key_entry_t,\n daemon_runtime_config_t,\n daemon_server_config_file_t,\n daemon_tls_generation_options_t,\n daemon_tls_file_config_t,\n daemon_worker_config_t\n} from '@src/types/project_types';\n\nasync function StartDaemonFromCli(): Promise<void> {\n const daemon_cli = new DaemonCli();\n const cli_options = daemon_cli.parseOptions();\n if (cli_options.help) {\n daemon_cli.printHelp();\n return;\n }\n\n if (cli_options.tls_generation.enabled) {\n const tls_material_generator = new TlsMaterialGenerator();\n const generated_tls_material = tls_material_generator.generateTlsMaterial({\n tls_generation_options: cli_options.tls_generation\n });\n\n console.log('TLS material generated successfully.');\n console.log(`Output directory: ${generated_tls_material.output_dir}`);\n console.log(`CA cert: ${generated_tls_material.ca_cert_path}`);\n console.log(`Server cert: ${generated_tls_material.server_cert_path}`);\n console.log(`Server key: ${generated_tls_material.server_key_path}`);\n console.log(`Client cert: ${generated_tls_material.client_cert_path}`);\n console.log(`Client key: ${generated_tls_material.client_key_path}`);\n console.log('');\n console.log(\n 'If using default config, set tls_mtls key_file/cert_file/ca_file in config/server.config.json5 to these files.'\n );\n return;\n }\n\n const daemon_process = new DaemonProcess({\n config_paths: {\n server_config_path: cli_options.server_config_path,\n api_keys_config_path: cli_options.api_keys_config_path\n }\n });\n\n await daemon_process.run();\n}\n\nif (require.main === module) {\n void StartDaemonFromCli().catch((error) => {\n const error_message = error instanceof Error ? error.stack ?? error.message : String(error);\n console.error(`Daemon startup failed: ${error_message}`);\n process.exitCode = 1;\n });\n}\n"],"mappings":"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","names":["crypto","SafeTimingEqual","params","left_buffer","Buffer","from","left_value","right_buffer","right_value","length","left_digest","crypto","createHash","update","digest","right_digest","timingSafeEqual","ApiKeyAuthorizer","api_key_entries","authenticate","api_key_entry","enabled","api_key","auth_callback_params","matchesIdentityConstraints","state","privileges","constraints","identity_constraints","remote_address_regex","test","remote_address","tls_peer_subject_regex","matchOptionalValue","regex","value","tls_peer_subject","tls_peer_san_regex","tls_peer_san","tls_peer_fingerprint256_regex","tls_peer_fingerprint256","tls_peer_serial_number_regex","tls_peer_serial_number","fs","path","c","parse","key","token","buffer","stringify","stack","value","z","privilege_name_list","tls_min_version_list","worker_runtime_options_schema","z","object","call_timeout_ms","number","int","positive","optional","control_timeout_ms","start_timeout_ms","stop_timeout_ms","restart_on_failure","boolean","max_restarts_per_worker","nonnegative","max_pending_calls_per_worker","restart_base_delay_ms","restart_max_delay_ms","restart_jitter_ms","strict","rate_limiter_schema","enabled","tokens_per_interval","interval_ms","burst_tokens","disconnect_on_limit","abuse_controls_schema","connection_controls","max_concurrent_sockets","max_concurrent_handshakes","max_unauthenticated_sessions","global_connection_window_ms","global_max_new_connections_per_window","per_ip_max_new_connections_per_window","tls_handshake_timeout_ms","auth_message_timeout_ms","max_pre_auth_frame_bytes","max_post_auth_frame_bytes","auth_controls","pending_auth_window_ms","max_pending_auth_attempts_per_ip_per_window","failed_auth_window_ms","max_failed_auth_per_ip_per_window","max_failed_auth_per_api_key_per_window","block_duration_ms","enable_blocklist","request_controls","max_in_flight_requests_per_connection","per_connection","per_api_key","per_ip","observability","enable_console_log","daemon_server_config_schema","information","server_name","string","min","network","bind_addr","tcp_listen_port","max","tls_mtls","key_file","cert_file","ca_file","crl_file","min_version","enum","cipher_suites","handshake_timeout_ms","request_timeout_ms","max_frame_bytes","workerprocedurecall","count","constructor_options","start_options","abuse_controls","log_worker_events","metrics_log_interval_ms","daemon_api_key_config_schema","api_keys","array","key_id","api_key","privileges","identity_constraints","remote_address_regex","tls_peer_subject_regex","tls_peer_san_regex","tls_peer_fingerprint256_regex","tls_peer_serial_number_regex","BuildZodErrorMessage","params","message_lines","error","issues","map","issue","issue_path","path","length","join","message","prefix","CompileRegex","RegExp","source","error_message","Error","String","label","ConfigValidator","validateServerConfig","parse_result","safeParse","server_config_raw","success","data","validateApiKeysConfig","api_keys_config_raw","assertUniqueApiKeys","assertUniqueKeyIds","toRuntimeApiKeysConfig","api_keys_config","api_key_entry","compiled_identity_constraints","compileIdentityConstraints","runtime_entry","constraints","undefined","compiled_constraints","seen_api_keys","Set","has","add","seen_key_ids","ReadUtf8File","params","fs","readFileSync","file_path","error","error_message","Error","message","String","ResolvePath","path","isAbsolute","resolve","base_dir","ParseJson5","JSON5","parse","content","source_path","ConfigFileLoader","config_validator","ConfigValidator","loadDaemonConfig","server_config_path","config_paths","process","cwd","api_keys_config_path","server_config_raw","readJson5File","api_keys_config_raw","server_config","validateServerConfig","api_keys_config","validateApiKeysConfig","runtime_tls_mtls","resolveTlsMaterial","tls_file_config","tls_mtls","config_file_dir","dirname","runtime_api_keys","toRuntimeApiKeysConfig","api_keys","file_content","key_pem","readPemFile","pem_path","key_file","label","cert_pem","cert_file","ca_pem","ca_file","crl_pem","crl_file","undefined","min_version","cipher_suites","handshake_timeout_ms","request_timeout_ms","max_frame_bytes","absolute_file_path","pem_content","trim","includes","default_server_config_path","default_api_keys_config_path","default_tls_output_dir","default_ca_common_name","default_server_common_name","default_client_common_name","default_tls_valid_days","DaemonCli","parseOptions","options","server_config_path","api_keys_config_path","help","tls_generation","enabled","output_dir","overwrite","ca_common_name","server_common_name","client_common_name","valid_days","argv","process","slice","index","length","token","next_value","Error","Number","isInteger","printHelp","help_text","join","console","log","NetworkProcedureCall","WorkerProcedureCall","ToIsoTimestamp","Date","toISOString","NetworkProcedureCallDaemon","params","config_paths","config_file_loader","lifecycle_state","daemon_config","workerprocedurecall","networkprocedurecall","api_key_authorizer","worker_event_listener_id","metrics_log_interval_handle","ConfigFileLoader","start","Error","loadDaemonConfig","ApiKeyAuthorizer","api_key_entries","api_keys_config","api_keys","constructor_options","server_config","WorkerProcedureCall","log_worker_events","observability","onWorkerEvent","listener","worker_event","logWorkerEvent","startWorkers","count","start_options","networkprocedurecall_workerprocedurecall","NetworkProcedureCall","auth_callback","createAuthCallback","start_params","buildServerStartParams","startMetricsLogging","logMessage","severity","message","information","server_name","network","bind_addr","tcp_listen_port","error","stopBestEffort","stop","getRuntimeSnapshot","worker_health_states","getWorkerHealthStates","abuse_metrics","getAbuseMetrics","auth_callback_params","authorizer","requireApiKeyAuthorizer","authenticate","requireDaemonConfig","abuse_controls_from_file","abuse_controls","enable_console_log","merged_abuse_controls","undefined","tls_mtls","clearMetricsLoggingInterval","metrics_log_interval_ms","setInterval","JSON","stringify","unref","clearInterval","stop_errors","push","offWorkerEvent","listener_id","stopWorkers","length","first_error","output_message","console","warn","log","DaemonProcess","params","daemon","is_running","stop_in_progress","stop_resolve","stop_waiter","handleSignal","signal","requestStop","reason","handleUncaughtException","error","console","stack","message","process","exitCode","handleUnhandledRejection","error_message","Error","String","NetworkProcedureCallDaemon","config_paths","Promise","resolve","run","attachProcessHandlers","start","detachProcessHandlers","on","off","log","stop","execFileSync","fs","path","EnsurePositiveInteger","params","Number","isInteger","value","Error","label","MakeDirRecursive","fs","mkdirSync","dir_path","recursive","WriteTextFile","writeFileSync","file_path","content","TlsMaterialGenerator","generateTlsMaterial","options","tls_generation_options","valid_days","output_dir","path","resolve","process","cwd","assertOpenSslAvailable","tls_files","buildTlsFileMap","assertTargetFilesAreWritable","overwrite","generateCa","ca_common_name","generateServerCertificate","server_common_name","generateClientCertificate","client_common_name","cleanupIntermediateFiles","error","getErrorMessage","ca_key_path","ca_cert_path","server_key_path","server_cert_path","client_key_path","client_cert_path","execFileSync","stdio","join","server_csr_path","server_ext_path","client_csr_path","client_ext_path","ca_serial_path","target_paths","target_path","existsSync","rmSync","force","runOpenSslCommand","args","String","client_uri","replace","toLowerCase","message","StartDaemonFromCli","daemon_cli","DaemonCli","cli_options","parseOptions","help","printHelp","tls_generation","enabled","tls_material_generator","TlsMaterialGenerator","generated_tls_material","generateTlsMaterial","tls_generation_options","console","log","output_dir","ca_cert_path","server_cert_path","server_key_path","client_cert_path","client_key_path","daemon_process","DaemonProcess","config_paths","server_config_path","api_keys_config_path","run","require","main","module","catch","error","error_message","Error","stack","message","String","process","exitCode"]}
package/package.json ADDED
@@ -0,0 +1,74 @@
1
+ {
2
+ "name": "@opsimathically/nodenetproccalld",
3
+ "version": "0.0.1",
4
+ "description": "Standalone TypeScript daemon that wraps @opsimathically/networkprocedurecall capabilities.",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "nodenetproccalld": "dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist",
13
+ "config/*.json5",
14
+ "README.md",
15
+ "LICENSE.txt"
16
+ ],
17
+ "scripts": {
18
+ "build": "npx ts-to-zod --all && tsup",
19
+ "typecheck": "tsc --noEmit",
20
+ "test": "node --require ts-node/register --require tsconfig-paths/register --test test/**/*.test.ts",
21
+ "start": "node dist/index.js",
22
+ "start:daemon": "ts-node --project tsconfig.json src/index.ts",
23
+ "ts-to-zod": "npx ts-to-zod --all",
24
+ "docs": "typedoc"
25
+ },
26
+ "keywords": [
27
+ "procedure",
28
+ "call",
29
+ "network",
30
+ "encrypted",
31
+ "dynamic"
32
+ ],
33
+ "homepage": "https://github.com/opsimathically/nodenetproccalld",
34
+ "devDependencies": {
35
+ "@types/better-sqlite3": "^7.6.13",
36
+ "@types/node": "^22.19.1",
37
+ "@types/node-forge": "^1.3.11",
38
+ "@types/wtfnode": "^0.7.3",
39
+ "esbuild": "^0.25.0",
40
+ "eslint": "^9.20.1",
41
+ "globals": "^15.14.0",
42
+ "prettier": "^3.5.0",
43
+ "ts-node": "^10.9.2",
44
+ "tsconfig-paths": "^4.2.0",
45
+ "tsup": "^8.5.1",
46
+ "typedoc": "^0.28.1",
47
+ "typedoc-plugin-markdown": "^4.6.0",
48
+ "typescript": "^5.7.3",
49
+ "typescript-eslint": "^8.24.0",
50
+ "wtfnode": "^0.10.0"
51
+ },
52
+ "author": "Jason Medeiros",
53
+ "license": "SEE LICENSE IN LICENSE.txt",
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "git+https://github.com/opsimathically/nodenetproccalld.git"
57
+ },
58
+ "publishConfig": {
59
+ "access": "public"
60
+ },
61
+ "dependencies": {
62
+ "@opsimathically/networkprocedurecall": "^0.0.1",
63
+ "@opsimathically/workerprocedurecall": "^0.0.2",
64
+ "@swc/core": "^1.11.24",
65
+ "@types/command-line-args": "^5.2.3",
66
+ "@types/command-line-usage": "^5.0.4",
67
+ "command-line-args": "^6.0.1",
68
+ "command-line-usage": "^7.0.3",
69
+ "sharp": "^0.34.1",
70
+ "source-map-support": "^0.5.21",
71
+ "ts-to-zod": "^5.1.0",
72
+ "zod": "^4.3.5"
73
+ }
74
+ }