Compare commits

...

37 Commits

Author SHA1 Message Date
Faruk AYDIN
fedbd66f8e Release v.0.5.0 2023-02-08 12:42:38 +01:00
Faruk AYDIN
2be8e14f66 feat(http-request): cover file downloads 2023-02-07 21:48:52 +01:00
Faruk AYDIN
9cfaa9e603 feat(salesforce): Implement create attachment integration 2023-02-07 21:15:44 +01:00
Ali BARIN
48653c7590 feat(slack/list-channels): add private and exclude archived channels 2023-02-06 00:47:41 +01:00
Ömer Faruk Aydın
72450b6305 Merge pull request #872 from automatisch/primitive-custom-http-request
feat(http-request): introduce custom request action
2023-02-06 00:21:37 +01:00
dependabot[bot]
7d22a1c105 chore(deps): bump http-cache-semantics from 4.1.0 to 4.1.1
Bumps [http-cache-semantics](https://github.com/kornelski/http-cache-semantics) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kornelski/http-cache-semantics/releases)
- [Commits](https://github.com/kornelski/http-cache-semantics/compare/v4.1.0...v4.1.1)

---
updated-dependencies:
- dependency-name: http-cache-semantics
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-04 12:58:23 +01:00
Ali BARIN
08ac3fb984 docs(http-request): add custom request action 2023-02-02 22:34:42 +00:00
Ali BARIN
2f64a074c6 feat(http-request): introduce custom request action 2023-02-02 22:30:07 +00:00
Donghoon Song
f98c797311 fix: readme git clone commannd
Current command needs public key so access is denied.
2023-02-01 22:12:45 +01:00
Ömer Faruk Aydın
d81fb14b04 Merge pull request #870 from automatisch/slack-search-user-by-email
feat(slack): add find user by email action
2023-01-31 15:15:37 +01:00
Ali BARIN
01bb1259eb feat(slack): add find user by email action 2023-01-30 23:39:00 +00:00
Ali BARIN
1118d025bf chore: add hostRequirements in devcontainer 2023-01-31 00:23:50 +01:00
Ali BARIN
146f0604c3 docs(salesforce): add find record action 2023-01-31 00:19:51 +01:00
Ali BARIN
f90afe8b37 feat(salesforce): add find record action 2023-01-31 00:19:51 +01:00
Ali BARIN
fff5306fa6 chore: introduce .devcontainer 2023-01-30 13:47:30 +01:00
Ali BARIN
078ea24cd2 feat: request increase body size limit to 1mb 2023-01-29 13:53:32 +01:00
Ali BARIN
85a3558074 docs(ntfy): use actions page for app listing 2023-01-25 11:58:52 +01:00
Ali BARIN
73a9ae1c9c docs(twitter): remove duplicate items 2023-01-25 11:26:19 +01:00
dependabot[bot]
2222ede420 chore(deps): bump knex from 0.95.15 to 2.4.0
Bumps [knex](https://github.com/knex/knex) from 0.95.15 to 2.4.0.
- [Release notes](https://github.com/knex/knex/releases)
- [Changelog](https://github.com/knex/knex/blob/master/CHANGELOG.md)
- [Commits](https://github.com/knex/knex/commits/2.4.0)

---
updated-dependencies:
- dependency-name: knex
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-01-20 18:01:10 +01:00
Ömer Faruk Aydın
c6d80a9b0e Merge pull request #856 from automatisch/search-user-in-twitter
feat(twitter): add search user action
2023-01-20 15:38:26 +03:00
Ömer Faruk Aydın
23c4414398 Merge pull request #852 from automatisch/openai-send-prompt
feat(openai): add send prompt action
2023-01-20 15:14:05 +03:00
Ömer Faruk Aydın
8b9320bbf9 Merge pull request #851 from automatisch/openai-check-moderation
feat(openai): add moderation action
2023-01-20 15:07:45 +03:00
Katriel Tsepelevish
a8ac288f17 fix(todoist): Add missing OAuth redirect URL field 2023-01-19 18:42:44 +01:00
Ali BARIN
ffe7de6774 docs(twitter): add search user action 2023-01-19 17:56:58 +01:00
Ali BARIN
d87a826493 feat(twitter): sign querystring in requests 2023-01-19 17:56:39 +01:00
Ali BARIN
645fe29060 feat(twitter): add search user action 2023-01-19 17:55:59 +01:00
Ali BARIN
4db738a7f6 docs(openai): add send prompt action 2023-01-18 22:41:53 +01:00
Ali BARIN
253c2c4317 feat(openai): add send prompt action 2023-01-18 22:41:53 +01:00
Ali BARIN
49755303f7 feat(openai): add list models dynamic data 2023-01-18 22:41:53 +01:00
Ali BARIN
1e137f0bd8 docs(openai): describe auth and check moderation action 2023-01-18 22:41:35 +01:00
Ali BARIN
c2579b1850 feat(openai): add moderation action 2023-01-18 22:41:34 +01:00
Ali BARIN
577d5215cd feat(openai): add app with auth 2023-01-18 22:41:34 +01:00
Ali BARIN
0870fa7e8f fix(typeform): add HTTP 403 to refresh token 2023-01-18 22:41:10 +01:00
Katriel Tsepelevish
ddb3795985 chore(backend): Provide HTTP url on server launch up 2023-01-15 17:24:22 +01:00
Ali BARIN
45e98cd5b7 fix(Editor): fetch webhookUrl upon updating step 2023-01-14 19:15:55 +01:00
Faruk AYDIN
4a99b7a3f2 chore: Update version in Dockerfiles with 0.4.0 2023-01-13 17:09:49 +01:00
Faruk AYDIN
985132da78 Release v0.4.0 2023-01-13 17:09:49 +01:00
61 changed files with 855 additions and 73 deletions

1
.devcontainer/Dockerfile Normal file
View File

@@ -0,0 +1 @@
FROM mcr.microsoft.com/vscode/devcontainers/base:ubuntu-22.04

48
.devcontainer/boot.sh Normal file
View File

@@ -0,0 +1,48 @@
#!/bin/bash
CURRENT_DIR="$(pwd)"
BACKEND_PORT=3000
WEB_PORT=3001
echo "Configuring backend environment variables..."
cd packages/backend
rm -rf .env
echo "
HOST=localhost
PROTOCOL=http
PORT=$BACKEND_PORT
WEB_APP_URL=https://$CODESPACE_NAME-$WEB_PORT.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
APP_ENV=development
POSTGRES_DATABASE=automatisch
POSTGRES_PORT=5432
POSTGRES_HOST=postgres
POSTGRES_USERNAME=automatisch_user
POSTGRES_PASSWORD=automatisch_password
ENCRYPTION_KEY=sample_encryption_key
WEBHOOK_SECRET_KEY=sample_webhook_secret_key
APP_SECRET_KEY=sample_app_secret_key
REDIS_HOST=redis
SERVE_WEB_APP_SEPARATELY=true" >> .env
cd $CURRENT_DIR
echo "Configuring web environment variables..."
cd packages/web
rm -rf .env
echo "
PORT=$WEB_PORT
REACT_APP_GRAPHQL_URL=https://$CODESPACE_NAME-$BACKEND_PORT.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN/graphql
REACT_APP_BASE_URL=https://$CODESPACE_NAME-$WEB_PORT.$GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN
REACT_APP_NOTIFICATIONS_URL=https://notifications.automatisch.io
" >> .env
cd $CURRENT_DIR
echo "Installing and linking dependencies..."
yarn
yarn lerna bootstrap
echo "Migrating database..."
cd packages/backend
yarn db:migrate
yarn db:seed:user
echo "Done!"

View File

@@ -0,0 +1,53 @@
{
"name": "Automatisch",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspace",
"features": {
"ghcr.io/devcontainers/features/git:1": {
"version": "latest"
},
"ghcr.io/devcontainers/features/node:1": {
"version": 16
},
"ghcr.io/devcontainers/features/common-utils:1": {
"username": "vscode",
"uid": 1000,
"gid": 1000,
"installZsh": true,
"installOhMyZsh": true,
"configureZshAsDefaultShell": true,
"upgradePackages": true
}
},
"hostRequirements": {
"cpus": 4,
"memory": "8gb",
"storage": "32gb"
},
"portsAttributes": {
"3000": {
"label": "Backend",
"onAutoForward": "silent",
"protocol": "http"
},
"3001": {
"label": "Frontend",
"onAutoForward": "silent",
"protocol": "http"
}
},
"forwardPorts": [3000, 3001],
// Use 'postCreateCommand' to run commands after the container is created.
"postCreateCommand": ["bash", ".devcontainer/boot.sh"]
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "root"
}

View File

@@ -0,0 +1,31 @@
version: '3.9'
services:
app:
build:
context: ..
dockerfile: .devcontainer/Dockerfile
volumes:
- ..:/workspace:cached
command: sleep infinity
postgres:
image: 'postgres:14.5-alpine'
environment:
- POSTGRES_DB=automatisch
- POSTGRES_USER=automatisch_user
- POSTGRES_PASSWORD=automatisch_password
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}']
interval: 10s
timeout: 5s
retries: 5
redis:
image: 'redis:7.0.4-alpine'
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:

View File

@@ -24,7 +24,7 @@ The official documentation can be found here: [https://automatisch.io/docs](http
```bash
# Clone the repository
git clone git@github.com:automatisch/automatisch.git
git clone https://github.com/automatisch/automatisch.git
# Go to the repository folder
cd automatisch

View File

@@ -6,7 +6,7 @@ RUN apk --no-cache add --virtual build-dependencies python3 build-base
COPY ./entrypoint.sh /entrypoint.sh
RUN yarn global add @automatisch/cli@0.3.0
RUN yarn global add @automatisch/cli@0.4.0 --network-timeout 1000000
RUN apk del build-dependencies python3 build-base

View File

@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1
FROM automatischio/automatisch:0.3.0
FROM automatischio/automatisch:0.4.0
WORKDIR /automatisch
RUN apk add --no-cache openssl dos2unix

View File

@@ -2,7 +2,7 @@
"packages": [
"packages/*"
],
"version": "0.3.0",
"version": "0.5.0",
"npmClient": "yarn",
"useWorkspaces": true,
"command": {

View File

@@ -1,6 +1,6 @@
{
"name": "@automatisch/backend",
"version": "0.3.0",
"version": "0.5.0",
"license": "AGPL-3.0",
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
"scripts": {
@@ -22,7 +22,7 @@
"prebuild": "rm -rf ./dist"
},
"dependencies": {
"@automatisch/web": "^0.3.0",
"@automatisch/web": "^0.5.0",
"@bull-board/express": "^3.10.1",
"@graphql-tools/graphql-file-loader": "^7.3.4",
"@graphql-tools/load": "^7.5.2",
@@ -47,7 +47,7 @@
"graphql-type-json": "^0.3.2",
"http-errors": "~1.6.3",
"jsonwebtoken": "^9.0.0",
"knex": "^0.95.11",
"knex": "^2.4.0",
"lodash.get": "^4.4.2",
"luxon": "2.5.2",
"morgan": "^1.10.0",
@@ -94,7 +94,7 @@
"url": "https://github.com/automatisch/automatisch/issues"
},
"devDependencies": {
"@automatisch/types": "^0.3.0",
"@automatisch/types": "^0.5.0",
"@types/bcrypt": "^5.0.0",
"@types/bull": "^3.15.8",
"@types/cors": "^2.8.12",

View File

@@ -1,5 +1,6 @@
import createError from 'http-errors';
import express from 'express';
import appConfig from './config/app';
import cors from 'cors';
import corsOptions from './config/cors-options';
import morgan from './helpers/morgan';
@@ -26,6 +27,7 @@ appAssetsHandler(app);
app.use(morgan);
app.use(
express.json({
limit: appConfig.requestBodySizeLimit,
verify(req, res, buf) {
(req as IRequest).rawBody = buf;
},
@@ -33,6 +35,7 @@ app.use(
);
app.use(express.urlencoded({
extended: false,
limit: appConfig.requestBodySizeLimit,
verify(req, res, buf) {
(req as IRequest).rawBody = buf;
},

View File

@@ -0,0 +1,74 @@
import defineAction from '../../../../helpers/define-action';
type TMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
export default defineAction({
name: 'Custom Request',
key: 'customRequest',
description: 'Makes a custom HTTP request by providing raw details.',
arguments: [
{
label: 'Method',
key: 'method',
type: 'dropdown' as const,
required: true,
description: `The HTTP method we'll use to perform the request.`,
value: 'GET',
options: [
{ label: 'DELETE', value: 'DELETE' },
{ label: 'GET', value: 'GET' },
{ label: 'PATCH', value: 'PATCH' },
{ label: 'POST', value: 'POST' },
{ label: 'PUT', value: 'PUT' },
],
},
{
label: 'URL',
key: 'url',
type: 'string' as const,
required: true,
description: 'Any URL with a querystring will be re-encoded properly.',
variables: true,
},
{
label: 'Data',
key: 'data',
type: 'string' as const,
required: false,
description: 'Place raw JSON data here.',
variables: true,
},
],
async run($) {
const method = $.step.parameters.method as TMethod;
const data = $.step.parameters.data as string;
const url = $.step.parameters.url as string;
const maxFileSize = 25 * 1024 * 1024; // 25MB
const metadataResponse = await $.http.head(url);
if (Number(metadataResponse.headers['content-length']) > maxFileSize) {
throw new Error(
`Response is too large. Maximum size is 25MB. Actual size is ${metadataResponse.headers['content-length']}`
);
}
const response = await $.http.request({
url,
method,
data,
headers: {
'Content-Type': 'application/json',
},
});
let responseData = response.data;
if (typeof response.data === 'string') {
responseData = response.data.replaceAll('\u0000', '');
}
$.setActionItem({ raw: { data: responseData } });
},
});

View File

@@ -0,0 +1,3 @@
import customRequest from './custom-request';
export default [customRequest];

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="100px" height="100px"><path d="M 37.09375 0.09375 C 36.316406 0.167969 35.652344 0.691406 35.398438 1.429688 C 35.140625 2.171875 35.339844 2.992188 35.90625 3.53125 L 42.375 10 L 2 10 C 1.9375 9.996094 1.875 9.996094 1.8125 10 C 0.707031 10.050781 -0.144531 10.988281 -0.09375 12.09375 C -0.0429688 13.199219 0.894531 14.050781 2 14 L 42.375 14 L 35.90625 20.46875 C 35.382813 20.96875 35.167969 21.710938 35.347656 22.414063 C 35.527344 23.113281 36.070313 23.664063 36.769531 23.851563 C 37.46875 24.039063 38.214844 23.832031 38.71875 23.3125 L 50.03125 12 L 38.71875 0.6875 C 38.296875 0.253906 37.699219 0.0351563 37.09375 0.09375 Z M 12.5 26.09375 C 12.046875 26.152344 11.628906 26.359375 11.3125 26.6875 L 0 38 L 11.3125 49.3125 C 11.816406 49.832031 12.5625 50.039063 13.261719 49.851563 C 13.960938 49.664063 14.503906 49.113281 14.683594 48.414063 C 14.863281 47.710938 14.648438 46.96875 14.125 46.46875 L 7.65625 40 L 48 40 C 48.722656 40.011719 49.390625 39.632813 49.753906 39.007813 C 50.121094 38.386719 50.121094 37.613281 49.753906 36.992188 C 49.390625 36.367188 48.722656 35.988281 48 36 L 7.65625 36 L 14.125 29.53125 C 14.753906 28.9375 14.929688 28.003906 14.558594 27.222656 C 14.1875 26.441406 13.359375 25.984375 12.5 26.09375 Z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

View File

@@ -0,0 +1,14 @@
import defineApp from '../../helpers/define-app';
import actions from './actions';
export default defineApp({
name: 'HTTP Request',
key: 'http-request',
iconUrl: '{BASE_URL}/apps/http-request/assets/favicon.svg',
authDocUrl: 'https://automatisch.io/docs/apps/http-request/connection',
supportsConnections: false,
baseUrl: '',
apiBaseUrl: '',
primaryColor: '000000',
actions,
});

View File

@@ -0,0 +1,29 @@
import defineAction from '../../../../helpers/define-action';
export default defineAction({
name: 'Check moderation',
key: 'checkModeration',
description: 'Checks for hate, hate/threatening, self-harm, sexual, sexual/minors, violence, or violence/graphic content in the given text.',
arguments: [
{
label: 'Input',
key: 'input',
type: 'string' as const,
required: true,
variables: true,
description: 'The text to analyze.'
},
],
async run($) {
const { data } = await $.http.post('/v1/moderations', {
input: $.step.parameters.input as string,
});
const result = data?.results[0];
$.setActionItem({
raw: result,
});
},
});

View File

@@ -0,0 +1,4 @@
import checkModeration from './check-moderation';
import sendPrompt from './send-prompt';
export default [checkModeration, sendPrompt];

View File

@@ -0,0 +1,104 @@
import defineAction from '../../../../helpers/define-action';
const castFloatOrUndefined = (value: string | null) => {
return value === '' ? undefined : parseFloat(value);
}
export default defineAction({
name: 'Send prompt',
key: 'sendPrompt',
description: 'Creates a completion for the provided prompt and parameters.',
arguments: [
{
label: 'Model',
key: 'model',
type: 'dropdown' as const,
required: true,
variables: false,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listModels',
},
],
},
},
{
label: 'Prompt',
key: 'prompt',
type: 'string' as const,
required: true,
variables: true,
description: 'The text to analyze.'
},
{
label: 'Temperature',
key: 'temperature',
type: 'string' as const,
required: false,
variables: true,
description: 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.'
},
{
label: 'Maximum tokens',
key: 'maxTokens',
type: 'string' as const,
required: false,
variables: true,
description: 'The maximum number of tokens to generate in the completion.'
},
{
label: 'Stop Sequence',
key: 'stopSequence',
type: 'string' as const,
required: false,
variables: true,
description: 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.'
},
{
label: 'Top P',
key: 'topP',
type: 'string' as const,
required: false,
variables: true,
description: 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.'
},
{
label: 'Frequency Penalty',
key: 'frequencyPenalty',
type: 'string' as const,
required: false,
variables: true,
description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.`
},
{
label: 'presencePenalty',
key: 'presencePenalty',
type: 'string' as const,
required: false,
variables: true,
description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.`
},
],
async run($) {
const payload = {
model: $.step.parameters.model as string,
prompt: $.step.parameters.prompt as string,
temperature: castFloatOrUndefined($.step.parameters.temperature as string),
max_tokens: castFloatOrUndefined($.step.parameters.maxTokens as string),
stop: ($.step.parameters.stopSequence as string || null),
top_p: castFloatOrUndefined($.step.parameters.topP as string),
frequency_penalty: castFloatOrUndefined($.step.parameters.frequencyPenalty as string),
presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty as string),
};
const { data } = await $.http.post('/v1/completions', payload);
$.setActionItem({
raw: data,
});
},
});

