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 CHANGED
@@ -142,18 +142,31 @@ class GodProtocol {
142
142
  await version_middleware(req, res, this.route_table);
143
143
  };
144
144
 
145
- callback({ before, after, error } = {}) {
146
- if (before) {
147
- this.route_table.before(before);
148
- }
149
-
150
- if (after) {
151
- this.route_table.after(after);
152
- }
153
-
154
- if (error) {
155
- this.route_table.error(error);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "godprotocol",
3
- "version": "2.3.66",
3
+ "version": "2.3.70",
4
4
  "description": "A distributed computing environment for Web 4.0 — integrating AI, decentralisation, and virtual computation.",
5
5
  "main": "Index.js",
6
6
  "type": "module",
@@ -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
- after(fn) {
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
- meesage: "Service unauthorised",
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
- `${servic.local ? this.gp.server.domain : servic.url}/${path}`,
127
- {
128
- method: "POST",
129
- headers,
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
- return {
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
- return {
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(),