godprotocol 1.2.54 → 2.2.0

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.
Files changed (79) hide show
  1. package/Godprotocol.js +33 -0
  2. package/Index.js +8 -5
  3. package/package.json +1 -1
  4. package/server/Routable/Header.js +240 -0
  5. package/server/Routable/Route_table.js +198 -0
  6. package/server/Routable/Services.js +193 -0
  7. package/server/utils.js +54 -0
  8. package/server/version_control.js +71 -0
  9. package/{Objects → virtual_machine/Objects}/Clock.js +9 -9
  10. package/{Objects → virtual_machine/Objects}/Events.js +47 -47
  11. package/{callables → virtual_machine/callables}/functions/assert.js +9 -9
  12. package/{callables → virtual_machine/callables}/functions/env.js +4 -4
  13. package/{callables → virtual_machine/callables}/functions/query.js +17 -17
  14. package/{callables → virtual_machine/callables}/functions/wait.js +8 -8
  15. package/{html → virtual_machine/html}/create.js +95 -95
  16. package/{html → virtual_machine/html}/index.js +125 -125
  17. package/{html → virtual_machine/html}/load.js +166 -166
  18. package/{html → virtual_machine/html}/parse.js +170 -170
  19. package/{html → virtual_machine/html}/run.js +150 -150
  20. package/{html → virtual_machine/html}/util.js +4 -4
  21. /package/{Datatypes → virtual_machine/Datatypes}/arr.js +0 -0
  22. /package/{Datatypes → virtual_machine/Datatypes}/bool.js +0 -0
  23. /package/{Datatypes → virtual_machine/Datatypes}/callable.js +0 -0
  24. /package/{Datatypes → virtual_machine/Datatypes}/cls.js +0 -0
  25. /package/{Datatypes → virtual_machine/Datatypes}/conf.js +0 -0
  26. /package/{Datatypes → virtual_machine/Datatypes}/err.js +0 -0
  27. /package/{Datatypes → virtual_machine/Datatypes}/func.js +0 -0
  28. /package/{Datatypes → virtual_machine/Datatypes}/functions/storage.js +0 -0
  29. /package/{Datatypes → virtual_machine/Datatypes}/functions/wallet.js +0 -0
  30. /package/{Datatypes → virtual_machine/Datatypes}/instance.js +0 -0
  31. /package/{Datatypes → virtual_machine/Datatypes}/num.js +0 -0
  32. /package/{Datatypes → virtual_machine/Datatypes}/str.js +0 -0
  33. /package/{Datatypes → virtual_machine/Datatypes}/twa.js +0 -0
  34. /package/{Datatypes → virtual_machine/Datatypes}/voi.js +0 -0
  35. /package/{Instances → virtual_machine/Instances}/account.js +0 -0
  36. /package/{Instances → virtual_machine/Instances}/event.js +0 -0
  37. /package/{Instances → virtual_machine/Instances}/fold.js +0 -0
  38. /package/{Instances → virtual_machine/Instances}/folder_queries.js +0 -0
  39. /package/{Instances → virtual_machine/Instances}/response.js +0 -0
  40. /package/{Objects → virtual_machine/Objects}/Account.js +0 -0
  41. /package/{Objects → virtual_machine/Objects}/Block.js +0 -0
  42. /package/{Objects → virtual_machine/Objects}/Blockweb.js +0 -0
  43. /package/{Objects → virtual_machine/Objects}/Callable.js +0 -0
  44. /package/{Objects → virtual_machine/Objects}/Chain.js +0 -0
  45. /package/{Objects → virtual_machine/Objects}/Datatypes.js +0 -0
  46. /package/{Objects → virtual_machine/Objects}/Manager.js +0 -0
  47. /package/{Objects → virtual_machine/Objects}/Oracle.js +0 -0
  48. /package/{Objects → virtual_machine/Objects}/Repository.js +0 -0
  49. /package/{Objects → virtual_machine/Objects}/Trinity.js +0 -0
  50. /package/{Objects → virtual_machine/Objects}/Utils.js +0 -0
  51. /package/{Objects → virtual_machine/Objects}/Virtual_machine.js +0 -0
  52. /package/{callables → virtual_machine/callables}/functions/display.js +0 -0
  53. /package/{callables → virtual_machine/callables}/functions/event.js +0 -0
  54. /package/{callables → virtual_machine/callables}/functions/exit.js +0 -0
  55. /package/{callables → virtual_machine/callables}/functions/folder.js +0 -0
  56. /package/{callables → virtual_machine/callables}/functions/get_uid.js +0 -0
  57. /package/{callables → virtual_machine/callables}/functions/hash.js +0 -0
  58. /package/{callables → virtual_machine/callables}/functions/import_.js +0 -0
  59. /package/{callables → virtual_machine/callables}/functions/local.js +0 -0
  60. /package/{callables → virtual_machine/callables}/functions/net.js +0 -0
  61. /package/{callables → virtual_machine/callables}/functions/parse.js +0 -0
  62. /package/{callables → virtual_machine/callables}/functions/render.js +0 -0
  63. /package/{callables → virtual_machine/callables}/functions/servers.js +0 -0
  64. /package/{callables → virtual_machine/callables}/functions/spawn.js +0 -0
  65. /package/{callables → virtual_machine/callables}/functions/store.js +0 -0
  66. /package/{callables → virtual_machine/callables}/functions/super_.js +0 -0
  67. /package/{callables → virtual_machine/callables}/functions/twain.js +0 -0
  68. /package/{callables → virtual_machine/callables}/functions/typeof.js +0 -0
  69. /package/{callables → virtual_machine/callables}/register.js +0 -0
  70. /package/{utils → virtual_machine/utils}/create_server.js +0 -0
  71. /package/{utils → virtual_machine/utils}/functions.js +0 -0
  72. /package/{utils → virtual_machine/utils}/hash.js +0 -0
  73. /package/{utils → virtual_machine/utils}/ops.js +0 -0
  74. /package/{utils → virtual_machine/utils}/oracle_handlers.js +0 -0
  75. /package/{utils → virtual_machine/utils}/server.cert +0 -0
  76. /package/{utils → virtual_machine/utils}/server.key +0 -0
  77. /package/{utils → virtual_machine/utils}/services.js +0 -0
  78. /package/{utils → virtual_machine/utils}/socket_server.js +0 -0
  79. /package/{utils → virtual_machine/utils}/vm_utils.js +0 -0
