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