Compare commits

..

1 Commits

Author SHA1 Message Date
Ali BARIN
ab4abd590a feat(formatter/text): stringify json transformer 2024-08-16 14:08:00 +00:00
610 changed files with 22125 additions and 35845 deletions

View File

@@ -5,11 +5,8 @@ BACKEND_PORT=3000
WEB_PORT=3001 WEB_PORT=3001
echo "Configuring backend environment variables..." echo "Configuring backend environment variables..."
cd packages/backend cd packages/backend
rm -rf .env rm -rf .env
echo " echo "
PORT=$BACKEND_PORT PORT=$BACKEND_PORT
WEB_APP_URL=http://localhost:$WEB_PORT WEB_APP_URL=http://localhost:$WEB_PORT
@@ -24,35 +21,24 @@ WEBHOOK_SECRET_KEY=sample_webhook_secret_key
APP_SECRET_KEY=sample_app_secret_key APP_SECRET_KEY=sample_app_secret_key
REDIS_HOST=redis REDIS_HOST=redis
SERVE_WEB_APP_SEPARATELY=true" >> .env SERVE_WEB_APP_SEPARATELY=true" >> .env
echo "Installing backend dependencies..."
yarn
cd $CURRENT_DIR cd $CURRENT_DIR
echo "Configuring web environment variables..." echo "Configuring web environment variables..."
cd packages/web 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_BACKEND_URL=http://localhost:$BACKEND_PORT
" >> .env " >> .env
echo "Installing web dependencies..."
yarn
cd $CURRENT_DIR cd $CURRENT_DIR
echo "Installing and linking dependencies..."
yarn
yarn lerna bootstrap
echo "Migrating database..." echo "Migrating database..."
cd packages/backend cd packages/backend
yarn db:migrate yarn db:migrate
yarn db:seed:user yarn db:seed:user
echo "Done!" echo "Done!"

View File

@@ -41,11 +41,8 @@ jobs:
with: with:
node-version: 18 node-version: 18
- name: Install dependencies - name: Install dependencies
run: yarn run: cd packages/backend && yarn
working-directory: packages/backend
- name: Copy .env-example.test file to .env.test - name: Copy .env-example.test file to .env.test
run: cp .env-example.test .env.test run: cd packages/backend && cp .env-example.test .env.test
working-directory: packages/backend
- name: Run tests - name: Run tests
run: yarn test:coverage run: cd packages/backend && yarn test
working-directory: packages/backend

View File

@@ -18,13 +18,11 @@ jobs:
with: with:
node-version: '18' node-version: '18'
cache: 'yarn' cache: 'yarn'
cache-dependency-path: packages/backend/yarn.lock cache-dependency-path: yarn.lock
- 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
working-directory: packages/backend - run: cd packages/backend && yarn lint
- run: yarn lint
working-directory: packages/backend
- 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
@@ -37,13 +35,11 @@ jobs:
with: with:
node-version: '18' node-version: '18'
cache: 'yarn' cache: 'yarn'
cache-dependency-path: packages/backend/yarn.lock cache-dependency-path: yarn.lock
- 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 && yarn lerna bootstrap
working-directory: packages/backend - run: cd packages/backend && yarn start
- run: yarn start
working-directory: packages/backend
env: env:
ENCRYPTION_KEY: sample_encryption_key ENCRYPTION_KEY: sample_encryption_key
WEBHOOK_SECRET_KEY: sample_webhook_secret_key WEBHOOK_SECRET_KEY: sample_webhook_secret_key
@@ -59,13 +55,11 @@ jobs:
with: with:
node-version: '18' node-version: '18'
cache: 'yarn' cache: 'yarn'
cache-dependency-path: packages/backend/yarn.lock cache-dependency-path: yarn.lock
- 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 && yarn lerna bootstrap
working-directory: packages/backend - run: cd packages/backend && yarn start:worker
- run: yarn start:worker
working-directory: packages/backend
env: env:
ENCRYPTION_KEY: sample_encryption_key ENCRYPTION_KEY: sample_encryption_key
WEBHOOK_SECRET_KEY: sample_webhook_secret_key WEBHOOK_SECRET_KEY: sample_webhook_secret_key
@@ -81,13 +75,11 @@ jobs:
with: with:
node-version: '18' node-version: '18'
cache: 'yarn' cache: 'yarn'
cache-dependency-path: packages/web/yarn.lock cache-dependency-path: yarn.lock
- 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 && yarn lerna bootstrap
working-directory: packages/web - run: cd packages/web && yarn build
- run: yarn build
working-directory: packages/web
env: env:
CI: false CI: false
- run: echo "🍏 This job's status is ${{ job.status }}." - run: echo "🍏 This job's status is ${{ job.status }}."

View File