@@ -0,0 +1,54 @@
1
+ import crypto, { createHash, randomBytes, createCipheriv } from "crypto";
2
+
3
+ const deriveKey = (secret) =>
4
+ createHash("sha256").update(String(secret)).digest();
5
+ /**
6
+ * Encrypt a value (usually a session token) using AES-256-GCM.
7
+ * Returns a compact base64 string encoding iv|authTag|ciphertext.
8
+ */
9
+ const decryptToken = (enc, secret) => {
10
+ if (!enc) return null;
11
+
12
+ try {
13
+ const key = deriveKey(secret);
14
+
15
+ const parts = enc.split(":");
16
+ if (parts.length < 3) throw new Error("Invalid token format");
17
+
18
+ const iv = Buffer.from(parts[0], "base64");
19
+ const tag = Buffer.from(parts[1], "base64");
20
+ const data = Buffer.from(parts.slice(2).join(":"), "base64");
21
+
22
+ const decipher = createDecipheriv("aes-256-gcm", key, iv);
23
+ decipher.setAuthTag(tag);
24
+
25
+ const decrypted = Buffer.concat([
26
+ decipher.update(data),
27
+ decipher.final(),
28
+ ]).toString("utf8");
29
+
30
+ return JSON.parse(decrypted);
31
+ } catch (err) {
32
+ console.error("❌ Decrypt failed:", err.message);
33
+ return null;
34
+ }
35
+ };
36
+
37
+ const encryptToken = (payload, secret) => {
38
+ const key = deriveKey(secret);
39
+ const iv = randomBytes(12); // GCM standard
40
+
41
+ const cipher = createCipheriv("aes-256-gcm", key, iv);
42
+
43
+ const encrypted = Buffer.concat([
44
+ cipher.update(JSON.stringify(payload), "utf8"),
45
+ cipher.final(),
46
+ ]);
47
+
48
+ const tag = cipher.getAuthTag();
49
+
50
+ // iv:tag:data
51
+ return `${iv.toString("base64")}:${tag.toString("base64")}:${encrypted.toString("base64")}`;
52
+ };
53
+
54
+ export { encryptToken, decryptToken };
@@ -0,0 +1,71 @@
1
+ const respond = async (result, res) => {
2
+ let response = {
3
+ ok: result?.ok,
4
+ message: result.message,
5
+ data: result.data,
6
+ };
7
+ if (result.pagination) response.pagination = result.pagination;
8
+ if (result.token) response.token = result.token;
9
+
10
+ res.status(result?.status || (result?.ok ? 200 : 403)).json(response);
11
+ };
12
+
13
+ const version_middleware = async (req, res, routers) => {
14
+ try {
15
+ const version = req.headers["x-api-version"] || "v1";
16
+
17
+ let router = routers.get_version(version);
18
+
19
+ if (router.config?.is_old) return router.routes(req, res);
20
+
21
+ if (!router) {
22
+ return res.status(400).json({
23
+ error: "Invalid API version",
24
+ version,
25
+ });
26
+ }
27
+
28
+ router = routers;
29
+
30
+ let name = req.path.slice(1),
31
+ result;
32
+
33
+ try {
34
+ result = await router.handle_security(name, req);
35
+
36
+ if (result !== true) {
37
+ return await respond(result, res);
38
+ }
39
+ } catch (err) {
40
+ console.error(err);
41
+
42
+ throw new Error("Security check failed");
43
+ }
44
+
45
+ let db = await router.resolve_db(req);
46
+
47
+ try {
48
+ result = await router.execute(name, {
49
+ body: req.body,
50
+ headers: req.headers,
51
+ db,
52
+ services: router.get_service,
53
+ });
54
+
55
+ await respond(result, res);
56
+ } catch (err) {
57
+ console.error(err);
58
+
59
+ throw new Error("Route execution failed");
60
+ }
61
+ } catch (err) {
62
+ console.error("Version Middleware Error:", err);
63
+
64
+ return res.status(500).json({
65
+ ok: false,
66
+ message: "Internal server error",
67
+ });
68
+ }
69
+ };
70
+
71
+ export default version_middleware;
@@ -1,9 +1,9 @@
1
- import Events from "./Events.js";
2
-
3
- class Clock extends Events {
4
- constructor() {
5
- super();
6
- }
7
- }
8
-
9
- export default Clock;
1
+ import Events from "./Events.js";
2
+
3
+ class Clock extends Events {
4
+ constructor() {
5
+ super();
6
+ }
7
+ }
8
+
9
+ export default Clock;
@@ -1,47 +1,47 @@
1
- import { query_ } from "../callables/functions/query.js";
2
-
3
- class Events {
4
- constructor() {
5
- this.events_listeners = new Object();
6
- }
7
-
8
- add_listener = async (name, handler, filter) => {
9
- let listeners = this.events_listeners[name];
10
- if (!listeners) {
11
- listeners = new Array();
12
- this.events_listeners[name] = listeners;
13
- }
14
- if (
15
- !listeners.find(
16
- (li) =>
17
- li.handler === handler &&
18
- JSON.stringify(li.filter) === JSON.stringify(filter)
19
- )
20
- )
21
- listeners.push({ handler, filter });
22
- };
23
-
24
- emit = async (name, payload, cb) => {
25
- let listeners = this.events_listeners[name];
26
- if (!listeners) return;
27
-
28
- let total = 0;
29
- for (let l = 0; l < listeners.length; l++) {
30
- let { filter, handler } = listeners[l];
31
-
32
- if (await query_(payload, filter, await this.ds.get_folder())) {
33
- total++;
34
- handler(payload)
35
- .then((res) => {
36
- total--;
37
- cb && cb(res, { done: !total, event: { name, handler, filter } });
38
- })
39
- .catch((e) => {
40
- console.log(e.message);
41
- });
42
- }
43
- }
44
- };
45
- }
46
-
47
- export default Events;
1
+ import { query_ } from "../callables/functions/query.js";
2
+
3
+ class Events {
4
+ constructor() {
5
+ this.events_listeners = new Object();
6
+ }
7
+
8
+ add_listener = async (name, handler, filter) => {
9
+ let listeners = this.events_listeners[name];
10
+ if (!listeners) {
11
+ listeners = new Array();
12
+ this.events_listeners[name] = listeners;
13
+ }
14
+ if (
15
+ !listeners.find(
16
+ (li) =>
17
+ li.handler === handler &&
18
+ JSON.stringify(li.filter) === JSON.stringify(filter)
19
+ )
20
+ )
21
+ listeners.push({ handler, filter });
22
+ };
23
+
24
+ emit = async (name, payload, cb) => {
25
+ let listeners = this.events_listeners[name];
26
+ if (!listeners) return;
27
+
28
+ let total = 0;
29
+ for (let l = 0; l < listeners.length; l++) {
30
+ let { filter, handler } = listeners[l];
31
+
32
+ if (await query_(payload, filter, await this.ds.get_folder())) {
33
+ total++;
34
+ handler(payload)
35
+ .then((res) => {
36
+ total--;
37
+ cb && cb(res, { done: !total, event: { name, handler, filter } });
38
+ })
39
+ .catch((e) => {
40
+ console.log(e.message);
41
+ });
42
+ }
43
+ }
44
+ };
45
+ }
46
+
47
+ export default Events;
@@ -1,10 +1,10 @@
1
- const assert = async(args, {vm})=>{
2
- let {predicate} = args;
3
-
4
- let yes = !!await predicate.literal()
5
-
6
- if (yes) return;
7
- return await vm.throw_error({type: 'AssertionError', message: 'Test case failed!'})
8
- }
9
-
1
+ const assert = async(args, {vm})=>{
2
+ let {predicate} = args;
3
+
4
+ let yes = !!await predicate.literal()
5
+
6
+ if (yes) return;
7
+ return await vm.throw_error({type: 'AssertionError', message: 'Test case failed!'})
8
+ }
9
+
10
10
  export default assert
