@dataramen/cli 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/run.js +2 -169
- package/dist/code/cli.js +2 -169
- package/dist/package.json +20 -1
- package/package.json +7 -2
- package/dist/code/api/chat/router.js +0 -55
- package/dist/code/api/dataSources/router.js +0 -147
- package/dist/code/api/dataSources/types.js +0 -2
- package/dist/code/api/dataSources/validators.js +0 -22
- package/dist/code/api/project/router.js +0 -100
- package/dist/code/api/queries/router.js +0 -122
- package/dist/code/api/runner/router.js +0 -22
- package/dist/code/api/status/router.js +0 -17
- package/dist/code/api/teams/router.js +0 -35
- package/dist/code/api/userSettings/router.js +0 -54
- package/dist/code/api/users/router.js +0 -91
- package/dist/code/api/workbooks/router.js +0 -123
- package/dist/code/api/workbooks/types.js +0 -2
- package/dist/code/env.js +0 -25
- package/dist/code/index.js +0 -86
- package/dist/code/repository/db.js +0 -58
- package/dist/code/repository/tables/databaseInspection.js +0 -40
- package/dist/code/repository/tables/datasource.js +0 -86
- package/dist/code/repository/tables/query.js +0 -50
- package/dist/code/repository/tables/teams.js +0 -48
- package/dist/code/repository/tables/userSettings.js +0 -39
- package/dist/code/repository/tables/users.js +0 -42
- package/dist/code/repository/tables/workbook.js +0 -43
- package/dist/code/services/connectorManager/index.js +0 -38
- package/dist/code/services/connectorManager/types.js +0 -2
- package/dist/code/services/files/index.js +0 -44
- package/dist/code/services/mysqlConnector/index.js +0 -180
- package/dist/code/services/oauthClient/oauth2Client.js +0 -10
- package/dist/code/services/openai/index.js +0 -20
- package/dist/code/services/openai/types.js +0 -2
- package/dist/code/services/pgConnector/index.js +0 -220
- package/dist/code/services/userSqlPromptRunner/index.js +0 -207
- package/dist/code/types/connectors.js +0 -2
- package/dist/code/utils/createRouter.js +0 -10
- package/dist/code/utils/httpError.js +0 -13
- package/dist/code/utils/prompts.js +0 -11
- package/dist/code/utils/queryUtils.js +0 -18
- package/dist/code/utils/rawSql.js +0 -32
- package/dist/code/utils/request.js +0 -35
- package/dist/code/utils/token.js +0 -8
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const request_1 = require("../../utils/request");
|
|
5
|
-
const db_1 = require("../../repository/db");
|
|
6
|
-
const typeorm_1 = require("typeorm");
|
|
7
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
8
|
-
instance.get("/team/:teamId/files", async (request, reply) => {
|
|
9
|
-
const { teamId } = (0, request_1.getRequestParams)(request);
|
|
10
|
-
const query = {
|
|
11
|
-
where: {
|
|
12
|
-
team: {
|
|
13
|
-
id: teamId,
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
order: {
|
|
17
|
-
name: 'ASC',
|
|
18
|
-
},
|
|
19
|
-
select: {
|
|
20
|
-
id: true,
|
|
21
|
-
name: true,
|
|
22
|
-
updatedAt: true,
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
const [dataSources = [], workbooks = [], queries = []] = await Promise.all([
|
|
26
|
-
db_1.DataSourceRepository.find(query),
|
|
27
|
-
db_1.WorkbookRepository.find({
|
|
28
|
-
...query,
|
|
29
|
-
where: {
|
|
30
|
-
...query.where,
|
|
31
|
-
isTrash: false,
|
|
32
|
-
}
|
|
33
|
-
}),
|
|
34
|
-
db_1.QueriesRepository.find({
|
|
35
|
-
...query,
|
|
36
|
-
where: {
|
|
37
|
-
...query.where,
|
|
38
|
-
isTrash: false,
|
|
39
|
-
}
|
|
40
|
-
})
|
|
41
|
-
]);
|
|
42
|
-
return {
|
|
43
|
-
data: [
|
|
44
|
-
...dataSources.map((d) => ({ ...d, type: "dataSource" })),
|
|
45
|
-
...workbooks.map((w) => ({ ...w, type: "workbook" })),
|
|
46
|
-
...queries.map((w) => ({ ...w, type: "query" })),
|
|
47
|
-
],
|
|
48
|
-
};
|
|
49
|
-
});
|
|
50
|
-
instance.get("/team/:teamId/trash", async (request) => {
|
|
51
|
-
const { teamId } = (0, request_1.getRequestParams)(request);
|
|
52
|
-
const workbooks = await db_1.AppDataSource.query(`
|
|
53
|
-
select id, name, updatedAt
|
|
54
|
-
from workbooks
|
|
55
|
-
where teamId = '${teamId}' AND (isTrash = true OR isTrash IS NULL)
|
|
56
|
-
order by name asc
|
|
57
|
-
limit 100;
|
|
58
|
-
`);
|
|
59
|
-
return {
|
|
60
|
-
data: workbooks,
|
|
61
|
-
};
|
|
62
|
-
});
|
|
63
|
-
instance.get("/team/:teamId/tables", async (request) => {
|
|
64
|
-
const { teamId } = (0, request_1.getRequestParams)(request);
|
|
65
|
-
const { search, size } = (0, request_1.getRequestQuery)(request);
|
|
66
|
-
const tables = await db_1.DatabaseInspectionRepository.find({
|
|
67
|
-
where: {
|
|
68
|
-
tableName: (0, typeorm_1.Like)(`%${search}%`),
|
|
69
|
-
datasource: {
|
|
70
|
-
team: {
|
|
71
|
-
id: teamId,
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
relations: {
|
|
76
|
-
datasource: true,
|
|
77
|
-
},
|
|
78
|
-
select: {
|
|
79
|
-
id: true,
|
|
80
|
-
tableName: true,
|
|
81
|
-
datasource: {
|
|
82
|
-
name: true,
|
|
83
|
-
id: true,
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
order: {
|
|
87
|
-
tableName: "ASC",
|
|
88
|
-
},
|
|
89
|
-
take: parseInt(size) || 20,
|
|
90
|
-
});
|
|
91
|
-
return {
|
|
92
|
-
data: tables.map(t => ({
|
|
93
|
-
name: t.tableName,
|
|
94
|
-
id: t.id,
|
|
95
|
-
dataSourceName: t.datasource?.name || '--',
|
|
96
|
-
dataSourceId: t.datasource?.id || '--',
|
|
97
|
-
})),
|
|
98
|
-
};
|
|
99
|
-
});
|
|
100
|
-
});
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const request_1 = require("../../utils/request");
|
|
5
|
-
const queryUtils_1 = require("../../utils/queryUtils");
|
|
6
|
-
const httpError_1 = require("../../utils/httpError");
|
|
7
|
-
const db_1 = require("../../repository/db");
|
|
8
|
-
const typeorm_1 = require("typeorm");
|
|
9
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
10
|
-
instance.get("/", async (request) => {
|
|
11
|
-
const { dataSourceId, teamId, limit, orderBy, name } = (0, request_1.getRequestQuery)(request);
|
|
12
|
-
if (!dataSourceId && !teamId) {
|
|
13
|
-
throw new httpError_1.HttpError(400, "Either dsId or teamId is required");
|
|
14
|
-
}
|
|
15
|
-
const where = {
|
|
16
|
-
isTrash: false,
|
|
17
|
-
};
|
|
18
|
-
if (dataSourceId) {
|
|
19
|
-
where.dataSource = {
|
|
20
|
-
id: dataSourceId,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
if (teamId) {
|
|
24
|
-
where.team = {
|
|
25
|
-
id: teamId,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
if (name) {
|
|
29
|
-
where.name = (0, typeorm_1.Like)(`%${name}%`);
|
|
30
|
-
}
|
|
31
|
-
const queries = await db_1.QueriesRepository.find({
|
|
32
|
-
where,
|
|
33
|
-
take: limit,
|
|
34
|
-
order: (0, queryUtils_1.parseOrderQueryParam)(orderBy, {
|
|
35
|
-
createdAt: "DESC",
|
|
36
|
-
})
|
|
37
|
-
});
|
|
38
|
-
return {
|
|
39
|
-
data: queries,
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
instance.get("/:id", async (request) => {
|
|
43
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
44
|
-
const query = await db_1.QueriesRepository.findOne({
|
|
45
|
-
where: {
|
|
46
|
-
id,
|
|
47
|
-
},
|
|
48
|
-
select: {
|
|
49
|
-
dataSource: {
|
|
50
|
-
id: true,
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
relations: {
|
|
54
|
-
dataSource: true,
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
if (!query) {
|
|
58
|
-
return {
|
|
59
|
-
status: 404,
|
|
60
|
-
data: "Query not found",
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
return {
|
|
64
|
-
data: query,
|
|
65
|
-
};
|
|
66
|
-
});
|
|
67
|
-
instance.post("/", async (request) => {
|
|
68
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
69
|
-
const dataSource = await db_1.DataSourceRepository.findOne({
|
|
70
|
-
where: {
|
|
71
|
-
id: payload.dataSourceId,
|
|
72
|
-
},
|
|
73
|
-
relations: {
|
|
74
|
-
team: true,
|
|
75
|
-
},
|
|
76
|
-
});
|
|
77
|
-
const query = await db_1.QueriesRepository.save(db_1.QueriesRepository.create({
|
|
78
|
-
name: payload.name,
|
|
79
|
-
isTrash: false,
|
|
80
|
-
opts: payload.opts,
|
|
81
|
-
team: {
|
|
82
|
-
id: dataSource?.team.id,
|
|
83
|
-
},
|
|
84
|
-
dataSource: {
|
|
85
|
-
id: payload.dataSourceId,
|
|
86
|
-
}
|
|
87
|
-
}));
|
|
88
|
-
return {
|
|
89
|
-
data: query,
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
// update workbook
|
|
93
|
-
instance.patch("/:id", async (request) => {
|
|
94
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
95
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
96
|
-
const result = await db_1.QueriesRepository.update(id, payload);
|
|
97
|
-
if (!result.affected) {
|
|
98
|
-
throw new httpError_1.HttpError(404, "Workbook not found");
|
|
99
|
-
}
|
|
100
|
-
const query = await db_1.QueriesRepository.findOneBy({
|
|
101
|
-
id,
|
|
102
|
-
});
|
|
103
|
-
return {
|
|
104
|
-
data: query,
|
|
105
|
-
};
|
|
106
|
-
});
|
|
107
|
-
// delete query
|
|
108
|
-
instance.delete("/:id", async (request) => {
|
|
109
|
-
return db_1.AppDataSource.transaction(async () => {
|
|
110
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
111
|
-
const result = await db_1.QueriesRepository.delete({
|
|
112
|
-
id
|
|
113
|
-
});
|
|
114
|
-
if (!result.affected) {
|
|
115
|
-
return {
|
|
116
|
-
status: 404,
|
|
117
|
-
data: "Workbook not found",
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
});
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const request_1 = require("../../utils/request");
|
|
5
|
-
const userSqlPromptRunner_1 = require("../../services/userSqlPromptRunner");
|
|
6
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
7
|
-
// run sql
|
|
8
|
-
instance.post("/sql", async (request) => {
|
|
9
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
10
|
-
const result = await (0, userSqlPromptRunner_1.runUserSqlQuery)(request, payload);
|
|
11
|
-
return {
|
|
12
|
-
data: result,
|
|
13
|
-
};
|
|
14
|
-
});
|
|
15
|
-
instance.post("/raw", async (request) => {
|
|
16
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
17
|
-
const result = await (0, userSqlPromptRunner_1.runRawSqlQuery)(request, payload);
|
|
18
|
-
return {
|
|
19
|
-
data: result,
|
|
20
|
-
};
|
|
21
|
-
});
|
|
22
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const node_child_process_1 = require("node:child_process");
|
|
5
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
6
|
-
instance.get("/", async (request, reply) => {
|
|
7
|
-
return {
|
|
8
|
-
data: {
|
|
9
|
-
active: true,
|
|
10
|
-
version: process.env.SERVER_VERSION,
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
});
|
|
14
|
-
instance.get("/logs", async () => {
|
|
15
|
-
(0, node_child_process_1.spawn)(`echo "${process.env.SERVER_VERSION}"`);
|
|
16
|
-
});
|
|
17
|
-
});
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const request_1 = require("../../utils/request");
|
|
5
|
-
const db_1 = require("../../repository/db");
|
|
6
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
7
|
-
instance.get("/", async (request, reply) => {
|
|
8
|
-
const userId = (0, request_1.getRequestUserId)(request);
|
|
9
|
-
const teams = await db_1.TeamRepository.find({
|
|
10
|
-
where: {
|
|
11
|
-
users: {
|
|
12
|
-
id: userId,
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
});
|
|
16
|
-
return {
|
|
17
|
-
data: teams,
|
|
18
|
-
};
|
|
19
|
-
});
|
|
20
|
-
// post
|
|
21
|
-
instance.post("/", async (request, reply) => {
|
|
22
|
-
return db_1.AppDataSource.transaction(async () => {
|
|
23
|
-
const userId = (0, request_1.getRequestUserId)(request);
|
|
24
|
-
const teamPayload = (0, request_1.getRequestPayload)(request);
|
|
25
|
-
const user = db_1.UserRepository.create();
|
|
26
|
-
user.id = userId;
|
|
27
|
-
const team = db_1.TeamRepository.create(teamPayload);
|
|
28
|
-
team.users = [user];
|
|
29
|
-
await db_1.TeamRepository.save(team);
|
|
30
|
-
return {
|
|
31
|
-
data: team,
|
|
32
|
-
};
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const request_1 = require("../../utils/request");
|
|
5
|
-
const httpError_1 = require("../../utils/httpError");
|
|
6
|
-
const token_1 = require("../../utils/token");
|
|
7
|
-
const db_1 = require("../../repository/db");
|
|
8
|
-
function sanitizeFeSettings(settings) {
|
|
9
|
-
const newSettings = db_1.UserSettingsRepository.create(settings);
|
|
10
|
-
if (settings.openAiToken) {
|
|
11
|
-
newSettings.openAiToken = (0, token_1.sanitizeOpenAIToken)(settings.openAiToken);
|
|
12
|
-
}
|
|
13
|
-
return newSettings;
|
|
14
|
-
}
|
|
15
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
16
|
-
// get user settings by user id
|
|
17
|
-
instance.get("/", async (req) => {
|
|
18
|
-
const userId = (0, request_1.getRequestUserId)(req);
|
|
19
|
-
let settings = await db_1.UserSettingsRepository.findOneBy({
|
|
20
|
-
user: {
|
|
21
|
-
id: userId,
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
if (!settings) {
|
|
25
|
-
// create default settings if not found
|
|
26
|
-
settings = await db_1.UserSettingsRepository.save(db_1.UserSettingsRepository.create({
|
|
27
|
-
user: {
|
|
28
|
-
id: userId,
|
|
29
|
-
},
|
|
30
|
-
model: "gpt-4o",
|
|
31
|
-
}));
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
data: sanitizeFeSettings(settings),
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
// update user settings
|
|
38
|
-
instance.patch("/", async (req) => {
|
|
39
|
-
const { settings } = (0, request_1.getRequestPayload)(req);
|
|
40
|
-
if (!settings.id) {
|
|
41
|
-
throw new httpError_1.HttpError(400, "Settings id is required!");
|
|
42
|
-
}
|
|
43
|
-
const result = await db_1.UserSettingsRepository.update(settings.id, settings);
|
|
44
|
-
if (!result.affected) {
|
|
45
|
-
throw new httpError_1.HttpError(404, "You do not own these settings!");
|
|
46
|
-
}
|
|
47
|
-
const updatedSettings = await db_1.UserSettingsRepository.findOneBy({
|
|
48
|
-
id: settings.id,
|
|
49
|
-
});
|
|
50
|
-
return {
|
|
51
|
-
data: updatedSettings,
|
|
52
|
-
};
|
|
53
|
-
});
|
|
54
|
-
});
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const request_1 = require("../../utils/request");
|
|
5
|
-
const httpError_1 = require("../../utils/httpError");
|
|
6
|
-
const oauth2Client_1 = require("../../services/oauthClient/oauth2Client");
|
|
7
|
-
const db_1 = require("../../repository/db");
|
|
8
|
-
async function createUser() {
|
|
9
|
-
const team = db_1.TeamRepository.create({
|
|
10
|
-
name: "Personal",
|
|
11
|
-
});
|
|
12
|
-
const user = await db_1.UserRepository.save(db_1.UserRepository.create({}));
|
|
13
|
-
team.users = [user];
|
|
14
|
-
await db_1.TeamRepository.save(team);
|
|
15
|
-
await db_1.UserRepository.update(user.id, {
|
|
16
|
-
currentTeam: {
|
|
17
|
-
id: team.id,
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
return db_1.UserRepository.findOne({
|
|
21
|
-
where: {},
|
|
22
|
-
relations: {
|
|
23
|
-
currentTeam: true,
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
28
|
-
instance.post("/register", async (request, reply) => {
|
|
29
|
-
const userInfo = await (0, oauth2Client_1.getTokenInfoFromRequest)(request);
|
|
30
|
-
if (!userInfo?.email || !userInfo?.sub) {
|
|
31
|
-
throw new httpError_1.HttpError(400, "Invalid token");
|
|
32
|
-
}
|
|
33
|
-
const user = await createUser();
|
|
34
|
-
return {
|
|
35
|
-
data: user,
|
|
36
|
-
};
|
|
37
|
-
});
|
|
38
|
-
// get user
|
|
39
|
-
instance.get("/", async (request, reply) => {
|
|
40
|
-
const user = await db_1.UserRepository.findOne({
|
|
41
|
-
where: {}, // select first user
|
|
42
|
-
relations: {
|
|
43
|
-
currentTeam: true,
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
if (!user) {
|
|
47
|
-
const user = await createUser();
|
|
48
|
-
return {
|
|
49
|
-
data: user,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
data: user,
|
|
54
|
-
};
|
|
55
|
-
});
|
|
56
|
-
// update user
|
|
57
|
-
instance.put("/", async (request, reply) => {
|
|
58
|
-
const userId = (0, request_1.getRequestUserId)(request);
|
|
59
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
60
|
-
const result = await db_1.UserRepository.update(userId, payload);
|
|
61
|
-
if (!result.affected) {
|
|
62
|
-
throw new httpError_1.HttpError(404, "User not found");
|
|
63
|
-
}
|
|
64
|
-
const user = db_1.UserRepository.findOneBy({
|
|
65
|
-
id: userId,
|
|
66
|
-
});
|
|
67
|
-
return {
|
|
68
|
-
data: user,
|
|
69
|
-
};
|
|
70
|
-
});
|
|
71
|
-
instance.put('/team', async (request, reply) => {
|
|
72
|
-
const userId = (0, request_1.getRequestUserId)(request);
|
|
73
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
74
|
-
await db_1.UserRepository.update(userId, {
|
|
75
|
-
currentTeam: {
|
|
76
|
-
id: payload.teamId,
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
const user = await db_1.UserRepository.findOne({
|
|
80
|
-
where: {
|
|
81
|
-
id: userId,
|
|
82
|
-
},
|
|
83
|
-
relations: {
|
|
84
|
-
currentTeam: true,
|
|
85
|
-
},
|
|
86
|
-
});
|
|
87
|
-
return {
|
|
88
|
-
data: user,
|
|
89
|
-
};
|
|
90
|
-
});
|
|
91
|
-
});
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const createRouter_1 = require("../../utils/createRouter");
|
|
4
|
-
const request_1 = require("../../utils/request");
|
|
5
|
-
const queryUtils_1 = require("../../utils/queryUtils");
|
|
6
|
-
const httpError_1 = require("../../utils/httpError");
|
|
7
|
-
const db_1 = require("../../repository/db");
|
|
8
|
-
const files_1 = require("../../services/files");
|
|
9
|
-
exports.default = (0, createRouter_1.createRouter)((instance) => {
|
|
10
|
-
instance.get("/", async (request) => {
|
|
11
|
-
const { dsId, teamId, limit, orderBy } = (0, request_1.getRequestQuery)(request);
|
|
12
|
-
if (!dsId && !teamId) {
|
|
13
|
-
throw new httpError_1.HttpError(400, "Either dsId or teamId is required");
|
|
14
|
-
}
|
|
15
|
-
const workbooks = await db_1.WorkbookRepository.find({
|
|
16
|
-
where: {
|
|
17
|
-
team: {
|
|
18
|
-
id: teamId,
|
|
19
|
-
},
|
|
20
|
-
isTrash: false,
|
|
21
|
-
},
|
|
22
|
-
take: limit,
|
|
23
|
-
order: (0, queryUtils_1.parseOrderQueryParam)(orderBy, {
|
|
24
|
-
createdAt: "DESC",
|
|
25
|
-
})
|
|
26
|
-
});
|
|
27
|
-
return {
|
|
28
|
-
data: workbooks,
|
|
29
|
-
};
|
|
30
|
-
});
|
|
31
|
-
instance.get("/:id", async (request) => {
|
|
32
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
33
|
-
const workbook = await db_1.WorkbookRepository.findOneBy({
|
|
34
|
-
id,
|
|
35
|
-
});
|
|
36
|
-
if (!workbook) {
|
|
37
|
-
return {
|
|
38
|
-
status: 404,
|
|
39
|
-
data: "Workbook not found",
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
return {
|
|
43
|
-
data: workbook,
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
instance.post("/", async (request) => {
|
|
47
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
48
|
-
const workbook = await db_1.WorkbookRepository.save(db_1.WorkbookRepository.create({
|
|
49
|
-
name: payload.name,
|
|
50
|
-
isTrash: false,
|
|
51
|
-
team: {
|
|
52
|
-
id: payload.teamId,
|
|
53
|
-
}
|
|
54
|
-
}));
|
|
55
|
-
return {
|
|
56
|
-
data: workbook,
|
|
57
|
-
};
|
|
58
|
-
});
|
|
59
|
-
// update workbook
|
|
60
|
-
instance.patch("/:id", async (request) => {
|
|
61
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
62
|
-
const payload = (0, request_1.getRequestPayload)(request);
|
|
63
|
-
const result = await db_1.WorkbookRepository.update(id, payload);
|
|
64
|
-
if (!result.affected) {
|
|
65
|
-
throw new httpError_1.HttpError(404, "Workbook not found");
|
|
66
|
-
}
|
|
67
|
-
const workbook = await db_1.WorkbookRepository.findOneBy({
|
|
68
|
-
id,
|
|
69
|
-
});
|
|
70
|
-
return {
|
|
71
|
-
data: workbook,
|
|
72
|
-
};
|
|
73
|
-
});
|
|
74
|
-
// delete workbook
|
|
75
|
-
instance.delete("/:id", async (request) => {
|
|
76
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
77
|
-
// todo: delete file
|
|
78
|
-
const result = await db_1.WorkbookRepository.delete({
|
|
79
|
-
id
|
|
80
|
-
});
|
|
81
|
-
if (!result.affected) {
|
|
82
|
-
return {
|
|
83
|
-
status: 404,
|
|
84
|
-
data: "Workbook not found",
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
instance.get("/:id/content", async (request) => {
|
|
89
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
90
|
-
const workbook = await db_1.WorkbookRepository.findOneBy({
|
|
91
|
-
id,
|
|
92
|
-
});
|
|
93
|
-
if (!workbook) {
|
|
94
|
-
throw new httpError_1.HttpError(404, "Workbook not found");
|
|
95
|
-
}
|
|
96
|
-
try {
|
|
97
|
-
const file = await (0, files_1.getFile)(workbook?.path);
|
|
98
|
-
if (file) {
|
|
99
|
-
return {
|
|
100
|
-
data: file,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
catch (e) { }
|
|
105
|
-
return {
|
|
106
|
-
data: "",
|
|
107
|
-
};
|
|
108
|
-
});
|
|
109
|
-
instance.patch("/:id/content", async (request) => {
|
|
110
|
-
const { id } = (0, request_1.getRequestParams)(request);
|
|
111
|
-
const body = (0, request_1.getRequestPayload)(request);
|
|
112
|
-
const workbook = await db_1.WorkbookRepository.findOneBy({
|
|
113
|
-
id,
|
|
114
|
-
});
|
|
115
|
-
if (!workbook?.path) {
|
|
116
|
-
throw new httpError_1.HttpError(404, "Workbook not found");
|
|
117
|
-
}
|
|
118
|
-
await (0, files_1.storeFile)(workbook?.path, body.content);
|
|
119
|
-
await db_1.WorkbookRepository.update(workbook.id, {
|
|
120
|
-
updatedAt: new Date()
|
|
121
|
-
});
|
|
122
|
-
});
|
|
123
|
-
});
|
package/dist/code/env.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const dotenv_1 = require("dotenv");
|
|
4
|
-
const node_path_1 = require("node:path");
|
|
5
|
-
const node_fs_1 = require("node:fs");
|
|
6
|
-
const packageJson = (() => {
|
|
7
|
-
try {
|
|
8
|
-
const file = (0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, "..", "package.json"), "utf8");
|
|
9
|
-
return JSON.parse(file);
|
|
10
|
-
}
|
|
11
|
-
catch (e) {
|
|
12
|
-
return {
|
|
13
|
-
version: "0.0.0",
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
})();
|
|
17
|
-
(0, dotenv_1.config)({
|
|
18
|
-
path: [
|
|
19
|
-
(0, node_path_1.join)(__dirname, "..", "env", ".env"),
|
|
20
|
-
(0, node_path_1.join)(__dirname, "..", "env", ".env.default"),
|
|
21
|
-
],
|
|
22
|
-
});
|
|
23
|
-
(0, dotenv_1.populate)(process.env, {
|
|
24
|
-
SERVER_VERSION: packageJson.version,
|
|
25
|
-
});
|
package/dist/code/index.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
require("./env");
|
|
7
|
-
const fastify_1 = __importDefault(require("fastify"));
|
|
8
|
-
const cors_1 = __importDefault(require("@fastify/cors"));
|
|
9
|
-
const httpError_1 = require("./utils/httpError");
|
|
10
|
-
const db_1 = require("./repository/db");
|
|
11
|
-
const files_1 = require("./services/files");
|
|
12
|
-
const router_1 = __importDefault(require("./api/chat/router"));
|
|
13
|
-
const router_2 = __importDefault(require("./api/dataSources/router"));
|
|
14
|
-
const router_3 = __importDefault(require("./api/project/router"));
|
|
15
|
-
const router_4 = __importDefault(require("./api/queries/router"));
|
|
16
|
-
const router_5 = __importDefault(require("./api/runner/router"));
|
|
17
|
-
const router_6 = __importDefault(require("./api/status/router"));
|
|
18
|
-
const router_7 = __importDefault(require("./api/teams/router"));
|
|
19
|
-
const router_8 = __importDefault(require("./api/users/router"));
|
|
20
|
-
const router_9 = __importDefault(require("./api/userSettings/router"));
|
|
21
|
-
const router_10 = __importDefault(require("./api/workbooks/router"));
|
|
22
|
-
const server = (0, fastify_1.default)();
|
|
23
|
-
const PORT = process.env.PORT ? parseInt(process.env.PORT) : 4466;
|
|
24
|
-
function registerRouter(fn, prefix) {
|
|
25
|
-
server.register(fn, { prefix });
|
|
26
|
-
console.log("Registered " + prefix);
|
|
27
|
-
}
|
|
28
|
-
async function initialize() {
|
|
29
|
-
await (0, files_1.setupProjectFolders)(); // creates .dataramen/files
|
|
30
|
-
// const routers = glob.sync("./api/**/router.js", {
|
|
31
|
-
// cwd: __dirname,
|
|
32
|
-
// });
|
|
33
|
-
//
|
|
34
|
-
// routers.forEach((file) => {
|
|
35
|
-
// const apiName = file.split("/")[2];
|
|
36
|
-
// const prefix = "/api/" + folderNameToSnakeCase(apiName);
|
|
37
|
-
// server.register(require(file), { prefix });
|
|
38
|
-
// console.log(`${prefix} -> ${apiName} controller `);
|
|
39
|
-
// });
|
|
40
|
-
registerRouter(router_1.default, `/api/chat`);
|
|
41
|
-
registerRouter(router_2.default, `/api/data-sources`);
|
|
42
|
-
registerRouter(router_3.default, `/api/project`);
|
|
43
|
-
registerRouter(router_4.default, `/api/queries`);
|
|
44
|
-
registerRouter(router_5.default, `/api/runner`);
|
|
45
|
-
registerRouter(router_6.default, `/api/status`);
|
|
46
|
-
registerRouter(router_7.default, `/api/teams`);
|
|
47
|
-
registerRouter(router_8.default, `/api/users`);
|
|
48
|
-
registerRouter(router_9.default, `/api/user-settings`);
|
|
49
|
-
registerRouter(router_10.default, `/api/workbooks`);
|
|
50
|
-
server.register(cors_1.default, {
|
|
51
|
-
origin: "*",
|
|
52
|
-
methods: "*",
|
|
53
|
-
});
|
|
54
|
-
server.addHook("onResponse", async (request) => {
|
|
55
|
-
if (request.__connections) {
|
|
56
|
-
request.__connections.forEach((connection) => {
|
|
57
|
-
connection.close();
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
server.setErrorHandler((error, request, reply) => {
|
|
62
|
-
if (error instanceof httpError_1.HttpError) {
|
|
63
|
-
console.error(error);
|
|
64
|
-
reply.status(error.status).send({
|
|
65
|
-
error: error.message,
|
|
66
|
-
});
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
console.error(error);
|
|
71
|
-
reply.status(500).send({
|
|
72
|
-
error: "Internal Server Error",
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
await server.after();
|
|
77
|
-
await (0, db_1.init)();
|
|
78
|
-
server.listen({ port: PORT, host: '0.0.0.0' }, (err, address) => {
|
|
79
|
-
if (err) {
|
|
80
|
-
console.error(err);
|
|
81
|
-
process.exit(1);
|
|
82
|
-
}
|
|
83
|
-
console.log(`Server listening at ${address}`);
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
initialize();
|