@indra.ai/deva 1.1.27 โ†’ 1.1.28

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.
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "AGENT",
3
+ "describe": "AGENT FILE",
4
+ "copyright": "Copyright (c)2023 Quinn Michaels. All rights reserved.",
5
+ "DATA": {
6
+ "id": 5380514963421,
7
+ "key": "deva",
8
+ "name": "@Deva",
9
+ "describe": "The Deva interface into deva.world.",
10
+ "prompt": {
11
+ "emoji": "๐Ÿ",
12
+ "text": "deva",
13
+ "colors": {
14
+ "label": {
15
+ "R": 0,
16
+ "G": 150,
17
+ "B": 255
18
+ },
19
+ "text": {
20
+ "R": 101,
21
+ "G": 192,
22
+ "B": 255
23
+ }
24
+ }
25
+ },
26
+ "voice": {
27
+ "speech": "Alex",
28
+ "speed": 1
29
+ },
30
+ "profile": {
31
+ "emoji": "/public/devas/deva/emoji.png",
32
+ "avatar": "/public/devas/deva/avatar.png",
33
+ "background": "/public/devas/deva/background.png",
34
+ "describe": "The Deva Project",
35
+ "gender": "M"
36
+ }
37
+ }
38
+ }
@@ -5,9 +5,6 @@
5
5
  "DATA": {
6
6
  "id": 3123155399059,
7
7
  "key": "test",
8
- "name": "Test User",
9
- "eamil": "test@example.com",
10
- "describe": "The Test User",
11
8
  "prompt": {
12
9
  "emoji": "๐Ÿงช",
13
10
  "text": "test",
@@ -25,11 +22,12 @@
25
22
  }
26
23
  },
27
24
  "profile": {
25
+ "name": "Test User",
26
+ "eamil": "test@example.com",
27
+ "describe": "The Test User",
28
28
  "emoji": "/public/devas/test/avatar.png",
29
29
  "avatar": "/public/devas/test/avatar.png",
30
30
  "background": "/public/devas/test/background.png",
31
- "name": "Test User",
32
- "describe": "This is the Test for the Deva Examples in the Repository.",
33
31
  "gender": "splendid",
34
32
  "lang": "en",
35
33
  "locale": "en-US",
@@ -38,14 +36,24 @@
38
36
  "states": {},
39
37
  "messages": {},
40
38
  "security": {
39
+ "hash": "md5",
40
+ "cipher": {
41
+ "encrypt": true,
42
+ "algorithm": "aes-256-cbc",
43
+ "password": "generic password for encryption test"
44
+ },
41
45
  "concerns": [],
42
46
  "global": {},
43
- "devas": {}
47
+ "devas": {
48
+ "hello": {}
49
+ }
44
50
  },
45
51
  "support": {
46
52
  "concerns": [],
47
53
  "global": {},
48
- "devas": {}
54
+ "devas": {
55
+ "hello": {}
56
+ }
49
57
  },
50
58
  "services": {
51
59
  "concerns": [],
@@ -55,22 +63,30 @@
55
63
  "space": "https://deva.space",
56
64
  "cloud": "https://deva.cloud"
57
65
  },
58
- "devas": {}
66
+ "devas": {
67
+ "hello": {}
68
+ }
59
69
  },
60
70
  "systems": {
61
71
  "concerns": [],
62
72
  "global": {},
63
- "devas": {}
73
+ "devas": {
74
+ "hello": {}
75
+ }
64
76
  },
65
77
  "solutions": {
66
78
  "concerns": [],
67
79
  "global": {},
68
- "devas": {}
80
+ "devas": {
81
+ "hello": {}
82
+ }
69
83
  },
70
84
  "development": {
71
85
  "concerns": [],
72
86
  "global": {},
73
- "devas": {}
87
+ "devas": {
88
+ "hello": {}
89
+ }
74
90
  }
75
91
  }
76
92
  }
