godprotocol 2.3.66 → 2.3.71
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 +105 -111
- package/server/utils.js +6 -1
- 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,84 +72,122 @@ class Services {
|
|
|
72
72
|
|
|
73
73
|
if (!servic) return;
|
|
74
74
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
75
|
+
let call = async (path, body, header) => {
|
|
76
|
+
let headers = {
|
|
77
|
+
"Content-Type": "application/json",
|
|
78
|
+
Accept: "application/json",
|
|
79
|
+
"x-api-version":
|
|
80
|
+
servic.local && !header?.api_version?.startsWith(`${servic.local}:`)
|
|
81
|
+
? `${servic.local}:${header?.api_version || servic.api_version}`
|
|
82
|
+
: header?.api_version || servic.api_version || "v1",
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
if (header?.api_key) {
|
|
86
|
+
headers["x-api-key"] = header.api_key;
|
|
87
|
+
} else if (servic.api_key) {
|
|
88
|
+
headers["x-api-key"] = servic.api_key;
|
|
89
|
+
}
|
|
87
90
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
if (header?.token) {
|
|
92
|
+
headers["Authorization"] = `Bearer ${header.token}`;
|
|
93
|
+
headers["x-platform"] = this.platform_uri;
|
|
94
|
+
} else if (servic.profile_key) {
|
|
95
|
+
headers["Authorization"] = `${servic.profile_key}`;
|
|
96
|
+
} else if (header?.profile) {
|
|
97
|
+
let token = await this.get_token(servic, header);
|
|
98
|
+
|
|
99
|
+
if (typeof token !== "string") {
|
|
100
|
+
if (token?.ok === false) return token;
|
|
92
101
|
}
|
|
93
102
|
|
|
94
|
-
if (
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
if (token) headers["Authorization"] = `Bearer ${token}`;
|
|
104
|
+
headers["x-platform"] = this.platform_uri;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (header?.xplatform) headers["x-platform"] = header.xplatform;
|
|
108
|
+
|
|
109
|
+
if (
|
|
110
|
+
!headers["x-api-key"] &&
|
|
111
|
+
!headers["Authorization"] &&
|
|
112
|
+
!servic.opened
|
|
113
|
+
) {
|
|
114
|
+
return {
|
|
115
|
+
ok: false,
|
|
116
|
+
status_code: "service_unauthorised",
|
|
117
|
+
message: "Service unauthorised",
|
|
118
|
+
};
|
|
119
|
+
}
|
|
101
120
|
|
|
102
|
-
|
|
103
|
-
if (token?.ok === false) return token;
|
|
104
|
-
}
|
|
121
|
+
let url = `${servic.local ? this.gp.server.domain : servic.url}/${path}`;
|
|
105
122
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
123
|
+
let request_payload = {
|
|
124
|
+
service: servic,
|
|
125
|
+
url,
|
|
126
|
+
path,
|
|
127
|
+
headers,
|
|
128
|
+
body,
|
|
129
|
+
};
|
|
130
|
+
await this.callbacks.handle_on_service_callback(request_payload);
|
|
109
131
|
|
|
110
|
-
|
|
132
|
+
try {
|
|
133
|
+
let response = await fetch(url, {
|
|
134
|
+
method: "POST",
|
|
135
|
+
headers,
|
|
136
|
+
body: JSON.stringify(body || {}),
|
|
137
|
+
});
|
|
111
138
|
|
|
112
|
-
|
|
113
|
-
!headers["x-api-key"] &&
|
|
114
|
-
!headers["Authorization"] &&
|
|
115
|
-
!servic.opened
|
|
116
|
-
) {
|
|
117
|
-
return {
|
|
118
|
-
ok: false,
|
|
119
|
-
status_code: "service_unauthorised",
|
|
120
|
-
meesage: "Service unauthorised",
|
|
121
|
-
};
|
|
122
|
-
}
|
|
139
|
+
let reply = await response.json();
|
|
123
140
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
`${servic.local ? this.gp.server.domain : servic.url}/${path}`,
|
|
127
|
-
{
|
|
128
|
-
method: "POST",
|
|
129
|
-
headers,
|
|
130
|
-
body: JSON.stringify(body || {}),
|
|
131
|
-
},
|
|
132
|
-
);
|
|
133
|
-
|
|
134
|
-
let reply = await response.json();
|
|
135
|
-
|
|
136
|
-
if (typeof reply?.ok !== "boolean") {
|
|
137
|
-
return {
|
|
138
|
-
ok: false,
|
|
139
|
-
message: `Response calling ${service} service at path ${path}`,
|
|
140
|
-
data: reply,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return reply;
|
|
144
|
-
} catch (e) {
|
|
145
|
-
return {
|
|
141
|
+
if (typeof reply?.ok !== "boolean") {
|
|
142
|
+
reply = {
|
|
146
143
|
ok: false,
|
|
147
|
-
message:
|
|
148
|
-
|
|
149
|
-
status: 500,
|
|
144
|
+
message: `Response calling ${service} service at path ${path}`,
|
|
145
|
+
data: reply,
|
|
150
146
|
};
|
|
151
147
|
}
|
|
152
|
-
|
|
148
|
+
|
|
149
|
+
await this.callbacks.handle_after_service_callback({
|
|
150
|
+
request_payload,
|
|
151
|
+
response: reply,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
return reply;
|
|
155
|
+
} catch (e) {
|
|
156
|
+
let pload = {
|
|
157
|
+
ok: false,
|
|
158
|
+
message:
|
|
159
|
+
e.message || `Error calling ${service} service at path ${path}`,
|
|
160
|
+
status: 500,
|
|
161
|
+
};
|
|
162
|
+
await this.callbacks.handle_error_service_callback({
|
|
163
|
+
request_payload,
|
|
164
|
+
reply: pload,
|
|
165
|
+
error_object: e,
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
return pload;
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
let interface_;
|
|
173
|
+
if (servic.interface) {
|
|
174
|
+
interface_ = new servic.interface({
|
|
175
|
+
gp: this.gp,
|
|
176
|
+
call,
|
|
177
|
+
uri: servic.uri,
|
|
178
|
+
api_version: servic.api_version,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (opts.interface) {
|
|
183
|
+
return interface_ || null;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return {
|
|
187
|
+
api_version: servic.api_version,
|
|
188
|
+
uri: servic.uri,
|
|
189
|
+
interface: interface_,
|
|
190
|
+
call,
|
|
153
191
|
};
|
|
154
192
|
};
|
|
155
193
|
|
|
@@ -198,50 +236,6 @@ class Services {
|
|
|
198
236
|
return db;
|
|
199
237
|
};
|
|
200
238
|
|
|
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
239
|
resolve_db = async (req, opts = {}) => {
|
|
246
240
|
let db = await this.platform_db(opts?.db_name);
|
|
247
241
|
|
package/server/utils.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import crypto, {
|
|
1
|
+
import crypto, {
|
|
2
|
+
createHash,
|
|
3
|
+
randomBytes,
|
|
4
|
+
createCipheriv,
|
|
5
|
+
createDecipheriv,
|
|
6
|
+
} from "crypto";
|
|
2
7
|
|
|
3
8
|
const deriveKey = (secret) =>
|
|
4
9
|
createHash("sha256").update(String(secret)).digest();
|
|
@@ -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(),
|