@explorins/pers-sdk 2.0.10 → 2.1.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.
- package/README.md +37 -18
- package/dist/analytics/index.d.ts +0 -2
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/models/index.d.ts +1 -10
- package/dist/analytics/models/index.d.ts.map +1 -1
- package/dist/analytics.cjs +44 -29
- package/dist/analytics.cjs.map +1 -1
- package/dist/analytics.js +45 -2
- package/dist/analytics.js.map +1 -1
- package/dist/business/index.d.ts +0 -1
- package/dist/business/index.d.ts.map +1 -1
- package/dist/business.cjs +7 -774
- package/dist/business.cjs.map +1 -1
- package/dist/business.js +3 -751
- package/dist/business.js.map +1 -1
- package/dist/campaign/index.d.ts +0 -1
- package/dist/campaign/index.d.ts.map +1 -1
- package/dist/campaign.cjs +429 -29
- package/dist/campaign.cjs.map +1 -1
- package/dist/campaign.js +431 -3
- package/dist/campaign.js.map +1 -1
- package/dist/chunks/business-membership-service-8KC_qRj7.cjs +756 -0
- package/dist/chunks/business-membership-service-8KC_qRj7.cjs.map +1 -0
- package/dist/chunks/business-membership-service-D6vaVQTR.js +751 -0
- package/dist/chunks/business-membership-service-D6vaVQTR.js.map +1 -0
- package/dist/chunks/{web3-chain-service-BeBjALg2.cjs → index-B-g2JPVK.cjs} +1 -220
- package/dist/chunks/index-B-g2JPVK.cjs.map +1 -0
- package/dist/chunks/{web3-chain-service-DKHCnHQX.js → index-CKm_V5XE.js} +2 -219
- package/dist/chunks/index-CKm_V5XE.js.map +1 -0
- package/dist/chunks/payment-service-Bkw7ZXev.cjs +214 -0
- package/dist/chunks/payment-service-Bkw7ZXev.cjs.map +1 -0
- package/dist/chunks/payment-service-IvM6rryM.js +211 -0
- package/dist/chunks/payment-service-IvM6rryM.js.map +1 -0
- package/dist/chunks/{pers-sdk-JIExM712.js → pers-sdk-CGefBd1F.js} +14 -293
- package/dist/chunks/pers-sdk-CGefBd1F.js.map +1 -0
- package/dist/chunks/{pers-sdk-h-uoLpBx.cjs → pers-sdk-CaSw6CPz.cjs} +42 -322
- package/dist/chunks/pers-sdk-CaSw6CPz.cjs.map +1 -0
- package/dist/chunks/redemption-service-D-hBqh42.js +339 -0
- package/dist/chunks/redemption-service-D-hBqh42.js.map +1 -0
- package/dist/chunks/redemption-service-rMB6T2W5.cjs +342 -0
- package/dist/chunks/redemption-service-rMB6T2W5.cjs.map +1 -0
- package/dist/chunks/tenant-service-CsRA3O2V.js +163 -0
- package/dist/chunks/tenant-service-CsRA3O2V.js.map +1 -0
- package/dist/chunks/tenant-service-fj-pkXTw.cjs +166 -0
- package/dist/chunks/tenant-service-fj-pkXTw.cjs.map +1 -0
- package/dist/chunks/{transaction-service-BcJfyCcq.cjs → transaction-request.builder-BpgtuMMq.cjs} +353 -1
- package/dist/chunks/transaction-request.builder-BpgtuMMq.cjs.map +1 -0
- package/dist/chunks/{transaction-service-CnOD3scu.js → transaction-request.builder-C1vVVFto.js} +346 -3
- package/dist/chunks/transaction-request.builder-C1vVVFto.js.map +1 -0
- package/dist/chunks/web3-chain-service-D68-0WaW.cjs +224 -0
- package/dist/chunks/web3-chain-service-D68-0WaW.cjs.map +1 -0
- package/dist/chunks/web3-chain-service-DuvxmKSj.js +221 -0
- package/dist/chunks/web3-chain-service-DuvxmKSj.js.map +1 -0
- package/dist/chunks/{explorer.utils-Cx3wrqAj.cjs → web3-manager-C_cFaMCm.cjs} +411 -144
- package/dist/chunks/web3-manager-C_cFaMCm.cjs.map +1 -0
- package/dist/chunks/{explorer.utils-BkS3k8hX.js → web3-manager-OExwBWB7.js} +412 -146
- package/dist/chunks/web3-manager-OExwBWB7.js.map +1 -0
- package/dist/core/version.d.ts +2 -2
- package/dist/core.cjs +19 -22
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +11 -13
- package/dist/core.js.map +1 -1
- package/dist/donation/index.d.ts +0 -1
- package/dist/donation/index.d.ts.map +1 -1
- package/dist/donation.cjs +48 -29
- package/dist/donation.cjs.map +1 -1
- package/dist/donation.js +50 -3
- package/dist/donation.js.map +1 -1
- package/dist/index.cjs +48 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -16
- package/dist/index.js.map +1 -1
- package/dist/managers/analytics-manager.d.ts +1 -1
- package/dist/managers/index.d.ts +0 -1
- package/dist/managers/index.d.ts.map +1 -1
- package/dist/managers/web3-manager.d.ts +2 -13
- package/dist/managers/web3-manager.d.ts.map +1 -1
- package/dist/node.cjs +11 -14
- package/dist/node.cjs.map +1 -1
- package/dist/node.js +11 -14
- package/dist/node.js.map +1 -1
- package/dist/package.json +6 -18
- package/dist/payment/index.d.ts +0 -1
- package/dist/payment/index.d.ts.map +1 -1
- package/dist/payment.cjs +5 -232
- package/dist/payment.cjs.map +1 -1
- package/dist/payment.js +3 -210
- package/dist/payment.js.map +1 -1
- package/dist/pers-sdk.d.ts +3 -13
- package/dist/pers-sdk.d.ts.map +1 -1
- package/dist/redemption/index.d.ts +0 -1
- package/dist/redemption/index.d.ts.map +1 -1
- package/dist/redemption/services/redemption-service.d.ts +1 -2
- package/dist/redemption/services/redemption-service.d.ts.map +1 -1
- package/dist/redemption.cjs +5 -360
- package/dist/redemption.cjs.map +1 -1
- package/dist/redemption.js +3 -338
- package/dist/redemption.js.map +1 -1
- package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +40 -21
- package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -1
- package/dist/tenant/index.d.ts +0 -1
- package/dist/tenant/index.d.ts.map +1 -1
- package/dist/tenant.cjs +5 -184
- package/dist/tenant.cjs.map +1 -1
- package/dist/tenant.js +3 -162
- package/dist/tenant.js.map +1 -1
- package/dist/token/index.d.ts +0 -1
- package/dist/token/index.d.ts.map +1 -1
- package/dist/token.cjs +1 -25
- package/dist/token.cjs.map +1 -1
- package/dist/token.js +1 -1
- package/dist/transaction/index.d.ts +2 -0
- package/dist/transaction/index.d.ts.map +1 -1
- package/dist/transaction/models/transaction-request.builder.d.ts +59 -9
- package/dist/transaction/models/transaction-request.builder.d.ts.map +1 -1
- package/dist/transaction.cjs +6 -4
- package/dist/transaction.cjs.map +1 -1
- package/dist/transaction.js +1 -2
- package/dist/transaction.js.map +1 -1
- package/dist/user/index.d.ts +0 -1
- package/dist/user/index.d.ts.map +1 -1
- package/dist/user-status/index.d.ts +0 -1
- package/dist/user-status/index.d.ts.map +1 -1
- package/dist/user-status.cjs +0 -25
- package/dist/user-status.cjs.map +1 -1
- package/dist/user-status.js +0 -1
- package/dist/user-status.js.map +1 -1
- package/dist/user.cjs +209 -29
- package/dist/user.cjs.map +1 -1
- package/dist/user.js +211 -3
- package/dist/user.js.map +1 -1
- package/dist/web3/application/web3-application.service.d.ts +12 -0
- package/dist/web3/application/web3-application.service.d.ts.map +1 -1
- package/dist/web3/index.d.ts +2 -1
- package/dist/web3/index.d.ts.map +1 -1
- package/dist/web3-chain/index.d.ts +0 -1
- package/dist/web3-chain/index.d.ts.map +1 -1
- package/dist/web3-chain.cjs +14 -29
- package/dist/web3-chain.cjs.map +1 -1
- package/dist/web3-chain.js +16 -3
- package/dist/web3-chain.js.map +1 -1
- package/dist/web3-manager.cjs +13 -0
- package/dist/web3-manager.cjs.map +1 -0
- package/dist/web3-manager.js +7 -0
- package/dist/web3-manager.js.map +1 -0
- package/dist/web3.cjs +10 -6
- package/dist/web3.cjs.map +1 -1
- package/dist/web3.js +4 -1
- package/dist/web3.js.map +1 -1
- package/package.json +6 -18
- package/dist/chunks/analytics-service-CitlimKJ.cjs +0 -49
- package/dist/chunks/analytics-service-CitlimKJ.cjs.map +0 -1
- package/dist/chunks/analytics-service-CxyrOwel.js +0 -46
- package/dist/chunks/analytics-service-CxyrOwel.js.map +0 -1
- package/dist/chunks/campaign-service-CdEz0jpP.cjs +0 -435
- package/dist/chunks/campaign-service-CdEz0jpP.cjs.map +0 -1
- package/dist/chunks/campaign-service-DrTAqFZM.js +0 -432
- package/dist/chunks/campaign-service-DrTAqFZM.js.map +0 -1
- package/dist/chunks/donation-service--6cnTvWq.cjs +0 -54
- package/dist/chunks/donation-service--6cnTvWq.cjs.map +0 -1
- package/dist/chunks/donation-service-xiXZ2Eto.js +0 -51
- package/dist/chunks/donation-service-xiXZ2Eto.js.map +0 -1
- package/dist/chunks/explorer.utils-BkS3k8hX.js.map +0 -1
- package/dist/chunks/explorer.utils-Cx3wrqAj.cjs.map +0 -1
- package/dist/chunks/index-BtDNXaFq.js +0 -13
- package/dist/chunks/index-BtDNXaFq.js.map +0 -1
- package/dist/chunks/index-CMk3Aqkk.cjs +0 -15
- package/dist/chunks/index-CMk3Aqkk.cjs.map +0 -1
- package/dist/chunks/pers-sdk-JIExM712.js.map +0 -1
- package/dist/chunks/pers-sdk-h-uoLpBx.cjs.map +0 -1
- package/dist/chunks/transaction-request.builder-DltmruUC.js +0 -296
- package/dist/chunks/transaction-request.builder-DltmruUC.js.map +0 -1
- package/dist/chunks/transaction-request.builder-DrqTWcyC.cjs +0 -303
- package/dist/chunks/transaction-request.builder-DrqTWcyC.cjs.map +0 -1
- package/dist/chunks/transaction-service-BcJfyCcq.cjs.map +0 -1
- package/dist/chunks/transaction-service-CnOD3scu.js.map +0 -1
- package/dist/chunks/user-service-BGP3SZpk.js +0 -212
- package/dist/chunks/user-service-BGP3SZpk.js.map +0 -1
- package/dist/chunks/user-service-gITOx4qj.cjs +0 -215
- package/dist/chunks/user-service-gITOx4qj.cjs.map +0 -1
- package/dist/chunks/web3-chain-service-BeBjALg2.cjs.map +0 -1
- package/dist/chunks/web3-chain-service-DKHCnHQX.js.map +0 -1
package/dist/chunks/{transaction-service-CnOD3scu.js → transaction-request.builder-C1vVVFto.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TransactionRole } from '@explorins/pers-shared';
|
|
1
|
+
import { TransactionRole, Web3TransactionType, AccountOwnerType } from '@explorins/pers-shared';
|
|
2
2
|
import { b as buildPaginationParams } from './pagination-utils-9vQ-Npkr.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -366,5 +366,348 @@ class TransactionService {
|
|
|
366
366
|
}
|
|
367
367
|
}
|
|
368
368
|
|
|
369
|
-
|
|
370
|
-
|
|
369
|
+
/**
|
|
370
|
+
* Client-side transaction types extending backend Web3TransactionType
|
|
371
|
+
* Includes client-specific flows like pending submissions (POS flow)
|
|
372
|
+
*
|
|
373
|
+
* Pattern follows loyalty app: extend Web3TransactionType with client-side types
|
|
374
|
+
*/
|
|
375
|
+
const ClientTransactionType = {
|
|
376
|
+
...Web3TransactionType,
|
|
377
|
+
/** Transaction signed by user, pending business submission (POS QR flow) */
|
|
378
|
+
PENDING_SUBMISSION: 'PENDING_SUBMISSION',
|
|
379
|
+
};
|
|
380
|
+
/**
|
|
381
|
+
* Helper to extract deadline from transaction signing data
|
|
382
|
+
* Works with EIP-712 typed data structure from counterfactual wallet
|
|
383
|
+
*
|
|
384
|
+
* @param signingData - The signing data from TransactionSigningResult
|
|
385
|
+
* @returns Deadline timestamp in seconds, or null if not found
|
|
386
|
+
*/
|
|
387
|
+
function extractDeadlineFromSigningData(signingData) {
|
|
388
|
+
if (!signingData || typeof signingData !== 'object')
|
|
389
|
+
return null;
|
|
390
|
+
const data = signingData;
|
|
391
|
+
// Check typedData.message.deadline (EIP-712 standard location)
|
|
392
|
+
if (data.typedData?.message?.deadline) {
|
|
393
|
+
return data.typedData.message.deadline;
|
|
394
|
+
}
|
|
395
|
+
// Check metadata.deadline (alternative location)
|
|
396
|
+
if (data.metadata?.deadline) {
|
|
397
|
+
return data.metadata.deadline;
|
|
398
|
+
}
|
|
399
|
+
return null;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Build pending transaction data for transfer to business
|
|
403
|
+
* Returns properly typed object ready for serialization (QR code, NFC, deep link, etc.)
|
|
404
|
+
*
|
|
405
|
+
* Pattern from loyalty app: scan.component.ts
|
|
406
|
+
*
|
|
407
|
+
* @param transactionId - Transaction ID from signing result
|
|
408
|
+
* @param signature - User's signature from WebAuthn
|
|
409
|
+
* @param transactionFormat - Format (e.g., 'EIP-712')
|
|
410
|
+
* @returns Typed object with txType set to PENDING_SUBMISSION
|
|
411
|
+
*/
|
|
412
|
+
function buildPendingTransactionData(transactionId, signature, transactionFormat = 'EIP-712') {
|
|
413
|
+
return {
|
|
414
|
+
transactionId,
|
|
415
|
+
signature,
|
|
416
|
+
transactionFormat,
|
|
417
|
+
txType: ClientTransactionType.PENDING_SUBMISSION,
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
// ============================================================================
|
|
421
|
+
// SHARED HELPERS (internal)
|
|
422
|
+
// ============================================================================
|
|
423
|
+
function buildTokenSelector(data) {
|
|
424
|
+
return {
|
|
425
|
+
contractAddress: data.contractAddress,
|
|
426
|
+
chainId: data.chainId,
|
|
427
|
+
// Only include contractTokenId if it's not null (for NFTs)
|
|
428
|
+
...(data.contractTokenId !== null && data.contractTokenId !== undefined && {
|
|
429
|
+
contractTokenId: String(data.contractTokenId)
|
|
430
|
+
})
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function buildAccountSelector(data) {
|
|
434
|
+
return {
|
|
435
|
+
// ✅ Always prefer accountId and accountType when available
|
|
436
|
+
accountId: data.accountId,
|
|
437
|
+
accountType: data.accountType,
|
|
438
|
+
// ⚠️ Only use accountAddress as fallback if no account info available
|
|
439
|
+
...((!data.accountId && data.accountAddress) && {
|
|
440
|
+
accountAddress: data.accountAddress
|
|
441
|
+
})
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
// ============================================================================
|
|
445
|
+
// PUBLIC FACTORY FUNCTIONS
|
|
446
|
+
// ============================================================================
|
|
447
|
+
/**
|
|
448
|
+
* 🎯 Build a MINT transaction request (admin/business endpoint)
|
|
449
|
+
* Creates tokens and assigns them to a recipient account
|
|
450
|
+
*
|
|
451
|
+
* @example
|
|
452
|
+
* ```typescript
|
|
453
|
+
* const request = buildMintRequest({
|
|
454
|
+
* amount: 100,
|
|
455
|
+
* contractAddress: '0x...',
|
|
456
|
+
* chainId: 137,
|
|
457
|
+
* recipientAccountId: 'user-123',
|
|
458
|
+
* recipientAccountType: AccountOwnerType.USER,
|
|
459
|
+
* engagedBusinessId: 'business-456' // optional: for tracking which business triggered the mint
|
|
460
|
+
* });
|
|
461
|
+
* ```
|
|
462
|
+
*/
|
|
463
|
+
function buildMintRequest(data) {
|
|
464
|
+
return {
|
|
465
|
+
web3TransactionType: Web3TransactionType.MINT,
|
|
466
|
+
amount: Math.round(data.amount),
|
|
467
|
+
token: buildTokenSelector(data),
|
|
468
|
+
...(data.recipientAccountId || data.recipientAccountType || data.recipientAccountAddress) && {
|
|
469
|
+
recipient: buildAccountSelector({
|
|
470
|
+
accountId: data.recipientAccountId,
|
|
471
|
+
accountType: data.recipientAccountType,
|
|
472
|
+
accountAddress: data.recipientAccountAddress
|
|
473
|
+
})
|
|
474
|
+
},
|
|
475
|
+
...(data.engagedBusinessId && { engagedBusinessId: data.engagedBusinessId })
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* 🎯 Build a BURN transaction request
|
|
480
|
+
* For auth endpoint: sender is handled automatically by backend
|
|
481
|
+
* For admin endpoint: provide senderAccountId/Type to burn on behalf of user
|
|
482
|
+
*
|
|
483
|
+
* @example
|
|
484
|
+
* ```typescript
|
|
485
|
+
* // Auth endpoint (sender auto-resolved)
|
|
486
|
+
* const request = buildBurnRequest({
|
|
487
|
+
* amount: 50,
|
|
488
|
+
* contractAddress: '0x...',
|
|
489
|
+
* chainId: 137
|
|
490
|
+
* });
|
|
491
|
+
*
|
|
492
|
+
* // Admin endpoint (explicit sender)
|
|
493
|
+
* const request = buildBurnRequest({
|
|
494
|
+
* amount: 50,
|
|
495
|
+
* contractAddress: '0x...',
|
|
496
|
+
* chainId: 137,
|
|
497
|
+
* senderAccountId: 'user-123',
|
|
498
|
+
* senderAccountType: AccountOwnerType.USER
|
|
499
|
+
* });
|
|
500
|
+
*
|
|
501
|
+
* // POS burn (business submits on behalf of user)
|
|
502
|
+
* const request = buildBurnRequest({
|
|
503
|
+
* amount: 50,
|
|
504
|
+
* contractAddress: '0x...',
|
|
505
|
+
* chainId: 137,
|
|
506
|
+
* engagedBusinessId: 'business-456',
|
|
507
|
+
* authorizedSubmitterId: 'business-456',
|
|
508
|
+
* authorizedSubmitterType: AccountOwnerType.BUSINESS
|
|
509
|
+
* });
|
|
510
|
+
* ```
|
|
511
|
+
*/
|
|
512
|
+
function buildBurnRequest(data) {
|
|
513
|
+
return {
|
|
514
|
+
web3TransactionType: Web3TransactionType.BURN,
|
|
515
|
+
amount: Math.round(data.amount),
|
|
516
|
+
token: buildTokenSelector(data),
|
|
517
|
+
// Only include sender if an identifier is provided (for admin burns)
|
|
518
|
+
...(data.senderAccountId || data.senderAccountAddress) && {
|
|
519
|
+
sender: buildAccountSelector({
|
|
520
|
+
accountId: data.senderAccountId,
|
|
521
|
+
accountType: data.senderAccountType || AccountOwnerType.USER,
|
|
522
|
+
accountAddress: data.senderAccountAddress
|
|
523
|
+
})
|
|
524
|
+
},
|
|
525
|
+
// POS authorization fields
|
|
526
|
+
...(data.engagedBusinessId && { engagedBusinessId: data.engagedBusinessId }),
|
|
527
|
+
...(data.authorizedSubmitterId && { authorizedSubmitterId: data.authorizedSubmitterId }),
|
|
528
|
+
...(data.authorizedSubmitterType && { authorizedSubmitterType: data.authorizedSubmitterType })
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
/**
|
|
532
|
+
* 🎯 Build a TRANSFER transaction request (business endpoint)
|
|
533
|
+
* Transfers tokens between accounts
|
|
534
|
+
*
|
|
535
|
+
* @example Basic Transfer
|
|
536
|
+
* ```typescript
|
|
537
|
+
* const request = buildTransferRequest({
|
|
538
|
+
* amount: 25,
|
|
539
|
+
* contractAddress: '0x...',
|
|
540
|
+
* chainId: 137,
|
|
541
|
+
* senderAccountId: 'user-123',
|
|
542
|
+
* senderAccountType: AccountOwnerType.USER,
|
|
543
|
+
* recipientAccountId: 'business-456',
|
|
544
|
+
* recipientAccountType: AccountOwnerType.BUSINESS
|
|
545
|
+
* });
|
|
546
|
+
* ```
|
|
547
|
+
*
|
|
548
|
+
* @example POS Flow (Business submits on behalf of User)
|
|
549
|
+
* ```typescript
|
|
550
|
+
* const request = buildTransferRequest({
|
|
551
|
+
* amount: 25,
|
|
552
|
+
* contractAddress: '0x...',
|
|
553
|
+
* chainId: 137,
|
|
554
|
+
* senderAccountId: 'user-123',
|
|
555
|
+
* senderAccountType: AccountOwnerType.USER,
|
|
556
|
+
* recipientAccountId: 'business-456',
|
|
557
|
+
* recipientAccountType: AccountOwnerType.BUSINESS,
|
|
558
|
+
* // POS authorization - allows business to submit the signed transaction
|
|
559
|
+
* engagedBusinessId: 'business-456',
|
|
560
|
+
* authorizedSubmitterId: 'business-456',
|
|
561
|
+
* authorizedSubmitterType: AccountOwnerType.BUSINESS
|
|
562
|
+
* });
|
|
563
|
+
* ```
|
|
564
|
+
*/
|
|
565
|
+
function buildTransferRequest(data) {
|
|
566
|
+
return {
|
|
567
|
+
web3TransactionType: Web3TransactionType.TRANSFER,
|
|
568
|
+
amount: Math.round(data.amount),
|
|
569
|
+
token: buildTokenSelector(data),
|
|
570
|
+
...(data.senderAccountId || data.senderAccountType || data.senderAccountAddress) && {
|
|
571
|
+
sender: buildAccountSelector({
|
|
572
|
+
accountId: data.senderAccountId,
|
|
573
|
+
accountType: data.senderAccountType,
|
|
574
|
+
accountAddress: data.senderAccountAddress
|
|
575
|
+
})
|
|
576
|
+
},
|
|
577
|
+
...(data.recipientAccountId || data.recipientAccountType || data.recipientAccountAddress) && {
|
|
578
|
+
recipient: buildAccountSelector({
|
|
579
|
+
accountId: data.recipientAccountId,
|
|
580
|
+
accountType: data.recipientAccountType,
|
|
581
|
+
accountAddress: data.recipientAccountAddress
|
|
582
|
+
})
|
|
583
|
+
},
|
|
584
|
+
// POS authorization fields
|
|
585
|
+
...(data.engagedBusinessId && { engagedBusinessId: data.engagedBusinessId }),
|
|
586
|
+
...(data.authorizedSubmitterId && { authorizedSubmitterId: data.authorizedSubmitterId }),
|
|
587
|
+
...(data.authorizedSubmitterType && { authorizedSubmitterType: data.authorizedSubmitterType })
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* 🎯 Build a transaction submission request from QR code parameters
|
|
592
|
+
* Handles the logic of mapping signature to the correct field based on transaction format.
|
|
593
|
+
*
|
|
594
|
+
* @example
|
|
595
|
+
* ```typescript
|
|
596
|
+
* const request = buildSubmissionRequest({
|
|
597
|
+
* transactionId: 'tx-123',
|
|
598
|
+
* transactionFormat: 'EIP-712',
|
|
599
|
+
* signature: '0x...'
|
|
600
|
+
* });
|
|
601
|
+
* ```
|
|
602
|
+
*/
|
|
603
|
+
function buildSubmissionRequest(params) {
|
|
604
|
+
return {
|
|
605
|
+
transactionId: params.transactionId,
|
|
606
|
+
type: params.transactionFormat,
|
|
607
|
+
signature: params.transactionFormat === 'EIP-712' ? params.signature : undefined,
|
|
608
|
+
signedTransaction: params.transactionFormat !== 'EIP-712' ? params.signature : undefined,
|
|
609
|
+
};
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* 🎯 Build a POS TRANSFER transaction request
|
|
613
|
+
* Convenience function for POS (Point of Sale) scenarios where a business
|
|
614
|
+
* submits a transaction on behalf of a user.
|
|
615
|
+
*
|
|
616
|
+
* This sets up the authorization fields correctly so the business can submit
|
|
617
|
+
* the user-signed transaction.
|
|
618
|
+
*
|
|
619
|
+
* @example POS Flow
|
|
620
|
+
* ```typescript
|
|
621
|
+
* // Step 1: Create POS transaction (user to business)
|
|
622
|
+
* const request = buildPOSTransferRequest({
|
|
623
|
+
* amount: 100,
|
|
624
|
+
* contractAddress: '0x...',
|
|
625
|
+
* chainId: 137,
|
|
626
|
+
* userId: 'user-123',
|
|
627
|
+
* businessId: 'business-456'
|
|
628
|
+
* });
|
|
629
|
+
*
|
|
630
|
+
* // Step 2: Prepare and get signing data
|
|
631
|
+
* const response = await sdk.transactions.prepareClientSignedTransaction(request);
|
|
632
|
+
*
|
|
633
|
+
* // Step 3: User signs the transaction
|
|
634
|
+
* const signature = await userWallet.signTypedData(response.signingData);
|
|
635
|
+
*
|
|
636
|
+
* // Step 4: Business submits the signed transaction
|
|
637
|
+
* await sdk.transactions.submitSignedTransaction({
|
|
638
|
+
* transactionId: response.transaction.id,
|
|
639
|
+
* type: 'EIP_712',
|
|
640
|
+
* signature
|
|
641
|
+
* });
|
|
642
|
+
* ```
|
|
643
|
+
*/
|
|
644
|
+
function buildPOSTransferRequest(data) {
|
|
645
|
+
return buildTransferRequest({
|
|
646
|
+
amount: data.amount,
|
|
647
|
+
contractAddress: data.contractAddress,
|
|
648
|
+
contractTokenId: data.contractTokenId,
|
|
649
|
+
chainId: data.chainId,
|
|
650
|
+
senderAccountId: data.userId,
|
|
651
|
+
senderAccountType: AccountOwnerType.USER,
|
|
652
|
+
senderAccountAddress: data.userAccountAddress,
|
|
653
|
+
recipientAccountId: data.businessId,
|
|
654
|
+
recipientAccountType: AccountOwnerType.BUSINESS,
|
|
655
|
+
recipientAccountAddress: data.businessAccountAddress,
|
|
656
|
+
// POS authorization - business is engaged and authorized to submit
|
|
657
|
+
engagedBusinessId: data.businessId,
|
|
658
|
+
authorizedSubmitterId: data.businessId,
|
|
659
|
+
authorizedSubmitterType: AccountOwnerType.BUSINESS
|
|
660
|
+
});
|
|
661
|
+
}
|
|
662
|
+
/**
|
|
663
|
+
* 🎯 Build a POS BURN transaction request
|
|
664
|
+
* Convenience function for POS scenarios where a business facilitates
|
|
665
|
+
* a user burning tokens (e.g., redeeming rewards at point of sale).
|
|
666
|
+
*
|
|
667
|
+
* This sets up the authorization fields correctly so the business can submit
|
|
668
|
+
* the user-signed burn transaction.
|
|
669
|
+
*
|
|
670
|
+
* @example POS Burn Flow
|
|
671
|
+
* ```typescript
|
|
672
|
+
* // Step 1: Create POS burn transaction
|
|
673
|
+
* const request = buildPOSBurnRequest({
|
|
674
|
+
* amount: 1,
|
|
675
|
+
* contractAddress: '0x...',
|
|
676
|
+
* contractTokenId: '123', // NFT token ID
|
|
677
|
+
* chainId: 137,
|
|
678
|
+
* userId: 'user-123',
|
|
679
|
+
* businessId: 'business-456'
|
|
680
|
+
* });
|
|
681
|
+
*
|
|
682
|
+
* // Step 2: Prepare and get signing data
|
|
683
|
+
* const response = await sdk.transactions.prepareClientSignedTransaction(request);
|
|
684
|
+
*
|
|
685
|
+
* // Step 3: User signs the transaction
|
|
686
|
+
* const signature = await userWallet.signTypedData(response.signingData);
|
|
687
|
+
*
|
|
688
|
+
* // Step 4: Business submits the signed transaction
|
|
689
|
+
* await sdk.transactions.submitSignedTransaction({
|
|
690
|
+
* transactionId: response.transaction.id,
|
|
691
|
+
* type: 'EIP_712',
|
|
692
|
+
* signature
|
|
693
|
+
* });
|
|
694
|
+
* ```
|
|
695
|
+
*/
|
|
696
|
+
function buildPOSBurnRequest(data) {
|
|
697
|
+
return buildBurnRequest({
|
|
698
|
+
amount: data.amount,
|
|
699
|
+
contractAddress: data.contractAddress,
|
|
700
|
+
contractTokenId: data.contractTokenId,
|
|
701
|
+
chainId: data.chainId,
|
|
702
|
+
senderAccountId: data.userId,
|
|
703
|
+
senderAccountType: AccountOwnerType.USER,
|
|
704
|
+
senderAccountAddress: data.userAccountAddress,
|
|
705
|
+
// POS authorization - business is engaged and authorized to submit
|
|
706
|
+
engagedBusinessId: data.businessId,
|
|
707
|
+
authorizedSubmitterId: data.businessId,
|
|
708
|
+
authorizedSubmitterType: AccountOwnerType.BUSINESS
|
|
709
|
+
});
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
export { ClientTransactionType as C, TransactionApi as T, TransactionService as a, buildPendingTransactionData as b, buildMintRequest as c, buildBurnRequest as d, extractDeadlineFromSigningData as e, buildTransferRequest as f, buildPOSTransferRequest as g, buildPOSBurnRequest as h, buildSubmissionRequest as i };
|
|
713
|
+
//# sourceMappingURL=transaction-request.builder-C1vVVFto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-request.builder-C1vVVFto.js","sources":["../../src/transaction/api/transaction-api.ts","../../src/transaction/services/transaction-service.ts","../../src/transaction/models/transaction-request.builder.ts"],"sourcesContent":[null,null,null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-B-g2JPVK.cjs');
|
|
4
|
+
var index$1 = require('./index-B6-bbNnd.cjs');
|
|
5
|
+
var ethers = require('@explorins/web3-ts/ethers');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Platform-Agnostic Web3 Chain API Client
|
|
9
|
+
*
|
|
10
|
+
* Handles blockchain chain operations using the PERS backend.
|
|
11
|
+
* Uses @explorins/web3-ts types for perfect framework compatibility.
|
|
12
|
+
*/
|
|
13
|
+
class Web3ChainApi {
|
|
14
|
+
constructor(apiClient) {
|
|
15
|
+
this.apiClient = apiClient;
|
|
16
|
+
this.basePath = '/chains';
|
|
17
|
+
}
|
|
18
|
+
// ==========================================
|
|
19
|
+
// PUBLIC OPERATIONS
|
|
20
|
+
// ==========================================
|
|
21
|
+
/**
|
|
22
|
+
* PUBLIC: Get chain data by chain ID
|
|
23
|
+
*/
|
|
24
|
+
async getChainData(chainId) {
|
|
25
|
+
try {
|
|
26
|
+
const response = await this.apiClient.get(`${this.basePath}/${chainId}`);
|
|
27
|
+
if (!response) {
|
|
28
|
+
throw new Error(`No chain data received for chainId: ${chainId}`);
|
|
29
|
+
}
|
|
30
|
+
return response;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error('[Web3ChainApi] Failed to get chain data:', {
|
|
34
|
+
chainId,
|
|
35
|
+
error: error instanceof Error ? error.message : String(error)
|
|
36
|
+
});
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Create Web3 provider from chain data
|
|
44
|
+
* Synchronous function for immediate provider creation
|
|
45
|
+
*/
|
|
46
|
+
const getWeb3ProviderFromChainData = (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher) => {
|
|
47
|
+
let ethersProvider;
|
|
48
|
+
if (chainData.authHeader) {
|
|
49
|
+
// Authenticated provider for private chains
|
|
50
|
+
const fetchRequest = new ethers.FetchRequest(chainData.rpcUrl);
|
|
51
|
+
fetchRequest.timeout = timeout;
|
|
52
|
+
// Handle auth header format
|
|
53
|
+
const authValue = chainData.authHeader.startsWith('Bearer ')
|
|
54
|
+
? chainData.authHeader
|
|
55
|
+
: `Bearer ${chainData.authHeader}`;
|
|
56
|
+
fetchRequest.setHeader('Authorization', authValue);
|
|
57
|
+
fetchRequest.setHeader('Content-Type', 'application/json');
|
|
58
|
+
fetchRequest.setHeader('Accept', 'application/json');
|
|
59
|
+
if (customUserAgentName) {
|
|
60
|
+
fetchRequest.setHeader('User-Agent', customUserAgentName);
|
|
61
|
+
}
|
|
62
|
+
ethersProvider = new ethers.JsonRpcProvider(fetchRequest, chainData.chainId, {
|
|
63
|
+
staticNetwork: true, // Prevent eth_chainId calls - we know the chain
|
|
64
|
+
polling: false,
|
|
65
|
+
batchMaxCount: 1, // Disable batching for private chains
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Public provider for public chains
|
|
70
|
+
ethersProvider = new ethers.JsonRpcProvider(chainData.rpcUrl, chainData.chainId, {
|
|
71
|
+
staticNetwork: true, // Prevent eth_chainId calls - we know the chain
|
|
72
|
+
polling: false,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return ethersProvider;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Async wrapper with retry logic for higher-level usage
|
|
79
|
+
*/
|
|
80
|
+
const getWeb3ProviderWithRetry = async (chainData, timeout = 15000, customUserAgentName = '', tokenRefresher, retryConfig = { maxAttempts: 3, baseDelay: 1000, maxDelay: 8000 }) => {
|
|
81
|
+
let lastError = null;
|
|
82
|
+
for (let attempt = 1; attempt <= retryConfig.maxAttempts; attempt++) {
|
|
83
|
+
try {
|
|
84
|
+
const provider = getWeb3ProviderFromChainData(chainData, timeout, customUserAgentName, tokenRefresher);
|
|
85
|
+
await validateChainConnection(provider, chainData.authHeader ? 'private' : 'public');
|
|
86
|
+
return provider;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
90
|
+
// Stop retrying on auth errors for authenticated chains
|
|
91
|
+
if (index.ApiErrorDetector.isAuthError(lastError) && chainData.authHeader) {
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
if (attempt === retryConfig.maxAttempts)
|
|
95
|
+
break;
|
|
96
|
+
const delay = Math.min(retryConfig.baseDelay * Math.pow(2, attempt - 1), retryConfig.maxDelay);
|
|
97
|
+
await sleep(delay);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
throw new Error(`Failed to create Web3 provider after ${retryConfig.maxAttempts} attempts. Last error: ${lastError?.message}`);
|
|
101
|
+
};
|
|
102
|
+
async function validateChainConnection(provider, chainType) {
|
|
103
|
+
try {
|
|
104
|
+
// Lightweight test using eth_chainId (works for both public and private)
|
|
105
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
106
|
+
setTimeout(() => reject(new Error(`${chainType} chain validation timeout`)), 3000);
|
|
107
|
+
});
|
|
108
|
+
const chainIdPromise = provider.send('eth_chainId', []);
|
|
109
|
+
await Promise.race([chainIdPromise, timeoutPromise]);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
// Fallback: try net_version if chainId fails
|
|
113
|
+
try {
|
|
114
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
115
|
+
setTimeout(() => reject(new Error(`${chainType} chain fallback validation timeout`)), 3000);
|
|
116
|
+
});
|
|
117
|
+
const versionPromise = provider.send('net_version', []);
|
|
118
|
+
await Promise.race([versionPromise, timeoutPromise]);
|
|
119
|
+
}
|
|
120
|
+
catch (fallbackError) {
|
|
121
|
+
throw new Error(`${chainType} chain validation failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
function sleep(ms) {
|
|
126
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
class Web3ChainService {
|
|
130
|
+
constructor(web3ChainApi) {
|
|
131
|
+
this.web3ChainApi = web3ChainApi;
|
|
132
|
+
this.cache = index$1.globalCacheService.createNamespace('web3-chain');
|
|
133
|
+
}
|
|
134
|
+
async getEthersProviderByChainId(chainId) {
|
|
135
|
+
const cacheKey = `provider:${chainId}`;
|
|
136
|
+
// Check if we have a valid cached provider
|
|
137
|
+
const cached = this.cache.get(cacheKey);
|
|
138
|
+
if (cached && !this.checkIsTokenExpired(cached.chainData.authHeader)) {
|
|
139
|
+
return cached.provider;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
// Create new provider instance
|
|
143
|
+
const { provider, chainData } = await this.createProviderInstance(chainId);
|
|
144
|
+
// Cache the provider with chain data
|
|
145
|
+
const cacheEntry = {
|
|
146
|
+
provider,
|
|
147
|
+
chainData,
|
|
148
|
+
createdAt: Date.now(),
|
|
149
|
+
chainId
|
|
150
|
+
};
|
|
151
|
+
this.cache.set(cacheKey, cacheEntry, index$1.CacheTTL.PROVIDER);
|
|
152
|
+
return provider;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
// ✅ AUTH ERROR RECOVERY: Clear cache and retry once
|
|
156
|
+
if (index.ApiErrorDetector.isAuthError(error)) {
|
|
157
|
+
this.cache.delete(cacheKey);
|
|
158
|
+
// Retry once with fresh instance
|
|
159
|
+
const { provider, chainData } = await this.createProviderInstance(chainId);
|
|
160
|
+
const cacheEntry = {
|
|
161
|
+
provider,
|
|
162
|
+
chainData,
|
|
163
|
+
createdAt: Date.now(),
|
|
164
|
+
chainId
|
|
165
|
+
};
|
|
166
|
+
this.cache.set(cacheKey, cacheEntry, index$1.CacheTTL.PROVIDER);
|
|
167
|
+
return provider;
|
|
168
|
+
}
|
|
169
|
+
throw error;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
async createProviderInstance(chainId) {
|
|
173
|
+
const chainData = await this.getChainDataWithCache(chainId);
|
|
174
|
+
if (!chainData) {
|
|
175
|
+
throw new Error(`Chain data not found for chainId: ${chainId}`);
|
|
176
|
+
}
|
|
177
|
+
const provider = await getWeb3ProviderWithRetry(chainData);
|
|
178
|
+
return { provider, chainData };
|
|
179
|
+
}
|
|
180
|
+
async getChainDataWithCache(chainId) {
|
|
181
|
+
const cacheKey = `chainData:${chainId}`;
|
|
182
|
+
// First check if we have it in the provider cache (includes token validation)
|
|
183
|
+
const providerCached = this.cache.get(`provider:${chainId}`);
|
|
184
|
+
if (providerCached && !this.checkIsTokenExpired(providerCached.chainData.authHeader)) {
|
|
185
|
+
return providerCached.chainData;
|
|
186
|
+
}
|
|
187
|
+
// Otherwise use getOrSet for chainData only
|
|
188
|
+
return this.cache.getOrSet(cacheKey, async () => {
|
|
189
|
+
const chainData = await this.web3ChainApi.getChainData(chainId);
|
|
190
|
+
if (!chainData) {
|
|
191
|
+
throw new Error(`Chain data not found for chainId: ${chainId}`);
|
|
192
|
+
}
|
|
193
|
+
return chainData;
|
|
194
|
+
}, index$1.CacheTTL.MEDIUM // 30 minutes for chain data
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
checkIsTokenExpired(authHeader) {
|
|
198
|
+
// NULL CHECK: Handle undefined case
|
|
199
|
+
if (!authHeader) {
|
|
200
|
+
return false; // No token means no expiration (public chains)
|
|
201
|
+
}
|
|
202
|
+
// FUNCTION CALL: Use imported function, not method
|
|
203
|
+
return index.isTokenExpired(authHeader);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clear all cached providers and chain data
|
|
207
|
+
* Useful for logout scenarios or when authentication context changes
|
|
208
|
+
*/
|
|
209
|
+
clearCache() {
|
|
210
|
+
this.cache.clear();
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Clear cache for a specific chain
|
|
214
|
+
* Useful when a specific chain's authentication fails
|
|
215
|
+
*/
|
|
216
|
+
clearCacheForChain(chainId) {
|
|
217
|
+
this.cache.delete(`provider:${chainId}`);
|
|
218
|
+
this.cache.delete(`chainData:${chainId}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
exports.Web3ChainApi = Web3ChainApi;
|
|
223
|
+
exports.Web3ChainService = Web3ChainService;
|
|
224
|
+
//# sourceMappingURL=web3-chain-service-D68-0WaW.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web3-chain-service-D68-0WaW.cjs","sources":["../../src/web3-chain/api/web3-chain-api.ts","../../src/web3-chain/services/getWeb3FCD.service.ts","../../src/web3-chain/services/web3-chain-service.ts"],"sourcesContent":[null,null,null],"names":["FetchRequest","JsonRpcProvider","ApiErrorDetector","globalCacheService","CacheTTL","isTokenExpired"],"mappings":"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"}
|