tf-checkout-react 1.3.46 → 1.3.47-beta.2

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.
Files changed (38) hide show
  1. package/dist/.DS_Store +0 -0
  2. package/dist/api/index.d.ts +10 -0
  3. package/dist/components/addonsContainer/utils/index.d.ts +1 -4
  4. package/dist/components/billing-info-container/utils.d.ts +20 -1
  5. package/dist/components/myTicketsContainer/tableConfig.d.ts +1 -4
  6. package/dist/components/ticketsContainer/TicketRow.d.ts +6 -1
  7. package/dist/components/ticketsContainer/TicketsSection.d.ts +6 -1
  8. package/dist/components/ticketsContainer/crypto.d.ts +24 -0
  9. package/dist/tf-checkout-react.cjs.development.js +4701 -1324
  10. package/dist/tf-checkout-react.cjs.development.js.map +1 -1
  11. package/dist/tf-checkout-react.cjs.production.min.js +1 -1
  12. package/dist/tf-checkout-react.cjs.production.min.js.map +1 -1
  13. package/dist/tf-checkout-react.esm.js +4702 -1324
  14. package/dist/tf-checkout-react.esm.js.map +1 -1
  15. package/dist/tf-checkout-styles.css +1 -1
  16. package/dist/types/billing-info-data.d.ts +5 -0
  17. package/dist/utils/getWalletName.d.ts +1 -0
  18. package/dist/utils/loadProfile.d.ts +32 -0
  19. package/package.json +3 -1
  20. package/src/.DS_Store +0 -0
  21. package/src/api/index.ts +42 -1
  22. package/src/assets/.DS_Store +0 -0
  23. package/src/components/addonsContainer/utils/index.tsx +1 -1
  24. package/src/components/billing-info-container/index.tsx +271 -11
  25. package/src/components/billing-info-container/style.css +1 -1
  26. package/src/components/billing-info-container/utils.ts +98 -5
  27. package/src/components/loginModal/index.tsx +70 -5
  28. package/src/components/loginModal/style.css +2 -2
  29. package/src/components/ticketsContainer/TicketRow.tsx +55 -5
  30. package/src/components/ticketsContainer/TicketsSection.tsx +15 -1
  31. package/src/components/ticketsContainer/crypto.js +528 -0
  32. package/src/components/ticketsContainer/index.tsx +216 -2
  33. package/src/components/waitingList/index.tsx +1 -1
  34. package/src/env.ts +2 -2
  35. package/src/types/billing-info-data.ts +6 -0
  36. package/src/utils/getWalletName.tsx +10 -0
  37. package/src/utils/loadProfile.tsx +47 -0
  38. package/src/components/common/dist/PhoneNumberField.js +0 -96
