godprotocol 2.3.65 → 2.3.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/Godprotocol.js +25 -12
- package/package.json +1 -1
- package/server/Routable/Callbacks.js +94 -0
- package/server/Routable/Route_table.js +2 -42
- package/server/Routable/Services.js +39 -56
- package/server/version_control.js +4 -3
package/Godprotocol.js
CHANGED
|
@@ -142,18 +142,31 @@ class GodProtocol {
|
|
|
142
142
|
await version_middleware(req, res, this.route_table);
|
|
143
143
|
};
|
|
144
144
|
|
|
145
|
-
callback({
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
}
|
|
145
|
+
callback({
|
|
146
|
+
before,
|
|
147
|
+
after,
|
|
148
|
+
error,
|
|
149
|
+
on_service,
|
|
150
|
+
service_error,
|
|
151
|
+
after_service,
|
|
152
|
+
} = {}) {
|
|
153
|
+
const register = (callbacks, method) => {
|
|
154
|
+
if (Array.isArray(callbacks)) return callbacks.map(method);
|
|
155
|
+
if (callbacks) return method(callbacks);
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
register(before, (callback) => this.route_table.callbacks.before(callback));
|
|
159
|
+
register(after, (callback) => this.route_table.callbacks.after(callback));
|
|
160
|
+
register(service_error, (callback) =>
|
|
161
|
+
this.route_table.callbacks.service_error(callback),
|
|
162
|
+
);
|
|
163
|
+
register(error, (callback) => this.route_table.callbacks.error(callback));
|
|
164
|
+
register(on_service, (callback) =>
|
|
165
|
+
this.route_table.callbacks.on_service(callback),
|
|
166
|
+
);
|
|
167
|
+
register(after_service, (callback) =>
|
|
168
|
+
this.route_table.callbacks.after_service(callback),
|
|
169
|
+
);
|
|
157
170
|
}
|
|
158
171
|
}
|
|
159
172
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
class Callbacks {
|
|
2
|
+
constructor(gp) {
|
|
3
|
+
this.gp = gp;
|
|
4
|
+
|
|
5
|
+
this.before_callbacks = new Array();
|
|
6
|
+
this.after_callbacks = new Array();
|
|
7
|
+
this.error_callbacks = new Array();
|
|
8
|
+
this.on_service_callbacks = new Array();
|
|
9
|
+
this.after_service_callbacks = new Array();
|
|
10
|
+
this.service_error_callbacks = new Array();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
before(fn) {
|
|
14
|
+
this.before_callbacks.push(fn);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
on_service(fn) {
|
|
18
|
+
this.on_service_callbacks.push(fn);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
after_service(fn) {
|
|
22
|
+
this.after_service_callbacks.push(fn);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
service_error(fn) {
|
|
26
|
+
this.service_error_callbacks.push(fn);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
after(fn) {
|
|
30
|
+
this.after_callbacks.push(fn);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
error(fn) {
|
|
34
|
+
this.error_callbacks.push(fn);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
handle_before = async (payload) => {
|
|
38
|
+
for (const callback of this.before_callbacks) {
|
|
39
|
+
const result = await callback(payload, this.gp);
|
|
40
|
+
|
|
41
|
+
if (result && result.ok === false) {
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return { ok: true };
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
handle_after = async (payload) => {
|
|
50
|
+
for (const callback of this.after_callbacks) {
|
|
51
|
+
await callback(payload, this.gp);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return { ok: true };
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
handle_error_callback = async (payload) => {
|
|
58
|
+
for (const callback of this.error_callbacks) {
|
|
59
|
+
await callback(payload, this.gp);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return { ok: true };
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
handle_on_service_callback = async (payload) => {
|
|
66
|
+
for (const callback of this.on_service_callbacks) {
|
|
67
|
+
const result = await callback(payload, this.gp);
|
|
68
|
+
|
|
69
|
+
if (result && result.ok === false) {
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
return { ok: true };
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
handle_after_service_callback = async (payload) => {
|
|
78
|
+
for (const callback of this.after_service_callbacks) {
|
|
79
|
+
await callback(payload, this.gp);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return { ok: true };
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
handle_error_service_callback = async (payload) => {
|
|
86
|
+
for (const callback of this.service_error_callbacks) {
|
|
87
|
+
await callback(payload, this.gp);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return { ok: true };
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export default Callbacks;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import Callbacks from "./Callbacks.js";
|
|
1
2
|
import Headers from "./Header.js";
|
|
2
3
|
|
|
3
4
|
let securities = {
|
|
@@ -41,52 +42,11 @@ class Route_table extends Headers {
|
|
|
41
42
|
this.platform_uri = gp.platform_uri;
|
|
42
43
|
this.versions = {};
|
|
43
44
|
|
|
44
|
-
this.before_callbacks = new Array();
|
|
45
|
-
this.after_callbacks = new Array();
|
|
46
|
-
this.error_callbacks = new Array();
|
|
47
45
|
this.validators = {};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
before(fn) {
|
|
51
|
-
this.before_callbacks.push(fn);
|
|
52
|
-
}
|
|
53
46
|
|
|
54
|
-
|
|
55
|
-
this.after_callbacks.push(fn);
|
|
47
|
+
this.callbacks = new Callbacks(this.gp);
|
|
56
48
|
}
|
|
57
49
|
|
|
58
|
-
error(fn) {
|
|
59
|
-
this.error_callbacks.push(fn);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
handle_before = async (payload) => {
|
|
63
|
-
for (const callback of this.before_callbacks) {
|
|
64
|
-
const result = await callback(payload, this.gp);
|
|
65
|
-
|
|
66
|
-
if (result && result.ok === false) {
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return { ok: true };
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
handle_after = async (payload) => {
|
|
75
|
-
for (const callback of this.after_callbacks) {
|
|
76
|
-
await callback(payload, this.gp);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return { ok: true };
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
handle_error_callback = async (payload) => {
|
|
83
|
-
for (const callback of this.error_callbacks) {
|
|
84
|
-
await callback(payload, this.gp);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return { ok: true };
|
|
88
|
-
};
|
|
89
|
-
|
|
90
50
|
get_version = async (version = this.active_version) => {
|
|
91
51
|
let resolved_version = version;
|
|
92
52
|
|
|
@@ -72,9 +72,14 @@ class Services {
|
|
|
72
72
|
|
|
73
73
|
if (!servic) return;
|
|
74
74
|
|
|
75
|
+
if (opts.interface) {
|
|
76
|
+
return servic.interface || null;
|
|
77
|
+
}
|
|
78
|
+
|
|
75
79
|
return {
|
|
76
80
|
api_version: servic.api_version,
|
|
77
81
|
uri: servic.uri,
|
|
82
|
+
interface: servic.interface,
|
|
78
83
|
call: async (path, body, header) => {
|
|
79
84
|
let headers = {
|
|
80
85
|
"Content-Type": "application/json",
|
|
@@ -117,37 +122,58 @@ class Services {
|
|
|
117
122
|
return {
|
|
118
123
|
ok: false,
|
|
119
124
|
status_code: "service_unauthorised",
|
|
120
|
-
|
|
125
|
+
message: "Service unauthorised",
|
|
121
126
|
};
|
|
122
127
|
}
|
|
123
128
|
|
|
129
|
+
let url = `${servic.local ? this.gp.server.domain : servic.url}/${path}`;
|
|
130
|
+
|
|
131
|
+
let request_payload = {
|
|
132
|
+
service: servic,
|
|
133
|
+
url,
|
|
134
|
+
path,
|
|
135
|
+
headers,
|
|
136
|
+
body,
|
|
137
|
+
};
|
|
138
|
+
await this.callbacks.handle_on_service_callback(request_payload);
|
|
139
|
+
|
|
124
140
|
try {
|
|
125
|
-
let response = await fetch(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
body: JSON.stringify(body || {}),
|
|
131
|
-
},
|
|
132
|
-
);
|
|
141
|
+
let response = await fetch(url, {
|
|
142
|
+
method: "POST",
|
|
143
|
+
headers,
|
|
144
|
+
body: JSON.stringify(body || {}),
|
|
145
|
+
});
|
|
133
146
|
|
|
134
147
|
let reply = await response.json();
|
|
135
148
|
|
|
136
149
|
if (typeof reply?.ok !== "boolean") {
|
|
137
|
-
|
|
150
|
+
reply = {
|
|
138
151
|
ok: false,
|
|
139
152
|
message: `Response calling ${service} service at path ${path}`,
|
|
140
153
|
data: reply,
|
|
141
154
|
};
|
|
142
155
|
}
|
|
156
|
+
|
|
157
|
+
await this.callbacks.handle_after_service_callback({
|
|
158
|
+
request_payload,
|
|
159
|
+
response: reply,
|
|
160
|
+
});
|
|
161
|
+
|
|
143
162
|
return reply;
|
|
144
163
|
} catch (e) {
|
|
145
|
-
|
|
164
|
+
let pload = {
|
|
146
165
|
ok: false,
|
|
147
166
|
message:
|
|
148
167
|
e.message || `Error calling ${service} service at path ${path}`,
|
|
149
168
|
status: 500,
|
|
150
169
|
};
|
|
170
|
+
await this.callbacks.handle_error_service_callback({
|
|
171
|
+
request_payload,
|
|
172
|
+
reply: pload,
|
|
173
|
+
error_object: e,
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
return pload;
|
|
151
177
|
}
|
|
152
178
|
},
|
|
153
179
|
};
|
|
@@ -155,6 +181,7 @@ class Services {
|
|
|
155
181
|
|
|
156
182
|
version_db = async (ver) => {
|
|
157
183
|
let version = await this.get_version(ver);
|
|
184
|
+
|
|
158
185
|
if (!version) {
|
|
159
186
|
let vers = Object.keys(this.versions);
|
|
160
187
|
|
|
@@ -170,7 +197,7 @@ class Services {
|
|
|
170
197
|
return;
|
|
171
198
|
}
|
|
172
199
|
|
|
173
|
-
let db = await this.platform_db();
|
|
200
|
+
let db = await this.platform_db(version?.db_name);
|
|
174
201
|
|
|
175
202
|
return db;
|
|
176
203
|
};
|
|
@@ -197,50 +224,6 @@ class Services {
|
|
|
197
224
|
return db;
|
|
198
225
|
};
|
|
199
226
|
|
|
200
|
-
handle_webhook_prior = async (req) => {
|
|
201
|
-
let fn = this.gp.webhook_prior;
|
|
202
|
-
|
|
203
|
-
if (typeof fn === "function") {
|
|
204
|
-
let res = await fn(req);
|
|
205
|
-
return res && Object.keys(res).hasOwnProperty("ok") ? res : { ok: false };
|
|
206
|
-
}
|
|
207
|
-
return {
|
|
208
|
-
ok: true,
|
|
209
|
-
};
|
|
210
|
-
};
|
|
211
|
-
|
|
212
|
-
handle_webhook_after = async (req, result) => {
|
|
213
|
-
let { headers, body, route } = req;
|
|
214
|
-
let { xplatform, third_party, platform } = headers;
|
|
215
|
-
|
|
216
|
-
if (xplatform && xplatform.uri !== platform.uri) {
|
|
217
|
-
let webhook = third_party?.webhook || xplatform.webhook;
|
|
218
|
-
|
|
219
|
-
if (webhook?.enabled) {
|
|
220
|
-
if (webhook?.routes?.length && !webhook?.routes?.includes(route))
|
|
221
|
-
return;
|
|
222
|
-
|
|
223
|
-
await fetch(webhook?.url, {
|
|
224
|
-
method: "POST",
|
|
225
|
-
headers: {
|
|
226
|
-
"Content-Type": "application/json",
|
|
227
|
-
Accept: "application/json",
|
|
228
|
-
"x-api-version": webhook?.api_version || "v1",
|
|
229
|
-
},
|
|
230
|
-
body: JSON.stringify({
|
|
231
|
-
me: xplatform,
|
|
232
|
-
profile,
|
|
233
|
-
platform,
|
|
234
|
-
body,
|
|
235
|
-
result,
|
|
236
|
-
route,
|
|
237
|
-
}),
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
} else {
|
|
241
|
-
}
|
|
242
|
-
};
|
|
243
|
-
|
|
244
227
|
resolve_db = async (req, opts = {}) => {
|
|
245
228
|
let db = await this.platform_db(opts?.db_name);
|
|
246
229
|
|
|
@@ -441,7 +441,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
441
441
|
});
|
|
442
442
|
|
|
443
443
|
// WEBHOOK PRIOR
|
|
444
|
-
callback = await router.handle_before({
|
|
444
|
+
callback = await router?.callbacks.handle_before({
|
|
445
445
|
req,
|
|
446
446
|
body,
|
|
447
447
|
query,
|
|
@@ -483,11 +483,12 @@ const version_middleware = async (req, res, routers) => {
|
|
|
483
483
|
if (!isWebhook && version !== "*") {
|
|
484
484
|
error_stage = "Webhook";
|
|
485
485
|
|
|
486
|
-
await router.handle_after({
|
|
486
|
+
await router.callbacks.handle_after({
|
|
487
487
|
req: payload,
|
|
488
488
|
result,
|
|
489
489
|
headers: req.headers,
|
|
490
490
|
version,
|
|
491
|
+
matched_route_name: name,
|
|
491
492
|
route: payload.route_pattern || name,
|
|
492
493
|
db: db.db,
|
|
493
494
|
});
|
|
@@ -498,7 +499,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
498
499
|
console.error(`${error_stage} Error:`, err);
|
|
499
500
|
|
|
500
501
|
try {
|
|
501
|
-
await routers?.handle_error_callback?.({
|
|
502
|
+
await routers?.callbacks?.handle_error_callback?.({
|
|
502
503
|
request_id: req?.request_id,
|
|
503
504
|
stage: error_stage,
|
|
504
505
|
timestamp: new Date().toISOString(),
|