pi-spi-sdk 0.1.3 → 0.2.0
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/CHANGELOG.md +39 -0
- package/README.md +23 -1
- package/dist/chunk-7W56NW2S.mjs +2066 -0
- package/dist/generated-FM5EVVHH.mjs +84 -0
- package/dist/index.cjs +4754 -0
- package/dist/index.d.cts +4940 -0
- package/dist/index.d.ts +4937 -12
- package/dist/index.mjs +2359 -0
- package/dist/index.umd.js +2 -0
- package/dist/qrcode/index.cjs +757 -0
- package/dist/qrcode/index.d.cts +68 -0
- package/dist/qrcode/index.d.ts +20 -14
- package/dist/qrcode/index.mjs +712 -0
- package/package.json +24 -8
- package/dist/config.d.ts +0 -35
- package/dist/config.js +0 -5
- package/dist/error-handler.d.ts +0 -7
- package/dist/error-handler.js +0 -55
- package/dist/errors.d.ts +0 -25
- package/dist/errors.js +0 -48
- package/dist/examples.d.ts +0 -8
- package/dist/examples.js +0 -93
- package/dist/generated/core/ApiError.d.ts +0 -10
- package/dist/generated/core/ApiError.js +0 -15
- package/dist/generated/core/ApiRequestOptions.d.ts +0 -13
- package/dist/generated/core/ApiRequestOptions.js +0 -2
- package/dist/generated/core/ApiResult.d.ts +0 -7
- package/dist/generated/core/ApiResult.js +0 -2
- package/dist/generated/core/CancelablePromise.d.ts +0 -20
- package/dist/generated/core/CancelablePromise.js +0 -116
- package/dist/generated/core/OpenAPI.d.ts +0 -16
- package/dist/generated/core/OpenAPI.js +0 -14
- package/dist/generated/core/request.d.ts +0 -34
- package/dist/generated/core/request.js +0 -292
- package/dist/generated/index.d.ts +0 -78
- package/dist/generated/index.js +0 -86
- package/dist/generated/models/AliasCreationReponse.d.ts +0 -22
- package/dist/generated/models/AliasCreationReponse.js +0 -2
- package/dist/generated/models/AliasCreationRequest.d.ts +0 -11
- package/dist/generated/models/AliasCreationRequest.js +0 -2
- package/dist/generated/models/AliasReponseListe.d.ts +0 -26
- package/dist/generated/models/AliasReponseListe.js +0 -2
- package/dist/generated/models/AnnulationStatut.d.ts +0 -13
- package/dist/generated/models/AnnulationStatut.js +0 -21
- package/dist/generated/models/Champs.d.ts +0 -1
- package/dist/generated/models/Champs.js +0 -2
- package/dist/generated/models/CompteOperation.d.ts +0 -72
- package/dist/generated/models/CompteOperation.js +0 -27
- package/dist/generated/models/CompteOperationListe.d.ts +0 -18
- package/dist/generated/models/CompteOperationListe.js +0 -2
- package/dist/generated/models/CompteSolde.d.ts +0 -129
- package/dist/generated/models/CompteSolde.js +0 -74
- package/dist/generated/models/CompteTransfertIntraReponse.d.ts +0 -33
- package/dist/generated/models/CompteTransfertIntraReponse.js +0 -15
- package/dist/generated/models/CompteTransfertIntraRequest.d.ts +0 -9
- package/dist/generated/models/CompteTransfertIntraRequest.js +0 -2
- package/dist/generated/models/DemandePaiementConfirmationAnnulationRaison.d.ts +0 -14
- package/dist/generated/models/DemandePaiementConfirmationAnnulationRaison.js +0 -22
- package/dist/generated/models/DemandePaiementConfirmationReponse.d.ts +0 -41
- package/dist/generated/models/DemandePaiementConfirmationReponse.js +0 -16
- package/dist/generated/models/DemandePaiementConfirmationRequest.d.ts +0 -3
- package/dist/generated/models/DemandePaiementConfirmationRequest.js +0 -2
- package/dist/generated/models/DemandePaiementConfirmationRequestAccepter.d.ts +0 -9
- package/dist/generated/models/DemandePaiementConfirmationRequestAccepter.js +0 -2
- package/dist/generated/models/DemandePaiementConfirmationRequestRejeter.d.ts +0 -9
- package/dist/generated/models/DemandePaiementConfirmationRequestRejeter.js +0 -2
- package/dist/generated/models/DemandePaiementConsultationReponse.d.ts +0 -151
- package/dist/generated/models/DemandePaiementConsultationReponse.js +0 -30
- package/dist/generated/models/DemandePaiementEnMasseConfirmationRequest.d.ts +0 -3
- package/dist/generated/models/DemandePaiementEnMasseConfirmationRequest.js +0 -2
- package/dist/generated/models/DemandePaiementEnMasseConfirmationRequestAccepter.d.ts +0 -9
- package/dist/generated/models/DemandePaiementEnMasseConfirmationRequestAccepter.js +0 -2
- package/dist/generated/models/DemandePaiementEnMasseConfirmationRequestRejeter.d.ts +0 -9
- package/dist/generated/models/DemandePaiementEnMasseConfirmationRequestRejeter.js +0 -2
- package/dist/generated/models/DemandePaiementEnMasseRequest.d.ts +0 -74
- package/dist/generated/models/DemandePaiementEnMasseRequest.js +0 -2
- package/dist/generated/models/DemandePaiementEnMasseStatutReponse.d.ts +0 -98
- package/dist/generated/models/DemandePaiementEnMasseStatutReponse.js +0 -23
- package/dist/generated/models/DemandePaiementListe.d.ts +0 -26
- package/dist/generated/models/DemandePaiementListe.js +0 -2
- package/dist/generated/models/DemandePaiementListeItem.d.ts +0 -163
- package/dist/generated/models/DemandePaiementListeItem.js +0 -30
- package/dist/generated/models/DemandePaiementReponse.d.ts +0 -129
- package/dist/generated/models/DemandePaiementReponse.js +0 -2
- package/dist/generated/models/DemandePaiementReponseRequest.d.ts +0 -21
- package/dist/generated/models/DemandePaiementReponseRequest.js +0 -14
- package/dist/generated/models/DemandePaiementRequest.d.ts +0 -98
- package/dist/generated/models/DemandePaiementRequest.js +0 -10
- package/dist/generated/models/DemandePaiementRequestBase.d.ts +0 -42
- package/dist/generated/models/DemandePaiementRequestBase.js +0 -2
- package/dist/generated/models/DemandePaiementRequestCategorie.d.ts +0 -12
- package/dist/generated/models/DemandePaiementRequestCategorie.js +0 -20
- package/dist/generated/models/DemandePaiementStatut.d.ts +0 -13
- package/dist/generated/models/DemandePaiementStatut.js +0 -21
- package/dist/generated/models/DemandePaiementStatutRaison.d.ts +0 -46
- package/dist/generated/models/DemandePaiementStatutRaison.js +0 -54
- package/dist/generated/models/ListeMeta.d.ts +0 -14
- package/dist/generated/models/ListeMeta.js +0 -2
- package/dist/generated/models/Paiement.d.ts +0 -156
- package/dist/generated/models/Paiement.js +0 -31
- package/dist/generated/models/PaiementAnnulationMotif.d.ts +0 -17
- package/dist/generated/models/PaiementAnnulationMotif.js +0 -25
- package/dist/generated/models/PaiementAnnulationReponseRequest.d.ts +0 -11
- package/dist/generated/models/PaiementAnnulationReponseRequest.js +0 -2
- package/dist/generated/models/PaiementAnnulationReponseRequestAccepter.d.ts +0 -9
- package/dist/generated/models/PaiementAnnulationReponseRequestAccepter.js +0 -2
- package/dist/generated/models/PaiementAnnulationReponseRequestRejeter.d.ts +0 -9
- package/dist/generated/models/PaiementAnnulationReponseRequestRejeter.js +0 -2
- package/dist/generated/models/PaiementAnnulationRequest.d.ts +0 -4
- package/dist/generated/models/PaiementAnnulationRequest.js +0 -2
- package/dist/generated/models/PaiementAnnulationStatutRaison.d.ts +0 -21
- package/dist/generated/models/PaiementAnnulationStatutRaison.js +0 -29
- package/dist/generated/models/PaiementEnMasseConfirmationRequest.d.ts +0 -3
- package/dist/generated/models/PaiementEnMasseConfirmationRequest.js +0 -2
- package/dist/generated/models/PaiementEnMasseConfirmationRequestAccepter.d.ts +0 -9
- package/dist/generated/models/PaiementEnMasseConfirmationRequestAccepter.js +0 -2
- package/dist/generated/models/PaiementEnMasseConfirmationRequestRejeter.d.ts +0 -9
- package/dist/generated/models/PaiementEnMasseConfirmationRequestRejeter.js +0 -2
- package/dist/generated/models/PaiementEnMasseReponseStatut.d.ts +0 -97
- package/dist/generated/models/PaiementEnMasseReponseStatut.js +0 -23
- package/dist/generated/models/PaiementEnMasseRequest.d.ts +0 -54
- package/dist/generated/models/PaiementEnMasseRequest.js +0 -2
- package/dist/generated/models/PaiementImmediatConfirmationReponse.d.ts +0 -31
- package/dist/generated/models/PaiementImmediatConfirmationReponse.js +0 -10
- package/dist/generated/models/PaiementImmediatConfirmationRequest.d.ts +0 -3
- package/dist/generated/models/PaiementImmediatConfirmationRequest.js +0 -2
- package/dist/generated/models/PaiementImmediatConfirmationRequestAccepter.d.ts +0 -9
- package/dist/generated/models/PaiementImmediatConfirmationRequestAccepter.js +0 -2
- package/dist/generated/models/PaiementImmediatConfirmationRequestRejeter.d.ts +0 -9
- package/dist/generated/models/PaiementImmediatConfirmationRequestRejeter.js +0 -2
- package/dist/generated/models/PaiementImmediatReponse.d.ts +0 -98
- package/dist/generated/models/PaiementImmediatReponse.js +0 -10
- package/dist/generated/models/PaiementImmediatRequest.d.ts +0 -13
- package/dist/generated/models/PaiementImmediatRequest.js +0 -2
- package/dist/generated/models/PaiementListe.d.ts +0 -6
- package/dist/generated/models/PaiementListe.js +0 -2
- package/dist/generated/models/PaiementRequest.d.ts +0 -33
- package/dist/generated/models/PaiementRequest.js +0 -2
- package/dist/generated/models/PaiementStatut.d.ts +0 -13
- package/dist/generated/models/PaiementStatut.js +0 -21
- package/dist/generated/models/PaiementStatutRaison.d.ts +0 -56
- package/dist/generated/models/PaiementStatutRaison.js +0 -64
- package/dist/generated/models/Problem7807.d.ts +0 -31
- package/dist/generated/models/Problem7807.js +0 -2
- package/dist/generated/models/RefDocType.d.ts +0 -38
- package/dist/generated/models/RefDocType.js +0 -46
- package/dist/generated/models/RetourStatut.d.ts +0 -13
- package/dist/generated/models/RetourStatut.js +0 -21
- package/dist/generated/models/RetourStatutRaison.d.ts +0 -25
- package/dist/generated/models/RetourStatutRaison.js +0 -33
- package/dist/generated/models/WebhookCreationRequest.d.ts +0 -14
- package/dist/generated/models/WebhookCreationRequest.js +0 -2
- package/dist/generated/models/WebhookCreationResponse.d.ts +0 -12
- package/dist/generated/models/WebhookCreationResponse.js +0 -2
- package/dist/generated/models/WebhookData.d.ts +0 -8
- package/dist/generated/models/WebhookData.js +0 -2
- package/dist/generated/models/WebhookEvent.d.ts +0 -191
- package/dist/generated/models/WebhookEvent.js +0 -45
- package/dist/generated/models/WebhookEventsList.d.ts +0 -13
- package/dist/generated/models/WebhookEventsList.js +0 -2
- package/dist/generated/models/WebhookList.d.ts +0 -13
- package/dist/generated/models/WebhookList.js +0 -2
- package/dist/generated/models/WebhookModificationRequest.d.ts +0 -4
- package/dist/generated/models/WebhookModificationRequest.js +0 -2
- package/dist/generated/models/WebhooksEvents.d.ts +0 -12
- package/dist/generated/models/WebhooksEvents.js +0 -20
- package/dist/generated/services/AliasService.d.ts +0 -63
- package/dist/generated/services/AliasService.js +0 -88
- package/dist/generated/services/ComptesService.d.ts +0 -64
- package/dist/generated/services/ComptesService.js +0 -90
- package/dist/generated/services/DemandeAnnulationService.d.ts +0 -84
- package/dist/generated/services/DemandeAnnulationService.js +0 -103
- package/dist/generated/services/DemandesDePaiementEnMasseService.d.ts +0 -161
- package/dist/generated/services/DemandesDePaiementEnMasseService.js +0 -193
- package/dist/generated/services/DemandesDePaiementService.d.ts +0 -123
- package/dist/generated/services/DemandesDePaiementService.js +0 -165
- package/dist/generated/services/NotificationService.d.ts +0 -80
- package/dist/generated/services/NotificationService.js +0 -136
- package/dist/generated/services/PaiementEnMasseService.d.ts +0 -159
- package/dist/generated/services/PaiementEnMasseService.js +0 -191
- package/dist/generated/services/PaiementImmediatService.d.ts +0 -135
- package/dist/generated/services/PaiementImmediatService.js +0 -180
- package/dist/generated/services/RetoursdeFondsService.d.ts +0 -28
- package/dist/generated/services/RetoursdeFondsService.js +0 -41
- package/dist/index.js +0 -72
- package/dist/qrcode/index.js +0 -541
- package/dist/qrcode/logo.d.ts +0 -3
- package/dist/qrcode/logo.js +0 -142
- package/dist/query-builder.d.ts +0 -91
- package/dist/query-builder.js +0 -191
- package/dist/sdk.d.ts +0 -104
- package/dist/sdk.js +0 -147
- package/dist/services/alias.d.ts +0 -76
- package/dist/services/alias.js +0 -80
- package/dist/services/base.d.ts +0 -20
- package/dist/services/base.js +0 -67
- package/dist/services/comptes.d.ts +0 -149
- package/dist/services/comptes.js +0 -162
- package/dist/services/demandes-annulation.d.ts +0 -97
- package/dist/services/demandes-annulation.js +0 -108
- package/dist/services/demandes-paiement-en-masse.d.ts +0 -33
- package/dist/services/demandes-paiement-en-masse.js +0 -44
- package/dist/services/demandes-paiement.d.ts +0 -148
- package/dist/services/demandes-paiement.js +0 -153
- package/dist/services/paiements-en-masse.d.ts +0 -152
- package/dist/services/paiements-en-masse.js +0 -157
- package/dist/services/paiements.d.ts +0 -135
- package/dist/services/paiements.js +0 -139
- package/dist/services/retours-fonds.d.ts +0 -94
- package/dist/services/retours-fonds.js +0 -104
- package/dist/services/webhooks.d.ts +0 -131
- package/dist/services/webhooks.js +0 -146
- package/dist/types/alias.d.ts +0 -64
- package/dist/types/alias.js +0 -78
- package/dist/utils/constants.d.ts +0 -93
- package/dist/utils/constants.js +0 -96
- package/dist/utils/index.d.ts +0 -60
- package/dist/utils/index.js +0 -126
|
@@ -0,0 +1,712 @@
|
|
|
1
|
+
// src/qrcode/logo.ts
|
|
2
|
+
var AMBER_LOGO_SEGMENTS = [
|
|
3
|
+
"iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAMAAABlApw1AAACUlBMVEUAAAD7uQD7uQD7uQD7uQD7uQD7",
|
|
4
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
5
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
6
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
7
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
8
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
9
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
10
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
11
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
12
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7",
|
|
13
|
+
"uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQD7uQBqFsbfAAAAxXRSTlMAAAUpaqDF2uPq7ezn",
|
|
14
|
+
"4djPzsvDwsC3trCdfVEdAgtJn977/vXUlUQIQK7087FHHJ7vKBmsLBqtyi8bMC3WuSs+v9EjvLM0ILW9",
|
|
15
|
+
"zR4yxh8Xphb9shil+Ov8bzND4BUh14g3pKgmmQdL+YsO7j8PupYKVSVKaKI15cETLnpkca+n08QN5gOX",
|
|
16
|
+
"XV5gTV9TbooU0HTdQYmOewaMIk8E6PZc0tyakN9CTPJaZcgBRngJJDs4gEhY8E5SEpwREGHi5JuU2/dw",
|
|
17
|
+
"ofG+YwjdAcYAAAZRSURBVHja7Z37XxRVGIfnhULYFQQlNJTLriGiSSiBGGFihVwqm0BJMfOGS2aE5C2z",
|
|
18
|
+
"q0ghGqXdyBQrIaKbUWSl2fX8X82wrCyX2Xln59zm8znfn4fZ59nznrOzh3POalqcgYTEO+5MmpNsJsXn",
|
|
19
|
+
"nxbf3OTJpM6ZSNq89PFkzF9gJvOuLCMLF92dvXgJxMsRL35Obl5+gNBJcOk9BctygKMDFC4vWkGJfiIr",
|
|
20
|
+
"713FTwGK7yuhiz+uULSakwGsKaWPb2bB/VwMoKycDT8hays4GDDk52LAlJ+9AcA6pvyGwQNMDaAyM8hW",
|
|
21
|
+
"gDy4jKEBlFUxxjcybz0zA8b1H8n8REYGnPiZGXDjZ2TAkZ+FAUBlFevxJzoZD1E2gOINHPGNVNMdi7jW",
|
|
22
|
+
"TzhUq0gAv2FA7+laCD8hGzZSMhDET8jDVAwAEh/hOf5EJ/NRCgZQkyQI30i1+54srH7CcV1FgvldGwjn",
|
|
23
|
+
"d2fA/vsXWwNj/Nkkmt5MbZxPFQZ/nWj2cNLjGosA6rNEk0eSVe/cwOCXon7C2eTYQC5+5way8Ts1ANgo",
|
|
24
|
+
"Gb9h4GA0BajIEM07MxnoWUejfjjMXzlPVT1OQL76j2RhGcZAXn5CyhEGMvNjDABqJOY3DNbF7skADY+J",
|
|
25
|
+
"ZoyZYGYlxOR/nPP8lfNUxagiues/Eut+4A1+awOv8BsGT4Cn+Ulw85MwC3+D9P33dvSnZsybgtD5K+ep",
|
|
26
|
+
"agSv1k84waYpVeQ5/mkGTviDW0q28omvGW2A5/cXPb1qWwWXVG5vsWuDHRMG8AySf+ezuwq5rQuDNWk2",
|
|
27
|
+
"OPrucE+GnD0o/EDTXq7L2mwFCNnXCmYH2L8Swx9qe47rykKMwIHnTYGDL6AaoD2H78pIjAApfxE06NiC",
|
|
28
|
+
"4U87xHllJ0pgRSdohagVfIGXeNY/WoAcTtCOHMUIHDvOfWktSiD1Ze2EjrhOf4V3AyAFmk9qr2Ia4Ggi",
|
|
29
|
+
"b36kAHlNex1z2RtvyiqQrr2F8jwlq0Cy5sNc1sW9C2AF/Jofc1k7d34loASUgBJQAkpACSgBeQRqT3ff",
|
|
30
|
+
"ztvbLGyg9Z2ebkR61lvdIOfM5A1O986lKECCkyFnrV7/3LvR11mG9FndoL5lygvRFIhOWwwBVKwFUh3D",
|
|
31
|
+
"KAEloASUgBJQAkpACSgBJaAElIASUAJKQAkoASWgBJSAElACSkAJKAFXAsXveVygtcnbAhoklqPWcUsr",
|
|
32
|
+
"oEHO+33n28K5gKonIQIfoLYFf4ja1SBE4CPMGkiZBXZjzjiWWeAYZiuCzAItH3tcIPSJxwWMOyA298ss",
|
|
33
|
+
"sBaxnUJqgaW5Hhcgef22BnILfLrL4wKk1PajAC2A2gBBXeDiZ3YDEVogRYgAuWS3sQ4tcFmMABlIABoC",
|
|
34
|
+
"yVqmIIGSDptTUnACddoVQQLk8y9iGiAFNmtfXhUkQFoGY23uwgmEhrQdX4kSIL7eVnApkL9agxPCBMjF",
|
|
35
|
+
"K42WZYQTyOvXYK/TcYieAAnWNgyDC4GrX4MGMILZz8pGwOgIIxZnNqEE9nxj7klffEmgANGr+76drTNj",
|
|
36
|
+
"BPzfmX8IsN/ZlKSlwPF4BAyF/KaT35/rn9YQCIHQD+EPQ4Bs1K7uSEqvdc6a3B/z4xIwEhytLj3fO5gd",
|
|
37
|
+
"fbef7E4b1AsiT4QAPzsxaA5ZxeX51Hpgyt1suqa+aGzybBJnBlIkmt+LBlP5TYMzzp+rJeI3DJYMoTbd",
|
|
38
|
+
"yBH98Mx5DS9V0cz331sGs/N7x8CK3ysG1vzjBtL35OYY/KbB0FbRhDb8v1yP/VV6WO4qChT8ajcdI3U/",
|
|
39
|
+
"CBQctJ+TlNgAwy+zAY5fXgMsv2nw2wHRtDOjD+DPiYNTHdK1QaD9OppfxirC14+cBk75ZTNwzi+XQTz8",
|
|
40
|
+
"psHgqGjycPSu+M6phIRBKdog0DUWF78sVRRf/chj4IZfBgN3/OIN3PKbBh0Cn4v0Avfn5EJ/z+/C3v8B",
|
|
41
|
+
"J88/1m3Q6XxJMx1+1/Uj1oAWvygDevxiDGjyj/8fjfOMF11+c76o+wZX/pt28z9yVxHt95+3AQt+ngZs",
|
|
42
|
+
"+PkZsOIfN0j2Mr9p0M18NG2+yY7fHE0drquI4/2nPX5ObwO2/YBl/fAwYM/P1iDwB3t+0+DaLTb8f57l",
|
|
43
|
+
"c8g+wPb0AAP+lBFev3ID0PjXTtq/XT/695EETvymwnBNX9I/9OhDl/ctb+WHH26FsdwL/95K8fld50Zd",
|
|
44
|
+
"03+H7Ld0WOR/rIwlUtPE/X8AAAAASUVORK5CYII="
|
|
45
|
+
];
|
|
46
|
+
var OCTO_QRCODE_LOGO_SEGMENTS = [
|
|
47
|
+
"iVBORw0KGgoAAAANSUhEUgAAAPYAAAD6CAYAAACS0LqzAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAA",
|
|
48
|
+
"AAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAA9qADAAQAAAABAAAA+gAA",
|
|
49
|
+
"AAA4bIViAAAVTklEQVR4Ae2dW2xcx3nHZ5bcpVYXmEEkBPYDuXmI5ASoJVVGEyCwRD4YsFE5lquXpK0Q",
|
|
50
|
+
"CYUvDwYiG0iARkEkAbGLGkVsoyrgSwNLdYq4LRQ7qQEH9YNoGQGSoJIYP0ixXrr0g51ADkJDIpdcUns6",
|
|
51
|
+
"H9cUd8nl7jln5/LNzH8AWrvnMueb3zc/z+w5Z89KgZKaQFKrVRbEzTE5UNjZaIiKFGLXqp0rq94zeptM",
|
|
52
|
+
"CyHVn/ZS1VVjIsS0lCsxSplM31xsTA3IgcliuTyh6zgx1KP6Jko3AkmSDM/XZg4XCoUH1XZj3bbFOuME",
|
|
53
|
+
"JkTSOFPcsOmN1v8BGD+qhweA2OskjYRerM99K0kaR9VIN7zOZljshkBVyGSi2CiclOVy1U0IvI8KsTvk",
|
|
54
|
+
"Z3F+5kAjEa9A6A5weC2qNoR4fsOGjc/xCst9NBC7JQc0Si/UZ58ViTzcshgv+ROYKCbyCEbvlURB7E9Z",
|
|
55
|
+
"1NSJsYFC8rpI1pwQW6GFV5wJVEVh8KFSqTTJOUhbsUFsRXpJapmcUy8rtsDjOAYISDEt5OA45FYfIg3g",
|
|
56
|
+
"9apKSO1VunoHC7mXGEUtNqTu7YmXW0DueEdsSO2lsumDjlzuKEdsSJ3eD6+3jFju6MSG1F6rmif4qroU",
|
|
57
|
+
"Nh7bpbCoxF66Tj1fu6R6RyVPD8E+3hKITu6Ct6nKGHjz5pMaLmll5BbI5pUFdTmTvsQTSHt6NiOKEfuW",
|
|
58
|
+
"1Lj5pGeHCHyDaEbu4MWG1IGrmr15UcgdtNiQOnuvj2SP4OUOVmxIHYmi+ZsZtNxBig2p8/f2yPYMVu7g",
|
|
59
|
+
"xIbUkanZf3ODlDs4sevzs5fw1cv+e3tkNQQnd1DXsevzM69A6siU1NPc4K5zBzNiN6XGk0/09PNoawlm",
|
|
60
|
+
"5A5CbEgdrYgmGl4tDpV3+/4UVO+n4pDaRN+Ous7KQr12jk7C+kzB6xEbUvvc9ZjHLsVksVQe93Xk9lZs",
|
|
61
|
+
"blLPXJ8WVy68u/R37fdTYurqe0s9d/b6J4LWcSnb7hjVHsq227PXue32ETGyfaeobL9LfHHPPdpj0lKh",
|
|
62
|
+
"x3J7KTYnqa9cOC/eeu1floTmJLCWjm2pkk1bhsWefQ+Ig498V+T5n4TRMD2V2zuxF+Zmn02EOGo0mSkq",
|
|
63
|
+
"v/bRlHjx5KPishIbRR+BvfsP8RPcQ7m9EnthvnZcndQ4oa8b5avprddOiZ++9DSrKXa+lvDd6+Ajx8TB",
|
|
64
|
+
"h4/xCdAzub0Rm4vUZ19+Spx96Sk+HS7gSO4ee0A8+v0XBU3VWRSZnC4NbTrCIpYeQXghNqTukcWAV4+q",
|
|
65
|
+
"k2vfe+EXkDtjjtmLDakzZjTAzSF39qSyFhtSZ09oqHtA7myZZSs2pM6WyBi2htzps8xSbEidPoGxbQm5",
|
|
66
|
+
"02Wc3b3ikDpd4mLdiu7o+8Fj9/G51Kh+S72u7q3glg9WYkNqbt2DZzzs5FY3TFHf5USLzVQcUnPqFn7E",
|
|
67
|
+
"wm1arr4wckJ95fMkB3osxIbUHLqCnzFA7s55cy42pO6cGCxNTwByr2XlVGxIvTYhWJKPAORu5+ZMbEjd",
|
|
68
|
+
"ngi8658A5F5h6ERsSL2SALzSSwByN3laF7s+N/ctIRrP6U1n9trwLa3szHzZA3ILYVXsxXr9m43G4mnX",
|
|
69
|
+
"HQRSu86A+ePHLrc1sSG1+c6MI7QTiFluK2JD6vYOh3f2CMQqt3GxIbW9TowjdSZAcv/Dv/+q80oHS23c",
|
|
70
|
+
"oWb0XnEuUr/6w+/gcUYOOjCXQ9K95fTgSS6FnttHbpiMx9iIzUXqF1RCz7/5qkmGqNsTAvvUE1AfPf4i",
|
|
71
|
+
"m2gLhcHDg6XSGRMBGREbUptIFerUQSAWubWLvVCrjSUyOacjCf3UgZG6H3ph7xuD3Fo/Y9dv3NiVyMbr",
|
|
72
|
+
"rrsFpHadAd7Hf0d9NOP0mZvu7dD9mVvbiE1Si0GpRmrp9CHQkJq3VJyiC3nk1iI2pObUXRFLFgLc5JaJ",
|
|
73
|
+
"HC+WyxNZ2tBp276n4pC6E1Ys84UAt2l5Ukher9fru/rl19eIDan7xY/9uRBgNXJLMS3k4HipVJrMyye3",
|
|
74
|
+
"2JA6L3Lsx5VASHLnEhtSc+2aiKtfAqHInVnsWq1WGZCNSzj73W8Xwv5cCYQgd6aTZ02p6eYTXNLi2ikR",
|
|
75
|
+
"V/8EWJ1QS8SwSBbPZT2hlnrEXpFaVPpHl78GXKfOzw57ZiPAauQWolpUl8JkuVxN04pUYkPqNCixTYgE",
|
|
76
|
+
"fJW7p9iQOsTuijZlIeCj3F3FhtRZ0o9tQybgm9zrig2pQ+6maFseAj7J3VFsSJ0n7dgnBgK+yL1GbEgd",
|
|
77
|
+
"Q/dEG/shwE7uofJu9Ry16dY2rbmOXZCNZ9UGldaNbL/GJS3bxHG8LARYXedWri7UZ8nZttImNv1KhxTy",
|
|
78
|
+
"QNsWlt9AasvAcbhcBFjJncjDi/Mzbd7emopzmIJD6lx9DDs5JMBmWq6+EVYslT+/PCW/NWIPFBrHFZ+K",
|
|
79
|
+
"K0aQ2hV5HLcfAmxGbnXraX1u9uhyW5ZG7E9H6/9bXmj7X0htmziOp5sAi5G7ZdReGrEHxM0x3Q1NWx+k",
|
|
80
|
+
"TksK23EmwGLkVqP2/HztMHFqTsVlgabh1gukto4cBzRIgIPcSugHqYnS1TQcUhvsYajaKQHX0/LiUPkz",
|
|
81
|
+
"BRfTcEjttN/h4IYJuB65F+ZmDhREQe4z3M626iF1Gw68CZSAU7ml2DUokkJFiMQKXl+k3rhBiK/uFGLk",
|
|
82
|
+
"c0LcOSJEWb2nZSj+EPjle0L86Odu4yW5qdj+IcBGQ1YGldSVpaMb/s/Zl59i/6uXW4fVmYe9QuzeDpEN",
|
|
83
|
+
"d4doqie5t94xIg4+fMxamwsFuVOJbf6mFJL67EtPWWtYngPd+2Ul9T0QOg877NOdAPX9jVtuE/d//fHu",
|
|
84
|
+
"G+pbW7l155m+OttruvbRFHupaZT+xr2Quj1zeKeTAMlNLtgqxsXm9KuGnaCS1PSHAgImCcxe/8TqL3wa",
|
|
85
|
+
"FfvKhfPisvrjWugEGaTmmp3w4iIXLl9410rDjIp99uWnrTQiz0GWTpSpz9QoIGCTwFuvnbJyOGNi0+cJ",
|
|
86
|
+
"zqM1jdQkNwoI2CRAs9iZ69PGD2lM7CuWphx5CNE1abqkhQICtgnQZ+0LE28aP6wxsf934r+NB5/3ALt3",
|
|
87
|
+
"4Ax4XnbYr38CU1fV3TOGizGxP/7oA8Oh56/+ztH8+2JPEOiXwOWL5k+gGRPb5jW7rKC33pZ1D2wPAvoI",
|
|
88
|
+
"zPr8GdvGCYK8qCF2XnLYTwcBG4OesRFbBwDUAQIgkI8AxM7HDXuBAGsCEJt1ehAcCOQjALHzccNeIMCa",
|
|
89
|
+
"AMRmnR4EBwL5CEDsfNywFwiwJgCxWacHwYFAPgIQOx837AUCrAlAbNbpQXAgkI8AxM7HDXuBAGsCEJt1",
|
|
90
|
+
"ehAcCOQjALHzccNeIMCaAMRmnR4EBwL5CNBzxaMrF69mf9DCZ9VXPW19j/vS+0LMzvNOy44Re4+Wol/1",
|
|
91
|
+
"yFp+Z+9Jv1lDs7J9lGL/5H+ys/3qXfbEfvs3QnDvmH/3NXtiu/6pnuy9xf0emIq7zwEiAAHtBCC2dqSo",
|
|
92
|
+
"EATcE4DY7nOACEBAOwGIrR0pKgQB9wQgtvscIAIQ0E4AYmtHigpBwD0BiO0+B4gABLQTgNjakaJCEHBP",
|
|
93
|
+
"AGK7zwEiAAHtBCC2dqSoEATcE4DY7nOACEBAOwGIrR0pKgQB9wQgtvscIAIQ0E4AYmtHigpBwD0BiO0+",
|
|
94
|
+
"B4gABLQTgNjakaJCEHBPAGK7zwEiAAHtBCC2dqSoEATcE4DY7nOACEBAOwGIrR0pKgQB9wQgtvscIAIQ",
|
|
95
|
+
"0E4AYmtHigpBwD0BiO0+B4gABLQTgNjakaJCEHBPAGK7zwEiAAHtBCC2dqSoEATcE4DY7nOACEBAOwGI",
|
|
96
|
+
"rR0pKgQB9wQgtvscIAIQ0E4AYmtHigpBwD0BiO0+B4gABLQTgNjakaJCEHBPAGK7zwEiAAHtBCC2dqSo",
|
|
97
|
+
"EATcE4DY7nOACEBAOwGIrR0pKgQB9wQgtvscIAIQ0E4AYmtHigpBwD0BiO0+B4gABLQTgNjakaJCEHBP",
|
|
98
|
+
"AGK7zwEiAAHtBCC2dqSoEATcE4DY7nOACEBAOwGIrR0pKgQB9wQgtvscIIIeBDZu6LEBVq8hALHXIMECbgQe3MstIv7xDPIPERHG",
|
|
99
|
+
"TuDev2gSePs3Qnw8HTuNdO2H2Ok4YSvHBEhu+nt/Kl0gs3NC/PN/pds2xK0gdohZDbhNO0bTNS72kR2f",
|
|
100
|
+
"sdP1E2y1ikDs4qzCwe4txGaXEj8Cgti88wSxeeeHbXR//IRtaAhMEYDY6Aa5CHzwh1y7YSdLBCC2JdCh",
|
|
101
|
+
"HYbOOv8Rl57YphVis00N/8AuXuUfY6wRQuxYM6+h3Zfe11AJqjBCAGIbwRpHpb9TN4vQlByFHwGIzS8n",
|
|
102
|
+
"XkVEt3mi8CMAsfnlxKuISGyM2vxSBrH55cSriEhqjNr8Ugax+eXEu4gwavNLGcTmlxPvIqJR+2fvehd2",
|
|
103
|
+
"0AEbE3vTluGgwaFx7QTe/rUQdJYchQcBY2Jv3HIbjxYiCmsETqnvP+PLIb1xb7s95XdPe1e17hbGxB79",
|
|
104
|
+
"wl3rHhQrwiRAU/Jnfoyz5L2yu+0Oj8X+4p57erUP6wMkQCM25O6eWBuDnrER+0sQu3t2A177we8hd7f0",
|
|
105
|
+
"3mnBDWNij27fKb60B4+X7JbgkNeR3Cf+FZ+5O+XYxqBnTGxq0J59+zu1C8siIbA8Lce3wFYSvnf/3wob",
|
|
106
|
+
"V4yMir1v/yFh40TBCja84kaA5D71n0L85G2M3pSbg48cs5IiJXZi7OvydMnr0BPPWGkIDsKbAF3nppNq",
|
|
107
|
+
"v3yPd5wmo6PR2salLmqDElsaE5sOcPfYA0t/9BolbgI0ev/o50J851RTcHofSyGhbY3Wiml1UEoxmSSi",
|
|
108
|
+
"YhLwY99/Sfz91a+Iax/i1iSTnH2pe1lwivfPdwixW/3tGBFi67AvLcge56En/9HaaK2iqw7evCneKRTE",
|
|
109
|
+
"geyhpt+DpuTfe+EX4geP3eet3B+rp3LamkbG9DXIi+opLPRHhcQe+ZwQn1X/blU3LvbzY3ycGB58+Jia",
|
|
110
|
+
"tX6t2Ugr/238Vi7UamOJTM7ZON61j6a8ltsGIxwjLAIktcUpeBNeIo9IelWfm/mT+qxtZSIEucPquGjN",
|
|
111
|
+
"+gScSK3CKSby883LXY3kzPrh6V1DJxFoWo7LYHq5ojZeBFxJra5yTcpyuboktpQDb9jEArlt0saxbBNw",
|
|
112
|
+
"J7VqaVJ4ntq7JHaxXJ5QU3H1Z69AbnuscSR7BJxKrZpZFGKCWtuciqsXMhEnaYHNArlt0saxTBNwLbWQ",
|
|
113
|
+
"8jRNw6mdt8SmUTsRwuqUnAKA3EQBxXcCzqVW166LjZXB+ZbYBLY0NH9E/VOl1zYL5LZJG8fSTYCB1Oqz",
|
|
114
|
+
"tTy5PFpT+9rElvIz01JdA9Pd8DT1Qe40lLANNwIspFZT8FK5fLqVTZvYtKJ5Ik080bqRrdeQ2xZpHEcH",
|
|
115
|
+
"ARZSr5qCL7drjdi0orRh43NJklg/mUbHhtxEAYU7ATZSJ3K8dQq+zE0uv+j073xt5oSU8nindaaX4Q41",
|
|
116
|
+
"04RRf14C3KWmdnUVmzaA3EQBBQSaBHyQmiLtKTZtBLmJAkrsBHyRmvKUSmzaEHITBZRYCfCQOpkuJoXd",
|
|
117
|
+
"nT5Tr85Lx5Nnqzei90PlTSdwQq0TGSwLnQAXqcVi0vFEWSf+qUfs5Z0xci+TwL8xEOAkdWnz5sm0zDOL",
|
|
118
|
+
"TRVD7rR4sZ3PBHyVmpjnEpt2hNxEASVUAj5LTTnJLTbtDLmJAkrsBHyRmvKUSmzaEHITBZRYCfCQOpkuJoXd",
|
|
119
|
+
"AMXmnJLTbtDLmJAkpoBHyXmvLRl9hUwXztxmkpC9+k17YLr3LaJmz8e",
|
|
120
|
+
"pG4ytvoZe3Va6TP3TfUTJWp5dfU6G+9xQs0GZXvHgNQrrJ2O2Mth1Gq1yoBM1B1qGLmXmeDfbAQgdTsv",
|
|
121
|
+
"FmJTSJC7PTF4l54ApF7Lio3YFBrkXpsgLOlOAFJ35sNKbAoRcndOFJauJQCp1zJZXsJObAoMci+nB/+u",
|
|
122
|
+
"RwBSr0emuZyl2BQa5O6euJjXQure2WcrNoUOuXsnMLYtIHW6jLMWm5oAudMlMoatDj35jLj/G487byrd",
|
|
123
|
+
"++3iNtEsDWcvNjUGcmdJaZjbPnb8RbF3/yHnjfNBaoLkhdgUKOQmCnEWSJ09796ITU2D3NkT7PsekDpf",
|
|
124
|
+
"Bl0Sm5roWu7Z65+If/vht8X5N3+cjzj2SkWA7uN/8p/+Q4xuvyvV9iY38mX63crAO7EpeNdyUwzvvPmq",
|
|
125
|
+
"+OnLT4trH07RWxSNBO7/+uPirx75rti0ZVhjrfmq8lFqaqmXYlPgHOSmOCA4Uei/kMR7//JvxH1//big",
|
|
126
|
+
"0ZpDod+io5+t4hBL1hi8FZsaWr9xY5cYlPTccuf/a5+6+p64fOG8uHLxXfHxhx8I+q73zPXprPmIZvtt",
|
|
127
|
+
"d4wuCTz6hT8Td489IEbUlJvDCL2cAJ+lpjZ4LTY1gJPcFA+K/wR8l5oy4L3Y1AjITRRQdBAIQWriEITY",
|
|
128
|
+
"1BDITRRQ+iEQitTEIBixqTGQmyig5CEQktTU/qDEpgZBbqKAkoVAaFJT24MTmxoFuYkCShoCIUpN7Q5S",
|
|
129
|
+
"bGoY5CYKKN0IhCo1tTlYsalx9VrtsJDJK/QaBQTaCEgxWSyVx6WUQd5sELTYlEjI3dad8YYIBC51s4kR",
|
|
130
|
+
"pBpyR5DktE2MQOpoxKaGQu60PT/g7SKRmjIY/FS8tZtC7lYakb2OSGrKbFRiU4MhN1GIrEQmNWU3OrGp",
|
|
131
|
+
"0ZCbKERSIpSaMhul2NRwyE0UAi+RSk1Zdfozui67ValcPk1Px3AZA45tkEDEUhPVaMWmxtOzoSE3kQiu",
|
|
132
|
+
"VIsN+VCoN5+kyVa0U/FWOPO1mROqExxvXYbX3hKoFhM5Lsvlqrct0BA4xP4UYn1u9qh6+awGpqjCFYHI",
|
|
133
|
+
"p9+t2KOeireCKG3Y+JxYbOxWy6qty/HaFwKN50O+9ztrFiB2C7HS5s2TN9U0Tn3uPtOyGC9ZE0imC3Lg",
|
|
134
|
+
"odKGzUdj/ky9OkWYiq8m8un7hVptLJENNTWXu9bZBIudEkimk0Q8TzMtCL02ERB7LZO2JSR4QzQOSyke",
|
|
135
|
+
"VJIPt63EGxcEJtSM6h0I3R09xO7Op21tcxRPDijBdwrRIMkrkL0Nke43VSGSaSELk42byW+HpHwj9rPd",
|
|
136
|
+
"aQH/P0RzGOBNa7tyAAAAAElFTkSuQmCC"
|
|
137
|
+
];
|
|
138
|
+
var PISPI_AMBER_LOGO_DATA_URL = `data:image/png;base64,${AMBER_LOGO_SEGMENTS.join("")}`;
|
|
139
|
+
var PISPI_QRCODE_LOGO_DATA_URL = `data:image/png;base64,${OCTO_QRCODE_LOGO_SEGMENTS.join("")}`;
|
|
140
|
+
var DEFAULT_PISPI_LOGO_DATA_URL = PISPI_QRCODE_LOGO_DATA_URL;
|
|
141
|
+
|
|
142
|
+
// src/qrcode/index.ts
|
|
143
|
+
var cachedQrCodeModule = null;
|
|
144
|
+
function resolveQrCodeModule(module) {
|
|
145
|
+
if (module?.create) {
|
|
146
|
+
return module;
|
|
147
|
+
}
|
|
148
|
+
if (module?.default?.create) {
|
|
149
|
+
return module.default;
|
|
150
|
+
}
|
|
151
|
+
throw new Error(`Le module "qrcode" n'expose pas l'API attendue.`);
|
|
152
|
+
}
|
|
153
|
+
async function getQrCodeModule() {
|
|
154
|
+
if (cachedQrCodeModule) {
|
|
155
|
+
return cachedQrCodeModule;
|
|
156
|
+
}
|
|
157
|
+
if (typeof window !== "undefined" && window.QRCode) {
|
|
158
|
+
const resolved2 = resolveQrCodeModule(window.QRCode);
|
|
159
|
+
cachedQrCodeModule = resolved2;
|
|
160
|
+
return resolved2;
|
|
161
|
+
}
|
|
162
|
+
const module = await import("qrcode");
|
|
163
|
+
const resolved = resolveQrCodeModule(module);
|
|
164
|
+
cachedQrCodeModule = resolved;
|
|
165
|
+
return resolved;
|
|
166
|
+
}
|
|
167
|
+
var DEFAULT_MERCHANT_CATEGORY_CODE = "0000";
|
|
168
|
+
var DEFAULT_CURRENCY = "952";
|
|
169
|
+
var DEFAULT_MERCHANT_NAME = "X";
|
|
170
|
+
var DEFAULT_MERCHANT_CITY = "X";
|
|
171
|
+
var DEFAULT_REFERENCE_LABEL_TAG = "05";
|
|
172
|
+
var DEFAULT_MERCHANT_CHANNEL_TAG = "11";
|
|
173
|
+
var DEFAULT_LOGO_SIZE_RATIO = 0.18;
|
|
174
|
+
var DEFAULT_LOGO_PADDING_RATIO = 0;
|
|
175
|
+
var DEFAULT_LOGO_BORDER_RADIUS_RATIO = 0.5;
|
|
176
|
+
var DEFAULT_MARGIN = 0;
|
|
177
|
+
var DEFAULT_SVG_SIZE = 400;
|
|
178
|
+
var DEFAULT_DOT_COLOR = "#1A1A1A";
|
|
179
|
+
var DEFAULT_BACKGROUND_COLOR = "#FFFFFF";
|
|
180
|
+
var DOT_RADIUS_RATIO = 0.44;
|
|
181
|
+
var FINDER_CORNER_RADIUS = 0.8;
|
|
182
|
+
function createQrPayload(input, options = {}) {
|
|
183
|
+
const {
|
|
184
|
+
alias,
|
|
185
|
+
amount,
|
|
186
|
+
countryCode,
|
|
187
|
+
qrType,
|
|
188
|
+
referenceLabel
|
|
189
|
+
} = input;
|
|
190
|
+
if (!alias) {
|
|
191
|
+
throw new Error('Le param\xE8tre "alias" est obligatoire.');
|
|
192
|
+
}
|
|
193
|
+
validateAlias(alias);
|
|
194
|
+
if (!countryCode) {
|
|
195
|
+
throw new Error('Le param\xE8tre "countryCode" est obligatoire.');
|
|
196
|
+
}
|
|
197
|
+
validateCountryCode(countryCode);
|
|
198
|
+
if (!qrType) {
|
|
199
|
+
throw new Error('Le param\xE8tre "qrType" est obligatoire.');
|
|
200
|
+
}
|
|
201
|
+
if (!referenceLabel) {
|
|
202
|
+
throw new Error('Le param\xE8tre "referenceLabel" est obligatoire.');
|
|
203
|
+
}
|
|
204
|
+
validateReferenceLabel(referenceLabel);
|
|
205
|
+
if (amount !== void 0 && amount !== null && amount !== "") {
|
|
206
|
+
validateAmount(amount);
|
|
207
|
+
}
|
|
208
|
+
const payloadSegments = [];
|
|
209
|
+
payloadSegments.push(formatDataObject("00", "01"));
|
|
210
|
+
const merchantAccountInformation = [
|
|
211
|
+
formatDataObject("00", "int.bceao.pi"),
|
|
212
|
+
formatDataObject("01", alias)
|
|
213
|
+
].join("");
|
|
214
|
+
payloadSegments.push(
|
|
215
|
+
formatDataObject("36", merchantAccountInformation),
|
|
216
|
+
formatDataObject("52", DEFAULT_MERCHANT_CATEGORY_CODE),
|
|
217
|
+
formatDataObject("53", DEFAULT_CURRENCY)
|
|
218
|
+
);
|
|
219
|
+
if (amount !== void 0 && amount !== null && amount !== "") {
|
|
220
|
+
payloadSegments.push(
|
|
221
|
+
formatDataObject("54", sanitizeAmount(amount))
|
|
222
|
+
);
|
|
223
|
+
}
|
|
224
|
+
payloadSegments.push(
|
|
225
|
+
formatDataObject("58", countryCode),
|
|
226
|
+
formatDataObject("59", DEFAULT_MERCHANT_NAME),
|
|
227
|
+
formatDataObject("60", DEFAULT_MERCHANT_CITY)
|
|
228
|
+
);
|
|
229
|
+
const normalizedQrType = normalizeQrType(qrType);
|
|
230
|
+
const additionalData = buildAdditionalData(
|
|
231
|
+
normalizedQrType,
|
|
232
|
+
referenceLabel,
|
|
233
|
+
options.additionalData
|
|
234
|
+
);
|
|
235
|
+
if (additionalData) {
|
|
236
|
+
payloadSegments.push(formatDataObject("62", additionalData));
|
|
237
|
+
}
|
|
238
|
+
const payloadWithoutCrc = payloadSegments.join("");
|
|
239
|
+
const crcInput = `${payloadWithoutCrc}6304`;
|
|
240
|
+
const crc = computeCrc16(crcInput);
|
|
241
|
+
return { payload: `${payloadWithoutCrc}6304${crc}` };
|
|
242
|
+
}
|
|
243
|
+
function buildAdditionalData(qrType, referenceLabel, overrides) {
|
|
244
|
+
const segments = [];
|
|
245
|
+
const referenceLabelTag = formatDataObject(
|
|
246
|
+
DEFAULT_REFERENCE_LABEL_TAG,
|
|
247
|
+
referenceLabel
|
|
248
|
+
);
|
|
249
|
+
segments.push(referenceLabelTag);
|
|
250
|
+
const merchantChannelValue = mapMerchantChannelFromType(qrType);
|
|
251
|
+
segments.push(
|
|
252
|
+
formatDataObject(DEFAULT_MERCHANT_CHANNEL_TAG, merchantChannelValue)
|
|
253
|
+
);
|
|
254
|
+
if (overrides?.purposeOfTransaction) {
|
|
255
|
+
segments.push(formatDataObject("12", overrides.purposeOfTransaction));
|
|
256
|
+
}
|
|
257
|
+
if (overrides?.custom) {
|
|
258
|
+
const entries = Object.entries(overrides.custom).sort(
|
|
259
|
+
([a], [b]) => a.localeCompare(b)
|
|
260
|
+
);
|
|
261
|
+
for (const [tag, value] of entries) {
|
|
262
|
+
validateSubTag(tag);
|
|
263
|
+
segments.push(formatDataObject(tag, value));
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return segments.join("");
|
|
267
|
+
}
|
|
268
|
+
function mapMerchantChannelFromType(value) {
|
|
269
|
+
return value === "DYNAMIC" ? "400" : "000";
|
|
270
|
+
}
|
|
271
|
+
function mapQrTypeFromChannel(channel) {
|
|
272
|
+
const normalized = channel?.trim().toUpperCase();
|
|
273
|
+
if (normalized === "400") {
|
|
274
|
+
return "DYNAMIC";
|
|
275
|
+
}
|
|
276
|
+
return "STATIC";
|
|
277
|
+
}
|
|
278
|
+
function formatDataObject(id, value) {
|
|
279
|
+
const length = value.length.toString().padStart(2, "0");
|
|
280
|
+
return `${id}${length}${value}`;
|
|
281
|
+
}
|
|
282
|
+
function sanitizeAmount(value) {
|
|
283
|
+
return typeof value === "number" ? value.toString() : value.trim();
|
|
284
|
+
}
|
|
285
|
+
function validateSubTag(tag) {
|
|
286
|
+
if (!/^[0-9A-Za-z]{2}$/.test(tag)) {
|
|
287
|
+
throw new Error(
|
|
288
|
+
`Le sous-tag additional data "${tag}" doit contenir exactement 2 caract\xE8res alphanum\xE9riques.`
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function validateAlias(alias) {
|
|
293
|
+
const uuidV4Regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
294
|
+
if (!uuidV4Regex.test(alias)) {
|
|
295
|
+
throw new Error("L'alias doit \xEAtre un UUID v4 valide.");
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
function validateReferenceLabel(reference) {
|
|
299
|
+
if (reference.length > 25) {
|
|
300
|
+
throw new Error("Le referenceLabel ne doit pas d\xE9passer 25 caract\xE8res.");
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
function normalizeQrType(type) {
|
|
304
|
+
const normalized = type.trim().toUpperCase();
|
|
305
|
+
if (normalized === "STATIC" || normalized === "DYNAMIC") {
|
|
306
|
+
return normalized;
|
|
307
|
+
}
|
|
308
|
+
throw new Error('Le param\xE8tre "qrType" doit \xEAtre "STATIC" ou "DYNAMIC".');
|
|
309
|
+
}
|
|
310
|
+
var UEMOA_COUNTRIES = /* @__PURE__ */ new Set(["BJ", "BF", "CI", "ML", "NE", "SN", "TG", "GW"]);
|
|
311
|
+
function validateCountryCode(code) {
|
|
312
|
+
if (!UEMOA_COUNTRIES.has(code.toUpperCase())) {
|
|
313
|
+
throw new Error("Le countryCode doit \xEAtre l'un des codes ISO2 de l'UEMOA (BJ, BF, CI, ML, NE, SN, TG, GW).");
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function validateAmount(amount) {
|
|
317
|
+
const normalized = typeof amount === "number" ? amount.toString() : amount.trim();
|
|
318
|
+
if (!/^\d+$/.test(normalized)) {
|
|
319
|
+
throw new Error("Le montant doit contenir uniquement des chiffres.");
|
|
320
|
+
}
|
|
321
|
+
if (normalized.length > 13) {
|
|
322
|
+
throw new Error("Le montant ne doit pas d\xE9passer 13 chiffres.");
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function computeCrc16(input) {
|
|
326
|
+
let crc = 65535;
|
|
327
|
+
const polynomial = 4129;
|
|
328
|
+
for (let i = 0; i < input.length; i += 1) {
|
|
329
|
+
crc ^= (input.codePointAt(i) ?? 0) << 8;
|
|
330
|
+
for (let j = 0; j < 8; j += 1) {
|
|
331
|
+
const hasHighBit = (crc & 32768) === 0;
|
|
332
|
+
crc = hasHighBit ? crc << 1 : crc << 1 ^ polynomial;
|
|
333
|
+
crc &= 65535;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return crc.toString(16).toUpperCase().padStart(4, "0");
|
|
337
|
+
}
|
|
338
|
+
function buildPayloadString(params, options) {
|
|
339
|
+
return createQrPayload(params, options).payload;
|
|
340
|
+
}
|
|
341
|
+
async function generateQrCodeSvg(input, options = {}) {
|
|
342
|
+
const { payload } = createQrPayload(input);
|
|
343
|
+
const size = options.size ?? DEFAULT_SVG_SIZE;
|
|
344
|
+
const margin = options.margin ?? DEFAULT_MARGIN;
|
|
345
|
+
const module = await getQrCodeModule();
|
|
346
|
+
const qr = module.create(payload, {
|
|
347
|
+
errorCorrectionLevel: "M"
|
|
348
|
+
});
|
|
349
|
+
const dotColor = options.dotColor ?? DEFAULT_DOT_COLOR;
|
|
350
|
+
const backgroundColor = options.backgroundColor ?? DEFAULT_BACKGROUND_COLOR;
|
|
351
|
+
return buildDotPatternSvg(qr, {
|
|
352
|
+
size,
|
|
353
|
+
margin,
|
|
354
|
+
dotColor,
|
|
355
|
+
backgroundColor,
|
|
356
|
+
logo: {
|
|
357
|
+
dataUrl: options.logoDataUrl ?? DEFAULT_PISPI_LOGO_DATA_URL,
|
|
358
|
+
sizeRatio: options.logoSizeRatio ?? DEFAULT_LOGO_SIZE_RATIO,
|
|
359
|
+
paddingRatio: options.logoPaddingRatio ?? DEFAULT_LOGO_PADDING_RATIO,
|
|
360
|
+
borderRadiusRatio: options.logoBorderRadiusRatio ?? DEFAULT_LOGO_BORDER_RADIUS_RATIO,
|
|
361
|
+
backgroundColor: options.logoBackgroundColor ?? DEFAULT_BACKGROUND_COLOR
|
|
362
|
+
}
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
function clamp(value, min, max) {
|
|
366
|
+
return Math.min(Math.max(value, min), max);
|
|
367
|
+
}
|
|
368
|
+
function formatSvgNumber(value) {
|
|
369
|
+
const normalized = Number.parseFloat(value.toFixed(3));
|
|
370
|
+
if (Number.isNaN(normalized)) {
|
|
371
|
+
return "0";
|
|
372
|
+
}
|
|
373
|
+
return normalized.toString();
|
|
374
|
+
}
|
|
375
|
+
var QRCode = {
|
|
376
|
+
// Original methods
|
|
377
|
+
createQrPayload,
|
|
378
|
+
buildPayloadString,
|
|
379
|
+
computeCrc16,
|
|
380
|
+
generateQrCodeSvg,
|
|
381
|
+
isValidPispiQrPayload,
|
|
382
|
+
// Simplified aliases
|
|
383
|
+
payload: buildPayloadString,
|
|
384
|
+
svg: generateQrCodeSvg,
|
|
385
|
+
validate: isValidPispiQrPayload,
|
|
386
|
+
raw: createQrPayload
|
|
387
|
+
// For when you need the object wrapper
|
|
388
|
+
};
|
|
389
|
+
var index_default = QRCode;
|
|
390
|
+
function isValidPispiQrPayload(value) {
|
|
391
|
+
const basicErrors = validatePayloadBasics(value);
|
|
392
|
+
if (basicErrors.length > 0) {
|
|
393
|
+
return { valid: false, errors: basicErrors };
|
|
394
|
+
}
|
|
395
|
+
const { segments, errors: parseErrors } = parseEmvSegments(value);
|
|
396
|
+
if (parseErrors.length > 0) {
|
|
397
|
+
return { valid: false, errors: parseErrors };
|
|
398
|
+
}
|
|
399
|
+
const segmentValidation = validateSegmentContent(segments, value);
|
|
400
|
+
if (segmentValidation.errors.length > 0) {
|
|
401
|
+
return { valid: false, errors: segmentValidation.errors };
|
|
402
|
+
}
|
|
403
|
+
const data = buildValidationData(segments, segmentValidation);
|
|
404
|
+
return {
|
|
405
|
+
valid: true,
|
|
406
|
+
errors: [],
|
|
407
|
+
data
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
function validatePayloadBasics(value) {
|
|
411
|
+
if (!value) {
|
|
412
|
+
return ["La payload doit \xEAtre une cha\xEEne non vide."];
|
|
413
|
+
}
|
|
414
|
+
if (value.length < 12) {
|
|
415
|
+
return ["Payload trop courte pour contenir des segments EMV."];
|
|
416
|
+
}
|
|
417
|
+
return [];
|
|
418
|
+
}
|
|
419
|
+
function parseEmvSegments(value) {
|
|
420
|
+
const segments = {};
|
|
421
|
+
const errors = [];
|
|
422
|
+
let cursor = 0;
|
|
423
|
+
try {
|
|
424
|
+
while (cursor < value.length) {
|
|
425
|
+
const tag = value.slice(cursor, cursor + 2);
|
|
426
|
+
const lengthStr = value.slice(cursor + 2, cursor + 4);
|
|
427
|
+
const length = Number.parseInt(lengthStr, 10);
|
|
428
|
+
if (Number.isNaN(length) || length < 0) {
|
|
429
|
+
errors.push(`Longueur invalide pour le tag ${tag}.`);
|
|
430
|
+
break;
|
|
431
|
+
}
|
|
432
|
+
const valueStart = cursor + 4;
|
|
433
|
+
const valueEnd = valueStart + length;
|
|
434
|
+
if (valueEnd > value.length) {
|
|
435
|
+
errors.push(`Segment ${tag} tronqu\xE9.`);
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
segments[tag] = value.slice(valueStart, valueEnd);
|
|
439
|
+
cursor = valueEnd;
|
|
440
|
+
}
|
|
441
|
+
} catch (error) {
|
|
442
|
+
errors.push(`Erreur lors de l'analyse de la payload: ${error?.message ?? error}`);
|
|
443
|
+
}
|
|
444
|
+
return { segments, errors };
|
|
445
|
+
}
|
|
446
|
+
function validateSegmentContent(segments, rawValue) {
|
|
447
|
+
const errors = [];
|
|
448
|
+
const formatErrors = validateFormatIndicator(segments["00"]);
|
|
449
|
+
const merchantInfoResult = extractMerchantInfo(segments["36"]);
|
|
450
|
+
const countryCodeResult = validateCountryCodeSegment(segments["58"]);
|
|
451
|
+
const additionalDataResult = extractAdditionalData(segments["62"]);
|
|
452
|
+
const crcErrors = validateCrcSegment(segments["63"], rawValue);
|
|
453
|
+
errors.push(
|
|
454
|
+
...formatErrors,
|
|
455
|
+
...merchantInfoResult.errors,
|
|
456
|
+
...countryCodeResult.errors,
|
|
457
|
+
...additionalDataResult.errors,
|
|
458
|
+
...crcErrors
|
|
459
|
+
);
|
|
460
|
+
return {
|
|
461
|
+
errors,
|
|
462
|
+
merchantInfo: merchantInfoResult.merchantInfo,
|
|
463
|
+
referenceLabel: additionalDataResult.referenceLabel,
|
|
464
|
+
merchantChannel: additionalDataResult.merchantChannel,
|
|
465
|
+
countryCode: countryCodeResult.countryCode
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
function validateFormatIndicator(formatIndicator) {
|
|
469
|
+
if (!formatIndicator) {
|
|
470
|
+
return ["Tag 00 (format indicator) manquant."];
|
|
471
|
+
}
|
|
472
|
+
if (formatIndicator !== "01") {
|
|
473
|
+
return ["Tag 00 invalide (doit \xEAtre 01)."];
|
|
474
|
+
}
|
|
475
|
+
return [];
|
|
476
|
+
}
|
|
477
|
+
function extractMerchantInfo(segment) {
|
|
478
|
+
if (!segment) {
|
|
479
|
+
return {
|
|
480
|
+
merchantInfo: null,
|
|
481
|
+
errors: ["Tag 36 (Merchant Account Information) manquant."]
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
try {
|
|
485
|
+
const merchantInfo = parseSubFields(segment);
|
|
486
|
+
const errors = [];
|
|
487
|
+
if (!merchantInfo["01"]) {
|
|
488
|
+
errors.push("Alias manquant dans les informations marchand (tag 36).");
|
|
489
|
+
}
|
|
490
|
+
return { merchantInfo, errors };
|
|
491
|
+
} catch (error) {
|
|
492
|
+
return {
|
|
493
|
+
merchantInfo: null,
|
|
494
|
+
errors: [`Erreur lors de l'analyse des informations marchand: ${error?.message ?? error}`]
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
function validateCountryCodeSegment(countryCode) {
|
|
499
|
+
if (!countryCode) {
|
|
500
|
+
return {
|
|
501
|
+
errors: ["Tag 58 (Country Code) manquant."]
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
return {
|
|
505
|
+
countryCode,
|
|
506
|
+
errors: []
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
function extractAdditionalData(segment) {
|
|
510
|
+
if (!segment) {
|
|
511
|
+
return {
|
|
512
|
+
errors: ["Tag 62 (Additional Data Field) manquant."]
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
try {
|
|
516
|
+
const additionalSegments = parseSubFields(segment);
|
|
517
|
+
const referenceLabel = additionalSegments["05"];
|
|
518
|
+
const merchantChannel = additionalSegments[DEFAULT_MERCHANT_CHANNEL_TAG];
|
|
519
|
+
const errors = [];
|
|
520
|
+
if (!merchantChannel) {
|
|
521
|
+
errors.push("Tag 11 (Merchant Channel) manquant dans les donn\xE9es additionnelles.");
|
|
522
|
+
}
|
|
523
|
+
return {
|
|
524
|
+
referenceLabel,
|
|
525
|
+
merchantChannel,
|
|
526
|
+
errors
|
|
527
|
+
};
|
|
528
|
+
} catch (error) {
|
|
529
|
+
return {
|
|
530
|
+
errors: [`Erreur lors de l'analyse des donn\xE9es additionnelles: ${error?.message ?? error}`]
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
function validateCrcSegment(crc, rawValue) {
|
|
535
|
+
if (!crc) {
|
|
536
|
+
return ["Tag 63 (CRC) manquant."];
|
|
537
|
+
}
|
|
538
|
+
const payloadWithoutCrc = rawValue.slice(0, -4);
|
|
539
|
+
const computedCrc = computeCrc16(payloadWithoutCrc);
|
|
540
|
+
if (crc !== computedCrc) {
|
|
541
|
+
return ["CRC invalide."];
|
|
542
|
+
}
|
|
543
|
+
return [];
|
|
544
|
+
}
|
|
545
|
+
function buildValidationData(segments, context) {
|
|
546
|
+
const amountValue = segments["54"];
|
|
547
|
+
const data = {
|
|
548
|
+
alias: context.merchantInfo?.["01"] ?? "",
|
|
549
|
+
countryCode: context.countryCode ?? "",
|
|
550
|
+
qrType: mapQrTypeFromChannel(context.merchantChannel),
|
|
551
|
+
referenceLabel: context.referenceLabel ?? ""
|
|
552
|
+
// Chaîne vide si Tag 05 est absent (optionnel)
|
|
553
|
+
};
|
|
554
|
+
if (amountValue !== void 0) {
|
|
555
|
+
data.amount = amountValue;
|
|
556
|
+
}
|
|
557
|
+
return data;
|
|
558
|
+
}
|
|
559
|
+
function parseSubFields(data) {
|
|
560
|
+
const segments = {};
|
|
561
|
+
let cursor = 0;
|
|
562
|
+
while (cursor < data.length) {
|
|
563
|
+
const tag = data.slice(cursor, cursor + 2);
|
|
564
|
+
const lengthStr = data.slice(cursor + 2, cursor + 4);
|
|
565
|
+
const length = Number.parseInt(lengthStr, 10);
|
|
566
|
+
if (Number.isNaN(length) || length < 0) {
|
|
567
|
+
throw new Error(`Longueur invalide pour le sous-tag ${tag}`);
|
|
568
|
+
}
|
|
569
|
+
const valueStart = cursor + 4;
|
|
570
|
+
const valueEnd = valueStart + length;
|
|
571
|
+
if (valueEnd > data.length) {
|
|
572
|
+
throw new Error(`Sous-segment ${tag} tronqu\xE9`);
|
|
573
|
+
}
|
|
574
|
+
const segmentValue = data.slice(valueStart, valueEnd);
|
|
575
|
+
segments[tag] = segmentValue;
|
|
576
|
+
cursor = valueEnd;
|
|
577
|
+
}
|
|
578
|
+
return segments;
|
|
579
|
+
}
|
|
580
|
+
function buildDotPatternSvg(qr, options) {
|
|
581
|
+
const modules = qr.modules;
|
|
582
|
+
const moduleCount = typeof modules?.size === "number" ? modules.size : modules.length;
|
|
583
|
+
if (typeof moduleCount !== "number" || Number.isNaN(moduleCount)) {
|
|
584
|
+
throw new TypeError("Format du QR Code inattendu: impossible de d\xE9terminer la taille de la matrice.");
|
|
585
|
+
}
|
|
586
|
+
const svgSize = options.size;
|
|
587
|
+
const margin = options.margin;
|
|
588
|
+
const drawableSize = svgSize - margin * 2;
|
|
589
|
+
const cellSize = drawableSize / moduleCount;
|
|
590
|
+
const dotRadius = cellSize * DOT_RADIUS_RATIO;
|
|
591
|
+
const finderRadius = cellSize * FINDER_CORNER_RADIUS;
|
|
592
|
+
const paths = [];
|
|
593
|
+
const backgroundRect = `<rect fill="${options.backgroundColor}" width="${svgSize}" height="${svgSize}" rx="${formatSvgNumber(
|
|
594
|
+
finderRadius
|
|
595
|
+
)}" />`;
|
|
596
|
+
const finderSize = 7;
|
|
597
|
+
const finderOrigins = [
|
|
598
|
+
[0, 0],
|
|
599
|
+
[moduleCount - finderSize, 0],
|
|
600
|
+
[0, moduleCount - finderSize]
|
|
601
|
+
];
|
|
602
|
+
for (const [fc, fr] of finderOrigins) {
|
|
603
|
+
paths.push(
|
|
604
|
+
...generateFinderPatternRects(
|
|
605
|
+
margin + fc * cellSize,
|
|
606
|
+
margin + fr * cellSize,
|
|
607
|
+
cellSize,
|
|
608
|
+
options.dotColor,
|
|
609
|
+
options.backgroundColor
|
|
610
|
+
)
|
|
611
|
+
);
|
|
612
|
+
}
|
|
613
|
+
for (let row = 0; row < moduleCount; row += 1) {
|
|
614
|
+
for (let col = 0; col < moduleCount; col += 1) {
|
|
615
|
+
if (!isDarkModule(modules, moduleCount, row, col)) {
|
|
616
|
+
continue;
|
|
617
|
+
}
|
|
618
|
+
if (isFinderPattern(moduleCount, row, col)) {
|
|
619
|
+
continue;
|
|
620
|
+
}
|
|
621
|
+
const x = margin + col * cellSize + cellSize / 2;
|
|
622
|
+
const y = margin + row * cellSize + cellSize / 2;
|
|
623
|
+
paths.push(
|
|
624
|
+
`<circle cx="${formatSvgNumber(x)}" cy="${formatSvgNumber(y)}" r="${formatSvgNumber(
|
|
625
|
+
dotRadius
|
|
626
|
+
)}" fill="${options.dotColor}" />`
|
|
627
|
+
);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
const logoSvg = generateLogoOverlay(
|
|
631
|
+
svgSize,
|
|
632
|
+
margin,
|
|
633
|
+
moduleCount,
|
|
634
|
+
cellSize,
|
|
635
|
+
options.logo
|
|
636
|
+
);
|
|
637
|
+
return [
|
|
638
|
+
`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 ${svgSize} ${svgSize}" shape-rendering="geometricPrecision">`,
|
|
639
|
+
backgroundRect,
|
|
640
|
+
...paths,
|
|
641
|
+
logoSvg,
|
|
642
|
+
"</svg>"
|
|
643
|
+
].join("");
|
|
644
|
+
}
|
|
645
|
+
function isFinderPattern(moduleCount, row, col) {
|
|
646
|
+
const patternSize = 7;
|
|
647
|
+
const inTop = row < patternSize;
|
|
648
|
+
const inBottom = row >= moduleCount - patternSize;
|
|
649
|
+
const inLeft = col < patternSize;
|
|
650
|
+
const inRight = col >= moduleCount - patternSize;
|
|
651
|
+
return inTop && inLeft || inTop && inRight || inBottom && inLeft;
|
|
652
|
+
}
|
|
653
|
+
function generateFinderPatternRects(originX, originY, cellSize, dotColor, backgroundColor) {
|
|
654
|
+
const fmt = formatSvgNumber;
|
|
655
|
+
const out7 = cellSize * 7;
|
|
656
|
+
const out5 = cellSize * 5;
|
|
657
|
+
const out3 = cellSize * 3;
|
|
658
|
+
const off1 = cellSize;
|
|
659
|
+
const off2 = cellSize * 2;
|
|
660
|
+
return [
|
|
661
|
+
`<rect x="${fmt(originX)}" y="${fmt(originY)}" width="${fmt(out7)}" height="${fmt(out7)}" fill="${dotColor}" />`,
|
|
662
|
+
`<rect x="${fmt(originX + off1)}" y="${fmt(originY + off1)}" width="${fmt(out5)}" height="${fmt(out5)}" fill="${backgroundColor}" />`,
|
|
663
|
+
`<rect x="${fmt(originX + off2)}" y="${fmt(originY + off2)}" width="${fmt(out3)}" height="${fmt(out3)}" fill="${dotColor}" />`
|
|
664
|
+
];
|
|
665
|
+
}
|
|
666
|
+
function generateLogoOverlay(svgSize, margin, moduleCount, cellSize, logo) {
|
|
667
|
+
if (!logo.dataUrl) {
|
|
668
|
+
return "";
|
|
669
|
+
}
|
|
670
|
+
const qrDrawableSize = moduleCount * cellSize;
|
|
671
|
+
const logoSize = qrDrawableSize * clamp(logo.sizeRatio, 0.05, 0.5);
|
|
672
|
+
const logoPadding = logoSize * clamp(logo.paddingRatio, 0, 0.25);
|
|
673
|
+
const backgroundSize = logoSize + logoPadding * 2;
|
|
674
|
+
const logoBorderRadius = clamp(logo.borderRadiusRatio, 0, 0.5) * backgroundSize;
|
|
675
|
+
const originX = margin + (qrDrawableSize - backgroundSize) / 2;
|
|
676
|
+
const originY = margin + (qrDrawableSize - backgroundSize) / 2;
|
|
677
|
+
return [
|
|
678
|
+
`<g class="pispi-logo" transform="translate(${formatSvgNumber(originX)}, ${formatSvgNumber(originY)})" pointer-events="none">`,
|
|
679
|
+
`<rect width="${formatSvgNumber(backgroundSize)}" height="${formatSvgNumber(backgroundSize)}" rx="${formatSvgNumber(
|
|
680
|
+
logoBorderRadius
|
|
681
|
+
)}" fill="${logo.backgroundColor}" opacity="0.95"/>`,
|
|
682
|
+
`<image x="${formatSvgNumber(logoPadding)}" y="${formatSvgNumber(logoPadding)}" width="${formatSvgNumber(
|
|
683
|
+
logoSize
|
|
684
|
+
)}" height="${formatSvgNumber(logoSize)}" href="${logo.dataUrl}" xlink:href="${logo.dataUrl}" preserveAspectRatio="xMidYMid meet"/>`,
|
|
685
|
+
"</g>"
|
|
686
|
+
].join("");
|
|
687
|
+
}
|
|
688
|
+
function isDarkModule(modules, moduleCount, row, col) {
|
|
689
|
+
if (modules?.data && Array.isArray(modules.data)) {
|
|
690
|
+
const index = row * moduleCount + col;
|
|
691
|
+
return Boolean(modules.data[index]);
|
|
692
|
+
}
|
|
693
|
+
if (typeof modules?.get === "function") {
|
|
694
|
+
return Boolean(modules.get(row, col));
|
|
695
|
+
}
|
|
696
|
+
if (Array.isArray(modules[row])) {
|
|
697
|
+
return Boolean(modules[row][col]);
|
|
698
|
+
}
|
|
699
|
+
return false;
|
|
700
|
+
}
|
|
701
|
+
export {
|
|
702
|
+
DEFAULT_PISPI_LOGO_DATA_URL,
|
|
703
|
+
PISPI_AMBER_LOGO_DATA_URL,
|
|
704
|
+
PISPI_QRCODE_LOGO_DATA_URL,
|
|
705
|
+
QRCode,
|
|
706
|
+
buildPayloadString,
|
|
707
|
+
computeCrc16,
|
|
708
|
+
createQrPayload,
|
|
709
|
+
index_default as default,
|
|
710
|
+
generateQrCodeSvg,
|
|
711
|
+
isValidPispiQrPayload
|
|
712
|
+
};
|