Compare commits

..

4 Commits

Author SHA1 Message Date
Rıdvan Akca
703e434e5c feat(pdf-monkey): add delete document action 2024-02-28 16:29:01 +03:00
Rıdvan Akca
c12dacfa40 feat(pdf-monkey): add generate document action 2024-02-28 15:50:17 +03:00
Rıdvan Akca
71a404063c feat(pdf-monkey): add documents generated trigger 2024-02-27 16:40:51 +03:00
Rıdvan Akca
8bb7b16c0e feat(pdf-monkey): add pdf-monkey integration 2024-02-22 17:32:38 +03:00
813 changed files with 13795 additions and 13328 deletions

View File

@@ -28,7 +28,7 @@ cd packages/web
rm -rf .env rm -rf .env
echo " echo "
PORT=$WEB_PORT PORT=$WEB_PORT
REACT_APP_BACKEND_URL=http://localhost:$BACKEND_PORT REACT_APP_GRAPHQL_URL=http://localhost:$BACKEND_PORT/graphql
" >> .env " >> .env
cd $CURRENT_DIR cd $CURRENT_DIR

View File

@@ -4,9 +4,5 @@
**/.devcontainer **/.devcontainer
**/.github **/.github
**/.vscode **/.vscode
**/.env
**/.env.test
**/.env.production
**/yarn-error.log
packages/docs packages/docs
packages/e2e-test packages/e2e-test

18
.eslintrc.js Normal file
View File

@@ -0,0 +1,18 @@
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'prettier',
],
overrides: [
{
files: ['**/*.test.ts', '**/test/**/*.ts'],
rules: {
'@typescript-eslint/ban-ts-comment': ['off'],
},
},
],
};

View File

@@ -22,7 +22,7 @@ jobs:
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner." - run: echo "🖥️ The workflow is now ready to test your code on the runner."
- run: yarn --frozen-lockfile - run: yarn --frozen-lockfile
- run: cd packages/backend && yarn lint - run: yarn lint
- run: echo "🍏 This job's status is ${{ job.status }}." - run: echo "🍏 This job's status is ${{ job.status }}."
start-backend-server: start-backend-server:
runs-on: ubuntu-latest runs-on: ubuntu-latest

View File

@@ -1,32 +0,0 @@
name: Automatisch Docs Change
on:
pull_request:
paths:
- 'packages/docs/**'
jobs:
label:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Label PR
uses: actions/github-script@v6
with:
script: |
const { pull_request } = context.payload;
const label = 'documentation-change';
const hasLabel = pull_request.labels.some(({ name }) => name === label);
if (!hasLabel) {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pull_request.number,
labels: [label],
});
console.log(`Label "${label}" added to PR #${pull_request.number}`);
} else {
console.log(`Label "${label}" already exists on PR #${pull_request.number}`);
}

View File

@@ -62,9 +62,8 @@ jobs:
run: yarn && yarn lerna bootstrap run: yarn && yarn lerna bootstrap
- name: Install Playwright Browsers - name: Install Playwright Browsers
run: yarn playwright install --with-deps run: yarn playwright install --with-deps
- name: Build Automatisch web - name: Build Automatisch
working-directory: ./packages/web run: yarn lerna run --scope=@*/{web,cli} build
run: yarn build
env: env:
# Keep this until we clean up warnings in build processes # Keep this until we clean up warnings in build processes
CI: false CI: false

View File

@@ -1,25 +1,14 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM node:18-alpine FROM node:18-alpine
ENV PORT 3000
RUN \
apk --no-cache add --virtual build-dependencies python3 build-base git
WORKDIR /automatisch WORKDIR /automatisch
# copy the app, note .dockerignore
COPY . /automatisch
RUN yarn
RUN cd packages/web && yarn build
RUN \ RUN \
apk --no-cache add --virtual build-dependencies python3 build-base && \
yarn global add @automatisch/cli@0.10.0 --network-timeout 1000000 && \
rm -rf /usr/local/share/.cache/ && \ rm -rf /usr/local/share/.cache/ && \
apk del build-dependencies apk del build-dependencies
COPY ./docker/entrypoint.sh /entrypoint.sh COPY ./entrypoint.sh /entrypoint.sh
EXPOSE 3000 EXPOSE 3000
ENTRYPOINT ["sh", "/entrypoint.sh"] ENTRYPOINT ["sh", "/entrypoint.sh"]

View File

@@ -2,12 +2,8 @@
set -e set -e
cd packages/backend
if [ -n "$WORKER" ]; then if [ -n "$WORKER" ]; then
yarn start:worker automatisch start-worker
else else
yarn db:migrate automatisch start
yarn db:seed:user
yarn start
fi fi

View File

@@ -6,6 +6,7 @@
"start": "lerna run --stream --parallel --scope=@*/{web,backend} dev", "start": "lerna run --stream --parallel --scope=@*/{web,backend} dev",
"start:web": "lerna run --stream --scope=@*/web dev", "start:web": "lerna run --stream --scope=@*/web dev",
"start:backend": "lerna run --stream --scope=@*/backend dev", "start:backend": "lerna run --stream --scope=@*/backend dev",
"lint": "lerna run --no-bail --stream --parallel --scope=@*/{web,backend} lint",
"build:docs": "cd ./packages/docs && yarn install && yarn build" "build:docs": "cd ./packages/docs && yarn install && yarn build"
}, },
"workspaces": { "workspaces": {
@@ -20,6 +21,8 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.9.1",
"@typescript-eslint/parser": "^5.9.1",
"eslint": "^8.13.0", "eslint": "^8.13.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-prettier": "^4.0.0",

View File

@@ -11,7 +11,7 @@
"start:worker": "node src/worker.js", "start:worker": "node src/worker.js",
"pretest": "APP_ENV=test node ./test/setup/prepare-test-env.js", "pretest": "APP_ENV=test node ./test/setup/prepare-test-env.js",
"test": "APP_ENV=test vitest run", "test": "APP_ENV=test vitest run",
"lint": "eslint .", "lint": "eslint . --ignore-path ../../.eslintignore",
"db:create": "node ./bin/database/create.js", "db:create": "node ./bin/database/create.js",
"db:seed:user": "node ./bin/database/seed-user.js", "db:seed:user": "node ./bin/database/seed-user.js",
"db:drop": "node ./bin/database/drop.js", "db:drop": "node ./bin/database/drop.js",
@@ -31,14 +31,13 @@
"accounting": "^0.4.1", "accounting": "^0.4.1",
"ajv-formats": "^2.1.1", "ajv-formats": "^2.1.1",
"axios": "1.6.0", "axios": "1.6.0",
"bcrypt": "^5.1.0", "bcrypt": "^5.0.1",
"bullmq": "^3.0.0", "bullmq": "^3.0.0",
"cors": "^2.8.5", "cors": "^2.8.5",
"crypto-js": "^4.1.1", "crypto-js": "^4.1.1",
"debug": "~2.6.9", "debug": "~2.6.9",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"express": "~4.18.2", "express": "~4.18.2",
"express-async-handler": "^1.2.0",
"express-basic-auth": "^1.2.1", "express-basic-auth": "^1.2.1",
"express-graphql": "^0.12.0", "express-graphql": "^0.12.0",
"fast-xml-parser": "^4.0.11", "fast-xml-parser": "^4.0.11",
@@ -95,7 +94,6 @@
"url": "https://github.com/automatisch/automatisch/issues" "url": "https://github.com/automatisch/automatisch/issues"
}, },
"devDependencies": { "devDependencies": {
"node-gyp": "^10.1.0",
"nodemon": "^2.0.13", "nodemon": "^2.0.13",
"supertest": "^6.3.3", "supertest": "^6.3.3",
"vitest": "^1.1.3" "vitest": "^1.1.3"

View File

@@ -11,7 +11,7 @@ export default defineApp({
'https://azure.microsoft.com/en-us/products/ai-services/openai-service', 'https://azure.microsoft.com/en-us/products/ai-services/openai-service',
apiBaseUrl: '', apiBaseUrl: '',
iconUrl: '{BASE_URL}/apps/azure-openai/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/azure-openai/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/azure-openai/connection', authDocUrl: 'https://automatisch.io/docs/apps/azure-openai/connection',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Carbone', name: 'Carbone',
key: 'carbone', key: 'carbone',
iconUrl: '{BASE_URL}/apps/carbone/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/carbone/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/carbone/connection', authDocUrl: 'https://automatisch.io/docs/apps/carbone/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://carbone.io', baseUrl: 'https://carbone.io',
apiBaseUrl: 'https://api.carbone.io', apiBaseUrl: 'https://api.carbone.io',

View File

@@ -1,27 +0,0 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Get value',
key: 'getValue',
description: 'Get value from the persistent datastore.',
arguments: [
{
label: 'Key',
key: 'key',
type: 'string',
required: true,
description: 'The key of your value to get.',
variables: true,
},
],
async run($) {
const keyValuePair = await $.datastore.get({
key: $.step.parameters.key,
});
$.setActionItem({
raw: keyValuePair,
});
},
});

View File

@@ -1,4 +0,0 @@
import getValue from './get-value/index.js';
import setValue from './set-value/index.js';
export default [getValue, setValue];

View File

@@ -1,36 +0,0 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Set value',
key: 'setValue',
description: 'Set value to the persistent datastore.',
arguments: [
{
label: 'Key',
key: 'key',
type: 'string',
required: true,
description: 'The key of your value to set.',
variables: true,
},
{
label: 'Value',
key: 'value',
type: 'string',
required: true,
description: 'The value to set.',
variables: true,
},
],
async run($) {
const keyValuePair = await $.datastore.set({
key: $.step.parameters.key,
value: $.step.parameters.value,
});
$.setActionItem({
raw: keyValuePair,
});
},
});

