{"id":24274753,"url":"https://github.com/qoretechnologies/building-blocks","last_synced_at":"2026-06-08T10:01:59.401Z","repository":{"id":65606692,"uuid":"594859719","full_name":"qoretechnologies/building-blocks","owner":"qoretechnologies","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-24T04:20:48.000Z","size":36388,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-24T06:23:18.241Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qoretechnologies.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-29T21:08:06.000Z","updated_at":"2026-04-24T04:20:52.000Z","dependencies_parsed_at":"2023-10-15T06:12:18.482Z","dependency_job_id":"4ea72a0d-37ac-4012-bc0e-38afc2f06ec9","html_url":"https://github.com/qoretechnologies/building-blocks","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/qoretechnologies/building-blocks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qoretechnologies%2Fbuilding-blocks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qoretechnologies%2Fbuilding-blocks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qoretechnologies%2Fbuilding-blocks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qoretechnologies%2Fbuilding-blocks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qoretechnologies","download_url":"https://codeload.github.com/qoretechnologies/building-blocks/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qoretechnologies%2Fbuilding-blocks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34057158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-15T20:57:06.277Z","updated_at":"2026-06-08T10:01:59.384Z","avatar_url":"https://github.com/qoretechnologies.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Qorus Integration Engine® Building Blocks\n\nThis repository contains building blocks or components for Qorus Integration Engine®\n\nbuilding blocks in any supported language can be used by code in other languages, so just because you are working with a code in Python, you don't have to restrict yourself to Python-based building blocks, Java, Python, and Qore-based building blocks can be mixed in any solution.\n\nBuilding blocks are meant to provide reusable elements to solve technical challenges in a generic way to reduce development effort - ideally to eliminate development and transform the delivery of complex functionality to simply configuration.\n\n**NOTE: Building blocks here require Qorus 5.1.25+ for full functionality**\n\n**NOTE: The building blocks here are made available under the Apache license 2.0:**\n\u003e\n\u003e Copyright 2021 Qore Technologies, s.r.o.\n\u003e\n\u003e Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at\n\u003e\n\u003e     http://www.apache.org/licenses/LICENSE-2.0\n\u003e\n\u003e Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and limitations under the License.\n\nContact Qore Technologies (info@qoretechnologies.com) if you need support for these building blocks.\n\n## Installation\n\nQorus must be installed, and the command-line environment must be set up for Qorus as well; also GNU make should be available in the `PATH`.\n\nAfter cloning the repository, type `make load-bb`\n\n## Building Blocks Index\n\n**NOTE: Some building blocks have dependencies in other building blocks, modules, and/or data types; when deploying\nsingle building blocks, ensure that all dependencies are deployed at the same time.  Keep in mind that modules often\nrequire system option changes in `$OMQ_DIR/etc/options` (ex: `qorus.dataprovider-modules`) which require a Qorus\nrestart to take effect.**\n\n**NOTE: Qorus must be restarted after installing the full building block release or any release with module dependencies\nwhere the `qorus.dataprovider-module` option was updated for the first time in order for system option changes to take\neffect.**\n\n**NOTE: Qorus types must be deployed first in Qorus before they can be used in the IDE in mappers or workflow static\ndata types, etc.**\n\n**NOTE: If step building blocks are subclassed, make sure and either remove the `primary()` or `validation()` method\nor override it and make an explicit call to the parent class method in the child class\n\n**NOTE: Qorus implements a significant quantity of powerful generic functionality in data provider factories; the\n`qorus-api` factory implements Qorus-specific functionality\n(see https://qoretechnologies.com/manual/qorus/current/qorus/finite_state_machines.html#fsm_qorus_api_calls), and Qore\nand modules implement other generic functionality as well.  These APIs can be browsed and used in Qorus flows (Finite\nState Machines) in API call states where documentation for each API call (request - response data provider) is also\ndisplayed.\n\nThe following building blocks are available:\n\n### AI / NLU / ONDEWO Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_OndewoBpiServer](#bbm_ondewobpiserver-building-block)|ONDEWO Business Process Integration server building block with event-based connectors for intent handling\n|[BBM_OndewoIntentHandler](#bbm_ondewointenthandler-building-block)|ONDEWO intent handler helper class\n|[BBM_OndewoNluClient](#bbm_ondewonluclient-building-block)|ONDEWO Natural Language Understanding client class\n|[BBM_OndewoVtsiClient](#bbm_ondewovtsiclient-building-block)|ONDEWO VTSI client class\n\n### Data Provider / Mapper Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_AutoMapper](#bbm_automapper-building-block)|base building block for running a mapper in autonomous mode; includes an input/output connector\n|[BBM_AutoMapperRecord](#bbm_automapperrecord-building-block)|base building block for running a mapper in autonomous mode with request/record-based recovery logic\n|[BBM_AutoMapperRecordStep](#bbm_automapperrecordstep-building-block)|step building block to map record-based data from an output provider to an input provider with config-based error recovery support; runs a mapper in autonomous mode\n|[BBM_AutoMapperRequest](#bbm_automapperrequest-building-block)|base building block for running a mapper in autonomous mode with request/response-based recovery logic\n|[BBM_CsvReadDataProvider](#bbm_csvreaddataprovider-building-block)|base building block for processing CSV data as input; implements an output connector\n|[BBM_DataProviderRecordCreateProcessor](#bbm_dataproviderrecordcreateprocessor-building-block)|building block for a data provider output pipeline processor\n|[BBM_DataProviderSearchRecordIterator](#bbm_dataprovidersearchrecorditerator-building-block)|building block class with a connector returning a record iterator that can be used to populate a pipeline\n|[BBM_ExcelReadDataProvider](#bbm_excelreaddataprovider-building-block)|base building block for processing Excel spreadsheet data as input; implements an output connector\n|[BBM_GenericMapper](#bbm_genericmapper-building-block)|building block for generic data transformation support based on a mapper; includes an input/output connector; use this building block to use a mapper that will **not** run in autonomous mode (for example where input data can be used directly)\n\n### Data Provider / Pipeline Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_GetPipelineData](#bbm_getpipelinedata-building-block)|building block for providing a data pipeline with initial processing data from configuration\n|[BBM_SimpleFilterPipelineData](#bbm_simplefilterpipelinedata-building-block)|building block for filtering records in a data pipeline\n\n### Filesystem Event Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_FsEventBase](#bbm_fseventbase-building-block)|generic class for services for event-driven file actions on the local filesystem\n\n### FTP Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_FtpPollerBase](#bbm_ftppollerbase-building-block)|generic base class for polling for files from an FTP server with a polling connector\n|[BBM_FtpPollerCreateOrder](#bbm_ftppollercreateorder-building-block)|class for polling for files from an FTP server and creating a workflow order from them\n|[BBM_FtpPollerCreateOrderJob](#bbm_ftppollercreateorderjob-building-block)|base class for FTP polling jobs that create workflow orders for files received\n\n### Generic / Utility Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_DataSerialization](#bbm_dataserialization-building-block)|transforms input data into a serialized string, includes an input/output connector\n|[BBM_GetArray](#bbm_getarray-building-block)|returns a list of data based on configuration, meant to be used to provide array input for an array step, provides an input/output connector\n|[BBM_InternalIterator](#bbm_internaliterator-building-block)|allows for iteration of internal data; converts a hash with an internal list into a list of hashes having common top-level data with the interior element repeated\n|[BBM_JavaConfig](#bbm_javaconfig-building-block)|sets Java configuration based on configuration items\n|[BBM_ListCache](#bbm_listcache-building-block)|a simple cache class holding a list of data items with connectors to control the cache\n|[BBM_PauseDataPassthru](#bbm_pausedatapassthru-building-block)|executes a configurable and optionally skippable pause or delay, includes an input/output connector\n|[BBM_RegularExpressions](#bbm_regularexpressions-building-block)|helper building block used by other building blocks for for regular expression configuration item handling\n\n### HTTP Server Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_AwsSnsServiceBase](#bbm_awssnsservicebase-building-block)|Base AWS Simple Notification Service abstract class building block\n|[BBM_AwsSnsServiceEventSource](#bbm_awssnsserviceeventsource-building-block)|AWS Simple Notification Service class building block with an event-based connection\n|[BBM_CorsBase](#bbm_corsbase-building-block)|base class for CORS functionality used by other building blocks\n|[BBM_HttpAuthenticatorBase](#bbm_httpauthenticatorbase-building-block)|base class for HTTP authentication used by other building blocks\n|[BBM_HttpFileHandler](#bbm_httpfilehandler-building-block)|generic building block for serving files from the filesystem via HTTP/S\n|[BBM_HttpServiceGenericBase](#bbm_httpservicegenericbase-building-block)|base class for HTTP handler services; meant as a base class for higher-level HTTP-based server building blocks\n|[BBM_HttpReverseProxyService](#bbm_httpreverseproxyservice-building-block)|a reverse proxy building block supporting 1:1 forwarding of chunked transfer encoding and protocol handlers such as WebSockets\n|[BBM_HttpServiceBase](#bbm_httpservicebase-building-block)|base class for HTTP handler services; can be used directly\n|[BBM_QorusUiExtension](#bbm_qorusuiextension-building-block)|building block for Qorus UI extension server services\n\n### Kafka Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_KafkaConsumer](#bbm_kafkaconsumer-building-block)|**[Kafka](https://kafka.apache.org/)** message consumer building block, includes input/output connectors\n|[BBM_KafkaProducer](#bbm_kafkaproducer-building-block)|**[Kafka](https://kafka.apache.org/)** message producer building block, includes input/output connectors\n\n### MQTT Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_MqttPahoClient](#bbm_mqttpahoclient-building-block)|**[MQTT Paho](https://www.eclipse.org/paho/)** client base building block\n|[BBM_MqttPahoPublisher](#bbm_mqttpahopublisher-building-block)|**[MQTT Paho](https://www.eclipse.org/paho/)** client publisher building block with connectors for publishing MQTT messages\n|[BBM_MqttPahoSubscriber](#bbm_mqttpahosubscriber-building-block)|**[MQTT Paho](https://www.eclipse.org/paho/)** client subscriber building block with an event-based connector for listening to MQTT messages / topics\n\n### REST Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_RestAction](#bbm_restaction-building-block)|generic class for making a REST request, includes input/output connectors\n|[BBM_RestActionStep](#bbm_restactionstep-building-block)|generic step class for making a REST request, includes input/output connectors\n|[BBM_RestActionWithRecovery](#bbm_restactionwithrecovery-building-block)|generic class for making a REST request, includes recovery logic and config as well as input/output connectors\n|[BBM_RestServiceBase](#bbm_restservicebase-building-block)|base class for REST handler services\n\n### Salesforce Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_SalesforceStreamBase](#bbm_salesforcestreambase-building-block)|base class for **Salesforce** streaming API support, provides an event source connector\n|[BBM_SalesforceStreamCreateOrder](#bbm_salesforcestreamcreateorder-building-block)|base class for creating workflow orders based on **Salesforce** events\n\n### SFTP Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_SftpPollerBase](#bbm_sftppollerbase-building-block)|generic base class for polling for files from an SFTP server with a polling connector\n|[BBM_SftpPollerCreateOrder](#bbm_sftppollercreateorder-building-block)|class for polling for files from an SFTP server and creating a workflow order from them\n|[BBM_SftpPollerCreateOrderJob](#bbm_sftppollercreateorderjob-building-block)|base class for SFTP polling jobs that create workflow orders for files received\n\n### SNMP Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_SnmpServiceTrapEventSource](#bbm_snmpservicetrapeventsource-building-block)|SNMP trap event source with an event connector\n\n### WebSocket Server Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_WebSocketServiceBase](#bbm_websocketservicebase-building-block)|base class for WebSocket handler services\n|[BBM_WebSocketServiceEventSource](#bbm_websocketserviceeventsource-building-block)|base class for WebSocket handler services with an event connector\n|[BBM_WebSocketServiceDataEventSource](#bbm_websocketservicedataeventsource-building-block)|base class for WebSocket handler services with an event connector based on serialized event data (JSON or YAML)\n\n### WSGi Server Building Blocks\n\n|Building Block|Description|\n|---|---|\n|[BBM_WsgiHandlerBase](#bbm_wsgihandlerbase-building-block)|WSGi HTTP server handler base building block; serves any Python-based WSGi server service from a Qorus service, also providing the Qorus API to the WSGi server as well as dynamic Java imports\n|[BBM_WsgiServer](#bbm_wsgiserver-building-block)|WSGi HTTP server building block; serves any Python-based WSGi server service from a Qorus service, also providing the Qorus API to the WSGi server as well as dynamic Java imports\n|[BBM_WsgiUiExtension](#bbm_wsgiuiextension-building-block)|Allows for serving a WSGi server as a Qorus UI extension based on configuration\n\n### Building Blocks Replaced By Server functionality\n\nThese building blocks are deprecated as their functionality has been replaced with functionality implemented directly\nin the Qorus server using the `qorus-api` data provider factory.\n\n|Building Block|Description|\n|---|---|\n|[BBM_BindSubworkflow](#bbm_bindsubworkflow-building-block)|binds a subworkflow in a subworkflow step; the subworkflow data is provided as input data, includes input/output connectors; use the `util/workflow/bind-subworkflow` API data provider in the `qorus-api` factory instead\n|[BBM_BindSubworkflowStatic](#bbm_bindsubworkflowstatic-building-block)|binds a subworkflow in a workflow step based on configuration in the building block, includes input/output connectors; use the `util/workflow/bind-subworkflow` API data provider in the `qorus-api` factory instead\n|[BBM_Break](#bbm_break-building-block)|building block that throws an `FSM-BREAK` exception for flow control in FSMs; includes an input connector; use the `util/break` API data provider in the `qorus-api` factory instead\n|[BBM_Continue](#bbm_continue-building-block)|building block that throws an `FSM-CONTINUE` exception for flow control in FSMs; includes an input connector; use the `util/continue` API data provider in the `qorus-api` factory instead\n|[BBM_CreateOrder](#bbm_createorder-building-block)|creates a new workflow order; the workflow order data is provided as input data, includes input/output connectors; use the `workflows/create-order` API data provider in the `qorus-api` factory instead\n|[BBM_CreateOrderStatic](#bbm_createorderstatic-building-block)|creates a new workflow order based on configuration in the building block, includes input/output connectors; use the `workflows/create-order` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRecordCreate](#bbm_dataproviderrecordcreate-building-block)|building block for record-based data providers for creating records, includes an input/output connector; use the `data-provider/create` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRecordCreateBase](#bbm_dataproviderrecordcreatebase-building-block)|base building block for record-based data providers for record creation; use the `data-provider/create` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRecordUpdate](#bbm_dataproviderrecordupdate-building-block)|building block for record-based data providers for updating records, includes an input/output connector; use the `data-provider/update` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRecordUpdateBase](#bbm_dataproviderrecordupdatebase-building-block)|base base class for record-based data providers for creating records; use the `data-provider/update` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRequest](#bbm_dataproviderrequest-building-block)|building block for request-based data providers; the request message body is created from config, includes an input/output connector; use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRequestBase](#bbm_dataproviderrequestbase-building-block)|base class for using the data-provider request API to make requests; use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRequestWithRecovery](#bbm_dataproviderrequestwithrecovery-building-block)|building block for request-based data providers with recovery logic; supports recovery with a single value, includes connectors for using in workflow steps for fault-tolerant operation; use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderRequestWithRecoveryStep](#bbm_dataproviderrequestwithrecoverystep-building-block)|step building block for request-reply data providers with config-based error recovery support; use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderSearch](#bbm_dataprovidersearch-building-block)|performs a search in a record-based data provider and returns the result, includes input/output connectors; use the `data-provider/search` API data provider in the `qorus-api` factory instead\n|[BBM_DataProviderSearchBase](#bbm_dataprovidersearchbase-building-block)|base class for using the data provider search API; use the `data-provider/search` API data provider in the `qorus-api` factory instead\n|[BBM_DeleteFilePath](#bbm_deletefilepath-building-block)|deletes a file based on configuration, includes an input/output connector; includes an input connector; use the `delete` API data provider in the `file` factory instead\n|[BBM_ExecSyncWorkflow](#bbm_execsyncworkflow-building-block)|executes a workflow synchronously; the workflow order data is provided as input data, includes input/output connectors; use the `workflows/exec-sync` API data provider in the `qorus-api` factory instead\n|[BBM_ExecSyncWorkflowStatic](#bbm_execsyncworkflowstatic-building-block)|executes a workflow synchronously based on configuration in the building block, includes input/output connectors; use the `workflows/exec-sync` API data provider in the `qorus-api` factory instead\n|[BBM_GetData](#bbm_getdata-building-block)|returns arbitrary data based on configuration, provides an input/output connector; includes an input connector; use the `util/get-data` API data provider in the `qorus-api` factory instead\n|[BBM_LogMessage](#bbm_logmessage-building-block)|logs a message based on configuration; use the `util/log-message` API data provider in the `qorus-api` factory instead\n|[BBM_OutputData](#bbm_outputdata-building-block)|writes data to output location according to configuration giving the data to write and the output locations, includes an input/output connector; use the `util/write-output` API data provider in the `qorus-api` factory instead\n|[BBM_QorusServiceMethodCaller](#bbm_qorusservicemethodcaller-building-block)|calls a Qorus service method and returns the result, includes an input/output connector; use the `services/call-method` API data provider in the `qorus-api` factory instead\n|[BBM_SmtpEmailSender](#bbm_smtpemailsender-building-block)|building block class with a connector for sending emails; use the `send-email` API data provider in the `smtpclient` factory instead\n|[BBM_ThrowException](#bbm_throwexception-building-block)|building block that throws an exception according to configuration; includes an input connector; use the `util/throw-exception` API data provider in the `qorus-api` factory instead\n|[BBM_UpdateOrderDynamicData](#bbm_updateorderdynamicdata-building-block)|building block that can be used to write data to a workflow order's dynamic data hash, includes an input/output connector; use the `util/write-output` API data provider in the `qorus-api` factory instead\n\n\n## **AbstractSalesforceEventStreamer Building Block**\n\nEvent streaming support for Salesforce.com using the streaming API\n___\n\n## **BBM_AutoMapper Building Block**\n\n## Summary\n\nBase class for running a mapper in autonomous mode, meaning that the input and output data are provided by data providers configured in the mapper.\n\nThis building block is not suitable for mapping input data and returning output data, for that use `BBM_GenericMapper` or a mapper in an FSM, a data pipeline, or in a class connection in an interface.\n\nUse this object's configuration to provide input or search filtering as well as to tune the output data handling.\n\n## Connectors\n\n### Input/Output Connector `runMapper`\n\nThis connector runs the mapper in autonomous mode.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n\n## References\n\nSee `BBM_GenericMapper`\n___\n\n## **BBM_AutoMapperRecord Building Block**\n\n## Summary\n\nBase class for running a mapper with a record-based output data provider in autonomous mode, meaning that the input and output data are provided by data providers configured in the mapper.  This building block also supports recovery logic and a validation connector.\n\nThis building block is not suitable for mapping input data and returning output data, for that use `BBM_GenericMapper` or a mapper in an FSM, a data pipeline, or in a class connection in an interface.\n\nUse this object's configuration to provide input or search filtering as well as to tune the output data handling.\n\n## Connectors\n\n### Input/Output Connector `runMapper`\n\nThis connector runs the mapper in autonomous mode.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n\n### Input/Output Connector `validate`\n\nThis connector is suitable for step validation logic; it returns a string providing the validation status, either `COMPLETE` or `RETRY`, depending if output data was found in the output data provider or not.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n\n## References\n\nSee `BBM_GenericMapper`\n\n___\n\n## **BBM_AutoMapperRecordStep Building Block**\n\n## Summary\n\nStep base class for running a mapper with a record-based output data provider in autonomous mode, meaning that the input and output data are provided by data providers configured in the mapper.\n\nUse this object's configuration to provide input or search filtering as well as to tune the output data handling.\n\n## Connectors\n\nThere are no connectors in this building block, as it is already a step class with the `primary()` and `validation()` methods implemented to execute the auto mapper configuration.\n___\n\n## **BBM_AutoMapperRequest Building Block**\n\n## Summary\n\nBase class for running a mapper with a request/response-based output data provider in autonomous mode, meaning that the input and output data are provided by data providers configured in the mapper.  This building block also supports recovery logic and a validation connector.\n\nThis building block is not suitable for mapping input data and returning output data, for that use `BBM_GenericMapper` or a mapper in an FSM, a data pipeline, or in a class connection in an interface.\n\nUse this object's configuration to provide input or search filtering as well as to tune the output data handling.\n\n## Connectors\n\n### Input/Output Connector `runMapper`\n\nThis connector runs the mapper in autonomous mode.\n\nLocal data for the call to `UserApi::expandTemplatedValue()` is the input argument data for the connector available as `$local:input`.\n\n### Input/Output Connector `validate`\n\nThis connector is suitable for step validation logic; it returns a string providing the validation status, either `COMPLETE` or `RETRY`, depending if output data was found in the output data provider or not.\n\nLocal data for the call to `UserApi::expandTemplatedValue()` is the input argument data for the connector available as `$local:input`.\n\n## References\n\nSee `BBM_GenericMapper`\n___\n\n## **BBM_AwsSnsServiceBase Building Block**\n\n## Summary\n\nBase AWS [Simple Notification Service][Simple Notification Service] handler service abstract base class.\n\nThis class is not meant to be used directly.\n\n## References\n\nSee `BBM_AwsSnsServiceEventSource`\n\n\n___\n\n## **BBM_AwsSnsServiceEventSource Building Block**\n\n## Summary\n\nBase AWS [Simple Notification Service][Simple Notification Service] handler service event source class.\n\n## Connectors\n\n### Input/Output Connector `snsEvent`\n\nProvides SNS event information when it's received by this class.\n\n## References\n\nSee `BBM_AwsSnsServiceBase`\n\n___\n\n## **BBM_BindSubworkflow Building Block**\n\n## Summary\n\nBinds a subworkflow in a subworkflow step.\n\nThis building block uses the input data for binding; for a building block that binds based on configuration, see `BBM_BindSubworkflowStatic`\n\nThis building block is useful only in limited use cases; `BBM_BindSubworkflowStatic` can do everything this building block can do and more; it's recommended to use `BBM_BindSubworkflowStatic` instead.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/workflow/bind-subworkflow` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `bindSubworkflow`\n\nBinds the subworkflow based on the input data; configuration is only used to identify the workflow and to specify output data handling.\n___\n\n## **BBM_BindSubworkflowStatic Building Block**\n\n## Summary\n\nBinds a subworkflow in a subworkflow step based on configuration.\n\nThis building block uses configuration for all binding data; for a building block that binds purely based on input data, see `BBM_BindSubworkflow`\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/workflow/bind-subworkflow` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `bindSubworkflow`\n\nBinds the subworkflow based on configuration.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n___\n\n## **BBM_Break Building Block**\n\n## Summary\n\nBuilding block that throws an `FSM-BREAK` exception to provide a `break` action when executing an FSM.\n\nThere is no configuration\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/break` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input Connector doBreak\n\nThrows an `FSM-BREAK` exception to provide a `break` action when executing an FSM.\n\nInput data is ignored\n\n___\n\n## **BBM_Continue Building Block**\n\n## Summary\n\nBuilding block that throws an `FSM-CONTINUE` exception to provide a `continue` action when executing an FSM.\n\nThere is no configuration\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/continue` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input Connector doContinue\n\nThrows an `FSM-CONTINUE` exception to provide a `continue` action when executing an FSM.\n\nInput data is ignored\n\n___\n\n## **BBM_CorsBase Building Block**\n\n## Summary \n\nBase class for HTTP CORS handlers; there is no configuration and no connectors; this class is a helper class meant to be used by classes providing HTTP handling functionality.\n___\n\n## **BBM_CreateOrder Building Block**\n\n## Summary\n\nBuilding block for creating a workflow order from input data.\n\nThis building block uses the input data for creating the new workflow order; for a building block that binds based on configuration, see `BBM_CreateOrderStatic`\n\nThis building block is useful only in limited use cases; `BBM_CreateOrderStatic` can do everything this building block can do and more; it's recommended to use `BBM_CreateOrderStatic` instead.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `workflows/create-order` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `createOrder`\n\nCreates a new workflow order based on the input data; configuration is only used to identify the workflow and to specify output data handling.\n___\n\n## **BBM_CreateOrderStatic Building Block**\n\n## Summary\n\nBuilding block for creating a workflow order from configuration.\n\nThis building block uses configuration to create the new workflow order; for a building block that binds purely based on input data, see `BBM_CreateOrder`\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `workflows/create-order` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `createOrderStatic`\n\nCreate the workflow order based on configuration.\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n___\n\n## **BBM_CsvReadDataProvider Building Block**\n\n## Summary\n\nProvides a config-based data provider object for data from CSV input data\n\n## Connectors\n\n ### Input/Output Connector `searchRecordsConnector`\n\nCreates a CSV read data provider object and returns the records parsed.\n\nLocal data for the call to `UserApi::expandTemplatedValue()` for all config items is the input  argument data for the connector available as `$local:input`.\n___\n\n## **BBM_DataProviderRecordCreate Building Block**\n\n## Summary\n\nBuilding block for creating records in record-based data providers.\n\nThe record to be created is determined by the value of the config item `dataprovider-create-input`; ex:\n\n```\nname: $static:name\ndescription: $static:description\n```\n\nFor a data provider supporting the `returning` create option (like `DbTableDataProvider`, for example), the output data can return values created implicitly in the record creation action such as column values populated by sequences from a trigger using the `dataprovider-create-options` config item - ex: `returning: customer_id`\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/create` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `DataProvider Record Create`\n\nInserts data from the input argument, or, if there is none, from config item `dataprovider-create-input`\n\n### Input/Output Connector  `DataProvider Record Create From Config`\n\nInserts data solely from config item `dataprovider-create-input`.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n\n### Input/Output Connector `DataProvider Record Validate`\n\nThis connector is suitable for step validation logic; it returns a string providing the validation status, either `COMPLETE` or `RETRY`, depending if output data was found in the output data provider or not.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n___\n\n## **BBM_DataProviderRecordCreateBase Building Block**\n\n## Summary\n\nBase class for building block classes for creating records in record-based data providers.\n\nThis base class has no configuration; see `BBM_DataProviderRecordCreate` for a usable building block with connectors and configuration.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/create` API data provider in the `qorus-api` factory instead\n\n## References\n\nSee `BBM_DataProviderRecordCreate`\n___\n\n## **BBM_DataProviderRecordCreateProcessor Building Block**\n\n## Summary\n\nProvides a data provider record creation processor, suitable for use as an output element in a data pipeline.\n\n## Processor\n\nAccepts input data and writes the output to the configured data provider.\n\nSupports bulk processing; all input records are passed 1:1 as output after processing.\n\nProvides transaction safety; all output in the pipeline will be performed in a single tractionaction, if the data provider supports transaction management.\n\n___\n\n## **BBM_DataProviderRecordUpdate Building Block**\n\n## Summary\n\nBuilding block to make an update in record-based data providers.\n\n## Connectors\n\n### Input/Output Connector `updateDataProviderRecord`\n\nUsed to make an update in a record-based data provider based on input data providing the update hash; if no input data is provided, then the update hash is taken from config item `dataprovider-update-set `.\n\nThe output data is a hash with the single key `count` giving the number of records updated.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/update` API data provider in the `qorus-api` factory instead\n\n### Input/Output Connector `updateDataProviderRecordFromConfig`\n\nUsed to make an update in a record-based data provider based on config item `dataprovider-update-set ` providing the update hash.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n\nThe output data is a hash with the single key `count` giving the number of records updated.\n\n___\n\n## **BBM_DataProviderRecordUpdateBase Building Block**\n\nbuilding block for record-based data providers\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/update` API data provider in the `qorus-api` factory instead\n___\n\n## **BBM_DataProviderRequest Building Block**\n\n## Summary\n\nBuilding block base class for request-reply-based data providers.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `makeDataProviderRequestConnector`\n\nThis connector makes a request using the input data for the request body.\n\n### Input/Output Connector `makeDataProviderRequestFromConfigConnector`\n\nThis connector makes a request using configuration to provide the request body.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n\n## References\n\nSee `BBM_DataProviderRequestWithRecovery`\n___\n\n## **BBM_DataProviderRequestBase Building Block**\n\n## Summary\n\nBase class for using the data-provider request API to make requests; no configuration\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n\n## References\n\nSee `BBM_DataProviderRequest` and `BBM_DataProviderRequestWithRecovery` forbuilding blocks with configuration and connectors based on this base class.\n___\n\n## **BBM_DataProviderRequestWithRecovery Building Block**\n\n## Summary\n\nBuilding block for request-based data providers with recovery logic; supports recovery with a single request\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `makeDataProviderRequestConnector`\n\nThis connector makes a request using the input data for the request body.\n\n### Input/Output Connector `makeDataProviderRequestFromConfigConnector`\n\nThis connector makes a request using configuration to provide the request body.\n\nLocal data for the call to `UserApi::expandTemplatedValue()` is the input argument data for the connector available as `$local:input`.\n\n### Input/Output Connector `DataProvider Request Validation`\n\nThis connector is suitable for step validation logic; it returns a string providing the validation status, either `COMPLETE` or `RETRY`, depending if output data was found in the output data provider or not.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n\n___\n\n## **BBM_DataProviderRequestWithRecoveryStep Building Block**\n\n## Summary\n\nBuilding block for request-based data providers with recovery logic; supports recovery with a single request\n\nThis class has no connectors as it is meant to be directly usable as a normal step class; the `primary()` and `validation()` logic is implemented already in this class.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/do-request` API data provider in the `qorus-api` factory instead\n___\n\n## **BBM_DataProviderSearch Building Block**\n\n## Summary\n\nPerforms a search in a record-based data provider and returns the result\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/search` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `DataProvider Single Record Search`\n\nThis connector executes the search using the input data for the search parameters; the search must return a single record (or no result).\n\nWith this connector, the local data (i.e. `$local:*`) for the `dataprovider-search-output-data` config item is the record returned if any data is returned; if no data is returned from the search, no output data can be stored; the internal call to `UserApi::updateOutputData()` is not executed in this case.\n\n### Input/Output Connector `DataProvider Single Record Search From Config`\n\nThis connector executes the search using configuration for search parameters; the search must return a single record (or no result).\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`) except `dataprovider-search-output-data`.\n\nWith this connector, the local data (i.e. `$local:*`) for the `dataprovider-search-output-data` config item is the record returned if any data is returned; if no data is returned from the search, no output data can be stored; the internal call to `UserApi::updateOutputData()` is not executed in this case.\n\n### Input/Output Connector `DataProvider Multiple Record Search`\n\nThis connector executes the search using the input data for the search parameters; the search can return multiple records; output data is the list of hashes representing the records retrieved, or no data, in case no records were matched.\n\nWith this connector, the local data for the `dataprovider-search-output-data` config item is the records returned in `$local:records`).\n\n### Input/Output Connector `DataProvider Multiple Record Search From Config`\n\nThis connector executes the search using configuration for search parameters; the search can return multiple records; output data is the list of hashes representing the records retrieved, or no data, in case no records were matched.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`) except `dataprovider-search-output-data`.\n\nWith this connector, the local data for the `dataprovider-search-output-data` config item is the records returned in `$local:records`).\n\n## References\n\nSee `BBM_DataProviderSearchBase`\n\n___\n\n## **BBM_DataProviderSearchBase Building Block**\n\n## Summary\n\nBase class for using the data provider search API; no configuration or connectors\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `data-provider/search` API data provider in the `qorus-api` factory instead\n\n## References\n\nSee `BBM_DataProviderSearch`\n\n___\n\n## **BBM_DataProviderSearchRecordIterator Building Block**\n\n## Summary\n\nProvides a building block that outputs a record iterator suitable for use as an input element in a data pipeline.\n\n## Connectors\n\n### Input/Output Connector getIterator()\n\nPerforms the search and returns a bulk record iterator for use as input to a data pipeline, for example.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n\n___\n\n## **BBM_DataSerialization Building Block**\n\n## Summary\n\nSerializes data to a specific format according to the `data-serialization-format` configuration item:\n- **JSON**: serialize to a JSON string\n- **XML**: serialize to an XML string\n- **XML-RPC**: serialize to an XML string in [XML-RPC](https://en.wikipedia.org/wiki/XML-RPC) format\n- **YAML**: serialize to a YAML string\n\nUse the `data-serialization-verbose-output` config item to use multi-line serialization for more human-readable results for complex data structures if necessary.\n\n## Connectors\n\n### Input/Output Connector `serialize`\n\nInput data is available as local context data during the resolution of all config item as `$local:input`.  \n\nThe output data includes the serialized data in the `output` key of the hash returned.\n\n___\n\n## **BBM_DeleteFilePath Building Block**\n\n## Summary\n\nDeletes a file from the filesystem\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `delete` API data provider in the `file` factory instead\n\n## Connectors\n\n### Input/Output Connector `deleteFilePath`\n\nDeletes the file identified by the `delete-file-path` config item.\n\nLocal data used when resolving config items for this connector is the input argument data for the connector available as `$local:input`.\n___\n\n## **BBM_ExcelReadDataProvider Building Block**\n\n## Summary\n\nProvides a config-based data provider object for data from a **[Microsoft Excel](https://www.microsoft.com/en-us/microsoft-365/excel)** spreadsheet.\n\n## Connectors\n\n### Input/Output Connector `searchRecordsConnector`\n\nCreates an Excel read data provider object and returns the records parsed.\n\nLocal data for the call to `UserApi::expandTemplatedValue()` for all config items is the input  argument data for the connector available as `$local:input`.\n___\n\n## **BBM_ExecSyncWorkflow Building Block**\n\n## Summary\n\nExecutes a synchronous workflow order and returns the results.\n\nThis building block is useful only in limited use cases;`BBM_ExecSyncWorkflowStatic` can do everything this building block can do and more; it's recommended to use `BBM_ExecSyncWorkflowStatic` instead.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `workflows/exec-sync` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `execSyncWorkflow`\n\nCreates a new workflow order based on the input data; configuration is only used to identify the workflow and to specify output data handling.\n___\n\n## **BBM_ExecSyncWorkflowStatic Building Block**\n\n## Summary\n\nClass for executing a synchronous workflow order from configuration.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `workflows/exec-sync` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `execSyncWorkflowStatic`\n\nCreates and executes a workflow order synchronously from the configuration data.\n\nThe input data is available as `$local:input` for all config items resolved  with this connector (in internal calls to `UserApi::expandTemplatedValue()).\n\n___\n\n## **BBM_FsEventBase Building Block**\n\ngeneric class for event-driven file actions on the local filesystem\n___\n\n## **BBM_FtpPollerBase Building Block**\n\n## Summary\n\nGeneric building block class for polling for files from an FTP server.\n\nThis class is meant to be used as a base class for interfaces (normally a job or a service) that provide FTP polling as an event connector.\n\nIf config item `ftp-polling-file-connection` is set, then files are streamed efficiently to the given local file system location and not stored in memory.  If this config item is not set, then all files are transferred and stored in main memory, which can cause problems with very large files.\n\nIf uploads to the FTP server are not atomic, the `ftp-polling-minage` config item can be used to ensure that files are only polled after they have been present on the FTP server for a defined period of time, which should be greater than the maximum time required to transfer the largest files.\n\nNote that this class can be used in either a job or a service to provide regular polling for files from an FTP server.  Use in a job is encouraged, as the job schedule is easily controlled by operational users and is the pollijng schedule, additionally the results of each polling operation are exposed in the UI and in the API as job results, making it easier to monitor the FTP polling status.\n\n## Connectors\n\n### Input/Output Connector `pollForFiles`\n\nUsed to poll for files once and return file data as output for all files polled; this connector is useful in a job to poll for files regularly according to the job's schedule.  Input data is ignored.\n\n### Input/Output Connector `start`\n\nThis connector can be used in a service to poll in a service's `start()` method in a background thread.  In order to use this class's `ftpFileEvent` connector, this connector must be used as the service's `start()` method.  \n\nInput data is ignored and passed through to the output data.\n\n### Input/Output Connector `stop`\n\nThis connector can be used in a service to stop polling in a service's `stop()` method.   In order to use this class's `ftpFileEvent` connector, this connector must be used as the service's `stop()` method.  \n\nInput data is ignored and passed through to the output data.\n\n### Event Connector `ftpFileEvent`\n\nThis event connector can be used in a service to process file events once they have been polled and fully transferred to the server.  In order to use this connector, the `start` and `stop` connectors must be used in a service's `start()` and `stop()` methods to start and stop the polling thread, respectively.\n\n## References\n\nSee:\n- class building block: `BBM_FtpPollerCreateOrder`\n- job base class: `BBM_FtpPollerCreateOrderJob`\n\n\n___\n\n## **BBM_FtpPollerCreateOrder Building Block**\n\n## Summary \n\nBuilding block class for polling for files from an FTP server and creating a workflow order from files polled.\n\nThe local context data for the internal workflow order creation call is the file event data as described by data type `qoretechnologies/building-blocks/ftp/event`; therefore this information can be used when creating the order; for example `create-workflow-staticdata` = `$local:*` would set the initial static order data to the file event hash.\n\nDuplicates can be detected from order keys, i.e. if one of the following config items is used: \n- `create-workflow-specific-unique-key`\n- `create-workflow-unique-key`\n- `create-workflow-global-unique-key`\n\nIn this case this object also contains configuration that allows for an alternative \"duplicate-file-handling\" workflow order to be created.  See config items in the **FTP Polling Workflow Creation Duplicate File Handling** group for more information.\n\n## References\n\nSee `BBM_FtpPollerCreateOrderJob` for a class designed to be used as the base class for a job\n___\n\n## **BBM_FtpPollerCreateOrderJob Building Block**\n\n## Summary \n\nBuilding block job base class for polling for files from an FTP server and creating a workflow order from files polled.\n\nThe local context data for the internal workflow order creation call is the file event data as described by data type `qoretechnologies/building-blocks/ftp/event`; therefore this information can be used when creating the order; for example `create-workflow-staticdata` = `$local:*` would set the initial static order data to the file event hash.\n\nDuplicates can be detected from order keys, i.e. if one of the following config items is used: \n- `create-workflow-specific-unique-key`\n- `create-workflow-unique-key`\n- `create-workflow-global-unique-key`\n\nIn this case this object also contains configuration that allows for an alternative \"duplicate-file-handling\" workflow order to be created.  See config items in the **FTP Polling Workflow Creation Duplicate File Handling** group for more information.\n\n**Note** The `ftp-polling-interval-secs` config item is always ignored in this class; this class must be used as the base class for a job, and the job's schedule determines the polling interval.\n___\n\n## **BBM_GenericMapper Building Block**\n\n## Summary\n\nThis is a generic mapper class building block that can be used to make generic data transformations.\n\n## Connectors\n\n### Input/Output Connector `map`\n\nThis connector uses the configured mapper to transform the input data; the output data is the result of the map operation.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n\nNote that input data used for the mapper is always the connector input data if present.\n\n### Input/Output Connector `mapFromConfig`\n\nThis connector uses the configured mapper to transform the input data; the output data is the result of the map operation.\n\nNote that input data used for the mapper is always taken from the `automapper-input` config item; input data is only used as context data (i.e. as `$local:input`) when resolving config item template values.\n\n___\n\n## **BBM_GetArray Building Block**\n\n## Summary\n\nReturns an array from the configuration data\n\n## Connectors\n\n### Input/Output Connector `getArray`\n\nThis connector returns a list defined by the value of the `get-array-output` config item; if this config item returns a non-list value, then it is converted to a list before returning.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n___\n\n## **BBM_GetData Building Block**\n\n## Summary\n\nReturns data from configuration data\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/get-data` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `getData`\n\nReturns the value of the `get-data` config item.\n\nInput data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n\n### Input/Output Connector `getDataAsList`\n\nReturns the value of the `get-data` config item, converted to a single-element list if necessary.\n\nInput data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n___\n\n## **BBM_GetPipelineData Building Block**\n\n## Summary\n\nProvides input data to a data pipeline; note that this class ignores input data passed to it but rather only provides data to the next element based on its configuration.\n\nThis class is suitable for using as the first step in a pipeline to pass existing data into a pipeline for processing.\n\n## Processor Description\n\nUses input data only for resolving the output data from config item `get-pipeline-data`; the input data is not passed through to the next element in the pipeline unless it's referenced in the `get-pipeline-data` config item.\n\nLocal data (in this case, the processor's input data) for the call to `UserApi::expandTemplatedValue()` is the input argument data for the connector available as `$local:input.\n___\n\n## **BBM_HttpAuthenticatorBase Building Block**\n\n## Summary\n\nBase building block class for providing authenticators.\n\nThis class has no connectors or configuration but is rather used by other service building block classes providing HTTP and related network services that can optionally require authentication (REST, WebSocket, etc).\n___\n\n## **BBM_HttpFileHandler Building Block**\n\n## Summary\n\nA generic building block for HTTP file handling for use in Qorus services.\n\nThis class can be used to expose files from the filesystem to HTTP clients iin a Qorus service.\n\nIt contains no connectors; it is driven entirely by configuration.  \n\nInitialization is performed automatically when the class is instantiated.\n___\n\n## **BBM_HttpReverseProxyService Building Block**\n\n## Summary\n\nReverse HTTP proxy building block for use in a Qorus service.\n\nProvides HTTP and also WebSocket proxying functionality; also chunked transfers are forwarded directly as well.\n\nThere are no connectors; this building block class is driven entirely by configuration.\n___\n\n## **BBM_HttpServiceBase Building Block**\n\n## Summary\n\nAbstract base class for HTTP handler services.\n\nAs an abstract class, it cannot support connectors; it is entirely driven by configuration.\n___\n\n## **BBM_HttpServiceGenericBase Building Block**\n\n## Summary\n\nAbstract base class for HTTP handler services.\n\nAs an abstract class, it cannot support connectors; it is entirely driven by configuration.\n___\n\n## **BBM_InternalIterator Building Block**\n\n## Summary\n\nBuilding block that allows for iteration of internal data; converts a hash with an internal list into a list of hashes having common top-level data with the interior element repeated \n\n## Connectors\n\n### Input/Output Connector `internalIterator`\n\nAccepts the input data and returns a list of records according to the `internal-iterator-key-path` config item, designating the position in the input data to iterate.\n\nInput data is furthermore available as `$local:input` when resolving config items with this connector.\n\n___\n\n## **BBM_JavaConfig Building Block**\n\n## Summary\n\nHelper class that sets Java configuration based on configuration items\n\nIt does not provide any connectors; it is entirely driven by configuration.\n___\n\n## **BBM_KafkaConsumer Building Block**\n\n## Summary\n\n**[Kafka](https://kafka.apache.org/)** message consumer building block; provides a Kafka message event source to Qorus.\n\nThis building block class is designed to be used in a Qorus service.\n\n## Connectors\n\n### Event Connector `event`\n\nProvides Kafka messages as events.\n\nEvent connectors can only be used in Qorus services.\n\n### Input/Output Connector `start`\n\nStarts listening to Kafka messages; meant to be assocated with a service's `start()` method.\n\nInput data is ignored; returns `true` if the Kafka listening thread was started, `false` immediately if already running.  This connector returns `true` at the end of listening; the `start()` method runs for the lifetime of the object until stopped.\n\n### Input/Output Connector `stop`\n\nStops listening to Kafka messages; means to be associated with a service's `stop()` method.\n\nInput data is ignored; returns `null` (`NOTHING` if called from Qore, `None` if called from Python).\n___\n\n## **BBM_KafkaProducer Building Block**\n\n## Summary\n\n**[Kafka](https://kafka.apache.org/)** message producer building block for sending Kafka messages from Qorus.\n\n## Connectors\n\n## Input/Output Connector `sendMessage`\n\nSends a message synchronously; the input data is used to send the message and must correspond to the given input type.\n\nOutput data provides information about the message sent.\n\n## Input/Output Connector `sendMessageAsync`\n\nSends a message asynchronously; the input data is used to send the message and must correspond to the given input type.\n\nOutput data is a `Future` object regarding the asynchronous message sent.\n___\n\n## **BBM_ListCache Building Block**\n\n## Summary\n\nA building block class that implements a simple cache of a list of data items of any type\n\n## Connectors\n\n### Input/Output Connector `cacheData`\n\nThis connector adds data to the cache by resolving the `list-cache-data` config item.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in the call to `UserApi::expandTemplatedValue()`).\n\nThe input data is returned as output data as well.\n\n### Input/Output Connector `getData`\n\nReturns the data cached; input data is ignored as no configuration is used in this connector.\n\n### Input/Output Connector `clear`\n\nThe cache is emptied; input data is ignored; the cache contents are returned as output data.\n___\n\n## **BBM_LogMessage Building Block**\n\n## Summary\n\nOutput a message to the current log file.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/log-message` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `logMessage`\n\nLogs a message to the log file according to the values of the configuration; input data to the connector is available as `$local:input`.\n\nOuput data is the messages logged in a hash in the `msg` key.\n___\n\n## **BBM_MqttPahoClient Building Block**\n\n## Summary\n\n[MQTT Paho](https://www.eclipse.org/paho/) client for publishing and listening to MQTT messages.\n\nThis class is the base class for the publishing and listening classes.  There are no connectors; it is driven entierly by configuration.\n___\n\n## **BBM_MqttPahoPublisher Building Block**\n\n## Summary\n\n[MQTT Paho](https://www.eclipse.org/paho/) client for publishing messages to an MQTT topic\n\n## Connectors\n\n### Input/Output Connector `publishFromConfig`\n\nUsed to publish a message from config item `mqtt-paho-message-body`.\n\nThe input data is available as `$local:input` for all config items resolved with this connector (in the call to `UserApi::expandTemplatedValue()`).\n\nMessage data is converted to a binary for publishing, if necessary by first converting to a string.\n\nThe output data is the `org.eclipse.paho.client.mqttv3.MqttMessage` object published.\n\n### Input/Output Connector `publish`\n\nUsed to publish a message from data passed as input; if no value is passed, then the message data is taken from config item `mqtt-paho-message-body`.\n\nThe input data is converted to a binary if necessary, if necessary by first converting to a string.\n\nThe output data is the `org.eclipse.paho.client.mqttv3.MqttMessage` object published.\n\nIs is recommended to use the `publishFromConfig` connector instead.\n\n___\n\n## **BBM_MqttPahoSubscriber Building Block**\n\n## Summary\n\n[MQTT Paho](https://www.eclipse.org/paho/) client for receiving messages from an MQTT server\n\n## Connectors\n\n### Event Connector `connectionLost`\n\nRaised when the connection is lost; event hash keys:\n- **`class_name`**: (`string`) the full exception class name\n- **`message`**: (`string`) the exception message\n- **`cause`**: (`java.lang.Throwable`) the exception object itself\n\n### Event Connector `deliveryComplete`\n\nRaised when a message has been successfully delivered; event hash keys:\n- **`topics`** (`list\u003cstring\u003e`) the topic or topics for the message\n- **`id`**: (`string`) the message ID delivered\n- **`payload`**: the message payload, decoded according to config item `mqtt-paho-message-format`\n- **`qos`**: (`int`) the QoS code for the message\n- **`duplicate`**: (`bool`) if the message is a duplicate\n- **`retained`**: (`bool`) if the message was retained\n- **`message`**: (`org.eclipse.paho.client.mqttv3.MqttMessage`)\n the message object itself\n\n### Event Connector `messageArrived`\n\nRaised when a message arrives from a topic matching config item `mqtt-paho-message-topics`; event hash keys:\n- **`topic`** (`string`) the topic for the message\n- **`id`**: (`string`) the message ID delivered\n- **`payload`**: the message payload, decoded according to config item `mqtt-paho-message-format`\n- **`qos`**: (`int`) the QoS code for the message\n- **`duplicate`**: (`bool`) if the message is a duplicate\n- **`retained`**: (`bool`) if the message was retained\n- **`message`**: (`org.eclipse.paho.client.mqttv3.MqttMessage`)\n the message object itself\n\n### Input / Output Connector `start`\n\nPasses through any input given.  Can be used as the start method of a service. Only returns when `stop()` is called.\n### Input / Output Connector `stop`\n\nPasses through any input given.  Stops listening and disconnects the connection.\n___\n\n## **BBM_OndewoBpiServer Building Block**\n\nBuilding block for an ONDEWO Business Process Integration server service in Qorus\n___\n\n## **BBM_OndewoIntentHandler Building Block**\n\nONDEWO intent handler\n___\n\n## **BBM_OndewoNluClient Building Block**\n\nBuilding block that returns an ONDEWO NLU / Conversational AI client from an `ondewonlu://` Qorus connection\n___\n\n## **BBM_OndewoVtsiClient Building Block**\n\n Building block that returns an ONDEWO VTSI client from an `ondewovtsi://` Qorus connection\n___\n\n## **BBM_OutputData Building Block**\n\n## Summary\n\nWrites output data to locations provided by config item `output-data-hash`, which should be assigned a hash in the following format:\n- **key**: *data to store* -\u003e **value**: *location to store it in*\n\nThe keys in the hash are expanded with calls to `UserApi::expandTemplatedValue()`\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/write-output` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `writeOutput`\n\nThis connector executes the output write data operation.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n\nIt is recommended to use this connector instead of the similar `writeOutputData` connector, as this connector support standard handling of the local input data, and the `writeOutputData` connector does not.\n\n### Input/Output Connector `writeOutputData`\n\nThis connector executes the output write data operation.\n\nLocal data for the call to `UserApi::expandTemplatedValue()` is the input argument data for the connector; if the input data is a hash, then it is used directly as the local context data for the `$local:` template.  If the input data is not a hash, then it is stored in the `input` key of the local data hash.\n\nThis connector differs from `writeOutput` only in the non-standard handling of the local input data.\n\nIt is recommended to use the `writeOutput` connector instead, as it uses standard input data handling.\n\n## `output-data-hash` Config Item Examples\n\n- `$local:input: $dynamic:data` -\u003e store the input data in the `data` key of dynamic data\n- `'$info:started': '$pstate:started'` -\u003e store the `started` key from the `$info:` template into the `started` key of the persistent state hash for the current interface\n- `'$local:*': '$jinfo:result'` -\u003e store the entire local context data hash in the `result` key of the `$jinfo:` (job info) hash\n___\n\n## **BBM_PauseDataPassthru Building Block**\n\n## Summary\n\nA building block that executes a configurable pause or delay.\n\nThe `pause` connector passes through any data as-is when used in a connection.\n\nNote that if the interface shuts down while the pause is in action, a `RETRY-ERROR` will be thrown to ensure a retry when used in a workflow context.\n\n## Connectors\n\n### Input/Output Connector `pause`\n\nPerforms a configurable pause based on the config item values resolved.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n___\n\n## **BBM_QorusServiceMethodCaller Building Block**\n\nThis building block allows for Qorus service methods to be called based on configuration\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `services/call-method` API data provider in the `qorus-api` factory instead\n___\n\n## **BBM_QorusUiExtension Building Block**\n\n## Summary\n\nQorus web UI extension handlindler service building block.   Allows a Qorus service to provide a UI extension with configuration.\n\nThe UI resources files should be provided as service resources; the default resource will be served according to config item `ui-extension-default-resource`.\n\n## Connectors\n\n### Input/Output Connector `init`\n\nInitializes the service according to configurqation; input data is returned as-is but is otherwise ignored.\n___\n\n## **BBM_RegularExpressions Building Block**\n\n## Summary\n\nGeneric object defining constants for regular expression configuration item handling.\n\nThis building block class has no configuration or connectors; it is designed to be used by other building blocks providing regular expression support.\n___\n\n## **BBM_RestAction Building Block**\n\n## Summary\n\nBuilding block class for making a REST request.\n\nUse the `rest-output-data` config item to write the results of the REST call to an output location; ex: `body: $dynamic:rest_results` would write the response body to the `rest_results` key of the dynamic data hash in a workflow order.\n\nNote that there is inline retry configuration for I/O errors; by default this object will make 3 retries spaced 5 seconds apart if configured socket errors are encountered; see config items for more information.\n\n## Connectors\n\nOutput data for all connectors is a hash with the following keys:\n- `body`: the response message body, if any\n- `request-uri`: the request URI string sent (ex: `GET /services/async/38.0/job HTTP/1.1`)\n- `request-headers`: hash of outgoing HTTP request headers\n- `request-serialization`: message serialization used in the request body\n- `response-code`: the HTTP response code\n- `response-uri`: the HTTP response URI\n- `response-headers`:  a hash of processed incoming HTTP headers in the response with keys converted to lower case and with additional information added\n- `response-serialization`: message serialization used in the response body\n- `response-chunked`: `true` if the response body was sent chunked\n\n### Input/Output Connector `restAction`\n\nThis connector uses the input data as a hash to provide the following values for the REST call:\n- `body`: the request message body (note that requests with `GET` and `HEAD` methods should not contain a message body)\n- `uri_path` the request URI path\n- `hdr`: any headers to include in the request\n\n### Input/Output Connector `restActionFromConfig`\n\nThis connector takes all configuration for the REST call from config items.\nThe input data is available as `$local:input` for all config items resolved with this connector (in internal calls to `UserApi::expandTemplatedValue()`).\n___\n\n## **BBM_RestActionStep Building Block**\n\ngeneric step for making a transaction-safe REST request\n___\n\n## **BBM_RestActionWithRecovery Building Block**\n\nClass for making a transaction-safe REST request\n___\n\n## **BBM_RestServiceBase Building Block**\n\n## Summary\n\nBase class for REST handler services\n\nThere are no connectors; this class is driven entirely by configuration.\n___\n\n## **BBM_SalesforceStreamBase Building Block**\n\n## Summary\n\nBase class for **Salesforce** streaming API support; reports events; can only be used in services\n\n## Connectors\n\n### Event Connector `event`\n\nProvides information about events in a Salesforce instance in Qorus services.\n___\n\n## **BBM_SalesforceStreamCreateOrder Building Block**\n\n## Summary\n\nService building block class for Salesforce.com streaming API support; creates a workflow order for each event received according to the configuration.\n\nThere are no connectors; it is entirely driven by configuration.\n___\n\n## **BBM_SftpPollerBase Building Block**\n\n## Summary\n\nGeneric building block class for polling for files from an SFTP server.\n\nThis class is meant to be used as a base class for interfaces (normally a job or a service) that provide SFTP polling as an event connector.\n\nIf config item `sftp-polling-file-connection` is set, then files are streamed efficiently to the given local file system location and not stored in memory.  If this config item is not set, then all files are transferred and stored in main memory, which can cause problems with very large files.\n\nIf uploads to the SFTP server are not atomic, the `sftp-polling-minage` config item can be used to ensure that files are only polled after they have been present on the FTP server for a defined period of time, which should be greater than the maximum time required to transfer the largest files.\n\nNote that this class can be used in either a job or a service to provide regular polling for files from an SFTP server.  Use in a job is encouraged, as the job schedule is easily controlled by operational users and is the pollijng schedule, additionally the results of each polling operation are exposed in the UI and in the API as job results, making it easier to monitor the SFTP polling status.\n\n## Connectors\n\n### Input/Output Connector `pollForFiles`\n\nUsed to poll for files once and return file data as output for all files polled.  Input data is ignored.\n\n### Input/Output Connector `start`\n\nThis connector can be used in a service to poll in a service's `start()` method in a background thread.  In order to use this class's `sftpFileEvent` connector, this connector must be used as the service's `start()` method.\n\nInput data is ignored and passed through to the output data.\n\n### Input/Output Connector `stop`\n\nThis connector can be used in a service to stop polling in a service's `stop()` method.   In order to use this class's `sftpFileEvent` connector, this connector must be used as the service's `stop()` method.\n\nInput data is ignored and passed through to the output data.\n\n### Event Connector `sftpFileEvent`\n\nThis event connector can be used in a service to process file events once they have been polled and fully transferred to the server.  In order to use this connector, the `start` and `stop` connectors must be used in a service's `start()` and `stop()` methods to start and stop the polling thread, respectively.\n\n## References\n\nSee:\n- class building block: `BBM_SftpPollerCreateOrder`\n- job base class: `BBM_SftpPollerCreateOrderJob`\n\n\n___\n\n## **BBM_SftpPollerCreateOrder Building Block**\n\n## Summary\n\nBuilding block class for polling for files from an SFTP server and creating a workflow order from files polled.\n\nThe local context data for the internal workflow order creation call is the file event data as described by data type `qoretechnologies/building-blocks/sftp/event`; therefore this information can be used when creating the order; for example `create-workflow-staticdata` = `$local:*` would set the initial static order data to the file event hash.\n\nDuplicates can be detected from order keys, i.e. if one of the following config items is used:\n- `create-workflow-specific-unique-key`\n- `create-workflow-unique-key`\n- `create-workflow-global-unique-key`\n\nIn this case this object also contains configuration that allows for an alternative \"duplicate-file-handling\" workflow order to be created.  See config items in the **SFTP Polling Workflow Creation Duplicate File Handling** group for more information.\n\n## References\n\nSee `BBM_SftpPollerCreateOrderJob` for a class designed to be used as the base class for a job\n___\n\n## **BBM_SftpPollerCreateOrderJob Building Block**\n\n## Summary \n\nBuilding block job base class for polling for files from an SFTP server and creating a workflow order from files polled.\n\nThe local context data for the internal workflow order creation call is the file event data as described by data type `qoretechnologies/building-blocks/sftp/event`; therefore this information can be used when creating the order; for example `create-workflow-staticdata` = `$local:*` would set the initial static order data to the file event hash.\n\nDuplicates can be detected from order keys, i.e. if one of the following config items is used: \n- `create-workflow-specific-unique-key`\n- `create-workflow-unique-key`\n- `create-workflow-global-unique-key`\n\nIn this case this object also contains configuration that allows for an alternative \"duplicate-file-handling\" workflow order to be created.  See config items in the **SFTP Polling Workflow Creation Duplicate File Handling** group for more information.\n\n**Note** The `sftp-polling-interval-secs` config item is always ignored in this class; this class must be used as the base class for a job, and the job's schedule determines the polling interval.\n\n## Connectors\n\n### Input/Output Connector `runJob`\n\nRuns the poll action once.\n___\n\n## **BBM_SimpleFilterPipelineData Building Block**\n\n## Summary\n\nThis building block provides a pipeline processor element that does simple record filtering.  It supports bulk processing.\n\n## Pipeline Processor\n\nThis building block's pipeline processor uses each data record as local context and then evaluates `simple-filter-criteria` on each record.  If the result of the evaluation is boolean `true`, then the record is accepted and passed on for further processing.  If not, the record is ignored.\n\nEx: If the input record is `{key1: value, type: 2}`, `simple-filter-criteria` = `$qore-expr:{$local:type == 1}`, then the filter criteria config item will result in `False` which will result in the record being rejected.  The example filter criteria only accepts records where `type == 1` (if you want to also reject records without a type, then you could use `$qore-expr:{$local:type??{0} == 1}`).\n\nBulk processing is supported in the same manner, and the \"hash of lists\" is rebuilt without references to the discarded records.\n\n**Boolean Evaluation Table**\n\n|**Data**|**Example Values**|**Description**|\n|:---|:---|:---\n|`True` or `False`|True|direct interpretation\n|empty string, hash, list, or binary value|`\"\"`, `{}`, `[]`|`False`\n|int, float, number, or string 0|`0`, `0.0`, `\"0\"`|`False`\n|non-empty string and not `\"0\"`|`\"string\"`|`True`\n|non-empty hash, list, or binary value|`{key: value}`|`True`\n\n___\n\n## **BBM_SmtpEmailSender Building Block**\n\n## Summary\n\nA building class to send one or more emails through an SMTP server.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `send-email` API data provider in the `smtpclient` factory instead\n\n## Connectors\n\n### Input/Output Connector sendEmail\n\nSends an email to the recipient based on configuration.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n\n___\n\n## **BBM_SnmpCommonBase Building Block**\n\nBuilding block providing a base class for working with SNMP traps\n___\n\n## **BBM_SnmpServiceTrapEventSource Building Block**\n\nBuilding block providing an event source for SNMP traps\n___\n\n## **BBM_TextAnalysis Building Block**\n\n## Summary\n\nA Python-based text analysis building block class using tensorflow, keras, and numpy to apply a pre-trained model on text input to classify the user's intent.\n\n## Connectors\n\n### Input/Output Connector `processInput`\n\nProcesses the input directly; input must be a string.\n\nThe output is any action string associated wiht the input.\n\n### Input/Output Connector `processInputHash`\n\nProcess input data identified as by the `text-analysis-hash-event-key` config item which designates a key in the input hash holding the input data.\n\nOutput data is a hash with a `result` key giving the action associated with the input.\n\n### Input/Output Connector `processInputFromConfig`\n\nProcess input data identified by the `text-analysis-input` config item, where the input data to this connector is available as `$local:input`/\n\nOutput data is a hash with a `result` key giving the action associated with the input.\n\n___\n\n## **BBM_ThrowException Building Block**\n\n## Summary\n\nThrows an exception\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/throw-exception` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input Connector throwException\n\nThis connector throws an exception according to the configuration.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n___\n\n## **BBM_UpdateOrderDynamicData Building Block**\n\n## Summary\n\nUpdates the dynamic data of a workflow order based on configuration.\n\n**NOTE**:  This building block's functionality has been superceded by an API (request - response) data provider; it's recommended to use the `util/write-output` API data provider in the `qorus-api` factory instead\n\n## Connectors\n\n### Input/Output Connector `update`\n\nPerforms the update of dynamic data according to configuration.\n\nInput data is available as `$local:input` when resolving config items with this connector.\n\nProvides the hash data updated in the given order as output data.\n\n**NOTE**: the update performed uses `UserApi::updateDynamicOrderData()` and therefore is atomic\n___\n\n## **BBM_WebSocketServiceBase Building Block**\n\n## Summary\n\nA base class for WebSocket handler services in Qorus services\n\nThere are no connectors; it is entirely driven by configuration, and WebSocket server services are initialized when the object is created.\n___\n\n## **BBM_WebSocketServiceDataEventSource Building Block**\n\n## Summary\n\nA data event source for WebSocket events in Qorus services, supporting serialized data for events.\n\nThe class's constructor initializes the object, so if it's used as an event source (or generally in any connection) or as the primary service class, there is no need to use the `init` connector.\n\n## Data Serialization\n\nThe default data serialization is `json`, as this is the most common serialization used; `yaml` is also supported.\n\n## Connectors\n\n### Event Connector `webSocketReceiveEvent`\n\nProvides a hash event when a WebSocket message is received from a client.\n\n### Input/Output Connector `init`\n\nMust be used to initialize the object in a service if this class is not used as an event source (or generally in any connection) or as the primary service class.\n\n### Input/Output Connector `webSocketSendEvent`\n\nSends a message or a response to a client; the client is identified by the `cid` key in the input hash.\n\nNo ouput data is provided.\n\n### Input/Output Connector `webSocketBroadcastEvent`\n\nBroadcasts a message to all clients; the message is provided as the `msg` key in the input data.\n\nNo ouput data is provided.\n___\n\n## **BBM_WebSocketServiceEventSource Building Block**\n\n## Summary\n\nAn event source for WebSocket events in Qorus services\n\nThis class is designed to be used as an event source for services.\n\nThe class's constructor initializes the object, so if it's used as an event source (or generally in any connection) or as the primary service class, there is no need to use the `init` connector.\n\n## Connectors\n\n### Event Connector `webSocketReceiveEvent`\n\nProvides a hash event when a WebSocket message is received from a client.\n\n### Input/Output Connector `init`\n\nMust be used to initialize the object in a service if this class is not used as an event source (or generally in any connection) or as the primary service class.\n\n### Input/Output Connector `webSocketSendEvent`\n\nSends a message or a response to a client; the client is identified by the `cid` key in the input hash.\n\nNo ouput data is provided.\n\n### Input/Output Connector `webSocketBroadcastEvent`\n\nBroadcasts a message to all clients; the message is provided as the `msg` key in the input data.\n\nNo ouput data is provided.\n___\n\n## **BBM_WsgiHandlerBase Building Block**\n\nWSGi HTTP Server Handler Base Building Block for Qorus\n\nThis class is written in Qore instead of Python to be thread-safe and scalable.\n\nThe `WsgiAppHelper` class is used to initialize the WSGi app with the same syntax as [Gunicorn](https://gunicorn.org/)\n___\n\n## **BBM_WsgiServer Building Block**\n\nWSGi Server Building Block for Qorus\n\nThis class is written in Qore instead of Python to be thread-safe and scalable.\n\nThe `WsgiAppHelper` class is used to initialize the WSGi app with the same syntax as [Gunicorn](https://gunicorn.org/)\n___\n\n## **BBM_WsgiUiExtension Building Block**\n\nWSGi Qorus UI Extension Building Block for Qorus\n\nThis class is written in Qore instead of Python to be thread-safe and scalable.\n\nThe `WsgiAppHelper` class is used to initialize the WSGi app with the same syntax as [Gunicorn](https://gunicorn.org/)\n___\n\n## **SalesforceLoginParameters Building Block**\n\nHelper class for salesforce event sources in Qorus\n___\n\n## **SalesforceLongPollingTransport Building Block**\n\nHelper class for salesforce event sources in Qorus\n___\n\n## **WsgiAppHelper Building Block**\n\nUsed to create the WSGi application object for a WSGi server\n___\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqoretechnologies%2Fbuilding-blocks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqoretechnologies%2Fbuilding-blocks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqoretechnologies%2Fbuilding-blocks/lists"}