seatable-html-page-sdk 0.0.1

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,343 @@
1
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
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 = {
10
+ HTML_PAGE_REQUEST: 'HTML_PAGE_REQUEST',
11
+ HTML_PAGE_RESPONSE: 'HTML_PAGE_RESPONSE',
12
+ HTML_PAGE_EVENT: 'HTML_PAGE_EVENT',
13
+ WINDOW_EVENT: 'WINDOW_EVENT'
14
+ };
15
+ var POST_MESSAGE_REQUEST_TYPE = {
16
+ GET_SERVER: 'get_server',
17
+ GET_ACCESS_TOKEN: 'get_access_token',
18
+ GET_APP_UUID: 'get_app_uuid',
19
+ GET_PAGE_ID: 'get_page_id'
20
+ };
21
+ var WINDOW_EVENT_SOURCE_TYPE = {
22
+ APP: 'app',
23
+ IFRAME: 'iframe'
24
+ };
25
+ var SUPPORT_WINDOW_MOUSE_EVENT_TYPES = ['click', 'dblclick', 'mousemove', 'mouseenter', 'mouseleave', 'mousedown', 'mouseup', 'contextmenu'];
26
+ var SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES = ['keydown', 'keyup', 'keypress'];
27
+ var SUPPORT_WINDOW_DRAG_EVENT_TYPES = ['dragstart', 'dragover', 'drag', 'dragend', 'dragenter', 'dragleave', 'drop'];
28
+ var HIGH_FREQUENCY_WINDOW_EVENT_TYPES = ['mousemove', 'dragover'];
29
+ var hasOwnProperty = function hasOwnProperty(obj, key) {
30
+ return Object.prototype.hasOwnProperty.call(obj, key);
31
+ };
32
+ var generatorBase64Code = function generatorBase64Code() {
33
+ var keyLength = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 4;
34
+ var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789';
35
+ var key = '';
36
+ for (var i = 0; i < keyLength; i++) {
37
+ key += possible.charAt(Math.floor(Math.random() * possible.length));
38
+ }
39
+ return key;
40
+ };
41
+ var createWindowEventData = function createWindowEventData(_ref) {
42
+ var eventType = _ref.eventType,
43
+ event = _ref.event;
44
+ if (SUPPORT_WINDOW_MOUSE_EVENT_TYPES.includes(eventType)) {
45
+ return {
46
+ type: eventType,
47
+ x: event.x,
48
+ y: event.y,
49
+ button: event.button,
50
+ buttons: event.buttons
51
+ };
52
+ }
53
+ if (SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES.includes(eventType)) {
54
+ return {
55
+ type: eventType,
56
+ key: event.key,
57
+ code: event.code,
58
+ keyCode: event.keyCode,
59
+ ctrlKey: event.ctrlKey,
60
+ shiftKey: event.shiftKey,
61
+ altKey: event.altKey,
62
+ metaKey: event.metaKey,
63
+ repeat: event.repeat
64
+ };
65
+ }
66
+ if (SUPPORT_WINDOW_DRAG_EVENT_TYPES.includes(eventType)) {
67
+ return {
68
+ type: eventType,
69
+ x: event.x,
70
+ y: event.y
71
+ };
72
+ }
73
+ return null;
74
+ };
75
+
76
+ /**
77
+ * IframeAdapter – enables secure postMessage communication in production environments
78
+ * For HTML page running inside an iframe
79
+ */
80
+ var IframeAdapter = /*#__PURE__*/function () {
81
+ function IframeAdapter() {
82
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
83
+ _classCallCheck(this, IframeAdapter);
84
+ this.selfWindow = window.parent === window.self;
85
+ this.targetOrigin = options.targetOrigin || '*';
86
+ this.pendingRequests = {};
87
+ this.eventHandlers = {};
88
+ this.timeout = options.timeout || 10000;
89
+ this.setupMessageListener();
90
+ }
91
+ return _createClass(IframeAdapter, [{
92
+ key: "generatorRequestId",
93
+ value: function generatorRequestId() {
94
+ var id = generatorBase64Code();
95
+ while (hasOwnProperty(this.pendingRequests, id)) {
96
+ id = generatorBase64Code();
97
+ }
98
+ return id;
99
+ }
100
+ }, {
101
+ key: "setupMessageListener",
102
+ value: function setupMessageListener() {
103
+ if (this.selfWindow) return;
104
+ window.addEventListener('message', this.handleMessage.bind(this));
105
+ this.setEventsListener();
106
+ }
107
+ }, {
108
+ key: "postWindowEvent",
109
+ value: function postWindowEvent(eventData) {
110
+ if (!eventData) return;
111
+ window.parent.postMessage({
112
+ type: POST_MESSAGE_TYPE.WINDOW_EVENT,
113
+ params: {
114
+ event_data: _objectSpread(_objectSpread({}, eventData), {}, {
115
+ source: WINDOW_EVENT_SOURCE_TYPE.IFRAME
116
+ })
117
+ }
118
+ }, this.targetOrigin);
119
+ }
120
+ }, {
121
+ key: "setEventsListener",
122
+ value: function setEventsListener() {
123
+ var _this = this;
124
+ var rafId = null;
125
+ var pendingEvent = null;
126
+ [].concat(SUPPORT_WINDOW_MOUSE_EVENT_TYPES, SUPPORT_WINDOW_KEYBOARD_EVENT_TYPES, SUPPORT_WINDOW_DRAG_EVENT_TYPES).forEach(function (eventType) {
127
+ window.addEventListener(eventType, function (event) {
128
+ if (event.source === WINDOW_EVENT_SOURCE_TYPE.APP) return;
129
+ if (HIGH_FREQUENCY_WINDOW_EVENT_TYPES.includes(eventType)) {
130
+ // High-frequency events that need throttling (use RAF to limit to 60fps)
131
+ // Use requestAnimationFrame for throttling high-frequency events
132
+ // Store the latest event with necessary data
133
+ pendingEvent = createWindowEventData({
134
+ eventType: eventType,
135
+ event: event
136
+ });
137
+
138
+ // Only schedule a new frame if one isn't already scheduled
139
+ if (rafId === null) {
140
+ rafId = requestAnimationFrame(function () {
141
+ if (pendingEvent) {
142
+ _this.postWindowEvent(pendingEvent);
143
+ pendingEvent = null;
144
+ rafId = null;
145
+ }
146
+ });
147
+ }
148
+ return;
149
+ }
150
+
151
+ // Low-frequency events
152
+ _this.postWindowEvent(createWindowEventData({
153
+ eventType: eventType,
154
+ event: event
155
+ }));
156
+ }, true);
157
+ });
158
+ }
159
+ }, {
160
+ key: "request",
161
+ value: function () {
162
+ var _request = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(method, params) {
163
+ var _this2 = this;
164
+ var requestId;
165
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
166
+ while (1) switch (_context.prev = _context.next) {
167
+ case 0:
168
+ if (!this.selfWindow) {
169
+ _context.next = 2;
170
+ break;
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);
197
+
198
+ // save timeoutId for the pending request
199
+ var pending = _this2.pendingRequests[requestId];
200
+ if (pending) {
201
+ pending.timeoutId = timeoutId;
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);
229
+ delete this.pendingRequests[requestId];
230
+ if (error) {
231
+ pending.reject(new Error(error));
232
+ } else {
233
+ pending.resolve(data ? JSON.parse(data) : null);
234
+ }
235
+ }
236
+ } else if (type === POST_MESSAGE_TYPE.HTML_PAGE_EVENT) {
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;
288
+
289
+ // Dispatch once on the target element, it will bubble up naturally
290
+ syntheticEvent.source = eventData.source;
291
+ targetElement.dispatchEvent(syntheticEvent);
292
+ }
293
+ }
294
+ }, {
295
+ key: "on",
296
+ value: function on(eventType, handler) {
297
+ var _this3 = this;
298
+ if (!hasOwnProperty(this.eventHandlers, eventType)) {
299
+ this.eventHandlers[eventType] = [];
300
+ }
301
+ this.eventHandlers[eventType].push(handler);
302
+ return function () {
303
+ return _this3.off(eventType, handler);
304
+ };
305
+ }
306
+ }, {
307
+ key: "off",
308
+ value: function off(eventType, handler) {
309
+ var handlers = this.eventHandlers[eventType];
310
+ if (handlers) {
311
+ var index = handlers.indexOf(handler);
312
+ if (index !== -1) {
313
+ handlers.splice(index, 1);
314
+ }
315
+ }
316
+ }
317
+ }, {
318
+ key: "emitEvent",
319
+ value: function emitEvent(eventType, payload) {
320
+ var handlers = this.eventHandlers[eventType] || [];
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
+ });
329
+ }
330
+ }, {
331
+ key: "destroy",
332
+ value: function destroy() {
333
+ this.pendingRequests.forEach(function (pending) {
334
+ clearTimeout(pending.timeoutId);
335
+ pending.reject(new Error('Adapter destroyed'));
336
+ });
337
+ this.pendingRequests = {};
338
+ this.eventHandlers = {};
339
+ }
340
+ }]);
341
+ }();
342
+
343
+ export { IframeAdapter, POST_MESSAGE_REQUEST_TYPE };
package/es/index.js ADDED
@@ -0,0 +1 @@
1
+ export { HTMLPageSDK } from './sdk.js';
package/es/sdk.js ADDED
@@ -0,0 +1,143 @@
1
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
2
+ import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
3
+ import _createClass from '@babel/runtime/helpers/createClass';
4
+ import _regeneratorRuntime from '@babel/runtime/regenerator';
5
+ import UniversalAppAPI from './apis/universal-app-api.js';
6
+ import { POST_MESSAGE_REQUEST_TYPE, IframeAdapter } from './iframe-adapter.js';
7
+
8
+ var HTMLPageSDK = /*#__PURE__*/function () {
9
+ function HTMLPageSDK() {
10
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
11
+ _classCallCheck(this, HTMLPageSDK);
12
+ this.options = options || {};
13
+ this.iframeAdapter = new IframeAdapter(options);
14
+ }
15
+ return _createClass(HTMLPageSDK, [{
16
+ key: "init",
17
+ value: function () {
18
+ var _init = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
19
+ var _this$options, server, accessToken, appUuid;
20
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
21
+ while (1) switch (_context.prev = _context.next) {
22
+ case 0:
23
+ if (this.options.server) {
24
+ _context.next = 4;
25
+ break;
26
+ }
27
+ _context.next = 3;
28
+ return this.iframeAdapter.request(POST_MESSAGE_REQUEST_TYPE.GET_SERVER);
29
+ case 3:
30
+ this.options.server = _context.sent;
31
+ case 4:
32
+ if (this.options.accessToken) {
33
+ _context.next = 8;
34
+ break;
35
+ }
36
+ _context.next = 7;
37
+ return this.iframeAdapter.request(POST_MESSAGE_REQUEST_TYPE.GET_ACCESS_TOKEN);
38
+ case 7:
39
+ this.options.accessToken = _context.sent;
40
+ case 8:
41
+ if (this.options.appUuid) {
42
+ _context.next = 12;
43
+ break;
44
+ }
45
+ _context.next = 11;
46
+ return this.iframeAdapter.request(POST_MESSAGE_REQUEST_TYPE.GET_APP_UUID);
47
+ case 11:
48
+ this.options.appUuid = _context.sent;
49
+ case 12:
50
+ if (this.options.pageId) {
51
+ _context.next = 16;
52
+ break;
53
+ }
54
+ _context.next = 15;
55
+ return this.iframeAdapter.request(POST_MESSAGE_REQUEST_TYPE.GET_PAGE_ID);
56
+ case 15:
57
+ this.options.pageId = _context.sent;
58
+ case 16:
59
+ _this$options = this.options, server = _this$options.server, accessToken = _this$options.accessToken, appUuid = _this$options.appUuid;
60
+ this.universalAppAPI = new UniversalAppAPI({
61
+ server: server,
62
+ accessToken: accessToken,
63
+ appUuid: appUuid
64
+ });
65
+ case 18:
66
+ case "end":
67
+ return _context.stop();
68
+ }
69
+ }, _callee, this);
70
+ }));
71
+ function init() {
72
+ return _init.apply(this, arguments);
73
+ }
74
+ return init;
75
+ }()
76
+ }, {
77
+ key: "listRows",
78
+ value: function listRows(_ref) {
79
+ var tableName = _ref.tableName,
80
+ start = _ref.start,
81
+ limit = _ref.limit;
82
+ return this.universalAppAPI.listRows(this.options.pageId, tableName, start, limit);
83
+ }
84
+ }, {
85
+ key: "addRow",
86
+ value: function addRow(_ref2) {
87
+ var tableName = _ref2.tableName,
88
+ rowData = _ref2.rowData,
89
+ rowLinksData = _ref2.rowLinksData;
90
+ return this.universalAppAPI.addRow(this.options.pageId, tableName, rowData, rowLinksData);
91
+ }
92
+ }, {
93
+ key: "updateRow",
94
+ value: function updateRow(_ref3) {
95
+ var tableName = _ref3.tableName,
96
+ rowId = _ref3.rowId,
97
+ rowData = _ref3.rowData;
98
+ var rowsData = [{
99
+ id: rowId,
100
+ row: rowData
101
+ }];
102
+ this.batchUpdateRows({
103
+ tableName: tableName,
104
+ rowsData: rowsData
105
+ });
106
+ }
107
+ }, {
108
+ key: "deleteRow",
109
+ value: function deleteRow(_ref4) {
110
+ var tableName = _ref4.tableName,
111
+ rowId = _ref4.rowId;
112
+ var rowsIds = [rowId];
113
+ return this.batchDeleteRows({
114
+ tableName: tableName,
115
+ rowsIds: rowsIds
116
+ });
117
+ }
118
+ }, {
119
+ key: "batchAddRows",
120
+ value: function batchAddRows(_ref5) {
121
+ var tableName = _ref5.tableName,
122
+ rowsData = _ref5.rowsData,
123
+ rowsLinksData = _ref5.rowsLinksData;
124
+ return this.universalAppAPI.addRows(this.options.pageId, tableName, rowsData, rowsLinksData);
125
+ }
126
+ }, {
127
+ key: "batchUpdateRows",
128
+ value: function batchUpdateRows(_ref6) {
129
+ var tableName = _ref6.tableName,
130
+ rowsData = _ref6.rowsData;
131
+ return this.universalAppAPI.updateRows(this.options.pageId, tableName, rowsData);
132
+ }
133
+ }, {
134
+ key: "batchDeleteRows",
135
+ value: function batchDeleteRows(_ref7) {
136
+ var tableName = _ref7.tableName,
137
+ rowsIds = _ref7.rowsIds;
138
+ return this.universalAppAPI.deleteRows(this.options.pageId, tableName, rowsIds);
139
+ }
140
+ }]);
141
+ }();
142
+
143
+ export { HTMLPageSDK };
@@ -0,0 +1,102 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
6
+ var _createClass = require('@babel/runtime/helpers/createClass');
7
+ var axios = require('axios');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
12
+ var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
13
+ var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
14
+
15
+ var UniversalAppAPI = /*#__PURE__*/function () {
16
+ function UniversalAppAPI(_ref) {
17
+ var server = _ref.server,
18
+ accessToken = _ref.accessToken,
19
+ appUuid = _ref.appUuid;
20
+ _classCallCheck__default["default"](this, UniversalAppAPI);
21
+ this.server = server;
22
+ this.accessToken = accessToken;
23
+ this.appUuid = appUuid;
24
+ this.init();
25
+ }
26
+ return _createClass__default["default"](UniversalAppAPI, [{
27
+ key: "init",
28
+ value: function init() {
29
+ if (this.accessToken && this.server) {
30
+ this.server = this.server.endsWith('/') ? this.server : "".concat(this.server, "/");
31
+ this.req = axios__default["default"].create({
32
+ baseURL: this.server,
33
+ headers: {
34
+ Authorization: 'Token ' + this.accessToken
35
+ }
36
+ });
37
+ }
38
+ }
39
+ }, {
40
+ key: "listRows",
41
+ value: function listRows(page_id, table_name, start, limit) {
42
+ var url = "".concat(this.server, "api/v2.1/universal-apps/").concat(this.appUuid, "/html-page-rows/");
43
+ var params = {
44
+ page_id: page_id,
45
+ table_name: table_name,
46
+ start: start,
47
+ limit: limit
48
+ };
49
+ return this.req.get(url, {
50
+ params: params
51
+ });
52
+ }
53
+ }, {
54
+ key: "addRow",
55
+ value: function addRow(page_id, table_name, row_data, row_links_data) {
56
+ var url = "".concat(this.server, "api/v2.1/universal-apps/").concat(this.appUuid, "/html-page-rows/");
57
+ var data = {
58
+ page_id: page_id,
59
+ table_name: table_name,
60
+ row_data: row_data,
61
+ row_links_data: row_links_data
62
+ };
63
+ return this.req.post(url, data);
64
+ }
65
+ }, {
66
+ key: "addRows",
67
+ value: function addRows(page_id, table_name, rows_data, rows_links_data) {
68
+ var url = "".concat(this.server, "api/v2.1/universal-apps/").concat(this.appUuid, "/html-page-rows/batch/");
69
+ var data = {
70
+ page_id: page_id,
71
+ table_name: table_name,
72
+ rows_data: rows_data,
73
+ rows_links_data: rows_links_data
74
+ };
75
+ return this.req.post(url, data);
76
+ }
77
+ }, {
78
+ key: "updateRows",
79
+ value: function updateRows(page_id, table_name, rows_data) {
80
+ var url = "".concat(this.server, "api/v2.1/universal-apps/").concat(this.appUuid, "/html-page-rows/");
81
+ var data = {
82
+ page_id: page_id,
83
+ table_name: table_name,
84
+ rows_data: rows_data
85
+ };
86
+ return this.req.put(url, data);
87
+ }
88
+ }, {
89
+ key: "deleteRows",
90
+ value: function deleteRows(page_id, table_name, rows_ids) {
91
+ var url = "".concat(this.server, "api/v2.1/universal-apps/").concat(this.appUuid, "/html-page-rows/");
92
+ var data = {
93
+ page_id: page_id,
94
+ table_name: table_name,
95
+ rows_ids: rows_ids
96
+ };
97
+ return this.req["delete"](url, data);
98
+ }
99
+ }]);
100
+ }();
101
+
102
+ exports["default"] = UniversalAppAPI;