View File

@@ -1,13 +0,0 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" id="icon">
<defs>
<style>.cls-1{fill:none;}</style>
</defs>
<title>datastore</title>
<circle cx="23" cy="23" r="1"/>
<rect x="8" y="22" width="12" height="2"/>
<circle cx="23" cy="9" r="1"/>
<rect x="8" y="8" width="12" height="2"/>
<path d="M26,14a2,2,0,0,0,2-2V6a2,2,0,0,0-2-2H6A2,2,0,0,0,4,6v6a2,2,0,0,0,2,2H8v4H6a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V20a2,2,0,0,0-2-2H24V14ZM6,6H26v6H6ZM26,26H6V20H26Zm-4-8H10V14H22Z"/>
<rect id="_Transparent_Rectangle_" data-name="&lt;Transparent Rectangle&gt;" class="cls-1" width="32" height="32"/>
</svg>

Before

Width:  |  Height:  |  Size: 704 B

View File

@@ -1,14 +0,0 @@
import defineApp from '../../helpers/define-app.js';
import actions from './actions/index.js';
export default defineApp({
name: 'Datastore',
key: 'datastore',
iconUrl: '{BASE_URL}/apps/datastore/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/datastore/connection',
supportsConnections: false,
baseUrl: '',
apiBaseUrl: '',
primaryColor: '001F52',
actions,
});

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'DeepL', name: 'DeepL',
key: 'deepl', key: 'deepl',
iconUrl: '{BASE_URL}/apps/deepl/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/deepl/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/deepl/connection', authDocUrl: 'https://automatisch.io/docs/apps/deepl/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://deepl.com', baseUrl: 'https://deepl.com',
apiBaseUrl: 'https://api.deepl.com', apiBaseUrl: 'https://api.deepl.com',

View File

