evmux-app-framework 0.0.8 → 0.0.10

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evmux-app-framework",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -6,6 +6,20 @@ import PostMessageManager from '../PostMessageManager/PostMessageManager';
6
6
  import appsDataManager from '../AppsDataManager/AppsDataManager';
7
7
  import AppsObserverCommentsHandler from './AppsObserverCommentsHandler'
8
8
 
9
+ import { availableEvents } from '../EvmuxAppsApi/EvmuxAppsApi'
10
+
11
+ export const availableRequests = {
12
+ updateSettings: "updateSettings",
13
+ getSettings: "getSettings",
14
+ startLoad: "startLoad",
15
+ loaded: "loaded",
16
+ registerEvent: "registerEvent",
17
+ unregisterEvent: "unregisterEvent",
18
+ EvEvent: "EvEvent",
19
+ raiseAppMessagingEvent: "raiseAppMessagingEvent",
20
+ }
21
+
22
+
9
23
  let createEventResultObject = (requestName, eventName, result) => {
10
24
 
11
25
  let eventObj = {
@@ -37,15 +51,26 @@ let createEventResultObject = (requestName, eventName, result) => {
37
51
  this._requestHandlers.push(new AppsObserverCommentsHandler(app))
38
52
  }
39
53
 
54
+ _sendPostMessageToUsrAppInstancesComponents(userAppInstanceId, data, originComponentIdToExclude = null) {
55
+ let stringObjToSend = JSON.stringify(data)
56
+ for (const [componentId, instanceWindow] of Object.entries(this._userAppInstances[userAppInstanceId].instances)) {
57
+ if (originComponentIdToExclude != componentId){
58
+ instanceWindow.window.postMessage(stringObjToSend, "*")
59
+ }
60
+ }
61
+ }
62
+
63
+ _raiseEventForSpecificUserAppInstance(userAppInstanceId, eventName, data, originComponentIdToExclude = null) {
64
+ let userAppInstance = this._userAppInstances[userAppInstanceId]
65
+ if (userAppInstance && userAppInstance.events && userAppInstance.events[eventName]) {
66
+ let eventObj = createEventResultObject("EvEvent", eventName, data)
67
+ this._sendPostMessageToUsrAppInstancesComponents(userAppInstanceId, eventObj, originComponentIdToExclude)
68
+ }
69
+ }
70
+
40
71
  raiseEvent(eventName, data) {
41
72
  for (const [userAppInstanceId, userAppInstance] of Object.entries(this._userAppInstances)) {
42
- if (userAppInstance.events && userAppInstance.events[eventName]) {
43
- let eventObj = createEventResultObject("EvEvent", eventName, data)
44
- let stringObjToSend = JSON.stringify(eventObj)
45
- for (const [key, instanceWindow] of Object.entries(this._userAppInstances[userAppInstanceId].instances)) {
46
- instanceWindow.window.postMessage(stringObjToSend, "*")
47
- }
48
- }
73
+ this._raiseEventForSpecificUserAppInstance(userAppInstanceId, eventName, data)
49
74
  }
50
75
  }
51
76
 
@@ -61,16 +86,13 @@ let createEventResultObject = (requestName, eventName, result) => {
61
86
  this._userAppInstances[userAppInstanceId].events = this._userAppInstances[userAppInstanceId].events || {};
62
87
  }
63
88
 
64
- updateAndNotifyAppInstancesOnSettingsUpdate(userAppInstanceId, data)
89
+ updateAndNotifyAppInstancesOnSettingsUpdate(userAppInstanceId, data, originComponentId)
65
90
  {
66
91
  appsDataManager.updateUserAppInstanceSettings(userAppInstanceId, data)
67
- if (this._userAppInstances[userAppInstanceId].events['settingsUpdated'])
92
+ if (this._userAppInstances[userAppInstanceId].events[availableEvents.settingsUpdated])
68
93
  {
69
- let eventObj = createEventResultObject("EvEvent","settingsUpdated", data)
70
- let stringObjToSend = JSON.stringify(eventObj)
71
- for (const [key, instanceWindow] of Object.entries(this._userAppInstances[userAppInstanceId].instances)) {
72
- instanceWindow.window.postMessage(stringObjToSend, "*")
73
- }
94
+ let eventObj = createEventResultObject("EvEvent", availableEvents.settingsUpdated, data)
95
+ this._sendPostMessageToUsrAppInstancesComponents(userAppInstanceId, eventObj, originComponentId)
74
96
  }
75
97
  }
76
98
 
@@ -78,42 +100,47 @@ let createEventResultObject = (requestName, eventName, result) => {
78
100
 
79
101
  let requestObj = {};
80
102
  try {
81
- requestObj = JSON.parse(evt.data);
103
+ if (typeof evt.data === 'string' || evt.data instanceof String){
104
+ requestObj = JSON.parse(evt.data);
105
+ }else{
106
+ requestObj = evt.data
107
+ }
82
108
  } catch (error) {
83
- console.log("xxxx", error)
84
109
  }
85
110
 
86
111
  let result = null
87
112
 
88
- if (requestObj.request == "updateSettings")
113
+ if (requestObj.request == availableRequests.updateSettings)
89
114
  {
90
115
 
91
116
  if (this._userAppInstances[requestObj.userAppInstanceId]) {
92
117
  this._eventHandler.publish("updateSettings", requestObj)
93
-
94
- this.updateAndNotifyAppInstancesOnSettingsUpdate(requestObj.userAppInstanceId, requestObj.data)
95
-
118
+ this._eventHandler.publish("updateEverywhere", requestObj)
119
+ this.updateAndNotifyAppInstancesOnSettingsUpdate(requestObj.userAppInstanceId, requestObj.data, requestObj.componentId)
96
120
  }
97
121
  }
98
- else if (requestObj.request == "getSettings")
122
+ else if (requestObj.request == availableRequests.raiseAppMessagingEvent)
99
123
  {
100
-
101
124
  if (this._userAppInstances[requestObj.userAppInstanceId]) {
102
125
 
126
+ this._raiseEventForSpecificUserAppInstance(requestObj.userAppInstanceId, availableEvents.appMessaging, requestObj.data, requestObj.componentId)
127
+ this._eventHandler.publish("updateEverywhere", requestObj)
128
+ }
129
+ }
130
+ else if (requestObj.request == availableRequests.getSettings)
131
+ {
132
+ if (this._userAppInstances[requestObj.userAppInstanceId]) {
103
133
  let eventObj = createEventResultObject("EvMessage", "settings", requestObj.data)
104
- let stringObjToSend = JSON.stringify(eventObj)
105
134
  result = (await appsDataManager.getUserAppInstanceById(requestObj.userAppInstanceId, false)).settings
106
- //this._userAppInstances[requestObj.userAppInstanceId].window.postMessage(stringObjToSend, "*")
107
-
108
135
  }
109
136
  }
110
- else if (requestObj.request == "startLoad")
137
+ else if (requestObj.request == availableRequests.startLoad)
111
138
  {
112
139
  this._makeSureAppInstanceExist(requestObj.userAppInstanceId);
113
140
  this._userAppInstances[requestObj.userAppInstanceId].instances[requestObj.componentId] = { window: evt.source }
114
- return;
141
+
115
142
  }
116
- else if (requestObj.request == "loaded")
143
+ else if (requestObj.request == availableRequests.loaded)
117
144
  {
118
145
  this._makeSureAppInstanceExist(requestObj.userAppInstanceId);
119
146
 
@@ -121,13 +148,13 @@ let createEventResultObject = (requestName, eventName, result) => {
121
148
 
122
149
  result = this.getAppSettingsForAppInstanceId(requestObj.userAppInstanceId)
123
150
  }
124
- else if (requestObj.request == "registerEvent")
151
+ else if (requestObj.request == availableRequests.registerEvent)
125
152
  {
126
153
  // verify that the app can register to this event
127
154
  this._makeSureAppInstanceExist(requestObj.userAppInstanceId);
128
155
  this._userAppInstances[requestObj.userAppInstanceId].events[requestObj.data.eventName] = true
129
156
  }
130
- else if (requestObj.request == "unregisterEvent")
157
+ else if (requestObj.request == availableRequests.unregisterEvent)
131
158
  {
132
159
  this._makeSureAppInstanceExist(requestObj.userAppInstanceId);
133
160
  delete this._userAppInstances[requestObj.userAppInstanceId].events[requestObj.data.eventName]
@@ -142,9 +169,11 @@ let createEventResultObject = (requestName, eventName, result) => {
142
169
  }
143
170
 
144
171
  }
145
-
146
- PostMessageManager.respondForPromiseBasedRequest(requestObj, evt.source, evt.origin, result);
147
-
172
+
173
+ if (requestObj.promisedBased)
174
+ {
175
+ PostMessageManager.respondForPromiseBasedRequest(requestObj, evt.source, evt.origin, result);
176
+ }
148
177
  }
149
178
 
150
179
  onUserAppComponentUnload(userAppInstanceId, componentId)
@@ -2,11 +2,14 @@ import PostMessageManager from '../PostMessageManager/PostMessageManager.js'
2
2
 
3
3
  import EvmuxAppsApiComments from './EvmuxAppsApiComments.js'
4
4
 
5
+ import { availableRequests } from '../AppsObserver/AppsObserver.js'
6
+
5
7
  export const availableEvents = {
6
8
  settingsUpdated: "settingsUpdated",
7
9
  viewerCountChanged: "viewerCountChanged",
8
10
  keystroke: "keystroke",
9
- comments: "comments"
11
+ comments: "comments",
12
+ appMessaging: "appMessaging"
10
13
  }
11
14
 
12
15
  export default class EvmuxAppsApi {
@@ -32,7 +35,7 @@ export default class EvmuxAppsApi {
32
35
  this._userAppInstanceId = userAppInstanceId;
33
36
  this._componentId = componentId;
34
37
 
35
- let reqObj = {request: "startLoad", userAppInstanceId: this._userAppInstanceId, componentId: this._componentId}
38
+ let reqObj = {request: availableRequests.startLoad, userAppInstanceId: this._userAppInstanceId, componentId: this._componentId}
36
39
  this._postMessageManager.sendRequest(reqObj);
37
40
 
38
41
  this.comments = new EvmuxAppsApiComments(this);
@@ -42,7 +45,7 @@ export default class EvmuxAppsApi {
42
45
  {
43
46
  this._postMessageManager._messagesEventHandlers.subscribe(eventName, callback)
44
47
 
45
- let reqObj = { request: "registerEvent", userAppInstanceId: this._userAppInstanceId, componentId: this._componentId }
48
+ let reqObj = { request: availableRequests.registerEvent, userAppInstanceId: this._userAppInstanceId, componentId: this._componentId }
46
49
  reqObj.data = {
47
50
  eventName
48
51
  }
@@ -52,7 +55,7 @@ export default class EvmuxAppsApi {
52
55
  async unregisterEvent(eventName, callback)
53
56
  {
54
57
  this._postMessageManager._messagesEventHandlers.unsubscribe(eventName, callback)
55
- let reqObj = { request: "unregisterEvent", userAppInstanceId: this._userAppInstanceId, componentId: this._componentId }
58
+ let reqObj = { request: availableRequests.unregisterEvent, userAppInstanceId: this._userAppInstanceId, componentId: this._componentId }
56
59
  reqObj.data = {
57
60
  eventName
58
61
  }
@@ -60,20 +63,30 @@ export default class EvmuxAppsApi {
60
63
  }
61
64
 
62
65
  async reportLoaded() {
63
- let reqObj = {request: "loaded", userAppInstanceId: this._userAppInstanceId, componentId: this._componentId}
66
+ let reqObj = {request: availableRequests.loaded, userAppInstanceId: this._userAppInstanceId, componentId: this._componentId}
64
67
  return this._postMessageManager.sendRequestAsync(reqObj);
65
68
  }
66
69
 
67
70
  async getSettings() {
68
-
69
- let reqObj = {request: "getSettings", userAppInstanceId: this._userAppInstanceId, componentId: this._componentId}
71
+ let reqObj = {request: availableRequests.getSettings, userAppInstanceId: this._userAppInstanceId, componentId: this._componentId}
70
72
  return this._postMessageManager.sendRequestAsync(reqObj);
71
73
  }
72
74
 
75
+ async raiseAppMessagingEvent(data) {
76
+ let requestObj = {
77
+ request: availableRequests.sendAppMessaging,
78
+ userAppInstanceId: this._userAppInstanceId,
79
+ componentId: this._componentId,
80
+ data
81
+ }
82
+
83
+ return this._postMessageManager.sendRequest(requestObj);
84
+ }
85
+
73
86
  async updateSettings(settingsObj) {
74
87
 
75
88
  let requestObj = {
76
- request: "updateSettings",
89
+ request: availableRequests.updateSettings,
77
90
  userAppInstanceId: this._userAppInstanceId,
78
91
  componentId: this._componentId,
79
92
  data: { ...settingsObj }