@@ -12,8 +12,6 @@ const HelloWorld = new Deva({
12
12
  agent: {
13
13
  id: 101,
14
14
  key: 'hello',
15
- name: 'Hello World',
16
- description: 'The most over complex Hello World in the Universe',
17
15
  prompt: {
18
16
  emoji: '๐Ÿถ',
19
17
  text: 'hello',
@@ -24,6 +22,8 @@ const HelloWorld = new Deva({
24
22
  speed: 1
25
23
  },
26
24
  profile: {
25
+ name: 'Hello World',
26
+ description: 'The most over complex Hello World in the Universe',
27
27
  avatar: '',
28
28
  background: '',
29
29
  describe: 'Hello World Deva',
@@ -54,8 +54,33 @@ const HelloWorld = new Deva({
54
54
  return Promise.resolve(this._client);
55
55
  },
56
56
  state(packet) {
57
- const ret = `${this._state} ${this.uid(true)} ${this.uid()} ${this.hash(JSON.stringify(packet), 'sha256')}`;
58
- return Promise.resolve(ret);
57
+ const text = this._state
58
+ const id = this.uid();
59
+ const uuid = this.uid(true);
60
+
61
+ const created = this.formatDate(Date.now(), 'long', true)
62
+ const md5 = this.hash(JSON.stringify(packet));
63
+ const sha256 = this.hash(JSON.stringify(packet), 'sha256');
64
+ const sha512 = this.hash(JSON.stringify(packet), 'sha512');
65
+ const cipher = this.cipher(JSON.stringify(packet));
66
+ const decipher = this.decipher(cipher);
67
+
68
+ const data = {
69
+ id,
70
+ uuid,
71
+ hash: {
72
+ md5,
73
+ sha256,
74
+ sha512,
75
+ created,
76
+ },
77
+ cipher,
78
+ decipher
79
+ }
80
+ return Promise.resolve({
81
+ text: 'state return see data',
82
+ data,
83
+ });
59
84
  }
60
85
  },
61
86
  methods: {
@@ -75,8 +100,8 @@ HelloWorld.init(client.DATA).then(done => {
75
100
  // console.log(done);
76
101
  return HelloWorld.question('/state')
77
102
  }).then(answer => {
78
- // console.log(HelloWorld.client());
79
103
  console.log(answer.a.text);
104
+ console.log(answer.a.data);
80
105
  });
81
106
 
82
107
 
package/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Distributed under the MIT software license, see the accompanying
3
3
  // file LICENSE.md or http://www.opensource.org/licenses/mit-license.php.
4
4
  const {EventEmitter} = require('events');
5
- const { createHash, randomUUID } = require('crypto');
5
+ const { createHash, randomUUID, createCipheriv, createDecipheriv, randomBytes } = require('crypto');
6
6
 
7
7
  class Deva {
8
8
  constructor(opts) {
@@ -43,94 +43,103 @@ class Deva {
43
43
  }
44
44
 
45
45
  set States(opts) {
46
- this._states = { // The available states to work with.
47
- uid: `๐Ÿ‘ป ${this._agent.name} is making a new #uid`,
48
- offline: `๐Ÿ‘ป ${this._agent.name} is offline`,
49
- online: `๐Ÿ“ก ${this._agent.name} is online`,
50
- config: `โ€๐Ÿ“€ ${this._agent.name} is checking the config`,
51
- client: `๐Ÿ‘จโ€๐Ÿ’ป ${this._agent.name} opened the ${this._client.key} profile`,
52
- agent: `๐Ÿ‘จโ€๐Ÿ’ป ${this._agent.name} is looking at ${this._agent.key} profile`,
53
- init: `๐Ÿš€ ${this._agent.name} is initializing`,
54
- start: `๐ŸŽฌ ${this._agent.name} has started the process`,
55
- enter: `๐ŸŽช ${this._agent.name} is entering the deva.world`,
56
- stop: `๐Ÿ›‘ ${this._agent.name} has stopped`,
57
- exit: `๐Ÿšช ${this._agent.name} found the exit`,
58
- done: `๐Ÿค ${this._agent.name} is all done time for #offerings ๐Ÿซ๐ŸŒ`,
59
- wait: `๐Ÿ˜ตโ€๐Ÿ’ซ ${this._agent.name} waiting for #stuff`,
60
- data: `๐Ÿ“€ ${this._agent.name} is receiving #data`,
61
- ask: `๐Ÿ™‹โ€โ™€๏ธ ${this._agent.name} is asking a #question`,
62
- cmd: `๐Ÿ“Ÿ ${this._agent.name} is using a #command`,
63
- question: `๐Ÿต ${this._agent.name} is in #question mode`,
64
- ask: `๐Ÿต ${this._agent.name} is in #ask mode`,
65
- talk: `๐ŸŽ™๏ธ ${this._agent.name} is in #talk mode`,
66
- listen: `๐ŸŽง ${this._agent.name} is in #listening mode`,
67
- error: `โŒ Looks like ${this._agent.name} had an error. Let's have @Systems look into that.`,
68
- story: `๐Ÿ““ ${this._agent.name} is creating an amazing #story`,
69
- development: `๐Ÿ‘จโ€๐Ÿ’ป ${this._agent.name} called for @Development assistance`,
70
- security: `๐Ÿšจ ${this._agent.name} called for @Security assistance`,
71
- support: `๐ŸŽ—๏ธ ${this._agent.name} called for @Support assistance`,
72
- services: `๐ŸŽ–๏ธ ${this._agent.name} called for @Services assistance`,
73
- systems: `๐Ÿ‘ฝ ${this._agent.name} called for @Systems assistance`,
74
- solutions: `๐Ÿ”ฌ ${this._agent.name} called for @Solutions assistance`,
75
- devas_start: `โœจ Starting all the #Devas`,
76
- devas_ready: `๐Ÿ“ธ The #Devas are #ready and #waiitng`,
77
- devas_stop: `๐Ÿ™ˆ The #Devas are #stopping`,
78
- devas_stopped: `๐Ÿ›‘ #Devas have #stopped, and that means time for #offerings ๐ŸŽ๐Ÿ‘๐Ÿ๐Ÿง‹`,
79
- deva_load: `โœ… ${this._agent.name} loading`,
80
- deva_loaded: `โœ… ${this._agent.name} loaded`,
81
- deva_unloaded: `โœ… ${this._agent.name} unloaded`,
82
- question_me: `๐Ÿต ${this._client.name} ask ${this._agent.name} a #question`,
83
- question_default: `๐Ÿงžโ€โ™‚๏ธ ${this._client.id} sent ${this._agent.name} a #question`,
84
- question_ask: `๐Ÿงž ${this._agent.name} is pondering what ${this._client.name} asked`,
85
- question_asking: `๐Ÿงž ${this._agent.name} is asking another #Deva what ${this._client.name} asked`,
86
- question_aswering: `๐Ÿงž ${this._agent.name} is answering the #question ${this._client.name} asked`,
87
- question_answer: `๐Ÿ”ฎ #${this._agent.name} gave #${this._client.name} the #answer`,
88
- question_command: `๐Ÿงžโ€โ™€๏ธ ${this._agent.name} then ran a #command for #${this._client.name}`,
89
- hash_question: `๐Ÿ” ${this._agent.name} created the #question #hash`,
90
- hash_ask: `๐Ÿ” ${this._agent.name} created the #ask #hash`,
91
- hash_answer: `๐Ÿ” ${this._agent.name} created the #answer #hash`,
92
- hash_command: `๐Ÿ” ${this._agent.name} created the #command #hash`,
93
- hash_packet: `๐Ÿ” ${this._agent.name} created the #packet #hash`,
94
- ask_question: `๐Ÿ‘ฝ ${this._client.name} asked ${this._agent.name} a #question`,
95
- ask_answer: `๐Ÿ›ธ ${this._agent.name} answered the #question from ${this._client.name}`,
96
- method_not_found: `๐Ÿ˜ฉ ${this._agent.name} used a faulty #command, and may needs @Solutions to assist`,
97
- security_ready: `๐Ÿš“ @Security is ready`,
98
- support_ready: `๐Ÿš‘ @Support is ready`,
99
- services_ready: `๐Ÿšš @Services is ready`,
46
+ console.log('CLIENT', this._client.profile.name);
47
+ const _states = {
48
+ uid: `๐Ÿ‘ป ${this._agent.profile.name} is making a new #uid`,
49
+ offline: `๐Ÿ‘ป ${this._agent.profile.name} is offline`,
50
+ online: `๐Ÿ“ก ${this._agent.profile.name} is online`,
51
+ config: `โ€๐Ÿ“€ ${this._agent.profile.name} is checking the config`,
52
+ client: `๐Ÿ‘จโ€๐Ÿ’ป ${this._agent.profile.name} opened the ${this._client.key} profile`,
53
+ agent: `๐Ÿ‘จโ€๐Ÿ’ป ${this._agent.profile.name} is looking at ${this._agent.key} profile`,
54
+ init: `๐Ÿš€ ${this._agent.profile.name} is initializing for ${this._client.profile.name}`,
55
+ start: `๐ŸŽฌ ${this._agent.profile.name} has started the process for ${this._client.profile.name}`,
56
+ enter: `๐ŸŽช ${this._agent.profile.name} is entering the deva.world with${this._client.profile.name}`,
57
+ stop: `๐Ÿ›‘ ${this._agent.profile.name} has stopped for ${this._client.profile.name}`,
58
+ exit: `๐Ÿšช ${this._agent.profile.name} found the exit with ${this._client.profile.name}`,
59
+ done: `๐Ÿค ${this._agent.profile.name} is all done time for #offerings ๐Ÿซ๐ŸŒ`,
60
+ wait: `๐Ÿ˜ตโ€๐Ÿ’ซ ${this._agent.profile.name} waiting for #stuff from ${this._client.profile.name}`,
61
+ data: `๐Ÿ“€ ${this._agent.profile.name} is receiving #data for ${this._client.profile.name}`,
62
+ ask: `๐Ÿ™‹โ€โ™€๏ธ ${this._agent.profile.name} is asking a #question from ${this._client.profile.name}`,
63
+ cmd: `๐Ÿ“Ÿ ${this._agent.profile.name} entered a #command from ${this._client.profile.name}`,
64
+ question: `๐Ÿต ${this._agent.profile.name} is in #question mode ${this._client.profile.name}`,
65
+ ask: `๐Ÿต ${this._agent.profile.name} is in #ask mode ${this._client.profile.name}`,
66
+ talk: `๐ŸŽ™๏ธ ${this._agent.profile.name} is in #talk mode with ${this._client.profile.name}`,
67
+ listen: `๐ŸŽง ${this._agent.profile.name} is in #listening mode with ${this._client.profile.name}`,
68
+ error: `โŒ ${this._agent.profile.name} had an error. Let's have @Systems look into that.`,
69
+ uid: `๐Ÿชช ${this._client.profile.name} made a #uid with ${this._agent.profile.name}`,
70
+ hash: `๐Ÿ”‘ ${this._client.profile.name} made a #hash with ${this._agent.profile.name}`,
71
+ cipher: `๐Ÿ” ${this._client.profile.name} locked a #cipher with ${this._agent.profile.name}`,
72
+ decipher: `๐Ÿ”“ ${this._client.profile.name} unlocked a #cipher with ${this._agent.profile.name}`,
73
+ story: `๐Ÿ““ ${this._agent.profile.name} is creating an amazing #story ${this._client.profile.name}`,
74
+ development: `๐Ÿ‘จโ€๐Ÿ’ป ${this._agent.profile.name} called for @Development assistance for ${this._client.profile.name}`,
75
+ security: `๐Ÿšจ ${this._agent.profile.name} called for @Security assistance for ${this._client.profile.name}`,
76
+ support: `๐ŸŽ—๏ธ ${this._agent.profile.name} called for @Support assistance for ${this._client.profile.name}`,
77
+ services: `๐ŸŽ–๏ธ ${this._agent.profile.name} called for @Services assistance for ${this._client.profile.name}`,
78
+ systems: `๐Ÿ‘ฝ ${this._agent.profile.name} called for @Systems assistance for ${this._client.profile.name}`,
79
+ solutions: `๐Ÿ”ฌ ${this._agent.profile.name} called for @Solutions assistance for ${this._client.profile.name}`,
80
+ devas_start: `โœจ Starting all the #Devas with ${this._client.profile.name}`,
81
+ devas_ready: `๐Ÿ“ธ The #Devas are #ready and #waiitng for ${this._client.profile.name}`,
82
+ devas_stop: `๐Ÿ™ˆ The #Devas are #stopping with ${this._client.profile.name}`,
83
+ devas_stopped: `๐Ÿ›‘ #Devas and ${this._client.profile.name} have #stopped, and that means time for #offerings ๐ŸŽ๐Ÿ‘๐Ÿ๐Ÿง‹`,
84
+ deva_load: `โœ… ${this._agent.profile.name} loading for ${this._client.profile.name}`,
85
+ deva_loaded: `โœ… ${this._agent.profile.name} loaded for ${this._client.profile.name}`,
86
+ deva_unloaded: `โœ… ${this._agent.profile.name} unloaded for ${this._client.profile.name}`,
87
+ question_me: `๐Ÿต ${this._client.profile.name} started with a great #question to ${this._agent.profile.name}`,
88
+ question_default: `๐Ÿงžโ€โ™‚๏ธ ${this._client.profile.name} asked a great #question to ${this._agent.profile.name}`,
89
+ question_ask: `๐Ÿงž ${this._agent.profile.name} is pondering what ${this._client.profile.name} asked`,
90
+ question_asking: `๐Ÿงž ${this._agent.profile.name} is asking another #Deva for ${this._client.profile.name}`,
91
+ question_aswering: `๐Ÿงž ${this._agent.profile.name} is answering the #question ${this._client.profile.name} asked`,
92
+ question_answer: `๐Ÿ”ฎ ${this._client.profile.name} received an #ansewr from ${this._agent.profile.name}`,
93
+ question_command: `๐Ÿงžโ€โ™€๏ธ ${this._client.profile.name} issued a #command to ${this._agent.profile.name}`,
94
+ hash_question: `๐Ÿ”‘ ${this._agent.profile.name} created the #question #hash for ${this._client.profile.name}`,
95
+ hash_ask: `๐Ÿ”‘ ${this._agent.profile.name} created the #ask #hash for ${this._client.profile.name}`,
96
+ hash_answer: `๐Ÿ”‘ ${this._agent.profile.name} #answer #hash with`,
97
+ hash_command: `๐Ÿ”‘ ${this._client.profile.name} #command #hash with ${this._agent.profile.name}`,
98
+ hash_packet: `๐Ÿ”‘ ${this._agent.profile.name} created the #packet #hash for ${this._client.profile.name}`,
99
+ ask_question: `๐Ÿ‘ฝ ${this._client.profile.name} asked ${this._agent.profile.name} a great #question`,
100
+ ask_answer: `๐Ÿ›ธ ${this._client.profile.name} received a great #answer from ${this._agent.profile.name}`,
101
+ method_not_found: `๐Ÿ˜ฉ ${this._client.profile.name} used a faulty #command while working with ${this._agent.profile.name}, and may need @Support`,
102
+ ready_security: `๐Ÿš“ @Security is ready`,
103
+ ready_support: `๐Ÿš‘ @Support is ready`,
104
+ ready_support: `๐Ÿš‘ @Support is ready`,
105
+ ready_services: `๐Ÿšš @Services is ready`,
106
+ ready_systems: `๐Ÿ˜๏ธ @Systems is ready`,
107
+ ready_solutions: `๐Ÿค“ @Solutions is ready`,
100
108
  alert_security: `๐Ÿšจ #SECURITY ALERT`,
101
109
  alert_support: `๐Ÿšจ #SUPPORT ALERT`,
102
110
  alert_services: `๐Ÿšจ #SERVICES ALERT`,
103
111
  alert_solutions: `๐Ÿšจ #SOLUTIONS ALERT`,
104
112
  alert_systems: `๐Ÿšจ #SYSTEMS ALERT`,
105
113
  alert_development: `๐Ÿšจ #SYSTEMS ALERT`,
106
- setting_client: `โ›„๏ธ Setting the #client for ${this._agent.name}`,
107
- setting_development: `๐Ÿ”ฌ ${this._agent.name} receiving @Development`,
108
- setting_security: `๐Ÿ‘ฎโ€โ™‚๏ธ ${this._agent.name} receiving @Security`,
109
- setting_support: `๐Ÿ‘จโ€โš•๏ธ ${this._agent.name} receiving @Support`,
110
- setting_services: `๐Ÿ‘ทโ€โ™‚๏ธ ${this._agent.name} receiving @Services`,
111
- setting_systems: `๐Ÿ˜๏ธ ${this._agent.name} receiving @Systems`,
112
- setting_solutions: `๐Ÿค“ ${this._agent.name} receiving @Solutions`,
113
- };
114
+ setting_client: `โ›„๏ธ ${this._agent.profile.name} is setting the #client for ${this._client.profile.name} `,
115
+ setting_development: `๐Ÿ”ฌ ${this._client.profile.name} and ${this._agent.profile.name} are receiving @Development`,
116
+ setting_security: `๐Ÿ‘ฎโ€โ™‚๏ธ ${this._client.profile.name} and ${this._agent.profile.name} are receiving @Security`,
117
+ setting_support: `๐Ÿ‘จโ€โš•๏ธ ${this._client.profile.name} and ${this._agent.profile.name} are receiving @Support`,
118
+ setting_services: `๐Ÿ‘ทโ€โ™‚๏ธ ${this._client.profile.name} and ${this._agent.profile.name} are receiving @Services`,
119
+ setting_systems: `๐Ÿ˜๏ธ ${this._client.profile.name} and ${this._agent.profile.name} are receiving @Systems`,
120
+ setting_solutions: `๐Ÿค“ ${this._client.profile.name} and ${this._agent.profile.name} are receiving @Solutions`,
121
+ }
122
+ this._states = _states; // The available states to work with.
114
123
  }
115
124
 
116
125
  set Messages(opts) {
117
126
  this._messages = {
118
- offline: `๐Ÿ™…โ€โ™‚๏ธ ${this._agent.name} offline`,
119
- init: `โš ๏ธ ${this._agent.name} init`,
120
- start: `โœ… ${this._agent.name} start`,
121
- stop: `๐Ÿ’ฅ ${this._agent.name} stop.`,
122
- enter: `๐Ÿ–– ${this._agent.name} enter.`,
123
- exit: `๐Ÿšช ${this._agent.name} exit.`,
124
- done: `๐Ÿ‘ ${this._agent.name} done.`,
127
+ offline: `๐Ÿ™…โ€โ™‚๏ธ ${this._agent.profile.name} offline`,
128
+ init: `โš ๏ธ ${this._agent.profile.name} init`,
129
+ start: `โœ… ${this._agent.profile.name} start`,
130
+ stop: `๐Ÿ’ฅ ${this._agent.profile.name} stop.`,
131
+ enter: `๐Ÿ–– ${this._agent.profile.name} enter.`,
132
+ exit: `๐Ÿšช ${this._agent.profile.name} exit.`,
133
+ done: `๐Ÿ‘ ${this._agent.profile.name} done.`,
125
134
  devas_started: '#Devas are #online and ready for #offerings ๐Ÿซ๐Ÿฅ›๐Ÿš๐Ÿฏ๐Ÿง‚',
126
135
  devas_stopped: '๐Ÿ›‘ #Devas have stopped',
127
- notext: `โŒ ${this._client.name}, please provide with valid input.`,
128
- method_not_found: `โŒ ${this._client.name} you sure messed that up!`,
136
+ notext: `โŒ ${this._client.profile.name}, please provide with valid input.`,
137
+ method_not_found: `โŒ ${this._client.profile.name} you sure messed that up!`,
129
138
  }
130
139
  }
131
- set Client(cl) {
140
+ set Client(client) {
132
141
  // copy the cl parameter into a local _client variable
133
- const _client = this.copy(cl);
142
+ const _client = this.copy(client);
134
143
 
135
144
  // delete the keys used for other features.
136
145
  if (_client.states) delete _client.states;
@@ -146,118 +155,114 @@ class Deva {
146
155
  this._client = _client;
147
156
 
148
157
  // set the states and messages after the cleint is set.
149
- this.States = cl.states;
150
- this.Messages = cl.messages;
151
- }
152
-
153
- // setup the @Development feature.
154
- set Development(opt=false) {
155
- this.state('setting_development');
156
- if (!opt) this._security = {};
157
- else {
158
- this._security = {
159
- concerns: opt.concerns,
160
- global: opt.global,
161
- items: opt.devas[this._agent.key]
162
- };
163
- }
158
+ this.States = client.states;
159
+ this.Messages = client.messages;
164
160
  }
165
161
 
166
162
  // setup the @Security feature
167
- set Security(opt=false) {
168
- this.state('setting_security');
169
- if (!opt) this._security = {};
163
+ set Security(client=false) {
164
+ if (!client) this._security = {};
170
165
  else {
166
+ this.state('setting_security');
167
+ const _client = this.copy(client);
171
168
  this._security = {
172
- concerns: opt.concerns,
173
- global: opt.global,
174
- items: opt.devas[this._agent.key]
169
+ id: this.uid(true),
170
+ client_id: _client.id,
171
+ client_name: _client.profile.name,
172
+ hash: _client.security.hash,
173
+ cipher: _client.security.cipher,
174
+ concerns: _client.security.concerns,
175
+ global: _client.security.global,
176
+ personal: _client.security.devas[this._agent.key]
175
177
  };
176
178
  }
177
179
  }
178
180
 
179
181
  // setup the @Support feature
180
- set Support(opt=false) {
181
- this.state('setting_support');
182
- if (!opt) this._support = {};
182
+ set Support(client=false) {
183
+ if (!client) this._support = {};
183
184
  else {
185
+ this.state('setting_support');
186
+ const _client = this.copy(client);
184
187
  this._support = {
185
- concerns: opt.concerns,
186
- global: opt.global,
187
- items: opt.devas[this._agent.key]
188
+ id: this.uid(true),
189
+ client_id: _client.id,
190
+ client_name: _client.profile.name,
191
+ concerns: _client.support.concerns,
192
+ global: _client.support.global,
193
+ personal: _client.support.devas[this._agent.key]
188
194
  };
189
195
  }
190
196
  }
191
197
 
192
198
  // setup the @Services feature
193
- set Services(opt=false) {
194
- this.state('setting_services');
195
- if (!opt) this._servcies = {};
199
+ set Services(client=false) {
200
+ if (!client) this._servcies = {};
196
201
  else {
202
+ this.state('setting_services');
203
+ const _client = this.copy(client);
197
204
  this._services = {
198
- concerns: opt.concerns,
199
- global: opt.global,
200
- items: opt.devas[this._agent.key]
205
+ id: this.uid(true),
206
+ client_id: _client.id,
207
+ client_name: _client.profile.name,
208
+ concerns: _client.services.concerns,
209
+ global: _client.services.global,
210
+ personal: _client.services.devas[this._agent.key]
201
211
  };
202
212
  }
203
213
  }
204
214
 
205
215
  // setup the @Systems feature
206
- set Systems(opt=false) {
207
- this.state('setting_systems');
208
- if (!opt) this._systems = {};
216
+ set Systems(client=false) {
217
+ if (!client) this._systems = {};
209
218
  else {
219
+ this.state('setting_systems');
220
+ const _client = this.copy(client);
210
221
  this._systems = {
211
- concerns: opt.concerns,
212
- global: opt.global,
213
- items: opt.devas[this._agent.key]
222
+ id: this.uid(true),
223
+ client_id: _client.id,
224
+ client_name: _client.profile.name,
225
+ concerns: _client.systems.concerns,
226
+ global: _client.systems.global,
227
+ personal: _client.systems.devas[this._agent.key]
214
228
  };
215
229
  }
216
230
  }
217
231
 
218
232
  // setup the @Solutions feature
219
- set Solutions(opt=false) {
220
- this.state('setting_solutions');
221
- if (!opt) this._solutions = {};
233
+ set Solutions(client=false) {
234
+ if (!client) this._solutions = {};
222
235
  else {
236
+ this.state('setting_solutions');
237
+ const _client = this.copy(client);
223
238
  this._solutions = {
224
- concerns: opt.concerns,
225
- global: opt.global,
226
- items: opt.devas[this._agent.key]
239
+ id: this.uid(true),
240
+ client_id: _client.id,
241
+ client_name: _client.profile.name,
242
+ concerns: _client.solutions.concerns,
243
+ global: _client.solutions.global,
244
+ personal: _client.solutions.devas[this._agent.key]
227
245
  };
228
246
  }
229
247
  }
230
248
 
231
- /**************
232
- func: state
233
- params:
234
- - st: The state flag to set for the Deva that matches to this._states
235
- describe
236
- ***************/
237
- state(st, data=false) {
238
- if (!Object.keys(this._states).includes(st)) return;
239
- this._state = `${this._states[st]} on ${this.fDate(Date.now(), 'short_month', true)}`;
240
- const _data = {
241
- id: this.uid(true),
242
- client: this._client.id,
243
- agent: this._agent.id,
244
- st: st,
245
- state: this._state,
246
- data,
247
- created: Date.now(),
248
- };
249
- this.prompt(this._state);
250
- this.talk(`${this._agent.key}:state`, _data);
251
- return this._state;
252
- }
253
-
254
- states() {
255
- return this._states;
249
+ // setup the @Development feature.
250
+ set Development(client=false) {
251
+ if (!client) this._development = {};
252
+ else {
253
+ this.state('setting_development');
254
+ const _client = this.copy(client);
255
+ this._development = {
256
+ id: this.uid(true),
257
+ client_id: _client.id,
258
+ client_name: _client.profile.name,
259
+ concerns: _client.development.concerns,
260
+ global: _client.development.global,
261
+ personal: _client.development.devas[this._agent.key]
262
+ };
263
+ }
256
264
  }
257
265
 
258
- // Called from the init function to bind the elements defined in the this.bind variable.
259
- // the assign bind ensures that the *this* scope is available to child elements/functions.
260
-
261
266
  /**************
262
267
  func: _assignBind
263
268
  params: none
@@ -383,6 +388,38 @@ class Deva {
383
388
  return packet;
384
389
  }
385
390
 
391
+ /**************
392
+ func: states
393
+ params: none
394
+ describe: returns the avaiable staets values.
395
+ ***************/
396
+ states() {
397
+ return this._states;
398
+ }
399
+
400
+ /**************
401
+ func: state
402
+ params:
403
+ - st: The state flag to set for the Deva that matches to this._states
404
+ describe
405
+ ***************/
406
+ state(st, data=false) {
407
+ if (!Object.keys(this._states).includes(st)) return;
408
+ this._state = `${this._states[st]} on ${this.formatDate(Date.now(), 'short_month', true)}`;
409
+ const _data = {
410
+ id: this.uid(true),
411
+ client: this._client.id,
412
+ agent: this._agent.id,
413
+ st: st,
414
+ state: this._state,
415
+ data,
416
+ created: Date.now(),
417
+ };
418
+ this.prompt(this._state);
419
+ this.talk(`${this._agent.key}:state`, _data);
420
+ return this._state;
421
+ }
422
+
386
423
  /**************
387
424
  func: uid
388
425
  params:
@@ -396,12 +433,90 @@ class Deva {
396
433
  is shared.
397
434
  ***************/
398
435
  uid(guid=false) {
399
- if (guid) return randomUUID()
400
- const min = Math.floor(Date.now() - (Date.now() / Math.PI));
401
- const max = Math.floor(Date.now() + (Date.now() * Math.PI));
402
- return Math.floor(Math.random() * (max - min)) + min;
436
+ let id;
437
+ if (guid) {
438
+ id = randomUUID()
439
+ }
440
+ else {
441
+ const min = Math.floor(Date.now() - (Date.now() / Math.PI));
442
+ const max = Math.floor(Date.now() + (Date.now() * Math.PI));
443
+ id = Math.floor(Math.random() * (max - min)) + min;
444
+ }
445
+ return id;
403
446
  }
404
447
 
448
+ /**************
449
+ func: hash
450
+ params:
451
+ - texts: The text string to create a hash value for.
452
+ - algo: The hashing algorithm to use for hashing. md5, sha256, or sha512
453
+
454
+ describe:
455
+ The hash algorithm will take a string of text and produce a hash.
456
+ ***************/
457
+ hash(str) {
458
+ const algo = this._security.hash || 'md5';
459
+ const the_hash = createHash(algo);
460
+ the_hash.update(str);
461
+ const _digest = the_hash.digest('base64');
462
+ this.state('hash', {
463
+
464
+ })
465
+ return ;
466
+ }
467
+
468
+ /**************
469
+ func: cipher
470
+ params: str - string to encrypt
471
+ describe:
472
+ The encrypt function allows for the internal encryption of data based on the
473
+ defined client security settings.
474
+ ***************/
475
+ cipher(str) {
476
+ const security = this._security;
477
+ const {password, algorithm} = security.cipher;
478
+ const key = createHash('sha256').update(String(password)).digest('base64');
479
+ const key_in_bytes = Buffer.from(key, 'base64')
480
+ const iv = randomBytes(16);
481
+
482
+ // create a new cipher
483
+ const _cipher = createCipheriv(algorithm, key_in_bytes, iv);
484
+ const encrypted = _cipher.update(String(str), 'utf8', 'hex') + _cipher.final('hex');
485
+
486
+ this.state('cipher', {
487
+ id: this.uid(true),
488
+ iv,
489
+ key,
490
+ agent_id: this._agent.id,
491
+ client_id: this._client.id,
492
+ created: Date.now()
493
+ });
494
+
495
+ return {
496
+ iv: iv.toString('base64'),
497
+ key,
498
+ encrypted,
499
+ }
500
+ }
501
+ decipher(opt) {
502
+ const iv = Buffer.from(opt.iv, 'base64');
503
+ const encrypted = Buffer.from(opt.encrypted, 'hex');
504
+ const key_in_bytes = Buffer.from(opt.key, 'base64')
505
+ const security = this._security;
506
+ const {algorithm} = security.cipher;
507
+ const decipher = createDecipheriv( algorithm, key_in_bytes, iv);
508
+ const decrypted = decipher.update(encrypted);
509
+ const final = Buffer.concat([decrypted, decipher.final()]);
510
+ this.state('decipher', {
511
+ id: this.uid(true),
512
+ iv: opt.iv,
513
+ key: opt.key,
514
+ agent_id: this._agent.id,
515
+ client_id: this._client.id,
516
+ created: Date.now()
517
+ });
518
+ return final.toString();
519
+ }
405
520
 
406
521
  /**************
407
522
  func: copy
@@ -739,12 +854,12 @@ class Deva {
739
854
  }).then(() => {
740
855
  this.state('init');
741
856
 
742
- this.Security = client.security;
743
- this.Support = client.support;
744
- this.Services = client.services;
745
- this.Systems = client.systems;
746
- this.Solutions = client.solutions;
747
- this.Development = client.development;
857
+ this.Security = client;
858
+ this.Support = client;
859
+ this.Services = client;
860
+ this.Systems = client;
861
+ this.Solutions = client;
862
+ this.Development = client;
748
863
 
749
864
  return this.onInit && typeof this.onInit === 'function' ? this.onInit() : this.start();
750
865
  }).then(started => {
@@ -862,7 +977,7 @@ class Deva {
862
977
  if (!this._active) return Promise.resolve(this._messages.offline);
863
978
  const id = this.uid();
864
979
  const dateFormat = new Intl.DateTimeFormat('en-US', { dateStyle: 'medium', timeStyle: 'medium' }).format(this._active);
865
- let text = `${this._agent.name} active since ${dateFormat}`;
980
+ let text = `${this._agent.profile.name} active since ${dateFormat}`;
866
981
  if (ammend) text = text + `\n${ammend}`;
867
982
  return Promise.resolve({text});
868
983
  }
@@ -878,21 +993,6 @@ class Deva {
878
993
  return this.talk('prompt', {text, agent:this._agent});
879
994
  }
880
995
 
881
- /**************
882
- func: hash
883
- params:
884
- - texts: The text string to create a hash value for.
885
- - algo: The hashing algorithm to use for hashing. md5, sha256, or sha512
886
-
887
- describe:
888
- The hash algorithm will take a string of text and produce a hash.
889
- ***************/
890
- hash(text, algo='md5') {
891
- const the_hash = createHash(algo);
892
- the_hash.update(text);
893
- return the_hash.digest('hex');
894
- }
895
-
896
996
  /**************
897
997
  func: client
898
998
  params: none
@@ -1026,7 +1126,7 @@ class Deva {
1026
1126
 
1027
1127
  // UTILITY FUNCTIONS
1028
1128
  /**************
1029
- func: fDate
1129
+ func: formatDate
1030
1130
  params:
1031
1131
  - d: The date string to format.
1032
1132
  - format: the various formats that can be selected.
@@ -1037,7 +1137,7 @@ class Deva {
1037
1137
  FDate format ensures that consistent date formatting is used within the
1038
1138
  system based on the language and locale in the client profile.
1039
1139
  ***************/
1040
- fDate(d, format='long', time=false) {
1140
+ formatDate(d, format='long', time=false) {
1041
1141
  if (!d) d = Date.now();
1042
1142
  d = new Date(d);
1043
1143
 
@@ -1052,42 +1152,42 @@ class Deva {
1052
1152
  log: { year: 'numeric', month: 'short', day: 'numeric' },
1053
1153
  };
1054
1154
  const theDate = d.toLocaleDateString(this._client.locale, formats[format]);
1055
- const theTime = this.fTime(d);
1155
+ const theTime = this.formatTime(d);
1056
1156
  return !theTime ? theDate : `${theDate} - ${theTime}`;
1057
1157
  }
1058
1158
 
1059
1159
  /**************
1060
- func: fTime
1160
+ func: formatTime
1061
1161
  params:
1062
1162
  - t: the time to format
1063
1163
  describe:
1064
1164
  The formatTime fucntion will return a consistent local time for the t
1065
1165
  parameter based on the locale setting in the client profile..
1066
1166
  ***************/
1067
- fTime(t) {
1167
+ formatTime(t) {
1068
1168
  return t.toLocaleTimeString(this._client.locale);
1069
1169
  }
1070
1170
 
1071
1171
  /**************
1072
- func: fCurrency
1172
+ func: formatCurrency
1073
1173
  params:
1074
1174
  - n: is the number that you want to return the currency of.
1075
1175
  describe:
1076
- The fCurrency function will format a currency value based on the setting
1176
+ The formatCurrency function will format a currency value based on the setting
1077
1177
  in the client profile.
1078
1178
  ***************/
1079
- fCurrency(n) {
1179
+ formatCurrency(n) {
1080
1180
  return new Intl.NumberFormat(this._client.locale, { style: 'currency', currency: this._client.currency }).format(n);
1081
1181
  }
1082
1182
 
1083
1183
  /**************
1084
- func: fPercent
1184
+ func: formatPerdent
1085
1185
  params:
1086
1186
  - n: is the number that you want to format as a percent.
1087
1187
  - dec: is the number of decimal places to apply to the number.
1088
1188
  describe:
1089
1189
  ***************/
1090
- fPercent(n, dec=2) {
1190
+ formatPerdent(n, dec=2) {
1091
1191
  return parseFloat(n).toFixed(dec) + '%';
1092
1192
  }
1093
1193
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indra.ai/deva",
3
- "version": "1.1.27",
3
+ "version": "1.1.28",
4
4
  "description": "The Deva Core",
5
5
  "main": "index.js",
6
6
  "scripts": {