@@ -5,7 +5,7 @@ export default defineApp({
name: 'Delay', name: 'Delay',
key: 'delay', key: 'delay',
iconUrl: '{BASE_URL}/apps/delay/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/delay/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/delay/connection', authDocUrl: 'https://automatisch.io/docs/apps/delay/connection',
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -10,7 +10,7 @@ export default defineApp({
name: 'Discord', name: 'Discord',
key: 'discord', key: 'discord',
iconUrl: '{BASE_URL}/apps/discord/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/discord/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/discord/connection', authDocUrl: 'https://automatisch.io/docs/apps/discord/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://discord.com', baseUrl: 'https://discord.com',
apiBaseUrl: 'https://discord.com/api', apiBaseUrl: 'https://discord.com/api',

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Dropbox', name: 'Dropbox',
key: 'dropbox', key: 'dropbox',
iconUrl: '{BASE_URL}/apps/dropbox/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/dropbox/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/dropbox/connection', authDocUrl: 'https://automatisch.io/docs/apps/dropbox/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://dropbox.com', baseUrl: 'https://dropbox.com',
apiBaseUrl: 'https://api.dropboxapi.com', apiBaseUrl: 'https://api.dropboxapi.com',

View File

@@ -5,7 +5,7 @@ export default defineApp({
name: 'Filter', name: 'Filter',
key: 'filter', key: 'filter',
iconUrl: '{BASE_URL}/apps/filter/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/filter/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/filter/connection', authDocUrl: 'https://automatisch.io/docs/apps/filter/connection',
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -8,7 +8,7 @@ export default defineApp({
name: 'Flickr', name: 'Flickr',
key: 'flickr', key: 'flickr',
iconUrl: '{BASE_URL}/apps/flickr/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/flickr/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/flickr/connection', authDocUrl: 'https://automatisch.io/docs/apps/flickr/connection',
docUrl: 'https://automatisch.io/docs/flickr', docUrl: 'https://automatisch.io/docs/flickr',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Flowers Software', name: 'Flowers Software',
key: 'flowers-software', key: 'flowers-software',
iconUrl: '{BASE_URL}/apps/flowers-software/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/flowers-software/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/flowers-software/connection', authDocUrl: 'https://automatisch.io/docs/apps/flowers-software/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://flowers-software.com', baseUrl: 'https://flowers-software.com',
apiBaseUrl: 'https://webapp.flowers-software.com/api', apiBaseUrl: 'https://webapp.flowers-software.com/api',

View File

@@ -6,7 +6,7 @@ export default defineApp({
name: 'Formatter', name: 'Formatter',
key: 'formatter', key: 'formatter',
iconUrl: '{BASE_URL}/apps/formatter/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/formatter/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/formatter/connection', authDocUrl: 'https://automatisch.io/docs/apps/formatter/connection',
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://ghost.org', baseUrl: 'https://ghost.org',
apiBaseUrl: '', apiBaseUrl: '',
iconUrl: '{BASE_URL}/apps/ghost/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/ghost/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/ghost/connection', authDocUrl: 'https://automatisch.io/docs/apps/ghost/connection',
primaryColor: '15171A', primaryColor: '15171A',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],

View File

@@ -1,102 +0,0 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Create issue',
key: 'createIssue',
description: 'Creates a new issue.',
arguments: [
{
label: 'Repo',
key: 'repo',
type: 'dropdown',
required: true,
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listRepos',
},
],
},
},
{
label: 'Title',
key: 'title',
type: 'string',
required: true,
variables: true,
},
{
label: 'Body',
key: 'body',
type: 'string',
required: true,
variables: true,
},
{
label: 'Labels',
key: 'labels',
type: 'dynamic',
required: false,
fields: [
{
label: 'Label',
key: 'label',
type: 'dropdown',
description: 'Only trigger on issues when this label is added.',
required: false,
variables: true,
dependsOn: ['parameters.repo'],
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listLabels',
},
{
name: 'parameters.repo',
value: '{parameters.repo}',
},
{
name: 'parameters.showLabelId',
value: 'true',
},
],
},
},
],
},
],
async run($) {
const repoOwner = $.auth.data.repoOwner;
const repo = $.step.parameters.repo;
const title = $.step.parameters.title;
const issueBody = $.step.parameters.body;
const allLabels = $.step.parameters.labels;
const formattedAllLabels = allLabels
.filter((label) => label.label !== '')
.map((label) => label.label);
const body = {
title,
body: issueBody,
};
if (formattedAllLabels.length) {
body.labels = formattedAllLabels;
}
const response = await $.http.post(
`/repos/${repoOwner}/${repo}/issues`,
body
);
$.setActionItem({ raw: response.data });
},
});

View File

@@ -1,3 +0,0 @@
import createIssue from './create-issue/index.js';
export default [createIssue];

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" style="enable-background:new 0 0 640 640" xml:space="preserve" width="32" height="32"><path style="fill:#fff" d="m395.9 484.2-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5 21.2-17.9 33.8-11.8 17.2 8.3 27.1 13 27.1 13l-.1-109.2 16.7-.1.1 117.1s57.4 24.2 83.1 40.1c3.7 2.3 10.2 6.8 12.9 14.4 2.1 6.1 2 13.1-1 19.3l-61 126.9c-6.2 12.7-21.4 18.1-33.9 12z"/><path style="fill:#609926" d="M622.7 149.8c-4.1-4.1-9.6-4-9.6-4s-117.2 6.6-177.9 8c-13.3.3-26.5.6-39.6.7v117.2c-5.5-2.6-11.1-5.3-16.6-7.9 0-36.4-.1-109.2-.1-109.2-29 .4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5c-9.8-.6-22.5-2.1-39 1.5-8.7 1.8-33.5 7.4-53.8 26.9C-4.9 212.4 6.6 276.2 8 285.8c1.7 11.7 6.9 44.2 31.7 72.5 45.8 56.1 144.4 54.8 144.4 54.8s12.1 28.9 30.6 55.5c25 33.1 50.7 58.9 75.7 62 63 0 188.9-.1 188.9-.1s12 .1 28.3-10.3c14-8.5 26.5-23.4 26.5-23.4S547 483 565 451.5c5.5-9.7 10.1-19.1 14.1-28 0 0 55.2-117.1 55.2-231.1-1.1-34.5-9.6-40.6-11.6-42.6zM125.6 353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6 321.8 60 295.4c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5 38.5-30c13.8-3.7 31-3.1 31-3.1s7.1 59.4 15.7 94.2c7.2 29.2 24.8 77.7 24.8 77.7s-26.1-3.1-43-9.1zm300.3 107.6s-6.1 14.5-19.6 15.4c-5.8.4-10.3-1.2-10.3-1.2s-.3-.1-5.3-2.1l-112.9-55s-10.9-5.7-12.8-15.6c-2.2-8.1 2.7-18.1 2.7-18.1L322 273s4.8-9.7 12.2-13c.6-.3 2.3-1 4.5-1.5 8.1-2.1 18 2.8 18 2.8L467.4 315s12.6 5.7 15.3 16.2c1.9 7.4-.5 14-1.8 17.2-6.3 15.4-55 113.1-55 113.1z"/><path style="fill:#609926" d="M326.8 380.1c-8.2.1-15.4 5.8-17.3 13.8-1.9 8 2 16.3 9.1 20 7.7 4 17.5 1.8 22.7-5.4 5.1-7.1 4.3-16.9-1.8-23.1l24-49.1c1.5.1 3.7.2 6.2-.5 4.1-.9 7.1-3.6 7.1-3.6 4.2 1.8 8.6 3.8 13.2 6.1 4.8 2.4 9.3 4.9 13.4 7.3.9.5 1.8 1.1 2.8 1.9 1.6 1.3 3.4 3.1 4.7 5.5 1.9 5.5-1.9 14.9-1.9 14.9-2.3 7.6-18.4 40.6-18.4 40.6-8.1-.2-15.3 5-17.7 12.5-2.6 8.1 1.1 17.3 8.9 21.3 7.8 4 17.4 1.7 22.5-5.3 5-6.8 4.6-16.3-1.1-22.6 1.9-3.7 3.7-7.4 5.6-11.3 5-10.4 13.5-30.4 13.5-30.4.9-1.7 5.7-10.3 2.7-21.3-2.5-11.4-12.6-16.7-12.6-16.7-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3 4.7-9.7 9.4-19.3 14.1-29-4.1-2-8.1-4-12.2-6.1-4.8 9.8-9.7 19.7-14.5 29.5-6.7-.1-12.9 3.5-16.1 9.4-3.4 6.3-2.7 14.1 1.9 19.8l-24.6 50.4z"/></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1,24 +0,0 @@
import { URLSearchParams } from 'url';
export default async function generateAuthUrl($) {
const oauthRedirectUrlField = $.app.auth.fields.find(
(field) => field.key == 'oAuthRedirectUrl'
);
const redirectUri = oauthRedirectUrlField.value;
const state = Math.random().toString();
const searchParams = new URLSearchParams({
client_id: $.auth.data.clientId,
redirect_uri: redirectUri,
response_type: 'code',
state: state,
});
const url = `${
$.auth.data.instanceUrl
}/login/oauth/authorize?${searchParams.toString()}`;
await $.auth.set({
url,
originalState: state,
});
}

View File

@@ -1,59 +0,0 @@
import generateAuthUrl from './generate-auth-url.js';
import verifyCredentials from './verify-credentials.js';
import refreshToken from './refresh-token.js';
import isStillVerified from './is-still-verified.js';
export default {
fields: [
{
key: 'oAuthRedirectUrl',
label: 'OAuth Redirect URL',
type: 'string',
required: true,
readOnly: true,
value: '{WEB_APP_URL}/app/gitea/connections/add',
placeholder: null,
description:
'When asked to input a redirect URL in Gitea, enter the URL above.',
clickToCopy: true,
},
{
key: 'instanceUrl',
label: 'Instance URL',
type: 'string',
required: true,
readOnly: false,
value: null,
placeholder: null,
description: null,
clickToCopy: false,
},
{
key: 'clientId',
label: 'Client ID',
type: 'string',
required: true,
readOnly: false,
value: null,
placeholder: null,
description: null,
clickToCopy: false,
},
{
key: 'clientSecret',
label: 'Client Secret',
type: 'string',
required: true,
readOnly: false,
value: null,
placeholder: null,
description: null,
clickToCopy: false,
},
],
generateAuthUrl,
verifyCredentials,
isStillVerified,
refreshToken,
};

View File

@@ -1,29 +0,0 @@
import { URLSearchParams } from 'node:url';
const refreshToken = async ($) => {
const params = new URLSearchParams({
client_id: $.auth.data.clientId,
client_secret: $.auth.data.clientSecret,
grant_type: 'refresh_token',
refresh_token: $.auth.data.refreshToken,
});
const { data } = await $.http.post(
`${$.auth.data.instanceUrl}/login/oauth/access_token`,
params.toString(),
{
additionalProperties: {
skipAddingBaseUrl: true,
},
}
);
await $.auth.set({
accessToken: data.access_token,
expiresIn: data.expires_in,
tokenType: data.token_type,
refreshToken: data.refresh_token,
});
};
export default refreshToken;

View File

@@ -1,50 +0,0 @@
import getCurrentUser from '../common/get-current-user.js';
import { URLSearchParams } from 'url';
const verifyCredentials = async ($) => {
if ($.auth.data.originalState !== $.auth.data.state) {
throw new Error(`The 'state' parameter does not match.`);
}
const oauthRedirectUrlField = $.app.auth.fields.find(
(field) => field.key == 'oAuthRedirectUrl'
);
const redirectUri = oauthRedirectUrlField.value;
const params = new URLSearchParams({
client_id: $.auth.data.clientId,
client_secret: $.auth.data.clientSecret,
code: $.auth.data.code,
grant_type: 'authorization_code',
redirect_uri: redirectUri,
});
const { data } = await $.http.post(
`${$.auth.data.instanceUrl}/login/oauth/access_token`,
params.toString(),
{
additionalProperties: {
skipAddingBaseUrl: true,
},
}
);
await $.auth.set({
accessToken: data.access_token,
tokenType: data.token_type,
});
const currentUser = await getCurrentUser($);
const screenName = [currentUser.username, currentUser.email]
.filter(Boolean)
.join(' @ ');
await $.auth.set({
clientId: $.auth.data.clientId,
clientSecret: $.auth.data.clientSecret,
expiresIn: data.expires_in,
refreshToken: data.refresh_token,
repoOwner: currentUser.username,
screenName,
});
};
export default verifyCredentials;

View File

@@ -1,9 +0,0 @@
const addAuthHeader = ($, requestConfig) => {
if ($.auth.data?.accessToken) {
requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`;
}
return requestConfig;
};
export default addAuthHeader;

View File

@@ -1,6 +0,0 @@
const getCurrentUser = async ($) => {
const { data: currentUser } = await $.http.get(`/user`);
return currentUser;
};
export default getCurrentUser;

View File

@@ -1,14 +0,0 @@
const setBaseUrl = ($, requestConfig) => {
if (requestConfig.additionalProperties?.skipAddingBaseUrl)
return requestConfig;
const instanceUrl = $.auth.data.instanceUrl;
if (instanceUrl) {
requestConfig.baseURL = `${instanceUrl}/api/v1`;
}
return requestConfig;
};
export default setBaseUrl;

View File

@@ -1,4 +0,0 @@
import listLabels from './list-labels/index.js';
import listRepos from './list-repos/index.js';
export default [listLabels, listRepos];

View File

@@ -1,42 +0,0 @@
export default {
name: 'List labels',
key: 'listLabels',
async run($) {
const labels = {
data: [],
};
const repoOwner = $.auth.data.repoOwner;
const repo = $.step.parameters.repo;
const showLabelId = $.step.parameters.showLabelId === 'true';
const params = {
page: 1,
limit: 100,
};
let totalCount;
let totalRequestedCount;
do {
const { data, headers } = await $.http.get(
`/repos/${repoOwner}/${repo}/labels`,
{ params }
);
params.page = params.page + 1;
totalCount = Number(headers['x-total-count']);
totalRequestedCount = params.page * params.limit;
if (data?.length) {
for (const label of data) {
const value = showLabelId ? label.id : label.name;
labels.data.push({
value,
name: label.name,
});
}
}
} while (totalRequestedCount <= totalCount);
return labels;
},
};

View File

@@ -1,35 +0,0 @@
export default {
name: 'List repos',
key: 'listRepos',
async run($) {
const repos = {
data: [],
};
const params = {
page: 1,
limit: 100,
};
let totalCount;
let totalRequestedCount;
do {
const { data, headers } = await $.http.get('/user/repos', { params });
params.page = params.page + 1;
totalCount = Number(headers['x-total-count']);
totalRequestedCount = params.page * params.limit;
if (data?.length) {
for (const repo of data) {
repos.data.push({
value: repo.name,
name: repo.name,
});
}
}
} while (totalRequestedCount <= totalCount);
return repos;
},
};

View File

@@ -1,5 +0,0 @@
import newIssues from './new-issues/index.js';
import newStargazers from './new-stargazers/index.js';
import newWatchers from './new-watchers/index.js';
export default [newIssues, newStargazers, newWatchers];

View File

@@ -1,121 +0,0 @@
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New issues',
key: 'newIssues',
pollInterval: 15,
description: 'Triggers when a new issue is created.',
arguments: [
{
label: 'Repo',
key: 'repo',
type: 'dropdown',
required: true,
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listRepos',
},
],
},
},
{
label: 'Which types of issues should this trigger on?',
key: 'issueType',
type: 'dropdown',
description: 'Defaults to any issue you can see.',
required: true,
variables: true,
value: 'all',
options: [
{
label: 'Closed',
value: 'closed',
},
{
label: 'Open',
value: 'open',
},
{
label: 'All',
value: 'all',
},
],
},
{
label: 'Labels',
key: 'labels',
type: 'dynamic',
required: false,
fields: [
{
label: 'Label',
key: 'label',
type: 'dropdown',
description: 'Only trigger on issues when this label is added.',
required: false,
variables: true,
dependsOn: ['parameters.repo'],
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listLabels',
},
{
name: 'parameters.repo',
value: '{parameters.repo}',
},
],
},
},
],
},
],
async run($) {
const repo = $.step.parameters.repo;
const issueType = $.step.parameters.issueType;
const allLabels = $.step.parameters.labels;
const formattedAllLabels = allLabels.map((label) => label.label).join(',');
const repoOwner = $.auth.data.repoOwner;
const params = {
page: 1,
limit: 100,
state: issueType,
labels: formattedAllLabels,
};
let totalCount;
let totalRequestedCount;
do {
const { data, headers } = await $.http.get(
`/repos/${repoOwner}/${repo}/issues`,
{
params,
}
);
params.page = params.page + 1;
totalCount = Number(headers['x-total-count']);
totalRequestedCount = params.page * params.limit;
if (data?.length) {
for (const issue of data) {
$.pushTriggerItem({
raw: issue,
meta: {
internalId: issue.id.toString(),
},
});
}
}
} while (totalRequestedCount <= totalCount);
},
});

View File

@@ -1,61 +0,0 @@
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New stargazers',
key: 'newStargazers',
pollInterval: 15,
description: 'Triggers when a user stars a repository.',
arguments: [
{
label: 'Repo',
key: 'repo',
type: 'dropdown',
required: true,
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listRepos',
},
],
},
},
],
async run($) {
const repo = $.step.parameters.repo;
const repoOwner = $.auth.data.repoOwner;
const params = {
page: 1,
limit: 100,
};
let totalCount;
let totalRequestedCount;
do {
const { data, headers } = await $.http.get(
`/repos/${repoOwner}/${repo}/stargazers`,
{
params,
}
);
params.page = params.page + 1;
totalCount = Number(headers['x-total-count']);
totalRequestedCount = params.page * params.limit;
if (data?.length) {
for (const stargazer of data) {
$.pushTriggerItem({
raw: stargazer,
meta: {
internalId: stargazer.id.toString(),
},
});
}
}
} while (totalRequestedCount <= totalCount);
},
});

View File

@@ -1,61 +0,0 @@
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New watchers',
key: 'newWatchers',
pollInterval: 15,
description: 'Triggers when a user watches a repository.',
arguments: [
{
label: 'Repo',
key: 'repo',
type: 'dropdown',
required: true,
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listRepos',
},
],
},
},
],
async run($) {
const repo = $.step.parameters.repo;
const repoOwner = $.auth.data.repoOwner;
const params = {
page: 1,
limit: 100,
};
let totalCount;
let totalRequestedCount;
do {
const { data, headers } = await $.http.get(
`/repos/${repoOwner}/${repo}/subscribers`,
{
params,
}
);
params.page = params.page + 1;
totalCount = Number(headers['x-total-count']);
totalRequestedCount = params.page * params.limit;
if (data?.length) {
for (const subscriber of data) {
$.pushTriggerItem({
raw: subscriber,
meta: {
internalId: subscriber.id.toString(),
},
});
}
}
} while (totalRequestedCount <= totalCount);
},
});

View File

@@ -11,7 +11,7 @@ export default defineApp({
baseUrl: 'https://github.com', baseUrl: 'https://github.com',
apiBaseUrl: 'https://api.github.com', apiBaseUrl: 'https://api.github.com',
iconUrl: '{BASE_URL}/apps/github/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/github/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/github/connection', authDocUrl: 'https://automatisch.io/docs/apps/github/connection',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -11,7 +11,7 @@ export default defineApp({
baseUrl: 'https://gitlab.com', baseUrl: 'https://gitlab.com',
apiBaseUrl: 'https://gitlab.com', apiBaseUrl: 'https://gitlab.com',
iconUrl: '{BASE_URL}/apps/gitlab/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/gitlab/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/gitlab/connection', authDocUrl: 'https://automatisch.io/docs/apps/gitlab/connection',
primaryColor: 'FC6D26', primaryColor: 'FC6D26',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://calendar.google.com', baseUrl: 'https://calendar.google.com',
apiBaseUrl: 'https://www.googleapis.com/calendar', apiBaseUrl: 'https://www.googleapis.com/calendar',
iconUrl: '{BASE_URL}/apps/google-calendar/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/google-calendar/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/google-calendar/connection', authDocUrl: 'https://automatisch.io/docs/apps/google-calendar/connection',
primaryColor: '448AFF', primaryColor: '448AFF',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://drive.google.com', baseUrl: 'https://drive.google.com',
apiBaseUrl: 'https://www.googleapis.com/drive', apiBaseUrl: 'https://www.googleapis.com/drive',
iconUrl: '{BASE_URL}/apps/google-drive/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/google-drive/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/google-drive/connection', authDocUrl: 'https://automatisch.io/docs/apps/google-drive/connection',
primaryColor: '1FA463', primaryColor: '1FA463',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://docs.google.com/forms', baseUrl: 'https://docs.google.com/forms',
apiBaseUrl: 'https://forms.googleapis.com', apiBaseUrl: 'https://forms.googleapis.com',
iconUrl: '{BASE_URL}/apps/google-forms/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/google-forms/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/google-forms/connection', authDocUrl: 'https://automatisch.io/docs/apps/google-forms/connection',
primaryColor: '673AB7', primaryColor: '673AB7',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -12,7 +12,7 @@ export default defineApp({
baseUrl: 'https://docs.google.com/spreadsheets', baseUrl: 'https://docs.google.com/spreadsheets',
apiBaseUrl: 'https://sheets.googleapis.com', apiBaseUrl: 'https://sheets.googleapis.com',
iconUrl: '{BASE_URL}/apps/google-sheets/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/google-sheets/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/google-sheets/connection', authDocUrl: 'https://automatisch.io/docs/apps/google-sheets/connection',
primaryColor: '0F9D58', primaryColor: '0F9D58',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -1,3 +1,4 @@
import FormData from 'form-data';
import defineAction from '../../../../helpers/define-action.js'; import defineAction from '../../../../helpers/define-action.js';
export default defineAction({ export default defineAction({
@@ -5,51 +6,45 @@ export default defineAction({
key: 'newChat', key: 'newChat',
description: 'Create a new chat session for Helix AI.', description: 'Create a new chat session for Helix AI.',
arguments: [ arguments: [
{
label: 'Session ID',
key: 'sessionId',
type: 'string',
required: false,
description:
'ID of the chat session to continue. Leave empty to start a new chat.',
variables: true,
},
{
label: 'System Prompt',
key: 'systemPrompt',
type: 'string',
required: false,
description:
'Optional system prompt to start the chat with. It will be used only for new chat sessions.',
variables: true,
},
{ {
label: 'Input', label: 'Input',
key: 'input', key: 'input',
type: 'string', type: 'string',
required: true, required: true,
description: 'User input to start the chat with.', description: 'Prompt to start the chat with.',
variables: true, variables: true,
}, },
], ],
async run($) { async run($) {
const response = await $.http.post('/api/v1/sessions/chat', { const formData = new FormData();
session_id: $.step.parameters.sessionId, formData.append('input', $.step.parameters.input);
system: $.step.parameters.systemPrompt, formData.append('mode', 'inference');
messages: [ formData.append('type', 'text');
{
role: 'user', const sessionResponse = await $.http.post('/api/v1/sessions', formData, {
content: { headers: {
content_type: 'text', ...formData.getHeaders(),
parts: [$.step.parameters.input],
}, },
},
],
}); });
const sessionId = sessionResponse.data.id;
let chatGenerated = false;
while (!chatGenerated) {
const response = await $.http.get(`/api/v1/sessions/${sessionId}`);
const message =
response.data.interactions[response.data.interactions.length - 1];
if (message.creator === 'system' && message.state === 'complete') {
$.setActionItem({ $.setActionItem({
raw: response.data, raw: message,
}); });
chatGenerated = true;
}
}
}, },
}); });

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://tryhelix.ai', baseUrl: 'https://tryhelix.ai',
apiBaseUrl: 'https://app.tryhelix.ai', apiBaseUrl: 'https://app.tryhelix.ai',
iconUrl: '{BASE_URL}/apps/helix/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/helix/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/helix/connection', authDocUrl: 'https://automatisch.io/docs/apps/helix/connection',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],

View File

@@ -90,7 +90,7 @@ export default defineAction({
async run($) { async run($) {
const method = $.step.parameters.method; const method = $.step.parameters.method;
const data = $.step.parameters.data || null; const data = $.step.parameters.data;
const url = $.step.parameters.url; const url = $.step.parameters.url;
const headers = $.step.parameters.headers; const headers = $.step.parameters.headers;
@@ -108,17 +108,14 @@ export default defineAction({
return result; return result;
}, {}); }, {});
let expectedResponseContentType = headersObject.accept; let contentType = headersObject['content-type'];
// in case HEAD request is not supported by the URL // in case HEAD request is not supported by the URL
try { try {
const metadataResponse = await $.http.head(url, { const metadataResponse = await $.http.head(url, {
headers: headersObject, headers: headersObject,
}); });
contentType = metadataResponse.headers['content-type'];
if (!expectedResponseContentType) {
expectedResponseContentType = metadataResponse.headers['content-type'];
}
throwIfFileSizeExceedsLimit(metadataResponse.headers['content-length']); throwIfFileSizeExceedsLimit(metadataResponse.headers['content-length']);
// eslint-disable-next-line no-empty // eslint-disable-next-line no-empty
@@ -131,7 +128,7 @@ export default defineAction({
headers: headersObject, headers: headersObject,
}; };
if (!isPossiblyTextBased(expectedResponseContentType)) { if (!isPossiblyTextBased(contentType)) {
requestData.responseType = 'arraybuffer'; requestData.responseType = 'arraybuffer';
} }
@@ -141,7 +138,7 @@ export default defineAction({
let responseData = response.data; let responseData = response.data;
if (!isPossiblyTextBased(expectedResponseContentType)) { if (!isPossiblyTextBased(contentType)) {
responseData = Buffer.from(responseData).toString('base64'); responseData = Buffer.from(responseData).toString('base64');
} }

View File

@@ -5,7 +5,7 @@ export default defineApp({
name: 'HTTP Request', name: 'HTTP Request',
key: 'http-request', key: 'http-request',
iconUrl: '{BASE_URL}/apps/http-request/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/http-request/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/http-request/connection', authDocUrl: 'https://automatisch.io/docs/apps/http-request/connection',
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'HubSpot', name: 'HubSpot',
key: 'hubspot', key: 'hubspot',
iconUrl: '{BASE_URL}/apps/hubspot/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/hubspot/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/hubspot/connection', authDocUrl: 'https://automatisch.io/docs/apps/hubspot/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://www.hubspot.com', baseUrl: 'https://www.hubspot.com',
apiBaseUrl: 'https://api.hubapi.com', apiBaseUrl: 'https://api.hubapi.com',

View File

@@ -12,7 +12,7 @@ export default defineApp({
baseUrl: 'https://invoiceninja.com', baseUrl: 'https://invoiceninja.com',
apiBaseUrl: 'https://invoicing.co/api', apiBaseUrl: 'https://invoicing.co/api',
iconUrl: '{BASE_URL}/apps/invoice-ninja/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/invoice-ninja/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/invoice-ninja/connection', authDocUrl: 'https://automatisch.io/docs/apps/invoice-ninja/connection',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],

View File

@@ -10,7 +10,7 @@ export default defineApp({
name: 'Mattermost', name: 'Mattermost',
key: 'mattermost', key: 'mattermost',
iconUrl: '{BASE_URL}/apps/mattermost/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/mattermost/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/mattermost/connection', authDocUrl: 'https://automatisch.io/docs/apps/mattermost/connection',
baseUrl: 'https://mattermost.com', baseUrl: 'https://mattermost.com',
apiBaseUrl: '', // there is no cloud version of this app, user always need to provide address of own instance when creating connection apiBaseUrl: '', // there is no cloud version of this app, user always need to provide address of own instance when creating connection
primaryColor: '4a154b', primaryColor: '4a154b',

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://miro.com', baseUrl: 'https://miro.com',
apiBaseUrl: 'https://api.miro.com', apiBaseUrl: 'https://api.miro.com',
iconUrl: '{BASE_URL}/apps/miro/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/miro/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/miro/connection', authDocUrl: 'https://automatisch.io/docs/apps/miro/connection',
primaryColor: 'F2CA02', primaryColor: 'F2CA02',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -12,7 +12,7 @@ export default defineApp({
baseUrl: 'https://notion.com', baseUrl: 'https://notion.com',
apiBaseUrl: 'https://api.notion.com', apiBaseUrl: 'https://api.notion.com',
iconUrl: '{BASE_URL}/apps/notion/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/notion/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/notion/connection', authDocUrl: 'https://automatisch.io/docs/apps/notion/connection',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader, addNotionVersionHeader], beforeRequest: [addAuthHeader, addNotionVersionHeader],

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Ntfy', name: 'Ntfy',
key: 'ntfy', key: 'ntfy',
iconUrl: '{BASE_URL}/apps/ntfy/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/ntfy/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/ntfy/connection', authDocUrl: 'https://automatisch.io/docs/apps/ntfy/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://ntfy.sh', baseUrl: 'https://ntfy.sh',
apiBaseUrl: 'https://ntfy.sh', apiBaseUrl: 'https://ntfy.sh',

View File

@@ -6,7 +6,7 @@ export default defineApp({
name: 'Odoo', name: 'Odoo',
key: 'odoo', key: 'odoo',
iconUrl: '{BASE_URL}/apps/odoo/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/odoo/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/odoo/connection', authDocUrl: 'https://automatisch.io/docs/apps/odoo/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://odoo.com', baseUrl: 'https://odoo.com',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://openai.com', baseUrl: 'https://openai.com',
apiBaseUrl: 'https://api.openai.com', apiBaseUrl: 'https://api.openai.com',
iconUrl: '{BASE_URL}/apps/openai/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/openai/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/openai/connection', authDocUrl: 'https://automatisch.io/docs/apps/openai/connection',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -0,0 +1,29 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Delete document',
key: 'deleteDocument',
description: 'Deletes a document.',
arguments: [
{
label: 'Document ID',
key: 'documentId',
type: 'string',
required: true,
description: '',
variables: true,
},
],
async run($) {
const { documentId } = $.step.parameters;
await $.http.delete(`/v1/documents/${documentId}`);
$.setActionItem({
raw: {
result: 'successful',
},
});
},
});

View File

@@ -0,0 +1,241 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Generate document',
key: 'generateDocument',
description: 'Creates a new document.',
arguments: [
{
label: 'Workspace',
key: 'workspaceId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listWorkspaces',
},
],
},
},
{
label: 'Template',
key: 'templateId',
type: 'dropdown',
required: false,
depensOn: ['parameters.workspaceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listTemplates',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
{
label: 'Use a Custom Json Structure?',
key: 'useCustomJsonStructure',
type: 'dropdown',
required: true,
description:
'Please indicate "yes" if you would rather create a full JSON payload instead of relying on Automatisch mapping for the Document data.',
variables: true,
options: [
{
label: 'Yes',
value: true,
},
{
label: 'No',
value: false,
},
],
additionalFields: {
type: 'query',
name: 'getDynamicFields',
arguments: [
{
name: 'key',
value: 'listDocumentData',
},
{
name: 'parameters.useCustomJsonStructure',
value: '{parameters.useCustomJsonStructure}',
},
],
},
},
{
label: 'Add Line Items?',
key: 'addLineItems',
type: 'dropdown',
required: true,
description:
'Choose "yes" to include information for Line Items (such as in an invoice).',
variables: true,
options: [
{
label: 'Yes',
value: true,
},
{
label: 'No',
value: false,
},
],
additionalFields: {
type: 'query',
name: 'getDynamicFields',
arguments: [
{
name: 'key',
value: 'listLineItems',
},
{
name: 'parameters.addLineItems',
value: '{parameters.addLineItems}',
},
],
},
},
{
label: 'Custom Filename',
key: 'customFilename',
type: 'string',
required: false,
description:
'You have the option to define a custom filename for generated documents. If left blank, a random value will be assigned.',
variables: true,
},
{
label: 'Meta Data',
key: 'metaData',
type: 'dynamic',
required: false,
description:
'Extra information appended to the generated Document but not accessible within its Template.',
fields: [
{
label: 'Key',
key: 'metaDataKey',
type: 'string',
required: false,
description: '',
variables: true,
},
{
label: 'Value',
key: 'metaDataValue',
type: 'string',
required: false,
description: '',
variables: true,
},
],
},
],
async run($) {
const {
templateId,
useCustomJsonStructure,
customJsonPayload,
customFilename,
addLineItems,
lineItems,
documentData,
metaData,
} = $.step.parameters;
let payload = {};
let meta = {};
const documentDataObject = documentData.reduce((result, entry) => {
const key = entry.documentDataKey?.toLowerCase();
const value = entry.documentDataValue;
if (key && value) {
return {
...result,
[entry.documentDataKey?.toLowerCase()]: entry.documentDataValue,
};
}
return result;
}, {});
const lineItemsObject = lineItems.reduce((result, entry) => {
const key = entry.lineItemKey?.toLowerCase();
const value = entry.lineItemValue;
if (key && value) {
return {
...result,
[entry.lineItemKey?.toLowerCase()]: entry.lineItemValue,
};
}
return result;
}, {});
const metaDataObject = metaData.reduce((result, entry) => {
const key = entry.metaDataKey?.toLowerCase();
const value = entry.metaDataValue;
if (key && value) {
return {
...result,
[entry.metaDataKey?.toLowerCase()]: entry.metaDataValue,
};
}
return result;
}, {});
if (metaDataObject) {
meta = metaDataObject;
}
if (customFilename) {
meta._filename = customFilename;
}
if (useCustomJsonStructure) {
payload = JSON.parse(customJsonPayload);
} else {
payload = documentDataObject;
}
if (addLineItems) {
payload.lineItems = [lineItemsObject];
}
const body = {
document: {
document_template_id: templateId,
meta: JSON.stringify(meta),
payload: JSON.stringify(payload),
status: 'pending',
},
};
const { data } = await $.http.post('/v1/documents', body);
$.setActionItem({
raw: data,
});
},
});

View File

@@ -0,0 +1,4 @@
import deleteDocument from './delete-document/index.js';
import generateDocument from './generate-document/index.js';
export default [deleteDocument, generateDocument];

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 112 KiB

View File

@@ -0,0 +1,21 @@
import verifyCredentials from './verify-credentials.js';
import isStillVerified from './is-still-verified.js';
export default {
fields: [
{
key: 'apiKey',
label: 'API Key',
type: 'string',
required: true,
readOnly: false,
value: null,
placeholder: null,
description: 'PDFMonkey API secret key of your account.',
clickToCopy: false,
},
],
verifyCredentials,
isStillVerified,
};

View File

@@ -2,7 +2,7 @@ import getCurrentUser from '../common/get-current-user.js';
const isStillVerified = async ($) => { const isStillVerified = async ($) => {
const currentUser = await getCurrentUser($); const currentUser = await getCurrentUser($);
return !!currentUser.email; return !!currentUser.id;
}; };
export default isStillVerified; export default isStillVerified;

View File

@@ -0,0 +1,15 @@
import getCurrentUser from '../common/get-current-user.js';
const verifyCredentials = async ($) => {
const currentUser = await getCurrentUser($);
const screenName = [currentUser.desired_name, currentUser.email]
.filter(Boolean)
.join(' @ ');
await $.auth.set({
screenName,
apiKey: $.auth.data.apiKey,
});
};
export default verifyCredentials;

View File

@@ -0,0 +1,9 @@
const addAuthHeader = ($, requestConfig) => {
if ($.auth.data?.apiKey) {
requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiKey}`;
}
return requestConfig;
};
export default addAuthHeader;

View File

@@ -0,0 +1,8 @@
const getCurrentUser = async ($) => {
const response = await $.http.get('/v1/current_user');
const currentUser = response.data.current_user;
return currentUser;
};
export default getCurrentUser;

View File

@@ -0,0 +1,4 @@
import listTemplates from './list-templates/index.js';
import listWorkspaces from './list-workspaces/index.js';
export default [listTemplates, listWorkspaces];

View File

@@ -0,0 +1,39 @@
export default {
name: 'List templates',
key: 'listTemplates',
async run($) {
const templates = {
data: [],
};
const workspaceId = $.step.parameters.workspaceId;
let next = false;
const params = {
page: 'all',
'q[workspace_id]': workspaceId,
};
if (!workspaceId) {
return templates;
}
do {
const { data } = await $.http.get('/v1/document_template_cards', params);
next = data.meta.next_page;
if (!data?.document_template_cards?.length) {
return;
}
for (const template of data.document_template_cards) {
templates.data.push({
value: template.id,
name: template.identifier,
});
}
} while (next);
return templates;
},
};

View File

@@ -0,0 +1,29 @@
export default {
name: 'List workspaces',
key: 'listWorkspaces',
async run($) {
const workspaces = {
data: [],
};
let next = false;
do {
const { data } = await $.http.get('/v1/workspace_cards');
next = data.meta.next_page;
if (!data?.workspace_cards?.length) {
return;
}
for (const workspace of data.workspace_cards) {
workspaces.data.push({
value: workspace.id,
name: workspace.identifier,
});
}
} while (next);
return workspaces;
},
};

View File

@@ -0,0 +1,4 @@
import listDocumentData from './list-document-data/index.js';
import listLineItems from './list-line-items/index.js';
export default [listDocumentData, listLineItems];

View File

@@ -0,0 +1,48 @@
export default {
name: 'List document data',
key: 'listDocumentData',
async run($) {
if ($.step.parameters.useCustomJsonStructure) {
return [
{
label: 'Data for the Document (JSON Payload)',
key: 'customJsonPayload',
type: 'string',
required: false,
description:
'Use the JSON format { "firstname": "John", "lastname": "Doe" }.',
variables: true,
},
];
} else {
return [
{
label: 'Data for the Document',
key: 'documentData',
type: 'dynamic',
required: false,
description: '',
fields: [
{
label: 'Key',
key: 'documentDataKey',
type: 'string',
required: false,
description: '',
variables: true,
},
{
label: 'Value',
key: 'documentDataValue',
type: 'string',
required: false,
description: '',
variables: true,
},
],
},
];
}
},
};

View File

@@ -0,0 +1,37 @@
export default {
name: 'List line items',
key: 'listLineItems',
async run($) {
if ($.step.parameters.addLineItems) {
return [
{
label: 'Line Items',
key: 'lineItems',
type: 'dynamic',
required: false,
description:
'Data for a single item. Available as "lineItems" in your PDFMonkey Template.',
fields: [
{
label: 'Key',
key: 'lineItemKey',
type: 'string',
required: false,
description: '',
variables: true,
},
{
label: 'Value',
key: 'lineItemValue',
type: 'string',
required: false,
description: '',
variables: true,
},
],
},
];
}
},
};

View File

@@ -1,23 +1,24 @@
import defineApp from '../../helpers/define-app.js'; import defineApp from '../../helpers/define-app.js';
import addAuthHeader from './common/add-auth-header.js'; import addAuthHeader from './common/add-auth-header.js';
import auth from './auth/index.js'; import auth from './auth/index.js';
import setBaseUrl from './common/set-base-url.js';
import triggers from './triggers/index.js'; import triggers from './triggers/index.js';
import dynamicData from './dynamic-data/index.js'; import dynamicData from './dynamic-data/index.js';
import actions from './actions/index.js'; import actions from './actions/index.js';
import dynamicFields from './dynamic-fields/index.js';
export default defineApp({ export default defineApp({
name: 'Gitea', name: 'PDFMonkey',
key: 'gitea', key: 'pdf-monkey',
iconUrl: '{BASE_URL}/apps/gitea/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/pdf-monkey/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/gitea/connection', authDocUrl: 'https://automatisch.io/docs/apps/pdf-monkey/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: 'https://pdfmonkey.io',
apiBaseUrl: '', apiBaseUrl: 'https://api.pdfmonkey.io/api',
primaryColor: '609926', primaryColor: '376794',
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,
dynamicData, dynamicData,
actions, actions,
dynamicFields,
}); });

View File

@@ -0,0 +1,99 @@
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'Documents Generated',
key: 'documentsGenerated',
pollInterval: 15,
description:
'Triggers upon the successful completion of document generation.',
arguments: [
{
label: 'Workspace',
key: 'workspaceId',
type: 'dropdown',
required: true,
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listWorkspaces',
},
],
},
},
{
label: 'Templates',
key: 'templateIds',
type: 'dynamic',
required: false,
description: 'Apply this trigger exclusively for particular templates.',
fields: [
{
label: 'Template',
key: 'templateId',
type: 'dropdown',
required: false,
depensOn: ['parameters.workspaceId'],
description: '',
variables: true,
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{
name: 'key',
value: 'listTemplates',
},
{
name: 'parameters.workspaceId',
value: '{parameters.workspaceId}',
},
],
},
},
],
},
],
async run($) {
const workspaceId = $.step.parameters.workspaceId;
const templateIds = $.step.parameters.templateIds;
const allTemplates = templateIds
.map((templateId) => templateId.templateId)
.join(',');
const params = {
'page[size]': 100,
'q[workspace_id]': workspaceId,
'q[status]': 'success',
};
if (!templateIds.length) {
params['q[document_template_id]'] = allTemplates;
}
let next = false;
do {
const { data } = await $.http.get('/v1/document_cards', { params });
if (!data?.document_cards?.length) {
return;
}
next = data.meta.next_page;
for (const document of data.document_cards) {
$.pushTriggerItem({
raw: document,
meta: {
internalId: document.id,
},
});
}
} while (next);
},
});