@@ -3,13 +3,12 @@ on:
push: push:
branches: branches:
- main - main
# TODO: Add pull request after optimizing the total excecution time of the test suite. pull_request:
# pull_request: paths:
# paths: - 'packages/backend/**'
# - 'packages/backend/**' - 'packages/e2e-tests/**'
# - 'packages/e2e-tests/**' - 'packages/web/**'
# - 'packages/web/**' - '!packages/backend/src/apps/**'
# - '!packages/backend/src/apps/**'
workflow_dispatch: workflow_dispatch:
env: env:
@@ -59,21 +58,13 @@ jobs:
- uses: actions/setup-node@v3 - uses: actions/setup-node@v3
with: with:
node-version: 18 node-version: 18
- name: Install web dependencies - name: Install dependencies
run: yarn run: yarn && yarn lerna bootstrap
working-directory: ./packages/web
- name: Install backend dependencies
run: yarn
working-directory: ./packages/backend
- name: Install e2e-tests dependencies
run: yarn
working-directory: ./packages/e2e-tests
- name: Install Playwright Browsers - name: Install Playwright Browsers
run: yarn playwright install --with-deps run: yarn playwright install --with-deps
working-directory: ./packages/e2e-tests
- name: Build Automatisch web - name: Build Automatisch web
run: yarn build
working-directory: ./packages/web working-directory: ./packages/web
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

1
.gitignore vendored
View File

@@ -4,6 +4,7 @@ logs
npm-debug.log* npm-debug.log*
yarn-debug.log* yarn-debug.log*
yarn-error.log* yarn-error.log*
lerna-debug.log*
.pnpm-debug.log* .pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html) # Diagnostic reports (https://nodejs.org/api/report.html)

View File

@@ -11,12 +11,10 @@ WORKDIR /automatisch
# copy the app, note .dockerignore # copy the app, note .dockerignore
COPY . /automatisch COPY . /automatisch
RUN cd packages/web && yarn RUN yarn
RUN cd packages/web && yarn build RUN cd packages/web && yarn build
RUN cd packages/backend && yarn --production
RUN \ RUN \
rm -rf /usr/local/share/.cache/ && \ rm -rf /usr/local/share/.cache/ && \
apk del build-dependencies apk del build-dependencies

13
lerna.json Normal file
View File

@@ -0,0 +1,13 @@
{
"packages": [
"packages/*"
],
"version": "0.10.0",
"npmClient": "yarn",
"useWorkspaces": true,
"command": {
"add": {
"exact": true
}
}
}

32
package.json Normal file
View File

@@ -0,0 +1,32 @@
{
"name": "@automatisch/root",
"license": "See LICENSE file",
"private": true,
"scripts": {
"start": "lerna run --stream --parallel --scope=@*/{web,backend} dev",
"start:web": "lerna run --stream --scope=@*/web dev",
"start:backend": "lerna run --stream --scope=@*/backend dev",
"build:docs": "cd ./packages/docs && yarn install && yarn build"
},
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"**/babel-loader",
"**/webpack",
"**/@automatisch/web",
"**/ajv"
]
},
"devDependencies": {
"eslint": "^8.13.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"lerna": "^4.0.0",
"prettier": "^2.5.1"
},
"publishConfig": {
"access": "public"
}
}

View File

@@ -10,7 +10,7 @@ import process from 'process';
async function fetchAdminRole() { async function fetchAdminRole() {
const role = await Role.query() const role = await Role.query()
.where({ .where({
name: 'Admin', key: 'admin',
}) })
.limit(1) .limit(1)
.first(); .first();

View File

@@ -11,8 +11,6 @@
"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",
"test:watch": "APP_ENV=test vitest watch",
"test:coverage": "yarn test --coverage",
"lint": "eslint .", "lint": "eslint .",
"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",
@@ -24,7 +22,8 @@
"dependencies": { "dependencies": {
"@bull-board/express": "^3.10.1", "@bull-board/express": "^3.10.1",
"@casl/ability": "^6.5.0", "@casl/ability": "^6.5.0",
"@faker-js/faker": "^9.2.0", "@graphql-tools/graphql-file-loader": "^7.3.4",
"@graphql-tools/load": "^7.5.2",
"@node-saml/passport-saml": "^4.0.4", "@node-saml/passport-saml": "^4.0.4",
"@rudderstack/rudder-sdk-node": "^1.1.2", "@rudderstack/rudder-sdk-node": "^1.1.2",
"@sentry/node": "^7.42.0", "@sentry/node": "^7.42.0",
@@ -38,13 +37,14 @@
"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",
"eslint": "^8.13.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"express": "~4.18.2", "express": "~4.18.2",
"express-async-errors": "^3.1.1", "express-async-handler": "^1.2.0",
"express-basic-auth": "^1.2.1", "express-basic-auth": "^1.2.1",
"express-graphql": "^0.12.0",
"fast-xml-parser": "^4.0.11", "fast-xml-parser": "^4.0.11",
"graphql-middleware": "^6.1.15",
"graphql-shield": "^7.5.0",
"graphql-tools": "^8.2.0",
"handlebars": "^4.7.7", "handlebars": "^4.7.7",
"http-errors": "~1.6.3", "http-errors": "~1.6.3",
"http-proxy-agent": "^7.0.0", "http-proxy-agent": "^7.0.0",
@@ -66,7 +66,6 @@
"pg": "^8.7.1", "pg": "^8.7.1",
"php-serialize": "^4.0.2", "php-serialize": "^4.0.2",
"pluralize": "^8.0.0", "pluralize": "^8.0.0",
"prettier": "^2.5.1",
"raw-body": "^2.5.2", "raw-body": "^2.5.2",
"showdown": "^2.1.0", "showdown": "^2.1.0",
"uuid": "^9.0.1", "uuid": "^9.0.1",
@@ -98,19 +97,16 @@
"url": "https://github.com/automatisch/automatisch/issues" "url": "https://github.com/automatisch/automatisch/issues"
}, },
"devDependencies": { "devDependencies": {
"@vitest/coverage-v8": "^2.1.5",
"node-gyp": "^10.1.0", "node-gyp": "^10.1.0",
"nodemon": "^2.0.13", "nodemon": "^2.0.13",
"supertest": "^6.3.3", "supertest": "^6.3.3",
"vitest": "^2.1.5" "vitest": "^1.1.3"
}, },
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
"nodemonConfig": { "nodemonConfig": {
"watch": [ "watch": [ "src/" ],
"src/"
],
"ext": "js" "ext": "js"
} }
} }

