@dgac/nmb2b-client
Version:
EUROCONTROL Network Manager B2B SOAP client
1 lines • 49.6 kB
Source Map (JSON)
{"version":3,"sources":["../../src/Flow/index.ts","../../src/constants.ts","../../src/security.ts","../../src/utils/debug.ts","../../src/utils/transformers/types.ts","../../src/utils/timeFormats.ts","../../src/utils/transformers/serializer.ts","../../src/utils/transformers/index.ts","../../src/utils/NMB2BError.ts","../../src/utils/internals.ts","../../src/utils/instrumentation/withLog.ts","../../src/utils/instrumentation/index.ts","../../src/Flow/queryHotspots.ts","../../src/Flow/queryRegulations.ts","../../src/Flow/queryTrafficCountsByAirspace.ts","../../src/Flow/queryTrafficCountsByTrafficVolume.ts","../../src/Flow/retrieveCapacityPlan.ts","../../src/Flow/retrieveOTMVPlan.ts","../../src/Flow/retrieveRunwayConfigurationPlan.ts","../../src/Flow/retrieveSectorConfigurationPlan.ts","../../src/Flow/updateCapacityPlan.ts","../../src/Flow/updateOTMVPlan.ts"],"sourcesContent":["import { createClient, type Client as SoapClient } from 'soap';\nimport type { Config } from '../config';\nimport { getWSDLPath } from '../constants';\nimport { prepareSecurity } from '../security';\nimport { deserializer as customDeserializer } from '../utils/transformers';\n\nconst getWSDL = ({ flavour, XSD_PATH }: Pick<Config, 'flavour' | 'XSD_PATH'>) =>\n getWSDLPath({ service: 'FlowServices', flavour, XSD_PATH });\n\nexport type FlowClient = SoapClient;\n\nfunction createFlowServices(config: Config): Promise<FlowClient> {\n const WSDL = getWSDL(config);\n const security = prepareSecurity(config);\n return new Promise((resolve, reject) => {\n try {\n createClient(WSDL, { customDeserializer }, (err, client) => {\n if (err) {\n reject(\n err instanceof Error\n ? err\n : new Error('Unknown error', { cause: err }),\n );\n return;\n }\n client.setSecurity(security);\n\n resolve(client);\n });\n } catch (err) {\n // TODO: Implement a proper debug log message output\n console.log(err);\n reject(\n err instanceof Error ? err : new Error('Unknown error', { cause: err }),\n );\n return;\n }\n });\n}\n\nimport type { BaseServiceInterface } from '../Common/ServiceInterface';\nimport type { Resolver as QueryHotspots } from './queryHotspots';\nimport queryHotspots from './queryHotspots';\nimport type { Resolver as QueryRegulations } from './queryRegulations';\nimport queryRegulations from './queryRegulations';\nimport type { Resolver as QueryTrafficCountsByAirspace } from './queryTrafficCountsByAirspace';\nimport queryTrafficCountsByAirspace from './queryTrafficCountsByAirspace';\nimport type { Resolver as QueryTrafficCountsByTrafficVolume } from './queryTrafficCountsByTrafficVolume';\nimport queryTrafficCountsByTrafficVolume from './queryTrafficCountsByTrafficVolume';\nimport type { Resolver as RetrieveCapacityPlan } from './retrieveCapacityPlan';\nimport retrieveCapacityPlan from './retrieveCapacityPlan';\nimport type { Resolver as RetrieveOTMVPlan } from './retrieveOTMVPlan';\nimport retrieveOTMVPlan from './retrieveOTMVPlan';\nimport type { Resolver as RetrieveRunwayConfigurationPlan } from './retrieveRunwayConfigurationPlan';\nimport retrieveRunwayConfigurationPlan from './retrieveRunwayConfigurationPlan';\nimport type { Resolver as RetrieveSectorConfigurationPlan } from './retrieveSectorConfigurationPlan';\nimport retrieveSectorConfigurationPlan from './retrieveSectorConfigurationPlan';\nimport type { Resolver as UpdateCapacityPlan } from './updateCapacityPlan';\nimport updateCapacityPlan from './updateCapacityPlan';\nimport type { Resolver as UpdateOTMVPlan } from './updateOTMVPlan';\nimport updateOTMVPlan from './updateOTMVPlan';\n\nexport interface FlowService extends BaseServiceInterface {\n retrieveSectorConfigurationPlan: RetrieveSectorConfigurationPlan;\n queryTrafficCountsByAirspace: QueryTrafficCountsByAirspace;\n queryRegulations: QueryRegulations;\n queryHotspots: QueryHotspots;\n queryTrafficCountsByTrafficVolume: QueryTrafficCountsByTrafficVolume;\n retrieveOTMVPlan: RetrieveOTMVPlan;\n updateOTMVPlan: UpdateOTMVPlan;\n retrieveCapacityPlan: RetrieveCapacityPlan;\n updateCapacityPlan: UpdateCapacityPlan;\n retrieveRunwayConfigurationPlan: RetrieveRunwayConfigurationPlan;\n}\n\nexport function getFlowClient(config: Config): Promise<FlowService> {\n return createFlowServices(config).then((client) => ({\n __soapClient: client,\n config,\n retrieveSectorConfigurationPlan: retrieveSectorConfigurationPlan(client),\n queryTrafficCountsByAirspace: queryTrafficCountsByAirspace(client),\n queryRegulations: queryRegulations(client),\n queryHotspots: queryHotspots(client),\n queryTrafficCountsByTrafficVolume:\n queryTrafficCountsByTrafficVolume(client),\n retrieveOTMVPlan: retrieveOTMVPlan(client),\n updateOTMVPlan: updateOTMVPlan(client),\n retrieveCapacityPlan: retrieveCapacityPlan(client),\n updateCapacityPlan: updateCapacityPlan(client),\n retrieveRunwayConfigurationPlan: retrieveRunwayConfigurationPlan(client),\n }));\n}\n","import path from 'path';\nexport type B2BFlavour = 'OPS' | 'PREOPS';\n\nexport const B2B_VERSION = '27.0.0';\nexport const B2BFlavours = ['OPS', 'PREOPS'];\n\nexport const getWSDLPath = ({\n service,\n flavour,\n XSD_PATH,\n}: {\n service: string;\n flavour: B2BFlavour;\n XSD_PATH: string;\n}): string =>\n path.join(\n XSD_PATH,\n `${B2B_VERSION}/${service}_${flavour}_${B2B_VERSION}.wsdl`,\n );\n","import invariant from 'invariant';\nimport d from './utils/debug';\nconst debug = d('security');\nimport type { Config } from './config';\nimport type { ISecurity } from 'soap';\nimport {\n ClientSSLSecurity,\n ClientSSLSecurityPFX,\n BasicAuthSecurity,\n} from 'soap';\nimport fs from 'fs';\n\ninterface PfxSecurity {\n pfx: Buffer;\n passphrase: string;\n}\n\ninterface PemSecurity {\n cert: Buffer;\n key: Buffer;\n passphrase?: string;\n}\n\ninterface ApiGwSecurity {\n apiKeyId: string;\n apiSecretKey: string;\n}\n\nexport type Security = PfxSecurity | PemSecurity | ApiGwSecurity;\n\nexport function isValidSecurity(obj: unknown): obj is Security {\n invariant(!!obj && typeof obj === 'object', 'Must be an object');\n\n if ('apiKeyId' in obj) {\n invariant(\n !!obj.apiKeyId &&\n typeof obj.apiKeyId === 'string' &&\n obj.apiKeyId.length > 0,\n 'security.apiKeyId must be a string with a length > 0',\n );\n\n invariant(\n 'apiSecretKey' in obj &&\n typeof obj.apiSecretKey === 'string' &&\n obj.apiSecretKey.length > 0,\n 'security.apiSecretKey must be defined when using security.apiKeyId',\n );\n\n return true;\n }\n\n invariant(\n ('pfx' in obj && Buffer.isBuffer(obj.pfx)) ||\n ('cert' in obj && Buffer.isBuffer(obj.cert)),\n 'security.pfx or security.cert must be buffers',\n );\n\n if ('cert' in obj && obj.cert) {\n invariant(\n 'key' in obj && obj.key && Buffer.isBuffer(obj.key),\n 'security.key must be a buffer if security.pem is defined',\n );\n }\n\n return true;\n}\n\nexport function prepareSecurity(config: Config): ISecurity {\n const { security } = config;\n\n if ('apiKeyId' in security) {\n const { apiKeyId, apiSecretKey } = security;\n debug('Using ApiGateway security');\n return new BasicAuthSecurity(apiKeyId, apiSecretKey);\n } else if ('pfx' in security) {\n const { pfx, passphrase } = security;\n debug('Using PFX certificates');\n return new ClientSSLSecurityPFX(pfx, passphrase);\n } else if ('cert' in security) {\n debug('Using PEM certificates');\n const { key, cert, passphrase } = security;\n return new ClientSSLSecurity(\n key,\n cert,\n undefined,\n passphrase ? { passphrase } : null,\n );\n }\n\n throw new Error('Invalid security object');\n}\n\nlet envSecurity: Security | undefined;\n\n/**\n * Create a security objet from environment variables\n *\n * Will cache data for future use.\n *\n * @returns Security configuration\n */\nexport function fromEnv(): Security {\n if (envSecurity) {\n return envSecurity;\n }\n\n const { B2B_CERT, B2B_API_KEY_ID, B2B_API_SECRET_KEY } = process.env;\n\n if (!B2B_CERT && !B2B_API_KEY_ID) {\n throw new Error(\n 'Please define a B2B_CERT or a B2B_API_KEY_ID environment variable',\n );\n }\n\n if (B2B_API_KEY_ID) {\n if (!B2B_API_SECRET_KEY) {\n throw new Error(\n `When using B2B_API_KEY_ID, a B2B_API_SECRET_KEY must be defined`,\n );\n }\n\n return {\n apiKeyId: B2B_API_KEY_ID,\n apiSecretKey: B2B_API_SECRET_KEY,\n };\n }\n\n if (!B2B_CERT) {\n throw new Error('Should never happen');\n }\n\n if (!fs.existsSync(B2B_CERT)) {\n throw new Error(`${B2B_CERT} is not a valid certificate file`);\n }\n\n const pfxOrPem = fs.readFileSync(B2B_CERT);\n\n if (!process.env.B2B_CERT_FORMAT || process.env.B2B_CERT_FORMAT === 'pfx') {\n envSecurity = {\n pfx: pfxOrPem,\n passphrase: process.env.B2B_CERT_PASSPHRASE ?? '',\n };\n\n return envSecurity;\n } else if (process.env.B2B_CERT_FORMAT === 'pem') {\n if (!process.env.B2B_CERT_KEY || !fs.existsSync(process.env.B2B_CERT_KEY)) {\n throw new Error(\n 'Please define a valid B2B_CERT_KEY environment variable',\n );\n }\n\n envSecurity = {\n cert: pfxOrPem,\n key: fs.readFileSync(process.env.B2B_CERT_KEY),\n };\n\n if (process.env.B2B_CERT_PASSPHRASE) {\n envSecurity = {\n ...envSecurity,\n passphrase: process.env.B2B_CERT_PASSPHRASE,\n };\n return envSecurity;\n }\n\n return envSecurity;\n }\n\n throw new Error('Unsupported B2B_CERT_FORMAT, must be pfx or pem');\n}\n\n/**\n * Convenience function to clear the cached security objet\n */\nexport function clearCache(): void {\n envSecurity = undefined;\n}\n","import d from 'debug';\nconst PREFIX = '@dgac/nmb2b-client';\nconst debug = d(PREFIX);\n\nfunction log(ns?: string) {\n if (!ns) {\n return debug;\n }\n\n return debug.extend(ns);\n}\n\nexport default log;\n","import { UTCDate } from '@date-fns/utc';\nimport { format } from 'date-fns';\nimport * as timeFormats from '../timeFormats';\n\nconst outputBase = {\n integer: (text: string) => {\n return parseInt(text, 10);\n },\n /**\n *\n * Parse a NMB2B date/datetime.\n *\n * All datetimes are assumed to be UTC.\n *\n * Per NM B2B documentation, we only need to support these formats:\n * - DateTimeMinute: YYYY-MM-DD hh:mm\n * - DateTimeSecond: YYYY-MM-DD hh:mm:ss\n * - DateYearMonthDay: YYYY-MM-DD\n *\n * All dates are\n * @param text NM B2B Date string\n * @returns Parsed Date instance\n */\n date: (text: string) => {\n // eslint-disable-next-line prefer-const\n let [date, time] = text.split(' ');\n\n if (!time) {\n return new Date(text);\n }\n\n if (time.length === 5) {\n time += ':00';\n }\n\n return new Date(`${date}T${time}Z`);\n },\n};\n\ninterface SerDe {\n [key: string]: {\n input: null | ((input: any, ctx?: any) => any);\n output: null | ((input: any, ctx?: any) => any);\n };\n}\n\nexport const types = {\n FlightLevel_DataType: {\n input: null,\n output: outputBase.integer,\n },\n DurationHourMinute: {\n input: (d: number): string => {\n const totalMinutes = Math.floor(d / 60);\n const hours = Math.floor(totalMinutes / 60);\n const minutes = totalMinutes % 60;\n return `${hours}`.padStart(2, '0') + `${minutes}`.padStart(2, '0');\n },\n output: (s: string): number => {\n const hours = parseInt(s.slice(0, 2), 10);\n const minutes = parseInt(s.slice(2), 10);\n\n return 60 * (60 * hours + minutes);\n },\n },\n DurationHourMinuteSecond: {\n input: (d: number): string => {\n const totalMinutes = Math.floor(d / 60);\n const hours = Math.floor(totalMinutes / 60);\n const minutes = totalMinutes % 60;\n return (\n `${hours}`.padStart(2, '0') +\n `${minutes}`.padStart(2, '0') +\n `${d % 60}`.padStart(2, '0')\n );\n },\n output: (s: string): number => {\n const hours = parseInt(s.slice(0, 2), 10);\n const minutes = parseInt(s.slice(2, 4), 10);\n const seconds = parseInt(s.slice(4), 10);\n\n return 3600 * hours + 60 * minutes + seconds;\n },\n },\n DurationMinute: {\n input: (d: number): number => Math.floor(d / 60),\n output: (d: number): number => 60 * d,\n },\n CountsValue: {\n input: null,\n output: outputBase.integer,\n },\n DateTimeMinute: {\n input: (d: Date): string => format(new UTCDate(d), timeFormats.timeFormat),\n output: outputBase.date,\n },\n DateYearMonthDay: {\n input: (d: Date): string => format(new UTCDate(d), timeFormats.dateFormat),\n output: outputBase.date,\n },\n DateTimeSecond: {\n input: (d: Date): string =>\n format(new UTCDate(d), timeFormats.timeFormatWithSeconds),\n output: outputBase.date,\n },\n DistanceNM: {\n input: null,\n output: outputBase.integer,\n },\n DistanceM: {\n input: null,\n output: outputBase.integer,\n },\n Bearing: {\n input: null,\n output: outputBase.integer,\n },\n OTMVThreshold: {\n input: null,\n output: outputBase.integer,\n },\n} satisfies SerDe;\n","export const timeFormat = 'yyyy-MM-dd HH:mm';\nexport const dateFormat = 'yyyy-MM-dd';\nexport const timeFormatWithSeconds = timeFormat + ':ss';\n","/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport { types } from './types';\nimport { piped, identity, evolve, map } from 'remeda';\n\nexport function prepareSerializer<T>(schema: any): (input: T) => T {\n const transformer = prepareTransformer(schema);\n return piped(\n reorderKeys(schema),\n transformer ? evolve(transformer) : identity,\n // (obj) => {\n // console.log(JSON.stringify(obj, null, 2));\n // return obj;\n // },\n ) as any as (input: T) => T;\n}\n\nfunction reduceXSDType(str: string): string {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return str.split('|')[0]!;\n}\n\ninterface Schema {\n [k: string]: string | Schema;\n}\n\ninterface Transformer {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n [k: string]: (input: any) => any | Transformer;\n}\n\nfunction prepareTransformer(schema: Schema): null | Transformer {\n return Object.keys(schema).reduce((prev: null | Transformer, curr) => {\n let key = curr;\n let isArray = false;\n\n /**\n * If the current key marks an array, we need to map over the values instead of just trying\n * to transform the value.\n *\n * We also need to assign the correct key to the transformer.\n */\n if (curr.endsWith('[]')) {\n key = curr.slice(0, -2);\n isArray = true;\n }\n\n if (typeof schema[curr] === 'string') {\n const type = reduceXSDType(schema[curr]);\n\n if ((types as any)[type]?.input) {\n const transformer = (types as any)[type].input;\n return { ...prev, [key]: isArray ? map(transformer) : transformer };\n }\n } else if (typeof schema[curr] === 'object') {\n const subItem = prepareTransformer(schema[curr]);\n if (subItem) {\n return {\n ...prev,\n [key]: isArray ? map(evolve(subItem)) : subItem,\n };\n }\n }\n\n return prev;\n }, null);\n}\n\nexport function reorderKeys<T extends Schema, O extends { [key: string]: any }>(\n schema: T,\n): (obj: O) => O {\n return (obj: O): O => {\n // console.log(JSON.stringify(schema, null, 2));\n // console.log(JSON.stringify(obj, null, 2));\n\n // Loop through schema, pull property from Object\n return Object.keys(schema).reduce<any>((prev, curr) => {\n const lookupKey: string = curr.replace(/\\[\\]$/, '');\n const isArrayExpected: boolean = curr.endsWith('[]');\n\n if (!(lookupKey in obj)) {\n return prev;\n }\n\n const currSchema = schema[curr];\n\n if (typeof currSchema === 'string') {\n prev[lookupKey] = obj[lookupKey];\n return prev;\n }\n\n if (typeof currSchema === 'object') {\n if (\n Object.keys(currSchema).filter(\n (k) => k !== 'targetNSAlias' && k !== 'targetNamespace',\n ).length\n ) {\n prev[lookupKey] =\n isArrayExpected && obj[lookupKey] && Array.isArray(obj[lookupKey])\n ? obj[lookupKey].map(reorderKeys(currSchema))\n : reorderKeys(currSchema)(obj[lookupKey]);\n return prev;\n }\n\n prev[lookupKey] = obj[lookupKey];\n return prev;\n }\n\n return prev;\n }, {});\n };\n}\n","import { types } from './types';\nexport { prepareSerializer } from './serializer';\n\ntype T = typeof types;\n\ntype WithOutput = {\n [K in keyof T]: T[K]['output'] extends null ? never : K;\n}[keyof T];\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nexport const deserializer: { [K in WithOutput]: T[K]['output'] } & Record<\n string,\n any\n> = Object.entries(types).reduce<any>((prev, [key, { output }]) => {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (output) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n prev[key] = output;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return prev;\n}, {});\n","import type { B2B_Error, Reply, ReplyStatus } from '../Common/types';\n\n/**\n * Represents an error response received from NM B2B\n */\nexport class NMB2BError extends Error {\n /**\n * UTC time at which the request was received at NM.\n *\n * Always set when an XML reply is returned, regardless of the possible exceptions that occurred within the request processing.\n */\n declare requestReceptionTime?: Date;\n\n /**\n * Identification of the request. This id is not unique across time: the request is uniquely identified via two attributes: `requestReceptionTime` and `requestId`.\n *\n * Always set when an XML reply is returned, regardless of the possible exceptions that occurred within the request processing.\n */\n declare requestId?: string;\n\n /**\n * UTC time at which NM has sent the reply.\n *\n * Always set when an XML reply is returned, regardless of the possible exceptions that occurred within the request processing.\n */\n declare sendTime?: Date;\n\n /**\n * Status code explaining the error.\n */\n declare status: Exclude<ReplyStatus, 'OK'>;\n\n /**\n * Contains the input validation errors, if any.\n * Set to null if the request successfully passed input validations (i.e. status is not set to `INVALID_INPUT`).\n */\n declare inputValidationErrors?: Array<B2B_Error>;\n\n /**\n * Contains the output validation errors, if any.\n * Set to null if the request successfully passed output validations (i.e. status is not set to `INVALID_OUTPUT`).\n */\n declare outputValidationErrors?: Array<B2B_Error>;\n\n /**\n * Warnings, if any\n */\n declare warnings?: Array<B2B_Error>;\n\n /**\n * Describes an error caused by a SLA violation.\n *\n */\n declare slaError?: B2B_Error;\n\n declare reason?: string;\n\n constructor({\n reply,\n }: {\n reply: Reply & { status: Exclude<ReplyStatus, 'OK'> };\n }) {\n super();\n\n if (reply.requestId) {\n this.requestId = reply.requestId;\n }\n\n if (reply.requestReceptionTime) {\n this.requestReceptionTime = reply.requestReceptionTime;\n }\n\n if (reply.sendTime) {\n this.sendTime = reply.sendTime;\n }\n\n if (reply.inputValidationErrors) {\n this.inputValidationErrors = reply.inputValidationErrors;\n }\n\n if (reply.warnings) {\n this.warnings = reply.warnings;\n }\n\n if (reply.slaError) {\n this.slaError = reply.slaError;\n }\n\n if (reply.reason) {\n this.reason = reply.reason;\n }\n this.status = reply.status;\n this.message = this.status;\n\n if (this.reason) {\n this.message = `${this.message}: ${this.reason}`;\n }\n }\n}\n","import type { Reply, ReplyStatus, Request } from '../Common/types';\nimport { NMB2BError } from './NMB2BError';\n\nexport function injectSendTime<\n T extends Record<string, any> | null | undefined,\n>(values: T): Request {\n const sendTime = new Date();\n\n if (!values || typeof values !== 'object') {\n return { sendTime };\n }\n\n return { sendTime, ...values };\n}\n\ntype Cb = (...args: any[]) => void;\n\nexport function responseStatusHandler(resolve: Cb, reject: Cb) {\n return (err: unknown, reply: Reply) => {\n if (err) {\n reject(err);\n return;\n }\n\n if (reply.status === 'OK') {\n resolve(reply);\n return;\n } else {\n const err = new NMB2BError({\n reply: reply as Reply & { status: Exclude<ReplyStatus, 'OK'> },\n });\n reject(err);\n return;\n }\n };\n}\n","import type { Instrumentor } from './';\nimport d from '../debug';\n\nexport function withLog<Input, Output>(\n namespace: string,\n): Instrumentor<Input, Output> {\n const debug = d(namespace);\n\n return (fn) => (values, options) => {\n if (values) {\n debug('Called with input %o', values);\n } else {\n debug('Called');\n }\n\n return fn(values, options).then(\n (res) => {\n debug('Succeded');\n return res;\n },\n (err) => {\n debug('Failed');\n return Promise.reject(\n err instanceof Error\n ? err\n : new Error('Unknown error', { cause: err }),\n );\n },\n );\n };\n}\n","// import withLog from './withLog';\nimport type { SoapOptions } from '../../soap';\nimport { withLog } from './withLog';\nimport { pipe } from 'remeda';\n\ntype SoapQuery<Input, Output> = (\n input?: Input,\n options?: SoapOptions,\n) => Promise<Output>;\n\nexport type Instrumentor<Input, Output> = (\n fn: SoapQuery<Input, Output>,\n) => SoapQuery<Input, Output>;\n\nexport function instrument<Input, Output>({\n service,\n query,\n}: {\n service: string;\n query: string;\n}) {\n return (fn: SoapQuery<Input, Output>) =>\n pipe(fn, withLog<Input, Output>(`${service}:${query}`));\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type { HotspotListRequest, HotspotListReply } from './types';\nexport type { HotspotListRequest, HotspotListReply } from './types';\n\ntype Values = HotspotListRequest;\ntype Result = HotspotListReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareQueryHotspots(client: FlowClient): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TacticalUpdatesService.TacticalUpdatesPort.queryHotspots\n .input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'queryHotspots',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.queryHotspots(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type { RegulationListRequest, RegulationListReply } from './types';\nexport type { RegulationListRequest, RegulationListReply } from './types';\n\ntype Values = RegulationListRequest;\ntype Result = RegulationListReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareQueryRegulations(client: FlowClient): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().MeasuresService.MeasuresPort.queryRegulations.input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'queryRegulations',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.queryRegulations(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type {\n TrafficCountsByAirspaceRequest,\n TrafficCountsByAirspaceReply,\n} from './types';\n\nexport type {\n TrafficCountsByAirspaceRequest,\n TrafficCountsByAirspaceReply,\n} from './types';\n\ntype Values = TrafficCountsByAirspaceRequest;\ntype Result = TrafficCountsByAirspaceReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareQueryTrafficCountsByAirspace(\n client: FlowClient,\n): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TrafficCountsService.TrafficCountsPort\n .queryTrafficCountsByAirspace.input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'queryTrafficCountsByAirspace',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.queryTrafficCountsByAirspace(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type {\n TrafficCountsByTrafficVolumeRequest,\n TrafficCountsByTrafficVolumeReply,\n} from './types';\n\nexport type {\n TrafficCountsByTrafficVolumeRequest,\n TrafficCountsByTrafficVolumeReply,\n} from './types';\n\ntype Values = TrafficCountsByTrafficVolumeRequest;\ntype Result = TrafficCountsByTrafficVolumeReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareQueryTrafficCountsByTrafficVolume(\n client: FlowClient,\n): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TrafficCountsService.TrafficCountsPort\n .queryTrafficCountsByTrafficVolume.input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'queryTrafficCountsByTrafficVolume',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.queryTrafficCountsByTrafficVolume(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type {\n CapacityPlanRetrievalRequest,\n CapacityPlanRetrievalReply,\n} from './types';\n\nexport type {\n CapacityPlanRetrievalRequest,\n CapacityPlanRetrievalReply,\n} from './types';\n\nexport type Values = CapacityPlanRetrievalRequest;\nexport type Result = CapacityPlanRetrievalReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareRetrieveCapacityPlan(\n client: FlowClient,\n): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TacticalUpdatesService.TacticalUpdatesPort\n .retrieveCapacityPlan.input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'retrieveCapacityPlan',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.retrieveCapacityPlan(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type { OTMVPlanRetrievalRequest, OTMVPlanRetrievalReply } from './types';\nexport type { OTMVPlanRetrievalRequest, OTMVPlanRetrievalReply } from './types';\n\nexport type Values = OTMVPlanRetrievalRequest;\nexport type Result = OTMVPlanRetrievalReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareRetrieveOTMVPlan(client: FlowClient): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TacticalUpdatesService.TacticalUpdatesPort\n .retrieveOTMVPlan.input;\n\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'retrieveOTMVPlan',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.retrieveOTMVPlan(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type {\n RunwayConfigurationPlanRetrievalRequest,\n RunwayConfigurationPlanRetrievalReply,\n} from './types';\n\nexport type {\n RunwayConfigurationPlanRetrievalRequest,\n RunwayConfigurationPlanRetrievalReply,\n} from './types';\n\nexport type Values = RunwayConfigurationPlanRetrievalRequest;\nexport type Result = RunwayConfigurationPlanRetrievalReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareRetrieveRunwayConfigurationPlan(\n client: FlowClient,\n): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TacticalUpdatesService.TacticalUpdatesPort\n .retrieveRunwayConfigurationPlan.input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'retrieveRunwayConfigurationPlan',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.retrieveRunwayConfigurationPlan(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type {\n SectorConfigurationPlanRetrievalRequest,\n SectorConfigurationPlanRetrievalReply,\n KnownConfigurations,\n SectorConfigurationId,\n} from './types';\n\nexport type {\n SectorConfigurationPlanRetrievalRequest,\n SectorConfigurationPlanRetrievalReply,\n} from './types';\n\nimport type { AirspaceId } from '../Airspace/types';\nimport type { SafeB2BDeserializedResponse } from '..';\n\ntype Values = SectorConfigurationPlanRetrievalRequest;\ntype Result = SectorConfigurationPlanRetrievalReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareRetrieveSectorConfigurationPlan(\n client: FlowClient,\n): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TacticalUpdatesService.TacticalUpdatesPort\n .retrieveSectorConfigurationPlan.input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'retrieveSectorConfigurationPlan',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.retrieveSectorConfigurationPlan(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n\nexport function knownConfigurationsToMap(\n knownConfigurations:\n | undefined\n | null\n | SafeB2BDeserializedResponse<KnownConfigurations>\n | KnownConfigurations,\n): Map<SectorConfigurationId, AirspaceId[]> {\n if (!knownConfigurations?.item) {\n return new Map();\n }\n\n const { item } = knownConfigurations;\n\n const map: Map<SectorConfigurationId, AirspaceId[]> = new Map();\n item.forEach(({ key, value }) => {\n if (!value?.item) {\n return;\n }\n\n map.set(key, value.item);\n });\n\n return map;\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type {\n CapacityPlanUpdateRequest,\n CapacityPlanUpdateReply,\n} from './types';\n\nexport type {\n CapacityPlanUpdateRequest,\n CapacityPlanUpdateReply,\n} from './types';\n\nexport type Values = CapacityPlanUpdateRequest;\nexport type Result = CapacityPlanUpdateReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareUpdateCapacityPlan(\n client: FlowClient,\n): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TacticalUpdatesService.TacticalUpdatesPort\n .updateCapacityPlan.input;\n\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'updateCapacityPlan',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.updateCapacityPlan(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n","import type { FlowClient } from './';\nimport { injectSendTime, responseStatusHandler } from '../utils/internals';\nimport type { SoapOptions } from '../soap';\nimport { prepareSerializer } from '../utils/transformers';\nimport { instrument } from '../utils/instrumentation';\n\nimport type { OTMVPlanUpdateRequest, OTMVPlanUpdateReply } from './types';\n\nexport type { OTMVPlanUpdateRequest, OTMVPlanUpdateReply } from './types';\n\nexport type Values = OTMVPlanUpdateRequest;\nexport type Result = OTMVPlanUpdateReply;\n\nexport type Resolver = (\n values?: Values,\n options?: SoapOptions,\n) => Promise<Result>;\n\nexport default function prepareUpdateOTMVPlan(client: FlowClient): Resolver {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const schema =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n client.describe().TacticalUpdatesService.TacticalUpdatesPort.updateOTMVPlan\n .input;\n const serializer = prepareSerializer(schema);\n\n return instrument<Values, Result>({\n service: 'Flow',\n query: 'updateOTMVPlan',\n })(\n (values, options) =>\n new Promise((resolve, reject) => {\n console.log(\n JSON.stringify(serializer(injectSendTime(values)), null, 2),\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n client.updateOTMVPlan(\n serializer(injectSendTime(values)),\n options,\n responseStatusHandler(resolve, reject),\n );\n }),\n );\n}\n"],"mappings":"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","names":["import_soap","path","d","debug","debug","d","err","debug","import_remeda"]}