chore: Introduce app info converter and use JSON for info files
This commit is contained in:
@@ -1,10 +1,7 @@
|
|||||||
import appInfoType from '../../types/app-info';
|
{
|
||||||
import appConfig from '../../config/app';
|
|
||||||
|
|
||||||
const appInfo: appInfoType = {
|
|
||||||
"name": "Flickr",
|
"name": "Flickr",
|
||||||
"key": "flickr",
|
"key": "flickr",
|
||||||
"iconUrl": `${appConfig.baseUrl}/apps/flickr/assets/favicon.svg`,
|
"iconUrl": "{BASE_URL}/apps/flickr/assets/favicon.svg",
|
||||||
"docUrl": "https://automatisch.io/docs/flickr",
|
"docUrl": "https://automatisch.io/docs/flickr",
|
||||||
"primaryColor": "000000",
|
"primaryColor": "000000",
|
||||||
"fields": [
|
"fields": [
|
||||||
@@ -116,5 +113,3 @@ const appInfo: appInfoType = {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export default appInfo;
|
|
@@ -1,10 +1,7 @@
|
|||||||
import appInfoType from '../../types/app-info';
|
{
|
||||||
import appConfig from '../../config/app';
|
|
||||||
|
|
||||||
const appInfo: appInfoType = {
|
|
||||||
"name": "Twitch",
|
"name": "Twitch",
|
||||||
"key": "twitch",
|
"key": "twitch",
|
||||||
"iconUrl": `${appConfig.baseUrl}/apps/twitch/assets/favicon.svg`,
|
"iconUrl": "{BASE_URL}/apps/twitch/assets/favicon.svg",
|
||||||
"docUrl": "https://automatisch.io/docs/twitch",
|
"docUrl": "https://automatisch.io/docs/twitch",
|
||||||
"primaryColor": "6441a5",
|
"primaryColor": "6441a5",
|
||||||
"fields": [
|
"fields": [
|
||||||
@@ -46,5 +43,3 @@ const appInfo: appInfoType = {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export default appInfo;
|
|
@@ -1,10 +1,7 @@
|
|||||||
import appInfoType from '../../types/app-info';
|
{
|
||||||
import appConfig from '../../config/app';
|
|
||||||
|
|
||||||
const appInfo: appInfoType = {
|
|
||||||
"name": "Twitter",
|
"name": "Twitter",
|
||||||
"key": "twitter",
|
"key": "twitter",
|
||||||
"iconUrl": `${appConfig.baseUrl}/apps/twitter/assets/favicon.svg`,
|
"iconUrl": "{BASE_URL}/apps/twitter/assets/favicon.svg",
|
||||||
"docUrl": "https://automatisch.io/docs/twitter",
|
"docUrl": "https://automatisch.io/docs/twitter",
|
||||||
"primaryColor": "2DAAE1",
|
"primaryColor": "2DAAE1",
|
||||||
"fields": [
|
"fields": [
|
||||||
@@ -116,5 +113,3 @@ const appInfo: appInfoType = {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
export default appInfo;
|
|
@@ -10,7 +10,7 @@ type Params = {
|
|||||||
data: object
|
data: object
|
||||||
}
|
}
|
||||||
const createConnectionResolver = async (params: Params, req: RequestWithCurrentUser) => {
|
const createConnectionResolver = async (params: Params, req: RequestWithCurrentUser) => {
|
||||||
const app = await App.findOneByKey(params.key);
|
const app = App.findOneByKey(params.key);
|
||||||
const connection = await Connection.query().insert({
|
const connection = await Connection.query().insert({
|
||||||
key: params.key,
|
key: params.key,
|
||||||
data: params.data,
|
data: params.data,
|
||||||
|
@@ -9,7 +9,7 @@ type Params = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getAppConnectionsResolver = async (params: Params, req: RequestWithCurrentUser) => {
|
const getAppConnectionsResolver = async (params: Params, req: RequestWithCurrentUser) => {
|
||||||
const app = await App.findOneByKey(params.key);
|
const app = App.findOneByKey(params.key);
|
||||||
const connections = await Connection.query()
|
const connections = await Connection.query()
|
||||||
.where({ user_id: req.currentUser.id, key: params.key })
|
.where({ user_id: req.currentUser.id, key: params.key })
|
||||||
|
|
||||||
|
@@ -14,7 +14,7 @@ const getAppResolver = async (params: Params, req: RequestWithCurrentUser) => {
|
|||||||
throw new Error('No key provided.')
|
throw new Error('No key provided.')
|
||||||
}
|
}
|
||||||
|
|
||||||
const app = await App.findOneByKey(params.key);
|
const app = App.findOneByKey(params.key);
|
||||||
|
|
||||||
if (req.currentUser?.id) {
|
if (req.currentUser?.id) {
|
||||||
const connections = await Connection.query()
|
const connections = await Connection.query()
|
||||||
|
@@ -9,7 +9,7 @@ type Params = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const getConnectedAppsResolver = async (params: Params, req: RequestWithCurrentUser) => {
|
const getConnectedAppsResolver = async (params: Params, req: RequestWithCurrentUser) => {
|
||||||
let apps = await App.findAll(params.name)
|
let apps = App.findAll(params.name)
|
||||||
|
|
||||||
const connections = await Connection.query()
|
const connections = await Connection.query()
|
||||||
.select('connections.key')
|
.select('connections.key')
|
||||||
|
11
packages/backend/src/helpers/app-info-converter.ts
Normal file
11
packages/backend/src/helpers/app-info-converter.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import AppInfoType from '../types/app-info';
|
||||||
|
import appConfig from '../config/app';
|
||||||
|
|
||||||
|
const appInfoConverter = (rawAppData: string) => {
|
||||||
|
const computedRawData = rawAppData.replace('{BASE_URL}', appConfig.baseUrl);
|
||||||
|
const computedJSONData: AppInfoType = JSON.parse(computedRawData)
|
||||||
|
|
||||||
|
return computedJSONData;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default appInfoConverter;
|
@@ -1,31 +1,26 @@
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
import appInfoConverter from '../helpers/app-info-converter';
|
||||||
|
|
||||||
class App {
|
class App {
|
||||||
static folderPath = __dirname + '/../apps';
|
static folderPath = __dirname + '/../apps';
|
||||||
static list = fs.readdirSync(this.folderPath);
|
static list = fs.readdirSync(this.folderPath);
|
||||||
|
|
||||||
static async findAll(name?: string): Promise<object[]> {
|
static findAll(name?: string): object[] {
|
||||||
let appList;
|
if(!name) return this.list.map((name) => this.findOneByName(name));
|
||||||
|
|
||||||
if(!name) {
|
return this.list
|
||||||
appList = this.list.map(async (name) => await this.findOneByName(name));
|
.filter((app) => app.includes(name.toLowerCase()))
|
||||||
} else {
|
.map((name) => this.findOneByName(name));
|
||||||
appList = this.list
|
|
||||||
.filter((app) => app.includes(name.toLowerCase()))
|
|
||||||
.map(async (name) => await this.findOneByName(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.all(appList)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static async findOneByName(name: string): Promise<object> {
|
static findOneByName(name: string): object {
|
||||||
const rawAppData = (await import(`../apps/${name}/info`)).default;
|
const rawAppData = fs.readFileSync(this.folderPath + `/${name}/info.json`, 'utf-8');
|
||||||
return rawAppData;
|
return appInfoConverter(rawAppData);
|
||||||
}
|
}
|
||||||
|
|
||||||
static async findOneByKey(key: string): Promise<object> {
|
static findOneByKey(key: string): object {
|
||||||
const rawAppData = (await import(`../apps/${key}/info`)).default;
|
const rawAppData = fs.readFileSync(this.folderPath + `/${key}/info.json`, 'utf-8');
|
||||||
return rawAppData;
|
return appInfoConverter(rawAppData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user