diff --git a/data/Countries.ts b/data/Countries.ts
new file mode 100644
index 0000000..2916227
--- /dev/null
+++ b/data/Countries.ts
@@ -0,0 +1,253 @@
+const CountriesData = [
+ { value: 'AF', label: 'Afghanistan' },
+ { value: 'AL', label: 'Albania' },
+ { value: 'DZ', label: 'Algeria' },
+ { value: 'AS', label: 'American Samoa' },
+ { value: 'AD', label: 'Andorra' },
+ { value: 'AO', label: 'Angola' },
+ { value: 'AI', label: 'Anguilla' },
+ { value: 'AQ', label: 'Antarctica' },
+ { value: 'AG', label: 'Antigua and Barbuda' },
+ { value: 'AR', label: 'Argentina' },
+ { value: 'AM', label: 'Armenia' },
+ { value: 'AW', label: 'Aruba' },
+ { value: 'AU', label: 'Australia' },
+ { value: 'AT', label: 'Austria' },
+ { value: 'AZ', label: 'Azerbaijan' },
+ { value: 'BS', label: 'Bahamas (the)' },
+ { value: 'BH', label: 'Bahrain' },
+ { value: 'BD', label: 'Bangladesh' },
+ { value: 'BB', label: 'Barbados' },
+ { value: 'BY', label: 'Belarus' },
+ { value: 'BE', label: 'Belgium' },
+ { value: 'BZ', label: 'Belize' },
+ { value: 'BJ', label: 'Benin' },
+ { value: 'BM', label: 'Bermuda' },
+ { value: 'BT', label: 'Bhutan' },
+ { value: 'BO', label: 'Bolivia (Plurinational State of)' },
+ { value: 'BQ', label: 'Bonaire, Sint Eustatius and Saba' },
+ { value: 'BA', label: 'Bosnia and Herzegovina' },
+ { value: 'BW', label: 'Botswana' },
+ { value: 'BV', label: 'Bouvet Island' },
+ { value: 'BR', label: 'Brazil' },
+ { value: 'IO', label: 'British Indian Ocean Territory (the)' },
+ { value: 'BN', label: 'Brunei Darussalam' },
+ { value: 'BG', label: 'Bulgaria' },
+ { value: 'BF', label: 'Burkina Faso' },
+ { value: 'BI', label: 'Burundi' },
+ { value: 'CV', label: 'Cabo Verde' },
+ { value: 'KH', label: 'Cambodia' },
+ { value: 'CM', label: 'Cameroon' },
+ { value: 'CA', label: 'Canada' },
+ { value: 'KY', label: 'Cayman Islands (the)' },
+ { value: 'CF', label: 'Central African Republic (the)' },
+ { value: 'TD', label: 'Chad' },
+ { value: 'CL', label: 'Chile' },
+ { value: 'CN', label: 'China' },
+ { value: 'CX', label: 'Christmas Island' },
+ { value: 'CC', label: 'Cocos (Keeling) Islands (the)' },
+ { value: 'CO', label: 'Colombia' },
+ { value: 'KM', label: 'Comoros (the)' },
+ { value: 'CD', label: 'Congo (the Democratic Republic of the)' },
+ { value: 'CG', label: 'Congo (the)' },
+ { value: 'CK', label: 'Cook Islands (the)' },
+ { value: 'CR', label: 'Costa Rica' },
+ { value: 'HR', label: 'Croatia' },
+ { value: 'CU', label: 'Cuba' },
+ { value: 'CW', label: 'Curaçao' },
+ { value: 'CY', label: 'Cyprus' },
+ { value: 'CZ', label: 'Czechia' },
+ { value: 'CI', label: "Côte d'Ivoire" },
+ { value: 'DK', label: 'Denmark' },
+ { value: 'DJ', label: 'Djibouti' },
+ { value: 'DM', label: 'Dominica' },
+ { value: 'DO', label: 'Dominican Republic (the)' },
+ { value: 'EC', label: 'Ecuador' },
+ { value: 'EG', label: 'Egypt' },
+ { value: 'SV', label: 'El Salvador' },
+ { value: 'GQ', label: 'Equatorial Guinea' },
+ { value: 'ER', label: 'Eritrea' },
+ { value: 'EE', label: 'Estonia' },
+ { value: 'SZ', label: 'Eswatini' },
+ { value: 'ET', label: 'Ethiopia' },
+ { value: 'FK', label: 'Falkland Islands (the) [Malvinas]' },
+ { value: 'FO', label: 'Faroe Islands (the)' },
+ { value: 'FJ', label: 'Fiji' },
+ { value: 'FI', label: 'Finland' },
+ { value: 'FR', label: 'France' },
+ { value: 'GF', label: 'French Guiana' },
+ { value: 'PF', label: 'French Polynesia' },
+ { value: 'TF', label: 'French Southern Territories (the)' },
+ { value: 'GA', label: 'Gabon' },
+ { value: 'GM', label: 'Gambia (the)' },
+ { value: 'GE', label: 'Georgia' },
+ { value: 'DE', label: 'Germany' },
+ { value: 'GH', label: 'Ghana' },
+ { value: 'GI', label: 'Gibraltar' },
+ { value: 'GR', label: 'Greece' },
+ { value: 'GL', label: 'Greenland' },
+ { value: 'GD', label: 'Grenada' },
+ { value: 'GP', label: 'Guadeloupe' },
+ { value: 'GU', label: 'Guam' },
+ { value: 'GT', label: 'Guatemala' },
+ { value: 'GG', label: 'Guernsey' },
+ { value: 'GN', label: 'Guinea' },
+ { value: 'GW', label: 'Guinea-Bissau' },
+ { value: 'GY', label: 'Guyana' },
+ { value: 'HT', label: 'Haiti' },
+ { value: 'HM', label: 'Heard Island and McDonald Islands' },
+ { value: 'VA', label: 'Holy See (the)' },
+ { value: 'HN', label: 'Honduras' },
+ { value: 'HK', label: 'Hong Kong' },
+ { value: 'HU', label: 'Hungary' },
+ { value: 'IS', label: 'Iceland' },
+ { value: 'IN', label: 'India' },
+ { value: 'ID', label: 'Indonesia' },
+ { value: 'IR', label: 'Iran (Islamic Republic of)' },
+ { value: 'IQ', label: 'Iraq' },
+ { value: 'IE', label: 'Ireland' },
+ { value: 'IM', label: 'Isle of Man' },
+ { value: 'IL', label: 'Israel' },
+ { value: 'IT', label: 'Italy' },
+ { value: 'JM', label: 'Jamaica' },
+ { value: 'JP', label: 'Japan' },
+ { value: 'JE', label: 'Jersey' },
+ { value: 'JO', label: 'Jordan' },
+ { value: 'KZ', label: 'Kazakhstan' },
+ { value: 'KE', label: 'Kenya' },
+ { value: 'KI', label: 'Kiribati' },
+ { value: 'KP', label: "Korea (the Democratic People's Republic of)" },
+ { value: 'KR', label: 'Korea (the Republic of)' },
+ { value: 'KW', label: 'Kuwait' },
+ { value: 'KG', label: 'Kyrgyzstan' },
+ { value: 'LA', label: "Lao People's Democratic Republic (the)" },
+ { value: 'LV', label: 'Latvia' },
+ { value: 'LB', label: 'Lebanon' },
+ { value: 'LS', label: 'Lesotho' },
+ { value: 'LR', label: 'Liberia' },
+ { value: 'LY', label: 'Libya' },
+ { value: 'LI', label: 'Liechtenstein' },
+ { value: 'LT', label: 'Lithuania' },
+ { value: 'LU', label: 'Luxembourg' },
+ { value: 'MO', label: 'Macao' },
+ { value: 'MG', label: 'Madagascar' },
+ { value: 'MW', label: 'Malawi' },
+ { value: 'MY', label: 'Malaysia' },
+ { value: 'MV', label: 'Maldives' },
+ { value: 'ML', label: 'Mali' },
+ { value: 'MT', label: 'Malta' },
+ { value: 'MH', label: 'Marshall Islands (the)' },
+ { value: 'MQ', label: 'Martinique' },
+ { value: 'MR', label: 'Mauritania' },
+ { value: 'MU', label: 'Mauritius' },
+ { value: 'YT', label: 'Mayotte' },
+ { value: 'MX', label: 'Mexico' },
+ { value: 'FM', label: 'Micronesia (Federated States of)' },
+ { value: 'MD', label: 'Moldova (the Republic of)' },
+ { value: 'MC', label: 'Monaco' },
+ { value: 'MN', label: 'Mongolia' },
+ { value: 'ME', label: 'Montenegro' },
+ { value: 'MS', label: 'Montserrat' },
+ { value: 'MA', label: 'Morocco' },
+ { value: 'MZ', label: 'Mozambique' },
+ { value: 'MM', label: 'Myanmar' },
+ { value: 'NA', label: 'Namibia' },
+ { value: 'NR', label: 'Nauru' },
+ { value: 'NP', label: 'Nepal' },
+ { value: 'NL', label: 'Netherlands (the)' },
+ { value: 'NC', label: 'New Caledonia' },
+ { value: 'NZ', label: 'New Zealand' },
+ { value: 'NI', label: 'Nicaragua' },
+ { value: 'NE', label: 'Niger (the)' },
+ { value: 'NG', label: 'Nigeria' },
+ { value: 'NU', label: 'Niue' },
+ { value: 'NF', label: 'Norfolk Island' },
+ { value: 'MP', label: 'Northern Mariana Islands (the)' },
+ { value: 'NO', label: 'Norway' },
+ { value: 'OM', label: 'Oman' },
+ { value: 'PK', label: 'Pakistan' },
+ { value: 'PW', label: 'Palau' },
+ { value: 'PS', label: 'Palestine, State of' },
+ { value: 'PA', label: 'Panama' },
+ { value: 'PG', label: 'Papua New Guinea' },
+ { value: 'PY', label: 'Paraguay' },
+ { value: 'PE', label: 'Peru' },
+ { value: 'PH', label: 'Philippines (the)' },
+ { value: 'PN', label: 'Pitcairn' },
+ { value: 'PL', label: 'Poland' },
+ { value: 'PT', label: 'Portugal' },
+ { value: 'PR', label: 'Puerto Rico' },
+ { value: 'QA', label: 'Qatar' },
+ { value: 'MK', label: 'Republic of North Macedonia' },
+ { value: 'RO', label: 'Romania' },
+ { value: 'RU', label: 'Russian Federation (the)' },
+ { value: 'RW', label: 'Rwanda' },
+ { value: 'RE', label: 'Réunion' },
+ { value: 'BL', label: 'Saint Barthélemy' },
+ { value: 'SH', label: 'Saint Helena, Ascension and Tristan da Cunha' },
+ { value: 'KN', label: 'Saint Kitts and Nevis' },
+ { value: 'LC', label: 'Saint Lucia' },
+ { value: 'MF', label: 'Saint Martin (French part)' },
+ { value: 'PM', label: 'Saint Pierre and Miquelon' },
+ { value: 'VC', label: 'Saint Vincent and the Grenadines' },
+ { value: 'WS', label: 'Samoa' },
+ { value: 'SM', label: 'San Marino' },
+ { value: 'ST', label: 'Sao Tome and Principe' },
+ { value: 'SA', label: 'Saudi Arabia' },
+ { value: 'SN', label: 'Senegal' },
+ { value: 'RS', label: 'Serbia' },
+ { value: 'SC', label: 'Seychelles' },
+ { value: 'SL', label: 'Sierra Leone' },
+ { value: 'SG', label: 'Singapore' },
+ { value: 'SX', label: 'Sint Maarten (Dutch part)' },
+ { value: 'SK', label: 'Slovakia' },
+ { value: 'SI', label: 'Slovenia' },
+ { value: 'SB', label: 'Solomon Islands' },
+ { value: 'SO', label: 'Somalia' },
+ { value: 'ZA', label: 'South Africa' },
+ { value: 'GS', label: 'South Georgia and the South Sandwich Islands' },
+ { value: 'SS', label: 'South Sudan' },
+ { value: 'ES', label: 'Spain' },
+ { value: 'LK', label: 'Sri Lanka' },
+ { value: 'SD', label: 'Sudan (the)' },
+ { value: 'SR', label: 'Suriname' },
+ { value: 'SJ', label: 'Svalbard and Jan Mayen' },
+ { value: 'SE', label: 'Sweden' },
+ { value: 'CH', label: 'Switzerland' },
+ { value: 'SY', label: 'Syrian Arab Republic' },
+ { value: 'TW', label: 'Taiwan' },
+ { value: 'TJ', label: 'Tajikistan' },
+ { value: 'TZ', label: 'Tanzania, United Republic of' },
+ { value: 'TH', label: 'Thailand' },
+ { value: 'TL', label: 'Timor-Leste' },
+ { value: 'TG', label: 'Togo' },
+ { value: 'TK', label: 'Tokelau' },
+ { value: 'TO', label: 'Tonga' },
+ { value: 'TT', label: 'Trinidad and Tobago' },
+ { value: 'TN', label: 'Tunisia' },
+ { value: 'TR', label: 'Turkey' },
+ { value: 'TM', label: 'Turkmenistan' },
+ { value: 'TC', label: 'Turks and Caicos Islands (the)' },
+ { value: 'TV', label: 'Tuvalu' },
+ { value: 'UG', label: 'Uganda' },
+ { value: 'UA', label: 'Ukraine' },
+ { value: 'AE', label: 'United Arab Emirates (the)' },
+ { value: 'GB', label: 'United Kingdom of Great Britain and Northern Ireland (the)' },
+ { value: 'UM', label: 'United States Minor Outlying Islands (the)' },
+ { value: 'US', label: 'United States of America (the)' },
+ { value: 'UY', label: 'Uruguay' },
+ { value: 'UZ', label: 'Uzbekistan' },
+ { value: 'VU', label: 'Vanuatu' },
+ { value: 'VE', label: 'Venezuela (Bolivarian Republic of)' },
+ { value: 'VN', label: 'Viet Nam' },
+ { value: 'VG', label: 'Virgin Islands (British)' },
+ { value: 'VI', label: 'Virgin Islands (U.S.)' },
+ { value: 'WF', label: 'Wallis and Futuna' },
+ { value: 'EH', label: 'Western Sahara' },
+ { value: 'YE', label: 'Yemen' },
+ { value: 'ZM', label: 'Zambia' },
+ { value: 'ZW', label: 'Zimbabwe' },
+ { value: 'AX', label: 'Åland Islands' }
+];
+
+export default CountriesData;
diff --git a/data/CountryFlag.ts b/data/CountryFlag.ts
new file mode 100644
index 0000000..9a8c5cb
--- /dev/null
+++ b/data/CountryFlag.ts
@@ -0,0 +1,259 @@
+const countryFlag = {
+ AC: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1e8.svg',
+ AD: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f4.svg',
+ AE: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ea.svg',
+ AF: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1eb.svg',
+ AG: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ec.svg',
+ AI: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ee.svg',
+ AL: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f1.svg',
+ AM: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f2.svg',
+ AQ: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f6.svg',
+ AR: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f7.svg',
+ AS: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f8.svg',
+ AT: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1f9.svg',
+ AU: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1fa.svg',
+ AW: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1fc.svg',
+ AX: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1fd.svg',
+ AZ: 'https://twemoji.maxcdn.com/2/svg/1f1e6-1f1ff.svg',
+ BA: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1e6.svg',
+ BB: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1e7.svg',
+ BD: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1e9.svg',
+ BE: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ea.svg',
+ BF: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1eb.svg',
+ BG: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ec.svg',
+ BH: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ed.svg',
+ BI: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ee.svg',
+ BJ: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ef.svg',
+ BL: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f1.svg',
+ BM: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f2.svg',
+ BN: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f3.svg',
+ BO: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f4.svg',
+ BR: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f7.svg',
+ BS: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f8.svg',
+ BT: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1f9.svg',
+ BV: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1fb.svg',
+ BW: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1fc.svg',
+ BY: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1fe.svg',
+ BZ: 'https://twemoji.maxcdn.com/2/svg/1f1e7-1f1ff.svg',
+ CA: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1e6.svg',
+ CC: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1e8.svg',
+ CD: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ec.svg',
+ CF: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1eb.svg',
+ CG: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1e9.svg',
+ CH: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ed.svg',
+ CI: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ee.svg',
+ CK: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f0.svg',
+ CL: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f1.svg',
+ CM: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f2.svg',
+ CN: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f3.svg',
+ CO: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f4.svg',
+ CP: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f5.svg',
+ CR: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1f7.svg',
+ CU: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fa.svg',
+ CV: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fb.svg',
+ CW: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fc.svg',
+ CX: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fd.svg',
+ CY: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1fe.svg',
+ CZ: 'https://twemoji.maxcdn.com/2/svg/1f1e8-1f1ff.svg',
+ DE: 'https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ea.svg',
+ DG: 'https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ec.svg',
+ DJ: 'https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ef.svg',
+ DK: 'https://twemoji.maxcdn.com/2/svg/1f1e9-1f1f0.svg',
+ DM: 'https://twemoji.maxcdn.com/2/svg/1f1e9-1f1f2.svg',
+ DO: 'https://twemoji.maxcdn.com/2/svg/1f1e9-1f1f4.svg',
+ DZ: 'https://twemoji.maxcdn.com/2/svg/1f1e9-1f1ff.svg',
+ EA: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1e6.svg',
+ EC: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1e8.svg',
+ EE: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1ea.svg',
+ EG: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1ec.svg',
+ EH: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1ed.svg',
+ ER: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1f7.svg',
+ ES: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1f8.svg',
+ ET: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1f9.svg',
+ EU: 'https://twemoji.maxcdn.com/2/svg/1f1ea-1f1fa.svg',
+ FI: 'https://twemoji.maxcdn.com/2/svg/1f1eb-1f1ee.svg',
+ FJ: 'https://twemoji.maxcdn.com/2/svg/1f1eb-1f1ef.svg',
+ FK: 'https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f0.svg',
+ FM: 'https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f2.svg',
+ FO: 'https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f4.svg',
+ FR: 'https://twemoji.maxcdn.com/2/svg/1f1eb-1f1f7.svg',
+ GA: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1e6.svg',
+ GB: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1e7.svg',
+ GD: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1e9.svg',
+ GE: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ea.svg',
+ GF: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1eb.svg',
+ GG: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ec.svg',
+ GH: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ed.svg',
+ GI: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1ee.svg',
+ GL: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f1.svg',
+ GM: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f2.svg',
+ GN: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f3.svg',
+ GP: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f5.svg',
+ GQ: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f6.svg',
+ GR: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f7.svg',
+ GS: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f8.svg',
+ GT: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1f9.svg',
+ GU: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1fa.svg',
+ GW: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1fc.svg',
+ GY: 'https://twemoji.maxcdn.com/2/svg/1f1ec-1f1fe.svg',
+ HK: 'https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f0.svg',
+ HM: 'https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f2.svg',
+ HN: 'https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f3.svg',
+ HR: 'https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f7.svg',
+ HT: 'https://twemoji.maxcdn.com/2/svg/1f1ed-1f1f9.svg',
+ HU: 'https://twemoji.maxcdn.com/2/svg/1f1ed-1f1fa.svg',
+ IC: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1e8.svg',
+ ID: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1e9.svg',
+ IE: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1ea.svg',
+ IL: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f1.svg',
+ IM: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f2.svg',
+ IN: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f3.svg',
+ IO: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f4.svg',
+ IQ: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f6.svg',
+ IS: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f8.svg',
+ IT: 'https://twemoji.maxcdn.com/2/svg/1f1ee-1f1f9.svg',
+ JE: 'https://twemoji.maxcdn.com/2/svg/1f1ef-1f1ea.svg',
+ JM: 'https://twemoji.maxcdn.com/2/svg/1f1ef-1f1f2.svg',
+ JO: 'https://twemoji.maxcdn.com/2/svg/1f1ef-1f1f4.svg',
+ JP: 'https://twemoji.maxcdn.com/2/svg/1f1ef-1f1f5.svg',
+ KE: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ea.svg',
+ KG: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ec.svg',
+ KH: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ed.svg',
+ KI: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ee.svg',
+ KM: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f2.svg',
+ KN: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f3.svg',
+ KP: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f5.svg',
+ KR: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1f7.svg',
+ KW: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1fc.svg',
+ KY: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1fe.svg',
+ KZ: 'https://twemoji.maxcdn.com/2/svg/1f1f0-1f1ff.svg',
+ LA: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1e6.svg',
+ LB: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1e7.svg',
+ LC: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1e8.svg',
+ LI: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1ee.svg',
+ LK: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f0.svg',
+ LR: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f7.svg',
+ LS: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f8.svg',
+ LT: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1f9.svg',
+ LU: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1fa.svg',
+ LV: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1fb.svg',
+ LY: 'https://twemoji.maxcdn.com/2/svg/1f1f1-1f1fe.svg',
+ MA: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1e6.svg',
+ MC: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1e8.svg',
+ MD: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1e9.svg',
+ ME: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ea.svg',
+ MF: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1eb.svg',
+ MG: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ec.svg',
+ MH: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ed.svg',
+ MK: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f0.svg',
+ ML: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f1.svg',
+ MM: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f2.svg',
+ MN: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f3.svg',
+ MO: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f4.svg',
+ MP: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f5.svg',
+ MQ: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f6.svg',
+ MR: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f7.svg',
+ MS: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f8.svg',
+ MT: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1f9.svg',
+ MU: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fa.svg',
+ MV: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fb.svg',
+ MW: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fc.svg',
+ MX: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fd.svg',
+ MY: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1fe.svg',
+ MZ: 'https://twemoji.maxcdn.com/2/svg/1f1f2-1f1ff.svg',
+ NA: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1e6.svg',
+ NC: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1e8.svg',
+ NE: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ea.svg',
+ NF: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1eb.svg',
+ NG: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ec.svg',
+ NI: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ee.svg',
+ NL: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f1.svg',
+ NO: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f4.svg',
+ NP: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f5.svg',
+ NR: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1f7.svg',
+ NU: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1fa.svg',
+ NZ: 'https://twemoji.maxcdn.com/2/svg/1f1f3-1f1ff.svg',
+ OM: 'https://twemoji.maxcdn.com/2/svg/1f1f4-1f1f2.svg',
+ PA: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1e6.svg',
+ PE: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1ea.svg',
+ PF: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1eb.svg',
+ PG: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1ec.svg',
+ PH: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1ed.svg',
+ PK: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f0.svg',
+ PL: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f1.svg',
+ PN: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f3.svg',
+ PR: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f7.svg',
+ PS: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f8.svg',
+ PT: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f9.svg',
+ PW: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1fc.svg',
+ PY: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1fe.svg',
+ QA: 'https://twemoji.maxcdn.com/2/svg/1f1f6-1f1e6.svg',
+ RE: 'https://twemoji.maxcdn.com/2/svg/1f1f7-1f1ea.svg',
+ RO: 'https://twemoji.maxcdn.com/2/svg/1f1f7-1f1f4.svg',
+ RU: 'https://twemoji.maxcdn.com/2/svg/1f1f7-1f1fa.svg',
+ RW: 'https://twemoji.maxcdn.com/2/svg/1f1f7-1f1fc.svg',
+ SA: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e6.svg',
+ SB: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e7.svg',
+ SC: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e8.svg',
+ SD: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1e9.svg',
+ SE: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ea.svg',
+ SG: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ec.svg',
+ SH: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1e6.svg',
+ SI: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ee.svg',
+ SJ: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ef.svg',
+ SK: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f0.svg',
+ SL: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f1.svg',
+ SM: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f2.svg',
+ SN: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f3.svg',
+ SO: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f4.svg',
+ SR: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f7.svg',
+ SS: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f8.svg',
+ ST: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1f9.svg',
+ SV: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1fb.svg',
+ SX: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1fd.svg',
+ SY: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1fe.svg',
+ SZ: 'https://twemoji.maxcdn.com/2/svg/1f1f8-1f1ff.svg',
+ TC: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1e8.svg',
+ TD: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1e9.svg',
+ TF: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1eb.svg',
+ TG: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ec.svg',
+ TH: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ed.svg',
+ TJ: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ef.svg',
+ TK: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f0.svg',
+ TL: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f1.svg',
+ TM: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f2.svg',
+ TN: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f3.svg',
+ TO: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f4.svg',
+ TR: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f7.svg',
+ TT: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1f9.svg',
+ TV: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1fb.svg',
+ TW: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1fc.svg',
+ TZ: 'https://twemoji.maxcdn.com/2/svg/1f1f9-1f1ff.svg',
+ UA: 'https://twemoji.maxcdn.com/2/svg/1f1fa-1f1e6.svg',
+ UG: 'https://twemoji.maxcdn.com/2/svg/1f1fa-1f1ec.svg',
+ UK: 'https://twemoji.maxcdn.com/2/svg/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.svg',
+ UM: 'https://twemoji.maxcdn.com/2/svg/1f1fa-1f1f2.svg',
+ UN: 'https://twemoji.maxcdn.com/2/svg/1f1fa-1f1f3.svg',
+ PM: 'https://twemoji.maxcdn.com/2/svg/1f1f5-1f1f2.svg',
+ US: 'https://twemoji.maxcdn.com/2/svg/1f1fa-1f1f8.svg',
+ UY: 'https://twemoji.maxcdn.com/2/svg/1f1fa-1f1fe.svg',
+ UZ: 'https://twemoji.maxcdn.com/2/svg/1f1fa-1f1ff.svg',
+ VA: 'https://twemoji.maxcdn.com/2/svg/1f1fb-1f1e6.svg',
+ VC: 'https://twemoji.maxcdn.com/2/svg/1f1fb-1f1e8.svg',
+ VE: 'https://twemoji.maxcdn.com/2/svg/1f1fb-1f1ea.svg',
+ VG: 'https://twemoji.maxcdn.com/2/svg/1f1fb-1f1ec.svg',
+ VI: 'https://twemoji.maxcdn.com/2/svg/1f1fb-1f1ee.svg',
+ VN: 'https://twemoji.maxcdn.com/2/svg/1f1fb-1f1f3.svg',
+ VU: 'https://twemoji.maxcdn.com/2/svg/1f1fb-1f1fa.svg',
+ WF: 'https://twemoji.maxcdn.com/2/svg/1f1fc-1f1eb.svg',
+ WS: 'https://twemoji.maxcdn.com/2/svg/1f1fc-1f1f8.svg',
+ XK: 'https://twemoji.maxcdn.com/2/svg/1f1fd-1f1f0.svg',
+ YE: 'https://twemoji.maxcdn.com/2/svg/1f1fe-1f1ea.svg',
+ YT: 'https://twemoji.maxcdn.com/2/svg/1f1fe-1f1f9.svg',
+ YU: 'https://twemoji.maxcdn.com/2/svg/1f1f7-1f1f8.svg',
+ ZA: 'https://twemoji.maxcdn.com/2/svg/1f1ff-1f1e6.svg',
+ ZM: 'https://twemoji.maxcdn.com/2/svg/1f1ff-1f1f2.svg',
+ ZW: 'https://twemoji.maxcdn.com/2/svg/1f1ff-1f1fc.svg'
+};
+
+export default countryFlag;
diff --git a/lib/token.ts b/lib/token.ts
index a464e88..61f6585 100644
--- a/lib/token.ts
+++ b/lib/token.ts
@@ -21,8 +21,8 @@ export const getToken = async (user, customClaims = {}, admin = false) => {
}
})
- // loop?
- const customClaim = JSON.parse(settings.value.replaceAll("[USER_ID]", user.id).replaceAll("[USER_EMAIL]", user.email).replaceAll("[USER_NAME]", user.name).replaceAll("[USER_KYC_STATUS]", user.kyc_verified).replaceAll("[USER_KYC_PROCESS_ID]", user.kyc_processed_id))
+
+ const customClaim = admin ? {} : JSON.parse(settings.value.replaceAll("[USER_ID]", user.id).replaceAll("[USER_EMAIL]", user.email).replaceAll("[USER_NAME]", user.name).replaceAll("[USER_KYC_STATUS]", user.kyc_verified).replaceAll("[USER_KYC_PROCESS_ID]", user.kyc_processed_id))
const token = jwt.sign(
diff --git a/pages/_app.tsx b/pages/_app.tsx
index e33b0db..ad6e184 100755
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -24,10 +24,6 @@ function MyApp({ Component, pageProps }) {
-
+
diff --git a/pages/api/auth/logout.ts b/pages/api/auth/logout.ts
index b3f8688..999250e 100644
--- a/pages/api/auth/logout.ts
+++ b/pages/api/auth/logout.ts
@@ -6,7 +6,7 @@ import { ok, oops, response } from "lib/response";
import { NextApiRequest, NextApiResponse } from "next";
-export default async function Logouthandler(req: NextApiRequest, res: NextApiResponse) {
+export default async function LogoutHandler(req: NextApiRequest, res: NextApiResponse) {
if (req.method === "OPTIONS") {
return res.status(200).send("ok")
diff --git a/pages/api/auth/nonce.ts b/pages/api/auth/nonce.ts
index 836b58a..3fdada0 100644
--- a/pages/api/auth/nonce.ts
+++ b/pages/api/auth/nonce.ts
@@ -16,7 +16,7 @@ import { corsMiddleware } from "lib/cors";
import { NextApiRequest, NextApiResponse } from "next";
-export default async function noncehandler(req: NextApiRequest, res: NextApiResponse) {
+export default async function nonceHandler(req: NextApiRequest, res: NextApiResponse) {
await corsMiddleware(req, res);
diff --git a/pages/api/console/middlerware/checkAuth.ts b/pages/api/console/middlerware/checkAuth.ts
index f4350e0..303259a 100644
--- a/pages/api/console/middlerware/checkAuth.ts
+++ b/pages/api/console/middlerware/checkAuth.ts
@@ -1,5 +1,7 @@
import { verify } from 'jsonwebtoken'
+// Admin Authentication
+
const checkAuth = (handler) => {
return async (req, res) => {
try {
@@ -9,7 +11,7 @@ const checkAuth = (handler) => {
const token = authorization.split(" ")[1]
- verify(token, process.env.JWT_SECRET);
+ verify(token, process.env.ADMIN_JWT_SECRET);
handler(req, res)
} catch (e) {
diff --git a/pages/api/console/middlerware/checkUserAuth.ts b/pages/api/console/middlerware/checkUserAuth.ts
new file mode 100644
index 0000000..9354852
--- /dev/null
+++ b/pages/api/console/middlerware/checkUserAuth.ts
@@ -0,0 +1,23 @@
+import { verify } from 'jsonwebtoken'
+
+// User Authentication
+
+const checkUserAuth = (handler) => {
+ return async (req, res) => {
+ try {
+ const authorization = req.headers["authorization"]
+
+ if (!authorization) throw new Error("not authenticated")
+ const token = authorization.split(" ")[1]
+
+
+ verify(token, process.env.JWT_SECRET);
+
+ handler(req, res)
+ } catch (e) {
+ res.status(401).send()
+ }
+ }
+}
+
+export default checkUserAuth
diff --git a/pages/api/user/profile.ts b/pages/api/user/profile.ts
index 3ebc341..e74c0c8 100644
--- a/pages/api/user/profile.ts
+++ b/pages/api/user/profile.ts
@@ -1,10 +1,10 @@
import prisma from "lib/prisma";
import { ok } from "lib/response";
-import checkAuth from "../console/middlerware/checkAuth";
+import checkUserAuth from "../console/middlerware/checkUserAuth";
import jwt_decode from "jwt-decode";
import { corsMiddleware } from "lib/cors";
-export default checkAuth(async function updateProfileHandler(req, res) {
+export default checkUserAuth(async function updateProfileHandler(req, res) {
await corsMiddleware(req, res);
const authorization = req.headers["authorization"];
diff --git a/pages/dashboard.tsx b/pages/dashboard.tsx
index 9be3e48..b6e1aaa 100644
--- a/pages/dashboard.tsx
+++ b/pages/dashboard.tsx
@@ -96,8 +96,8 @@ export default function Dashboard({ newUsers, userCount, todaysUsers, lastLoginU
)}
-
{user.name} |
-
{user.email} |
+
{user.name ?? '-'} |
+
{user.email ?? '-'} |
- | {user.name} |
-
{user.email} |
+
{user.name ?? '-'} |
+
{user.email ?? '-'} |
-
+
{auth.token == '' ? (
<>
diff --git a/pages/settings.tsx b/pages/settings.tsx
index 237fd3b..78ef1f4 100644
--- a/pages/settings.tsx
+++ b/pages/settings.tsx
@@ -10,6 +10,7 @@ import useRequest from 'hooks/useRequests';
import { useEffect } from 'react';
import toast from 'react-hot-toast';
import { validateCookie } from 'lib/cookie';
+import CountrySelect from 'components/UI/CountrySelect';
export const getServerSideProps: GetStaticProps = async (context: any) => {
return validateCookie(context, async () => {
@@ -49,7 +50,7 @@ const SettingsPage = ({ records }) => {
const form = useForm({
initialValues: {
- country_blocklist: settings.country_blocklist,
+ country_blocklist: settings.country_blocklist.split(','),
custom_jwt_claim: settings.custom_jwt_claim,
log_user_logins: settings.log_user_logins,
access_allowlist_only: settings.access_allowlist_only,
@@ -75,7 +76,10 @@ const SettingsPage = ({ records }) => {
e.preventDefault();
post({
- settings: form.values,
+ settings: {
+ ...form.values,
+ country_blocklist: form.values.country_blocklist.join(','),
+ },
});
}}
>
@@ -107,8 +111,7 @@ const SettingsPage = ({ records }) => {
onChange={() => form.setFieldValue('log_user_logins', !form.values.log_user_logins)}
/>
- |
-
{user.name} |
-
{user.email} |
+
{user.name ?? '-'} |
+
{user.email ?? '-'} |
{dayjs(user.created_at).format('DD MMM YYYY')} |
{user.last_login ? dayjs(user.last_login).format('DD MMM YYYY') : '-'} |
-
- Logs
-
-
- Details
-
+
+
+
|