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 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.65",
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
  };
@@ -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(),