View File

@@ -1,6 +1,5 @@
import createError from 'http-errors'; import createError from 'http-errors';
import express from 'express'; import express from 'express';
import 'express-async-errors';
import cors from 'cors'; import cors from 'cors';
import appConfig from './config/app.js'; import appConfig from './config/app.js';

View File

@@ -12,7 +12,7 @@ export default defineApp({
apiBaseUrl: 'https://api.airtable.com', apiBaseUrl: 'https://api.airtable.com',
iconUrl: '{BASE_URL}/apps/airtable/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/airtable/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/airtable/connection', authDocUrl: '{DOCS_URL}/apps/airtable/connection',
primaryColor: '#FFBF00', primaryColor: 'FFBF00',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -12,7 +12,7 @@ export default defineApp({
apiBaseUrl: 'https://cloud.appwrite.io', apiBaseUrl: 'https://cloud.appwrite.io',
iconUrl: '{BASE_URL}/apps/appwrite/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/appwrite/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/appwrite/connection', authDocUrl: '{DOCS_URL}/apps/appwrite/connection',
primaryColor: '#FD366E', primaryColor: 'FD366E',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -12,7 +12,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/azure-openai/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://carbone.io', baseUrl: 'https://carbone.io',
apiBaseUrl: 'https://api.carbone.io', apiBaseUrl: 'https://api.carbone.io',
primaryColor: '#6f42c1', primaryColor: '6f42c1',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

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

View File

@@ -33,7 +33,6 @@ export default defineAction({
type: 'string', type: 'string',
required: true, required: true,
variables: true, variables: true,
valueType: 'parse',
}, },
], ],
}, },

View File

@@ -8,7 +8,7 @@ export default defineApp({
apiBaseUrl: '', apiBaseUrl: '',
iconUrl: '{BASE_URL}/apps/code/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/code/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/code/connection', authDocUrl: '{DOCS_URL}/apps/code/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: false, supportsConnections: false,
actions, actions,
}); });

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://deepl.com', baseUrl: 'https://deepl.com',
apiBaseUrl: 'https://api.deepl.com', apiBaseUrl: 'https://api.deepl.com',
primaryColor: '#0d2d45', primaryColor: '0d2d45',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -14,7 +14,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://discord.com', baseUrl: 'https://discord.com',
apiBaseUrl: 'https://discord.com/api', apiBaseUrl: 'https://discord.com/api',
primaryColor: '#5865f2', primaryColor: '5865f2',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
dynamicData, dynamicData,

View File

@@ -11,7 +11,7 @@ export default defineApp({
apiBaseUrl: 'https://disqus.com/api', apiBaseUrl: 'https://disqus.com/api',
iconUrl: '{BASE_URL}/apps/disqus/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/disqus/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/disqus/connection', authDocUrl: '{DOCS_URL}/apps/disqus/connection',
primaryColor: '#2E9FFF', primaryColor: '2E9FFF',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://dropbox.com', baseUrl: 'https://dropbox.com',
apiBaseUrl: 'https://api.dropboxapi.com', apiBaseUrl: 'https://api.dropboxapi.com',
primaryColor: '#0061ff', primaryColor: '0061ff',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
}); });

View File