@@ -1 +1 @@
1
- .button-container{display:flex;justify-content:center;padding:20px}.billing-info-container{margin:0 auto;max-width:800px}.billing-info-container .is-half{width:49%}.billing-info-container p{color:#000}.billing-info-container .main-header{font-size:2rem;font-weight:600}.billing-info-container__twoFields{display:flex;justify-content:space-between;margin-top:15px}.billing-info-container__singleField{margin-top:15px}button{margin-top:10px}.account-actions-block{color:#182026;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,Icons16,sans-serif;margin-top:10px}.MuiButtonBase-root.MuiButton-root,.MuiButtonBase-root.MuiButton-root:hover,.login-register-button{background-color:#212529;border:#f28051;border-radius:5px;color:#fff;cursor:pointer;display:block;font-family:Inter-Bold;font-size:26px;font-weight:700;line-height:1.15;margin-top:10px;min-height:46px;outline:none;overflow:hidden;padding:14px 12px 12px;position:relative;text-align:center;text-overflow:ellipsis;text-transform:uppercase;width:49%}.logo-image-container{margin-top:5px;text-align:center;width:49%}.logo-image-container img{height:30px}.login-block{align-items:center;display:flex;flex-direction:column}.login-register-button:hover{background-color:#505050!important;border-color:#505050!important}.login-register-block{display:flex;justify-content:space-between}@media only screen and (max-width:820px){.billing-info-container{width:90%}.billing-info-container .main-header{font-size:1.5rem}}.email-checking{margin-bottom:15px}.forgot-password-modal .forgot-password-container{margin:0 auto;max-width:800px}.forgot-password-modal .title{background-color:#fff;font-family:Inter;font-size:18px;font-weight:700}.forgot-password-modal .forgot-password-container__singleField{margin-top:15px}.forgot-password-modal .forgot-password-action-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin-top:10px;outline:none;padding:10px;text-transform:uppercase;width:100%}.forgot-password-modal .forgot-password-action-button button:hover:enabled{background-color:#505050;border-color:#505050}.forgot-password-modal .login{margin-top:10px;text-align:center}.forgot-password-modal .login span{cursor:pointer}.forgot-password-modal .login span:hover{text-decoration:underline}.forgot-password-modal button[disabled]{cursor:unset;opacity:.7}.modal-title{align-items:center;background-color:#fff;display:flex;font-family:Inter;font-size:18px;font-weight:700;height:49px;line-height:22px;padding-left:25px;position:relative}.login-modal-body{padding:15px 25px}.login-modal-body input{background:#fff!important}.login-modal-body__email,.login-modal-body__password{margin-bottom:20px}.login-action-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin:10px 0;outline:none;padding:10px;width:100%}.login-action-button button:hover{background-color:#505050;border-color:#505050}.server_auth__error{color:red;font-family:Inter;font-size:12px;font-style:normal;padding-left:25px;padding-top:15px}.info-text-for-login{font-size:14px;margin-bottom:4px;padding-left:10px}.forgot-password{text-align:center}.forgot-password span{cursor:pointer}.forgot-password span:hover{text-decoration:underline}.signup-modal .signup-container{margin:0 auto;max-width:800px}.signup-modal .title{background-color:#fff;font-family:Inter;font-size:18px;font-weight:700}.signup-modal .signup-container .is-half{width:49%}.signup-modal .signup-container__twoFields{display:flex;justify-content:space-between;margin-top:15px}.signup-modal .signup-container__singleField{margin-top:15px}.signup-modal button{margin-top:10px}.signup-modal .signup-action-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin-top:10px;outline:none;padding:10px;text-transform:uppercase;width:100%}.signup-modal .signup-action-button button:hover:enabled{background-color:#505050;border-color:#505050}.signup-modal .login{margin-top:10px;text-align:center}.signup-modal .login span{cursor:pointer}.signup-modal .login span:hover{text-decoration:underline}.signup-modal button[disabled]{cursor:unset;opacity:.7}.timer{background-color:#000;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=);background-position:15px;background-repeat:no-repeat;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;margin:0 0 6px;max-width:300px;overflow:hidden;padding:15px 15px 15px 50px;pointer-events:auto;position:absolute;right:15px;width:300px}.timer .close-icon{cursor:pointer;display:flex;position:absolute;right:10px;top:10px}.timer .countdown{font-weight:700;margin-top:10px}.payment_page{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,Icons16,sans-serif}.payment_page .order_info_section{padding:15px 0}.payment_page .order_info_section .order_info_block{padding-bottom:15px;padding-top:15px}.payment_page .order_info_section .order_info_block .field-underline{border-bottom:1px solid #000;padding-bottom:15px}.payment_page .order_info_section .order_info_block .order_info_title{font-size:14px;font-weight:700;padding-bottom:3px}.payment_page .order_info_section .order_info_block .order_info_text{font-size:16px;line-height:1.15;outline:none}.payment_page .MuiBox-root{margin-left:auto;margin-right:auto;padding:20px;text-align:center}.payment_page .payment_info_label{padding:20px 0;text-align:center}.payment_page .payment_form{color:#fff;padding:20px}.payment_page .payment_form input,.payment_page .payment_form label{color:#fff}.payment_page .payment_button{padding-top:20px;text-align:center}.card_form_inner{background:#232323;border-radius:8px;margin:0 auto 20px;min-width:325px;padding:15px;width:50%}.card_form_inner .card_label_text{color:#fff}.card_form_inner .StripeElement{margin:5px 0 10px}.card_label_text{color:#fff}.payment_button{padding-top:15px;text-align:center}.payment_button button{background-color:#212529;border-radius:8px;color:#fff;cursor:pointer;font-size:26px;padding:15px 30px;transition:opacity .5s;width:200px}.payment_button button:hover{opacity:.7}.disabled-payment-button button{opacity:.3;pointer-events:none;user-select:none}.checkout_error_block{color:#e53935;font-weight:600;padding:15px 0}.zip_element p{margin-bottom:0}.zip_element input{background-color:#000;border:none;color:#fff;font-size:18px;margin-top:5px;outline:none;width:100%}.confirmation-page{margin:0 auto;max-width:1024px}.confirmation-page button{margin-top:inherit}.confirmation-page .strong-text{font-weight:700}.confirmation-page .title{color:#333;font-size:24px;font-weight:600}.confirmation-page .share-message-section{background:#dff0d8;border:1px solid #d6e9c6;border-radius:5px;color:#2c7221;display:flex;flex-direction:column;margin:20px 0;padding:15px}.confirmation-page .main{font-size:15px;font-weight:700}.confirmation-page .helper,.confirmation-page .main{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,Icons16,sans-serif}.confirmation-page .helper{font-size:14px;margin-top:5px}.confirmation-page .referral_text_image_section{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin:20px 0}.confirmation-page .referral_text_section{margin:10px}.confirmation-page .referral_title_text{color:#f08057;font-size:28px;padding-bottom:10px}.confirmation-page .referral_text{font-size:18px}.confirmation-page .referral_text_image_section img{margin:10px;max-width:200px}.confirmation-page .share_wrapper{column-gap:5rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));margin:10px}.confirmation-page .invitation_title{font-size:22px;padding-bottom:12px;padding-top:12px}.confirmation-page .share_section{display:flex;flex-wrap:wrap;justify-content:space-between;margin:0 -10px}.confirmation-page .invitation_section{flex:1 1;padding:0 5px}.confirmation-page .share_buttons{display:grid;flex-wrap:wrap;margin:0 -7px}.confirmation-page .convenient_buttons{margin-top:10px}.confirmation-page .social-media-btns{grid-gap:5px;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.confirmation-page .sharing-btn{background-color:#000;flex:1 1;min-width:130px}.confirmation-page .sharing-btn a{text-decoration:none}.confirmation-page .share-by-link{background:#000;color:#fff;padding:10px}.confirmation-page .share-by-link.label{margin:0;padding:0;text-align:left}.confirmation-page .share-btn-inner{align-items:center;background-color:#000;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-flex;padding:0;text-align:left;width:100%}.confirmation-page .share-input{background-color:#fff;border:none;outline:none;padding:5px;text-align:left;width:300px}.confirmation-page .share-text{display:block;font-size:13px;font-weight:600;padding-top:8px;width:100%}.confirmation-page .pricing-section_wrapper{background:#e3e3e3;border:1px solid #dcdcdc;display:grid;grid-template-columns:1fr 1fr;margin:10px 0;padding:15px}.confirmation-page .pricing-section_label{font-weight:600}.confirmation-page .pricing-section_sublabel{font-size:14px;font-weight:100}.confirmation-page .pricing-section_price{font-weight:600;text-align:right}.confirmation-page .share-by-link-copy-icon{align-items:center;background-color:#32325d;border-radius:4px;color:#fff;cursor:pointer;display:flex;justify-content:center;margin-left:8px;padding:10px;transition:all .15s ease}.confirmation-page .share-by-link-copy-icon:hover{background-color:#505050}.confirmation-page .share-by-link-copy-icon img{width:14px}.confirmation-page .social-media-sharing{background-color:#000;color:#fff;cursor:pointer;padding:10px;text-align:center}.confirmation-page .share-icon{border-radius:4px;display:inline-flex}@media only screen and (max-width:1050px){.confirmation-page .share_wrapper{column-gap:0;display:grid;grid-template-columns:unset;margin:15px}}@media only screen and (max-width:480px){.confirmation-page .social-media-btns{grid-template-columns:unset}.confirmation-page .share-input{width:250px}}body{margin:0;padding:0}.get-tickets-page{width:100%}.event-detail__tier{background-color:#fff;padding:17px 35px 20px}.event-detail__tier-name{color:#000;font-family:Inter-Bold;font-family:Bebas Neue;font-size:.85rem;font-weight:700;letter-spacing:.2em;line-height:1.3;margin-bottom:8px;margin-top:16px;padding-right:20%;text-transform:uppercase}.event-detail__tier-status{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;margin-top:8px;width:100%}.event-detail__tier-status.ticket-button{background-color:#212529;border:3px solid #000;border-radius:0;color:#fff;cursor:pointer;font-weight:700;letter-spacing:.2em;line-height:1.5;margin-bottom:10px;width:200px}.event-tickets-container{align-items:center;display:flex;justify-content:space-between}.event-detail__tier-status.ticket-button.true{background-color:#c1c3c6;border-color:#afb0b1}.event-detail__tier-price{color:#000;font-family:Inter-Bold;font-size:1.5rem;line-height:1;text-align:center}.event-detail__tier-price p{margin:0}.event-detail__tier-price .fees{font-size:14px;margin-top:4px;text-align:left}.event-detail__tier-price .old-price{color:red;font-size:1.3rem;margin-bottom:5px;text-decoration:line-through}.alert-info{align-items:center;background-color:#d9edf7;border:1px solid #bce8f1;border-radius:4px;color:#3a87ad;display:flex;font-size:1em;justify-content:center;margin:0 35px;padding:8px 15px;text-shadow:0 1px 0 hsla(0,0%,100%,.5)}.alert-info svg{margin-right:4px}.event-detail__tier-state{color:#30bc9d;font-family:Inter-Bold;font-size:.75rem;font-weight:300;line-height:1;text-align:right;text-transform:uppercase}.event-detail__tier-state .ticket-not-started-message{color:#000;text-align:left;text-transform:none;width:50px}.promo-code-block input{font-size:14px;padding:1px 8px}.book-button{background-color:#212529;border:3px solid #000;border-radius:0;color:#fff;cursor:pointer;display:block;font-size:26px;font-weight:700;height:50px;letter-spacing:.2em;line-height:1.5;margin:25px auto 10px;text-align:center;width:100%}.book-button:hover{background-color:#505050;border-color:#505050}.loader-container{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.get-tickets-paper::-webkit-scrollbar{width:5px}.get-tickets-paper::-webkit-scrollbar-track{background:#f1f1f1}.get-tickets-paper::-webkit-scrollbar-thumb{background:#888}.get-tickets-paper::-webkit-scrollbar-thumb:hover{background:#555}.get-tickets .get-tickets__selectbox{width:100%}.disabled{pointer-events:none;user-select:none}.hidden{display:none}.event-closed-message{font-family:Bebas Neue;letter-spacing:.5px}.countdown p{margin:0}.countdown .title{font-weight:700}.countdown .message{font-weight:700;margin-top:20px}.waiting-list{padding:17px 35px 20px}.waiting-list .field-item{margin-bottom:30px}.waiting-list .waiting-list-button{width:100%!important}.waiting-list .waiting-list-button:hover{background-color:#505050}.waiting-list .success-message{margin-bottom:15px;text-align:center}.waiting-list .success-message p{margin:0}.waiting-list .no-tickets-text{font-weight:700;text-align:center}.waiting-list .added-success-message{font-size:22px;margin-bottom:10px}.my-ticket{padding:30px}.my-ticket-table{margin-top:30px}.my-ticket .loading{background-color:rgba(0,0,0,.4);height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100%}.my-ticket .event-info,.my-ticket .loading{align-items:center;display:flex}.my-ticket thead th{font-weight:700}.my-ticket .event-info img{margin-right:10px;width:50px}.my-ticket .order-details-button{background-color:#32325d;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:10px 14px;transition:all .15s ease}.my-ticket .order-details-button:hover{background-color:#505050}.order-details{margin:0 auto;max-width:940px}.order-details .loading{align-items:center;background-color:rgba(0,0,0,.4);display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:1400}.order-details .layout-title{font-size:24px;font-weight:400}.order-details .sub-title{font-size:18px;font-weight:400;margin:10px 0}.order-details .order-summary-box{margin-top:30px}.order-details .total-row td,.order-details th{color:#fff;font-weight:700}.order-details .tickets-box{margin-top:30px}.order-details .ticket-add-on-table{background-color:#fcf8e3}.order-details .action-button{background-color:#212529;border:1px solid #fff;border-radius:0;color:#fff;cursor:pointer;display:block;font-family:Bebas Neue;font-size:14px;font-weight:400;line-height:normal;margin-bottom:20px;margin-top:20px;min-height:auto;outline:none;overflow:hidden;padding:12px;position:relative;text-align:center;text-decoration:none;text-overflow:ellipsis;text-transform:uppercase;width:max-content}.order-details .download-button:hover{background-color:#505050}.order-details .personal-link{padding:20px 0}.order-details .total-referrer{padding:0 0 20px}.resale-modal .field-box{display:flex;margin-bottom:10px}.resale-modal .field-box .icon{align-items:center;display:flex;height:56px;justify-content:center;min-width:44px}.resale-modal .field-box .empty-box{min-width:44px}.resale-modal .resale-action-button button{background-color:#212529;color:#fff;cursor:pointer;width:100%}.resale-modal .resale-action-button button[disabled]{opacity:.7}.resale-modal .resale-action-button button:hover{background-color:#505050;border-color:#505050;width:100%}.reset-password{margin:0 auto;max-width:300px;padding:14px}.reset-password .title{font-size:20px;font-weight:700}.reset-password .field-item{margin-top:14px}.reset-password .action-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin-top:14px;outline:none;padding:10px;text-transform:uppercase;width:100%}.reset-password .action-button button:hover:enabled{background-color:#505050;border-color:#505050}.reset-password .action-button button[disabled]{cursor:unset;opacity:.7}
1
+ .button-container{display:flex;justify-content:center;padding:20px}.billing-info-container{margin:0 auto;max-width:800px}.billing-info-container .is-half{width:49%}.billing-info-container p{color:#000}.billing-info-container .main-header{font-size:2rem;font-weight:600}.billing-info-container__twoFields{display:flex;justify-content:space-between;margin-top:15px}.billing-info-container__singleField{margin-top:15px}button{margin-top:10px}.account-actions-block,.crypto-actions-block{color:#182026;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,Icons16,sans-serif;margin-top:10px}.login-register-button,.MuiButtonBase-root.MuiButton-root,.MuiButtonBase-root.MuiButton-root:hover{background-color:#212529;border:#f28051;border-radius:5px;color:#fff;cursor:pointer;display:block;font-family:Inter-Bold;font-size:26px;font-weight:700;line-height:1.15;margin-top:10px;min-height:46px;outline:none;overflow:hidden;padding:14px 12px 12px;position:relative;text-align:center;text-overflow:ellipsis;text-transform:uppercase;width:49%}.logo-image-container{margin-top:5px;text-align:center;width:49%}.logo-image-container img{height:30px}.login-block{align-items:center;display:flex;flex-direction:column}.login-register-button:hover{background-color:#505050!important;border-color:#505050!important}.login-register-block{display:flex;justify-content:space-between}@media only screen and (max-width:820px){.billing-info-container{width:90%}.billing-info-container .main-header{font-size:1.5rem}}.email-checking{margin-bottom:15px}.forgot-password-modal .forgot-password-container{margin:0 auto;max-width:800px}.forgot-password-modal .title{background-color:#fff;font-family:Inter;font-size:18px;font-weight:700}.forgot-password-modal .forgot-password-container__singleField{margin-top:15px}.forgot-password-modal .forgot-password-action-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin-top:10px;outline:none;padding:10px;text-transform:uppercase;width:100%}.forgot-password-modal .forgot-password-action-button button:hover:enabled{background-color:#505050;border-color:#505050}.forgot-password-modal .login{margin-top:10px;text-align:center}.forgot-password-modal .login span{cursor:pointer}.forgot-password-modal .login span:hover{text-decoration:underline}.forgot-password-modal button[disabled]{cursor:unset;opacity:.7}.modal-title{align-items:center;background-color:#fff;display:flex;font-family:Inter;font-size:18px;font-weight:700;height:49px;line-height:22px;padding-left:25px;position:relative}.login-modal-body{padding:15px 25px}.login-modal-body input{background:#fff!important}.login-modal-body__email,.login-modal-body__password{margin-bottom:20px}.login-action-button button,.login-wallet-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin:10px 0;outline:none;padding:10px;width:100%}.login-action-button button:hover,.login-wallet-button button:hover{background-color:#505050;border-color:#505050}.server_auth__error{color:red;font-family:Inter;font-size:12px;font-style:normal;padding-left:25px;padding-top:15px}.info-text-for-login{font-size:14px;margin-bottom:4px;padding-left:10px}.forgot-password{text-align:center}.forgot-password span{cursor:pointer}.forgot-password span:hover{text-decoration:underline}.signup-modal .signup-container{margin:0 auto;max-width:800px}.signup-modal .title{background-color:#fff;font-family:Inter;font-size:18px;font-weight:700}.signup-modal .signup-container .is-half{width:49%}.signup-modal .signup-container__twoFields{display:flex;justify-content:space-between;margin-top:15px}.signup-modal .signup-container__singleField{margin-top:15px}.signup-modal button{margin-top:10px}.signup-modal .signup-action-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin-top:10px;outline:none;padding:10px;text-transform:uppercase;width:100%}.signup-modal .signup-action-button button:hover:enabled{background-color:#505050;border-color:#505050}.signup-modal .login{margin-top:10px;text-align:center}.signup-modal .login span{cursor:pointer}.signup-modal .login span:hover{text-decoration:underline}.signup-modal button[disabled]{cursor:unset;opacity:.7}.timer{background-color:#000;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=);background-position:15px;background-repeat:no-repeat;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;margin:0 0 6px;max-width:300px;overflow:hidden;padding:15px 15px 15px 50px;pointer-events:auto;position:absolute;right:15px;width:300px}.timer .close-icon{cursor:pointer;display:flex;position:absolute;right:10px;top:10px}.timer .countdown{font-weight:700;margin-top:10px}.payment_page{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,Icons16,sans-serif}.payment_page .order_info_section{padding:15px 0}.payment_page .order_info_section .order_info_block{padding-bottom:15px;padding-top:15px}.payment_page .order_info_section .order_info_block .field-underline{border-bottom:1px solid #000;padding-bottom:15px}.payment_page .order_info_section .order_info_block .order_info_title{font-size:14px;font-weight:700;padding-bottom:3px}.payment_page .order_info_section .order_info_block .order_info_text{font-size:16px;line-height:1.15;outline:none}.payment_page .MuiBox-root{margin-left:auto;margin-right:auto;padding:20px;text-align:center}.payment_page .payment_info_label{padding:20px 0;text-align:center}.payment_page .payment_form{color:#fff;padding:20px}.payment_page .payment_form input,.payment_page .payment_form label{color:#fff}.payment_page .payment_button{padding-top:20px;text-align:center}.card_form_inner{background:#232323;border-radius:8px;margin:0 auto 20px;min-width:325px;padding:15px;width:50%}.card_form_inner .card_label_text{color:#fff}.card_form_inner .StripeElement{margin:5px 0 10px}.card_label_text{color:#fff}.payment_button{padding-top:15px;text-align:center}.payment_button button{background-color:#212529;border-radius:8px;color:#fff;cursor:pointer;font-size:26px;padding:15px 30px;transition:opacity .5s;width:200px}.payment_button button:hover{opacity:.7}.disabled-payment-button button{opacity:.3;pointer-events:none;user-select:none}.checkout_error_block{color:#e53935;font-weight:600;padding:15px 0}.zip_element p{margin-bottom:0}.zip_element input{background-color:#000;border:none;color:#fff;font-size:18px;margin-top:5px;outline:none;width:100%}.confirmation-page{margin:0 auto;max-width:1024px}.confirmation-page button{margin-top:inherit}.confirmation-page .strong-text{font-weight:700}.confirmation-page .title{color:#333;font-size:24px;font-weight:600}.confirmation-page .share-message-section{background:#dff0d8;border:1px solid #d6e9c6;border-radius:5px;color:#2c7221;display:flex;flex-direction:column;margin:20px 0;padding:15px}.confirmation-page .main{font-size:15px;font-weight:700}.confirmation-page .helper,.confirmation-page .main{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,Icons16,sans-serif}.confirmation-page .helper{font-size:14px;margin-top:5px}.confirmation-page .referral_text_image_section{align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;margin:20px 0}.confirmation-page .referral_text_section{margin:10px}.confirmation-page .referral_title_text{color:#f08057;font-size:28px;padding-bottom:10px}.confirmation-page .referral_text{font-size:18px}.confirmation-page .referral_text_image_section img{margin:10px;max-width:200px}.confirmation-page .share_wrapper{column-gap:5rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));margin:10px}.confirmation-page .invitation_title{font-size:22px;padding-bottom:12px;padding-top:12px}.confirmation-page .share_section{display:flex;flex-wrap:wrap;justify-content:space-between;margin:0 -10px}.confirmation-page .invitation_section{flex:1 1;padding:0 5px}.confirmation-page .share_buttons{display:grid;flex-wrap:wrap;margin:0 -7px}.confirmation-page .convenient_buttons{margin-top:10px}.confirmation-page .social-media-btns{grid-gap:5px;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.confirmation-page .sharing-btn{background-color:#000;flex:1 1;min-width:130px}.confirmation-page .sharing-btn a{text-decoration:none}.confirmation-page .share-by-link{background:#000;color:#fff;padding:10px}.confirmation-page .share-by-link.label{margin:0;padding:0;text-align:left}.confirmation-page .share-btn-inner{align-items:center;background-color:#000;box-sizing:border-box;color:#fff;cursor:pointer;display:inline-flex;padding:0;text-align:left;width:100%}.confirmation-page .share-input{background-color:#fff;border:none;outline:none;padding:5px;text-align:left;width:300px}.confirmation-page .share-text{display:block;font-size:13px;font-weight:600;padding-top:8px;width:100%}.confirmation-page .pricing-section_wrapper{background:#e3e3e3;border:1px solid #dcdcdc;display:grid;grid-template-columns:1fr 1fr;margin:10px 0;padding:15px}.confirmation-page .pricing-section_label{font-weight:600}.confirmation-page .pricing-section_sublabel{font-size:14px;font-weight:100}.confirmation-page .pricing-section_price{font-weight:600;text-align:right}.confirmation-page .share-by-link-copy-icon{align-items:center;background-color:#32325d;border-radius:4px;color:#fff;cursor:pointer;display:flex;justify-content:center;margin-left:8px;padding:10px;transition:all .15s ease}.confirmation-page .share-by-link-copy-icon:hover{background-color:#505050}.confirmation-page .share-by-link-copy-icon img{width:14px}.confirmation-page .social-media-sharing{background-color:#000;color:#fff;cursor:pointer;padding:10px;text-align:center}.confirmation-page .share-icon{border-radius:4px;display:inline-flex}@media only screen and (max-width:1050px){.confirmation-page .share_wrapper{column-gap:0;display:grid;grid-template-columns:unset;margin:15px}}@media only screen and (max-width:480px){.confirmation-page .social-media-btns{grid-template-columns:unset}.confirmation-page .share-input{width:250px}}body{margin:0;padding:0}.get-tickets-page{width:100%}.event-detail__tier{background-color:#fff;padding:17px 35px 20px}.event-detail__tier-name{color:#000;font-family:Inter-Bold;font-family:Bebas Neue;font-size:.85rem;font-weight:700;letter-spacing:.2em;line-height:1.3;margin-bottom:8px;margin-top:16px;padding-right:20%;text-transform:uppercase}.event-detail__tier-status{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;margin-top:8px;width:100%}.event-detail__tier-status.ticket-button{background-color:#212529;border:3px solid #000;border-radius:0;color:#fff;cursor:pointer;font-weight:700;letter-spacing:.2em;line-height:1.5;margin-bottom:10px;width:200px}.event-tickets-container{align-items:center;display:flex;justify-content:space-between}.event-detail__tier-status.ticket-button.true{background-color:#c1c3c6;border-color:#afb0b1}.event-detail__tier-price{color:#000;font-family:Inter-Bold;font-size:1.5rem;line-height:1;text-align:center}.event-detail__tier-price p{margin:0}.event-detail__tier-price .fees{font-size:14px;margin-top:4px;text-align:left}.event-detail__tier-price .old-price{color:red;font-size:1.3rem;margin-bottom:5px;text-decoration:line-through}.alert-info{align-items:center;background-color:#d9edf7;border:1px solid #bce8f1;border-radius:4px;color:#3a87ad;display:flex;font-size:1em;justify-content:center;margin:0 35px;padding:8px 15px;text-shadow:0 1px 0 hsla(0,0%,100%,.5)}.alert-info svg{margin-right:4px}.event-detail__tier-state{color:#30bc9d;font-family:Inter-Bold;font-size:.75rem;font-weight:300;line-height:1;text-align:right;text-transform:uppercase}.event-detail__tier-state .ticket-not-started-message{color:#000;text-align:left;text-transform:none;width:50px}.promo-code-block input{font-size:14px;padding:1px 8px}.book-button{background-color:#212529;border:3px solid #000;border-radius:0;color:#fff;cursor:pointer;display:block;font-size:26px;font-weight:700;height:50px;letter-spacing:.2em;line-height:1.5;margin:25px auto 10px;text-align:center;width:100%}.book-button:hover{background-color:#505050;border-color:#505050}.loader-container{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.get-tickets-paper::-webkit-scrollbar{width:5px}.get-tickets-paper::-webkit-scrollbar-track{background:#f1f1f1}.get-tickets-paper::-webkit-scrollbar-thumb{background:#888}.get-tickets-paper::-webkit-scrollbar-thumb:hover{background:#555}.get-tickets .get-tickets__selectbox{width:100%}.disabled{pointer-events:none;user-select:none}.hidden{display:none}.event-closed-message{font-family:Bebas Neue;letter-spacing:.5px}.countdown p{margin:0}.countdown .title{font-weight:700}.countdown .message{font-weight:700;margin-top:20px}.waiting-list{padding:17px 35px 20px}.waiting-list .field-item{margin-bottom:30px}.waiting-list .waiting-list-button{width:100%!important}.waiting-list .waiting-list-button:hover{background-color:#505050}.waiting-list .success-message{margin-bottom:15px;text-align:center}.waiting-list .success-message p{margin:0}.waiting-list .no-tickets-text{font-weight:700;text-align:center}.waiting-list .added-success-message{font-size:22px;margin-bottom:10px}.my-ticket{padding:30px}.my-ticket-table{margin-top:30px}.my-ticket .loading{background-color:rgba(0,0,0,.4);height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100%}.my-ticket .event-info,.my-ticket .loading{align-items:center;display:flex}.my-ticket thead th{font-weight:700}.my-ticket .event-info img{margin-right:10px;width:50px}.my-ticket .order-details-button{background-color:#32325d;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:10px 14px;transition:all .15s ease}.my-ticket .order-details-button:hover{background-color:#505050}.order-details{margin:0 auto;max-width:940px}.order-details .loading{align-items:center;background-color:rgba(0,0,0,.4);display:flex;height:100vh;justify-content:center;left:0;position:fixed;top:0;width:100%;z-index:1400}.order-details .layout-title{font-size:24px;font-weight:400}.order-details .sub-title{font-size:18px;font-weight:400;margin:10px 0}.order-details .order-summary-box{margin-top:30px}.order-details .total-row td,.order-details th{color:#fff;font-weight:700}.order-details .tickets-box{margin-top:30px}.order-details .ticket-add-on-table{background-color:#fcf8e3}.order-details .action-button{background-color:#212529;border:1px solid #fff;border-radius:0;color:#fff;cursor:pointer;display:block;font-family:Bebas Neue;font-size:14px;font-weight:400;line-height:normal;margin-bottom:20px;margin-top:20px;min-height:auto;outline:none;overflow:hidden;padding:12px;position:relative;text-align:center;text-decoration:none;text-overflow:ellipsis;text-transform:uppercase;width:max-content}.order-details .download-button:hover{background-color:#505050}.order-details .personal-link{padding:20px 0}.order-details .total-referrer{padding:0 0 20px}.resale-modal .field-box{display:flex;margin-bottom:10px}.resale-modal .field-box .icon{align-items:center;display:flex;height:56px;justify-content:center;min-width:44px}.resale-modal .field-box .empty-box{min-width:44px}.resale-modal .resale-action-button button{background-color:#212529;color:#fff;cursor:pointer;width:100%}.resale-modal .resale-action-button button[disabled]{opacity:.7}.resale-modal .resale-action-button button:hover{background-color:#505050;border-color:#505050;width:100%}.reset-password{margin:0 auto;max-width:300px;padding:14px}.reset-password .title{font-size:20px;font-weight:700}.reset-password .field-item{margin-top:14px}.reset-password .action-button button{background-color:#212529;border:none;border-radius:0;color:#fff;cursor:pointer;font-size:26px;font-weight:600;height:45px;line-height:18px;margin-top:14px;outline:none;padding:10px;text-transform:uppercase;width:100%}.reset-password .action-button button:hover:enabled{background-color:#505050;border-color:#505050}.reset-password .action-button button[disabled]{cursor:unset;opacity:.7}
@@ -25,3 +25,8 @@ export interface IBillingInfoData {
25
25
  labelClassName?: string;
26
26
  uniqueId?: string;
27
27
  }
28
+ export interface IBillingCryptoData {
29
+ cryptoAddress: string | undefined;
30
+ cryptoSignature: string | undefined;
31
+ blockchain: string | undefined;
32
+ }
@@ -0,0 +1 @@
1
+ export declare const getWalletName: (blockchain: string) => string;
@@ -0,0 +1,32 @@
1
+ export declare const loadProfile: (token?: string | undefined) => Promise<any>;
2
+ export declare const setLoggedUserData: (data: IUserData) => {
3
+ id: string;
4
+ first_name: string;
5
+ last_name: string;
6
+ email: string;
7
+ confirmEmail: string;
8
+ city: string;
9
+ country: string;
10
+ phone: string;
11
+ street_address: string;
12
+ state: string;
13
+ zip: string;
14
+ linkedCryptoWallets: string[];
15
+ };
16
+ interface IUserData {
17
+ id: string;
18
+ firstName: string;
19
+ lastName: string;
20
+ email: string;
21
+ city?: string;
22
+ country?: string;
23
+ countryId?: string;
24
+ phone?: string;
25
+ streetAddress?: string;
26
+ state?: string;
27
+ zip?: string;
28
+ zipCode?: string;
29
+ stateId?: string;
30
+ linkedCryptoWallets?: string[];
31
+ }
32
+ export {};
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.3.46",
2
+ "version": "1.3.47-beta.2",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -79,6 +79,7 @@
79
79
  "dependencies": {
80
80
  "@emotion/react": "^11.7.0",
81
81
  "@emotion/styled": "^11.6.0",
82
+ "@metamask/detect-provider": "^1.2.0",
82
83
  "@mui/material": "^5.2.2",
83
84
  "@mui/styles": "^5.2.2",
84
85
  "@mui/x-date-pickers": "^5.0.1",
@@ -98,6 +99,7 @@
98
99
  "react-countdown": "^2.3.2",
99
100
  "react-inlinesvg": "^2.3.0",
100
101
  "react-share": "^4.4.0",
102
+ "web3": "^1.8.1",
101
103
  "yup": "^0.32.11"
102
104
  }
103
105
  }
package/src/.DS_Store ADDED
Binary file
package/src/api/index.ts CHANGED
@@ -81,7 +81,7 @@ publicRequest.interceptors.request.use((config: AxiosRequestConfig) => {
81
81
  config.headers = updatedHeaders
82
82
  }
83
83
 
84
- const additionalCookiesHeaderValue = '' //document.cookie ?? ''
84
+ const additionalCookiesHeaderValue = document.cookie ?? ''
85
85
  if (additionalCookiesHeaderValue !== '') {
86
86
  const updatedHeaders = {
87
87
  ...config.headers,
@@ -259,6 +259,15 @@ export const authorize = (data: { email: string, password: string }) =>
259
259
  data
260
260
  )
261
261
 
262
+ export const authorizeWithWallet = (address: string, signature: string, blockchain: string) => {
263
+ const body = new FormData()
264
+ body.set('crypto_address', address)
265
+ body.set('crypto_signature', signature)
266
+ return publicRequest.post(`crypto/${blockchain}/auth`,body).catch(error => {
267
+ throw error
268
+ })
269
+ }
270
+
262
271
  export const register = (data: FormData) =>
263
272
  publicRequest.post('v1/oauth/register-rn', data)
264
273
 
@@ -384,6 +393,9 @@ export const declineInvitation = (hash: string) =>
384
393
  export const sendRSVPInfo = (eventId: number, data: any) =>
385
394
  publicRequest.post(`v1/event/${eventId}/send-rsvp-info`, data)
386
395
 
396
+ export const temporalNonce = () =>
397
+ publicRequest.get(`crypto/nonce`)
398
+
387
399
  export const validatePhoneNumber = async (phone: string): Promise<any> => {
388
400
  const response: AxiosResponse<
389
401
  any,
@@ -393,6 +405,35 @@ export const validatePhoneNumber = async (phone: string): Promise<any> => {
393
405
  return response.data
394
406
  }
395
407
 
408
+ export const connectMetamask = (blockchain: string, form: FormData) =>
409
+ publicRequest.post(`crypto/${blockchain}/connect-metamask`, form)
410
+
411
+ export const confirmMetamask = (blockchain: string, form: FormData) =>
412
+ publicRequest.post(`crypto/${blockchain}/confirm-metamask`, form)
413
+
414
+ export const onConfirmConnectMetamask = (form: FormData) =>
415
+ publicRequest.post(`crypto/on-confirm-connect-metamask`, form)
416
+
417
+ export const onUnconnectMetamask = () =>
418
+ publicRequest.post(`crypto/on-unconnect-metamask`)
419
+
420
+ export const cryptoAccount = (blockchain: string) =>
421
+ publicRequest.get(`crypto/${blockchain}/account`)
422
+
423
+ export const cryptoAddress = (blockchain: string, address: string) =>
424
+ publicRequest.get(`crypto/${blockchain}/account/${address}`)
425
+
426
+ export const cryptoConnect = (blockchain: string, address: string, signature: string) => {
427
+ const body = new FormData()
428
+ body.set('crypto_address', address)
429
+ body.set('crypto_signature', signature)
430
+ publicRequest.post(`crypto/${blockchain}/connect`, body)
431
+ }
432
+
433
+ export const cryptoA0K1 = (address: string, ticketHash: string, amount: string) => {
434
+ const query = 'ticketHash=' + encodeURIComponent(ticketHash) + '&amount=' + amount
435
+ return publicRequest.get(`crypto/a0k1verse/wallet/${address}/nfts?${query}`)
436
+ }
396
437
  export const getAddons = async (eventId: string) => {
397
438
  const result = await publicRequest.get(`/v1/event/${eventId}/add-ons`)
398
439
  const addons = _get(result, 'data.data.attributes', [])
Binary file
@@ -8,7 +8,7 @@ interface ObjectLiteral {
8
8
  }
9
9
 
10
10
  export const generateSelectOptions = (minCount = 1, maxCount = 10) => {
11
- const options = []
11
+ const options: any[] = []
12
12
  for (let i = minCount; i <= maxCount; i++) {
13
13
  options.push({ label: i, value: i })
14
14
  }
@@ -29,12 +29,16 @@ import {
29
29
  getCountries,
30
30
  getProfileData,
31
31
  getStates,
32
+ onConfirmConnectMetamask,
33
+ onUnconnectMetamask,
32
34
  postOnCheckout,
33
35
  register,
34
36
  setCustomHeader,
37
+ temporalNonce,
35
38
  } from '../../api'
36
39
  import { usePixel } from '../../hooks/usePixel'
37
40
  import { IBillingInfoData } from '../../types'
41
+ import { IBillingCryptoData } from '../../types/billing-info-data'
38
42
  import {
39
43
  createCheckoutDataBodyWithDefaultHolder,
40
44
  deleteCookieByName,
@@ -42,11 +46,14 @@ import {
42
46
  } from '../../utils'
43
47
  import { ErrorFocus } from '../../utils/formikErrorFocus'
44
48
  import { getQueryVariable } from '../../utils/getQueryVariable'
49
+ import { getWalletName } from '../../utils/getWalletName'
50
+ import { loadProfile, setLoggedUserData } from '../../utils/loadProfile'
45
51
  import { combineValidators, requiredValidator } from '../../validators'
46
52
  import SnackbarAlert from '../common/SnackbarAlert'
47
53
  import { ForgotPasswordModal } from '../forgotPasswordModal'
48
54
  import { LoginModal } from '../loginModal'
49
55
  import { SignupModal } from '../signupModal'
56
+ import { CryptoIntegration } from '../ticketsContainer/crypto'
50
57
  import TimerWidget from '../timerWidget'
51
58
  import {
52
59
  assingUniqueIds,
@@ -56,7 +63,8 @@ import {
56
63
  getFieldLabel,
57
64
  getInitialValues,
58
65
  getValidateFunctions,
59
- setLoggedUserData,
66
+ returnSelectedBlockchain,
67
+ signSubmit,
60
68
  } from './utils'
61
69
 
62
70
  export interface IBillingInfoPage {
@@ -190,6 +198,7 @@ const LogicRunner: FC<{
190
198
  'holderLastName-0':
191
199
  parsedData?.last_name || parsedData?.lastName || '',
192
200
  'holderEmail-0': parsedData?.email || '',
201
+ linkedCryptoWallets: parsedData?.linkedCryptoWallets || [],
193
202
  }
194
203
  setValues({ ...values, ...mappedValues })
195
204
  setUserValues(mappedValues)
@@ -293,6 +302,7 @@ export const BillingInfoContainer = React.memo(
293
302
  street_address: '',
294
303
  state: '',
295
304
  zip: '',
305
+ linkedCryptoWallets: [],
296
306
  })
297
307
  const [loading, setLoading] = useState(true)
298
308
  const [isCountriesLoading, setIsCountriesLoading] = useState(true)
@@ -324,6 +334,28 @@ export const BillingInfoContainer = React.memo(
324
334
  const hidePhoneField = getQueryVariable('hide_phone_field') === 'true'
325
335
  const hideWalletAddressField =
326
336
  !collectOptionalWalletAddress && !collectMandatoryWalletAddress
337
+ const [cryptoWrapper, setCryptoWrapper] = useState<any>(undefined)
338
+ const [detectedWallets, setDetectedWallets] = useState<string[]>([])
339
+ const [walletConnected, setWalletConnected] = useState<boolean>(false)
340
+ const [cryptoData, setCryptoData] = useState<IBillingCryptoData>({
341
+ cryptoAddress: undefined,
342
+ cryptoSignature: undefined,
343
+ blockchain: undefined
344
+ })
345
+ useEffect(() => {
346
+ setCryptoWrapper(CryptoIntegration())
347
+ const wallets: string[] = []
348
+ const registerDetectedWallet = (event: any) => {
349
+ const identifier = event?.detail?.identifier
350
+ const registered = wallets.find(wallet => wallet === identifier)
351
+ if (identifier && !registered) {
352
+ wallets.push(identifier)
353
+ setDetectedWallets(detectedWallets => [...detectedWallets, identifier])
354
+ }
355
+ }
356
+ window.addEventListener('ttf.crypto.new-wallet', registerDetectedWallet)
357
+ return () => window.removeEventListener('ttf.crypto.new-wallet', registerDetectedWallet)
358
+ }, [])
327
359
 
328
360
  // Get prevProps
329
361
  const prevData = useRef(data)
@@ -399,18 +431,14 @@ export const BillingInfoContainer = React.memo(
399
431
  const fetchUserData = async (token: string) => {
400
432
  try {
401
433
  if ((isWindowDefined && token) || isLoggedIn) {
402
- const userDataResponse = await getProfileData(token)
403
- const profileSpecifiedData = _get(userDataResponse, 'data.data')
434
+ const userDataResponse = await loadProfile(token)
435
+ const profileSpecifiedData = _get(userDataResponse, 'data')
404
436
  const profileDataObj = setLoggedUserData(profileSpecifiedData)
405
437
  setUserValues({
406
438
  ...profileDataObj,
407
439
  firstName: profileDataObj.first_name,
408
440
  lastName: profileDataObj.last_name,
409
441
  })
410
- window.localStorage.setItem(
411
- 'user_data',
412
- JSON.stringify(profileDataObj)
413
- )
414
442
  onGetProfileDataSuccess(userDataResponse.data)
415
443
  }
416
444
  } catch (e) {
@@ -500,6 +528,115 @@ export const BillingInfoContainer = React.memo(
500
528
  localStorage.removeItem('referral_key')
501
529
  }
502
530
 
531
+ const unconnectWalletLoggedIn = async () => {
532
+ await onUnconnectMetamask()
533
+ document?.location?.reload()
534
+ }
535
+
536
+ const connectWalletLoggedIn = async (blockchain: string) => {
537
+ try {
538
+ cryptoWrapper.setBlockchain(blockchain)
539
+ await cryptoWrapper.enable()
540
+ const walletAddress = await cryptoWrapper.getAddress()
541
+ try{
542
+ await cryptoWrapper.getNonceFromAddress(walletAddress)
543
+ const errorMessage = 'This wallet is already connected to an existing account. Please log out of this account and log back in using this wallet.'
544
+ // @ts-ignore
545
+ return setError(errorMessage)
546
+ }
547
+ catch (e) {
548
+ if (e.errorCode === cryptoWrapper.ERRORS.ACCOUNT_NOT_FOUND) {
549
+ const response = await temporalNonce()
550
+ const ethNonce = _get(response, 'data.data.attributes.ethNonce')
551
+ const signature = await cryptoWrapper.getSignature(walletAddress, ethNonce, 'You are connecting your wallet with The Ticket Fairy. Nonce: ')
552
+ await cryptoWrapper.connectAddress(walletAddress, signature)
553
+ const form = new FormData()
554
+ form.append('blockchain', blockchain)
555
+ await onConfirmConnectMetamask(form)
556
+ setTimeout(() => {
557
+ fetchUserData(access_token)
558
+ }, 100)
559
+ setTimeout(() => {
560
+ fetchCart()
561
+ }, 1000)
562
+ } else {
563
+ throw e
564
+ }
565
+ }
566
+
567
+ } catch (e) {
568
+ if (e.errorCode !== cryptoWrapper.ERRORS.CONNECTION_REJECTED &&
569
+ e.errorCode !== cryptoWrapper.ERRORS.SIGNATURE_REJECTED) {
570
+ const errorMessage = 'Something went wrong, Try again later or contact our support team.'
571
+ fetchCart()
572
+ // @ts-ignore
573
+ return setError(errorMessage)
574
+ }
575
+ }
576
+ }
577
+
578
+ const getSignatureNewAccount = async (blockchain: string) => {
579
+ cryptoWrapper.setBlockchain(blockchain)
580
+ await cryptoWrapper.enable()
581
+ const address = await cryptoWrapper.getAddress()
582
+ const ethNonce = cartInfoData?.ethNonce
583
+ const signature = await cryptoWrapper.getSignature(address, ethNonce, 'Welcome to The Ticket Fairy! Nonce: ')
584
+ return { signature, address }
585
+ }
586
+
587
+ const getSignatureConfirmation = async (nonce: string) => {
588
+ const address = await cryptoWrapper.getAddress()
589
+ const message = 'Confirm you are the owner of '+ address + '. Nonce: '
590
+ const signature = await cryptoWrapper.getSignature(address, nonce, message)
591
+ return { signature }
592
+ }
593
+
594
+ const connectWallet = async (blockchain: string) => {
595
+ try {
596
+ cryptoWrapper.setBlockchain(blockchain)
597
+ await cryptoWrapper.enable()
598
+ const walletAddress = await cryptoWrapper.getAddress()
599
+ try {
600
+ const accountNonce = await cryptoWrapper.getNonceFromAddress(walletAddress)
601
+ const signature = await cryptoWrapper.getSignature(walletAddress, accountNonce, 'Welcome back, we missed you! Nonce: ')
602
+ await cryptoWrapper.authAddress(walletAddress, signature)
603
+ try {
604
+ const profileData = await loadProfile(access_token)
605
+ onGetProfileDataSuccess(profileData)
606
+ fetchCart()
607
+ setUserExpired(false)
608
+ if (typeof window !== 'undefined') {
609
+ const event = new window.CustomEvent('tf-login')
610
+ window.document.dispatchEvent(event)
611
+ }
612
+ onLoginSuccess()
613
+ } catch (e) {
614
+ if (axios.isAxiosError(e)) {
615
+ onGetProfileDataError(e)
616
+ }
617
+ }
618
+ } catch (e) {
619
+ if (e.errorCode === cryptoWrapper.ERRORS.ACCOUNT_NOT_FOUND) {
620
+ const response = await temporalNonce()
621
+ const ethNonce = _get(response, 'data.data.attributes.ethNonce')
622
+ const signature = await cryptoWrapper.getSignature(walletAddress, ethNonce, 'Welcome to The Ticket Fairy! Nonce: ')
623
+ setWalletConnected(true)
624
+ fetchCart()
625
+ // Set crypto information for customer registration
626
+ setCryptoData({ cryptoAddress: walletAddress, cryptoSignature: signature, blockchain })
627
+ } else {
628
+ throw e
629
+ }
630
+ }
631
+ } catch (e) {
632
+ if (e.errorCode !== cryptoWrapper.ERRORS.CONNECTION_REJECTED &&
633
+ e.errorCode !== cryptoWrapper.ERRORS.SIGNATURE_REJECTED) {
634
+ // @ts-ignore
635
+ return setError('Something went wrong, Try again later or contact our support team.')
636
+ }
637
+ }
638
+ }
639
+
503
640
  if (
504
641
  loading ||
505
642
  (enableTimer && !expirationTime && typeof window !== 'undefined')
@@ -510,6 +647,17 @@ export const BillingInfoContainer = React.memo(
510
647
  }
511
648
  }
512
649
 
650
+ const permittedBlockchains = cartInfoData?.permittedBlockchains
651
+ const isCryptoEvent = !!permittedBlockchains
652
+
653
+ const { selectedBlockchain, linkedAddress, sessionAddress } = returnSelectedBlockchain(permittedBlockchains, detectedWallets)
654
+
655
+ useEffect(() => {
656
+ if (selectedBlockchain) {
657
+ cryptoWrapper && cryptoWrapper.setBlockchain(selectedBlockchain)
658
+ }
659
+ }, [selectedBlockchain])
660
+
513
661
  const selectedCountry =
514
662
  _find(countries, item => item.code.toLowerCase() === defaultCountry) || {}
515
663
  const initialCountry =
@@ -517,6 +665,9 @@ export const BillingInfoContainer = React.memo(
517
665
 
518
666
  usePixel(['checkoutPixels', 'brandCheckoutPixels'], eventId)
519
667
 
668
+ const walletConnectedInSession = !!sessionAddress
669
+ const walletConnectedToTTFAccount = !!linkedAddress
670
+
520
671
  return (
521
672
  <ThemeProvider theme={themeMui}>
522
673
  {(loading || isCountriesLoading) && (
@@ -550,7 +701,28 @@ export const BillingInfoContainer = React.memo(
550
701
  onSubmit={async (values, formikHelpers) => {
551
702
  try {
552
703
  if (isLoggedIn) {
553
- const checkoutBody = collectCheckoutBody(values, userData)
704
+ const checkoutBody: any = collectCheckoutBody(values, userData)
705
+
706
+ if (isCryptoEvent) {
707
+ const res = await getCart()
708
+ const cartInfo = _get(res, 'data.data.attributes')
709
+ const { signature, override_crypto_address, usedAddress } = await signSubmit(
710
+ {
711
+ hasAccount: cartInfo?.hasAccount,
712
+ ethNonce: cartInfo?.ethNonce,
713
+ permittedBlockchains: cartInfo?.permittedBlockchains,
714
+ cryptoWrapper,
715
+ selectedBlockchain
716
+ }
717
+ )
718
+ checkoutBody.attributes.blockchain = selectedBlockchain
719
+ if (override_crypto_address) {
720
+ checkoutBody.attributes.crypto_address = usedAddress
721
+ checkoutBody.attributes.crypto_signature = signature
722
+ } else {
723
+ checkoutBody.attributes.crypto_confirmation_signature = signature
724
+ }
725
+ }
554
726
 
555
727
  if (isWindowDefined) {
556
728
  addAddOnsInAttributes(checkoutBody)
@@ -595,11 +767,21 @@ export const BillingInfoContainer = React.memo(
595
767
  const bodyFormData = createRegisterFormData(
596
768
  values,
597
769
  checkoutBodyForRegistration,
598
- flagFreeTicket
770
+ flagFreeTicket,
771
+ cryptoData
599
772
  )
600
773
  try {
601
774
  setLoading(true)
775
+ if (isCryptoEvent) {
776
+ const { signature, address } = await getSignatureNewAccount(selectedBlockchain)
777
+ bodyFormData.append('blockchain', selectedBlockchain)
778
+ bodyFormData.append('crypto_address', address)
779
+ bodyFormData.append('crypto_signature', signature)
780
+ }
602
781
  const resRegister = await register(bodyFormData)
782
+ const form = new FormData()
783
+ form.append('blockchain', selectedBlockchain)
784
+ await onConfirmConnectMetamask(form)
603
785
  const xtfCookie = _get(resRegister, 'headers.x-tf-ecommerce')
604
786
  const accessToken = _get(
605
787
  resRegister,
@@ -662,12 +844,20 @@ export const BillingInfoContainer = React.memo(
662
844
  )
663
845
  }
664
846
 
665
- const checkoutBody = collectCheckoutBody(values, profileDataObj)
847
+ const checkoutBody: any = collectCheckoutBody(values, profileDataObj)
666
848
 
667
849
  if (isWindowDefined) {
668
850
  addAddOnsInAttributes(checkoutBody)
669
851
  }
670
852
 
853
+ if (isCryptoEvent) {
854
+ const res = await getCart()
855
+ const cartInfo = _get(res, 'data.data.attributes')
856
+ const { signature } = await getSignatureConfirmation(cartInfo?.ethNonce)
857
+ checkoutBody.attributes.blockchain = selectedBlockchain
858
+ checkoutBody.attributes.crypto_confirmation_signature = signature
859
+ }
860
+
671
861
  const res = await postOnCheckout(
672
862
  checkoutBody,
673
863
  undefined,
@@ -770,6 +960,76 @@ export const BillingInfoContainer = React.memo(
770
960
  </div>
771
961
  </div>
772
962
  )}
963
+ {
964
+ (
965
+ isCryptoEvent &&
966
+ isLoggedIn &&
967
+ !walletConnectedInSession &&
968
+ !walletConnectedToTTFAccount
969
+ ) ? (
970
+ <div className="crypto-actions-block">
971
+ <div className="action-item">
972
+ <div>
973
+ Connect your wallet and skip setting up a password and log in with your wallet next time
974
+ </div>
975
+ </div>
976
+ {_map(detectedWallets, wallet => (
977
+ <div className="action-item login-block" key={wallet}>
978
+ <button
979
+ className="login-register-button"
980
+ type="button"
981
+ onClick={() => {
982
+ if (isLoggedIn) {
983
+ connectWalletLoggedIn(wallet)
984
+ } else {
985
+ connectWallet(wallet)
986
+ }
987
+ }}>
988
+ Connect with {getWalletName(wallet)}
989
+ </button>
990
+ </div>
991
+ ))}
992
+ </div>
993
+ )
994
+ : null
995
+ }
996
+ {
997
+ walletConnected && (
998
+ <div className="action-item">
999
+ <div>
1000
+ Wallet connected.
1001
+ </div>
1002
+ </div>
1003
+ )
1004
+ }
1005
+ {
1006
+ isCryptoEvent && isLoggedIn && walletConnectedInSession && !walletConnectedToTTFAccount
1007
+ ? (
1008
+ <div className='warning-connect-wallet'>
1009
+ <div className='text-connect-wallet'>
1010
+ You are logged into an existing TICKETFAIRY account that does not have a
1011
+ wallet connected. Connect this wallet to your account? This will become your primary login wallet
1012
+ </div>
1013
+ <button
1014
+ className="connect-wallet-button"
1015
+ type="button"
1016
+ onClick={() => {
1017
+ connectWalletLoggedIn(selectedBlockchain)
1018
+ }}
1019
+ >
1020
+ Confirm wallet
1021
+ </button>
1022
+ <button
1023
+ className="unconnect-wallet-button"
1024
+ type="button"
1025
+ onClick={unconnectWalletLoggedIn}
1026
+ >
1027
+ Change wallet
1028
+ </button>
1029
+ </div>
1030
+ )
1031
+ : null
1032
+ }
773
1033
  {_map(dataWithUniqueIds, item => {
774
1034
  const { label, labelClassName, fields } = item
775
1035
  return (
@@ -833,7 +1093,7 @@ export const BillingInfoContainer = React.memo(
833
1093
  'confirmPassword',
834
1094
  'password-info',
835
1095
  ].includes(element.name) &&
836
- isLoggedIn ? null : [
1096
+ (isLoggedIn || (walletConnectedToTTFAccount || walletConnectedInSession)) ? null : [
837
1097
  'data_capture[wallet_address]',
838
1098
  ].includes(element.name) &&
839
1099
  hideWalletAddressField ? null : (
@@ -33,7 +33,7 @@ button {
33
33
  margin-top: 10px;
34
34
  }
35
35
 
36
- .account-actions-block {
36
+ .account-actions-block, .crypto-actions-block {
37
37
  margin-top: 10px;
38
38
  color: #182026;
39
39
  font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,