View File

@@ -0,0 +1,3 @@
import documentsGenerated from './documents-generated/index.js';
export default [documentsGenerated];

View File

@@ -64,18 +64,33 @@ export default defineAction({
value: '1', value: '1',
description: description:
'The ID of the stage this deal will be added to. If omitted, the deal will be placed in the first stage of the default pipeline.', 'The ID of the stage this deal will be added to. If omitted, the deal will be placed in the first stage of the default pipeline.',
variables: true, options: [
source: {
type: 'query',
name: 'getDynamicData',
arguments: [
{ {
name: 'key', label: 'Qualified (Pipeline)',
value: 'listStages', value: 1,
},
{
label: 'Contact Made (Pipeline)',
value: 2,
},
{
label: 'Prospect Qualified (Pipeline)',
value: 3,
},
{
label: 'Needs Defined (Pipeline)',
value: 4,
},
{
label: 'Proposal Made (Pipeline)',
value: 5,
},
{
label: 'Negotiations Started (Pipeline)',
value: 6,
}, },
], ],
}, },
},
{ {
label: 'Owner', label: 'Owner',
key: 'userId', key: 'userId',

View File

@@ -1,25 +1,23 @@
import listActivityTypes from './list-activity-types/index.js'; import listActivityTypes from './list-activity-types/index.js';
import listCurrencies from './list-currencies/index.js'; import listCurrencies from './list-currencies/index.js';
import listDeals from './list-deals/index.js'; import listDeals from './list-deals/index.js';
import listLeadLabels from './list-lead-labels/index.js';
import listLeads from './list-leads/index.js'; import listLeads from './list-leads/index.js';
import listOrganizationLabelField from './list-organization-label-field/index.js'; import listLeadLabels from './list-lead-labels/index.js';
import listOrganizations from './list-organizations/index.js'; import listOrganizations from './list-organizations/index.js';
import listOrganizationLabelField from './list-organization-label-field/index.js';
import listPersonLabelField from './list-person-label-field/index.js'; import listPersonLabelField from './list-person-label-field/index.js';
import listPersons from './list-persons/index.js'; import listPersons from './list-persons/index.js';
import listStages from './list-stages/index.js';
import listUsers from './list-users/index.js'; import listUsers from './list-users/index.js';
export default [ export default [
listActivityTypes, listActivityTypes,
listCurrencies, listCurrencies,
listDeals, listDeals,
listLeadLabels,
listLeads, listLeads,
listOrganizationLabelField, listLeadLabels,
listOrganizations, listOrganizations,
listOrganizationLabelField,
listPersonLabelField, listPersonLabelField,
listPersons, listPersons,
listStages,
listUsers, listUsers,
]; ];

View File

@@ -1,23 +0,0 @@
export default {
name: 'List stages',
key: 'listStages',
async run($) {
const stages = {
data: [],
};
const { data } = await $.http.get('/api/v1/stages');
if (data.data?.length) {
for (const stage of data.data) {
stages.data.push({
value: stage.id,
name: stage.name,
});
}
}
return stages;
},
};

View File

@@ -12,7 +12,7 @@ export default defineApp({
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
iconUrl: '{BASE_URL}/apps/pipedrive/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/pipedrive/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/pipedrive/connection', authDocUrl: 'https://automatisch.io/docs/apps/pipedrive/connection',
primaryColor: 'FFFFFF', primaryColor: 'FFFFFF',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],

View File

@@ -8,7 +8,7 @@ export default defineApp({
name: 'Placetel', name: 'Placetel',
key: 'placetel', key: 'placetel',
iconUrl: '{BASE_URL}/apps/placetel/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/placetel/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/placetel/connection', authDocUrl: 'https://automatisch.io/docs/apps/placetel/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://placetel.de', baseUrl: 'https://placetel.de',
apiBaseUrl: 'https://api.placetel.de', apiBaseUrl: 'https://api.placetel.de',

View File

@@ -6,7 +6,7 @@ export default defineApp({
name: 'PostgreSQL', name: 'PostgreSQL',
key: 'postgresql', key: 'postgresql',
iconUrl: '{BASE_URL}/apps/postgresql/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/postgresql/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/postgresql/connection', authDocUrl: 'https://automatisch.io/docs/apps/postgresql/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -9,7 +9,7 @@ export default defineApp({
baseUrl: 'https://pushover.net', baseUrl: 'https://pushover.net',
apiBaseUrl: 'https://api.pushover.net', apiBaseUrl: 'https://api.pushover.net',
iconUrl: '{BASE_URL}/apps/pushover/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/pushover/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/pushover/connection', authDocUrl: 'https://automatisch.io/docs/apps/pushover/connection',
primaryColor: '249DF1', primaryColor: '249DF1',
supportsConnections: true, supportsConnections: true,
auth, auth,

View File

@@ -10,7 +10,7 @@ export default defineApp({
baseUrl: 'https://www.reddit.com', baseUrl: 'https://www.reddit.com',
apiBaseUrl: 'https://oauth.reddit.com', apiBaseUrl: 'https://oauth.reddit.com',
iconUrl: '{BASE_URL}/apps/reddit/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/reddit/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/reddit/connection', authDocUrl: 'https://automatisch.io/docs/apps/reddit/connection',
primaryColor: 'FF4500', primaryColor: 'FF4500',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Remove.bg', name: 'Remove.bg',
key: 'removebg', key: 'removebg',
iconUrl: '{BASE_URL}/apps/removebg/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/removebg/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/removebg/connection', authDocUrl: 'https://automatisch.io/docs/apps/removebg/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://www.remove.bg', baseUrl: 'https://www.remove.bg',
apiBaseUrl: 'https://api.remove.bg/v1.0', apiBaseUrl: 'https://api.remove.bg/v1.0',

View File

@@ -5,7 +5,7 @@ export default defineApp({
name: 'RSS', name: 'RSS',
key: 'rss', key: 'rss',
iconUrl: '{BASE_URL}/apps/rss/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/rss/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/rss/connection', authDocUrl: 'https://automatisch.io/docs/apps/rss/connection',
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -9,7 +9,7 @@ export default defineApp({
name: 'Salesforce', name: 'Salesforce',
key: 'salesforce', key: 'salesforce',
iconUrl: '{BASE_URL}/apps/salesforce/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/salesforce/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/connections/salesforce', authDocUrl: 'https://automatisch.io/docs/connections/salesforce',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://salesforce.com', baseUrl: 'https://salesforce.com',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -6,7 +6,7 @@ export default defineApp({
key: 'scheduler', key: 'scheduler',
iconUrl: '{BASE_URL}/apps/scheduler/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/scheduler/assets/favicon.svg',
docUrl: 'https://automatisch.io/docs/scheduler', docUrl: 'https://automatisch.io/docs/scheduler',
authDocUrl: '{DOCS_URL}/apps/scheduler/connection', authDocUrl: 'https://automatisch.io/docs/apps/scheduler/connection',
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '0059F7', primaryColor: '0059F7',

View File

@@ -11,7 +11,7 @@ export default defineApp({
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
iconUrl: '{BASE_URL}/apps/self-hosted-llm/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/self-hosted-llm/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/self-hosted-llm/connection', authDocUrl: 'https://automatisch.io/docs/apps/self-hosted-llm/connection',
primaryColor: '000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],

View File

@@ -9,7 +9,7 @@ export default defineApp({
name: 'SignalWire', name: 'SignalWire',
key: 'signalwire', key: 'signalwire',
iconUrl: '{BASE_URL}/apps/signalwire/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/signalwire/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/signalwire/connection', authDocUrl: 'https://automatisch.io/docs/apps/signalwire/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://signalwire.com', baseUrl: 'https://signalwire.com',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -9,7 +9,7 @@ export default defineApp({
name: 'Slack', name: 'Slack',
key: 'slack', key: 'slack',
iconUrl: '{BASE_URL}/apps/slack/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/slack/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/slack/connection', authDocUrl: 'https://automatisch.io/docs/apps/slack/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://slack.com', baseUrl: 'https://slack.com',
apiBaseUrl: 'https://slack.com/api', apiBaseUrl: 'https://slack.com/api',

View File

@@ -6,7 +6,7 @@ export default defineApp({
name: 'SMTP', name: 'SMTP',
key: 'smtp', key: 'smtp',
iconUrl: '{BASE_URL}/apps/smtp/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/smtp/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/smtp/connection', authDocUrl: 'https://automatisch.io/docs/apps/smtp/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Spotify', name: 'Spotify',
key: 'spotify', key: 'spotify',
iconUrl: '{BASE_URL}/apps/spotify/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/spotify/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/spotify/connection', authDocUrl: 'https://automatisch.io/docs/apps/spotify/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://spotify.com', baseUrl: 'https://spotify.com',
apiBaseUrl: 'https://api.spotify.com', apiBaseUrl: 'https://api.spotify.com',

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Strava', name: 'Strava',
key: 'strava', key: 'strava',
iconUrl: '{BASE_URL}/apps/strava/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/strava/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/connections/strava', authDocUrl: 'https://automatisch.io/docs/connections/strava',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://www.strava.com', baseUrl: 'https://www.strava.com',
apiBaseUrl: 'https://www.strava.com/api', apiBaseUrl: 'https://www.strava.com/api',

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Stripe', name: 'Stripe',
key: 'stripe', key: 'stripe',
iconUrl: '{BASE_URL}/apps/stripe/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/stripe/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/stripe/connection', authDocUrl: 'https://automatisch.io/docs/apps/stripe/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://stripe.com', baseUrl: 'https://stripe.com',
apiBaseUrl: 'https://api.stripe.com', apiBaseUrl: 'https://api.stripe.com',

View File

@@ -7,7 +7,7 @@ export default defineApp({
name: 'Telegram', name: 'Telegram',
key: 'telegram-bot', key: 'telegram-bot',
iconUrl: '{BASE_URL}/apps/telegram-bot/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/telegram-bot/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/telegram-bot/connection', authDocUrl: 'https://automatisch.io/docs/apps/telegram-bot/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://telegram.org', baseUrl: 'https://telegram.org',
apiBaseUrl: 'https://api.telegram.org', apiBaseUrl: 'https://api.telegram.org',

Some files were not shown because too many files have changed in this diff Show More