@@ -1,5 +1,5 @@
1
- const env = async(args, {vm, thread})=>{
2
- return vm.envs[thread._id]
3
- }
4
-
1
+ const env = async(args, {vm, thread})=>{
2
+ return vm.envs[thread._id]
3
+ }
4
+
5
5
  export default env;
@@ -1,17 +1,17 @@
1
- const query_ = async (object, filter, folder) => {
2
- let res = filter ? await folder.pass(object, filter) : true;
3
-
4
- return res;
5
- };
6
-
7
- const query = async (args, { vm, thread }) => {
8
- let { object, filter } = args;
9
-
10
- object = await object.literal();
11
- filter = await filter.literal();
12
-
13
- return await query_(object, filter, await vm.account.chain.folder());
14
- };
15
-
16
- export default query;
17
- export { query_ };
1
+ const query_ = async (object, filter, folder) => {
2
+ let res = filter ? await folder.pass(object, filter) : true;
3
+
4
+ return res;
5
+ };
6
+
7
+ const query = async (args, { vm, thread }) => {
8
+ let { object, filter } = args;
9
+
10
+ object = await object.literal();
11
+ filter = await filter.literal();
12
+
13
+ return await query_(object, filter, await vm.account.chain.folder());
14
+ };
15
+
16
+ export default query;
17
+ export { query_ };
@@ -1,9 +1,9 @@
1
- const wait = async(args, {vm, thread})=>{
2
- let {duration} = args;
3
-
4
- duration = await duration.literal()
5
-
6
- thread.status = {duration, start: Date.now()}
7
- }
8
-
1
+ const wait = async(args, {vm, thread})=>{
2
+ let {duration} = args;
3
+
4
+ duration = await duration.literal()
5
+
6
+ thread.status = {duration, start: Date.now()}
7
+ }
8
+
9
9
  export default wait
