This release contains a number of bug fixes, alongside updates and extensions to existing configuration options to support client implementations.
A new property is now available for PAGE_ARRAY
question configurations, enabling customisation of the confirmation modal shown when a user removes an item.
This allows you to provide context-specific messaging to clearly communicate the implications of the action, helping users make more informed decisions.
To implement this, add the configuration within the styles
object, an example is included below. Referencing ${title}
in your text
property will pull through the name of your PAGE_ARRAY
which can be dynamically set using the pageLabelTopic
property.
If the custom configuration is not specified, the system will continue to use the default messaging.
"confirmDeletePageModal": { "cancelText": "Keep Property", "submitText": "Remove Property", "text": "Removing ${title} will exclude it from your insurance coverage
and may change your quote. Are you sure you want to continue?", "title": "Remove Property" }
Team-based filtering is now supported for aggregator lists, enabling more targeted views and improved list management.
To enable this, a secure
property can be added to the aggregator configuration to index items by teamId
- an example is included below.
If your configuration's targetSubjects
events already include the attribute
property, no additional changes are required. If not, you may need to update or create a stream event configuration to support it. For example, this could be a collation that creates a stream event with the attribute
when a form attribute is upserted.
"secure": [ { "index": "$.event.body.attribute.teamId" } ],
"body": { "body": { "attribute": "$.event.body.attribute" }, "topic": "$.lookup.topic" }
The configuration options for SINGLE_USE_BUTTON
and MULTI_USE_BUTTON
question types have been extended to support dynamic variables within the url
property. This means you can now embed contextual, form-related information directly into the button’s destination URL, enabling more personalised and dynamic navigation experiences.
Included below are the available variables that can be referenced, along with an example configuration. When referencing variables, be sure to wrap them in double curly brackets - for example: {{formTopic}}
. You can also use jPath expressions interchangeably with the $
notation, meaning both {{form.topic}}
and {{$.form.topic}}
are valid and function the same way.
// available variables
{ "formTopic": "d90a05b4-ca8f-4057-a6da-2966527d9f3f", "formSubject": "FRM_MY_QUOTE", "productId": "e7784280-cdd0-4800-8e28-6089eb771adb", "answers": { // some answers... }, "form": { "topic": "d90a05b4-ca8f-4057-a6da-2966527d9f3f", "subject": "FRM_MY_QUOTE" } }
// example configuration
{ "answerType": "MULTI_USE_BUTTON", "answerConfig": { "redirectTarget": "_self", "redirectUrl": "https://admin.cloudstream.evari.tech/form/{{formTopic}}?
pid={{productId}}&intkey={{formSubject}}&isPublic=false", "text": "Submit and Return to Quote" }, "internalKey": "MY_REDIRECT_BUTTON", "isVisible": true }
Document domain now supports sub-templates, allowing users to break down large, complex documents into manageable segments for easier organisation and ongoing maintenance.
Each segment can be created as a separate template using the builder portal. Once all templates are prepared, you should open the primary template (representing the first segment) in the builder and use the 'Subordinate Templates' dropdown to select and link the remaining segment templates in the correct order. When compiled, the primary and subordinate templates are merged into a complete, structured document.
Extended Question Builder to support the new showIsTouched
property, allowing it to be easily toggled between true
and false
per question configuration.
Form configuration now supports properties to disable the comments and user collaboration features, reducing the number of requests made to the backend.
_text
values are now generated for PILL_SELECTION_API
question types to support rule-based logic that relies on the human-readable labels rather than the raw value identifiers.
Added support for setting custom Content-Type
headers in the Collation API provider. Automatically encodes data when application/x-www-form-urlencoded
is used.
Allow generation of payment links when an invoice is in an Overdue status
Fix for issue in form-clone where rules were running inconsistently
Display an asterisk when DATA_LIST
question is set to "isRequired": true
Support "below"
helpText on YES_NO
question
Fix for issue where the inline render editor displayed behind the form contents
Fix for issue in teams management where sequential updates to team details led to the incorrect display of details
When a new team is created, special characters are now sanitised from the generated topic
Extend multi-select components to delimit options by characters other than commas
Ensure backbone events have an offset
Fix for helpText icon dropping to new line on question labels
This release contains a range of bugfixes due to a number of new client implementations.
An new property can now be added to the question config "showIsTouched" : true
. When this property is added, every time the user answers the question on the UI, there will be an extra value saved in the answers - {{questionTopic}}_isTouched : true.
This new value can then be used in a rule as a fact to stop the rule from running again automatically.
For US based clients, the Input1 payment provider is now supported as a payment gateway. The integration also includes passing additional metadata to Input1 for display in their billing dashboard, and a payment flow that includes a payment link rather than a hosted Evari page.
This release contains a number of new features and improvements to configuration management and components, as well as some enhancements to the underlying platform for improved performance.
New Feature
Configuration management
Platform enhancements
A sharing button has been added into forms which will be visible for users that have the new "Enable Sharing" permission. When the "Enable Sharing" permission is added into a role, the user will have to log out and in again for the permission to apply. It may also take up to 2 hours to apply due to permission caching.
Once sharing is enabled, a new button will be available when viewing a form which will show that sharing controls. To share with someone, an email address needs to be entered followed by either a comma or the enter key.
For a user to be able to access the form, they need to have an account within the environment. If they are already a user, the checkbox doesn't need to be clicked, however if an account is needed, ticking the checkbox will automatically create a new public user within the environment. New users will not have passwords set, so will be required to login with the email code or magic link login options. Already having a user and clicking the checkbox will not cause any issues with the users account.
For a user to be notified of the sharing action and to be able to access the shared data, two pieces of configuration need to be added:
All configuration changes are now detected and tracked through a centralised list of all changes that occur within a single environment.
To access release management, the user will need to be in a profile that has access to the "Releases" tab within the builder. If this isn't available to your profiles, reach out to the Evari team to ensure you have access.
From the Releases tab, new releases can be created, and previous releases can be viewed. For each release, configuration changes can be added to or removed from the release. There is also the ability to filter the configuration changes by configuration topic, author, or commit summary.
Environments can be created within release management to move configuration between environments. When adding a new environment, a baseUrl is required which will normally be similar to `https://api.yourEnvironment.evari.tech`. Environments can also have string replacements configured by default which allows these to be applied to all configurations moving to that environment. String replacements are useful if you are changing predictable values, for example environment URLs, or replacing something like _TEST with _QA automatically.
To push your release to other environments, select the "publish release" action which will allow you to select the environment you wish to release to, and will also require you to authenticate against that environment.
rulesContext
, add in the rule set name to either frontendRuleSets
, ruleSets
, or both. This can be an existing rule set, or a new one you would like to create and save the configuration.{}
whilst existing rule sets will show the rules that have been added to the rule set.
Rules can be directly added or edited in the JSON editor. When a rule is added or changed, clicking the save button will update that rule and save it as an individual rule that can be used in multiple rulesets.
You can also create rules using the rule builder.
.
and the property to operate on (e.g. .value, .markdown)This allows for embed forms to automatically upsert answer values without having to include query string parameters.
const upsertAnswerMessage = {
type: 'websocket',
params: {
command: 'upsert-answer',
subject: '$QUESTION/ANSWER',
topic: '{{formTopic}}/{{questionTopic}}',
body: {
value: '{{yourValue}}'
}
}
};
You need to add the property questionsContext.validationMessages
to the form config
form config example:
All message properties are optional so that you can specify only some of them, whilst the others will use the default value.
2. Customise messages specifically for a specific question (you can customise the messages for questions in the Question Builder or directly in the JSON)
The messages specified in the question configuration will take precedence over the message properties in the form config
Increase the base lambda size of all functions to 2048mb to improve cold start performance
A new permission has been added to allow external API users to only trigger specific integration configs that have EXT_ within their topic
Style customisation for CARD_GROUP question types. You can use the attached JSON properties, or use the question builder UI to apply the styles.
New rule engine operators added to compare values against values that exist in lists
isSubset - will return true
when the first set is a subset of the second set. e.g. [1,2], [1,2,3]
isNotSubset - should return true
when the first set is a subset of the second set e.g. [1,4], [1,2,3]
setDifference - the lists of all the elements that are in set A but that are not present in set B e.g. [1,2,3], [2,3,4] = 1
setIntersection - the list of elements that are both in set A and set B e.g. [1,2,3], [2,3,4] = [2,3]
setUnion - the list of elements that are either in set A or in set B e.g. [1,2,3], [2,3,4] = [1,2,3,4]
Fix for intermittent issue with some requests using the wrong base URL
Fix for some markdown hyperlinks being displayed as white text
Fix for form and contract list pagination
Fix for document signing error loop when the signer isn't specified correctly
Fix for errors overlapping with the "below" help text type
Fix for an intermittent function timeout on the Question and Cron event store stream when under heavy load
Fix for Chrome prefill overlapping with question labels
Fix for multiple array questions displaying on the same page
Fix for adding help text to card groups
Fix for adding a list column text align property
Fix for date picker crashes when manual value entered outside of the date picker range
This major release replaces provides a significant upgrade to the Evari Data Backbone by replacing the AWS Kinesis streaming infrastructure with Evari’s own MicroStrate Streams. This provides improved performance and reliability compared to AWS Kinesis service which has some well documented limitations, including potential issues with shard congestion and partitioning constraints that could cause back pressure resulting in slowdowns when the system came under sudden load.
This release updates the services that comprise the Evari CloudStream platform, removing the dependency on AWS Kinesis, as well as other necessary service changes to ensure backwards compatibility is maintained with the existing platform functionality.
Performance will be noticeably improved, particularly in relation to receiving backend updates through to the UI as soon as the updates are available. A new collaboration feature has also been added in order to take advantage of the performance enhancements delivered by Evari MicroStrate Streams.
MicroStrate Streams is a highly performant, highly available and resilient write ahead log and streaming service that not only replaces Kinesis as the primary streaming technology powering the data backbone underpinning the Evari platform, but also provides an enhanced feature set and reduced infrastructure management overhead.
The main benefits of this change will be experienced by users through the notable increase in speed of all functions of the platform. This is because all our services communicate via stream, so with improved stream performance and throughput comes and increase in the overall speed of the platform.
Reliability has also been improved through improvements in message delivery and acknowledgment over Kinesis, as well as the removal of shard congestion as a possible reason for message delivery slowdowns.
In order to reduce the impact of documented issues with AWS Lambda function cold starts, we previously implemented an enhancement that we call “The Kraken” to virtualise all lambda functions into a container and execute functions until capacity was hit, at which point requests would be offloaded to lambda again.
With the implementation of the Evari MicroStrate Streams, throughput has been greatly increased, which results in greater load being placed on the other services in a shorter amount of time. To compensate for this, the Evari MicroStrate Mesh implementation enables the balancing and scaling of load across multiple instances of “The Kraken” service. This upgrade is capable of exceeding both the performance of AWS Lambda and the account capacity limit imposed by AWS on concurrent lambda function executions.
This updates the way Evari function lifecycles are developed and executed in order to improve performance and reliability. Orca ensures that:
Through this technology, requests for different resources are able to execute in parallel, whilst requests for the same resources benefit from guaranteed global order. Because the functions are now pure with no service connections, the function execution overheads are reduced dramatically. Three services within the CloudStream platform have been updated to utilise this technology:
Due to the live nature of the Evari backend services and the speed at which updates are shared between connected devices that now benefit from using the MicroStrate streams; we have developed an entirely new feature that allows people to observe who is viewing a form, and where their cursor is on that form in realtime. This tool is useful for customer service agents or team members who might be looking at the same form and following what the other users are doing.
To allow for better re-usability of the configuration of rules, rule sets has been developed to replace the current form rules implementation.
Rule sets allow global rules to be set, and then collections of these rules to be created and added into any number of forms. They also assist with separating rules for specific functional areas such as e.g. underwriting rules, pricing rules, visibility rules.
Forms will be migrated to use rulesets when this release is deployed to the target environment. Rules will no longer be accessible through the for config, but you will still be able to update your rules through form updates.
The rulesets in use on a form will be referenced inside of “rulesContext”
This release updates the Node.js version of all our Lambda Functions to Node 20. This change also updates the serverless version in use to v3, and the AWS SDK version to v3.
As well as updating our functions to a newer runtime, this change also results in performance improvements due to a reduction in the bundle size of functions which makes them faster to load and execute.
This release also contains a number of bug fixes and improvements
This release contains various bug fixes and improvements.
This release contains various bug fixes and enhancements.
A number of changes have been made to the aggregator to support more dynamic event consumption and responses. These changes include adding support for target paths, adding static and dynamic subjects into the configuration to create new indexes and improved aggregator rebuild efficiency.
The dynamic UI theming has been refactored to resolve a number of bugs with custom themes that are present on forms persisting even when changing to a new form with a different theme. There has also been a new notifications UI added which updates the messages you will see when you are having network issues, as well as success and error messages.
Caching has been updated to try and resolve an intermittent error seen in the Australian AWS edge regions where MFEs are unable to be retrieved from the CloudFront edge cache. This update adds in modified cache control and TTL values.
Aggregator Target Paths - As well as `targetSubject` support that is already provided, aggregator configurations can now support an array of targetPaths. The paths have to be either an exact match, or a glob pattern with either a single wildcard * which will match only that path, or a double wildcard ** which will match all paths after it.
Aggregator subjects
Before, subjects of aggregates were the same as the config topic but with a "$" in front.
Now we can set a different predefined subject in config.body or a dynamic subject in config.body.lookup that supports jPath.
Just like before, each different subject corresponds to a different opensearch index. If a subject was redefined in config, the opensearch query request should have a topic which is the same as the new subject but without the "$". Also, items have to be deleted by the new subject
Note that if both are used, the lookup.subject will overwrite the static subject
Query Config - the query config can be used to create read models of data already in the system and is capable of pushing out subscriptions to this data is it changes. For example, if you have events for ORGANIZATION as below, you are able to create a new list of this data that will be available through whatever has been specified in the `egressConfig`.
{ "command": "upsert", "subject": "$BACKBONE/CONFIG_QUERY/DRAFT", "topic": "ORG_LIST", "body": { "type": "query-config-upserted", "egressConfig": { "subject": "$EVARI/ORG", "topic": "$.event.topic" }, "queries": [ { "searchTerm": "$.event.topic", "size": 1, "exact": true, "from": 0, "transformType": "SEARCH", "fields": [ "topic" ], "keepDelimitersIntact": true, "aggregateConfigTopic": "ORGANIZATION" } ] } }
A new operator has been added in the rule engine to resolve a rounding error with large decimal place values. The `toFixed` operator can be used to ensure correct rounding to the right number of decimal places even beyond the 16-bit floating point format. New operators include subtractBig, divideBig, multiplyBig, addBig, toFixed
"toFixed_example": { "value": { "input": [ "@fact:item1.value", 2 ], "operator": "toFixed" } }
Fix bug with radio buttons changing sizes with text length
Resolved and issue with the “PAGE” node type loading correctly in builder tools
Fixed bugs related to custom theming of forms persisting when changing forms
Resolved an issue with nested array rules resolving without the array ID in specific circumstances
This is a patch release that contains a number of smaller bugfixes to support performance and stability, internal updates to support new environment provisioning, and some small feature updates.
You can now add markdown links to labels on all question types. The default behaviour is to open the link in a new tab, but this can be changed through the dropdown that will appear when a link is added. Links must be added using markdown which will be automatically created by clicking the link icon. Once added, the link will be available on the question preview to ensure the behaviour is correct.
A new rule operator has been added which outputs a filtered list of items that match the filter rule which can then be used in dropdowns/markdown etc.
{ "value": { "input": [ "@fact:parent.value", { "input": [ "@fact:parent/*/child.value", "option 1" ], "operator": "hasOptions" } ], "operator": "array-filter" } }
The first input is the parent list of items, and the second input is the filter rule you want to apply on each item of the array. At the moment, this rule only supports hasOptions
inside the array-filter
. Please reach out to us if this need to be extended to other operators.
The websocket cache can be enabled in the global auth configuration (if the user has the "manage authentication config" permission) to improve loading speed of question and render configurations. The cache will quickly serve the cached version when requested, and the cache will be refreshed when an update to a cached configuration is received. When enabled, there is a small delay (~10 seconds) between when the publish occurs and the cached version being available.
Links can now be added via markdown on the question builder. When a link is added, a dropdown will appear so that the user can select the desired target (current tab or new tab). If no dropdown appears, the default behaviour is to open the link in a new tab.
The websocket cache can be enabled by adding the below into the global auth configuration which will improve the load times of configurations being retrieved from websockets.
"tokenMetadata": { "enableSocketCache": true }
The domain url has been removed from the accessToken and refreshToken local storage to make it easier to use the application on customer domains and embedded flows.
New array-filter
operator has been added to the rule service which outputs a filtered list of items that match the filter rule
Change the datamapper API calls to go via websockets to allow a large number of requests without getting rate limited and resolved a bug which shared the same query result across a number of different datamapper requests using the same file.
Resolved a bug with AREA question type, increasing the maximum allowable textAreaHeight
so that a lot of text can be displayed without being cut off
Resolved a bug which caused the question builder to crash when a new question is created
Updated the frontends to clear out the local storage if either the accessToken
or refreshToken
have expired to ensure the user is logged out when they no longer have valid tokens
A bug has been fixed with the lambda host which allows it to be enabled again to increase response times on all lambda functions
This is a patch release that contains a number of small bugfixes and updates, as well as a new consensus mechanism to solve an underlying issue with AWS kinesis streams ceasing the delivery of data to a connected consumer.
The main change in this release is to address some performance issues/flaws observed with the AWS Kinesis infrastructure upon which Evari CloudStream depends. There is an issue with reliably delivering data over an extended period of time. This is an inherent limitation with consuming Kinesis streams, and from our testing, appears to happen whenever the stream is being consumed by one particular consumer over a longer period of time, and does not appear to occur if using lambda to consume events (each lambda invocation is a new connection rather than something long lived). The lambda approach however is not viable as there is a large performance impact on message delivery increasing to 5-10 seconds per message.
To address these issues, we are releasing a patch which includes a new consensus mechanism implemented to significantly reduce the likelihood of data not being delivered to connected subscribers when it is written to the kinesis streams. This mechanism works in the following way:
Extend the DROPDOWN_API component to allow for the dynamic querying of datamapper files within the question configuration. This feature enables subscription to answer streams when dictated within the configuration, and allows queries to re-run as the subscribed streams update. As a result dynamic querying is more efficient, with faster response times and simplified maintenance.
When providing the lookup data which specifies the dynamic data to be used for the query, we can now include dynQuestion: true which will enable this feature.
"lookupData": { "cover_start_date": "cover_start_date", "dynQuestion": true },
Increase the instance count on the OpenSearch cluster to increase performance and fault tolerance.
Sync worker and layer version with the git release tag
Remove Icon property has been added to the ARRAY_TABLE component
New properties `createdBy` and `createdByUserId` have been added to public form creation, restricting public forms to only being able to be accessed by the token that created them, or agents/administrators. Ensure Public Token expiry time is set to a suitable value to ensure public users have enough time to claim ownership over a form before the token expires.
Bugfix for managing the data state when multiple tables are toggled on the same screen, ensuring the right data is displayed
Bugfix for resetting style themes when switching between different form themes
Bugfix for decisions when local computer times are not correct.
This fixes an issue which resulted in the wrong decisions being calculated due to the local computer time of the user either being faster or slower than the server time. When this happens, the resulting decisions can be out of order due to comparing the time of the decision.
When the connection is established, we send the server time to the frontend to use on all decisions, and we continually send server times to the frontend to ensure the clock doesn't drift and the date is not tampered with.
Bugfix to ensure the access token is properly applied to all requests after the token is refreshed
Bugfix for listing transactions not correctly displaying on the UI
Default obfuscation has been disabled on public tokens/requests to ensure SSO can complete successfully
Improve event de-duplication on the form domain
eventId
if present and takes the latest by offsetThis Release contains a large number of stability fixes across the platform:
The new Evari SDK brings in a number of improvements to browser data management and performance of updates within the UI, and improved handling of offline updates when users are experiencing connection issues.
Session management has been updated with alerts being shown for the following scenarios:
Request obfuscation can be enabled to obscure all network and websocket requests, making it more difficult for attackers to understand how the application functions in order to attempt to find and exploit attack vectors. By default, all public requests are obfuscated before login. Once a user is logged in, obfuscation is controlled by a property that can be set in the global authenticate config `obfuscate: true/false`.
Support trace hotkey `ctrl + shift + Q` - Using these keys will collect all information within the session and notify the Evari team that a debug log has been submitted.
Improved stream management within the browser improving request speed, memory usage, and performance
State management improvements for improved consistency between frontend, backend, and offline updates
Aggregator configs allow for dynamic data aggregation based on listening for events and combining these events into a snapshot for the user to retrieve the information that they want.
A UI has been created to allow for easier configuration, and gives the ability to preview the tables and customise the display of data fields within the tables.
Note: only JSON objects are supported at this time, so the excel upload and JSON upload are not functional buttons.
Evari SDK v2.1.0 - The Evari SDK bring a number of new features to the frontend as well as improvements in stability and performance
Aggregator builder to create and manage aggregate configurations. The following route needs to be added to the user profile manifest to view the aggregator builder menu option.
{ "icon": "Dashboard", "path": "/builder/aggregator", "label": "Aggregator", "authenticatedRoute": true, "showInNavigation": true },
Improved processing speed and reliability with aggregation and rebuilding.
Support for handling natural arrays and blank cells when exporting aggregated results to CSV
Added support for multi-upsert, multi-poison-pill, and multi-tombstone on the backbone event functions
Improved the publishing of security rule updates, making them available to the UI faster
Fixes to event writing reliability
Authentication Issues
Networking Fixes and Improvements
Stop some (debounce) collations not running if the debounceOn or orderOn keys aren't specified correctly
Increase the clone form function timeout for larger datasets
Fix an issue with the render-multi-upsert function
Fix an issue with labels displaying in the question summary component
Ensure rules that rely on navigation events are triggered when the navigation setting RENDER_VALIDATE_CURRENT_PAGE_AND_NAVIGATE is active
Don't create a new profile when the legacy field "internalKey" is missing on profile update
Increase number of instances on OpenSearch for better redundancy