mmpay-browser-sdk 1.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.
@@ -0,0 +1,469 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MMPaySDK = void 0;
4
+ class MMPaySDK {
5
+ constructor(publishableKey, options = {}) {
6
+ this.pollIntervalId = undefined;
7
+ this.onCompleteCallback = null;
8
+ this.overlayElement = null;
9
+ // Properties to store pending data for re-rendering after cancel attempt
10
+ this.pendingApiResponse = null;
11
+ this.pendingPaymentPayload = null;
12
+ this.QR_SIZE = 300;
13
+ if (!publishableKey) {
14
+ throw new Error("A Publishable Key is required to initialize [MMPaySDK].");
15
+ }
16
+ this.publishableKey = publishableKey;
17
+ this.environment = options.environment || 'production';
18
+ this.baseUrl = options.baseUrl || 'https://api.mm-pay.com';
19
+ this.merchantName = options.merchantName || 'Your Merchant';
20
+ this.POLL_INTERVAL_MS = options.pollInterval || 3000;
21
+ }
22
+ /**
23
+ * _callApi
24
+ * @param endpoint
25
+ * @param data
26
+ * @returns
27
+ */
28
+ async _callApi(endpoint, data = {}) {
29
+ const response = await fetch(`${this.baseUrl}${endpoint}`, {
30
+ method: 'POST',
31
+ headers: {
32
+ 'Content-Type': 'application/json',
33
+ 'Authorization': `Bearer ${this.publishableKey}`
34
+ },
35
+ body: JSON.stringify(data)
36
+ });
37
+ if (!response.ok) {
38
+ const errorText = await response.text();
39
+ throw new Error(`API error (${response.status}): ${response.statusText}. Details: ${errorText}`);
40
+ }
41
+ return response.json();
42
+ }
43
+ /**
44
+ * createPaymentRequest
45
+ * @param {PaymentData} payload
46
+ * @returns
47
+ */
48
+ async createPaymentRequest(payload) {
49
+ try {
50
+ const endpoint = this.environment === 'sandbox'
51
+ ? '/xpayments/sandbox-payment-create'
52
+ : '/xpayments/production-payment-create';
53
+ return await this._callApi(endpoint, payload);
54
+ }
55
+ catch (error) {
56
+ console.error("Payment request failed:", error);
57
+ throw error;
58
+ }
59
+ }
60
+ /**
61
+ * _createAndRenderModal
62
+ * @param {string} contentHtml
63
+ * @param isTerminal
64
+ * @returns
65
+ */
66
+ _createAndRenderModal(contentHtml, isTerminal = false) {
67
+ this._cleanupModal(false);
68
+ const overlay = document.createElement('div');
69
+ overlay.id = 'mmpay-full-modal';
70
+ document.body.appendChild(overlay);
71
+ this.overlayElement = overlay;
72
+ const style = document.createElement('style');
73
+ style.innerHTML = `
74
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&family=Padauk:wght@400;700&display=swap');
75
+
76
+ #mmpay-full-modal {
77
+ position: fixed;
78
+ top: 0;
79
+ left: 0;
80
+ width: 100vw;
81
+ height: 100vh;
82
+ background-color: rgba(0, 0, 0, 0.85);
83
+ z-index: 9999;
84
+ display: flex;
85
+ align-items: center;
86
+ justify-content: center;
87
+ transition: opacity 0.3s;
88
+ padding: 15px;
89
+ box-sizing: border-box;
90
+ overflow: auto;
91
+ }
92
+ .mmpay-overlay-content {
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ min-height: 100%;
97
+ width: 100%;
98
+ padding: 20px 0;
99
+ }
100
+ /* Card Base Styles */
101
+ .mmpay-card {
102
+ background: #ffffff;
103
+ border-radius: 16px;
104
+ box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.4);
105
+ text-align: center;
106
+ font-family: 'Inter', 'Padauk', sans-serif;
107
+ border: 1px solid #f3f4f6;
108
+ animation: fadeInScale 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
109
+ box-sizing: border-box;
110
+ position: relative;
111
+ width: min(90vw, 330px);
112
+ margin: auto;
113
+ }
114
+ @keyframes fadeInScale {
115
+ from { opacity: 0; transform: scale(0.9); }
116
+ to { opacity: 1; transform: scale(1); }
117
+ }
118
+ .mmpay-close-btn {
119
+ position: absolute;
120
+ top: 10px;
121
+ right: 10px;
122
+ background: none;
123
+ border: none;
124
+ cursor: pointer;
125
+ padding: 8px;
126
+ color: #9ca3af;
127
+ border-radius: 50%;
128
+ transition: color 0.2s, background-color 0.2s;
129
+ line-height: 1;
130
+ z-index: 10;
131
+ }
132
+ .mmpay-close-btn:hover {
133
+ color: #4b5563;
134
+ background-color: #f3f4f6;
135
+ }
136
+ .mmpay-button {
137
+ background-color: #4f46e5;
138
+ color: white;
139
+ border: none;
140
+ padding: 10px 20px;
141
+ border-radius: 8px;
142
+ font-size: 0.95rem;
143
+ font-weight: 700;
144
+ cursor: pointer;
145
+ margin-top: 15px;
146
+ transition: background-color 0.2s, box-shadow 0.2s, transform 0.1s;
147
+ box-shadow: 0 5px 15px rgba(79, 70, 229, 0.3);
148
+ width: 100%;
149
+ }
150
+ .mmpay-button:hover {
151
+ background-color: #4338ca;
152
+ box-shadow: 0 8px 18px rgba(67, 56, 202, 0.4);
153
+ transform: translateY(-1px);
154
+ }
155
+ .mmpay-button:active {
156
+ transform: translateY(0);
157
+ background-color: #3f35c7;
158
+ }
159
+ .mmpay-text-myanmar { font-family: 'Padauk', sans-serif; }
160
+ `;
161
+ overlay.appendChild(style);
162
+ window.MMPayCloseModal = (forceClose = false) => {
163
+ if (isTerminal || forceClose) {
164
+ this._cleanupModal(true);
165
+ }
166
+ else {
167
+ this._showCancelConfirmationModal();
168
+ }
169
+ };
170
+ window.MMPayReRenderModal = () => this._reRenderPendingModalInstance();
171
+ overlay.innerHTML += `<div class="mmpay-overlay-content">${contentHtml}</div>`;
172
+ document.body.style.overflow = 'hidden'; // FIX: Prevent body scroll when modal is open
173
+ return overlay;
174
+ }
175
+ /**
176
+ * showPaymentModal
177
+ * @param {PaymentData} payload
178
+ * @param {Function} onComplete
179
+ */
180
+ async showPaymentModal(payload, onComplete) {
181
+ const initialContent = `<div class="mmpay-overlay-content"><div style="text-align: center; color: #fff;">ငွေပေးချေမှု စတင်နေသည်...</div></div>`;
182
+ this._createAndRenderModal(initialContent, false);
183
+ this.onCompleteCallback = onComplete;
184
+ try {
185
+ const apiResponse = await this.createPaymentRequest(payload);
186
+ if (apiResponse && apiResponse.qr && apiResponse.transactionId) {
187
+ this.pendingApiResponse = apiResponse;
188
+ this.pendingPaymentPayload = payload;
189
+ this._renderQrModalContent(apiResponse, payload, this.merchantName);
190
+ this._startPolling(apiResponse._id, onComplete);
191
+ }
192
+ else {
193
+ this._showTerminalMessage(apiResponse.orderId || 'N/A', 'FAILED', 'ငွေပေးချေမှု စတင်ရန် မအောင်မြင်ပါ။ QR ဒေတာ မရရှိပါ။');
194
+ }
195
+ }
196
+ catch (error) {
197
+ // Myanmar translation for "Error during payment initiation. See console."
198
+ this._showTerminalMessage(payload.orderId || 'N/A', 'FAILED', 'ငွေပေးချေမှု စတင်စဉ် အမှားအယွင်း ဖြစ်ပွားသည်။ ကွန်ဆိုးလ်တွင် ကြည့်ပါ။');
199
+ }
200
+ }
201
+ /**
202
+ * _renderQrModalContent
203
+ * @param {CreatePaymentResponse} apiResponse
204
+ * @param {PaymentData} payload
205
+ * @param {string} merchantName
206
+ */
207
+ _renderQrModalContent(apiResponse, payload, merchantName) {
208
+ const qrData = apiResponse.qr;
209
+ const amountDisplay = `${apiResponse.amount.toFixed(2)} ${apiResponse.currency}`;
210
+ const qrCanvasId = 'mmpayQrCanvas';
211
+ const orderId = payload.orderId;
212
+ window.MMPayDownloadQR = function () {
213
+ const canvas = document.getElementById(qrCanvasId);
214
+ if (!canvas)
215
+ return;
216
+ try {
217
+ const dataURL = canvas.toDataURL('image/png');
218
+ const link = document.createElement('a');
219
+ link.href = dataURL;
220
+ link.download = `MMPay-QR-${orderId}.png`;
221
+ document.body.appendChild(link);
222
+ link.click();
223
+ document.body.removeChild(link);
224
+ }
225
+ catch (e) {
226
+ console.error("Failed to download QR image:", e);
227
+ }
228
+ };
229
+ const qrContentHtml = `
230
+ <style>
231
+ .mmpay-card { max-width: 350px; padding: 16px; }
232
+ .mmpay-header { color: #1f2937; font-size: 1rem; font-weight: bold; margin-bottom: 8px; }
233
+ .mmpay-qr-container { padding: 0; margin: 10px auto; display: inline-block; line-height: 0; width: 300px; height: 300px; }
234
+ #${qrCanvasId} { display: block; background: white; border-radius: 8px; width: 100%; height: 100%; }
235
+ .mmpay-amount { font-size: 1.2rem; font-weight: 800; color: #1f2937; margin: 0; }
236
+ .mmpay-separator { border-top: 1px solid #f3f4f6; margin: 12px 0; }
237
+ .mmpay-detail { font-size: 0.8rem; color: #6b7280; margin: 3px 0; display: flex; justify-content: space-between; align-items: center; padding: 0 5px; }
238
+ .mmpay-detail strong { color: #374151; font-weight: 600; text-align: right; }
239
+ .mmpay-detail span { text-align: left; }
240
+ .mmpay-secure-text { color: #757575; border-radius: 9999px; font-size: 0.8rem; font-weight: 600; display: inline-flex; align-items: center; justify-content: center; }
241
+ .mmpay-warning { font-size: 0.75rem; color: #9ca3af; font-weight: 500; margin-top: 12px; line-height: 1.5; }
242
+ </style>
243
+
244
+ <div class="mmpay-card">
245
+ <!-- Close Button - Triggers Confirmation Modal -->
246
+ <button class="mmpay-close-btn" onclick="MMPayCloseModal(false)">
247
+ <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 16 16">
248
+ <path d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
249
+ </svg>
250
+ </button>
251
+
252
+ <div style="padding:0px auto 16px auto">
253
+ <img src="https://upload.wikimedia.org/wikipedia/commons/2/2f/MMQR_Logo.svg" style="width:40px">
254
+ </div>
255
+
256
+ <div class="mmpay-header mmpay-text-myanmar">
257
+ ${merchantName} သို့ပေးချေပါ
258
+ </div>
259
+
260
+ <div class="mmpay-amount">${amountDisplay}</div>
261
+
262
+ <div class="mmpay-qr-container">
263
+ <canvas id="${qrCanvasId}" width="${this.QR_SIZE}" height="${this.QR_SIZE}"></canvas>
264
+ </div>
265
+
266
+ <button class="mmpay-button mmpay-text-myanmar" onclick="MMPayDownloadQR()">
267
+ QR ကုဒ်ကို ဒေါင်းလုဒ်လုပ်ပါ
268
+ </button>
269
+
270
+ <div class="mmpay-separator"></div>
271
+
272
+ <div class="mmpay-detail">
273
+ <span class="mmpay-text-myanmar">မှာယူမှုနံပါတ်:</span> <strong>${apiResponse.orderId}</strong>
274
+ </div>
275
+ <div class="mmpay-detail">
276
+ <span class="mmpay-text-myanmar">ငွေပေးငွေယူနံပါတ်:</span> <strong>${apiResponse.transactionId}</strong>
277
+ </div>
278
+
279
+ <p class="mmpay-warning mmpay-text-myanmar">
280
+ ကျေးဇူးပြု၍ သင့်ဖုန်းဖြင့် ငွေပေးချေမှုကို အပြီးသတ်ပေးပါ။
281
+ </p>
282
+
283
+ <div class="mmpay-secure-text">
284
+ လုံခြုံသော ငွေပေးချေမှု
285
+ </div>
286
+ </div>
287
+ `;
288
+ this._cleanupModal(false);
289
+ this._createAndRenderModal(qrContentHtml, false);
290
+ this._injectQrScript(qrData, qrCanvasId);
291
+ }
292
+ /**
293
+ * _showTerminalMessage
294
+ * @param {string} orderId
295
+ * @param {string} status
296
+ * @param {string} message
297
+ */
298
+ _showTerminalMessage(orderId, status, message) {
299
+ this._cleanupModal(true);
300
+ const successColor = '#10b981'; // Tailwind Green 500
301
+ const failureColor = '#ef4444'; // Tailwind Red 500
302
+ const expiredColor = '#f59e0b'; // Tailwind Amber 500
303
+ let color;
304
+ let iconSvg;
305
+ let statusText;
306
+ if (status === 'SUCCESS') {
307
+ color = successColor;
308
+ statusText = 'အောင်မြင်';
309
+ iconSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="${color}" viewBox="0 0 16 16">
310
+ <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022l-3.473 4.425-2.094-2.094a.75.75 0 0 0-1.06 1.06L6.92 10.865l.764.764a.75.75 0 0 0 1.06 0l4.5-5.5a.75.75 0 0 0-.01-1.05z"/>
311
+ </svg>`;
312
+ }
313
+ else {
314
+ // Shared icon for FAILED and EXPIRED (X mark)
315
+ color = status === 'FAILED' ? failureColor : expiredColor;
316
+ statusText = status === 'FAILED' ? 'မအောင်မြင်' : 'သက်တမ်းကုန်';
317
+ iconSvg = `<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="${color}" viewBox="0 0 16 16">
318
+ <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.146a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.146z"/>
319
+ </svg>`;
320
+ }
321
+ const content = `
322
+ <div class="mmpay-card mmpay-terminal-card" style="
323
+ background: white; padding: 25px; box-sizing: border-box;
324
+ ">
325
+ <div style="margin-bottom: 20px;">${iconSvg}</div>
326
+
327
+ <h2 style="font-size: 1.5rem; font-weight: 800; color: ${color}; margin-bottom: 10px;">
328
+ ငွေပေးချေမှု ${statusText}
329
+ </h2>
330
+ <p style="color: #4b5563; font-size: 0.95rem; font-weight: 600;">မှာယူမှုနံပါတ်: ${orderId}</p>
331
+ <p style="color: #6b7280; margin-top: 15px; margin-bottom: 25px; font-size: 0.9rem;">${message}</p>
332
+
333
+ <button class="mmpay-button mmpay-text-myanmar" style="background-color: ${color};" onclick="MMPayCloseModal(true)">
334
+ ပိတ်မည်
335
+ </button>
336
+ </div>
337
+ `;
338
+ this._createAndRenderModal(content, true); // Set isTerminal=true so the close button always forces cleanup
339
+ }
340
+ /**
341
+ * _showCancelConfirmationModal
342
+ */
343
+ _showCancelConfirmationModal() {
344
+ if (this.pollIntervalId !== undefined) {
345
+ window.clearInterval(this.pollIntervalId);
346
+ this.pollIntervalId = undefined;
347
+ }
348
+ this._cleanupModal(false);
349
+ const content = `
350
+ <div class="mmpay-card mmpay-terminal-card" style="
351
+ background: white; padding: 25px; box-sizing: border-box;
352
+ ">
353
+ <h2 style="font-size: 1.25rem; font-weight: 800; color: #f59e0b; margin-bottom: 10px;">
354
+ ငွေပေးချေမှုကို ပယ်ဖျက်မည်လား။
355
+ </h2>
356
+ <p style="color: #6b7280; margin-top: 15px; margin-bottom: 25px; font-size: 0.9rem;">
357
+ သင်သည် QR ဖြင့် ငွေပေးချေခြင်း မပြုရသေးကြောင်း သေချာပါသလား။ ပယ်ဖျက်ပြီးပါက ပြန်လည် စတင်ရပါမည်။
358
+ </p>
359
+
360
+ <div style="display: flex; gap: 10px;">
361
+ <button class="mmpay-button mmpay-text-myanmar"
362
+ style="flex-grow: 1; background-color: #f3f4f6; color: #1f2937; box-shadow: none; margin-top: 0;"
363
+ onclick="MMPayCloseModal(true)">
364
+ ပယ်ဖျက်မည်
365
+ </button>
366
+ </div>
367
+ </div>
368
+ `;
369
+ this._createAndRenderModal(content, false); // Set isTerminal=false so the close button calls MMPayCloseModal(true)
370
+ }
371
+ /**
372
+ * _reRenderPendingModalInstance
373
+ */
374
+ _reRenderPendingModalInstance() {
375
+ if (this.pendingApiResponse && this.pendingPaymentPayload && this.onCompleteCallback) {
376
+ this._cleanupModal(true);
377
+ this.showPaymentModal(this.pendingPaymentPayload, this.onCompleteCallback);
378
+ }
379
+ else {
380
+ this._cleanupModal(true);
381
+ }
382
+ }
383
+ /**
384
+ * Cleans up the modal and stops polling.
385
+ * @param restoreBodyScroll
386
+ */
387
+ _cleanupModal(restoreBodyScroll) {
388
+ if (this.pollIntervalId !== undefined) {
389
+ window.clearInterval(this.pollIntervalId);
390
+ this.pollIntervalId = undefined;
391
+ }
392
+ if (this.overlayElement && this.overlayElement.parentNode) {
393
+ this.overlayElement.parentNode.removeChild(this.overlayElement);
394
+ this.overlayElement = null;
395
+ }
396
+ if (restoreBodyScroll) {
397
+ document.body.style.overflow = '';
398
+ }
399
+ delete window.MMPayCloseModal;
400
+ delete window.MMPayReRenderModal;
401
+ }
402
+ /**
403
+ * _injectQrScript
404
+ * @param {string} qrData
405
+ * @param {string} qrCanvasId
406
+ */
407
+ _injectQrScript(qrData, qrCanvasId) {
408
+ const script = document.createElement('script');
409
+ script.src = "https://cdn.jsdelivr.net/npm/qrious@4.0.2/dist/qrious.min.js";
410
+ script.onload = () => {
411
+ setTimeout(() => {
412
+ const canvas = document.getElementById(qrCanvasId);
413
+ if (typeof QRious !== 'undefined' && canvas) {
414
+ new QRious({
415
+ element: canvas,
416
+ value: qrData,
417
+ size: this.QR_SIZE,
418
+ padding: 15,
419
+ level: 'H'
420
+ });
421
+ }
422
+ else {
423
+ console.error('Failed to load QRious or find canvas.');
424
+ }
425
+ }, 10);
426
+ };
427
+ document.head.appendChild(script);
428
+ }
429
+ /**
430
+ * _startPolling
431
+ * @param {string} _id
432
+ * @param {Function} onComplete
433
+ */
434
+ async _startPolling(_id, onComplete) {
435
+ if (this.pollIntervalId !== undefined) {
436
+ window.clearInterval(this.pollIntervalId);
437
+ }
438
+ const checkStatus = async () => {
439
+ try {
440
+ const endpoint = this.environment === 'sandbox'
441
+ ? '/xpayments/sandbox-payment-polling'
442
+ : '/xpayments/production-payment-polling';
443
+ const response = await this._callApi(endpoint, { _id: _id });
444
+ const status = (response.status || '').toUpperCase();
445
+ if (status === 'SUCCESS' || status === 'FAILED' || status === 'EXPIRED') {
446
+ window.clearInterval(this.pollIntervalId);
447
+ this.pollIntervalId = undefined;
448
+ const success = status === 'SUCCESS';
449
+ const message = success ?
450
+ `ငွေပေးချေမှု အောင်မြင်ပါပြီ။ ငွေပေးငွေယူ ရည်ညွှန်းနံပါတ်: ${response.transactionRefId || 'N/A'}` :
451
+ `ငွေပေးချေမှု ${status === 'FAILED' ? 'မအောင်မြင်ပါ' : 'သက်တမ်းကုန်သွားပါပြီ'}.`;
452
+ this._showTerminalMessage(response.orderId || 'N/A', status, message);
453
+ if (onComplete) {
454
+ onComplete({ success: success, transaction: response });
455
+ }
456
+ return;
457
+ }
458
+ }
459
+ catch (error) {
460
+ console.error("Polling error:", error);
461
+ }
462
+ };
463
+ checkStatus();
464
+ this.pollIntervalId = window.setInterval(checkStatus, this.POLL_INTERVAL_MS);
465
+ }
466
+ }
467
+ exports.MMPaySDK = MMPaySDK;
468
+ // Make the SDK class and its instance methods accessible globally
469
+ window.MMPaySDK = MMPaySDK;
@@ -0,0 +1,129 @@
1
+ export interface PaymentData {
2
+ amount: number;
3
+ currency: string;
4
+ orderId: string;
5
+ callbackUrl?: string;
6
+ }
7
+ export interface CreatePaymentResponse {
8
+ _id: string;
9
+ amount: number;
10
+ orderId: string;
11
+ currency: string;
12
+ transactionId: string;
13
+ qr: string;
14
+ url: string;
15
+ }
16
+ export interface PollingResponse {
17
+ _id: string;
18
+ appId: string;
19
+ orderId: string;
20
+ amount: number;
21
+ currency: string;
22
+ method?: string;
23
+ vendor?: string;
24
+ callbackUrl?: string;
25
+ callbackUrlStatus?: 'PENDING' | 'SUCCESS' | 'FAILED';
26
+ callbackAt?: Date;
27
+ disbursementStatus?: 'NONE' | 'PENDING' | 'COMPLETED' | 'FAILED' | 'CANCELLED';
28
+ disburseAt?: Date;
29
+ items: {
30
+ name: string;
31
+ amount: number;
32
+ quantity: number;
33
+ }[];
34
+ merchantId: string;
35
+ status: 'PENDING' | 'SUCCESS' | 'FAILED' | 'EXPIRED';
36
+ createdAt: Date;
37
+ transactionRefId?: string;
38
+ qr?: string;
39
+ redirectUrl?: string;
40
+ }
41
+ export interface PolliongResult {
42
+ success: boolean;
43
+ transaction: PollingResponse;
44
+ }
45
+ export interface SDKOptions {
46
+ pollInterval?: number;
47
+ environment?: 'sandbox' | 'production';
48
+ baseUrl?: string;
49
+ merchantName?: string;
50
+ }
51
+ export declare class MMPaySDK {
52
+ private POLL_INTERVAL_MS;
53
+ private publishableKey;
54
+ private baseUrl;
55
+ private merchantName;
56
+ private environment;
57
+ private pollIntervalId;
58
+ private onCompleteCallback;
59
+ private overlayElement;
60
+ private pendingApiResponse;
61
+ private pendingPaymentPayload;
62
+ private readonly QR_SIZE;
63
+ constructor(publishableKey: string, options?: SDKOptions);
64
+ /**
65
+ * _callApi
66
+ * @param endpoint
67
+ * @param data
68
+ * @returns
69
+ */
70
+ private _callApi;
71
+ /**
72
+ * createPaymentRequest
73
+ * @param {PaymentData} payload
74
+ * @returns
75
+ */
76
+ createPaymentRequest(payload: PaymentData): Promise<CreatePaymentResponse>;
77
+ /**
78
+ * _createAndRenderModal
79
+ * @param {string} contentHtml
80
+ * @param isTerminal
81
+ * @returns
82
+ */
83
+ private _createAndRenderModal;
84
+ /**
85
+ * showPaymentModal
86
+ * @param {PaymentData} payload
87
+ * @param {Function} onComplete
88
+ */
89
+ showPaymentModal(payload: PaymentData, onComplete: (result: PolliongResult) => void): Promise<void>;
90
+ /**
91
+ * _renderQrModalContent
92
+ * @param {CreatePaymentResponse} apiResponse
93
+ * @param {PaymentData} payload
94
+ * @param {string} merchantName
95
+ */
96
+ private _renderQrModalContent;
97
+ /**
98
+ * _showTerminalMessage
99
+ * @param {string} orderId
100
+ * @param {string} status
101
+ * @param {string} message
102
+ */
103
+ private _showTerminalMessage;
104
+ /**
105
+ * _showCancelConfirmationModal
106
+ */
107
+ private _showCancelConfirmationModal;
108
+ /**
109
+ * _reRenderPendingModalInstance
110
+ */
111
+ private _reRenderPendingModalInstance;
112
+ /**
113
+ * Cleans up the modal and stops polling.
114
+ * @param restoreBodyScroll
115
+ */
116
+ private _cleanupModal;
117
+ /**
118
+ * _injectQrScript
119
+ * @param {string} qrData
120
+ * @param {string} qrCanvasId
121
+ */
122
+ private _injectQrScript;
123
+ /**
124
+ * _startPolling
125
+ * @param {string} _id
126
+ * @param {Function} onComplete
127
+ */
128
+ private _startPolling;
129
+ }