godprotocol 2.3.60 → 2.3.62
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
CHANGED
|
@@ -61,7 +61,7 @@ class Route_table extends Headers {
|
|
|
61
61
|
|
|
62
62
|
handle_before = async (payload) => {
|
|
63
63
|
for (const callback of this.before_callbacks) {
|
|
64
|
-
const result = await callback(payload);
|
|
64
|
+
const result = await callback(payload, this.gp);
|
|
65
65
|
|
|
66
66
|
if (result && result.ok === false) {
|
|
67
67
|
return result;
|
|
@@ -71,9 +71,9 @@ class Route_table extends Headers {
|
|
|
71
71
|
return { ok: true };
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
-
handle_after = async (payload
|
|
74
|
+
handle_after = async (payload) => {
|
|
75
75
|
for (const callback of this.after_callbacks) {
|
|
76
|
-
await callback(payload,
|
|
76
|
+
await callback(payload, this.gp);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
return { ok: true };
|
|
@@ -81,7 +81,7 @@ class Route_table extends Headers {
|
|
|
81
81
|
|
|
82
82
|
handle_error_callback = async (payload) => {
|
|
83
83
|
for (const callback of this.error_callbacks) {
|
|
84
|
-
await callback(payload);
|
|
84
|
+
await callback(payload, this.gp);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
return { ok: true };
|
|
@@ -11,16 +11,44 @@ const getBody = (req) => {
|
|
|
11
11
|
|
|
12
12
|
req.on("end", () => {
|
|
13
13
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
if (!data.trim()) {
|
|
15
|
+
return resolve({});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const contentType = req.headers["content-type"] || "";
|
|
19
|
+
|
|
20
|
+
// JSON
|
|
21
|
+
if (contentType.includes("application/json")) {
|
|
22
|
+
try {
|
|
23
|
+
return resolve(JSON.parse(data));
|
|
24
|
+
} catch {
|
|
25
|
+
return resolve(data);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Form URL Encoded
|
|
30
|
+
if (contentType.includes("application/x-www-form-urlencoded")) {
|
|
31
|
+
return resolve(Object.fromEntries(new URLSearchParams(data)));
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Plain text
|
|
35
|
+
if (contentType.includes("text/plain")) {
|
|
36
|
+
return resolve(data);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Unknown type:
|
|
40
|
+
// attempt JSON, otherwise return raw body
|
|
41
|
+
try {
|
|
42
|
+
return resolve(JSON.parse(data));
|
|
43
|
+
} catch {
|
|
44
|
+
return resolve(data);
|
|
45
|
+
}
|
|
16
46
|
} catch (err) {
|
|
17
|
-
reject(
|
|
47
|
+
reject(err);
|
|
18
48
|
}
|
|
19
49
|
});
|
|
20
50
|
|
|
21
|
-
req.on("error",
|
|
22
|
-
reject(err);
|
|
23
|
-
});
|
|
51
|
+
req.on("error", reject);
|
|
24
52
|
});
|
|
25
53
|
};
|
|
26
54
|
|
|
@@ -224,6 +252,20 @@ const respond = (result, res) => {
|
|
|
224
252
|
const version_middleware = async (req, res, routers) => {
|
|
225
253
|
let error_stage = "Version Middleware";
|
|
226
254
|
|
|
255
|
+
// Hoisted so the catch block can see them — try/catch are separate
|
|
256
|
+
// block scopes, so anything declared with let/const *inside* try
|
|
257
|
+
// is invisible inside catch. These need to exist before try starts.
|
|
258
|
+
let version;
|
|
259
|
+
let versionRouter;
|
|
260
|
+
let query = {};
|
|
261
|
+
let body = {};
|
|
262
|
+
let name;
|
|
263
|
+
let router;
|
|
264
|
+
let securityResult;
|
|
265
|
+
let callback;
|
|
266
|
+
let payload;
|
|
267
|
+
let result;
|
|
268
|
+
|
|
227
269
|
try {
|
|
228
270
|
applyCors(req, res);
|
|
229
271
|
|
|
@@ -235,8 +277,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
235
277
|
const parsed_url = new URL(req.url, `http://${req.headers.host}`);
|
|
236
278
|
const pathname = parsed_url.pathname;
|
|
237
279
|
|
|
238
|
-
|
|
239
|
-
const query = Object.fromEntries(parsed_url.searchParams.entries());
|
|
280
|
+
query = Object.fromEntries(parsed_url.searchParams.entries()); // was: const query =
|
|
240
281
|
req.query = query;
|
|
241
282
|
|
|
242
283
|
req.request_id = crypto.randomUUID();
|
|
@@ -245,8 +286,6 @@ const version_middleware = async (req, res, routers) => {
|
|
|
245
286
|
res.request_id = req.request_id;
|
|
246
287
|
|
|
247
288
|
// STATIC ROUTE DETECTION
|
|
248
|
-
let version;
|
|
249
|
-
|
|
250
289
|
const versionMatch = pathname.match(/^\/api\/([^\/]+)(\/|$)/i);
|
|
251
290
|
if (req.method === "GET") {
|
|
252
291
|
if (routers.static_path && pathname.startsWith(routers.static_path)) {
|
|
@@ -267,7 +306,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
267
306
|
req.headers["x-platform"],
|
|
268
307
|
);
|
|
269
308
|
|
|
270
|
-
|
|
309
|
+
versionRouter = await routers.get_version(version);
|
|
271
310
|
|
|
272
311
|
if (!versionRouter) {
|
|
273
312
|
version = "*";
|
|
@@ -288,10 +327,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
288
327
|
|
|
289
328
|
version = versionRouter.version;
|
|
290
329
|
|
|
291
|
-
let body = {};
|
|
292
|
-
|
|
293
330
|
if (req.method === "GET") {
|
|
294
|
-
// GET keeps existing behavior: query params double as body
|
|
295
331
|
body = query;
|
|
296
332
|
} else {
|
|
297
333
|
const contentType = req.headers["content-type"] || "";
|
|
@@ -309,7 +345,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
309
345
|
return versionRouter.routes(req, res);
|
|
310
346
|
}
|
|
311
347
|
|
|
312
|
-
|
|
348
|
+
router = routers;
|
|
313
349
|
|
|
314
350
|
// remove query string from route
|
|
315
351
|
let routePath = pathname;
|
|
@@ -324,13 +360,13 @@ const version_middleware = async (req, res, routers) => {
|
|
|
324
360
|
|
|
325
361
|
req.url = routePath;
|
|
326
362
|
|
|
327
|
-
|
|
363
|
+
name = routePath.replace(/^\//, ""); // was: let name =
|
|
328
364
|
|
|
329
365
|
const isWebhook = req.headers["is-webhook"];
|
|
330
366
|
|
|
331
367
|
// SECURITY
|
|
332
368
|
error_stage = "Header";
|
|
333
|
-
|
|
369
|
+
securityResult = await router.handle_security(name, req, version); // was: const securityResult =
|
|
334
370
|
|
|
335
371
|
if (securityResult !== true) {
|
|
336
372
|
return respond(securityResult, res);
|
|
@@ -344,22 +380,19 @@ const version_middleware = async (req, res, routers) => {
|
|
|
344
380
|
});
|
|
345
381
|
|
|
346
382
|
// WEBHOOK PRIOR
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
},
|
|
355
|
-
router.gp,
|
|
356
|
-
);
|
|
383
|
+
callback = await router.handle_before({
|
|
384
|
+
req,
|
|
385
|
+
body,
|
|
386
|
+
query,
|
|
387
|
+
route: name,
|
|
388
|
+
db: db.db,
|
|
389
|
+
});
|
|
357
390
|
|
|
358
391
|
if (callback?.response) return respond(callback.response, res);
|
|
359
392
|
|
|
360
393
|
if (callback?.body) body = callback.body;
|
|
361
394
|
|
|
362
|
-
if (callback?.query) query = callback.query;
|
|
395
|
+
if (callback?.query) query = callback.query;
|
|
363
396
|
|
|
364
397
|
if (callback?.headers) req.headers = callback.headers;
|
|
365
398
|
|
|
@@ -369,7 +402,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
369
402
|
// EXECUTE
|
|
370
403
|
|
|
371
404
|
error_stage = "Handler";
|
|
372
|
-
|
|
405
|
+
payload = {
|
|
373
406
|
body,
|
|
374
407
|
query,
|
|
375
408
|
route: name,
|
|
@@ -383,23 +416,20 @@ const version_middleware = async (req, res, routers) => {
|
|
|
383
416
|
params: {},
|
|
384
417
|
memory: router.gp.memory,
|
|
385
418
|
};
|
|
386
|
-
|
|
419
|
+
result = await router.execute(name, payload, version);
|
|
387
420
|
|
|
388
421
|
// WEBHOOK AFTER
|
|
389
422
|
if (!isWebhook && version !== "*") {
|
|
390
423
|
error_stage = "Webhook";
|
|
391
424
|
|
|
392
|
-
await router.handle_after(
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
},
|
|
401
|
-
router.gp,
|
|
402
|
-
);
|
|
425
|
+
await router.handle_after({
|
|
426
|
+
req: payload,
|
|
427
|
+
result,
|
|
428
|
+
headers: req.headers,
|
|
429
|
+
version,
|
|
430
|
+
route: payload.route_pattern || name,
|
|
431
|
+
db: db.db,
|
|
432
|
+
});
|
|
403
433
|
}
|
|
404
434
|
|
|
405
435
|
return respond(result, res);
|
|
@@ -407,11 +437,9 @@ const version_middleware = async (req, res, routers) => {
|
|
|
407
437
|
console.error(`${error_stage} Error:`, err);
|
|
408
438
|
|
|
409
439
|
try {
|
|
410
|
-
await
|
|
440
|
+
await routers?.handle_error_callback?.({
|
|
411
441
|
request_id: req?.request_id,
|
|
412
|
-
|
|
413
442
|
stage: error_stage,
|
|
414
|
-
|
|
415
443
|
timestamp: new Date().toISOString(),
|
|
416
444
|
|
|
417
445
|
error: {
|