View File

@@ -0,0 +1,6 @@
<svg width="256px" height="260px" viewBox="0 0 256 260" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
<title>OpenAI</title>
<g>
<path d="M239.183914,106.202783 C245.054304,88.5242096 243.02228,69.1733805 233.607599,53.0998864 C219.451678,28.4588021 190.999703,15.7836129 163.213007,21.739505 C147.554077,4.32145883 123.794909,-3.42398554 100.87901,1.41873898 C77.9631105,6.26146349 59.3690093,22.9572536 52.0959621,45.2214219 C33.8436494,48.9644867 18.0901721,60.392749 8.86672513,76.5818033 C-5.443491,101.182962 -2.19544431,132.215255 16.8986662,153.320094 C11.0060865,170.990656 13.0197283,190.343991 22.4238231,206.422991 C36.5975553,231.072344 65.0680342,243.746566 92.8695738,237.783372 C105.235639,251.708249 123.001113,259.630942 141.623968,259.52692 C170.105359,259.552169 195.337611,241.165718 204.037777,214.045661 C222.28734,210.296356 238.038489,198.869783 247.267014,182.68528 C261.404453,158.127515 258.142494,127.262775 239.183914,106.202783 L239.183914,106.202783 Z M141.623968,242.541207 C130.255682,242.559177 119.243876,238.574642 110.519381,231.286197 L112.054146,230.416496 L163.724595,200.590881 C166.340648,199.056444 167.954321,196.256818 167.970781,193.224005 L167.970781,120.373788 L189.815614,133.010026 C190.034132,133.121423 190.186235,133.330564 190.224885,133.572774 L190.224885,193.940229 C190.168603,220.758427 168.442166,242.484864 141.623968,242.541207 Z M37.1575749,197.93062 C31.456498,188.086359 29.4094818,176.546984 31.3766237,165.342426 L32.9113895,166.263285 L84.6329973,196.088901 C87.2389349,197.618207 90.4682717,197.618207 93.0742093,196.088901 L156.255402,159.663793 L156.255402,184.885111 C156.243557,185.149771 156.111725,185.394602 155.89729,185.550176 L103.561776,215.733903 C80.3054953,229.131632 50.5924954,221.165435 37.1575749,197.93062 Z M23.5493181,85.3811273 C29.2899861,75.4733097 38.3511911,67.9162648 49.1287482,64.0478825 L49.1287482,125.438515 C49.0891492,128.459425 50.6965386,131.262556 53.3237748,132.754232 L116.198014,169.025864 L94.3531808,181.662102 C94.1132325,181.789434 93.8257461,181.789434 93.5857979,181.662102 L41.3526015,151.529534 C18.1419426,138.076098 10.1817681,108.385562 23.5493181,85.125333 L23.5493181,85.3811273 Z M203.0146,127.075598 L139.935725,90.4458545 L161.7294,77.8607748 C161.969348,77.7334434 162.256834,77.7334434 162.496783,77.8607748 L214.729979,108.044502 C231.032329,117.451747 240.437294,135.426109 238.871504,154.182739 C237.305714,172.939368 225.050719,189.105572 207.414262,195.67963 L207.414262,134.288998 C207.322521,131.276867 205.650697,128.535853 203.0146,127.075598 Z M224.757116,94.3850867 L223.22235,93.4642272 L171.60306,63.3828173 C168.981293,61.8443751 165.732456,61.8443751 163.110689,63.3828173 L99.9806554,99.8079259 L99.9806554,74.5866077 C99.9533004,74.3254088 100.071095,74.0701869 100.287609,73.9215426 L152.520805,43.7889738 C168.863098,34.3743518 189.174256,35.2529043 204.642579,46.0434841 C220.110903,56.8340638 227.949269,75.5923959 224.757116,94.1804513 L224.757116,94.3850867 Z M88.0606409,139.097931 L66.2158076,126.512851 C65.9950399,126.379091 65.8450965,126.154176 65.8065367,125.898945 L65.8065367,65.684966 C65.8314495,46.8285367 76.7500605,29.6846032 93.8270852,21.6883055 C110.90411,13.6920079 131.063833,16.2835462 145.5632,28.338998 L144.028434,29.2086986 L92.3579852,59.0343142 C89.7419327,60.5687513 88.1282597,63.3683767 88.1117998,66.4011901 L88.0606409,139.097931 Z M99.9294965,113.5185 L128.06687,97.3011417 L156.255402,113.5185 L156.255402,145.953218 L128.169187,162.170577 L99.9806554,145.953218 L99.9294965,113.5185 Z" fill="#000000"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1,34 @@
import verifyCredentials from './verify-credentials';
import isStillVerified from './is-still-verified';
export default {
fields: [
{
key: 'screenName',
label: 'Screen Name',
type: 'string' as const,
required: true,
readOnly: false,
value: null,
placeholder: null,
description:
'Screen name of your connection to be used on Automatisch UI.',
clickToCopy: false,
},
{
key: 'apiKey',
label: 'API Key',
type: 'string' as const,
required: true,
readOnly: false,
value: null,
placeholder: null,
description: 'OpenAI API key of your account.',
docUrl: 'https://automatisch.io/docs/openai#api-key',
clickToCopy: false,
},
],
verifyCredentials,
isStillVerified,
};