@@ -10,7 +10,7 @@ export default defineApp({
iconUrl: '{BASE_URL}/apps/flickr/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/flickr/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/flickr/connection', authDocUrl: '{DOCS_URL}/apps/flickr/connection',
docUrl: 'https://automatisch.io/docs/flickr', docUrl: 'https://automatisch.io/docs/flickr',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://www.flickr.com/', baseUrl: 'https://www.flickr.com/',
apiBaseUrl: 'https://www.flickr.com/services', apiBaseUrl: 'https://www.flickr.com/services',

View File

@@ -11,7 +11,7 @@ export default defineApp({
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',
primaryColor: '#02AFC7', primaryColor: '02AFC7',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -16,6 +16,7 @@ import trimWhitespace from './transformers/trim-whitespace.js';
import useDefaultValue from './transformers/use-default-value.js'; import useDefaultValue from './transformers/use-default-value.js';
import parseStringifiedJson from './transformers/parse-stringified-json.js'; import parseStringifiedJson from './transformers/parse-stringified-json.js';
import createUuid from './transformers/create-uuid.js'; import createUuid from './transformers/create-uuid.js';
import stringifyJson from './transformers/stringify-json.js';
const transformers = { const transformers = {
base64ToString, base64ToString,
@@ -34,6 +35,7 @@ const transformers = {
useDefaultValue, useDefaultValue,
parseStringifiedJson, parseStringifiedJson,
createUuid, createUuid,
stringifyJson,
}; };
export default defineAction({ export default defineAction({
@@ -63,6 +65,7 @@ export default defineAction({
{ label: 'Extract Number', value: 'extractNumber' }, { label: 'Extract Number', value: 'extractNumber' },
{ label: 'Lowercase', value: 'lowercase' }, { label: 'Lowercase', value: 'lowercase' },
{ label: 'Parse stringified JSON', value: 'parseStringifiedJson' }, { label: 'Parse stringified JSON', value: 'parseStringifiedJson' },
{ label: 'Stringify JSON', value: 'stringifyJson' },
{ label: 'Pluralize', value: 'pluralize' }, { label: 'Pluralize', value: 'pluralize' },
{ label: 'Replace', value: 'replace' }, { label: 'Replace', value: 'replace' },
{ label: 'String to Base64', value: 'stringToBase64' }, { label: 'String to Base64', value: 'stringToBase64' },

View File

@@ -0,0 +1,7 @@
const stringifyJson = ($) => {
const input = $.step.parameters.input;
return JSON.stringify(input);
};
export default stringifyJson;

View File

@@ -13,6 +13,7 @@ import encodeUri from './text/encode-uri.js';
import trimWhitespace from './text/trim-whitespace.js'; import trimWhitespace from './text/trim-whitespace.js';
import useDefaultValue from './text/use-default-value.js'; import useDefaultValue from './text/use-default-value.js';
import parseStringifiedJson from './text/parse-stringified-json.js'; import parseStringifiedJson from './text/parse-stringified-json.js';
import stringifyJson from './text/stringify-json.js';
import performMathOperation from './numbers/perform-math-operation.js'; import performMathOperation from './numbers/perform-math-operation.js';
import randomNumber from './numbers/random-number.js'; import randomNumber from './numbers/random-number.js';
import formatNumber from './numbers/format-number.js'; import formatNumber from './numbers/format-number.js';
@@ -40,6 +41,7 @@ const options = {
formatPhoneNumber, formatPhoneNumber,
formatDateTime, formatDateTime,
parseStringifiedJson, parseStringifiedJson,
stringifyJson,
}; };
export default { export default {

View File

@@ -1,4 +1,4 @@
const useDefaultValue = [ const parseStringifiedJson = [
{ {
label: 'Input', label: 'Input',
key: 'input', key: 'input',
@@ -9,4 +9,4 @@ const useDefaultValue = [
}, },
]; ];
export default useDefaultValue; export default parseStringifiedJson;

View File

@@ -0,0 +1,12 @@
const stringifyJson = [
{
label: 'Input',
key: 'input',
type: 'string',
required: true,
description: 'JSON to stringify.',
variables: true,
},
];
export default stringifyJson;

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#001F52', primaryColor: '001F52',
actions, actions,
dynamicFields, dynamicFields,
}); });

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/ghost/connection',
primaryColor: '#15171A', primaryColor: '15171A',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -12,7 +12,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/github/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -12,7 +12,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/gitlab/connection',
primaryColor: '#FC6D26', primaryColor: 'FC6D26',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/google-calendar/connection',
primaryColor: '#448AFF', primaryColor: '448AFF',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/google-drive/connection',
primaryColor: '#1FA463', primaryColor: '1FA463',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/google-forms/connection',
primaryColor: '#673AB7', primaryColor: '673AB7',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -13,7 +13,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/google-sheets/connection',
primaryColor: '#0F9D58', primaryColor: '0F9D58',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -12,7 +12,7 @@ export default defineApp({
apiBaseUrl: 'https://tasks.googleapis.com', apiBaseUrl: 'https://tasks.googleapis.com',
iconUrl: '{BASE_URL}/apps/google-tasks/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/google-tasks/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/google-tasks/connection', authDocUrl: '{DOCS_URL}/apps/google-tasks/connection',
primaryColor: '#0066DA', primaryColor: '0066DA',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/helix/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#000000', primaryColor: '000000',
actions, actions,
}); });

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://www.hubspot.com', baseUrl: 'https://www.hubspot.com',
apiBaseUrl: 'https://api.hubapi.com', apiBaseUrl: 'https://api.hubapi.com',
primaryColor: '#F95C35', primaryColor: 'F95C35',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -13,7 +13,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/invoice-ninja/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -9,11 +9,11 @@ export default defineApp({
name: 'Jotform', name: 'Jotform',
key: 'jotform', key: 'jotform',
iconUrl: '{BASE_URL}/apps/jotform/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/jotform/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/jotform/connection', authDocUrl: 'https://automatisch.io/docs/apps/jotform/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://www.jotform.com', baseUrl: 'https://www.jotform.com',
apiBaseUrl: 'https://api.jotform.com', apiBaseUrl: 'https://api.jotform.com',
primaryColor: '#FF6100', primaryColor: 'FF6100',
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,
triggers, triggers,

View File

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

View File

@@ -7,11 +7,11 @@ export default defineApp({
name: 'MailerLite', name: 'MailerLite',
key: 'mailerlite', key: 'mailerlite',
iconUrl: '{BASE_URL}/apps/mailerlite/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/mailerlite/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/mailerlite/connection', authDocUrl: 'https://automatisch.io/docs/apps/mailerlite/connection',
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://www.mailerlite.com', baseUrl: 'https://www.mailerlite.com',
apiBaseUrl: 'https://connect.mailerlite.com/api', apiBaseUrl: 'https://connect.mailerlite.com/api',
primaryColor: '#09C269', primaryColor: '09C269',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -13,7 +13,7 @@ export default defineApp({
authDocUrl: '{DOCS_URL}/apps/mattermost/connection', authDocUrl: '{DOCS_URL}/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',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addXRequestedWithHeader, addAuthHeader], beforeRequest: [setBaseUrl, addXRequestedWithHeader, addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/miro/connection',
primaryColor: '#F2CA02', primaryColor: 'F2CA02',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -13,7 +13,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/notion/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader, addNotionVersionHeader], beforeRequest: [addAuthHeader, addNotionVersionHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://ntfy.sh', baseUrl: 'https://ntfy.sh',
apiBaseUrl: 'https://ntfy.sh', apiBaseUrl: 'https://ntfy.sh',
primaryColor: '#56bda8', primaryColor: '56bda8',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://odoo.com', baseUrl: 'https://odoo.com',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#9c5789', primaryColor: '9c5789',
auth, auth,
actions, actions,
}); });

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/openai/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -13,7 +13,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/pipedrive/connection',
primaryColor: '#FFFFFF', primaryColor: 'FFFFFF',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -12,7 +12,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://placetel.de', baseUrl: 'https://placetel.de',
apiBaseUrl: 'https://api.placetel.de', apiBaseUrl: 'https://api.placetel.de',
primaryColor: '#069dd9', primaryColor: '069dd9',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#336791', primaryColor: '336791',
auth, auth,
actions, actions,
}); });

View File

@@ -10,7 +10,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/pushover/connection',
primaryColor: '#249DF1', primaryColor: '249DF1',
supportsConnections: true, supportsConnections: true,
auth, auth,
actions, actions,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/reddit/connection',
primaryColor: '#FF4500', primaryColor: 'FF4500',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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',
primaryColor: '#55636c', primaryColor: '55636c',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -9,6 +9,6 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#ff8800', primaryColor: 'ff8800',
triggers, triggers,
}); });

View File

@@ -13,7 +13,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://salesforce.com', baseUrl: 'https://salesforce.com',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#00A1E0', primaryColor: '00A1E0',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -9,7 +9,7 @@ export default defineApp({
authDocUrl: '{DOCS_URL}/apps/scheduler/connection', authDocUrl: '{DOCS_URL}/apps/scheduler/connection',
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#0059F7', primaryColor: '0059F7',
supportsConnections: false, supportsConnections: false,
triggers, triggers,
}); });

