godprotocol 2.3.66 → 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 +37 -55
- package/server/version_control.js +3 -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
|
};
|
|
@@ -198,50 +224,6 @@ class Services {
|
|
|
198
224
|
return db;
|
|
199
225
|
};
|
|
200
226
|
|
|
201
|
-
handle_webhook_prior = async (req) => {
|
|
202
|
-
let fn = this.gp.webhook_prior;
|
|
203
|
-
|
|
204
|
-
if (typeof fn === "function") {
|
|
205
|
-
let res = await fn(req);
|
|
206
|
-
return res && Object.keys(res).hasOwnProperty("ok") ? res : { ok: false };
|
|
207
|
-
}
|
|
208
|
-
return {
|
|
209
|
-
ok: true,
|
|
210
|
-
};
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
handle_webhook_after = async (req, result) => {
|
|
214
|
-
let { headers, body, route } = req;
|
|
215
|
-
let { xplatform, third_party, platform } = headers;
|
|
216
|
-
|
|
217
|
-
if (xplatform && xplatform.uri !== platform.uri) {
|
|
218
|
-
let webhook = third_party?.webhook || xplatform.webhook;
|
|
219
|
-
|
|
220
|
-
if (webhook?.enabled) {
|
|
221
|
-
if (webhook?.routes?.length && !webhook?.routes?.includes(route))
|
|
222
|
-
return;
|
|
223
|
-
|
|
224
|
-
await fetch(webhook?.url, {
|
|
225
|
-
method: "POST",
|
|
226
|
-
headers: {
|
|
227
|
-
"Content-Type": "application/json",
|
|
228
|
-
Accept: "application/json",
|
|
229
|
-
"x-api-version": webhook?.api_version || "v1",
|
|
230
|
-
},
|
|
231
|
-
body: JSON.stringify({
|
|
232
|
-
me: xplatform,
|
|
233
|
-
profile,
|
|
234
|
-
platform,
|
|
235
|
-
body,
|
|
236
|
-
result,
|
|
237
|
-
route,
|
|
238
|
-
}),
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
} else {
|
|
242
|
-
}
|
|
243
|
-
};
|
|
244
|
-
|
|
245
227
|
resolve_db = async (req, opts = {}) => {
|
|
246
228
|
let db = await this.platform_db(opts?.db_name);
|
|
247
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,7 +483,7 @@ 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,
|
|
@@ -499,7 +499,7 @@ const version_middleware = async (req, res, routers) => {
|
|
|
499
499
|
console.error(`${error_stage} Error:`, err);
|
|
500
500
|
|
|
501
501
|
try {
|
|
502
|
-
await routers?.handle_error_callback?.({
|
|
502
|
+
await routers?.callbacks?.handle_error_callback?.({
|
|
503
503
|
request_id: req?.request_id,
|
|
504
504
|
stage: error_stage,
|
|
505
505
|
timestamp: new Date().toISOString(),
|