diff --git a/packages/backend/src/apps/azure-openai/actions/index.js b/packages/backend/src/apps/azure-openai/actions/index.js new file mode 100644 index 00000000..44f6cbc0 --- /dev/null +++ b/packages/backend/src/apps/azure-openai/actions/index.js @@ -0,0 +1,3 @@ +import sendPrompt from './send-prompt/index.js'; + +export default [sendPrompt]; diff --git a/packages/backend/src/apps/azure-openai/actions/index.ts b/packages/backend/src/apps/azure-openai/actions/index.ts deleted file mode 100644 index b91a5287..00000000 --- a/packages/backend/src/apps/azure-openai/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sendPrompt from './send-prompt'; - -export default [sendPrompt]; diff --git a/packages/backend/src/apps/azure-openai/actions/send-prompt/index.js b/packages/backend/src/apps/azure-openai/actions/send-prompt/index.js new file mode 100644 index 00000000..91ae3070 --- /dev/null +++ b/packages/backend/src/apps/azure-openai/actions/send-prompt/index.js @@ -0,0 +1,97 @@ +import defineAction from '../../../../helpers/define-action.js'; + +const castFloatOrUndefined = (value) => { + return value === '' ? undefined : parseFloat(value); +}; + +export default defineAction({ + name: 'Send prompt', + key: 'sendPrompt', + description: 'Creates a completion for the provided prompt and parameters.', + arguments: [ + { + label: 'Prompt', + key: 'prompt', + type: 'string', + required: true, + variables: true, + description: 'The text to analyze.', + }, + { + label: 'Temperature', + key: 'temperature', + type: 'string', + required: false, + variables: true, + description: + 'What sampling temperature to use, between 0 and 2. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer. We generally recommend altering this or Top P but not both.', + }, + { + label: 'Maximum tokens', + key: 'maxTokens', + type: 'string', + required: false, + variables: true, + description: + 'The maximum number of tokens to generate in the completion.', + }, + { + label: 'Stop Sequence', + key: 'stopSequence', + type: 'string', + required: false, + variables: true, + description: + 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.', + }, + { + label: 'Top P', + key: 'topP', + type: 'string', + required: false, + variables: true, + description: + 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both.', + }, + { + label: 'Frequency Penalty', + key: 'frequencyPenalty', + type: 'string', + required: false, + variables: true, + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.`, + }, + { + label: 'Presence Penalty', + key: 'presencePenalty', + type: 'string', + required: false, + variables: true, + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.`, + }, + ], + + async run($) { + const payload = { + model: $.step.parameters.model, + prompt: $.step.parameters.prompt, + temperature: castFloatOrUndefined($.step.parameters.temperature), + max_tokens: castFloatOrUndefined($.step.parameters.maxTokens), + stop: $.step.parameters.stopSequence || null, + top_p: castFloatOrUndefined($.step.parameters.topP), + frequency_penalty: castFloatOrUndefined( + $.step.parameters.frequencyPenalty + ), + presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty), + }; + + const { data } = await $.http.post( + `/deployments/${$.auth.data.deploymentId}/completions`, + payload + ); + + $.setActionItem({ + raw: data, + }); + }, +}); diff --git a/packages/backend/src/apps/azure-openai/actions/send-prompt/index.ts b/packages/backend/src/apps/azure-openai/actions/send-prompt/index.ts deleted file mode 100644 index 302a4b9d..00000000 --- a/packages/backend/src/apps/azure-openai/actions/send-prompt/index.ts +++ /dev/null @@ -1,87 +0,0 @@ -import defineAction from '../../../../helpers/define-action'; - -const castFloatOrUndefined = (value: string | null) => { - return value === '' ? undefined : parseFloat(value); -} - -export default defineAction({ - name: 'Send prompt', - key: 'sendPrompt', - description: 'Creates a completion for the provided prompt and parameters.', - arguments: [ - { - label: 'Prompt', - key: 'prompt', - type: 'string' as const, - required: true, - variables: true, - description: 'The text to analyze.' - }, - { - label: 'Temperature', - key: 'temperature', - type: 'string' as const, - required: false, - variables: true, - description: 'What sampling temperature to use, between 0 and 2. Higher values means the model will take more risks. Try 0.9 for more creative applications, and 0 (argmax sampling) for ones with a well-defined answer. We generally recommend altering this or Top P but not both.' - }, - { - label: 'Maximum tokens', - key: 'maxTokens', - type: 'string' as const, - required: false, - variables: true, - description: 'The maximum number of tokens to generate in the completion.' - }, - { - label: 'Stop Sequence', - key: 'stopSequence', - type: 'string' as const, - required: false, - variables: true, - description: 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.' - }, - { - label: 'Top P', - key: 'topP', - type: 'string' as const, - required: false, - variables: true, - description: 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered. We generally recommend altering this or temperature but not both.' - }, - { - label: 'Frequency Penalty', - key: 'frequencyPenalty', - type: 'string' as const, - required: false, - variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.` - }, - { - label: 'Presence Penalty', - key: 'presencePenalty', - type: 'string' as const, - required: false, - variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.` - }, - ], - - async run($) { - const payload = { - model: $.step.parameters.model as string, - prompt: $.step.parameters.prompt as string, - temperature: castFloatOrUndefined($.step.parameters.temperature as string), - max_tokens: castFloatOrUndefined($.step.parameters.maxTokens as string), - stop: ($.step.parameters.stopSequence as string || null), - top_p: castFloatOrUndefined($.step.parameters.topP as string), - frequency_penalty: castFloatOrUndefined($.step.parameters.frequencyPenalty as string), - presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty as string), - }; - const { data } = await $.http.post(`/deployments/${$.auth.data.deploymentId}/completions`, payload); - - $.setActionItem({ - raw: data, - }); - }, -}); diff --git a/packages/backend/src/apps/azure-openai/auth/index.ts b/packages/backend/src/apps/azure-openai/auth/index.js similarity index 85% rename from packages/backend/src/apps/azure-openai/auth/index.ts rename to packages/backend/src/apps/azure-openai/auth/index.js index 716b4f10..3de895d5 100644 --- a/packages/backend/src/apps/azure-openai/auth/index.ts +++ b/packages/backend/src/apps/azure-openai/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'yourResourceName', label: 'Your Resource Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -30,7 +30,7 @@ export default { { key: 'deploymentId', label: 'Deployment ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -42,7 +42,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/azure-openai/auth/is-still-verified.js b/packages/backend/src/apps/azure-openai/auth/is-still-verified.js new file mode 100644 index 00000000..a88adf3b --- /dev/null +++ b/packages/backend/src/apps/azure-openai/auth/is-still-verified.js @@ -0,0 +1,6 @@ +const isStillVerified = async ($) => { + await $.http.get('/fine_tuning/jobs'); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/azure-openai/auth/is-still-verified.ts b/packages/backend/src/apps/azure-openai/auth/is-still-verified.ts deleted file mode 100644 index 4c990b92..00000000 --- a/packages/backend/src/apps/azure-openai/auth/is-still-verified.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const isStillVerified = async ($: IGlobalVariable) => { - await $.http.get('/fine_tuning/jobs'); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/azure-openai/auth/verify-credentials.js b/packages/backend/src/apps/azure-openai/auth/verify-credentials.js new file mode 100644 index 00000000..3f0e9dd1 --- /dev/null +++ b/packages/backend/src/apps/azure-openai/auth/verify-credentials.js @@ -0,0 +1,5 @@ +const verifyCredentials = async ($) => { + await $.http.get('/fine_tuning/jobs'); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/azure-openai/auth/verify-credentials.ts b/packages/backend/src/apps/azure-openai/auth/verify-credentials.ts deleted file mode 100644 index 946257d0..00000000 --- a/packages/backend/src/apps/azure-openai/auth/verify-credentials.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - await $.http.get('/fine_tuning/jobs'); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/azure-openai/common/add-auth-header.js b/packages/backend/src/apps/azure-openai/common/add-auth-header.js new file mode 100644 index 00000000..9e367063 --- /dev/null +++ b/packages/backend/src/apps/azure-openai/common/add-auth-header.js @@ -0,0 +1,13 @@ +const addAuthHeader = ($, requestConfig) => { + if ($.auth.data?.apiKey) { + requestConfig.headers['api-key'] = $.auth.data.apiKey; + } + + requestConfig.params = { + 'api-version': '2023-10-01-preview', + }; + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/azure-openai/common/add-auth-header.ts b/packages/backend/src/apps/azure-openai/common/add-auth-header.ts deleted file mode 100644 index 277fad8e..00000000 --- a/packages/backend/src/apps/azure-openai/common/add-auth-header.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data?.apiKey) { - requestConfig.headers['api-key'] = $.auth.data.apiKey as string; - } - - requestConfig.params = { - 'api-version': '2023-10-01-preview' - } - - return requestConfig; -}; - -export default addAuthHeader; diff --git a/packages/backend/src/apps/azure-openai/common/set-base-url.js b/packages/backend/src/apps/azure-openai/common/set-base-url.js new file mode 100644 index 00000000..222ccf79 --- /dev/null +++ b/packages/backend/src/apps/azure-openai/common/set-base-url.js @@ -0,0 +1,11 @@ +const setBaseUrl = ($, requestConfig) => { + const yourResourceName = $.auth.data.yourResourceName; + + if (yourResourceName) { + requestConfig.baseURL = `https://${yourResourceName}.openai.azure.com/openai`; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/azure-openai/common/set-base-url.ts b/packages/backend/src/apps/azure-openai/common/set-base-url.ts deleted file mode 100644 index 7e90dcfd..00000000 --- a/packages/backend/src/apps/azure-openai/common/set-base-url.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - const yourResourceName = $.auth.data.yourResourceName as string; - - if (yourResourceName) { - requestConfig.baseURL = `https://${yourResourceName}.openai.azure.com/openai`; - } - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/azure-openai/index.d.ts b/packages/backend/src/apps/azure-openai/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/azure-openai/index.ts b/packages/backend/src/apps/azure-openai/index.js similarity index 64% rename from packages/backend/src/apps/azure-openai/index.ts rename to packages/backend/src/apps/azure-openai/index.js index 3c70dfe2..d319470e 100644 --- a/packages/backend/src/apps/azure-openai/index.ts +++ b/packages/backend/src/apps/azure-openai/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import setBaseUrl from './common/set-base-url'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import setBaseUrl from './common/set-base-url.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Azure OpenAI', diff --git a/packages/backend/src/apps/carbone/actions/add-template/index.ts b/packages/backend/src/apps/carbone/actions/add-template/index.js similarity index 82% rename from packages/backend/src/apps/carbone/actions/add-template/index.ts rename to packages/backend/src/apps/carbone/actions/add-template/index.js index be120fd3..a247fffa 100644 --- a/packages/backend/src/apps/carbone/actions/add-template/index.ts +++ b/packages/backend/src/apps/carbone/actions/add-template/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Add Template', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Templete Data', key: 'templateData', - type: 'string' as const, + type: 'string', required: true, variables: true, description: 'The content of your new Template in XML/HTML format.', @@ -17,7 +17,7 @@ export default defineAction({ ], async run($) { - const templateData = $.step.parameters.templateData as string; + const templateData = $.step.parameters.templateData; const base64Data = Buffer.from(templateData).toString('base64'); const dataURI = `data:application/xml;base64,${base64Data}`; diff --git a/packages/backend/src/apps/carbone/actions/index.js b/packages/backend/src/apps/carbone/actions/index.js new file mode 100644 index 00000000..4c513e7a --- /dev/null +++ b/packages/backend/src/apps/carbone/actions/index.js @@ -0,0 +1,3 @@ +import addTemplate from './add-template/index.js'; + +export default [addTemplate]; diff --git a/packages/backend/src/apps/carbone/actions/index.ts b/packages/backend/src/apps/carbone/actions/index.ts deleted file mode 100644 index 41b98543..00000000 --- a/packages/backend/src/apps/carbone/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import addTemplate from './add-template'; - -export default [addTemplate]; diff --git a/packages/backend/src/apps/carbone/auth/index.ts b/packages/backend/src/apps/carbone/auth/index.js similarity index 77% rename from packages/backend/src/apps/carbone/auth/index.ts rename to packages/backend/src/apps/carbone/auth/index.js index 0242bc91..736516ee 100644 --- a/packages/backend/src/apps/carbone/auth/index.ts +++ b/packages/backend/src/apps/carbone/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/carbone/auth/is-still-verified.js b/packages/backend/src/apps/carbone/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/carbone/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/carbone/auth/is-still-verified.ts b/packages/backend/src/apps/carbone/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/carbone/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/carbone/auth/verify-credentials.ts b/packages/backend/src/apps/carbone/auth/verify-credentials.js similarity index 60% rename from packages/backend/src/apps/carbone/auth/verify-credentials.ts rename to packages/backend/src/apps/carbone/auth/verify-credentials.js index 3c5d01e3..7bf000bc 100644 --- a/packages/backend/src/apps/carbone/auth/verify-credentials.ts +++ b/packages/backend/src/apps/carbone/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { await $.http.get('/templates'); await $.auth.set({ diff --git a/packages/backend/src/apps/carbone/common/add-auth-header.ts b/packages/backend/src/apps/carbone/common/add-auth-header.js similarity index 65% rename from packages/backend/src/apps/carbone/common/add-auth-header.ts rename to packages/backend/src/apps/carbone/common/add-auth-header.js index 615acdcd..7bea41e4 100644 --- a/packages/backend/src/apps/carbone/common/add-auth-header.ts +++ b/packages/backend/src/apps/carbone/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($) => { if ($.auth.data?.apiKey) { requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiKey}`; requestConfig.headers['carbone-version'] = '4'; diff --git a/packages/backend/src/apps/carbone/index.d.ts b/packages/backend/src/apps/carbone/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/carbone/index.ts b/packages/backend/src/apps/carbone/index.js similarity index 66% rename from packages/backend/src/apps/carbone/index.ts rename to packages/backend/src/apps/carbone/index.js index 7eb98ac7..d715080a 100644 --- a/packages/backend/src/apps/carbone/index.ts +++ b/packages/backend/src/apps/carbone/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Carbone', diff --git a/packages/backend/src/apps/deepl/actions/index.js b/packages/backend/src/apps/deepl/actions/index.js new file mode 100644 index 00000000..f22e6e6d --- /dev/null +++ b/packages/backend/src/apps/deepl/actions/index.js @@ -0,0 +1,3 @@ +import translateText from './translate-text/index.js'; + +export default [translateText]; diff --git a/packages/backend/src/apps/deepl/actions/index.ts b/packages/backend/src/apps/deepl/actions/index.ts deleted file mode 100644 index db83a4f4..00000000 --- a/packages/backend/src/apps/deepl/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import translateText from './translate-text'; - -export default [translateText]; diff --git a/packages/backend/src/apps/deepl/actions/translate-text/index.ts b/packages/backend/src/apps/deepl/actions/translate-text/index.js similarity index 94% rename from packages/backend/src/apps/deepl/actions/translate-text/index.ts rename to packages/backend/src/apps/deepl/actions/translate-text/index.js index 18ee70eb..7202d024 100644 --- a/packages/backend/src/apps/deepl/actions/translate-text/index.ts +++ b/packages/backend/src/apps/deepl/actions/translate-text/index.js @@ -1,5 +1,5 @@ import qs from 'qs'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Translate text', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Text', key: 'text', - type: 'string' as const, + type: 'string', required: true, description: 'Text to be translated.', variables: true, @@ -17,7 +17,7 @@ export default defineAction({ { label: 'Target Language', key: 'targetLanguage', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Language to translate the text to.', variables: true, diff --git a/packages/backend/src/apps/deepl/auth/index.ts b/packages/backend/src/apps/deepl/auth/index.js similarity index 78% rename from packages/backend/src/apps/deepl/auth/index.ts rename to packages/backend/src/apps/deepl/auth/index.js index ed02f1bc..0de2ecc2 100644 --- a/packages/backend/src/apps/deepl/auth/index.ts +++ b/packages/backend/src/apps/deepl/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'authenticationKey', label: 'Authentication Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/deepl/auth/is-still-verified.js b/packages/backend/src/apps/deepl/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/deepl/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/deepl/auth/is-still-verified.ts b/packages/backend/src/apps/deepl/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/deepl/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/deepl/auth/verify-credentials.ts b/packages/backend/src/apps/deepl/auth/verify-credentials.js similarity index 55% rename from packages/backend/src/apps/deepl/auth/verify-credentials.ts rename to packages/backend/src/apps/deepl/auth/verify-credentials.js index 18c184a3..1310f2c2 100644 --- a/packages/backend/src/apps/deepl/auth/verify-credentials.ts +++ b/packages/backend/src/apps/deepl/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { await $.http.get('/v2/usage'); await $.auth.set({ diff --git a/packages/backend/src/apps/deepl/common/add-auth-header.ts b/packages/backend/src/apps/deepl/common/add-auth-header.js similarity index 68% rename from packages/backend/src/apps/deepl/common/add-auth-header.ts rename to packages/backend/src/apps/deepl/common/add-auth-header.js index 864970e5..c1938e82 100644 --- a/packages/backend/src/apps/deepl/common/add-auth-header.ts +++ b/packages/backend/src/apps/deepl/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.authenticationKey) { const authorizationHeader = `DeepL-Auth-Key ${$.auth.data.authenticationKey}`; requestConfig.headers.Authorization = authorizationHeader; diff --git a/packages/backend/src/apps/deepl/index.d.ts b/packages/backend/src/apps/deepl/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/deepl/index.ts b/packages/backend/src/apps/deepl/index.js similarity index 66% rename from packages/backend/src/apps/deepl/index.ts rename to packages/backend/src/apps/deepl/index.js index b77ea2d8..dac53f19 100644 --- a/packages/backend/src/apps/deepl/index.ts +++ b/packages/backend/src/apps/deepl/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'DeepL', diff --git a/packages/backend/src/apps/delay/actions/delay-for/index.ts b/packages/backend/src/apps/delay/actions/delay-for/index.js similarity index 89% rename from packages/backend/src/apps/delay/actions/delay-for/index.ts rename to packages/backend/src/apps/delay/actions/delay-for/index.js index d3d15032..e50455ef 100644 --- a/packages/backend/src/apps/delay/actions/delay-for/index.ts +++ b/packages/backend/src/apps/delay/actions/delay-for/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Delay for', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Delay for unit', key: 'delayForUnit', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: null, description: 'Delay for unit, e.g. minutes, hours, days, weeks.', @@ -36,7 +36,7 @@ export default defineAction({ { label: 'Delay for value', key: 'delayForValue', - type: 'string' as const, + type: 'string', required: true, description: 'Delay for value, use a number, e.g. 1, 2, 3.', variables: true, diff --git a/packages/backend/src/apps/delay/actions/delay-until/index.ts b/packages/backend/src/apps/delay/actions/delay-until/index.js similarity index 84% rename from packages/backend/src/apps/delay/actions/delay-until/index.ts rename to packages/backend/src/apps/delay/actions/delay-until/index.js index 0303eecd..4d82b235 100644 --- a/packages/backend/src/apps/delay/actions/delay-until/index.ts +++ b/packages/backend/src/apps/delay/actions/delay-until/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Delay until', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Delay until (Date)', key: 'delayUntil', - type: 'string' as const, + type: 'string', required: true, description: 'Delay until the date. E.g. 2022-12-18', variables: true, diff --git a/packages/backend/src/apps/delay/actions/index.js b/packages/backend/src/apps/delay/actions/index.js new file mode 100644 index 00000000..8782fa78 --- /dev/null +++ b/packages/backend/src/apps/delay/actions/index.js @@ -0,0 +1,4 @@ +import delayFor from './delay-for/index.js'; +import delayUntil from './delay-until/index.js'; + +export default [delayFor, delayUntil]; diff --git a/packages/backend/src/apps/delay/actions/index.ts b/packages/backend/src/apps/delay/actions/index.ts deleted file mode 100644 index 0779892c..00000000 --- a/packages/backend/src/apps/delay/actions/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import delayFor from './delay-for'; -import delayUntil from './delay-until'; - -export default [delayFor, delayUntil]; diff --git a/packages/backend/src/apps/delay/index.d.ts b/packages/backend/src/apps/delay/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/delay/index.ts b/packages/backend/src/apps/delay/index.js similarity index 75% rename from packages/backend/src/apps/delay/index.ts rename to packages/backend/src/apps/delay/index.js index 7f25c1b7..902dd27d 100644 --- a/packages/backend/src/apps/delay/index.ts +++ b/packages/backend/src/apps/delay/index.js @@ -1,5 +1,5 @@ -import defineApp from '../../helpers/define-app'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Delay', diff --git a/packages/backend/src/apps/discord/actions/create-scheduled-event/index.ts b/packages/backend/src/apps/discord/actions/create-scheduled-event/index.js similarity index 55% rename from packages/backend/src/apps/discord/actions/create-scheduled-event/index.ts rename to packages/backend/src/apps/discord/actions/create-scheduled-event/index.js index eecfb839..40a0611b 100644 --- a/packages/backend/src/apps/discord/actions/create-scheduled-event/index.ts +++ b/packages/backend/src/apps/discord/actions/create-scheduled-event/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create a scheduled event', @@ -8,13 +8,13 @@ export default defineAction({ { label: 'Type', key: 'entityType', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, options: [ { label: 'Stage channel', value: 1 }, { label: 'Voice channel', value: 2 }, - { label: 'External', value: 3 } + { label: 'External', value: 3 }, ], additionalFields: { type: 'query', @@ -34,61 +34,47 @@ export default defineAction({ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Description', key: 'description', - type: 'string' as const, + type: 'string', required: false, variables: true, }, { label: 'Image', key: 'image', - type: 'string' as const, + type: 'string', required: false, - description: 'Image as DataURI scheme [data:image/;base64,BASE64_ENCODED__IMAGE_DATA]', + description: + 'Image as DataURI scheme [data:image/;base64,BASE64_ENCODED__IMAGE_DATA]', variables: true, }, ], async run($) { - type entity_metadata = { - location: string - } - - type guild_event = { - channel_id: number, - name: string, - privacy_level: number, - scheduled_start_time: string, - scheduled_end_time?: string, - description?: string, - entity_type?: number, - entity_metadata?: entity_metadata, - image?: string, //data:image/jpeg;base64,BASE64_ENCODED_JPEG_IMAGE_DATA - } - - - const data: guild_event = { - channel_id: $.step.parameters.channel_id as number, - name: $.step.parameters.name as string, + const data = { + channel_id: $.step.parameters.channel_id, + name: $.step.parameters.name, privacy_level: 2, - scheduled_start_time: $.step.parameters.scheduledStartTime as string, - scheduled_end_time: $.step.parameters.scheduledEndTime as string, - description: $.step.parameters.description as string, - entity_type: $.step.parameters.entityType as number, - image: $.step.parameters.image as string, + scheduled_start_time: $.step.parameters.scheduledStartTime, + scheduled_end_time: $.step.parameters.scheduledEndTime, + description: $.step.parameters.description, + entity_type: $.step.parameters.entityType, + image: $.step.parameters.image, }; const isExternal = $.step.parameters.entityType === 3; + if (isExternal) { data.entity_metadata = { - location: $.step.parameters.location as string, + location: $.step.parameters.location, }; + data.channel_id = null; } diff --git a/packages/backend/src/apps/discord/actions/index.js b/packages/backend/src/apps/discord/actions/index.js new file mode 100644 index 00000000..598e7b29 --- /dev/null +++ b/packages/backend/src/apps/discord/actions/index.js @@ -0,0 +1,4 @@ +import sendMessageToChannel from './send-message-to-channel/index.js'; +import createScheduledEvent from './create-scheduled-event/index.js'; + +export default [sendMessageToChannel, createScheduledEvent]; diff --git a/packages/backend/src/apps/discord/actions/index.ts b/packages/backend/src/apps/discord/actions/index.ts deleted file mode 100644 index 2db5e44e..00000000 --- a/packages/backend/src/apps/discord/actions/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import sendMessageToChannel from './send-message-to-channel'; -import createScheduledEvent from './create-scheduled-event'; - -export default [sendMessageToChannel, createScheduledEvent]; diff --git a/packages/backend/src/apps/discord/actions/send-message-to-channel/index.ts b/packages/backend/src/apps/discord/actions/send-message-to-channel/index.js similarity index 83% rename from packages/backend/src/apps/discord/actions/send-message-to-channel/index.ts rename to packages/backend/src/apps/discord/actions/send-message-to-channel/index.js index fa72ea83..332ed9b8 100644 --- a/packages/backend/src/apps/discord/actions/send-message-to-channel/index.ts +++ b/packages/backend/src/apps/discord/actions/send-message-to-channel/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Send a message to channel', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Channel', key: 'channel', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Pick a channel to send the message to.', variables: true, @@ -26,7 +26,7 @@ export default defineAction({ { label: 'Message text', key: 'message', - type: 'string' as const, + type: 'string', required: true, description: 'The content of your new message.', variables: true, @@ -35,8 +35,9 @@ export default defineAction({ async run($) { const data = { - content: $.step.parameters.message as string, + content: $.step.parameters.message, }; + const response = await $.http?.post( `/channels/${$.step.parameters.channel}/messages`, data diff --git a/packages/backend/src/apps/discord/auth/generate-auth-url.ts b/packages/backend/src/apps/discord/auth/generate-auth-url.js similarity index 53% rename from packages/backend/src/apps/discord/auth/generate-auth-url.ts rename to packages/backend/src/apps/discord/auth/generate-auth-url.js index d912967b..60ac0b84 100644 --- a/packages/backend/src/apps/discord/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/discord/auth/generate-auth-url.js @@ -1,15 +1,15 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import scopes from '../common/scopes'; +import scopes from '../common/scopes.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const callbackUrl = oauthRedirectUrlField.value as string; + + const callbackUrl = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.consumerKey as string, + client_id: $.auth.data.consumerKey, redirect_uri: callbackUrl, response_type: 'code', permissions: '2146958591', diff --git a/packages/backend/src/apps/discord/auth/index.ts b/packages/backend/src/apps/discord/auth/index.js similarity index 82% rename from packages/backend/src/apps/discord/auth/index.ts rename to packages/backend/src/apps/discord/auth/index.js index 158077df..62579e42 100644 --- a/packages/backend/src/apps/discord/auth/index.ts +++ b/packages/backend/src/apps/discord/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/discord/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'consumerKey', label: 'Consumer Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -32,7 +32,7 @@ export default { { key: 'consumerSecret', label: 'Consumer Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -44,7 +44,7 @@ export default { { key: 'botToken', label: 'Bot token', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/discord/auth/is-still-verified.js b/packages/backend/src/apps/discord/auth/is-still-verified.js new file mode 100644 index 00000000..62748909 --- /dev/null +++ b/packages/backend/src/apps/discord/auth/is-still-verified.js @@ -0,0 +1,9 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + await getCurrentUser($); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/discord/auth/is-still-verified.ts b/packages/backend/src/apps/discord/auth/is-still-verified.ts deleted file mode 100644 index fadd0880..00000000 --- a/packages/backend/src/apps/discord/auth/is-still-verified.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - await getCurrentUser($); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/discord/auth/verify-credentials.ts b/packages/backend/src/apps/discord/auth/verify-credentials.js similarity index 65% rename from packages/backend/src/apps/discord/auth/verify-credentials.ts rename to packages/backend/src/apps/discord/auth/verify-credentials.js index 13d012e6..57555c83 100644 --- a/packages/backend/src/apps/discord/auth/verify-credentials.ts +++ b/packages/backend/src/apps/discord/auth/verify-credentials.js @@ -1,22 +1,24 @@ -import { IGlobalVariable, IField } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import scopes from '../common/scopes'; -import getCurrentUser from '../common/get-current-user'; +import scopes from '../common/scopes.js'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const callbackUrl = oauthRedirectUrlField.value as string; + + const callbackUrl = oauthRedirectUrlField.value; + const params = new URLSearchParams({ - client_id: $.auth.data.consumerKey as string, + client_id: $.auth.data.consumerKey, redirect_uri: callbackUrl, response_type: 'code', scope: scopes.join(' '), - client_secret: $.auth.data.consumerSecret as string, - code: $.auth.data.code as string, + client_secret: $.auth.data.consumerSecret, + code: $.auth.data.code, grant_type: 'authorization_code', }); + const { data: verifiedCredentials } = await $.http.post( '/oauth2/token', params.toString() diff --git a/packages/backend/src/apps/discord/common/add-auth-header.ts b/packages/backend/src/apps/discord/common/add-auth-header.js similarity index 63% rename from packages/backend/src/apps/discord/common/add-auth-header.ts rename to packages/backend/src/apps/discord/common/add-auth-header.js index f4fc8f0f..d9f5b10a 100644 --- a/packages/backend/src/apps/discord/common/add-auth-header.ts +++ b/packages/backend/src/apps/discord/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const { tokenType, botToken } = $.auth.data; if (tokenType && botToken) { requestConfig.headers.Authorization = `Bot ${botToken}`; diff --git a/packages/backend/src/apps/discord/common/get-current-user.ts b/packages/backend/src/apps/discord/common/get-current-user.js similarity index 50% rename from packages/backend/src/apps/discord/common/get-current-user.ts rename to packages/backend/src/apps/discord/common/get-current-user.js index 8b79e0c5..57ab474f 100644 --- a/packages/backend/src/apps/discord/common/get-current-user.ts +++ b/packages/backend/src/apps/discord/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get('/users/@me'); const currentUser = response.data; diff --git a/packages/backend/src/apps/discord/common/scopes.ts b/packages/backend/src/apps/discord/common/scopes.js similarity index 100% rename from packages/backend/src/apps/discord/common/scopes.ts rename to packages/backend/src/apps/discord/common/scopes.js diff --git a/packages/backend/src/apps/discord/dynamic-data/index.js b/packages/backend/src/apps/discord/dynamic-data/index.js new file mode 100644 index 00000000..d6a7cec1 --- /dev/null +++ b/packages/backend/src/apps/discord/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listChannels from './list-channels/index.js'; +import listVoiceChannels from './list-voice-channels/index.js'; + +export default [listChannels, listVoiceChannels]; diff --git a/packages/backend/src/apps/discord/dynamic-data/index.ts b/packages/backend/src/apps/discord/dynamic-data/index.ts deleted file mode 100644 index e018fb62..00000000 --- a/packages/backend/src/apps/discord/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listChannels from './list-channels'; -import listVoiceChannels from './list-voice-channels'; - -export default [listChannels, listVoiceChannels]; diff --git a/packages/backend/src/apps/discord/dynamic-data/list-channels/index.ts b/packages/backend/src/apps/discord/dynamic-data/list-channels/index.js similarity index 64% rename from packages/backend/src/apps/discord/dynamic-data/list-channels/index.ts rename to packages/backend/src/apps/discord/dynamic-data/list-channels/index.js index 6ab6e468..52fc719f 100644 --- a/packages/backend/src/apps/discord/dynamic-data/list-channels/index.ts +++ b/packages/backend/src/apps/discord/dynamic-data/list-channels/index.js @@ -1,14 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List channels', key: 'listChannels', - async run($: IGlobalVariable) { - const channels: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { + async run($) { + const channels = { data: [], error: null, }; @@ -18,11 +13,11 @@ export default { ); channels.data = response.data - .filter((channel: IJSONObject) => { + .filter((channel) => { // filter in text channels and announcement channels only return channel.type === 0 || channel.type === 5; }) - .map((channel: IJSONObject) => { + .map((channel) => { return { value: channel.id, name: channel.name, diff --git a/packages/backend/src/apps/discord/dynamic-data/list-voice-channels/index.ts b/packages/backend/src/apps/discord/dynamic-data/list-voice-channels/index.js similarity index 64% rename from packages/backend/src/apps/discord/dynamic-data/list-voice-channels/index.ts rename to packages/backend/src/apps/discord/dynamic-data/list-voice-channels/index.js index 74bad388..975e5fa6 100644 --- a/packages/backend/src/apps/discord/dynamic-data/list-voice-channels/index.ts +++ b/packages/backend/src/apps/discord/dynamic-data/list-voice-channels/index.js @@ -1,14 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List voice channels', key: 'listVoiceChannels', - async run($: IGlobalVariable) { - const channels: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { + async run($) { + const channels = { data: [], error: null, }; @@ -18,11 +13,11 @@ export default { ); channels.data = response.data - .filter((channel: IJSONObject) => { + .filter((channel) => { // filter in voice and stage channels only return channel.type === 2 || channel.type === 13; }) - .map((channel: IJSONObject) => { + .map((channel) => { return { value: channel.id, name: channel.name, diff --git a/packages/backend/src/apps/discord/dynamic-fields/index.ts b/packages/backend/src/apps/discord/dynamic-fields/index.js similarity index 78% rename from packages/backend/src/apps/discord/dynamic-fields/index.ts rename to packages/backend/src/apps/discord/dynamic-fields/index.js index 3b0735da..889acb3e 100644 --- a/packages/backend/src/apps/discord/dynamic-fields/index.ts +++ b/packages/backend/src/apps/discord/dynamic-fields/index.js @@ -1,3 +1,3 @@ -import listExternalScheduledEventFields from './list-external-scheduled-event-fields'; +import listExternalScheduledEventFields from './list-external-scheduled-event-fields/index.js'; export default [listExternalScheduledEventFields]; diff --git a/packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.ts b/packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.js similarity index 62% rename from packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.ts rename to packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.js index 1f935a53..dbe66bf7 100644 --- a/packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.ts +++ b/packages/backend/src/apps/discord/dynamic-fields/list-external-scheduled-event-fields/index.js @@ -1,9 +1,8 @@ -import { IGlobalVariable } from '@automatisch/types'; export default { name: 'List external scheduled event fields', key: 'listExternalScheduledEventFields', - async run($: IGlobalVariable) { + async run($) { const isExternal = $.step.parameters.entityType === 3; if (isExternal) { @@ -11,15 +10,16 @@ export default { { label: 'Location', key: 'location', - type: 'string' as const, + type: 'string', required: true, - description: 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL', + description: + 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL', variables: true, }, { label: 'Start-Time', key: 'scheduledStartTime', - type: 'string' as const, + type: 'string', required: true, description: 'The time the event will start [ISO8601]', variables: true, @@ -27,9 +27,10 @@ export default { { label: 'End-Time', key: 'scheduledEndTime', - type: 'string' as const, + type: 'string', required: true, - description: 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL', + description: + 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL', variables: true, }, ]; @@ -39,9 +40,10 @@ export default { { label: 'Channel', key: 'channel_id', - type: 'dropdown' as const, + type: 'dropdown', required: true, - description: 'Pick a voice or stage channel to link the event to. This will be omitted if type is EXTERNAL', + description: + 'Pick a voice or stage channel to link the event to. This will be omitted if type is EXTERNAL', variables: true, source: { type: 'query', @@ -57,15 +59,16 @@ export default { { label: 'Location', key: 'location', - type: 'string' as const, + type: 'string', required: false, - description: 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL', + description: + 'The location of the event (1-100 characters). This will be omitted if type is NOT EXTERNAL', variables: true, }, { label: 'Start-Time', key: 'scheduledStartTime', - type: 'string' as const, + type: 'string', required: true, description: 'The time the event will start [ISO8601]', variables: true, @@ -73,9 +76,10 @@ export default { { label: 'End-Time', key: 'scheduledEndTime', - type: 'string' as const, + type: 'string', required: false, - description: 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL', + description: + 'The time the event will end [ISO8601]. This will be omitted if type is NOT EXTERNAL', variables: true, }, ]; diff --git a/packages/backend/src/apps/discord/index.d.ts b/packages/backend/src/apps/discord/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/discord/index.ts b/packages/backend/src/apps/discord/index.js similarity index 55% rename from packages/backend/src/apps/discord/index.ts rename to packages/backend/src/apps/discord/index.js index 918138cf..6f42305e 100644 --- a/packages/backend/src/apps/discord/index.ts +++ b/packages/backend/src/apps/discord/index.js @@ -1,10 +1,10 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import dynamicData from './dynamic-data'; -import actions from './actions'; -import triggers from './triggers'; -import dynamicFields from './dynamic-fields'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import dynamicData from './dynamic-data/index.js'; +import actions from './actions/index.js'; +import triggers from './triggers/index.js'; +import dynamicFields from './dynamic-fields/index.js'; export default defineApp({ name: 'Discord', diff --git a/packages/backend/src/apps/discord/triggers/index.ts b/packages/backend/src/apps/discord/triggers/index.js similarity index 100% rename from packages/backend/src/apps/discord/triggers/index.ts rename to packages/backend/src/apps/discord/triggers/index.js diff --git a/packages/backend/src/apps/dropbox/actions/create-folder/index.ts b/packages/backend/src/apps/dropbox/actions/create-folder/index.js similarity index 57% rename from packages/backend/src/apps/dropbox/actions/create-folder/index.ts rename to packages/backend/src/apps/dropbox/actions/create-folder/index.js index 181977cc..8309f94d 100644 --- a/packages/backend/src/apps/dropbox/actions/create-folder/index.ts +++ b/packages/backend/src/apps/dropbox/actions/create-folder/index.js @@ -1,23 +1,25 @@ import path from 'node:path'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create folder', key: 'createFolder', - description: 'Create a new folder with the given parent folder and folder name', + description: + 'Create a new folder with the given parent folder and folder name', arguments: [ { label: 'Folder', key: 'parentFolder', - type: 'string' as const, + type: 'string', required: true, - description: 'Enter the parent folder path, like /TextFiles/ or /Documents/Taxes/', + description: + 'Enter the parent folder path, like /TextFiles/ or /Documents/Taxes/', variables: true, }, { label: 'Folder Name', key: 'folderName', - type: 'string' as const, + type: 'string', required: true, description: 'Enter the name for the new folder', variables: true, @@ -25,11 +27,13 @@ export default defineAction({ ], async run($) { - const parentFolder = $.step.parameters.parentFolder as string; - const folderName = $.step.parameters.folderName as string; + const parentFolder = $.step.parameters.parentFolder; + const folderName = $.step.parameters.folderName; const folderPath = path.join(parentFolder, folderName); - const response = await $.http.post('/2/files/create_folder_v2', { path: folderPath }); + const response = await $.http.post('/2/files/create_folder_v2', { + path: folderPath, + }); $.setActionItem({ raw: response.data }); }, diff --git a/packages/backend/src/apps/dropbox/actions/index.js b/packages/backend/src/apps/dropbox/actions/index.js new file mode 100644 index 00000000..c0b1917b --- /dev/null +++ b/packages/backend/src/apps/dropbox/actions/index.js @@ -0,0 +1,4 @@ +import createFolder from './create-folder/index.js'; +import renameFile from './rename-file/index.js'; + +export default [createFolder, renameFile]; diff --git a/packages/backend/src/apps/dropbox/actions/index.ts b/packages/backend/src/apps/dropbox/actions/index.ts deleted file mode 100644 index 14f401da..00000000 --- a/packages/backend/src/apps/dropbox/actions/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import createFolder from "./create-folder"; -import renameFile from "./rename-file"; - -export default [createFolder, renameFile]; diff --git a/packages/backend/src/apps/dropbox/actions/rename-file/index.ts b/packages/backend/src/apps/dropbox/actions/rename-file/index.js similarity index 66% rename from packages/backend/src/apps/dropbox/actions/rename-file/index.ts rename to packages/backend/src/apps/dropbox/actions/rename-file/index.js index 76bacffc..789b3f3a 100644 --- a/packages/backend/src/apps/dropbox/actions/rename-file/index.ts +++ b/packages/backend/src/apps/dropbox/actions/rename-file/index.js @@ -1,5 +1,5 @@ import path from 'node:path'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Rename file', @@ -9,25 +9,25 @@ export default defineAction({ { label: 'File Path', key: 'filePath', - type: 'string' as const, + type: 'string', required: true, - description: - 'Write the full path to the file such as /Folder1/File.pdf', + description: 'Write the full path to the file such as /Folder1/File.pdf', variables: true, }, { label: 'New Name', key: 'newName', - type: 'string' as const, + type: 'string', required: true, - description: "Enter the new name for the file (without the extension, e.g., '.pdf')", + description: + "Enter the new name for the file (without the extension, e.g., '.pdf')", variables: true, }, ], async run($) { - const filePath = $.step.parameters.filePath as string; - const newName = $.step.parameters.newName as string; + const filePath = $.step.parameters.filePath; + const newName = $.step.parameters.newName; const fileObject = path.parse(filePath); const newPath = path.format({ dir: fileObject.dir, diff --git a/packages/backend/src/apps/dropbox/auth/generate-auth-url.ts b/packages/backend/src/apps/dropbox/auth/generate-auth-url.js similarity index 53% rename from packages/backend/src/apps/dropbox/auth/generate-auth-url.ts rename to packages/backend/src/apps/dropbox/auth/generate-auth-url.js index d663c25c..1aa78f6b 100644 --- a/packages/backend/src/apps/dropbox/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/dropbox/auth/generate-auth-url.js @@ -1,15 +1,15 @@ import { URLSearchParams } from 'url'; -import { IField, IGlobalVariable } from '@automatisch/types'; -import scopes from '../common/scopes'; +import scopes from '../common/scopes.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const callbackUrl = oauthRedirectUrlField.value as string; + + const callbackUrl = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: callbackUrl, response_type: 'code', scope: scopes.join(' '), diff --git a/packages/backend/src/apps/dropbox/auth/index.ts b/packages/backend/src/apps/dropbox/auth/index.js similarity index 74% rename from packages/backend/src/apps/dropbox/auth/index.ts rename to packages/backend/src/apps/dropbox/auth/index.js index 4331302b..a037f9ec 100644 --- a/packages/backend/src/apps/dropbox/auth/index.ts +++ b/packages/backend/src/apps/dropbox/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; -import refreshToken from './refresh-token'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; +import refreshToken from './refresh-token.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/dropbox/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'App Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'App Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/dropbox/auth/is-still-verified.js b/packages/backend/src/apps/dropbox/auth/is-still-verified.js new file mode 100644 index 00000000..b65bc239 --- /dev/null +++ b/packages/backend/src/apps/dropbox/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentAccount from '../common/get-current-account.js'; + +const isStillVerified = async ($) => { + const account = await getCurrentAccount($); + return !!account; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/dropbox/auth/is-still-verified.ts b/packages/backend/src/apps/dropbox/auth/is-still-verified.ts deleted file mode 100644 index bf70f874..00000000 --- a/packages/backend/src/apps/dropbox/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentAccount from '../common/get-current-account'; - -const isStillVerified = async ($: IGlobalVariable) => { - const account = await getCurrentAccount($); - return !!account; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/dropbox/auth/refresh-token.js b/packages/backend/src/apps/dropbox/auth/refresh-token.js new file mode 100644 index 00000000..1f34cdee --- /dev/null +++ b/packages/backend/src/apps/dropbox/auth/refresh-token.js @@ -0,0 +1,36 @@ +import { Buffer } from 'node:buffer'; + +const refreshToken = async ($) => { + const params = { + grant_type: 'refresh_token', + refresh_token: $.auth.data.refreshToken, + }; + + const basicAuthToken = Buffer.from( + `${$.auth.data.clientId}:${$.auth.data.clientSecret}` + ).toString('base64'); + + const { data } = await $.http.post('oauth2/token', null, { + params, + headers: { + Authorization: `Basic ${basicAuthToken}`, + }, + additionalProperties: { + skipAddingAuthHeader: true, + }, + }); + + const { + access_token: accessToken, + expires_in: expiresIn, + token_type: tokenType, + } = data; + + await $.auth.set({ + accessToken, + expiresIn, + tokenType, + }); +}; + +export default refreshToken; diff --git a/packages/backend/src/apps/dropbox/auth/refresh-token.ts b/packages/backend/src/apps/dropbox/auth/refresh-token.ts deleted file mode 100644 index 67c4454f..00000000 --- a/packages/backend/src/apps/dropbox/auth/refresh-token.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { Buffer } from 'node:buffer'; -import { IGlobalVariable } from '@automatisch/types'; - -const refreshToken = async ($: IGlobalVariable) => { - const params = { - grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, - }; - - const basicAuthToken = Buffer - .from(`${$.auth.data.clientId}:${$.auth.data.clientSecret}`) - .toString('base64'); - - const { data } = await $.http.post( - 'oauth2/token', - null, - { - params, - headers: { - Authorization: `Basic ${basicAuthToken}` - }, - additionalProperties: { - skipAddingAuthHeader: true - } - } - ); - - const { - access_token: accessToken, - expires_in: expiresIn, - token_type: tokenType, - } = data; - - await $.auth.set({ - accessToken, - expiresIn, - tokenType, - }); -}; - -export default refreshToken; diff --git a/packages/backend/src/apps/dropbox/auth/verify-credentials.ts b/packages/backend/src/apps/dropbox/auth/verify-credentials.js similarity index 57% rename from packages/backend/src/apps/dropbox/auth/verify-credentials.ts rename to packages/backend/src/apps/dropbox/auth/verify-credentials.js index f56b25d2..22097a1c 100644 --- a/packages/backend/src/apps/dropbox/auth/verify-credentials.ts +++ b/packages/backend/src/apps/dropbox/auth/verify-credentials.js @@ -1,44 +1,20 @@ -import { IGlobalVariable, IField } from '@automatisch/types'; -import getCurrentAccount from '../common/get-current-account'; +import getCurrentAccount from '../common/get-current-account.js'; -type TAccount = { - account_id: string, - name: { - given_name: string, - surname: string, - familiar_name: string, - display_name: string, - abbreviated_name: string, - }, - email: string, - email_verified: boolean, - disabled: boolean, - country: string, - locale: string, - referral_link: string, - is_paired: boolean, - account_type: { - ".tag": string, - }, - root_info: { - ".tag": string, - root_namespace_id: string, - home_namespace_id: string, - }, -} - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUrl = oauthRedirectUrlField.value as string; + + const redirectUrl = oauthRedirectUrlField.value; + const params = { - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUrl, - client_secret: $.auth.data.clientSecret as string, - code: $.auth.data.code as string, + client_secret: $.auth.data.clientSecret, + code: $.auth.data.code, grant_type: 'authorization_code', - } + }; + const { data: verifiedCredentials } = await $.http.post( '/oauth2/token', null, @@ -66,10 +42,10 @@ const verifyCredentials = async ($: IGlobalVariable) => { accountId, teamId, idToken, - uid + uid, }); - const account = await getCurrentAccount($) as TAccount; + const account = await getCurrentAccount($); await $.auth.set({ accountId: account.account_id, @@ -88,10 +64,10 @@ const verifyCredentials = async ($: IGlobalVariable) => { referralLink: account.referral_link, isPaired: account.is_paired, accountType: { - ".tag": account.account_type['.tag'], + '.tag': account.account_type['.tag'], }, rootInfo: { - ".tag": account.root_info['.tag'], + '.tag': account.root_info['.tag'], rootNamespaceId: account.root_info.root_namespace_id, homeNamespaceId: account.root_info.home_namespace_id, }, diff --git a/packages/backend/src/apps/dropbox/common/add-auth-header.js b/packages/backend/src/apps/dropbox/common/add-auth-header.js new file mode 100644 index 00000000..1030633b --- /dev/null +++ b/packages/backend/src/apps/dropbox/common/add-auth-header.js @@ -0,0 +1,14 @@ +const addAuthHeader = ($, requestConfig) => { + requestConfig.headers['Content-Type'] = 'application/json'; + + if ( + !requestConfig.additionalProperties?.skipAddingAuthHeader && + $.auth.data?.accessToken + ) { + requestConfig.headers.Authorization = `Bearer ${$.auth.data.accessToken}`; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/dropbox/common/add-auth-header.ts b/packages/backend/src/apps/dropbox/common/add-auth-header.ts deleted file mode 100644 index ac7b7231..00000000 --- a/packages/backend/src/apps/dropbox/common/add-auth-header.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - requestConfig.headers['Content-Type'] = 'application/json'; - - if (!requestConfig.additionalProperties?.skipAddingAuthHeader && $.auth.data?.accessToken) { - requestConfig.headers.Authorization = `Bearer ${$.auth.data.accessToken}`; - } - - return requestConfig; -}; - -export default addAuthHeader; diff --git a/packages/backend/src/apps/dropbox/common/get-current-account.js b/packages/backend/src/apps/dropbox/common/get-current-account.js new file mode 100644 index 00000000..26786dde --- /dev/null +++ b/packages/backend/src/apps/dropbox/common/get-current-account.js @@ -0,0 +1,6 @@ +const getCurrentAccount = async ($) => { + const response = await $.http.post('/2/users/get_current_account', null); + return response.data; +}; + +export default getCurrentAccount; diff --git a/packages/backend/src/apps/dropbox/common/get-current-account.ts b/packages/backend/src/apps/dropbox/common/get-current-account.ts deleted file mode 100644 index 6764e781..00000000 --- a/packages/backend/src/apps/dropbox/common/get-current-account.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentAccount = async ($: IGlobalVariable): Promise => { - const response = await $.http.post('/2/users/get_current_account', null); - return response.data; -}; - -export default getCurrentAccount; diff --git a/packages/backend/src/apps/dropbox/common/scopes.ts b/packages/backend/src/apps/dropbox/common/scopes.js similarity index 100% rename from packages/backend/src/apps/dropbox/common/scopes.ts rename to packages/backend/src/apps/dropbox/common/scopes.js diff --git a/packages/backend/src/apps/dropbox/index.d.ts b/packages/backend/src/apps/dropbox/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/dropbox/index.ts b/packages/backend/src/apps/dropbox/index.js similarity index 66% rename from packages/backend/src/apps/dropbox/index.ts rename to packages/backend/src/apps/dropbox/index.js index d7bc877b..6a0e4729 100644 --- a/packages/backend/src/apps/dropbox/index.ts +++ b/packages/backend/src/apps/dropbox/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Dropbox', diff --git a/packages/backend/src/apps/filter/actions/continue/index.js b/packages/backend/src/apps/filter/actions/continue/index.js new file mode 100644 index 00000000..57240287 --- /dev/null +++ b/packages/backend/src/apps/filter/actions/continue/index.js @@ -0,0 +1,88 @@ +import defineAction from '../../../../helpers/define-action.js'; + +const isEqual = (a, b) => a === b; +const isNotEqual = (a, b) => !isEqual(a, b); +const isGreaterThan = (a, b) => Number(a) > Number(b); +const isLessThan = (a, b) => Number(a) < Number(b); +const isGreaterThanOrEqual = (a, b) => Number(a) >= Number(b); +const isLessThanOrEqual = (a, b) => Number(a) <= Number(b); +const contains = (a, b) => a.includes(b); +const doesNotContain = (a, b) => !contains(a, b); + +const shouldContinue = (orGroups) => { + let atLeastOneGroupMatches = false; + + for (const group of orGroups) { + let groupMatches = true; + + for (const condition of group.and) { + const conditionMatches = operate( + condition.operator, + condition.key, + condition.value + ); + + if (!conditionMatches) { + groupMatches = false; + + break; + } + } + + if (groupMatches) { + atLeastOneGroupMatches = true; + + break; + } + } + + return atLeastOneGroupMatches; +}; + +const operators = { + equal: isEqual, + not_equal: isNotEqual, + greater_than: isGreaterThan, + less_than: isLessThan, + greater_than_or_equal: isGreaterThanOrEqual, + less_than_or_equal: isLessThanOrEqual, + contains: contains, + not_contains: doesNotContain, +}; + +const operate = (operation, a, b) => { + return operators[operation](a, b); +}; + +export default defineAction({ + name: 'Continue if conditions match', + key: 'continueIfMatches', + description: 'Let the execution continue if the conditions match', + arguments: [], + + async run($) { + const orGroups = $.step.parameters.or; + + const matchingGroups = orGroups.reduce((groups, group) => { + const matchingConditions = group.and.filter((condition) => + operate(condition.operator, condition.key, condition.value) + ); + + if (matchingConditions.length) { + return groups.concat([{ and: matchingConditions }]); + } + + return groups; + }, []); + + if (!shouldContinue(orGroups)) { + $.execution.exit(); + } + + $.setActionItem({ + raw: { + or: matchingGroups, + }, + }); + }, +}); diff --git a/packages/backend/src/apps/filter/actions/continue/index.ts b/packages/backend/src/apps/filter/actions/continue/index.ts deleted file mode 100644 index 1e264f72..00000000 --- a/packages/backend/src/apps/filter/actions/continue/index.ts +++ /dev/null @@ -1,109 +0,0 @@ -import defineAction from '../../../../helpers/define-action'; - -type TGroupItem = { - key: string; - operator: keyof TOperators; - value: string; - id: string; -} - -type TGroup = Record<'and', TGroupItem[]>; - -const isEqual = (a: string, b: string) => a === b; -const isNotEqual = (a: string, b: string) => !isEqual(a, b); -const isGreaterThan = (a: string, b: string) => Number(a) > Number(b); -const isLessThan = (a: string, b: string) => Number(a) < Number(b); -const isGreaterThanOrEqual = (a: string, b: string) => Number(a) >= Number(b); -const isLessThanOrEqual = (a: string, b: string) => Number(a) <= Number(b); -const contains = (a: string, b: string) => a.includes(b); -const doesNotContain = (a: string, b: string) => !contains(a, b); - -const shouldContinue = (orGroups: TGroup[]) => { - let atLeastOneGroupMatches = false; - - for (const group of orGroups) { - let groupMatches = true; - - for (const condition of group.and) { - const conditionMatches = operate( - condition.operator, - condition.key, - condition.value - ); - - if (!conditionMatches) { - groupMatches = false; - - break; - } - } - - if (groupMatches) { - atLeastOneGroupMatches = true; - - break; - } - } - - return atLeastOneGroupMatches; -} - -type TOperatorFunc = (a: string, b: string) => boolean; - -type TOperators = { - equal: TOperatorFunc; - not_equal: TOperatorFunc; - greater_than: TOperatorFunc; - less_than: TOperatorFunc; - greater_than_or_equal: TOperatorFunc; - less_than_or_equal: TOperatorFunc; - contains: TOperatorFunc; - not_contains: TOperatorFunc; -}; - -const operators: TOperators = { - 'equal': isEqual, - 'not_equal': isNotEqual, - 'greater_than': isGreaterThan, - 'less_than': isLessThan, - 'greater_than_or_equal': isGreaterThanOrEqual, - 'less_than_or_equal': isLessThanOrEqual, - 'contains': contains, - 'not_contains': doesNotContain, -}; - -const operate = (operation: keyof TOperators, a: string, b: string) => { - return operators[operation](a, b); -}; - -export default defineAction({ - name: 'Continue if conditions match', - key: 'continueIfMatches', - description: 'Let the execution continue if the conditions match', - arguments: [], - - async run($) { - const orGroups = $.step.parameters.or as TGroup[]; - - const matchingGroups = orGroups.reduce((groups, group) => { - const matchingConditions = group.and - .filter((condition) => operate(condition.operator, condition.key, condition.value)); - - if (matchingConditions.length) { - return groups.concat([{ and: matchingConditions }]); - } - - return groups; - }, []); - - if (!shouldContinue(orGroups)) { - $.execution.exit(); - } - - $.setActionItem({ - raw: { - or: matchingGroups, - } - }); - }, -}); diff --git a/packages/backend/src/apps/filter/actions/index.js b/packages/backend/src/apps/filter/actions/index.js new file mode 100644 index 00000000..0390f47d --- /dev/null +++ b/packages/backend/src/apps/filter/actions/index.js @@ -0,0 +1,3 @@ +import continueIfMatches from './continue/index.js'; + +export default [continueIfMatches]; diff --git a/packages/backend/src/apps/filter/actions/index.ts b/packages/backend/src/apps/filter/actions/index.ts deleted file mode 100644 index 0880c5cd..00000000 --- a/packages/backend/src/apps/filter/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import continueIfMatches from './continue'; - -export default [continueIfMatches]; diff --git a/packages/backend/src/apps/filter/index.d.ts b/packages/backend/src/apps/filter/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/filter/index.ts b/packages/backend/src/apps/filter/index.js similarity index 75% rename from packages/backend/src/apps/filter/index.ts rename to packages/backend/src/apps/filter/index.js index 9b4a81ce..f1d214f1 100644 --- a/packages/backend/src/apps/filter/index.ts +++ b/packages/backend/src/apps/filter/index.js @@ -1,5 +1,5 @@ -import defineApp from '../../helpers/define-app'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Filter', diff --git a/packages/backend/src/apps/flickr/auth/generate-auth-url.ts b/packages/backend/src/apps/flickr/auth/generate-auth-url.js similarity index 76% rename from packages/backend/src/apps/flickr/auth/generate-auth-url.ts rename to packages/backend/src/apps/flickr/auth/generate-auth-url.js index f3eea3fd..4de36c07 100644 --- a/packages/backend/src/apps/flickr/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/flickr/auth/generate-auth-url.js @@ -1,9 +1,8 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); const callbackUrl = oauthRedirectUrlField.value; diff --git a/packages/backend/src/apps/flickr/auth/index.ts b/packages/backend/src/apps/flickr/auth/index.js similarity index 81% rename from packages/backend/src/apps/flickr/auth/index.ts rename to packages/backend/src/apps/flickr/auth/index.js index 5cc50871..f06e6db0 100644 --- a/packages/backend/src/apps/flickr/auth/index.ts +++ b/packages/backend/src/apps/flickr/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/flickr/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'consumerKey', label: 'Consumer Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -32,7 +32,7 @@ export default { { key: 'consumerSecret', label: 'Consumer Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/flickr/auth/is-still-verified.ts b/packages/backend/src/apps/flickr/auth/is-still-verified.js similarity index 67% rename from packages/backend/src/apps/flickr/auth/is-still-verified.ts rename to packages/backend/src/apps/flickr/auth/is-still-verified.js index 634776a9..3c695828 100644 --- a/packages/backend/src/apps/flickr/auth/is-still-verified.ts +++ b/packages/backend/src/apps/flickr/auth/is-still-verified.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const isStillVerified = async ($: IGlobalVariable) => { +const isStillVerified = async ($) => { const params = { method: 'flickr.test.login', format: 'json', diff --git a/packages/backend/src/apps/flickr/auth/verify-credentials.ts b/packages/backend/src/apps/flickr/auth/verify-credentials.js similarity index 84% rename from packages/backend/src/apps/flickr/auth/verify-credentials.ts rename to packages/backend/src/apps/flickr/auth/verify-credentials.js index 4a42af8f..1d3905dc 100644 --- a/packages/backend/src/apps/flickr/auth/verify-credentials.ts +++ b/packages/backend/src/apps/flickr/auth/verify-credentials.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const response = await $.http.post( `/oauth/access_token?oauth_verifier=${$.auth.data.oauth_verifier}&oauth_token=${$.auth.data.accessToken}`, null diff --git a/packages/backend/src/apps/flickr/common/add-auth-header.ts b/packages/backend/src/apps/flickr/common/add-auth-header.js similarity index 51% rename from packages/backend/src/apps/flickr/common/add-auth-header.ts rename to packages/backend/src/apps/flickr/common/add-auth-header.js index 7e9daa02..01c26019 100644 --- a/packages/backend/src/apps/flickr/common/add-auth-header.ts +++ b/packages/backend/src/apps/flickr/common/add-auth-header.js @@ -1,22 +1,14 @@ -import { Token } from 'oauth-1.0a'; -import { IJSONObject, TBeforeRequest } from '@automatisch/types'; -import oauthClient from './oauth-client'; +import oauthClient from './oauth-client.js'; -type RequestDataType = { - url: string; - method: string; - data?: IJSONObject; -}; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const { url, method, data, params } = requestConfig; - const token: Token = { - key: $.auth.data?.accessToken as string, - secret: $.auth.data?.accessSecret as string, + const token = { + key: $.auth.data?.accessToken, + secret: $.auth.data?.accessSecret, }; - const requestData: RequestDataType = { + const requestData = { url: `${requestConfig.baseURL}${url}`, method, }; diff --git a/packages/backend/src/apps/flickr/common/oauth-client.ts b/packages/backend/src/apps/flickr/common/oauth-client.js similarity index 65% rename from packages/backend/src/apps/flickr/common/oauth-client.ts rename to packages/backend/src/apps/flickr/common/oauth-client.js index c29f6a0a..d89c4889 100644 --- a/packages/backend/src/apps/flickr/common/oauth-client.ts +++ b/packages/backend/src/apps/flickr/common/oauth-client.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; import crypto from 'crypto'; import OAuth from 'oauth-1.0a'; -const oauthClient = ($: IGlobalVariable) => { +const oauthClient = ($) => { const consumerData = { - key: $.auth.data.consumerKey as string, - secret: $.auth.data.consumerSecret as string, + key: $.auth.data.consumerKey, + secret: $.auth.data.consumerSecret, }; return new OAuth({ diff --git a/packages/backend/src/apps/flickr/dynamic-data/index.js b/packages/backend/src/apps/flickr/dynamic-data/index.js new file mode 100644 index 00000000..cd0d4c38 --- /dev/null +++ b/packages/backend/src/apps/flickr/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listAlbums from './list-albums/index.js'; + +export default [listAlbums]; diff --git a/packages/backend/src/apps/flickr/dynamic-data/index.ts b/packages/backend/src/apps/flickr/dynamic-data/index.ts deleted file mode 100644 index b4d81ec4..00000000 --- a/packages/backend/src/apps/flickr/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listAlbums from './list-albums'; - -export default [listAlbums]; diff --git a/packages/backend/src/apps/flickr/dynamic-data/list-albums/index.ts b/packages/backend/src/apps/flickr/dynamic-data/list-albums/index.js similarity index 58% rename from packages/backend/src/apps/flickr/dynamic-data/list-albums/index.ts rename to packages/backend/src/apps/flickr/dynamic-data/list-albums/index.js index 115dcd17..55f0b9cf 100644 --- a/packages/backend/src/apps/flickr/dynamic-data/list-albums/index.ts +++ b/packages/backend/src/apps/flickr/dynamic-data/list-albums/index.js @@ -1,22 +1,8 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type TResponse = { - data: IJSONObject[]; - error?: IJSONObject; -}; - -type TPhotoset = { - id: string; - title: { - _content: string; - }; -}; - export default { name: 'List albums', key: 'listAlbums', - async run($: IGlobalVariable) { + async run($) { const params = { page: 1, per_page: 500, @@ -25,9 +11,10 @@ export default { format: 'json', nojsoncallback: 1, }; + let response = await $.http.get('/rest', { params }); - const aggregatedResponse: TResponse = { + const aggregatedResponse = { data: [...response.data.photosets.photoset], }; @@ -42,14 +29,12 @@ export default { aggregatedResponse.data.push(...response.data.photosets.photoset); } - aggregatedResponse.data = aggregatedResponse.data.map( - (photoset: TPhotoset) => { - return { - value: photoset.id, - name: photoset.title._content, - } as IJSONObject; - } - ); + aggregatedResponse.data = aggregatedResponse.data.map((photoset) => { + return { + value: photoset.id, + name: photoset.title._content, + }; + }); return aggregatedResponse; }, diff --git a/packages/backend/src/apps/flickr/index.d.ts b/packages/backend/src/apps/flickr/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/flickr/index.ts b/packages/backend/src/apps/flickr/index.js similarity index 65% rename from packages/backend/src/apps/flickr/index.ts rename to packages/backend/src/apps/flickr/index.js index 44254ca0..835db6cd 100644 --- a/packages/backend/src/apps/flickr/index.ts +++ b/packages/backend/src/apps/flickr/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Flickr', diff --git a/packages/backend/src/apps/flickr/triggers/index.js b/packages/backend/src/apps/flickr/triggers/index.js new file mode 100644 index 00000000..2c978926 --- /dev/null +++ b/packages/backend/src/apps/flickr/triggers/index.js @@ -0,0 +1,6 @@ +import newAlbums from './new-albums/index.js'; +import newFavoritePhotos from './new-favorite-photos/index.js'; +import newPhotos from './new-photos/index.js'; +import newPhotosInAlbums from './new-photos-in-album/index.js'; + +export default [newAlbums, newFavoritePhotos, newPhotos, newPhotosInAlbums]; diff --git a/packages/backend/src/apps/flickr/triggers/index.ts b/packages/backend/src/apps/flickr/triggers/index.ts deleted file mode 100644 index 5e8bad6a..00000000 --- a/packages/backend/src/apps/flickr/triggers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import newAlbums from './new-albums'; -import newFavoritePhotos from './new-favorite-photos'; -import newPhotos from './new-photos'; -import newPhotosInAlbums from './new-photos-in-album'; - -export default [newAlbums, newFavoritePhotos, newPhotos, newPhotosInAlbums]; diff --git a/packages/backend/src/apps/flickr/triggers/new-albums/index.ts b/packages/backend/src/apps/flickr/triggers/new-albums/index.js similarity index 65% rename from packages/backend/src/apps/flickr/triggers/new-albums/index.ts rename to packages/backend/src/apps/flickr/triggers/new-albums/index.js index e7bf9178..ff7bca12 100644 --- a/packages/backend/src/apps/flickr/triggers/new-albums/index.ts +++ b/packages/backend/src/apps/flickr/triggers/new-albums/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newAlbums from './new-albums'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newAlbums from './new-albums.js'; export default defineTrigger({ name: 'New albums', diff --git a/packages/backend/src/apps/flickr/triggers/new-albums/new-albums.ts b/packages/backend/src/apps/flickr/triggers/new-albums/new-albums.js similarity index 85% rename from packages/backend/src/apps/flickr/triggers/new-albums/new-albums.ts rename to packages/backend/src/apps/flickr/triggers/new-albums/new-albums.js index 918ac412..b4490942 100644 --- a/packages/backend/src/apps/flickr/triggers/new-albums/new-albums.ts +++ b/packages/backend/src/apps/flickr/triggers/new-albums/new-albums.js @@ -1,5 +1,3 @@ -import { IGlobalVariable } from '@automatisch/types'; - const extraFields = [ 'license', 'date_upload', @@ -22,7 +20,7 @@ const extraFields = [ 'url_o', ].join(','); -const newAlbums = async ($: IGlobalVariable) => { +const newAlbums = async ($) => { let page = 1; let pages = 1; @@ -45,7 +43,7 @@ const newAlbums = async ($: IGlobalVariable) => { $.pushTriggerItem({ raw: photoset, meta: { - internalId: photoset.id as string, + internalId: photoset.id, }, }); } diff --git a/packages/backend/src/apps/flickr/triggers/new-favorite-photos/index.ts b/packages/backend/src/apps/flickr/triggers/new-favorite-photos/index.js similarity index 64% rename from packages/backend/src/apps/flickr/triggers/new-favorite-photos/index.ts rename to packages/backend/src/apps/flickr/triggers/new-favorite-photos/index.js index 70babf6d..6e80d2b4 100644 --- a/packages/backend/src/apps/flickr/triggers/new-favorite-photos/index.ts +++ b/packages/backend/src/apps/flickr/triggers/new-favorite-photos/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newFavoritePhotos from './new-favorite-photos'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newFavoritePhotos from './new-favorite-photos.js'; export default defineTrigger({ name: 'New favorite photos', diff --git a/packages/backend/src/apps/flickr/triggers/new-favorite-photos/new-favorite-photos.ts b/packages/backend/src/apps/flickr/triggers/new-favorite-photos/new-favorite-photos.js similarity index 86% rename from packages/backend/src/apps/flickr/triggers/new-favorite-photos/new-favorite-photos.ts rename to packages/backend/src/apps/flickr/triggers/new-favorite-photos/new-favorite-photos.js index 4e7f9842..5a06649a 100644 --- a/packages/backend/src/apps/flickr/triggers/new-favorite-photos/new-favorite-photos.ts +++ b/packages/backend/src/apps/flickr/triggers/new-favorite-photos/new-favorite-photos.js @@ -1,5 +1,3 @@ -import { IGlobalVariable } from '@automatisch/types'; - const extraFields = [ 'description', 'license', @@ -28,7 +26,7 @@ const extraFields = [ 'url_o', ].join(','); -const newPhotos = async ($: IGlobalVariable) => { +const newPhotos = async ($) => { let page = 1; let pages = 1; @@ -51,7 +49,7 @@ const newPhotos = async ($: IGlobalVariable) => { $.pushTriggerItem({ raw: photo, meta: { - internalId: photo.date_faved as string, + internalId: photo.date_faved, }, }); } diff --git a/packages/backend/src/apps/flickr/triggers/new-photos-in-album/index.ts b/packages/backend/src/apps/flickr/triggers/new-photos-in-album/index.js similarity index 78% rename from packages/backend/src/apps/flickr/triggers/new-photos-in-album/index.ts rename to packages/backend/src/apps/flickr/triggers/new-photos-in-album/index.js index d3e7022b..d61261b7 100644 --- a/packages/backend/src/apps/flickr/triggers/new-photos-in-album/index.ts +++ b/packages/backend/src/apps/flickr/triggers/new-photos-in-album/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newPhotosInAlbum from './new-photos-in-album'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newPhotosInAlbum from './new-photos-in-album.js'; export default defineTrigger({ name: 'New photos in album', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Album', key: 'album', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: false, source: { diff --git a/packages/backend/src/apps/flickr/triggers/new-photos-in-album/new-photos-in-album.ts b/packages/backend/src/apps/flickr/triggers/new-photos-in-album/new-photos-in-album.js similarity index 81% rename from packages/backend/src/apps/flickr/triggers/new-photos-in-album/new-photos-in-album.ts rename to packages/backend/src/apps/flickr/triggers/new-photos-in-album/new-photos-in-album.js index 98ba9ff3..aa681dd6 100644 --- a/packages/backend/src/apps/flickr/triggers/new-photos-in-album/new-photos-in-album.ts +++ b/packages/backend/src/apps/flickr/triggers/new-photos-in-album/new-photos-in-album.js @@ -1,5 +1,3 @@ -import { IGlobalVariable } from '@automatisch/types'; - const extraFields = [ 'license', 'date_upload', @@ -22,7 +20,7 @@ const extraFields = [ 'url_o', ].join(','); -const newPhotosInAlbum = async ($: IGlobalVariable) => { +const newPhotosInAlbum = async ($) => { let page = 1; let pages = 1; @@ -32,7 +30,7 @@ const newPhotosInAlbum = async ($: IGlobalVariable) => { per_page: 11, user_id: $.auth.data.userId, extras: extraFields, - photoset_id: $.step.parameters.album as string, + photoset_id: $.step.parameters.album, method: 'flickr.photosets.getPhotos', format: 'json', nojsoncallback: 1, @@ -46,7 +44,7 @@ const newPhotosInAlbum = async ($: IGlobalVariable) => { $.pushTriggerItem({ raw: photo, meta: { - internalId: photo.id as string, + internalId: photo.id, }, }); } diff --git a/packages/backend/src/apps/flickr/triggers/new-photos/index.ts b/packages/backend/src/apps/flickr/triggers/new-photos/index.js similarity index 64% rename from packages/backend/src/apps/flickr/triggers/new-photos/index.ts rename to packages/backend/src/apps/flickr/triggers/new-photos/index.js index 66e95ede..f88a7b97 100644 --- a/packages/backend/src/apps/flickr/triggers/new-photos/index.ts +++ b/packages/backend/src/apps/flickr/triggers/new-photos/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newPhotos from './new-photos'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newPhotos from './new-photos.js'; export default defineTrigger({ name: 'New photos', diff --git a/packages/backend/src/apps/flickr/triggers/new-photos/new-photos.ts b/packages/backend/src/apps/flickr/triggers/new-photos/new-photos.js similarity index 86% rename from packages/backend/src/apps/flickr/triggers/new-photos/new-photos.ts rename to packages/backend/src/apps/flickr/triggers/new-photos/new-photos.js index a27a9185..feef50ee 100644 --- a/packages/backend/src/apps/flickr/triggers/new-photos/new-photos.ts +++ b/packages/backend/src/apps/flickr/triggers/new-photos/new-photos.js @@ -1,5 +1,3 @@ -import { IGlobalVariable } from '@automatisch/types'; - const extraFields = [ 'description', 'license', @@ -28,7 +26,7 @@ const extraFields = [ 'url_o', ].join(','); -const newPhotos = async ($: IGlobalVariable) => { +const newPhotos = async ($) => { let page = 1; let pages = 1; @@ -51,7 +49,7 @@ const newPhotos = async ($: IGlobalVariable) => { $.pushTriggerItem({ raw: photo, meta: { - internalId: photo.id as string, + internalId: photo.id, }, }); } diff --git a/packages/backend/src/apps/flowers-software/auth/index.ts b/packages/backend/src/apps/flowers-software/auth/index.js similarity index 77% rename from packages/backend/src/apps/flowers-software/auth/index.ts rename to packages/backend/src/apps/flowers-software/auth/index.js index 6dd40712..04724510 100644 --- a/packages/backend/src/apps/flowers-software/auth/index.ts +++ b/packages/backend/src/apps/flowers-software/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'username', label: 'Username', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -17,7 +17,7 @@ export default { { key: 'password', label: 'Password', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -28,7 +28,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/flowers-software/auth/is-still-verified.js b/packages/backend/src/apps/flowers-software/auth/is-still-verified.js new file mode 100644 index 00000000..270d415b --- /dev/null +++ b/packages/backend/src/apps/flowers-software/auth/is-still-verified.js @@ -0,0 +1,9 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/flowers-software/auth/is-still-verified.ts b/packages/backend/src/apps/flowers-software/auth/is-still-verified.ts deleted file mode 100644 index 5a2fe2ae..00000000 --- a/packages/backend/src/apps/flowers-software/auth/is-still-verified.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/flowers-software/auth/verify-credentials.ts b/packages/backend/src/apps/flowers-software/auth/verify-credentials.js similarity index 69% rename from packages/backend/src/apps/flowers-software/auth/verify-credentials.ts rename to packages/backend/src/apps/flowers-software/auth/verify-credentials.js index 4e7a4f69..33c709ba 100644 --- a/packages/backend/src/apps/flowers-software/auth/verify-credentials.ts +++ b/packages/backend/src/apps/flowers-software/auth/verify-credentials.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getWebhooks from '../common/get-webhooks'; +import getWebhooks from '../common/get-webhooks.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const response = await getWebhooks($); const successful = Array.isArray(response.data); diff --git a/packages/backend/src/apps/flowers-software/common/add-auth-header.js b/packages/backend/src/apps/flowers-software/common/add-auth-header.js new file mode 100644 index 00000000..23e64600 --- /dev/null +++ b/packages/backend/src/apps/flowers-software/common/add-auth-header.js @@ -0,0 +1,16 @@ +const addAuthHeader = ($, requestConfig) => { + const { data } = $.auth; + + if (data?.username && data.password && data.apiKey) { + requestConfig.headers['x-api-key'] = data.apiKey; + + requestConfig.auth = { + username: data.username, + password: data.password, + }; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/flowers-software/common/add-auth-header.ts b/packages/backend/src/apps/flowers-software/common/add-auth-header.ts deleted file mode 100644 index 02f524fd..00000000 --- a/packages/backend/src/apps/flowers-software/common/add-auth-header.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - const { data } = $.auth; - - if (data?.username && data.password && data.apiKey) { - requestConfig.headers['x-api-key'] = data.apiKey as string; - - requestConfig.auth = { - username: data.username as string, - password: data.password as string, - }; - } - - return requestConfig; -}; - -export default addAuthHeader; diff --git a/packages/backend/src/apps/flowers-software/common/get-webhooks.js b/packages/backend/src/apps/flowers-software/common/get-webhooks.js new file mode 100644 index 00000000..70c06fe3 --- /dev/null +++ b/packages/backend/src/apps/flowers-software/common/get-webhooks.js @@ -0,0 +1,3 @@ +export default async function getWebhooks($) { + return await $.http.get('/v2/public/api/webhooks'); +} diff --git a/packages/backend/src/apps/flowers-software/common/get-webhooks.ts b/packages/backend/src/apps/flowers-software/common/get-webhooks.ts deleted file mode 100644 index bb529c26..00000000 --- a/packages/backend/src/apps/flowers-software/common/get-webhooks.ts +++ /dev/null @@ -1,5 +0,0 @@ -import type { IGlobalVariable } from "@automatisch/types"; - -export default async function getWebhooks($: IGlobalVariable) { - return await $.http.get('/v2/public/api/webhooks'); -} diff --git a/packages/backend/src/apps/flowers-software/common/webhook-filters.ts b/packages/backend/src/apps/flowers-software/common/webhook-filters.js similarity index 100% rename from packages/backend/src/apps/flowers-software/common/webhook-filters.ts rename to packages/backend/src/apps/flowers-software/common/webhook-filters.js diff --git a/packages/backend/src/apps/flowers-software/index.d.ts b/packages/backend/src/apps/flowers-software/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/flowers-software/index.ts b/packages/backend/src/apps/flowers-software/index.js similarity index 69% rename from packages/backend/src/apps/flowers-software/index.ts rename to packages/backend/src/apps/flowers-software/index.js index a0234867..44a0be6a 100644 --- a/packages/backend/src/apps/flowers-software/index.ts +++ b/packages/backend/src/apps/flowers-software/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Flowers Software', diff --git a/packages/backend/src/apps/flowers-software/triggers/index.js b/packages/backend/src/apps/flowers-software/triggers/index.js new file mode 100644 index 00000000..0c60d46e --- /dev/null +++ b/packages/backend/src/apps/flowers-software/triggers/index.js @@ -0,0 +1,3 @@ +import newActivity from './new-activity/index.js'; + +export default [newActivity]; diff --git a/packages/backend/src/apps/flowers-software/triggers/index.ts b/packages/backend/src/apps/flowers-software/triggers/index.ts deleted file mode 100644 index 5599f298..00000000 --- a/packages/backend/src/apps/flowers-software/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import newActivity from './new-activity'; - -export default [newActivity]; diff --git a/packages/backend/src/apps/flowers-software/triggers/new-activity/index.ts b/packages/backend/src/apps/flowers-software/triggers/new-activity/index.js similarity index 86% rename from packages/backend/src/apps/flowers-software/triggers/new-activity/index.ts rename to packages/backend/src/apps/flowers-software/triggers/new-activity/index.js index ef01d81b..a0c975e2 100644 --- a/packages/backend/src/apps/flowers-software/triggers/new-activity/index.ts +++ b/packages/backend/src/apps/flowers-software/triggers/new-activity/index.js @@ -1,7 +1,7 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; -import webhookFilters from '../../common/webhook-filters'; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import webhookFilters from '../../common/webhook-filters.js'; export default defineTrigger({ name: 'New activity', @@ -12,7 +12,7 @@ export default defineTrigger({ { label: 'Activity type', key: 'filters', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Pick an activity type to receive events for.', variables: false, diff --git a/packages/backend/src/apps/formatter/actions/date-time/index.ts b/packages/backend/src/apps/formatter/actions/date-time/index.js similarity index 77% rename from packages/backend/src/apps/formatter/actions/date-time/index.ts rename to packages/backend/src/apps/formatter/actions/date-time/index.js index c5579fce..830421d7 100644 --- a/packages/backend/src/apps/formatter/actions/date-time/index.ts +++ b/packages/backend/src/apps/formatter/actions/date-time/index.js @@ -1,6 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; - -import formatDateTime from './transformers/format-date-time'; +import defineAction from '../../../../helpers/define-action.js'; +import formatDateTime from './transformers/format-date-time.js'; const transformers = { formatDateTime, @@ -14,7 +13,7 @@ export default defineAction({ { label: 'Transform', key: 'transform', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, options: [{ label: 'Format Date / Time', value: 'formatDateTime' }], @@ -36,8 +35,7 @@ export default defineAction({ ], async run($) { - const transformerName = $.step.parameters - .transform as keyof typeof transformers; + const transformerName = $.step.parameters.transform; const output = transformers[transformerName]($); $.setActionItem({ diff --git a/packages/backend/src/apps/formatter/actions/date-time/transformers/format-date-time.js b/packages/backend/src/apps/formatter/actions/date-time/transformers/format-date-time.js new file mode 100644 index 00000000..47f0266d --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/date-time/transformers/format-date-time.js @@ -0,0 +1,22 @@ +import { DateTime } from 'luxon'; + +const formatDateTime = ($) => { + const input = $.step.parameters.input; + + const fromFormat = $.step.parameters.fromFormat; + const fromTimezone = $.step.parameters.fromTimezone; + + const inputDateTime = DateTime.fromFormat(input, fromFormat, { + zone: fromTimezone, + setZone: true, + }); + + const toFormat = $.step.parameters.toFormat; + const toTimezone = $.step.parameters.toTimezone; + + const outputDateTime = inputDateTime.setZone(toTimezone).toFormat(toFormat); + + return outputDateTime; +}; + +export default formatDateTime; diff --git a/packages/backend/src/apps/formatter/actions/date-time/transformers/format-date-time.ts b/packages/backend/src/apps/formatter/actions/date-time/transformers/format-date-time.ts deleted file mode 100644 index 3536548a..00000000 --- a/packages/backend/src/apps/formatter/actions/date-time/transformers/format-date-time.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import { DateTime } from 'luxon'; - -const formatDateTime = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - - const fromFormat = $.step.parameters.fromFormat as string; - const fromTimezone = $.step.parameters.fromTimezone as string; - - const inputDateTime = DateTime.fromFormat(input, fromFormat, { - zone: fromTimezone, - setZone: true, - }); - - const toFormat = $.step.parameters.toFormat as string; - const toTimezone = $.step.parameters.toTimezone as string; - - const outputDateTime = inputDateTime.setZone(toTimezone).toFormat(toFormat); - - return outputDateTime; -}; - -export default formatDateTime; diff --git a/packages/backend/src/apps/formatter/actions/index.js b/packages/backend/src/apps/formatter/actions/index.js new file mode 100644 index 00000000..f7f07e50 --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/index.js @@ -0,0 +1,5 @@ +import text from './text/index.js'; +import numbers from './numbers/index.js'; +import dateTime from './date-time/index.js'; + +export default [text, numbers, dateTime]; diff --git a/packages/backend/src/apps/formatter/actions/index.ts b/packages/backend/src/apps/formatter/actions/index.ts deleted file mode 100644 index 0609b8c9..00000000 --- a/packages/backend/src/apps/formatter/actions/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import text from './text'; -import numbers from './numbers'; -import dateTime from './date-time'; - -export default [text, numbers, dateTime]; diff --git a/packages/backend/src/apps/formatter/actions/numbers/index.ts b/packages/backend/src/apps/formatter/actions/numbers/index.js similarity index 80% rename from packages/backend/src/apps/formatter/actions/numbers/index.ts rename to packages/backend/src/apps/formatter/actions/numbers/index.js index c4518b44..94aca22e 100644 --- a/packages/backend/src/apps/formatter/actions/numbers/index.ts +++ b/packages/backend/src/apps/formatter/actions/numbers/index.js @@ -1,9 +1,9 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; -import performMathOperation from './transformers/perform-math-operation'; -import randomNumber from './transformers/random-number'; -import formatNumber from './transformers/format-number'; -import formatPhoneNumber from './transformers/format-phone-number'; +import performMathOperation from './transformers/perform-math-operation.js'; +import randomNumber from './transformers/random-number.js'; +import formatNumber from './transformers/format-number.js'; +import formatPhoneNumber from './transformers/format-phone-number.js'; const transformers = { performMathOperation, @@ -21,7 +21,7 @@ export default defineAction({ { label: 'Transform', key: 'transform', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, options: [ @@ -48,8 +48,7 @@ export default defineAction({ ], async run($) { - const transformerName = $.step.parameters - .transform as keyof typeof transformers; + const transformerName = $.step.parameters.transform; const output = transformers[transformerName]($); $.setActionItem({ diff --git a/packages/backend/src/apps/formatter/actions/numbers/transformers/format-number.ts b/packages/backend/src/apps/formatter/actions/numbers/transformers/format-number.js similarity index 75% rename from packages/backend/src/apps/formatter/actions/numbers/transformers/format-number.ts rename to packages/backend/src/apps/formatter/actions/numbers/transformers/format-number.js index 7d03904f..783ad012 100644 --- a/packages/backend/src/apps/formatter/actions/numbers/transformers/format-number.ts +++ b/packages/backend/src/apps/formatter/actions/numbers/transformers/format-number.js @@ -1,10 +1,9 @@ -import { IGlobalVariable } from '@automatisch/types'; import accounting from 'accounting'; -const formatNumber = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - const inputDecimalMark = $.step.parameters.inputDecimalMark as string; - const toFormat = $.step.parameters.toFormat as string; +const formatNumber = ($) => { + const input = $.step.parameters.input; + const inputDecimalMark = $.step.parameters.inputDecimalMark; + const toFormat = $.step.parameters.toFormat; const normalizedNumber = accounting.unformat(input, inputDecimalMark); const decimalPart = normalizedNumber.toString().split('.')[1]; diff --git a/packages/backend/src/apps/formatter/actions/numbers/transformers/format-phone-number.ts b/packages/backend/src/apps/formatter/actions/numbers/transformers/format-phone-number.js similarity index 50% rename from packages/backend/src/apps/formatter/actions/numbers/transformers/format-phone-number.ts rename to packages/backend/src/apps/formatter/actions/numbers/transformers/format-phone-number.js index a0a986b7..f9aca9a2 100644 --- a/packages/backend/src/apps/formatter/actions/numbers/transformers/format-phone-number.ts +++ b/packages/backend/src/apps/formatter/actions/numbers/transformers/format-phone-number.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; -import parsePhoneNumber, { CountryCode } from 'libphonenumber-js'; +import parsePhoneNumber from 'libphonenumber-js'; -const formatPhoneNumber = ($: IGlobalVariable) => { - const phoneNumber = $.step.parameters.phoneNumber as string; - const toFormat = $.step.parameters.toFormat as string; - const phoneNumberCountryCode = ($.step.parameters.phoneNumberCountryCode || - 'US') as CountryCode; +const formatPhoneNumber = ($) => { + const phoneNumber = $.step.parameters.phoneNumber; + const toFormat = $.step.parameters.toFormat; + const phoneNumberCountryCode = + $.step.parameters.phoneNumberCountryCode || 'US'; const parsedPhoneNumber = parsePhoneNumber( phoneNumber, diff --git a/packages/backend/src/apps/formatter/actions/numbers/transformers/perform-math-operation.ts b/packages/backend/src/apps/formatter/actions/numbers/transformers/perform-math-operation.js similarity index 60% rename from packages/backend/src/apps/formatter/actions/numbers/transformers/perform-math-operation.ts rename to packages/backend/src/apps/formatter/actions/numbers/transformers/perform-math-operation.js index b4126ce2..e6127b6c 100644 --- a/packages/backend/src/apps/formatter/actions/numbers/transformers/perform-math-operation.ts +++ b/packages/backend/src/apps/formatter/actions/numbers/transformers/perform-math-operation.js @@ -1,11 +1,11 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; -import { add, divide, multiply, subtract } from 'lodash'; +import add from 'lodash/add.js'; +import divide from 'lodash/divide.js'; +import multiply from 'lodash/multiply.js'; +import subtract from 'lodash/subtract.js'; -const mathOperation = ($: IGlobalVariable) => { - const mathOperation = $.step.parameters.mathOperation as string; - const values = ($.step.parameters.values as IJSONObject[]).map((value) => - Number(value.input) - ) as number[]; +const mathOperation = ($) => { + const mathOperation = $.step.parameters.mathOperation; + const values = $.step.parameters.values.map((value) => Number(value.input)); if (mathOperation === 'add') { return values.reduce((acc, curr) => add(acc, curr), 0); diff --git a/packages/backend/src/apps/formatter/actions/numbers/transformers/random-number.ts b/packages/backend/src/apps/formatter/actions/numbers/transformers/random-number.js similarity index 76% rename from packages/backend/src/apps/formatter/actions/numbers/transformers/random-number.ts rename to packages/backend/src/apps/formatter/actions/numbers/transformers/random-number.js index b82ac034..38848246 100644 --- a/packages/backend/src/apps/formatter/actions/numbers/transformers/random-number.ts +++ b/packages/backend/src/apps/formatter/actions/numbers/transformers/random-number.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const randomNumber = ($: IGlobalVariable) => { +const randomNumber = ($) => { const lowerRange = Number($.step.parameters.lowerRange); const upperRange = Number($.step.parameters.upperRange); const decimalPoints = Number($.step.parameters.decimalPoints) || 0; diff --git a/packages/backend/src/apps/formatter/actions/text/index.ts b/packages/backend/src/apps/formatter/actions/text/index.js similarity index 70% rename from packages/backend/src/apps/formatter/actions/text/index.ts rename to packages/backend/src/apps/formatter/actions/text/index.js index 06d8b533..7e63846e 100644 --- a/packages/backend/src/apps/formatter/actions/text/index.ts +++ b/packages/backend/src/apps/formatter/actions/text/index.js @@ -1,15 +1,15 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; -import capitalize from './transformers/capitalize'; -import extractEmailAddress from './transformers/extract-email-address'; -import extractNumber from './transformers/extract-number'; -import htmlToMarkdown from './transformers/html-to-markdown'; -import lowercase from './transformers/lowercase'; -import markdownToHtml from './transformers/markdown-to-html'; -import pluralize from './transformers/pluralize'; -import replace from './transformers/replace'; -import trimWhitespace from './transformers/trim-whitespace'; -import useDefaultValue from './transformers/use-default-value'; +import capitalize from './transformers/capitalize.js'; +import extractEmailAddress from './transformers/extract-email-address.js'; +import extractNumber from './transformers/extract-number.js'; +import htmlToMarkdown from './transformers/html-to-markdown.js'; +import lowercase from './transformers/lowercase.js'; +import markdownToHtml from './transformers/markdown-to-html.js'; +import pluralize from './transformers/pluralize.js'; +import replace from './transformers/replace.js'; +import trimWhitespace from './transformers/trim-whitespace.js'; +import useDefaultValue from './transformers/use-default-value.js'; const transformers = { capitalize, @@ -33,7 +33,7 @@ export default defineAction({ { label: 'Transform', key: 'transform', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, options: [ @@ -66,8 +66,7 @@ export default defineAction({ ], async run($) { - const transformerName = $.step.parameters - .transform as keyof typeof transformers; + const transformerName = $.step.parameters.transform; const output = transformers[transformerName]($); $.setActionItem({ diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/capitalize.js b/packages/backend/src/apps/formatter/actions/text/transformers/capitalize.js new file mode 100644 index 00000000..b886806d --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/capitalize.js @@ -0,0 +1,10 @@ +import lodashCapitalize from 'lodash/capitalize.js'; + +const capitalize = ($) => { + const input = $.step.parameters.input; + const capitalizedInput = input.replace(/\w+/g, lodashCapitalize); + + return capitalizedInput; +}; + +export default capitalize; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/capitalize.ts b/packages/backend/src/apps/formatter/actions/text/transformers/capitalize.ts deleted file mode 100644 index e73db203..00000000 --- a/packages/backend/src/apps/formatter/actions/text/transformers/capitalize.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import { capitalize as lodashCapitalize } from 'lodash'; - -const capitalize = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - const capitalizedInput = input.replace(/\w+/g, lodashCapitalize); - - return capitalizedInput; -}; - -export default capitalize; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/extract-email-address.ts b/packages/backend/src/apps/formatter/actions/text/transformers/extract-email-address.js similarity index 63% rename from packages/backend/src/apps/formatter/actions/text/transformers/extract-email-address.ts rename to packages/backend/src/apps/formatter/actions/text/transformers/extract-email-address.js index 14f7fb4f..127c554d 100644 --- a/packages/backend/src/apps/formatter/actions/text/transformers/extract-email-address.ts +++ b/packages/backend/src/apps/formatter/actions/text/transformers/extract-email-address.js @@ -1,7 +1,5 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const extractEmailAddress = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; +const extractEmailAddress = ($) => { + const input = $.step.parameters.input; const emailRegexp = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/extract-number.ts b/packages/backend/src/apps/formatter/actions/text/transformers/extract-number.js similarity index 71% rename from packages/backend/src/apps/formatter/actions/text/transformers/extract-number.ts rename to packages/backend/src/apps/formatter/actions/text/transformers/extract-number.js index ef845169..70abd58f 100644 --- a/packages/backend/src/apps/formatter/actions/text/transformers/extract-number.ts +++ b/packages/backend/src/apps/formatter/actions/text/transformers/extract-number.js @@ -1,7 +1,5 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const extractNumber = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; +const extractNumber = ($) => { + const input = $.step.parameters.input; // Example numbers that's supported: // 123 diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/html-to-markdown.ts b/packages/backend/src/apps/formatter/actions/text/transformers/html-to-markdown.js similarity index 51% rename from packages/backend/src/apps/formatter/actions/text/transformers/html-to-markdown.ts rename to packages/backend/src/apps/formatter/actions/text/transformers/html-to-markdown.js index 89d3a817..adda99f4 100644 --- a/packages/backend/src/apps/formatter/actions/text/transformers/html-to-markdown.ts +++ b/packages/backend/src/apps/formatter/actions/text/transformers/html-to-markdown.js @@ -1,8 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; import { NodeHtmlMarkdown } from 'node-html-markdown'; -const htmlToMarkdown = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; +const htmlToMarkdown = ($) => { + const input = $.step.parameters.input; const markdown = NodeHtmlMarkdown.translate(input); return markdown; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/lowercase.js b/packages/backend/src/apps/formatter/actions/text/transformers/lowercase.js new file mode 100644 index 00000000..7d712a59 --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/lowercase.js @@ -0,0 +1,6 @@ +const lowercase = ($) => { + const input = $.step.parameters.input; + return input.toLowerCase(); +}; + +export default lowercase; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/lowercase.ts b/packages/backend/src/apps/formatter/actions/text/transformers/lowercase.ts deleted file mode 100644 index e01c1020..00000000 --- a/packages/backend/src/apps/formatter/actions/text/transformers/lowercase.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const lowercase = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - return input.toLowerCase(); -}; - -export default lowercase; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/markdown-to-html.ts b/packages/backend/src/apps/formatter/actions/text/transformers/markdown-to-html.js similarity index 52% rename from packages/backend/src/apps/formatter/actions/text/transformers/markdown-to-html.ts rename to packages/backend/src/apps/formatter/actions/text/transformers/markdown-to-html.js index 42e254aa..47bdaf36 100644 --- a/packages/backend/src/apps/formatter/actions/text/transformers/markdown-to-html.ts +++ b/packages/backend/src/apps/formatter/actions/text/transformers/markdown-to-html.js @@ -1,10 +1,9 @@ -import { IGlobalVariable } from '@automatisch/types'; import showdown from 'showdown'; const converter = new showdown.Converter(); -const markdownToHtml = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; +const markdownToHtml = ($) => { + const input = $.step.parameters.input; const html = converter.makeHtml(input); return html; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.js b/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.js new file mode 100644 index 00000000..8ba219e0 --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.js @@ -0,0 +1,8 @@ +import pluralizeLibrary from 'pluralize'; + +const pluralize = ($) => { + const input = $.step.parameters.input; + return pluralizeLibrary(input); +}; + +export default pluralize; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.ts b/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.ts deleted file mode 100644 index f5b3dc9a..00000000 --- a/packages/backend/src/apps/formatter/actions/text/transformers/pluralize.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import pluralizeLibrary from 'pluralize'; - -const pluralize = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - return pluralizeLibrary(input); -}; - -export default pluralize; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/replace.js b/packages/backend/src/apps/formatter/actions/text/transformers/replace.js new file mode 100644 index 00000000..4aa08b7f --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/replace.js @@ -0,0 +1,10 @@ +const replace = ($) => { + const input = $.step.parameters.input; + + const find = $.step.parameters.find; + const replace = $.step.parameters.replace; + + return input.replaceAll(find, replace); +}; + +export default replace; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/replace.ts b/packages/backend/src/apps/formatter/actions/text/transformers/replace.ts deleted file mode 100644 index 2aefeb03..00000000 --- a/packages/backend/src/apps/formatter/actions/text/transformers/replace.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const replace = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - - const find = $.step.parameters.find as string; - const replace = $.step.parameters.replace as string; - - return input.replaceAll(find, replace); -}; - -export default replace; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/trim-whitespace.js b/packages/backend/src/apps/formatter/actions/text/transformers/trim-whitespace.js new file mode 100644 index 00000000..1ee81023 --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/trim-whitespace.js @@ -0,0 +1,6 @@ +const trimWhitespace = ($) => { + const input = $.step.parameters.input; + return input.trim(); +}; + +export default trimWhitespace; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/trim-whitespace.ts b/packages/backend/src/apps/formatter/actions/text/transformers/trim-whitespace.ts deleted file mode 100644 index 71b69835..00000000 --- a/packages/backend/src/apps/formatter/actions/text/transformers/trim-whitespace.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const trimWhitespace = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - return input.trim(); -}; - -export default trimWhitespace; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/use-default-value.js b/packages/backend/src/apps/formatter/actions/text/transformers/use-default-value.js new file mode 100644 index 00000000..54bc61ab --- /dev/null +++ b/packages/backend/src/apps/formatter/actions/text/transformers/use-default-value.js @@ -0,0 +1,11 @@ +const useDefaultValue = ($) => { + const input = $.step.parameters.input; + + if (input && input.trim().length > 0) { + return input; + } + + return $.step.parameters.defaultValue; +}; + +export default useDefaultValue; diff --git a/packages/backend/src/apps/formatter/actions/text/transformers/use-default-value.ts b/packages/backend/src/apps/formatter/actions/text/transformers/use-default-value.ts deleted file mode 100644 index 37276152..00000000 --- a/packages/backend/src/apps/formatter/actions/text/transformers/use-default-value.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const useDefaultValue = ($: IGlobalVariable) => { - const input = $.step.parameters.input as string; - - if (input && input.trim().length > 0) { - return input; - } - - return $.step.parameters.defaultValue as string; -}; - -export default useDefaultValue; diff --git a/packages/backend/src/apps/formatter/common/phone-number-country-codes.ts b/packages/backend/src/apps/formatter/common/phone-number-country-codes.js similarity index 100% rename from packages/backend/src/apps/formatter/common/phone-number-country-codes.ts rename to packages/backend/src/apps/formatter/common/phone-number-country-codes.js diff --git a/packages/backend/src/apps/formatter/dynamic-fields/index.js b/packages/backend/src/apps/formatter/dynamic-fields/index.js new file mode 100644 index 00000000..41ca2e37 --- /dev/null +++ b/packages/backend/src/apps/formatter/dynamic-fields/index.js @@ -0,0 +1,3 @@ +import listTransformOptions from './list-transform-options/index.js'; + +export default [listTransformOptions]; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/index.ts b/packages/backend/src/apps/formatter/dynamic-fields/index.ts deleted file mode 100644 index 83a189e9..00000000 --- a/packages/backend/src/apps/formatter/dynamic-fields/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listTransformOptions from './list-transform-options'; - -export default [listTransformOptions]; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/format-date-time.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/format-date-time.js similarity index 78% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/format-date-time.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/format-date-time.js index 1475ee47..7dc47c07 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/format-date-time.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/format-date-time.js @@ -1,11 +1,11 @@ -import formatOptions from './options/format'; -import timezoneOptions from './options/timezone'; +import formatOptions from './options/format.js'; +import timezoneOptions from './options/timezone.js'; const formatDateTime = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'The datetime you want to format.', variables: true, @@ -13,7 +13,7 @@ const formatDateTime = [ { label: 'From Format', key: 'fromFormat', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The format of the input.', variables: true, @@ -22,7 +22,7 @@ const formatDateTime = [ { label: 'From Timezone', key: 'fromTimezone', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The timezone of the input.', variables: true, @@ -31,7 +31,7 @@ const formatDateTime = [ { label: 'To Format', key: 'toFormat', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The format of the output.', variables: true, @@ -40,7 +40,7 @@ const formatDateTime = [ { label: 'To Timezone', key: 'toTimezone', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The timezone of the output.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/format.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/format.js similarity index 100% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/format.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/format.js diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/timezone.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/timezone.js similarity index 100% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/timezone.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/date-time/options/timezone.js diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.js b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.js new file mode 100644 index 00000000..64ed7d56 --- /dev/null +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.js @@ -0,0 +1,42 @@ +import capitalize from './text/capitalize.js'; +import extractEmailAddress from './text/extract-email-address.js'; +import extractNumber from './text/extract-number.js'; +import htmlToMarkdown from './text/html-to-markdown.js'; +import lowercase from './text/lowercase.js'; +import markdownToHtml from './text/markdown-to-html.js'; +import pluralize from './text/pluralize.js'; +import replace from './text/replace.js'; +import trimWhitespace from './text/trim-whitespace.js'; +import useDefaultValue from './text/use-default-value.js'; +import performMathOperation from './numbers/perform-math-operation.js'; +import randomNumber from './numbers/random-number.js'; +import formatNumber from './numbers/format-number.js'; +import formatPhoneNumber from './numbers/format-phone-number.js'; +import formatDateTime from './date-time/format-date-time.js'; + +const options = { + capitalize, + extractEmailAddress, + extractNumber, + htmlToMarkdown, + lowercase, + markdownToHtml, + pluralize, + replace, + trimWhitespace, + useDefaultValue, + performMathOperation, + randomNumber, + formatNumber, + formatPhoneNumber, + formatDateTime, +}; + +export default { + name: 'List fields after transform', + key: 'listTransformOptions', + + async run($) { + return options[$.step.parameters.transform]; + }, +}; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts deleted file mode 100644 index 3d143f33..00000000 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/index.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; -import capitalize from './text/capitalize'; -import extractEmailAddress from './text/extract-email-address'; -import extractNumber from './text/extract-number'; -import htmlToMarkdown from './text/html-to-markdown'; -import lowercase from './text/lowercase'; -import markdownToHtml from './text/markdown-to-html'; -import pluralize from './text/pluralize'; -import replace from './text/replace'; -import trimWhitespace from './text/trim-whitespace'; -import useDefaultValue from './text/use-default-value'; -import performMathOperation from './numbers/perform-math-operation'; -import randomNumber from './numbers/random-number'; -import formatNumber from './numbers/format-number'; -import formatPhoneNumber from './numbers/format-phone-number'; -import formatDateTime from './date-time/format-date-time'; - -const options: IJSONObject = { - capitalize, - extractEmailAddress, - extractNumber, - htmlToMarkdown, - lowercase, - markdownToHtml, - pluralize, - replace, - trimWhitespace, - useDefaultValue, - performMathOperation, - randomNumber, - formatNumber, - formatPhoneNumber, - formatDateTime, -}; - -export default { - name: 'List fields after transform', - key: 'listTransformOptions', - - async run($: IGlobalVariable) { - return options[$.step.parameters.transform as string]; - }, -}; diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-number.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-number.js similarity index 91% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-number.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-number.js index 96f1033b..9fca34fd 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-number.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-number.js @@ -2,7 +2,7 @@ const formatNumber = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'The number you want to format.', variables: true, @@ -10,7 +10,7 @@ const formatNumber = [ { label: 'Input Decimal Mark', key: 'inputDecimalMark', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The decimal mark of the input number.', variables: true, @@ -22,7 +22,7 @@ const formatNumber = [ { label: 'To Format', key: 'toFormat', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The format you want to convert the number to.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-phone-number.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-phone-number.js similarity index 89% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-phone-number.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-phone-number.js index fa48d1b1..c96b126e 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-phone-number.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/format-phone-number.js @@ -1,10 +1,10 @@ -import phoneNumberCountryCodes from '../../../common/phone-number-country-codes'; +import phoneNumberCountryCodes from '../../../common/phone-number-country-codes.js'; const formatPhoneNumber = [ { label: 'Phone Number', key: 'phoneNumber', - type: 'string' as const, + type: 'string', required: true, description: 'The phone number you want to format.', variables: true, @@ -12,7 +12,7 @@ const formatPhoneNumber = [ { label: 'To Format', key: 'toFormat', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The format you want to convert the number to.', variables: true, @@ -25,7 +25,7 @@ const formatPhoneNumber = [ { label: 'Phone Number Country Code', key: 'phoneNumberCountryCode', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The country code of the phone number. The default is US.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/perform-math-operation.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/perform-math-operation.js similarity index 89% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/perform-math-operation.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/perform-math-operation.js index 1d377640..85378bb3 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/perform-math-operation.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/perform-math-operation.js @@ -2,7 +2,7 @@ const performMathOperation = [ { label: 'Math Operation', key: 'mathOperation', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The math operation to perform.', variables: true, @@ -17,14 +17,14 @@ const performMathOperation = [ { label: 'Values', key: 'values', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: 'Add or remove numbers as needed.', fields: [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'The number to perform the math operation on.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/random-number.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/random-number.js similarity index 86% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/random-number.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/random-number.js index 4a6cb2ac..ba3d7142 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/random-number.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/numbers/random-number.js @@ -2,7 +2,7 @@ const randomNumber = [ { label: 'Lower range', key: 'lowerRange', - type: 'string' as const, + type: 'string', required: true, description: 'The lowest number to generate.', variables: true, @@ -10,7 +10,7 @@ const randomNumber = [ { label: 'Upper range', key: 'upperRange', - type: 'string' as const, + type: 'string', required: true, description: 'The highest number to generate.', variables: true, @@ -18,7 +18,7 @@ const randomNumber = [ { label: 'Decimal points', key: 'decimalPoints', - type: 'string' as const, + type: 'string', required: false, description: 'The number of digits after the decimal point. It can be an integer between 0 and 15.', diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/capitalize.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/capitalize.js similarity index 86% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/capitalize.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/capitalize.js index c8b72c08..523d8b09 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/capitalize.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/capitalize.js @@ -2,7 +2,7 @@ const capitalize = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text that will be capitalized.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-email-address.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-email-address.js similarity index 88% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-email-address.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-email-address.js index 439caa85..9f0f5d82 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-email-address.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-email-address.js @@ -2,7 +2,7 @@ const extractEmailAddress = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text that will be searched for an email address.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-number.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-number.js similarity index 87% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-number.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-number.js index cfb62957..2fe0ba63 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-number.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/extract-number.js @@ -2,7 +2,7 @@ const extractNumber = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text that will be searched for a number.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/html-to-markdown.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/html-to-markdown.js similarity index 87% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/html-to-markdown.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/html-to-markdown.js index a9ab3325..77b0ba9e 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/html-to-markdown.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/html-to-markdown.js @@ -2,7 +2,7 @@ const htmlToMarkdown = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'HTML that will be converted to Markdown.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/lowercase.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/lowercase.js similarity index 86% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/lowercase.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/lowercase.js index a3158bf4..d37eb2ec 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/lowercase.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/lowercase.js @@ -2,7 +2,7 @@ const lowercase = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text that will be lowercased.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/markdown-to-html.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/markdown-to-html.js similarity index 88% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/markdown-to-html.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/markdown-to-html.js index 39c013bf..ad17ed73 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/markdown-to-html.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/markdown-to-html.js @@ -2,7 +2,7 @@ const markdownToHtml = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Markdown text that will be converted to HTML.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/pluralize.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/pluralize.js similarity index 86% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/pluralize.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/pluralize.js index d5949462..36e5df3a 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/pluralize.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/pluralize.js @@ -2,7 +2,7 @@ const pluralize = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text that will be pluralized.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.js similarity index 85% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.js index d9452500..dfeb39ae 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/replace.js @@ -2,7 +2,7 @@ const replace = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text that you want to search for and replace values.', variables: true, @@ -10,7 +10,7 @@ const replace = [ { label: 'Find', key: 'find', - type: 'string' as const, + type: 'string', required: true, description: 'Text that will be searched for.', variables: true, @@ -18,7 +18,7 @@ const replace = [ { label: 'Replace', key: 'replace', - type: 'string' as const, + type: 'string', required: false, description: 'Text that will replace the found text.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/trim-whitespace.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/trim-whitespace.js similarity index 88% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/trim-whitespace.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/trim-whitespace.js index 3967320b..538cb26a 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/trim-whitespace.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/trim-whitespace.js @@ -2,7 +2,7 @@ const trimWhitespace = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text you want to remove leading and trailing spaces.', variables: true, diff --git a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/use-default-value.ts b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/use-default-value.js similarity index 87% rename from packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/use-default-value.ts rename to packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/use-default-value.js index 2c1f850b..e2edc1f0 100644 --- a/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/use-default-value.ts +++ b/packages/backend/src/apps/formatter/dynamic-fields/list-transform-options/text/use-default-value.js @@ -2,7 +2,7 @@ const useDefaultValue = [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Text you want to check whether it is empty or not.', variables: true, @@ -10,7 +10,7 @@ const useDefaultValue = [ { label: 'Default Value', key: 'defaultValue', - type: 'string' as const, + type: 'string', required: true, description: 'Text that will be used as a default value if the input is empty.', diff --git a/packages/backend/src/apps/formatter/index.d.ts b/packages/backend/src/apps/formatter/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/formatter/index.ts b/packages/backend/src/apps/formatter/index.js similarity index 68% rename from packages/backend/src/apps/formatter/index.ts rename to packages/backend/src/apps/formatter/index.js index 300b471d..f257dd48 100644 --- a/packages/backend/src/apps/formatter/index.ts +++ b/packages/backend/src/apps/formatter/index.js @@ -1,6 +1,6 @@ -import defineApp from '../../helpers/define-app'; -import actions from './actions'; -import dynamicFields from './dynamic-fields'; +import defineApp from '../../helpers/define-app.js'; +import actions from './actions/index.js'; +import dynamicFields from './dynamic-fields/index.js'; export default defineApp({ name: 'Formatter', diff --git a/packages/backend/src/apps/ghost/auth/index.ts b/packages/backend/src/apps/ghost/auth/index.js similarity index 74% rename from packages/backend/src/apps/ghost/auth/index.ts rename to packages/backend/src/apps/ghost/auth/index.js index bdb9f338..c9399c0e 100644 --- a/packages/backend/src/apps/ghost/auth/index.ts +++ b/packages/backend/src/apps/ghost/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'instanceUrl', label: 'Instance URL', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -17,7 +17,7 @@ export default { { key: 'apiKey', label: 'Admin API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/ghost/auth/is-still-verified.js b/packages/backend/src/apps/ghost/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/ghost/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/ghost/auth/is-still-verified.ts b/packages/backend/src/apps/ghost/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/ghost/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/ghost/auth/verify-credentials.ts b/packages/backend/src/apps/ghost/auth/verify-credentials.js similarity index 70% rename from packages/backend/src/apps/ghost/auth/verify-credentials.ts rename to packages/backend/src/apps/ghost/auth/verify-credentials.js index a8795d0b..13e46b43 100644 --- a/packages/backend/src/apps/ghost/auth/verify-credentials.ts +++ b/packages/backend/src/apps/ghost/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const site = await $.http.get('/admin/site/'); const screenName = [site.data.site.title, site.data.site.url] .filter(Boolean) diff --git a/packages/backend/src/apps/ghost/common/add-auth-header.ts b/packages/backend/src/apps/ghost/common/add-auth-header.js similarity index 70% rename from packages/backend/src/apps/ghost/common/add-auth-header.ts rename to packages/backend/src/apps/ghost/common/add-auth-header.js index 2a449e13..60b65a2b 100644 --- a/packages/backend/src/apps/ghost/common/add-auth-header.ts +++ b/packages/backend/src/apps/ghost/common/add-auth-header.js @@ -1,8 +1,7 @@ -import { TBeforeRequest } from '@automatisch/types'; import jwt from 'jsonwebtoken'; -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - const key = $.auth.data?.apiKey as string; +const addAuthHeader = ($, requestConfig) => { + const key = $.auth.data?.apiKey; if (key) { const [id, secret] = key.split(':'); diff --git a/packages/backend/src/apps/ghost/common/set-base-url.js b/packages/backend/src/apps/ghost/common/set-base-url.js new file mode 100644 index 00000000..a8f668db --- /dev/null +++ b/packages/backend/src/apps/ghost/common/set-base-url.js @@ -0,0 +1,10 @@ +const setBaseUrl = ($, requestConfig) => { + const instanceUrl = $.auth.data.instanceUrl; + if (instanceUrl) { + requestConfig.baseURL = `${instanceUrl}/ghost/api`; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/ghost/common/set-base-url.ts b/packages/backend/src/apps/ghost/common/set-base-url.ts deleted file mode 100644 index 1a769742..00000000 --- a/packages/backend/src/apps/ghost/common/set-base-url.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - const instanceUrl = $.auth.data.instanceUrl as string; - if (instanceUrl) { - requestConfig.baseURL = `${instanceUrl}/ghost/api`; - } - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/ghost/index.d.ts b/packages/backend/src/apps/ghost/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/ghost/index.ts b/packages/backend/src/apps/ghost/index.js similarity index 59% rename from packages/backend/src/apps/ghost/index.ts rename to packages/backend/src/apps/ghost/index.js index 12a1a07b..76b99c57 100644 --- a/packages/backend/src/apps/ghost/index.ts +++ b/packages/backend/src/apps/ghost/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import setBaseUrl from './common/set-base-url'; -import auth from './auth'; -import triggers from './triggers'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import setBaseUrl from './common/set-base-url.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Ghost', diff --git a/packages/backend/src/apps/ghost/triggers/index.js b/packages/backend/src/apps/ghost/triggers/index.js new file mode 100644 index 00000000..5505ef00 --- /dev/null +++ b/packages/backend/src/apps/ghost/triggers/index.js @@ -0,0 +1,3 @@ +import newPostPublished from './new-post-published/index.js'; + +export default [newPostPublished]; diff --git a/packages/backend/src/apps/ghost/triggers/index.ts b/packages/backend/src/apps/ghost/triggers/index.ts deleted file mode 100644 index 776ed504..00000000 --- a/packages/backend/src/apps/ghost/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import newPostPublished from './new-post-published'; - -export default [newPostPublished]; diff --git a/packages/backend/src/apps/ghost/triggers/new-post-published/index.ts b/packages/backend/src/apps/ghost/triggers/new-post-published/index.js similarity index 91% rename from packages/backend/src/apps/ghost/triggers/new-post-published/index.ts rename to packages/backend/src/apps/ghost/triggers/new-post-published/index.js index cba788b2..12ad9d95 100644 --- a/packages/backend/src/apps/ghost/triggers/new-post-published/index.ts +++ b/packages/backend/src/apps/ghost/triggers/new-post-published/index.js @@ -1,6 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New post published', diff --git a/packages/backend/src/apps/github/actions/create-issue/index.ts b/packages/backend/src/apps/github/actions/create-issue/index.js similarity index 76% rename from packages/backend/src/apps/github/actions/create-issue/index.ts rename to packages/backend/src/apps/github/actions/create-issue/index.js index af4fe9eb..f6d97048 100644 --- a/packages/backend/src/apps/github/actions/create-issue/index.ts +++ b/packages/backend/src/apps/github/actions/create-issue/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo'; +import defineAction from '../../../../helpers/define-action.js'; +import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo.js'; export default defineAction({ name: 'Create issue', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Repo', key: 'repo', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, source: { @@ -26,23 +26,23 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Body', key: 'body', - type: 'string' as const, + type: 'string', required: true, variables: true, }, ], async run($) { - const repoParameter = $.step.parameters.repo as string; - const title = $.step.parameters.title as string; - const body = $.step.parameters.body as string; + const repoParameter = $.step.parameters.repo; + const title = $.step.parameters.title; + const body = $.step.parameters.body; if (!repoParameter) throw new Error('A repo must be set!'); if (!title) throw new Error('A title must be set!'); diff --git a/packages/backend/src/apps/github/actions/index.js b/packages/backend/src/apps/github/actions/index.js new file mode 100644 index 00000000..095990d0 --- /dev/null +++ b/packages/backend/src/apps/github/actions/index.js @@ -0,0 +1,3 @@ +import createIssue from './create-issue/index.js'; + +export default [createIssue]; diff --git a/packages/backend/src/apps/github/actions/index.ts b/packages/backend/src/apps/github/actions/index.ts deleted file mode 100644 index 06c945f8..00000000 --- a/packages/backend/src/apps/github/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import createIssue from './create-issue'; - -export default [createIssue]; diff --git a/packages/backend/src/apps/github/auth/generate-auth-url.js b/packages/backend/src/apps/github/auth/generate-auth-url.js new file mode 100644 index 00000000..3b845369 --- /dev/null +++ b/packages/backend/src/apps/github/auth/generate-auth-url.js @@ -0,0 +1,22 @@ +import { URLSearchParams } from 'url'; + +export default async function generateAuthUrl($) { + const scopes = ['read:org', 'repo', 'user']; + const oauthRedirectUrlField = $.app.auth.fields.find( + (field) => field.key == 'oAuthRedirectUrl' + ); + const redirectUri = oauthRedirectUrlField.value; + const searchParams = new URLSearchParams({ + client_id: $.auth.data.consumerKey, + redirect_uri: redirectUri, + scope: scopes.join(','), + }); + + const url = `${ + $.app.baseUrl + }/login/oauth/authorize?${searchParams.toString()}`; + + await $.auth.set({ + url, + }); +} diff --git a/packages/backend/src/apps/github/auth/generate-auth-url.ts b/packages/backend/src/apps/github/auth/generate-auth-url.ts deleted file mode 100644 index 0c7ea8ac..00000000 --- a/packages/backend/src/apps/github/auth/generate-auth-url.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import { URLSearchParams } from 'url'; - -export default async function generateAuthUrl($: IGlobalVariable) { - const scopes = ['read:org', 'repo', 'user']; - const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' - ); - const redirectUri = oauthRedirectUrlField.value as string; - const searchParams = new URLSearchParams({ - client_id: $.auth.data.consumerKey as string, - redirect_uri: redirectUri, - scope: scopes.join(','), - }); - - const url = `${$.app.baseUrl - }/login/oauth/authorize?${searchParams.toString()}`; - - await $.auth.set({ - url, - }); -} diff --git a/packages/backend/src/apps/github/auth/index.ts b/packages/backend/src/apps/github/auth/index.js similarity index 81% rename from packages/backend/src/apps/github/auth/index.ts rename to packages/backend/src/apps/github/auth/index.js index 72389a80..59731eb2 100644 --- a/packages/backend/src/apps/github/auth/index.ts +++ b/packages/backend/src/apps/github/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/github/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'consumerKey', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -32,7 +32,7 @@ export default { { key: 'consumerSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/github/auth/is-still-verified.js b/packages/backend/src/apps/github/auth/is-still-verified.js new file mode 100644 index 00000000..1b9d46d0 --- /dev/null +++ b/packages/backend/src/apps/github/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user.id; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/github/auth/is-still-verified.ts b/packages/backend/src/apps/github/auth/is-still-verified.ts deleted file mode 100644 index befb7694..00000000 --- a/packages/backend/src/apps/github/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user.id; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/github/auth/verify-credentials.ts b/packages/backend/src/apps/github/auth/verify-credentials.js similarity index 81% rename from packages/backend/src/apps/github/auth/verify-credentials.ts rename to packages/backend/src/apps/github/auth/verify-credentials.js index d6407ed0..b07549b6 100644 --- a/packages/backend/src/apps/github/auth/verify-credentials.ts +++ b/packages/backend/src/apps/github/auth/verify-credentials.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const response = await $.http.post( `${$.app.baseUrl}/login/oauth/access_token`, { diff --git a/packages/backend/src/apps/github/common/add-auth-header.ts b/packages/backend/src/apps/github/common/add-auth-header.js similarity index 63% rename from packages/backend/src/apps/github/common/add-auth-header.ts rename to packages/backend/src/apps/github/common/add-auth-header.js index f4f2076f..9d56bd19 100644 --- a/packages/backend/src/apps/github/common/add-auth-header.ts +++ b/packages/backend/src/apps/github/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if (requestConfig.headers && $.auth.data?.accessToken) { requestConfig.headers.Authorization = `Bearer ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/github/common/get-current-user.js b/packages/backend/src/apps/github/common/get-current-user.js new file mode 100644 index 00000000..f09b3983 --- /dev/null +++ b/packages/backend/src/apps/github/common/get-current-user.js @@ -0,0 +1,8 @@ +const getCurrentUser = async ($) => { + const response = await $.http.get('/user'); + + const currentUser = response.data; + return currentUser; +}; + +export default getCurrentUser; diff --git a/packages/backend/src/apps/github/common/get-current-user.ts b/packages/backend/src/apps/github/common/get-current-user.ts deleted file mode 100644 index 53f931e5..00000000 --- a/packages/backend/src/apps/github/common/get-current-user.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { - const response = await $.http.get('/user'); - - const currentUser = response.data; - return currentUser; -}; - -export default getCurrentUser; diff --git a/packages/backend/src/apps/github/common/get-repo-owner-and-repo.js b/packages/backend/src/apps/github/common/get-repo-owner-and-repo.js new file mode 100644 index 00000000..ee00b244 --- /dev/null +++ b/packages/backend/src/apps/github/common/get-repo-owner-and-repo.js @@ -0,0 +1,10 @@ +export default function getRepoOwnerAndRepo(repoFullName) { + if (!repoFullName) return {}; + + const [repoOwner, repo] = repoFullName.split('/'); + + return { + repoOwner, + repo, + }; +} diff --git a/packages/backend/src/apps/github/common/get-repo-owner-and-repo.ts b/packages/backend/src/apps/github/common/get-repo-owner-and-repo.ts deleted file mode 100644 index 4f6f9184..00000000 --- a/packages/backend/src/apps/github/common/get-repo-owner-and-repo.ts +++ /dev/null @@ -1,17 +0,0 @@ -type TRepoOwnerAndRepo = { - repoOwner?: string; - repo?: string; -}; - -export default function getRepoOwnerAndRepo( - repoFullName: string -): TRepoOwnerAndRepo { - if (!repoFullName) return {}; - - const [repoOwner, repo] = repoFullName.split('/'); - - return { - repoOwner, - repo, - }; -} diff --git a/packages/backend/src/apps/gitlab/common/paginate-all.ts b/packages/backend/src/apps/github/common/paginate-all.js similarity index 51% rename from packages/backend/src/apps/gitlab/common/paginate-all.ts rename to packages/backend/src/apps/github/common/paginate-all.js index 664489ab..e609b2d3 100644 --- a/packages/backend/src/apps/gitlab/common/paginate-all.ts +++ b/packages/backend/src/apps/github/common/paginate-all.js @@ -1,19 +1,8 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; -import type { AxiosResponse } from 'axios'; -import parseLinkHeader from '../../../helpers/parse-header-link'; +import parseLinkHeader from '../../../helpers/parse-header-link.js'; -type TResponse = { - data: IJSONObject[]; - error?: IJSONObject; -}; - -export default async function paginateAll( - $: IGlobalVariable, - request: Promise -) { +export default async function paginateAll($, request) { const response = await request; - - const aggregatedResponse: TResponse = { + const aggregatedResponse = { data: [...response.data], }; diff --git a/packages/backend/src/apps/github/dynamic-data/index.js b/packages/backend/src/apps/github/dynamic-data/index.js new file mode 100644 index 00000000..04afcbdd --- /dev/null +++ b/packages/backend/src/apps/github/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listLabels from './list-labels/index.js'; +import listRepos from './list-repos/index.js'; + +export default [listLabels, listRepos]; diff --git a/packages/backend/src/apps/github/dynamic-data/index.ts b/packages/backend/src/apps/github/dynamic-data/index.ts deleted file mode 100644 index 290705da..00000000 --- a/packages/backend/src/apps/github/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listLabels from './list-labels'; -import listRepos from './list-repos'; - -export default [listLabels, listRepos]; diff --git a/packages/backend/src/apps/github/dynamic-data/list-labels/index.ts b/packages/backend/src/apps/github/dynamic-data/list-labels/index.js similarity index 57% rename from packages/backend/src/apps/github/dynamic-data/list-labels/index.ts rename to packages/backend/src/apps/github/dynamic-data/list-labels/index.js index 2e0aacc4..d9ab38bd 100644 --- a/packages/backend/src/apps/github/dynamic-data/list-labels/index.ts +++ b/packages/backend/src/apps/github/dynamic-data/list-labels/index.js @@ -1,22 +1,19 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo'; -import paginateAll from '../../common/paginate-all'; +import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo.js'; +import paginateAll from '../../common/paginate-all.js'; export default { name: 'List labels', key: 'listLabels', - async run($: IGlobalVariable) { - const { repoOwner, repo } = getRepoOwnerAndRepo( - $.step.parameters.repo as string - ); + async run($) { + const { repoOwner, repo } = getRepoOwnerAndRepo($.step.parameters.repo); if (!repo) return { data: [] }; const firstPageRequest = $.http.get(`/repos/${repoOwner}/${repo}/labels`); const response = await paginateAll($, firstPageRequest); - response.data = response.data.map((repo: { name: string }) => { + response.data = response.data.map((repo) => { return { value: repo.name, name: repo.name, diff --git a/packages/backend/src/apps/github/dynamic-data/list-repos/index.ts b/packages/backend/src/apps/github/dynamic-data/list-repos/index.js similarity index 58% rename from packages/backend/src/apps/github/dynamic-data/list-repos/index.ts rename to packages/backend/src/apps/github/dynamic-data/list-repos/index.js index 5330f22d..06c5d477 100644 --- a/packages/backend/src/apps/github/dynamic-data/list-repos/index.ts +++ b/packages/backend/src/apps/github/dynamic-data/list-repos/index.js @@ -1,15 +1,14 @@ -import { IGlobalVariable } from '@automatisch/types'; -import paginateAll from '../../common/paginate-all'; +import paginateAll from '../../common/paginate-all.js'; export default { name: 'List repos', key: 'listRepos', - async run($: IGlobalVariable) { + async run($) { const firstPageRequest = $.http.get('/user/repos'); const response = await paginateAll($, firstPageRequest); - response.data = response.data.map((repo: { full_name: string }) => { + response.data = response.data.map((repo) => { return { value: repo.full_name, name: repo.full_name, diff --git a/packages/backend/src/apps/github/index.d.ts b/packages/backend/src/apps/github/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/github/index.ts b/packages/backend/src/apps/github/index.js similarity index 58% rename from packages/backend/src/apps/github/index.ts rename to packages/backend/src/apps/github/index.js index 2186004e..881b4f15 100644 --- a/packages/backend/src/apps/github/index.ts +++ b/packages/backend/src/apps/github/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'GitHub', diff --git a/packages/backend/src/apps/github/triggers/index.js b/packages/backend/src/apps/github/triggers/index.js new file mode 100644 index 00000000..62b86bf1 --- /dev/null +++ b/packages/backend/src/apps/github/triggers/index.js @@ -0,0 +1,6 @@ +import newIssues from './new-issues/index.js'; +import newPullRequests from './new-pull-requests/index.js'; +import newStargazers from './new-stargazers/index.js'; +import newWatchers from './new-watchers/index.js'; + +export default [newIssues, newPullRequests, newStargazers, newWatchers]; diff --git a/packages/backend/src/apps/github/triggers/index.ts b/packages/backend/src/apps/github/triggers/index.ts deleted file mode 100644 index d04d72c8..00000000 --- a/packages/backend/src/apps/github/triggers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import newIssues from './new-issues'; -import newPullRequests from './new-pull-requests'; -import newStargazers from './new-stargazers'; -import newWatchers from './new-watchers'; - -export default [newIssues, newPullRequests, newStargazers, newWatchers]; diff --git a/packages/backend/src/apps/github/triggers/new-issues/index.ts b/packages/backend/src/apps/github/triggers/new-issues/index.js similarity index 89% rename from packages/backend/src/apps/github/triggers/new-issues/index.ts rename to packages/backend/src/apps/github/triggers/new-issues/index.js index ce1356e2..699f8894 100644 --- a/packages/backend/src/apps/github/triggers/new-issues/index.ts +++ b/packages/backend/src/apps/github/triggers/new-issues/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newIssues from './new-issues'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newIssues from './new-issues.js'; export default defineTrigger({ name: 'New issues', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Repo', key: 'repo', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: false, source: { @@ -27,7 +27,7 @@ export default defineTrigger({ { label: 'Which types of issues should this trigger on?', key: 'issueType', - type: 'dropdown' as const, + type: 'dropdown', description: 'Defaults to any issue you can see.', required: true, variables: false, @@ -58,7 +58,7 @@ export default defineTrigger({ { label: 'Label', key: 'label', - type: 'dropdown' as const, + type: 'dropdown', description: 'Only trigger on issues when this label is added.', required: false, variables: false, diff --git a/packages/backend/src/apps/github/triggers/new-issues/new-issues.ts b/packages/backend/src/apps/github/triggers/new-issues/new-issues.js similarity index 78% rename from packages/backend/src/apps/github/triggers/new-issues/new-issues.ts rename to packages/backend/src/apps/github/triggers/new-issues/new-issues.js index 4d1b4978..ee5c17d2 100644 --- a/packages/backend/src/apps/github/triggers/new-issues/new-issues.ts +++ b/packages/backend/src/apps/github/triggers/new-issues/new-issues.js @@ -1,11 +1,8 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo'; -import parseLinkHeader from '../../../../helpers/parse-header-link'; +import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo.js'; +import parseLinkHeader from '../../../../helpers/parse-header-link.js'; -function getPathname($: IGlobalVariable) { - const { repoOwner, repo } = getRepoOwnerAndRepo( - $.step.parameters.repo as string - ); +function getPathname($) { + const { repoOwner, repo } = getRepoOwnerAndRepo($.step.parameters.repo); if (repoOwner && repo) { return `/repos/${repoOwner}/${repo}/issues`; @@ -14,7 +11,7 @@ function getPathname($: IGlobalVariable) { return '/issues'; } -const newIssues = async ($: IGlobalVariable) => { +const newIssues = async ($) => { const pathname = getPathname($); const params = { labels: $.step.parameters.label, diff --git a/packages/backend/src/apps/github/triggers/new-pull-requests/index.ts b/packages/backend/src/apps/github/triggers/new-pull-requests/index.js similarity index 78% rename from packages/backend/src/apps/github/triggers/new-pull-requests/index.ts rename to packages/backend/src/apps/github/triggers/new-pull-requests/index.js index 212023aa..7b7f4b02 100644 --- a/packages/backend/src/apps/github/triggers/new-pull-requests/index.ts +++ b/packages/backend/src/apps/github/triggers/new-pull-requests/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newPullRequests from './new-pull-requests'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newPullRequests from './new-pull-requests.js'; export default defineTrigger({ name: 'New pull requests', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Repo', key: 'repo', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: false, source: { diff --git a/packages/backend/src/apps/github/triggers/new-pull-requests/new-pull-requests.ts b/packages/backend/src/apps/github/triggers/new-pull-requests/new-pull-requests.js similarity index 83% rename from packages/backend/src/apps/github/triggers/new-pull-requests/new-pull-requests.ts rename to packages/backend/src/apps/github/triggers/new-pull-requests/new-pull-requests.js index a19ef398..bbd6d8e9 100644 --- a/packages/backend/src/apps/github/triggers/new-pull-requests/new-pull-requests.ts +++ b/packages/backend/src/apps/github/triggers/new-pull-requests/new-pull-requests.js @@ -1,9 +1,8 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo'; -import parseLinkHeader from '../../../../helpers/parse-header-link'; +import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo.js'; +import parseLinkHeader from '../../../../helpers/parse-header-link.js'; -const newPullRequests = async ($: IGlobalVariable) => { - const repoParameter = $.step.parameters.repo as string; +const newPullRequests = async ($) => { + const repoParameter = $.step.parameters.repo; if (!repoParameter) throw new Error('A repo must be set!'); diff --git a/packages/backend/src/apps/github/triggers/new-stargazers/index.ts b/packages/backend/src/apps/github/triggers/new-stargazers/index.js similarity index 78% rename from packages/backend/src/apps/github/triggers/new-stargazers/index.ts rename to packages/backend/src/apps/github/triggers/new-stargazers/index.js index 3ca2882b..0953e557 100644 --- a/packages/backend/src/apps/github/triggers/new-stargazers/index.ts +++ b/packages/backend/src/apps/github/triggers/new-stargazers/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newStargazers from './new-stargazers'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newStargazers from './new-stargazers.js'; export default defineTrigger({ name: 'New stargazers', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Repo', key: 'repo', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: false, source: { diff --git a/packages/backend/src/apps/github/triggers/new-stargazers/new-stargazers.ts b/packages/backend/src/apps/github/triggers/new-stargazers/new-stargazers.js similarity index 70% rename from packages/backend/src/apps/github/triggers/new-stargazers/new-stargazers.ts rename to packages/backend/src/apps/github/triggers/new-stargazers/new-stargazers.js index 2dab3f55..f83e0dd2 100644 --- a/packages/backend/src/apps/github/triggers/new-stargazers/new-stargazers.ts +++ b/packages/backend/src/apps/github/triggers/new-stargazers/new-stargazers.js @@ -1,17 +1,10 @@ import { DateTime } from 'luxon'; -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; -import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo'; -import parseLinkHeader from '../../../../helpers/parse-header-link'; -type TResponseDataItem = { - starred_at: string; - user: IJSONObject; -}; +import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo.js'; +import parseLinkHeader from '../../../../helpers/parse-header-link.js'; -const newStargazers = async ($: IGlobalVariable) => { - const { repoOwner, repo } = getRepoOwnerAndRepo( - $.step.parameters.repo as string - ); +const newStargazers = async ($) => { + const { repoOwner, repo } = getRepoOwnerAndRepo($.step.parameters.repo); const firstPagePathname = `/repos/${repoOwner}/${repo}/stargazers`; const requestConfig = { params: { @@ -23,20 +16,14 @@ const newStargazers = async ($: IGlobalVariable) => { }, }; - const firstPageResponse = await $.http.get( - firstPagePathname, - requestConfig - ); + const firstPageResponse = await $.http.get(firstPagePathname, requestConfig); const firstPageLinks = parseLinkHeader(firstPageResponse.headers.link); // in case there is only single page to fetch let pathname = firstPageLinks.last?.uri || firstPagePathname; do { - const response = await $.http.get( - pathname, - requestConfig - ); + const response = await $.http.get(pathname, requestConfig); const links = parseLinkHeader(response.headers.link); pathname = links.prev?.uri; diff --git a/packages/backend/src/apps/github/triggers/new-watchers/index.ts b/packages/backend/src/apps/github/triggers/new-watchers/index.js similarity index 79% rename from packages/backend/src/apps/github/triggers/new-watchers/index.ts rename to packages/backend/src/apps/github/triggers/new-watchers/index.js index 89a6a583..62602e94 100644 --- a/packages/backend/src/apps/github/triggers/new-watchers/index.ts +++ b/packages/backend/src/apps/github/triggers/new-watchers/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newWatchers from './new-watchers'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newWatchers from './new-watchers.js'; export default defineTrigger({ name: 'New watchers', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Repo', key: 'repo', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: false, source: { diff --git a/packages/backend/src/apps/github/triggers/new-watchers/new-watchers.ts b/packages/backend/src/apps/github/triggers/new-watchers/new-watchers.js similarity index 87% rename from packages/backend/src/apps/github/triggers/new-watchers/new-watchers.ts rename to packages/backend/src/apps/github/triggers/new-watchers/new-watchers.js index f7e13035..3ccfba43 100644 --- a/packages/backend/src/apps/github/triggers/new-watchers/new-watchers.ts +++ b/packages/backend/src/apps/github/triggers/new-watchers/new-watchers.js @@ -1,9 +1,8 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo'; -import parseLinkHeader from '../../../../helpers/parse-header-link'; +import getRepoOwnerAndRepo from '../../common/get-repo-owner-and-repo.js'; +import parseLinkHeader from '../../../../helpers/parse-header-link.js'; -const newWatchers = async ($: IGlobalVariable) => { - const repoParameter = $.step.parameters.repo as string; +const newWatchers = async ($) => { + const repoParameter = $.step.parameters.repo; if (!repoParameter) throw new Error('A repo must be set!'); diff --git a/packages/backend/src/apps/gitlab/auth/generate-auth-url.ts b/packages/backend/src/apps/gitlab/auth/generate-auth-url.js similarity index 63% rename from packages/backend/src/apps/gitlab/auth/generate-auth-url.ts rename to packages/backend/src/apps/gitlab/auth/generate-auth-url.js index d53ecce1..f3a7fb7b 100644 --- a/packages/backend/src/apps/gitlab/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/gitlab/auth/generate-auth-url.js @@ -1,15 +1,14 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URL, URLSearchParams } from 'url'; -import getBaseUrl from '../common/get-base-url'; +import getBaseUrl from '../common/get-base-url.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { // ref: https://docs.gitlab.com/ee/api/oauth2.html#authorization-code-flow const scopes = ['api', 'read_user']; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - redirect_uri: $.auth.data.oAuthRedirectUrl as string, + client_id: $.auth.data.clientId, + redirect_uri: $.auth.data.oAuthRedirectUrl, scope: scopes.join(' '), response_type: 'code', state: Date.now().toString(), diff --git a/packages/backend/src/apps/gitlab/auth/index.ts b/packages/backend/src/apps/gitlab/auth/index.js similarity index 81% rename from packages/backend/src/apps/gitlab/auth/index.ts rename to packages/backend/src/apps/gitlab/auth/index.js index b5e27e1e..f9756997 100644 --- a/packages/backend/src/apps/gitlab/auth/index.ts +++ b/packages/backend/src/apps/gitlab/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; -import refreshToken from './refresh-token'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; +import refreshToken from './refresh-token.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/gitlab/connections/add', @@ -21,7 +21,7 @@ export default { { key: 'instanceUrl', label: 'Gitlab instance URL', - type: 'string' as const, + type: 'string', required: false, readOnly: false, value: 'https://gitlab.com', @@ -33,7 +33,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -45,7 +45,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/gitlab/auth/is-still-verified.js b/packages/backend/src/apps/gitlab/auth/is-still-verified.js new file mode 100644 index 00000000..1b9d46d0 --- /dev/null +++ b/packages/backend/src/apps/gitlab/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user.id; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/gitlab/auth/is-still-verified.ts b/packages/backend/src/apps/gitlab/auth/is-still-verified.ts deleted file mode 100644 index befb7694..00000000 --- a/packages/backend/src/apps/gitlab/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user.id; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/gitlab/auth/refresh-token.ts b/packages/backend/src/apps/gitlab/auth/refresh-token.js similarity index 63% rename from packages/backend/src/apps/gitlab/auth/refresh-token.ts rename to packages/backend/src/apps/gitlab/auth/refresh-token.js index b57f292b..09b74b49 100644 --- a/packages/backend/src/apps/gitlab/auth/refresh-token.ts +++ b/packages/backend/src/apps/gitlab/auth/refresh-token.js @@ -1,14 +1,13 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { // ref: https://docs.gitlab.com/ee/api/oauth2.html#authorization-code-flow const params = new URLSearchParams({ grant_type: 'refresh_token', - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - refresh_token: $.auth.data.refreshToken as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post('/oauth/token', params.toString()); diff --git a/packages/backend/src/apps/gitlab/auth/verify-credentials.ts b/packages/backend/src/apps/gitlab/auth/verify-credentials.js similarity index 78% rename from packages/backend/src/apps/gitlab/auth/verify-credentials.ts rename to packages/backend/src/apps/gitlab/auth/verify-credentials.js index dfcbc083..02e794f7 100644 --- a/packages/backend/src/apps/gitlab/auth/verify-credentials.ts +++ b/packages/backend/src/apps/gitlab/auth/verify-credentials.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { // ref: https://docs.gitlab.com/ee/api/oauth2.html#authorization-code-flow const response = await $.http.post( @@ -25,10 +24,7 @@ const verifyCredentials = async ($: IGlobalVariable) => { $.auth.data.accessToken = data.access_token; const currentUser = await getCurrentUser($); - const screenName = [ - currentUser.username, - $.auth.data.instanceUrl, - ] + const screenName = [currentUser.username, $.auth.data.instanceUrl] .filter(Boolean) .join(' @ '); diff --git a/packages/backend/src/apps/mattermost/common/add-auth-header.ts b/packages/backend/src/apps/gitlab/common/add-auth-header.js similarity index 66% rename from packages/backend/src/apps/mattermost/common/add-auth-header.ts rename to packages/backend/src/apps/gitlab/common/add-auth-header.js index edbff231..150b2b4e 100644 --- a/packages/backend/src/apps/mattermost/common/add-auth-header.ts +++ b/packages/backend/src/apps/gitlab/common/add-auth-header.js @@ -1,11 +1,8 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.accessToken) { requestConfig.headers = requestConfig.headers || {}; requestConfig.headers.Authorization = `Bearer ${$.auth.data.accessToken}`; } - return requestConfig; }; diff --git a/packages/backend/src/apps/gitlab/common/get-base-url.js b/packages/backend/src/apps/gitlab/common/get-base-url.js new file mode 100644 index 00000000..44e82c47 --- /dev/null +++ b/packages/backend/src/apps/gitlab/common/get-base-url.js @@ -0,0 +1,13 @@ +const getBaseUrl = ($) => { + if ($.auth.data.instanceUrl) { + return $.auth.data.instanceUrl; + } + + if ($.app.apiBaseUrl) { + return $.app.apiBaseUrl; + } + + return $.app.baseUrl; +}; + +export default getBaseUrl; diff --git a/packages/backend/src/apps/gitlab/common/get-base-url.ts b/packages/backend/src/apps/gitlab/common/get-base-url.ts deleted file mode 100644 index cbe8614f..00000000 --- a/packages/backend/src/apps/gitlab/common/get-base-url.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getBaseUrl = ($: IGlobalVariable): string => { - if ($.auth.data.instanceUrl) { - return $.auth.data.instanceUrl as string; - } - - if ($.app.apiBaseUrl) { - return $.app.apiBaseUrl; - } - - return $.app.baseUrl; -}; - -export default getBaseUrl; diff --git a/packages/backend/src/apps/gitlab/common/get-current-user.ts b/packages/backend/src/apps/gitlab/common/get-current-user.js similarity index 60% rename from packages/backend/src/apps/gitlab/common/get-current-user.ts rename to packages/backend/src/apps/gitlab/common/get-current-user.js index c7755535..f464d6a6 100644 --- a/packages/backend/src/apps/gitlab/common/get-current-user.ts +++ b/packages/backend/src/apps/gitlab/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { // ref: https://docs.gitlab.com/ee/api/users.html#list-current-user const response = await $.http.get('/api/v4/user'); diff --git a/packages/backend/src/apps/github/common/paginate-all.ts b/packages/backend/src/apps/gitlab/common/paginate-all.js similarity index 51% rename from packages/backend/src/apps/github/common/paginate-all.ts rename to packages/backend/src/apps/gitlab/common/paginate-all.js index 8a6d6d35..060aa2f0 100644 --- a/packages/backend/src/apps/github/common/paginate-all.ts +++ b/packages/backend/src/apps/gitlab/common/paginate-all.js @@ -1,18 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; -import type { AxiosResponse } from 'axios'; -import parseLinkHeader from '../../../helpers/parse-header-link'; +import parseLinkHeader from '../../../helpers/parse-header-link.js'; -type TResponse = { - data: IJSONObject[]; - error?: IJSONObject; -}; - -export default async function paginateAll( - $: IGlobalVariable, - request: Promise -) { +export default async function paginateAll($, request) { const response = await request; - const aggregatedResponse: TResponse = { + + const aggregatedResponse = { data: [...response.data], }; diff --git a/packages/backend/src/apps/gitlab/common/set-base-url.js b/packages/backend/src/apps/gitlab/common/set-base-url.js new file mode 100644 index 00000000..135149b1 --- /dev/null +++ b/packages/backend/src/apps/gitlab/common/set-base-url.js @@ -0,0 +1,11 @@ +const setBaseUrl = ($, requestConfig) => { + if ($.auth.data.instanceUrl) { + requestConfig.baseURL = $.auth.data.instanceUrl; + } else if ($.app.apiBaseUrl) { + requestConfig.baseURL = $.app.apiBaseUrl; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/gitlab/common/set-base-url.ts b/packages/backend/src/apps/gitlab/common/set-base-url.ts deleted file mode 100644 index 8aef4b23..00000000 --- a/packages/backend/src/apps/gitlab/common/set-base-url.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data.instanceUrl) { - requestConfig.baseURL = $.auth.data.instanceUrl as string; - } else if ($.app.apiBaseUrl) { - requestConfig.baseURL = $.app.apiBaseUrl as string; - } - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/gitlab/dynamic-data/index.js b/packages/backend/src/apps/gitlab/dynamic-data/index.js new file mode 100644 index 00000000..ed07bb05 --- /dev/null +++ b/packages/backend/src/apps/gitlab/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listProjects from './list-projects/index.js'; + +export default [listProjects]; diff --git a/packages/backend/src/apps/gitlab/dynamic-data/index.ts b/packages/backend/src/apps/gitlab/dynamic-data/index.ts deleted file mode 100644 index 27787b4b..00000000 --- a/packages/backend/src/apps/gitlab/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listProjects from './list-projects'; - -export default [listProjects]; diff --git a/packages/backend/src/apps/gitlab/dynamic-data/list-projects/index.ts b/packages/backend/src/apps/gitlab/dynamic-data/list-projects/index.js similarity index 73% rename from packages/backend/src/apps/gitlab/dynamic-data/list-projects/index.ts rename to packages/backend/src/apps/gitlab/dynamic-data/list-projects/index.js index 850a6860..522f7adf 100644 --- a/packages/backend/src/apps/gitlab/dynamic-data/list-projects/index.ts +++ b/packages/backend/src/apps/gitlab/dynamic-data/list-projects/index.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; -import paginateAll from '../../common/paginate-all'; +import paginateAll from '../../common/paginate-all.js'; export default { name: 'List projects', key: 'listProjects', - async run($: IGlobalVariable) { + async run($) { // ref: // - https://docs.gitlab.com/ee/api/projects.html#list-all-projects // - https://docs.gitlab.com/ee/api/rest/index.html#keyset-based-pagination @@ -21,7 +20,7 @@ export default { const response = await paginateAll($, firstPageRequest); - response.data = response.data.map((repo: { name: string; id: number }) => { + response.data = response.data.map((repo) => { return { value: repo.id, name: repo.name, diff --git a/packages/backend/src/apps/gitlab/index.d.ts b/packages/backend/src/apps/gitlab/index.d.ts deleted file mode 100644 index 8b137891..00000000 --- a/packages/backend/src/apps/gitlab/index.d.ts +++ /dev/null @@ -1 +0,0 @@ - diff --git a/packages/backend/src/apps/gitlab/index.ts b/packages/backend/src/apps/gitlab/index.js similarity index 57% rename from packages/backend/src/apps/gitlab/index.ts rename to packages/backend/src/apps/gitlab/index.js index 81db8389..725f1a1a 100644 --- a/packages/backend/src/apps/gitlab/index.ts +++ b/packages/backend/src/apps/gitlab/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import setBaseUrl from './common/set-base-url'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import setBaseUrl from './common/set-base-url.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'GitLab', diff --git a/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.ts b/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.js similarity index 75% rename from packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.js index 72dc6ccc..ec94b320 100644 --- a/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/index.js @@ -1,18 +1,17 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; // confidential_issues_events has the same event data as issues_events -import data from './issue_event'; +import data from './issue_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Confidential issue event', description: 'Confidential issue event (triggered when a new confidential issue is created or an existing issue is updated, closed, or reopened)', diff --git a/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/issue_event.ts b/packages/backend/src/apps/gitlab/triggers/confidential-issue-event/issue_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/confidential-issue-event/issue_event.ts rename to packages/backend/src/apps/gitlab/triggers/confidential-issue-event/issue_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.ts b/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.js similarity index 75% rename from packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.js index 5f37bb7e..4e4fbd9d 100644 --- a/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/confidential-note-event/index.js @@ -1,18 +1,17 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; // confidential_note_events has the same event data as note_events -import data from './note_event'; +import data from './note_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Confidential comment event', description: 'Confidential comment event (triggered when a new confidential comment is made on commits, merge requests, issues, and code snippets)', diff --git a/packages/backend/src/apps/gitlab/triggers/confidential-note-event/note_event.ts b/packages/backend/src/apps/gitlab/triggers/confidential-note-event/note_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/confidential-note-event/note_event.ts rename to packages/backend/src/apps/gitlab/triggers/confidential-note-event/note_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/deployment-event/deployment_event.ts b/packages/backend/src/apps/gitlab/triggers/deployment-event/deployment_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/deployment-event/deployment_event.ts rename to packages/backend/src/apps/gitlab/triggers/deployment-event/deployment_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/deployment-event/index.ts b/packages/backend/src/apps/gitlab/triggers/deployment-event/index.js similarity index 71% rename from packages/backend/src/apps/gitlab/triggers/deployment-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/deployment-event/index.js index 8a5c3ef8..ecf122c3 100644 --- a/packages/backend/src/apps/gitlab/triggers/deployment-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/deployment-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './deployment_event'; +import data from './deployment_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Deployment event', description: 'Deployment event (triggered when a deployment starts, succeeds, fails or is canceled)', diff --git a/packages/backend/src/apps/gitlab/triggers/feature-flag-event/feature_flag_event.ts b/packages/backend/src/apps/gitlab/triggers/feature-flag-event/feature_flag_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/feature-flag-event/feature_flag_event.ts rename to packages/backend/src/apps/gitlab/triggers/feature-flag-event/feature_flag_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.ts b/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.js similarity index 70% rename from packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.js index 61b1f199..5c2ea037 100644 --- a/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/feature-flag-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './feature_flag_event'; +import data from './feature_flag_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Feature flag event', description: 'Feature flag event (triggered when a feature flag is turned on or off)', diff --git a/packages/backend/src/apps/gitlab/triggers/index.js b/packages/backend/src/apps/gitlab/triggers/index.js new file mode 100644 index 00000000..18ffd7d5 --- /dev/null +++ b/packages/backend/src/apps/gitlab/triggers/index.js @@ -0,0 +1,29 @@ +import confidentialIssueEvent from './confidential-issue-event/index.js'; +import confidentialNoteEvent from './confidential-note-event/index.js'; +import deploymentEvent from './deployment-event/index.js'; +import featureFlagEvent from './feature-flag-event/index.js'; +import issueEvent from './issue-event/index.js'; +import jobEvent from './job-event/index.js'; +import mergeRequestEvent from './merge-request-event/index.js'; +import noteEvent from './note-event/index.js'; +import pipelineEvent from './pipeline-event/index.js'; +import pushEvent from './push-event/index.js'; +import releaseEvent from './release-event/index.js'; +import tagPushEvent from './tag-push-event/index.js'; +import wikiPageEvent from './wiki-page-event/index.js'; + +export default [ + confidentialIssueEvent, + confidentialNoteEvent, + deploymentEvent, + featureFlagEvent, + issueEvent, + jobEvent, + mergeRequestEvent, + noteEvent, + pipelineEvent, + pushEvent, + releaseEvent, + tagPushEvent, + wikiPageEvent, +]; diff --git a/packages/backend/src/apps/gitlab/triggers/index.ts b/packages/backend/src/apps/gitlab/triggers/index.ts deleted file mode 100644 index f8621d3b..00000000 --- a/packages/backend/src/apps/gitlab/triggers/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import confidentialIssueEvent from './confidential-issue-event'; -import confidentialNoteEvent from './confidential-note-event'; -import deploymentEvent from './deployment-event'; -import featureFlagEvent from './feature-flag-event'; -import issueEvent from './issue-event'; -import jobEvent from './job-event'; -import mergeRequestEvent from './merge-request-event'; -import noteEvent from './note-event'; -import pipelineEvent from './pipeline-event'; -import pushEvent from './push-event'; -import releaseEvent from './release-event'; -import tagPushEvent from './tag-push-event'; -import wikiPageEvent from './wiki-page-event'; - -export default [ - confidentialIssueEvent, - confidentialNoteEvent, - deploymentEvent, - featureFlagEvent, - issueEvent, - jobEvent, - mergeRequestEvent, - noteEvent, - pipelineEvent, - pushEvent, - releaseEvent, - tagPushEvent, - wikiPageEvent, -]; diff --git a/packages/backend/src/apps/gitlab/triggers/issue-event/index.ts b/packages/backend/src/apps/gitlab/triggers/issue-event/index.js similarity index 71% rename from packages/backend/src/apps/gitlab/triggers/issue-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/issue-event/index.js index 9a9c069b..a273df9b 100644 --- a/packages/backend/src/apps/gitlab/triggers/issue-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/issue-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './issue_event'; +import data from './issue_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Issue event', description: 'Issue event (triggered when a new issue is created or an existing issue is updated, closed, or reopened)', diff --git a/packages/backend/src/apps/gitlab/triggers/issue-event/issue_event.ts b/packages/backend/src/apps/gitlab/triggers/issue-event/issue_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/issue-event/issue_event.ts rename to packages/backend/src/apps/gitlab/triggers/issue-event/issue_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/job-event/index.ts b/packages/backend/src/apps/gitlab/triggers/job-event/index.js similarity index 69% rename from packages/backend/src/apps/gitlab/triggers/job-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/job-event/index.js index 7150d247..f7c4f5af 100644 --- a/packages/backend/src/apps/gitlab/triggers/job-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/job-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './job_event'; +import data from './job_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Job event', description: 'Job event (triggered when the status of a job changes)', // info: 'https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html#job-events', diff --git a/packages/backend/src/apps/gitlab/triggers/job-event/job_event.ts b/packages/backend/src/apps/gitlab/triggers/job-event/job_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/job-event/job_event.ts rename to packages/backend/src/apps/gitlab/triggers/job-event/job_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/lib.js b/packages/backend/src/apps/gitlab/triggers/lib.js new file mode 100644 index 00000000..1203722e --- /dev/null +++ b/packages/backend/src/apps/gitlab/triggers/lib.js @@ -0,0 +1,94 @@ +import Crypto from 'crypto'; +import appConfig from '../../../config/app.js'; + +export const projectArgumentDescriptor = { + label: 'Project', + key: 'projectId', + type: 'dropdown', + required: true, + description: 'Pick a project to receive events from', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listProjects', + }, + ], + }, +}; + +export const getRunFn = async ($) => { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); +}; + +export const getTestRunFn = (eventData) => ($) => { + /* + Not fetching actual events from gitlab and using static event data from documentation + as there is no way to filter out events of one category using gitlab event types, + filtering is very limited and uses different grouping than what is applicable when creating a webhook. + + ref: + - https://docs.gitlab.com/ee/api/events.html#target-types + - https://docs.gitlab.com/ee/api/projects.html#add-project-hook + */ + + if (!eventData) { + return; + } + + const dataItem = { + raw: eventData, + meta: { + // there is no distinct id on gitlab event object thus creating it + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + + return Promise.resolve(); +}; + +export const getRegisterHookFn = (eventType) => async ($) => { + // ref: https://docs.gitlab.com/ee/api/projects.html#add-project-hook + + const subscriptionPayload = { + url: $.webhookUrl, + token: appConfig.webhookSecretKey, + enable_ssl_verification: true, + [eventType]: true, + }; + + if ( + ['wildcard', 'regex'].includes($.step.parameters.branch_filter_strategy) + ) { + subscriptionPayload.branch_filter_strategy = + $.step.parameters.branch_filter_strategy; + subscriptionPayload.push_events_branch_filter = + $.step.parameters.push_events_branch_filter; + } + + const { data } = await $.http.post( + `/api/v4/projects/${$.step.parameters.projectId}/hooks`, + subscriptionPayload + ); + + await $.flow.setRemoteWebhookId(data.id.toString()); +}; + +export const unregisterHook = async ($) => { + // ref: https://docs.gitlab.com/ee/api/projects.html#delete-project-hook + await $.http.delete( + `/api/v4/projects/${$.step.parameters.projectId}/hooks/${$.flow.remoteWebhookId}` + ); +}; diff --git a/packages/backend/src/apps/gitlab/triggers/lib.ts b/packages/backend/src/apps/gitlab/triggers/lib.ts deleted file mode 100644 index 29041908..00000000 --- a/packages/backend/src/apps/gitlab/triggers/lib.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; -import Crypto from 'crypto'; -import { GITLAB_EVENT_TYPE } from './types'; -import appConfig from '../../../config/app'; - -export const projectArgumentDescriptor = { - label: 'Project', - key: 'projectId', - type: 'dropdown' as const, - required: true, - description: 'Pick a project to receive events from', - variables: false, - source: { - type: 'query', - name: 'getDynamicData', - arguments: [ - { - name: 'key', - value: 'listProjects', - }, - ], - }, -}; - -export const getRunFn = async ($: IGlobalVariable) => { - const dataItem = { - raw: $.request.body, - meta: { - internalId: Crypto.randomUUID(), - }, - }; - - $.pushTriggerItem(dataItem); -}; - -export const getTestRunFn = - (eventData: IJSONObject) => ($: IGlobalVariable) => { - /* - Not fetching actual events from gitlab and using static event data from documentation - as there is no way to filter out events of one category using gitlab event types, - filtering is very limited and uses different grouping than what is applicable when creating a webhook. - - ref: - - https://docs.gitlab.com/ee/api/events.html#target-types - - https://docs.gitlab.com/ee/api/projects.html#add-project-hook - */ - - if (!eventData) { - return; - } - - const dataItem = { - raw: eventData, - meta: { - // there is no distinct id on gitlab event object thus creating it - internalId: Crypto.randomUUID(), - }, - }; - - $.pushTriggerItem(dataItem); - - return Promise.resolve(); - }; - -export const getRegisterHookFn = - (eventType: GITLAB_EVENT_TYPE) => async ($: IGlobalVariable) => { - // ref: https://docs.gitlab.com/ee/api/projects.html#add-project-hook - - const subscriptionPayload = { - url: $.webhookUrl, - token: appConfig.webhookSecretKey, - enable_ssl_verification: true, - [eventType]: true, - }; - - if ( - ['wildcard', 'regex'].includes( - $.step.parameters.branch_filter_strategy as string - ) - ) { - subscriptionPayload.branch_filter_strategy = $.step.parameters - .branch_filter_strategy as string; - subscriptionPayload.push_events_branch_filter = $.step.parameters - .push_events_branch_filter as string; - } - - const { data } = await $.http.post( - `/api/v4/projects/${$.step.parameters.projectId}/hooks`, - subscriptionPayload - ); - - await $.flow.setRemoteWebhookId(data.id.toString()); - }; - -export const unregisterHook = async ($: IGlobalVariable) => { - // ref: https://docs.gitlab.com/ee/api/projects.html#delete-project-hook - await $.http.delete( - `/api/v4/projects/${$.step.parameters.projectId}/hooks/${$.flow.remoteWebhookId}` - ); -}; diff --git a/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.ts b/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.js similarity index 71% rename from packages/backend/src/apps/gitlab/triggers/merge-request-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/merge-request-event/index.js index a841ec38..c3ec583d 100644 --- a/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/merge-request-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './merge_request_event'; +import data from './merge_request_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Merge request event', description: 'Merge request event (triggered when merge request is created, updated, or closed)', diff --git a/packages/backend/src/apps/gitlab/triggers/merge-request-event/merge_request_event.ts b/packages/backend/src/apps/gitlab/triggers/merge-request-event/merge_request_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/merge-request-event/merge_request_event.ts rename to packages/backend/src/apps/gitlab/triggers/merge-request-event/merge_request_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/note-event/index.ts b/packages/backend/src/apps/gitlab/triggers/note-event/index.js similarity index 71% rename from packages/backend/src/apps/gitlab/triggers/note-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/note-event/index.js index 21d68b46..a74490a6 100644 --- a/packages/backend/src/apps/gitlab/triggers/note-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/note-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './note_event'; +import data from './note_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Comment event', description: 'Comment event (triggered when a new comment is made on commits, merge requests, issues, and code snippets)', diff --git a/packages/backend/src/apps/gitlab/triggers/note-event/note_event.ts b/packages/backend/src/apps/gitlab/triggers/note-event/note_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/note-event/note_event.ts rename to packages/backend/src/apps/gitlab/triggers/note-event/note_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.ts b/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.js similarity index 70% rename from packages/backend/src/apps/gitlab/triggers/pipeline-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/pipeline-event/index.js index 10b42739..216ddc5b 100644 --- a/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/pipeline-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './pipeline_event'; +import data from './pipeline_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Pipeline event', description: 'Pipeline event (triggered when the status of a pipeline changes)', diff --git a/packages/backend/src/apps/gitlab/triggers/pipeline-event/pipeline_event.ts b/packages/backend/src/apps/gitlab/triggers/pipeline-event/pipeline_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/pipeline-event/pipeline_event.ts rename to packages/backend/src/apps/gitlab/triggers/pipeline-event/pipeline_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/push-event/index.ts b/packages/backend/src/apps/gitlab/triggers/push-event/index.js similarity index 82% rename from packages/backend/src/apps/gitlab/triggers/push-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/push-event/index.js index 11532a33..83d3339f 100644 --- a/packages/backend/src/apps/gitlab/triggers/push-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/push-event/index.js @@ -1,20 +1,19 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './push_event'; +import data from './push_event.js'; export const branchFilterStrategyArgumentDescriptor = { label: 'What type of filter to use?', key: 'branch_filter_strategy', - type: 'dropdown' as const, + type: 'dropdown', description: 'Defaults to including all branches', required: true, variables: false, @@ -39,12 +38,12 @@ export const pushEventsBranchFilterArgumentDescriptor = { label: 'Filter value', key: 'push_events_branch_filter', description: 'Leave empty when using "all branches"', - type: 'string' as const, + type: 'string', required: false, variables: false, }; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Push event', description: 'Push event (triggered when you push to the repository)', // info: 'https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html#push-events', diff --git a/packages/backend/src/apps/gitlab/triggers/push-event/push_event.ts b/packages/backend/src/apps/gitlab/triggers/push-event/push_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/push-event/push_event.ts rename to packages/backend/src/apps/gitlab/triggers/push-event/push_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/release-event/index.ts b/packages/backend/src/apps/gitlab/triggers/release-event/index.js similarity index 70% rename from packages/backend/src/apps/gitlab/triggers/release-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/release-event/index.js index 718bc7e8..87e7c85c 100644 --- a/packages/backend/src/apps/gitlab/triggers/release-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/release-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './release_event'; +import data from './release_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Release event', description: 'Release event (triggered when a release is created or updated)', // info: 'https://docs.gitlab.com/ee/user/project/integrations/webhook_events.html#release-events', diff --git a/packages/backend/src/apps/gitlab/triggers/release-event/release_event.ts b/packages/backend/src/apps/gitlab/triggers/release-event/release_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/release-event/release_event.ts rename to packages/backend/src/apps/gitlab/triggers/release-event/release_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.ts b/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.js similarity index 70% rename from packages/backend/src/apps/gitlab/triggers/tag-push-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/tag-push-event/index.js index 556bc591..a64dfb33 100644 --- a/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/tag-push-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './tag_push_event'; +import data from './tag_push_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Tag event', description: 'Tag event (triggered when you create or delete tags in the repository)', diff --git a/packages/backend/src/apps/gitlab/triggers/tag-push-event/tag_push_event.ts b/packages/backend/src/apps/gitlab/triggers/tag-push-event/tag_push_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/tag-push-event/tag_push_event.ts rename to packages/backend/src/apps/gitlab/triggers/tag-push-event/tag_push_event.js diff --git a/packages/backend/src/apps/gitlab/triggers/types.js b/packages/backend/src/apps/gitlab/triggers/types.js new file mode 100644 index 00000000..cadc42e1 --- /dev/null +++ b/packages/backend/src/apps/gitlab/triggers/types.js @@ -0,0 +1,15 @@ +export const GITLAB_EVENT_TYPE = { + confidential_issues_events: 'confidential_issues_events', + confidential_note_events: 'confidential_note_events', + deployment_events: 'deployment_events', + feature_flag_events: 'feature_flag_events', + issues_events: 'issues_events', + job_events: 'job_events', + merge_requests_events: 'merge_requests_events', + note_events: 'note_events', + pipeline_events: 'pipeline_events', + push_events: 'push_events', + releases_events: 'releases_events', + tag_push_events: 'tag_push_events', + wiki_page_events: 'wiki_page_events', +}; diff --git a/packages/backend/src/apps/gitlab/triggers/types.ts b/packages/backend/src/apps/gitlab/triggers/types.ts deleted file mode 100644 index 38456fd0..00000000 --- a/packages/backend/src/apps/gitlab/triggers/types.ts +++ /dev/null @@ -1,24 +0,0 @@ -export enum GITLAB_EVENT_TYPE { - // ref: https://docs.gitlab.com/ee/api/projects.html#add-project-hook - confidential_issues_events = 'confidential_issues_events', - confidential_note_events = 'confidential_note_events', - deployment_events = 'deployment_events', - feature_flag_events = 'feature_flag_events', - issues_events = 'issues_events', - job_events = 'job_events', - merge_requests_events = 'merge_requests_events', - note_events = 'note_events', - pipeline_events = 'pipeline_events', - push_events = 'push_events', - releases_events = 'releases_events', - tag_push_events = 'tag_push_events', - wiki_page_events = 'wiki_page_events', -} - -export type EventDescriptor = { - name: string; - description: string; - info?: string; - type: GITLAB_EVENT_TYPE; - data: any; -}; diff --git a/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.ts b/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.js similarity index 70% rename from packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.ts rename to packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.js index f2f0f3a3..e92f8caf 100644 --- a/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.ts +++ b/packages/backend/src/apps/gitlab/triggers/wiki-page-event/index.js @@ -1,17 +1,16 @@ -import { IRawTrigger } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import { GITLAB_EVENT_TYPE } from '../types'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import { GITLAB_EVENT_TYPE } from '../types.js'; import { getRegisterHookFn, getRunFn, getTestRunFn, projectArgumentDescriptor, unregisterHook, -} from '../lib'; +} from '../lib.js'; -import data from './wiki_page_event'; +import data from './wiki_page_event.js'; -export const triggerDescriptor: IRawTrigger = { +export const triggerDescriptor = { name: 'Wiki page event', description: 'Wiki page event (triggered when a wiki page is created, updated, or deleted)', diff --git a/packages/backend/src/apps/gitlab/triggers/wiki-page-event/wiki_page_event.ts b/packages/backend/src/apps/gitlab/triggers/wiki-page-event/wiki_page_event.js similarity index 100% rename from packages/backend/src/apps/gitlab/triggers/wiki-page-event/wiki_page_event.ts rename to packages/backend/src/apps/gitlab/triggers/wiki-page-event/wiki_page_event.js diff --git a/packages/backend/src/apps/google-drive/auth/generate-auth-url.ts b/packages/backend/src/apps/google-calendar/auth/generate-auth-url.js similarity index 55% rename from packages/backend/src/apps/google-drive/auth/generate-auth-url.ts rename to packages/backend/src/apps/google-calendar/auth/generate-auth-url.js index ea89f8a4..c972ae16 100644 --- a/packages/backend/src/apps/google-drive/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/google-calendar/auth/generate-auth-url.js @@ -1,14 +1,13 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUri, prompt: 'select_account', scope: authScope.join(' '), diff --git a/packages/backend/src/apps/google-calendar/auth/index.ts b/packages/backend/src/apps/google-calendar/auth/index.js similarity index 74% rename from packages/backend/src/apps/google-calendar/auth/index.ts rename to packages/backend/src/apps/google-calendar/auth/index.js index 80d63f90..a481e43e 100644 --- a/packages/backend/src/apps/google-calendar/auth/index.ts +++ b/packages/backend/src/apps/google-calendar/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/google-calendar/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/google-calendar/auth/is-still-verified.js b/packages/backend/src/apps/google-calendar/auth/is-still-verified.js new file mode 100644 index 00000000..68f4d7db --- /dev/null +++ b/packages/backend/src/apps/google-calendar/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser.resourceName; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/google-calendar/auth/is-still-verified.ts b/packages/backend/src/apps/google-calendar/auth/is-still-verified.ts deleted file mode 100644 index c46fa18b..00000000 --- a/packages/backend/src/apps/google-calendar/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser.resourceName; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/google-forms/auth/refresh-token.ts b/packages/backend/src/apps/google-calendar/auth/refresh-token.js similarity index 57% rename from packages/backend/src/apps/google-forms/auth/refresh-token.ts rename to packages/backend/src/apps/google-calendar/auth/refresh-token.js index 17d0c4cc..7c5b7020 100644 --- a/packages/backend/src/apps/google-forms/auth/refresh-token.ts +++ b/packages/backend/src/apps/google-calendar/auth/refresh-token.js @@ -1,13 +1,13 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -import authScope from '../common/auth-scope'; -const refreshToken = async ($: IGlobalVariable) => { +import authScope from '../common/auth-scope.js'; + +const refreshToken = async ($) => { const params = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/google-drive/auth/verify-credentials.ts b/packages/backend/src/apps/google-calendar/auth/verify-credentials.js similarity index 62% rename from packages/backend/src/apps/google-drive/auth/verify-credentials.ts rename to packages/backend/src/apps/google-calendar/auth/verify-credentials.js index 124e73c1..a636b72c 100644 --- a/packages/backend/src/apps/google-drive/auth/verify-credentials.ts +++ b/packages/backend/src/apps/google-calendar/auth/verify-credentials.js @@ -1,25 +1,10 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -type TUser = { - displayName: string; - metadata: { - primary: boolean; - }; -}; - -type TEmailAddress = { - value: string; - metadata: { - primary: boolean; - }; -}; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const { data } = await $.http.post(`https://oauth2.googleapis.com/token`, { client_id: $.auth.data.clientId, client_secret: $.auth.data.clientSecret, @@ -36,10 +21,10 @@ const verifyCredentials = async ($: IGlobalVariable) => { const currentUser = await getCurrentUser($); const { displayName } = currentUser.names.find( - (name: TUser) => name.metadata.primary + (name) => name.metadata.primary ); const { value: email } = currentUser.emailAddresses.find( - (emailAddress: TEmailAddress) => emailAddress.metadata.primary + (emailAddress) => emailAddress.metadata.primary ); await $.auth.set({ diff --git a/packages/backend/src/apps/google-calendar/common/add-auth-header.ts b/packages/backend/src/apps/google-calendar/common/add-auth-header.js similarity index 62% rename from packages/backend/src/apps/google-calendar/common/add-auth-header.ts rename to packages/backend/src/apps/google-calendar/common/add-auth-header.js index 8e7798b8..02477aa4 100644 --- a/packages/backend/src/apps/google-calendar/common/add-auth-header.ts +++ b/packages/backend/src/apps/google-calendar/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.accessToken) { requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/google-calendar/common/auth-scope.ts b/packages/backend/src/apps/google-calendar/common/auth-scope.js similarity index 85% rename from packages/backend/src/apps/google-calendar/common/auth-scope.ts rename to packages/backend/src/apps/google-calendar/common/auth-scope.js index e3625b0d..421c26f4 100644 --- a/packages/backend/src/apps/google-calendar/common/auth-scope.ts +++ b/packages/backend/src/apps/google-calendar/common/auth-scope.js @@ -1,4 +1,4 @@ -const authScope: string[] = [ +const authScope = [ 'https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', diff --git a/packages/backend/src/apps/google-sheets/common/get-current-user.ts b/packages/backend/src/apps/google-calendar/common/get-current-user.js similarity index 63% rename from packages/backend/src/apps/google-sheets/common/get-current-user.ts rename to packages/backend/src/apps/google-calendar/common/get-current-user.js index 724fe1ac..2663ad20 100644 --- a/packages/backend/src/apps/google-sheets/common/get-current-user.ts +++ b/packages/backend/src/apps/google-calendar/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { +const getCurrentUser = async ($) => { const { data: currentUser } = await $.http.get( 'https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses' ); diff --git a/packages/backend/src/apps/google-calendar/dynamic-data/index.js b/packages/backend/src/apps/google-calendar/dynamic-data/index.js new file mode 100644 index 00000000..2cf6ba7d --- /dev/null +++ b/packages/backend/src/apps/google-calendar/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listCalendars from './list-calendars/index.js'; + +export default [listCalendars]; diff --git a/packages/backend/src/apps/google-calendar/dynamic-data/index.ts b/packages/backend/src/apps/google-calendar/dynamic-data/index.ts deleted file mode 100644 index ef8fc43a..00000000 --- a/packages/backend/src/apps/google-calendar/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listCalendars from './list-calendars'; - -export default [listCalendars]; diff --git a/packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.ts b/packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.js similarity index 71% rename from packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.ts rename to packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.js index 160c3935..afed03f1 100644 --- a/packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.ts +++ b/packages/backend/src/apps/google-calendar/dynamic-data/list-calendars/index.js @@ -1,18 +1,14 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List calendars', key: 'listCalendars', - async run($: IGlobalVariable) { - const drives: { - data: IJSONObject[]; - } = { + async run($) { + const drives = { data: [], }; const params = { - pageToken: undefined as unknown as string, + pageToken: undefined, }; do { diff --git a/packages/backend/src/apps/google-calendar/index.d.ts b/packages/backend/src/apps/google-calendar/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/google-calendar/index.ts b/packages/backend/src/apps/google-calendar/index.js similarity index 64% rename from packages/backend/src/apps/google-calendar/index.ts rename to packages/backend/src/apps/google-calendar/index.js index 8192820c..3677a56f 100644 --- a/packages/backend/src/apps/google-calendar/index.ts +++ b/packages/backend/src/apps/google-calendar/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Google Calendar', diff --git a/packages/backend/src/apps/google-calendar/triggers/index.js b/packages/backend/src/apps/google-calendar/triggers/index.js new file mode 100644 index 00000000..bb510663 --- /dev/null +++ b/packages/backend/src/apps/google-calendar/triggers/index.js @@ -0,0 +1,4 @@ +import newCalendar from './new-calendar/index.js'; +import newEvent from './new-event/index.js'; + +export default [newCalendar, newEvent]; diff --git a/packages/backend/src/apps/google-calendar/triggers/index.ts b/packages/backend/src/apps/google-calendar/triggers/index.ts deleted file mode 100644 index 97a3b6f7..00000000 --- a/packages/backend/src/apps/google-calendar/triggers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import newCalendar from './new-calendar'; -import newEvent from './new-event'; - -export default [newCalendar, newEvent]; diff --git a/packages/backend/src/apps/google-calendar/triggers/new-calendar/index.ts b/packages/backend/src/apps/google-calendar/triggers/new-calendar/index.js similarity index 80% rename from packages/backend/src/apps/google-calendar/triggers/new-calendar/index.ts rename to packages/backend/src/apps/google-calendar/triggers/new-calendar/index.js index 421c6cb3..53ea7314 100644 --- a/packages/backend/src/apps/google-calendar/triggers/new-calendar/index.ts +++ b/packages/backend/src/apps/google-calendar/triggers/new-calendar/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New calendar', @@ -8,8 +8,8 @@ export default defineTrigger({ arguments: [], async run($) { - const params: Record = { - pageToken: undefined as unknown as string, + const params = { + pageToken: undefined, maxResults: 250, }; diff --git a/packages/backend/src/apps/google-calendar/triggers/new-event/index.ts b/packages/backend/src/apps/google-calendar/triggers/new-event/index.js similarity index 84% rename from packages/backend/src/apps/google-calendar/triggers/new-event/index.ts rename to packages/backend/src/apps/google-calendar/triggers/new-event/index.js index 2856cec0..1c012191 100644 --- a/packages/backend/src/apps/google-calendar/triggers/new-event/index.ts +++ b/packages/backend/src/apps/google-calendar/triggers/new-event/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New event', @@ -9,7 +9,7 @@ export default defineTrigger({ { label: 'Calendar', key: 'calendarId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: '', variables: false, @@ -29,8 +29,8 @@ export default defineTrigger({ async run($) { const calendarId = $.step.parameters.calendarId; - const params: Record = { - pageToken: undefined as unknown as string, + const params = { + pageToken: undefined, orderBy: 'updated', }; diff --git a/packages/backend/src/apps/google-forms/auth/generate-auth-url.ts b/packages/backend/src/apps/google-drive/auth/generate-auth-url.js similarity index 55% rename from packages/backend/src/apps/google-forms/auth/generate-auth-url.ts rename to packages/backend/src/apps/google-drive/auth/generate-auth-url.js index ea89f8a4..c972ae16 100644 --- a/packages/backend/src/apps/google-forms/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/google-drive/auth/generate-auth-url.js @@ -1,14 +1,13 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUri, prompt: 'select_account', scope: authScope.join(' '), diff --git a/packages/backend/src/apps/google-drive/auth/index.ts b/packages/backend/src/apps/google-drive/auth/index.js similarity index 74% rename from packages/backend/src/apps/google-drive/auth/index.ts rename to packages/backend/src/apps/google-drive/auth/index.js index 8d826632..9dd54714 100644 --- a/packages/backend/src/apps/google-drive/auth/index.ts +++ b/packages/backend/src/apps/google-drive/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/google-drive/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/google-drive/auth/is-still-verified.js b/packages/backend/src/apps/google-drive/auth/is-still-verified.js new file mode 100644 index 00000000..68f4d7db --- /dev/null +++ b/packages/backend/src/apps/google-drive/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser.resourceName; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/google-drive/auth/is-still-verified.ts b/packages/backend/src/apps/google-drive/auth/is-still-verified.ts deleted file mode 100644 index c46fa18b..00000000 --- a/packages/backend/src/apps/google-drive/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser.resourceName; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/google-calendar/auth/refresh-token.ts b/packages/backend/src/apps/google-drive/auth/refresh-token.js similarity index 57% rename from packages/backend/src/apps/google-calendar/auth/refresh-token.ts rename to packages/backend/src/apps/google-drive/auth/refresh-token.js index 17d0c4cc..7c5b7020 100644 --- a/packages/backend/src/apps/google-calendar/auth/refresh-token.ts +++ b/packages/backend/src/apps/google-drive/auth/refresh-token.js @@ -1,13 +1,13 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -import authScope from '../common/auth-scope'; -const refreshToken = async ($: IGlobalVariable) => { +import authScope from '../common/auth-scope.js'; + +const refreshToken = async ($) => { const params = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/google-forms/auth/verify-credentials.ts b/packages/backend/src/apps/google-drive/auth/verify-credentials.js similarity index 62% rename from packages/backend/src/apps/google-forms/auth/verify-credentials.ts rename to packages/backend/src/apps/google-drive/auth/verify-credentials.js index 124e73c1..a636b72c 100644 --- a/packages/backend/src/apps/google-forms/auth/verify-credentials.ts +++ b/packages/backend/src/apps/google-drive/auth/verify-credentials.js @@ -1,25 +1,10 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -type TUser = { - displayName: string; - metadata: { - primary: boolean; - }; -}; - -type TEmailAddress = { - value: string; - metadata: { - primary: boolean; - }; -}; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const { data } = await $.http.post(`https://oauth2.googleapis.com/token`, { client_id: $.auth.data.clientId, client_secret: $.auth.data.clientSecret, @@ -36,10 +21,10 @@ const verifyCredentials = async ($: IGlobalVariable) => { const currentUser = await getCurrentUser($); const { displayName } = currentUser.names.find( - (name: TUser) => name.metadata.primary + (name) => name.metadata.primary ); const { value: email } = currentUser.emailAddresses.find( - (emailAddress: TEmailAddress) => emailAddress.metadata.primary + (emailAddress) => emailAddress.metadata.primary ); await $.auth.set({ diff --git a/packages/backend/src/apps/google-sheets/common/add-auth-header.ts b/packages/backend/src/apps/google-drive/common/add-auth-header.js similarity index 62% rename from packages/backend/src/apps/google-sheets/common/add-auth-header.ts rename to packages/backend/src/apps/google-drive/common/add-auth-header.js index 8e7798b8..02477aa4 100644 --- a/packages/backend/src/apps/google-sheets/common/add-auth-header.ts +++ b/packages/backend/src/apps/google-drive/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.accessToken) { requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/google-drive/common/auth-scope.ts b/packages/backend/src/apps/google-drive/common/auth-scope.js similarity index 85% rename from packages/backend/src/apps/google-drive/common/auth-scope.ts rename to packages/backend/src/apps/google-drive/common/auth-scope.js index 059f38ea..5bd60537 100644 --- a/packages/backend/src/apps/google-drive/common/auth-scope.ts +++ b/packages/backend/src/apps/google-drive/common/auth-scope.js @@ -1,4 +1,4 @@ -const authScope: string[] = [ +const authScope = [ 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile', diff --git a/packages/backend/src/apps/google-forms/common/get-current-user.ts b/packages/backend/src/apps/google-drive/common/get-current-user.js similarity index 63% rename from packages/backend/src/apps/google-forms/common/get-current-user.ts rename to packages/backend/src/apps/google-drive/common/get-current-user.js index 724fe1ac..2663ad20 100644 --- a/packages/backend/src/apps/google-forms/common/get-current-user.ts +++ b/packages/backend/src/apps/google-drive/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { +const getCurrentUser = async ($) => { const { data: currentUser } = await $.http.get( 'https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses' ); diff --git a/packages/backend/src/apps/google-drive/dynamic-data/index.js b/packages/backend/src/apps/google-drive/dynamic-data/index.js new file mode 100644 index 00000000..96e1d644 --- /dev/null +++ b/packages/backend/src/apps/google-drive/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listFolders from './list-folders/index.js'; +import listDrives from './list-drives/index.js'; + +export default [listFolders, listDrives]; diff --git a/packages/backend/src/apps/google-drive/dynamic-data/index.ts b/packages/backend/src/apps/google-drive/dynamic-data/index.ts deleted file mode 100644 index 83c7291d..00000000 --- a/packages/backend/src/apps/google-drive/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listFolders from './list-folders'; -import listDrives from './list-drives'; - -export default [listFolders, listDrives]; diff --git a/packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.ts b/packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.js similarity index 72% rename from packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.ts rename to packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.js index 4193dacd..2454433d 100644 --- a/packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.ts +++ b/packages/backend/src/apps/google-drive/dynamic-data/list-drives/index.js @@ -1,19 +1,15 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List drives', key: 'listDrives', - async run($: IGlobalVariable) { - const drives: { - data: IJSONObject[]; - } = { + async run($) { + const drives = { data: [{ value: null, name: 'My Google Drive' }], }; const params = { pageSize: 100, - pageToken: undefined as unknown as string, + pageToken: undefined, }; do { diff --git a/packages/backend/src/apps/google-drive/dynamic-data/list-folders/index.ts b/packages/backend/src/apps/google-drive/dynamic-data/list-folders/index.js similarity index 75% rename from packages/backend/src/apps/google-drive/dynamic-data/list-folders/index.ts rename to packages/backend/src/apps/google-drive/dynamic-data/list-folders/index.js index 99d26e1b..c52817bd 100644 --- a/packages/backend/src/apps/google-drive/dynamic-data/list-folders/index.ts +++ b/packages/backend/src/apps/google-drive/dynamic-data/list-folders/index.js @@ -1,20 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List folders', key: 'listFolders', - async run($: IGlobalVariable) { - const folders: { - data: IJSONObject[]; - } = { + async run($) { + const folders = { data: [], }; - const params: Record = { + const params = { q: `mimeType='application/vnd.google-apps.folder'`, orderBy: 'createdTime desc', - pageToken: undefined as unknown as string, + pageToken: undefined, pageSize: 1000, driveId: $.step.parameters.driveId, supportsAllDrives: true, diff --git a/packages/backend/src/apps/google-drive/index.d.ts b/packages/backend/src/apps/google-drive/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/google-drive/index.ts b/packages/backend/src/apps/google-drive/index.js similarity index 63% rename from packages/backend/src/apps/google-drive/index.ts rename to packages/backend/src/apps/google-drive/index.js index be166b40..f91e239b 100644 --- a/packages/backend/src/apps/google-drive/index.ts +++ b/packages/backend/src/apps/google-drive/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Google Drive', diff --git a/packages/backend/src/apps/google-drive/triggers/index.js b/packages/backend/src/apps/google-drive/triggers/index.js new file mode 100644 index 00000000..1f601968 --- /dev/null +++ b/packages/backend/src/apps/google-drive/triggers/index.js @@ -0,0 +1,6 @@ +import newFiles from './new-files/index.js'; +import newFilesInFolder from './new-files-in-folder/index.js'; +import newFolders from './new-folders/index.js'; +import updatedFiles from './updated-files/index.js'; + +export default [newFiles, newFilesInFolder, newFolders, updatedFiles]; diff --git a/packages/backend/src/apps/google-drive/triggers/index.ts b/packages/backend/src/apps/google-drive/triggers/index.ts deleted file mode 100644 index a6aaf4e2..00000000 --- a/packages/backend/src/apps/google-drive/triggers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import newFiles from './new-files'; -import newFilesInFolder from './new-files-in-folder'; -import newFolders from './new-folders'; -import updatedFiles from './updated-files'; - -export default [newFiles, newFilesInFolder, newFolders, updatedFiles]; diff --git a/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/index.ts b/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/index.js similarity index 88% rename from packages/backend/src/apps/google-drive/triggers/new-files-in-folder/index.ts rename to packages/backend/src/apps/google-drive/triggers/new-files-in-folder/index.js index d19916dc..182a08e1 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newFilesInFolder from './new-files-in-folder'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newFilesInFolder from './new-files-in-folder.js'; export default defineTrigger({ name: 'New files in folder', @@ -11,7 +11,7 @@ export default defineTrigger({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your file resides. If nothing is selected, then your personal Google Drive will be used.', @@ -30,7 +30,7 @@ export default defineTrigger({ { label: 'Folder', key: 'folderId', - type: 'dropdown' as const, + type: 'dropdown', required: false, dependsOn: ['parameters.driveId'], description: diff --git a/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/new-files-in-folder.ts b/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/new-files-in-folder.js similarity index 80% rename from packages/backend/src/apps/google-drive/triggers/new-files-in-folder/new-files-in-folder.ts rename to packages/backend/src/apps/google-drive/triggers/new-files-in-folder/new-files-in-folder.js index 039e27d3..fcad7f81 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/new-files-in-folder.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-files-in-folder/new-files-in-folder.js @@ -1,14 +1,12 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const newFilesInFolder = async ($: IGlobalVariable) => { +const newFilesInFolder = async ($) => { let q = "mimeType!='application/vnd.google-apps.folder'"; if ($.step.parameters.folderId) { q += ` and '${$.step.parameters.folderId}' in parents`; } else { q += ` and parents in 'root'`; } - const params: Record = { - pageToken: undefined as unknown as string, + const params = { + pageToken: undefined, orderBy: 'createdTime desc', fields: '*', pageSize: 1000, diff --git a/packages/backend/src/apps/google-drive/triggers/new-files/index.ts b/packages/backend/src/apps/google-drive/triggers/new-files/index.js similarity index 83% rename from packages/backend/src/apps/google-drive/triggers/new-files/index.ts rename to packages/backend/src/apps/google-drive/triggers/new-files/index.js index fae2921e..f5533ae4 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-files/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-files/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newFiles from './new-files'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newFiles from './new-files.js'; export default defineTrigger({ name: 'New files', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your file resides. If nothing is selected, then your personal Google Drive will be used.', diff --git a/packages/backend/src/apps/google-drive/triggers/new-files/new-files.ts b/packages/backend/src/apps/google-drive/triggers/new-files/new-files.js similarity index 78% rename from packages/backend/src/apps/google-drive/triggers/new-files/new-files.ts rename to packages/backend/src/apps/google-drive/triggers/new-files/new-files.js index 32f40089..dc0fce8d 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-files/new-files.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-files/new-files.js @@ -1,8 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const newFiles = async ($: IGlobalVariable) => { - const params: Record = { - pageToken: undefined as unknown as string, +const newFiles = async ($) => { + const params = { + pageToken: undefined, orderBy: 'createdTime desc', fields: '*', pageSize: 1000, diff --git a/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts b/packages/backend/src/apps/google-drive/triggers/new-folders/index.js similarity index 89% rename from packages/backend/src/apps/google-drive/triggers/new-folders/index.ts rename to packages/backend/src/apps/google-drive/triggers/new-folders/index.js index 24451508..d2b8c7e4 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-folders/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newFolders from './new-folders'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newFolders from './new-folders.js'; export default defineTrigger({ name: 'New folders', @@ -11,7 +11,7 @@ export default defineTrigger({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your file resides. If nothing is selected, then your personal Google Drive will be used.', @@ -30,7 +30,7 @@ export default defineTrigger({ { label: 'Folder', key: 'folderId', - type: 'dropdown' as const, + type: 'dropdown', required: false, dependsOn: ['parameters.driveId'], description: diff --git a/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts b/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.js similarity index 81% rename from packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts rename to packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.js index 226b6834..d371dfe8 100644 --- a/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts +++ b/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const newFolders = async ($: IGlobalVariable) => { +const newFolders = async ($) => { let q = "mimeType='application/vnd.google-apps.folder'"; if ($.step.parameters.folderId) { q += ` and '${$.step.parameters.folderId}' in parents`; @@ -8,8 +6,8 @@ const newFolders = async ($: IGlobalVariable) => { q += ` and parents in 'root'`; } - const params: Record = { - pageToken: undefined as unknown as string, + const params = { + pageToken: undefined, orderBy: 'createdTime desc', fields: '*', pageSize: 1000, diff --git a/packages/backend/src/apps/google-drive/triggers/updated-files/index.ts b/packages/backend/src/apps/google-drive/triggers/updated-files/index.js similarity index 89% rename from packages/backend/src/apps/google-drive/triggers/updated-files/index.ts rename to packages/backend/src/apps/google-drive/triggers/updated-files/index.js index 93490bc4..18d43334 100644 --- a/packages/backend/src/apps/google-drive/triggers/updated-files/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/updated-files/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import updatedFiles from './updated-files'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import updatedFiles from './updated-files.js'; export default defineTrigger({ name: 'Updated files', @@ -11,7 +11,7 @@ export default defineTrigger({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your file resides. If nothing is selected, then your personal Google Drive will be used.', @@ -30,7 +30,7 @@ export default defineTrigger({ { label: 'Folder', key: 'folderId', - type: 'dropdown' as const, + type: 'dropdown', required: false, dependsOn: ['parameters.driveId'], description: @@ -53,7 +53,7 @@ export default defineTrigger({ { label: 'Include Deleted', key: 'includeDeleted', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: true, description: 'Should this trigger also on files that are deleted?', diff --git a/packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.ts b/packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.js similarity index 83% rename from packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.ts rename to packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.js index 7c7c80a0..ab5cad1c 100644 --- a/packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.ts +++ b/packages/backend/src/apps/google-drive/triggers/updated-files/updated-files.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const updatedFiles = async ($: IGlobalVariable) => { +const updatedFiles = async ($) => { let q = `mimeType!='application/vnd.google-apps.folder'`; if ($.step.parameters.includeDeleted === false) { q += ` and trashed=${$.step.parameters.includeDeleted}`; @@ -12,8 +10,8 @@ const updatedFiles = async ($: IGlobalVariable) => { q += ` and parents in 'root'`; } - const params: Record = { - pageToken: undefined as unknown as string, + const params = { + pageToken: undefined, orderBy: 'modifiedTime desc', fields: '*', pageSize: 1000, diff --git a/packages/backend/src/apps/google-sheets/auth/generate-auth-url.ts b/packages/backend/src/apps/google-forms/auth/generate-auth-url.js similarity index 55% rename from packages/backend/src/apps/google-sheets/auth/generate-auth-url.ts rename to packages/backend/src/apps/google-forms/auth/generate-auth-url.js index ea89f8a4..c972ae16 100644 --- a/packages/backend/src/apps/google-sheets/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/google-forms/auth/generate-auth-url.js @@ -1,14 +1,13 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUri, prompt: 'select_account', scope: authScope.join(' '), diff --git a/packages/backend/src/apps/google-forms/auth/index.ts b/packages/backend/src/apps/google-forms/auth/index.js similarity index 74% rename from packages/backend/src/apps/google-forms/auth/index.ts rename to packages/backend/src/apps/google-forms/auth/index.js index 9d457fe0..dc570854 100644 --- a/packages/backend/src/apps/google-forms/auth/index.ts +++ b/packages/backend/src/apps/google-forms/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/google-forms/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/google-forms/auth/is-still-verified.js b/packages/backend/src/apps/google-forms/auth/is-still-verified.js new file mode 100644 index 00000000..68f4d7db --- /dev/null +++ b/packages/backend/src/apps/google-forms/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser.resourceName; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/google-forms/auth/is-still-verified.ts b/packages/backend/src/apps/google-forms/auth/is-still-verified.ts deleted file mode 100644 index c46fa18b..00000000 --- a/packages/backend/src/apps/google-forms/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser.resourceName; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/google-sheets/auth/refresh-token.ts b/packages/backend/src/apps/google-forms/auth/refresh-token.js similarity index 57% rename from packages/backend/src/apps/google-sheets/auth/refresh-token.ts rename to packages/backend/src/apps/google-forms/auth/refresh-token.js index 17d0c4cc..7c5b7020 100644 --- a/packages/backend/src/apps/google-sheets/auth/refresh-token.ts +++ b/packages/backend/src/apps/google-forms/auth/refresh-token.js @@ -1,13 +1,13 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -import authScope from '../common/auth-scope'; -const refreshToken = async ($: IGlobalVariable) => { +import authScope from '../common/auth-scope.js'; + +const refreshToken = async ($) => { const params = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/google-sheets/auth/verify-credentials.ts b/packages/backend/src/apps/google-forms/auth/verify-credentials.js similarity index 62% rename from packages/backend/src/apps/google-sheets/auth/verify-credentials.ts rename to packages/backend/src/apps/google-forms/auth/verify-credentials.js index 124e73c1..a636b72c 100644 --- a/packages/backend/src/apps/google-sheets/auth/verify-credentials.ts +++ b/packages/backend/src/apps/google-forms/auth/verify-credentials.js @@ -1,25 +1,10 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -type TUser = { - displayName: string; - metadata: { - primary: boolean; - }; -}; - -type TEmailAddress = { - value: string; - metadata: { - primary: boolean; - }; -}; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const { data } = await $.http.post(`https://oauth2.googleapis.com/token`, { client_id: $.auth.data.clientId, client_secret: $.auth.data.clientSecret, @@ -36,10 +21,10 @@ const verifyCredentials = async ($: IGlobalVariable) => { const currentUser = await getCurrentUser($); const { displayName } = currentUser.names.find( - (name: TUser) => name.metadata.primary + (name) => name.metadata.primary ); const { value: email } = currentUser.emailAddresses.find( - (emailAddress: TEmailAddress) => emailAddress.metadata.primary + (emailAddress) => emailAddress.metadata.primary ); await $.auth.set({ diff --git a/packages/backend/src/apps/google-forms/common/add-auth-header.ts b/packages/backend/src/apps/google-forms/common/add-auth-header.js similarity index 65% rename from packages/backend/src/apps/google-forms/common/add-auth-header.ts rename to packages/backend/src/apps/google-forms/common/add-auth-header.js index 12bb4a62..6c86424c 100644 --- a/packages/backend/src/apps/google-forms/common/add-auth-header.ts +++ b/packages/backend/src/apps/google-forms/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if (requestConfig.headers && $.auth.data?.accessToken) { requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/google-forms/common/auth-scope.ts b/packages/backend/src/apps/google-forms/common/auth-scope.js similarity index 89% rename from packages/backend/src/apps/google-forms/common/auth-scope.ts rename to packages/backend/src/apps/google-forms/common/auth-scope.js index 397255c3..655ae747 100644 --- a/packages/backend/src/apps/google-forms/common/auth-scope.ts +++ b/packages/backend/src/apps/google-forms/common/auth-scope.js @@ -1,4 +1,4 @@ -const authScope: string[] = [ +const authScope = [ 'https://www.googleapis.com/auth/forms.body.readonly', 'https://www.googleapis.com/auth/forms.responses.readonly', 'https://www.googleapis.com/auth/drive.readonly', diff --git a/packages/backend/src/apps/google-calendar/common/get-current-user.ts b/packages/backend/src/apps/google-forms/common/get-current-user.js similarity index 63% rename from packages/backend/src/apps/google-calendar/common/get-current-user.ts rename to packages/backend/src/apps/google-forms/common/get-current-user.js index 724fe1ac..2663ad20 100644 --- a/packages/backend/src/apps/google-calendar/common/get-current-user.ts +++ b/packages/backend/src/apps/google-forms/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { +const getCurrentUser = async ($) => { const { data: currentUser } = await $.http.get( 'https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses' ); diff --git a/packages/backend/src/apps/google-forms/dynamic-data/index.js b/packages/backend/src/apps/google-forms/dynamic-data/index.js new file mode 100644 index 00000000..0a58430e --- /dev/null +++ b/packages/backend/src/apps/google-forms/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listForms from './list-forms/index.js'; + +export default [listForms]; diff --git a/packages/backend/src/apps/google-forms/dynamic-data/index.ts b/packages/backend/src/apps/google-forms/dynamic-data/index.ts deleted file mode 100644 index cb6cd053..00000000 --- a/packages/backend/src/apps/google-forms/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listForms from './list-forms'; - -export default [listForms]; diff --git a/packages/backend/src/apps/google-forms/dynamic-data/list-forms/index.ts b/packages/backend/src/apps/google-forms/dynamic-data/list-forms/index.js similarity index 59% rename from packages/backend/src/apps/google-forms/dynamic-data/list-forms/index.ts rename to packages/backend/src/apps/google-forms/dynamic-data/list-forms/index.js index 8acd0298..00250819 100644 --- a/packages/backend/src/apps/google-forms/dynamic-data/list-forms/index.ts +++ b/packages/backend/src/apps/google-forms/dynamic-data/list-forms/index.js @@ -1,24 +1,23 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List forms', key: 'listForms', - async run($: IGlobalVariable) { - const forms: { - data: IJSONObject[]; - } = { + async run($) { + const forms = { data: [], }; const params = { q: `mimeType='application/vnd.google-apps.form'`, spaces: 'drive', - pageToken: undefined as unknown as string, + pageToken: undefined, }; do { - const { data } = await $.http.get(`https://www.googleapis.com/drive/v3/files`, { params }); + const { data } = await $.http.get( + `https://www.googleapis.com/drive/v3/files`, + { params } + ); params.pageToken = data.nextPageToken; for (const file of data.files) { diff --git a/packages/backend/src/apps/google-forms/index.d.ts b/packages/backend/src/apps/google-forms/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/google-forms/index.ts b/packages/backend/src/apps/google-forms/index.js similarity index 64% rename from packages/backend/src/apps/google-forms/index.ts rename to packages/backend/src/apps/google-forms/index.js index 2114432f..d8170e73 100644 --- a/packages/backend/src/apps/google-forms/index.ts +++ b/packages/backend/src/apps/google-forms/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Google Forms', diff --git a/packages/backend/src/apps/google-forms/triggers/index.js b/packages/backend/src/apps/google-forms/triggers/index.js new file mode 100644 index 00000000..41e90487 --- /dev/null +++ b/packages/backend/src/apps/google-forms/triggers/index.js @@ -0,0 +1,3 @@ +import newFormResponses from './new-form-responses/index.js'; + +export default [newFormResponses]; diff --git a/packages/backend/src/apps/google-forms/triggers/index.ts b/packages/backend/src/apps/google-forms/triggers/index.ts deleted file mode 100644 index 7c035992..00000000 --- a/packages/backend/src/apps/google-forms/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import newFormResponses from './new-form-responses'; - -export default [newFormResponses]; diff --git a/packages/backend/src/apps/google-forms/triggers/new-form-responses/index.ts b/packages/backend/src/apps/google-forms/triggers/new-form-responses/index.js similarity index 80% rename from packages/backend/src/apps/google-forms/triggers/new-form-responses/index.ts rename to packages/backend/src/apps/google-forms/triggers/new-form-responses/index.js index bfbb772e..ac16701d 100644 --- a/packages/backend/src/apps/google-forms/triggers/new-form-responses/index.ts +++ b/packages/backend/src/apps/google-forms/triggers/new-form-responses/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newFormResponses from './new-form-responses'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newFormResponses from './new-form-responses.js'; export default defineTrigger({ name: 'New form responses', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Form', key: 'formId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Pick a form to receive form responses.', variables: false, diff --git a/packages/backend/src/apps/google-forms/triggers/new-form-responses/new-form-responses.ts b/packages/backend/src/apps/google-forms/triggers/new-form-responses/new-form-responses.js similarity index 78% rename from packages/backend/src/apps/google-forms/triggers/new-form-responses/new-form-responses.ts rename to packages/backend/src/apps/google-forms/triggers/new-form-responses/new-form-responses.js index 97c6fae8..26487b41 100644 --- a/packages/backend/src/apps/google-forms/triggers/new-form-responses/new-form-responses.ts +++ b/packages/backend/src/apps/google-forms/triggers/new-form-responses/new-form-responses.js @@ -1,8 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const newResponses = async ($: IGlobalVariable) => { +const newResponses = async ($) => { const params = { - pageToken: undefined as unknown as string, + pageToken: undefined, }; do { diff --git a/packages/backend/src/apps/google-sheets/actions/create-spreadsheet-row/index.ts b/packages/backend/src/apps/google-sheets/actions/create-spreadsheet-row/index.js similarity index 92% rename from packages/backend/src/apps/google-sheets/actions/create-spreadsheet-row/index.ts rename to packages/backend/src/apps/google-sheets/actions/create-spreadsheet-row/index.js index b410ddda..be18a160 100644 --- a/packages/backend/src/apps/google-sheets/actions/create-spreadsheet-row/index.ts +++ b/packages/backend/src/apps/google-sheets/actions/create-spreadsheet-row/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create spreadsheet row', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your spreadsheet resides. If nothing is selected, then your personal Google Drive will be used.', @@ -27,7 +27,7 @@ export default defineAction({ { label: 'Spreadsheet', key: 'spreadsheetId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.driveId'], description: 'The spreadsheets in your Google Drive.', @@ -50,7 +50,7 @@ export default defineAction({ { label: 'Worksheet', key: 'worksheetId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.spreadsheetId'], description: 'The worksheets in your selected spreadsheet.', @@ -104,7 +104,7 @@ export default defineAction({ const range = sheetName; const dataValues = Object.entries($.step.parameters) - .filter((entry: [string, string]) => entry[0].startsWith('header-')) + .filter((entry) => entry[0].startsWith('header-')) .map((value) => value[1]); const values = [dataValues]; diff --git a/packages/backend/src/apps/google-sheets/actions/create-spreadsheet/index.ts b/packages/backend/src/apps/google-sheets/actions/create-spreadsheet/index.js similarity index 87% rename from packages/backend/src/apps/google-sheets/actions/create-spreadsheet/index.ts rename to packages/backend/src/apps/google-sheets/actions/create-spreadsheet/index.js index b072cb7a..bf269200 100644 --- a/packages/backend/src/apps/google-sheets/actions/create-spreadsheet/index.ts +++ b/packages/backend/src/apps/google-sheets/actions/create-spreadsheet/index.js @@ -1,9 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; - -type THeaders = { - __id: string; - header: string; -}[]; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create spreadsheet', @@ -14,7 +9,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -22,7 +17,7 @@ export default defineAction({ { label: 'Spreadsheet to copy', key: 'spreadsheetId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Choose a spreadsheet to copy its data.', variables: true, @@ -40,7 +35,7 @@ export default defineAction({ { label: 'Headers', key: 'headers', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: 'These headers are ignored if "Spreadsheet to Copy" is selected.', @@ -48,7 +43,7 @@ export default defineAction({ { label: 'Header', key: 'header', - type: 'string' as const, + type: 'string', required: true, variables: true, }, @@ -69,7 +64,7 @@ export default defineAction({ raw: data, }); } else { - const headers = $.step.parameters.headers as THeaders; + const headers = $.step.parameters.headers; const values = headers.map((entry) => entry.header); const spreadsheetBody = { diff --git a/packages/backend/src/apps/google-sheets/actions/create-worksheet/index.ts b/packages/backend/src/apps/google-sheets/actions/create-worksheet/index.js similarity index 88% rename from packages/backend/src/apps/google-sheets/actions/create-worksheet/index.ts rename to packages/backend/src/apps/google-sheets/actions/create-worksheet/index.js index 164ef041..ceed6f24 100644 --- a/packages/backend/src/apps/google-sheets/actions/create-worksheet/index.ts +++ b/packages/backend/src/apps/google-sheets/actions/create-worksheet/index.js @@ -1,14 +1,4 @@ -import { IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; - -type THeaders = { - __id: string; - header: string; -}[]; - -type TBody = { - requests: IJSONObject[]; -}; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create worksheet', @@ -19,7 +9,7 @@ export default defineAction({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your spreadsheet resides. If nothing is selected, then your personal Google Drive will be used.', @@ -38,7 +28,7 @@ export default defineAction({ { label: 'Spreadsheet', key: 'spreadsheetId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.driveId'], variables: true, @@ -60,7 +50,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -68,13 +58,13 @@ export default defineAction({ { label: 'Headers', key: 'headers', - type: 'dynamic' as const, + type: 'dynamic', required: false, fields: [ { label: 'Header', key: 'header', - type: 'string' as const, + type: 'string', required: true, variables: true, }, @@ -83,7 +73,7 @@ export default defineAction({ { label: 'Overwrite', key: 'overwrite', - type: 'dropdown' as const, + type: 'dropdown', required: false, value: false, description: @@ -110,10 +100,10 @@ export default defineAction({ const selectedSheet = sheets.find( (sheet) => sheet.properties.title === $.step.parameters.title ); - const headers = $.step.parameters.headers as THeaders; + const headers = $.step.parameters.headers; const values = headers.map((entry) => entry.header); - const body: TBody = { + const body = { requests: [ { addSheet: { diff --git a/packages/backend/src/apps/google-sheets/actions/index.js b/packages/backend/src/apps/google-sheets/actions/index.js new file mode 100644 index 00000000..b5143cc2 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/actions/index.js @@ -0,0 +1,5 @@ +import createSpreadsheet from './create-spreadsheet/index.js'; +import createSpreadsheetRow from './create-spreadsheet-row/index.js'; +import createWorksheet from './create-worksheet/index.js'; + +export default [createSpreadsheet, createSpreadsheetRow, createWorksheet]; diff --git a/packages/backend/src/apps/google-sheets/actions/index.ts b/packages/backend/src/apps/google-sheets/actions/index.ts deleted file mode 100644 index 5608ae22..00000000 --- a/packages/backend/src/apps/google-sheets/actions/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import createSpreadsheet from './create-spreadsheet'; -import createSpreadsheetRow from './create-spreadsheet-row'; -import createWorksheet from './create-worksheet'; - -export default [createSpreadsheet, createSpreadsheetRow, createWorksheet]; diff --git a/packages/backend/src/apps/google-calendar/auth/generate-auth-url.ts b/packages/backend/src/apps/google-sheets/auth/generate-auth-url.js similarity index 55% rename from packages/backend/src/apps/google-calendar/auth/generate-auth-url.ts rename to packages/backend/src/apps/google-sheets/auth/generate-auth-url.js index ea89f8a4..c972ae16 100644 --- a/packages/backend/src/apps/google-calendar/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/google-sheets/auth/generate-auth-url.js @@ -1,14 +1,13 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUri, prompt: 'select_account', scope: authScope.join(' '), diff --git a/packages/backend/src/apps/google-sheets/auth/index.ts b/packages/backend/src/apps/google-sheets/auth/index.js similarity index 74% rename from packages/backend/src/apps/google-sheets/auth/index.ts rename to packages/backend/src/apps/google-sheets/auth/index.js index 5e52e35a..45ea4058 100644 --- a/packages/backend/src/apps/google-sheets/auth/index.ts +++ b/packages/backend/src/apps/google-sheets/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/google-sheets/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/google-sheets/auth/is-still-verified.js b/packages/backend/src/apps/google-sheets/auth/is-still-verified.js new file mode 100644 index 00000000..68f4d7db --- /dev/null +++ b/packages/backend/src/apps/google-sheets/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser.resourceName; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/google-sheets/auth/is-still-verified.ts b/packages/backend/src/apps/google-sheets/auth/is-still-verified.ts deleted file mode 100644 index c46fa18b..00000000 --- a/packages/backend/src/apps/google-sheets/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser.resourceName; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/google-drive/auth/refresh-token.ts b/packages/backend/src/apps/google-sheets/auth/refresh-token.js similarity index 57% rename from packages/backend/src/apps/google-drive/auth/refresh-token.ts rename to packages/backend/src/apps/google-sheets/auth/refresh-token.js index 17d0c4cc..7c5b7020 100644 --- a/packages/backend/src/apps/google-drive/auth/refresh-token.ts +++ b/packages/backend/src/apps/google-sheets/auth/refresh-token.js @@ -1,13 +1,13 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -import authScope from '../common/auth-scope'; -const refreshToken = async ($: IGlobalVariable) => { +import authScope from '../common/auth-scope.js'; + +const refreshToken = async ($) => { const params = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/google-calendar/auth/verify-credentials.ts b/packages/backend/src/apps/google-sheets/auth/verify-credentials.js similarity index 62% rename from packages/backend/src/apps/google-calendar/auth/verify-credentials.ts rename to packages/backend/src/apps/google-sheets/auth/verify-credentials.js index 124e73c1..a636b72c 100644 --- a/packages/backend/src/apps/google-calendar/auth/verify-credentials.ts +++ b/packages/backend/src/apps/google-sheets/auth/verify-credentials.js @@ -1,25 +1,10 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -type TUser = { - displayName: string; - metadata: { - primary: boolean; - }; -}; - -type TEmailAddress = { - value: string; - metadata: { - primary: boolean; - }; -}; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const { data } = await $.http.post(`https://oauth2.googleapis.com/token`, { client_id: $.auth.data.clientId, client_secret: $.auth.data.clientSecret, @@ -36,10 +21,10 @@ const verifyCredentials = async ($: IGlobalVariable) => { const currentUser = await getCurrentUser($); const { displayName } = currentUser.names.find( - (name: TUser) => name.metadata.primary + (name) => name.metadata.primary ); const { value: email } = currentUser.emailAddresses.find( - (emailAddress: TEmailAddress) => emailAddress.metadata.primary + (emailAddress) => emailAddress.metadata.primary ); await $.auth.set({ diff --git a/packages/backend/src/apps/google-drive/common/add-auth-header.ts b/packages/backend/src/apps/google-sheets/common/add-auth-header.js similarity index 62% rename from packages/backend/src/apps/google-drive/common/add-auth-header.ts rename to packages/backend/src/apps/google-sheets/common/add-auth-header.js index 8e7798b8..02477aa4 100644 --- a/packages/backend/src/apps/google-drive/common/add-auth-header.ts +++ b/packages/backend/src/apps/google-sheets/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.accessToken) { requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/google-sheets/common/auth-scope.ts b/packages/backend/src/apps/google-sheets/common/auth-scope.js similarity index 88% rename from packages/backend/src/apps/google-sheets/common/auth-scope.ts rename to packages/backend/src/apps/google-sheets/common/auth-scope.js index b4b8fdb3..6c22818a 100644 --- a/packages/backend/src/apps/google-sheets/common/auth-scope.ts +++ b/packages/backend/src/apps/google-sheets/common/auth-scope.js @@ -1,4 +1,4 @@ -const authScope: string[] = [ +const authScope = [ 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/userinfo.email', diff --git a/packages/backend/src/apps/google-drive/common/get-current-user.ts b/packages/backend/src/apps/google-sheets/common/get-current-user.js similarity index 63% rename from packages/backend/src/apps/google-drive/common/get-current-user.ts rename to packages/backend/src/apps/google-sheets/common/get-current-user.js index 724fe1ac..2663ad20 100644 --- a/packages/backend/src/apps/google-drive/common/get-current-user.ts +++ b/packages/backend/src/apps/google-sheets/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { +const getCurrentUser = async ($) => { const { data: currentUser } = await $.http.get( 'https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses' ); diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/index.js b/packages/backend/src/apps/google-sheets/dynamic-data/index.js new file mode 100644 index 00000000..e0d6efac --- /dev/null +++ b/packages/backend/src/apps/google-sheets/dynamic-data/index.js @@ -0,0 +1,5 @@ +import listDrives from './list-drives/index.js'; +import listSpreadsheets from './list-spreadsheets/index.js'; +import listWorksheets from './list-worksheets/index.js'; + +export default [listDrives, listSpreadsheets, listWorksheets]; diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/index.ts deleted file mode 100644 index ac008c09..00000000 --- a/packages/backend/src/apps/google-sheets/dynamic-data/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import listDrives from './list-drives'; -import listSpreadsheets from './list-spreadsheets'; -import listWorksheets from './list-worksheets'; - -export default [listDrives, listSpreadsheets, listWorksheets]; diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.js similarity index 74% rename from packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.ts rename to packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.js index ea68c599..6d34bb70 100644 --- a/packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.ts +++ b/packages/backend/src/apps/google-sheets/dynamic-data/list-drives/index.js @@ -1,19 +1,15 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List drives', key: 'listDrives', - async run($: IGlobalVariable) { - const drives: { - data: IJSONObject[]; - } = { + async run($) { + const drives = { data: [{ value: null, name: 'My Google Drive' }], }; const params = { pageSize: 100, - pageToken: undefined as unknown as string, + pageToken: undefined, }; do { diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.js similarity index 76% rename from packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.ts rename to packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.js index e9c7f3cc..97568c89 100644 --- a/packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.ts +++ b/packages/backend/src/apps/google-sheets/dynamic-data/list-spreadsheets/index.js @@ -1,20 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List spreadsheets', key: 'listSpreadsheets', - async run($: IGlobalVariable) { - const spreadsheets: { - data: IJSONObject[]; - } = { + async run($) { + const spreadsheets = { data: [], }; - const params: Record = { + const params = { q: `mimeType='application/vnd.google-apps.spreadsheet'`, pageSize: 100, - pageToken: undefined as unknown as string, + pageToken: undefined, orderBy: 'createdTime desc', driveId: $.step.parameters.driveId, supportsAllDrives: true, diff --git a/packages/backend/src/apps/google-sheets/dynamic-data/list-worksheets/index.ts b/packages/backend/src/apps/google-sheets/dynamic-data/list-worksheets/index.js similarity index 65% rename from packages/backend/src/apps/google-sheets/dynamic-data/list-worksheets/index.ts rename to packages/backend/src/apps/google-sheets/dynamic-data/list-worksheets/index.js index b9aa5379..aee56924 100644 --- a/packages/backend/src/apps/google-sheets/dynamic-data/list-worksheets/index.ts +++ b/packages/backend/src/apps/google-sheets/dynamic-data/list-worksheets/index.js @@ -1,15 +1,11 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List worksheets', key: 'listWorksheets', - async run($: IGlobalVariable) { - const spreadsheetId = $.step.parameters.spreadsheetId as string; + async run($) { + const spreadsheetId = $.step.parameters.spreadsheetId; - const worksheets: { - data: IJSONObject[]; - } = { + const worksheets = { data: [], }; @@ -17,8 +13,8 @@ export default { return worksheets; } - const params: Record = { - pageToken: undefined as unknown as string, + const params = { + pageToken: undefined, }; do { diff --git a/packages/backend/src/apps/google-sheets/dynamic-fields/index.js b/packages/backend/src/apps/google-sheets/dynamic-fields/index.js new file mode 100644 index 00000000..0a8bc04b --- /dev/null +++ b/packages/backend/src/apps/google-sheets/dynamic-fields/index.js @@ -0,0 +1,3 @@ +import listSheetHeaders from './list-sheet-headers/index.js'; + +export default [listSheetHeaders]; diff --git a/packages/backend/src/apps/google-sheets/dynamic-fields/index.ts b/packages/backend/src/apps/google-sheets/dynamic-fields/index.ts deleted file mode 100644 index 7f486818..00000000 --- a/packages/backend/src/apps/google-sheets/dynamic-fields/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listSheetHeaders from './list-sheet-headers'; - -export default [listSheetHeaders]; diff --git a/packages/backend/src/apps/google-sheets/dynamic-fields/list-sheet-headers/index.js b/packages/backend/src/apps/google-sheets/dynamic-fields/list-sheet-headers/index.js new file mode 100644 index 00000000..9751818c --- /dev/null +++ b/packages/backend/src/apps/google-sheets/dynamic-fields/list-sheet-headers/index.js @@ -0,0 +1,59 @@ +const hasValue = (value) => value !== null && value !== undefined; + +export default { + name: 'List Sheet Headers', + key: 'listSheetHeaders', + + async run($) { + if ( + !hasValue($.step.parameters.spreadsheetId) || + !hasValue($.step.parameters.worksheetId) + ) { + return; + } + + const { + data: { sheets }, + } = + (await $.http.get) < + TSheetsResponse > + `/v4/spreadsheets/${$.step.parameters.spreadsheetId}`; + + const selectedSheet = sheets.find( + (sheet) => sheet.properties.sheetId === $.step.parameters.worksheetId + ); + + if (!selectedSheet) return; + + const sheetName = selectedSheet.properties.title; + + const range = `${sheetName}!1:1`; + + const params = { + majorDimension: 'ROWS', + }; + + const { data } = + (await $.http.get) < + TSheetsValueResponse > + (`/v4/spreadsheets/${$.step.parameters.spreadsheetId}/values/${range}`, + { + params, + }); + + if (!data.values) { + return; + } + + const result = data.values[0].map((item, index) => ({ + label: item, + key: `header-${index}`, + type: 'string', + required: false, + value: item, + variables: true, + })); + + return result; + }, +}; diff --git a/packages/backend/src/apps/google-sheets/dynamic-fields/list-sheet-headers/index.ts b/packages/backend/src/apps/google-sheets/dynamic-fields/list-sheet-headers/index.ts deleted file mode 100644 index 4a3f9854..00000000 --- a/packages/backend/src/apps/google-sheets/dynamic-fields/list-sheet-headers/index.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type TSheetsResponse = { - sheets: { - properties: { - sheetId: string; - title: string; - }; - }[]; -}; - -type TSheetsValueResponse = { - majorDimension: string; - range: string; - values: string[][]; -}; - -const hasValue = (value: any) => value !== null && value !== undefined; - -export default { - name: 'List Sheet Headers', - key: 'listSheetHeaders', - - async run($: IGlobalVariable) { - if (!hasValue($.step.parameters.spreadsheetId) || !hasValue($.step.parameters.worksheetId)) { - return; - } - - const { - data: { sheets }, - } = await $.http.get( - `/v4/spreadsheets/${$.step.parameters.spreadsheetId}` - ); - - const selectedSheet = sheets.find( - (sheet) => sheet.properties.sheetId === $.step.parameters.worksheetId - ); - - if (!selectedSheet) return; - - const sheetName = selectedSheet.properties.title; - - const range = `${sheetName}!1:1`; - - const params: Record = { - majorDimension: 'ROWS', - }; - - const { data } = await $.http.get( - `/v4/spreadsheets/${$.step.parameters.spreadsheetId}/values/${range}`, - { - params, - } - ); - - if (!data.values) { - return; - } - - const result = data.values[0].map((item: string, index: number) => ({ - label: item, - key: `header-${index}`, - type: 'string' as const, - required: false, - value: item, - variables: true, - })); - - return result; - }, -}; diff --git a/packages/backend/src/apps/google-sheets/index.d.ts b/packages/backend/src/apps/google-sheets/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/google-sheets/index.ts b/packages/backend/src/apps/google-sheets/index.js similarity index 58% rename from packages/backend/src/apps/google-sheets/index.ts rename to packages/backend/src/apps/google-sheets/index.js index a8805ffd..90c53132 100644 --- a/packages/backend/src/apps/google-sheets/index.ts +++ b/packages/backend/src/apps/google-sheets/index.js @@ -1,10 +1,10 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; -import dynamicFields from './dynamic-fields'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; +import dynamicFields from './dynamic-fields/index.js'; export default defineApp({ name: 'Google Sheets', diff --git a/packages/backend/src/apps/google-sheets/triggers/index.js b/packages/backend/src/apps/google-sheets/triggers/index.js new file mode 100644 index 00000000..1d0683c7 --- /dev/null +++ b/packages/backend/src/apps/google-sheets/triggers/index.js @@ -0,0 +1,5 @@ +import newSpreadsheets from './new-spreadsheets/index.js'; +import newWorksheets from './new-worksheets/index.js'; +import newSpreadsheetRows from './new-spreadsheet-rows/index.js'; + +export default [newSpreadsheets, newWorksheets, newSpreadsheetRows]; diff --git a/packages/backend/src/apps/google-sheets/triggers/index.ts b/packages/backend/src/apps/google-sheets/triggers/index.ts deleted file mode 100644 index cd9d065a..00000000 --- a/packages/backend/src/apps/google-sheets/triggers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import newSpreadsheets from './new-spreadsheets'; -import newWorksheets from './new-worksheets'; -import newSpreadsheetRows from './new-spreadsheet-rows'; - -export default [newSpreadsheets, newWorksheets, newSpreadsheetRows]; diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.js similarity index 89% rename from packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.ts rename to packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.js index 53e06847..164e79fd 100644 --- a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.ts +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newSpreadsheetRows from './new-spreadsheet-rows'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newSpreadsheetRows from './new-spreadsheet-rows.js'; export default defineTrigger({ name: 'New spreadsheet rows', @@ -11,7 +11,7 @@ export default defineTrigger({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your spreadsheet resides. If nothing is selected, then your personal Google Drive will be used.', @@ -30,7 +30,7 @@ export default defineTrigger({ { label: 'Spreadsheet', key: 'spreadsheetId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.driveId'], description: 'The spreadsheets in your Google Drive.', @@ -53,7 +53,7 @@ export default defineTrigger({ { label: 'Worksheet', key: 'worksheetId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.spreadsheetId'], description: diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.js similarity index 67% rename from packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.ts rename to packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.js index ca2f9ced..54db73dd 100644 --- a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.ts +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheet-rows/new-spreadsheet-rows.js @@ -1,20 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type TSheetsResponse = { - sheets: { - properties: { - sheetId: string; - title: string; - }; - }[]; -}; - -const newSpreadsheetRows = async ($: IGlobalVariable) => { +const newSpreadsheetRows = async ($) => { const { data: { sheets }, - } = await $.http.get( - `/v4/spreadsheets/${$.step.parameters.spreadsheetId}` - ); + } = + (await $.http.get) < + TSheetsResponse > + `/v4/spreadsheets/${$.step.parameters.spreadsheetId}`; const selectedSheet = sheets.find( (sheet) => sheet.properties.sheetId === $.step.parameters.worksheetId diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.js similarity index 82% rename from packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.ts rename to packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.js index 5af06fd9..861bdeec 100644 --- a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.ts +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newSpreadsheets from './new-spreadsheets'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newSpreadsheets from './new-spreadsheets.js'; export default defineTrigger({ name: 'New spreadsheets', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your spreadsheet resides. If nothing is selected, then your personal Google Drive will be used.', diff --git a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.ts b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.js similarity index 79% rename from packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.ts rename to packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.js index 1a9dff6f..f3d2c4a2 100644 --- a/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.ts +++ b/packages/backend/src/apps/google-sheets/triggers/new-spreadsheets/new-spreadsheets.js @@ -1,8 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const newSpreadsheets = async ($: IGlobalVariable) => { - const params: Record = { - pageToken: undefined as unknown as string, +const newSpreadsheets = async ($) => { + const params = { + pageToken: undefined, orderBy: 'createdTime desc', q: `mimeType='application/vnd.google-apps.spreadsheet'`, fields: '*', diff --git a/packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.ts b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.js similarity index 87% rename from packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.ts rename to packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.js index 511eb685..8933ade6 100644 --- a/packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.ts +++ b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newWorksheets from './new-worksheets'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newWorksheets from './new-worksheets.js'; export default defineTrigger({ name: 'New worksheets', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Drive', key: 'driveId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The Google Drive where your spreadsheet resides. If nothing is selected, then your personal Google Drive will be used.', @@ -29,7 +29,7 @@ export default defineTrigger({ { label: 'Spreadsheet', key: 'spreadsheetId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.driveId'], description: 'The spreadsheets in your Google Drive.', diff --git a/packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.ts b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.js similarity index 76% rename from packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.ts rename to packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.js index e2c7ef76..bfc57cc7 100644 --- a/packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.ts +++ b/packages/backend/src/apps/google-sheets/triggers/new-worksheets/new-worksheets.js @@ -1,8 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const newWorksheets = async ($: IGlobalVariable) => { +const newWorksheets = async ($) => { const params = { - pageToken: undefined as unknown as string, + pageToken: undefined, }; do { diff --git a/packages/backend/src/apps/helix/actions/index.js b/packages/backend/src/apps/helix/actions/index.js new file mode 100644 index 00000000..8c1bb49b --- /dev/null +++ b/packages/backend/src/apps/helix/actions/index.js @@ -0,0 +1,3 @@ +import newChat from './new-chat/index.js'; + +export default [newChat]; diff --git a/packages/backend/src/apps/helix/actions/index.ts b/packages/backend/src/apps/helix/actions/index.ts deleted file mode 100644 index 92ff1f82..00000000 --- a/packages/backend/src/apps/helix/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import newChat from './new-chat'; - -export default [newChat]; diff --git a/packages/backend/src/apps/helix/actions/new-chat/index.ts b/packages/backend/src/apps/helix/actions/new-chat/index.js similarity index 87% rename from packages/backend/src/apps/helix/actions/new-chat/index.ts rename to packages/backend/src/apps/helix/actions/new-chat/index.js index b33b2325..c9a86ecf 100644 --- a/packages/backend/src/apps/helix/actions/new-chat/index.ts +++ b/packages/backend/src/apps/helix/actions/new-chat/index.js @@ -1,5 +1,5 @@ import FormData from 'form-data'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'New chat', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, description: 'Prompt to start the chat with.', variables: true, @@ -18,7 +18,7 @@ export default defineAction({ async run($) { const formData = new FormData(); - formData.append('input', $.step.parameters.input as string); + formData.append('input', $.step.parameters.input); formData.append('mode', 'inference'); formData.append('type', 'text'); diff --git a/packages/backend/src/apps/helix/auth/index.ts b/packages/backend/src/apps/helix/auth/index.js similarity index 81% rename from packages/backend/src/apps/helix/auth/index.ts rename to packages/backend/src/apps/helix/auth/index.js index bfc045b4..3850ff20 100644 --- a/packages/backend/src/apps/helix/auth/index.ts +++ b/packages/backend/src/apps/helix/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'instanceUrl', label: 'Helix instance URL', - type: 'string' as const, + type: 'string', required: false, readOnly: false, value: 'https://app.tryhelix.ai', @@ -30,7 +30,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/helix/auth/is-still-verified.js b/packages/backend/src/apps/helix/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/helix/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/helix/auth/is-still-verified.ts b/packages/backend/src/apps/helix/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/helix/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/helix/auth/verify-credentials.ts b/packages/backend/src/apps/helix/auth/verify-credentials.js similarity index 56% rename from packages/backend/src/apps/helix/auth/verify-credentials.ts rename to packages/backend/src/apps/helix/auth/verify-credentials.js index 63c122ef..c8f53459 100644 --- a/packages/backend/src/apps/helix/auth/verify-credentials.ts +++ b/packages/backend/src/apps/helix/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { await $.http.get('/api/v1/sessions'); await $.auth.set({ diff --git a/packages/backend/src/apps/helix/common/add-auth-header.ts b/packages/backend/src/apps/helix/common/add-auth-header.js similarity index 65% rename from packages/backend/src/apps/helix/common/add-auth-header.ts rename to packages/backend/src/apps/helix/common/add-auth-header.js index f4d16fd4..59ecf6b0 100644 --- a/packages/backend/src/apps/helix/common/add-auth-header.ts +++ b/packages/backend/src/apps/helix/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.apiKey) { const authorizationHeader = `Bearer ${$.auth.data.apiKey}`; requestConfig.headers.Authorization = authorizationHeader; diff --git a/packages/backend/src/apps/helix/common/set-base-url.js b/packages/backend/src/apps/helix/common/set-base-url.js new file mode 100644 index 00000000..135149b1 --- /dev/null +++ b/packages/backend/src/apps/helix/common/set-base-url.js @@ -0,0 +1,11 @@ +const setBaseUrl = ($, requestConfig) => { + if ($.auth.data.instanceUrl) { + requestConfig.baseURL = $.auth.data.instanceUrl; + } else if ($.app.apiBaseUrl) { + requestConfig.baseURL = $.app.apiBaseUrl; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/helix/common/set-base-url.ts b/packages/backend/src/apps/helix/common/set-base-url.ts deleted file mode 100644 index 8aef4b23..00000000 --- a/packages/backend/src/apps/helix/common/set-base-url.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data.instanceUrl) { - requestConfig.baseURL = $.auth.data.instanceUrl as string; - } else if ($.app.apiBaseUrl) { - requestConfig.baseURL = $.app.apiBaseUrl as string; - } - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/helix/index.d.ts b/packages/backend/src/apps/helix/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/helix/index.ts b/packages/backend/src/apps/helix/index.js similarity index 61% rename from packages/backend/src/apps/helix/index.ts rename to packages/backend/src/apps/helix/index.js index 727cc56a..17fdb354 100644 --- a/packages/backend/src/apps/helix/index.ts +++ b/packages/backend/src/apps/helix/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import setBaseUrl from './common/set-base-url'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import setBaseUrl from './common/set-base-url.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Helix', diff --git a/packages/backend/src/apps/http-request/actions/custom-request/index.ts b/packages/backend/src/apps/http-request/actions/custom-request/index.js similarity index 67% rename from packages/backend/src/apps/http-request/actions/custom-request/index.ts rename to packages/backend/src/apps/http-request/actions/custom-request/index.js index 25c01d68..684046b7 100644 --- a/packages/backend/src/apps/http-request/actions/custom-request/index.ts +++ b/packages/backend/src/apps/http-request/actions/custom-request/index.js @@ -1,16 +1,6 @@ -import type { AxiosRequestConfig } from 'axios'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; -type TMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE'; - -type THeaderEntry = { - key: string; - value: string; -}; - -type THeaderEntries = THeaderEntry[]; - -function isPossiblyTextBased(contentType: string) { +function isPossiblyTextBased(contentType) { if (!contentType) return false; return ( @@ -19,7 +9,7 @@ function isPossiblyTextBased(contentType: string) { ); } -function throwIfFileSizeExceedsLimit(contentLength: string) { +function throwIfFileSizeExceedsLimit(contentLength) { const maxFileSize = 25 * 1024 * 1024; // 25MB if (Number(contentLength) > maxFileSize) { @@ -37,7 +27,7 @@ export default defineAction({ { label: 'Method', key: 'method', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: `The HTTP method we'll use to perform the request.`, value: 'GET', @@ -52,7 +42,7 @@ export default defineAction({ { label: 'URL', key: 'url', - type: 'string' as const, + type: 'string', required: true, description: 'Any URL with a querystring will be re-encoded properly.', variables: true, @@ -60,7 +50,7 @@ export default defineAction({ { label: 'Data', key: 'data', - type: 'string' as const, + type: 'string', required: false, description: 'Place raw JSON data here.', variables: true, @@ -68,7 +58,7 @@ export default defineAction({ { label: 'Headers', key: 'headers', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: 'Add or remove headers as needed', value: [ @@ -81,7 +71,7 @@ export default defineAction({ { label: 'Key', key: 'key', - type: 'string' as const, + type: 'string', required: true, description: 'Header key', variables: true, @@ -89,7 +79,7 @@ export default defineAction({ { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, description: 'Header value', variables: true, @@ -99,27 +89,24 @@ export default defineAction({ ], async run($) { - const method = $.step.parameters.method as TMethod; - const data = $.step.parameters.data as string; - const url = $.step.parameters.url as string; - const headers = $.step.parameters.headers as THeaderEntries; + const method = $.step.parameters.method; + const data = $.step.parameters.data; + const url = $.step.parameters.url; + const headers = $.step.parameters.headers; - const headersObject: Record = headers.reduce( - (result, entry) => { - const key = entry.key?.toLowerCase(); - const value = entry.value; + const headersObject = headers.reduce((result, entry) => { + const key = entry.key?.toLowerCase(); + const value = entry.value; - if (key && value) { - return { - ...result, - [entry.key?.toLowerCase()]: entry.value, - }; - } + if (key && value) { + return { + ...result, + [entry.key?.toLowerCase()]: entry.value, + }; + } - return result; - }, - {} - ); + return result; + }, {}); let contentType = headersObject['content-type']; @@ -132,9 +119,9 @@ export default defineAction({ throwIfFileSizeExceedsLimit(metadataResponse.headers['content-length']); // eslint-disable-next-line no-empty - } catch { } + } catch {} - const requestData: AxiosRequestConfig = { + const requestData = { url, method, data, @@ -152,7 +139,7 @@ export default defineAction({ let responseData = response.data; if (!isPossiblyTextBased(contentType)) { - responseData = Buffer.from(responseData as string).toString('base64'); + responseData = Buffer.from(responseData).toString('base64'); } $.setActionItem({ raw: { data: responseData } }); diff --git a/packages/backend/src/apps/http-request/actions/index.js b/packages/backend/src/apps/http-request/actions/index.js new file mode 100644 index 00000000..0396f241 --- /dev/null +++ b/packages/backend/src/apps/http-request/actions/index.js @@ -0,0 +1,3 @@ +import customRequest from './custom-request/index.js'; + +export default [customRequest]; diff --git a/packages/backend/src/apps/http-request/actions/index.ts b/packages/backend/src/apps/http-request/actions/index.ts deleted file mode 100644 index 2bfac8fc..00000000 --- a/packages/backend/src/apps/http-request/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import customRequest from './custom-request'; - -export default [customRequest]; diff --git a/packages/backend/src/apps/http-request/index.d.ts b/packages/backend/src/apps/http-request/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/http-request/index.ts b/packages/backend/src/apps/http-request/index.js similarity index 76% rename from packages/backend/src/apps/http-request/index.ts rename to packages/backend/src/apps/http-request/index.js index 9b6cc169..f5df4aa0 100644 --- a/packages/backend/src/apps/http-request/index.ts +++ b/packages/backend/src/apps/http-request/index.js @@ -1,5 +1,5 @@ -import defineApp from '../../helpers/define-app'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'HTTP Request', diff --git a/packages/backend/src/apps/hubspot/actions/create-contact/index.ts b/packages/backend/src/apps/hubspot/actions/create-contact/index.js similarity index 64% rename from packages/backend/src/apps/hubspot/actions/create-contact/index.ts rename to packages/backend/src/apps/hubspot/actions/create-contact/index.js index 9d1622c8..790854a1 100644 --- a/packages/backend/src/apps/hubspot/actions/create-contact/index.ts +++ b/packages/backend/src/apps/hubspot/actions/create-contact/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create contact', @@ -8,28 +8,28 @@ export default defineAction({ { label: 'Company name', key: 'company', - type: 'string' as const, + type: 'string', required: false, variables: true, }, { label: 'Email', key: 'email', - type: 'string' as const, + type: 'string', required: false, variables: true, }, { label: 'First name', key: 'firstName', - type: 'string' as const, + type: 'string', required: false, variables: true, }, { label: 'Last name', key: 'lastName', - type: 'string' as const, + type: 'string', required: false, description: 'Last name', variables: true, @@ -37,34 +37,34 @@ export default defineAction({ { label: 'Phone', key: 'phone', - type: 'string' as const, + type: 'string', required: false, variables: true, }, { label: 'Website URL', key: 'website', - type: 'string' as const, + type: 'string', required: false, variables: true, }, { label: 'Owner ID', key: 'hubspotOwnerId', - type: 'string' as const, + type: 'string', required: false, variables: true, }, ], async run($) { - const company = $.step.parameters.company as string; - const email = $.step.parameters.email as string; - const firstName = $.step.parameters.firstName as string; - const lastName = $.step.parameters.lastName as string; - const phone = $.step.parameters.phone as string; - const website = $.step.parameters.website as string; - const hubspotOwnerId = $.step.parameters.hubspotOwnerId as string; + const company = $.step.parameters.company; + const email = $.step.parameters.email; + const firstName = $.step.parameters.firstName; + const lastName = $.step.parameters.lastName; + const phone = $.step.parameters.phone; + const website = $.step.parameters.website; + const hubspotOwnerId = $.step.parameters.hubspotOwnerId; const response = await $.http.post(`crm/v3/objects/contacts`, { properties: { diff --git a/packages/backend/src/apps/hubspot/actions/index.js b/packages/backend/src/apps/hubspot/actions/index.js new file mode 100644 index 00000000..9dbfbd06 --- /dev/null +++ b/packages/backend/src/apps/hubspot/actions/index.js @@ -0,0 +1,3 @@ +import createContact from './create-contact/index.js'; + +export default [createContact]; diff --git a/packages/backend/src/apps/hubspot/actions/index.ts b/packages/backend/src/apps/hubspot/actions/index.ts deleted file mode 100644 index fe753ed8..00000000 --- a/packages/backend/src/apps/hubspot/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import createContact from './create-contact'; - -export default [ createContact ]; diff --git a/packages/backend/src/apps/hubspot/auth/generate-auth-url.js b/packages/backend/src/apps/hubspot/auth/generate-auth-url.js new file mode 100644 index 00000000..3b7bf2e8 --- /dev/null +++ b/packages/backend/src/apps/hubspot/auth/generate-auth-url.js @@ -0,0 +1,19 @@ +import { URLSearchParams } from 'url'; +import scopes from '../common/scopes.js'; + +export default async function generateAuthUrl($) { + const oauthRedirectUrlField = $.app.auth.fields.find( + (field) => field.key == 'oAuthRedirectUrl' + ); + const callbackUrl = oauthRedirectUrlField.value; + + const searchParams = new URLSearchParams({ + client_id: $.auth.data.clientId, + redirect_uri: callbackUrl, + scope: scopes.join(' '), + }); + + const url = `https://app.hubspot.com/oauth/authorize?${searchParams.toString()}`; + + await $.auth.set({ url }); +} diff --git a/packages/backend/src/apps/hubspot/auth/generate-auth-url.ts b/packages/backend/src/apps/hubspot/auth/generate-auth-url.ts deleted file mode 100644 index d8f33dd4..00000000 --- a/packages/backend/src/apps/hubspot/auth/generate-auth-url.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import { URLSearchParams } from 'url'; -import scopes from '../common/scopes'; - -export default async function generateAuthUrl($: IGlobalVariable) { - const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' - ); - const callbackUrl = oauthRedirectUrlField.value as string; - - const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - redirect_uri: callbackUrl, - scope: scopes.join(' '), - }); - - const url = `https://app.hubspot.com/oauth/authorize?${searchParams.toString()}`; - - await $.auth.set({ url }); -} diff --git a/packages/backend/src/apps/hubspot/auth/index.ts b/packages/backend/src/apps/hubspot/auth/index.js similarity index 75% rename from packages/backend/src/apps/hubspot/auth/index.ts rename to packages/backend/src/apps/hubspot/auth/index.js index c7f57dbf..47f75638 100644 --- a/packages/backend/src/apps/hubspot/auth/index.ts +++ b/packages/backend/src/apps/hubspot/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; -import refreshToken from './refresh-token'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; +import refreshToken from './refresh-token.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/hubspot/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/hubspot/auth/is-still-verified.js b/packages/backend/src/apps/hubspot/auth/is-still-verified.js new file mode 100644 index 00000000..7927d274 --- /dev/null +++ b/packages/backend/src/apps/hubspot/auth/is-still-verified.js @@ -0,0 +1,9 @@ +import getAccessTokenInfo from '../common/get-access-token-info.js'; + +const isStillVerified = async ($) => { + await getAccessTokenInfo($); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/hubspot/auth/is-still-verified.ts b/packages/backend/src/apps/hubspot/auth/is-still-verified.ts deleted file mode 100644 index cccd73be..00000000 --- a/packages/backend/src/apps/hubspot/auth/is-still-verified.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getAccessTokenInfo from '../common/get-access-token-info'; - -const isStillVerified = async ($: IGlobalVariable) => { - await getAccessTokenInfo($); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/hubspot/auth/refresh-token.ts b/packages/backend/src/apps/hubspot/auth/refresh-token.js similarity index 54% rename from packages/backend/src/apps/hubspot/auth/refresh-token.ts rename to packages/backend/src/apps/hubspot/auth/refresh-token.js index c1fc8a9d..9afea4e1 100644 --- a/packages/backend/src/apps/hubspot/auth/refresh-token.ts +++ b/packages/backend/src/apps/hubspot/auth/refresh-token.js @@ -1,19 +1,18 @@ -import { IGlobalVariable, IField } from '@automatisch/types'; import { URLSearchParams } from 'url'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const callbackUrl = oauthRedirectUrlField.value as string; + const callbackUrl = oauthRedirectUrlField.value; const params = new URLSearchParams({ grant_type: 'refresh_token', - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, redirect_uri: callbackUrl, - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post('/oauth/v1/token', params.toString()); diff --git a/packages/backend/src/apps/hubspot/auth/verify-credentials.ts b/packages/backend/src/apps/hubspot/auth/verify-credentials.js similarity index 72% rename from packages/backend/src/apps/hubspot/auth/verify-credentials.ts rename to packages/backend/src/apps/hubspot/auth/verify-credentials.js index 130bf171..15e44b4e 100644 --- a/packages/backend/src/apps/hubspot/auth/verify-credentials.ts +++ b/packages/backend/src/apps/hubspot/auth/verify-credentials.js @@ -1,18 +1,17 @@ -import { IGlobalVariable, IField } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import getAccessTokenInfo from '../common/get-access-token-info'; +import getAccessTokenInfo from '../common/get-access-token-info.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const callbackUrl = oauthRedirectUrlField.value as string; + const callbackUrl = oauthRedirectUrlField.value; const params = new URLSearchParams({ grant_type: 'authorization_code', - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, redirect_uri: callbackUrl, - code: $.auth.data.code as string, + code: $.auth.data.code, }); const { data: verifiedCredentials } = await $.http.post( diff --git a/packages/backend/src/apps/spotify/common/add-auth-header.ts b/packages/backend/src/apps/hubspot/common/add-auth-header.js similarity index 53% rename from packages/backend/src/apps/spotify/common/add-auth-header.ts rename to packages/backend/src/apps/hubspot/common/add-auth-header.js index d16f394f..38e69094 100644 --- a/packages/backend/src/apps/spotify/common/add-auth-header.ts +++ b/packages/backend/src/apps/hubspot/common/add-auth-header.js @@ -1,7 +1,6 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if (requestConfig.additionalProperties?.skipAddingAuthHeader) return requestConfig; +const addAuthHeader = ($, requestConfig) => { + if (requestConfig.additionalProperties?.skipAddingAuthHeader) + return requestConfig; if ($.auth.data?.accessToken) { const authorizationHeader = `Bearer ${$.auth.data.accessToken}`; diff --git a/packages/backend/src/apps/hubspot/common/get-access-token-info.ts b/packages/backend/src/apps/hubspot/common/get-access-token-info.js similarity index 52% rename from packages/backend/src/apps/hubspot/common/get-access-token-info.ts rename to packages/backend/src/apps/hubspot/common/get-access-token-info.js index 55ed8ff2..fec4f640 100644 --- a/packages/backend/src/apps/hubspot/common/get-access-token-info.ts +++ b/packages/backend/src/apps/hubspot/common/get-access-token-info.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getAccessTokenInfo = async ($: IGlobalVariable): Promise => { +const getAccessTokenInfo = async ($) => { const response = await $.http.get( `/oauth/v1/access-tokens/${$.auth.data.accessToken}` ); diff --git a/packages/backend/src/apps/hubspot/common/scopes.ts b/packages/backend/src/apps/hubspot/common/scopes.js similarity index 100% rename from packages/backend/src/apps/hubspot/common/scopes.ts rename to packages/backend/src/apps/hubspot/common/scopes.js diff --git a/packages/backend/src/apps/hubspot/index.d.ts b/packages/backend/src/apps/hubspot/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/hubspot/index.ts b/packages/backend/src/apps/hubspot/index.js similarity index 66% rename from packages/backend/src/apps/hubspot/index.ts rename to packages/backend/src/apps/hubspot/index.js index 9f35bade..a9eea629 100644 --- a/packages/backend/src/apps/hubspot/index.ts +++ b/packages/backend/src/apps/hubspot/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import actions from './actions'; -import auth from './auth'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import actions from './actions/index.js'; +import auth from './auth/index.js'; export default defineApp({ name: 'HubSpot', diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-client/fields.ts b/packages/backend/src/apps/invoice-ninja/actions/create-client/fields.js similarity index 96% rename from packages/backend/src/apps/invoice-ninja/actions/create-client/fields.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-client/fields.js index 6655f6ac..419e45bc 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-client/fields.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-client/fields.js @@ -2,7 +2,7 @@ export const fields = [ { label: 'Client Name', key: 'clientName', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -10,7 +10,7 @@ export const fields = [ { label: 'Contact First Name', key: 'contactFirstName', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -18,7 +18,7 @@ export const fields = [ { label: 'Contact Last Name', key: 'contactLastName', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -26,7 +26,7 @@ export const fields = [ { label: 'Contact Email', key: 'contactEmail', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -34,7 +34,7 @@ export const fields = [ { label: 'Contact Phone', key: 'contactPhone', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -42,7 +42,7 @@ export const fields = [ { label: 'Language Code', key: 'languageCode', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -92,7 +92,7 @@ export const fields = [ { label: 'Currency Code', key: 'currencyCode', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -220,7 +220,7 @@ export const fields = [ { label: 'Id Number', key: 'idNumber', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -228,7 +228,7 @@ export const fields = [ { label: 'Vat Number', key: 'vatNumber', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -236,7 +236,7 @@ export const fields = [ { label: 'Street Address', key: 'streetAddress', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -244,7 +244,7 @@ export const fields = [ { label: 'Apt/Suite', key: 'aptSuite', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -252,7 +252,7 @@ export const fields = [ { label: 'City', key: 'city', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -260,7 +260,7 @@ export const fields = [ { label: 'State/Province', key: 'stateProvince', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -268,7 +268,7 @@ export const fields = [ { label: 'Postal Code', key: 'postalCode', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -276,7 +276,7 @@ export const fields = [ { label: 'Country Code', key: 'countryCode', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -535,7 +535,7 @@ export const fields = [ { label: 'Shipping Street Address', key: 'shippingStreetAddress', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -543,7 +543,7 @@ export const fields = [ { label: 'Shipping Apt/Suite', key: 'shippingAptSuite', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -551,7 +551,7 @@ export const fields = [ { label: 'Shipping City', key: 'shippingCity', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -559,7 +559,7 @@ export const fields = [ { label: 'Shipping State/Province', key: 'shippingStateProvince', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -567,7 +567,7 @@ export const fields = [ { label: 'Shipping Postal Code', key: 'shippingPostalCode', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -575,7 +575,7 @@ export const fields = [ { label: 'Shipping Country Code', key: 'shippingCountryCode', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -583,7 +583,7 @@ export const fields = [ { label: 'Private Notes', key: 'privateNotes', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -591,7 +591,7 @@ export const fields = [ { label: 'Public Notes', key: 'publicNotes', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -599,7 +599,7 @@ export const fields = [ { label: 'Website', key: 'website', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -607,7 +607,7 @@ export const fields = [ { label: 'Custom Value 1', key: 'customValue1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -615,7 +615,7 @@ export const fields = [ { label: 'Custom Value 2', key: 'customValue2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -623,7 +623,7 @@ export const fields = [ { label: 'Custom Value 3', key: 'customValue3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -631,7 +631,7 @@ export const fields = [ { label: 'Custom Value 4', key: 'customValue4', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-client/index.ts b/packages/backend/src/apps/invoice-ninja/actions/create-client/index.js similarity index 94% rename from packages/backend/src/apps/invoice-ninja/actions/create-client/index.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-client/index.js index b32d7adc..47edb573 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-client/index.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-client/index.js @@ -1,6 +1,6 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; -import { fields } from './fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; +import { fields } from './fields.js'; export default defineAction({ name: 'Create client', diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-invoice/fields.ts b/packages/backend/src/apps/invoice-ninja/actions/create-invoice/fields.js similarity index 83% rename from packages/backend/src/apps/invoice-ninja/actions/create-invoice/fields.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-invoice/fields.js index 68f04ced..f2556ea2 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-invoice/fields.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-invoice/fields.js @@ -2,7 +2,7 @@ export const fields = [ { label: 'Client ID', key: 'clientId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The ID of the client, not the name or email address.', variables: true, @@ -20,7 +20,7 @@ export const fields = [ { label: 'Send Email', key: 'sendEmail', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -32,7 +32,7 @@ export const fields = [ { label: 'Mark Sent', key: 'markSent', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Setting this to true creates the invoice as sent.', variables: true, @@ -44,7 +44,7 @@ export const fields = [ { label: 'Paid', key: 'paid', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Setting this to true creates the invoice as paid.', variables: true, @@ -56,7 +56,7 @@ export const fields = [ { label: 'Amount Paid', key: 'amountPaid', - type: 'string' as const, + type: 'string', required: false, description: 'If this value is greater than zero a payment will be created along with the invoice.', @@ -65,7 +65,7 @@ export const fields = [ { label: 'Number', key: 'number', - type: 'string' as const, + type: 'string', required: false, description: 'The invoice number - is a unique alpha numeric number per invoice per company', @@ -74,7 +74,7 @@ export const fields = [ { label: 'Discount', key: 'discount', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -82,7 +82,7 @@ export const fields = [ { label: 'PO Number', key: 'poNumber', - type: 'string' as const, + type: 'string', required: false, description: 'The purchase order associated with this invoice', variables: true, @@ -90,7 +90,7 @@ export const fields = [ { label: 'Date', key: 'date', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -98,7 +98,7 @@ export const fields = [ { label: 'Due Date', key: 'dueDate', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -106,7 +106,7 @@ export const fields = [ { label: 'Tax Rate 1', key: 'taxRate1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -114,7 +114,7 @@ export const fields = [ { label: 'Tax Name 1', key: 'taxName1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -122,7 +122,7 @@ export const fields = [ { label: 'Tax Rate 2', key: 'taxRate2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -130,7 +130,7 @@ export const fields = [ { label: 'Tax Name 2', key: 'taxName2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -138,7 +138,7 @@ export const fields = [ { label: 'Tax Rate 3', key: 'taxRate3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -146,7 +146,7 @@ export const fields = [ { label: 'Tax Name 3', key: 'taxName3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -154,7 +154,7 @@ export const fields = [ { label: 'Custom Field 1', key: 'customField1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -162,7 +162,7 @@ export const fields = [ { label: 'Custom Field 2', key: 'customField2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -170,7 +170,7 @@ export const fields = [ { label: 'Custom Field 3', key: 'customField3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -178,7 +178,7 @@ export const fields = [ { label: 'Custom Field 4', key: 'customField4', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -186,7 +186,7 @@ export const fields = [ { label: 'Custom Surcharge 1', key: 'customSurcharge1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -194,7 +194,7 @@ export const fields = [ { label: 'Custom Surcharge 2', key: 'customSurcharge2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -202,7 +202,7 @@ export const fields = [ { label: 'Custom Surcharge 3', key: 'customSurcharge3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -210,7 +210,7 @@ export const fields = [ { label: 'Custom Surcharge 4', key: 'customSurcharge4', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -218,7 +218,7 @@ export const fields = [ { label: 'Is Amount Discount', key: 'isAmountDiscount', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'By default the discount is applied as a percentage, enabling this applies the discount as a fixed amount.', @@ -231,7 +231,7 @@ export const fields = [ { label: 'Partial/Deposit', key: 'partialDeposit', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -239,7 +239,7 @@ export const fields = [ { label: 'Partial Due Date', key: 'partialDueDate', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -247,7 +247,7 @@ export const fields = [ { label: 'Line Item Cost', key: 'lineItemCost', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -255,7 +255,7 @@ export const fields = [ { label: 'Line Item Quatity', key: 'lineItemQuantity', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -263,7 +263,7 @@ export const fields = [ { label: 'Line Item Product', key: 'lineItemProduct', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -271,7 +271,7 @@ export const fields = [ { label: 'Line Item Discount', key: 'lineItemDiscount', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -279,7 +279,7 @@ export const fields = [ { label: 'Line Item Description', key: 'lineItemDescription', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -287,7 +287,7 @@ export const fields = [ { label: 'Line Item Tax Rate 1', key: 'lineItemTaxRate1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -295,7 +295,7 @@ export const fields = [ { label: 'Line Item Tax Name 1', key: 'lineItemTaxName1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -303,7 +303,7 @@ export const fields = [ { label: 'Line Item Tax Rate 2', key: 'lineItemTaxRate2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -311,7 +311,7 @@ export const fields = [ { label: 'Line Item Tax Name 2', key: 'lineItemTaxName2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -319,7 +319,7 @@ export const fields = [ { label: 'Line Item Tax Rate 3', key: 'lineItemTaxRate3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -327,7 +327,7 @@ export const fields = [ { label: 'Line Item Tax Name 3', key: 'lineItemTaxName3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -335,7 +335,7 @@ export const fields = [ { label: 'Line Item Custom Field 1', key: 'lineItemCustomField1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -343,7 +343,7 @@ export const fields = [ { label: 'Line Item Custom Field 2', key: 'lineItemCustomField2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -351,7 +351,7 @@ export const fields = [ { label: 'Line Item Custom Field 3', key: 'lineItemCustomField3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -359,7 +359,7 @@ export const fields = [ { label: 'Line Item Custom Field 4', key: 'lineItemCustomField4', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -367,7 +367,7 @@ export const fields = [ { label: 'Line Item Product Cost', key: 'lineItemProductCost', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -375,7 +375,7 @@ export const fields = [ { label: 'Public Notes', key: 'publicNotes', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -383,7 +383,7 @@ export const fields = [ { label: 'Private Notes', key: 'privateNotes', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -391,7 +391,7 @@ export const fields = [ { label: 'Terms', key: 'terms', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -399,7 +399,7 @@ export const fields = [ { label: 'Footer', key: 'footer', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-invoice/index.ts b/packages/backend/src/apps/invoice-ninja/actions/create-invoice/index.js similarity index 96% rename from packages/backend/src/apps/invoice-ninja/actions/create-invoice/index.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-invoice/index.js index b357d440..7915ebfc 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-invoice/index.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-invoice/index.js @@ -1,6 +1,6 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; -import { fields } from './fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; +import { fields } from './fields.js'; export default defineAction({ name: 'Create invoice', diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-payment/fields.ts b/packages/backend/src/apps/invoice-ninja/actions/create-payment/fields.js similarity index 92% rename from packages/backend/src/apps/invoice-ninja/actions/create-payment/fields.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-payment/fields.js index ba9ec5f6..608b89fd 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-payment/fields.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-payment/fields.js @@ -2,7 +2,7 @@ export const fields = [ { label: 'Client ID', key: 'clientId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The ID of the client, not the name or email address.', variables: true, @@ -20,7 +20,7 @@ export const fields = [ { label: 'Payment Date', key: 'paymentDate', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -28,7 +28,7 @@ export const fields = [ { label: 'Invoice', key: 'invoiceId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -46,7 +46,7 @@ export const fields = [ { label: 'Invoice Amount', key: 'invoiceAmount', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -54,7 +54,7 @@ export const fields = [ { label: 'Payment Type', key: 'paymentType', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -95,7 +95,7 @@ export const fields = [ { label: 'Transfer Reference', key: 'transferReference', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -103,7 +103,7 @@ export const fields = [ { label: 'Private Notes', key: 'privateNotes', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-payment/index.ts b/packages/backend/src/apps/invoice-ninja/actions/create-payment/index.js similarity index 88% rename from packages/backend/src/apps/invoice-ninja/actions/create-payment/index.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-payment/index.js index 54a87eef..4d4ea080 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-payment/index.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-payment/index.js @@ -1,6 +1,6 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; -import { fields } from './fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; +import { fields } from './fields.js'; export default defineAction({ name: 'Create payment', diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-product/fields.ts b/packages/backend/src/apps/invoice-ninja/actions/create-product/fields.js similarity index 80% rename from packages/backend/src/apps/invoice-ninja/actions/create-product/fields.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-product/fields.js index 0c76196d..87b5fecc 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-product/fields.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-product/fields.js @@ -2,7 +2,7 @@ export const fields = [ { label: 'Product Key', key: 'productKey', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -10,7 +10,7 @@ export const fields = [ { label: 'Notes', key: 'notes', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -18,7 +18,7 @@ export const fields = [ { label: 'Price', key: 'price', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -26,7 +26,7 @@ export const fields = [ { label: 'Quantity', key: 'quantity', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -34,7 +34,7 @@ export const fields = [ { label: 'Tax Rate 1', key: 'taxRate1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -42,7 +42,7 @@ export const fields = [ { label: 'Tax Name 1', key: 'taxName1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -50,7 +50,7 @@ export const fields = [ { label: 'Tax Rate 2', key: 'taxRate2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -58,7 +58,7 @@ export const fields = [ { label: 'Tax Name 2', key: 'taxName2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -66,7 +66,7 @@ export const fields = [ { label: 'Tax Rate 3', key: 'taxRate3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -74,7 +74,7 @@ export const fields = [ { label: 'Tax Name 3', key: 'taxName3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -82,7 +82,7 @@ export const fields = [ { label: 'Custom Value 1', key: 'customValue1', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -90,7 +90,7 @@ export const fields = [ { label: 'Custom Value 2', key: 'customValue2', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -98,7 +98,7 @@ export const fields = [ { label: 'Custom Value 3', key: 'customValue3', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -106,7 +106,7 @@ export const fields = [ { label: 'Custom Value 4', key: 'customValue4', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, diff --git a/packages/backend/src/apps/invoice-ninja/actions/create-product/index.ts b/packages/backend/src/apps/invoice-ninja/actions/create-product/index.js similarity index 90% rename from packages/backend/src/apps/invoice-ninja/actions/create-product/index.ts rename to packages/backend/src/apps/invoice-ninja/actions/create-product/index.js index d84d8232..5fa6dd6a 100644 --- a/packages/backend/src/apps/invoice-ninja/actions/create-product/index.ts +++ b/packages/backend/src/apps/invoice-ninja/actions/create-product/index.js @@ -1,6 +1,6 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; -import { fields } from './fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; +import { fields } from './fields.js'; export default defineAction({ name: 'Create product', diff --git a/packages/backend/src/apps/invoice-ninja/actions/index.js b/packages/backend/src/apps/invoice-ninja/actions/index.js new file mode 100644 index 00000000..36d38214 --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/actions/index.js @@ -0,0 +1,6 @@ +import createClient from './create-client/index.js'; +import createInvoice from './create-invoice/index.js'; +import createPayment from './create-payment/index.js'; +import createProduct from './create-product/index.js'; + +export default [createClient, createInvoice, createPayment, createProduct]; diff --git a/packages/backend/src/apps/invoice-ninja/actions/index.ts b/packages/backend/src/apps/invoice-ninja/actions/index.ts deleted file mode 100644 index 8a1bff38..00000000 --- a/packages/backend/src/apps/invoice-ninja/actions/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import createClient from './create-client'; -import createInvoice from './create-invoice'; -import createPayment from './create-payment'; -import createProduct from './create-product'; - -export default [createClient, createInvoice, createPayment, createProduct]; diff --git a/packages/backend/src/apps/invoice-ninja/auth/index.ts b/packages/backend/src/apps/invoice-ninja/auth/index.js similarity index 79% rename from packages/backend/src/apps/invoice-ninja/auth/index.ts rename to packages/backend/src/apps/invoice-ninja/auth/index.js index 7b86fb5e..4e9a78ca 100644 --- a/packages/backend/src/apps/invoice-ninja/auth/index.ts +++ b/packages/backend/src/apps/invoice-ninja/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'apiToken', label: 'API Token', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'instanceUrl', label: 'Invoice Ninja instance URL (optional)', - type: 'string' as const, + type: 'string', required: false, readOnly: false, value: null, diff --git a/packages/backend/src/apps/invoice-ninja/auth/is-still-verified.js b/packages/backend/src/apps/invoice-ninja/auth/is-still-verified.js new file mode 100644 index 00000000..270d415b --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/auth/is-still-verified.js @@ -0,0 +1,9 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/invoice-ninja/auth/is-still-verified.ts b/packages/backend/src/apps/invoice-ninja/auth/is-still-verified.ts deleted file mode 100644 index 5a2fe2ae..00000000 --- a/packages/backend/src/apps/invoice-ninja/auth/is-still-verified.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/invoice-ninja/auth/verify-credentials.ts b/packages/backend/src/apps/invoice-ninja/auth/verify-credentials.js similarity index 66% rename from packages/backend/src/apps/invoice-ninja/auth/verify-credentials.ts rename to packages/backend/src/apps/invoice-ninja/auth/verify-credentials.js index cba2c60f..371876cb 100644 --- a/packages/backend/src/apps/invoice-ninja/auth/verify-credentials.ts +++ b/packages/backend/src/apps/invoice-ninja/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const { data } = await $.http.get('/v1/ping'); const screenName = [data.user_name, data.company_name] diff --git a/packages/backend/src/apps/invoice-ninja/common/add-auth-header.ts b/packages/backend/src/apps/invoice-ninja/common/add-auth-header.js similarity index 55% rename from packages/backend/src/apps/invoice-ninja/common/add-auth-header.ts rename to packages/backend/src/apps/invoice-ninja/common/add-auth-header.js index ca5ca292..a9bb7341 100644 --- a/packages/backend/src/apps/invoice-ninja/common/add-auth-header.ts +++ b/packages/backend/src/apps/invoice-ninja/common/add-auth-header.js @@ -1,13 +1,11 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const { instanceUrl } = $.auth.data; if (instanceUrl) { - requestConfig.baseURL = instanceUrl as string; + requestConfig.baseURL = instanceUrl; } - requestConfig.headers['X-API-TOKEN'] = $.auth.data.apiToken as string; + requestConfig.headers['X-API-TOKEN'] = $.auth.data.apiToken; requestConfig.headers['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/packages/backend/src/apps/invoice-ninja/common/filter-provided-fields.js b/packages/backend/src/apps/invoice-ninja/common/filter-provided-fields.js new file mode 100644 index 00000000..ceff6e22 --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/common/filter-provided-fields.js @@ -0,0 +1,18 @@ +import isObject from 'lodash/isObject.js'; + +export function filterProvidedFields(body) { + return Object.keys(body).reduce((result, key) => { + const value = body[key]; + + if (isObject(value)) { + const filteredNestedObj = filterProvidedFields(value); + if (Object.keys(filteredNestedObj).length > 0) { + result[key] = filteredNestedObj; + } + } else if (body[key]) { + result[key] = value; + } + + return result; + }, {}); +} diff --git a/packages/backend/src/apps/invoice-ninja/common/filter-provided-fields.ts b/packages/backend/src/apps/invoice-ninja/common/filter-provided-fields.ts deleted file mode 100644 index fa88c8ee..00000000 --- a/packages/backend/src/apps/invoice-ninja/common/filter-provided-fields.ts +++ /dev/null @@ -1,18 +0,0 @@ -import isObject from 'lodash/isObject'; - -export function filterProvidedFields(body: Record) { - return Object.keys(body).reduce>((result, key) => { - const value = body[key]; - if (isObject(value)) { - const filteredNestedObj = filterProvidedFields( - value as Record - ); - if (Object.keys(filteredNestedObj).length > 0) { - result[key] = filteredNestedObj; - } - } else if (body[key]) { - result[key] = value; - } - return result; - }, {}); -} diff --git a/packages/backend/src/apps/invoice-ninja/common/set-base-url.js b/packages/backend/src/apps/invoice-ninja/common/set-base-url.js new file mode 100644 index 00000000..fc3252af --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/common/set-base-url.js @@ -0,0 +1,11 @@ +const setBaseUrl = ($, requestConfig) => { + const instanceUrl = $.auth.data.instanceUrl; + + if (instanceUrl) { + requestConfig.baseURL = instanceUrl; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/invoice-ninja/common/set-base-url.ts b/packages/backend/src/apps/invoice-ninja/common/set-base-url.ts deleted file mode 100644 index 8bf8cd9e..00000000 --- a/packages/backend/src/apps/invoice-ninja/common/set-base-url.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - const instanceUrl = $.auth.data.instanceUrl as string; - - if (instanceUrl) { - requestConfig.baseURL = instanceUrl; - } - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/invoice-ninja/dynamic-data/index.js b/packages/backend/src/apps/invoice-ninja/dynamic-data/index.js new file mode 100644 index 00000000..b3ef2269 --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listClients from './list-clients/index.js'; +import listInvoices from './list-invoices/index.js'; + +export default [listClients, listInvoices]; diff --git a/packages/backend/src/apps/invoice-ninja/dynamic-data/index.ts b/packages/backend/src/apps/invoice-ninja/dynamic-data/index.ts deleted file mode 100644 index 172f6d24..00000000 --- a/packages/backend/src/apps/invoice-ninja/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listClients from './list-clients'; -import listInvoices from './list-invoices'; - -export default [listClients, listInvoices]; diff --git a/packages/backend/src/apps/invoice-ninja/dynamic-data/list-clients/index.ts b/packages/backend/src/apps/invoice-ninja/dynamic-data/list-clients/index.js similarity index 73% rename from packages/backend/src/apps/invoice-ninja/dynamic-data/list-clients/index.ts rename to packages/backend/src/apps/invoice-ninja/dynamic-data/list-clients/index.js index 2e3402ff..512ebda1 100644 --- a/packages/backend/src/apps/invoice-ninja/dynamic-data/list-clients/index.ts +++ b/packages/backend/src/apps/invoice-ninja/dynamic-data/list-clients/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List clients', key: 'listClients', - async run($: IGlobalVariable) { - const clients: { - data: IJSONObject[]; - } = { + async run($) { + const clients = { data: [], }; diff --git a/packages/backend/src/apps/invoice-ninja/dynamic-data/list-invoices/index.ts b/packages/backend/src/apps/invoice-ninja/dynamic-data/list-invoices/index.js similarity index 73% rename from packages/backend/src/apps/invoice-ninja/dynamic-data/list-invoices/index.ts rename to packages/backend/src/apps/invoice-ninja/dynamic-data/list-invoices/index.js index ac7b5107..15b6d062 100644 --- a/packages/backend/src/apps/invoice-ninja/dynamic-data/list-invoices/index.ts +++ b/packages/backend/src/apps/invoice-ninja/dynamic-data/list-invoices/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List invoices', key: 'listInvoices', - async run($: IGlobalVariable) { - const invoices: { - data: IJSONObject[]; - } = { + async run($) { + const invoices = { data: [], }; diff --git a/packages/backend/src/apps/invoice-ninja/index.d.ts b/packages/backend/src/apps/invoice-ninja/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/invoice-ninja/index.ts b/packages/backend/src/apps/invoice-ninja/index.js similarity index 57% rename from packages/backend/src/apps/invoice-ninja/index.ts rename to packages/backend/src/apps/invoice-ninja/index.js index c0797909..ecf1e5e4 100644 --- a/packages/backend/src/apps/invoice-ninja/index.ts +++ b/packages/backend/src/apps/invoice-ninja/index.js @@ -1,10 +1,10 @@ -import defineApp from '../../helpers/define-app'; -import setBaseUrl from './common/set-base-url'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import setBaseUrl from './common/set-base-url.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Invoice Ninja', diff --git a/packages/backend/src/apps/invoice-ninja/triggers/index.js b/packages/backend/src/apps/invoice-ninja/triggers/index.js new file mode 100644 index 00000000..8293af88 --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/triggers/index.js @@ -0,0 +1,15 @@ +import newClients from './new-clients/index.js'; +import newCredits from './new-credits/index.js'; +import newInvoices from './new-invoices/index.js'; +import newPayments from './new-payments/index.js'; +import newProjects from './new-projects/index.js'; +import newQuotes from './new-quotes/index.js'; + +export default [ + newClients, + newCredits, + newInvoices, + newPayments, + newProjects, + newQuotes, +]; diff --git a/packages/backend/src/apps/invoice-ninja/triggers/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/index.ts deleted file mode 100644 index e3b58716..00000000 --- a/packages/backend/src/apps/invoice-ninja/triggers/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import newClients from './new-clients'; -import newCredits from './new-credits'; -import newInvoices from './new-invoices'; -import newPayments from './new-payments'; -import newProjects from './new-projects'; -import newQuotes from './new-quotes'; - -export default [ - newClients, - newCredits, - newInvoices, - newPayments, - newProjects, - newQuotes, -]; diff --git a/packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.js similarity index 76% rename from packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.ts rename to packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.js index 72944212..608541d5 100644 --- a/packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.ts +++ b/packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.js @@ -1,17 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; - -type Response = { - data: { - data: { - id: string; - event_id: string; - target_url: string; - format: string; - }; - }; -}; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New clients', @@ -54,7 +43,7 @@ export default defineTrigger({ rest_method: 'post', }; - const response: Response = await $.http.post('/v1/webhooks', payload); + const response = await $.http.post('/v1/webhooks', payload); await $.flow.setRemoteWebhookId(response.data.data.id); }, diff --git a/packages/backend/src/apps/invoice-ninja/triggers/new-credits/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/new-credits/index.js similarity index 76% rename from packages/backend/src/apps/invoice-ninja/triggers/new-credits/index.ts rename to packages/backend/src/apps/invoice-ninja/triggers/new-credits/index.js index ee8891f1..13af3438 100644 --- a/packages/backend/src/apps/invoice-ninja/triggers/new-credits/index.ts +++ b/packages/backend/src/apps/invoice-ninja/triggers/new-credits/index.js @@ -1,17 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; - -type Response = { - data: { - data: { - id: string; - event_id: string; - target_url: string; - format: string; - }; - }; -}; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New credits', @@ -54,7 +43,7 @@ export default defineTrigger({ rest_method: 'post', }; - const response: Response = await $.http.post('/v1/webhooks', payload); + const response = await $.http.post('/v1/webhooks', payload); await $.flow.setRemoteWebhookId(response.data.data.id); }, diff --git a/packages/backend/src/apps/invoice-ninja/triggers/new-invoices/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/new-invoices/index.js similarity index 76% rename from packages/backend/src/apps/invoice-ninja/triggers/new-invoices/index.ts rename to packages/backend/src/apps/invoice-ninja/triggers/new-invoices/index.js index 427567b9..92e130f9 100644 --- a/packages/backend/src/apps/invoice-ninja/triggers/new-invoices/index.ts +++ b/packages/backend/src/apps/invoice-ninja/triggers/new-invoices/index.js @@ -1,17 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; - -type Response = { - data: { - data: { - id: string; - event_id: string; - target_url: string; - format: string; - }; - }; -}; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New invoices', @@ -54,7 +43,7 @@ export default defineTrigger({ rest_method: 'post', }; - const response: Response = await $.http.post('/v1/webhooks', payload); + const response = await $.http.post('/v1/webhooks', payload); await $.flow.setRemoteWebhookId(response.data.data.id); }, diff --git a/packages/backend/src/apps/invoice-ninja/triggers/new-payments/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/new-payments/index.js similarity index 76% rename from packages/backend/src/apps/invoice-ninja/triggers/new-payments/index.ts rename to packages/backend/src/apps/invoice-ninja/triggers/new-payments/index.js index 0ac897d7..c5058673 100644 --- a/packages/backend/src/apps/invoice-ninja/triggers/new-payments/index.ts +++ b/packages/backend/src/apps/invoice-ninja/triggers/new-payments/index.js @@ -1,17 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; - -type Response = { - data: { - data: { - id: string; - event_id: string; - target_url: string; - format: string; - }; - }; -}; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New payments', @@ -54,7 +43,7 @@ export default defineTrigger({ rest_method: 'post', }; - const response: Response = await $.http.post('/v1/webhooks', payload); + const response = await $.http.post('/v1/webhooks', payload); await $.flow.setRemoteWebhookId(response.data.data.id); }, diff --git a/packages/backend/src/apps/invoice-ninja/triggers/new-projects/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/new-projects/index.js similarity index 76% rename from packages/backend/src/apps/invoice-ninja/triggers/new-projects/index.ts rename to packages/backend/src/apps/invoice-ninja/triggers/new-projects/index.js index 1130ff3f..5f6b64d8 100644 --- a/packages/backend/src/apps/invoice-ninja/triggers/new-projects/index.ts +++ b/packages/backend/src/apps/invoice-ninja/triggers/new-projects/index.js @@ -1,17 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; - -type Response = { - data: { - data: { - id: string; - event_id: string; - target_url: string; - format: string; - }; - }; -}; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New projects', @@ -54,7 +43,7 @@ export default defineTrigger({ rest_method: 'post', }; - const response: Response = await $.http.post('/v1/webhooks', payload); + const response = await $.http.post('/v1/webhooks', payload); await $.flow.setRemoteWebhookId(response.data.data.id); }, diff --git a/packages/backend/src/apps/invoice-ninja/triggers/new-quotes/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/new-quotes/index.js similarity index 76% rename from packages/backend/src/apps/invoice-ninja/triggers/new-quotes/index.ts rename to packages/backend/src/apps/invoice-ninja/triggers/new-quotes/index.js index 531264bf..d2398d45 100644 --- a/packages/backend/src/apps/invoice-ninja/triggers/new-quotes/index.ts +++ b/packages/backend/src/apps/invoice-ninja/triggers/new-quotes/index.js @@ -1,17 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; - -type Response = { - data: { - data: { - id: string; - event_id: string; - target_url: string; - format: string; - }; - }; -}; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New quotes', @@ -54,7 +43,7 @@ export default defineTrigger({ rest_method: 'post', }; - const response: Response = await $.http.post('/v1/webhooks', payload); + const response = await $.http.post('/v1/webhooks', payload); await $.flow.setRemoteWebhookId(response.data.data.id); }, diff --git a/packages/backend/src/apps/mattermost/actions/index.js b/packages/backend/src/apps/mattermost/actions/index.js new file mode 100644 index 00000000..93ee03b1 --- /dev/null +++ b/packages/backend/src/apps/mattermost/actions/index.js @@ -0,0 +1,3 @@ +import sendMessageToChannel from './send-a-message-to-channel/index.js'; + +export default [sendMessageToChannel]; diff --git a/packages/backend/src/apps/mattermost/actions/index.ts b/packages/backend/src/apps/mattermost/actions/index.ts deleted file mode 100644 index d28a6432..00000000 --- a/packages/backend/src/apps/mattermost/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sendMessageToChannel from './send-a-message-to-channel'; - -export default [sendMessageToChannel]; diff --git a/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/index.ts b/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/index.js similarity index 82% rename from packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/index.ts rename to packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/index.js index 39734a99..30cdc4be 100644 --- a/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/index.ts +++ b/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import postMessage from './post-message'; +import defineAction from '../../../../helpers/define-action.js'; +import postMessage from './post-message.js'; export default defineAction({ name: 'Send a message to channel', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Channel', key: 'channel', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Pick a channel to send the message to.', variables: true, @@ -27,7 +27,7 @@ export default defineAction({ { label: 'Message text', key: 'message', - type: 'string' as const, + type: 'string', required: true, description: 'The content of your new message.', variables: true, diff --git a/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/post-message.js b/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/post-message.js new file mode 100644 index 00000000..e4a915de --- /dev/null +++ b/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/post-message.js @@ -0,0 +1,20 @@ +const postMessage = async ($) => { + const { parameters } = $.step; + const channel_id = parameters.channel; + const message = parameters.message; + + const data = { + channel_id, + message, + }; + + const response = await $.http.post('/api/v4/posts', data); + + const actionData = { + raw: response?.data, + }; + + $.setActionItem(actionData); +}; + +export default postMessage; diff --git a/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/post-message.ts b/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/post-message.ts deleted file mode 100644 index 86bb7586..00000000 --- a/packages/backend/src/apps/mattermost/actions/send-a-message-to-channel/post-message.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type TData = { - channel_id: string; - message: string; -}; - -const postMessage = async ($: IGlobalVariable) => { - const { parameters } = $.step; - const channel_id = parameters.channel as string; - const message = parameters.message as string; - - const data: TData = { - channel_id, - message, - }; - - const response = await $.http.post('/api/v4/posts', data); - - const actionData = { - raw: response?.data, - }; - - $.setActionItem(actionData); -}; - -export default postMessage; diff --git a/packages/backend/src/apps/mattermost/auth/generate-auth-url.ts b/packages/backend/src/apps/mattermost/auth/generate-auth-url.js similarity index 51% rename from packages/backend/src/apps/mattermost/auth/generate-auth-url.ts rename to packages/backend/src/apps/mattermost/auth/generate-auth-url.js index a497e54a..ba9b1ac6 100644 --- a/packages/backend/src/apps/mattermost/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/mattermost/auth/generate-auth-url.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URL, URLSearchParams } from 'url'; -import getBaseUrl from '../common/get-base-url'; +import getBaseUrl from '../common/get-base-url.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - redirect_uri: $.auth.data.oAuthRedirectUrl as string, + client_id: $.auth.data.clientId, + redirect_uri: $.auth.data.oAuthRedirectUrl, response_type: 'code', }); diff --git a/packages/backend/src/apps/mattermost/auth/index.ts b/packages/backend/src/apps/mattermost/auth/index.js similarity index 79% rename from packages/backend/src/apps/mattermost/auth/index.ts rename to packages/backend/src/apps/mattermost/auth/index.js index 853cf1eb..4dd50ae0 100644 --- a/packages/backend/src/apps/mattermost/auth/index.ts +++ b/packages/backend/src/apps/mattermost/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/mattermost/connections/add', @@ -19,7 +19,7 @@ export default { { key: 'instanceUrl', label: 'Mattermost instance URL', - type: 'string' as const, + type: 'string', required: false, readOnly: false, value: null, @@ -30,7 +30,7 @@ export default { { key: 'clientId', label: 'Client id', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -41,7 +41,7 @@ export default { { key: 'clientSecret', label: 'Client secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/mattermost/auth/is-still-verified.js b/packages/backend/src/apps/mattermost/auth/is-still-verified.js new file mode 100644 index 00000000..1b9d46d0 --- /dev/null +++ b/packages/backend/src/apps/mattermost/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user.id; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/mattermost/auth/is-still-verified.ts b/packages/backend/src/apps/mattermost/auth/is-still-verified.ts deleted file mode 100644 index befb7694..00000000 --- a/packages/backend/src/apps/mattermost/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user.id; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/mattermost/auth/verify-credentials.ts b/packages/backend/src/apps/mattermost/auth/verify-credentials.js similarity index 81% rename from packages/backend/src/apps/mattermost/auth/verify-credentials.ts rename to packages/backend/src/apps/mattermost/auth/verify-credentials.js index da0538ea..e5c8396f 100644 --- a/packages/backend/src/apps/mattermost/auth/verify-credentials.ts +++ b/packages/backend/src/apps/mattermost/auth/verify-credentials.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const params = { client_id: $.auth.data.clientId, client_secret: $.auth.data.clientSecret, diff --git a/packages/backend/src/apps/gitlab/common/add-auth-header.ts b/packages/backend/src/apps/mattermost/common/add-auth-header.js similarity index 66% rename from packages/backend/src/apps/gitlab/common/add-auth-header.ts rename to packages/backend/src/apps/mattermost/common/add-auth-header.js index 9b8e2ab3..b44932c5 100644 --- a/packages/backend/src/apps/gitlab/common/add-auth-header.ts +++ b/packages/backend/src/apps/mattermost/common/add-auth-header.js @@ -1,10 +1,9 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.accessToken) { requestConfig.headers = requestConfig.headers || {}; requestConfig.headers.Authorization = `Bearer ${$.auth.data.accessToken}`; } + return requestConfig; }; diff --git a/packages/backend/src/apps/mattermost/common/add-x-requested-with-header.ts b/packages/backend/src/apps/mattermost/common/add-x-requested-with-header.js similarity index 72% rename from packages/backend/src/apps/mattermost/common/add-x-requested-with-header.ts rename to packages/backend/src/apps/mattermost/common/add-x-requested-with-header.js index 65d89643..2e232874 100644 --- a/packages/backend/src/apps/mattermost/common/add-x-requested-with-header.ts +++ b/packages/backend/src/apps/mattermost/common/add-x-requested-with-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addXRequestedWithHeader: TBeforeRequest = ($, requestConfig) => { +const addXRequestedWithHeader = ($, requestConfig) => { // This is not documented yet required // ref. https://forum.mattermost.com/t/solved-invalid-or-expired-session-please-login-again/6772 requestConfig.headers = requestConfig.headers || {}; diff --git a/packages/backend/src/apps/mattermost/common/get-base-url.js b/packages/backend/src/apps/mattermost/common/get-base-url.js new file mode 100644 index 00000000..8ba13c4d --- /dev/null +++ b/packages/backend/src/apps/mattermost/common/get-base-url.js @@ -0,0 +1,5 @@ +const getBaseUrl = ($) => { + return $.auth.data.instanceUrl; +}; + +export default getBaseUrl; diff --git a/packages/backend/src/apps/mattermost/common/get-base-url.ts b/packages/backend/src/apps/mattermost/common/get-base-url.ts deleted file mode 100644 index 77538eca..00000000 --- a/packages/backend/src/apps/mattermost/common/get-base-url.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getBaseUrl = ($: IGlobalVariable): string => { - return $.auth.data.instanceUrl as string; -}; - -export default getBaseUrl; diff --git a/packages/backend/src/apps/mattermost/common/get-current-user.ts b/packages/backend/src/apps/mattermost/common/get-current-user.js similarity index 51% rename from packages/backend/src/apps/mattermost/common/get-current-user.ts rename to packages/backend/src/apps/mattermost/common/get-current-user.js index c6f42624..84286c28 100644 --- a/packages/backend/src/apps/mattermost/common/get-current-user.ts +++ b/packages/backend/src/apps/mattermost/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get('/api/v4/users/me'); const currentUser = response.data; return currentUser; diff --git a/packages/backend/src/apps/mattermost/common/set-base-url.js b/packages/backend/src/apps/mattermost/common/set-base-url.js new file mode 100644 index 00000000..af904f7d --- /dev/null +++ b/packages/backend/src/apps/mattermost/common/set-base-url.js @@ -0,0 +1,7 @@ +const setBaseUrl = ($, requestConfig) => { + requestConfig.baseURL = $.auth.data.instanceUrl; + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/mattermost/common/set-base-url.ts b/packages/backend/src/apps/mattermost/common/set-base-url.ts deleted file mode 100644 index 8f3aab56..00000000 --- a/packages/backend/src/apps/mattermost/common/set-base-url.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - requestConfig.baseURL = $.auth.data.instanceUrl as string; - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/mattermost/dynamic-data/index.js b/packages/backend/src/apps/mattermost/dynamic-data/index.js new file mode 100644 index 00000000..4305d611 --- /dev/null +++ b/packages/backend/src/apps/mattermost/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listChannels from './list-channels/index.js'; + +export default [listChannels]; diff --git a/packages/backend/src/apps/mattermost/dynamic-data/index.ts b/packages/backend/src/apps/mattermost/dynamic-data/index.ts deleted file mode 100644 index fae496fc..00000000 --- a/packages/backend/src/apps/mattermost/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listChannels from './list-channels'; - -export default [listChannels]; diff --git a/packages/backend/src/apps/mattermost/dynamic-data/list-channels/index.js b/packages/backend/src/apps/mattermost/dynamic-data/list-channels/index.js new file mode 100644 index 00000000..ab904c9e --- /dev/null +++ b/packages/backend/src/apps/mattermost/dynamic-data/list-channels/index.js @@ -0,0 +1,22 @@ +export default { + name: 'List channels', + key: 'listChannels', + + async run($) { + const channels = { + data: [], + error: null, + }; + + const response = await $.http.get('/api/v4/users/me/channels'); // this endpoint will return only channels user joined, there is no endpoint to list all channels available for user + + for (const channel of response.data) { + channels.data.push({ + value: channel.id, + name: channel.display_name || channel.id, // it's possible for channel to not have any name thus falling back to using id + }); + } + + return channels; + }, +}; diff --git a/packages/backend/src/apps/mattermost/dynamic-data/list-channels/index.ts b/packages/backend/src/apps/mattermost/dynamic-data/list-channels/index.ts deleted file mode 100644 index 35cde864..00000000 --- a/packages/backend/src/apps/mattermost/dynamic-data/list-channels/index.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type TChannel = { - id: string; - display_name: string; -}; - -type TResponse = { - data: TChannel[]; -}; - -export default { - name: 'List channels', - key: 'listChannels', - - async run($: IGlobalVariable) { - const channels: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { - data: [], - error: null, - }; - - const response: TResponse = await $.http.get('/api/v4/users/me/channels'); // this endpoint will return only channels user joined, there is no endpoint to list all channels available for user - - for (const channel of response.data) { - channels.data.push({ - value: channel.id as string, - name: (channel.display_name as string) || (channel.id as string), // it's possible for channel to not have any name thus falling back to using id - }); - } - - return channels; - }, -}; diff --git a/packages/backend/src/apps/mattermost/index.d.ts b/packages/backend/src/apps/mattermost/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/mattermost/index.ts b/packages/backend/src/apps/mattermost/index.js similarity index 66% rename from packages/backend/src/apps/mattermost/index.ts rename to packages/backend/src/apps/mattermost/index.js index 91a75b8e..309ff0b4 100644 --- a/packages/backend/src/apps/mattermost/index.ts +++ b/packages/backend/src/apps/mattermost/index.js @@ -1,10 +1,10 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import addXRequestedWithHeader from './common/add-x-requested-with-header'; -import setBaseUrl from './common/set-base-url'; -import auth from './auth'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import addXRequestedWithHeader from './common/add-x-requested-with-header.js'; +import setBaseUrl from './common/set-base-url.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Mattermost', diff --git a/packages/backend/src/apps/miro/actions/copy-board/index.ts b/packages/backend/src/apps/miro/actions/copy-board/index.js similarity index 92% rename from packages/backend/src/apps/miro/actions/copy-board/index.ts rename to packages/backend/src/apps/miro/actions/copy-board/index.js index c88942d4..201a4255 100644 --- a/packages/backend/src/apps/miro/actions/copy-board/index.ts +++ b/packages/backend/src/apps/miro/actions/copy-board/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Copy board', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Original board', key: 'originalBoard', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The board that you want to copy.', variables: true, @@ -26,7 +26,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, description: 'Title for the board.', variables: true, @@ -34,7 +34,7 @@ export default defineAction({ { label: 'Description', key: 'description', - type: 'string' as const, + type: 'string', required: false, description: 'Description of the board.', variables: true, @@ -42,7 +42,7 @@ export default defineAction({ { label: 'Team Access', key: 'teamAccess', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Team access to the board. Can be private, view, comment or edit. Default: private.', @@ -69,7 +69,7 @@ export default defineAction({ { label: 'Access Via Link', key: 'accessViaLink', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Access to the board by link. Can be private, view, comment. Default: private.', diff --git a/packages/backend/src/apps/miro/actions/create-board/index.ts b/packages/backend/src/apps/miro/actions/create-board/index.js similarity index 92% rename from packages/backend/src/apps/miro/actions/create-board/index.ts rename to packages/backend/src/apps/miro/actions/create-board/index.js index 435139b5..6633c6d3 100644 --- a/packages/backend/src/apps/miro/actions/create-board/index.ts +++ b/packages/backend/src/apps/miro/actions/create-board/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create board', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, description: 'Title for the board.', variables: true, @@ -16,7 +16,7 @@ export default defineAction({ { label: 'Description', key: 'description', - type: 'string' as const, + type: 'string', required: false, description: 'Description of the board.', variables: true, @@ -24,7 +24,7 @@ export default defineAction({ { label: 'Team Access', key: 'teamAccess', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Team access to the board. Can be private, view, comment or edit. Default: private.', @@ -51,7 +51,7 @@ export default defineAction({ { label: 'Access Via Link', key: 'accessViaLink', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Access to the board by link. Can be private, view, comment. Default: private.', diff --git a/packages/backend/src/apps/miro/actions/create-card-widget/index.ts b/packages/backend/src/apps/miro/actions/create-card-widget/index.js similarity index 82% rename from packages/backend/src/apps/miro/actions/create-card-widget/index.ts rename to packages/backend/src/apps/miro/actions/create-card-widget/index.js index c1cb4746..b319694c 100644 --- a/packages/backend/src/apps/miro/actions/create-card-widget/index.ts +++ b/packages/backend/src/apps/miro/actions/create-card-widget/index.js @@ -1,18 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; - -type Body = { - data: { - title: string; - description?: string; - dueDate?: string; - }; - style?: { - cardTheme?: string; - }; - parent: { - id: string; - }; -}; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create card widget', @@ -22,7 +8,7 @@ export default defineAction({ { label: 'Board', key: 'boardId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: '', variables: true, @@ -40,7 +26,7 @@ export default defineAction({ { label: 'Frame', key: 'frameId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.boardId'], description: @@ -64,7 +50,7 @@ export default defineAction({ { label: 'Card Title', key: 'cardTitle', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -72,7 +58,7 @@ export default defineAction({ { label: 'Card Title Link', key: 'cardTitleLink', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -80,7 +66,7 @@ export default defineAction({ { label: 'Card Description', key: 'cardDescription', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -88,7 +74,7 @@ export default defineAction({ { label: 'Card Due Date', key: 'cardDueDate', - type: 'string' as const, + type: 'string', required: false, description: 'format: date-time. Example value: 2023-10-12 22:00:55+00:00', @@ -97,7 +83,7 @@ export default defineAction({ { label: 'Card Border Color', key: 'cardBorderColor', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'In hex format. Default is blue (#2399F3).', variables: true, @@ -140,23 +126,23 @@ export default defineAction({ title = cardTitle; } - const body: Body = { + const body = { data: { - title: title as string, - description: cardDescription as string, + title: title, + description: cardDescription, }, style: {}, parent: { - id: frameId as string, + id: frameId, }, }; if (cardBorderColor) { - body.style.cardTheme = cardBorderColor as string; + body.style.cardTheme = cardBorderColor; } if (cardDueDate) { - body.data.dueDate = cardDueDate as string; + body.data.dueDate = cardDueDate; } const response = await $.http.post(`/v2/boards/${boardId}/cards`, body); diff --git a/packages/backend/src/apps/miro/actions/index.js b/packages/backend/src/apps/miro/actions/index.js new file mode 100644 index 00000000..c200553e --- /dev/null +++ b/packages/backend/src/apps/miro/actions/index.js @@ -0,0 +1,5 @@ +import copyBoard from './copy-board/index.js'; +import createBoard from './create-board/index.js'; +import createCardWidget from './create-card-widget/index.js'; + +export default [copyBoard, createBoard, createCardWidget]; diff --git a/packages/backend/src/apps/miro/actions/index.ts b/packages/backend/src/apps/miro/actions/index.ts deleted file mode 100644 index 896dd73f..00000000 --- a/packages/backend/src/apps/miro/actions/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import copyBoard from './copy-board'; -import createBoard from './create-board'; -import createCardWidget from './create-card-widget'; - -export default [copyBoard, createBoard, createCardWidget]; diff --git a/packages/backend/src/apps/miro/auth/generate-auth-url.ts b/packages/backend/src/apps/miro/auth/generate-auth-url.js similarity index 52% rename from packages/backend/src/apps/miro/auth/generate-auth-url.ts rename to packages/backend/src/apps/miro/auth/generate-auth-url.js index 0b84ef03..cb70ad36 100644 --- a/packages/backend/src/apps/miro/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/miro/auth/generate-auth-url.js @@ -1,14 +1,13 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ response_type: 'code', - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUri, }); diff --git a/packages/backend/src/apps/miro/auth/index.ts b/packages/backend/src/apps/miro/auth/index.js similarity index 74% rename from packages/backend/src/apps/miro/auth/index.ts rename to packages/backend/src/apps/miro/auth/index.js index 6193716a..e971a702 100644 --- a/packages/backend/src/apps/miro/auth/index.ts +++ b/packages/backend/src/apps/miro/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/miro/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/miro/auth/is-still-verified.js b/packages/backend/src/apps/miro/auth/is-still-verified.js new file mode 100644 index 00000000..6d792b12 --- /dev/null +++ b/packages/backend/src/apps/miro/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/miro/auth/is-still-verified.ts b/packages/backend/src/apps/miro/auth/is-still-verified.ts deleted file mode 100644 index 93a01099..00000000 --- a/packages/backend/src/apps/miro/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/miro/auth/refresh-token.ts b/packages/backend/src/apps/miro/auth/refresh-token.js similarity index 61% rename from packages/backend/src/apps/miro/auth/refresh-token.ts rename to packages/backend/src/apps/miro/auth/refresh-token.js index 8c160b73..62be5d2a 100644 --- a/packages/backend/src/apps/miro/auth/refresh-token.ts +++ b/packages/backend/src/apps/miro/auth/refresh-token.js @@ -1,12 +1,11 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { const params = new URLSearchParams({ grant_type: 'refresh_token', - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - refresh_token: $.auth.data.refreshToken as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post('/v1/oauth/token', params.toString()); diff --git a/packages/backend/src/apps/miro/auth/verify-credentials.ts b/packages/backend/src/apps/miro/auth/verify-credentials.js similarity index 73% rename from packages/backend/src/apps/miro/auth/verify-credentials.ts rename to packages/backend/src/apps/miro/auth/verify-credentials.js index 9fe3915e..d6d862c2 100644 --- a/packages/backend/src/apps/miro/auth/verify-credentials.ts +++ b/packages/backend/src/apps/miro/auth/verify-credentials.js @@ -1,11 +1,10 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const params = { grant_type: 'authorization_code', client_id: $.auth.data.clientId, diff --git a/packages/backend/src/apps/miro/common/add-auth-header.ts b/packages/backend/src/apps/miro/common/add-auth-header.js similarity index 62% rename from packages/backend/src/apps/miro/common/add-auth-header.ts rename to packages/backend/src/apps/miro/common/add-auth-header.js index 8e7798b8..02477aa4 100644 --- a/packages/backend/src/apps/miro/common/add-auth-header.ts +++ b/packages/backend/src/apps/miro/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.accessToken) { requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/miro/common/get-current-user.ts b/packages/backend/src/apps/miro/common/get-current-user.js similarity index 61% rename from packages/backend/src/apps/miro/common/get-current-user.ts rename to packages/backend/src/apps/miro/common/get-current-user.js index 913da3a6..2c09552f 100644 --- a/packages/backend/src/apps/miro/common/get-current-user.ts +++ b/packages/backend/src/apps/miro/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { +const getCurrentUser = async ($) => { const { data } = await $.http.get( `https://api.miro.com/v1/oauth-token?access_token=${$.auth.data.accessToken}` ); diff --git a/packages/backend/src/apps/miro/dynamic-data/index.js b/packages/backend/src/apps/miro/dynamic-data/index.js new file mode 100644 index 00000000..fd8026f8 --- /dev/null +++ b/packages/backend/src/apps/miro/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listBoards from './list-boards/index.js'; +import listFrames from './list-frames/index.js'; + +export default [listBoards, listFrames]; diff --git a/packages/backend/src/apps/miro/dynamic-data/index.ts b/packages/backend/src/apps/miro/dynamic-data/index.ts deleted file mode 100644 index ade1d40a..00000000 --- a/packages/backend/src/apps/miro/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listBoards from './list-boards'; -import listFrames from './list-frames'; - -export default [listBoards, listFrames]; diff --git a/packages/backend/src/apps/miro/dynamic-data/list-boards/index.ts b/packages/backend/src/apps/miro/dynamic-data/list-boards/index.js similarity index 53% rename from packages/backend/src/apps/miro/dynamic-data/list-boards/index.ts rename to packages/backend/src/apps/miro/dynamic-data/list-boards/index.js index 9ef3f55d..849ebc5d 100644 --- a/packages/backend/src/apps/miro/dynamic-data/list-boards/index.ts +++ b/packages/backend/src/apps/miro/dynamic-data/list-boards/index.js @@ -1,25 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type ResponseBody = { - data: { - data: { - id: number; - name: string; - }[]; - links: { - next: string; - }; - }; -}; - export default { name: 'List boards', key: 'listBoards', - async run($: IGlobalVariable) { - const boards: { - data: IJSONObject[]; - } = { + async run($) { + const boards = { data: [], }; @@ -27,7 +11,7 @@ export default { do { const { data: { data, links }, - }: ResponseBody = await $.http.get('/v2/boards'); + } = await $.http.get('/v2/boards'); next = links?.next; diff --git a/packages/backend/src/apps/miro/dynamic-data/list-frames/index.ts b/packages/backend/src/apps/miro/dynamic-data/list-frames/index.js similarity index 69% rename from packages/backend/src/apps/miro/dynamic-data/list-frames/index.ts rename to packages/backend/src/apps/miro/dynamic-data/list-frames/index.js index 8a234c1a..2cbafd3a 100644 --- a/packages/backend/src/apps/miro/dynamic-data/list-frames/index.ts +++ b/packages/backend/src/apps/miro/dynamic-data/list-frames/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List frames', key: 'listFrames', - async run($: IGlobalVariable) { - const frames: { - data: IJSONObject[]; - } = { + async run($) { + const frames = { data: [], }; @@ -25,9 +21,7 @@ export default { next = links?.next; - const allFrames = data.filter( - (item: IJSONObject) => item.type === 'frame' - ); + const allFrames = data.filter((item) => item.type === 'frame'); if (allFrames.length) { for (const frame of allFrames) { diff --git a/packages/backend/src/apps/miro/index.d.ts b/packages/backend/src/apps/miro/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/miro/index.ts b/packages/backend/src/apps/miro/index.js similarity index 61% rename from packages/backend/src/apps/miro/index.ts rename to packages/backend/src/apps/miro/index.js index 685bca28..9aac2e01 100644 --- a/packages/backend/src/apps/miro/index.ts +++ b/packages/backend/src/apps/miro/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Miro', diff --git a/packages/backend/src/apps/notion/actions/create-database-item/index.ts b/packages/backend/src/apps/notion/actions/create-database-item/index.js similarity index 80% rename from packages/backend/src/apps/notion/actions/create-database-item/index.ts rename to packages/backend/src/apps/notion/actions/create-database-item/index.js index 334bc511..c9c4a4e7 100644 --- a/packages/backend/src/apps/notion/actions/create-database-item/index.ts +++ b/packages/backend/src/apps/notion/actions/create-database-item/index.js @@ -1,11 +1,4 @@ -import { IJSONArray, IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; - -type TBody = { - parent: IJSONObject; - properties: IJSONObject; - children: IJSONArray; -}; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create database item', @@ -15,7 +8,7 @@ export default defineAction({ { label: 'Database', key: 'databaseId', - type: 'dropdown' as const, + type: 'dropdown', required: true, source: { type: 'query', @@ -31,7 +24,7 @@ export default defineAction({ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: false, description: 'This field has a 2000 character limit. Any characters beyond 2000 will not be included.', @@ -40,7 +33,7 @@ export default defineAction({ { label: 'Content', key: 'content', - type: 'string' as const, + type: 'string', required: false, description: 'The text to add to the page body. The max length for this field is 2000 characters. Any characters beyond 2000 will not be included.', @@ -49,12 +42,12 @@ export default defineAction({ ], async run($) { - const name = $.step.parameters.name as string; + const name = $.step.parameters.name; const truncatedName = name.slice(0, 2000); - const content = $.step.parameters.content as string; + const content = $.step.parameters.content; const truncatedContent = content.slice(0, 2000); - const body: TBody = { + const body = { parent: { database_id: $.step.parameters.databaseId, }, diff --git a/packages/backend/src/apps/notion/actions/create-page/index.ts b/packages/backend/src/apps/notion/actions/create-page/index.js similarity index 78% rename from packages/backend/src/apps/notion/actions/create-page/index.ts rename to packages/backend/src/apps/notion/actions/create-page/index.js index a2590d21..37546302 100644 --- a/packages/backend/src/apps/notion/actions/create-page/index.ts +++ b/packages/backend/src/apps/notion/actions/create-page/index.js @@ -1,11 +1,4 @@ -import { IJSONArray, IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; - -type TBody = { - parent: IJSONObject; - properties: IJSONObject; - children: IJSONArray; -}; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create page', @@ -15,7 +8,7 @@ export default defineAction({ { label: 'Parent page', key: 'parentPageId', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { @@ -32,7 +25,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: false, description: 'This field has a 2000 character limit. Any characters beyond 2000 will not be included.', @@ -41,7 +34,7 @@ export default defineAction({ { label: 'Content', key: 'content', - type: 'string' as const, + type: 'string', required: false, description: 'The text to add to the page body. The max length for this field is 2000 characters. Any characters beyond 2000 will not be included.', @@ -50,13 +43,13 @@ export default defineAction({ ], async run($) { - const parentPageId = $.step.parameters.parentPageId as string; - const title = $.step.parameters.title as string; + const parentPageId = $.step.parameters.parentPageId; + const title = $.step.parameters.title; const truncatedTitle = title.slice(0, 2000); - const content = $.step.parameters.content as string; + const content = $.step.parameters.content; const truncatedContent = content.slice(0, 2000); - const body: TBody = { + const body = { parent: { page_id: parentPageId, }, diff --git a/packages/backend/src/apps/notion/actions/find-database-item/index.ts b/packages/backend/src/apps/notion/actions/find-database-item/index.js similarity index 74% rename from packages/backend/src/apps/notion/actions/find-database-item/index.ts rename to packages/backend/src/apps/notion/actions/find-database-item/index.js index fbd2c056..44f9fea1 100644 --- a/packages/backend/src/apps/notion/actions/find-database-item/index.ts +++ b/packages/backend/src/apps/notion/actions/find-database-item/index.js @@ -1,10 +1,4 @@ -import { IJSONArray, IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; - -type TBody = { - filter: IJSONObject; - sorts: IJSONArray; -}; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Find database item', @@ -14,7 +8,7 @@ export default defineAction({ { label: 'Database', key: 'databaseId', - type: 'dropdown' as const, + type: 'dropdown', required: true, source: { type: 'query', @@ -30,7 +24,7 @@ export default defineAction({ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: false, description: 'This field has a 2000 character limit. Any characters beyond 2000 will not be included.', @@ -39,11 +33,11 @@ export default defineAction({ ], async run($) { - const databaseId = $.step.parameters.databaseId as string; - const name = $.step.parameters.name as string; + const databaseId = $.step.parameters.databaseId; + const name = $.step.parameters.name; const truncatedName = name.slice(0, 2000); - const body: TBody = { + const body = { filter: { property: 'Name', rich_text: { diff --git a/packages/backend/src/apps/notion/actions/index.js b/packages/backend/src/apps/notion/actions/index.js new file mode 100644 index 00000000..0b1629e1 --- /dev/null +++ b/packages/backend/src/apps/notion/actions/index.js @@ -0,0 +1,5 @@ +import createDatabaseItem from './create-database-item/index.js'; +import createPage from './create-page/index.js'; +import findDatabaseItem from './find-database-item/index.js'; + +export default [createDatabaseItem, createPage, findDatabaseItem]; diff --git a/packages/backend/src/apps/notion/actions/index.ts b/packages/backend/src/apps/notion/actions/index.ts deleted file mode 100644 index 00f0bed3..00000000 --- a/packages/backend/src/apps/notion/actions/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import createDatabaseItem from './create-database-item'; -import createPage from './create-page'; -import findDatabaseItem from './find-database-item'; - -export default [createDatabaseItem, createPage, findDatabaseItem]; diff --git a/packages/backend/src/apps/notion/auth/generate-auth-url.js b/packages/backend/src/apps/notion/auth/generate-auth-url.js new file mode 100644 index 00000000..5547ec12 --- /dev/null +++ b/packages/backend/src/apps/notion/auth/generate-auth-url.js @@ -0,0 +1,23 @@ +import { URL, URLSearchParams } from 'url'; + +export default async function generateAuthUrl($) { + const oauthRedirectUrlField = $.app.auth.fields.find( + (field) => field.key == 'oAuthRedirectUrl' + ); + const redirectUri = oauthRedirectUrlField.value; + const searchParams = new URLSearchParams({ + client_id: $.auth.data.clientId, + redirect_uri: redirectUri, + response_type: 'code', + owner: 'user', + }); + + const url = new URL( + `/v1/oauth/authorize?${searchParams}`, + $.app.apiBaseUrl + ).toString(); + + await $.auth.set({ + url, + }); +} diff --git a/packages/backend/src/apps/notion/auth/generate-auth-url.ts b/packages/backend/src/apps/notion/auth/generate-auth-url.ts deleted file mode 100644 index e34c1ead..00000000 --- a/packages/backend/src/apps/notion/auth/generate-auth-url.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import { URL, URLSearchParams } from 'url'; - -export default async function generateAuthUrl($: IGlobalVariable) { - const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' - ); - const redirectUri = oauthRedirectUrlField.value as string; - const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - redirect_uri: redirectUri, - response_type: 'code', - owner: 'user', - }); - - const url = new URL(`/v1/oauth/authorize?${searchParams}`, $.app.apiBaseUrl).toString(); - - await $.auth.set({ - url, - }); -} diff --git a/packages/backend/src/apps/notion/auth/index.ts b/packages/backend/src/apps/notion/auth/index.js similarity index 80% rename from packages/backend/src/apps/notion/auth/index.ts rename to packages/backend/src/apps/notion/auth/index.js index 8c9d1aa6..5dba7507 100644 --- a/packages/backend/src/apps/notion/auth/index.ts +++ b/packages/backend/src/apps/notion/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/notion/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -32,7 +32,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/notion/auth/is-still-verified.js b/packages/backend/src/apps/notion/auth/is-still-verified.js new file mode 100644 index 00000000..1b9d46d0 --- /dev/null +++ b/packages/backend/src/apps/notion/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user.id; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/notion/auth/is-still-verified.ts b/packages/backend/src/apps/notion/auth/is-still-verified.ts deleted file mode 100644 index befb7694..00000000 --- a/packages/backend/src/apps/notion/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user.id; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/notion/auth/verify-credentials.ts b/packages/backend/src/apps/notion/auth/verify-credentials.js similarity index 77% rename from packages/backend/src/apps/notion/auth/verify-credentials.ts rename to packages/backend/src/apps/notion/auth/verify-credentials.js index f3104eca..5bed76f4 100644 --- a/packages/backend/src/apps/notion/auth/verify-credentials.ts +++ b/packages/backend/src/apps/notion/auth/verify-credentials.js @@ -1,11 +1,10 @@ -import { IGlobalVariable, IField } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const response = await $.http.post( `${$.app.apiBaseUrl}/v1/oauth/token`, { @@ -20,8 +19,8 @@ const verifyCredentials = async ($: IGlobalVariable) => { ).toString('base64')}`, }, additionalProperties: { - skipAddingAuthHeader: true - } + skipAddingAuthHeader: true, + }, } ); diff --git a/packages/backend/src/apps/hubspot/common/add-auth-header.ts b/packages/backend/src/apps/notion/common/add-auth-header.js similarity index 53% rename from packages/backend/src/apps/hubspot/common/add-auth-header.ts rename to packages/backend/src/apps/notion/common/add-auth-header.js index d16f394f..38e69094 100644 --- a/packages/backend/src/apps/hubspot/common/add-auth-header.ts +++ b/packages/backend/src/apps/notion/common/add-auth-header.js @@ -1,7 +1,6 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if (requestConfig.additionalProperties?.skipAddingAuthHeader) return requestConfig; +const addAuthHeader = ($, requestConfig) => { + if (requestConfig.additionalProperties?.skipAddingAuthHeader) + return requestConfig; if ($.auth.data?.accessToken) { const authorizationHeader = `Bearer ${$.auth.data.accessToken}`; diff --git a/packages/backend/src/apps/notion/common/add-notion-version-header.ts b/packages/backend/src/apps/notion/common/add-notion-version-header.js similarity index 50% rename from packages/backend/src/apps/notion/common/add-notion-version-header.ts rename to packages/backend/src/apps/notion/common/add-notion-version-header.js index 0c6197a4..08b2f903 100644 --- a/packages/backend/src/apps/notion/common/add-notion-version-header.ts +++ b/packages/backend/src/apps/notion/common/add-notion-version-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addNotionVersionHeader: TBeforeRequest = ($, requestConfig) => { +const addNotionVersionHeader = ($, requestConfig) => { requestConfig.headers['Notion-Version'] = '2022-06-28'; return requestConfig; diff --git a/packages/backend/src/apps/notion/common/get-current-user.js b/packages/backend/src/apps/notion/common/get-current-user.js new file mode 100644 index 00000000..8147d1ff --- /dev/null +++ b/packages/backend/src/apps/notion/common/get-current-user.js @@ -0,0 +1,9 @@ +const getCurrentUser = async ($) => { + const userId = $.auth.data.owner.user.id; + const response = await $.http.get(`/v1/users/${userId}`); + + const currentUser = response.data; + return currentUser; +}; + +export default getCurrentUser; diff --git a/packages/backend/src/apps/notion/common/get-current-user.ts b/packages/backend/src/apps/notion/common/get-current-user.ts deleted file mode 100644 index 1110d23b..00000000 --- a/packages/backend/src/apps/notion/common/get-current-user.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type Owner = { - user: { - id: string - } -} - -const getCurrentUser = async ($: IGlobalVariable): Promise => { - const userId = ($.auth.data.owner as Owner).user.id; - const response = await $.http.get(`/v1/users/${userId}`); - - const currentUser = response.data; - return currentUser; -}; - -export default getCurrentUser; diff --git a/packages/backend/src/apps/notion/dynamic-data/index.js b/packages/backend/src/apps/notion/dynamic-data/index.js new file mode 100644 index 00000000..3811a7c3 --- /dev/null +++ b/packages/backend/src/apps/notion/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listDatabases from './list-databases/index.js'; +import listParentPages from './list-parent-pages/index.js'; + +export default [listDatabases, listParentPages]; diff --git a/packages/backend/src/apps/notion/dynamic-data/index.ts b/packages/backend/src/apps/notion/dynamic-data/index.ts deleted file mode 100644 index d9d69c68..00000000 --- a/packages/backend/src/apps/notion/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listDatabases from './list-databases'; -import listParentPages from './list-parent-pages'; - -export default [listDatabases, listParentPages]; diff --git a/packages/backend/src/apps/notion/dynamic-data/list-databases/index.js b/packages/backend/src/apps/notion/dynamic-data/list-databases/index.js new file mode 100644 index 00000000..da8f27d8 --- /dev/null +++ b/packages/backend/src/apps/notion/dynamic-data/list-databases/index.js @@ -0,0 +1,32 @@ +export default { + name: 'List databases', + key: 'listDatabases', + + async run($) { + const databases = { + data: [], + error: null, + }; + const payload = { + filter: { + value: 'database', + property: 'object', + }, + }; + + do { + const response = await $.http.post('/v1/search', payload); + + payload.start_cursor = response.data.next_cursor; + + for (const database of response.data.results) { + databases.data.push({ + value: database.id, + name: database.title[0].plain_text, + }); + } + } while (payload.start_cursor); + + return databases; + }, +}; diff --git a/packages/backend/src/apps/notion/dynamic-data/list-databases/index.ts b/packages/backend/src/apps/notion/dynamic-data/list-databases/index.ts deleted file mode 100644 index ca16aaa2..00000000 --- a/packages/backend/src/apps/notion/dynamic-data/list-databases/index.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type Database = { - id: string; - name: string; - title: [ - { - plain_text: string; - } - ]; -} - -type ResponseData = { - results: Database[]; - next_cursor?: string; -} - -type Payload = { - filter: { - value: 'database'; - property: 'object'; - }; - start_cursor?: string; -}; - -export default { - name: 'List databases', - key: 'listDatabases', - - async run($: IGlobalVariable) { - const databases: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { - data: [], - error: null, - }; - const payload: Payload = { - filter: { - value: 'database', - property: 'object' - }, - }; - - do { - const response = await $.http.post('/v1/search', payload); - - payload.start_cursor = response.data.next_cursor; - - for (const database of response.data.results) { - databases.data.push({ - value: database.id as string, - name: database.title[0].plain_text as string, - }); - } - } while (payload.start_cursor); - - return databases; - }, -}; diff --git a/packages/backend/src/apps/notion/dynamic-data/list-parent-pages/index.js b/packages/backend/src/apps/notion/dynamic-data/list-parent-pages/index.js new file mode 100644 index 00000000..a968a0b1 --- /dev/null +++ b/packages/backend/src/apps/notion/dynamic-data/list-parent-pages/index.js @@ -0,0 +1,37 @@ +export default { + name: 'List parent pages', + key: 'listParentPages', + + async run($) { + const parentPages = { + data: [], + error: null, + }; + const payload = { + filter: { + value: 'page', + property: 'object', + }, + }; + + do { + const response = + (await $.http.post) < ResponseData > ('/v1/search', payload); + + payload.start_cursor = response.data.next_cursor; + + const topLevelPages = response.data.results.filter( + (page) => page.parent.workspace + ); + + for (const pages of topLevelPages) { + parentPages.data.push({ + value: pages.id, + name: pages.properties.title.title[0].plain_text, + }); + } + } while (payload.start_cursor); + + return parentPages; + }, +}; diff --git a/packages/backend/src/apps/notion/dynamic-data/list-parent-pages/index.ts b/packages/backend/src/apps/notion/dynamic-data/list-parent-pages/index.ts deleted file mode 100644 index f752f587..00000000 --- a/packages/backend/src/apps/notion/dynamic-data/list-parent-pages/index.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type Page = { - id: string; - properties: { - title: { - title: [ - { - plain_text: string; - } - ]; - }; - }; - parent: { - workspace: boolean; - }; -}; - -type ResponseData = { - results: Page[]; - next_cursor?: string; -}; - -type Payload = { - filter: { - value: 'page'; - property: 'object'; - }; - start_cursor?: string; -}; - -export default { - name: 'List parent pages', - key: 'listParentPages', - - async run($: IGlobalVariable) { - const parentPages: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { - data: [], - error: null, - }; - const payload: Payload = { - filter: { - value: 'page', - property: 'object', - }, - }; - - do { - const response = await $.http.post('/v1/search', payload); - - payload.start_cursor = response.data.next_cursor; - - const topLevelPages = response.data.results.filter( - (page) => page.parent.workspace - ); - - for (const pages of topLevelPages) { - parentPages.data.push({ - value: pages.id as string, - name: pages.properties.title.title[0].plain_text as string, - }); - } - } while (payload.start_cursor); - - return parentPages; - }, -}; diff --git a/packages/backend/src/apps/notion/index.d.ts b/packages/backend/src/apps/notion/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/notion/index.ts b/packages/backend/src/apps/notion/index.js similarity index 62% rename from packages/backend/src/apps/notion/index.ts rename to packages/backend/src/apps/notion/index.js index d9d6ef4f..2c04923c 100644 --- a/packages/backend/src/apps/notion/index.ts +++ b/packages/backend/src/apps/notion/index.js @@ -1,10 +1,10 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import addNotionVersionHeader from './common/add-notion-version-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import addNotionVersionHeader from './common/add-notion-version-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Notion', diff --git a/packages/backend/src/apps/notion/triggers/index.js b/packages/backend/src/apps/notion/triggers/index.js new file mode 100644 index 00000000..85d33809 --- /dev/null +++ b/packages/backend/src/apps/notion/triggers/index.js @@ -0,0 +1,4 @@ +import newDatabaseItems from './new-database-items/index.js'; +import updatedDatabaseItems from './updated-database-items/index.js'; + +export default [newDatabaseItems, updatedDatabaseItems]; diff --git a/packages/backend/src/apps/notion/triggers/index.ts b/packages/backend/src/apps/notion/triggers/index.ts deleted file mode 100644 index 0914477b..00000000 --- a/packages/backend/src/apps/notion/triggers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import newDatabaseItems from './new-database-items'; -import updatedDatabaseItems from './updated-database-items'; - -export default [newDatabaseItems, updatedDatabaseItems]; diff --git a/packages/backend/src/apps/notion/triggers/new-database-items/index.ts b/packages/backend/src/apps/notion/triggers/new-database-items/index.js similarity index 78% rename from packages/backend/src/apps/notion/triggers/new-database-items/index.ts rename to packages/backend/src/apps/notion/triggers/new-database-items/index.js index 989c97f7..8ed8ccd5 100644 --- a/packages/backend/src/apps/notion/triggers/new-database-items/index.ts +++ b/packages/backend/src/apps/notion/triggers/new-database-items/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newDatabaseItems from './new-database-items'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newDatabaseItems from './new-database-items.js'; export default defineTrigger({ name: 'New database items', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Database', key: 'databaseId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: false, source: { diff --git a/packages/backend/src/apps/notion/triggers/new-database-items/new-database-items.js b/packages/backend/src/apps/notion/triggers/new-database-items/new-database-items.js new file mode 100644 index 00000000..1d134f58 --- /dev/null +++ b/packages/backend/src/apps/notion/triggers/new-database-items/new-database-items.js @@ -0,0 +1,29 @@ +const newDatabaseItems = async ($) => { + const payload = { + sorts: [ + { + timestamp: 'created_time', + direction: 'descending', + }, + ], + }; + + const databaseId = $.step.parameters.databaseId; + const path = `/v1/databases/${databaseId}/query`; + do { + const response = await $.http.post(path, payload); + + payload.start_cursor = response.data.next_cursor; + + for (const databaseItem of response.data.results) { + $.pushTriggerItem({ + raw: databaseItem, + meta: { + internalId: databaseItem.id, + }, + }); + } + } while (payload.start_cursor); +}; + +export default newDatabaseItems; diff --git a/packages/backend/src/apps/notion/triggers/new-database-items/new-database-items.ts b/packages/backend/src/apps/notion/triggers/new-database-items/new-database-items.ts deleted file mode 100644 index 90b619c8..00000000 --- a/packages/backend/src/apps/notion/triggers/new-database-items/new-database-items.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type DatabaseItem = { - id: string; -} - -type ResponseData = { - results: DatabaseItem[]; - next_cursor?: string; -} - -type Payload = { - sorts: [ - { - timestamp: 'created_time' | 'last_edited_time'; - direction: 'ascending' | 'descending'; - } - ]; - start_cursor?: string; -}; - -const newDatabaseItems = async ($: IGlobalVariable) => { - const payload: Payload = { - sorts: [ - { - timestamp: 'created_time', - direction: 'descending' - } - ], - }; - - const databaseId = $.step.parameters.databaseId as string; - const path = `/v1/databases/${databaseId}/query`; - do { - const response = await $.http.post(path, payload); - - payload.start_cursor = response.data.next_cursor; - - for (const databaseItem of response.data.results) { - $.pushTriggerItem({ - raw: databaseItem, - meta: { - internalId: databaseItem.id, - } - }) - } - } while (payload.start_cursor); -}; - -export default newDatabaseItems; diff --git a/packages/backend/src/apps/notion/triggers/updated-database-items/index.ts b/packages/backend/src/apps/notion/triggers/updated-database-items/index.js similarity index 78% rename from packages/backend/src/apps/notion/triggers/updated-database-items/index.ts rename to packages/backend/src/apps/notion/triggers/updated-database-items/index.js index 82c493a3..a08ced6f 100644 --- a/packages/backend/src/apps/notion/triggers/updated-database-items/index.ts +++ b/packages/backend/src/apps/notion/triggers/updated-database-items/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import updatedDatabaseItems from './updated-database-items'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import updatedDatabaseItems from './updated-database-items.js'; export default defineTrigger({ name: 'Updated database items', @@ -11,7 +11,7 @@ export default defineTrigger({ { label: 'Database', key: 'databaseId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: false, source: { diff --git a/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.js b/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.js new file mode 100644 index 00000000..282aaf9f --- /dev/null +++ b/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.js @@ -0,0 +1,29 @@ +const updatedDatabaseItems = async ($) => { + const payload = { + sorts: [ + { + timestamp: 'last_edited_time', + direction: 'descending', + }, + ], + }; + + const databaseId = $.step.parameters.databaseId; + const path = `/v1/databases/${databaseId}/query`; + do { + const response = await $.http.post(path, payload); + + payload.start_cursor = response.data.next_cursor; + + for (const databaseItem of response.data.results) { + $.pushTriggerItem({ + raw: databaseItem, + meta: { + internalId: `${databaseItem.id}-${databaseItem.last_edited_time}`, + }, + }); + } + } while (payload.start_cursor); +}; + +export default updatedDatabaseItems; diff --git a/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.ts b/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.ts deleted file mode 100644 index d63f2f11..00000000 --- a/packages/backend/src/apps/notion/triggers/updated-database-items/updated-database-items.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type DatabaseItem = { - id: string; - last_edited_time: string; -}; - -type ResponseData = { - results: DatabaseItem[]; - next_cursor?: string; -}; - -type Payload = { - sorts: [ - { - timestamp: 'created_time' | 'last_edited_time'; - direction: 'ascending' | 'descending'; - } - ]; - start_cursor?: string; -}; - -const updatedDatabaseItems = async ($: IGlobalVariable) => { - const payload: Payload = { - sorts: [ - { - timestamp: 'last_edited_time', - direction: 'descending', - }, - ], - }; - - const databaseId = $.step.parameters.databaseId as string; - const path = `/v1/databases/${databaseId}/query`; - do { - const response = await $.http.post(path, payload); - - payload.start_cursor = response.data.next_cursor; - - for (const databaseItem of response.data.results) { - $.pushTriggerItem({ - raw: databaseItem, - meta: { - internalId: `${databaseItem.id}-${databaseItem.last_edited_time}`, - }, - }); - } - } while (payload.start_cursor); -}; - -export default updatedDatabaseItems; diff --git a/packages/backend/src/apps/ntfy/actions/index.js b/packages/backend/src/apps/ntfy/actions/index.js new file mode 100644 index 00000000..92d67c2c --- /dev/null +++ b/packages/backend/src/apps/ntfy/actions/index.js @@ -0,0 +1,3 @@ +import sendMessage from './send-message/index.js'; + +export default [sendMessage]; diff --git a/packages/backend/src/apps/ntfy/actions/index.ts b/packages/backend/src/apps/ntfy/actions/index.ts deleted file mode 100644 index 37aeb338..00000000 --- a/packages/backend/src/apps/ntfy/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sendMessage from './send-message'; - -export default [sendMessage]; diff --git a/packages/backend/src/apps/ntfy/actions/send-message/index.ts b/packages/backend/src/apps/ntfy/actions/send-message/index.js similarity index 70% rename from packages/backend/src/apps/ntfy/actions/send-message/index.ts rename to packages/backend/src/apps/ntfy/actions/send-message/index.js index 8cc91584..d3079e54 100644 --- a/packages/backend/src/apps/ntfy/actions/send-message/index.ts +++ b/packages/backend/src/apps/ntfy/actions/send-message/index.js @@ -1,5 +1,5 @@ import qs from 'qs'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Send message', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Topic', key: 'topic', - type: 'string' as const, + type: 'string', required: true, description: 'Target topic name.', variables: true, @@ -17,15 +17,16 @@ export default defineAction({ { label: 'Message body', key: 'message', - type: 'string' as const, + type: 'string', required: true, - description: 'Message body to be sent, set to triggered if empty or not passed.', + description: + 'Message body to be sent, set to triggered if empty or not passed.', variables: true, }, { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: false, description: 'Message title.', variables: true, @@ -33,7 +34,7 @@ export default defineAction({ { label: 'Email', key: 'email', - type: 'string' as const, + type: 'string', required: false, description: 'E-mail address for e-mail notifications.', variables: true, @@ -41,7 +42,7 @@ export default defineAction({ { label: 'Click URL', key: 'click', - type: 'string' as const, + type: 'string', required: false, description: 'Website opened when notification is clicked.', variables: true, @@ -49,7 +50,7 @@ export default defineAction({ { label: 'Attach file by URL', key: 'attach', - type: 'string' as const, + type: 'string', required: false, description: 'URL of an attachment.', variables: true, @@ -57,7 +58,7 @@ export default defineAction({ { label: 'Filename', key: 'filename', - type: 'string' as const, + type: 'string', required: false, description: 'File name of the attachment.', variables: true, @@ -65,24 +66,17 @@ export default defineAction({ { label: 'Delay', key: 'delay', - type: 'string' as const, + type: 'string', required: false, - description: 'Timestamp or duration for delayed delivery. For example, 30min or 9am.', + description: + 'Timestamp or duration for delayed delivery. For example, 30min or 9am.', variables: true, }, ], async run($) { - const { - topic, - message, - title, - email, - click, - attach, - filename, - delay - } = $.step.parameters; + const { topic, message, title, email, click, attach, filename, delay } = + $.step.parameters; const payload = { topic, message, @@ -91,7 +85,7 @@ export default defineAction({ click, attach, filename, - delay + delay, }; const response = await $.http.post('/', payload); diff --git a/packages/backend/src/apps/ntfy/auth/index.ts b/packages/backend/src/apps/ntfy/auth/index.js similarity index 60% rename from packages/backend/src/apps/ntfy/auth/index.ts rename to packages/backend/src/apps/ntfy/auth/index.js index f783c907..f8eaed35 100644 --- a/packages/backend/src/apps/ntfy/auth/index.ts +++ b/packages/backend/src/apps/ntfy/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'serverUrl', label: 'Server URL', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: 'https://ntfy.sh', @@ -17,22 +17,24 @@ export default { { key: 'username', label: 'Username', - type: 'string' as const, + type: 'string', required: false, readOnly: false, placeholder: null, clickToCopy: false, - description: 'You may need to provide your username if your installation requires authentication.', + description: + 'You may need to provide your username if your installation requires authentication.', }, { key: 'password', label: 'Password', - type: 'string' as const, + type: 'string', required: false, readOnly: false, placeholder: null, clickToCopy: false, - description: 'You may need to provide your password if your installation requires authentication.', + description: + 'You may need to provide your password if your installation requires authentication.', }, ], diff --git a/packages/backend/src/apps/ntfy/auth/is-still-verified.js b/packages/backend/src/apps/ntfy/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/ntfy/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/ntfy/auth/is-still-verified.ts b/packages/backend/src/apps/ntfy/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/ntfy/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/ntfy/auth/verify-credentials.ts b/packages/backend/src/apps/ntfy/auth/verify-credentials.js similarity index 55% rename from packages/backend/src/apps/ntfy/auth/verify-credentials.ts rename to packages/backend/src/apps/ntfy/auth/verify-credentials.js index 84d1d623..4a1aed22 100644 --- a/packages/backend/src/apps/ntfy/auth/verify-credentials.ts +++ b/packages/backend/src/apps/ntfy/auth/verify-credentials.js @@ -1,11 +1,9 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { await $.http.post('/', { topic: 'automatisch' }); let screenName = $.auth.data.serverUrl; if ($.auth.data.username) { - screenName = `${$.auth.data.username} @ ${screenName}` + screenName = `${$.auth.data.username} @ ${screenName}`; } await $.auth.set({ diff --git a/packages/backend/src/apps/ntfy/common/add-auth-header.js b/packages/backend/src/apps/ntfy/common/add-auth-header.js new file mode 100644 index 00000000..0c533682 --- /dev/null +++ b/packages/backend/src/apps/ntfy/common/add-auth-header.js @@ -0,0 +1,16 @@ +const addAuthHeader = ($, requestConfig) => { + if ($.auth.data.serverUrl) { + requestConfig.baseURL = $.auth.data.serverUrl; + } + + if ($.auth.data?.username && $.auth.data?.password) { + requestConfig.auth = { + username: $.auth.data.username, + password: $.auth.data.password, + }; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/ntfy/common/add-auth-header.ts b/packages/backend/src/apps/ntfy/common/add-auth-header.ts deleted file mode 100644 index 86518583..00000000 --- a/packages/backend/src/apps/ntfy/common/add-auth-header.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data.serverUrl) { - requestConfig.baseURL = $.auth.data.serverUrl as string; - } - - if ($.auth.data?.username && $.auth.data?.password) { - requestConfig.auth = { - username: $.auth.data.username as string, - password: $.auth.data.password as string, - } - } - - return requestConfig; -}; - -export default addAuthHeader; diff --git a/packages/backend/src/apps/ntfy/index.d.ts b/packages/backend/src/apps/ntfy/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/ntfy/index.ts b/packages/backend/src/apps/ntfy/index.js similarity index 65% rename from packages/backend/src/apps/ntfy/index.ts rename to packages/backend/src/apps/ntfy/index.js index 1ba23966..1e0e9f93 100644 --- a/packages/backend/src/apps/ntfy/index.ts +++ b/packages/backend/src/apps/ntfy/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Ntfy', diff --git a/packages/backend/src/apps/odoo/actions/create-lead/index.js b/packages/backend/src/apps/odoo/actions/create-lead/index.js new file mode 100644 index 00000000..1e0861d3 --- /dev/null +++ b/packages/backend/src/apps/odoo/actions/create-lead/index.js @@ -0,0 +1,98 @@ +import defineAction from '../../../../helpers/define-action.js'; +import { authenticate, asyncMethodCall } from '../../common/xmlrpc-client.js'; + +export default defineAction({ + name: 'Create Lead', + key: 'createLead', + description: '', + arguments: [ + { + label: 'Name', + key: 'name', + type: 'string', + required: true, + description: 'Lead name', + variables: true, + }, + { + label: 'Type', + key: 'type', + type: 'dropdown', + required: true, + variables: true, + options: [ + { + label: 'Lead', + value: 'lead', + }, + { + label: 'Opportunity', + value: 'opportunity', + }, + ], + }, + { + label: 'Email', + key: 'email', + type: 'string', + required: false, + description: 'Email of lead contact', + variables: true, + }, + { + label: 'Contact Name', + key: 'contactName', + type: 'string', + required: false, + description: 'Name of lead contact', + variables: true, + }, + { + label: 'Phone Number', + key: 'phoneNumber', + type: 'string', + required: false, + description: 'Phone number of lead contact', + variables: true, + }, + { + label: 'Mobile Number', + key: 'mobileNumber', + type: 'string', + required: false, + description: 'Mobile number of lead contact', + variables: true, + }, + ], + + async run($) { + const uid = await authenticate($); + const id = await asyncMethodCall($, { + method: 'execute_kw', + params: [ + $.auth.data.databaseName, + uid, + $.auth.data.apiKey, + 'crm.lead', + 'create', + [ + { + name: $.step.parameters.name, + type: $.step.parameters.type, + email_from: $.step.parameters.email, + contact_name: $.step.parameters.contactName, + phone: $.step.parameters.phoneNumber, + mobile: $.step.parameters.mobileNumber, + }, + ], + ], + path: 'object', + }); + + $.setActionItem({ + raw: { + id: id, + }, + }); + }, +}); diff --git a/packages/backend/src/apps/odoo/actions/create-lead/index.ts b/packages/backend/src/apps/odoo/actions/create-lead/index.ts deleted file mode 100644 index a5935000..00000000 --- a/packages/backend/src/apps/odoo/actions/create-lead/index.ts +++ /dev/null @@ -1,103 +0,0 @@ -import defineAction from '../../../../helpers/define-action'; -import { authenticate, asyncMethodCall } from '../../common/xmlrpc-client'; - -export default defineAction({ - name: 'Create Lead', - key: 'createLead', - description: '', - arguments: [ - { - label: 'Name', - key: 'name', - type: 'string' as const, - required: true, - description: 'Lead name', - variables: true, - }, - { - label: 'Type', - key: 'type', - type: 'dropdown' as const, - required: true, - variables: true, - options: [ - { - label: 'Lead', - value: 'lead' - }, - { - label: 'Opportunity', - value: 'opportunity' - } - ] - }, - { - label: "Email", - key: 'email', - type: 'string' as const, - required: false, - description: 'Email of lead contact', - variables: true, - }, - { - label: "Contact Name", - key: 'contactName', - type: 'string' as const, - required: false, - description: 'Name of lead contact', - variables: true - }, - { - label: 'Phone Number', - key: 'phoneNumber', - type: 'string' as const, - required: false, - description: 'Phone number of lead contact', - variables: true - }, - { - label: 'Mobile Number', - key: 'mobileNumber', - type: 'string' as const, - required: false, - description: 'Mobile number of lead contact', - variables: true - } - ], - - async run($) { - const uid = await authenticate($); - const id = await asyncMethodCall( - $, - { - method: 'execute_kw', - params: [ - $.auth.data.databaseName, - uid, - $.auth.data.apiKey, - 'crm.lead', - 'create', - [ - { - name: $.step.parameters.name, - type: $.step.parameters.type, - email_from: $.step.parameters.email, - contact_name: $.step.parameters.contactName, - phone: $.step.parameters.phoneNumber, - mobile: $.step.parameters.mobileNumber - } - ] - ], - path: 'object', - }, - ); - - $.setActionItem( - { - raw: { - id: id - } - } - ) - } -}); diff --git a/packages/backend/src/apps/odoo/actions/index.js b/packages/backend/src/apps/odoo/actions/index.js new file mode 100644 index 00000000..5fb0747f --- /dev/null +++ b/packages/backend/src/apps/odoo/actions/index.js @@ -0,0 +1,3 @@ +import createLead from './create-lead/index.js'; + +export default [createLead]; diff --git a/packages/backend/src/apps/odoo/actions/index.ts b/packages/backend/src/apps/odoo/actions/index.ts deleted file mode 100644 index 70a23831..00000000 --- a/packages/backend/src/apps/odoo/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import createLead from './create-lead'; - -export default [createLead]; diff --git a/packages/backend/src/apps/odoo/auth/index.ts b/packages/backend/src/apps/odoo/auth/index.js similarity index 72% rename from packages/backend/src/apps/odoo/auth/index.ts rename to packages/backend/src/apps/odoo/auth/index.js index 2362e232..55366638 100644 --- a/packages/backend/src/apps/odoo/auth/index.ts +++ b/packages/backend/src/apps/odoo/auth/index.js @@ -1,23 +1,24 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'host', label: 'Host Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, placeholder: null, - description: 'Host name of your Odoo Server (e.g. sub.domain.com without the protocol)', + description: + 'Host name of your Odoo Server (e.g. sub.domain.com without the protocol)', clickToCopy: false, }, { key: 'port', label: 'Port', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: '443', @@ -28,7 +29,7 @@ export default { { key: 'secure', label: 'Secure', - type: 'dropdown' as const, + type: 'dropdown', required: true, readOnly: false, value: 'true', @@ -49,7 +50,7 @@ export default { { key: 'databaseName', label: 'Database Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -60,27 +61,28 @@ export default { { key: 'email', label: 'Email Address', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, placeholder: null, - description: 'Email Address of the account that will be interacting with the database', - clickToCopy: false + description: + 'Email Address of the account that will be interacting with the database', + clickToCopy: false, }, { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, placeholder: null, description: 'API Key for your Odoo account', - clickToCopy: false - } + clickToCopy: false, + }, ], verifyCredentials, - isStillVerified + isStillVerified, }; diff --git a/packages/backend/src/apps/odoo/auth/is-still-verified.js b/packages/backend/src/apps/odoo/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/odoo/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/odoo/auth/is-still-verified.ts b/packages/backend/src/apps/odoo/auth/is-still-verified.ts deleted file mode 100644 index f676c026..00000000 --- a/packages/backend/src/apps/odoo/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import {IGlobalVariable} from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -} - -export default isStillVerified; diff --git a/packages/backend/src/apps/odoo/auth/verify-credentials.ts b/packages/backend/src/apps/odoo/auth/verify-credentials.js similarity index 61% rename from packages/backend/src/apps/odoo/auth/verify-credentials.ts rename to packages/backend/src/apps/odoo/auth/verify-credentials.js index 64dfbeae..30aec786 100644 --- a/packages/backend/src/apps/odoo/auth/verify-credentials.ts +++ b/packages/backend/src/apps/odoo/auth/verify-credentials.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; -import { authenticate } from '../common/xmlrpc-client'; +import { authenticate } from '../common/xmlrpc-client.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { try { await authenticate($); @@ -11,6 +10,6 @@ const verifyCredentials = async ($: IGlobalVariable) => { } catch (error) { throw new Error('Failed while authorizing!'); } -} +}; export default verifyCredentials; diff --git a/packages/backend/src/apps/odoo/common/xmlrpc-client.js b/packages/backend/src/apps/odoo/common/xmlrpc-client.js new file mode 100644 index 00000000..d45cb9be --- /dev/null +++ b/packages/backend/src/apps/odoo/common/xmlrpc-client.js @@ -0,0 +1,53 @@ +import { join } from 'node:path'; +import xmlrpc from 'xmlrpc'; + +export const asyncMethodCall = async ($, { method, params, path }) => { + return new Promise((resolve, reject) => { + const client = getClient($, { path }); + + client.methodCall(method, params, (error, response) => { + if (error != null) { + // something went wrong on the server side, display the error returned by Odoo + reject(error); + } + + resolve(response); + }); + }); +}; + +export const getClient = ($, { path = 'common' }) => { + const host = $.auth.data.host; + const port = Number($.auth.data.port); + const secure = $.auth.data.secure === 'true'; + const createClientFunction = secure + ? xmlrpc.createSecureClient + : xmlrpc.createClient; + + return createClientFunction({ + host, + port, + path: join('/xmlrpc/2', path), + }); +}; + +export const authenticate = async ($) => { + const uid = await asyncMethodCall($, { + method: 'authenticate', + params: [ + $.auth.data.databaseName, + $.auth.data.email, + $.auth.data.apiKey, + [], + ], + }); + + if (!Number.isInteger(uid)) { + // failed to authenticate + throw new Error( + 'Failed to connect to the Odoo server. Please, check the credentials!' + ); + } + + return uid; +}; diff --git a/packages/backend/src/apps/odoo/common/xmlrpc-client.ts b/packages/backend/src/apps/odoo/common/xmlrpc-client.ts deleted file mode 100644 index 595dce53..00000000 --- a/packages/backend/src/apps/odoo/common/xmlrpc-client.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { join } from 'node:path'; -import xmlrpc from 'xmlrpc'; -import { IGlobalVariable } from "@automatisch/types"; - -type AsyncMethodCallPayload = { - method: string; - params: any[]; - path?: string; -} - -export const asyncMethodCall = async ($: IGlobalVariable, { method, params, path }: AsyncMethodCallPayload): Promise => { - return new Promise( - (resolve, reject) => { - const client = getClient($, { path }); - - client.methodCall( - method, - params, - (error, response) => { - if (error != null) { - // something went wrong on the server side, display the error returned by Odoo - reject(error); - } - - resolve(response); - } - ) - } - ); -} - -export const getClient = ($: IGlobalVariable, { path = 'common' }) => { - const host = $.auth.data.host as string; - const port = Number($.auth.data.port as string); - const secure = $.auth.data.secure === 'true'; - const createClientFunction = secure ? xmlrpc.createSecureClient : xmlrpc.createClient; - - return createClientFunction( - { - host, - port, - path: join('/xmlrpc/2', path), - } - ); -} - -export const authenticate = async ($: IGlobalVariable) => { - const uid = await asyncMethodCall( - $, - { - method: 'authenticate', - params: [ - $.auth.data.databaseName, - $.auth.data.email, - $.auth.data.apiKey, - [] - ] - } - ); - - if (!Number.isInteger(uid)) { - // failed to authenticate - throw new Error( - 'Failed to connect to the Odoo server. Please, check the credentials!' - ); - } - - return uid; -} diff --git a/packages/backend/src/apps/odoo/index.d.ts b/packages/backend/src/apps/odoo/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/odoo/index.ts b/packages/backend/src/apps/odoo/index.js similarity index 67% rename from packages/backend/src/apps/odoo/index.ts rename to packages/backend/src/apps/odoo/index.js index 3502708b..2e424746 100644 --- a/packages/backend/src/apps/odoo/index.ts +++ b/packages/backend/src/apps/odoo/index.js @@ -1,6 +1,6 @@ -import defineApp from '../../helpers/define-app'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Odoo', @@ -12,5 +12,5 @@ export default defineApp({ apiBaseUrl: '', primaryColor: '9c5789', auth, - actions + actions, }); diff --git a/packages/backend/src/apps/openai/actions/check-moderation/index.ts b/packages/backend/src/apps/openai/actions/check-moderation/index.js similarity index 54% rename from packages/backend/src/apps/openai/actions/check-moderation/index.ts rename to packages/backend/src/apps/openai/actions/check-moderation/index.js index af5a84f7..331acc7f 100644 --- a/packages/backend/src/apps/openai/actions/check-moderation/index.ts +++ b/packages/backend/src/apps/openai/actions/check-moderation/index.js @@ -1,23 +1,24 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Check moderation', key: 'checkModeration', - description: 'Checks for hate, hate/threatening, self-harm, sexual, sexual/minors, violence, or violence/graphic content in the given text.', + description: + 'Checks for hate, hate/threatening, self-harm, sexual, sexual/minors, violence, or violence/graphic content in the given text.', arguments: [ { label: 'Input', key: 'input', - type: 'string' as const, + type: 'string', required: true, variables: true, - description: 'The text to analyze.' + description: 'The text to analyze.', }, ], async run($) { const { data } = await $.http.post('/v1/moderations', { - input: $.step.parameters.input as string, + input: $.step.parameters.input, }); const result = data?.results[0]; diff --git a/packages/backend/src/apps/openai/actions/index.js b/packages/backend/src/apps/openai/actions/index.js new file mode 100644 index 00000000..45dbad51 --- /dev/null +++ b/packages/backend/src/apps/openai/actions/index.js @@ -0,0 +1,5 @@ +import checkModeration from './check-moderation/index.js'; +import sendPrompt from './send-prompt/index.js'; +import sendChatPrompt from './send-chat-prompt/index.js'; + +export default [checkModeration, sendChatPrompt, sendPrompt]; diff --git a/packages/backend/src/apps/openai/actions/index.ts b/packages/backend/src/apps/openai/actions/index.ts deleted file mode 100644 index 9c2ddf6c..00000000 --- a/packages/backend/src/apps/openai/actions/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import checkModeration from './check-moderation'; -import sendPrompt from './send-prompt'; -import sendChatPrompt from './send-chat-prompt'; - -export default [checkModeration, sendChatPrompt, sendPrompt]; diff --git a/packages/backend/src/apps/openai/actions/send-chat-prompt/index.ts b/packages/backend/src/apps/openai/actions/send-chat-prompt/index.js similarity index 61% rename from packages/backend/src/apps/openai/actions/send-chat-prompt/index.ts rename to packages/backend/src/apps/openai/actions/send-chat-prompt/index.js index ea239036..2865a69a 100644 --- a/packages/backend/src/apps/openai/actions/send-chat-prompt/index.ts +++ b/packages/backend/src/apps/openai/actions/send-chat-prompt/index.js @@ -1,13 +1,8 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; -type TMessage = { - role: string; - content: string; -} - -const castFloatOrUndefined = (value: string | null) => { +const castFloatOrUndefined = (value) => { return value === '' ? undefined : parseFloat(value); -} +}; export default defineAction({ name: 'Send chat prompt', @@ -17,7 +12,7 @@ export default defineAction({ { label: 'Model', key: 'model', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { @@ -34,7 +29,7 @@ export default defineAction({ { label: 'Messages', key: 'messages', - type: 'dynamic' as const, + type: 'dynamic', required: true, description: 'Add or remove messages as needed', value: [{ role: 'system', body: '' }], @@ -42,7 +37,7 @@ export default defineAction({ { label: 'Role', key: 'role', - type: 'dropdown' as const, + type: 'dropdown', required: true, options: [ { @@ -52,78 +47,84 @@ export default defineAction({ { label: 'User', value: 'user', - } + }, ], }, { label: 'Content', key: 'content', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], }, { label: 'Temperature', key: 'temperature', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.' + description: + 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.', }, { label: 'Maximum tokens', key: 'maxTokens', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'The maximum number of tokens to generate in the completion.' + description: + 'The maximum number of tokens to generate in the completion.', }, { label: 'Stop Sequence', key: 'stopSequence', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.' + description: + 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.', }, { label: 'Top P', key: 'topP', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.' + description: + 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.', }, { label: 'Frequency Penalty', key: 'frequencyPenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.`, }, { label: 'Presence Penalty', key: 'presencePenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.`, }, ], async run($) { const payload = { - model: $.step.parameters.model as string, - temperature: castFloatOrUndefined($.step.parameters.temperature as string), - max_tokens: castFloatOrUndefined($.step.parameters.maxTokens as string), - stop: ($.step.parameters.stopSequence as string || null), - top_p: castFloatOrUndefined($.step.parameters.topP as string), - frequency_penalty: castFloatOrUndefined($.step.parameters.frequencyPenalty as string), - presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty as string), - messages: ($.step.parameters.messages as TMessage[]).map(message => ({ + model: $.step.parameters.model, + temperature: castFloatOrUndefined($.step.parameters.temperature), + max_tokens: castFloatOrUndefined($.step.parameters.maxTokens), + stop: $.step.parameters.stopSequence || null, + top_p: castFloatOrUndefined($.step.parameters.topP), + frequency_penalty: castFloatOrUndefined( + $.step.parameters.frequencyPenalty + ), + presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty), + messages: $.step.parameters.messages.map((message) => ({ role: message.role, content: message.content, })), diff --git a/packages/backend/src/apps/openai/actions/send-prompt/index.ts b/packages/backend/src/apps/openai/actions/send-prompt/index.js similarity index 57% rename from packages/backend/src/apps/openai/actions/send-prompt/index.ts rename to packages/backend/src/apps/openai/actions/send-prompt/index.js index cff0ae8f..786b81e1 100644 --- a/packages/backend/src/apps/openai/actions/send-prompt/index.ts +++ b/packages/backend/src/apps/openai/actions/send-prompt/index.js @@ -1,8 +1,8 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; -const castFloatOrUndefined = (value: string | null) => { +const castFloatOrUndefined = (value) => { return value === '' ? undefined : parseFloat(value); -} +}; export default defineAction({ name: 'Send prompt', @@ -12,7 +12,7 @@ export default defineAction({ { label: 'Model', key: 'model', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { @@ -29,71 +29,77 @@ export default defineAction({ { label: 'Prompt', key: 'prompt', - type: 'string' as const, + type: 'string', required: true, variables: true, - description: 'The text to analyze.' + description: 'The text to analyze.', }, { label: 'Temperature', key: 'temperature', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.' + description: + 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.', }, { label: 'Maximum tokens', key: 'maxTokens', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'The maximum number of tokens to generate in the completion.' + description: + 'The maximum number of tokens to generate in the completion.', }, { label: 'Stop Sequence', key: 'stopSequence', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.' + description: + 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.', }, { label: 'Top P', key: 'topP', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.' + description: + 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.', }, { label: 'Frequency Penalty', key: 'frequencyPenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.`, }, { label: 'Presence Penalty', key: 'presencePenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.`, }, ], async run($) { const payload = { - model: $.step.parameters.model as string, - prompt: $.step.parameters.prompt as string, - temperature: castFloatOrUndefined($.step.parameters.temperature as string), - max_tokens: castFloatOrUndefined($.step.parameters.maxTokens as string), - stop: ($.step.parameters.stopSequence as string || null), - top_p: castFloatOrUndefined($.step.parameters.topP as string), - frequency_penalty: castFloatOrUndefined($.step.parameters.frequencyPenalty as string), - presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty as string), + model: $.step.parameters.model, + prompt: $.step.parameters.prompt, + temperature: castFloatOrUndefined($.step.parameters.temperature), + max_tokens: castFloatOrUndefined($.step.parameters.maxTokens), + stop: $.step.parameters.stopSequence || null, + top_p: castFloatOrUndefined($.step.parameters.topP), + frequency_penalty: castFloatOrUndefined( + $.step.parameters.frequencyPenalty + ), + presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty), }; const { data } = await $.http.post('/v1/completions', payload); diff --git a/packages/backend/src/apps/openai/auth/index.ts b/packages/backend/src/apps/openai/auth/index.js similarity index 79% rename from packages/backend/src/apps/openai/auth/index.ts rename to packages/backend/src/apps/openai/auth/index.js index 78d9e38f..cd9c891d 100644 --- a/packages/backend/src/apps/openai/auth/index.ts +++ b/packages/backend/src/apps/openai/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/openai/auth/is-still-verified.js b/packages/backend/src/apps/openai/auth/is-still-verified.js new file mode 100644 index 00000000..3e6c9095 --- /dev/null +++ b/packages/backend/src/apps/openai/auth/is-still-verified.js @@ -0,0 +1,6 @@ +const isStillVerified = async ($) => { + await $.http.get('/v1/models'); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/openai/auth/is-still-verified.ts b/packages/backend/src/apps/openai/auth/is-still-verified.ts deleted file mode 100644 index 9f5895f0..00000000 --- a/packages/backend/src/apps/openai/auth/is-still-verified.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const isStillVerified = async ($: IGlobalVariable) => { - await $.http.get('/v1/models'); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/openai/auth/verify-credentials.js b/packages/backend/src/apps/openai/auth/verify-credentials.js new file mode 100644 index 00000000..7f43f884 --- /dev/null +++ b/packages/backend/src/apps/openai/auth/verify-credentials.js @@ -0,0 +1,5 @@ +const verifyCredentials = async ($) => { + await $.http.get('/v1/models'); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/openai/auth/verify-credentials.ts b/packages/backend/src/apps/openai/auth/verify-credentials.ts deleted file mode 100644 index e9fb2540..00000000 --- a/packages/backend/src/apps/openai/auth/verify-credentials.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - await $.http.get('/v1/models'); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/self-hosted-llm/common/add-auth-header.ts b/packages/backend/src/apps/openai/common/add-auth-header.js similarity index 58% rename from packages/backend/src/apps/self-hosted-llm/common/add-auth-header.ts rename to packages/backend/src/apps/openai/common/add-auth-header.js index 2b0de0ce..f9f5acba 100644 --- a/packages/backend/src/apps/self-hosted-llm/common/add-auth-header.ts +++ b/packages/backend/src/apps/openai/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.apiKey) { requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiKey}`; } diff --git a/packages/backend/src/apps/openai/dynamic-data/index.js b/packages/backend/src/apps/openai/dynamic-data/index.js new file mode 100644 index 00000000..6db48046 --- /dev/null +++ b/packages/backend/src/apps/openai/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listModels from './list-models/index.js'; + +export default [listModels]; diff --git a/packages/backend/src/apps/openai/dynamic-data/index.ts b/packages/backend/src/apps/openai/dynamic-data/index.ts deleted file mode 100644 index 4072dcdd..00000000 --- a/packages/backend/src/apps/openai/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listModels from './list-models'; - -export default [listModels]; diff --git a/packages/backend/src/apps/openai/dynamic-data/list-models/index.ts b/packages/backend/src/apps/openai/dynamic-data/list-models/index.js similarity index 59% rename from packages/backend/src/apps/openai/dynamic-data/list-models/index.ts rename to packages/backend/src/apps/openai/dynamic-data/list-models/index.js index 645b9f1e..a8e81538 100644 --- a/packages/backend/src/apps/openai/dynamic-data/list-models/index.ts +++ b/packages/backend/src/apps/openai/dynamic-data/list-models/index.js @@ -1,13 +1,11 @@ -import { IGlobalVariable } from '@automatisch/types'; - export default { name: 'List models', key: 'listModels', - async run($: IGlobalVariable) { + async run($) { const response = await $.http.get('/v1/models'); - const models = response.data.data.map((model: { id: string }) => { + const models = response.data.data.map((model) => { return { value: model.id, name: model.id, diff --git a/packages/backend/src/apps/openai/index.d.ts b/packages/backend/src/apps/openai/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/openai/index.ts b/packages/backend/src/apps/openai/index.js similarity index 61% rename from packages/backend/src/apps/openai/index.ts rename to packages/backend/src/apps/openai/index.js index 5be0b394..be973de0 100644 --- a/packages/backend/src/apps/openai/index.ts +++ b/packages/backend/src/apps/openai/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'OpenAI', diff --git a/packages/backend/src/apps/pipedrive/actions/create-activity/index.ts b/packages/backend/src/apps/pipedrive/actions/create-activity/index.js similarity index 80% rename from packages/backend/src/apps/pipedrive/actions/create-activity/index.ts rename to packages/backend/src/apps/pipedrive/actions/create-activity/index.js index 5860e4ab..ca2a42bf 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-activity/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-activity/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; export default defineAction({ name: 'Create activity', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Subject', key: 'subject', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -17,7 +17,7 @@ export default defineAction({ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -35,7 +35,7 @@ export default defineAction({ { label: 'Assigned To', key: 'userId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'If omitted, the activity will be assigned to the user of the connected account.', @@ -54,7 +54,7 @@ export default defineAction({ { label: 'Person', key: 'personId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -72,7 +72,7 @@ export default defineAction({ { label: 'Deal', key: 'dealId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -90,7 +90,7 @@ export default defineAction({ { label: 'Is done?', key: 'isDone', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', options: [ @@ -107,7 +107,7 @@ export default defineAction({ { label: 'Type', key: 'type', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -125,7 +125,7 @@ export default defineAction({ { label: 'Due Date', key: 'dueDate', - type: 'string' as const, + type: 'string', required: false, description: 'Format must be YYYY-MM-DD', variables: true, @@ -133,7 +133,7 @@ export default defineAction({ { label: 'Due Time', key: 'dueTime', - type: 'string' as const, + type: 'string', required: false, description: 'Format must be HH:MM', variables: true, @@ -141,7 +141,7 @@ export default defineAction({ { label: 'Duration', key: 'duration', - type: 'string' as const, + type: 'string', required: false, description: 'Format must be HH:MM', variables: true, @@ -149,7 +149,7 @@ export default defineAction({ { label: 'Note', key: 'note', - type: 'string' as const, + type: 'string', required: false, description: 'Accepts HTML format', variables: true, @@ -172,17 +172,17 @@ export default defineAction({ } = $.step.parameters; const fields = { - subject: subject as string, - org_id: organizationId as number, - user_id: userId as number, - person_id: personId as number, - deal_id: dealId as number, - done: isDone as number, - type: type as string, - due_time: dueTime as string, - due_date: dueDate as string, - duration: duration as string, - note: note as string, + subject: subject, + org_id: organizationId, + user_id: userId, + person_id: personId, + deal_id: dealId, + done: isDone, + type: type, + due_time: dueTime, + due_date: dueDate, + duration: duration, + note: note, }; const body = filterProvidedFields(fields); diff --git a/packages/backend/src/apps/pipedrive/actions/create-deal/index.ts b/packages/backend/src/apps/pipedrive/actions/create-deal/index.js similarity index 83% rename from packages/backend/src/apps/pipedrive/actions/create-deal/index.ts rename to packages/backend/src/apps/pipedrive/actions/create-deal/index.js index 8f6472bb..ad1430df 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-deal/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-deal/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; export default defineAction({ name: 'Create deal', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -17,7 +17,7 @@ export default defineAction({ { label: 'Creation Date', key: 'addTime', - type: 'string' as const, + type: 'string', required: false, description: 'Requires admin access to Pipedrive account. Format: YYYY-MM-DD HH:MM:SS', @@ -26,7 +26,7 @@ export default defineAction({ { label: 'Status', key: 'status', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', options: [ @@ -51,7 +51,7 @@ export default defineAction({ { label: 'Lost Reason', key: 'lostReason', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -59,7 +59,7 @@ export default defineAction({ { label: 'Stage', key: 'stageId', - type: 'dropdown' as const, + type: 'dropdown', required: false, value: '1', description: @@ -94,7 +94,7 @@ export default defineAction({ { label: 'Owner', key: 'userId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Select user who will be marked as the owner of this deal. If omitted, the authorized user will be used.', @@ -113,7 +113,7 @@ export default defineAction({ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Organization this deal will be associated with.', variables: true, @@ -131,7 +131,7 @@ export default defineAction({ { label: 'Person', key: 'personId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Person this deal will be associated with.', variables: true, @@ -149,7 +149,7 @@ export default defineAction({ { label: 'Probability', key: 'probability', - type: 'string' as const, + type: 'string', required: false, description: 'The success probability percentage of the deal. Used/shown only when deal_probability for the pipeline of the deal is enabled.', @@ -158,7 +158,7 @@ export default defineAction({ { label: 'Expected Close Date', key: 'expectedCloseDate', - type: 'string' as const, + type: 'string', required: false, description: 'The expected close date of the deal. In ISO 8601 format: YYYY-MM-DD.', @@ -167,7 +167,7 @@ export default defineAction({ { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: false, description: 'The value of the deal. If omitted, value will be set to 0.', variables: true, @@ -175,7 +175,7 @@ export default defineAction({ { label: 'Currency', key: 'currency', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'The currency of the deal. Accepts a 3-character currency code. If omitted, currency will be set to the default currency of the authorized user.', @@ -210,18 +210,18 @@ export default defineAction({ } = $.step.parameters; const fields = { - title: title as string, - value: value as string, - add_time: addTime as string, - status: status as string, - lost_reason: lostReason as string, - stage_id: stageId as number, - user_id: userId as number, - org_id: organizationId as number, - person_id: personId as number, - probability: probability as number, - expected_close_date: expectedCloseDate as string, - currency: currency as string, + title: title, + value: value, + add_time: addTime, + status: status, + lost_reason: lostReason, + stage_id: stageId, + user_id: userId, + org_id: organizationId, + person_id: personId, + probability: probability, + expected_close_date: expectedCloseDate, + currency: currency, }; const body = filterProvidedFields(fields); diff --git a/packages/backend/src/apps/pipedrive/actions/create-lead/index.ts b/packages/backend/src/apps/pipedrive/actions/create-lead/index.js similarity index 83% rename from packages/backend/src/apps/pipedrive/actions/create-lead/index.ts rename to packages/backend/src/apps/pipedrive/actions/create-lead/index.js index 2cc5a922..b17129e1 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-lead/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-lead/index.js @@ -1,9 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; - -type LabelIds = { __id: string; leadLabelId: string }[]; - -type LabelValue = { amount?: number; currency?: string }; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; export default defineAction({ name: 'Create lead', @@ -13,7 +9,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -21,7 +17,7 @@ export default defineAction({ { label: 'Person', key: 'personId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Lead must be associated with at least one person or organization.', @@ -40,7 +36,7 @@ export default defineAction({ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Lead must be associated with at least one person or organization.', @@ -59,7 +55,7 @@ export default defineAction({ { label: 'Owner', key: 'ownerId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Select user who will be marked as the owner of this lead. If omitted, the authorized user will be used.', @@ -78,14 +74,14 @@ export default defineAction({ { label: 'Lead Labels', key: 'labelIds', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Label', key: 'leadLabelId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, source: { @@ -104,7 +100,7 @@ export default defineAction({ { label: 'Expected Close Date', key: 'expectedCloseDate', - type: 'string' as const, + type: 'string', required: false, description: 'E.g. 2023-10-23', variables: true, @@ -112,7 +108,7 @@ export default defineAction({ { label: 'Lead Value', key: 'value', - type: 'string' as const, + type: 'string', required: false, description: 'E.g. 150', variables: true, @@ -120,7 +116,7 @@ export default defineAction({ { label: 'Lead Value Currency', key: 'currency', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'This field is required if a Lead Value amount is provided.', variables: true, @@ -149,25 +145,25 @@ export default defineAction({ currency, } = $.step.parameters; - const onlyLabelIds = (labelIds as LabelIds) + const onlyLabelIds = labelIds .map((labelId) => labelId.leadLabelId) .filter(Boolean); - const labelValue: LabelValue = {}; + const labelValue = {}; if (value) { labelValue.amount = Number(value); } if (currency) { - labelValue.currency = currency as string; + labelValue.currency = currency; } const fields = { - title: title as string, + title: title, person_id: Number(personId), organization_id: Number(organizationId), owner_id: Number(ownerId), - expected_close_date: expectedCloseDate as string, + expected_close_date: expectedCloseDate, label_ids: onlyLabelIds, value: labelValue, }; diff --git a/packages/backend/src/apps/pipedrive/actions/create-note/index.ts b/packages/backend/src/apps/pipedrive/actions/create-note/index.js similarity index 82% rename from packages/backend/src/apps/pipedrive/actions/create-note/index.ts rename to packages/backend/src/apps/pipedrive/actions/create-note/index.js index caaaaacf..781d87b5 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-note/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-note/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; export default defineAction({ name: 'Create note', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Content', key: 'content', - type: 'string' as const, + type: 'string', required: true, description: 'Supports some HTML formatting.', variables: true, @@ -17,7 +17,7 @@ export default defineAction({ { label: 'Deal', key: 'dealId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Note must be associated with at least one deal, person, organization, or lead.', @@ -36,7 +36,7 @@ export default defineAction({ { label: 'Pin note on specified deal?', key: 'pinnedDeal', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', options: [ @@ -53,7 +53,7 @@ export default defineAction({ { label: 'Person', key: 'personId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Note must be associated with at least one deal, person, organization, or lead.', @@ -72,7 +72,7 @@ export default defineAction({ { label: 'Pin note on specified person?', key: 'pinnedPerson', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', options: [ @@ -89,7 +89,7 @@ export default defineAction({ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Note must be associated with at least one deal, person, organization, or lead.', @@ -108,7 +108,7 @@ export default defineAction({ { label: 'Pin note on specified organization?', key: 'pinnedOrganization', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', options: [ @@ -125,7 +125,7 @@ export default defineAction({ { label: 'Lead', key: 'leadId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Note must be associated with at least one deal, person, organization, or lead.', @@ -144,7 +144,7 @@ export default defineAction({ { label: 'Pin note on specified lead?', key: 'pinnedLead', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', options: [ @@ -174,15 +174,15 @@ export default defineAction({ } = $.step.parameters; const fields = { - content: content as string, - deal_id: dealId as number, - pinned_to_deal_flag: pinnedDeal as number, - person_id: personId as number, - pinned_to_person_flag: pinnedPerson as number, - org_id: organizationId as number, - pinned_to_organization_flag: pinnedOrganization as number, - lead_id: leadId as string, - pinned_to_lead_flag: pinnedLead as number, + content: content, + deal_id: dealId, + pinned_to_deal_flag: pinnedDeal, + person_id: personId, + pinned_to_person_flag: pinnedPerson, + org_id: organizationId, + pinned_to_organization_flag: pinnedOrganization, + lead_id: leadId, + pinned_to_lead_flag: pinnedLead, }; const body = filterProvidedFields(fields); diff --git a/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts b/packages/backend/src/apps/pipedrive/actions/create-organization/index.js similarity index 88% rename from packages/backend/src/apps/pipedrive/actions/create-organization/index.ts rename to packages/backend/src/apps/pipedrive/actions/create-organization/index.js index 3a43bda3..4f8d4950 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-organization/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-organization/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; export default defineAction({ name: 'Create organization', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -17,7 +17,7 @@ export default defineAction({ { label: 'Owner', key: 'ownerId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -35,7 +35,7 @@ export default defineAction({ { label: 'Label', key: 'labelId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, diff --git a/packages/backend/src/apps/pipedrive/actions/create-person/index.ts b/packages/backend/src/apps/pipedrive/actions/create-person/index.js similarity index 81% rename from packages/backend/src/apps/pipedrive/actions/create-person/index.ts rename to packages/backend/src/apps/pipedrive/actions/create-person/index.js index 171780ad..fa96da26 100644 --- a/packages/backend/src/apps/pipedrive/actions/create-person/index.ts +++ b/packages/backend/src/apps/pipedrive/actions/create-person/index.js @@ -1,15 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import { filterProvidedFields } from '../../common/filter-provided-fields'; - -type TEmail = { - __id: string; - email: string; -}[]; - -type TPhone = { - __id: string; - phone: string; -}[]; +import defineAction from '../../../../helpers/define-action.js'; +import { filterProvidedFields } from '../../common/filter-provided-fields.js'; export default defineAction({ name: 'Create person', @@ -19,7 +9,7 @@ export default defineAction({ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -27,7 +17,7 @@ export default defineAction({ { label: 'Owner', key: 'ownerId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -45,7 +35,7 @@ export default defineAction({ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -63,14 +53,14 @@ export default defineAction({ { label: 'Emails', key: 'emails', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Email', key: 'email', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -80,14 +70,14 @@ export default defineAction({ { label: 'Phones', key: 'phones', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Phone', key: 'phone', - type: 'string' as const, + type: 'string', required: false, description: '', variables: true, @@ -97,7 +87,7 @@ export default defineAction({ { label: 'Label', key: 'labelId', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -116,9 +106,9 @@ export default defineAction({ async run($) { const { name, ownerId, organizationId, labelId } = $.step.parameters; - const emails = $.step.parameters.emails as TEmail; + const emails = $.step.parameters.emails; const emailValues = emails.map((entry) => entry.email); - const phones = $.step.parameters.phones as TPhone; + const phones = $.step.parameters.phones; const phoneValues = phones.map((entry) => entry.phone); const fields = { diff --git a/packages/backend/src/apps/pipedrive/actions/index.js b/packages/backend/src/apps/pipedrive/actions/index.js new file mode 100644 index 00000000..81460de6 --- /dev/null +++ b/packages/backend/src/apps/pipedrive/actions/index.js @@ -0,0 +1,15 @@ +import createActivity from './create-activity/index.js'; +import createDeal from './create-deal/index.js'; +import createLead from './create-lead/index.js'; +import createNote from './create-note/index.js'; +import createOrganization from './create-organization/index.js'; +import createPerson from './create-person/index.js'; + +export default [ + createActivity, + createDeal, + createLead, + createNote, + createOrganization, + createPerson, +]; diff --git a/packages/backend/src/apps/pipedrive/actions/index.ts b/packages/backend/src/apps/pipedrive/actions/index.ts deleted file mode 100644 index ffabeaa5..00000000 --- a/packages/backend/src/apps/pipedrive/actions/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import createActivity from './create-activity'; -import createDeal from './create-deal'; -import createLead from './create-lead'; -import createNote from './create-note'; -import createOrganization from './create-organization'; -import createPerson from './create-person'; - -export default [ - createActivity, - createDeal, - createLead, - createNote, - createOrganization, - createPerson, -]; diff --git a/packages/backend/src/apps/pipedrive/auth/generate-auth-url.ts b/packages/backend/src/apps/pipedrive/auth/generate-auth-url.js similarity index 51% rename from packages/backend/src/apps/pipedrive/auth/generate-auth-url.ts rename to packages/backend/src/apps/pipedrive/auth/generate-auth-url.js index 1e35bada..90790108 100644 --- a/packages/backend/src/apps/pipedrive/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/pipedrive/auth/generate-auth-url.js @@ -1,13 +1,12 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUri, }); diff --git a/packages/backend/src/apps/pipedrive/auth/index.ts b/packages/backend/src/apps/pipedrive/auth/index.js similarity index 74% rename from packages/backend/src/apps/pipedrive/auth/index.ts rename to packages/backend/src/apps/pipedrive/auth/index.js index 5e0ee567..732ed018 100644 --- a/packages/backend/src/apps/pipedrive/auth/index.ts +++ b/packages/backend/src/apps/pipedrive/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/pipedrive/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/pipedrive/auth/is-still-verified.js b/packages/backend/src/apps/pipedrive/auth/is-still-verified.js new file mode 100644 index 00000000..6d792b12 --- /dev/null +++ b/packages/backend/src/apps/pipedrive/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/pipedrive/auth/is-still-verified.ts b/packages/backend/src/apps/pipedrive/auth/is-still-verified.ts deleted file mode 100644 index 93a01099..00000000 --- a/packages/backend/src/apps/pipedrive/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/pipedrive/auth/refresh-token.ts b/packages/backend/src/apps/pipedrive/auth/refresh-token.js similarity index 82% rename from packages/backend/src/apps/pipedrive/auth/refresh-token.ts rename to packages/backend/src/apps/pipedrive/auth/refresh-token.js index 4be1185d..c0d84f6a 100644 --- a/packages/backend/src/apps/pipedrive/auth/refresh-token.ts +++ b/packages/backend/src/apps/pipedrive/auth/refresh-token.js @@ -1,10 +1,9 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { const params = new URLSearchParams({ grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const headers = { diff --git a/packages/backend/src/apps/pipedrive/auth/verify-credentials.ts b/packages/backend/src/apps/pipedrive/auth/verify-credentials.js similarity index 77% rename from packages/backend/src/apps/pipedrive/auth/verify-credentials.ts rename to packages/backend/src/apps/pipedrive/auth/verify-credentials.js index 40d11f9d..2cb1b508 100644 --- a/packages/backend/src/apps/pipedrive/auth/verify-credentials.ts +++ b/packages/backend/src/apps/pipedrive/auth/verify-credentials.js @@ -1,15 +1,14 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const params = new URLSearchParams({ grant_type: 'authorization_code', - code: $.auth.data.code as string, + code: $.auth.data.code, redirect_uri: redirectUri, }); diff --git a/packages/backend/src/apps/pipedrive/common/add-auth-header.ts b/packages/backend/src/apps/pipedrive/common/add-auth-header.js similarity index 71% rename from packages/backend/src/apps/pipedrive/common/add-auth-header.ts rename to packages/backend/src/apps/pipedrive/common/add-auth-header.js index d15b043e..679ef605 100644 --- a/packages/backend/src/apps/pipedrive/common/add-auth-header.ts +++ b/packages/backend/src/apps/pipedrive/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if (requestConfig.additionalProperties?.skipAddingAuthHeader) return requestConfig; diff --git a/packages/backend/src/apps/pipedrive/common/filter-provided-fields.js b/packages/backend/src/apps/pipedrive/common/filter-provided-fields.js new file mode 100644 index 00000000..1da42951 --- /dev/null +++ b/packages/backend/src/apps/pipedrive/common/filter-provided-fields.js @@ -0,0 +1,16 @@ +import isObject from 'lodash/isObject.js'; + +export function filterProvidedFields(body) { + return Object.keys(body).reduce((result, key) => { + const value = body[key]; + if (isObject(value)) { + const filteredNestedObj = filterProvidedFields(value); + if (Object.keys(filteredNestedObj).length > 0) { + result[key] = filteredNestedObj; + } + } else if (body[key]) { + result[key] = value; + } + return result; + }, {}); +} diff --git a/packages/backend/src/apps/pipedrive/common/filter-provided-fields.ts b/packages/backend/src/apps/pipedrive/common/filter-provided-fields.ts deleted file mode 100644 index fa88c8ee..00000000 --- a/packages/backend/src/apps/pipedrive/common/filter-provided-fields.ts +++ /dev/null @@ -1,18 +0,0 @@ -import isObject from 'lodash/isObject'; - -export function filterProvidedFields(body: Record) { - return Object.keys(body).reduce>((result, key) => { - const value = body[key]; - if (isObject(value)) { - const filteredNestedObj = filterProvidedFields( - value as Record - ); - if (Object.keys(filteredNestedObj).length > 0) { - result[key] = filteredNestedObj; - } - } else if (body[key]) { - result[key] = value; - } - return result; - }, {}); -} diff --git a/packages/backend/src/apps/pipedrive/common/get-current-user.ts b/packages/backend/src/apps/pipedrive/common/get-current-user.js similarity index 55% rename from packages/backend/src/apps/pipedrive/common/get-current-user.ts rename to packages/backend/src/apps/pipedrive/common/get-current-user.js index 024ede73..469245b6 100644 --- a/packages/backend/src/apps/pipedrive/common/get-current-user.ts +++ b/packages/backend/src/apps/pipedrive/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get(`${$.auth.data.apiDomain}/api/v1/users/me`); const currentUser = response.data.data; diff --git a/packages/backend/src/apps/pipedrive/common/set-base-url.js b/packages/backend/src/apps/pipedrive/common/set-base-url.js new file mode 100644 index 00000000..3e814068 --- /dev/null +++ b/packages/backend/src/apps/pipedrive/common/set-base-url.js @@ -0,0 +1,10 @@ +const setBaseUrl = ($, requestConfig) => { + const { apiDomain } = $.auth.data; + + if (apiDomain) { + requestConfig.baseURL = apiDomain; + } + + return requestConfig; +}; +export default setBaseUrl; diff --git a/packages/backend/src/apps/pipedrive/common/set-base-url.ts b/packages/backend/src/apps/pipedrive/common/set-base-url.ts deleted file mode 100644 index f9900b90..00000000 --- a/packages/backend/src/apps/pipedrive/common/set-base-url.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - const { apiDomain } = $.auth.data; - - if (apiDomain) { - requestConfig.baseURL = apiDomain as string; - } - - return requestConfig; -}; -export default setBaseUrl; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/index.js b/packages/backend/src/apps/pipedrive/dynamic-data/index.js new file mode 100644 index 00000000..a914406a --- /dev/null +++ b/packages/backend/src/apps/pipedrive/dynamic-data/index.js @@ -0,0 +1,23 @@ +import listActivityTypes from './list-activity-types/index.js'; +import listCurrencies from './list-currencies/index.js'; +import listDeals from './list-deals/index.js'; +import listLeads from './list-leads/index.js'; +import listLeadLabels from './list-lead-labels/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 listPersons from './list-persons/index.js'; +import listUsers from './list-users/index.js'; + +export default [ + listActivityTypes, + listCurrencies, + listDeals, + listLeads, + listLeadLabels, + listOrganizations, + listOrganizationLabelField, + listPersonLabelField, + listPersons, + listUsers, +]; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/index.ts deleted file mode 100644 index dfc4118a..00000000 --- a/packages/backend/src/apps/pipedrive/dynamic-data/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import listActivityTypes from './list-activity-types'; -import listCurrencies from './list-currencies'; -import listDeals from './list-deals'; -import listLeads from './list-leads'; -import listLeadLabels from './list-lead-labels'; -import listOrganizations from './list-organizations'; -import listOrganizationLabelField from './list-organization-label-field'; -import listPersonLabelField from './list-person-label-field'; -import listPersons from './list-persons'; -import listUsers from './list-users'; - -export default [ - listActivityTypes, - listCurrencies, - listDeals, - listLeads, - listLeadLabels, - listOrganizations, - listOrganizationLabelField, - listPersonLabelField, - listPersons, - listUsers, -]; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-activity-types/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-activity-types/index.js similarity index 73% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-activity-types/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-activity-types/index.js index 7867a609..ad54e913 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-activity-types/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-activity-types/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List activity types', key: 'listActivityTypes', - async run($: IGlobalVariable) { - const activityTypes: { - data: IJSONObject[]; - } = { + async run($) { + const activityTypes = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-currencies/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-currencies/index.js similarity index 71% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-currencies/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-currencies/index.js index c3d12592..9a00e7dd 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-currencies/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-currencies/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List currencies', key: 'listCurrencies', - async run($: IGlobalVariable) { - const currencies: { - data: IJSONObject[]; - } = { + async run($) { + const currencies = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-deals/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-deals/index.js similarity index 73% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-deals/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-deals/index.js index 2ac3e4c8..901ec228 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-deals/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-deals/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List deals', key: 'listDeals', - async run($: IGlobalVariable) { - const deals: { - data: IJSONObject[]; - } = { + async run($) { + const deals = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-lead-labels/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-lead-labels/index.js similarity index 74% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-lead-labels/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-lead-labels/index.js index cc22454a..b75c3c7a 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-lead-labels/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-lead-labels/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List lead labels', key: 'listLeadLabels', - async run($: IGlobalVariable) { - const leadLabels: { - data: IJSONObject[]; - } = { + async run($) { + const leadLabels = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-leads/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-leads/index.js similarity index 73% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-leads/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-leads/index.js index f493b843..e92bda65 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-leads/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-leads/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List leads', key: 'listLeads', - async run($: IGlobalVariable) { - const leads: { - data: IJSONObject[]; - } = { + async run($) { + const leads = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.js similarity index 65% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.js index b0d401ef..1cd84ef6 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-organization-label-field/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List organization label field', key: 'listOrganizationLabelField', - async run($: IGlobalVariable) { - const labelFields: { - data: IJSONObject[]; - } = { + async run($) { + const labelFields = { data: [], }; @@ -15,9 +11,7 @@ export default { `${$.auth.data.apiDomain}/api/v1/organizationFields` ); - const labelField = data.data.filter( - (field: IJSONObject) => field.key === 'label' - ); + const labelField = data.data.filter((field) => field.key === 'label'); const labelOptions = labelField[0].options; if (labelOptions?.length) { diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-organizations/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-organizations/index.js similarity index 72% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-organizations/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-organizations/index.js index b24f176e..597d95ce 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-organizations/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-organizations/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List organizations', key: 'listOrganizations', - async run($: IGlobalVariable) { - const organizations: { - data: IJSONObject[]; - } = { + async run($) { + const organizations = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-person-label-field/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-person-label-field/index.js similarity index 76% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-person-label-field/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-person-label-field/index.js index f162eefe..ce1dfffb 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-person-label-field/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-person-label-field/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List person label field', key: 'listPersonLabelField', - async run($: IGlobalVariable) { - const personFields: { - data: IJSONObject[]; - } = { + async run($) { + const personFields = { data: [], }; @@ -24,7 +20,7 @@ export default { params.start = data.additional_data?.pagination?.next_start; const labelField = data.data?.filter( - (personField: IJSONObject) => personField.key === 'label' + (personField) => personField.key === 'label' ); const labelOptions = labelField[0].options; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-persons/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-persons/index.js similarity index 78% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-persons/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-persons/index.js index a790aa6d..dadd841c 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-persons/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-persons/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List persons', key: 'listPersons', - async run($: IGlobalVariable) { - const persons: { - data: IJSONObject[]; - } = { + async run($) { + const persons = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/dynamic-data/list-users/index.ts b/packages/backend/src/apps/pipedrive/dynamic-data/list-users/index.js similarity index 69% rename from packages/backend/src/apps/pipedrive/dynamic-data/list-users/index.ts rename to packages/backend/src/apps/pipedrive/dynamic-data/list-users/index.js index d35c7cd1..b07433bf 100644 --- a/packages/backend/src/apps/pipedrive/dynamic-data/list-users/index.ts +++ b/packages/backend/src/apps/pipedrive/dynamic-data/list-users/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List users', key: 'listUsers', - async run($: IGlobalVariable) { - const users: { - data: IJSONObject[]; - } = { + async run($) { + const users = { data: [], }; diff --git a/packages/backend/src/apps/pipedrive/index.d.ts b/packages/backend/src/apps/pipedrive/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/pipedrive/index.ts b/packages/backend/src/apps/pipedrive/index.js similarity index 53% rename from packages/backend/src/apps/pipedrive/index.ts rename to packages/backend/src/apps/pipedrive/index.js index e2092db1..3fc14508 100644 --- a/packages/backend/src/apps/pipedrive/index.ts +++ b/packages/backend/src/apps/pipedrive/index.js @@ -1,10 +1,10 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import setBaseUrl from './common/set-base-url'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import setBaseUrl from './common/set-base-url.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Pipedrive', diff --git a/packages/backend/src/apps/pipedrive/triggers/index.js b/packages/backend/src/apps/pipedrive/triggers/index.js new file mode 100644 index 00000000..e2e3b9f2 --- /dev/null +++ b/packages/backend/src/apps/pipedrive/triggers/index.js @@ -0,0 +1,6 @@ +import newActivities from './new-activities/index.js'; +import newDeals from './new-deals/index.js'; +import newLeads from './new-leads/index.js'; +import newNotes from './new-notes/index.js'; + +export default [newActivities, newDeals, newLeads, newNotes]; diff --git a/packages/backend/src/apps/pipedrive/triggers/index.ts b/packages/backend/src/apps/pipedrive/triggers/index.ts deleted file mode 100644 index 40668868..00000000 --- a/packages/backend/src/apps/pipedrive/triggers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import newActivities from './new-activities'; -import newDeals from './new-deals'; -import newLeads from './new-leads'; -import newNotes from './new-notes'; - -export default [newActivities, newDeals, newLeads, newNotes]; diff --git a/packages/backend/src/apps/pipedrive/triggers/new-activities/index.ts b/packages/backend/src/apps/pipedrive/triggers/new-activities/index.js similarity index 81% rename from packages/backend/src/apps/pipedrive/triggers/new-activities/index.ts rename to packages/backend/src/apps/pipedrive/triggers/new-activities/index.js index 389849b2..b8edd6e5 100644 --- a/packages/backend/src/apps/pipedrive/triggers/new-activities/index.ts +++ b/packages/backend/src/apps/pipedrive/triggers/new-activities/index.js @@ -1,10 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; - -type Payload = { - start: number; - limit: number; - sort: string; -}; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New activities', @@ -14,7 +8,7 @@ export default defineTrigger({ arguments: [], async run($) { - const params: Payload = { + const params = { start: 0, limit: 100, sort: 'add_time DESC', diff --git a/packages/backend/src/apps/pipedrive/triggers/new-deals/index.ts b/packages/backend/src/apps/pipedrive/triggers/new-deals/index.js similarity index 80% rename from packages/backend/src/apps/pipedrive/triggers/new-deals/index.ts rename to packages/backend/src/apps/pipedrive/triggers/new-deals/index.js index ad03bc21..33abde67 100644 --- a/packages/backend/src/apps/pipedrive/triggers/new-deals/index.ts +++ b/packages/backend/src/apps/pipedrive/triggers/new-deals/index.js @@ -1,10 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; - -type Payload = { - start: number; - limit: number; - sort: string; -}; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New deals', @@ -14,7 +8,7 @@ export default defineTrigger({ arguments: [], async run($) { - const params: Payload = { + const params = { start: 0, limit: 100, sort: 'add_time DESC', diff --git a/packages/backend/src/apps/pipedrive/triggers/new-leads/index.ts b/packages/backend/src/apps/pipedrive/triggers/new-leads/index.js similarity index 69% rename from packages/backend/src/apps/pipedrive/triggers/new-leads/index.ts rename to packages/backend/src/apps/pipedrive/triggers/new-leads/index.js index d65d18da..b29e3fb5 100644 --- a/packages/backend/src/apps/pipedrive/triggers/new-leads/index.ts +++ b/packages/backend/src/apps/pipedrive/triggers/new-leads/index.js @@ -1,21 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; - -type Payload = { - start: number; - limit: number; - sort: string; -}; - -type ResponseData = { - data: { - id: number; - }[]; - additional_data: { - pagination: { - next_start: number; - }; - }; -}; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New leads', @@ -25,7 +8,7 @@ export default defineTrigger({ arguments: [], async run($) { - const params: Payload = { + const params = { start: 0, limit: 100, sort: 'add_time DESC', diff --git a/packages/backend/src/apps/pipedrive/triggers/new-notes/index.ts b/packages/backend/src/apps/pipedrive/triggers/new-notes/index.js similarity index 80% rename from packages/backend/src/apps/pipedrive/triggers/new-notes/index.ts rename to packages/backend/src/apps/pipedrive/triggers/new-notes/index.js index e246897a..18388313 100644 --- a/packages/backend/src/apps/pipedrive/triggers/new-notes/index.ts +++ b/packages/backend/src/apps/pipedrive/triggers/new-notes/index.js @@ -1,10 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; - -type Payload = { - start: number; - limit: number; - sort: string; -}; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New notes', @@ -14,7 +8,7 @@ export default defineTrigger({ arguments: [], async run($) { - const params: Payload = { + const params = { start: 0, limit: 100, sort: 'add_time DESC', diff --git a/packages/backend/src/apps/placetel/auth/index.ts b/packages/backend/src/apps/placetel/auth/index.js similarity index 69% rename from packages/backend/src/apps/placetel/auth/index.ts rename to packages/backend/src/apps/placetel/auth/index.js index 6ce142f0..85181dbe 100644 --- a/packages/backend/src/apps/placetel/auth/index.ts +++ b/packages/backend/src/apps/placetel/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'apiToken', label: 'API Token', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/placetel/auth/is-still-verified.js b/packages/backend/src/apps/placetel/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/placetel/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/placetel/auth/is-still-verified.ts b/packages/backend/src/apps/placetel/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/placetel/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/placetel/auth/verify-credentials.ts b/packages/backend/src/apps/placetel/auth/verify-credentials.js similarity index 59% rename from packages/backend/src/apps/placetel/auth/verify-credentials.ts rename to packages/backend/src/apps/placetel/auth/verify-credentials.js index 7fab269f..0475497c 100644 --- a/packages/backend/src/apps/placetel/auth/verify-credentials.ts +++ b/packages/backend/src/apps/placetel/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const { data } = await $.http.get('/v2/me'); await $.auth.set({ diff --git a/packages/backend/src/apps/placetel/common/add-auth-header.ts b/packages/backend/src/apps/placetel/common/add-auth-header.js similarity index 59% rename from packages/backend/src/apps/placetel/common/add-auth-header.ts rename to packages/backend/src/apps/placetel/common/add-auth-header.js index 8a77a497..92ac3313 100644 --- a/packages/backend/src/apps/placetel/common/add-auth-header.ts +++ b/packages/backend/src/apps/placetel/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.apiToken) { requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiToken}`; } diff --git a/packages/backend/src/apps/placetel/dynamic-data/index.js b/packages/backend/src/apps/placetel/dynamic-data/index.js new file mode 100644 index 00000000..1c3e14e4 --- /dev/null +++ b/packages/backend/src/apps/placetel/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listNumbers from './list-numbers/index.js'; + +export default [listNumbers]; diff --git a/packages/backend/src/apps/placetel/dynamic-data/index.ts b/packages/backend/src/apps/placetel/dynamic-data/index.ts deleted file mode 100644 index 819a758d..00000000 --- a/packages/backend/src/apps/placetel/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listNumbers from './list-numbers'; - -export default [listNumbers]; diff --git a/packages/backend/src/apps/placetel/dynamic-data/list-numbers/index.ts b/packages/backend/src/apps/placetel/dynamic-data/list-numbers/index.js similarity index 71% rename from packages/backend/src/apps/placetel/dynamic-data/list-numbers/index.ts rename to packages/backend/src/apps/placetel/dynamic-data/list-numbers/index.js index c3dff3a7..eeccca33 100644 --- a/packages/backend/src/apps/placetel/dynamic-data/list-numbers/index.ts +++ b/packages/backend/src/apps/placetel/dynamic-data/list-numbers/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List numbers', key: 'listNumbers', - async run($: IGlobalVariable) { - const numbers: { - data: IJSONObject[]; - } = { + async run($) { + const numbers = { data: [], }; diff --git a/packages/backend/src/apps/placetel/index.d.ts b/packages/backend/src/apps/placetel/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/placetel/index.ts b/packages/backend/src/apps/placetel/index.js similarity index 62% rename from packages/backend/src/apps/placetel/index.ts rename to packages/backend/src/apps/placetel/index.js index f682ea26..4c478e17 100644 --- a/packages/backend/src/apps/placetel/index.ts +++ b/packages/backend/src/apps/placetel/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Placetel', diff --git a/packages/backend/src/apps/placetel/triggers/hungup-call/index.ts b/packages/backend/src/apps/placetel/triggers/hungup-call/index.js similarity index 85% rename from packages/backend/src/apps/placetel/triggers/hungup-call/index.ts rename to packages/backend/src/apps/placetel/triggers/hungup-call/index.js index 07ad324a..f0f0fba5 100644 --- a/packages/backend/src/apps/placetel/triggers/hungup-call/index.ts +++ b/packages/backend/src/apps/placetel/triggers/hungup-call/index.js @@ -1,6 +1,6 @@ import Crypto from 'crypto'; -import { IJSONObject } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; + +import defineTrigger from '../../../../helpers/define-trigger.js'; import getRawBody from 'raw-body'; export default defineTrigger({ @@ -12,14 +12,14 @@ export default defineTrigger({ { label: 'Types', key: 'types', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Type', key: 'type', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Filter events by type. If the types are not specified, all types will be notified.', @@ -41,14 +41,14 @@ export default defineTrigger({ { label: 'Numbers', key: 'numbers', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Number', key: 'number', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Filter events by number. If the numbers are not specified, all numbers will be notified.', @@ -76,9 +76,7 @@ export default defineTrigger({ const jsonRequestBody = JSON.parse(stringBody); - let types = ($.step.parameters.types as IJSONObject[]).map( - (type) => type.type - ); + let types = $.step.parameters.types.map((type) => type.type); if (types.length === 0) { types = ['all']; @@ -97,9 +95,7 @@ export default defineTrigger({ }, async testRun($) { - const types = ($.step.parameters.types as IJSONObject[]).map( - (type) => type.type - ); + const types = $.step.parameters.types.map((type) => type.type); const sampleEventData = { type: types[0] || 'missed', @@ -123,8 +119,8 @@ export default defineTrigger({ }, async registerHook($) { - const numbers = ($.step.parameters.numbers as IJSONObject[]) - .map((number: IJSONObject) => number.number) + const numbers = $.step.parameters.numbers + .map((number) => number.number) .filter(Boolean); const subscriptionPayload = { diff --git a/packages/backend/src/apps/placetel/triggers/index.js b/packages/backend/src/apps/placetel/triggers/index.js new file mode 100644 index 00000000..8bb892fb --- /dev/null +++ b/packages/backend/src/apps/placetel/triggers/index.js @@ -0,0 +1,3 @@ +import hungupCall from './hungup-call/index.js'; + +export default [hungupCall]; diff --git a/packages/backend/src/apps/placetel/triggers/index.ts b/packages/backend/src/apps/placetel/triggers/index.ts deleted file mode 100644 index 9a8974d8..00000000 --- a/packages/backend/src/apps/placetel/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import hungupCall from './hungup-call'; - -export default [hungupCall]; diff --git a/packages/backend/src/apps/postgresql/actions/delete/index.ts b/packages/backend/src/apps/postgresql/actions/delete/index.js similarity index 67% rename from packages/backend/src/apps/postgresql/actions/delete/index.ts rename to packages/backend/src/apps/postgresql/actions/delete/index.js index 4a79477c..1f78160b 100644 --- a/packages/backend/src/apps/postgresql/actions/delete/index.ts +++ b/packages/backend/src/apps/postgresql/actions/delete/index.js @@ -1,11 +1,7 @@ -import { IJSONArray } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; -import getClient from '../../common/postgres-client'; -import setParams from '../../common/set-run-time-parameters'; -import whereClauseOperators from '../../common/where-clause-operators'; - -type TWhereClauseEntry = { columnName: string, value: string, operator: string }; -type TWhereClauseEntries = TWhereClauseEntry[]; +import defineAction from '../../../../helpers/define-action.js'; +import getClient from '../../common/postgres-client.js'; +import setParams from '../../common/set-run-time-parameters.js'; +import whereClauseOperators from '../../common/where-clause-operators.js'; export default defineAction({ name: 'Delete', @@ -15,7 +11,7 @@ export default defineAction({ { label: 'Schema name', key: 'schema', - type: 'string' as const, + type: 'string', value: 'public', required: true, variables: true, @@ -23,73 +19,73 @@ export default defineAction({ { label: 'Table name', key: 'table', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Where clause entries', key: 'whereClauseEntries', - type: 'dynamic' as const, + type: 'dynamic', required: true, fields: [ { label: 'Column name', key: 'columnName', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Operator', key: 'operator', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, - options: whereClauseOperators + options: whereClauseOperators, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } - ] + }, + ], }, { label: 'Run-time parameters', key: 'params', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: 'Change run-time configuration parameters with SET command', fields: [ { label: 'Parameter name', key: 'parameter', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], - } + }, ], async run($) { const client = getClient($); await setParams(client, $.step.parameters.params); - const whereClauseEntries = $.step.parameters.whereClauseEntries as TWhereClauseEntries; + const whereClauseEntries = $.step.parameters.whereClauseEntries; - const response = await client($.step.parameters.table as string) - .withSchema($.step.parameters.schema as string) + const response = await client($.step.parameters.table) + .withSchema($.step.parameters.schema) .returning('*') .where((builder) => { for (const whereClauseEntry of whereClauseEntries) { @@ -100,14 +96,14 @@ export default defineAction({ } } }) - .del() as IJSONArray; + .del(); client.destroy(); $.setActionItem({ raw: { - rows: response - } + rows: response, + }, }); }, }); diff --git a/packages/backend/src/apps/postgresql/actions/index.js b/packages/backend/src/apps/postgresql/actions/index.js new file mode 100644 index 00000000..b3cbbb15 --- /dev/null +++ b/packages/backend/src/apps/postgresql/actions/index.js @@ -0,0 +1,6 @@ +import insertAction from './insert/index.js'; +import updateAction from './update/index.js'; +import deleteAction from './delete/index.js'; +import SQLQuery from './sql-query/index.js'; + +export default [insertAction, updateAction, deleteAction, SQLQuery]; diff --git a/packages/backend/src/apps/postgresql/actions/index.ts b/packages/backend/src/apps/postgresql/actions/index.ts deleted file mode 100644 index b882cf42..00000000 --- a/packages/backend/src/apps/postgresql/actions/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import insertAction from './insert'; -import updateAction from './update'; -import deleteAction from './delete'; -import SQLQuery from './sql-query' - -export default [insertAction, updateAction, deleteAction, SQLQuery]; diff --git a/packages/backend/src/apps/postgresql/actions/insert/index.ts b/packages/backend/src/apps/postgresql/actions/insert/index.js similarity index 58% rename from packages/backend/src/apps/postgresql/actions/insert/index.ts rename to packages/backend/src/apps/postgresql/actions/insert/index.js index 37471fb3..ecf0efb7 100644 --- a/packages/backend/src/apps/postgresql/actions/insert/index.ts +++ b/packages/backend/src/apps/postgresql/actions/insert/index.js @@ -1,9 +1,6 @@ -import { IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; -import getClient from '../../common/postgres-client'; -import setParams from '../../common/set-run-time-parameters'; - -type TColumnValueEntries = { columnName: string, value: string }[]; +import defineAction from '../../../../helpers/define-action.js'; +import getClient from '../../common/postgres-client.js'; +import setParams from '../../common/set-run-time-parameters.js'; export default defineAction({ name: 'Insert', @@ -13,7 +10,7 @@ export default defineAction({ { label: 'Schema name', key: 'schema', - type: 'string' as const, + type: 'string', value: 'public', required: true, variables: true, @@ -21,75 +18,78 @@ export default defineAction({ { label: 'Table name', key: 'table', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Column - value entries', key: 'columnValueEntries', - type: 'dynamic' as const, + type: 'dynamic', required: true, description: 'Table columns with values', fields: [ { label: 'Column name', key: 'columnName', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], }, { label: 'Run-time parameters', key: 'params', - type: 'dynamic' as const, + type: 'dynamic', required: true, description: 'Change run-time configuration parameters with SET command', fields: [ { label: 'Parameter name', key: 'parameter', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], - } + }, ], async run($) { const client = getClient($); await setParams(client, $.step.parameters.params); - const fields = $.step.parameters.columnValueEntries as TColumnValueEntries; - const data = fields.reduce((result, { columnName, value }) => ({ - ...result, - [columnName]: value, - }), {}); + const fields = $.step.parameters.columnValueEntries; + const data = fields.reduce( + (result, { columnName, value }) => ({ + ...result, + [columnName]: value, + }), + {} + ); - const response = await client($.step.parameters.table as string) - .withSchema($.step.parameters.schema as string) + const response = await client($.step.parameters.table) + .withSchema($.step.parameters.schema) .returning('*') - .insert(data) as IJSONObject; + .insert(data); client.destroy(); - $.setActionItem({ raw: response[0] as IJSONObject }); + $.setActionItem({ raw: response[0] }); }, }); diff --git a/packages/backend/src/apps/postgresql/actions/sql-query/index.ts b/packages/backend/src/apps/postgresql/actions/sql-query/index.js similarity index 74% rename from packages/backend/src/apps/postgresql/actions/sql-query/index.ts rename to packages/backend/src/apps/postgresql/actions/sql-query/index.js index 9cfd0e6f..221259d5 100644 --- a/packages/backend/src/apps/postgresql/actions/sql-query/index.ts +++ b/packages/backend/src/apps/postgresql/actions/sql-query/index.js @@ -1,6 +1,6 @@ -import defineAction from '../../../../helpers/define-action'; -import getClient from '../../common/postgres-client'; -import setParams from '../../common/set-run-time-parameters'; +import defineAction from '../../../../helpers/define-action.js'; +import getClient from '../../common/postgres-client.js'; +import setParams from '../../common/set-run-time-parameters.js'; export default defineAction({ name: 'SQL query', @@ -10,7 +10,7 @@ export default defineAction({ { label: 'SQL statement', key: 'queryStatement', - type: 'string' as const, + type: 'string', value: 'public', required: true, variables: true, @@ -18,26 +18,26 @@ export default defineAction({ { label: 'Run-time parameters', key: 'params', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: 'Change run-time configuration parameters with SET command', fields: [ { label: 'Parameter name', key: 'parameter', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], - } + }, ], async run($) { @@ -50,8 +50,8 @@ export default defineAction({ $.setActionItem({ raw: { - rows - } + rows, + }, }); }, }); diff --git a/packages/backend/src/apps/postgresql/actions/update/index.ts b/packages/backend/src/apps/postgresql/actions/update/index.js similarity index 63% rename from packages/backend/src/apps/postgresql/actions/update/index.ts rename to packages/backend/src/apps/postgresql/actions/update/index.js index 798e3593..5f9cc361 100644 --- a/packages/backend/src/apps/postgresql/actions/update/index.ts +++ b/packages/backend/src/apps/postgresql/actions/update/index.js @@ -1,12 +1,7 @@ -import { IJSONArray } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; -import getClient from '../../common/postgres-client'; -import setParams from '../../common/set-run-time-parameters'; -import whereClauseOperators from '../../common/where-clause-operators'; - -type TColumnValueEntries = { columnName: string, value: string }[]; -type TWhereClauseEntry = { columnName: string, value: string, operator: string }; -type TWhereClauseEntries = TWhereClauseEntry[]; +import defineAction from '../../../../helpers/define-action.js'; +import getClient from '../../common/postgres-client.js'; +import setParams from '../../common/set-run-time-parameters.js'; +import whereClauseOperators from '../../common/where-clause-operators.js'; export default defineAction({ name: 'Update', @@ -16,7 +11,7 @@ export default defineAction({ { label: 'Schema name', key: 'schema', - type: 'string' as const, + type: 'string', value: 'public', required: true, variables: true, @@ -24,102 +19,105 @@ export default defineAction({ { label: 'Table name', key: 'table', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Where clause entries', key: 'whereClauseEntries', - type: 'dynamic' as const, + type: 'dynamic', required: true, fields: [ { label: 'Column name', key: 'columnName', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Operator', key: 'operator', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, - options: whereClauseOperators + options: whereClauseOperators, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } - ] + }, + ], }, { label: 'Column - value entries', key: 'columnValueEntries', - type: 'dynamic' as const, + type: 'dynamic', required: true, description: 'Table columns with values', fields: [ { label: 'Column name', key: 'columnName', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], }, { label: 'Run-time parameters', key: 'params', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: 'Change run-time configuration parameters with SET command', fields: [ { label: 'Parameter name', key: 'parameter', - type: 'string' as const, + type: 'string', required: true, variables: true, }, { label: 'Value', key: 'value', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], - } + }, ], async run($) { const client = getClient($); await setParams(client, $.step.parameters.params); - const whereClauseEntries = $.step.parameters.whereClauseEntries as TWhereClauseEntries; + const whereClauseEntries = $.step.parameters.whereClauseEntries; - const fields = $.step.parameters.columnValueEntries as TColumnValueEntries; - const data: Record = fields.reduce((result, { columnName, value }) => ({ - ...result, - [columnName]: value, - }), {}); + const fields = $.step.parameters.columnValueEntries; + const data = fields.reduce( + (result, { columnName, value }) => ({ + ...result, + [columnName]: value, + }), + {} + ); - const response = await client($.step.parameters.table as string) - .withSchema($.step.parameters.schema as string) + const response = await client($.step.parameters.table) + .withSchema($.step.parameters.schema) .returning('*') .where((builder) => { for (const whereClauseEntry of whereClauseEntries) { @@ -130,14 +128,14 @@ export default defineAction({ } } }) - .update(data) as IJSONArray; + .update(data); client.destroy(); $.setActionItem({ raw: { - rows: response - } + rows: response, + }, }); }, }); diff --git a/packages/backend/src/apps/postgresql/auth/index.ts b/packages/backend/src/apps/postgresql/auth/index.js similarity index 85% rename from packages/backend/src/apps/postgresql/auth/index.ts rename to packages/backend/src/apps/postgresql/auth/index.js index 2df0425e..e839ac23 100644 --- a/packages/backend/src/apps/postgresql/auth/index.ts +++ b/packages/backend/src/apps/postgresql/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'version', label: 'PostgreSQL version', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'host', label: 'Host', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: '127.0.0.1', @@ -29,7 +29,7 @@ export default { { key: 'port', label: 'Port', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: '5432', @@ -40,7 +40,7 @@ export default { { key: 'enableSsl', label: 'Enable SSL', - type: 'dropdown' as const, + type: 'dropdown', required: true, readOnly: false, value: 'false', @@ -61,7 +61,7 @@ export default { { key: 'database', label: 'Database name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -72,7 +72,7 @@ export default { { key: 'user', label: 'Database username', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -83,7 +83,7 @@ export default { { key: 'password', label: 'Password', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/postgresql/auth/is-still-verified.js b/packages/backend/src/apps/postgresql/auth/is-still-verified.js new file mode 100644 index 00000000..270d415b --- /dev/null +++ b/packages/backend/src/apps/postgresql/auth/is-still-verified.js @@ -0,0 +1,9 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/postgresql/auth/is-still-verified.ts b/packages/backend/src/apps/postgresql/auth/is-still-verified.ts deleted file mode 100644 index 5a2fe2ae..00000000 --- a/packages/backend/src/apps/postgresql/auth/is-still-verified.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/postgresql/auth/verify-credentials.ts b/packages/backend/src/apps/postgresql/auth/verify-credentials.js similarity index 74% rename from packages/backend/src/apps/postgresql/auth/verify-credentials.ts rename to packages/backend/src/apps/postgresql/auth/verify-credentials.js index 4815fb45..2249e600 100644 --- a/packages/backend/src/apps/postgresql/auth/verify-credentials.ts +++ b/packages/backend/src/apps/postgresql/auth/verify-credentials.js @@ -1,8 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; -import logger from '../../../helpers/logger'; -import getClient from '../common/postgres-client'; +import logger from '../../../helpers/logger.js'; +import getClient from '../common/postgres-client.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const client = getClient($); const checkConnection = await client.raw('SELECT 1'); client.destroy(); diff --git a/packages/backend/src/apps/postgresql/common/postgres-client.js b/packages/backend/src/apps/postgresql/common/postgres-client.js new file mode 100644 index 00000000..e91e0455 --- /dev/null +++ b/packages/backend/src/apps/postgresql/common/postgres-client.js @@ -0,0 +1,20 @@ +import knex from 'knex'; + +const getClient = ($) => { + const client = knex({ + client: 'pg', + version: $.auth.data.version, + connection: { + host: $.auth.data.host, + port: Number($.auth.data.port), + ssl: $.auth.data.enableSsl === 'true' || $.auth.data.enableSsl === true, + user: $.auth.data.user, + password: $.auth.data.password, + database: $.auth.data.database, + }, + }); + + return client; +}; + +export default getClient; diff --git a/packages/backend/src/apps/postgresql/common/postgres-client.ts b/packages/backend/src/apps/postgresql/common/postgres-client.ts deleted file mode 100644 index 40cf06b3..00000000 --- a/packages/backend/src/apps/postgresql/common/postgres-client.ts +++ /dev/null @@ -1,22 +0,0 @@ -import knex, { Knex } from 'knex'; -import { IGlobalVariable } from '@automatisch/types'; - -const getClient = ($: IGlobalVariable): Knex => { - const client = knex({ - client: 'pg', - version: $.auth.data.version as string, - connection: { - host: $.auth.data.host as string, - port: Number($.auth.data.port), - ssl: ($.auth.data.enableSsl === 'true' || - $.auth.data.enableSsl === true) as boolean, - user: $.auth.data.user as string, - password: $.auth.data.password as string, - database: $.auth.data.database as string, - }, - }); - - return client; -}; - -export default getClient; diff --git a/packages/backend/src/apps/postgresql/common/set-run-time-parameters.js b/packages/backend/src/apps/postgresql/common/set-run-time-parameters.js new file mode 100644 index 00000000..bf9a1b79 --- /dev/null +++ b/packages/backend/src/apps/postgresql/common/set-run-time-parameters.js @@ -0,0 +1,14 @@ +const setParams = async (client, params) => { + for (const { parameter, value } of params) { + if (parameter) { + const bindings = { + parameter, + value, + }; + + await client.raw('SET :parameter: = :value:', bindings); + } + } +}; + +export default setParams; diff --git a/packages/backend/src/apps/postgresql/common/set-run-time-parameters.ts b/packages/backend/src/apps/postgresql/common/set-run-time-parameters.ts deleted file mode 100644 index 49c1555b..00000000 --- a/packages/backend/src/apps/postgresql/common/set-run-time-parameters.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Knex } from 'knex'; -import { type IJSONValue } from '@automatisch/types'; - -type TParams = { parameter: string; value: string; }[]; - -const setParams = async (client: Knex, params: IJSONValue = []): Promise => { - for (const { parameter, value } of (params as TParams)) { - if (parameter) { - const bindings = { - parameter, - value, - }; - - await client.raw('SET :parameter: = :value:', bindings); - } - } -}; - -export default setParams; diff --git a/packages/backend/src/apps/postgresql/common/where-clause-operators.ts b/packages/backend/src/apps/postgresql/common/where-clause-operators.js similarity index 100% rename from packages/backend/src/apps/postgresql/common/where-clause-operators.ts rename to packages/backend/src/apps/postgresql/common/where-clause-operators.js diff --git a/packages/backend/src/apps/postgresql/index.d.ts b/packages/backend/src/apps/postgresql/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/postgresql/index.ts b/packages/backend/src/apps/postgresql/index.js similarity index 70% rename from packages/backend/src/apps/postgresql/index.ts rename to packages/backend/src/apps/postgresql/index.js index b39e24fc..f0ca34fb 100644 --- a/packages/backend/src/apps/postgresql/index.ts +++ b/packages/backend/src/apps/postgresql/index.js @@ -1,6 +1,6 @@ -import defineApp from '../../helpers/define-app'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'PostgreSQL', diff --git a/packages/backend/src/apps/pushover/actions/index.ts b/packages/backend/src/apps/pushover/actions/index.js similarity index 86% rename from packages/backend/src/apps/pushover/actions/index.ts rename to packages/backend/src/apps/pushover/actions/index.js index 8b423a8a..ba1bd4b5 100644 --- a/packages/backend/src/apps/pushover/actions/index.ts +++ b/packages/backend/src/apps/pushover/actions/index.js @@ -1,3 +1,3 @@ -import sendAPushoverNotification from './send-a-pushover-notification'; +import sendAPushoverNotification from './send-a-pushover-notification/index.js'; export default [sendAPushoverNotification]; diff --git a/packages/backend/src/apps/pushover/actions/send-a-pushover-notification/index.ts b/packages/backend/src/apps/pushover/actions/send-a-pushover-notification/index.js similarity index 83% rename from packages/backend/src/apps/pushover/actions/send-a-pushover-notification/index.ts rename to packages/backend/src/apps/pushover/actions/send-a-pushover-notification/index.js index 504f7375..59232982 100644 --- a/packages/backend/src/apps/pushover/actions/send-a-pushover-notification/index.ts +++ b/packages/backend/src/apps/pushover/actions/send-a-pushover-notification/index.js @@ -1,5 +1,4 @@ -import { IJSONArray, IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Send a Pushover Notification', @@ -10,7 +9,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: false, description: 'An optional title displayed with the message.', variables: true, @@ -18,7 +17,7 @@ export default defineAction({ { label: 'Message', key: 'message', - type: 'string' as const, + type: 'string', required: true, description: 'The main message text of your notification.', variables: true, @@ -26,7 +25,7 @@ export default defineAction({ { label: 'Priority', key: 'priority', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -44,7 +43,7 @@ export default defineAction({ { label: 'Sound', key: 'sound', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Optional sound to override your default.', variables: true, @@ -62,7 +61,7 @@ export default defineAction({ { label: 'URL', key: 'url', - type: 'string' as const, + type: 'string', required: false, description: 'URL to display with message.', variables: true, @@ -70,7 +69,7 @@ export default defineAction({ { label: 'URL Title', key: 'urlTitle', - type: 'string' as const, + type: 'string', required: false, description: 'Title of URL to display, otherwise URL itself will be displayed.', @@ -79,14 +78,14 @@ export default defineAction({ { label: 'Devices', key: 'devices', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Device', key: 'device', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: 'Restrict sending to just these devices on your account.', @@ -110,10 +109,8 @@ export default defineAction({ const { title, message, priority, sound, url, urlTitle } = $.step.parameters; - const devices = $.step.parameters.devices as IJSONArray; - const allDevices = devices - .map((device: IJSONObject) => device.device) - .join(','); + const devices = $.step.parameters.devices; + const allDevices = devices.map((device) => device.device).join(','); const payload = { token: $.auth.data.apiToken, diff --git a/packages/backend/src/apps/pushover/auth/index.ts b/packages/backend/src/apps/pushover/auth/index.js similarity index 79% rename from packages/backend/src/apps/pushover/auth/index.ts rename to packages/backend/src/apps/pushover/auth/index.js index 217bee14..06c90ab1 100644 --- a/packages/backend/src/apps/pushover/auth/index.ts +++ b/packages/backend/src/apps/pushover/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'userKey', label: 'User Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -29,7 +29,7 @@ export default { { key: 'apiToken', label: 'API Token', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/pushover/auth/is-still-verified.js b/packages/backend/src/apps/pushover/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/pushover/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/pushover/auth/is-still-verified.ts b/packages/backend/src/apps/pushover/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/pushover/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/pushover/auth/verify-credentials.ts b/packages/backend/src/apps/pushover/auth/verify-credentials.js similarity index 63% rename from packages/backend/src/apps/pushover/auth/verify-credentials.ts rename to packages/backend/src/apps/pushover/auth/verify-credentials.js index 3dd9440d..27b5ec29 100644 --- a/packages/backend/src/apps/pushover/auth/verify-credentials.ts +++ b/packages/backend/src/apps/pushover/auth/verify-credentials.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; -import HttpError from '../../../errors/http'; +import HttpError from '../../../errors/http.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { try { await $.http.post(`/1/users/validate.json`, { - token: $.auth.data.apiToken as string, - user: $.auth.data.userKey as string, + token: $.auth.data.apiToken, + user: $.auth.data.userKey, }); } catch (error) { const noDeviceError = 'user is valid but has no active devices'; diff --git a/packages/backend/src/apps/pushover/dynamic-data/index.js b/packages/backend/src/apps/pushover/dynamic-data/index.js new file mode 100644 index 00000000..1faccbbb --- /dev/null +++ b/packages/backend/src/apps/pushover/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listDevices from './list-devices/index.js'; +import listSounds from './list-sounds/index.js'; + +export default [listDevices, listSounds]; diff --git a/packages/backend/src/apps/pushover/dynamic-data/index.ts b/packages/backend/src/apps/pushover/dynamic-data/index.ts deleted file mode 100644 index 28aececc..00000000 --- a/packages/backend/src/apps/pushover/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listDevices from './list-devices'; -import listSounds from './list-sounds'; - -export default [listDevices, listSounds]; diff --git a/packages/backend/src/apps/pushover/dynamic-data/list-devices/index.ts b/packages/backend/src/apps/pushover/dynamic-data/list-devices/index.js similarity index 73% rename from packages/backend/src/apps/pushover/dynamic-data/list-devices/index.ts rename to packages/backend/src/apps/pushover/dynamic-data/list-devices/index.js index ef5d6180..3b3f74c5 100644 --- a/packages/backend/src/apps/pushover/dynamic-data/list-devices/index.ts +++ b/packages/backend/src/apps/pushover/dynamic-data/list-devices/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List devices', key: 'listDevices', - async run($: IGlobalVariable) { - const devices: { - data: IJSONObject[]; - } = { + async run($) { + const devices = { data: [], }; diff --git a/packages/backend/src/apps/pushover/dynamic-data/list-sounds/index.ts b/packages/backend/src/apps/pushover/dynamic-data/list-sounds/index.js similarity index 68% rename from packages/backend/src/apps/pushover/dynamic-data/list-sounds/index.ts rename to packages/backend/src/apps/pushover/dynamic-data/list-sounds/index.js index c45f1fe0..f089479f 100644 --- a/packages/backend/src/apps/pushover/dynamic-data/list-sounds/index.ts +++ b/packages/backend/src/apps/pushover/dynamic-data/list-sounds/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List sounds', key: 'listSounds', - async run($: IGlobalVariable) { - const sounds: { - data: IJSONObject[]; - } = { + async run($) { + const sounds = { data: [], }; @@ -21,7 +17,7 @@ export default { for (const [key, value] of soundEntries) { sounds.data.push({ value: key, - name: value as string, + name: value, }); } diff --git a/packages/backend/src/apps/pushover/index.d.ts b/packages/backend/src/apps/pushover/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/pushover/index.ts b/packages/backend/src/apps/pushover/index.js similarity index 66% rename from packages/backend/src/apps/pushover/index.ts rename to packages/backend/src/apps/pushover/index.js index 6a88e23d..d5679e56 100644 --- a/packages/backend/src/apps/pushover/index.ts +++ b/packages/backend/src/apps/pushover/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import auth from './auth'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Pushover', diff --git a/packages/backend/src/apps/reddit/actions/create-link-post/index.ts b/packages/backend/src/apps/reddit/actions/create-link-post/index.js similarity index 80% rename from packages/backend/src/apps/reddit/actions/create-link-post/index.ts rename to packages/backend/src/apps/reddit/actions/create-link-post/index.js index b69af808..92770237 100644 --- a/packages/backend/src/apps/reddit/actions/create-link-post/index.ts +++ b/packages/backend/src/apps/reddit/actions/create-link-post/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; import { URLSearchParams } from 'url'; export default defineAction({ @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Title', key: 'title', - type: 'string' as const, + type: 'string', required: true, description: 'Heading for the recent post. Limited to 300 characters or less.', @@ -18,7 +18,7 @@ export default defineAction({ { label: 'Subreddit', key: 'subreddit', - type: 'string' as const, + type: 'string', required: true, description: 'The subreddit for posting. Note: Exclude /r/.', variables: true, @@ -26,7 +26,7 @@ export default defineAction({ { label: 'Url', key: 'url', - type: 'string' as const, + type: 'string', required: true, description: '', variables: true, @@ -39,9 +39,9 @@ export default defineAction({ const params = new URLSearchParams({ kind: 'link', api_type: 'json', - title: title as string, - sr: subreddit as string, - url: url as string, + title: title, + sr: subreddit, + url: url, }); const { data } = await $.http.post('/api/submit', params.toString()); diff --git a/packages/backend/src/apps/reddit/actions/index.js b/packages/backend/src/apps/reddit/actions/index.js new file mode 100644 index 00000000..3570d528 --- /dev/null +++ b/packages/backend/src/apps/reddit/actions/index.js @@ -0,0 +1,3 @@ +import createLinkPost from './create-link-post/index.js'; + +export default [createLinkPost]; diff --git a/packages/backend/src/apps/reddit/actions/index.ts b/packages/backend/src/apps/reddit/actions/index.ts deleted file mode 100644 index 832217db..00000000 --- a/packages/backend/src/apps/reddit/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import createLinkPost from './create-link-post'; - -export default [createLinkPost]; diff --git a/packages/backend/src/apps/reddit/auth/generate-auth-url.ts b/packages/backend/src/apps/reddit/auth/generate-auth-url.js similarity index 52% rename from packages/backend/src/apps/reddit/auth/generate-auth-url.ts rename to packages/backend/src/apps/reddit/auth/generate-auth-url.js index b24fb404..ccbcda5a 100644 --- a/packages/backend/src/apps/reddit/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/reddit/auth/generate-auth-url.js @@ -1,15 +1,14 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; - const state = Math.random().toString() as string; + const redirectUri = oauthRedirectUrlField.value; + const state = Math.random().toString(); const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, response_type: 'code', redirect_uri: redirectUri, duration: 'permanent', diff --git a/packages/backend/src/apps/reddit/auth/index.ts b/packages/backend/src/apps/reddit/auth/index.js similarity index 74% rename from packages/backend/src/apps/reddit/auth/index.ts rename to packages/backend/src/apps/reddit/auth/index.js index c98d7565..bd8b8112 100644 --- a/packages/backend/src/apps/reddit/auth/index.ts +++ b/packages/backend/src/apps/reddit/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/reddit/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/reddit/auth/is-still-verified.js b/packages/backend/src/apps/reddit/auth/is-still-verified.js new file mode 100644 index 00000000..08962895 --- /dev/null +++ b/packages/backend/src/apps/reddit/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser.id; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/reddit/auth/is-still-verified.ts b/packages/backend/src/apps/reddit/auth/is-still-verified.ts deleted file mode 100644 index 50107400..00000000 --- a/packages/backend/src/apps/reddit/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser.id; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/reddit/auth/refresh-token.ts b/packages/backend/src/apps/reddit/auth/refresh-token.js similarity index 78% rename from packages/backend/src/apps/reddit/auth/refresh-token.ts rename to packages/backend/src/apps/reddit/auth/refresh-token.js index c88fdfff..c36e5f50 100644 --- a/packages/backend/src/apps/reddit/auth/refresh-token.ts +++ b/packages/backend/src/apps/reddit/auth/refresh-token.js @@ -1,7 +1,6 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { const headers = { Authorization: `Basic ${Buffer.from( $.auth.data.clientId + ':' + $.auth.data.clientSecret @@ -9,7 +8,7 @@ const refreshToken = async ($: IGlobalVariable) => { }; const params = new URLSearchParams({ grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/reddit/auth/verify-credentials.ts b/packages/backend/src/apps/reddit/auth/verify-credentials.js similarity index 76% rename from packages/backend/src/apps/reddit/auth/verify-credentials.ts rename to packages/backend/src/apps/reddit/auth/verify-credentials.js index dd44de54..c39dea60 100644 --- a/packages/backend/src/apps/reddit/auth/verify-credentials.ts +++ b/packages/backend/src/apps/reddit/auth/verify-credentials.js @@ -1,15 +1,14 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; import { URLSearchParams } from 'url'; -const verifyCredentials = async ($: IGlobalVariable) => { +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: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const headers = { Authorization: `Basic ${Buffer.from( $.auth.data.clientId + ':' + $.auth.data.clientSecret @@ -17,7 +16,7 @@ const verifyCredentials = async ($: IGlobalVariable) => { }; const params = new URLSearchParams({ grant_type: 'authorization_code', - code: $.auth.data.code as string, + code: $.auth.data.code, redirect_uri: redirectUri, }); diff --git a/packages/backend/src/apps/reddit/common/add-auth-header.ts b/packages/backend/src/apps/reddit/common/add-auth-header.js similarity index 67% rename from packages/backend/src/apps/reddit/common/add-auth-header.ts rename to packages/backend/src/apps/reddit/common/add-auth-header.js index 147e5dd4..79f97022 100644 --- a/packages/backend/src/apps/reddit/common/add-auth-header.ts +++ b/packages/backend/src/apps/reddit/common/add-auth-header.js @@ -1,8 +1,7 @@ -import { TBeforeRequest } from '@automatisch/types'; -import appConfig from '../../../config/app'; +import appConfig from '../../../config/app.js'; -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - const screenName = $.auth.data?.screenName as string; +const addAuthHeader = ($, requestConfig) => { + const screenName = $.auth.data?.screenName; if ($.auth.data?.accessToken) { requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; } diff --git a/packages/backend/src/apps/reddit/common/auth-scope.js b/packages/backend/src/apps/reddit/common/auth-scope.js new file mode 100644 index 00000000..612bf475 --- /dev/null +++ b/packages/backend/src/apps/reddit/common/auth-scope.js @@ -0,0 +1,3 @@ +const authScope = ['identity', 'read', 'account', 'submit']; + +export default authScope; diff --git a/packages/backend/src/apps/reddit/common/auth-scope.ts b/packages/backend/src/apps/reddit/common/auth-scope.ts deleted file mode 100644 index d1010b4a..00000000 --- a/packages/backend/src/apps/reddit/common/auth-scope.ts +++ /dev/null @@ -1,3 +0,0 @@ -const authScope: string[] = ['identity', 'read', 'account', 'submit']; - -export default authScope; diff --git a/packages/backend/src/apps/reddit/common/get-current-user.ts b/packages/backend/src/apps/reddit/common/get-current-user.js similarity index 52% rename from packages/backend/src/apps/reddit/common/get-current-user.ts rename to packages/backend/src/apps/reddit/common/get-current-user.js index 05fe143a..f76851c1 100644 --- a/packages/backend/src/apps/reddit/common/get-current-user.ts +++ b/packages/backend/src/apps/reddit/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { +const getCurrentUser = async ($) => { const { data: currentUser } = await $.http.get('/api/v1/me'); return currentUser; }; diff --git a/packages/backend/src/apps/reddit/index.d.ts b/packages/backend/src/apps/reddit/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/reddit/index.ts b/packages/backend/src/apps/reddit/index.js similarity index 62% rename from packages/backend/src/apps/reddit/index.ts rename to packages/backend/src/apps/reddit/index.js index f2e43446..50f15307 100644 --- a/packages/backend/src/apps/reddit/index.ts +++ b/packages/backend/src/apps/reddit/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Reddit', diff --git a/packages/backend/src/apps/reddit/triggers/index.js b/packages/backend/src/apps/reddit/triggers/index.js new file mode 100644 index 00000000..c8a159db --- /dev/null +++ b/packages/backend/src/apps/reddit/triggers/index.js @@ -0,0 +1,3 @@ +import newPostsMatchingSearch from './new-posts-matching-search/index.js'; + +export default [newPostsMatchingSearch]; diff --git a/packages/backend/src/apps/reddit/triggers/index.ts b/packages/backend/src/apps/reddit/triggers/index.ts deleted file mode 100644 index b8846874..00000000 --- a/packages/backend/src/apps/reddit/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import newPostsMatchingSearch from './new-posts-matching-search'; - -export default [newPostsMatchingSearch]; diff --git a/packages/backend/src/apps/reddit/triggers/new-posts-matching-search/index.ts b/packages/backend/src/apps/reddit/triggers/new-posts-matching-search/index.js similarity index 88% rename from packages/backend/src/apps/reddit/triggers/new-posts-matching-search/index.ts rename to packages/backend/src/apps/reddit/triggers/new-posts-matching-search/index.js index f22e3a57..6c586949 100644 --- a/packages/backend/src/apps/reddit/triggers/new-posts-matching-search/index.ts +++ b/packages/backend/src/apps/reddit/triggers/new-posts-matching-search/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New posts matching search', @@ -9,7 +9,7 @@ export default defineTrigger({ { label: 'Search Query', key: 'searchQuery', - type: 'string' as const, + type: 'string', required: true, description: 'The term or expression to look for, restricted to 512 characters. If your query contains periods (e.g., automatisch.io), ensure it is enclosed in quotes ("automatisch.io").', @@ -24,7 +24,7 @@ export default defineTrigger({ type: 'link', sort: 'new', limit: 100, - after: undefined as unknown as string, + after: undefined, }; do { diff --git a/packages/backend/src/apps/removebg/actions/index.js b/packages/backend/src/apps/removebg/actions/index.js new file mode 100644 index 00000000..f99cc566 --- /dev/null +++ b/packages/backend/src/apps/removebg/actions/index.js @@ -0,0 +1,3 @@ +import removeImageBackground from './remove-image-background/index.js'; + +export default [removeImageBackground]; diff --git a/packages/backend/src/apps/removebg/actions/index.ts b/packages/backend/src/apps/removebg/actions/index.ts deleted file mode 100644 index ce680432..00000000 --- a/packages/backend/src/apps/removebg/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import removeImageBackground from './remove-image-background'; - -export default [removeImageBackground]; \ No newline at end of file diff --git a/packages/backend/src/apps/removebg/actions/remove-image-background/index.ts b/packages/backend/src/apps/removebg/actions/remove-image-background/index.js similarity index 60% rename from packages/backend/src/apps/removebg/actions/remove-image-background/index.ts rename to packages/backend/src/apps/removebg/actions/remove-image-background/index.js index 2c66c891..c0808223 100644 --- a/packages/backend/src/apps/removebg/actions/remove-image-background/index.ts +++ b/packages/backend/src/apps/removebg/actions/remove-image-background/index.js @@ -1,49 +1,50 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Remove image background', key: 'removeImageBackground', - description: - 'Removes the background of an image.', + description: 'Removes the background of an image.', arguments: [ { label: 'Image file', key: 'imageFileB64', - type: 'string' as const, + type: 'string', required: true, variables: true, - description: 'Provide a JPG or PNG file in Base64 format, up to 12 MB (see remove.bg/supported-images)', + description: + 'Provide a JPG or PNG file in Base64 format, up to 12 MB (see remove.bg/supported-images)', }, { label: 'Size', key: 'size', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: 'auto', options: [ { label: 'Auto', value: 'auto' }, { label: 'Preview (up to 0.25 megapixels)', value: 'preview' }, { label: 'Full (up to 10 megapixels)', value: 'full' }, - ] + ], }, { label: 'Background color', key: 'bgColor', - type: 'string' as const, - description: 'Adds a solid color background. Can be a hex color code (e.g. 81d4fa, fff) or a color name (e.g. green)', + type: 'string', + description: + 'Adds a solid color background. Can be a hex color code (e.g. 81d4fa, fff) or a color name (e.g. green)', required: false, }, { label: 'Background image URL', key: 'bgImageUrl', - type: 'string' as const, + type: 'string', description: 'Adds a background image from a URL.', required: false, }, { label: 'Output image format', key: 'outputFormat', - type: 'dropdown' as const, + type: 'dropdown', description: 'Note: Use PNG to preserve transparency', required: true, value: 'auto', @@ -51,32 +52,32 @@ export default defineAction({ { label: 'Auto', value: 'auto' }, { label: 'PNG', value: 'png' }, { label: 'JPG', value: 'jpg' }, - { label: 'ZIP', value: 'zip' } - ] - } + { label: 'ZIP', value: 'zip' }, + ], + }, ], async run($) { - const imageFileB64 = $.step.parameters.imageFileB64 as string; - const size = $.step.parameters.size as string; - const bgColor = $.step.parameters.bgColor as string; - const bgImageUrl = $.step.parameters.bgImageUrl as string; - const outputFormat = $.step.parameters.outputFormat as string; + const imageFileB64 = $.step.parameters.imageFileB64; + const size = $.step.parameters.size; + const bgColor = $.step.parameters.bgColor; + const bgImageUrl = $.step.parameters.bgImageUrl; + const outputFormat = $.step.parameters.outputFormat; const body = JSON.stringify({ image_file_b64: imageFileB64, size: size, bg_color: bgColor, bg_image_url: bgImageUrl, - format: outputFormat + format: outputFormat, }); const response = await $.http.post('/removebg', body, { headers: { 'Content-Type': 'application/json', - 'Accept': 'application/json', + Accept: 'application/json', }, }); $.setActionItem({ raw: response.data }); - } + }, }); diff --git a/packages/backend/src/apps/removebg/auth/index.ts b/packages/backend/src/apps/removebg/auth/index.js similarity index 77% rename from packages/backend/src/apps/removebg/auth/index.ts rename to packages/backend/src/apps/removebg/auth/index.js index 91afb0e5..f007aaa6 100644 --- a/packages/backend/src/apps/removebg/auth/index.ts +++ b/packages/backend/src/apps/removebg/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/removebg/auth/is-still-verified.js b/packages/backend/src/apps/removebg/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/removebg/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/removebg/auth/is-still-verified.ts b/packages/backend/src/apps/removebg/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/removebg/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/removebg/auth/verify-credentials.ts b/packages/backend/src/apps/removebg/auth/verify-credentials.js similarity index 60% rename from packages/backend/src/apps/removebg/auth/verify-credentials.ts rename to packages/backend/src/apps/removebg/auth/verify-credentials.js index 7b9451d7..98441bb8 100644 --- a/packages/backend/src/apps/removebg/auth/verify-credentials.ts +++ b/packages/backend/src/apps/removebg/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { await $.http.get('/account'); await $.auth.set({ diff --git a/packages/backend/src/apps/removebg/common/add-auth-header.js b/packages/backend/src/apps/removebg/common/add-auth-header.js new file mode 100644 index 00000000..c5018c36 --- /dev/null +++ b/packages/backend/src/apps/removebg/common/add-auth-header.js @@ -0,0 +1,9 @@ +const addAuthHeader = ($, requestConfig) => { + if ($.auth.data?.apiKey) { + requestConfig.headers['X-API-Key'] = `${$.auth.data.apiKey}`; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/removebg/common/add-auth-header.ts b/packages/backend/src/apps/removebg/common/add-auth-header.ts deleted file mode 100644 index 0b59c5c5..00000000 --- a/packages/backend/src/apps/removebg/common/add-auth-header.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data?.apiKey) { - requestConfig.headers['X-API-Key'] = `${$.auth.data.apiKey}`; - } - - return requestConfig; -}; - -export default addAuthHeader; \ No newline at end of file diff --git a/packages/backend/src/apps/removebg/index.d.ts b/packages/backend/src/apps/removebg/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/removebg/index.ts b/packages/backend/src/apps/removebg/index.js similarity index 67% rename from packages/backend/src/apps/removebg/index.ts rename to packages/backend/src/apps/removebg/index.js index 4ac8f5e7..60dde18d 100644 --- a/packages/backend/src/apps/removebg/index.ts +++ b/packages/backend/src/apps/removebg/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Remove.bg', diff --git a/packages/backend/src/apps/rss/index.d.ts b/packages/backend/src/apps/rss/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/rss/index.ts b/packages/backend/src/apps/rss/index.js similarity index 74% rename from packages/backend/src/apps/rss/index.ts rename to packages/backend/src/apps/rss/index.js index 0f13d0ee..c773dc30 100644 --- a/packages/backend/src/apps/rss/index.ts +++ b/packages/backend/src/apps/rss/index.js @@ -1,5 +1,5 @@ -import defineApp from '../../helpers/define-app'; -import triggers from './triggers'; +import defineApp from '../../helpers/define-app.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'RSS', diff --git a/packages/backend/src/apps/rss/triggers/index.js b/packages/backend/src/apps/rss/triggers/index.js new file mode 100644 index 00000000..229deea4 --- /dev/null +++ b/packages/backend/src/apps/rss/triggers/index.js @@ -0,0 +1,3 @@ +import newItemsInFeed from './new-items-in-feed/index.js'; + +export default [newItemsInFeed]; diff --git a/packages/backend/src/apps/rss/triggers/index.ts b/packages/backend/src/apps/rss/triggers/index.ts deleted file mode 100644 index 6d882c22..00000000 --- a/packages/backend/src/apps/rss/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import newItemsInFeed from './new-items-in-feed'; - -export default [newItemsInFeed]; diff --git a/packages/backend/src/apps/rss/triggers/new-items-in-feed/index.ts b/packages/backend/src/apps/rss/triggers/new-items-in-feed/index.js similarity index 73% rename from packages/backend/src/apps/rss/triggers/new-items-in-feed/index.ts rename to packages/backend/src/apps/rss/triggers/new-items-in-feed/index.js index 7682cf8e..f4a6baa1 100644 --- a/packages/backend/src/apps/rss/triggers/new-items-in-feed/index.ts +++ b/packages/backend/src/apps/rss/triggers/new-items-in-feed/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import newItemsInFeed from './new-items-in-feed'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import newItemsInFeed from './new-items-in-feed.js'; export default defineTrigger({ name: 'New items in feed', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Feed URL', key: 'feedUrl', - type: 'string' as const, + type: 'string', required: true, description: 'Paste your publicly accessible RSS URL here.', variables: false, diff --git a/packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.ts b/packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.js similarity index 66% rename from packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.ts rename to packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.js index 7014f7c9..3ce458d2 100644 --- a/packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.ts +++ b/packages/backend/src/apps/rss/triggers/new-items-in-feed/new-items-in-feed.js @@ -1,27 +1,26 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; import { XMLParser } from 'fast-xml-parser'; import bcrypt from 'bcrypt'; -const getInternalId = async (item: IJSONObject): Promise => { +const getInternalId = async (item) => { if (item.guid) { return typeof item.guid === 'object' - ? (item.guid as IJSONObject)['#text'].toString() + ? item.guid['#text'].toString() : item.guid.toString(); } else if (item.id) { return typeof item.id === 'object' - ? (item.id as IJSONObject)['#text'].toString() + ? item.id['#text'].toString() : item.id.toString(); } return await hashItem(JSON.stringify(item)); }; -const hashItem = async (value: string) => { +const hashItem = async (value) => { return await bcrypt.hash(value, 1); }; -const newItemsInFeed = async ($: IGlobalVariable) => { - const { data } = await $.http.get($.step.parameters.feedUrl as string); +const newItemsInFeed = async ($) => { + const { data } = await $.http.get($.step.parameters.feedUrl); const parser = new XMLParser({ ignoreAttributes: false, }); diff --git a/packages/backend/src/apps/salesforce/actions/create-attachment/index.ts b/packages/backend/src/apps/salesforce/actions/create-attachment/index.js similarity index 88% rename from packages/backend/src/apps/salesforce/actions/create-attachment/index.ts rename to packages/backend/src/apps/salesforce/actions/create-attachment/index.js index 8c266e8e..8a79704c 100644 --- a/packages/backend/src/apps/salesforce/actions/create-attachment/index.ts +++ b/packages/backend/src/apps/salesforce/actions/create-attachment/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create attachment', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Parent ID', key: 'parentId', - type: 'string' as const, + type: 'string', required: true, variables: true, description: @@ -18,7 +18,7 @@ export default defineAction({ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: true, variables: true, description: 'Name of the attached file. Maximum size is 255 characters.', @@ -26,7 +26,7 @@ export default defineAction({ { label: 'Body', key: 'body', - type: 'string' as const, + type: 'string', required: true, variables: true, description: 'File data. (Max size is 25MB)', diff --git a/packages/backend/src/apps/salesforce/actions/execute-query/index.ts b/packages/backend/src/apps/salesforce/actions/execute-query/index.js similarity index 79% rename from packages/backend/src/apps/salesforce/actions/execute-query/index.ts rename to packages/backend/src/apps/salesforce/actions/execute-query/index.js index 8d0a6780..98842321 100644 --- a/packages/backend/src/apps/salesforce/actions/execute-query/index.ts +++ b/packages/backend/src/apps/salesforce/actions/execute-query/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Execute query', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Query', key: 'query', - type: 'string' as const, + type: 'string', required: true, description: 'Salesforce query string. For example: SELECT Id, Name FROM Account', @@ -17,7 +17,7 @@ export default defineAction({ ], async run($) { - const query = $.step.parameters.query as string; + const query = $.step.parameters.query; const options = { params: { diff --git a/packages/backend/src/apps/salesforce/actions/find-record/index.ts b/packages/backend/src/apps/salesforce/actions/find-record/index.js similarity index 90% rename from packages/backend/src/apps/salesforce/actions/find-record/index.ts rename to packages/backend/src/apps/salesforce/actions/find-record/index.js index a1105352..e696e626 100644 --- a/packages/backend/src/apps/salesforce/actions/find-record/index.ts +++ b/packages/backend/src/apps/salesforce/actions/find-record/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Find record', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Object', key: 'object', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, description: 'Pick which type of object you want to search for.', @@ -26,7 +26,7 @@ export default defineAction({ { label: 'Field', key: 'field', - type: 'dropdown' as const, + type: 'dropdown', description: 'Pick which field to search by', required: true, variables: true, @@ -49,7 +49,7 @@ export default defineAction({ { label: 'Search value', key: 'searchValue', - type: 'string' as const, + type: 'string', required: true, variables: true, }, diff --git a/packages/backend/src/apps/salesforce/actions/index.js b/packages/backend/src/apps/salesforce/actions/index.js new file mode 100644 index 00000000..b4de1984 --- /dev/null +++ b/packages/backend/src/apps/salesforce/actions/index.js @@ -0,0 +1,5 @@ +import createAttachment from './create-attachment/index.js'; +import executeQuery from './execute-query/index.js'; +import findRecord from './find-record/index.js'; + +export default [findRecord, createAttachment, executeQuery]; diff --git a/packages/backend/src/apps/salesforce/actions/index.ts b/packages/backend/src/apps/salesforce/actions/index.ts deleted file mode 100644 index 58ec0b70..00000000 --- a/packages/backend/src/apps/salesforce/actions/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import createAttachment from './create-attachment'; -import executeQuery from './execute-query'; -import findRecord from './find-record'; - -export default [findRecord, createAttachment, executeQuery]; diff --git a/packages/backend/src/apps/salesforce/auth/generate-auth-url.ts b/packages/backend/src/apps/salesforce/auth/generate-auth-url.js similarity index 58% rename from packages/backend/src/apps/salesforce/auth/generate-auth-url.ts rename to packages/backend/src/apps/salesforce/auth/generate-auth-url.js index a798dbef..cb21c14e 100644 --- a/packages/backend/src/apps/salesforce/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/salesforce/auth/generate-auth-url.js @@ -1,13 +1,12 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import qs from 'qs'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); const redirectUri = oauthRedirectUrlField.value; const searchParams = qs.stringify({ - client_id: $.auth.data.consumerKey as string, + client_id: $.auth.data.consumerKey, redirect_uri: redirectUri, response_type: 'code', }); diff --git a/packages/backend/src/apps/salesforce/auth/index.ts b/packages/backend/src/apps/salesforce/auth/index.js similarity index 81% rename from packages/backend/src/apps/salesforce/auth/index.ts rename to packages/backend/src/apps/salesforce/auth/index.js index c9d6f7a4..06d344d1 100644 --- a/packages/backend/src/apps/salesforce/auth/index.ts +++ b/packages/backend/src/apps/salesforce/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; -import refreshToken from './refresh-token'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; +import refreshToken from './refresh-token.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/salesforce/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'oauth2Url', label: 'Salesforce Environment', - type: 'dropdown' as const, + type: 'dropdown', required: true, readOnly: false, value: 'https://login.salesforce.com/services/oauth2', @@ -41,7 +41,7 @@ export default { { key: 'consumerKey', label: 'Consumer Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -52,7 +52,7 @@ export default { { key: 'consumerSecret', label: 'Consumer Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/salesforce/auth/is-still-verified.js b/packages/backend/src/apps/salesforce/auth/is-still-verified.js new file mode 100644 index 00000000..f59ee3b4 --- /dev/null +++ b/packages/backend/src/apps/salesforce/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/salesforce/auth/is-still-verified.ts b/packages/backend/src/apps/salesforce/auth/is-still-verified.ts deleted file mode 100644 index d36919f2..00000000 --- a/packages/backend/src/apps/salesforce/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/salesforce/auth/refresh-token.ts b/packages/backend/src/apps/salesforce/auth/refresh-token.js similarity index 61% rename from packages/backend/src/apps/salesforce/auth/refresh-token.ts rename to packages/backend/src/apps/salesforce/auth/refresh-token.js index 2ae82a10..07ae487a 100644 --- a/packages/backend/src/apps/salesforce/auth/refresh-token.ts +++ b/packages/backend/src/apps/salesforce/auth/refresh-token.js @@ -1,12 +1,11 @@ -import { IGlobalVariable } from '@automatisch/types'; import qs from 'querystring'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { const searchParams = qs.stringify({ grant_type: 'refresh_token', - client_id: $.auth.data.consumerKey as string, - client_secret: $.auth.data.consumerSecret as string, - refresh_token: $.auth.data.refreshToken as string, + client_id: $.auth.data.consumerKey, + client_secret: $.auth.data.consumerSecret, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/salesforce/auth/verify-credentials.ts b/packages/backend/src/apps/salesforce/auth/verify-credentials.js similarity index 76% rename from packages/backend/src/apps/salesforce/auth/verify-credentials.ts rename to packages/backend/src/apps/salesforce/auth/verify-credentials.js index 2eabad46..ce65ecad 100644 --- a/packages/backend/src/apps/salesforce/auth/verify-credentials.ts +++ b/packages/backend/src/apps/salesforce/auth/verify-credentials.js @@ -1,8 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; import qs from 'qs'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( (field) => field.key == 'oAuthRedirectUrl' ); @@ -10,8 +9,8 @@ const verifyCredentials = async ($: IGlobalVariable) => { const searchParams = qs.stringify({ code: $.auth.data.code, grant_type: 'authorization_code', - client_id: $.auth.data.consumerKey as string, - client_secret: $.auth.data.consumerSecret as string, + client_id: $.auth.data.consumerKey, + client_secret: $.auth.data.consumerSecret, redirect_uri: redirectUri, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/salesforce/common/add-auth-header.ts b/packages/backend/src/apps/salesforce/common/add-auth-header.js similarity index 60% rename from packages/backend/src/apps/salesforce/common/add-auth-header.ts rename to packages/backend/src/apps/salesforce/common/add-auth-header.js index 3a9848da..453863d0 100644 --- a/packages/backend/src/apps/salesforce/common/add-auth-header.ts +++ b/packages/backend/src/apps/salesforce/common/add-auth-header.js @@ -1,10 +1,8 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const { instanceUrl, tokenType, accessToken } = $.auth.data; if (instanceUrl) { - requestConfig.baseURL = instanceUrl as string; + requestConfig.baseURL = instanceUrl; } if (tokenType && accessToken) { diff --git a/packages/backend/src/apps/salesforce/common/get-current-user.ts b/packages/backend/src/apps/salesforce/common/get-current-user.js similarity index 54% rename from packages/backend/src/apps/salesforce/common/get-current-user.ts rename to packages/backend/src/apps/salesforce/common/get-current-user.js index cc82e4a2..02d57b54 100644 --- a/packages/backend/src/apps/salesforce/common/get-current-user.ts +++ b/packages/backend/src/apps/salesforce/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get('/services/data/v55.0/chatter/users/me'); const currentUser = response.data; diff --git a/packages/backend/src/apps/salesforce/dynamic-data/index.js b/packages/backend/src/apps/salesforce/dynamic-data/index.js new file mode 100644 index 00000000..a5e46e45 --- /dev/null +++ b/packages/backend/src/apps/salesforce/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listObjects from './list-objects/index.js'; +import listFields from './list-fields/index.js'; + +export default [listObjects, listFields]; diff --git a/packages/backend/src/apps/salesforce/dynamic-data/index.ts b/packages/backend/src/apps/salesforce/dynamic-data/index.ts deleted file mode 100644 index b477b472..00000000 --- a/packages/backend/src/apps/salesforce/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listObjects from './list-objects'; -import listFields from './list-fields'; - -export default [listObjects, listFields]; diff --git a/packages/backend/src/apps/salesforce/dynamic-data/list-fields/index.ts b/packages/backend/src/apps/salesforce/dynamic-data/list-fields/index.js similarity index 52% rename from packages/backend/src/apps/salesforce/dynamic-data/list-fields/index.ts rename to packages/backend/src/apps/salesforce/dynamic-data/list-fields/index.js index 00a61889..d94e9726 100644 --- a/packages/backend/src/apps/salesforce/dynamic-data/list-fields/index.ts +++ b/packages/backend/src/apps/salesforce/dynamic-data/list-fields/index.js @@ -1,26 +1,16 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type TResponse = { - fields: TField[]; -}; - -type TField = { - name: string; - label: string; -}; - export default { name: 'List fields', key: 'listFields', - async run($: IGlobalVariable) { + async run($) { const { object } = $.step.parameters; if (!object) return { data: [] }; - const response = await $.http.get( - `/services/data/v56.0/sobjects/${object}/describe` - ); + const response = + (await $.http.get) < + TResponse > + `/services/data/v56.0/sobjects/${object}/describe`; const fields = response.data.fields.map((field) => { return { diff --git a/packages/backend/src/apps/salesforce/dynamic-data/list-objects/index.js b/packages/backend/src/apps/salesforce/dynamic-data/list-objects/index.js new file mode 100644 index 00000000..dfed9a29 --- /dev/null +++ b/packages/backend/src/apps/salesforce/dynamic-data/list-objects/index.js @@ -0,0 +1,18 @@ +export default { + name: 'List objects', + key: 'listObjects', + + async run($) { + const response = + (await $.http.get) < TResponse > '/services/data/v56.0/sobjects'; + + const objects = response.data.sobjects.map((object) => { + return { + value: object.name, + name: object.label, + }; + }); + + return { data: objects }; + }, +}; diff --git a/packages/backend/src/apps/salesforce/dynamic-data/list-objects/index.ts b/packages/backend/src/apps/salesforce/dynamic-data/list-objects/index.ts deleted file mode 100644 index e02d9839..00000000 --- a/packages/backend/src/apps/salesforce/dynamic-data/list-objects/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type TResponse = { - sobjects: TObject[]; -}; - -type TObject = { - name: string; - label: string; -}; - -export default { - name: 'List objects', - key: 'listObjects', - - async run($: IGlobalVariable) { - const response = await $.http.get( - '/services/data/v56.0/sobjects' - ); - - const objects = response.data.sobjects.map((object) => { - return { - value: object.name, - name: object.label, - }; - }); - - return { data: objects }; - }, -}; diff --git a/packages/backend/src/apps/salesforce/index.d.ts b/packages/backend/src/apps/salesforce/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/salesforce/index.ts b/packages/backend/src/apps/salesforce/index.js similarity index 58% rename from packages/backend/src/apps/salesforce/index.ts rename to packages/backend/src/apps/salesforce/index.js index a6773046..f2ee434d 100644 --- a/packages/backend/src/apps/salesforce/index.ts +++ b/packages/backend/src/apps/salesforce/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Salesforce', diff --git a/packages/backend/src/apps/salesforce/triggers/index.js b/packages/backend/src/apps/salesforce/triggers/index.js new file mode 100644 index 00000000..66fb62c9 --- /dev/null +++ b/packages/backend/src/apps/salesforce/triggers/index.js @@ -0,0 +1,3 @@ +import updatedFieldInRecords from './updated-field-in-records/index.js'; + +export default [updatedFieldInRecords]; diff --git a/packages/backend/src/apps/salesforce/triggers/index.ts b/packages/backend/src/apps/salesforce/triggers/index.ts deleted file mode 100644 index 1cfa329f..00000000 --- a/packages/backend/src/apps/salesforce/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import updatedFieldInRecords from './updated-field-in-records'; - -export default [updatedFieldInRecords]; diff --git a/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/index.ts b/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/index.js similarity index 84% rename from packages/backend/src/apps/salesforce/triggers/updated-field-in-records/index.ts rename to packages/backend/src/apps/salesforce/triggers/updated-field-in-records/index.js index 112839ef..9f948a7b 100644 --- a/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/index.ts +++ b/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import updatedFieldInRecords from './updated-field-in-records'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import updatedFieldInRecords from './updated-field-in-records.js'; export default defineTrigger({ name: 'Updated field in records', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Object', key: 'object', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: false, source: { @@ -27,7 +27,7 @@ export default defineTrigger({ { label: 'Field', key: 'field', - type: 'dropdown' as const, + type: 'dropdown', description: 'Track updates by this field', required: true, variables: false, diff --git a/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/updated-field-in-records.ts b/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/updated-field-in-records.js similarity index 70% rename from packages/backend/src/apps/salesforce/triggers/updated-field-in-records/updated-field-in-records.ts rename to packages/backend/src/apps/salesforce/triggers/updated-field-in-records/updated-field-in-records.js index 6d2480df..b451d00d 100644 --- a/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/updated-field-in-records.ts +++ b/packages/backend/src/apps/salesforce/triggers/updated-field-in-records/updated-field-in-records.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -function getQuery(object: string, limit: number, offset: number) { +function getQuery(object, limit, offset) { return ` SELECT FIELDS(ALL) @@ -12,10 +10,10 @@ function getQuery(object: string, limit: number, offset: number) { `; } -const updatedFieldInRecord = async ($: IGlobalVariable): Promise => { +const updatedFieldInRecord = async ($) => { const limit = 200; - const field = $.step.parameters.field as string; - const object = $.step.parameters.object as string; + const field = $.step.parameters.field; + const object = $.step.parameters.object; let response; let offset = 0; diff --git a/packages/backend/src/apps/scheduler/common/cron-times.js b/packages/backend/src/apps/scheduler/common/cron-times.js new file mode 100644 index 00000000..8682a65c --- /dev/null +++ b/packages/backend/src/apps/scheduler/common/cron-times.js @@ -0,0 +1,10 @@ +const cronTimes = { + everyHour: '0 * * * *', + everyHourExcludingWeekends: '0 * * * 1-5', + everyDayAt: (hour) => `0 ${hour} * * *`, + everyDayExcludingWeekendsAt: (hour) => `0 ${hour} * * 1-5`, + everyWeekOnAndAt: (weekday, hour) => `0 ${hour} * * ${weekday}`, + everyMonthOnAndAt: (day, hour) => `0 ${hour} ${day} * *`, +}; + +export default cronTimes; diff --git a/packages/backend/src/apps/scheduler/common/cron-times.ts b/packages/backend/src/apps/scheduler/common/cron-times.ts deleted file mode 100644 index 51483b25..00000000 --- a/packages/backend/src/apps/scheduler/common/cron-times.ts +++ /dev/null @@ -1,11 +0,0 @@ -const cronTimes = { - everyHour: '0 * * * *', - everyHourExcludingWeekends: '0 * * * 1-5', - everyDayAt: (hour: number) => `0 ${hour} * * *`, - everyDayExcludingWeekendsAt: (hour: number) => `0 ${hour} * * 1-5`, - everyWeekOnAndAt: (weekday: number, hour: number) => - `0 ${hour} * * ${weekday}`, - everyMonthOnAndAt: (day: number, hour: number) => `0 ${hour} ${day} * *`, -}; - -export default cronTimes; diff --git a/packages/backend/src/apps/scheduler/common/get-date-time-object.ts b/packages/backend/src/apps/scheduler/common/get-date-time-object.js similarity index 83% rename from packages/backend/src/apps/scheduler/common/get-date-time-object.ts rename to packages/backend/src/apps/scheduler/common/get-date-time-object.js index f4bae73e..f0d46358 100644 --- a/packages/backend/src/apps/scheduler/common/get-date-time-object.ts +++ b/packages/backend/src/apps/scheduler/common/get-date-time-object.js @@ -1,7 +1,6 @@ import { DateTime } from 'luxon'; -import { IJSONObject } from '@automatisch/types'; -export default function getDateTimeObjectRepresentation(dateTime: DateTime) { +export default function getDateTimeObjectRepresentation(dateTime) { const defaults = dateTime.toObject(); return { @@ -11,5 +10,5 @@ export default function getDateTimeObjectRepresentation(dateTime: DateTime) { pretty_time: dateTime.toLocaleString(DateTime.TIME_WITH_SECONDS), pretty_day_of_week: dateTime.toFormat('cccc'), day_of_week: dateTime.weekday, - } as IJSONObject; + }; } diff --git a/packages/backend/src/apps/scheduler/common/get-next-cron-date-time.ts b/packages/backend/src/apps/scheduler/common/get-next-cron-date-time.js similarity index 82% rename from packages/backend/src/apps/scheduler/common/get-next-cron-date-time.ts rename to packages/backend/src/apps/scheduler/common/get-next-cron-date-time.js index 8ee435bf..0c0a77ab 100644 --- a/packages/backend/src/apps/scheduler/common/get-next-cron-date-time.ts +++ b/packages/backend/src/apps/scheduler/common/get-next-cron-date-time.js @@ -1,7 +1,7 @@ import { DateTime } from 'luxon'; import cronParser from 'cron-parser'; -export default function getNextCronDateTime(cronString: string) { +export default function getNextCronDateTime(cronString) { const cronDate = cronParser.parseExpression(cronString); const matchingNextCronDateTime = cronDate.next(); const matchingNextDateTime = DateTime.fromJSDate( diff --git a/packages/backend/src/apps/scheduler/index.d.ts b/packages/backend/src/apps/scheduler/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/scheduler/index.ts b/packages/backend/src/apps/scheduler/index.js similarity index 78% rename from packages/backend/src/apps/scheduler/index.ts rename to packages/backend/src/apps/scheduler/index.js index 9f81f8fd..73727486 100644 --- a/packages/backend/src/apps/scheduler/index.ts +++ b/packages/backend/src/apps/scheduler/index.js @@ -1,5 +1,5 @@ -import defineApp from '../../helpers/define-app'; -import triggers from './triggers'; +import defineApp from '../../helpers/define-app.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Scheduler', diff --git a/packages/backend/src/apps/scheduler/triggers/every-day/index.ts b/packages/backend/src/apps/scheduler/triggers/every-day/index.js similarity index 86% rename from packages/backend/src/apps/scheduler/triggers/every-day/index.ts rename to packages/backend/src/apps/scheduler/triggers/every-day/index.js index 5a6fc3de..7e151645 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-day/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-day/index.js @@ -1,9 +1,9 @@ import { DateTime } from 'luxon'; -import { IGlobalVariable } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import cronTimes from '../../common/cron-times'; -import getNextCronDateTime from '../../common/get-next-cron-date-time'; -import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; + +import defineTrigger from '../../../../helpers/define-trigger.js'; +import cronTimes from '../../common/cron-times.js'; +import getNextCronDateTime from '../../common/get-next-cron-date-time.js'; +import getDateTimeObjectRepresentation from '../../common/get-date-time-object.js'; export default defineTrigger({ name: 'Every day', @@ -13,7 +13,7 @@ export default defineTrigger({ { label: 'Trigger on weekends?', key: 'triggersOnWeekend', - type: 'dropdown' as const, + type: 'dropdown', description: 'Should this flow trigger on Saturday and Sunday?', required: true, value: true, @@ -32,7 +32,7 @@ export default defineTrigger({ { label: 'Time of day', key: 'hour', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: null, variables: false, @@ -137,12 +137,12 @@ export default defineTrigger({ }, ], - getInterval(parameters: IGlobalVariable['step']['parameters']) { - if (parameters.triggersOnWeekend as boolean) { - return cronTimes.everyDayAt(parameters.hour as number); + getInterval(parameters) { + if (parameters.triggersOnWeekend) { + return cronTimes.everyDayAt(parameters.hour); } - return cronTimes.everyDayExcludingWeekendsAt(parameters.hour as number); + return cronTimes.everyDayExcludingWeekendsAt(parameters.hour); }, async run($) { diff --git a/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts b/packages/backend/src/apps/scheduler/triggers/every-hour/index.js similarity index 81% rename from packages/backend/src/apps/scheduler/triggers/every-hour/index.ts rename to packages/backend/src/apps/scheduler/triggers/every-hour/index.js index bb05a0b1..a3dd9178 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-hour/index.js @@ -1,9 +1,9 @@ import { DateTime } from 'luxon'; -import { IGlobalVariable } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import cronTimes from '../../common/cron-times'; -import getNextCronDateTime from '../../common/get-next-cron-date-time'; -import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; + +import defineTrigger from '../../../../helpers/define-trigger.js'; +import cronTimes from '../../common/cron-times.js'; +import getNextCronDateTime from '../../common/get-next-cron-date-time.js'; +import getDateTimeObjectRepresentation from '../../common/get-date-time-object.js'; export default defineTrigger({ name: 'Every hour', @@ -13,7 +13,7 @@ export default defineTrigger({ { label: 'Trigger on weekends?', key: 'triggersOnWeekend', - type: 'dropdown' as const, + type: 'dropdown', description: 'Should this flow trigger on Saturday and Sunday?', required: true, value: true, @@ -31,7 +31,7 @@ export default defineTrigger({ }, ], - getInterval(parameters: IGlobalVariable['step']['parameters']) { + getInterval(parameters) { if (parameters.triggersOnWeekend) { return cronTimes.everyHour; } diff --git a/packages/backend/src/apps/scheduler/triggers/every-month/index.ts b/packages/backend/src/apps/scheduler/triggers/every-month/index.js similarity index 92% rename from packages/backend/src/apps/scheduler/triggers/every-month/index.ts rename to packages/backend/src/apps/scheduler/triggers/every-month/index.js index 5476a8b8..36a78d67 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-month/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-month/index.js @@ -1,9 +1,9 @@ import { DateTime } from 'luxon'; -import { IGlobalVariable } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import cronTimes from '../../common/cron-times'; -import getNextCronDateTime from '../../common/get-next-cron-date-time'; -import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; + +import defineTrigger from '../../../../helpers/define-trigger.js'; +import cronTimes from '../../common/cron-times.js'; +import getNextCronDateTime from '../../common/get-next-cron-date-time.js'; +import getDateTimeObjectRepresentation from '../../common/get-date-time-object.js'; export default defineTrigger({ name: 'Every month', @@ -13,7 +13,7 @@ export default defineTrigger({ { label: 'Day of the month', key: 'day', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: null, variables: false, @@ -147,7 +147,7 @@ export default defineTrigger({ { label: 'Time of day', key: 'hour', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: null, variables: false, @@ -252,10 +252,10 @@ export default defineTrigger({ }, ], - getInterval(parameters: IGlobalVariable['step']['parameters']) { + getInterval(parameters) { const interval = cronTimes.everyMonthOnAndAt( - parameters.day as number, - parameters.hour as number + parameters.day, + parameters.hour ); return interval; diff --git a/packages/backend/src/apps/scheduler/triggers/every-week/index.ts b/packages/backend/src/apps/scheduler/triggers/every-week/index.js similarity index 89% rename from packages/backend/src/apps/scheduler/triggers/every-week/index.ts rename to packages/backend/src/apps/scheduler/triggers/every-week/index.js index 93331440..9ee925ab 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-week/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-week/index.js @@ -1,9 +1,9 @@ import { DateTime } from 'luxon'; -import { IGlobalVariable } from '@automatisch/types'; -import defineTrigger from '../../../../helpers/define-trigger'; -import cronTimes from '../../common/cron-times'; -import getNextCronDateTime from '../../common/get-next-cron-date-time'; -import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; + +import defineTrigger from '../../../../helpers/define-trigger.js'; +import cronTimes from '../../common/cron-times.js'; +import getNextCronDateTime from '../../common/get-next-cron-date-time.js'; +import getDateTimeObjectRepresentation from '../../common/get-date-time-object.js'; export default defineTrigger({ name: 'Every week', @@ -13,7 +13,7 @@ export default defineTrigger({ { label: 'Day of the week', key: 'weekday', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: null, variables: false, @@ -51,7 +51,7 @@ export default defineTrigger({ { label: 'Time of day', key: 'hour', - type: 'dropdown' as const, + type: 'dropdown', required: true, value: null, variables: false, @@ -156,10 +156,10 @@ export default defineTrigger({ }, ], - getInterval(parameters: IGlobalVariable['step']['parameters']) { + getInterval(parameters) { const interval = cronTimes.everyWeekOnAndAt( - parameters.weekday as number, - parameters.hour as number + parameters.weekday, + parameters.hour ); return interval; diff --git a/packages/backend/src/apps/scheduler/triggers/index.js b/packages/backend/src/apps/scheduler/triggers/index.js new file mode 100644 index 00000000..3239a453 --- /dev/null +++ b/packages/backend/src/apps/scheduler/triggers/index.js @@ -0,0 +1,6 @@ +import everyHour from './every-hour/index.js'; +import everyDay from './every-day/index.js'; +import everyWeek from './every-week/index.js'; +import everyMonth from './every-month/index.js'; + +export default [everyHour, everyDay, everyWeek, everyMonth]; diff --git a/packages/backend/src/apps/scheduler/triggers/index.ts b/packages/backend/src/apps/scheduler/triggers/index.ts deleted file mode 100644 index 94064465..00000000 --- a/packages/backend/src/apps/scheduler/triggers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import everyHour from './every-hour'; -import everyDay from './every-day'; -import everyWeek from './every-week'; -import everyMonth from './every-month'; - -export default [everyHour, everyDay, everyWeek, everyMonth]; diff --git a/packages/backend/src/apps/self-hosted-llm/actions/index.js b/packages/backend/src/apps/self-hosted-llm/actions/index.js new file mode 100644 index 00000000..42d0ac87 --- /dev/null +++ b/packages/backend/src/apps/self-hosted-llm/actions/index.js @@ -0,0 +1,4 @@ +import sendPrompt from './send-prompt/index.js'; +import sendChatPrompt from './send-chat-prompt/index.js'; + +export default [sendChatPrompt, sendPrompt]; diff --git a/packages/backend/src/apps/self-hosted-llm/actions/index.ts b/packages/backend/src/apps/self-hosted-llm/actions/index.ts deleted file mode 100644 index f4e1ffcb..00000000 --- a/packages/backend/src/apps/self-hosted-llm/actions/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import sendPrompt from './send-prompt'; -import sendChatPrompt from './send-chat-prompt'; - -export default [sendChatPrompt, sendPrompt]; diff --git a/packages/backend/src/apps/self-hosted-llm/actions/send-chat-prompt/index.ts b/packages/backend/src/apps/self-hosted-llm/actions/send-chat-prompt/index.js similarity index 61% rename from packages/backend/src/apps/self-hosted-llm/actions/send-chat-prompt/index.ts rename to packages/backend/src/apps/self-hosted-llm/actions/send-chat-prompt/index.js index ea239036..2865a69a 100644 --- a/packages/backend/src/apps/self-hosted-llm/actions/send-chat-prompt/index.ts +++ b/packages/backend/src/apps/self-hosted-llm/actions/send-chat-prompt/index.js @@ -1,13 +1,8 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; -type TMessage = { - role: string; - content: string; -} - -const castFloatOrUndefined = (value: string | null) => { +const castFloatOrUndefined = (value) => { return value === '' ? undefined : parseFloat(value); -} +}; export default defineAction({ name: 'Send chat prompt', @@ -17,7 +12,7 @@ export default defineAction({ { label: 'Model', key: 'model', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { @@ -34,7 +29,7 @@ export default defineAction({ { label: 'Messages', key: 'messages', - type: 'dynamic' as const, + type: 'dynamic', required: true, description: 'Add or remove messages as needed', value: [{ role: 'system', body: '' }], @@ -42,7 +37,7 @@ export default defineAction({ { label: 'Role', key: 'role', - type: 'dropdown' as const, + type: 'dropdown', required: true, options: [ { @@ -52,78 +47,84 @@ export default defineAction({ { label: 'User', value: 'user', - } + }, ], }, { label: 'Content', key: 'content', - type: 'string' as const, + type: 'string', required: true, variables: true, - } + }, ], }, { label: 'Temperature', key: 'temperature', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.' + description: + 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.', }, { label: 'Maximum tokens', key: 'maxTokens', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'The maximum number of tokens to generate in the completion.' + description: + 'The maximum number of tokens to generate in the completion.', }, { label: 'Stop Sequence', key: 'stopSequence', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.' + description: + 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.', }, { label: 'Top P', key: 'topP', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.' + description: + 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.', }, { label: 'Frequency Penalty', key: 'frequencyPenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.`, }, { label: 'Presence Penalty', key: 'presencePenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.`, }, ], async run($) { const payload = { - model: $.step.parameters.model as string, - temperature: castFloatOrUndefined($.step.parameters.temperature as string), - max_tokens: castFloatOrUndefined($.step.parameters.maxTokens as string), - stop: ($.step.parameters.stopSequence as string || null), - top_p: castFloatOrUndefined($.step.parameters.topP as string), - frequency_penalty: castFloatOrUndefined($.step.parameters.frequencyPenalty as string), - presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty as string), - messages: ($.step.parameters.messages as TMessage[]).map(message => ({ + model: $.step.parameters.model, + temperature: castFloatOrUndefined($.step.parameters.temperature), + max_tokens: castFloatOrUndefined($.step.parameters.maxTokens), + stop: $.step.parameters.stopSequence || null, + top_p: castFloatOrUndefined($.step.parameters.topP), + frequency_penalty: castFloatOrUndefined( + $.step.parameters.frequencyPenalty + ), + presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty), + messages: $.step.parameters.messages.map((message) => ({ role: message.role, content: message.content, })), diff --git a/packages/backend/src/apps/self-hosted-llm/actions/send-prompt/index.ts b/packages/backend/src/apps/self-hosted-llm/actions/send-prompt/index.js similarity index 57% rename from packages/backend/src/apps/self-hosted-llm/actions/send-prompt/index.ts rename to packages/backend/src/apps/self-hosted-llm/actions/send-prompt/index.js index cff0ae8f..786b81e1 100644 --- a/packages/backend/src/apps/self-hosted-llm/actions/send-prompt/index.ts +++ b/packages/backend/src/apps/self-hosted-llm/actions/send-prompt/index.js @@ -1,8 +1,8 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; -const castFloatOrUndefined = (value: string | null) => { +const castFloatOrUndefined = (value) => { return value === '' ? undefined : parseFloat(value); -} +}; export default defineAction({ name: 'Send prompt', @@ -12,7 +12,7 @@ export default defineAction({ { label: 'Model', key: 'model', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { @@ -29,71 +29,77 @@ export default defineAction({ { label: 'Prompt', key: 'prompt', - type: 'string' as const, + type: 'string', required: true, variables: true, - description: 'The text to analyze.' + description: 'The text to analyze.', }, { label: 'Temperature', key: 'temperature', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.' + description: + 'What sampling temperature to use. Higher values mean the model will take more risk. Try 0.9 for more creative applications, and 0 for ones with a well-defined answer. We generally recommend altering this or Top P but not both.', }, { label: 'Maximum tokens', key: 'maxTokens', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'The maximum number of tokens to generate in the completion.' + description: + 'The maximum number of tokens to generate in the completion.', }, { label: 'Stop Sequence', key: 'stopSequence', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.' + description: + 'Single stop sequence where the API will stop generating further tokens. The returned text will not contain the stop sequence.', }, { label: 'Top P', key: 'topP', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.' + description: + 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with Top P probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.', }, { label: 'Frequency Penalty', key: 'frequencyPenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model's likelihood to repeat the same line verbatim.`, }, { label: 'Presence Penalty', key: 'presencePenalty', - type: 'string' as const, + type: 'string', required: false, variables: true, - description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.` + description: `Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model's likelihood to talk about new topics.`, }, ], async run($) { const payload = { - model: $.step.parameters.model as string, - prompt: $.step.parameters.prompt as string, - temperature: castFloatOrUndefined($.step.parameters.temperature as string), - max_tokens: castFloatOrUndefined($.step.parameters.maxTokens as string), - stop: ($.step.parameters.stopSequence as string || null), - top_p: castFloatOrUndefined($.step.parameters.topP as string), - frequency_penalty: castFloatOrUndefined($.step.parameters.frequencyPenalty as string), - presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty as string), + model: $.step.parameters.model, + prompt: $.step.parameters.prompt, + temperature: castFloatOrUndefined($.step.parameters.temperature), + max_tokens: castFloatOrUndefined($.step.parameters.maxTokens), + stop: $.step.parameters.stopSequence || null, + top_p: castFloatOrUndefined($.step.parameters.topP), + frequency_penalty: castFloatOrUndefined( + $.step.parameters.frequencyPenalty + ), + presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty), }; const { data } = await $.http.post('/v1/completions', payload); diff --git a/packages/backend/src/apps/self-hosted-llm/auth/index.ts b/packages/backend/src/apps/self-hosted-llm/auth/index.js similarity index 80% rename from packages/backend/src/apps/self-hosted-llm/auth/index.ts rename to packages/backend/src/apps/self-hosted-llm/auth/index.js index 29bd90c8..9d480537 100644 --- a/packages/backend/src/apps/self-hosted-llm/auth/index.ts +++ b/packages/backend/src/apps/self-hosted-llm/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'apiUrl', label: 'API URL', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -29,7 +29,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/self-hosted-llm/auth/is-still-verified.js b/packages/backend/src/apps/self-hosted-llm/auth/is-still-verified.js new file mode 100644 index 00000000..0906442f --- /dev/null +++ b/packages/backend/src/apps/self-hosted-llm/auth/is-still-verified.js @@ -0,0 +1,6 @@ +const isStillVerified = async ($) => { + const r = await $.http.get('/v1/models'); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/self-hosted-llm/auth/is-still-verified.ts b/packages/backend/src/apps/self-hosted-llm/auth/is-still-verified.ts deleted file mode 100644 index da69d50c..00000000 --- a/packages/backend/src/apps/self-hosted-llm/auth/is-still-verified.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const isStillVerified = async ($: IGlobalVariable) => { - const r = await $.http.get('/v1/models'); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/self-hosted-llm/auth/verify-credentials.js b/packages/backend/src/apps/self-hosted-llm/auth/verify-credentials.js new file mode 100644 index 00000000..7f43f884 --- /dev/null +++ b/packages/backend/src/apps/self-hosted-llm/auth/verify-credentials.js @@ -0,0 +1,5 @@ +const verifyCredentials = async ($) => { + await $.http.get('/v1/models'); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/self-hosted-llm/auth/verify-credentials.ts b/packages/backend/src/apps/self-hosted-llm/auth/verify-credentials.ts deleted file mode 100644 index e9fb2540..00000000 --- a/packages/backend/src/apps/self-hosted-llm/auth/verify-credentials.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - await $.http.get('/v1/models'); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/openai/common/add-auth-header.ts b/packages/backend/src/apps/self-hosted-llm/common/add-auth-header.js similarity index 58% rename from packages/backend/src/apps/openai/common/add-auth-header.ts rename to packages/backend/src/apps/self-hosted-llm/common/add-auth-header.js index 2b0de0ce..f9f5acba 100644 --- a/packages/backend/src/apps/openai/common/add-auth-header.ts +++ b/packages/backend/src/apps/self-hosted-llm/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.apiKey) { requestConfig.headers.Authorization = `Bearer ${$.auth.data.apiKey}`; } diff --git a/packages/backend/src/apps/self-hosted-llm/common/set-base-url.js b/packages/backend/src/apps/self-hosted-llm/common/set-base-url.js new file mode 100644 index 00000000..4dd124ad --- /dev/null +++ b/packages/backend/src/apps/self-hosted-llm/common/set-base-url.js @@ -0,0 +1,9 @@ +const setBaseUrl = ($, requestConfig) => { + if ($.auth.data.apiUrl) { + requestConfig.baseURL = $.auth.data.apiUrl; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/self-hosted-llm/common/set-base-url.ts b/packages/backend/src/apps/self-hosted-llm/common/set-base-url.ts deleted file mode 100644 index 5dcade86..00000000 --- a/packages/backend/src/apps/self-hosted-llm/common/set-base-url.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data.apiUrl) { - requestConfig.baseURL = $.auth.data.apiUrl as string; - } - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/self-hosted-llm/dynamic-data/index.js b/packages/backend/src/apps/self-hosted-llm/dynamic-data/index.js new file mode 100644 index 00000000..6db48046 --- /dev/null +++ b/packages/backend/src/apps/self-hosted-llm/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listModels from './list-models/index.js'; + +export default [listModels]; diff --git a/packages/backend/src/apps/self-hosted-llm/dynamic-data/index.ts b/packages/backend/src/apps/self-hosted-llm/dynamic-data/index.ts deleted file mode 100644 index 4072dcdd..00000000 --- a/packages/backend/src/apps/self-hosted-llm/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listModels from './list-models'; - -export default [listModels]; diff --git a/packages/backend/src/apps/self-hosted-llm/dynamic-data/list-models/index.ts b/packages/backend/src/apps/self-hosted-llm/dynamic-data/list-models/index.js similarity index 59% rename from packages/backend/src/apps/self-hosted-llm/dynamic-data/list-models/index.ts rename to packages/backend/src/apps/self-hosted-llm/dynamic-data/list-models/index.js index 645b9f1e..a8e81538 100644 --- a/packages/backend/src/apps/self-hosted-llm/dynamic-data/list-models/index.ts +++ b/packages/backend/src/apps/self-hosted-llm/dynamic-data/list-models/index.js @@ -1,13 +1,11 @@ -import { IGlobalVariable } from '@automatisch/types'; - export default { name: 'List models', key: 'listModels', - async run($: IGlobalVariable) { + async run($) { const response = await $.http.get('/v1/models'); - const models = response.data.data.map((model: { id: string }) => { + const models = response.data.data.map((model) => { return { value: model.id, name: model.id, diff --git a/packages/backend/src/apps/self-hosted-llm/index.d.ts b/packages/backend/src/apps/self-hosted-llm/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/self-hosted-llm/index.ts b/packages/backend/src/apps/self-hosted-llm/index.js similarity index 57% rename from packages/backend/src/apps/self-hosted-llm/index.ts rename to packages/backend/src/apps/self-hosted-llm/index.js index 2f2fd5e3..1998fc9f 100644 --- a/packages/backend/src/apps/self-hosted-llm/index.ts +++ b/packages/backend/src/apps/self-hosted-llm/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import setBaseUrl from './common/set-base-url'; -import auth from './auth'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import setBaseUrl from './common/set-base-url.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Self-hosted LLM', diff --git a/packages/backend/src/apps/signalwire/actions/index.js b/packages/backend/src/apps/signalwire/actions/index.js new file mode 100644 index 00000000..18a261f9 --- /dev/null +++ b/packages/backend/src/apps/signalwire/actions/index.js @@ -0,0 +1,3 @@ +import sendSms from './send-sms/index.js'; + +export default [sendSms]; diff --git a/packages/backend/src/apps/signalwire/actions/index.ts b/packages/backend/src/apps/signalwire/actions/index.ts deleted file mode 100644 index d1723dc2..00000000 --- a/packages/backend/src/apps/signalwire/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sendSms from './send-sms'; - -export default [sendSms]; diff --git a/packages/backend/src/apps/signalwire/actions/send-sms/index.ts b/packages/backend/src/apps/signalwire/actions/send-sms/index.js similarity index 84% rename from packages/backend/src/apps/signalwire/actions/send-sms/index.ts rename to packages/backend/src/apps/signalwire/actions/send-sms/index.js index fee65fbf..152ab8d2 100644 --- a/packages/backend/src/apps/signalwire/actions/send-sms/index.ts +++ b/packages/backend/src/apps/signalwire/actions/send-sms/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Send an SMS', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'From Number', key: 'fromNumber', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The number to send the SMS from. Include only country code. Example: 491234567890', @@ -27,7 +27,7 @@ export default defineAction({ { label: 'To Number', key: 'toNumber', - type: 'string' as const, + type: 'string', required: true, description: 'The number to send the SMS to. Include only country code. Example: 491234567890', @@ -36,7 +36,7 @@ export default defineAction({ { label: 'Message', key: 'message', - type: 'string' as const, + type: 'string', required: true, description: 'The content of the message.', variables: true, @@ -48,14 +48,14 @@ export default defineAction({ const Body = $.step.parameters.message; const From = $.step.parameters.fromNumber; - const To = '+' + ($.step.parameters.toNumber as string).trim(); + const To = '+' + $.step.parameters.toNumber.trim(); const response = await $.http.post(requestPath, null, { params: { Body, From, To, - } + }, }); $.setActionItem({ raw: response.data }); diff --git a/packages/backend/src/apps/signalwire/auth/index.ts b/packages/backend/src/apps/signalwire/auth/index.js similarity index 78% rename from packages/backend/src/apps/signalwire/auth/index.ts rename to packages/backend/src/apps/signalwire/auth/index.js index 32f9c922..59a32bee 100644 --- a/packages/backend/src/apps/signalwire/auth/index.ts +++ b/packages/backend/src/apps/signalwire/auth/index.js @@ -1,24 +1,23 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'accountSid', label: 'Project ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, placeholder: null, - description: - 'Log into your SignalWire account and find the Project ID', + description: 'Log into your SignalWire account and find the Project ID', clickToCopy: false, }, { key: 'authToken', label: 'API Token', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -29,7 +28,7 @@ export default { { key: 'spaceRegion', label: 'SignalWire Region', - type: 'dropdown' as const, + type: 'dropdown', required: true, readOnly: false, value: '', @@ -50,7 +49,7 @@ export default { { key: 'spaceName', label: 'Space Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/signalwire/auth/is-still-verified.js b/packages/backend/src/apps/signalwire/auth/is-still-verified.js new file mode 100644 index 00000000..270d415b --- /dev/null +++ b/packages/backend/src/apps/signalwire/auth/is-still-verified.js @@ -0,0 +1,9 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/signalwire/auth/is-still-verified.ts b/packages/backend/src/apps/signalwire/auth/is-still-verified.ts deleted file mode 100644 index 5a2fe2ae..00000000 --- a/packages/backend/src/apps/signalwire/auth/is-still-verified.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/signalwire/auth/verify-credentials.js b/packages/backend/src/apps/signalwire/auth/verify-credentials.js new file mode 100644 index 00000000..4b87b86c --- /dev/null +++ b/packages/backend/src/apps/signalwire/auth/verify-credentials.js @@ -0,0 +1,11 @@ +const verifyCredentials = async ($) => { + const { data } = await $.http.get( + `/api/laml/2010-04-01/Accounts/${$.auth.data.accountSid}` + ); + + await $.auth.set({ + screenName: `${data.friendly_name} (${$.auth.data.accountSid})`, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/signalwire/auth/verify-credentials.ts b/packages/backend/src/apps/signalwire/auth/verify-credentials.ts deleted file mode 100644 index fbbf5ddc..00000000 --- a/packages/backend/src/apps/signalwire/auth/verify-credentials.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - const { data } = await $.http.get(`/api/laml/2010-04-01/Accounts/${$.auth.data.accountSid}`); - - await $.auth.set({ - screenName: `${data.friendly_name} (${$.auth.data.accountSid})`, - }); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/signalwire/common/add-auth-header.ts b/packages/backend/src/apps/signalwire/common/add-auth-header.js similarity index 51% rename from packages/backend/src/apps/signalwire/common/add-auth-header.ts rename to packages/backend/src/apps/signalwire/common/add-auth-header.js index f26c2af2..7059a8c8 100644 --- a/packages/backend/src/apps/signalwire/common/add-auth-header.ts +++ b/packages/backend/src/apps/signalwire/common/add-auth-header.js @@ -1,24 +1,19 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const authData = $.auth.data || {}; requestConfig.headers['Content-Type'] = 'application/x-www-form-urlencoded'; - if ( - authData.accountSid && - authData.authToken - ) { + if (authData.accountSid && authData.authToken) { requestConfig.auth = { - username: authData.accountSid as string, - password: authData.authToken as string, + username: authData.accountSid, + password: authData.authToken, }; } if (authData.spaceName) { const serverUrl = `https://${authData.spaceName}.${authData.spaceRegion}signalwire.com`; - requestConfig.baseURL = serverUrl as string; + requestConfig.baseURL = serverUrl; } return requestConfig; diff --git a/packages/backend/src/apps/signalwire/dynamic-data/index.ts b/packages/backend/src/apps/signalwire/dynamic-data/index.js similarity index 87% rename from packages/backend/src/apps/signalwire/dynamic-data/index.ts rename to packages/backend/src/apps/signalwire/dynamic-data/index.js index d20d4347..758d4abe 100644 --- a/packages/backend/src/apps/signalwire/dynamic-data/index.ts +++ b/packages/backend/src/apps/signalwire/dynamic-data/index.js @@ -1,3 +1,3 @@ -import listIncomingPhoneNumbers from './list-incoming-phone-numbers'; +import listIncomingPhoneNumbers from './list-incoming-phone-numbers/index.js'; export default [listIncomingPhoneNumbers]; diff --git a/packages/backend/src/apps/signalwire/dynamic-data/list-incoming-phone-numbers/index.ts b/packages/backend/src/apps/signalwire/dynamic-data/list-incoming-phone-numbers/index.js similarity index 62% rename from packages/backend/src/apps/signalwire/dynamic-data/list-incoming-phone-numbers/index.ts rename to packages/backend/src/apps/signalwire/dynamic-data/list-incoming-phone-numbers/index.js index 969d2e45..fd41d930 100644 --- a/packages/backend/src/apps/signalwire/dynamic-data/list-incoming-phone-numbers/index.ts +++ b/packages/backend/src/apps/signalwire/dynamic-data/list-incoming-phone-numbers/index.js @@ -1,37 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type TAggregatedResponse = { - data: IJSONObject[]; - error?: IJSONObject; -}; - -type TResponse = { - incoming_phone_numbers: TIncomingPhoneNumber[]; - next_page_uri: string; -}; - -type TIncomingPhoneNumber = { - capabilities: { - sms: boolean; - }; - sid: string; - friendly_name: string; - phone_number: string; -}; - export default { name: 'List incoming phone numbers', key: 'listIncomingPhoneNumbers', - async run($: IGlobalVariable) { + async run($) { let requestPath = `/api/laml/2010-04-01/Accounts/${$.auth.data.accountSid}/IncomingPhoneNumbers`; - const aggregatedResponse: TAggregatedResponse = { + const aggregatedResponse = { data: [], }; do { - const { data } = await $.http.get(requestPath); + const { data } = (await $.http.get) < TResponse > requestPath; const smsCapableIncomingPhoneNumbers = data.incoming_phone_numbers .filter((incomingPhoneNumber) => { @@ -46,8 +25,8 @@ export default { value: phoneNumber, name, }; - }) - aggregatedResponse.data.push(...smsCapableIncomingPhoneNumbers) + }); + aggregatedResponse.data.push(...smsCapableIncomingPhoneNumbers); requestPath = data.next_page_uri; } while (requestPath); diff --git a/packages/backend/src/apps/signalwire/index.d.ts b/packages/backend/src/apps/signalwire/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/signalwire/index.ts b/packages/backend/src/apps/signalwire/index.js similarity index 58% rename from packages/backend/src/apps/signalwire/index.ts rename to packages/backend/src/apps/signalwire/index.js index 658a9a90..13a434cb 100644 --- a/packages/backend/src/apps/signalwire/index.ts +++ b/packages/backend/src/apps/signalwire/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'SignalWire', diff --git a/packages/backend/src/apps/signalwire/triggers/index.js b/packages/backend/src/apps/signalwire/triggers/index.js new file mode 100644 index 00000000..c7219e50 --- /dev/null +++ b/packages/backend/src/apps/signalwire/triggers/index.js @@ -0,0 +1,3 @@ +import receiveSms from './receive-sms/index.js'; + +export default [receiveSms]; diff --git a/packages/backend/src/apps/signalwire/triggers/index.ts b/packages/backend/src/apps/signalwire/triggers/index.ts deleted file mode 100644 index 04e1504d..00000000 --- a/packages/backend/src/apps/signalwire/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import receiveSms from './receive-sms'; - -export default [receiveSms]; diff --git a/packages/backend/src/apps/signalwire/triggers/receive-sms/fetch-messages.ts b/packages/backend/src/apps/signalwire/triggers/receive-sms/fetch-messages.js similarity index 58% rename from packages/backend/src/apps/signalwire/triggers/receive-sms/fetch-messages.ts rename to packages/backend/src/apps/signalwire/triggers/receive-sms/fetch-messages.js index 425c5b20..ab3a6d4e 100644 --- a/packages/backend/src/apps/signalwire/triggers/receive-sms/fetch-messages.ts +++ b/packages/backend/src/apps/signalwire/triggers/receive-sms/fetch-messages.js @@ -1,7 +1,5 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const fetchMessages = async ($: IGlobalVariable) => { - const toNumber = $.step.parameters.toNumber as string; +const fetchMessages = async ($) => { + const toNumber = $.step.parameters.toNumber; let response; let requestPath = `/api/laml/2010-04-01/Accounts/${$.auth.data.accountSid}/Messages?To=${toNumber}`; @@ -9,11 +7,11 @@ const fetchMessages = async ($: IGlobalVariable) => { do { response = await $.http.get(requestPath); - response.data.messages.forEach((message: IJSONObject) => { + response.data.messages.forEach((message) => { const dataItem = { raw: message, meta: { - internalId: message.date_sent as string, + internalId: message.date_sent, }, }; diff --git a/packages/backend/src/apps/signalwire/triggers/receive-sms/index.ts b/packages/backend/src/apps/signalwire/triggers/receive-sms/index.js similarity index 84% rename from packages/backend/src/apps/signalwire/triggers/receive-sms/index.ts rename to packages/backend/src/apps/signalwire/triggers/receive-sms/index.js index 896244fa..d71ab762 100644 --- a/packages/backend/src/apps/signalwire/triggers/receive-sms/index.ts +++ b/packages/backend/src/apps/signalwire/triggers/receive-sms/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import fetchMessages from './fetch-messages'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import fetchMessages from './fetch-messages.js'; export default defineTrigger({ name: 'Receive SMS', diff --git a/packages/backend/src/apps/slack/actions/find-message/find-message.ts b/packages/backend/src/apps/slack/actions/find-message/find-message.js similarity index 63% rename from packages/backend/src/apps/slack/actions/find-message/find-message.ts rename to packages/backend/src/apps/slack/actions/find-message/find-message.js index b910e01b..44de43bc 100644 --- a/packages/backend/src/apps/slack/actions/find-message/find-message.ts +++ b/packages/backend/src/apps/slack/actions/find-message/find-message.js @@ -1,13 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -type FindMessageOptions = { - query: string; - sortBy: string; - sortDirection: string; - count: number; -}; - -const findMessage = async ($: IGlobalVariable, options: FindMessageOptions) => { +const findMessage = async ($, options) => { const params = { query: options.query, sort: options.sortBy, diff --git a/packages/backend/src/apps/slack/actions/find-message/index.ts b/packages/backend/src/apps/slack/actions/find-message/index.js similarity index 81% rename from packages/backend/src/apps/slack/actions/find-message/index.ts rename to packages/backend/src/apps/slack/actions/find-message/index.js index 48007c2d..3a5c06a4 100644 --- a/packages/backend/src/apps/slack/actions/find-message/index.ts +++ b/packages/backend/src/apps/slack/actions/find-message/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import findMessage from './find-message'; +import defineAction from '../../../../helpers/define-action.js'; +import findMessage from './find-message.js'; export default defineAction({ name: 'Find a message', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Search Query', key: 'query', - type: 'string' as const, + type: 'string', required: true, description: 'Search query to use for finding matching messages. See the Slack Search Documentation for more information on constructing a query.', @@ -18,7 +18,7 @@ export default defineAction({ { label: 'Sort by', key: 'sortBy', - type: 'dropdown' as const, + type: 'dropdown', description: 'Sort messages by their match strength or by their date. Default is score.', required: true, @@ -38,7 +38,7 @@ export default defineAction({ { label: 'Sort direction', key: 'sortDirection', - type: 'dropdown' as const, + type: 'dropdown', description: 'Sort matching messages in ascending or descending order. Default is descending.', required: true, @@ -59,9 +59,9 @@ export default defineAction({ async run($) { const parameters = $.step.parameters; - const query = parameters.query as string; - const sortBy = parameters.sortBy as string; - const sortDirection = parameters.sortDirection as string; + const query = parameters.query; + const sortBy = parameters.sortBy; + const sortDirection = parameters.sortDirection; const count = 1; const messages = await findMessage($, { diff --git a/packages/backend/src/apps/slack/actions/find-user-by-email/index.ts b/packages/backend/src/apps/slack/actions/find-user-by-email/index.js similarity index 74% rename from packages/backend/src/apps/slack/actions/find-user-by-email/index.ts rename to packages/backend/src/apps/slack/actions/find-user-by-email/index.js index 85e138bc..10b99cae 100644 --- a/packages/backend/src/apps/slack/actions/find-user-by-email/index.ts +++ b/packages/backend/src/apps/slack/actions/find-user-by-email/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Find user by email', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Email', key: 'email', - type: 'string' as const, + type: 'string', required: true, variables: true, }, @@ -16,11 +16,11 @@ export default defineAction({ async run($) { const params = { - email: $.step.parameters.email as string, + email: $.step.parameters.email, }; const { data } = await $.http.get('/users.lookupByEmail', { - params + params, }); if (data.ok) { diff --git a/packages/backend/src/apps/slack/actions/index.js b/packages/backend/src/apps/slack/actions/index.js new file mode 100644 index 00000000..f10776f6 --- /dev/null +++ b/packages/backend/src/apps/slack/actions/index.js @@ -0,0 +1,11 @@ +import findMessage from './find-message/index.js'; +import findUserByEmail from './find-user-by-email/index.js'; +import sendMessageToChannel from './send-a-message-to-channel/index.js'; +import sendDirectMessage from './send-a-direct-message/index.js'; + +export default [ + findMessage, + findUserByEmail, + sendMessageToChannel, + sendDirectMessage, +]; diff --git a/packages/backend/src/apps/slack/actions/index.ts b/packages/backend/src/apps/slack/actions/index.ts deleted file mode 100644 index a5e3be8f..00000000 --- a/packages/backend/src/apps/slack/actions/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import findMessage from './find-message'; -import findUserByEmail from './find-user-by-email'; -import sendMessageToChannel from './send-a-message-to-channel'; -import sendDirectMessage from './send-a-direct-message'; - -export default [findMessage, findUserByEmail, sendMessageToChannel, sendDirectMessage]; diff --git a/packages/backend/src/apps/slack/actions/send-a-direct-message/index.ts b/packages/backend/src/apps/slack/actions/send-a-direct-message/index.js similarity index 84% rename from packages/backend/src/apps/slack/actions/send-a-direct-message/index.ts rename to packages/backend/src/apps/slack/actions/send-a-direct-message/index.js index 481150bf..0d6fa916 100644 --- a/packages/backend/src/apps/slack/actions/send-a-direct-message/index.ts +++ b/packages/backend/src/apps/slack/actions/send-a-direct-message/index.js @@ -1,15 +1,16 @@ -import defineAction from '../../../../helpers/define-action'; -import postMessage from './post-message'; +import defineAction from '../../../../helpers/define-action.js'; +import postMessage from './post-message.js'; export default defineAction({ name: 'Send a direct message', key: 'sendDirectMessage', - description: 'Sends a direct message to a user or yourself from the Slackbot.', + description: + 'Sends a direct message to a user or yourself from the Slackbot.', arguments: [ { label: 'To username', key: 'toUsername', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Pick a user to send the message to.', variables: true, @@ -27,7 +28,7 @@ export default defineAction({ { label: 'Message text', key: 'message', - type: 'string' as const, + type: 'string', required: true, description: 'The content of your new message.', variables: true, @@ -35,7 +36,7 @@ export default defineAction({ { label: 'Send as a bot?', key: 'sendAsBot', - type: 'dropdown' as const, + type: 'dropdown', required: false, value: false, description: diff --git a/packages/backend/src/apps/slack/actions/send-a-direct-message/post-message.ts b/packages/backend/src/apps/slack/actions/send-a-direct-message/post-message.js similarity index 58% rename from packages/backend/src/apps/slack/actions/send-a-direct-message/post-message.ts rename to packages/backend/src/apps/slack/actions/send-a-direct-message/post-message.js index c918f9b6..0045cfcd 100644 --- a/packages/backend/src/apps/slack/actions/send-a-direct-message/post-message.ts +++ b/packages/backend/src/apps/slack/actions/send-a-direct-message/post-message.js @@ -1,23 +1,14 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URL } from 'url'; -type TData = { - channel: string; - text: string; - username?: string; - icon_url?: string; - icon_emoji?: string; -}; - -const postMessage = async ($: IGlobalVariable) => { +const postMessage = async ($) => { const { parameters } = $.step; - const toUsername = parameters.toUsername as string; - const text = parameters.message as string; - const sendAsBot = parameters.sendAsBot as boolean; - const botName = parameters.botName as string; - const botIcon = parameters.botIcon as string; + const toUsername = parameters.toUsername; + const text = parameters.message; + const sendAsBot = parameters.sendAsBot; + const botName = parameters.botName; + const botIcon = parameters.botIcon; - const data: TData = { + const data = { channel: toUsername, text, }; diff --git a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.js similarity index 88% rename from packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts rename to packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.js index 6b42cc6c..5a25e86a 100644 --- a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts +++ b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.js @@ -1,5 +1,5 @@ -import defineAction from '../../../../helpers/define-action'; -import postMessage from './post-message'; +import defineAction from '../../../../helpers/define-action.js'; +import postMessage from './post-message.js'; export default defineAction({ name: 'Send a message to channel', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'Channel', key: 'channel', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Pick a channel to send the message to.', variables: true, @@ -27,7 +27,7 @@ export default defineAction({ { label: 'Message text', key: 'message', - type: 'string' as const, + type: 'string', required: true, description: 'The content of your new message.', variables: true, @@ -35,7 +35,7 @@ export default defineAction({ { label: 'Send as a bot?', key: 'sendAsBot', - type: 'dropdown' as const, + type: 'dropdown', required: false, value: false, description: diff --git a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.ts b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.js similarity index 58% rename from packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.ts rename to packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.js index 8e5376b8..3b466795 100644 --- a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.ts +++ b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.js @@ -1,23 +1,14 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URL } from 'url'; -type TData = { - channel: string; - text: string; - username?: string; - icon_url?: string; - icon_emoji?: string; -}; - -const postMessage = async ($: IGlobalVariable) => { +const postMessage = async ($) => { const { parameters } = $.step; - const channelId = parameters.channel as string; - const text = parameters.message as string; - const sendAsBot = parameters.sendAsBot as boolean; - const botName = parameters.botName as string; - const botIcon = parameters.botIcon as string; + const channelId = parameters.channel; + const text = parameters.message; + const sendAsBot = parameters.sendAsBot; + const botName = parameters.botName; + const botIcon = parameters.botIcon; - const data: TData = { + const data = { channel: channelId, text, }; diff --git a/packages/backend/src/apps/slack/auth/generate-auth-url.ts b/packages/backend/src/apps/slack/auth/generate-auth-url.js similarity index 78% rename from packages/backend/src/apps/slack/auth/generate-auth-url.ts rename to packages/backend/src/apps/slack/auth/generate-auth-url.js index 72e6ec03..58f225cc 100644 --- a/packages/backend/src/apps/slack/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/slack/auth/generate-auth-url.js @@ -1,4 +1,3 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import qs from 'qs'; const scopes = [ @@ -43,13 +42,13 @@ const userScopes = [ 'users:read.email', ]; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = qs.stringify({ - client_id: $.auth.data.consumerKey as string, + client_id: $.auth.data.consumerKey, redirect_uri: redirectUri, scope: scopes.join(','), user_scope: userScopes.join(','), diff --git a/packages/backend/src/apps/slack/auth/index.ts b/packages/backend/src/apps/slack/auth/index.js similarity index 77% rename from packages/backend/src/apps/slack/auth/index.ts rename to packages/backend/src/apps/slack/auth/index.js index b5430c86..48adcf82 100644 --- a/packages/backend/src/apps/slack/auth/index.ts +++ b/packages/backend/src/apps/slack/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/slack/connections/add', @@ -19,7 +19,7 @@ export default { { key: 'consumerKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -30,7 +30,7 @@ export default { { key: 'consumerSecret', label: 'API Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/slack/auth/is-still-verified.js b/packages/backend/src/apps/slack/auth/is-still-verified.js new file mode 100644 index 00000000..1b9d46d0 --- /dev/null +++ b/packages/backend/src/apps/slack/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user.id; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/slack/auth/is-still-verified.ts b/packages/backend/src/apps/slack/auth/is-still-verified.ts deleted file mode 100644 index befb7694..00000000 --- a/packages/backend/src/apps/slack/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user.id; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/slack/auth/verify-credentials.ts b/packages/backend/src/apps/slack/auth/verify-credentials.js similarity index 82% rename from packages/backend/src/apps/slack/auth/verify-credentials.ts rename to packages/backend/src/apps/slack/auth/verify-credentials.js index 5450d124..c00f7d8b 100644 --- a/packages/backend/src/apps/slack/auth/verify-credentials.ts +++ b/packages/backend/src/apps/slack/auth/verify-credentials.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const params = { code: $.auth.data.code, client_id: $.auth.data.consumerKey, diff --git a/packages/backend/src/apps/slack/common/add-auth-header.ts b/packages/backend/src/apps/slack/common/add-auth-header.js similarity index 82% rename from packages/backend/src/apps/slack/common/add-auth-header.ts rename to packages/backend/src/apps/slack/common/add-auth-header.js index 24feca73..bd650e45 100644 --- a/packages/backend/src/apps/slack/common/add-auth-header.ts +++ b/packages/backend/src/apps/slack/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const authData = $.auth.data; if ( requestConfig.headers && diff --git a/packages/backend/src/apps/slack/common/get-current-user.ts b/packages/backend/src/apps/slack/common/get-current-user.js similarity index 50% rename from packages/backend/src/apps/slack/common/get-current-user.ts rename to packages/backend/src/apps/slack/common/get-current-user.js index 9d9b4fba..7b874868 100644 --- a/packages/backend/src/apps/slack/common/get-current-user.ts +++ b/packages/backend/src/apps/slack/common/get-current-user.js @@ -1,8 +1,6 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const params = { - user: $.auth.data.userId as string, + user: $.auth.data.userId, }; const response = await $.http.get('/users.info', { params }); const currentUser = response.data.user; diff --git a/packages/backend/src/apps/slack/dynamic-data/index.js b/packages/backend/src/apps/slack/dynamic-data/index.js new file mode 100644 index 00000000..e0044a49 --- /dev/null +++ b/packages/backend/src/apps/slack/dynamic-data/index.js @@ -0,0 +1,4 @@ +import listChannels from './list-channels/index.js'; +import listUsers from './list-users/index.js'; + +export default [listChannels, listUsers]; diff --git a/packages/backend/src/apps/slack/dynamic-data/index.ts b/packages/backend/src/apps/slack/dynamic-data/index.ts deleted file mode 100644 index 6963b403..00000000 --- a/packages/backend/src/apps/slack/dynamic-data/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import listChannels from './list-channels'; -import listUsers from './list-users'; - -export default [listChannels, listUsers]; diff --git a/packages/backend/src/apps/slack/dynamic-data/list-channels/index.js b/packages/backend/src/apps/slack/dynamic-data/list-channels/index.js new file mode 100644 index 00000000..fe0310ca --- /dev/null +++ b/packages/backend/src/apps/slack/dynamic-data/list-channels/index.js @@ -0,0 +1,43 @@ +export default { + name: 'List channels', + key: 'listChannels', + + async run($) { + const channels = { + data: [], + error: null, + }; + + let nextCursor; + do { + const response = await $.http.get('/conversations.list', { + params: { + types: 'public_channel,private_channel', + cursor: nextCursor, + limit: 1000, + }, + }); + + nextCursor = response.data.response_metadata?.next_cursor; + + if (response.data.error === 'missing_scope') { + throw new Error( + `Missing "${response.data.needed}" scope while authorizing. Please, reconnect your connection!` + ); + } + + if (response.data.ok === false) { + throw new Error(JSON.stringify(response.data, null, 2)); + } + + for (const channel of response.data.channels) { + channels.data.push({ + value: channel.id, + name: channel.name, + }); + } + } while (nextCursor); + + return channels; + }, +}; diff --git a/packages/backend/src/apps/slack/dynamic-data/list-channels/index.ts b/packages/backend/src/apps/slack/dynamic-data/list-channels/index.ts deleted file mode 100644 index a851903c..00000000 --- a/packages/backend/src/apps/slack/dynamic-data/list-channels/index.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type TChannel = { - id: string; - name: string; -} - -type TConversationListResponseData = { - channels: TChannel[], - response_metadata?: { - next_cursor: string - }; - needed?: string; - error?: string; - ok: boolean; -} - -type TResponse = { - data: TConversationListResponseData; -} - -export default { - name: 'List channels', - key: 'listChannels', - - async run($: IGlobalVariable) { - const channels: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { - data: [], - error: null, - }; - - let nextCursor; - do { - const response: TResponse = await $.http.get('/conversations.list', { - params: { - types: 'public_channel,private_channel', - cursor: nextCursor, - limit: 1000, - } - }); - - nextCursor = response.data.response_metadata?.next_cursor; - - if (response.data.error === 'missing_scope') { - throw new Error(`Missing "${response.data.needed}" scope while authorizing. Please, reconnect your connection!`); - } - - if (response.data.ok === false) { - throw new Error(JSON.stringify(response.data, null, 2)); - } - - for (const channel of response.data.channels) { - channels.data.push({ - value: channel.id as string, - name: channel.name as string, - }); - } - } while (nextCursor); - - return channels; - }, -}; diff --git a/packages/backend/src/apps/slack/dynamic-data/list-users/index.js b/packages/backend/src/apps/slack/dynamic-data/list-users/index.js new file mode 100644 index 00000000..49935bc1 --- /dev/null +++ b/packages/backend/src/apps/slack/dynamic-data/list-users/index.js @@ -0,0 +1,43 @@ +export default { + name: 'List users', + key: 'listUsers', + + async run($) { + const users = { + data: [], + error: null, + }; + + let nextCursor; + + do { + const response = await $.http.get('/users.list', { + params: { + cursor: nextCursor, + limit: 1000, + }, + }); + + nextCursor = response.data.response_metadata?.next_cursor; + + if (response.data.error === 'missing_scope') { + throw new Error( + `Missing "${response.data.needed}" scope while authorizing. Please, reconnect your connection!` + ); + } + + if (response.data.ok === false) { + throw new Error(JSON.stringify(response.data, null, 2)); + } + + for (const member of response.data.members) { + users.data.push({ + value: member.id, + name: member.profile.real_name_normalized, + }); + } + } while (nextCursor); + + return users; + }, +}; diff --git a/packages/backend/src/apps/slack/dynamic-data/list-users/index.ts b/packages/backend/src/apps/slack/dynamic-data/list-users/index.ts deleted file mode 100644 index 5264667b..00000000 --- a/packages/backend/src/apps/slack/dynamic-data/list-users/index.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type TMember = { - id: string; - profile: { - real_name_normalized: string; - }; -} - -type TUserListResponseData = { - members: TMember[], - response_metadata?: { - next_cursor: string - }; - needed?: string; - error?: string; - ok: boolean; -} - -type TResponse = { - data: TUserListResponseData; -} - -export default { - name: 'List users', - key: 'listUsers', - - async run($: IGlobalVariable) { - const users: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { - data: [], - error: null, - }; - - let nextCursor; - do { - const response: TResponse = await $.http.get('/users.list', { - params: { - cursor: nextCursor, - limit: 1000, - } - }); - - nextCursor = response.data.response_metadata?.next_cursor; - - if (response.data.error === 'missing_scope') { - throw new Error(`Missing "${response.data.needed}" scope while authorizing. Please, reconnect your connection!`); - } - - if (response.data.ok === false) { - throw new Error(JSON.stringify(response.data, null, 2)); - } - - for (const member of response.data.members) { - users.data.push({ - value: member.id as string, - name: member.profile.real_name_normalized as string, - }); - } - } while (nextCursor); - - return users; - }, -}; diff --git a/packages/backend/src/apps/slack/dynamic-fields/index.js b/packages/backend/src/apps/slack/dynamic-fields/index.js new file mode 100644 index 00000000..05098366 --- /dev/null +++ b/packages/backend/src/apps/slack/dynamic-fields/index.js @@ -0,0 +1,3 @@ +import listFieldsAfterSendAsBot from './send-as-bot/index.js'; + +export default [listFieldsAfterSendAsBot]; diff --git a/packages/backend/src/apps/slack/dynamic-fields/index.ts b/packages/backend/src/apps/slack/dynamic-fields/index.ts deleted file mode 100644 index 220e3ef3..00000000 --- a/packages/backend/src/apps/slack/dynamic-fields/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listFieldsAfterSendAsBot from './send-as-bot'; - -export default [listFieldsAfterSendAsBot]; diff --git a/packages/backend/src/apps/slack/dynamic-fields/send-as-bot/index.ts b/packages/backend/src/apps/slack/dynamic-fields/send-as-bot/index.js similarity index 83% rename from packages/backend/src/apps/slack/dynamic-fields/send-as-bot/index.ts rename to packages/backend/src/apps/slack/dynamic-fields/send-as-bot/index.js index 75c6c5e0..a7a23a75 100644 --- a/packages/backend/src/apps/slack/dynamic-fields/send-as-bot/index.ts +++ b/packages/backend/src/apps/slack/dynamic-fields/send-as-bot/index.js @@ -1,16 +1,14 @@ -import { IGlobalVariable } from '@automatisch/types'; - export default { name: 'List fields after send as bot', key: 'listFieldsAfterSendAsBot', - async run($: IGlobalVariable) { + async run($) { if ($.step.parameters.sendAsBot) { return [ { label: 'Bot name', key: 'botName', - type: 'string' as const, + type: 'string', required: true, value: 'Automatisch', description: @@ -20,7 +18,7 @@ export default { { label: 'Bot icon', key: 'botIcon', - type: 'string' as const, + type: 'string', required: false, description: 'Either an image url or an emoji available to your team (surrounded by :). For example, https://example.com/icon_256.png or :robot_face:', diff --git a/packages/backend/src/apps/slack/index.d.ts b/packages/backend/src/apps/slack/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/slack/index.ts b/packages/backend/src/apps/slack/index.js similarity index 57% rename from packages/backend/src/apps/slack/index.ts rename to packages/backend/src/apps/slack/index.js index 1f2570b7..0535524a 100644 --- a/packages/backend/src/apps/slack/index.ts +++ b/packages/backend/src/apps/slack/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import actions from './actions'; -import auth from './auth'; -import dynamicData from './dynamic-data'; -import dynamicFields from './dynamic-fields'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import actions from './actions/index.js'; +import auth from './auth/index.js'; +import dynamicData from './dynamic-data/index.js'; +import dynamicFields from './dynamic-fields/index.js'; export default defineApp({ name: 'Slack', diff --git a/packages/backend/src/apps/smtp/actions/index.js b/packages/backend/src/apps/smtp/actions/index.js new file mode 100644 index 00000000..e1d8a996 --- /dev/null +++ b/packages/backend/src/apps/smtp/actions/index.js @@ -0,0 +1,3 @@ +import sendEmail from './send-email/index.js'; + +export default [sendEmail]; diff --git a/packages/backend/src/apps/smtp/actions/index.ts b/packages/backend/src/apps/smtp/actions/index.ts deleted file mode 100644 index e688be4d..00000000 --- a/packages/backend/src/apps/smtp/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sendEmail from './send-email'; - -export default [sendEmail]; diff --git a/packages/backend/src/apps/smtp/actions/send-email/index.ts b/packages/backend/src/apps/smtp/actions/send-email/index.js similarity index 67% rename from packages/backend/src/apps/smtp/actions/send-email/index.ts rename to packages/backend/src/apps/smtp/actions/send-email/index.js index 68e525fa..44985de2 100644 --- a/packages/backend/src/apps/smtp/actions/send-email/index.ts +++ b/packages/backend/src/apps/smtp/actions/send-email/index.js @@ -1,6 +1,5 @@ -import { IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; -import transporter from '../../common/transporter'; +import defineAction from '../../../../helpers/define-action.js'; +import transporter from '../../common/transporter.js'; export default defineAction({ name: 'Send an email', @@ -10,7 +9,7 @@ export default defineAction({ { label: 'From name', key: 'fromName', - type: 'string' as const, + type: 'string', required: false, description: 'Display name of the sender.', variables: true, @@ -18,7 +17,7 @@ export default defineAction({ { label: 'From email', key: 'fromEmail', - type: 'string' as const, + type: 'string', required: true, description: 'Email address of the sender.', variables: true, @@ -26,7 +25,7 @@ export default defineAction({ { label: 'Reply to', key: 'replyTo', - type: 'string' as const, + type: 'string', required: false, description: 'Email address to reply to. Defaults to the from email address.', @@ -35,7 +34,7 @@ export default defineAction({ { label: 'To', key: 'to', - type: 'string' as const, + type: 'string', required: true, description: 'Comma seperated list of email addresses to send the email to.', @@ -44,7 +43,7 @@ export default defineAction({ { label: 'Cc', key: 'cc', - type: 'string' as const, + type: 'string', required: false, description: 'Comma seperated list of email addresses.', variables: true, @@ -52,7 +51,7 @@ export default defineAction({ { label: 'Bcc', key: 'bcc', - type: 'string' as const, + type: 'string', required: false, description: 'Comma seperated list of email addresses.', variables: true, @@ -60,7 +59,7 @@ export default defineAction({ { label: 'Subject', key: 'subject', - type: 'string' as const, + type: 'string', required: true, description: 'Subject of the email.', variables: true, @@ -68,7 +67,7 @@ export default defineAction({ { label: 'Body', key: 'body', - type: 'string' as const, + type: 'string', required: true, description: 'Body of the email.', variables: true, @@ -78,14 +77,14 @@ export default defineAction({ async run($) { const info = await transporter($).sendMail({ from: `${$.step.parameters.fromName} <${$.step.parameters.fromEmail}>`, - to: ($.step.parameters.to as string).split(','), - replyTo: $.step.parameters.replyTo as string, - cc: ($.step.parameters.cc as string).split(','), - bcc: ($.step.parameters.bcc as string).split(','), - subject: $.step.parameters.subject as string, - text: $.step.parameters.body as string, + to: $.step.parameters.to.split(','), + replyTo: $.step.parameters.replyTo, + cc: $.step.parameters.cc.split(','), + bcc: $.step.parameters.bcc.split(','), + subject: $.step.parameters.subject, + text: $.step.parameters.body, }); - $.setActionItem({ raw: info as IJSONObject }); + $.setActionItem({ raw: info }); }, }); diff --git a/packages/backend/src/apps/smtp/auth/index.ts b/packages/backend/src/apps/smtp/auth/index.js similarity index 86% rename from packages/backend/src/apps/smtp/auth/index.ts rename to packages/backend/src/apps/smtp/auth/index.js index 369aa411..090e691f 100644 --- a/packages/backend/src/apps/smtp/auth/index.ts +++ b/packages/backend/src/apps/smtp/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'host', label: 'Host', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'username', label: 'Email/Username', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -30,7 +30,7 @@ export default { { key: 'password', label: 'Password', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -42,7 +42,7 @@ export default { { key: 'useTls', label: 'Use TLS?', - type: 'dropdown' as const, + type: 'dropdown', required: false, readOnly: false, value: false, @@ -64,7 +64,7 @@ export default { { key: 'port', label: 'Port', - type: 'string' as const, + type: 'string', required: false, readOnly: false, value: '25', @@ -76,7 +76,7 @@ export default { { key: 'fromEmail', label: 'From Email', - type: 'string' as const, + type: 'string', required: false, readOnly: false, value: null, diff --git a/packages/backend/src/apps/smtp/auth/is-still-verified.js b/packages/backend/src/apps/smtp/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/smtp/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/smtp/auth/is-still-verified.ts b/packages/backend/src/apps/smtp/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/smtp/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/smtp/auth/verify-credentials.js b/packages/backend/src/apps/smtp/auth/verify-credentials.js new file mode 100644 index 00000000..ef4218e0 --- /dev/null +++ b/packages/backend/src/apps/smtp/auth/verify-credentials.js @@ -0,0 +1,11 @@ +import transporter from '../common/transporter.js'; + +const verifyCredentials = async ($) => { + await transporter($).verify(); + + await $.auth.set({ + screenName: $.auth.data.username, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/smtp/auth/verify-credentials.ts b/packages/backend/src/apps/smtp/auth/verify-credentials.ts deleted file mode 100644 index 73891a7f..00000000 --- a/packages/backend/src/apps/smtp/auth/verify-credentials.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import transporter from '../common/transporter'; - -const verifyCredentials = async ($: IGlobalVariable) => { - await transporter($).verify(); - - await $.auth.set({ - screenName: $.auth.data.username, - }); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/smtp/common/transporter.ts b/packages/backend/src/apps/smtp/common/transporter.js similarity index 57% rename from packages/backend/src/apps/smtp/common/transporter.ts rename to packages/backend/src/apps/smtp/common/transporter.js index 2a975415..50718058 100644 --- a/packages/backend/src/apps/smtp/common/transporter.ts +++ b/packages/backend/src/apps/smtp/common/transporter.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; -import nodemailer, { TransportOptions } from 'nodemailer'; +import nodemailer from 'nodemailer'; -const transporter = ($: IGlobalVariable) => { +const transporter = ($) => { return nodemailer.createTransport({ host: $.auth.data.host, port: $.auth.data.port, @@ -10,7 +9,7 @@ const transporter = ($: IGlobalVariable) => { user: $.auth.data.username, pass: $.auth.data.password, }, - } as TransportOptions); + }); }; export default transporter; diff --git a/packages/backend/src/apps/smtp/index.d.ts b/packages/backend/src/apps/smtp/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/smtp/index.ts b/packages/backend/src/apps/smtp/index.js similarity index 68% rename from packages/backend/src/apps/smtp/index.ts rename to packages/backend/src/apps/smtp/index.js index 3eb833d2..dd9db758 100644 --- a/packages/backend/src/apps/smtp/index.ts +++ b/packages/backend/src/apps/smtp/index.js @@ -1,6 +1,6 @@ -import defineApp from '../../helpers/define-app'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'SMTP', diff --git a/packages/backend/src/apps/spotify/actions/create-playlist/index.ts b/packages/backend/src/apps/spotify/actions/create-playlist/index.js similarity index 77% rename from packages/backend/src/apps/spotify/actions/create-playlist/index.ts rename to packages/backend/src/apps/spotify/actions/create-playlist/index.js index 51dbee13..85766949 100644 --- a/packages/backend/src/apps/spotify/actions/create-playlist/index.ts +++ b/packages/backend/src/apps/spotify/actions/create-playlist/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create playlist', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Playlist name', key: 'playlistName', - type: 'string' as const, + type: 'string', required: true, description: 'Playlist name', variables: true, @@ -16,7 +16,7 @@ export default defineAction({ { label: 'Playlist visibility', key: 'playlistVisibility', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Playlist visibility', variables: true, @@ -28,7 +28,7 @@ export default defineAction({ { label: 'Playlist description', key: 'playlistDescription', - type: 'string' as const, + type: 'string', required: false, description: 'Playlist description', variables: true, @@ -36,12 +36,10 @@ export default defineAction({ ], async run($) { - const playlistName = $.step.parameters.playlistName as string; - const playlistDescription = $.step.parameters.playlistDescription as string; + const playlistName = $.step.parameters.playlistName; + const playlistDescription = $.step.parameters.playlistDescription; const playlistVisibility = - $.step.parameters.playlistVisibility === 'public' - ? true - : (false as boolean); + $.step.parameters.playlistVisibility === 'public' ? true : false; const response = await $.http.post( `v1/users/${$.auth.data.userId}/playlists`, diff --git a/packages/backend/src/apps/spotify/actions/index.js b/packages/backend/src/apps/spotify/actions/index.js new file mode 100644 index 00000000..a520f0d7 --- /dev/null +++ b/packages/backend/src/apps/spotify/actions/index.js @@ -0,0 +1,3 @@ +import cratePlaylist from './create-playlist/index.js'; + +export default [cratePlaylist]; diff --git a/packages/backend/src/apps/spotify/actions/index.ts b/packages/backend/src/apps/spotify/actions/index.ts deleted file mode 100644 index b6f07255..00000000 --- a/packages/backend/src/apps/spotify/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import cratePlaylist from './create-playlist'; - -export default [cratePlaylist]; diff --git a/packages/backend/src/apps/spotify/auth/generate-auth-url.js b/packages/backend/src/apps/spotify/auth/generate-auth-url.js new file mode 100644 index 00000000..ed70fc01 --- /dev/null +++ b/packages/backend/src/apps/spotify/auth/generate-auth-url.js @@ -0,0 +1,26 @@ +import { URLSearchParams } from 'url'; +import scopes from '../common/scopes.js'; + +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, + client_secret: $.auth.data.clientSecret, + grant_type: 'client_credentials', + redirect_uri: redirectUri, + response_type: 'code', + scope: scopes.join(','), + state: state, + }); + + const url = `https://accounts.spotify.com/authorize?${searchParams}`; + + await $.auth.set({ + url, + }); +} diff --git a/packages/backend/src/apps/spotify/auth/generate-auth-url.ts b/packages/backend/src/apps/spotify/auth/generate-auth-url.ts deleted file mode 100644 index 022e063e..00000000 --- a/packages/backend/src/apps/spotify/auth/generate-auth-url.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import { URLSearchParams } from 'url'; -import scopes from '../common/scopes'; - -export default async function generateAuthUrl($: IGlobalVariable) { - const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' - ); - const redirectUri = oauthRedirectUrlField.value as string; - const state = Math.random().toString() as string; - - const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - grant_type: 'client_credentials', - redirect_uri: redirectUri, - response_type: 'code', - scope: scopes.join(','), - state: state, - }); - - const url = `https://accounts.spotify.com/authorize?${searchParams}`; - - await $.auth.set({ - url, - }); -} diff --git a/packages/backend/src/apps/spotify/auth/index.ts b/packages/backend/src/apps/spotify/auth/index.js similarity index 75% rename from packages/backend/src/apps/spotify/auth/index.ts rename to packages/backend/src/apps/spotify/auth/index.js index 289e4a72..1db348c4 100644 --- a/packages/backend/src/apps/spotify/auth/index.ts +++ b/packages/backend/src/apps/spotify/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; -import refreshToken from './refresh-token'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; +import refreshToken from './refresh-token.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/spotify/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client Id', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/spotify/auth/is-still-verified.js b/packages/backend/src/apps/spotify/auth/is-still-verified.js new file mode 100644 index 00000000..1b9d46d0 --- /dev/null +++ b/packages/backend/src/apps/spotify/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user.id; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/spotify/auth/is-still-verified.ts b/packages/backend/src/apps/spotify/auth/is-still-verified.ts deleted file mode 100644 index befb7694..00000000 --- a/packages/backend/src/apps/spotify/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user.id; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/spotify/auth/refresh-token.ts b/packages/backend/src/apps/spotify/auth/refresh-token.js similarity index 75% rename from packages/backend/src/apps/spotify/auth/refresh-token.ts rename to packages/backend/src/apps/spotify/auth/refresh-token.js index b748f658..b3ea8c56 100644 --- a/packages/backend/src/apps/spotify/auth/refresh-token.ts +++ b/packages/backend/src/apps/spotify/auth/refresh-token.js @@ -1,7 +1,6 @@ import { Buffer } from 'node:buffer'; -import { IGlobalVariable } from '@automatisch/types'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { const response = await $.http.post( 'https://accounts.spotify.com/api/token', null, @@ -13,12 +12,12 @@ const refreshToken = async ($: IGlobalVariable) => { 'Content-Type': 'application/x-www-form-urlencoded', }, params: { - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, grant_type: 'refresh_token', }, additionalProperties: { - skipAddingAuthHeader: true - } + skipAddingAuthHeader: true, + }, } ); diff --git a/packages/backend/src/apps/spotify/auth/verify-credentials.ts b/packages/backend/src/apps/spotify/auth/verify-credentials.js similarity index 79% rename from packages/backend/src/apps/spotify/auth/verify-credentials.ts rename to packages/backend/src/apps/spotify/auth/verify-credentials.js index 079c472d..9f37fa78 100644 --- a/packages/backend/src/apps/spotify/auth/verify-credentials.ts +++ b/packages/backend/src/apps/spotify/auth/verify-credentials.js @@ -1,14 +1,13 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; import { URLSearchParams } from 'url'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const params = new URLSearchParams({ - code: $.auth.data.code as string, + code: $.auth.data.code, redirect_uri: redirectUri, grant_type: 'authorization_code', }); diff --git a/packages/backend/src/apps/notion/common/add-auth-header.ts b/packages/backend/src/apps/spotify/common/add-auth-header.js similarity index 53% rename from packages/backend/src/apps/notion/common/add-auth-header.ts rename to packages/backend/src/apps/spotify/common/add-auth-header.js index d16f394f..38e69094 100644 --- a/packages/backend/src/apps/notion/common/add-auth-header.ts +++ b/packages/backend/src/apps/spotify/common/add-auth-header.js @@ -1,7 +1,6 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if (requestConfig.additionalProperties?.skipAddingAuthHeader) return requestConfig; +const addAuthHeader = ($, requestConfig) => { + if (requestConfig.additionalProperties?.skipAddingAuthHeader) + return requestConfig; if ($.auth.data?.accessToken) { const authorizationHeader = `Bearer ${$.auth.data.accessToken}`; diff --git a/packages/backend/src/apps/spotify/common/get-current-user.js b/packages/backend/src/apps/spotify/common/get-current-user.js new file mode 100644 index 00000000..170b252d --- /dev/null +++ b/packages/backend/src/apps/spotify/common/get-current-user.js @@ -0,0 +1,8 @@ +const getCurrentUser = async ($) => { + const response = await $.http.get('/v1/me'); + const currentUser = response.data; + + return currentUser; +}; + +export default getCurrentUser; diff --git a/packages/backend/src/apps/spotify/common/get-current-user.ts b/packages/backend/src/apps/spotify/common/get-current-user.ts deleted file mode 100644 index 0ccdf282..00000000 --- a/packages/backend/src/apps/spotify/common/get-current-user.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { - const response = await $.http.get('/v1/me'); - const currentUser = response.data; - - return currentUser; -}; - -export default getCurrentUser; diff --git a/packages/backend/src/apps/spotify/common/scopes.ts b/packages/backend/src/apps/spotify/common/scopes.js similarity index 100% rename from packages/backend/src/apps/spotify/common/scopes.ts rename to packages/backend/src/apps/spotify/common/scopes.js diff --git a/packages/backend/src/apps/spotify/index.d.ts b/packages/backend/src/apps/spotify/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/spotify/index.ts b/packages/backend/src/apps/spotify/index.js similarity index 66% rename from packages/backend/src/apps/spotify/index.ts rename to packages/backend/src/apps/spotify/index.js index e4b335de..777887a3 100644 --- a/packages/backend/src/apps/spotify/index.ts +++ b/packages/backend/src/apps/spotify/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import actions from './actions'; -import auth from './auth'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import actions from './actions/index.js'; +import auth from './auth/index.js'; export default defineApp({ name: 'Spotify', diff --git a/packages/backend/src/apps/strava/actions/create-totals-and-stats-report/index.js b/packages/backend/src/apps/strava/actions/create-totals-and-stats-report/index.js new file mode 100644 index 00000000..be3fa623 --- /dev/null +++ b/packages/backend/src/apps/strava/actions/create-totals-and-stats-report/index.js @@ -0,0 +1,18 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Create totals and stats report', + key: 'createTotalsAndStatsReport', + description: + 'Create a report with recent, year to date, and all time stats of your activities', + + async run($) { + const { data } = await $.http.get( + `/v3/athletes/${$.auth.data.athleteId}/stats` + ); + + $.setActionItem({ + raw: data, + }); + }, +}); diff --git a/packages/backend/src/apps/strava/actions/create-totals-and-stats-report/index.ts b/packages/backend/src/apps/strava/actions/create-totals-and-stats-report/index.ts deleted file mode 100644 index dd755fce..00000000 --- a/packages/backend/src/apps/strava/actions/create-totals-and-stats-report/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import defineAction from '../../../../helpers/define-action'; - -export default defineAction({ - name: 'Create totals and stats report', - key: 'createTotalsAndStatsReport', - description: 'Create a report with recent, year to date, and all time stats of your activities', - - async run($) { - const { data } = await $.http.get(`/v3/athletes/${$.auth.data.athleteId}/stats`); - - $.setActionItem({ - raw: data, - }); - }, -}); diff --git a/packages/backend/src/apps/strava/actions/index.js b/packages/backend/src/apps/strava/actions/index.js new file mode 100644 index 00000000..7474a614 --- /dev/null +++ b/packages/backend/src/apps/strava/actions/index.js @@ -0,0 +1,3 @@ +import createTotalsAndStatsReport from './create-totals-and-stats-report/index.js'; + +export default [createTotalsAndStatsReport]; diff --git a/packages/backend/src/apps/strava/actions/index.ts b/packages/backend/src/apps/strava/actions/index.ts deleted file mode 100644 index df9e1d5c..00000000 --- a/packages/backend/src/apps/strava/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import createTotalsAndStatsReport from "./create-totals-and-stats-report"; - -export default [createTotalsAndStatsReport]; diff --git a/packages/backend/src/apps/strava/auth/generate-auth-url.ts b/packages/backend/src/apps/strava/auth/generate-auth-url.js similarity index 58% rename from packages/backend/src/apps/strava/auth/generate-auth-url.ts rename to packages/backend/src/apps/strava/auth/generate-auth-url.js index 185a1ad1..e9542fc6 100644 --- a/packages/backend/src/apps/strava/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/strava/auth/generate-auth-url.js @@ -1,13 +1,12 @@ import { URLSearchParams } from 'node:url'; -import { IField, IGlobalVariable } from '@automatisch/types'; -export default async function createAuthData($: IGlobalVariable) { +export default async function createAuthData($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, redirect_uri: redirectUri, approval_prompt: 'force', response_type: 'code', diff --git a/packages/backend/src/apps/strava/auth/index.ts b/packages/backend/src/apps/strava/auth/index.js similarity index 74% rename from packages/backend/src/apps/strava/auth/index.ts rename to packages/backend/src/apps/strava/auth/index.js index df7d9b0d..2488ca85 100644 --- a/packages/backend/src/apps/strava/auth/index.ts +++ b/packages/backend/src/apps/strava/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; -import refreshToken from './refresh-token'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; +import refreshToken from './refresh-token.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/strava/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/strava/auth/is-still-verified.js b/packages/backend/src/apps/strava/auth/is-still-verified.js new file mode 100644 index 00000000..f59ee3b4 --- /dev/null +++ b/packages/backend/src/apps/strava/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/strava/auth/is-still-verified.ts b/packages/backend/src/apps/strava/auth/is-still-verified.ts deleted file mode 100644 index d36919f2..00000000 --- a/packages/backend/src/apps/strava/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/strava/auth/refresh-token.js b/packages/backend/src/apps/strava/auth/refresh-token.js new file mode 100644 index 00000000..9e7f2dab --- /dev/null +++ b/packages/backend/src/apps/strava/auth/refresh-token.js @@ -0,0 +1,20 @@ +const refreshToken = async ($) => { + const params = { + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + grant_type: 'refresh_token', + refresh_token: $.auth.data.refreshToken, + }; + + const { data } = await $.http.post('/v3/oauth/token', null, { params }); + + await $.auth.set({ + accessToken: data.access_token, + expiresIn: data.expires_in, + expiresAt: data.expires_at, + tokenType: data.token_type, + refreshToken: data.refresh_token, + }); +}; + +export default refreshToken; diff --git a/packages/backend/src/apps/strava/auth/refresh-token.ts b/packages/backend/src/apps/strava/auth/refresh-token.ts deleted file mode 100644 index 6f5b623f..00000000 --- a/packages/backend/src/apps/strava/auth/refresh-token.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const refreshToken = async ($: IGlobalVariable) => { - const params = { - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, - }; - - const { data } = await $.http.post( - '/v3/oauth/token', - null, - { params } - ); - - await $.auth.set({ - accessToken: data.access_token, - expiresIn: data.expires_in, - expiresAt: data.expires_at, - tokenType: data.token_type, - refreshToken: data.refresh_token, - }); -}; - -export default refreshToken; diff --git a/packages/backend/src/apps/strava/auth/verify-credentials.js b/packages/backend/src/apps/strava/auth/verify-credentials.js new file mode 100644 index 00000000..4e61da49 --- /dev/null +++ b/packages/backend/src/apps/strava/auth/verify-credentials.js @@ -0,0 +1,19 @@ +const verifyCredentials = async ($) => { + const params = { + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + code: $.auth.data.code, + grant_type: 'authorization_code', + }; + const { data } = await $.http.post('/v3/oauth/token', null, { params }); + + await $.auth.set({ + accessToken: data.access_token, + refreshToken: data.refresh_token, + tokenType: data.token_type, + athleteId: data.athlete.id, + screenName: `${data.athlete.firstname} ${data.athlete.lastname}`, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/strava/auth/verify-credentials.ts b/packages/backend/src/apps/strava/auth/verify-credentials.ts deleted file mode 100644 index ea539036..00000000 --- a/packages/backend/src/apps/strava/auth/verify-credentials.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - const params = { - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - code: $.auth.data.code as string, - grant_type: 'authorization_code', - }; - const { data } = await $.http.post( - '/v3/oauth/token', - null, - { params } - ); - - await $.auth.set({ - accessToken: data.access_token, - refreshToken: data.refresh_token, - tokenType: data.token_type, - athleteId: data.athlete.id, - screenName: `${data.athlete.firstname} ${data.athlete.lastname}`, - }); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/strava/common/add-auth-header.ts b/packages/backend/src/apps/strava/common/add-auth-header.js similarity index 65% rename from packages/backend/src/apps/strava/common/add-auth-header.ts rename to packages/backend/src/apps/strava/common/add-auth-header.js index 2420110a..e8347e51 100644 --- a/packages/backend/src/apps/strava/common/add-auth-header.ts +++ b/packages/backend/src/apps/strava/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const { accessToken, tokenType } = $.auth.data; if (accessToken && tokenType) { diff --git a/packages/backend/src/apps/strava/common/get-current-user.ts b/packages/backend/src/apps/strava/common/get-current-user.js similarity index 50% rename from packages/backend/src/apps/strava/common/get-current-user.ts rename to packages/backend/src/apps/strava/common/get-current-user.js index 0765be96..db93f1f6 100644 --- a/packages/backend/src/apps/strava/common/get-current-user.ts +++ b/packages/backend/src/apps/strava/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get('/v3/athlete'); const currentUser = response.data; diff --git a/packages/backend/src/apps/strava/index.d.ts b/packages/backend/src/apps/strava/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/strava/index.ts b/packages/backend/src/apps/strava/index.js similarity index 66% rename from packages/backend/src/apps/strava/index.ts rename to packages/backend/src/apps/strava/index.js index 83706fbb..3de696ed 100644 --- a/packages/backend/src/apps/strava/index.ts +++ b/packages/backend/src/apps/strava/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import actions from './actions'; -import auth from './auth'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import actions from './actions/index.js'; +import auth from './auth/index.js'; export default defineApp({ name: 'Strava', diff --git a/packages/backend/src/apps/stripe/auth/index.ts b/packages/backend/src/apps/stripe/auth/index.js similarity index 59% rename from packages/backend/src/apps/stripe/auth/index.ts rename to packages/backend/src/apps/stripe/auth/index.js index f25205f1..e6da3efe 100644 --- a/packages/backend/src/apps/stripe/auth/index.ts +++ b/packages/backend/src/apps/stripe/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from "./verify-credentials"; -import isStillVerified from "./is-still-verified"; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'secretKey', label: 'Secret Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -17,15 +17,16 @@ export default { { key: 'displayName', label: 'Account Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, placeholder: null, - description: 'The display name that identifies this stripe connection - most likely the associated account name', + description: + 'The display name that identifies this stripe connection - most likely the associated account name', clickToCopy: false, }, ], verifyCredentials, - isStillVerified -}; \ No newline at end of file + isStillVerified, +}; diff --git a/packages/backend/src/apps/stripe/auth/is-still-verified.js b/packages/backend/src/apps/stripe/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/stripe/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/stripe/auth/is-still-verified.ts b/packages/backend/src/apps/stripe/auth/is-still-verified.ts deleted file mode 100644 index 4470a643..00000000 --- a/packages/backend/src/apps/stripe/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from "./verify-credentials"; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/stripe/auth/verify-credentials.js b/packages/backend/src/apps/stripe/auth/verify-credentials.js new file mode 100644 index 00000000..fab0a866 --- /dev/null +++ b/packages/backend/src/apps/stripe/auth/verify-credentials.js @@ -0,0 +1,8 @@ +const verifyCredentials = async ($) => { + await $.http.get(`/v1/events`); + await $.auth.set({ + screenName: $.auth.data?.displayName, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/stripe/auth/verify-credentials.ts b/packages/backend/src/apps/stripe/auth/verify-credentials.ts deleted file mode 100644 index 1297d9df..00000000 --- a/packages/backend/src/apps/stripe/auth/verify-credentials.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - await $.http.get( - `/v1/events`, - ); - await $.auth.set({ - screenName: $.auth.data?.displayName, - }); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/stripe/common/add-auth-header.js b/packages/backend/src/apps/stripe/common/add-auth-header.js new file mode 100644 index 00000000..7299246f --- /dev/null +++ b/packages/backend/src/apps/stripe/common/add-auth-header.js @@ -0,0 +1,6 @@ +const addAuthHeader = ($, requestConfig) => { + requestConfig.headers['Authorization'] = `Bearer ${$.auth.data?.secretKey}`; + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/stripe/common/add-auth-header.ts b/packages/backend/src/apps/stripe/common/add-auth-header.ts deleted file mode 100644 index 2e393e9c..00000000 --- a/packages/backend/src/apps/stripe/common/add-auth-header.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {TBeforeRequest} from "@automatisch/types"; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - requestConfig.headers['Authorization'] = `Bearer ${$.auth.data?.secretKey}` - return requestConfig -} - -export default addAuthHeader; \ No newline at end of file diff --git a/packages/backend/src/apps/stripe/index.d.ts b/packages/backend/src/apps/stripe/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/stripe/index.ts b/packages/backend/src/apps/stripe/index.js similarity index 66% rename from packages/backend/src/apps/stripe/index.ts rename to packages/backend/src/apps/stripe/index.js index 505f13bf..9fb1b877 100644 --- a/packages/backend/src/apps/stripe/index.ts +++ b/packages/backend/src/apps/stripe/index.js @@ -1,7 +1,7 @@ -import defineApp from "../../helpers/define-app"; -import addAuthHeader from "./common/add-auth-header"; -import auth from "./auth" -import triggers from "./triggers" +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Stripe', @@ -16,4 +16,4 @@ export default defineApp({ auth, triggers, actions: [], -}) \ No newline at end of file +}); diff --git a/packages/backend/src/apps/stripe/triggers/balance-transaction/get-balance-transactions.js b/packages/backend/src/apps/stripe/triggers/balance-transaction/get-balance-transactions.js new file mode 100644 index 00000000..e28c261b --- /dev/null +++ b/packages/backend/src/apps/stripe/triggers/balance-transaction/get-balance-transactions.js @@ -0,0 +1,32 @@ +import { URLSearchParams } from 'url'; +import isEmpty from 'lodash/isEmpty.js'; +import omitBy from 'lodash/omitBy.js'; + +const getBalanceTransactions = async ($) => { + let response; + let lastId = undefined; + + do { + const params = { + starting_after: lastId, + ending_before: $.flow.lastInternalId, + }; + const queryParams = new URLSearchParams(omitBy(params, isEmpty)); + const requestPath = `/v1/balance_transactions${ + queryParams.toString() ? `?${queryParams.toString()}` : '' + }`; + + response = (await $.http.get(requestPath)).data; + for (const entry of response.data) { + $.pushTriggerItem({ + raw: entry, + meta: { + internalId: entry.id, + }, + }); + lastId = entry.id; + } + } while (response.has_more); +}; + +export default getBalanceTransactions; diff --git a/packages/backend/src/apps/stripe/triggers/balance-transaction/get-balance-transactions.ts b/packages/backend/src/apps/stripe/triggers/balance-transaction/get-balance-transactions.ts deleted file mode 100644 index d70f1bfe..00000000 --- a/packages/backend/src/apps/stripe/triggers/balance-transaction/get-balance-transactions.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {IGlobalVariable, IJSONObject} from "@automatisch/types"; -import {URLSearchParams} from "url"; -import {isEmpty, omitBy} from "lodash"; - -const getBalanceTransactions = async ($: IGlobalVariable) => { - let response; - let lastId = undefined; - - do { - const params: IJSONObject = { - starting_after: lastId, - ending_before: $.flow.lastInternalId - } - const queryParams = new URLSearchParams(omitBy(params, isEmpty)) - const requestPath = `/v1/balance_transactions${ - queryParams.toString() ? `?${queryParams.toString()}` : '' - }`; - - response = (await $.http.get(requestPath)).data - for (const entry of response.data) { - $.pushTriggerItem({ - raw: entry, - meta: { - internalId: entry.id as string - } - }) - lastId = entry.id - } - } while (response.has_more) -}; - -export default getBalanceTransactions; \ No newline at end of file diff --git a/packages/backend/src/apps/stripe/triggers/balance-transaction/index.ts b/packages/backend/src/apps/stripe/triggers/balance-transaction/index.js similarity index 67% rename from packages/backend/src/apps/stripe/triggers/balance-transaction/index.ts rename to packages/backend/src/apps/stripe/triggers/balance-transaction/index.js index d36d5b05..ecdf0520 100644 --- a/packages/backend/src/apps/stripe/triggers/balance-transaction/index.ts +++ b/packages/backend/src/apps/stripe/triggers/balance-transaction/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import getBalanceTransactions from './get-balance-transactions'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import getBalanceTransactions from './get-balance-transactions.js'; export default defineTrigger({ name: 'New balance transactions', diff --git a/packages/backend/src/apps/stripe/triggers/index.js b/packages/backend/src/apps/stripe/triggers/index.js new file mode 100644 index 00000000..aa6b7552 --- /dev/null +++ b/packages/backend/src/apps/stripe/triggers/index.js @@ -0,0 +1,4 @@ +import balanceTransaction from './balance-transaction/index.js'; +import payouts from './payouts/index.js'; + +export default [balanceTransaction, payouts]; diff --git a/packages/backend/src/apps/stripe/triggers/index.ts b/packages/backend/src/apps/stripe/triggers/index.ts deleted file mode 100644 index f1a9d0c8..00000000 --- a/packages/backend/src/apps/stripe/triggers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import balanceTransaction from "./balance-transaction"; -import payouts from "./payouts"; - -export default [balanceTransaction, payouts]; \ No newline at end of file diff --git a/packages/backend/src/apps/stripe/triggers/payouts/get-payouts.js b/packages/backend/src/apps/stripe/triggers/payouts/get-payouts.js new file mode 100644 index 00000000..fbc6f7bb --- /dev/null +++ b/packages/backend/src/apps/stripe/triggers/payouts/get-payouts.js @@ -0,0 +1,32 @@ +import { URLSearchParams } from 'url'; +import isEmpty from 'lodash/isEmpty.js'; +import omitBy from 'lodash/omitBy.js'; + +const getPayouts = async ($) => { + let response; + let lastId = undefined; + + do { + const params = { + starting_after: lastId, + ending_before: $.flow.lastInternalId, + }; + const queryParams = new URLSearchParams(omitBy(params, isEmpty)); + const requestPath = `/v1/payouts${ + queryParams.toString() ? `?${queryParams.toString()}` : '' + }`; + + response = (await $.http.get(requestPath)).data; + for (const entry of response.data) { + $.pushTriggerItem({ + raw: entry, + meta: { + internalId: entry.id, + }, + }); + lastId = entry.id; + } + } while (response.has_more); +}; + +export default getPayouts; diff --git a/packages/backend/src/apps/stripe/triggers/payouts/get-payouts.ts b/packages/backend/src/apps/stripe/triggers/payouts/get-payouts.ts deleted file mode 100644 index 8791f89a..00000000 --- a/packages/backend/src/apps/stripe/triggers/payouts/get-payouts.ts +++ /dev/null @@ -1,32 +0,0 @@ -import {IGlobalVariable, IJSONObject} from "@automatisch/types"; -import {URLSearchParams} from "url"; -import {isEmpty, omitBy} from "lodash"; - -const getPayouts = async ($: IGlobalVariable) => { - let response; - let lastId = undefined; - - do { - const params: IJSONObject = { - starting_after: lastId, - ending_before: $.flow.lastInternalId - } - const queryParams = new URLSearchParams(omitBy(params, isEmpty)) - const requestPath = `/v1/payouts${ - queryParams.toString() ? `?${queryParams.toString()}` : '' - }`; - - response = (await $.http.get(requestPath)).data - for (const entry of response.data) { - $.pushTriggerItem({ - raw: entry, - meta: { - internalId: entry.id as string - } - }) - lastId = entry.id - } - } while (response.has_more) -}; - -export default getPayouts; \ No newline at end of file diff --git a/packages/backend/src/apps/stripe/triggers/payouts/index.ts b/packages/backend/src/apps/stripe/triggers/payouts/index.js similarity index 68% rename from packages/backend/src/apps/stripe/triggers/payouts/index.ts rename to packages/backend/src/apps/stripe/triggers/payouts/index.js index c613f341..9a5a0afc 100644 --- a/packages/backend/src/apps/stripe/triggers/payouts/index.ts +++ b/packages/backend/src/apps/stripe/triggers/payouts/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import getPayouts from './get-payouts'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import getPayouts from './get-payouts.js'; export default defineTrigger({ name: 'New payouts', diff --git a/packages/backend/src/apps/telegram-bot/actions/index.js b/packages/backend/src/apps/telegram-bot/actions/index.js new file mode 100644 index 00000000..92d67c2c --- /dev/null +++ b/packages/backend/src/apps/telegram-bot/actions/index.js @@ -0,0 +1,3 @@ +import sendMessage from './send-message/index.js'; + +export default [sendMessage]; diff --git a/packages/backend/src/apps/telegram-bot/actions/index.ts b/packages/backend/src/apps/telegram-bot/actions/index.ts deleted file mode 100644 index 37aeb338..00000000 --- a/packages/backend/src/apps/telegram-bot/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sendMessage from './send-message'; - -export default [sendMessage]; diff --git a/packages/backend/src/apps/telegram-bot/actions/send-message/index.ts b/packages/backend/src/apps/telegram-bot/actions/send-message/index.js similarity index 74% rename from packages/backend/src/apps/telegram-bot/actions/send-message/index.ts rename to packages/backend/src/apps/telegram-bot/actions/send-message/index.js index 6399d9bc..ae7ff311 100644 --- a/packages/backend/src/apps/telegram-bot/actions/send-message/index.ts +++ b/packages/backend/src/apps/telegram-bot/actions/send-message/index.js @@ -1,5 +1,5 @@ import qs from 'qs'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Send message', @@ -9,15 +9,16 @@ export default defineAction({ { label: 'Chat ID', key: 'chatId', - type: 'string' as const, + type: 'string', required: true, - description: 'Unique identifier for the target chat or username of the target channel (in the format @channelusername).', + description: + 'Unique identifier for the target chat or username of the target channel (in the format @channelusername).', variables: true, }, { label: 'Message text', key: 'text', - type: 'string' as const, + type: 'string', required: true, description: 'Text of the message to be sent, 1-4096 characters.', variables: true, @@ -25,10 +26,11 @@ export default defineAction({ { label: 'Disable notification?', key: 'disableNotification', - type: 'dropdown' as const, + type: 'dropdown', required: false, value: false, - description: 'Sends the message silently. Users will receive a notification with no sound.', + description: + 'Sends the message silently. Users will receive a notification with no sound.', variables: true, options: [ { diff --git a/packages/backend/src/apps/telegram-bot/auth/index.ts b/packages/backend/src/apps/telegram-bot/auth/index.js similarity index 70% rename from packages/backend/src/apps/telegram-bot/auth/index.ts rename to packages/backend/src/apps/telegram-bot/auth/index.js index 01e68c2f..c8a7aaa3 100644 --- a/packages/backend/src/apps/telegram-bot/auth/index.ts +++ b/packages/backend/src/apps/telegram-bot/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'token', label: 'Bot token', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/telegram-bot/auth/is-still-verified.js b/packages/backend/src/apps/telegram-bot/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/telegram-bot/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/telegram-bot/auth/is-still-verified.ts b/packages/backend/src/apps/telegram-bot/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/telegram-bot/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/telegram-bot/auth/verify-credentials.ts b/packages/backend/src/apps/telegram-bot/auth/verify-credentials.js similarity index 60% rename from packages/backend/src/apps/telegram-bot/auth/verify-credentials.ts rename to packages/backend/src/apps/telegram-bot/auth/verify-credentials.js index 17bbfa94..594fc1a8 100644 --- a/packages/backend/src/apps/telegram-bot/auth/verify-credentials.ts +++ b/packages/backend/src/apps/telegram-bot/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const { data } = await $.http.get('/getMe'); const { result: me } = data; diff --git a/packages/backend/src/apps/telegram-bot/common/add-auth-header.js b/packages/backend/src/apps/telegram-bot/common/add-auth-header.js new file mode 100644 index 00000000..0c0228dc --- /dev/null +++ b/packages/backend/src/apps/telegram-bot/common/add-auth-header.js @@ -0,0 +1,15 @@ +import { URL } from 'node:url'; + +const addAuthHeader = ($, requestConfig) => { + if ($.auth.data?.token) { + const token = $.auth.data.token; + requestConfig.baseURL = new URL( + `/bot${token}`, + requestConfig.baseURL + ).toString(); + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/telegram-bot/common/add-auth-header.ts b/packages/backend/src/apps/telegram-bot/common/add-auth-header.ts deleted file mode 100644 index aa17b14f..00000000 --- a/packages/backend/src/apps/telegram-bot/common/add-auth-header.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; -import { URL } from 'node:url'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data?.token) { - const token = $.auth.data.token as string; - requestConfig.baseURL = (new URL(`/bot${token}`, requestConfig.baseURL)).toString(); - } - - return requestConfig; -}; - -export default addAuthHeader; diff --git a/packages/backend/src/apps/telegram-bot/index.d.ts b/packages/backend/src/apps/telegram-bot/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/telegram-bot/index.ts b/packages/backend/src/apps/telegram-bot/index.js similarity index 67% rename from packages/backend/src/apps/telegram-bot/index.ts rename to packages/backend/src/apps/telegram-bot/index.js index 364e01d0..79aab075 100644 --- a/packages/backend/src/apps/telegram-bot/index.ts +++ b/packages/backend/src/apps/telegram-bot/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; export default defineApp({ name: 'Telegram', diff --git a/packages/backend/src/apps/todoist/actions/create-task/index.ts b/packages/backend/src/apps/todoist/actions/create-task/index.js similarity index 87% rename from packages/backend/src/apps/todoist/actions/create-task/index.ts rename to packages/backend/src/apps/todoist/actions/create-task/index.js index a3924486..239e2ed1 100644 --- a/packages/backend/src/apps/todoist/actions/create-task/index.ts +++ b/packages/backend/src/apps/todoist/actions/create-task/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create task', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Project ID', key: 'projectId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, source: { @@ -25,7 +25,7 @@ export default defineAction({ { label: 'Section ID', key: 'sectionId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, dependsOn: ['parameters.projectId'], @@ -47,7 +47,7 @@ export default defineAction({ { label: 'Labels', key: 'labels', - type: 'string' as const, + type: 'string', required: false, variables: true, description: @@ -56,7 +56,7 @@ export default defineAction({ { label: 'Content', key: 'content', - type: 'string' as const, + type: 'string', required: true, variables: true, description: 'Task content, may be markdown. Example: "Foo"', @@ -64,7 +64,7 @@ export default defineAction({ { label: 'Description', key: 'description', - type: 'string' as const, + type: 'string', required: false, variables: true, description: 'Task description, may be markdown. Example: "Foo"', @@ -76,7 +76,7 @@ export default defineAction({ const { projectId, sectionId, labels, content, description } = $.step.parameters; - const labelsArray = (labels as string).split(','); + const labelsArray = labels.split(','); const payload = { content, diff --git a/packages/backend/src/apps/todoist/actions/index.js b/packages/backend/src/apps/todoist/actions/index.js new file mode 100644 index 00000000..dc3e333a --- /dev/null +++ b/packages/backend/src/apps/todoist/actions/index.js @@ -0,0 +1,3 @@ +import createTask from './create-task/index.js'; + +export default [createTask]; diff --git a/packages/backend/src/apps/todoist/actions/index.ts b/packages/backend/src/apps/todoist/actions/index.ts deleted file mode 100644 index 14f24a09..00000000 --- a/packages/backend/src/apps/todoist/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import createTask from './create-task'; - -export default [createTask]; diff --git a/packages/backend/src/apps/todoist/auth/generate-auth-url.js b/packages/backend/src/apps/todoist/auth/generate-auth-url.js new file mode 100644 index 00000000..6c9cb2af --- /dev/null +++ b/packages/backend/src/apps/todoist/auth/generate-auth-url.js @@ -0,0 +1,15 @@ +import { URLSearchParams } from 'url'; + +export default async function generateAuthUrl($) { + const scopes = ['data:read_write']; + const searchParams = new URLSearchParams({ + client_id: $.auth.data.clientId, + scope: scopes.join(','), + }); + + const url = `${$.app.baseUrl}/oauth/authorize?${searchParams.toString()}`; + + await $.auth.set({ + url, + }); +} diff --git a/packages/backend/src/apps/todoist/auth/generate-auth-url.ts b/packages/backend/src/apps/todoist/auth/generate-auth-url.ts deleted file mode 100644 index fb945f00..00000000 --- a/packages/backend/src/apps/todoist/auth/generate-auth-url.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import { URLSearchParams } from 'url'; - -export default async function generateAuthUrl($: IGlobalVariable) { - const scopes = ['data:read_write']; - const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - scope: scopes.join(','), - }); - - const url = `${$.app.baseUrl - }/oauth/authorize?${searchParams.toString()}`; - - await $.auth.set({ - url, - }); -} diff --git a/packages/backend/src/apps/todoist/auth/index.ts b/packages/backend/src/apps/todoist/auth/index.js similarity index 80% rename from packages/backend/src/apps/todoist/auth/index.ts rename to packages/backend/src/apps/todoist/auth/index.js index a7265738..3c9037ab 100644 --- a/packages/backend/src/apps/todoist/auth/index.ts +++ b/packages/backend/src/apps/todoist/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/todoist/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'screenName', label: 'Screen Name', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -42,7 +42,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/todoist/auth/is-still-verified.js b/packages/backend/src/apps/todoist/auth/is-still-verified.js new file mode 100644 index 00000000..367cf917 --- /dev/null +++ b/packages/backend/src/apps/todoist/auth/is-still-verified.js @@ -0,0 +1,6 @@ +const isStillVerified = async ($) => { + await $.http.get('/projects'); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/todoist/auth/is-still-verified.ts b/packages/backend/src/apps/todoist/auth/is-still-verified.ts deleted file mode 100644 index 70e9a473..00000000 --- a/packages/backend/src/apps/todoist/auth/is-still-verified.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const isStillVerified = async ($: IGlobalVariable) => { - await $.http.get('/projects'); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/todoist/auth/verify-credentials.js b/packages/backend/src/apps/todoist/auth/verify-credentials.js new file mode 100644 index 00000000..92d0a40a --- /dev/null +++ b/packages/backend/src/apps/todoist/auth/verify-credentials.js @@ -0,0 +1,14 @@ +const verifyCredentials = async ($) => { + const { data } = await $.http.post(`${$.app.baseUrl}/oauth/access_token`, { + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + code: $.auth.data.code, + }); + + await $.auth.set({ + tokenType: data.token_type, + accessToken: data.access_token, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/todoist/auth/verify-credentials.ts b/packages/backend/src/apps/todoist/auth/verify-credentials.ts deleted file mode 100644 index 3765a897..00000000 --- a/packages/backend/src/apps/todoist/auth/verify-credentials.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - const { data } = await $.http.post( - `${$.app.baseUrl}/oauth/access_token`, - { - client_id: $.auth.data.clientId, - client_secret: $.auth.data.clientSecret, - code: $.auth.data.code, - }, - ); - - await $.auth.set({ - tokenType: data.token_type, - accessToken: data.access_token, - }); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/todoist/common/add-auth-header.ts b/packages/backend/src/apps/todoist/common/add-auth-header.js similarity index 71% rename from packages/backend/src/apps/todoist/common/add-auth-header.ts rename to packages/backend/src/apps/todoist/common/add-auth-header.js index aafa214b..2730feea 100644 --- a/packages/backend/src/apps/todoist/common/add-auth-header.ts +++ b/packages/backend/src/apps/todoist/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const authData = $.auth.data; if (authData?.accessToken && authData?.tokenType) { const authorizationHeader = `${authData.tokenType} ${authData.accessToken}`; diff --git a/packages/backend/src/apps/todoist/dynamic-data/index.js b/packages/backend/src/apps/todoist/dynamic-data/index.js new file mode 100644 index 00000000..31040d19 --- /dev/null +++ b/packages/backend/src/apps/todoist/dynamic-data/index.js @@ -0,0 +1,5 @@ +import listProjects from './list-projects/index.js'; +import listSections from './list-sections/index.js'; +import listLabels from './list-labels/index.js'; + +export default [listProjects, listSections, listLabels]; diff --git a/packages/backend/src/apps/todoist/dynamic-data/index.ts b/packages/backend/src/apps/todoist/dynamic-data/index.ts deleted file mode 100644 index cc6c6000..00000000 --- a/packages/backend/src/apps/todoist/dynamic-data/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import listProjects from './list-projects'; -import listSections from './list-sections'; -import listLabels from './list-labels'; - -export default [listProjects, listSections, listLabels]; diff --git a/packages/backend/src/apps/todoist/dynamic-data/list-labels/index.ts b/packages/backend/src/apps/todoist/dynamic-data/list-labels/index.js similarity index 59% rename from packages/backend/src/apps/todoist/dynamic-data/list-labels/index.ts rename to packages/backend/src/apps/todoist/dynamic-data/list-labels/index.js index 46fb5257..bee03fa6 100644 --- a/packages/backend/src/apps/todoist/dynamic-data/list-labels/index.ts +++ b/packages/backend/src/apps/todoist/dynamic-data/list-labels/index.js @@ -1,13 +1,11 @@ -import { IGlobalVariable } from '@automatisch/types'; - export default { name: 'List labels', key: 'listLabels', - async run($: IGlobalVariable) { + async run($) { const response = await $.http.get('/labels'); - response.data = response.data.map((label: { name: string }) => { + response.data = response.data.map((label) => { return { value: label.name, name: label.name, diff --git a/packages/backend/src/apps/todoist/dynamic-data/list-projects/index.ts b/packages/backend/src/apps/todoist/dynamic-data/list-projects/index.js similarity index 57% rename from packages/backend/src/apps/todoist/dynamic-data/list-projects/index.ts rename to packages/backend/src/apps/todoist/dynamic-data/list-projects/index.js index ca10bf72..ad131739 100644 --- a/packages/backend/src/apps/todoist/dynamic-data/list-projects/index.ts +++ b/packages/backend/src/apps/todoist/dynamic-data/list-projects/index.js @@ -1,13 +1,11 @@ -import { IGlobalVariable } from '@automatisch/types'; - export default { name: 'List projects', key: 'listProjects', - async run($: IGlobalVariable) { + async run($) { const response = await $.http.get('/projects'); - response.data = response.data.map((project: { id: string, name: string }) => { + response.data = response.data.map((project) => { return { value: project.id, name: project.name, diff --git a/packages/backend/src/apps/todoist/dynamic-data/list-sections/index.js b/packages/backend/src/apps/todoist/dynamic-data/list-sections/index.js new file mode 100644 index 00000000..c4ea1d65 --- /dev/null +++ b/packages/backend/src/apps/todoist/dynamic-data/list-sections/index.js @@ -0,0 +1,21 @@ +export default { + name: 'List sections', + key: 'listSections', + + async run($) { + const params = { + project_id: $.step.parameters.projectId, + }; + + const response = await $.http.get('/sections', { params }); + + response.data = response.data.map((section) => { + return { + value: section.id, + name: section.name, + }; + }); + + return response; + }, +}; diff --git a/packages/backend/src/apps/todoist/dynamic-data/list-sections/index.ts b/packages/backend/src/apps/todoist/dynamic-data/list-sections/index.ts deleted file mode 100644 index cb4c23d9..00000000 --- a/packages/backend/src/apps/todoist/dynamic-data/list-sections/index.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -export default { - name: 'List sections', - key: 'listSections', - - async run($: IGlobalVariable) { - const params = { - project_id: ($.step.parameters.projectId as string), - }; - - const response = await $.http.get('/sections', {params}); - - response.data = response.data.map((section: { id: string, name: string }) => { - return { - value: section.id, - name: section.name, - }; - }); - - return response; - }, -}; diff --git a/packages/backend/src/apps/todoist/index.d.ts b/packages/backend/src/apps/todoist/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/todoist/index.ts b/packages/backend/src/apps/todoist/index.js similarity index 59% rename from packages/backend/src/apps/todoist/index.ts rename to packages/backend/src/apps/todoist/index.js index a1850597..bfc15109 100644 --- a/packages/backend/src/apps/todoist/index.ts +++ b/packages/backend/src/apps/todoist/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Todoist', diff --git a/packages/backend/src/apps/todoist/triggers/get-tasks/get-tasks.js b/packages/backend/src/apps/todoist/triggers/get-tasks/get-tasks.js new file mode 100644 index 00000000..b4b0b893 --- /dev/null +++ b/packages/backend/src/apps/todoist/triggers/get-tasks/get-tasks.js @@ -0,0 +1,26 @@ +const getActiveTasks = async ($) => { + const params = { + project_id: $.step.parameters.projectId?.trim(), + section_id: $.step.parameters.sectionId?.trim(), + label: $.step.parameters.label?.trim(), + filter: $.step.parameters.filter?.trim(), + }; + + const response = await $.http.get('/tasks', { params }); + + // todoist api doesn't offer sorting, so we inverse sort on id here + response.data.sort((a, b) => { + return b.id - a.id; + }); + + for (const task of response.data) { + $.pushTriggerItem({ + raw: task, + meta: { + internalId: task.id, + }, + }); + } +}; + +export default getActiveTasks; diff --git a/packages/backend/src/apps/todoist/triggers/get-tasks/get-tasks.ts b/packages/backend/src/apps/todoist/triggers/get-tasks/get-tasks.ts deleted file mode 100644 index 089d02fe..00000000 --- a/packages/backend/src/apps/todoist/triggers/get-tasks/get-tasks.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getActiveTasks = async ($: IGlobalVariable) => { - - const params = { - project_id: ($.step.parameters.projectId as string)?.trim(), - section_id: ($.step.parameters.sectionId as string)?.trim(), - label: ($.step.parameters.label as string)?.trim(), - filter: ($.step.parameters.filter as string)?.trim(), - }; - - const response = await $.http.get('/tasks', { params }); - - // todoist api doesn't offer sorting, so we inverse sort on id here - response.data.sort((a: { id: number; }, b: { id: number; }) => { - return b.id - a.id; - }) - - for (const task of response.data) { - $.pushTriggerItem({ - raw: task, - meta:{ - internalId: task.id as string, - } - }); - } -}; - - -export default getActiveTasks; diff --git a/packages/backend/src/apps/todoist/triggers/get-tasks/index.ts b/packages/backend/src/apps/todoist/triggers/get-tasks/index.js similarity index 86% rename from packages/backend/src/apps/todoist/triggers/get-tasks/index.ts rename to packages/backend/src/apps/todoist/triggers/get-tasks/index.js index cf3d7242..74dedd13 100644 --- a/packages/backend/src/apps/todoist/triggers/get-tasks/index.ts +++ b/packages/backend/src/apps/todoist/triggers/get-tasks/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import getActiveTasks from './get-tasks'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import getActiveTasks from './get-tasks.js'; export default defineTrigger({ name: 'Get active tasks', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Project ID', key: 'projectId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: false, source: { @@ -27,7 +27,7 @@ export default defineTrigger({ { label: 'Section ID', key: 'sectionId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: false, dependsOn: ['parameters.projectId'], @@ -49,7 +49,7 @@ export default defineTrigger({ { label: 'Label', key: 'label', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: false, source: { @@ -66,7 +66,7 @@ export default defineTrigger({ { label: 'Filter', key: 'filter', - type: 'string' as const, + type: 'string', required: false, variables: false, description: diff --git a/packages/backend/src/apps/todoist/triggers/index.js b/packages/backend/src/apps/todoist/triggers/index.js new file mode 100644 index 00000000..deac848d --- /dev/null +++ b/packages/backend/src/apps/todoist/triggers/index.js @@ -0,0 +1,3 @@ +import getTasks from './get-tasks/index.js'; + +export default [getTasks]; diff --git a/packages/backend/src/apps/todoist/triggers/index.ts b/packages/backend/src/apps/todoist/triggers/index.ts deleted file mode 100644 index a52a15d7..00000000 --- a/packages/backend/src/apps/todoist/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import getTasks from './get-tasks'; - -export default [getTasks]; diff --git a/packages/backend/src/apps/trello/actions/create-card/index.ts b/packages/backend/src/apps/trello/actions/create-card/index.js similarity index 85% rename from packages/backend/src/apps/trello/actions/create-card/index.ts rename to packages/backend/src/apps/trello/actions/create-card/index.js index fbd1ab81..a407bd7f 100644 --- a/packages/backend/src/apps/trello/actions/create-card/index.ts +++ b/packages/backend/src/apps/trello/actions/create-card/index.js @@ -1,5 +1,4 @@ -import { IJSONArray, IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create card', @@ -9,7 +8,7 @@ export default defineAction({ { label: 'Board', key: 'boardId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: '', variables: true, @@ -27,7 +26,7 @@ export default defineAction({ { label: 'List', key: 'listId', - type: 'dropdown' as const, + type: 'dropdown', required: true, dependsOn: ['parameters.boardId'], description: '', @@ -50,7 +49,7 @@ export default defineAction({ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: true, variables: true, description: '', @@ -58,7 +57,7 @@ export default defineAction({ { label: 'Description', key: 'description', - type: 'string' as const, + type: 'string', required: false, variables: true, description: '', @@ -67,7 +66,7 @@ export default defineAction({ { label: 'Label', key: 'label', - type: 'dropdown' as const, + type: 'dropdown', required: false, dependsOn: ['parameters.boardId'], description: 'Select a color tag to attach to the card.', @@ -90,7 +89,7 @@ export default defineAction({ { label: 'Card Position', key: 'cardPosition', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -108,14 +107,14 @@ export default defineAction({ { label: 'Members', key: 'memberIds', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Member', key: 'memberId', - type: 'dropdown' as const, + type: 'dropdown', required: false, dependsOn: ['parameters.boardId'], description: '', @@ -140,7 +139,7 @@ export default defineAction({ { label: 'Due Date', key: 'dueDate', - type: 'string' as const, + type: 'string', required: false, variables: true, description: 'Format: mm-dd-yyyy HH:mm:ss or yyyy-MM-dd HH:mm:ss.', @@ -148,7 +147,7 @@ export default defineAction({ { label: 'URL Attachment', key: 'urlSource', - type: 'string' as const, + type: 'string', required: false, variables: true, description: 'A URL to attach to the card.', @@ -166,10 +165,8 @@ export default defineAction({ urlSource, } = $.step.parameters; - const memberIds = $.step.parameters.memberIds as IJSONArray; - const idMembers = memberIds.map( - (memberId: IJSONObject) => memberId.memberId - ); + const memberIds = $.step.parameters.memberIds; + const idMembers = memberIds.map((memberId) => memberId.memberId); const fields = { name, diff --git a/packages/backend/src/apps/trello/actions/index.js b/packages/backend/src/apps/trello/actions/index.js new file mode 100644 index 00000000..a44a1bf9 --- /dev/null +++ b/packages/backend/src/apps/trello/actions/index.js @@ -0,0 +1,3 @@ +import createCard from './create-card/index.js'; + +export default [createCard]; diff --git a/packages/backend/src/apps/trello/actions/index.ts b/packages/backend/src/apps/trello/actions/index.ts deleted file mode 100644 index 90c37fb0..00000000 --- a/packages/backend/src/apps/trello/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import createCard from './create-card'; - -export default [createCard]; diff --git a/packages/backend/src/apps/trello/auth/generate-auth-url.ts b/packages/backend/src/apps/trello/auth/generate-auth-url.js similarity index 53% rename from packages/backend/src/apps/trello/auth/generate-auth-url.ts rename to packages/backend/src/apps/trello/auth/generate-auth-url.js index 9443c608..80bd2ea2 100644 --- a/packages/backend/src/apps/trello/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/trello/auth/generate-auth-url.js @@ -1,17 +1,16 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ return_url: redirectUri, scope: authScope.join(','), expiration: 'never', - key: $.auth.data.apiKey as string, + key: $.auth.data.apiKey, response_type: 'token', }); diff --git a/packages/backend/src/apps/trello/auth/index.ts b/packages/backend/src/apps/trello/auth/index.js similarity index 72% rename from packages/backend/src/apps/trello/auth/index.ts rename to packages/backend/src/apps/trello/auth/index.js index e5dd68d3..cf7b881a 100644 --- a/packages/backend/src/apps/trello/auth/index.ts +++ b/packages/backend/src/apps/trello/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/trello/connections/add', @@ -18,7 +18,7 @@ export default { { key: 'apiKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/trello/auth/is-still-verified.js b/packages/backend/src/apps/trello/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/trello/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/trello/auth/is-still-verified.ts b/packages/backend/src/apps/trello/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/trello/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/trello/auth/verify-credentials.ts b/packages/backend/src/apps/trello/auth/verify-credentials.js similarity index 57% rename from packages/backend/src/apps/trello/auth/verify-credentials.ts rename to packages/backend/src/apps/trello/auth/verify-credentials.js index eb463523..ebf87d9b 100644 --- a/packages/backend/src/apps/trello/auth/verify-credentials.ts +++ b/packages/backend/src/apps/trello/auth/verify-credentials.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const currentUser = await getCurrentUser($); const screenName = [currentUser.username, currentUser.email] .filter(Boolean) diff --git a/packages/backend/src/apps/trello/common/add-auth-header.ts b/packages/backend/src/apps/trello/common/add-auth-header.js similarity index 70% rename from packages/backend/src/apps/trello/common/add-auth-header.ts rename to packages/backend/src/apps/trello/common/add-auth-header.js index 22e2c540..c82490b9 100644 --- a/packages/backend/src/apps/trello/common/add-auth-header.ts +++ b/packages/backend/src/apps/trello/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.token) { requestConfig.headers.Authorization = `OAuth oauth_consumer_key="${$.auth.data.apiKey}", oauth_token="${$.auth.data.token}"`; } diff --git a/packages/backend/src/apps/trello/common/auth-scope.js b/packages/backend/src/apps/trello/common/auth-scope.js new file mode 100644 index 00000000..805e5b7f --- /dev/null +++ b/packages/backend/src/apps/trello/common/auth-scope.js @@ -0,0 +1,3 @@ +const authScope = ['read', 'write', 'account']; + +export default authScope; diff --git a/packages/backend/src/apps/trello/common/auth-scope.ts b/packages/backend/src/apps/trello/common/auth-scope.ts deleted file mode 100644 index 785ad4ea..00000000 --- a/packages/backend/src/apps/trello/common/auth-scope.ts +++ /dev/null @@ -1,3 +0,0 @@ -const authScope: string[] = ['read', 'write', 'account']; - -export default authScope; diff --git a/packages/backend/src/apps/trello/common/get-current-user.ts b/packages/backend/src/apps/trello/common/get-current-user.js similarity index 50% rename from packages/backend/src/apps/trello/common/get-current-user.ts rename to packages/backend/src/apps/trello/common/get-current-user.js index 64b0daa1..a2657cbf 100644 --- a/packages/backend/src/apps/trello/common/get-current-user.ts +++ b/packages/backend/src/apps/trello/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get('/1/members/me/'); const currentUser = response.data; diff --git a/packages/backend/src/apps/trello/dynamic-data/index.js b/packages/backend/src/apps/trello/dynamic-data/index.js new file mode 100644 index 00000000..2cc30ab9 --- /dev/null +++ b/packages/backend/src/apps/trello/dynamic-data/index.js @@ -0,0 +1,6 @@ +import listBoardLabels from './list-board-labels/index.js'; +import listBoardLists from './list-board-lists/index.js'; +import listBoards from './list-boards/index.js'; +import listMembers from './listMembers/index.js'; + +export default [listBoardLabels, listBoardLists, listBoards, listMembers]; diff --git a/packages/backend/src/apps/trello/dynamic-data/index.ts b/packages/backend/src/apps/trello/dynamic-data/index.ts deleted file mode 100644 index 232aa556..00000000 --- a/packages/backend/src/apps/trello/dynamic-data/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import listBoardLabels from './list-board-labels'; -import listBoardLists from './list-board-lists'; -import listBoards from './list-boards'; -import listMembers from './listMembers'; - -export default [listBoardLabels, listBoardLists, listBoards, listMembers]; diff --git a/packages/backend/src/apps/trello/dynamic-data/list-board-labels/index.ts b/packages/backend/src/apps/trello/dynamic-data/list-board-labels/index.js similarity index 77% rename from packages/backend/src/apps/trello/dynamic-data/list-board-labels/index.ts rename to packages/backend/src/apps/trello/dynamic-data/list-board-labels/index.js index a6cac58d..981d62d9 100644 --- a/packages/backend/src/apps/trello/dynamic-data/list-board-labels/index.ts +++ b/packages/backend/src/apps/trello/dynamic-data/list-board-labels/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List board labels', key: 'listBoardLabels', - async run($: IGlobalVariable) { - const boardLabels: { - data: IJSONObject[]; - } = { + async run($) { + const boardLabels = { data: [], }; diff --git a/packages/backend/src/apps/trello/dynamic-data/list-board-lists/index.ts b/packages/backend/src/apps/trello/dynamic-data/list-board-lists/index.js similarity index 73% rename from packages/backend/src/apps/trello/dynamic-data/list-board-lists/index.ts rename to packages/backend/src/apps/trello/dynamic-data/list-board-lists/index.js index fe22c10c..ea46115f 100644 --- a/packages/backend/src/apps/trello/dynamic-data/list-board-lists/index.ts +++ b/packages/backend/src/apps/trello/dynamic-data/list-board-lists/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List board lists', key: 'listBoardLists', - async run($: IGlobalVariable) { - const boards: { - data: IJSONObject[]; - } = { + async run($) { + const boards = { data: [], }; diff --git a/packages/backend/src/apps/trello/dynamic-data/list-boards/index.ts b/packages/backend/src/apps/trello/dynamic-data/list-boards/index.js similarity index 68% rename from packages/backend/src/apps/trello/dynamic-data/list-boards/index.ts rename to packages/backend/src/apps/trello/dynamic-data/list-boards/index.js index 83749839..2cf198ae 100644 --- a/packages/backend/src/apps/trello/dynamic-data/list-boards/index.ts +++ b/packages/backend/src/apps/trello/dynamic-data/list-boards/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List boards', key: 'listBoards', - async run($: IGlobalVariable) { - const boards: { - data: IJSONObject[]; - } = { + async run($) { + const boards = { data: [], }; diff --git a/packages/backend/src/apps/trello/dynamic-data/listMembers/index.ts b/packages/backend/src/apps/trello/dynamic-data/listMembers/index.js similarity index 74% rename from packages/backend/src/apps/trello/dynamic-data/listMembers/index.ts rename to packages/backend/src/apps/trello/dynamic-data/listMembers/index.js index 3070f542..4f007020 100644 --- a/packages/backend/src/apps/trello/dynamic-data/listMembers/index.ts +++ b/packages/backend/src/apps/trello/dynamic-data/listMembers/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List members', key: 'listMembers', - async run($: IGlobalVariable) { - const members: { - data: IJSONObject[]; - } = { + async run($) { + const members = { data: [], }; diff --git a/packages/backend/src/apps/trello/index.d.ts b/packages/backend/src/apps/trello/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/trello/index.ts b/packages/backend/src/apps/trello/index.js similarity index 61% rename from packages/backend/src/apps/trello/index.ts rename to packages/backend/src/apps/trello/index.js index 93552675..f98f7958 100644 --- a/packages/backend/src/apps/trello/index.ts +++ b/packages/backend/src/apps/trello/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Trello', diff --git a/packages/backend/src/apps/twilio/actions/index.js b/packages/backend/src/apps/twilio/actions/index.js new file mode 100644 index 00000000..18a261f9 --- /dev/null +++ b/packages/backend/src/apps/twilio/actions/index.js @@ -0,0 +1,3 @@ +import sendSms from './send-sms/index.js'; + +export default [sendSms]; diff --git a/packages/backend/src/apps/twilio/actions/index.ts b/packages/backend/src/apps/twilio/actions/index.ts deleted file mode 100644 index d1723dc2..00000000 --- a/packages/backend/src/apps/twilio/actions/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sendSms from './send-sms'; - -export default [sendSms]; diff --git a/packages/backend/src/apps/twilio/actions/send-sms/index.ts b/packages/backend/src/apps/twilio/actions/send-sms/index.js similarity index 73% rename from packages/backend/src/apps/twilio/actions/send-sms/index.ts rename to packages/backend/src/apps/twilio/actions/send-sms/index.js index f983c5bd..0e0c394e 100644 --- a/packages/backend/src/apps/twilio/actions/send-sms/index.ts +++ b/packages/backend/src/apps/twilio/actions/send-sms/index.js @@ -1,5 +1,5 @@ import { URLSearchParams } from 'node:url'; -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Send an SMS', @@ -9,7 +9,7 @@ export default defineAction({ { label: 'From Number', key: 'fromNumber', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The number to send the SMS from. Include country code. Example: 15551234567', @@ -28,7 +28,7 @@ export default defineAction({ { label: 'To Number', key: 'toNumber', - type: 'string' as const, + type: 'string', required: true, description: 'The number to send the SMS to. Include country code. Example: 15551234567', @@ -37,7 +37,7 @@ export default defineAction({ { label: 'Message', key: 'message', - type: 'string' as const, + type: 'string', required: true, description: 'The message to send.', variables: true, @@ -46,10 +46,10 @@ export default defineAction({ async run($) { const requestPath = `/2010-04-01/Accounts/${$.auth.data.accountSid}/Messages.json`; - const messageBody = $.step.parameters.message as string; + const messageBody = $.step.parameters.message; - const fromNumber = ($.step.parameters.fromNumber as string).trim(); - const toNumber = ($.step.parameters.toNumber as string).trim(); + const fromNumber = $.step.parameters.fromNumber.trim(); + const toNumber = $.step.parameters.toNumber.trim(); const payload = new URLSearchParams({ Body: messageBody, @@ -57,10 +57,7 @@ export default defineAction({ To: toNumber, }).toString(); - const response = await $.http.post( - requestPath, - payload, - ); + const response = await $.http.post(requestPath, payload); $.setActionItem({ raw: response.data }); }, diff --git a/packages/backend/src/apps/twilio/auth/index.ts b/packages/backend/src/apps/twilio/auth/index.js similarity index 79% rename from packages/backend/src/apps/twilio/auth/index.ts rename to packages/backend/src/apps/twilio/auth/index.js index 645e8874..d71192da 100644 --- a/packages/backend/src/apps/twilio/auth/index.ts +++ b/packages/backend/src/apps/twilio/auth/index.js @@ -1,12 +1,12 @@ -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'accountSid', label: 'Account SID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -18,7 +18,7 @@ export default { { key: 'authToken', label: 'Auth Token', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/twilio/auth/is-still-verified.js b/packages/backend/src/apps/twilio/auth/is-still-verified.js new file mode 100644 index 00000000..6663679a --- /dev/null +++ b/packages/backend/src/apps/twilio/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/twilio/auth/is-still-verified.ts b/packages/backend/src/apps/twilio/auth/is-still-verified.ts deleted file mode 100644 index 66bb963e..00000000 --- a/packages/backend/src/apps/twilio/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import verifyCredentials from './verify-credentials'; - -const isStillVerified = async ($: IGlobalVariable) => { - await verifyCredentials($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/twilio/auth/verify-credentials.ts b/packages/backend/src/apps/twilio/auth/verify-credentials.js similarity index 59% rename from packages/backend/src/apps/twilio/auth/verify-credentials.ts rename to packages/backend/src/apps/twilio/auth/verify-credentials.js index df68bb88..89f36920 100644 --- a/packages/backend/src/apps/twilio/auth/verify-credentials.ts +++ b/packages/backend/src/apps/twilio/auth/verify-credentials.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { await $.http.get('/2010-04-01/Accounts.json?PageSize=1'); await $.auth.set({ diff --git a/packages/backend/src/apps/twilio/common/add-auth-header.ts b/packages/backend/src/apps/twilio/common/add-auth-header.js similarity index 56% rename from packages/backend/src/apps/twilio/common/add-auth-header.ts rename to packages/backend/src/apps/twilio/common/add-auth-header.js index f5f47f85..097edf0a 100644 --- a/packages/backend/src/apps/twilio/common/add-auth-header.ts +++ b/packages/backend/src/apps/twilio/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ( requestConfig.headers && $.auth.data?.accountSid && @@ -9,8 +7,8 @@ const addAuthHeader: TBeforeRequest = ($, requestConfig) => { requestConfig.headers['Content-Type'] = 'application/x-www-form-urlencoded'; requestConfig.auth = { - username: $.auth.data.accountSid as string, - password: $.auth.data.authToken as string, + username: $.auth.data.accountSid, + password: $.auth.data.authToken, }; } diff --git a/packages/backend/src/apps/twilio/common/get-incoming-phone-number.js b/packages/backend/src/apps/twilio/common/get-incoming-phone-number.js new file mode 100644 index 00000000..cb2cdff0 --- /dev/null +++ b/packages/backend/src/apps/twilio/common/get-incoming-phone-number.js @@ -0,0 +1,7 @@ +export default async function getIncomingPhoneNumber($) { + const phoneNumberSid = $.step.parameters.phoneNumberSid; + const path = `/2010-04-01/Accounts/${$.auth.data.accountSid}/IncomingPhoneNumbers/${phoneNumberSid}.json`; + const response = await $.http.get(path); + + return response.data; +} diff --git a/packages/backend/src/apps/twilio/common/get-incoming-phone-number.ts b/packages/backend/src/apps/twilio/common/get-incoming-phone-number.ts deleted file mode 100644 index 53abbe09..00000000 --- a/packages/backend/src/apps/twilio/common/get-incoming-phone-number.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { IGlobalVariable } from "@automatisch/types"; - -type Response = { - sid: string; - phone_number: string; -}; - -export default async function getIncomingPhoneNumber($: IGlobalVariable) { - const phoneNumberSid = $.step.parameters.phoneNumberSid as string; - const path = `/2010-04-01/Accounts/${$.auth.data.accountSid}/IncomingPhoneNumbers/${phoneNumberSid}.json`; - const response = await $.http.get(path); - - return response.data; -}; diff --git a/packages/backend/src/apps/twilio/dynamic-data/index.ts b/packages/backend/src/apps/twilio/dynamic-data/index.js similarity index 87% rename from packages/backend/src/apps/twilio/dynamic-data/index.ts rename to packages/backend/src/apps/twilio/dynamic-data/index.js index d20d4347..758d4abe 100644 --- a/packages/backend/src/apps/twilio/dynamic-data/index.ts +++ b/packages/backend/src/apps/twilio/dynamic-data/index.js @@ -1,3 +1,3 @@ -import listIncomingPhoneNumbers from './list-incoming-phone-numbers'; +import listIncomingPhoneNumbers from './list-incoming-phone-numbers/index.js'; export default [listIncomingPhoneNumbers]; diff --git a/packages/backend/src/apps/twilio/dynamic-data/list-incoming-phone-numbers/index.ts b/packages/backend/src/apps/twilio/dynamic-data/list-incoming-phone-numbers/index.js similarity index 59% rename from packages/backend/src/apps/twilio/dynamic-data/list-incoming-phone-numbers/index.ts rename to packages/backend/src/apps/twilio/dynamic-data/list-incoming-phone-numbers/index.js index 0e36af65..8249dee8 100644 --- a/packages/backend/src/apps/twilio/dynamic-data/list-incoming-phone-numbers/index.ts +++ b/packages/backend/src/apps/twilio/dynamic-data/list-incoming-phone-numbers/index.js @@ -1,37 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type TResponse = { - data: IJSONObject[]; - error?: IJSONObject; -}; - -type TIncomingPhoneNumber = { - phone_number: string; - friendly_name: string; - sid: string; - capabilities: { - sms: boolean; - }; -}; - -type TResponseData = { - incoming_phone_numbers: TIncomingPhoneNumber[]; - next_page_uri: string; -}; - export default { name: 'List incoming phone numbers', key: 'listIncomingPhoneNumbers', - async run($: IGlobalVariable) { - const valueType = $.step.parameters.valueType as string; + async run($) { + const valueType = $.step.parameters.valueType; const isSid = valueType === 'sid'; - const aggregatedResponse: TResponse = { data: [] }; + const aggregatedResponse = { data: [] }; let pathname = `/2010-04-01/Accounts/${$.auth.data.accountSid}/IncomingPhoneNumbers.json`; do { - const response = await $.http.get(pathname); + const response = (await $.http.get) < TResponseData > pathname; for (const incomingPhoneNumber of response.data.incoming_phone_numbers) { if (incomingPhoneNumber.capabilities.sms === false) { diff --git a/packages/backend/src/apps/twilio/index.d.ts b/packages/backend/src/apps/twilio/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/twilio/index.ts b/packages/backend/src/apps/twilio/index.js similarity index 58% rename from packages/backend/src/apps/twilio/index.ts rename to packages/backend/src/apps/twilio/index.js index f1684dd5..ad883ecb 100644 --- a/packages/backend/src/apps/twilio/index.ts +++ b/packages/backend/src/apps/twilio/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Twilio', diff --git a/packages/backend/src/apps/twilio/triggers/index.js b/packages/backend/src/apps/twilio/triggers/index.js new file mode 100644 index 00000000..c7219e50 --- /dev/null +++ b/packages/backend/src/apps/twilio/triggers/index.js @@ -0,0 +1,3 @@ +import receiveSms from './receive-sms/index.js'; + +export default [receiveSms]; diff --git a/packages/backend/src/apps/twilio/triggers/index.ts b/packages/backend/src/apps/twilio/triggers/index.ts deleted file mode 100644 index 04e1504d..00000000 --- a/packages/backend/src/apps/twilio/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import receiveSms from './receive-sms'; - -export default [receiveSms]; diff --git a/packages/backend/src/apps/twilio/triggers/receive-sms/fetch-messages.ts b/packages/backend/src/apps/twilio/triggers/receive-sms/fetch-messages.js similarity index 78% rename from packages/backend/src/apps/twilio/triggers/receive-sms/fetch-messages.ts rename to packages/backend/src/apps/twilio/triggers/receive-sms/fetch-messages.js index fdf8a488..7445cedd 100644 --- a/packages/backend/src/apps/twilio/triggers/receive-sms/fetch-messages.ts +++ b/packages/backend/src/apps/twilio/triggers/receive-sms/fetch-messages.js @@ -1,7 +1,6 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; -import getIncomingPhoneNumber from '../../common/get-incoming-phone-number'; +import getIncomingPhoneNumber from '../../common/get-incoming-phone-number.js'; -const fetchMessages = async ($: IGlobalVariable) => { +const fetchMessages = async ($) => { const incomingPhoneNumber = await getIncomingPhoneNumber($); let response; @@ -10,7 +9,7 @@ const fetchMessages = async ($: IGlobalVariable) => { do { response = await $.http.get(requestPath); - response.data.messages.forEach((message: IJSONObject) => { + response.data.messages.forEach((message) => { const computedMessage = { To: message.to, Body: message.body, @@ -26,7 +25,7 @@ const fetchMessages = async ($: IGlobalVariable) => { const dataItem = { raw: computedMessage, meta: { - internalId: message.date_sent as string, + internalId: message.date_sent, }, }; diff --git a/packages/backend/src/apps/twilio/triggers/receive-sms/index.ts b/packages/backend/src/apps/twilio/triggers/receive-sms/index.js similarity index 85% rename from packages/backend/src/apps/twilio/triggers/receive-sms/index.ts rename to packages/backend/src/apps/twilio/triggers/receive-sms/index.js index a0259ed4..d5224ca1 100644 --- a/packages/backend/src/apps/twilio/triggers/receive-sms/index.ts +++ b/packages/backend/src/apps/twilio/triggers/receive-sms/index.js @@ -1,8 +1,8 @@ import { URLSearchParams } from 'node:url'; import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; -import fetchMessages from './fetch-messages'; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import fetchMessages from './fetch-messages.js'; export default defineTrigger({ name: 'Receive SMS', @@ -13,7 +13,7 @@ export default defineTrigger({ { label: 'To Number', key: 'phoneNumberSid', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'The number to receive the SMS on. It should be a Twilio number.', @@ -65,7 +65,7 @@ export default defineTrigger({ }, async registerHook($) { - const phoneNumberSid = $.step.parameters.phoneNumberSid as string; + const phoneNumberSid = $.step.parameters.phoneNumberSid; const payload = new URLSearchParams({ SmsUrl: $.webhookUrl, }).toString(); @@ -77,7 +77,7 @@ export default defineTrigger({ }, async unregisterHook($) { - const phoneNumberSid = $.step.parameters.phoneNumberSid as string; + const phoneNumberSid = $.step.parameters.phoneNumberSid; const payload = new URLSearchParams({ SmsUrl: '', }).toString(); diff --git a/packages/backend/src/apps/twitter/actions/create-tweet/index.ts b/packages/backend/src/apps/twitter/actions/create-tweet/index.js similarity index 83% rename from packages/backend/src/apps/twitter/actions/create-tweet/index.ts rename to packages/backend/src/apps/twitter/actions/create-tweet/index.js index d7f795f6..f3f6d14f 100644 --- a/packages/backend/src/apps/twitter/actions/create-tweet/index.ts +++ b/packages/backend/src/apps/twitter/actions/create-tweet/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Create tweet', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Tweet body', key: 'tweet', - type: 'string' as const, + type: 'string', required: true, description: 'The content of your new tweet.', variables: true, diff --git a/packages/backend/src/apps/twitter/actions/index.js b/packages/backend/src/apps/twitter/actions/index.js new file mode 100644 index 00000000..b090ea04 --- /dev/null +++ b/packages/backend/src/apps/twitter/actions/index.js @@ -0,0 +1,4 @@ +import createTweet from './create-tweet/index.js'; +import searchUser from './search-user/index.js'; + +export default [createTweet, searchUser]; diff --git a/packages/backend/src/apps/twitter/actions/index.ts b/packages/backend/src/apps/twitter/actions/index.ts deleted file mode 100644 index 60053584..00000000 --- a/packages/backend/src/apps/twitter/actions/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import createTweet from './create-tweet'; -import searchUser from './search-user'; - -export default [createTweet, searchUser]; diff --git a/packages/backend/src/apps/twitter/actions/search-user/index.js b/packages/backend/src/apps/twitter/actions/search-user/index.js new file mode 100644 index 00000000..a535e0e3 --- /dev/null +++ b/packages/backend/src/apps/twitter/actions/search-user/index.js @@ -0,0 +1,35 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Search user', + key: 'searchUser', + description: 'Search a user on Twitter', + arguments: [ + { + label: 'Username', + key: 'username', + type: 'string', + required: true, + description: 'The username of the Twitter user you want to search for', + variables: true, + }, + ], + + async run($) { + const { data } = await $.http.get( + `/2/users/by/username/${$.step.parameters.username}`, + { + params: { + expansions: 'pinned_tweet_id', + 'tweet.fields': + 'attachments,author_id,context_annotations,conversation_id,created_at,edit_controls,entities,geo,id,in_reply_to_user_id,lang,non_public_metrics,public_metrics,organic_metrics,promoted_metrics,possibly_sensitive,referenced_tweets,reply_settings,source,text,withheld', + 'user.fields': + 'created_at,description,entities,id,location,name,pinned_tweet_id,profile_image_url,protected,public_metrics,url,username,verified,verified_type,withheld', + }, + } + ); + $.setActionItem({ + raw: data.data, + }); + }, +}); diff --git a/packages/backend/src/apps/twitter/actions/search-user/index.ts b/packages/backend/src/apps/twitter/actions/search-user/index.ts deleted file mode 100644 index e2a498e6..00000000 --- a/packages/backend/src/apps/twitter/actions/search-user/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import defineAction from '../../../../helpers/define-action'; - -export default defineAction({ - name: 'Search user', - key: 'searchUser', - description: 'Search a user on Twitter', - arguments: [ - { - label: 'Username', - key: 'username', - type: 'string' as const, - required: true, - description: 'The username of the Twitter user you want to search for', - variables: true, - }, - ], - - async run($) { - const { data } = await $.http.get(`/2/users/by/username/${$.step.parameters.username}`, { - params: { - expansions: 'pinned_tweet_id', - 'tweet.fields': 'attachments,author_id,context_annotations,conversation_id,created_at,edit_controls,entities,geo,id,in_reply_to_user_id,lang,non_public_metrics,public_metrics,organic_metrics,promoted_metrics,possibly_sensitive,referenced_tweets,reply_settings,source,text,withheld', - 'user.fields': 'created_at,description,entities,id,location,name,pinned_tweet_id,profile_image_url,protected,public_metrics,url,username,verified,verified_type,withheld' - } - }); - $.setActionItem({ - raw: data.data - }); - }, -}); diff --git a/packages/backend/src/apps/twitter/auth/generate-auth-url.ts b/packages/backend/src/apps/twitter/auth/generate-auth-url.js similarity index 76% rename from packages/backend/src/apps/twitter/auth/generate-auth-url.ts rename to packages/backend/src/apps/twitter/auth/generate-auth-url.js index dfe2a58f..f1e0db81 100644 --- a/packages/backend/src/apps/twitter/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/twitter/auth/generate-auth-url.js @@ -1,9 +1,8 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); const callbackUrl = oauthRedirectUrlField.value; diff --git a/packages/backend/src/apps/twitter/auth/index.ts b/packages/backend/src/apps/twitter/auth/index.js similarity index 77% rename from packages/backend/src/apps/twitter/auth/index.ts rename to packages/backend/src/apps/twitter/auth/index.js index bdea0b6f..78135f81 100644 --- a/packages/backend/src/apps/twitter/auth/index.ts +++ b/packages/backend/src/apps/twitter/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/twitter/connections/add', @@ -19,7 +19,7 @@ export default { { key: 'consumerKey', label: 'API Key', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -30,7 +30,7 @@ export default { { key: 'consumerSecret', label: 'API Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/twitter/auth/is-still-verified.js b/packages/backend/src/apps/twitter/auth/is-still-verified.js new file mode 100644 index 00000000..f59ee3b4 --- /dev/null +++ b/packages/backend/src/apps/twitter/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const user = await getCurrentUser($); + return !!user; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/twitter/auth/is-still-verified.ts b/packages/backend/src/apps/twitter/auth/is-still-verified.ts deleted file mode 100644 index d36919f2..00000000 --- a/packages/backend/src/apps/twitter/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const user = await getCurrentUser($); - return !!user; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/twitter/auth/verify-credentials.ts b/packages/backend/src/apps/twitter/auth/verify-credentials.js similarity index 82% rename from packages/backend/src/apps/twitter/auth/verify-credentials.ts rename to packages/backend/src/apps/twitter/auth/verify-credentials.js index 6be0ed25..26208834 100644 --- a/packages/backend/src/apps/twitter/auth/verify-credentials.ts +++ b/packages/backend/src/apps/twitter/auth/verify-credentials.js @@ -1,7 +1,6 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const response = await $.http.post( `/oauth/access_token?oauth_verifier=${$.auth.data.oauth_verifier}&oauth_token=${$.auth.data.accessToken}`, null diff --git a/packages/backend/src/apps/twitter/common/add-auth-header.ts b/packages/backend/src/apps/twitter/common/add-auth-header.js similarity index 61% rename from packages/backend/src/apps/twitter/common/add-auth-header.ts rename to packages/backend/src/apps/twitter/common/add-auth-header.js index 993c0530..824181ce 100644 --- a/packages/backend/src/apps/twitter/common/add-auth-header.ts +++ b/packages/backend/src/apps/twitter/common/add-auth-header.js @@ -1,20 +1,12 @@ -import { Token } from 'oauth-1.0a'; import { URLSearchParams } from 'node:url'; -import { IJSONObject, TBeforeRequest } from '@automatisch/types'; -import oauthClient from './oauth-client'; +import oauthClient from './oauth-client.js'; -type RequestDataType = { - url: string; - method: string; - data?: IJSONObject; -}; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const { baseURL, url, method, data, params } = requestConfig; - const token: Token = { - key: $.auth.data?.accessToken as string, - secret: $.auth.data?.accessSecret as string, + const token = { + key: $.auth.data?.accessToken, + secret: $.auth.data?.accessSecret, }; const searchParams = new URLSearchParams(params); @@ -26,7 +18,7 @@ const addAuthHeader: TBeforeRequest = ($, requestConfig) => { fullUrl = `${fullUrl}?${stringifiedParams}`; } - const requestData: RequestDataType = { + const requestData = { url: fullUrl, method, }; diff --git a/packages/backend/src/apps/twitter/common/get-current-user.ts b/packages/backend/src/apps/twitter/common/get-current-user.js similarity index 51% rename from packages/backend/src/apps/twitter/common/get-current-user.ts rename to packages/backend/src/apps/twitter/common/get-current-user.js index 3ce130a0..5dd99b4d 100644 --- a/packages/backend/src/apps/twitter/common/get-current-user.ts +++ b/packages/backend/src/apps/twitter/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get('/2/users/me'); const currentUser = response.data.data; diff --git a/packages/backend/src/apps/twitter/common/get-user-by-username.ts b/packages/backend/src/apps/twitter/common/get-user-by-username.js similarity index 64% rename from packages/backend/src/apps/twitter/common/get-user-by-username.ts rename to packages/backend/src/apps/twitter/common/get-user-by-username.js index 4240fff4..0e4b9654 100644 --- a/packages/backend/src/apps/twitter/common/get-user-by-username.ts +++ b/packages/backend/src/apps/twitter/common/get-user-by-username.js @@ -1,11 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getUserByUsername = async ($: IGlobalVariable, username: string) => { +const getUserByUsername = async ($, username) => { const response = await $.http.get(`/2/users/by/username/${username}`); if (response.data.errors) { const errorMessages = response.data.errors - .map((error: IJSONObject) => error.detail) + .map((error) => error.detail) .join(' '); throw new Error(`Error occured while fetching user data: ${errorMessages}`); diff --git a/packages/backend/src/apps/twitter/common/get-user-followers.ts b/packages/backend/src/apps/twitter/common/get-user-followers.js similarity index 67% rename from packages/backend/src/apps/twitter/common/get-user-followers.ts rename to packages/backend/src/apps/twitter/common/get-user-followers.js index 406ee8b6..9b339f97 100644 --- a/packages/backend/src/apps/twitter/common/get-user-followers.ts +++ b/packages/backend/src/apps/twitter/common/get-user-followers.js @@ -1,19 +1,12 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import { omitBy, isEmpty } from 'lodash'; +import omitBy from 'lodash/omitBy.js'; +import isEmpty from 'lodash/isEmpty.js'; -type GetUserFollowersOptions = { - userId: string; -}; - -const getUserFollowers = async ( - $: IGlobalVariable, - options: GetUserFollowersOptions -) => { +const getUserFollowers = async ($, options) => { let response; do { - const params: IJSONObject = { + const params = { pagination_token: response?.data?.meta?.next_token, }; @@ -33,7 +26,7 @@ const getUserFollowers = async ( for (const follower of response.data.data) { $.pushTriggerItem({ raw: follower, - meta: { internalId: follower.id as string }, + meta: { internalId: follower.id }, }); } } diff --git a/packages/backend/src/apps/twitter/common/get-user-tweets.ts b/packages/backend/src/apps/twitter/common/get-user-tweets.js similarity index 55% rename from packages/backend/src/apps/twitter/common/get-user-tweets.ts rename to packages/backend/src/apps/twitter/common/get-user-tweets.js index 2eb2aa11..c63727aa 100644 --- a/packages/backend/src/apps/twitter/common/get-user-tweets.ts +++ b/packages/backend/src/apps/twitter/common/get-user-tweets.js @@ -1,21 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import omitBy from 'lodash/omitBy'; -import isEmpty from 'lodash/isEmpty'; -import getCurrentUser from './get-current-user'; -import getUserByUsername from './get-user-by-username'; +import omitBy from 'lodash/omitBy.js'; +import isEmpty from 'lodash/isEmpty.js'; +import getCurrentUser from './get-current-user.js'; +import getUserByUsername from './get-user-by-username.js'; -type IGetUserTweetsOptions = { - currentUser: boolean; -}; - -const fetchTweets = async ($: IGlobalVariable, username: string) => { +const fetchTweets = async ($, username) => { const user = await getUserByUsername($, username); let response; do { - const params: IJSONObject = { + const params = { since_id: $.flow.lastInternalId, pagination_token: response?.data?.meta?.next_token, }; @@ -29,11 +24,11 @@ const fetchTweets = async ($: IGlobalVariable, username: string) => { response = await $.http.get(requestPath); if (response.data.meta.result_count > 0) { - response.data.data.forEach((tweet: IJSONObject) => { + response.data.data.forEach((tweet) => { const dataItem = { raw: tweet, meta: { - internalId: tweet.id as string, + internalId: tweet.id, }, }; @@ -45,17 +40,14 @@ const fetchTweets = async ($: IGlobalVariable, username: string) => { return $.triggerOutput; }; -const getUserTweets = async ( - $: IGlobalVariable, - options: IGetUserTweetsOptions -) => { - let username: string; +const getUserTweets = async ($, options) => { + let username; if (options.currentUser) { const currentUser = await getCurrentUser($); - username = currentUser.username as string; + username = currentUser.username; } else { - username = $.step.parameters.username as string; + username = $.step.parameters.username; } await fetchTweets($, username); diff --git a/packages/backend/src/apps/twitter/common/oauth-client.ts b/packages/backend/src/apps/twitter/common/oauth-client.js similarity index 65% rename from packages/backend/src/apps/twitter/common/oauth-client.ts rename to packages/backend/src/apps/twitter/common/oauth-client.js index c29f6a0a..d89c4889 100644 --- a/packages/backend/src/apps/twitter/common/oauth-client.ts +++ b/packages/backend/src/apps/twitter/common/oauth-client.js @@ -1,11 +1,10 @@ -import { IGlobalVariable } from '@automatisch/types'; import crypto from 'crypto'; import OAuth from 'oauth-1.0a'; -const oauthClient = ($: IGlobalVariable) => { +const oauthClient = ($) => { const consumerData = { - key: $.auth.data.consumerKey as string, - secret: $.auth.data.consumerSecret as string, + key: $.auth.data.consumerKey, + secret: $.auth.data.consumerSecret, }; return new OAuth({ diff --git a/packages/backend/src/apps/twitter/index.d.ts b/packages/backend/src/apps/twitter/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/twitter/index.ts b/packages/backend/src/apps/twitter/index.js similarity index 62% rename from packages/backend/src/apps/twitter/index.ts rename to packages/backend/src/apps/twitter/index.js index 5213206f..18e454bd 100644 --- a/packages/backend/src/apps/twitter/index.ts +++ b/packages/backend/src/apps/twitter/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import actions from './actions'; -import triggers from './triggers'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Twitter', diff --git a/packages/backend/src/apps/twitter/triggers/index.js b/packages/backend/src/apps/twitter/triggers/index.js new file mode 100644 index 00000000..9e36c62a --- /dev/null +++ b/packages/backend/src/apps/twitter/triggers/index.js @@ -0,0 +1,6 @@ +import myTweets from './my-tweets/index.js'; +import newFollowerOfMe from './new-follower-of-me/index.js'; +import searchTweets from './search-tweets/index.js'; +import userTweets from './user-tweets/index.js'; + +export default [myTweets, newFollowerOfMe, searchTweets, userTweets]; diff --git a/packages/backend/src/apps/twitter/triggers/index.ts b/packages/backend/src/apps/twitter/triggers/index.ts deleted file mode 100644 index 3f75a856..00000000 --- a/packages/backend/src/apps/twitter/triggers/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import myTweets from './my-tweets'; -import newFollowerOfMe from './new-follower-of-me'; -import searchTweets from './search-tweets'; -import userTweets from './user-tweets'; - -export default [myTweets, newFollowerOfMe, searchTweets, userTweets]; diff --git a/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/my-tweets/index.js similarity index 63% rename from packages/backend/src/apps/twitter/triggers/my-tweets/index.ts rename to packages/backend/src/apps/twitter/triggers/my-tweets/index.js index 56cb3d56..756e43b1 100644 --- a/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/my-tweets/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import getUserTweets from '../../common/get-user-tweets'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import getUserTweets from '../../common/get-user-tweets.js'; export default defineTrigger({ name: 'My tweets', diff --git a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.js similarity index 66% rename from packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts rename to packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.js index f96afae4..9a3c06b8 100644 --- a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts +++ b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import myFollowers from './my-followers'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import myFollowers from './my-followers.js'; export default defineTrigger({ name: 'New follower of me', diff --git a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/my-followers.js b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/my-followers.js new file mode 100644 index 00000000..41eb952e --- /dev/null +++ b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/my-followers.js @@ -0,0 +1,15 @@ +import getCurrentUser from '../../common/get-current-user.js'; +import getUserByUsername from '../../common/get-user-by-username.js'; +import getUserFollowers from '../../common/get-user-followers.js'; + +const myFollowers = async ($) => { + const { username } = await getCurrentUser($); + const user = await getUserByUsername($, username); + + const tweets = await getUserFollowers($, { + userId: user.id, + }); + return tweets; +}; + +export default myFollowers; diff --git a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/my-followers.ts b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/my-followers.ts deleted file mode 100644 index 69185bf7..00000000 --- a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/my-followers.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../../common/get-current-user'; -import getUserByUsername from '../../common/get-user-by-username'; -import getUserFollowers from '../../common/get-user-followers'; - -const myFollowers = async ($: IGlobalVariable) => { - const { username } = await getCurrentUser($); - const user = await getUserByUsername($, username as string); - - const tweets = await getUserFollowers($, { - userId: user.id, - }); - return tweets; -}; - -export default myFollowers; diff --git a/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/search-tweets/index.js similarity index 73% rename from packages/backend/src/apps/twitter/triggers/search-tweets/index.ts rename to packages/backend/src/apps/twitter/triggers/search-tweets/index.js index a3bbae6e..16372908 100644 --- a/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/search-tweets/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import searchTweets from './search-tweets'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import searchTweets from './search-tweets.js'; export default defineTrigger({ name: 'Search tweets', @@ -11,7 +11,7 @@ export default defineTrigger({ { label: 'Search Term', key: 'searchTerm', - type: 'string' as const, + type: 'string', required: true, }, ], diff --git a/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.ts b/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.js similarity index 68% rename from packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.ts rename to packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.js index 929bfac3..ddedda2e 100644 --- a/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.ts +++ b/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.js @@ -1,14 +1,14 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; import qs from 'qs'; -import { omitBy, isEmpty } from 'lodash'; +import omitBy from 'lodash/omitBy.js'; +import isEmpty from 'lodash/isEmpty.js'; -const searchTweets = async ($: IGlobalVariable) => { - const searchTerm = $.step.parameters.searchTerm as string; +const searchTweets = async ($) => { + const searchTerm = $.step.parameters.searchTerm; let response; do { - const params: IJSONObject = { + const params = { query: searchTerm, since_id: $.flow.lastInternalId, pagination_token: response?.data?.meta?.next_token, @@ -27,11 +27,11 @@ const searchTweets = async ($: IGlobalVariable) => { } if (response.data.meta.result_count > 0) { - response.data.data.forEach((tweet: IJSONObject) => { + response.data.data.forEach((tweet) => { const dataItem = { raw: tweet, meta: { - internalId: tweet.id as string, + internalId: tweet.id, }, }; diff --git a/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/user-tweets/index.js similarity index 69% rename from packages/backend/src/apps/twitter/triggers/user-tweets/index.ts rename to packages/backend/src/apps/twitter/triggers/user-tweets/index.js index 1b6de95a..c14c5a25 100644 --- a/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/user-tweets/index.js @@ -1,5 +1,5 @@ -import defineTrigger from '../../../../helpers/define-trigger'; -import getUserTweets from '../../common/get-user-tweets'; +import defineTrigger from '../../../../helpers/define-trigger.js'; +import getUserTweets from '../../common/get-user-tweets.js'; export default defineTrigger({ name: 'User tweets', @@ -10,7 +10,7 @@ export default defineTrigger({ { label: 'Username', key: 'username', - type: 'string' as const, + type: 'string', required: true, }, ], diff --git a/packages/backend/src/apps/typeform/auth/generate-auth-url.js b/packages/backend/src/apps/typeform/auth/generate-auth-url.js new file mode 100644 index 00000000..4012e5ec --- /dev/null +++ b/packages/backend/src/apps/typeform/auth/generate-auth-url.js @@ -0,0 +1,20 @@ +import { URLSearchParams } from 'url'; +import authScope from '../common/auth-scope.js'; + +export default async function generateAuthUrl($) { + const oauthRedirectUrl = $.app.auth.fields.find( + (field) => field.key == 'oAuthRedirectUrl' + ).value; + + const searchParams = new URLSearchParams({ + client_id: $.auth.data.clientId, + redirect_uri: oauthRedirectUrl, + scope: authScope.join(' '), + }); + + const url = `${$.app.apiBaseUrl}/oauth/authorize?${searchParams.toString()}`; + + await $.auth.set({ + url, + }); +} diff --git a/packages/backend/src/apps/typeform/auth/generate-auth-url.ts b/packages/backend/src/apps/typeform/auth/generate-auth-url.ts deleted file mode 100644 index 14ca84b8..00000000 --- a/packages/backend/src/apps/typeform/auth/generate-auth-url.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; - -export default async function generateAuthUrl($: IGlobalVariable) { - const oauthRedirectUrl = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' - ).value; - - const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - redirect_uri: oauthRedirectUrl as string, - scope: authScope.join(' '), - }); - - const url = `${$.app.apiBaseUrl}/oauth/authorize?${searchParams.toString()}`; - - await $.auth.set({ - url, - }); -} diff --git a/packages/backend/src/apps/typeform/auth/index.ts b/packages/backend/src/apps/typeform/auth/index.js similarity index 72% rename from packages/backend/src/apps/typeform/auth/index.ts rename to packages/backend/src/apps/typeform/auth/index.js index 0aa070f2..81e6906d 100644 --- a/packages/backend/src/apps/typeform/auth/index.ts +++ b/packages/backend/src/apps/typeform/auth/index.js @@ -1,15 +1,15 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; -import refreshToken from './refresh-token'; -import verifyWebhook from './verify-webhook'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; +import refreshToken from './refresh-token.js'; +import verifyWebhook from './verify-webhook.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/typeform/connections/add', @@ -21,7 +21,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -32,7 +32,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/typeform/auth/is-still-verified.js b/packages/backend/src/apps/typeform/auth/is-still-verified.js new file mode 100644 index 00000000..5f5c85ed --- /dev/null +++ b/packages/backend/src/apps/typeform/auth/is-still-verified.js @@ -0,0 +1,7 @@ +const isStillVerified = async ($) => { + await $.http.get('/me'); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/typeform/auth/is-still-verified.ts b/packages/backend/src/apps/typeform/auth/is-still-verified.ts deleted file mode 100644 index 4fb0c3e3..00000000 --- a/packages/backend/src/apps/typeform/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const isStillVerified = async ($: IGlobalVariable) => { - await $.http.get('/me'); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/typeform/auth/refresh-token.ts b/packages/backend/src/apps/typeform/auth/refresh-token.js similarity index 57% rename from packages/backend/src/apps/typeform/auth/refresh-token.ts rename to packages/backend/src/apps/typeform/auth/refresh-token.js index 7da4e118..a2d7a256 100644 --- a/packages/backend/src/apps/typeform/auth/refresh-token.ts +++ b/packages/backend/src/apps/typeform/auth/refresh-token.js @@ -1,13 +1,12 @@ -import { IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -const refreshToken = async ($: IGlobalVariable) => { +const refreshToken = async ($) => { const params = new URLSearchParams({ grant_type: 'refresh_token', - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - refresh_token: $.auth.data.refreshToken as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + refresh_token: $.auth.data.refreshToken, scope: authScope.join(' '), }); diff --git a/packages/backend/src/apps/typeform/auth/verify-credentials.ts b/packages/backend/src/apps/typeform/auth/verify-credentials.js similarity index 68% rename from packages/backend/src/apps/typeform/auth/verify-credentials.ts rename to packages/backend/src/apps/typeform/auth/verify-credentials.js index 2d1e55ea..87ee6bde 100644 --- a/packages/backend/src/apps/typeform/auth/verify-credentials.ts +++ b/packages/backend/src/apps/typeform/auth/verify-credentials.js @@ -1,17 +1,16 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrl = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ).value; const params = new URLSearchParams({ grant_type: 'authorization_code', - code: $.auth.data.code as string, - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - redirect_uri: oauthRedirectUrl as string, + code: $.auth.data.code, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + redirect_uri: oauthRedirectUrl, }); const { data: verifiedCredentials } = await $.http.post( diff --git a/packages/backend/src/apps/typeform/auth/verify-webhook.ts b/packages/backend/src/apps/typeform/auth/verify-webhook.js similarity index 52% rename from packages/backend/src/apps/typeform/auth/verify-webhook.ts rename to packages/backend/src/apps/typeform/auth/verify-webhook.js index 19dd8806..a1672ea3 100644 --- a/packages/backend/src/apps/typeform/auth/verify-webhook.ts +++ b/packages/backend/src/apps/typeform/auth/verify-webhook.js @@ -1,15 +1,15 @@ import crypto from 'crypto'; -import { IGlobalVariable } from '@automatisch/types'; -import appConfig from '../../../config/app'; -const verifyWebhook = async ($: IGlobalVariable) => { - const signature = $.request.headers['typeform-signature'] as string; +import appConfig from '../../../config/app.js'; + +const verifyWebhook = async ($) => { + const signature = $.request.headers['typeform-signature']; const isValid = verifySignature(signature, $.request.rawBody.toString()); return isValid; }; -const verifySignature = function (receivedSignature: string, payload: string) { +const verifySignature = function (receivedSignature, payload) { const hash = crypto .createHmac('sha256', appConfig.webhookSecretKey) .update(payload) diff --git a/packages/backend/src/apps/typeform/common/add-auth-header.ts b/packages/backend/src/apps/typeform/common/add-auth-header.js similarity index 66% rename from packages/backend/src/apps/typeform/common/add-auth-header.ts rename to packages/backend/src/apps/typeform/common/add-auth-header.js index d650c915..bf9ea772 100644 --- a/packages/backend/src/apps/typeform/common/add-auth-header.ts +++ b/packages/backend/src/apps/typeform/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if ($.auth.data?.accessToken) { const authorizationHeader = `Bearer ${$.auth.data.accessToken}`; requestConfig.headers.Authorization = authorizationHeader; diff --git a/packages/backend/src/apps/typeform/common/auth-scope.ts b/packages/backend/src/apps/typeform/common/auth-scope.js similarity index 85% rename from packages/backend/src/apps/typeform/common/auth-scope.ts rename to packages/backend/src/apps/typeform/common/auth-scope.js index 7b3154c8..1063656c 100644 --- a/packages/backend/src/apps/typeform/common/auth-scope.ts +++ b/packages/backend/src/apps/typeform/common/auth-scope.js @@ -1,4 +1,4 @@ -const authScope: string[] = [ +const authScope = [ 'forms:read', 'forms:write', 'webhooks:read', diff --git a/packages/backend/src/apps/typeform/dynamic-data/index.js b/packages/backend/src/apps/typeform/dynamic-data/index.js new file mode 100644 index 00000000..0a58430e --- /dev/null +++ b/packages/backend/src/apps/typeform/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listForms from './list-forms/index.js'; + +export default [listForms]; diff --git a/packages/backend/src/apps/typeform/dynamic-data/index.ts b/packages/backend/src/apps/typeform/dynamic-data/index.ts deleted file mode 100644 index cb6cd053..00000000 --- a/packages/backend/src/apps/typeform/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listForms from './list-forms'; - -export default [listForms]; diff --git a/packages/backend/src/apps/typeform/dynamic-data/list-forms/index.ts b/packages/backend/src/apps/typeform/dynamic-data/list-forms/index.js similarity index 52% rename from packages/backend/src/apps/typeform/dynamic-data/list-forms/index.ts rename to packages/backend/src/apps/typeform/dynamic-data/list-forms/index.js index 409ec1a3..93e56f5a 100644 --- a/packages/backend/src/apps/typeform/dynamic-data/list-forms/index.ts +++ b/packages/backend/src/apps/typeform/dynamic-data/list-forms/index.js @@ -1,19 +1,15 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List forms', key: 'listForms', - async run($: IGlobalVariable) { - const forms: { - data: IJSONObject[]; - } = { + async run($) { + const forms = { data: [], }; const response = await $.http.get('/forms'); - forms.data = response.data.items.map((form: IJSONObject) => { + forms.data = response.data.items.map((form) => { return { value: form.id, name: form.title, diff --git a/packages/backend/src/apps/typeform/index.d.ts b/packages/backend/src/apps/typeform/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/typeform/index.ts b/packages/backend/src/apps/typeform/index.js similarity index 62% rename from packages/backend/src/apps/typeform/index.ts rename to packages/backend/src/apps/typeform/index.js index f0f6ffcb..0d277927 100644 --- a/packages/backend/src/apps/typeform/index.ts +++ b/packages/backend/src/apps/typeform/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Typeform', diff --git a/packages/backend/src/apps/typeform/triggers/index.js b/packages/backend/src/apps/typeform/triggers/index.js new file mode 100644 index 00000000..38b6a209 --- /dev/null +++ b/packages/backend/src/apps/typeform/triggers/index.js @@ -0,0 +1,3 @@ +import newEntry from './new-entry/index.js'; + +export default [newEntry]; diff --git a/packages/backend/src/apps/typeform/triggers/index.ts b/packages/backend/src/apps/typeform/triggers/index.ts deleted file mode 100644 index c49828b1..00000000 --- a/packages/backend/src/apps/typeform/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import newEntry from './new-entry'; - -export default [newEntry]; diff --git a/packages/backend/src/apps/typeform/triggers/new-entry/index.ts b/packages/backend/src/apps/typeform/triggers/new-entry/index.js similarity index 93% rename from packages/backend/src/apps/typeform/triggers/new-entry/index.ts rename to packages/backend/src/apps/typeform/triggers/new-entry/index.js index 8ef73a41..2b666eef 100644 --- a/packages/backend/src/apps/typeform/triggers/new-entry/index.ts +++ b/packages/backend/src/apps/typeform/triggers/new-entry/index.js @@ -1,6 +1,6 @@ import Crypto from 'crypto'; -import appConfig from '../../../../config/app'; -import defineTrigger from '../../../../helpers/define-trigger'; +import appConfig from '../../../../config/app.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New entry', @@ -11,7 +11,7 @@ export default defineTrigger({ { label: 'Form', key: 'formId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: 'Pick a form to receive submissions.', variables: false, diff --git a/packages/backend/src/apps/webhook/index.d.ts b/packages/backend/src/apps/webhook/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/webhook/index.ts b/packages/backend/src/apps/webhook/index.js similarity index 75% rename from packages/backend/src/apps/webhook/index.ts rename to packages/backend/src/apps/webhook/index.js index 107ee47a..f378e98b 100644 --- a/packages/backend/src/apps/webhook/index.ts +++ b/packages/backend/src/apps/webhook/index.js @@ -1,5 +1,5 @@ -import defineApp from '../../helpers/define-app'; -import triggers from './triggers'; +import defineApp from '../../helpers/define-app.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Webhook', diff --git a/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.ts b/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.js similarity index 87% rename from packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.ts rename to packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.js index 46873370..88bbb0a5 100644 --- a/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.ts +++ b/packages/backend/src/apps/webhook/triggers/catch-raw-webhook/index.js @@ -1,6 +1,6 @@ import Crypto from 'crypto'; -import isEmpty from 'lodash/isEmpty'; -import defineTrigger from '../../../../helpers/define-trigger'; +import isEmpty from 'lodash/isEmpty.js'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'Catch raw webhook', diff --git a/packages/backend/src/apps/webhook/triggers/index.js b/packages/backend/src/apps/webhook/triggers/index.js new file mode 100644 index 00000000..166d4275 --- /dev/null +++ b/packages/backend/src/apps/webhook/triggers/index.js @@ -0,0 +1,3 @@ +import catchRawWebhook from './catch-raw-webhook/index.js'; + +export default [catchRawWebhook]; diff --git a/packages/backend/src/apps/webhook/triggers/index.ts b/packages/backend/src/apps/webhook/triggers/index.ts deleted file mode 100644 index 49159004..00000000 --- a/packages/backend/src/apps/webhook/triggers/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import catchRawWebhook from './catch-raw-webhook'; - -export default [catchRawWebhook]; diff --git a/packages/backend/src/apps/wordpress/auth/generate-auth-url.ts b/packages/backend/src/apps/wordpress/auth/generate-auth-url.js similarity index 51% rename from packages/backend/src/apps/wordpress/auth/generate-auth-url.ts rename to packages/backend/src/apps/wordpress/auth/generate-auth-url.js index ef4e0b84..d7eeb961 100644 --- a/packages/backend/src/apps/wordpress/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/wordpress/auth/generate-auth-url.js @@ -1,10 +1,9 @@ import { URL, URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -import appConfig from '../../../config/app'; -import getInstanceUrl from '../common/get-instance-url'; +import appConfig from '../../../config/app.js'; +import getInstanceUrl from '../common/get-instance-url.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const successUrl = new URL( '/app/wordpress/connections/add', appConfig.webAppUrl @@ -16,7 +15,10 @@ export default async function generateAuthUrl($: IGlobalVariable) { success_url: successUrl, }); - const url = new URL(`/wp-admin/authorize-application.php?${searchParams}`, baseUrl).toString(); + const url = new URL( + `/wp-admin/authorize-application.php?${searchParams}`, + baseUrl + ).toString(); await $.auth.set({ url, diff --git a/packages/backend/src/apps/wordpress/auth/index.ts b/packages/backend/src/apps/wordpress/auth/index.js similarity index 68% rename from packages/backend/src/apps/wordpress/auth/index.ts rename to packages/backend/src/apps/wordpress/auth/index.js index e4883f11..d906621e 100644 --- a/packages/backend/src/apps/wordpress/auth/index.ts +++ b/packages/backend/src/apps/wordpress/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import isStillVerified from './is-still-verified'; -import verifyCredentials from './verify-credentials'; +import generateAuthUrl from './generate-auth-url.js'; +import isStillVerified from './is-still-verified.js'; +import verifyCredentials from './verify-credentials.js'; export default { fields: [ { key: 'instanceUrl', label: 'WordPress instance URL', - type: 'string' as const, + type: 'string', required: false, readOnly: false, value: null, diff --git a/packages/backend/src/apps/wordpress/auth/is-still-verified.js b/packages/backend/src/apps/wordpress/auth/is-still-verified.js new file mode 100644 index 00000000..d77bac26 --- /dev/null +++ b/packages/backend/src/apps/wordpress/auth/is-still-verified.js @@ -0,0 +1,7 @@ +const isStillVerified = async ($) => { + await $.http.get('?rest_route=/wp/v2/settings'); + + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/wordpress/auth/is-still-verified.ts b/packages/backend/src/apps/wordpress/auth/is-still-verified.ts deleted file mode 100644 index 9cc179ed..00000000 --- a/packages/backend/src/apps/wordpress/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const isStillVerified = async ($: IGlobalVariable) => { - await $.http.get('?rest_route=/wp/v2/settings'); - - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/wordpress/auth/verify-credentials.js b/packages/backend/src/apps/wordpress/auth/verify-credentials.js new file mode 100644 index 00000000..b1cf86ba --- /dev/null +++ b/packages/backend/src/apps/wordpress/auth/verify-credentials.js @@ -0,0 +1,22 @@ +const verifyCredentials = async ($) => { + const instanceUrl = $.auth.data.instanceUrl; + const password = $.auth.data.password; + const siteUrl = $.auth.data.site_url; + const url = $.auth.data.url; + const userLogin = $.auth.data.user_login; + + if (!password) { + throw new Error('Failed while authorizing!'); + } + + await $.auth.set({ + screenName: `${userLogin} @ ${siteUrl}`, + instanceUrl, + password, + siteUrl, + url, + userLogin, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/wordpress/auth/verify-credentials.ts b/packages/backend/src/apps/wordpress/auth/verify-credentials.ts deleted file mode 100644 index 0c9f4f73..00000000 --- a/packages/backend/src/apps/wordpress/auth/verify-credentials.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const verifyCredentials = async ($: IGlobalVariable) => { - const instanceUrl = $.auth.data.instanceUrl as string; - const password = $.auth.data.password as string; - const siteUrl = $.auth.data.site_url as string; - const url = $.auth.data.url as string; - const userLogin = $.auth.data.user_login as string; - - if (!password) { - throw new Error('Failed while authorizing!'); - } - - await $.auth.set({ - screenName: `${userLogin} @ ${siteUrl}`, - instanceUrl, - password, - siteUrl, - url, - userLogin, - }); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/wordpress/common/add-auth-header.js b/packages/backend/src/apps/wordpress/common/add-auth-header.js new file mode 100644 index 00000000..e3a668c6 --- /dev/null +++ b/packages/backend/src/apps/wordpress/common/add-auth-header.js @@ -0,0 +1,15 @@ +const addAuthHeader = ($, requestConfig) => { + const userLogin = $.auth.data.userLogin; + const password = $.auth.data.password; + + if (userLogin && password) { + requestConfig.auth = { + username: userLogin, + password, + }; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/wordpress/common/add-auth-header.ts b/packages/backend/src/apps/wordpress/common/add-auth-header.ts deleted file mode 100644 index af5f1237..00000000 --- a/packages/backend/src/apps/wordpress/common/add-auth-header.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - const userLogin = $.auth.data.userLogin as string; - const password = $.auth.data.password as string; - - if (userLogin && password) { - requestConfig.auth = { - username: userLogin, - password, - }; - } - - return requestConfig; -}; - -export default addAuthHeader; diff --git a/packages/backend/src/apps/wordpress/common/get-instance-url.js b/packages/backend/src/apps/wordpress/common/get-instance-url.js new file mode 100644 index 00000000..0d7125a3 --- /dev/null +++ b/packages/backend/src/apps/wordpress/common/get-instance-url.js @@ -0,0 +1,5 @@ +const getInstanceUrl = ($) => { + return $.auth.data.instanceUrl; +}; + +export default getInstanceUrl; diff --git a/packages/backend/src/apps/wordpress/common/get-instance-url.ts b/packages/backend/src/apps/wordpress/common/get-instance-url.ts deleted file mode 100644 index 72b9bc73..00000000 --- a/packages/backend/src/apps/wordpress/common/get-instance-url.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getInstanceUrl = ($: IGlobalVariable): string => { - return $.auth.data.instanceUrl as string; -}; - -export default getInstanceUrl; diff --git a/packages/backend/src/apps/wordpress/common/set-base-url.js b/packages/backend/src/apps/wordpress/common/set-base-url.js new file mode 100644 index 00000000..def1330c --- /dev/null +++ b/packages/backend/src/apps/wordpress/common/set-base-url.js @@ -0,0 +1,10 @@ +const setBaseUrl = ($, requestConfig) => { + const instanceUrl = $.auth.data.instanceUrl; + if (instanceUrl) { + requestConfig.baseURL = instanceUrl; + } + + return requestConfig; +}; + +export default setBaseUrl; diff --git a/packages/backend/src/apps/wordpress/common/set-base-url.ts b/packages/backend/src/apps/wordpress/common/set-base-url.ts deleted file mode 100644 index f02c49e9..00000000 --- a/packages/backend/src/apps/wordpress/common/set-base-url.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const setBaseUrl: TBeforeRequest = ($, requestConfig) => { - const instanceUrl = $.auth.data.instanceUrl as string; - if (instanceUrl) { - requestConfig.baseURL = instanceUrl; - } - - return requestConfig; -}; - -export default setBaseUrl; diff --git a/packages/backend/src/apps/wordpress/dynamic-data/index.js b/packages/backend/src/apps/wordpress/dynamic-data/index.js new file mode 100644 index 00000000..ce289b38 --- /dev/null +++ b/packages/backend/src/apps/wordpress/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listStatuses from './list-statuses/index.js'; + +export default [listStatuses]; diff --git a/packages/backend/src/apps/wordpress/dynamic-data/index.ts b/packages/backend/src/apps/wordpress/dynamic-data/index.ts deleted file mode 100644 index 640a00f3..00000000 --- a/packages/backend/src/apps/wordpress/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listStatuses from './list-statuses'; - -export default [listStatuses]; diff --git a/packages/backend/src/apps/wordpress/dynamic-data/list-statuses/index.ts b/packages/backend/src/apps/wordpress/dynamic-data/list-statuses/index.js similarity index 52% rename from packages/backend/src/apps/wordpress/dynamic-data/list-statuses/index.ts rename to packages/backend/src/apps/wordpress/dynamic-data/list-statuses/index.js index 658c7461..12ad39fa 100644 --- a/packages/backend/src/apps/wordpress/dynamic-data/list-statuses/index.ts +++ b/packages/backend/src/apps/wordpress/dynamic-data/list-statuses/index.js @@ -1,23 +1,14 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -type Status = { - slug: string; - name: string; -}; -type Statuses = Record; - export default { name: 'List statuses', key: 'listStatuses', - async run($: IGlobalVariable) { - const statuses: { - data: IJSONObject[]; - } = { + async run($) { + const statuses = { data: [], }; - const { data } = await $.http.get('?rest_route=/wp/v2/statuses'); + const { data } = + (await $.http.get) < Statuses > '?rest_route=/wp/v2/statuses'; if (!data) return statuses; diff --git a/packages/backend/src/apps/wordpress/index.d.ts b/packages/backend/src/apps/wordpress/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/wordpress/index.ts b/packages/backend/src/apps/wordpress/index.js similarity index 57% rename from packages/backend/src/apps/wordpress/index.ts rename to packages/backend/src/apps/wordpress/index.js index 521f7e93..f0c48b94 100644 --- a/packages/backend/src/apps/wordpress/index.ts +++ b/packages/backend/src/apps/wordpress/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import setBaseUrl from './common/set-base-url'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import setBaseUrl from './common/set-base-url.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'WordPress', diff --git a/packages/backend/src/apps/wordpress/triggers/index.js b/packages/backend/src/apps/wordpress/triggers/index.js new file mode 100644 index 00000000..619c8ca1 --- /dev/null +++ b/packages/backend/src/apps/wordpress/triggers/index.js @@ -0,0 +1,5 @@ +import newComment from './new-comment/index.js'; +import newPage from './new-page/index.js'; +import newPost from './new-post/index.js'; + +export default [newComment, newPage, newPost]; diff --git a/packages/backend/src/apps/wordpress/triggers/index.ts b/packages/backend/src/apps/wordpress/triggers/index.ts deleted file mode 100644 index 3abd95e0..00000000 --- a/packages/backend/src/apps/wordpress/triggers/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import newComment from './new-comment'; -import newPage from './new-page'; -import newPost from './new-post'; - -export default [newComment, newPage, newPost]; diff --git a/packages/backend/src/apps/wordpress/triggers/new-comment/index.ts b/packages/backend/src/apps/wordpress/triggers/new-comment/index.js similarity index 92% rename from packages/backend/src/apps/wordpress/triggers/new-comment/index.ts rename to packages/backend/src/apps/wordpress/triggers/new-comment/index.js index 694453b2..3ab2423e 100644 --- a/packages/backend/src/apps/wordpress/triggers/new-comment/index.ts +++ b/packages/backend/src/apps/wordpress/triggers/new-comment/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New comment', @@ -8,7 +8,7 @@ export default defineTrigger({ { label: 'Status', key: 'status', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, options: [ diff --git a/packages/backend/src/apps/wordpress/triggers/new-page/index.ts b/packages/backend/src/apps/wordpress/triggers/new-page/index.js similarity index 92% rename from packages/backend/src/apps/wordpress/triggers/new-page/index.ts rename to packages/backend/src/apps/wordpress/triggers/new-page/index.js index 5eaa6d5d..3fb5086e 100644 --- a/packages/backend/src/apps/wordpress/triggers/new-page/index.ts +++ b/packages/backend/src/apps/wordpress/triggers/new-page/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New page', @@ -8,7 +8,7 @@ export default defineTrigger({ { label: 'Status', key: 'status', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { diff --git a/packages/backend/src/apps/wordpress/triggers/new-post/index.ts b/packages/backend/src/apps/wordpress/triggers/new-post/index.js similarity index 83% rename from packages/backend/src/apps/wordpress/triggers/new-post/index.ts rename to packages/backend/src/apps/wordpress/triggers/new-post/index.js index 5d481980..8b8dec79 100644 --- a/packages/backend/src/apps/wordpress/triggers/new-post/index.ts +++ b/packages/backend/src/apps/wordpress/triggers/new-post/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New post', @@ -8,7 +8,7 @@ export default defineTrigger({ { label: 'Status', key: 'status', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { @@ -35,10 +35,9 @@ export default defineTrigger({ let totalPages = 1; do { - const { - data, - headers - } = await $.http.get('?rest_route=/wp/v2/posts', { params }); + const { data, headers } = await $.http.get('?rest_route=/wp/v2/posts', { + params, + }); params.page = params.page + 1; totalPages = Number(headers['x-wp-totalpages']); diff --git a/packages/backend/src/apps/xero/auth/generate-auth-url.ts b/packages/backend/src/apps/xero/auth/generate-auth-url.js similarity index 52% rename from packages/backend/src/apps/xero/auth/generate-auth-url.ts rename to packages/backend/src/apps/xero/auth/generate-auth-url.js index aafd873e..e535dce5 100644 --- a/packages/backend/src/apps/xero/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/xero/auth/generate-auth-url.js @@ -1,15 +1,14 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ response_type: 'code', - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, scope: authScope.join(' '), redirect_uri: redirectUri, }); diff --git a/packages/backend/src/apps/xero/auth/index.ts b/packages/backend/src/apps/xero/auth/index.js similarity index 74% rename from packages/backend/src/apps/xero/auth/index.ts rename to packages/backend/src/apps/xero/auth/index.js index fe93971d..d84c9a7b 100644 --- a/packages/backend/src/apps/xero/auth/index.ts +++ b/packages/backend/src/apps/xero/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/xero/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/xero/auth/is-still-verified.js b/packages/backend/src/apps/xero/auth/is-still-verified.js new file mode 100644 index 00000000..45b89a69 --- /dev/null +++ b/packages/backend/src/apps/xero/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser.tenantName; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/xero/auth/is-still-verified.ts b/packages/backend/src/apps/xero/auth/is-still-verified.ts deleted file mode 100644 index f49edd77..00000000 --- a/packages/backend/src/apps/xero/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser.tenantName; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/xero/auth/refresh-token.ts b/packages/backend/src/apps/xero/auth/refresh-token.js similarity index 79% rename from packages/backend/src/apps/xero/auth/refresh-token.ts rename to packages/backend/src/apps/xero/auth/refresh-token.js index da36261f..75d1c21c 100644 --- a/packages/backend/src/apps/xero/auth/refresh-token.ts +++ b/packages/backend/src/apps/xero/auth/refresh-token.js @@ -1,8 +1,8 @@ import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -import authScope from '../common/auth-scope'; -const refreshToken = async ($: IGlobalVariable) => { +import authScope from '../common/auth-scope.js'; + +const refreshToken = async ($) => { const headers = { Authorization: `Basic ${Buffer.from( $.auth.data.clientId + ':' + $.auth.data.clientSecret @@ -12,7 +12,7 @@ const refreshToken = async ($: IGlobalVariable) => { const params = new URLSearchParams({ grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, + refresh_token: $.auth.data.refreshToken, }); const { data } = await $.http.post( diff --git a/packages/backend/src/apps/xero/auth/verify-credentials.ts b/packages/backend/src/apps/xero/auth/verify-credentials.js similarity index 77% rename from packages/backend/src/apps/xero/auth/verify-credentials.ts rename to packages/backend/src/apps/xero/auth/verify-credentials.js index 2b5770fe..61170d1a 100644 --- a/packages/backend/src/apps/xero/auth/verify-credentials.ts +++ b/packages/backend/src/apps/xero/auth/verify-credentials.js @@ -1,12 +1,11 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; +import getCurrentUser from '../common/get-current-user.js'; import { URLSearchParams } from 'url'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const headers = { Authorization: `Basic ${Buffer.from( $.auth.data.clientId + ':' + $.auth.data.clientSecret @@ -15,7 +14,7 @@ const verifyCredentials = async ($: IGlobalVariable) => { }; const params = new URLSearchParams({ grant_type: 'authorization_code', - code: $.auth.data.code as string, + code: $.auth.data.code, redirect_uri: redirectUri, }); diff --git a/packages/backend/src/apps/xero/common/add-auth-header.ts b/packages/backend/src/apps/xero/common/add-auth-header.js similarity index 74% rename from packages/backend/src/apps/xero/common/add-auth-header.ts rename to packages/backend/src/apps/xero/common/add-auth-header.js index 36e42e0f..045e4d21 100644 --- a/packages/backend/src/apps/xero/common/add-auth-header.ts +++ b/packages/backend/src/apps/xero/common/add-auth-header.js @@ -1,6 +1,4 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { if (requestConfig.additionalProperties?.skipAddingAuthHeader) return requestConfig; @@ -9,7 +7,7 @@ const addAuthHeader: TBeforeRequest = ($, requestConfig) => { } if ($.auth.data?.tenantId) { - requestConfig.headers['Xero-tenant-id'] = $.auth.data.tenantId as string; + requestConfig.headers['Xero-tenant-id'] = $.auth.data.tenantId; } return requestConfig; diff --git a/packages/backend/src/apps/xero/common/auth-scope.ts b/packages/backend/src/apps/xero/common/auth-scope.js similarity index 82% rename from packages/backend/src/apps/xero/common/auth-scope.ts rename to packages/backend/src/apps/xero/common/auth-scope.js index 85ae1d3c..6a4b5483 100644 --- a/packages/backend/src/apps/xero/common/auth-scope.ts +++ b/packages/backend/src/apps/xero/common/auth-scope.js @@ -1,4 +1,4 @@ -const authScope: string[] = [ +const authScope = [ 'offline_access', 'openid', 'profile', diff --git a/packages/backend/src/apps/xero/common/get-current-user.ts b/packages/backend/src/apps/xero/common/get-current-user.js similarity index 53% rename from packages/backend/src/apps/xero/common/get-current-user.ts rename to packages/backend/src/apps/xero/common/get-current-user.js index 2eb6b308..0bc69161 100644 --- a/packages/backend/src/apps/xero/common/get-current-user.ts +++ b/packages/backend/src/apps/xero/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { +const getCurrentUser = async ($) => { const { data: currentUser } = await $.http.get('/connections'); return currentUser[0]; }; diff --git a/packages/backend/src/apps/xero/dynamic-data/index.js b/packages/backend/src/apps/xero/dynamic-data/index.js new file mode 100644 index 00000000..de48bc3f --- /dev/null +++ b/packages/backend/src/apps/xero/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listOrganizations from './list-organizations/index.js'; + +export default [listOrganizations]; diff --git a/packages/backend/src/apps/xero/dynamic-data/index.ts b/packages/backend/src/apps/xero/dynamic-data/index.ts deleted file mode 100644 index 8d8bd601..00000000 --- a/packages/backend/src/apps/xero/dynamic-data/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import listOrganizations from './list-organizations'; - -export default [listOrganizations]; diff --git a/packages/backend/src/apps/xero/dynamic-data/list-organizations/index.ts b/packages/backend/src/apps/xero/dynamic-data/list-organizations/index.js similarity index 72% rename from packages/backend/src/apps/xero/dynamic-data/list-organizations/index.ts rename to packages/backend/src/apps/xero/dynamic-data/list-organizations/index.js index a8bc6406..ea16b5a2 100644 --- a/packages/backend/src/apps/xero/dynamic-data/list-organizations/index.ts +++ b/packages/backend/src/apps/xero/dynamic-data/list-organizations/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List organizations', key: 'listOrganizations', - async run($: IGlobalVariable) { - const organizations: { - data: IJSONObject[]; - } = { + async run($) { + const organizations = { data: [], }; diff --git a/packages/backend/src/apps/xero/index.d.ts b/packages/backend/src/apps/xero/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/xero/index.ts b/packages/backend/src/apps/xero/index.js similarity index 61% rename from packages/backend/src/apps/xero/index.ts rename to packages/backend/src/apps/xero/index.js index b8915616..987c12e0 100644 --- a/packages/backend/src/apps/xero/index.ts +++ b/packages/backend/src/apps/xero/index.js @@ -1,8 +1,8 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Xero', diff --git a/packages/backend/src/apps/xero/triggers/index.js b/packages/backend/src/apps/xero/triggers/index.js new file mode 100644 index 00000000..e4b774bf --- /dev/null +++ b/packages/backend/src/apps/xero/triggers/index.js @@ -0,0 +1,4 @@ +import newBankTransactions from './new-bank-transactions/index.js'; +import newPayments from './new-payments/index.js'; + +export default [newBankTransactions, newPayments]; diff --git a/packages/backend/src/apps/xero/triggers/index.ts b/packages/backend/src/apps/xero/triggers/index.ts deleted file mode 100644 index 49909def..00000000 --- a/packages/backend/src/apps/xero/triggers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import newBankTransactions from './new-bank-transactions'; -import newPayments from './new-payments'; - -export default [newBankTransactions, newPayments]; diff --git a/packages/backend/src/apps/xero/triggers/new-bank-transactions/index.ts b/packages/backend/src/apps/xero/triggers/new-bank-transactions/index.js similarity index 92% rename from packages/backend/src/apps/xero/triggers/new-bank-transactions/index.ts rename to packages/backend/src/apps/xero/triggers/new-bank-transactions/index.js index aaf8080d..b1f012e1 100644 --- a/packages/backend/src/apps/xero/triggers/new-bank-transactions/index.ts +++ b/packages/backend/src/apps/xero/triggers/new-bank-transactions/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New bank transactions', @@ -9,7 +9,7 @@ export default defineTrigger({ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: '', variables: true, diff --git a/packages/backend/src/apps/xero/triggers/new-payments/index.ts b/packages/backend/src/apps/xero/triggers/new-payments/index.js similarity index 90% rename from packages/backend/src/apps/xero/triggers/new-payments/index.ts rename to packages/backend/src/apps/xero/triggers/new-payments/index.js index 2ca90173..fbd8bd72 100644 --- a/packages/backend/src/apps/xero/triggers/new-payments/index.ts +++ b/packages/backend/src/apps/xero/triggers/new-payments/index.js @@ -1,10 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; - -type Params = { - page: number; - order: string; - where?: string; -}; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New payments', @@ -15,7 +9,7 @@ export default defineTrigger({ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: true, description: '', variables: true, @@ -33,7 +27,7 @@ export default defineTrigger({ { label: 'Payment Type', key: 'paymentType', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: '', variables: true, @@ -72,7 +66,7 @@ export default defineTrigger({ async run($) { const paymentType = $.step.parameters.paymentType; - const params: Params = { + const params = { page: 1, order: 'Date DESC', }; diff --git a/packages/backend/src/apps/youtube/auth/generate-auth-url.js b/packages/backend/src/apps/youtube/auth/generate-auth-url.js new file mode 100644 index 00000000..093f34b7 --- /dev/null +++ b/packages/backend/src/apps/youtube/auth/generate-auth-url.js @@ -0,0 +1,23 @@ +import { URLSearchParams } from 'url'; +import authScope from '../common/auth-scope.js'; + +export default async function generateAuthUrl($) { + const oauthRedirectUrlField = $.app.auth.fields.find( + (field) => field.key == 'oAuthRedirectUrl' + ); + const redirectUri = oauthRedirectUrlField.value; + const searchParams = new URLSearchParams({ + client_id: $.auth.data.clientId, + redirect_uri: redirectUri, + response_type: 'code', + scope: authScope.join(' '), + access_type: 'offline', + prompt: 'select_account', + }); + + const url = `https://accounts.google.com/o/oauth2/v2/auth?${searchParams.toString()}`; + + await $.auth.set({ + url, + }); +} diff --git a/packages/backend/src/apps/youtube/auth/generate-auth-url.ts b/packages/backend/src/apps/youtube/auth/generate-auth-url.ts deleted file mode 100644 index ba34918c..00000000 --- a/packages/backend/src/apps/youtube/auth/generate-auth-url.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; - -export default async function generateAuthUrl($: IGlobalVariable) { - const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' - ); - const redirectUri = oauthRedirectUrlField.value as string; - const searchParams = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - redirect_uri: redirectUri, - response_type: 'code', - scope: authScope.join(' '), - access_type: 'offline', - prompt: 'select_account', - }); - - const url = `https://accounts.google.com/o/oauth2/v2/auth?${searchParams.toString()}`; - - await $.auth.set({ - url, - }); -} diff --git a/packages/backend/src/apps/youtube/auth/index.ts b/packages/backend/src/apps/youtube/auth/index.js similarity index 74% rename from packages/backend/src/apps/youtube/auth/index.ts rename to packages/backend/src/apps/youtube/auth/index.js index f560270b..0504b1df 100644 --- a/packages/backend/src/apps/youtube/auth/index.ts +++ b/packages/backend/src/apps/youtube/auth/index.js @@ -1,14 +1,14 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import refreshToken from './refresh-token'; -import isStillVerified from './is-still-verified'; +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' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/youtube/connections/add', @@ -20,7 +20,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -31,7 +31,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/youtube/auth/is-still-verified.js b/packages/backend/src/apps/youtube/auth/is-still-verified.js new file mode 100644 index 00000000..68f4d7db --- /dev/null +++ b/packages/backend/src/apps/youtube/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + const currentUser = await getCurrentUser($); + return !!currentUser.resourceName; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/youtube/auth/is-still-verified.ts b/packages/backend/src/apps/youtube/auth/is-still-verified.ts deleted file mode 100644 index c46fa18b..00000000 --- a/packages/backend/src/apps/youtube/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - const currentUser = await getCurrentUser($); - return !!currentUser.resourceName; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/youtube/auth/refresh-token.js b/packages/backend/src/apps/youtube/auth/refresh-token.js new file mode 100644 index 00000000..7c5b7020 --- /dev/null +++ b/packages/backend/src/apps/youtube/auth/refresh-token.js @@ -0,0 +1,26 @@ +import { URLSearchParams } from 'node:url'; + +import authScope from '../common/auth-scope.js'; + +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( + 'https://oauth2.googleapis.com/token', + params.toString() + ); + + await $.auth.set({ + accessToken: data.access_token, + expiresIn: data.expires_in, + scope: authScope.join(' '), + tokenType: data.token_type, + }); +}; + +export default refreshToken; diff --git a/packages/backend/src/apps/youtube/auth/refresh-token.ts b/packages/backend/src/apps/youtube/auth/refresh-token.ts deleted file mode 100644 index 17d0c4cc..00000000 --- a/packages/backend/src/apps/youtube/auth/refresh-token.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { URLSearchParams } from 'node:url'; -import { IGlobalVariable } from '@automatisch/types'; -import authScope from '../common/auth-scope'; - -const refreshToken = async ($: IGlobalVariable) => { - const params = new URLSearchParams({ - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, - grant_type: 'refresh_token', - refresh_token: $.auth.data.refreshToken as string, - }); - - const { data } = await $.http.post( - 'https://oauth2.googleapis.com/token', - params.toString() - ); - - await $.auth.set({ - accessToken: data.access_token, - expiresIn: data.expires_in, - scope: authScope.join(' '), - tokenType: data.token_type, - }); -}; - -export default refreshToken; diff --git a/packages/backend/src/apps/youtube/auth/verify-credentials.js b/packages/backend/src/apps/youtube/auth/verify-credentials.js new file mode 100644 index 00000000..a636b72c --- /dev/null +++ b/packages/backend/src/apps/youtube/auth/verify-credentials.js @@ -0,0 +1,42 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const verifyCredentials = async ($) => { + const oauthRedirectUrlField = $.app.auth.fields.find( + (field) => field.key == 'oAuthRedirectUrl' + ); + const redirectUri = oauthRedirectUrlField.value; + const { data } = await $.http.post(`https://oauth2.googleapis.com/token`, { + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, + code: $.auth.data.code, + grant_type: 'authorization_code', + redirect_uri: redirectUri, + }); + + await $.auth.set({ + accessToken: data.access_token, + tokenType: data.token_type, + }); + + const currentUser = await getCurrentUser($); + + const { displayName } = currentUser.names.find( + (name) => name.metadata.primary + ); + const { value: email } = currentUser.emailAddresses.find( + (emailAddress) => emailAddress.metadata.primary + ); + + await $.auth.set({ + clientId: $.auth.data.clientId, + clientSecret: $.auth.data.clientSecret, + scope: $.auth.data.scope, + idToken: data.id_token, + expiresIn: data.expires_in, + refreshToken: data.refresh_token, + resourceName: currentUser.resourceName, + screenName: `${displayName} - ${email}`, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/youtube/auth/verify-credentials.ts b/packages/backend/src/apps/youtube/auth/verify-credentials.ts deleted file mode 100644 index 124e73c1..00000000 --- a/packages/backend/src/apps/youtube/auth/verify-credentials.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -type TUser = { - displayName: string; - metadata: { - primary: boolean; - }; -}; - -type TEmailAddress = { - value: string; - metadata: { - primary: boolean; - }; -}; - -const verifyCredentials = async ($: IGlobalVariable) => { - const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' - ); - const redirectUri = oauthRedirectUrlField.value as string; - const { data } = await $.http.post(`https://oauth2.googleapis.com/token`, { - client_id: $.auth.data.clientId, - client_secret: $.auth.data.clientSecret, - code: $.auth.data.code, - grant_type: 'authorization_code', - redirect_uri: redirectUri, - }); - - await $.auth.set({ - accessToken: data.access_token, - tokenType: data.token_type, - }); - - const currentUser = await getCurrentUser($); - - const { displayName } = currentUser.names.find( - (name: TUser) => name.metadata.primary - ); - const { value: email } = currentUser.emailAddresses.find( - (emailAddress: TEmailAddress) => emailAddress.metadata.primary - ); - - await $.auth.set({ - clientId: $.auth.data.clientId, - clientSecret: $.auth.data.clientSecret, - scope: $.auth.data.scope, - idToken: data.id_token, - expiresIn: data.expires_in, - refreshToken: data.refresh_token, - resourceName: currentUser.resourceName, - screenName: `${displayName} - ${email}`, - }); -}; - -export default verifyCredentials; diff --git a/packages/backend/src/apps/youtube/common/add-auth-header.js b/packages/backend/src/apps/youtube/common/add-auth-header.js new file mode 100644 index 00000000..02477aa4 --- /dev/null +++ b/packages/backend/src/apps/youtube/common/add-auth-header.js @@ -0,0 +1,9 @@ +const addAuthHeader = ($, requestConfig) => { + if ($.auth.data?.accessToken) { + requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/youtube/common/add-auth-header.ts b/packages/backend/src/apps/youtube/common/add-auth-header.ts deleted file mode 100644 index 8e7798b8..00000000 --- a/packages/backend/src/apps/youtube/common/add-auth-header.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { - if ($.auth.data?.accessToken) { - requestConfig.headers.Authorization = `${$.auth.data.tokenType} ${$.auth.data.accessToken}`; - } - - return requestConfig; -}; - -export default addAuthHeader; diff --git a/packages/backend/src/apps/youtube/common/auth-scope.ts b/packages/backend/src/apps/youtube/common/auth-scope.js similarity index 90% rename from packages/backend/src/apps/youtube/common/auth-scope.ts rename to packages/backend/src/apps/youtube/common/auth-scope.js index c04b848b..fdee5490 100644 --- a/packages/backend/src/apps/youtube/common/auth-scope.ts +++ b/packages/backend/src/apps/youtube/common/auth-scope.js @@ -1,4 +1,4 @@ -const authScope: string[] = [ +const authScope = [ 'https://www.googleapis.com/auth/youtube', 'https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/youtube.upload', diff --git a/packages/backend/src/apps/youtube/common/get-current-user.js b/packages/backend/src/apps/youtube/common/get-current-user.js new file mode 100644 index 00000000..2663ad20 --- /dev/null +++ b/packages/backend/src/apps/youtube/common/get-current-user.js @@ -0,0 +1,8 @@ +const getCurrentUser = async ($) => { + const { data: currentUser } = await $.http.get( + 'https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses' + ); + return currentUser; +}; + +export default getCurrentUser; diff --git a/packages/backend/src/apps/youtube/common/get-current-user.ts b/packages/backend/src/apps/youtube/common/get-current-user.ts deleted file mode 100644 index 724fe1ac..00000000 --- a/packages/backend/src/apps/youtube/common/get-current-user.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable) => { - const { data: currentUser } = await $.http.get( - 'https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses' - ); - return currentUser; -}; - -export default getCurrentUser; diff --git a/packages/backend/src/apps/youtube/index.d.ts b/packages/backend/src/apps/youtube/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/youtube/index.ts b/packages/backend/src/apps/youtube/index.js similarity index 67% rename from packages/backend/src/apps/youtube/index.ts rename to packages/backend/src/apps/youtube/index.js index 0f9a0ef4..ebcaaaf7 100644 --- a/packages/backend/src/apps/youtube/index.ts +++ b/packages/backend/src/apps/youtube/index.js @@ -1,7 +1,7 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-header'; -import auth from './auth'; -import triggers from './triggers'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Youtube', diff --git a/packages/backend/src/apps/youtube/triggers/index.js b/packages/backend/src/apps/youtube/triggers/index.js new file mode 100644 index 00000000..e5b4e02a --- /dev/null +++ b/packages/backend/src/apps/youtube/triggers/index.js @@ -0,0 +1,4 @@ +import newVideoInChannel from './new-video-in-channel/index.js'; +import newVideoBySearch from './new-video-by-search/index.js'; + +export default [newVideoBySearch, newVideoInChannel]; diff --git a/packages/backend/src/apps/youtube/triggers/index.ts b/packages/backend/src/apps/youtube/triggers/index.ts deleted file mode 100644 index 21aad966..00000000 --- a/packages/backend/src/apps/youtube/triggers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import newVideoInChannel from './new-video-in-channel'; -import newVideoBySearch from './new-video-by-search'; - -export default [newVideoBySearch, newVideoInChannel]; diff --git a/packages/backend/src/apps/youtube/triggers/new-video-by-search/index.ts b/packages/backend/src/apps/youtube/triggers/new-video-by-search/index.js similarity index 86% rename from packages/backend/src/apps/youtube/triggers/new-video-by-search/index.ts rename to packages/backend/src/apps/youtube/triggers/new-video-by-search/index.js index c61cb6fe..13ed2733 100644 --- a/packages/backend/src/apps/youtube/triggers/new-video-by-search/index.ts +++ b/packages/backend/src/apps/youtube/triggers/new-video-by-search/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New video by search', @@ -9,7 +9,7 @@ export default defineTrigger({ { label: 'Query', key: 'query', - type: 'string' as const, + type: 'string', required: true, description: 'Search for videos that match this query.', variables: true, @@ -20,7 +20,7 @@ export default defineTrigger({ const query = $.step.parameters.query; const params = { - pageToken: undefined as unknown as string, + pageToken: undefined, part: 'snippet', q: query, maxResults: 50, diff --git a/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts b/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.js similarity index 84% rename from packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts rename to packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.js index 440a0972..2bcc51a5 100644 --- a/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.ts +++ b/packages/backend/src/apps/youtube/triggers/new-video-in-channel/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New video in channel', @@ -9,7 +9,7 @@ export default defineTrigger({ { label: 'Channel', key: 'channelId', - type: 'string' as const, + type: 'string', required: true, description: 'Get the new videos uploaded to this channel. If the URL of the youtube channel looks like this www.youtube.com/channel/UCbxb2fqe9oNgglAoYqsYOtQ then you must use UCbxb2fqe9oNgglAoYqsYOtQ as a value in this field.', @@ -18,10 +18,10 @@ export default defineTrigger({ ], async run($) { - const channelId = $.step.parameters.channelId as string; + const channelId = $.step.parameters.channelId; const params = { - pageToken: undefined as unknown as string, + pageToken: undefined, part: 'snippet', channelId: channelId, maxResults: 50, diff --git a/packages/backend/src/apps/zendesk/actions/create-ticket/fields.ts b/packages/backend/src/apps/zendesk/actions/create-ticket/fields.js similarity index 90% rename from packages/backend/src/apps/zendesk/actions/create-ticket/fields.ts rename to packages/backend/src/apps/zendesk/actions/create-ticket/fields.js index 390f5f3e..e40da2be 100644 --- a/packages/backend/src/apps/zendesk/actions/create-ticket/fields.ts +++ b/packages/backend/src/apps/zendesk/actions/create-ticket/fields.js @@ -2,7 +2,7 @@ export const fields = [ { label: 'Subject', key: 'subject', - type: 'string' as const, + type: 'string', required: true, variables: true, description: '', @@ -10,7 +10,7 @@ export const fields = [ { label: 'Assignee', key: 'assigneeId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: @@ -37,14 +37,14 @@ export const fields = [ { label: 'Collaborators', key: 'collaborators', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Collaborator', key: 'collaborator', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -68,7 +68,7 @@ export const fields = [ { label: 'Collaborator Emails', key: 'collaboratorEmails', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: 'You have the option to include individuals who are not Zendesk users as Collaborators by adding their email addresses here.', @@ -76,7 +76,7 @@ export const fields = [ { label: 'Collaborator Email', key: 'collaboratorEmail', - type: 'string' as const, + type: 'string', required: false, variables: true, description: '', @@ -86,7 +86,7 @@ export const fields = [ { label: 'Group', key: 'groupId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: 'Allocate this ticket to a specific group.', @@ -104,7 +104,7 @@ export const fields = [ { label: 'Requester Name', key: 'requesterName', - type: 'string' as const, + type: 'string', required: false, variables: true, description: @@ -113,7 +113,7 @@ export const fields = [ { label: 'Requester Email', key: 'requesterEmail', - type: 'string' as const, + type: 'string', required: false, variables: true, description: @@ -122,7 +122,7 @@ export const fields = [ { label: 'First Comment/Description Format', key: 'format', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -134,7 +134,7 @@ export const fields = [ { label: 'First Comment/Description', key: 'comment', - type: 'string' as const, + type: 'string', required: true, variables: true, description: '', @@ -142,7 +142,7 @@ export const fields = [ { label: 'Should the first comment be public?', key: 'publicOrNot', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -154,7 +154,7 @@ export const fields = [ { label: 'Tags', key: 'tags', - type: 'string' as const, + type: 'string', required: false, variables: true, description: 'A comma separated list of tags.', @@ -162,7 +162,7 @@ export const fields = [ { label: 'Status', key: 'status', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -178,7 +178,7 @@ export const fields = [ { label: 'Type', key: 'type', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -192,7 +192,7 @@ export const fields = [ { label: 'Due At', key: 'dueAt', - type: 'string' as const, + type: 'string', required: false, variables: true, description: 'Limited to tickets typed as "task".', @@ -200,7 +200,7 @@ export const fields = [ { label: 'Priority', key: 'priority', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -214,7 +214,7 @@ export const fields = [ { label: 'Submitter', key: 'submitterId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -236,7 +236,7 @@ export const fields = [ { label: 'Ticket Form', key: 'ticketForm', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: @@ -255,14 +255,14 @@ export const fields = [ { label: 'Sharing Agreements', key: 'sharingAgreements', - type: 'dynamic' as const, + type: 'dynamic', required: false, description: '', fields: [ { label: 'Sharing Agreement', key: 'sharingAgreement', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -282,7 +282,7 @@ export const fields = [ { label: 'Brand', key: 'brandId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: diff --git a/packages/backend/src/apps/zendesk/actions/create-ticket/index.ts b/packages/backend/src/apps/zendesk/actions/create-ticket/index.js similarity index 70% rename from packages/backend/src/apps/zendesk/actions/create-ticket/index.ts rename to packages/backend/src/apps/zendesk/actions/create-ticket/index.js index 942b54a5..05e737eb 100644 --- a/packages/backend/src/apps/zendesk/actions/create-ticket/index.ts +++ b/packages/backend/src/apps/zendesk/actions/create-ticket/index.js @@ -1,11 +1,6 @@ -import { IJSONArray, IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; -import { fields } from './fields'; -import isEmpty from 'lodash/isEmpty'; - -type Payload = { - ticket: IJSONObject; -}; +import defineAction from '../../../../helpers/define-action.js'; +import { fields } from './fields.js'; +import isEmpty from 'lodash/isEmpty.js'; export default defineAction({ name: 'Create ticket', @@ -32,15 +27,14 @@ export default defineAction({ brandId, } = $.step.parameters; - const collaborators = $.step.parameters.collaborators as IJSONArray; + const collaborators = $.step.parameters.collaborators; const collaboratorIds = collaborators?.map( - (collaborator: IJSONObject) => collaborator.collaborator + (collaborator) => collaborator.collaborator ); - const collaboratorEmails = $.step.parameters - .collaboratorEmails as IJSONArray; + const collaboratorEmails = $.step.parameters.collaboratorEmails; const formattedCollaboratorEmails = collaboratorEmails?.map( - (collaboratorEmail: IJSONObject) => collaboratorEmail.collaboratorEmail + (collaboratorEmail) => collaboratorEmail.collaboratorEmail ); const formattedCollaborators = [ @@ -48,17 +42,15 @@ export default defineAction({ ...formattedCollaboratorEmails, ]; - const sharingAgreements = $.step.parameters.sharingAgreements as IJSONArray; + const sharingAgreements = $.step.parameters.sharingAgreements; const sharingAgreementIds = sharingAgreements ?.filter(isEmpty) - .map((sharingAgreement: IJSONObject) => - Number(sharingAgreement.sharingAgreement) - ); + .map((sharingAgreement) => Number(sharingAgreement.sharingAgreement)); - const tags = $.step.parameters.tags as string; + const tags = $.step.parameters.tags; const formattedTags = tags.split(','); - const payload: Payload = { + const payload = { ticket: { subject, assignee_id: assigneeId, diff --git a/packages/backend/src/apps/zendesk/actions/create-user/fields.ts b/packages/backend/src/apps/zendesk/actions/create-user/fields.js similarity index 88% rename from packages/backend/src/apps/zendesk/actions/create-user/fields.ts rename to packages/backend/src/apps/zendesk/actions/create-user/fields.js index 8bbfa026..1629a860 100644 --- a/packages/backend/src/apps/zendesk/actions/create-user/fields.ts +++ b/packages/backend/src/apps/zendesk/actions/create-user/fields.js @@ -2,7 +2,7 @@ export const fields = [ { label: 'Name', key: 'name', - type: 'string' as const, + type: 'string', required: true, variables: true, description: '', @@ -10,7 +10,7 @@ export const fields = [ { label: 'Email', key: 'email', - type: 'string' as const, + type: 'string', required: true, variables: true, description: @@ -19,7 +19,7 @@ export const fields = [ { label: 'Details', key: 'details', - type: 'string' as const, + type: 'string', required: false, variables: true, description: '', @@ -27,7 +27,7 @@ export const fields = [ { label: 'Notes', key: 'notes', - type: 'string' as const, + type: 'string', required: false, variables: true, description: @@ -36,7 +36,7 @@ export const fields = [ { label: 'Phone', key: 'phone', - type: 'string' as const, + type: 'string', required: false, variables: true, description: @@ -45,7 +45,7 @@ export const fields = [ { label: 'Tags', key: 'tags', - type: 'string' as const, + type: 'string', required: false, variables: true, description: 'A comma separated list of tags.', @@ -53,7 +53,7 @@ export const fields = [ { label: 'Role', key: 'role', - type: 'string' as const, + type: 'string', required: false, variables: true, description: @@ -62,7 +62,7 @@ export const fields = [ { label: 'Organization', key: 'organizationId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: 'Assign this user to a specific organization.', @@ -80,7 +80,7 @@ export const fields = [ { label: 'External Id', key: 'externalId', - type: 'string' as const, + type: 'string', required: false, variables: true, description: @@ -89,7 +89,7 @@ export const fields = [ { label: 'Verified', key: 'verified', - type: 'dropdown' as const, + type: 'dropdown', required: false, description: "Specify if you can verify that the user's assertion of their identity is accurate.", diff --git a/packages/backend/src/apps/zendesk/actions/create-user/index.ts b/packages/backend/src/apps/zendesk/actions/create-user/index.js similarity index 74% rename from packages/backend/src/apps/zendesk/actions/create-user/index.ts rename to packages/backend/src/apps/zendesk/actions/create-user/index.js index 44cfc5c4..3a02ddf9 100644 --- a/packages/backend/src/apps/zendesk/actions/create-user/index.ts +++ b/packages/backend/src/apps/zendesk/actions/create-user/index.js @@ -1,10 +1,5 @@ -import { IJSONObject } from '@automatisch/types'; -import defineAction from '../../../../helpers/define-action'; -import { fields } from './fields'; - -type Payload = { - user: IJSONObject; -}; +import defineAction from '../../../../helpers/define-action.js'; +import { fields } from './fields.js'; export default defineAction({ name: 'Create user', @@ -25,10 +20,10 @@ export default defineAction({ verified, } = $.step.parameters; - const tags = $.step.parameters.tags as string; + const tags = $.step.parameters.tags; const formattedTags = tags.split(','); - const payload: Payload = { + const payload = { user: { name, email, diff --git a/packages/backend/src/apps/zendesk/actions/delete-ticket/index.ts b/packages/backend/src/apps/zendesk/actions/delete-ticket/index.js similarity index 88% rename from packages/backend/src/apps/zendesk/actions/delete-ticket/index.ts rename to packages/backend/src/apps/zendesk/actions/delete-ticket/index.js index e82d2524..52ebeb9f 100644 --- a/packages/backend/src/apps/zendesk/actions/delete-ticket/index.ts +++ b/packages/backend/src/apps/zendesk/actions/delete-ticket/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Delete ticket', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Ticket', key: 'ticketId', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, description: 'Select the ticket you want to delete.', diff --git a/packages/backend/src/apps/zendesk/actions/delete-user/index.ts b/packages/backend/src/apps/zendesk/actions/delete-user/index.js similarity index 90% rename from packages/backend/src/apps/zendesk/actions/delete-user/index.ts rename to packages/backend/src/apps/zendesk/actions/delete-user/index.js index d85ac519..8e4fbfd6 100644 --- a/packages/backend/src/apps/zendesk/actions/delete-user/index.ts +++ b/packages/backend/src/apps/zendesk/actions/delete-user/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Delete user', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'User', key: 'userId', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, description: 'Select the user you want to modify.', diff --git a/packages/backend/src/apps/zendesk/actions/find-ticket/index.ts b/packages/backend/src/apps/zendesk/actions/find-ticket/index.js similarity index 87% rename from packages/backend/src/apps/zendesk/actions/find-ticket/index.ts rename to packages/backend/src/apps/zendesk/actions/find-ticket/index.js index efbc3aec..40f6eec3 100644 --- a/packages/backend/src/apps/zendesk/actions/find-ticket/index.ts +++ b/packages/backend/src/apps/zendesk/actions/find-ticket/index.js @@ -1,4 +1,4 @@ -import defineAction from '../../../../helpers/define-action'; +import defineAction from '../../../../helpers/define-action.js'; export default defineAction({ name: 'Find ticket', @@ -8,7 +8,7 @@ export default defineAction({ { label: 'Query', key: 'query', - type: 'string' as const, + type: 'string', required: true, variables: true, description: diff --git a/packages/backend/src/apps/zendesk/actions/index.js b/packages/backend/src/apps/zendesk/actions/index.js new file mode 100644 index 00000000..23079139 --- /dev/null +++ b/packages/backend/src/apps/zendesk/actions/index.js @@ -0,0 +1,15 @@ +import createTicket from './create-ticket/index.js'; +import createUser from './create-user/index.js'; +import deleteTicket from './delete-ticket/index.js'; +import deleteUser from './delete-user/index.js'; +import findTicket from './find-ticket/index.js'; +import updateTicket from './update-ticket/index.js'; + +export default [ + createTicket, + createUser, + deleteTicket, + deleteUser, + findTicket, + updateTicket, +]; diff --git a/packages/backend/src/apps/zendesk/actions/index.ts b/packages/backend/src/apps/zendesk/actions/index.ts deleted file mode 100644 index 99dc7fda..00000000 --- a/packages/backend/src/apps/zendesk/actions/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import createTicket from './create-ticket'; -import createUser from './create-user'; -import deleteTicket from './delete-ticket'; -import deleteUser from './delete-user'; -import findTicket from './find-ticket'; -import updateTicket from './update-ticket'; - -export default [ - createTicket, - createUser, - deleteTicket, - deleteUser, - findTicket, - updateTicket, -]; diff --git a/packages/backend/src/apps/zendesk/actions/update-ticket/fields.ts b/packages/backend/src/apps/zendesk/actions/update-ticket/fields.js similarity index 90% rename from packages/backend/src/apps/zendesk/actions/update-ticket/fields.ts rename to packages/backend/src/apps/zendesk/actions/update-ticket/fields.js index e12a995a..29f646c7 100644 --- a/packages/backend/src/apps/zendesk/actions/update-ticket/fields.ts +++ b/packages/backend/src/apps/zendesk/actions/update-ticket/fields.js @@ -2,7 +2,7 @@ export const fields = [ { label: 'Ticket', key: 'ticketId', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, description: 'Select the ticket you want to change.', @@ -20,7 +20,7 @@ export const fields = [ { label: 'Subject', key: 'subject', - type: 'string' as const, + type: 'string', required: false, variables: true, description: '', @@ -28,7 +28,7 @@ export const fields = [ { label: 'Assignee', key: 'assigneeId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: @@ -55,7 +55,7 @@ export const fields = [ { label: 'Group', key: 'groupId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: 'Allocate this ticket to a specific group.', @@ -73,7 +73,7 @@ export const fields = [ { label: 'New Status', key: 'status', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -89,7 +89,7 @@ export const fields = [ { label: 'New comment to add to the ticket', key: 'comment', - type: 'string' as const, + type: 'string', required: false, variables: true, description: '', @@ -97,7 +97,7 @@ export const fields = [ { label: 'Should the first comment be public?', key: 'publicOrNot', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -109,7 +109,7 @@ export const fields = [ { label: 'Tags', key: 'tags', - type: 'string' as const, + type: 'string', required: false, variables: true, description: 'A comma separated list of tags.', @@ -117,7 +117,7 @@ export const fields = [ { label: 'Type', key: 'type', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -131,7 +131,7 @@ export const fields = [ { label: 'Priority', key: 'priority', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', @@ -145,7 +145,7 @@ export const fields = [ { label: 'Submitter', key: 'submitterId', - type: 'dropdown' as const, + type: 'dropdown', required: false, variables: true, description: '', diff --git a/packages/backend/src/apps/zendesk/actions/update-ticket/index.ts b/packages/backend/src/apps/zendesk/actions/update-ticket/index.js similarity index 83% rename from packages/backend/src/apps/zendesk/actions/update-ticket/index.ts rename to packages/backend/src/apps/zendesk/actions/update-ticket/index.js index 02e01886..cff7e0ee 100644 --- a/packages/backend/src/apps/zendesk/actions/update-ticket/index.ts +++ b/packages/backend/src/apps/zendesk/actions/update-ticket/index.js @@ -1,7 +1,7 @@ -import defineAction from '../../../../helpers/define-action'; -import { fields } from './fields'; -import isEmpty from 'lodash/isEmpty'; -import omitBy from 'lodash/omitBy'; +import defineAction from '../../../../helpers/define-action.js'; +import { fields } from './fields.js'; +import isEmpty from 'lodash/isEmpty.js'; +import omitBy from 'lodash/omitBy.js'; export default defineAction({ name: 'Update ticket', @@ -23,7 +23,7 @@ export default defineAction({ submitterId, } = $.step.parameters; - const tags = $.step.parameters.tags as string; + const tags = $.step.parameters.tags; const formattedTags = tags.split(','); const payload = { diff --git a/packages/backend/src/apps/zendesk/auth/generate-auth-url.ts b/packages/backend/src/apps/zendesk/auth/generate-auth-url.js similarity index 52% rename from packages/backend/src/apps/zendesk/auth/generate-auth-url.ts rename to packages/backend/src/apps/zendesk/auth/generate-auth-url.js index 8432bc8f..9e93282d 100644 --- a/packages/backend/src/apps/zendesk/auth/generate-auth-url.ts +++ b/packages/backend/src/apps/zendesk/auth/generate-auth-url.js @@ -1,17 +1,16 @@ -import { IField, IGlobalVariable } from '@automatisch/types'; import { URLSearchParams } from 'url'; -import authScope from '../common/auth-scope'; +import authScope from '../common/auth-scope.js'; -export default async function generateAuthUrl($: IGlobalVariable) { +export default async function generateAuthUrl($) { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const searchParams = new URLSearchParams({ response_type: 'code', redirect_uri: redirectUri, - client_id: $.auth.data.clientId as string, + client_id: $.auth.data.clientId, scope: authScope.join(' '), }); diff --git a/packages/backend/src/apps/zendesk/auth/index.ts b/packages/backend/src/apps/zendesk/auth/index.js similarity index 77% rename from packages/backend/src/apps/zendesk/auth/index.ts rename to packages/backend/src/apps/zendesk/auth/index.js index d4ac580c..67df59a9 100644 --- a/packages/backend/src/apps/zendesk/auth/index.ts +++ b/packages/backend/src/apps/zendesk/auth/index.js @@ -1,13 +1,13 @@ -import generateAuthUrl from './generate-auth-url'; -import verifyCredentials from './verify-credentials'; -import isStillVerified from './is-still-verified'; +import generateAuthUrl from './generate-auth-url.js'; +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; export default { fields: [ { key: 'oAuthRedirectUrl', label: 'OAuth Redirect URL', - type: 'string' as const, + type: 'string', required: true, readOnly: true, value: '{WEB_APP_URL}/app/zendesk/connections/add', @@ -18,7 +18,7 @@ export default { { key: 'instanceUrl', label: 'Zendesk Subdomain Url', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -28,7 +28,7 @@ export default { { key: 'clientId', label: 'Client ID', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, @@ -39,7 +39,7 @@ export default { { key: 'clientSecret', label: 'Client Secret', - type: 'string' as const, + type: 'string', required: true, readOnly: false, value: null, diff --git a/packages/backend/src/apps/zendesk/auth/is-still-verified.js b/packages/backend/src/apps/zendesk/auth/is-still-verified.js new file mode 100644 index 00000000..54001579 --- /dev/null +++ b/packages/backend/src/apps/zendesk/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import getCurrentUser from '../common/get-current-user.js'; + +const isStillVerified = async ($) => { + await getCurrentUser($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/zendesk/auth/is-still-verified.ts b/packages/backend/src/apps/zendesk/auth/is-still-verified.ts deleted file mode 100644 index 86199fd2..00000000 --- a/packages/backend/src/apps/zendesk/auth/is-still-verified.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { IGlobalVariable } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; - -const isStillVerified = async ($: IGlobalVariable) => { - await getCurrentUser($); - return true; -}; - -export default isStillVerified; diff --git a/packages/backend/src/apps/zendesk/auth/verify-credentials.ts b/packages/backend/src/apps/zendesk/auth/verify-credentials.js similarity index 59% rename from packages/backend/src/apps/zendesk/auth/verify-credentials.ts rename to packages/backend/src/apps/zendesk/auth/verify-credentials.js index a2d3750b..3a416a69 100644 --- a/packages/backend/src/apps/zendesk/auth/verify-credentials.ts +++ b/packages/backend/src/apps/zendesk/auth/verify-credentials.js @@ -1,13 +1,12 @@ -import { IGlobalVariable, IJSONValue, IField } from '@automatisch/types'; -import getCurrentUser from '../common/get-current-user'; -import scopes from '../common/auth-scope'; +import getCurrentUser from '../common/get-current-user.js'; +import scopes from '../common/auth-scope.js'; -const verifyCredentials = async ($: IGlobalVariable) => { +const verifyCredentials = async ($) => { await getAccessToken($); const user = await getCurrentUser($); const subdomain = extractSubdomain($.auth.data.instanceUrl); - const name = user.name as string; + const name = user.name; const screenName = [name, subdomain].filter(Boolean).join(' @ '); await $.auth.set({ @@ -18,19 +17,19 @@ const verifyCredentials = async ($: IGlobalVariable) => { }); }; -const getAccessToken = async ($: IGlobalVariable) => { +const getAccessToken = async ($) => { const oauthRedirectUrlField = $.app.auth.fields.find( - (field: IField) => field.key == 'oAuthRedirectUrl' + (field) => field.key == 'oAuthRedirectUrl' ); - const redirectUri = oauthRedirectUrlField.value as string; + const redirectUri = oauthRedirectUrlField.value; const response = await $.http.post(`/oauth/tokens`, { redirect_uri: redirectUri, code: $.auth.data.code, grant_type: 'authorization_code', scope: scopes.join(' '), - client_id: $.auth.data.clientId as string, - client_secret: $.auth.data.clientSecret as string, + client_id: $.auth.data.clientId, + client_secret: $.auth.data.clientSecret, }); const data = response.data; @@ -45,8 +44,8 @@ const getAccessToken = async ($: IGlobalVariable) => { }); }; -function extractSubdomain(url: IJSONValue) { - const match = (url as string).match(/https:\/\/(.*?)\.zendesk\.com/); +function extractSubdomain(url) { + const match = url.match(/https:\/\/(.*?)\.zendesk\.com/); if (match && match[1]) { return match[1]; } diff --git a/packages/backend/src/apps/zendesk/common/add-auth-headers.ts b/packages/backend/src/apps/zendesk/common/add-auth-headers.js similarity index 61% rename from packages/backend/src/apps/zendesk/common/add-auth-headers.ts rename to packages/backend/src/apps/zendesk/common/add-auth-headers.js index 68e9b5e6..96a0e04c 100644 --- a/packages/backend/src/apps/zendesk/common/add-auth-headers.ts +++ b/packages/backend/src/apps/zendesk/common/add-auth-headers.js @@ -1,10 +1,8 @@ -import { TBeforeRequest } from '@automatisch/types'; - -const addAuthHeader: TBeforeRequest = ($, requestConfig) => { +const addAuthHeader = ($, requestConfig) => { const { instanceUrl, tokenType, accessToken } = $.auth.data; if (instanceUrl) { - requestConfig.baseURL = instanceUrl as string; + requestConfig.baseURL = instanceUrl; } if (tokenType && accessToken) { diff --git a/packages/backend/src/apps/zendesk/common/auth-scope.js b/packages/backend/src/apps/zendesk/common/auth-scope.js new file mode 100644 index 00000000..855e337b --- /dev/null +++ b/packages/backend/src/apps/zendesk/common/auth-scope.js @@ -0,0 +1,3 @@ +const authScope = ['read', 'write']; + +export default authScope; diff --git a/packages/backend/src/apps/zendesk/common/auth-scope.ts b/packages/backend/src/apps/zendesk/common/auth-scope.ts deleted file mode 100644 index c0dd438f..00000000 --- a/packages/backend/src/apps/zendesk/common/auth-scope.ts +++ /dev/null @@ -1,3 +0,0 @@ -const authScope: string[] = ['read', 'write']; - -export default authScope; diff --git a/packages/backend/src/apps/zendesk/common/get-current-user.ts b/packages/backend/src/apps/zendesk/common/get-current-user.js similarity index 51% rename from packages/backend/src/apps/zendesk/common/get-current-user.ts rename to packages/backend/src/apps/zendesk/common/get-current-user.js index 90f9abb2..5741b02c 100644 --- a/packages/backend/src/apps/zendesk/common/get-current-user.ts +++ b/packages/backend/src/apps/zendesk/common/get-current-user.js @@ -1,6 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - -const getCurrentUser = async ($: IGlobalVariable): Promise => { +const getCurrentUser = async ($) => { const response = await $.http.get('/api/v2/users/me'); const currentUser = response.data.user; diff --git a/packages/backend/src/apps/zendesk/dynamic-data/index.js b/packages/backend/src/apps/zendesk/dynamic-data/index.js new file mode 100644 index 00000000..d32b6fb3 --- /dev/null +++ b/packages/backend/src/apps/zendesk/dynamic-data/index.js @@ -0,0 +1,20 @@ +import listUsers from './list-users/index.js'; +import listBrands from './list-brands/index.js'; +import listFirstPageOfTickets from './list-first-page-of-tickets/index.js'; +import listGroups from './list-groups/index.js'; +import listOrganizations from './list-organizations/index.js'; +import listSharingAgreements from './list-sharing-agreements/index.js'; +import listTicketForms from './list-ticket-forms/index.js'; +import listViews from './list-views/index.js'; + +export default [ + listUsers, + listBrands, + listFirstPageOfTickets, + listGroups, + listOrganizations, + listSharingAgreements, + listFirstPageOfTickets, + listTicketForms, + listViews, +]; diff --git a/packages/backend/src/apps/zendesk/dynamic-data/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/index.ts deleted file mode 100644 index f5755bc4..00000000 --- a/packages/backend/src/apps/zendesk/dynamic-data/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import listUsers from './list-users'; -import listBrands from './list-brands'; -import listFirstPageOfTickets from './list-first-page-of-tickets'; -import listGroups from './list-groups'; -import listOrganizations from './list-organizations'; -import listSharingAgreements from './list-sharing-agreements'; -import listTicketForms from './list-ticket-forms'; -import listViews from './list-views'; - -export default [ - listUsers, - listBrands, - listFirstPageOfTickets, - listGroups, - listOrganizations, - listSharingAgreements, - listFirstPageOfTickets, - listTicketForms, - listViews, -]; diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-brands/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-brands/index.js similarity index 79% rename from packages/backend/src/apps/zendesk/dynamic-data/list-brands/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-brands/index.js index 3b6f43d8..a5a170c6 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-brands/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-brands/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List brands', key: 'listBrands', - async run($: IGlobalVariable) { - const brands: { - data: IJSONObject[]; - } = { + async run($) { + const brands = { data: [], }; diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-first-page-of-tickets/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-first-page-of-tickets/index.js similarity index 76% rename from packages/backend/src/apps/zendesk/dynamic-data/list-first-page-of-tickets/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-first-page-of-tickets/index.js index 66a127b6..bf065a5b 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-first-page-of-tickets/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-first-page-of-tickets/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List first page of tickets', key: 'listFirstPageOfTickets', - async run($: IGlobalVariable) { - const tickets: { - data: IJSONObject[]; - } = { + async run($) { + const tickets = { data: [], }; diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-groups/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-groups/index.js similarity index 75% rename from packages/backend/src/apps/zendesk/dynamic-data/list-groups/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-groups/index.js index c59999ec..9fda32d8 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-groups/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-groups/index.js @@ -1,20 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List groups', key: 'listGroups', - async run($: IGlobalVariable) { - const groups: { - data: IJSONObject[]; - } = { + async run($) { + const groups = { data: [], }; let hasMore; const params = { 'page[size]': 100, - 'page[after]': undefined as unknown as string, + 'page[after]': undefined, }; do { diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-organizations/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-organizations/index.js similarity index 76% rename from packages/backend/src/apps/zendesk/dynamic-data/list-organizations/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-organizations/index.js index c86ac91c..a6c7a4db 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-organizations/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-organizations/index.js @@ -1,20 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List organizations', key: 'listOrganizations', - async run($: IGlobalVariable) { - const organizations: { - data: IJSONObject[]; - } = { + async run($) { + const organizations = { data: [], }; let hasMore; const params = { 'page[size]': 100, - 'page[after]': undefined as unknown as string, + 'page[after]': undefined, }; do { diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-sharing-agreements/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-sharing-agreements/index.js similarity index 81% rename from packages/backend/src/apps/zendesk/dynamic-data/list-sharing-agreements/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-sharing-agreements/index.js index 81c49835..690f46e1 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-sharing-agreements/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-sharing-agreements/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List sharing agreements', key: 'listSharingAgreements', - async run($: IGlobalVariable) { - const sharingAgreements: { - data: IJSONObject[]; - } = { + async run($) { + const sharingAgreements = { data: [], }; diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-ticket-forms/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-ticket-forms/index.js similarity index 80% rename from packages/backend/src/apps/zendesk/dynamic-data/list-ticket-forms/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-ticket-forms/index.js index 1ec08ddf..ad102b93 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-ticket-forms/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-ticket-forms/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List ticket forms', key: 'listTicketForms', - async run($: IGlobalVariable) { - const ticketForms: { - data: IJSONObject[]; - } = { + async run($) { + const ticketForms = { data: [], }; diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-users/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-users/index.js similarity index 81% rename from packages/backend/src/apps/zendesk/dynamic-data/list-users/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-users/index.js index 9f2fdf8d..efcafbbd 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-users/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-users/index.js @@ -1,13 +1,9 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List users', key: 'listUsers', - async run($: IGlobalVariable) { - const users: { - data: IJSONObject[]; - } = { + async run($) { + const users = { data: [], }; let hasMore; @@ -18,7 +14,7 @@ export default { const params = { 'page[size]': 100, role, - 'page[after]': undefined as unknown as string, + 'page[after]': undefined, }; do { diff --git a/packages/backend/src/apps/zendesk/dynamic-data/list-views/index.ts b/packages/backend/src/apps/zendesk/dynamic-data/list-views/index.js similarity index 74% rename from packages/backend/src/apps/zendesk/dynamic-data/list-views/index.ts rename to packages/backend/src/apps/zendesk/dynamic-data/list-views/index.js index 3c7d94b7..fd7066ae 100644 --- a/packages/backend/src/apps/zendesk/dynamic-data/list-views/index.ts +++ b/packages/backend/src/apps/zendesk/dynamic-data/list-views/index.js @@ -1,20 +1,16 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; - export default { name: 'List views', key: 'listViews', - async run($: IGlobalVariable) { - const views: { - data: IJSONObject[]; - } = { + async run($) { + const views = { data: [], }; let hasMore; const params = { 'page[size]': 100, - 'page[after]': undefined as unknown as string, + 'page[after]': undefined, }; do { diff --git a/packages/backend/src/apps/zendesk/index.d.ts b/packages/backend/src/apps/zendesk/index.d.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/backend/src/apps/zendesk/index.ts b/packages/backend/src/apps/zendesk/index.js similarity index 57% rename from packages/backend/src/apps/zendesk/index.ts rename to packages/backend/src/apps/zendesk/index.js index a0e5e6a7..2f1228db 100644 --- a/packages/backend/src/apps/zendesk/index.ts +++ b/packages/backend/src/apps/zendesk/index.js @@ -1,9 +1,9 @@ -import defineApp from '../../helpers/define-app'; -import addAuthHeader from './common/add-auth-headers'; -import auth from './auth'; -import triggers from './triggers'; -import actions from './actions'; -import dynamicData from './dynamic-data'; +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-headers.js'; +import auth from './auth/index.js'; +import triggers from './triggers/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'Zendesk', diff --git a/packages/backend/src/apps/zendesk/triggers/index.js b/packages/backend/src/apps/zendesk/triggers/index.js new file mode 100644 index 00000000..0006b367 --- /dev/null +++ b/packages/backend/src/apps/zendesk/triggers/index.js @@ -0,0 +1,4 @@ +import newTickets from './new-tickets/index.js'; +import newUsers from './new-users/index.js'; + +export default [newTickets, newUsers]; diff --git a/packages/backend/src/apps/zendesk/triggers/index.ts b/packages/backend/src/apps/zendesk/triggers/index.ts deleted file mode 100644 index 883357c1..00000000 --- a/packages/backend/src/apps/zendesk/triggers/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import newTickets from './new-tickets'; -import newUsers from './new-users'; - -export default [newTickets, newUsers]; diff --git a/packages/backend/src/apps/zendesk/triggers/new-tickets/index.ts b/packages/backend/src/apps/zendesk/triggers/new-tickets/index.js similarity index 89% rename from packages/backend/src/apps/zendesk/triggers/new-tickets/index.ts rename to packages/backend/src/apps/zendesk/triggers/new-tickets/index.js index 9a7d1a63..31156a16 100644 --- a/packages/backend/src/apps/zendesk/triggers/new-tickets/index.ts +++ b/packages/backend/src/apps/zendesk/triggers/new-tickets/index.js @@ -1,4 +1,4 @@ -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New tickets', @@ -9,7 +9,7 @@ export default defineTrigger({ { label: 'View', key: 'viewId', - type: 'dropdown' as const, + type: 'dropdown', required: true, variables: true, source: { @@ -30,7 +30,7 @@ export default defineTrigger({ const params = { 'page[size]': 100, - 'page[after]': undefined as unknown as string, + 'page[after]': undefined, sort_by: 'nice_id', sort_order: 'desc', }; diff --git a/packages/backend/src/apps/zendesk/triggers/new-users/index.ts b/packages/backend/src/apps/zendesk/triggers/new-users/index.js similarity index 96% rename from packages/backend/src/apps/zendesk/triggers/new-users/index.ts rename to packages/backend/src/apps/zendesk/triggers/new-users/index.js index 85b16fa4..8610fed0 100644 --- a/packages/backend/src/apps/zendesk/triggers/new-users/index.ts +++ b/packages/backend/src/apps/zendesk/triggers/new-users/index.js @@ -1,5 +1,5 @@ import Crypto from 'crypto'; -import defineTrigger from '../../../../helpers/define-trigger'; +import defineTrigger from '../../../../helpers/define-trigger.js'; export default defineTrigger({ name: 'New users', diff --git a/packages/backend/src/helpers/get-app.js b/packages/backend/src/helpers/get-app.js index fee2d4cf..7d186977 100644 --- a/packages/backend/src/helpers/get-app.js +++ b/packages/backend/src/helpers/get-app.js @@ -13,7 +13,9 @@ const apps = fs .reduce((apps, dirent) => { if (!dirent.isDirectory()) return apps; - apps[dirent.name] = import(path.resolve(__dirname, '../apps', dirent.name)); + apps[dirent.name] = import( + path.resolve(__dirname, '../apps', dirent.name, 'index.js') + ); return apps; }, {});