View File

@@ -12,7 +12,7 @@ export default defineApp({
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: '{DOCS_URL}/apps/self-hosted-llm/connection',
primaryColor: '#000000', primaryColor: '000000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,

View File

@@ -13,7 +13,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://signalwire.com', baseUrl: 'https://signalwire.com',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#044cf6', primaryColor: '044cf6',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -13,7 +13,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://slack.com', baseUrl: 'https://slack.com',
apiBaseUrl: 'https://slack.com/api', apiBaseUrl: 'https://slack.com/api',
primaryColor: '#4a154b', primaryColor: '4a154b',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#2DAAE1', primaryColor: '2DAAE1',
auth, auth,
actions, actions,
}); });

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://spotify.com', baseUrl: 'https://spotify.com',
apiBaseUrl: 'https://api.spotify.com', apiBaseUrl: 'https://api.spotify.com',
primaryColor: '#000000', primaryColor: '000000',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -11,7 +11,7 @@ export default defineApp({
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',
primaryColor: '#fc4c01', primaryColor: 'fc4c01',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://stripe.com', baseUrl: 'https://stripe.com',
apiBaseUrl: 'https://api.stripe.com', apiBaseUrl: 'https://api.stripe.com',
primaryColor: '#635bff', primaryColor: '635bff',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -11,7 +11,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://telegram.org', baseUrl: 'https://telegram.org',
apiBaseUrl: 'https://api.telegram.org', apiBaseUrl: 'https://api.telegram.org',
primaryColor: '#2AABEE', primaryColor: '2AABEE',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -13,7 +13,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://todoist.com', baseUrl: 'https://todoist.com',
apiBaseUrl: 'https://api.todoist.com/rest/v2', apiBaseUrl: 'https://api.todoist.com/rest/v2',
primaryColor: '#e44332', primaryColor: 'e44332',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -12,7 +12,7 @@ export default defineApp({
iconUrl: '{BASE_URL}/apps/trello/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/trello/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/trello/connection', authDocUrl: '{DOCS_URL}/apps/trello/connection',
supportsConnections: true, supportsConnections: true,
primaryColor: '#0079bf', primaryColor: '0079bf',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
actions, actions,

View File

@@ -13,7 +13,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://twilio.com', baseUrl: 'https://twilio.com',
apiBaseUrl: 'https://api.twilio.com', apiBaseUrl: 'https://api.twilio.com',
primaryColor: '#e1000f', primaryColor: 'e1000f',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -12,7 +12,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://twitter.com', baseUrl: 'https://twitter.com',
apiBaseUrl: 'https://api.twitter.com', apiBaseUrl: 'https://api.twitter.com',
primaryColor: '#1da1f2', primaryColor: '1da1f2',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -12,7 +12,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://typeform.com', baseUrl: 'https://typeform.com',
apiBaseUrl: 'https://api.typeform.com', apiBaseUrl: 'https://api.typeform.com',
primaryColor: '#262627', primaryColor: '262627',
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -14,7 +14,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#39a86d', primaryColor: '39a86d',
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -10,7 +10,7 @@ export default defineApp({
supportsConnections: false, supportsConnections: false,
baseUrl: '', baseUrl: '',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#0059F7', primaryColor: '0059F7',
actions, actions,
triggers, triggers,
}); });

View File

@@ -8,7 +8,7 @@ export default {
key: 'instanceUrl', key: 'instanceUrl',
label: 'WordPress instance URL', label: 'WordPress instance URL',
type: 'string', type: 'string',
required: true, required: false,
readOnly: false, readOnly: false,
value: null, value: null,
placeholder: null, placeholder: null,

View File

@@ -13,7 +13,7 @@ export default defineApp({
supportsConnections: true, supportsConnections: true,
baseUrl: 'https://wordpress.com', baseUrl: 'https://wordpress.com',
apiBaseUrl: '', apiBaseUrl: '',
primaryColor: '#464342', primaryColor: '464342',
beforeRequest: [setBaseUrl, addAuthHeader], beforeRequest: [setBaseUrl, addAuthHeader],
auth, auth,
triggers, triggers,

View File

@@ -4,7 +4,6 @@ export default defineTrigger({
name: 'New comment', name: 'New comment',
key: 'newComment', key: 'newComment',
description: 'Triggers when a new comment is created.', description: 'Triggers when a new comment is created.',
pollInterval: 15,
arguments: [ arguments: [
{ {
label: 'Status', label: 'Status',

View File

@@ -3,7 +3,6 @@ import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({ export default defineTrigger({
name: 'New page', name: 'New page',
key: 'newPage', key: 'newPage',
pollInterval: 15,
description: 'Triggers when a new page is created.', description: 'Triggers when a new page is created.',
arguments: [ arguments: [
{ {

View File

@@ -3,7 +3,6 @@ import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({ export default defineTrigger({
name: 'New post', name: 'New post',
key: 'newPost', key: 'newPost',
pollInterval: 15,
description: 'Triggers when a new post is created.', description: 'Triggers when a new post is created.',
arguments: [ arguments: [
{ {

View File

@@ -11,7 +11,7 @@ export default defineApp({
apiBaseUrl: 'https://api.xero.com', apiBaseUrl: 'https://api.xero.com',
iconUrl: '{BASE_URL}/apps/xero/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/xero/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/xero/connection', authDocUrl: '{DOCS_URL}/apps/xero/connection',
primaryColor: '#13B5EA', primaryColor: '13B5EA',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -10,7 +10,7 @@ export default defineApp({
apiBaseUrl: 'https://api.ynab.com/v1', apiBaseUrl: 'https://api.ynab.com/v1',
iconUrl: '{BASE_URL}/apps/you-need-a-budget/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/you-need-a-budget/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/you-need-a-budget/connection', authDocUrl: '{DOCS_URL}/apps/you-need-a-budget/connection',
primaryColor: '#19223C', primaryColor: '19223C',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -10,7 +10,7 @@ export default defineApp({
apiBaseUrl: 'https://www.googleapis.com/youtube', apiBaseUrl: 'https://www.googleapis.com/youtube',
iconUrl: '{BASE_URL}/apps/youtube/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/youtube/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/youtube/connection', authDocUrl: '{DOCS_URL}/apps/youtube/connection',
primaryColor: '#FF0000', primaryColor: 'FF0000',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -3,7 +3,6 @@ import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({ export default defineTrigger({
name: 'New video by search', name: 'New video by search',
key: 'newVideoBySearch', key: 'newVideoBySearch',
pollInterval: 15,
description: description:
'Triggers when a new video is uploaded that matches a specific search string.', 'Triggers when a new video is uploaded that matches a specific search string.',
arguments: [ arguments: [

View File

@@ -3,7 +3,6 @@ import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({ export default defineTrigger({
name: 'New video in channel', name: 'New video in channel',
key: 'newVideoInChannel', key: 'newVideoInChannel',
pollInterval: 15,
description: description:
'Triggers when a new video is published to a specific Youtube channel.', 'Triggers when a new video is published to a specific Youtube channel.',
arguments: [ arguments: [

View File

@@ -12,7 +12,7 @@ export default defineApp({
apiBaseUrl: '', apiBaseUrl: '',
iconUrl: '{BASE_URL}/apps/zendesk/assets/favicon.svg', iconUrl: '{BASE_URL}/apps/zendesk/assets/favicon.svg',
authDocUrl: '{DOCS_URL}/apps/zendesk/connection', authDocUrl: '{DOCS_URL}/apps/zendesk/connection',
primaryColor: '#17494d', primaryColor: '17494d',
supportsConnections: true, supportsConnections: true,
beforeRequest: [addAuthHeader], beforeRequest: [addAuthHeader],
auth, auth,

View File

@@ -52,7 +52,7 @@ const appConfig = {
isDev: appEnv === 'development', isDev: appEnv === 'development',
isTest: appEnv === 'test', isTest: appEnv === 'test',
isProd: appEnv === 'production', isProd: appEnv === 'production',
version: '0.14.0', version: '0.13.1',
postgresDatabase: process.env.POSTGRES_DATABASE || 'automatisch_development', postgresDatabase: process.env.POSTGRES_DATABASE || 'automatisch_development',
postgresSchema: process.env.POSTGRES_SCHEMA || 'public', postgresSchema: process.env.POSTGRES_SCHEMA || 'public',
postgresPort: parseInt(process.env.POSTGRES_PORT || '5432'), postgresPort: parseInt(process.env.POSTGRES_PORT || '5432'),

View File

@@ -2,7 +2,7 @@ import appConfig from './app.js';
const corsOptions = { const corsOptions = {
origin: appConfig.webAppUrl, origin: appConfig.webAppUrl,
methods: 'GET,HEAD,POST,PATCH,DELETE', methods: 'GET,HEAD,POST,DELETE',
credentials: true, credentials: true,
optionsSuccessStatus: 200, optionsSuccessStatus: 200,
}; };

View File

@@ -32,7 +32,7 @@ describe('POST /api/v1/access-tokens', () => {
}) })
.expect(422); .expect(422);
expect(response.body.errors.general).toStrictEqual([ expect(response.body.errors.general).toEqual([
'Incorrect email or password.', 'Incorrect email or password.',
]); ]);
}); });

View File

@@ -11,5 +11,5 @@ export default async (request, response) => {
await accessToken.revoke(); await accessToken.revoke();
response.status(204).end(); response.status(204).send();
}; };

View File

@@ -1,25 +0,0 @@
import { renderObject } from '../../../../../helpers/renderer.js';
import AppConfig from '../../../../../models/app-config.js';
export default async (request, response) => {
const appConfig = await AppConfig.query()
.findOne({ key: request.params.appKey })
.throwIfNotFound();
const appAuthClient = await appConfig
.$relatedQuery('appAuthClients')
.insert(appAuthClientParams(request));
renderObject(response, appAuthClient, { status: 201 });
};
const appAuthClientParams = (request) => {
const { active, appKey, name, formattedAuthDefaults } = request.body;
return {
active,
appKey,
name,
formattedAuthDefaults,
};
};

View File

@@ -1,94 +0,0 @@
import { vi, describe, it, expect, beforeEach } from 'vitest';
import request from 'supertest';
import app from '../../../../../app.js';
import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
import { createUser } from '../../../../../../test/factories/user.js';
import { createRole } from '../../../../../../test/factories/role.js';
import createAppAuthClientMock from '../../../../../../test/mocks/rest/api/v1/admin/apps/create-auth-client.js';
import { createAppConfig } from '../../../../../../test/factories/app-config.js';
import * as license from '../../../../../helpers/license.ee.js';
describe('POST /api/v1/admin/apps/:appKey/auth-clients', () => {
let currentUser, adminRole, token;
beforeEach(async () => {
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
adminRole = await createRole({ name: 'Admin' });
currentUser = await createUser({ roleId: adminRole.id });
token = await createAuthTokenByUserId(currentUser.id);
});
it('should return created response for valid app config', async () => {
await createAppConfig({
key: 'gitlab',
});
const appAuthClient = {
active: true,
appKey: 'gitlab',
name: 'First auth client',
formattedAuthDefaults: {
clientid: 'sample client ID',
clientSecret: 'sample client secret',
instanceUrl: 'https://gitlab.com',
oAuthRedirectUrl: 'http://localhost:3001/app/gitlab/connection/add',
},
};
const response = await request(app)
.post('/api/v1/admin/apps/gitlab/auth-clients')
.set('Authorization', token)
.send(appAuthClient)
.expect(201);
const expectedPayload = createAppAuthClientMock(appAuthClient);
expect(response.body).toMatchObject(expectedPayload);
});
it('should return not found response for not existing app config', async () => {
const appAuthClient = {
active: true,
appKey: 'gitlab',
name: 'First auth client',
formattedAuthDefaults: {
clientid: 'sample client ID',
clientSecret: 'sample client secret',
instanceUrl: 'https://gitlab.com',
oAuthRedirectUrl: 'http://localhost:3001/app/gitlab/connection/add',
},
};
await request(app)
.post('/api/v1/admin/apps/gitlab/auth-clients')
.set('Authorization', token)
.send(appAuthClient)
.expect(404);
});
it('should return bad request response for missing required fields', async () => {
await createAppConfig({
key: 'gitlab',
});
const appAuthClient = {
appKey: 'gitlab',
};
const response = await request(app)
.post('/api/v1/admin/apps/gitlab/auth-clients')
.set('Authorization', token)
.send(appAuthClient)
.expect(422);
expect(response.body.meta.type).toStrictEqual('ModelValidation');
expect(response.body.errors).toMatchObject({
name: ["must have required property 'name'"],
formattedAuthDefaults: [
"must have required property 'formattedAuthDefaults'",
],
});
});
});

View File

@@ -1,21 +0,0 @@
import { renderObject } from '../../../../../helpers/renderer.js';
import AppConfig from '../../../../../models/app-config.js';
export default async (request, response) => {
const createdAppConfig = await AppConfig.query().insertAndFetch(
appConfigParams(request)
);
renderObject(response, createdAppConfig, { status: 201 });
};
const appConfigParams = (request) => {
const { customConnectionAllowed, shared, disabled } = request.body;
return {
key: request.params.appKey,
customConnectionAllowed,
shared,
disabled,
};
};

View File

@@ -1,67 +0,0 @@
import { vi, describe, it, expect, beforeEach } from 'vitest';
import request from 'supertest';
import app from '../../../../../app.js';
import createAuthTokenByUserId from '../../../../../helpers/create-auth-token-by-user-id.js';
import { createUser } from '../../../../../../test/factories/user.js';
import { createRole } from '../../../../../../test/factories/role.js';
import createAppConfigMock from '../../../../../../test/mocks/rest/api/v1/admin/apps/create-config.js';
import { createAppConfig } from '../../../../../../test/factories/app-config.js';
import * as license from '../../../../../helpers/license.ee.js';
describe('POST /api/v1/admin/apps/:appKey/config', () => {
let currentUser, adminRole, token;
beforeEach(async () => {
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
adminRole = await createRole({ name: 'Admin' });
currentUser = await createUser({ roleId: adminRole.id });
token = await createAuthTokenByUserId(currentUser.id);
});
it('should return created app config', async () => {
const appConfig = {
customConnectionAllowed: true,
shared: true,
disabled: false,
};
const response = await request(app)
.post('/api/v1/admin/apps/gitlab/config')
.set('Authorization', token)
.send(appConfig)
.expect(201);
const expectedPayload = createAppConfigMock({
...appConfig,
key: 'gitlab',
});
expect(response.body).toMatchObject(expectedPayload);
});
it('should return HTTP 422 for already existing app config', async () => {
const appConfig = {
key: 'gitlab',
customConnectionAllowed: true,
shared: true,
disabled: false,
};
await createAppConfig(appConfig);
const response = await request(app)
.post('/api/v1/admin/apps/gitlab/config')
.set('Authorization', token)
.send({
disabled: false,
})
.expect(422);
expect(response.body.meta.type).toStrictEqual('UniqueViolationError');
expect(response.body.errors).toMatchObject({
key: ["'key' must be unique."],
});
});
});

View File

@@ -15,7 +15,7 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients/:appAuthClientId', () => {
beforeEach(async () => { beforeEach(async () => {
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
adminRole = await createRole({ name: 'Admin' }); adminRole = await createRole({ key: 'admin' });
currentUser = await createUser({ roleId: adminRole.id }); currentUser = await createUser({ roleId: adminRole.id });
currentAppAuthClient = await createAppAuthClient({ currentAppAuthClient = await createAppAuthClient({
@@ -32,7 +32,7 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients/:appAuthClientId', () => {
.expect(200); .expect(200);
const expectedPayload = getAppAuthClientMock(currentAppAuthClient); const expectedPayload = getAppAuthClientMock(currentAppAuthClient);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
it('should return not found response for not existing app auth client ID', async () => { it('should return not found response for not existing app auth client ID', async () => {

View File

@@ -14,7 +14,7 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients', () => {
beforeEach(async () => { beforeEach(async () => {
vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true); vi.spyOn(license, 'hasValidLicense').mockResolvedValue(true);
adminRole = await createRole({ name: 'Admin' }); adminRole = await createRole({ key: 'admin' });
currentUser = await createUser({ roleId: adminRole.id }); currentUser = await createUser({ roleId: adminRole.id });
token = await createAuthTokenByUserId(currentUser.id); token = await createAuthTokenByUserId(currentUser.id);
@@ -39,6 +39,6 @@ describe('GET /api/v1/admin/apps/:appKey/auth-clients', () => {
appAuthClientOne, appAuthClientOne,
]); ]);
expect(response.body).toStrictEqual(expectedPayload); expect(response.body).toEqual(expectedPayload);
}); });
}); });

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