@@ -1,96 +1,96 @@
1
- const script = (manager)=> {
2
- return `
3
- const account_id_el = document.getElementById('account_id'), account_password_el = document.getElementById('account_password'),
4
- show_password = document.getElementById('show_password'), create_account = document.getElementById('create_account')
5
-
6
- show_password.addEventListener('click', e=>{
7
- account_password_el.setAttribute('type', e.target.checked ? 'text' : 'password')
8
- })
9
-
10
- let message_box = document.getElementById('message-box')
11
-
12
- create_account.addEventListener('click', e=>{
13
- e.preventDefault();
14
- console.log('click click', "${manager.options.server_domain}")
15
-
16
- let name = account_id_el.value.trim(), password = account_password_el.value.trim();
17
-
18
- if (!name || !password){
19
- message_box.textContent = 'Please completely fill all form fields.'
20
-
21
- setTimeout(() => {
22
- message_box.textContent = ''
23
- }, 2500);
24
- return;
25
- }
26
-
27
- ftch("/create_account", {name, password})
28
- .then(res=>{
29
- let accs = sessionStorage.getItem('accounts')
30
- if (accs) accs = JSON.parse(accs)
31
- else accs = new Array()
32
-
33
- if (res.uid){
34
- let indx = accs.findIndex(ac=>ac.name === name)
35
- if (indx !== -1){
36
- accs[indx].uid = res.uid
37
- } else {
38
- accs.push({name, uid: res.uid})
39
- }
40
- sessionStorage.setItem('accounts', JSON.stringify(accs))
41
-
42
- account_password_el.value = ''
43
- account_id_el.value = ''
44
- }
45
-
46
- message_box.textContent = res.uid ? 'Account signed succesfully!' : res.message
47
- return;
48
- })
49
- .catch(err=>console.log(err))
50
-
51
- }) `
52
- }
53
-
54
- const create = (manager)=>{
55
- let tml = `<div class="container my-5">
56
- <div class="row justify-content-center">
57
- <div class="col-md-6">
58
- <form id="create-form" class="card p-4 shadow-sm">
59
- <h4 class="mb-4 text-center">Create Account</h4>
60
-
61
- <!-- Account Name -->
62
- <div class="mb-3">
63
- <label for="account_id" class="form-label">Account Name</label>
64
- <input type="text" class="form-control" id="account_id" placeholder="Name" required>
65
- </div>
66
-
67
- <!-- Password -->
68
- <div class="mb-3">
69
- <label for="account_password" class="form-label">Password</label>
70
- <input type="password" class="form-control" id="account_password" placeholder="Password" required>
71
- </div>
72
-
73
- <!-- Show Password -->
74
- <div class="form-check mb-3">
75
- <input class="form-check-input" type="checkbox" id="show_password">
76
- <label class="form-check-label" for="show_password">Show Password</label>
77
- </div>
78
-
79
- <!-- Submit -->
80
- <div class="d-grid">
81
- <button type="submit" class="btn btn-primary" id="create_account">Submit</button>
82
- </div>
83
- </form>
84
-
85
- <!-- Message box placeholder -->
86
- <div id="message-box" class="mt-3"></div>
87
- </div>
88
- </div>
89
- </div>`
90
-
91
- tml = `${tml} <script>${script(manager)}</script>`
92
-
93
- return tml
94
- }
95
-
1
+ const script = (manager)=> {
2
+ return `
3
+ const account_id_el = document.getElementById('account_id'), account_password_el = document.getElementById('account_password'),
4
+ show_password = document.getElementById('show_password'), create_account = document.getElementById('create_account')
5
+
6
+ show_password.addEventListener('click', e=>{
7
+ account_password_el.setAttribute('type', e.target.checked ? 'text' : 'password')
8
+ })
9
+
10
+ let message_box = document.getElementById('message-box')
11
+
12
+ create_account.addEventListener('click', e=>{
13
+ e.preventDefault();
14
+ console.log('click click', "${manager.options.server_domain}")
15
+
16
+ let name = account_id_el.value.trim(), password = account_password_el.value.trim();
17
+
18
+ if (!name || !password){
19
+ message_box.textContent = 'Please completely fill all form fields.'
20
+
21
+ setTimeout(() => {
22
+ message_box.textContent = ''
23
+ }, 2500);
24
+ return;
25
+ }
26
+
27
+ ftch("/create_account", {name, password})
28
+ .then(res=>{
29
+ let accs = sessionStorage.getItem('accounts')
30
+ if (accs) accs = JSON.parse(accs)
31
+ else accs = new Array()
32
+
33
+ if (res.uid){
34
+ let indx = accs.findIndex(ac=>ac.name === name)
35
+ if (indx !== -1){
36
+ accs[indx].uid = res.uid
37
+ } else {
38
+ accs.push({name, uid: res.uid})
39
+ }
40
+ sessionStorage.setItem('accounts', JSON.stringify(accs))
41
+
42
+ account_password_el.value = ''
43
+ account_id_el.value = ''
44
+ }
45
+
46
+ message_box.textContent = res.uid ? 'Account signed succesfully!' : res.message
47
+ return;
48
+ })
49
+ .catch(err=>console.log(err))
50
+
51
+ }) `
52
+ }
53
+
54
+ const create = (manager)=>{
55
+ let tml = `<div class="container my-5">
56
+ <div class="row justify-content-center">
57
+ <div class="col-md-6">
58
+ <form id="create-form" class="card p-4 shadow-sm">
59
+ <h4 class="mb-4 text-center">Create Account</h4>
60
+
61
+ <!-- Account Name -->
62
+ <div class="mb-3">
63
+ <label for="account_id" class="form-label">Account Name</label>
64
+ <input type="text" class="form-control" id="account_id" placeholder="Name" required>
65
+ </div>
66
+
67
+ <!-- Password -->
68
+ <div class="mb-3">
69
+ <label for="account_password" class="form-label">Password</label>
70
+ <input type="password" class="form-control" id="account_password" placeholder="Password" required>
71
+ </div>
72
+
73
+ <!-- Show Password -->
74
+ <div class="form-check mb-3">
75
+ <input class="form-check-input" type="checkbox" id="show_password">
76
+ <label class="form-check-label" for="show_password">Show Password</label>
77
+ </div>
78
+
79
+ <!-- Submit -->
80
+ <div class="d-grid">
81
+ <button type="submit" class="btn btn-primary" id="create_account">Submit</button>
82
+ </div>
83
+ </form>
84
+
85
+ <!-- Message box placeholder -->
86
+ <div id="message-box" class="mt-3"></div>
87
+ </div>
88
+ </div>
89
+ </div>`
90
+
91
+ tml = `${tml} <script>${script(manager)}</script>`
92
+
93
+ return tml
94
+ }
95
+
96
96
  export default create