{"version":3,"file":"instance-lookup.js","names":["_dns","_interopRequireDefault","require","_sender","e","__esModule","default","SQL_SERVER_BROWSER_PORT","TIMEOUT","RETRIES","MYSTERY_HEADER_LENGTH","instanceLookup","options","server","TypeError","instanceName","timeout","undefined","retries","lookup","dns","port","signal","throwIfAborted","response","request","Buffer","from","i","timeoutSignal","AbortSignal","sendMessage","any","err","aborted","Error","message","toString","foundPort","parseBrowserResponse","getPort","instances","split","len","length","instance","parts","p","partsLen","name","value","parseInt","toUpperCase"],"sources":["../src/instance-lookup.ts"],"sourcesContent":["import dns from 'dns';\n\nimport { sendMessage } from './sender';\n\nconst SQL_SERVER_BROWSER_PORT = 1434;\nconst TIMEOUT = 2 * 1000;\nconst RETRIES = 3;\n// There are three bytes at the start of the response, whose purpose is unknown.\nconst MYSTERY_HEADER_LENGTH = 3;\n\ntype LookupFunction = (hostname: string, options: dns.LookupAllOptions, callback: (err: NodeJS.ErrnoException | null, addresses: dns.LookupAddress[]) => void) => void;\n\n// Most of the functionality has been determined from from jTDS's MSSqlServerInfo class.\nexport async function instanceLookup(options: { server: string, instanceName: string, timeout?: number, retries?: number, port?: number, lookup?: LookupFunction, signal: AbortSignal }) {\n const server = options.server;\n if (typeof server !== 'string') {\n throw new TypeError('Invalid arguments: \"server\" must be a string');\n }\n\n const instanceName = options.instanceName;\n if (typeof instanceName !== 'string') {\n throw new TypeError('Invalid arguments: \"instanceName\" must be a string');\n }\n\n const timeout = options.timeout === undefined ? TIMEOUT : options.timeout;\n if (typeof timeout !== 'number') {\n throw new TypeError('Invalid arguments: \"timeout\" must be a number');\n }\n\n const retries = options.retries === undefined ? RETRIES : options.retries;\n if (typeof retries !== 'number') {\n throw new TypeError('Invalid arguments: \"retries\" must be a number');\n }\n\n if (options.lookup !== undefined && typeof options.lookup !== 'function') {\n throw new TypeError('Invalid arguments: \"lookup\" must be a function');\n }\n const lookup = options.lookup ?? dns.lookup;\n\n if (options.port !== undefined && typeof options.port !== 'number') {\n throw new TypeError('Invalid arguments: \"port\" must be a number');\n }\n const port = options.port ?? SQL_SERVER_BROWSER_PORT;\n\n const signal = options.signal;\n\n signal.throwIfAborted();\n\n let response;\n\n const request = Buffer.from([0x02]);\n\n for (let i = 0; i <= retries; i++) {\n const timeoutSignal = AbortSignal.timeout(timeout);\n\n try {\n response = await sendMessage(options.server, port, lookup, AbortSignal.any([ signal, timeoutSignal ]), request);\n } catch (err) {\n // If the current attempt timed out, continue with the next\n if (timeoutSignal.aborted) {\n continue;\n }\n\n throw err;\n }\n }\n\n if (!response) {\n throw new Error('Failed to get response from SQL Server Browser on ' + server);\n }\n\n const message = response.toString('ascii', MYSTERY_HEADER_LENGTH);\n const foundPort = parseBrowserResponse(message, instanceName);\n\n if (!foundPort) {\n throw new Error('Port for ' + instanceName + ' not found in ' + options.server);\n }\n\n return foundPort;\n}\n\nexport function parseBrowserResponse(response: string, instanceName: string) {\n let getPort;\n\n const instances = response.split(';;');\n for (let i = 0, len = instances.length; i < len; i++) {\n const instance = instances[i];\n const parts = instance.split(';');\n\n for (let p = 0, partsLen = parts.length; p < partsLen; p += 2) {\n const name = parts[p];\n const value = parts[p + 1];\n\n if (name === 'tcp' && getPort) {\n const port = parseInt(value, 10);\n return port;\n }\n\n if (name === 'InstanceName') {\n if (value.toUpperCase() === instanceName.toUpperCase()) {\n getPort = true;\n } else {\n getPort = false;\n }\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|