seatable-html-page-sdk 0.0.1 → 0.0.3
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/README.md +18 -1
- package/dist/index.js +4314 -1
- package/dist/index.js.map +1 -0
- package/dist/index.min.js +2 -0
- package/dist/index.min.js.map +1 -0
- package/es/apis/universal-app-api.js +68 -81
- package/es/apis/universal-app-api.js.map +1 -0
- package/es/iframe-adapter.js +216 -264
- package/es/iframe-adapter.js.map +1 -0
- package/es/index.js +1 -0
- package/es/index.js.map +1 -0
- package/es/sdk.js +91 -131
- package/es/sdk.js.map +1 -0
- package/lib/apis/universal-app-api.js +68 -83
- package/lib/apis/universal-app-api.js.map +1 -0
- package/lib/iframe-adapter.js +216 -272
- package/lib/iframe-adapter.js.map +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -0
- package/lib/sdk.js +90 -137
- package/lib/sdk.js.map +1 -0
- package/package.json +21 -5
package/es/iframe-adapter.js
CHANGED
|
@@ -1,46 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
3
|
-
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
4
|
-
import _createClass from '@babel/runtime/helpers/createClass';
|
|
5
|
-
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
6
|
-
|
|
7
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
8
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
9
|
-
var POST_MESSAGE_TYPE = {
|
|
1
|
+
const POST_MESSAGE_TYPE = {
|
|
10
2
|
HTML_PAGE_REQUEST: 'HTML_PAGE_REQUEST',
|
|
11
3
|
HTML_PAGE_RESPONSE: 'HTML_PAGE_RESPONSE',
|
|
12
4
|
HTML_PAGE_EVENT: 'HTML_PAGE_EVENT',
|
|
13
5
|
WINDOW_EVENT: 'WINDOW_EVENT'
|
|
14
6
|
};
|
|
15
|
-
|
|
7
|
+
const POST_MESSAGE_REQUEST_TYPE = {
|
|
16
8
|
GET_SERVER: 'get_server',
|
|
17
9
|
GET_ACCESS_TOKEN: 'get_access_token',
|
|
18
10
|
GET_APP_UUID: 'get_app_uuid',
|
|
19
11
|
GET_PAGE_ID: 'get_page_id'
|
|
20
12
|
};
|
|
21
|
-
|
|
13
|
+
const WINDOW_EVENT_SOURCE_TYPE = {
|
|
22
14
|
APP: 'app',
|
|
23
15
|
IFRAME: 'iframe'
|
|
24
16
|
};
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
17
|
+
const SUPPORT_WINDOW_MOUSE_EVENT_TYPES = ['click', 'dblclick', 'mousemove', 'mouseenter', 'mouseleave', 'mousedown', 'mouseup', 'contextmenu'];
|
|
18
|
+
const SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES = ['keydown', 'keyup', 'keypress'];
|
|
19
|
+
const SUPPORT_WINDOW_DRAG_EVENT_TYPES = ['dragstart', 'dragover', 'drag', 'dragend', 'dragenter', 'dragleave', 'drop'];
|
|
20
|
+
const HIGH_FREQUENCY_WINDOW_EVENT_TYPES = ['mousemove', 'dragover'];
|
|
21
|
+
const hasOwnProperty = (obj, key) => {
|
|
30
22
|
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
31
23
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
for (
|
|
24
|
+
const generatorBase64Code = function () {
|
|
25
|
+
let keyLength = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 4;
|
|
26
|
+
let possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789';
|
|
27
|
+
let key = '';
|
|
28
|
+
for (let i = 0; i < keyLength; i++) {
|
|
37
29
|
key += possible.charAt(Math.floor(Math.random() * possible.length));
|
|
38
30
|
}
|
|
39
31
|
return key;
|
|
40
32
|
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
const createWindowEventData = _ref => {
|
|
34
|
+
let {
|
|
35
|
+
eventType,
|
|
36
|
+
event
|
|
37
|
+
} = _ref;
|
|
44
38
|
if (SUPPORT_WINDOW_MOUSE_EVENT_TYPES.includes(eventType)) {
|
|
45
39
|
return {
|
|
46
40
|
type: eventType,
|
|
@@ -77,267 +71,225 @@ var createWindowEventData = function createWindowEventData(_ref) {
|
|
|
77
71
|
* IframeAdapter – enables secure postMessage communication in production environments
|
|
78
72
|
* For HTML page running inside an iframe
|
|
79
73
|
*/
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
_classCallCheck(this, IframeAdapter);
|
|
74
|
+
class IframeAdapter {
|
|
75
|
+
constructor(options) {
|
|
76
|
+
this.options = options || {};
|
|
84
77
|
this.selfWindow = window.parent === window.self;
|
|
85
|
-
this.targetOrigin = options.targetOrigin || '*';
|
|
78
|
+
this.targetOrigin = this.options.targetOrigin || '*';
|
|
86
79
|
this.pendingRequests = {};
|
|
87
80
|
this.eventHandlers = {};
|
|
88
|
-
this.timeout = options.timeout || 10000;
|
|
81
|
+
this.timeout = this.options.timeout || 10000;
|
|
89
82
|
this.setupMessageListener();
|
|
90
83
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
while (hasOwnProperty(this.pendingRequests, id)) {
|
|
96
|
-
id = generatorBase64Code();
|
|
97
|
-
}
|
|
98
|
-
return id;
|
|
84
|
+
generatorRequestId() {
|
|
85
|
+
let id = generatorBase64Code();
|
|
86
|
+
while (hasOwnProperty(this.pendingRequests, id)) {
|
|
87
|
+
id = generatorBase64Code();
|
|
99
88
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
source: WINDOW_EVENT_SOURCE_TYPE.IFRAME
|
|
116
|
-
})
|
|
89
|
+
return id;
|
|
90
|
+
}
|
|
91
|
+
setupMessageListener() {
|
|
92
|
+
if (this.selfWindow) return;
|
|
93
|
+
window.addEventListener('message', this.handleMessage.bind(this));
|
|
94
|
+
this.setEventsListener();
|
|
95
|
+
}
|
|
96
|
+
postWindowEvent(eventData) {
|
|
97
|
+
if (!eventData) return;
|
|
98
|
+
window.parent.postMessage({
|
|
99
|
+
type: POST_MESSAGE_TYPE.WINDOW_EVENT,
|
|
100
|
+
params: {
|
|
101
|
+
event_data: {
|
|
102
|
+
...eventData,
|
|
103
|
+
source: WINDOW_EVENT_SOURCE_TYPE.IFRAME
|
|
117
104
|
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
event: event
|
|
136
|
-
});
|
|
105
|
+
}
|
|
106
|
+
}, this.targetOrigin);
|
|
107
|
+
}
|
|
108
|
+
setEventsListener() {
|
|
109
|
+
let rafId = null;
|
|
110
|
+
let pendingEvent = null;
|
|
111
|
+
[...SUPPORT_WINDOW_MOUSE_EVENT_TYPES, ...SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES, ...SUPPORT_WINDOW_DRAG_EVENT_TYPES].forEach(eventType => {
|
|
112
|
+
window.addEventListener(eventType, event => {
|
|
113
|
+
if (event.source === WINDOW_EVENT_SOURCE_TYPE.APP) return;
|
|
114
|
+
if (HIGH_FREQUENCY_WINDOW_EVENT_TYPES.includes(eventType)) {
|
|
115
|
+
// High-frequency events that need throttling (use RAF to limit to 60fps)
|
|
116
|
+
// Use requestAnimationFrame for throttling high-frequency events
|
|
117
|
+
// Store the latest event with necessary data
|
|
118
|
+
pendingEvent = createWindowEventData({
|
|
119
|
+
eventType,
|
|
120
|
+
event
|
|
121
|
+
});
|
|
137
122
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
return;
|
|
123
|
+
// Only schedule a new frame if one isn't already scheduled
|
|
124
|
+
if (rafId === null) {
|
|
125
|
+
rafId = requestAnimationFrame(() => {
|
|
126
|
+
if (pendingEvent) {
|
|
127
|
+
this.postWindowEvent(pendingEvent);
|
|
128
|
+
pendingEvent = null;
|
|
129
|
+
rafId = null;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
149
132
|
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
150
135
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
136
|
+
// Low-frequency events
|
|
137
|
+
this.postWindowEvent(createWindowEventData({
|
|
138
|
+
eventType,
|
|
139
|
+
event
|
|
140
|
+
}));
|
|
141
|
+
}, true);
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
async request(method, params) {
|
|
145
|
+
if (this.selfWindow) {
|
|
146
|
+
return new Promise(resolve => {
|
|
147
|
+
resolve(null);
|
|
157
148
|
});
|
|
158
149
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
}
|
|
172
|
-
return _context.abrupt("return", new Promise(function (resolve) {
|
|
173
|
-
resolve(null);
|
|
174
|
-
}));
|
|
175
|
-
case 2:
|
|
176
|
-
requestId = this.generatorRequestId();
|
|
177
|
-
return _context.abrupt("return", new Promise(function (resolve, reject) {
|
|
178
|
-
_this2.pendingRequests[requestId] = {
|
|
179
|
-
resolve: resolve,
|
|
180
|
-
reject: reject
|
|
181
|
-
};
|
|
182
|
-
window.parent.postMessage({
|
|
183
|
-
type: POST_MESSAGE_TYPE.HTML_PAGE_REQUEST,
|
|
184
|
-
requestId: requestId,
|
|
185
|
-
method: method,
|
|
186
|
-
params: params
|
|
187
|
-
}, _this2.targetOrigin);
|
|
188
|
-
|
|
189
|
-
// request timeout
|
|
190
|
-
// reject and clear the pending request
|
|
191
|
-
var timeoutId = setTimeout(function () {
|
|
192
|
-
if (hasOwnProperty(_this2.pendingRequests, requestId)) {
|
|
193
|
-
delete _this2.pendingRequests[requestId];
|
|
194
|
-
reject(new Error("Request timeout: ".concat(method)));
|
|
195
|
-
}
|
|
196
|
-
}, _this2.timeout);
|
|
150
|
+
const requestId = this.generatorRequestId();
|
|
151
|
+
return new Promise((resolve, reject) => {
|
|
152
|
+
this.pendingRequests[requestId] = {
|
|
153
|
+
resolve,
|
|
154
|
+
reject
|
|
155
|
+
};
|
|
156
|
+
window.parent.postMessage({
|
|
157
|
+
type: POST_MESSAGE_TYPE.HTML_PAGE_REQUEST,
|
|
158
|
+
requestId,
|
|
159
|
+
method,
|
|
160
|
+
params
|
|
161
|
+
}, this.targetOrigin);
|
|
197
162
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
}
|
|
203
|
-
}));
|
|
204
|
-
case 4:
|
|
205
|
-
case "end":
|
|
206
|
-
return _context.stop();
|
|
207
|
-
}
|
|
208
|
-
}, _callee, this);
|
|
209
|
-
}));
|
|
210
|
-
function request(_x, _x2) {
|
|
211
|
-
return _request.apply(this, arguments);
|
|
212
|
-
}
|
|
213
|
-
return request;
|
|
214
|
-
}()
|
|
215
|
-
}, {
|
|
216
|
-
key: "handleMessage",
|
|
217
|
-
value: function handleMessage(event) {
|
|
218
|
-
var _event$data = event.data,
|
|
219
|
-
type = _event$data.type,
|
|
220
|
-
requestId = _event$data.requestId,
|
|
221
|
-
data = _event$data.data,
|
|
222
|
-
error = _event$data.error,
|
|
223
|
-
eventType = _event$data.eventType,
|
|
224
|
-
payload = _event$data.payload;
|
|
225
|
-
if (type === POST_MESSAGE_TYPE.HTML_PAGE_RESPONSE) {
|
|
226
|
-
var pending = this.pendingRequests[requestId];
|
|
227
|
-
if (pending) {
|
|
228
|
-
clearTimeout(pending.timeoutId);
|
|
163
|
+
// request timeout
|
|
164
|
+
// reject and clear the pending request
|
|
165
|
+
const timeoutId = setTimeout(() => {
|
|
166
|
+
if (hasOwnProperty(this.pendingRequests, requestId)) {
|
|
229
167
|
delete this.pendingRequests[requestId];
|
|
230
|
-
|
|
231
|
-
pending.reject(new Error(error));
|
|
232
|
-
} else {
|
|
233
|
-
pending.resolve(data ? JSON.parse(data) : null);
|
|
234
|
-
}
|
|
168
|
+
reject(new Error(`Request timeout: ${method}`));
|
|
235
169
|
}
|
|
236
|
-
}
|
|
237
|
-
this.emitEvent(eventType, payload);
|
|
238
|
-
} else if (type === POST_MESSAGE_TYPE.WINDOW_EVENT) {
|
|
239
|
-
var eventData = data.event_data;
|
|
240
|
-
if (!eventData) return;
|
|
241
|
-
var syntheticEvent;
|
|
242
|
-
var targetElement;
|
|
243
|
-
if (SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES.includes(eventData.type)) {
|
|
244
|
-
syntheticEvent = new KeyboardEvent(eventData.type, {
|
|
245
|
-
bubbles: true,
|
|
246
|
-
cancelable: true,
|
|
247
|
-
key: eventData.key,
|
|
248
|
-
code: eventData.code,
|
|
249
|
-
keyCode: eventData.keyCode,
|
|
250
|
-
ctrlKey: eventData.ctrlKey,
|
|
251
|
-
shiftKey: eventData.shiftKey,
|
|
252
|
-
altKey: eventData.altKey,
|
|
253
|
-
metaKey: eventData.metaKey,
|
|
254
|
-
repeat: eventData.repeat,
|
|
255
|
-
view: window
|
|
256
|
-
});
|
|
257
|
-
targetElement = document.activeElement || document.body;
|
|
258
|
-
} else if (SUPPORT_WINDOW_MOUSE_EVENT_TYPES.includes(eventData.type)) {
|
|
259
|
-
syntheticEvent = new MouseEvent(eventData.type, {
|
|
260
|
-
bubbles: true,
|
|
261
|
-
cancelable: true,
|
|
262
|
-
view: window,
|
|
263
|
-
clientX: eventData.x,
|
|
264
|
-
clientY: eventData.y,
|
|
265
|
-
screenX: eventData.x,
|
|
266
|
-
screenY: eventData.y,
|
|
267
|
-
button: eventData.button,
|
|
268
|
-
buttons: eventData.buttons
|
|
269
|
-
});
|
|
270
|
-
var elementAtPoint = document.elementFromPoint(eventData.x, eventData.y);
|
|
271
|
-
targetElement = elementAtPoint || document.body;
|
|
272
|
-
} else if (SUPPORT_WINDOW_DRAG_EVENT_TYPES.includes(eventData.type)) {
|
|
273
|
-
syntheticEvent = new DragEvent(eventData.type, {
|
|
274
|
-
bubbles: true,
|
|
275
|
-
cancelable: true,
|
|
276
|
-
view: window,
|
|
277
|
-
clientX: eventData.x,
|
|
278
|
-
clientY: eventData.y,
|
|
279
|
-
screenX: eventData.x,
|
|
280
|
-
screenY: eventData.y,
|
|
281
|
-
button: eventData.button,
|
|
282
|
-
buttons: eventData.buttons
|
|
283
|
-
});
|
|
284
|
-
var _elementAtPoint = document.elementFromPoint(eventData.x, eventData.y);
|
|
285
|
-
targetElement = _elementAtPoint || document.body;
|
|
286
|
-
}
|
|
287
|
-
if (!targetElement || !syntheticEvent) return;
|
|
170
|
+
}, this.timeout);
|
|
288
171
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
172
|
+
// save timeoutId for the pending request
|
|
173
|
+
const pending = this.pendingRequests[requestId];
|
|
174
|
+
if (pending) {
|
|
175
|
+
pending.timeoutId = timeoutId;
|
|
292
176
|
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
handlers.splice(index, 1);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
handleMessage(event) {
|
|
180
|
+
const {
|
|
181
|
+
type,
|
|
182
|
+
requestId,
|
|
183
|
+
data,
|
|
184
|
+
error,
|
|
185
|
+
eventType,
|
|
186
|
+
payload
|
|
187
|
+
} = event.data;
|
|
188
|
+
if (type === POST_MESSAGE_TYPE.HTML_PAGE_RESPONSE) {
|
|
189
|
+
const pending = this.pendingRequests[requestId];
|
|
190
|
+
if (pending) {
|
|
191
|
+
clearTimeout(pending.timeoutId);
|
|
192
|
+
delete this.pendingRequests[requestId];
|
|
193
|
+
if (error) {
|
|
194
|
+
pending.reject(new Error(error));
|
|
195
|
+
} else {
|
|
196
|
+
pending.resolve(data ? JSON.parse(data) : null);
|
|
314
197
|
}
|
|
315
198
|
}
|
|
199
|
+
} else if (type === POST_MESSAGE_TYPE.HTML_PAGE_EVENT) {
|
|
200
|
+
this.emitEvent(eventType, payload);
|
|
201
|
+
} else if (type === POST_MESSAGE_TYPE.WINDOW_EVENT) {
|
|
202
|
+
const eventData = data.event_data;
|
|
203
|
+
if (!eventData) return;
|
|
204
|
+
let syntheticEvent;
|
|
205
|
+
let targetElement;
|
|
206
|
+
if (SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES.includes(eventData.type)) {
|
|
207
|
+
syntheticEvent = new KeyboardEvent(eventData.type, {
|
|
208
|
+
bubbles: true,
|
|
209
|
+
cancelable: true,
|
|
210
|
+
key: eventData.key,
|
|
211
|
+
code: eventData.code,
|
|
212
|
+
keyCode: eventData.keyCode,
|
|
213
|
+
ctrlKey: eventData.ctrlKey,
|
|
214
|
+
shiftKey: eventData.shiftKey,
|
|
215
|
+
altKey: eventData.altKey,
|
|
216
|
+
metaKey: eventData.metaKey,
|
|
217
|
+
repeat: eventData.repeat,
|
|
218
|
+
view: window
|
|
219
|
+
});
|
|
220
|
+
targetElement = document.activeElement || document.body;
|
|
221
|
+
} else if (SUPPORT_WINDOW_MOUSE_EVENT_TYPES.includes(eventData.type)) {
|
|
222
|
+
syntheticEvent = new MouseEvent(eventData.type, {
|
|
223
|
+
bubbles: true,
|
|
224
|
+
cancelable: true,
|
|
225
|
+
view: window,
|
|
226
|
+
clientX: eventData.x,
|
|
227
|
+
clientY: eventData.y,
|
|
228
|
+
screenX: eventData.x,
|
|
229
|
+
screenY: eventData.y,
|
|
230
|
+
button: eventData.button,
|
|
231
|
+
buttons: eventData.buttons
|
|
232
|
+
});
|
|
233
|
+
const elementAtPoint = document.elementFromPoint(eventData.x, eventData.y);
|
|
234
|
+
targetElement = elementAtPoint || document.body;
|
|
235
|
+
} else if (SUPPORT_WINDOW_DRAG_EVENT_TYPES.includes(eventData.type)) {
|
|
236
|
+
syntheticEvent = new DragEvent(eventData.type, {
|
|
237
|
+
bubbles: true,
|
|
238
|
+
cancelable: true,
|
|
239
|
+
view: window,
|
|
240
|
+
clientX: eventData.x,
|
|
241
|
+
clientY: eventData.y,
|
|
242
|
+
screenX: eventData.x,
|
|
243
|
+
screenY: eventData.y,
|
|
244
|
+
button: eventData.button,
|
|
245
|
+
buttons: eventData.buttons
|
|
246
|
+
});
|
|
247
|
+
const elementAtPoint = document.elementFromPoint(eventData.x, eventData.y);
|
|
248
|
+
targetElement = elementAtPoint || document.body;
|
|
249
|
+
}
|
|
250
|
+
if (!targetElement || !syntheticEvent) return;
|
|
251
|
+
|
|
252
|
+
// Dispatch once on the target element, it will bubble up naturally
|
|
253
|
+
syntheticEvent.source = eventData.source;
|
|
254
|
+
targetElement.dispatchEvent(syntheticEvent);
|
|
316
255
|
}
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
handlers.forEach(function (handler) {
|
|
322
|
-
try {
|
|
323
|
-
handler(payload);
|
|
324
|
-
} catch (error) {
|
|
325
|
-
// eslint-disable-next-line
|
|
326
|
-
console.error("Error in event handler for ".concat(eventType, ":"), error);
|
|
327
|
-
}
|
|
328
|
-
});
|
|
256
|
+
}
|
|
257
|
+
on(eventType, handler) {
|
|
258
|
+
if (!hasOwnProperty(this.eventHandlers, eventType)) {
|
|
259
|
+
this.eventHandlers[eventType] = [];
|
|
329
260
|
}
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
261
|
+
this.eventHandlers[eventType].push(handler);
|
|
262
|
+
return () => this.off(eventType, handler);
|
|
263
|
+
}
|
|
264
|
+
off(eventType, handler) {
|
|
265
|
+
const handlers = this.eventHandlers[eventType];
|
|
266
|
+
if (handlers) {
|
|
267
|
+
const index = handlers.indexOf(handler);
|
|
268
|
+
if (index !== -1) {
|
|
269
|
+
handlers.splice(index, 1);
|
|
270
|
+
}
|
|
339
271
|
}
|
|
340
|
-
}
|
|
341
|
-
|
|
272
|
+
}
|
|
273
|
+
emitEvent(eventType, payload) {
|
|
274
|
+
const handlers = this.eventHandlers[eventType] || [];
|
|
275
|
+
handlers.forEach(handler => {
|
|
276
|
+
try {
|
|
277
|
+
handler(payload);
|
|
278
|
+
} catch (error) {
|
|
279
|
+
// eslint-disable-next-line
|
|
280
|
+
console.error(`Error in event handler for ${eventType}:`, error);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
destroy() {
|
|
285
|
+
this.pendingRequests.forEach(pending => {
|
|
286
|
+
clearTimeout(pending.timeoutId);
|
|
287
|
+
pending.reject(new Error('Adapter destroyed'));
|
|
288
|
+
});
|
|
289
|
+
this.pendingRequests = {};
|
|
290
|
+
this.eventHandlers = {};
|
|
291
|
+
}
|
|
292
|
+
}
|
|
342
293
|
|
|
343
294
|
export { IframeAdapter, POST_MESSAGE_REQUEST_TYPE };
|
|
295
|
+
//# sourceMappingURL=iframe-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iframe-adapter.js","sources":["../src/iframe-adapter.js"],"sourcesContent":["const POST_MESSAGE_TYPE = {\n HTML_PAGE_REQUEST: 'HTML_PAGE_REQUEST',\n HTML_PAGE_RESPONSE: 'HTML_PAGE_RESPONSE',\n HTML_PAGE_EVENT: 'HTML_PAGE_EVENT',\n WINDOW_EVENT: 'WINDOW_EVENT',\n};\n\nexport const POST_MESSAGE_REQUEST_TYPE = {\n GET_SERVER: 'get_server',\n GET_ACCESS_TOKEN: 'get_access_token',\n GET_APP_UUID: 'get_app_uuid',\n GET_PAGE_ID: 'get_page_id',\n};\n\nconst WINDOW_EVENT_SOURCE_TYPE = {\n APP: 'app',\n IFRAME: 'iframe',\n};\nconst SUPPORT_WINDOW_MOUSE_EVENT_TYPES = ['click', 'dblclick', 'mousemove', 'mouseenter', 'mouseleave', 'mousedown', 'mouseup', 'contextmenu'];\nconst SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES = ['keydown', 'keyup', 'keypress'];\nconst SUPPORT_WINDOW_DRAG_EVENT_TYPES = ['dragstart', 'dragover', 'drag', 'dragend', 'dragenter', 'dragleave', 'drop'];\nconst HIGH_FREQUENCY_WINDOW_EVENT_TYPES = ['mousemove', 'dragover'];\n\nconst hasOwnProperty = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nconst generatorBase64Code = (keyLength = 4) => {\n let possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789';\n let key = '';\n for (let i = 0; i < keyLength; i++) {\n key += possible.charAt(Math.floor(Math.random() * possible.length));\n }\n return key;\n};\n\nconst createWindowEventData = ({ eventType, event }) => {\n if (SUPPORT_WINDOW_MOUSE_EVENT_TYPES.includes(eventType)) {\n return {\n type: eventType,\n x: event.x,\n y: event.y,\n button: event.button,\n buttons: event.buttons,\n };\n }\n if (SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES.includes(eventType)) {\n return {\n type: eventType,\n key: event.key,\n code: event.code,\n keyCode: event.keyCode,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey,\n repeat: event.repeat,\n };\n }\n if (SUPPORT_WINDOW_DRAG_EVENT_TYPES.includes(eventType)) {\n return {\n type: eventType,\n x: event.x,\n y: event.y,\n };\n }\n return null;\n};\n\n/**\n * IframeAdapter – enables secure postMessage communication in production environments\n * For HTML page running inside an iframe\n */\nexport class IframeAdapter {\n constructor(options) {\n this.options = options || {};\n this.selfWindow = window.parent === window.self;\n this.targetOrigin = this.options.targetOrigin || '*';\n this.pendingRequests = {};\n this.eventHandlers = {};\n this.timeout = this.options.timeout || 10000;\n this.setupMessageListener();\n }\n\n generatorRequestId() {\n let id = generatorBase64Code();\n while (hasOwnProperty(this.pendingRequests, id)) {\n id = generatorBase64Code();\n }\n return id;\n }\n\n setupMessageListener() {\n if (this.selfWindow) return;\n window.addEventListener('message', this.handleMessage.bind(this));\n this.setEventsListener();\n }\n\n postWindowEvent(eventData) {\n if (!eventData) return;\n window.parent.postMessage({\n type: POST_MESSAGE_TYPE.WINDOW_EVENT,\n params: {\n event_data: {\n ...eventData,\n source: WINDOW_EVENT_SOURCE_TYPE.IFRAME,\n }\n }\n }, this.targetOrigin);\n }\n\n setEventsListener() {\n let rafId = null;\n let pendingEvent = null;\n [\n ...SUPPORT_WINDOW_MOUSE_EVENT_TYPES,\n ...SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES,\n ...SUPPORT_WINDOW_DRAG_EVENT_TYPES,\n ].forEach(eventType => {\n window.addEventListener(eventType, (event) => {\n if (event.source === WINDOW_EVENT_SOURCE_TYPE.APP) return;\n if (HIGH_FREQUENCY_WINDOW_EVENT_TYPES.includes(eventType)) {\n // High-frequency events that need throttling (use RAF to limit to 60fps)\n // Use requestAnimationFrame for throttling high-frequency events\n // Store the latest event with necessary data\n pendingEvent = createWindowEventData({ eventType, event });\n\n // Only schedule a new frame if one isn't already scheduled\n if (rafId === null) {\n rafId = requestAnimationFrame(() => {\n if (pendingEvent) {\n this.postWindowEvent(pendingEvent);\n pendingEvent = null;\n rafId = null;\n }\n });\n }\n return;\n }\n\n // Low-frequency events\n this.postWindowEvent(createWindowEventData({ eventType, event }));\n }, true);\n });\n }\n\n async request(method, params) {\n if (this.selfWindow) {\n return new Promise((resolve) => {\n resolve(null);\n });\n }\n const requestId = this.generatorRequestId();\n return new Promise((resolve, reject) => {\n this.pendingRequests[requestId] = { resolve, reject };\n window.parent.postMessage({\n type: POST_MESSAGE_TYPE.HTML_PAGE_REQUEST,\n requestId,\n method,\n params\n }, this.targetOrigin);\n\n // request timeout\n // reject and clear the pending request\n const timeoutId = setTimeout(() => {\n if (hasOwnProperty(this.pendingRequests, requestId)) {\n delete this.pendingRequests[requestId];\n reject(new Error(`Request timeout: ${method}`));\n }\n }, this.timeout);\n\n // save timeoutId for the pending request\n const pending = this.pendingRequests[requestId];\n if (pending) {\n pending.timeoutId = timeoutId;\n }\n });\n }\n\n handleMessage(event) {\n const { type, requestId, data, error, eventType, payload } = event.data;\n if (type === POST_MESSAGE_TYPE.HTML_PAGE_RESPONSE) {\n const pending = this.pendingRequests[requestId];\n if (pending) {\n clearTimeout(pending.timeoutId);\n delete this.pendingRequests[requestId];\n if (error) {\n pending.reject(new Error(error));\n } else {\n pending.resolve(data ? JSON.parse(data) : null);\n }\n }\n } else if (type === POST_MESSAGE_TYPE.HTML_PAGE_EVENT) {\n this.emitEvent(eventType, payload);\n } else if (type === POST_MESSAGE_TYPE.WINDOW_EVENT) {\n const eventData = data.event_data;\n if (!eventData) return;\n let syntheticEvent;\n let targetElement;\n if (SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES.includes(eventData.type)) {\n syntheticEvent = new KeyboardEvent(eventData.type, {\n bubbles: true,\n cancelable: true,\n key: eventData.key,\n code: eventData.code,\n keyCode: eventData.keyCode,\n ctrlKey: eventData.ctrlKey,\n shiftKey: eventData.shiftKey,\n altKey: eventData.altKey,\n metaKey: eventData.metaKey,\n repeat: eventData.repeat,\n view: window,\n });\n targetElement = document.activeElement || document.body;\n } else if (SUPPORT_WINDOW_MOUSE_EVENT_TYPES.includes(eventData.type)) {\n syntheticEvent = new MouseEvent(eventData.type, {\n bubbles: true,\n cancelable: true,\n view: window,\n clientX: eventData.x,\n clientY: eventData.y,\n screenX: eventData.x,\n screenY: eventData.y,\n button: eventData.button,\n buttons: eventData.buttons,\n });\n const elementAtPoint = document.elementFromPoint(eventData.x, eventData.y);\n targetElement = elementAtPoint || document.body;\n } else if (SUPPORT_WINDOW_DRAG_EVENT_TYPES.includes(eventData.type)) {\n syntheticEvent = new DragEvent(eventData.type, {\n bubbles: true,\n cancelable: true,\n view: window,\n clientX: eventData.x,\n clientY: eventData.y,\n screenX: eventData.x,\n screenY: eventData.y,\n button: eventData.button,\n buttons: eventData.buttons,\n });\n const elementAtPoint = document.elementFromPoint(eventData.x, eventData.y);\n targetElement = elementAtPoint || document.body;\n }\n\n if (!targetElement || !syntheticEvent) return;\n\n // Dispatch once on the target element, it will bubble up naturally\n syntheticEvent.source = eventData.source;\n targetElement.dispatchEvent(syntheticEvent);\n }\n }\n\n on(eventType, handler) {\n if (!hasOwnProperty(this.eventHandlers, eventType)) {\n this.eventHandlers[eventType] = [];\n }\n this.eventHandlers[eventType].push(handler);\n return () => this.off(eventType, handler);\n }\n\n off(eventType, handler) {\n const handlers = this.eventHandlers[eventType];\n if (handlers) {\n const index = handlers.indexOf(handler);\n if (index !== -1) {\n handlers.splice(index, 1);\n }\n }\n }\n\n emitEvent(eventType, payload) {\n const handlers = this.eventHandlers[eventType] || [];\n handlers.forEach(handler => {\n try {\n handler(payload);\n } catch (error) {\n // eslint-disable-next-line\n console.error(`Error in event handler for ${eventType}:`, error);\n }\n });\n }\n\n destroy() {\n this.pendingRequests.forEach(pending => {\n clearTimeout(pending.timeoutId);\n pending.reject(new Error('Adapter destroyed'));\n });\n this.pendingRequests = {};\n this.eventHandlers = {};\n }\n}\n"],"names":["POST_MESSAGE_TYPE","HTML_PAGE_REQUEST","HTML_PAGE_RESPONSE","HTML_PAGE_EVENT","WINDOW_EVENT","POST_MESSAGE_REQUEST_TYPE","GET_SERVER","GET_ACCESS_TOKEN","GET_APP_UUID","GET_PAGE_ID","WINDOW_EVENT_SOURCE_TYPE","APP","IFRAME","SUPPORT_WINDOW_MOUSE_EVENT_TYPES","SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES","SUPPORT_WINDOW_DRAG_EVENT_TYPES","HIGH_FREQUENCY_WINDOW_EVENT_TYPES","hasOwnProperty","obj","key","Object","prototype","call","generatorBase64Code","keyLength","arguments","length","undefined","possible","i","charAt","Math","floor","random","createWindowEventData","_ref","eventType","event","includes","type","x","y","button","buttons","code","keyCode","ctrlKey","shiftKey","altKey","metaKey","repeat","IframeAdapter","constructor","options","selfWindow","window","parent","self","targetOrigin","pendingRequests","eventHandlers","timeout","setupMessageListener","generatorRequestId","id","addEventListener","handleMessage","bind","setEventsListener","postWindowEvent","eventData","postMessage","params","event_data","source","rafId","pendingEvent","forEach","requestAnimationFrame","request","method","Promise","resolve","requestId","reject","timeoutId","setTimeout","Error","pending","data","error","payload","clearTimeout","JSON","parse","emitEvent","syntheticEvent","targetElement","KeyboardEvent","bubbles","cancelable","view","document","activeElement","body","MouseEvent","clientX","clientY","screenX","screenY","elementAtPoint","elementFromPoint","DragEvent","dispatchEvent","on","handler","push","off","handlers","index","indexOf","splice","console","destroy"],"mappings":"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"}
|
package/es/index.js
CHANGED
package/es/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|