UNPKG

faa-swim-consumer

Version:

FAA SWIM Queue Consumer for SFDPS and other subscription queues

1 lines 8.53 kB
{"version":3,"sources":["../src/models.ts","../src/consumer.ts"],"sourcesContent":["import solace, { MessageConsumerAcknowledgeMode } from 'solclientjs'\n\nexport interface SolClientOptions {\n /**\n * Profile Version to use for the Solclient Factory\n */\n profile?: solace.SolclientFactoryProfiles\n\n /**\n * Log level (default = LogLevel.TRACE)\n */\n logLevel?: solace.LogLevel\n\n /**\n * Logger to use (default = console.log)\n */\n logger?: solace.LogImpl\n}\n\nexport interface SessionOptions {\n /**\n * JMS Connection URL with port (ex. tcps://ems2.swim.faa.gov:55443)\n */\n url: string\n\n /**\n * Message VPN assigned to the subscription (ex. FDPS)\n */\n vpnName: string\n\n /**\n * Connection username\n */\n userName: string\n\n /**\n * Connection password\n */\n password: string\n\n /**\n * Additional session properties to pass to the Session constructor\n */\n extraSessionProperties?: Partial<solace.SessionProperties>\n}\n\nexport interface MessageConsumerOptions {\n /**\n * Queue Name (ex. user.example.com.FDPS.824bd0a3-3aec-40eb-b68f-dc406fa2d01a.OUT)\n */\n queueName: string\n\n /**\n * Acknowledge mode to use for the MessageConsumer\n */\n acknowledgeMode?: MessageConsumerAcknowledgeMode\n\n /**\n * Disable auto acknowledge for the MessageConsumer\n */\n disableAutoAcknowledge?: boolean\n\n /**\n * Hook to send raw XML messages to that are received by the consumer\n *\n * @param newMessage raw xml string of message\n * @returns void\n */\n onNewRawMessage?: (newMessage: string | null) => void\n\n /**\n * Additional message consumer properties to pass to the MessageConsumer constructor\n */\n extraConsumerProperties?: Partial<solace.MessageConsumerProperties>\n\n /**\n * Queue properties to pass to the MessageConsumer's Queue\n */\n queueProperties?: Partial<solace.QueueProperties>\n}\n\n/**\n * Initialization options for the SWIMConsumer\n */\nexport interface SWIMConsumerOptions {\n /**\n * Optional parameters to pass to the SolClient Factory to initialize the class\n */\n solClientOptions?: SolClientOptions\n\n /**\n * Options for connecting to a session (url, username, password, etc)\n */\n sessionOptions: SessionOptions\n\n /**\n * Options for the Message Consumer (queue name, mode, etc)\n */\n messageConsumerOptions: MessageConsumerOptions\n}\n\n/**\n * Takes an incoming `SWIMConsumerOptions` object and applies any defaults if needed.\n * Intended for internal use by the `SWIMConsumer` class. If you are just setting up\n * the configuration parameters, just use `SWIMConsumerOptions`.\n */\nexport class SWIMConsumerOptionsFactory implements SWIMConsumerOptions {\n solClientOptions?: SolClientOptions = {\n profile: solace.SolclientFactoryProfiles.version10,\n logLevel: solace.LogLevel.TRACE\n }\n\n sessionOptions: SessionOptions\n messageConsumerOptions: MessageConsumerOptions\n\n constructor (options: SWIMConsumerOptions) {\n if (options.solClientOptions) {\n this.solClientOptions = {\n profile: options.solClientOptions.profile\n ? options.solClientOptions.profile\n : solace.SolclientFactoryProfiles.version10,\n logLevel: options.solClientOptions.logLevel\n ? options.solClientOptions.logLevel\n : solace.LogLevel.TRACE,\n logger: options.solClientOptions.logger\n ? options.solClientOptions.logger\n : undefined\n }\n }\n this.sessionOptions = options.sessionOptions\n this.messageConsumerOptions = options.messageConsumerOptions\n }\n}\n\nexport {\n MessageConsumerAcknowledgeMode\n}\n","import solace from 'solclientjs'\n\nimport {\n SWIMConsumerOptions,\n SWIMConsumerOptionsFactory\n} from '@/models'\n\n/**\n * SWIM Consumer class\n */\nexport class SWIMConsumer {\n private options: SWIMConsumerOptionsFactory\n session: solace.Session\n consumer: solace.MessageConsumer\n\n constructor (options: SWIMConsumerOptions) {\n this.options = new SWIMConsumerOptionsFactory(options)\n\n const factoryOptions = new solace.SolclientFactoryProperties({\n profile: this.options.solClientOptions?.profile,\n logLevel: this.options.solClientOptions?.logLevel,\n logger: this.options.solClientOptions?.logger\n })\n solace.SolclientFactory.init(factoryOptions)\n\n const extraSessionProperties = this.options.sessionOptions.extraSessionProperties\n ? this.options.sessionOptions.extraSessionProperties\n : {}\n\n // Setup the session for the consumer\n this.session = solace.SolclientFactory.createSession({\n authenticationScheme: solace.AuthenticationScheme.BASIC,\n url: this.options.sessionOptions.url,\n vpnName: this.options.sessionOptions.vpnName,\n userName: this.options.sessionOptions.userName,\n password: this.options.sessionOptions.password,\n ...(extraSessionProperties as solace.SessionProperties)\n })\n\n const extraConsumerProperties = this.options.messageConsumerOptions.extraConsumerProperties\n ? this.options.messageConsumerOptions.extraConsumerProperties\n : {}\n\n // Setup the MessageConsumer for the active session\n this.consumer = this.session.createMessageConsumer({\n acknowledgeMode: this.options.messageConsumerOptions.acknowledgeMode,\n queueDescriptor: new solace.QueueDescriptor({\n type: solace.QueueType.QUEUE,\n name: this.options.messageConsumerOptions.queueName,\n ...(extraConsumerProperties as solace.MessageConsumerProperties)\n }),\n queueProperties: this.options.messageConsumerOptions.queueProperties\n })\n\n // Setup a listener on the MESSAGE event if `onNewRawMessage` was supplied\n if (this.options.messageConsumerOptions.onNewRawMessage) {\n this.consumer.on(solace.MessageConsumerEventName.MESSAGE, (msg) => {\n this.options.messageConsumerOptions.onNewRawMessage!(msg.getXmlContent())\n\n // If the acknowledge mode is not auto, acknowledge the message\n const isAutoAcknowledge = this.options.messageConsumerOptions.acknowledgeMode === solace.MessageConsumerAcknowledgeMode.AUTO\n if (!this.options.messageConsumerOptions.disableAutoAcknowledge && !isAutoAcknowledge) {\n msg.acknowledge()\n }\n })\n }\n }\n\n /**\n * Shortcut to session.connect() and consumer.connect()\n */\n connect () {\n this.session.connect()\n this.consumer.connect()\n }\n\n /**\n * Shortcut to consumer.disconnect() and session.disconnect()\n */\n disconnect () {\n this.consumer.disconnect()\n this.session.disconnect()\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,OAAO,UAAU,sCAAsC;AA0GhD,IAAM,6BAAN,MAAgE;AAAA,EASrE,YAAa,SAA8B;AAR3C,4BAAsC;AAAA,MACpC,SAAS,OAAO,yBAAyB;AAAA,MACzC,UAAU,OAAO,SAAS;AAAA,IAC5B;AAME,QAAI,QAAQ,kBAAkB;AAC5B,WAAK,mBAAmB;AAAA,QACtB,SAAS,QAAQ,iBAAiB,UAC9B,QAAQ,iBAAiB,UACzB,OAAO,yBAAyB;AAAA,QACpC,UAAU,QAAQ,iBAAiB,WAC/B,QAAQ,iBAAiB,WACzB,OAAO,SAAS;AAAA,QACpB,QAAQ,QAAQ,iBAAiB,SAC7B,QAAQ,iBAAiB,SACzB;AAAA,MACN;AAAA,IACF;AACA,SAAK,iBAAiB,QAAQ;AAC9B,SAAK,yBAAyB,QAAQ;AAAA,EACxC;AACF;;;ACpIA,OAAOA,aAAY;AAUZ,IAAM,eAAN,MAAmB;AAAA,EAKxB,YAAa,SAA8B;AAf7C;AAgBI,SAAK,UAAU,IAAI,2BAA2B,OAAO;AAErD,UAAM,iBAAiB,IAAIC,QAAO,2BAA2B;AAAA,MAC3D,UAAS,UAAK,QAAQ,qBAAb,mBAA+B;AAAA,MACxC,WAAU,UAAK,QAAQ,qBAAb,mBAA+B;AAAA,MACzC,SAAQ,UAAK,QAAQ,qBAAb,mBAA+B;AAAA,IACzC,CAAC;AACD,IAAAA,QAAO,iBAAiB,KAAK,cAAc;AAE3C,UAAM,yBAAyB,KAAK,QAAQ,eAAe,yBACvD,KAAK,QAAQ,eAAe,yBAC5B,CAAC;AAGL,SAAK,UAAUA,QAAO,iBAAiB,cAAc;AAAA,MACnD,sBAAsBA,QAAO,qBAAqB;AAAA,MAClD,KAAK,KAAK,QAAQ,eAAe;AAAA,MACjC,SAAS,KAAK,QAAQ,eAAe;AAAA,MACrC,UAAU,KAAK,QAAQ,eAAe;AAAA,MACtC,UAAU,KAAK,QAAQ,eAAe;AAAA,OAClC,uBACL;AAED,UAAM,0BAA0B,KAAK,QAAQ,uBAAuB,0BAChE,KAAK,QAAQ,uBAAuB,0BACpC,CAAC;AAGL,SAAK,WAAW,KAAK,QAAQ,sBAAsB;AAAA,MACjD,iBAAiB,KAAK,QAAQ,uBAAuB;AAAA,MACrD,iBAAiB,IAAIA,QAAO,gBAAgB;AAAA,QAC1C,MAAMA,QAAO,UAAU;AAAA,QACvB,MAAM,KAAK,QAAQ,uBAAuB;AAAA,SACtC,wBACL;AAAA,MACD,iBAAiB,KAAK,QAAQ,uBAAuB;AAAA,IACvD,CAAC;AAGD,QAAI,KAAK,QAAQ,uBAAuB,iBAAiB;AACvD,WAAK,SAAS,GAAGA,QAAO,yBAAyB,SAAS,CAAC,QAAQ;AACjE,aAAK,QAAQ,uBAAuB,gBAAiB,IAAI,cAAc,CAAC;AAGxE,cAAM,oBAAoB,KAAK,QAAQ,uBAAuB,oBAAoBA,QAAO,+BAA+B;AACxH,YAAI,CAAC,KAAK,QAAQ,uBAAuB,0BAA0B,CAAC,mBAAmB;AACrF,cAAI,YAAY;AAAA,QAClB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAW;AACT,SAAK,QAAQ,QAAQ;AACrB,SAAK,SAAS,QAAQ;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAc;AACZ,SAAK,SAAS,WAAW;AACzB,SAAK,QAAQ,WAAW;AAAA,EAC1B;AACF;","names":["solace","solace"]}