Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
fedbd66f8e | ||
![]() |
2be8e14f66 | ||
![]() |
9cfaa9e603 | ||
![]() |
48653c7590 | ||
![]() |
72450b6305 | ||
![]() |
7d22a1c105 | ||
![]() |
08ac3fb984 | ||
![]() |
2f64a074c6 | ||
![]() |
f98c797311 | ||
![]() |
d81fb14b04 | ||
![]() |
01bb1259eb | ||
![]() |
1118d025bf | ||
![]() |
146f0604c3 | ||
![]() |
f90afe8b37 | ||
![]() |
fff5306fa6 | ||
![]() |
078ea24cd2 | ||
![]() |
85a3558074 | ||
![]() |
73a9ae1c9c | ||
![]() |
2222ede420 | ||
![]() |
c6d80a9b0e | ||
![]() |
23c4414398 | ||
![]() |
8b9320bbf9 | ||
![]() |
a8ac288f17 | ||
![]() |
ffe7de6774 | ||
![]() |
d87a826493 | ||
![]() |
645fe29060 | ||
![]() |
4db738a7f6 | ||
![]() |
253c2c4317 | ||
![]() |
49755303f7 | ||
![]() |
1e137f0bd8 | ||
![]() |
c2579b1850 | ||
![]() |
577d5215cd | ||
![]() |
0870fa7e8f | ||
![]() |
ddb3795985 | ||
![]() |
45e98cd5b7 | ||
![]() |
4a99b7a3f2 | ||
![]() |
985132da78 |
1
.devcontainer/Dockerfile
Normal file
1
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1 @@
|
|||||||
|
FROM mcr.microsoft.com/vscode/devcontainers/base:ubuntu-22.04
|
48
.devcontainer/boot.sh
Normal file
48
.devcontainer/boot.sh
Normal 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!"
|
53
.devcontainer/devcontainer.json
Normal file
53
.devcontainer/devcontainer.json
Normal 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"
|
||||||
|
}
|
31
.devcontainer/docker-compose.yml
Normal file
31
.devcontainer/docker-compose.yml
Normal 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:
|
@@ -24,7 +24,7 @@ The official documentation can be found here: [https://automatisch.io/docs](http
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Clone the repository
|
# Clone the repository
|
||||||
git clone git@github.com:automatisch/automatisch.git
|
git clone https://github.com/automatisch/automatisch.git
|
||||||
|
|
||||||
# Go to the repository folder
|
# Go to the repository folder
|
||||||
cd automatisch
|
cd automatisch
|
||||||
|
@@ -6,7 +6,7 @@ RUN apk --no-cache add --virtual build-dependencies python3 build-base
|
|||||||
|
|
||||||
COPY ./entrypoint.sh /entrypoint.sh
|
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
|
RUN apk del build-dependencies python3 build-base
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
FROM automatischio/automatisch:0.3.0
|
FROM automatischio/automatisch:0.4.0
|
||||||
WORKDIR /automatisch
|
WORKDIR /automatisch
|
||||||
|
|
||||||
RUN apk add --no-cache openssl dos2unix
|
RUN apk add --no-cache openssl dos2unix
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
"packages": [
|
"packages": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
],
|
],
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"useWorkspaces": true,
|
"useWorkspaces": true,
|
||||||
"command": {
|
"command": {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/backend",
|
"name": "@automatisch/backend",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"prebuild": "rm -rf ./dist"
|
"prebuild": "rm -rf ./dist"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@automatisch/web": "^0.4.0",
|
"@automatisch/web": "^0.5.0",
|
||||||
"@bull-board/express": "^3.10.1",
|
"@bull-board/express": "^3.10.1",
|
||||||
"@graphql-tools/graphql-file-loader": "^7.3.4",
|
"@graphql-tools/graphql-file-loader": "^7.3.4",
|
||||||
"@graphql-tools/load": "^7.5.2",
|
"@graphql-tools/load": "^7.5.2",
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
"graphql-type-json": "^0.3.2",
|
"graphql-type-json": "^0.3.2",
|
||||||
"http-errors": "~1.6.3",
|
"http-errors": "~1.6.3",
|
||||||
"jsonwebtoken": "^9.0.0",
|
"jsonwebtoken": "^9.0.0",
|
||||||
"knex": "^0.95.11",
|
"knex": "^2.4.0",
|
||||||
"lodash.get": "^4.4.2",
|
"lodash.get": "^4.4.2",
|
||||||
"luxon": "2.5.2",
|
"luxon": "2.5.2",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
"url": "https://github.com/automatisch/automatisch/issues"
|
"url": "https://github.com/automatisch/automatisch/issues"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@automatisch/types": "^0.4.0",
|
"@automatisch/types": "^0.5.0",
|
||||||
"@types/bcrypt": "^5.0.0",
|
"@types/bcrypt": "^5.0.0",
|
||||||
"@types/bull": "^3.15.8",
|
"@types/bull": "^3.15.8",
|
||||||
"@types/cors": "^2.8.12",
|
"@types/cors": "^2.8.12",
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import createError from 'http-errors';
|
import createError from 'http-errors';
|
||||||
import express from 'express';
|
import express from 'express';
|
||||||
|
import appConfig from './config/app';
|
||||||
import cors from 'cors';
|
import cors from 'cors';
|
||||||
import corsOptions from './config/cors-options';
|
import corsOptions from './config/cors-options';
|
||||||
import morgan from './helpers/morgan';
|
import morgan from './helpers/morgan';
|
||||||
@@ -26,6 +27,7 @@ appAssetsHandler(app);
|
|||||||
app.use(morgan);
|
app.use(morgan);
|
||||||
app.use(
|
app.use(
|
||||||
express.json({
|
express.json({
|
||||||
|
limit: appConfig.requestBodySizeLimit,
|
||||||
verify(req, res, buf) {
|
verify(req, res, buf) {
|
||||||
(req as IRequest).rawBody = buf;
|
(req as IRequest).rawBody = buf;
|
||||||
},
|
},
|
||||||
@@ -33,6 +35,7 @@ app.use(
|
|||||||
);
|
);
|
||||||
app.use(express.urlencoded({
|
app.use(express.urlencoded({
|
||||||
extended: false,
|
extended: false,
|
||||||
|
limit: appConfig.requestBodySizeLimit,
|
||||||
verify(req, res, buf) {
|
verify(req, res, buf) {
|
||||||
(req as IRequest).rawBody = buf;
|
(req as IRequest).rawBody = buf;
|
||||||
},
|
},
|
||||||
|
@@ -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 } });
|
||||||
|
},
|
||||||
|
});
|
3
packages/backend/src/apps/http-request/actions/index.ts
Normal file
3
packages/backend/src/apps/http-request/actions/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import customRequest from './custom-request';
|
||||||
|
|
||||||
|
export default [customRequest];
|
@@ -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 |
0
packages/backend/src/apps/http-request/index.d.ts
vendored
Normal file
0
packages/backend/src/apps/http-request/index.d.ts
vendored
Normal file
14
packages/backend/src/apps/http-request/index.ts
Normal file
14
packages/backend/src/apps/http-request/index.ts
Normal 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,
|
||||||
|
});
|
@@ -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,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
4
packages/backend/src/apps/openai/actions/index.ts
Normal file
4
packages/backend/src/apps/openai/actions/index.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import checkModeration from './check-moderation';
|
||||||
|
import sendPrompt from './send-prompt';
|
||||||
|
|
||||||
|
export default [checkModeration, sendPrompt];
|
104
packages/backend/src/apps/openai/actions/send-prompt/index.ts
Normal file
104
packages/backend/src/apps/openai/actions/send-prompt/index.ts
Normal 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,
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
6
packages/backend/src/apps/openai/assets/favicon.svg
Normal file
6
packages/backend/src/apps/openai/assets/favicon.svg
Normal 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 |
34
packages/backend/src/apps/openai/auth/index.ts
Normal file
34
packages/backend/src/apps/openai/auth/index.ts
Normal 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,
|
||||||
|
};
|
@@ -0,0 +1,8 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const isStillVerified = async ($: IGlobalVariable) => {
|
||||||
|
await $.http.get('/v1/models');
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default isStillVerified;
|
@@ -0,0 +1,7 @@
|
|||||||
|
import { IGlobalVariable } from '@automatisch/types';
|
||||||
|
|
||||||
|
const verifyCredentials = async ($: IGlobalVariable) => {
|
||||||
|
await $.http.get('/v1/models');
|
||||||
|
};
|
||||||
|
|
||||||
|
export default verifyCredentials;
|
11
packages/backend/src/apps/openai/common/add-auth-header.ts
Normal file
11
packages/backend/src/apps/openai/common/add-auth-header.ts
Normal 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;
|
3
packages/backend/src/apps/openai/dynamic-data/index.ts
Normal file
3
packages/backend/src/apps/openai/dynamic-data/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import listModels from './list-models';
|
||||||
|
|
||||||
|
export default [listModels];
|
@@ -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 };
|
||||||
|
},
|
||||||
|
};
|
0
packages/backend/src/apps/openai/index.d.ts
vendored
Normal file
0
packages/backend/src/apps/openai/index.d.ts
vendored
Normal file
20
packages/backend/src/apps/openai/index.ts
Normal file
20
packages/backend/src/apps/openai/index.ts
Normal 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,
|
||||||
|
});
|
@@ -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 });
|
||||||
|
},
|
||||||
|
});
|
@@ -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 });
|
||||||
|
},
|
||||||
|
});
|
4
packages/backend/src/apps/salesforce/actions/index.ts
Normal file
4
packages/backend/src/apps/salesforce/actions/index.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
import findRecord from './find-record';
|
||||||
|
import createAttachment from './create-attachment';
|
||||||
|
|
||||||
|
export default [findRecord, createAttachment];
|
@@ -2,6 +2,7 @@ import defineApp from '../../helpers/define-app';
|
|||||||
import addAuthHeader from './common/add-auth-header';
|
import addAuthHeader from './common/add-auth-header';
|
||||||
import auth from './auth';
|
import auth from './auth';
|
||||||
import triggers from './triggers';
|
import triggers from './triggers';
|
||||||
|
import actions from './actions';
|
||||||
import dynamicData from './dynamic-data';
|
import dynamicData from './dynamic-data';
|
||||||
|
|
||||||
export default defineApp({
|
export default defineApp({
|
||||||
@@ -16,5 +17,6 @@ export default defineApp({
|
|||||||
beforeRequest: [addAuthHeader],
|
beforeRequest: [addAuthHeader],
|
||||||
auth,
|
auth,
|
||||||
triggers,
|
triggers,
|
||||||
|
actions,
|
||||||
dynamicData,
|
dynamicData,
|
||||||
});
|
});
|
||||||
|
@@ -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 });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
@@ -1,4 +1,5 @@
|
|||||||
import findMessage from './find-message';
|
import findMessage from './find-message';
|
||||||
|
import findUserByEmail from './find-user-by-email';
|
||||||
import sendMessageToChannel from './send-a-message-to-channel';
|
import sendMessageToChannel from './send-a-message-to-channel';
|
||||||
|
|
||||||
export default [findMessage, sendMessageToChannel];
|
export default [findMessage, findUserByEmail, sendMessageToChannel];
|
||||||
|
@@ -13,7 +13,13 @@ export default {
|
|||||||
error: null,
|
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) {
|
if (response.data.ok === false) {
|
||||||
throw new Error(response.data);
|
throw new Error(response.data);
|
||||||
|
@@ -4,6 +4,19 @@ import isStillVerified from './is-still-verified';
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
fields: [
|
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',
|
key: 'screenName',
|
||||||
label: 'Screen Name',
|
label: 'Screen Name',
|
||||||
@@ -12,8 +25,7 @@ export default {
|
|||||||
readOnly: false,
|
readOnly: false,
|
||||||
value: null,
|
value: null,
|
||||||
placeholder: null,
|
placeholder: null,
|
||||||
description:
|
description: 'Name your connection (only used for Automatisch UI).',
|
||||||
'Name your connection (only used for Automatisch UI).',
|
|
||||||
clickToCopy: false,
|
clickToCopy: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
import createTweet from './create-tweet';
|
import createTweet from './create-tweet';
|
||||||
|
import searchUser from './search-user';
|
||||||
|
|
||||||
export default [createTweet];
|
export default [createTweet, searchUser];
|
||||||
|
@@ -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
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
@@ -1,4 +1,5 @@
|
|||||||
import { Token } from 'oauth-1.0a';
|
import { Token } from 'oauth-1.0a';
|
||||||
|
import { URLSearchParams } from 'node:url';
|
||||||
import { IJSONObject, TBeforeRequest } from '@automatisch/types';
|
import { IJSONObject, TBeforeRequest } from '@automatisch/types';
|
||||||
import oauthClient from './oauth-client';
|
import oauthClient from './oauth-client';
|
||||||
|
|
||||||
@@ -9,15 +10,24 @@ type RequestDataType = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const addAuthHeader: TBeforeRequest = ($, requestConfig) => {
|
const addAuthHeader: TBeforeRequest = ($, requestConfig) => {
|
||||||
const { url, method, data } = requestConfig;
|
const { baseURL, url, method, data, params } = requestConfig;
|
||||||
|
|
||||||
const token: Token = {
|
const token: Token = {
|
||||||
key: $.auth.data?.accessToken as string,
|
key: $.auth.data?.accessToken as string,
|
||||||
secret: $.auth.data?.accessSecret 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 = {
|
const requestData: RequestDataType = {
|
||||||
url: `${requestConfig.baseURL}${url}`,
|
url: fullUrl,
|
||||||
method,
|
method,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@ type AppConfig = {
|
|||||||
bullMQDashboardUsername: string;
|
bullMQDashboardUsername: string;
|
||||||
bullMQDashboardPassword: string;
|
bullMQDashboardPassword: string;
|
||||||
telemetryEnabled: boolean;
|
telemetryEnabled: boolean;
|
||||||
|
requestBodySizeLimit: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const host = process.env.HOST || 'localhost';
|
const host = process.env.HOST || 'localhost';
|
||||||
@@ -89,6 +90,7 @@ const appConfig: AppConfig = {
|
|||||||
webAppUrl,
|
webAppUrl,
|
||||||
webhookUrl,
|
webhookUrl,
|
||||||
telemetryEnabled: process.env.TELEMETRY_ENABLED === 'false' ? false : true,
|
telemetryEnabled: process.env.TELEMETRY_ENABLED === 'false' ? false : true,
|
||||||
|
requestBodySizeLimit: '1mb',
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!appConfig.encryptionKey) {
|
if (!appConfig.encryptionKey) {
|
||||||
|
@@ -44,7 +44,8 @@ export default function createHttpClient({
|
|||||||
const { status } = error.response;
|
const { status } = error.response;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
status === 401 &&
|
// TODO: provide a `shouldRefreshToken` function in the app
|
||||||
|
(status === 401 || status === 403) &&
|
||||||
$.app.auth.refreshToken &&
|
$.app.auth.refreshToken &&
|
||||||
!$.app.auth.isRefreshTokenRequested
|
!$.app.auth.isRefreshTokenRequested
|
||||||
) {
|
) {
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
import express, { Router } from 'express';
|
import express, { Router } from 'express';
|
||||||
import multer from 'multer';
|
import multer from 'multer';
|
||||||
import { IRequest } from '@automatisch/types';
|
import { IRequest } from '@automatisch/types';
|
||||||
|
import appConfig from '../config/app';
|
||||||
import webhookHandler from '../controllers/webhooks/handler';
|
import webhookHandler from '../controllers/webhooks/handler';
|
||||||
|
|
||||||
const router = Router();
|
const router = Router();
|
||||||
@@ -9,6 +10,7 @@ const upload = multer();
|
|||||||
router.use(upload.none());
|
router.use(upload.none());
|
||||||
|
|
||||||
router.use(express.text({
|
router.use(express.text({
|
||||||
|
limit: appConfig.requestBodySizeLimit,
|
||||||
verify(req, res, buf) {
|
verify(req, res, buf) {
|
||||||
(req as IRequest).rawBody = buf;
|
(req as IRequest).rawBody = buf;
|
||||||
},
|
},
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import type { Server } from 'http';
|
import type { Server } from 'http';
|
||||||
|
|
||||||
import app from './app';
|
import app from './app';
|
||||||
import appConfig from './config/app';
|
import appConfig from './config/app';
|
||||||
import logger from './helpers/logger';
|
import logger from './helpers/logger';
|
||||||
@@ -6,10 +7,8 @@ import telemetry from './helpers/telemetry';
|
|||||||
|
|
||||||
telemetry.setServiceType('main');
|
telemetry.setServiceType('main');
|
||||||
|
|
||||||
const port = appConfig.port;
|
const server: Server = app.listen(appConfig.port, () => {
|
||||||
|
logger.info(`Server is listening on ${appConfig.baseUrl}`);
|
||||||
const server: Server = app.listen(port, () => {
|
|
||||||
logger.info(`Server is listening on ${port}`);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
function shutdown(server: Server) {
|
function shutdown(server: Server) {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/cli",
|
"name": "@automatisch/cli",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
"version": "oclif readme && git add README.md"
|
"version": "oclif readme && git add README.md"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@automatisch/backend": "^0.4.0",
|
"@automatisch/backend": "^0.5.0",
|
||||||
"@oclif/core": "^1",
|
"@oclif/core": "^1",
|
||||||
"@oclif/plugin-help": "^5",
|
"@oclif/plugin-help": "^5",
|
||||||
"@oclif/plugin-plugins": "^2.0.1",
|
"@oclif/plugin-plugins": "^2.0.1",
|
||||||
|
@@ -8700,10 +8700,10 @@ htmlparser2@^6.1.0:
|
|||||||
domutils "^2.5.2"
|
domutils "^2.5.2"
|
||||||
entities "^2.0.0"
|
entities "^2.0.0"
|
||||||
|
|
||||||
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
|
http-cache-semantics@4.1.1, http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
|
||||||
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
|
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
|
||||||
|
|
||||||
http-call@^5.1.2, http-call@^5.2.2:
|
http-call@^5.1.2, http-call@^5.2.2:
|
||||||
version "5.3.0"
|
version "5.3.0"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/docs",
|
"name": "@automatisch/docs",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
||||||
"private": true,
|
"private": true,
|
||||||
|
@@ -78,6 +78,15 @@ export default defineConfig({
|
|||||||
{ text: 'Connection', link: '/apps/github/connection' },
|
{ 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',
|
text: 'Ntfy',
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
@@ -87,6 +96,15 @@ export default defineConfig({
|
|||||||
{ text: 'Connection', link: '/apps/ntfy/connection' },
|
{ 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',
|
text: 'RSS',
|
||||||
collapsible: true,
|
collapsible: true,
|
||||||
@@ -102,6 +120,7 @@ export default defineConfig({
|
|||||||
collapsed: true,
|
collapsed: true,
|
||||||
items: [
|
items: [
|
||||||
{ text: 'Triggers', link: '/apps/salesforce/triggers' },
|
{ text: 'Triggers', link: '/apps/salesforce/triggers' },
|
||||||
|
{ text: 'Actions', link: '/apps/salesforce/actions' },
|
||||||
{ text: 'Connection', link: '/apps/salesforce/connection' },
|
{ text: 'Connection', link: '/apps/salesforce/connection' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
12
packages/docs/pages/apps/http-request/actions.md
Normal file
12
packages/docs/pages/apps/http-request/actions.md
Normal 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 />
|
3
packages/docs/pages/apps/http-request/connection.md
Normal file
3
packages/docs/pages/apps/http-request/connection.md
Normal 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.
|
14
packages/docs/pages/apps/openai/actions.md
Normal file
14
packages/docs/pages/apps/openai/actions.md
Normal 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 />
|
8
packages/docs/pages/apps/openai/connection.md
Normal file
8
packages/docs/pages/apps/openai/connection.md
Normal 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!
|
14
packages/docs/pages/apps/salesforce/actions.md
Normal file
14
packages/docs/pages/apps/salesforce/actions.md
Normal 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 />
|
@@ -3,6 +3,8 @@ favicon: /favicons/slack.svg
|
|||||||
items:
|
items:
|
||||||
- name: Find a message
|
- name: Find a message
|
||||||
desc: Finds a message using the Slack search feature.
|
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
|
- name: Send a message to channel
|
||||||
desc: Sends a message to a channel you specify.
|
desc: Sends a message to a channel you specify.
|
||||||
---
|
---
|
||||||
|
@@ -3,6 +3,8 @@ favicon: /favicons/twitter.svg
|
|||||||
items:
|
items:
|
||||||
- name: Create Tweet
|
- name: Create Tweet
|
||||||
desc: Create a tweet.
|
desc: Create a tweet.
|
||||||
|
- name: Search User
|
||||||
|
desc: Search a user.
|
||||||
---
|
---
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
|
@@ -11,8 +11,10 @@ Following integrations are currently supported by Automatisch.
|
|||||||
- [Discord](/apps/discord/actions)
|
- [Discord](/apps/discord/actions)
|
||||||
- [Flickr](/apps/flickr/triggers)
|
- [Flickr](/apps/flickr/triggers)
|
||||||
- [Github](/apps/github/triggers)
|
- [Github](/apps/github/triggers)
|
||||||
|
- [HTTP Request](/apps/http-request/actions)
|
||||||
|
- [Ntfy](/apps/ntfy/actions)
|
||||||
|
- [OpenAI](/apps/openai/actions)
|
||||||
- [RSS](/apps/rss/triggers)
|
- [RSS](/apps/rss/triggers)
|
||||||
- [Ntfy](/apps/ntfy/triggers)
|
|
||||||
- [Salesforce](/apps/salesforce/triggers)
|
- [Salesforce](/apps/salesforce/triggers)
|
||||||
- [Scheduler](/apps/scheduler/triggers)
|
- [Scheduler](/apps/scheduler/triggers)
|
||||||
- [Slack](/apps/slack/actions)
|
- [Slack](/apps/slack/actions)
|
||||||
|
1
packages/docs/pages/public/favicons/http-request.svg
Normal file
1
packages/docs/pages/public/favicons/http-request.svg
Normal 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 |
6
packages/docs/pages/public/favicons/openai.svg
Normal file
6
packages/docs/pages/public/favicons/openai.svg
Normal 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 |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/e2e-tests",
|
"name": "@automatisch/e2e-tests",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/types",
|
"name": "@automatisch/types",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"description": "Type definitions for automatisch",
|
"description": "Type definitions for automatisch",
|
||||||
"homepage": "https://github.com/automatisch/automatisch",
|
"homepage": "https://github.com/automatisch/automatisch",
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "@automatisch/web",
|
"name": "@automatisch/web",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0",
|
"license": "AGPL-3.0",
|
||||||
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
"description": "The open source Zapier alternative. Build workflow automation without spending time and money.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@apollo/client": "^3.6.9",
|
"@apollo/client": "^3.6.9",
|
||||||
"@automatisch/types": "^0.4.0",
|
"@automatisch/types": "^0.5.0",
|
||||||
"@emotion/react": "^11.4.1",
|
"@emotion/react": "^11.4.1",
|
||||||
"@emotion/styled": "^11.3.0",
|
"@emotion/styled": "^11.3.0",
|
||||||
"@hookform/resolvers": "^2.8.8",
|
"@hookform/resolvers": "^2.8.8",
|
||||||
|
@@ -9,6 +9,7 @@ export const UPDATE_STEP = gql`
|
|||||||
appKey
|
appKey
|
||||||
parameters
|
parameters
|
||||||
status
|
status
|
||||||
|
webhookUrl
|
||||||
connection {
|
connection {
|
||||||
id
|
id
|
||||||
}
|
}
|
||||||
|
76
yarn.lock
76
yarn.lock
@@ -6404,12 +6404,7 @@ colord@^2.9.1:
|
|||||||
resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1"
|
resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1"
|
||||||
integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==
|
integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==
|
||||||
|
|
||||||
colorette@2.0.16, colorette@^2.0.10:
|
colorette@2.0.19, colorette@^2.0.10, colorette@^2.0.16:
|
||||||
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:
|
|
||||||
version "2.0.19"
|
version "2.0.19"
|
||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798"
|
||||||
integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==
|
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"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
|
||||||
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
|
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
|
||||||
|
|
||||||
commander@^7.1.0, commander@^7.2.0:
|
commander@^7.2.0:
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
|
||||||
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
|
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"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
|
||||||
integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==
|
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:
|
common-ancestor-path@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7"
|
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:
|
dependencies:
|
||||||
ms "2.0.0"
|
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"
|
version "4.3.4"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "2.1.2"
|
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:
|
debug@^3.1.0, debug@^3.1.1, debug@^3.2.7:
|
||||||
version "3.2.7"
|
version "3.2.7"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
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"
|
call-bind "^1.0.2"
|
||||||
get-intrinsic "^1.1.1"
|
get-intrinsic "^1.1.1"
|
||||||
|
|
||||||
getopts@2.2.5:
|
getopts@2.3.0:
|
||||||
version "2.2.5"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.2.5.tgz#67a0fe471cacb9c687d817cab6450b96dde8313b"
|
resolved "https://registry.yarnpkg.com/getopts/-/getopts-2.3.0.tgz#71e5593284807e03e2427449d4f6712a268666f4"
|
||||||
integrity sha512-9jb7AW5p3in+IiJWhQiZmmwkpLaR/ccTWdWQCtZM66HJcHHLegowh4q4tSD7gouUyeNvFWRavfK9GXosQHDpFA==
|
integrity sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==
|
||||||
|
|
||||||
getos@^3.2.1:
|
getos@^3.2.1:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
@@ -9672,9 +9665,9 @@ htmlparser2@^6.1.0:
|
|||||||
entities "^2.0.0"
|
entities "^2.0.0"
|
||||||
|
|
||||||
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
|
http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390"
|
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
|
||||||
integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==
|
integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
|
||||||
|
|
||||||
http-call@^5.1.2, http-call@^5.2.2:
|
http-call@^5.1.2, http-call@^5.2.2:
|
||||||
version "5.3.0"
|
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"
|
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc"
|
||||||
integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
|
integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
|
||||||
|
|
||||||
knex@^0.95.11:
|
knex@^2.4.0:
|
||||||
version "0.95.15"
|
version "2.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/knex/-/knex-0.95.15.tgz#39d7e7110a6e2ad7de5d673d2dea94143015e0e7"
|
resolved "https://registry.yarnpkg.com/knex/-/knex-2.4.0.tgz#7d33cc36f320cdac98741010544b4c6a98b8b19e"
|
||||||
integrity sha512-Loq6WgHaWlmL2bfZGWPsy4l8xw4pOE+tmLGkPG0auBppxpI0UcK+GYCycJcqz9W54f2LiGewkCVLBm3Wq4ur/w==
|
integrity sha512-i0GWwqYp1Hs2yvc2rlDO6nzzkLhwdyOZKRdsMTB8ZxOs2IXQyL5rBjSbS1krowCh6V65T4X9CJaKtuIfkaPGSA==
|
||||||
dependencies:
|
dependencies:
|
||||||
colorette "2.0.16"
|
colorette "2.0.19"
|
||||||
commander "^7.1.0"
|
commander "^9.1.0"
|
||||||
debug "4.3.2"
|
debug "4.3.4"
|
||||||
escalade "^3.1.1"
|
escalade "^3.1.1"
|
||||||
esm "^3.2.25"
|
esm "^3.2.25"
|
||||||
getopts "2.2.5"
|
get-package-type "^0.1.0"
|
||||||
|
getopts "2.3.0"
|
||||||
interpret "^2.2.0"
|
interpret "^2.2.0"
|
||||||
lodash "^4.17.21"
|
lodash "^4.17.21"
|
||||||
pg-connection-string "2.5.0"
|
pg-connection-string "2.5.0"
|
||||||
rechoir "0.7.0"
|
rechoir "^0.8.0"
|
||||||
resolve-from "^5.0.0"
|
resolve-from "^5.0.0"
|
||||||
tarn "^3.0.1"
|
tarn "^3.0.2"
|
||||||
tildify "2.0.0"
|
tildify "2.0.0"
|
||||||
|
|
||||||
kuler@^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"
|
resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381"
|
||||||
integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==
|
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:
|
rechoir@^0.6.2:
|
||||||
version "0.6.2"
|
version "0.6.2"
|
||||||
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
|
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
|
||||||
@@ -14823,6 +14810,13 @@ rechoir@^0.6.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
resolve "^1.1.6"
|
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:
|
recursive-readdir@^2.2.2:
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f"
|
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"
|
path-parse "^1.0.7"
|
||||||
supports-preserve-symlinks-flag "^1.0.0"
|
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"
|
version "1.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f"
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f"
|
||||||
integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==
|
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"
|
mkdirp "^1.0.3"
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
tarn@^3.0.1:
|
tarn@^3.0.2:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693"
|
resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693"
|
||||||
integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==
|
integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==
|
||||||
|
Reference in New Issue
Block a user