View File

@@ -0,0 +1,8 @@
import { IGlobalVariable } from '@automatisch/types';
const isStillVerified = async ($: IGlobalVariable) => {
await $.http.get('/v1/models');
return true;
};
export default isStillVerified;

View File

@@ -0,0 +1,7 @@
import { IGlobalVariable } from '@automatisch/types';
const verifyCredentials = async ($: IGlobalVariable) => {
await $.http.get('/v1/models');
};
export default verifyCredentials;

View File

@@ -0,0 +1,11 @@
import { TBeforeRequest } from '@automatisch/types';
const addAuthHeader: TBeforeRequest = ($, requestConfig) => {
if ($.auth.data?.apiKey) {
requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiKey}`;
}
return requestConfig;
};
export default addAuthHeader;

View File

@@ -0,0 +1,3 @@
import listModels from './list-models';
export default [listModels];

View File

@@ -0,0 +1,19 @@
import { IGlobalVariable } from '@automatisch/types';
export default {
name: 'List models',
key: 'listModels',
async run($: IGlobalVariable) {
const response = await $.http.get('/v1/models');
const models = response.data.data.map((model: { id: string }) => {
return {
value: model.id,
name: model.id,
};
});
return { data: models };
},
};

View File

View File

@@ -0,0 +1,20 @@
import defineApp from '../../helpers/define-app';
import addAuthHeader from './common/add-auth-header';
import auth from './auth';
import actions from './actions';
import dynamicData from './dynamic-data';
export default defineApp({
name: 'OpenAI',
key: 'openai',
baseUrl: 'https://openai.com',
apiBaseUrl: 'https://api.openai.com',
iconUrl: '{BASE_URL}/apps/openai/assets/favicon.svg',
authDocUrl: 'https://automatisch.io/docs/apps/openai/connection',
primaryColor: '000000',
supportsConnections: true,
beforeRequest: [addAuthHeader],
auth,
actions,
dynamicData,
});

View File

@@ -0,0 +1,52 @@
import defineAction from '../../../../helpers/define-action';
export default defineAction({
name: 'Create attachment',
key: 'createAttachment',
description:
'Creates an attachment of a specified object by given parent ID.',
arguments: [
{
label: 'Parent ID',
key: 'parentId',
type: 'string' as const,
required: true,
variables: true,
description:
'ID of the parent object of the attachment. The following objects are supported as parents of attachments: Account, Asset, Campaign, Case, Contact, Contract, Custom objects, EmailMessage, EmailTemplate, Event, Lead, Opportunity, Product2, Solution, Task',
},
{
label: 'Name',
key: 'name',
type: 'string' as const,
required: true,
variables: true,
description: 'Name of the attached file. Maximum size is 255 characters.',
},
{
label: 'Body',
key: 'body',
type: 'string' as const,
required: true,
variables: true,
description: 'File data. (Max size is 25MB)',
},
],
async run($) {
const { parentId, name, body } = $.step.parameters;
const options = {
ParentId: parentId,
Name: name,
Body: body,
};
const { data } = await $.http.post(
'/services/data/v56.0/sobjects/Attachment/',
options
);
$.setActionItem({ raw: data });
},
});

View File

@@ -0,0 +1,79 @@
import defineAction from '../../../../helpers/define-action';
export default defineAction({
name: 'Find record',
key: 'findRecord',
description: 'Finds a record of a specified object by a field and value.',
arguments: [
{
label: 'Object',
key: 'object',
type: 'dropdown' as const,
required: true,
description: 'Pick which type of object you want to search for.',
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listObjects',
},
],
},
},
{
label: 'Field',
key: 'field',
type: 'dropdown' as const,
description: 'Pick which field to search by',
required: true,
variables: false,
dependsOn: ['parameters.object'],
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listFields',
},
{
name: 'parameters.object',
value: '{parameters.object}',
},
],
},
},
{
label: 'Search value',
key: 'searchValue',
type: 'string' as const,
required: true,
variables: true,
},
],
async run($) {
const query = `
SELECT
FIELDS(ALL)
FROM
${$.step.parameters.object}
WHERE
${$.step.parameters.field} = '${$.step.parameters.searchValue}'
LIMIT 1
`;
const options = {
params: {
q: query,
},
};
const { data } = await $.http.get('/services/data/v56.0/query', options);
const record = data.records[0];
$.setActionItem({ raw: record });
},
});

View File

@@ -0,0 +1,4 @@
import findRecord from './find-record';
import createAttachment from './create-attachment';
export default [findRecord, createAttachment];

View File

@@ -2,6 +2,7 @@ import defineApp from '../../helpers/define-app';
import addAuthHeader from './common/add-auth-header';
import auth from './auth';
import triggers from './triggers';
import actions from './actions';
import dynamicData from './dynamic-data';
export default defineApp({
@@ -16,5 +17,6 @@ export default defineApp({
beforeRequest: [addAuthHeader],
auth,
triggers,
actions,
dynamicData,
});

View File

@@ -0,0 +1,30 @@
import defineAction from '../../../../helpers/define-action';
export default defineAction({
name: 'Find user by email',
key: 'findUserByEmail',
description: 'Finds a user by email.',
arguments: [
{
label: 'Email',
key: 'email',
type: 'string' as const,
required: true,
variables: true,
},
],
async run($) {
const params = {
email: $.step.parameters.email as string,
};
const { data } = await $.http.get('/users.lookupByEmail', {
params
});
if (data.ok) {
$.setActionItem({ raw: data.user });
}
},
});

View File

@@ -1,4 +1,5 @@
import findMessage from './find-message';
import findUserByEmail from './find-user-by-email';
import sendMessageToChannel from './send-a-message-to-channel';
export default [findMessage, sendMessageToChannel];
export default [findMessage, findUserByEmail, sendMessageToChannel];

View File

@@ -13,7 +13,13 @@ export default {
error: null,
};
const response = await $.http.get('/conversations.list');
const response = await $.http.get('/conversations.list', {
params: {
types: 'public_channel,private_channel',
limit: 1000,
exclude_archived: true,
}
});
if (response.data.ok === false) {
throw new Error(response.data);

View File

@@ -4,6 +4,19 @@ import isStillVerified from './is-still-verified';
export default {
fields: [
{
key: 'oAuthRedirectUrl',
label: 'OAuth Redirect URL',
type: 'string' as const,
required: true,
readOnly: true,
value: '{WEB_APP_URL}/app/todoist/connections/add',
placeholder: null,
description:
'When asked to input an OAuth callback or redirect URL in Todoist OAuth, enter the URL above.',
docUrl: 'https://automatisch.io/docs/todoist#oauth-redirect-url',
clickToCopy: true,
},
{
key: 'screenName',
label: 'Screen Name',
@@ -12,8 +25,7 @@ export default {
readOnly: false,
value: null,
placeholder: null,
description:
'Name your connection (only used for Automatisch UI).',
description: 'Name your connection (only used for Automatisch UI).',
clickToCopy: false,
},
{

View File

@@ -1,3 +1,4 @@
import createTweet from './create-tweet';
import searchUser from './search-user';
export default [createTweet];
export default [createTweet, searchUser];

View File

@@ -0,0 +1,30 @@
import defineAction from '../../../../helpers/define-action';
export default defineAction({
name: 'Search user',
key: 'searchUser',
description: 'Search a user on Twitter',
arguments: [
{
label: 'Username',
key: 'username',
type: 'string' as const,
required: true,
description: 'The username of the Twitter user you want to search for',
variables: true,
},
],
async run($) {
const { data } = await $.http.get(`/2/users/by/username/${$.step.parameters.username}`, {
params: {
expansions: 'pinned_tweet_id',
'tweet.fields': 'attachments,author_id,context_annotations,conversation_id,created_at,edit_controls,entities,geo,id,in_reply_to_user_id,lang,non_public_metrics,public_metrics,organic_metrics,promoted_metrics,possibly_sensitive,referenced_tweets,reply_settings,source,text,withheld',
'user.fields': 'created_at,description,entities,id,location,name,pinned_tweet_id,profile_image_url,protected,public_metrics,url,username,verified,verified_type,withheld'
}
});
$.setActionItem({
raw: data.data
});
},
});

View File

@@ -1,4 +1,5 @@
import { Token } from 'oauth-1.0a';
import { URLSearchParams } from 'node:url';
import { IJSONObject, TBeforeRequest } from '@automatisch/types';
import oauthClient from './oauth-client';
@@ -9,15 +10,24 @@ type RequestDataType = {
};
const addAuthHeader: TBeforeRequest = ($, requestConfig) => {
const { url, method, data } = requestConfig;
const { baseURL, url, method, data, params } = requestConfig;
const token: Token = {
key: $.auth.data?.accessToken as string,
secret: $.auth.data?.accessSecret as string,
};
const searchParams = new URLSearchParams(params);
const stringifiedParams = searchParams.toString();
let fullUrl = `${baseURL}${url}`;
// append the search params
if (stringifiedParams) {
fullUrl = `${fullUrl}?${stringifiedParams}`;
}
const requestData: RequestDataType = {
url: `${requestConfig.baseURL}${url}`,
url: fullUrl,
method,
};

View File

@@ -31,6 +31,7 @@ type AppConfig = {
bullMQDashboardUsername: string;
bullMQDashboardPassword: string;
telemetryEnabled: boolean;
requestBodySizeLimit: string;
};
const host = process.env.HOST || 'localhost';
@@ -89,6 +90,7 @@ const appConfig: AppConfig = {
webAppUrl,
webhookUrl,
telemetryEnabled: process.env.TELEMETRY_ENABLED === 'false' ? false : true,
requestBodySizeLimit: '1mb',
};
if (!appConfig.encryptionKey) {

View File

@@ -44,7 +44,8 @@ export default function createHttpClient({
const { status } = error.response;
if (
status === 401 &&
// TODO: provide a `shouldRefreshToken` function in the app
(status === 401 || status === 403) &&
$.app.auth.refreshToken &&
!$.app.auth.isRefreshTokenRequested
) {

View File

@@ -1,6 +1,7 @@
import express, { Router } from 'express';
import multer from 'multer';
import { IRequest } from '@automatisch/types';
import appConfig from '../config/app';
import webhookHandler from '../controllers/webhooks/handler';
const router = Router();
@@ -9,6 +10,7 @@ const upload = multer();
router.use(upload.none());
router.use(express.text({
limit: appConfig.requestBodySizeLimit,
verify(req, res, buf) {
(req as IRequest).rawBody = buf;
},

View File

@@ -1,4 +1,5 @@
import type { Server } from 'http';
import app from './app';
import appConfig from './config/app';
import logger from './helpers/logger';
@@ -6,10 +7,8 @@ import telemetry from './helpers/telemetry';
telemetry.setServiceType('main');
const port = appConfig.port;
const server: Server = app.listen(port, () => {
logger.info(`Server is listening on ${port}`);
const server: Server = app.listen(appConfig.port, () => {
logger.info(`Server is listening on ${appConfig.baseUrl}`);
});
function shutdown(server: Server) {

View File

@@ -1,6 +1,6 @@
{
"name": "@automatisch/cli",
"version": "0.3.0",
"version": "0.5.0",
"license": "AGPL-3.0",
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
"contributors": [
@@ -33,7 +33,7 @@
"version": "oclif readme && git add README.md"
},
"dependencies": {
"@automatisch/backend": "^0.3.0",
"@automatisch/backend": "^0.5.0",
"@oclif/core": "^1",
"@oclif/plugin-help": "^5",
"@oclif/plugin-plugins": "^2.0.1",

View File

@@ -8700,10 +8700,10 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
http-cache-semantics@4.1.1, http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
http-call@^5.1.2, http-call@^5.2.2:
version "5.3.0"

View File

@@ -1,6 +1,6 @@
{
"name": "@automatisch/docs",
"version": "0.3.0",
"version": "0.5.0",
"license": "AGPL-3.0",
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
"private": true,

View File

@@ -78,6 +78,15 @@ export default defineConfig({
{ text: 'Connection', link: '/apps/github/connection' },
],
},
{
text: 'HTTP Request',
collapsible: true,
collapsed: true,
items: [
{ text: 'Actions', link: '/apps/http-request/actions' },
{ text: 'Connection', link: '/apps/http-request/connection' },
],
},
{
text: 'Ntfy',
collapsible: true,
@@ -87,6 +96,15 @@ export default defineConfig({
{ text: 'Connection', link: '/apps/ntfy/connection' },
],
},
{
text: 'OpenAI',
collapsible: true,
collapsed: true,
items: [
{ text: 'Actions', link: '/apps/openai/actions' },
{ text: 'Connection', link: '/apps/openai/connection' },
],
},
{
text: 'RSS',
collapsible: true,
@@ -102,6 +120,7 @@ export default defineConfig({
collapsed: true,
items: [
{ text: 'Triggers', link: '/apps/salesforce/triggers' },
{ text: 'Actions', link: '/apps/salesforce/actions' },
{ text: 'Connection', link: '/apps/salesforce/connection' },
],
},

View File

@@ -0,0 +1,12 @@
---
favicon: /favicons/http-request.svg
items:
- name: Custom Request
desc: Makes a custom HTTP request by providing raw details.
---
<script setup>
import CustomListing from '../../components/CustomListing.vue'
</script>
<CustomListing />

View File

@@ -0,0 +1,3 @@
# HTTP Request
HTTP Request 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 HTTP Request app.

View File

@@ -0,0 +1,14 @@
---
favicon: /favicons/openai.svg
items:
- name: Check moderation
desc: Checks for hate, hate/threatening, self-harm, sexual, sexual/minors, violence, or violence/graphic content in text.
- name: Send prompt
desc: Creates a completion for the provided prompt and parameters.
---
<script setup>
import CustomListing from '../../components/CustomListing.vue'
</script>
<CustomListing />

View File

@@ -0,0 +1,8 @@
# OpenAI
1. Go to [API Keys page](https://beta.openai.com/account/api-keys) on OpenAI.
2. Create a new secret key.
3. Paste the key into the `API Key` field in Automatisch.
4. Write any screen name to be displayed in Automatisch.
5. Click `Save`.
6. Start using OpenAI integration with Automatisch!

View File

@@ -0,0 +1,14 @@
---
favicon: /favicons/salesforce.svg
items:
- name: Create attachment
desc: Creates an attachment of a specified object by given parent ID.
- name: Find record
desc: Finds a record of a specified object by a field and value.
---
<script setup>
import CustomListing from '../../components/CustomListing.vue'
</script>
<CustomListing />

View File

@@ -3,6 +3,8 @@ favicon: /favicons/slack.svg
items:
- name: Find a message
desc: Finds a message using the Slack search feature.
- name: Find user by email
desc: Finds a user by email.
- name: Send a message to channel
desc: Sends a message to a channel you specify.
---

View File

@@ -3,6 +3,8 @@ favicon: /favicons/twitter.svg
items:
- name: Create Tweet
desc: Create a tweet.
- name: Search User
desc: Search a user.
---
<script setup>

View File

@@ -11,8 +11,10 @@ Following integrations are currently supported by Automatisch.
- [Discord](/apps/discord/actions)
- [Flickr](/apps/flickr/triggers)
- [Github](/apps/github/triggers)
- [HTTP Request](/apps/http-request/actions)
- [Ntfy](/apps/ntfy/actions)
- [OpenAI](/apps/openai/actions)
- [RSS](/apps/rss/triggers)
- [Ntfy](/apps/ntfy/triggers)
- [Salesforce](/apps/salesforce/triggers)
- [Scheduler](/apps/scheduler/triggers)
- [Slack](/apps/slack/actions)

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="100px" height="100px"><path d="M 37.09375 0.09375 C 36.316406 0.167969 35.652344 0.691406 35.398438 1.429688 C 35.140625 2.171875 35.339844 2.992188 35.90625 3.53125 L 42.375 10 L 2 10 C 1.9375 9.996094 1.875 9.996094 1.8125 10 C 0.707031 10.050781 -0.144531 10.988281 -0.09375 12.09375 C -0.0429688 13.199219 0.894531 14.050781 2 14 L 42.375 14 L 35.90625 20.46875 C 35.382813 20.96875 35.167969 21.710938 35.347656 22.414063 C 35.527344 23.113281 36.070313 23.664063 36.769531 23.851563 C 37.46875 24.039063 38.214844 23.832031 38.71875 23.3125 L 50.03125 12 L 38.71875 0.6875 C 38.296875 0.253906 37.699219 0.0351563 37.09375 0.09375 Z M 12.5 26.09375 C 12.046875 26.152344 11.628906 26.359375 11.3125 26.6875 L 0 38 L 11.3125 49.3125 C 11.816406 49.832031 12.5625 50.039063 13.261719 49.851563 C 13.960938 49.664063 14.503906 49.113281 14.683594 48.414063 C 14.863281 47.710938 14.648438 46.96875 14.125 46.46875 L 7.65625 40 L 48 40 C 48.722656 40.011719 49.390625 39.632813 49.753906 39.007813 C 50.121094 38.386719 50.121094 37.613281 49.753906 36.992188 C 49.390625 36.367188 48.722656 35.988281 48 36 L 7.65625 36 L 14.125 29.53125 C 14.753906 28.9375 14.929688 28.003906 14.558594 27.222656 C 14.1875 26.441406 13.359375 25.984375 12.5 26.09375 Z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,6 @@
<svg width="256px" height="260px" viewBox="0 0 256 260" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid">
<title>OpenAI</title>
<g>
<path d="M239.183914,106.202783 C245.054304,88.5242096 243.02228,69.1733805 233.607599,53.0998864 C219.451678,28.4588021 190.999703,15.7836129 163.213007,21.739505 C147.554077,4.32145883 123.794909,-3.42398554 100.87901,1.41873898 C77.9631105,6.26146349 59.3690093,22.9572536 52.0959621,45.2214219 C33.8436494,48.9644867 18.0901721,60.392749 8.86672513,76.5818033 C-5.443491,101.182962 -2.19544431,132.215255 16.8986662,153.320094 C11.0060865,170.990656 13.0197283,190.343991 22.4238231,206.422991 C36.5975553,231.072344 65.0680342,243.746566 92.8695738,237.783372 C105.235639,251.708249 123.001113,259.630942 141.623968,259.52692 C170.105359,259.552169 195.337611,241.165718 204.037777,214.045661 C222.28734,210.296356 238.038489,198.869783 247.267014,182.68528 C261.404453,158.127515 258.142494,127.262775 239.183914,106.202783 L239.183914,106.202783 Z M141.623968,242.541207 C130.255682,242.559177 119.243876,238.574642 110.519381,231.286197 L112.054146,230.416496 L163.724595,200.590881 C166.340648,199.056444 167.954321,196.256818 167.970781,193.224005 L167.970781,120.373788 L189.815614,133.010026 C190.034132,133.121423 190.186235,133.330564 190.224885,133.572774 L190.224885,193.940229 C190.168603,220.758427 168.442166,242.484864 141.623968,242.541207 Z M37.1575749,197.93062 C31.456498,188.086359 29.4094818,176.546984 31.3766237,165.342426 L32.9113895,166.263285 L84.6329973,196.088901 C87.2389349,197.618207 90.4682717,197.618207 93.0742093,196.088901 L156.255402,159.663793 L156.255402,184.885111 C156.243557,185.149771 156.111725,185.394602 155.89729,185.550176 L103.561776,215.733903 C80.3054953,229.131632 50.5924954,221.165435 37.1575749,197.93062 Z M23.5493181,85.3811273 C29.2899861,75.4733097 38.3511911,67.9162648 49.1287482,64.0478825 L49.1287482,125.438515 C49.0891492,128.459425 50.6965386,131.262556 53.3237748,132.754232 L116.198014,169.025864 L94.3531808,181.662102 C94.1132325,181.789434 93.8257461,181.789434 93.5857979,181.662102 L41.3526015,151.529534 C18.1419426,138.076098 10.1817681,108.385562 23.5493181,85.125333 L23.5493181,85.3811273 Z M203.0146,127.075598 L139.935725,90.4458545 L161.7294,77.8607748 C161.969348,77.7334434 162.256834,77.7334434 162.496783,77.8607748 L214.729979,108.044502 C231.032329,117.451747 240.437294,135.426109 238.871504,154.182739 C237.305714,172.939368 225.050719,189.105572 207.414262,195.67963 L207.414262,134.288998 C207.322521,131.276867 205.650697,128.535853 203.0146,127.075598 Z M224.757116,94.3850867 L223.22235,93.4642272 L171.60306,63.3828173 C168.981293,61.8443751 165.732456,61.8443751 163.110689,63.3828173 L99.9806554,99.8079259 L99.9806554,74.5866077 C99.9533004,74.3254088 100.071095,74.0701869 100.287609,73.9215426 L152.520805,43.7889738 C168.863098,34.3743518 189.174256,35.2529043 204.642579,46.0434841 C220.110903,56.8340638 227.949269,75.5923959 224.757116,94.1804513 L224.757116,94.3850867 Z M88.0606409,139.097931 L66.2158076,126.512851 C65.9950399,126.379091 65.8450965,126.154176 65.8065367,125.898945 L65.8065367,65.684966 C65.8314495,46.8285367 76.7500605,29.6846032 93.8270852,21.6883055 C110.90411,13.6920079 131.063833,16.2835462 145.5632,28.338998 L144.028434,29.2086986 L92.3579852,59.0343142 C89.7419327,60.5687513 88.1282597,63.3683767 88.1117998,66.4011901 L88.0606409,139.097931 Z M99.9294965,113.5185 L128.06687,97.3011417 L156.255402,113.5185 L156.255402,145.953218 L128.169187,162.170577 L99.9806554,145.953218 L99.9294965,113.5185 Z" fill="#000000"></path>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,6 +1,6 @@
{
"name": "@automatisch/e2e-tests",
"version": "0.3.0",
"version": "0.5.0",
"license": "AGPL-3.0",
"private": true,
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",

View File

@@ -1,6 +1,6 @@
{
"name": "@automatisch/types",
"version": "0.3.0",
"version": "0.5.0",
"license": "AGPL-3.0",
"description": "Type definitions for automatisch",
"homepage": "https://github.com/automatisch/automatisch",

View File

@@ -1,11 +1,11 @@
{
"name": "@automatisch/web",
"version": "0.3.0",
"version": "0.5.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.3.0",
"@automatisch/types": "^0.5.0",
"@emotion/react": "^11.4.1",
"@emotion/styled": "^11.3.0",
"@hookform/resolvers": "^2.8.8",

View File

@@ -9,6 +9,7 @@ export const UPDATE_STEP = gql`
appKey
parameters
status
webhookUrl
connection {
id
}

View File

@@ -6404,12 +6404,7 @@ colord@^2.9.1:
resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1"
integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==
colorette@2.0.16, colorette@^2.0.10:
version "2.0.16"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
colorette@^2.0.16:
colorette@2.0.19, colorette@^2.0.10, colorette@^2.0.16:
version "2.0.19"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
@@ -6462,7 +6457,7 @@ commander@^5.1.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
commander@^7.1.0, commander@^7.2.0:
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
@@ -6472,6 +6467,11 @@ commander@^8.3.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
commander@^9.1.0:
version "9.5.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30"
integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==
common-ancestor-path@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
@@ -7210,20 +7210,13 @@ debug@2.6.9, debug@^2.6.0, debug@^2.6.9, debug@~2.6.9:
dependencies:
ms "2.0.0"
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
debug@4.3.2:
version "4.3.2"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
dependencies:
ms "2.1.2"
debug@^3.1.0, debug@^3.1.1, debug@^3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
@@ -9212,10 +9205,10 @@ get-symbol-description@^1.0.0:
call-bind "^1.0.2"
get-intrinsic "^1.1.1"
getopts@2.2.5:
version "2.2.5"
resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.5.tgz#67a0fe471cacb9c687d817cab6450b96dde8313b"
integrity sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA==
getopts@2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4"
integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==
getos@^3.2.1:
version "3.2.1"
@@ -9672,9 +9665,9 @@ htmlparser2@^6.1.0:
entities "^2.0.0"
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
version "4.1.1"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
http-call@^5.1.2, http-call@^5.2.2:
version "5.3.0"
@@ -11247,23 +11240,24 @@ klona@^2.0.4, klona@^2.0.5:
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc"
integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
knex@^0.95.11:
version "0.95.15"
resolved "https://registry.yarnpkg.com/knex/-/knex-0.95.15.tgz#39d7e7110a6e2ad7de5d673d2dea94143015e0e7"
integrity sha512-Loq6WgHaWlmL2bfZGWPsy4l8xw4pOE+tmLGkPG0auBppxpI0UcK+GYCycJcqz9W54f2LiGewkCVLBm3Wq4ur/w==
knex@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/knex/-/knex-2.4.0.tgz#7d33cc36f320cdac98741010544b4c6a98b8b19e"
integrity sha512-i0GWwqYp1Hs2yvc2rlDO6nzzkLhwdyOZKRdsMTB8ZxOs2IXQyL5rBjSbS1krowCh6V65T4X9CJaKtuIfkaPGSA==
dependencies:
colorette "2.0.16"
commander "^7.1.0"
debug "4.3.2"
colorette "2.0.19"
commander "^9.1.0"
debug "4.3.4"
escalade "^3.1.1"
esm "^3.2.25"
getopts "2.2.5"
get-package-type "^0.1.0"
getopts "2.3.0"
interpret "^2.2.0"
lodash "^4.17.21"
pg-connection-string "2.5.0"
rechoir "0.7.0"
rechoir "^0.8.0"
resolve-from "^5.0.0"
tarn "^3.0.1"
tarn "^3.0.2"
tildify "2.0.0"
kuler@^2.0.0:
@@ -14809,13 +14803,6 @@ real-require@^0.1.0:
resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381"
integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==
rechoir@0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca"
integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==
dependencies:
resolve "^1.9.0"
rechoir@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
@@ -14823,6 +14810,13 @@ rechoir@^0.6.2:
dependencies:
resolve "^1.1.6"
rechoir@^0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==
dependencies:
resolve "^1.20.0"
recursive-readdir@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
@@ -15075,7 +15069,7 @@ resolve@^1.0.0, resolve@^1.10.1, resolve@^1.21.0:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.9.0:
resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0:
version "1.21.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f"
integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==
@@ -16366,7 +16360,7 @@ tar@^6.0.2, tar@^6.1.0, tar@^6.1.11, tar@^6.1.2:
mkdirp "^1.0.3"
yallist "^4.0.0"
tarn@^3.0.1:
tarn@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693"
integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==