+ ⭐ If you like what we are doing with Automatisch, please give us a
+ star on
+ GitHub.
+
+
+
+
diff --git a/packages/docs/pages/.vitepress/theme/custom.css b/packages/docs/pages/.vitepress/theme/custom.css
index 98e5409..8ac3296 100644
--- a/packages/docs/pages/.vitepress/theme/custom.css
+++ b/packages/docs/pages/.vitepress/theme/custom.css
@@ -117,9 +117,33 @@
:root {
overflow-y: scroll;
+
+ --announcement-bar-height: 50px;
}
.VPTeamMembersItem .avatar-img {
top: 50%;
transform: translateY(-50%);
}
+
+header.VPNav {
+ margin-top: 50px;
+}
+
+.VPNavScreen.VPNavScreen {
+ top: calc(var(--announcement-bar-height) + var(--vp-nav-height-mobile));
+}
+
+.VPLocalNav.VPLocalNav {
+ top: 50px;
+}
+
+aside.VPSidebar {
+ margin-top: 50px;
+}
+
+@media (min-width: 960px) {
+ #VPContent {
+ margin-top: 50px;
+ }
+}
diff --git a/packages/docs/pages/.vitepress/theme/index.js b/packages/docs/pages/.vitepress/theme/index.js
index d4dbe3d..75eaece 100644
--- a/packages/docs/pages/.vitepress/theme/index.js
+++ b/packages/docs/pages/.vitepress/theme/index.js
@@ -1,3 +1,8 @@
import DefaultTheme from 'vitepress/theme';
import './custom.css';
-export default DefaultTheme;
+import CustomLayout from './CustomLayout.vue';
+
+export default {
+ ...DefaultTheme,
+ Layout: CustomLayout,
+};
diff --git a/packages/docs/pages/advanced/configuration.md b/packages/docs/pages/advanced/configuration.md
index 88d90ba..c861f7c 100644
--- a/packages/docs/pages/advanced/configuration.md
+++ b/packages/docs/pages/advanced/configuration.md
@@ -11,28 +11,31 @@ The default values for some environment variables might be different in our deve
:::
:::danger
-Please be careful with the `ENCRYPTION_KEY` environment variable. It is used to encrypt your credentials from third-party services. If you change it, you will not be able to access your connections and thus, your existing flows and connections will be useless.
+Please be careful with the `ENCRYPTION_KEY` and `WEBHOOK_SECRET_KEY` environment variables. They are used to encrypt your credentials from third-party services and verify webhook requests. If you change them, your existing connections and flows will not continue to work.
:::
-| Variable Name | Type | Default Value | Description |
-| --------------------------- | ------- | ------------------ | ----------------------------------- |
-| `HOST` | string | `localhost` | HTTP Host |
-| `PROTOCOL` | string | `http` | HTTP Protocol |
-| `PORT` | string | `3000` | HTTP Port |
-| `APP_ENV` | string | `production` | Automatisch Environment |
-| `POSTGRES_DATABASE` | string | `automatisch` | Database Name |
-| `POSTGRES_PORT` | number | `5432` | Database Port |
-| `POSTGRES_HOST` | string | `postgres` | Database Host |
-| `POSTGRES_USERNAME` | string | `automatisch_user` | Database User |
-| `POSTGRES_PASSWORD` | string | | Password of Database User |
-| `ENCRYPTION_KEY` | string | | Encryption Key to store credentials |
-| `APP_SECRET_KEY` | string | | Secret Key to authenticate the user |
-| `REDIS_HOST` | string | `redis` | Redis Host |
-| `REDIS_PORT` | number | `6379` | Redis Port |
-| `REDIS_USERNAME` | string | `` | Redis Username |
-| `REDIS_PASSWORD` | string | `` | Redis Password |
-| `REDIS_TLS` | boolean | `false` | Redis TLS |
-| `TELEMETRY_ENABLED` | boolean | `true` | Enable/Disable Telemetry |
-| `ENABLE_BULLMQ_DASHBOARD` | boolean | `false` | Enable BullMQ Dashboard |
-| `BULLMQ_DASHBOARD_USERNAME` | string | | Username to login BullMQ Dashboard |
-| `BULLMQ_DASHBOARD_PASSWORD` | string | | Password to login BullMQ Dashboard |
+| Variable Name | Type | Default Value | Description |
+| --------------------------- | ------- | ------------------ | ---------------------------------------------------- |
+| `HOST` | string | `localhost` | HTTP Host |
+| `PROTOCOL` | string | `http` | HTTP Protocol |
+| `PORT` | string | `3000` | HTTP Port |
+| `APP_ENV` | string | `production` | Automatisch Environment |
+| `WEB_APP_URL` | string | | Can be used to override connection URLs and CORS URL |
+| `WEBHOOK_URL` | string | | Can be used to override webhook URL |
+| `POSTGRES_DATABASE` | string | `automatisch` | Database Name |
+| `POSTGRES_PORT` | number | `5432` | Database Port |
+| `POSTGRES_HOST` | string | `postgres` | Database Host |
+| `POSTGRES_USERNAME` | string | `automatisch_user` | Database User |
+| `POSTGRES_PASSWORD` | string | | Password of Database User |
+| `ENCRYPTION_KEY` | string | | Encryption Key to store credentials |
+| `WEBHOOK_SECRET_KEY` | string | | Webhook Secret Key to verify webhook requests |
+| `APP_SECRET_KEY` | string | | Secret Key to authenticate the user |
+| `REDIS_HOST` | string | `redis` | Redis Host |
+| `REDIS_PORT` | number | `6379` | Redis Port |
+| `REDIS_USERNAME` | string | | Redis Username |
+| `REDIS_PASSWORD` | string | | Redis Password |
+| `REDIS_TLS` | boolean | `false` | Redis TLS |
+| `TELEMETRY_ENABLED` | boolean | `true` | Enable/Disable Telemetry |
+| `ENABLE_BULLMQ_DASHBOARD` | boolean | `false` | Enable BullMQ Dashboard |
+| `BULLMQ_DASHBOARD_USERNAME` | string | | Username to login BullMQ Dashboard |
+| `BULLMQ_DASHBOARD_PASSWORD` | string | | Password to login BullMQ Dashboard |
diff --git a/packages/docs/pages/advanced/credentials.md b/packages/docs/pages/advanced/credentials.md
index f1223ac..e30a88a 100644
--- a/packages/docs/pages/advanced/credentials.md
+++ b/packages/docs/pages/advanced/credentials.md
@@ -5,5 +5,5 @@ We need to store your credentials in order to automatically communicate with thi
Automatisch uses AES specification to encrypt and decrypt your credentials of third-party services. The Advanced Encryption Standard (AES) is a U.S. Federal Information Processing Standard (FIPS). It was selected after a 5-year process where 15 competing designs were evaluated. AES is now used worldwide to protect sensitive information.
:::danger
-Please be careful with the `ENCRYPTION_KEY` environment variable. It is used to encrypt your credentials from third-party services. If you change it, you will not be able to access your connections and thus, your existing flows and connections will be useless.
+Please be careful with the `ENCRYPTION_KEY` and `WEBHOOK_SECRET_KEY` environment variables. They are used to encrypt your credentials from third-party services and verify webhook requests. If you change them, your existing connections and flows will not continue to work.
:::
diff --git a/packages/docs/pages/apps/delay/actions.md b/packages/docs/pages/apps/delay/actions.md
new file mode 100644
index 0000000..00e1495
--- /dev/null
+++ b/packages/docs/pages/apps/delay/actions.md
@@ -0,0 +1,14 @@
+---
+favicon: /favicons/delay.svg
+items:
+ - name: Delay For
+ desc: Delays the execution of the next action by a specified amount of time.
+ - name: Delay Until
+ desc: Delays the execution of the next action until a specified date.
+---
+
+
+
+
diff --git a/packages/docs/pages/apps/delay/connection.md b/packages/docs/pages/apps/delay/connection.md
new file mode 100644
index 0000000..a2eec35
--- /dev/null
+++ b/packages/docs/pages/apps/delay/connection.md
@@ -0,0 +1,3 @@
+# Delay
+
+Delay is a built-in app shipped with Automatisch, and it doesn't need to talk with any other external service to run. So there are no additional steps to use the Delay app. It can be used only as an action and it delays the execution of the next action by a specified amount of time.
diff --git a/packages/docs/pages/apps/ntfy/actions.md b/packages/docs/pages/apps/ntfy/actions.md
new file mode 100644
index 0000000..efc1bfb
--- /dev/null
+++ b/packages/docs/pages/apps/ntfy/actions.md
@@ -0,0 +1,12 @@
+---
+favicon: /favicons/ntfy.svg
+items:
+ - name: Send a message
+ desc: Sends a message to a topic you specify.
+---
+
+
+
+
diff --git a/packages/docs/pages/apps/ntfy/connection.md b/packages/docs/pages/apps/ntfy/connection.md
new file mode 100644
index 0000000..d2d81ac
--- /dev/null
+++ b/packages/docs/pages/apps/ntfy/connection.md
@@ -0,0 +1,10 @@
+# Ntfy
+
+:::info
+This page explains the steps you need to follow to set up the Ntfy
+connection in Automatisch. If any of the steps are outdated, please let us know!
+:::
+
+If you use ntfy.sh, the official public server for this service, you do not need to set up a connection with a custom configuration. It's enough to create one with the default server URL.
+
+However, if you have a ntfy installation, that's different than ntfy.sh, you need to specify your server URL on Automatisch while creating a connection. Additionally, you may need to provide your username and password if your installation requires authentication.
diff --git a/packages/docs/pages/apps/telegram-bot/actions.md b/packages/docs/pages/apps/telegram-bot/actions.md
new file mode 100644
index 0000000..261d241
--- /dev/null
+++ b/packages/docs/pages/apps/telegram-bot/actions.md
@@ -0,0 +1,12 @@
+---
+favicon: /favicons/telegram-bot.svg
+items:
+ - name: Send a message
+ desc: Sends a message to a chat you specify.
+---
+
+
+
+
diff --git a/packages/docs/pages/apps/telegram-bot/connection.md b/packages/docs/pages/apps/telegram-bot/connection.md
new file mode 100644
index 0000000..4a015cc
--- /dev/null
+++ b/packages/docs/pages/apps/telegram-bot/connection.md
@@ -0,0 +1,14 @@
+# Telegram
+
+:::info
+This page explains the steps you need to follow to set up the Telegram
+connection in Automatisch. If any of the steps are outdated, please let us know!
+:::
+
+1. Start a chat with [Botfather](https://telegram.me/BotFather).
+1. Enter `/newbot`.
+1. Enter a name for your bot.
+1. Enter a username for your bot.
+1. Copy the **token** value from the answer to the **Bot token** field on Automatisch.
+1. Click **Submit** button on Automatisch.
+1. Congrats! Start using your new Telegram connection within the flows.
diff --git a/packages/docs/pages/apps/webhooks/connection.md b/packages/docs/pages/apps/webhooks/connection.md
new file mode 100644
index 0000000..a38b7e9
--- /dev/null
+++ b/packages/docs/pages/apps/webhooks/connection.md
@@ -0,0 +1,7 @@
+# Webhooks
+
+Webhooks is a built-in app shipped with Automatisch, and it doesn't need to authenticate with any other external service to run.
+
+## How to use
+
+You will be given a webhook URL in the test substep on the editor page, and you can use it to send a GET, POST, PUT, or PATCH request to Automatisch to trigger the flow.
diff --git a/packages/docs/pages/apps/webhooks/triggers.md b/packages/docs/pages/apps/webhooks/triggers.md
new file mode 100644
index 0000000..9dda3c3
--- /dev/null
+++ b/packages/docs/pages/apps/webhooks/triggers.md
@@ -0,0 +1,12 @@
+---
+favicon: /favicons/webhooks.svg
+items:
+ - name: Catch raw webhook
+ desc: Triggers when the webhook receives a request.
+---
+
+
+
+
diff --git a/packages/docs/pages/build-integrations/examples.md b/packages/docs/pages/build-integrations/examples.md
index 4a957a1..308be03 100644
--- a/packages/docs/pages/build-integrations/examples.md
+++ b/packages/docs/pages/build-integrations/examples.md
@@ -49,6 +49,10 @@ The build integrations section is best understood when read from beginning to en
### Webhook-based triggers
+:::warning
+If you are developing a webhook-based trigger, you need to ensure that the webhook is publicly accessible. You can use [ngrok](https://ngrok.com) for this purpose and override the webhook URL by setting the **WEBHOOK_URL** environment variable.
+:::
+
- [New entry - Typeform](https://github.com/automatisch/automatisch/tree/main/packages/backend/src/apps/typeform/triggers/new-entry/index.ts)
### Pagination with descending order
diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md
index 5697771..2edd2db 100644
--- a/packages/docs/pages/guide/available-apps.md
+++ b/packages/docs/pages/guide/available-apps.md
@@ -7,14 +7,19 @@ We just have a few available integrations at the moment and we also know that wo
Following integrations are currently supported by Automatisch.
- [DeepL](/apps/deepl/actions)
+- [Delay](/apps/delay/actions)
- [Discord](/apps/discord/actions)
- [Flickr](/apps/flickr/triggers)
- [Github](/apps/github/triggers)
- [RSS](/apps/rss/triggers)
+- [Ntfy](/apps/ntfy/triggers)
- [Salesforce](/apps/salesforce/triggers)
- [Scheduler](/apps/scheduler/triggers)
- [Slack](/apps/slack/actions)
- [SMTP](/apps/smtp/actions)
- [Stripe](/apps/stripe/triggers)
+- [Telegram](/apps/telegram-bot/actions)
- [Twilio](/apps/twilio/triggers)
- [Twitter](/apps/twitter/triggers)
+- [Typeform](/apps/typeform/triggers)
+- [Webhooks](/apps/webhooks/triggers)
diff --git a/packages/docs/pages/guide/create-flow.md b/packages/docs/pages/guide/create-flow.md
index a099036..4f7e849 100644
--- a/packages/docs/pages/guide/create-flow.md
+++ b/packages/docs/pages/guide/create-flow.md
@@ -1 +1,53 @@
-TBD
+# Create Flow
+
+To understand how we can create a flow, it's better to start with a real use case. Let's say we want to create a flow that will fetch new submissions from Typeform and then send them to a Slack channel. To do that, we will use [Typeform](/apps/typeform/triggers) and [Slack](/apps/slack/actions) apps. Let's start with creating connections for these apps.
+
+## Typeform connection
+
+- Go to the **My Apps** page in Automatisch and click on **Add connection** button.
+- Select the **Typeform** app from the list.
+- It will ask you `Client ID` and `Client Secret` from Typeform and there is an information box above the fields.
+- Click on **our documentation** link in the information box and follow the instructions to get the `Client ID` and `Client Secret` from Typeform.
+
+:::tip
+Whenever you want to create a connection for an app, you can click on **our documentation** link in the information box to learn how to create a connection for that specific app.
+:::
+
+- After you get the `Client ID` and `Client Secret` from Typeform, you can paste them to the fields in Automatisch and click on **Submit** button.
+
+## Slack connection
+
+- Go to the **My Apps** page in Automatisch and click on **Add connection** button.
+- Select the **Slack** app from the list.
+- It will ask you `API Key` and `API Secret` values from Slack and there is an information box above the fields.
+- Click on **our documentation** link in the information box and follow the instructions to get the `API Key` and `API Secret` from Slack.
+- After you get the `API Key` and `API Secret` from Slack, you can paste them into the fields in Automatisch and click on **Submit** button.
+
+## Build the flow
+
+### Trigger step
+
+- Go to the **Flows** page in Automatisch and click on **Create flow** button.
+- It will give you empty trigger and action steps.
+- For the trigger step (1st step), select the **Typeform** app from `Choose an app` dropdown.
+- Select the **New entry** as the trigger event and click on the **Continue** button.
+- It will ask you to select the connection you created for the Typeform app. Select the connection you have just created and click on the **Continue** button.
+- Select the form you want to get the new entries from and click on the **Continue** button.
+- Click on **Test & Continue** button to test the trigger step. If you see the data that reflects the recent submission in the form, you can continue to the next (action) step.
+
+### Action step
+
+- For the action step (2nd step), select the **Slack** app from `Choose an app` dropdown.
+- Select the **Send a message to channel** as the action event and click on the **Continue** button.
+- It will ask you to select the connection you created for the Slack app. Select the connection you have just created and click on the **Continue** button.
+- Select the channel you want to send the message to.
+- Write the message you want to send to the channel. You can use variables in the message from the trigger step.
+- Select `Yes` for the `Send as a bot` option.
+- Give a name for the bot and click on the **Continue** button.
+- Click on **Test & Continue** button to test the action step. If you see the message in the Slack channel you selected, we can say that the flow is working as expected and is ready to be published.
+
+### Publish the flow
+
+- Click on the **Publish** button to publish the flow.
+- Published flows will be executed automatically when the trigger event happens or at intervals of 15 minutes depending on the trigger type.
+- You can not change the flow after it's published. If you want to change the flow, you need to unpublish it first and then make the changes.
diff --git a/packages/docs/pages/guide/installation.md b/packages/docs/pages/guide/installation.md
index 376a71b..91fa423 100644
--- a/packages/docs/pages/guide/installation.md
+++ b/packages/docs/pages/guide/installation.md
@@ -1,6 +1,20 @@
# Installation
-You can install Automatisch by using docker compose.
+:::info
+We have installation guides for docker compose and docker setup at the moment, but if you need another installation type, let us know by [creating a GitHub issue](https://github.com/automatisch/automatisch/issues/new).
+:::
+
+:::tip
+
+You can use `user@automatisch.io` email address and `sample` password to login to Automatisch. Please do not forget to change your email and password from the settings page.
+
+:::
+
+:::danger
+Please be careful with the `ENCRYPTION_KEY` and `WEBHOOK_SECRET_KEY` environment variables. They are used to encrypt your credentials from third-party services and verify webhook requests. If you change them, your existing connections and flows will not continue to work.
+:::
+
+## Docker Compose
```bash
# Clone the repository
@@ -10,17 +24,72 @@ git clone git@github.com:automatisch/automatisch.git
cd automatisch
# Start
-docker compose -p automatisch up
+docker compose up
```
-## Let's discover!
+✌️ That's it; you have Automatisch running. Let's check it out by browsing [http://localhost:3000](https://localhost:3000)
-✌️ That's it; you have Automatisch running. Let's check it out by browsing `http://localhost:3000`
+## Docker
-:::tip
+Automatisch comes with two services which are `main` and `worker`. They both use the same image and need to have the same environment variables except for the `WORKER` environment variable which is set to `true` for the worker service.
-You can use `user@automatisch.io` email address and `sample` password to login to Automatisch. You can also change your email and password later on from the settings page.
+::: warning
+We give the sample environment variable files for the setup but you should adjust them to include your own values.
+:::
+
+To run the main:
+
+```bash
+docker run --env-file=./.env automatischio/automatisch
+```
+
+To run the worker:
+
+```bash
+docker run --env-file=./.env -e WORKER=true automatischio/automatisch
+```
+
+::: details .env
+
+```bash
+APP_ENV=production
+HOST=
+PROTOCOL=
+PORT=
+ENCRYPTION_KEY=
+WEBHOOK_SECRET_KEY=
+APP_SECRET_KEY=
+POSTGRES_HOST=
+POSTGRES_PORT=
+POSTGRES_DATABASE=
+POSTGRES_USERNAME=
+POSTGRES_PASSWORD=
+POSTGRES_ENABLE_SSL=
+REDIS_HOST=
+REDIS_PORT=
+REDIS_USERNAME=
+REDIS_PASSWORD=
+REDIS_TLS=
+```
:::
+## Render
+
+
+
+
+
+:::info
+
+We use default values of render plans with the `render.yaml` file, if you want to use the free plan or change the plan, you can change the `render.yaml` file in your fork and use your repository URL while creating a blueprint in Render.
+
+:::
+
+## Production setup
+
+If you need to change any other environment variables for your production setup, let's check out the [environment variables](/advanced/configuration#environment-variables) section of the configuration page.
+
+## Let's discover!
+
If you see any problems while installing Automatisch, let us know via [github issues](https://github.com/automatisch/automatisch/issues) or our [discord server](https://discord.gg/dJSah9CVrC).
diff --git a/packages/docs/pages/index.md b/packages/docs/pages/index.md
index 437ff62..864a34f 100644
--- a/packages/docs/pages/index.md
+++ b/packages/docs/pages/index.md
@@ -28,7 +28,7 @@ You need to prepare the workflow once, and it will run continuously until you st
There are other existing solutions in the market, like Zapier and Integromat, so you might be wondering why you should use Automatisch.
-✅ The most significant advantage of having Automatisch is **keeping your data on your own servers**. Not all companies want to use an automation service in the cloud, and the current open-source or self-hosted solutions mainly focus on developers rather than a user without a technical background.
+✅ One of the main benefits of using Automatisch is that it allows you to **store your data on your own servers**, which is essential for businesses that handle sensitive user information and cannot risk sharing it with external cloud services. This is especially relevant for industries such as healthcare and finance, as well as for European companies that must adhere to the General Data Protection Regulation (GDPR).
🤓 Your contributions are vital to the development of Automatisch. As an **open-source software**, anyone can have an impact on how it is being developed.
diff --git a/packages/docs/pages/public/favicons/delay.svg b/packages/docs/pages/public/favicons/delay.svg
new file mode 100644
index 0000000..af5da4d
--- /dev/null
+++ b/packages/docs/pages/public/favicons/delay.svg
@@ -0,0 +1,7 @@
+
diff --git a/packages/docs/pages/public/favicons/ntfy.svg b/packages/docs/pages/public/favicons/ntfy.svg
new file mode 100644
index 0000000..9e5b513
--- /dev/null
+++ b/packages/docs/pages/public/favicons/ntfy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/docs/pages/public/favicons/telegram-bot.svg b/packages/docs/pages/public/favicons/telegram-bot.svg
new file mode 100644
index 0000000..8f16fb1
--- /dev/null
+++ b/packages/docs/pages/public/favicons/telegram-bot.svg
@@ -0,0 +1,14 @@
+
+
\ No newline at end of file
diff --git a/packages/docs/pages/public/favicons/webhooks.svg b/packages/docs/pages/public/favicons/webhooks.svg
new file mode 100644
index 0000000..894b13e
--- /dev/null
+++ b/packages/docs/pages/public/favicons/webhooks.svg
@@ -0,0 +1,8 @@
+
diff --git a/packages/e2e-tests/package.json b/packages/e2e-tests/package.json
index dbdee1c..10c1faf 100644
--- a/packages/e2e-tests/package.json
+++ b/packages/e2e-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@automatisch/e2e-tests",
- "version": "0.2.0",
+ "version": "0.3.0",
"license": "AGPL-3.0",
"private": true,
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts
index 0b2fb1f..7f56d0e 100644
--- a/packages/types/index.d.ts
+++ b/packages/types/index.d.ts
@@ -54,6 +54,7 @@ export interface IStep {
key?: string;
appKey?: string;
iconUrl: string;
+ webhookUrl: string;
type: 'action' | 'trigger';
connectionId?: string;
status: string;
@@ -75,6 +76,7 @@ export interface IFlow {
steps: IStep[];
createdAt: string;
updatedAt: string;
+ remoteWebhookId: string;
lastInternalId: () => Promise;
}
@@ -180,23 +182,16 @@ export interface IDynamicData {
export interface IAuth {
generateAuthUrl?($: IGlobalVariable): Promise;
- verifyCredentials($: IGlobalVariable): Promise;
- isStillVerified($: IGlobalVariable): Promise;
+ verifyCredentials?($: IGlobalVariable): Promise;
+ isStillVerified?($: IGlobalVariable): Promise;
refreshToken?($: IGlobalVariable): Promise;
verifyWebhook?($: IGlobalVariable): Promise;
isRefreshTokenRequested?: boolean;
- fields: IField[];
+ fields?: IField[];
authenticationSteps?: IAuthenticationStep[];
reconnectionSteps?: IAuthenticationStep[];
}
-export interface IService {
- authenticationClient?: IAuthentication;
- triggers?: any;
- actions?: any;
- data?: any;
-}
-
export interface ITriggerOutput {
data: ITriggerItem[];
error?: IJSONObject;
@@ -285,6 +280,8 @@ export type IGlobalVariable = {
id: string;
lastInternalId: string;
isAlreadyProcessed?: (internalId: string) => boolean;
+ remoteWebhookId?: string;
+ setRemoteWebhookId?: (remoteWebhookId: string) => Promise;
};
step?: {
id: string;
@@ -300,6 +297,7 @@ export type IGlobalVariable = {
id: string;
testRun: boolean;
};
+ lastExecutionStep?: IExecutionStep;
webhookUrl?: string;
triggerOutput?: ITriggerOutput;
actionOutput?: IActionOutput;
diff --git a/packages/types/package.json b/packages/types/package.json
index 0936b68..225f6eb 100644
--- a/packages/types/package.json
+++ b/packages/types/package.json
@@ -1,6 +1,6 @@
{
"name": "@automatisch/types",
- "version": "0.2.0",
+ "version": "0.3.0",
"license": "AGPL-3.0",
"description": "Type definitions for automatisch",
"homepage": "https://github.com/automatisch/automatisch",
diff --git a/packages/web/package.json b/packages/web/package.json
index b7e91f7..2e7e780 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -1,11 +1,11 @@
{
"name": "@automatisch/web",
- "version": "0.2.0",
+ "version": "0.3.0",
"license": "AGPL-3.0",
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
"dependencies": {
"@apollo/client": "^3.6.9",
- "@automatisch/types": "^0.2.0",
+ "@automatisch/types": "^0.3.0",
"@emotion/react": "^11.4.1",
"@emotion/styled": "^11.3.0",
"@hookform/resolvers": "^2.8.8",
diff --git a/packages/web/src/components/AddAppConnection/index.tsx b/packages/web/src/components/AddAppConnection/index.tsx
index 7b54e0f..e1581b3 100644
--- a/packages/web/src/components/AddAppConnection/index.tsx
+++ b/packages/web/src/components/AddAppConnection/index.tsx
@@ -6,22 +6,15 @@ import DialogContentText from '@mui/material/DialogContentText';
import Dialog from '@mui/material/Dialog';
import LoadingButton from '@mui/lab/LoadingButton';
import { FieldValues, SubmitHandler } from 'react-hook-form';
-import { IJSONObject } from '@automatisch/types';
+import type { IApp, IJSONObject, IField } from '@automatisch/types';
import useFormatMessage from 'hooks/useFormatMessage';
import computeAuthStepVariables from 'helpers/computeAuthStepVariables';
import { processStep } from 'helpers/authenticationSteps';
import InputCreator from 'components/InputCreator';
-import type { IApp, IField } from '@automatisch/types';
+import { generateExternalLink } from '../../helpers/translation-values';
import { Form } from './style';
-const generateDocsLink = (link: string) => (str: string) =>
- (
-
- {str}
-
- );
-
type AddAppConnectionProps = {
onClose: (response: Record) => void;
application: IApp;
@@ -112,7 +105,7 @@ export default function AddAppConnection(
{formatMessage('addAppConnection.callToDocs', {
appName: name,
- docsLink: generateDocsLink(authDocUrl),
+ docsLink: generateExternalLink(authDocUrl),
})}
)}
@@ -123,7 +116,7 @@ export default function AddAppConnection(
sx={{ mt: 1, fontWeight: 500, wordBreak: 'break-all' }}
>
{error.message}
-
{JSON.stringify(error.details, null, 2)}
+ {error.details &&
{JSON.stringify(error.details, null, 2)}
}
)}
diff --git a/packages/web/src/components/AddNewAppConnection/index.tsx b/packages/web/src/components/AddNewAppConnection/index.tsx
index 8b6cd30..bbd95d8 100644
--- a/packages/web/src/components/AddNewAppConnection/index.tsx
+++ b/packages/web/src/components/AddNewAppConnection/index.tsx
@@ -18,6 +18,7 @@ import ListItemText from '@mui/material/ListItemText';
import InputLabel from '@mui/material/InputLabel';
import OutlinedInput from '@mui/material/OutlinedInput';
import FormControl from '@mui/material/FormControl';
+import Box from '@mui/material/Box';
import type { IApp } from '@automatisch/types';
import * as URLS from 'config/urls';
@@ -76,7 +77,7 @@ export default function AddNewAppConnection(