godprotocol 2.2.67 → 2.2.70
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 +73 -33
package/package.json
CHANGED
|
@@ -39,25 +39,52 @@ const applyCors = (req, res) => {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
const respond = (result, res) => {
|
|
42
|
+
// ----------------------------
|
|
43
|
+
// REDIRECT
|
|
44
|
+
// ----------------------------
|
|
45
|
+
|
|
46
|
+
if (result?.redirect) {
|
|
47
|
+
const status = result?.status || 302;
|
|
48
|
+
|
|
49
|
+
res.statusCode = status;
|
|
50
|
+
res.setHeader("Location", result.redirect);
|
|
51
|
+
|
|
52
|
+
res.end();
|
|
53
|
+
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ----------------------------
|
|
58
|
+
// NORMAL JSON RESPONSE
|
|
59
|
+
// ----------------------------
|
|
60
|
+
|
|
42
61
|
const response = {
|
|
43
62
|
ok: result?.ok ?? false,
|
|
44
63
|
message: result?.message ?? "",
|
|
45
64
|
data: result?.data,
|
|
46
65
|
};
|
|
47
66
|
|
|
48
|
-
if (result?.pagination)
|
|
49
|
-
|
|
67
|
+
if (result?.pagination) {
|
|
68
|
+
response.pagination = result.pagination;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (result?.token) {
|
|
72
|
+
response.token = result.token;
|
|
73
|
+
}
|
|
50
74
|
|
|
51
75
|
const status = result?.status || (result?.ok ? 200 : 403);
|
|
52
76
|
|
|
53
77
|
res.statusCode = status;
|
|
78
|
+
|
|
54
79
|
res.setHeader("Content-Type", "application/json");
|
|
80
|
+
|
|
55
81
|
res.end(JSON.stringify(response));
|
|
56
82
|
|
|
57
83
|
return response;
|
|
58
84
|
};
|
|
59
85
|
|
|
60
86
|
const version_middleware = async (req, res, routers) => {
|
|
87
|
+
let error_stage = "Version Middleware";
|
|
61
88
|
try {
|
|
62
89
|
applyCors(req, res);
|
|
63
90
|
|
|
@@ -66,67 +93,80 @@ const version_middleware = async (req, res, routers) => {
|
|
|
66
93
|
return res.end();
|
|
67
94
|
}
|
|
68
95
|
|
|
69
|
-
|
|
96
|
+
let version;
|
|
70
97
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
98
|
+
if (req.method === "GET") {
|
|
99
|
+
version = "__GET__";
|
|
100
|
+
} else {
|
|
101
|
+
version = req.headers["x-api-version"] || "v1";
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const versionRouter = await routers.get_version(version);
|
|
76
105
|
|
|
77
106
|
if (!versionRouter) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
return res.end(
|
|
81
|
-
JSON.stringify({
|
|
107
|
+
return respond(
|
|
108
|
+
{
|
|
82
109
|
ok: false,
|
|
83
110
|
message: "Invalid API version",
|
|
84
|
-
|
|
111
|
+
status: 400,
|
|
112
|
+
},
|
|
113
|
+
res,
|
|
85
114
|
);
|
|
86
115
|
}
|
|
87
116
|
|
|
117
|
+
let body = {};
|
|
118
|
+
|
|
119
|
+
if (req.method === "GET") {
|
|
120
|
+
const url = new URL(req.url, `http://${req.headers.host}`);
|
|
121
|
+
|
|
122
|
+
body = Object.fromEntries(url.searchParams.entries());
|
|
123
|
+
} else {
|
|
124
|
+
error_stage = "Body Parser";
|
|
125
|
+
body = await getBody(req);
|
|
126
|
+
}
|
|
127
|
+
|
|
88
128
|
if (versionRouter.config?.is_old) {
|
|
89
129
|
req.body = body;
|
|
90
130
|
return versionRouter.routes(req, res);
|
|
91
131
|
}
|
|
92
132
|
|
|
93
133
|
const router = routers;
|
|
134
|
+
|
|
135
|
+
// remove query string from route
|
|
136
|
+
const parsedUrl = new URL(req.url, `http://${req.headers.host}`);
|
|
137
|
+
req.url = parsedUrl.pathname;
|
|
94
138
|
const name = req.url.replace(/^\//, "");
|
|
95
139
|
|
|
96
140
|
const isWebhook = req.headers["is-webhook"];
|
|
97
141
|
|
|
98
|
-
// ----------------------------
|
|
99
142
|
// SECURITY
|
|
100
|
-
|
|
143
|
+
error_stage = "Header";
|
|
101
144
|
const securityResult = await router.handle_security(name, req);
|
|
102
145
|
|
|
103
146
|
if (securityResult !== true) {
|
|
104
147
|
return respond(securityResult, res);
|
|
105
148
|
}
|
|
106
149
|
|
|
107
|
-
// ----------------------------
|
|
108
150
|
// DB
|
|
109
|
-
// ----------------------------
|
|
110
151
|
const db = await router.resolve_db(req);
|
|
111
152
|
|
|
112
|
-
// ----------------------------
|
|
113
153
|
// WEBHOOK PRIOR
|
|
114
|
-
// ----------------------------
|
|
115
154
|
if (!isWebhook) {
|
|
116
|
-
|
|
155
|
+
error_stage = "Callback";
|
|
156
|
+
const webPrior = await router.handle_webhook_prior({
|
|
157
|
+
...req,
|
|
158
|
+
body,
|
|
159
|
+
});
|
|
117
160
|
|
|
118
161
|
if (!webPrior?.ok) {
|
|
119
162
|
return respond(webPrior, res);
|
|
120
163
|
}
|
|
121
164
|
|
|
122
|
-
|
|
123
|
-
req.headers.webhook_prior = webPrior;
|
|
124
|
-
}
|
|
165
|
+
req.headers.webhook_prior = webPrior;
|
|
125
166
|
}
|
|
126
167
|
|
|
127
|
-
// ----------------------------
|
|
128
168
|
// EXECUTE
|
|
129
|
-
|
|
169
|
+
error_stage = "Handler";
|
|
130
170
|
const result = await router.execute(name, {
|
|
131
171
|
body,
|
|
132
172
|
route: name,
|
|
@@ -134,26 +174,26 @@ const version_middleware = async (req, res, routers) => {
|
|
|
134
174
|
db: db.db,
|
|
135
175
|
gp: router.gp,
|
|
136
176
|
services: router.get_service,
|
|
177
|
+
method: req.method,
|
|
137
178
|
});
|
|
138
179
|
|
|
139
|
-
// ----------------------------
|
|
140
180
|
// WEBHOOK AFTER
|
|
141
|
-
// ----------------------------
|
|
142
181
|
if (!isWebhook) {
|
|
182
|
+
error_stage = "Webhook";
|
|
143
183
|
await router.handle_webhook_after(req, result);
|
|
144
184
|
}
|
|
145
185
|
|
|
146
186
|
return respond(result, res);
|
|
147
187
|
} catch (err) {
|
|
148
|
-
console.error(
|
|
188
|
+
console.error(`${error_stage} Error:`, err);
|
|
149
189
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
res.end(
|
|
153
|
-
JSON.stringify({
|
|
190
|
+
return respond(
|
|
191
|
+
{
|
|
154
192
|
ok: false,
|
|
155
193
|
message: "Internal server error",
|
|
156
|
-
|
|
194
|
+
status: 500,
|
|
195
|
+
},
|
|
196
|
+
res,
|
|
157
197
|
);
|
|
158
198
|
}
|
|
159
199
|
};
|