godprotocol 2.2.58 → 2.2.59
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/package.json +1 -1
- package/server/version_control.js +102 -60
package/package.json
CHANGED
|
@@ -1,91 +1,133 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
const getBody = (req) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
let data = "";
|
|
4
|
+
|
|
5
|
+
req.on("data", (chunk) => {
|
|
6
|
+
data += chunk;
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
req.on("end", () => {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = data ? JSON.parse(data) : {};
|
|
12
|
+
resolve(parsed);
|
|
13
|
+
} catch (err) {
|
|
14
|
+
reject(new Error("Invalid JSON body"));
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
req.on("error", (err) => {
|
|
19
|
+
reject(err);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const respond = (result, res) => {
|
|
25
|
+
const response = {
|
|
26
|
+
ok: result?.ok ?? false,
|
|
27
|
+
message: result?.message ?? "",
|
|
28
|
+
data: result?.data,
|
|
6
29
|
};
|
|
7
|
-
if (result.pagination) response.pagination = result.pagination;
|
|
8
|
-
if (result.token) response.token = result.token;
|
|
9
30
|
|
|
10
|
-
if (
|
|
31
|
+
if (result?.pagination) response.pagination = result.pagination;
|
|
32
|
+
if (result?.token) response.token = result.token;
|
|
11
33
|
|
|
12
|
-
|
|
34
|
+
const status = result?.status || (result?.ok ? 200 : 403);
|
|
35
|
+
|
|
36
|
+
res.statusCode = status;
|
|
37
|
+
res.setHeader("Content-Type", "application/json");
|
|
38
|
+
res.end(JSON.stringify(response));
|
|
39
|
+
|
|
40
|
+
return response;
|
|
13
41
|
};
|
|
14
42
|
|
|
15
43
|
const version_middleware = async (req, res, routers) => {
|
|
16
44
|
try {
|
|
17
45
|
const version = req.headers["x-api-version"] || "v1";
|
|
18
46
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
47
|
+
const versionRouter = routers.get_version(version);
|
|
48
|
+
// ----------------------------
|
|
49
|
+
// BODY (STREAM PARSE)
|
|
50
|
+
// ----------------------------
|
|
51
|
+
const body = await getBody(req);
|
|
52
|
+
|
|
53
|
+
if (!versionRouter) {
|
|
54
|
+
res.statusCode = 400;
|
|
55
|
+
return res.end(
|
|
56
|
+
JSON.stringify({
|
|
57
|
+
ok: false,
|
|
58
|
+
error: "Invalid API version",
|
|
59
|
+
version,
|
|
60
|
+
}),
|
|
61
|
+
);
|
|
28
62
|
}
|
|
29
63
|
|
|
30
|
-
|
|
64
|
+
if (versionRouter.config?.is_old) {
|
|
65
|
+
req.body = body;
|
|
66
|
+
return versionRouter.routes(req, res);
|
|
67
|
+
}
|
|
31
68
|
|
|
32
|
-
|
|
33
|
-
|
|
69
|
+
const router = routers;
|
|
70
|
+
const name = req.url.replace(/^\//, "");
|
|
34
71
|
|
|
35
|
-
|
|
36
|
-
result = await router.handle_security(name, req);
|
|
37
|
-
// console.log("Security check result:", result);
|
|
72
|
+
const isWebhook = req.headers["is-webhook"];
|
|
38
73
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
console.error(err);
|
|
74
|
+
// ----------------------------
|
|
75
|
+
// SECURITY
|
|
76
|
+
// ----------------------------
|
|
77
|
+
const securityResult = await router.handle_security(name, req);
|
|
44
78
|
|
|
45
|
-
|
|
79
|
+
if (securityResult !== true) {
|
|
80
|
+
return respond(securityResult, res);
|
|
46
81
|
}
|
|
47
82
|
|
|
48
|
-
|
|
49
|
-
|
|
83
|
+
// ----------------------------
|
|
84
|
+
// DB
|
|
85
|
+
// ----------------------------
|
|
86
|
+
const db = await router.resolve_db(req);
|
|
50
87
|
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
88
|
+
// ----------------------------
|
|
89
|
+
// WEBHOOK PRIOR
|
|
90
|
+
// ----------------------------
|
|
91
|
+
if (!isWebhook) {
|
|
92
|
+
const webPrior = await router.handle_webhook_prior(req);
|
|
54
93
|
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
return await respond(web_prior, res);
|
|
58
|
-
} else {
|
|
59
|
-
req.headers.webhook_prior = web_prior;
|
|
94
|
+
if (webPrior && webPrior.ok === false) {
|
|
95
|
+
return respond(webPrior, res);
|
|
60
96
|
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
try {
|
|
64
|
-
result = await router.execute(name, {
|
|
65
|
-
body: req.body,
|
|
66
|
-
headers: req.headers,
|
|
67
|
-
db: db.db,
|
|
68
|
-
gp: router.gp,
|
|
69
|
-
services: router.get_service,
|
|
70
|
-
});
|
|
71
97
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
console.error(err);
|
|
98
|
+
if (webPrior?.ok) {
|
|
99
|
+
req.headers.webhook_prior = webPrior;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
77
102
|
|
|
78
|
-
|
|
103
|
+
// ----------------------------
|
|
104
|
+
// EXECUTE
|
|
105
|
+
// ----------------------------
|
|
106
|
+
const result = await router.execute(name, {
|
|
107
|
+
body,
|
|
108
|
+
headers: req.headers,
|
|
109
|
+
db: db.db,
|
|
110
|
+
gp: router.gp,
|
|
111
|
+
services: router.get_service,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// ----------------------------
|
|
115
|
+
// WEBHOOK AFTER
|
|
116
|
+
// ----------------------------
|
|
117
|
+
if (!isWebhook) {
|
|
118
|
+
await router.handle_webhook_after(req, result);
|
|
79
119
|
}
|
|
120
|
+
|
|
121
|
+
return respond(result, res);
|
|
80
122
|
} catch (err) {
|
|
81
123
|
console.error("Version Middleware Error:", err);
|
|
82
124
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
125
|
+
res.statusCode = 500;
|
|
126
|
+
res.end(
|
|
127
|
+
JSON.stringify({
|
|
86
128
|
ok: false,
|
|
87
129
|
message: "Internal server error",
|
|
88
|
-
})
|
|
130
|
+
}),
|
|
89
131
|
);
|
|
90
132
|
}
|
|
91
133
|
};
|