Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Welcome to the Appmixer changelog! 👋 Explore comprehensive release notes and detailed migration guides to keep your Appmixer instance up to date and running smoothly.
Handling PRECONDITION_FAILED - unknown delivery tag error. When the RabbitMQ was restarted and some messages were being processed, their acknowledgment failed with the PRECONDITION_FAILED exception, which resulted in a broken RabbitMQ connection.
Improved sandbox around the JavaScript modifier and the context.evalJavaScript
function.
Handling PRECONDITION_FAILED - unknown delivery tag error. When the RabbitMQ was restarted and some messages were being processed, their acknowledgment failed with the PRECONDITION_FAILED exception, which resulted in a broken RabbitMQ connection.
Improved sandbox around the JavaScript modifier and the context.evalJavaScript
function.
Publishing an Integration update no longer replaces the Webhook (or a FormTrigger, or any other component with a URL in the Inspector) URL in the Integration Template with the URL from the Integration Draft flow.
Added support to change the limit
(page size) in the appmixer.ui.Integrations
widget.
Explore the new features in version 6.0.0 that make automation easier once again for your customers and internal teams.
Appmixer 6 operates on the same stack (Node.js version, MongoDB version, etc.), so all custom components should function without modification.
There are no breaking changes in the API. However, one small change worth noting is that if a flow is running, its database document cannot be updated unless ?forceUpdate=true
is added to the request. You can read more about this in the changelog.
An important database change in Appmixer 6 is the introduction of a flow type. A new property, type, is now present on each flow document, and a migration script will automatically execute when Appmixer 6 is deployed to assign a type to each flow in the system. More information about the types can be found in this section of the changelog. While this change isn’t breaking, SDK widgets now use this by default to display certain flow types. For instance, the appmixer.ui.FlowManager
widget shows flows with type: automation
. This default behavior can be modified using the customFilter, as described in the Appmixer SDK documentation. Similarly, the appmixer.ui.Integrations
widget uses type to distinguish integration templates from integration instances.
The most significant update in the main UI (not the SDK) is the split of all flows into two categories: Automations and Integrations. More details can be found in the changelog.
Appmixer 6 introduces several new garbage collectors, with additional information available in the changelog. Be sure to review the garbage collector for continuity scopes (the continuity scope feature is described in the Appmixer documentation). These scopes are now deleted after 100 days by default (modifiable). If you’re using flows with continuity scopes and expect a webhook after 100 days, then you have to increase the value. For any custom components that rely on this feature, you can use the new context.setMaxWait
function to set a specific expiration time, as explained in the documentation.
Finally, please review the System Configuration section, as several settings now have new default values.
The main menu has been redesigned and a Dashboard page with links to the most important tutorials has been added:
Automations and Integrations. The biggest change in Appmixer 6. Automations (internal business process/workflow automations) and Integrations (integration templates for end-users) are split into two separate views for better navigation.
Expandable main menu.
New menu options in Automation Designer, Integration Designer, Automations, and Integrations pages.
Integration designer now displays a magic wand button next to each field. You can now easily add any field to the integration wizard for your end-users simply by clicking on the magic wand button.
Go to “Edit Wizard” to see the live preview of the final wizard as your end-users would see it:
A new test flow has been added allowing you to test integration templates before publishing:
Starting a test opens the end-user Wizard allowing you to see and test how the integration configuration would look for your end-users:
Explore logs of a running test and repeat stop/edit/start/delete cycle until you’re ready to publish your integration template to your end-users.
Publishing popup has been redesigned and simplified:
You can now update all existing integration instances running for your end-users when publishing an update to your integration templates:
Log panel automatically opens when the flow starts.
The log panel toggle button is now visible in Designer:
The log panel can be extended to full screen.
A search bar was added to the log panel allowing a full-text search in logs.
Correlation ID added to each log. You can now copy this correlation ID, add it to the search bar to see logs from the same flow “run”.
Expression expand option in the source.
https://docs.appmixer.com/appmixer/component-definition/manifest/properties#expression
Show a hint to the user guiding them to create a new flow in Flow Manager if no flows are found.
New trigger and action marker icons have been added to the component selector in the Inspector panel to make it easier to differentiate triggers from actions.
A new trigger selector popup automatically opens by default when a new flow is created or the last trigger deleted. This guides the user to select a trigger first. This behaviour can be optionally turned off when using the SDK. See https://docs.appmixer.com/appmixer/v/6.0/appmixer-sdk/ui-and-widgets/designer#config.options.triggerselector
A new icon for variables makes it more visually clear that a variable can be modified by clicking on it.
Render brackets [] at the end of all array type of variables (for variables with JSON schema defined in the component manifest file):
Silent sign-in when passing access token in the URL.
The active tab is highlighted in the appmixer.ui.Integrations widget
.
Support Native Web Components in Custom Inspector Fields.
Font size increased in the Studio for better readability.
Introduce email argument as the third optional argument in api.signupUser(username, password, email)
.
New options for the appmixer.ui.InsightsLogs
widget (customFilter, showHistogram, filterLayout, logFilter).
New appmixer.api.sendAppEvent(). This allows you to trigger automations and integrations from your apps using a “named” event as opposed to using a generic webhook. See https://docs.appmixer.com/appmixer/getting-started/use-app-events for more information.
API Version Mismatch error is displayed only if the major or minor version of the API and SDK differs. Previously, it was shown even if the patch version was different.
Timeouts (created by context.setTimeout())
are automatically deleted after they are processed. In the previous version, timeouts might not have been correctly garbage collected in some cases (their consumption by components failed 30 times in which case they moved into the unprocessedMessages collection). In Appmixer 6.0 timeouts are correctly deleted in this scenario.
Garbage collector for continuity scopes (Mongo collection continuityScopes). Newly, continuity scopes are deleted after 100 days. This can be changed by GARBAGE_COLLECTOR_CONTINUITY_SCOPES_TTL (default value 100) and GARBAGE_COLLECTOR_CONTINUITY_SCOPES_TTL_UNIT (default value "days"). A component can increase the TTL of the continuity scope with context.setMaxWait()
https://docs.appmixer.com/appmixer/building-connectors/behaviour#context.setmaxwait-timestamp
Garbage collector for message scopes (Mongo collection messageScopes). A message scope is deleted by a job if it is not used in a timeout or continuity scope and if it is older than 7 days. This can be changed by GARBAGE_COLLECTOR_MESSAGE_SCOPES_TTL (default value 168) and GARBAGE_COLLECTOR_MESSAGE_SCOPES_TTL_UNIT (default value "hours").
POST|GET /logs API supports a new searchAfter query parameter, an example in https://docs.appmixer.com/appmixer/api/insights#query-parameters-1
A running flow cannot be updated via the API without ?forceUpdate=true in the query parameter. https://docs.appmixer.com/appmixer/api/flows#query-parameters-1
You can now inject a PWD-type account via API. https://docs.appmixer.com/appmixer/v/6.0/api/accounts
New options to control the webhooks sent to the WEBHOOK_FLOW_COMPONENT_ERROR URL.
WEBHOOK_FLOW_COMPONENT_ERROR_INCLUDE_RETRY (false by default). If a message fails and is scheduled for a retry, a webhook is not sent by default to the WEBHOOK_FLOW_COMPONENT_ERROR URL.
WEBHOOK_FLOW_COMPONENT_ERROR_INCLUDE_QUOTA (false by default). If a message cannot be processed due to insufficient quota, a webhook is not sent by default to the WEBHOOK_FLOW_COMPONENT_ERROR URL. https://docs.appmixer.com/appmixer/appmixer-backoffice/system-configuration#configuration-options
STRICT_COOKIES default value is set to false.
API_USER_CREATE_SCOPE is editable through the Backoffice without the need to restart the engine. https://docs.appmixer.com/appmixer/appmixer-backoffice/system-configuration#configuration-options
Incoming webhooks are not counted in the telemetry.
Added type property to flows. There are now 5 types of flows:
automation … Automation.
integration-template … Final published integration template.
integration-draft … Integration template that’s being edited.
integration-test … Temporary integration instance created by the Test functionality.
integration-instance … Instance of an integration template that runs in the context of an actual end-user.
The appmixer.ui.FlowManager
shows only the flows with type:automation, for example. The Integrations page displays flows with type:integration-draft
, once a draft is published, an integration-template
flow is created, and then every instance of the integration-template
has type:integration-instance
.
Context Quotas and a Slow Queue described inhttps://docs.appmixer.com/appmixer/appmixer-self-managed/configuration#context-quotas
AuthHub. Appmixer now features a central Authentication Hub, functioning as an authentication proxy, which simplifies the setup process by eliminating the need to register your own OAuth credentials with third-party services. The Authentication Hub is enabled for all hosted Appmixer tenants. In self-managed installations, the Authentication Hub has to be explicitly set. See https://docs.appmixer.com/appmixer/appmixer-self-managed/authentication-hub for more details.
Older (but compatible) versions of a connector can now be installed.
A custom scope can now be assigned to users in the Backoffice.
A connector that has been side-loaded from a filesystem can now be downloaded, same as connectors installed via the Appmixer marketplace.
Showing the installed version of a connector.
New redirectUri option for the Microsoft OneDrive module. If defined, the OneDrivePicker (used by UploadFile and ExportFile connectors) will use it instead of the default redirectUri (which is https://[your-appmixer-api-url] /plugins/appmixer/microsoft/onedrive/picker).
context.loadOutputSchemaProperties function used by the Each component fixed. Did not work properly if a component with dynamic output port options was connected to the Each.
If a module has .npmrc file, it is now used for the automatic rebuild that is triggered if Appmixer is started with a newer version of Node.
messageId added to the context.getWebhookUrl()
. This fixes scenarios such as the one shown in the picture below. In this scenario, a Continuity Scope webhook component (RequestApprovalEmail) is used behind Each component. All messages coming from the Each component have the same correlationId, but a different messageId. When a webhook arrives to the RequestApprovalEmail, the messageId and correlationId is used to find the exact scope and the flow can continue to the SendChannelMessage with the correct context (data/variables).
Admins can now see the sharedWith property of a flow. In the previous versions, the sharedWith
property was available only to the owner of the flow. Now, a user with admin scope can see/edit that property too. This allows different admin users to manage Integration templates and mainly who are the templates published to.
Enable customFilter override in the appmixer.ui.FlowManager
widget:
https://docs.appmixer.com/appmixer/appmixer-sdk/ui-and-widgets/flow-manager
New SDK method appmixer.api.authenticateWithEmailAndPassword(email, password)
https://docs.appmixer.com/appmixer/appmixer-sdk/api-module#api.authenticatewithemailandpassword
The POST /variables API endpoint did not work correctly for components that had outPorts defined completely using schema.
https://docs.appmixer.com/appmixer/building-connectors/manifest/outports
New optional query parameter for webhooks API - enqueueOnly. If true then the webhook will be enqueued and 202 returned immediately to the caller.
Possibility to override redirect/callbackUrl per service.
Fix - updating a module through the API did not update shared service level files.
Fix - inspector groups were ignored in a dynamically generated inspector (through source call in component.json).
New context function context.evalJavaScript() which allows the connector to execute untrusted code. Example https://docs.appmixer.com/appmixer/v/5.2/component-definition/behaviour#context.evaljavascript-code-jsondata
Fix for the ADD USER RULES FOR INSTALLED CONNECTORS button in the Backoffice, it added an extra dot in the rule(s).
Explore the new features in version 5.0.0 that make automation easier once again for your customers and internal teams.
The Wizard configuration now offers enhanced flexibility, allowing the inclusion of the following new sections (as opposed to just inspector fields which was the case in the previous versions of Appmixer):
Account: allows you to add an account field manually. Previously, account fields were automatically added which made it easier to configure wizards but did not allow you to: add different account sections for different components (imagine you have a flow with 2 GDrive components to upload files. Previously, you could only create a wizard that uploads to one GDrive account. Newly, you can add 2 account sections allowing the end-user to upload files to two different GDrive accounts.
Inspector Field: same as before, i.e. adding a field that represents a configuration field in the Inspector.
Inspector Fieldset: allows you to add aLL fields of a component automatically. In other words, you don’t need to add fields manually if you want the end-user to configure the entire component. This also applies to dynamic fields that you previously could not add to the Wizard (e.g. fields for adding all column values of the google.spreadsheets.CreateRow component - which are loaded dynamically based on the sheet/worksheet selected by the user and therefore are not known at design time).
Custom Field: allows you to add a completely custom field of any type (Text, Textarea, Number, Toggle, Color, Date-time, Select, Multiselect, Select button group) to collect your own custom data from the end-user:
You name your field in the “JSON path” input and then refer to it by adding the “Custom Fields” variable in your inspector fields:
And applying the “JSON path” modifier to it to select the field that you defined in the Wizard builder:
Text: add header/subheader or a paragraph of custom text to your Wizard. This is great to give additional textual information to your end-users.
Image: add any custom image to your wizards. This is great to give your end-users additional information about the integration, usually in the form of icons or infographics.
Connecting new accounts uses a minimal scope. For example, the appmixer.google.gmail module has several components. The NewEmail component requires Google authentication scopes:
"https://mail.google.com/",
And the SendEmail component requires scopes:
"https://mail.google.com/",
"https://www.googleapis.com/auth/gmail.compose",
In the previous version of Appmixer, when any Google Gmail component was authenticated, the system joined all the Google Gmail scopes together. That means that even if the user used only NewEmail and not the SendEmail component, the system asked for permission to send emails. Newly, only the scope for the component that is being authenticated will be used. This allows the user to give Appmixer only the permissions it needs to execute the particular flow/integration.
Note that if the user wants to use multiple components from the same module with different scopes, they will have to authenticate them all, and the system will create multiple tokens with the appropriate scopes.
Custom "Connect account" button in Inspector/Wizard: allows you to customize the button to authenticate to components. This is especially useful to make sure that connectors follow the developer guidelines of the vendors of the 3rd party apps, therefore making it easier for your own apps to pass the vendor’s verification procedures.
New Object Modifiers:
The Share dialog text changed:
Error message boxes now contain more information about the reason of the errors:
Authentication popups can be fully customized.
Upgraded to Node 18 (LTS). This also means that all the components need to be compatible with Node 18.
COMPONENT_RECEIVE_TIMEOUT (defaults to 23 minutes). The receive() function should return within that timeout. Otherwise, an error will be thrown and the input message will be retried.
COMPONENT_FACTORY_TIMEOUT (defaults to 5 minutes). If the engine fails to create a component instance within this time, an error will be thrown. The input message will be retried.
BROKER_MESSAGE_ACK_TIMEOUT
Textarea input type added to the connector authentication popup (Used in MongoDB connector, for example).
Output port schema options. Newly, the component output options can be defined by using JSON schema. This is especially useful if your components return arrays and you want your end-users to be able to easily work with the properties of the array item objects. Before, there was no easy way for end-users to know what properties that can point to (e.g. by using the JSON Path modifier) inside array items. With the JSON schema defined for array items, the user can newly easily select the array item properties either in the variables picker of components following the “Each” utility (i.e. when looping over the array items) or in the modifiers (Map, JSON Path, …).
Error log from a component is by default limited to 51200 bytes. This can be newly controlled by the LOG_COMPONENT_ERROR_MAX_BYTES system configuration option.
The GET /flows and GET /flows/count pattern option searches through flowId as well now:
Modules were renamed Connectors.
New Actions for Flows. Logs link to the Insights page in the Appmixer Studio with the flow preselected making it possible for admin users to explore the flow logs and therefore provide better customer support for end-users. Metrics will show the number of messages this flow generated.
Upgraded to Node 18
context.setTimeout() supported
context.lock() supported
""
""
The JSON Path modifier now supports all JSON Path expressions. ()
New function context.replaceFileStream(fileId, content).
New System Configuration options ():
GET /auth/flow/{flowId} response object structure has changed. More information in
More in
Please visit for full documentation.
MongoDB driver was updated to the newest version to support MongoDB up to version 7.0.
Fix for token refresh for the pwd authentication type https://docs.appmixer.com/appmixer/component-definition/authentication#password The username/password can be exchanged for a token that can have an expiration date. This update fixes the refresh of the token.
New redirectUri option for the Microsoft OneDrive module. If defined, the OneDrivePicker (used by UploadFile and ExportFile connectors) will use it instead of the default redirectUri (which is https://[your-appmixer-api-url] /plugins/appmixer/microsoft/onedrive/picker).
context.loadOutputSchemaProperties function used by the Each component fixed. Did not work properly if a component with dynamic output port options was connected to the Each.
If a module has .npmrc file, it is now used for the automatic rebuild that is triggered if Appmixer is started with a newer version of Node.
UI.Wizard: The account is duplicated resulting in freezing UI, fixed.
Backoffice Insights range selector fixed (includes the last month now).
date-time picker fixed, when the selected date was cleared, it ended in an invalid state.
context.service functions (loadState, stateSet, …) are available in the Flow design phase (not only during the flow runtime), so they can be used in the auxiliary components called from component.json (using the source
“static calls”).
If an OAuth2 refreshAccessToken function returns 400, 401, or 403, the token is marked as invalid (and no more attempts to refresh it will be executed).
Improved logs of Axios exceptions (size reduced).
The security of the component authentication pages (/auth-service and /auth-pre) has been improved by changing how the configuration was passed onto the pages. Previously, configuration was passed via URL query parameters. Newly, this configuration is rendered directly by the backend (Appmixer engine) making it impossible for external malicious injections.
Backoffice Insights page - To Date fixed to include the last day of the month.
date-time picker fixed, when the selected date was cleared, it ended in an invalid state.
context.service functions (loadState, stateSet, …) are available in the Flow design phase (not only during the flow runtime), so they can be used in the auxiliary components called from component.json (using the source
“static calls”).
If an OAuth2 refreshAccessToken function returns 400, 401, or 403, the token is marked as invalid (and no more attempts to refresh it will be executed).
Improved logs of Axios exceptions (size reduced).
The security of the component authentication pages (/auth-service and /auth-pre) have been improved by changing how the configuration was passed onto the pages. Previously, configuration was passed via URL query parameters. Newly, this configuration is rendered directly by the backend (Appmixer engine) making it impossible for external malicious injections.
Fix for Googlepicker. It did not open if it was used in an Integration Wizard (bug introduced in 5.1.1).
Modifiers are now applied in static calls - source (in the flow design phase). An example:
Consider a component with a dynamic input port inspector. The inspector definition is returned by calling the SourceWithModifiers component and sending it a few parameters. The entityType parameter is taken from properties and passed to the input in port of the source component. Based on the value of the user provided property entityType, the SourceWithModifiers component returns different input fields of the inspector. Now assume that the entityType value is defined with a variable and even a modifier can be applied to it.
In this example, the entityType is taken from the flow’s custom fields (and a modifier JSONPath is applied to it). In the previous versions of Appmixer the value propagated to the source component (SourceWithModifiers in this case) was not resolved, i.e. the potential variables and modifiers applied to the propagated parameter where not correctly evaluated when they reached the source component (SourceWithModifiers).
MongoDB driver was updated to the newest version to support MongoDB up to version 7.0.
Fix for token refresh for the pwd authentication type https://docs.appmixer.com/appmixer/component-definition/authentication#password The username/password can be exchanged for a token that can have an expiration date. This update fixes the refresh of the token.
A memory issue is fixed. In some cases, the memory usage was going up and the engine had to be restarted regularly. This was caused by an upgrade (in Appmixer 5) of one of the libraries (Ajv) and the way that the library caches JSON schemas.
Storage.OnItem[Added|Removed|Updated] connectors had a critical bug preventing normal operation that was fixed.
A little change in the way the engine looks for a compatible connector version. This only applies to connectors located in the file system (not published/updated through the API/CLI/Backoffice). Before this change, when upgrading to a newer version of Appmixer (to a newer Docker image with connectors), you could have seen an error: No compatible version of [component type] found for requested version [version]. This happened if that newer Docker image contained a newer version of a connector that was not stored in DB (not published/updated through the API/CLI/Backoffice).
Appmixer is now fully compatible with AWS managed services - tested with OpenSearch 2.7, DocumentDB 4.0.0, Amazon MQ 3.8.34, Amazon ElastiCache 6.2.6 and logstash 7.6.12 with OpenSearch plugin
Optional token (API keys, OAuth tokens, …) encryption (self-managed Appmixer only). https://docs.appmixer.com/appmixer/v/5.1/appmixer-self-managed/configuration#token-encryption
User files (files created in flows, or through the /files API) can be stored in MinIO/S3 storage (self-managed Appmixer only). https://docs.appmixer.com/appmixer/v/5.1/appmixer-self-managed/system-plugins#minio-s3
Added DB index to fs.files.metadata.fileType.
APPMIXER_API_URL configuration support suffix. In the previous version, it was not possible to set the URL to https://acme.com/suffix, the suffix was removed.
OneDrive and GDrive picker fixes (did not work properly, when connected account was changed).
New context.job.lock() function in the component plugin contex (used in the latest Task module 1.0.2, instead of context.lock()).
Fix for GET /variables under certain conditions resulting in - 500 - Maximum call stack size exceeded.
Wizard variables of descendants not reloaded when account changes:
Wizard Fieldset inputs did not work with variables.
Validation in Integrations Wizard did not work properly when using variables.
Fix for manifest markers in the component.json (https://docs.appmixer.com/appmixer/component-definition/manifest/marker).
Fix for checking the component’s output port message size. The output port message size is limited to 15MB, in certain cases, an input message for the component and its size was incorrectly covered in the limit, too.
Fixed bug in the context.loadOutputSchemaProperties() introduced in 5.1.1
Fixed a bug in clearing node cache before requiring component’s codes into memory.
Fix for UI/SDK code freeze in case of a large number of links/connectors in certain scenarios.
PUT /flows/{flowId} API endpoint was optimized and significantly improved performance (especially with large flows) by avoiding variables scopes check with each update.
Possibility to secure the create user (POST /user) API endpoint. This helps prevent external API calls (possibly malicious) from creating users without any authentication. Newly, a user scope can be defined using the API_USER_CREATE_SCOPE system variable which will be required when calling the POST /user endpoint. Typically, an “admin” scope is set so that only admin users can create new user accounts. See https://docs.appmixer.com/appmixer/tutorials/appmixer-virtual-users for more information.
New connector context function context.loadOutputSchemaProperties(), which is now used by the Each connector (Controls module version 1.4.4). This fixes a few issues:
When Each connector was used in a loop in the flow, it could cause a crash of an Appmixer engine.
Add variable discovery for nested props:
Given the following output schema, when applying Each on "main" it does show the properties of the items in the next step (the next connected connector) in the flow, but applying Each on "sub.subitems" does not display the properties nor Index/Value, as if it doesn't recognize it as an array at all.
Fixed a bug where the Appmixer SDK was slow with a large connector definition.
Fixed a regression in the DELETE /files API endpoint (bug introduced in 5.1.0).
Fixed a problem with a wrong connector token that was cached. If connector A used another auxiliary connector B in the component.json (typically connector A needs a list of dynamic items to be displayed in the UI and it uses a different connector to populate such a list) and the scope of the tokens for connector A and B - defined in the component.json - was different, then the engine could store the token for B in cache for the connector A. When such a flow was started, it resulted in an error, the cached token for B did not work when the connector A was called with a new message.
Fixed a bug in the Integration Wizard, creating an account did not work if the authentication file (auth.js) was on the module ([vendor]/[service]/[module]/auth.js) level and not the service ([vendor]/[service]/auth.js) level.
Node version updated to 18.16.1 and the OS switched from Linux Alpine to Debian which resolved the DNS issues for some Salesforce sandbox URLs.
Fix for GET /files?filter=userId:XYZ and GET /files/count?filter=userId:XYZ. These endpoints did not return correct results if the userId was specified in the filter and the user was not admin.
Filepicker input type shows only files created by the signed-in user. Before this, the admin users saw all the files there, but when a file that does not belong to the owner (admin) is used in a flow, the component working with that file returns an error.
Two fixes for the new Output Port JSON Scheme definition introduced in 5.0.0.
Title not showing in the Inspector’s variables picker for attributes of nested objects.
Variables with iterable ancestors showing in Inspector’s variables picker.
Fix for Wizard’s input field - it was possible to get into an invalid state.
Authentication popup handling improved.
When a service (appmixer:microsoft for example) contained two plugins, it was possible that while loading such a plugin under a newer Node version (node_modules being re-installed), the plugin files could get corrupted.
Inspector Field max width overflow.