├── .prettierrc
├── .vscode
└── extensions.json
├── images
├── map.png
├── post.png
└── upload.png
├── .firebaserc
├── postcss.config.js
├── .deepsource.toml
├── tailwind.config.js
├── src
├── assets
│ ├── add.svg
│ ├── logo.svg
│ ├── github-logo.svg
│ ├── Twitter.svg
│ ├── icons8-trash-can.svg
│ ├── favicon.svg
│ ├── kofi.svg
│ ├── discord-logo.svg
│ └── base.css
├── pages
│ ├── Home.vue
│ ├── Memories.vue
│ ├── Friends.vue
│ ├── Posts.vue
│ ├── About.vue
│ ├── Map.vue
│ ├── Login.vue
│ └── Blog.vue
├── index.css
├── components
│ ├── Graph.vue
│ ├── ui
│ │ ├── errorToast.vue
│ │ ├── Button.vue
│ │ ├── Input.vue
│ │ ├── BeRealPhotos.vue
│ │ ├── reactToAll.vue
│ │ ├── myCheckbox.vue
│ │ └── Carousel.vue
│ ├── posts
│ │ ├── Realmoji.vue
│ │ ├── uploadPostImage.vue
│ │ ├── PopupModal.vue
│ │ ├── uploadProfilePicture.vue
│ │ ├── singlePostComponent.vue
│ │ ├── uploadRealmoji.vue
│ │ └── uploadPost.vue
│ ├── login
│ │ └── countrypicker.vue
│ └── layout
│ │ └── Navbar.vue
├── App.vue
├── main.js
├── store
│ └── index.js
└── data
│ └── countries.js
├── .eslintrc.cjs
├── .github
├── semantic.yml
├── dependabot.yml
└── workflows
│ ├── firebase-hosting-pull-request.yml
│ └── firebase-hosting-merge.yml
├── .gitignore
├── firebase.json
├── vite.config.js
├── index.html
├── server.js
├── package.json
└── README.md
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "bracketSameLine": true
3 | }
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["Vue.volar"]
3 | }
4 |
--------------------------------------------------------------------------------
/images/map.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KaratekHD/befake/main/images/map.png
--------------------------------------------------------------------------------
/images/post.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KaratekHD/befake/main/images/post.png
--------------------------------------------------------------------------------
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "befake-623af"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/images/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/KaratekHD/befake/main/images/upload.png
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | };
7 |
--------------------------------------------------------------------------------
/.deepsource.toml:
--------------------------------------------------------------------------------
1 | version = 1
2 |
3 | [[analyzers]]
4 | name = "javascript"
5 |
6 | [analyzers.meta]
7 | plugins = ["vue"]
8 |
9 | [[transformers]]
10 | name = "prettier"
11 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],
4 | theme: {
5 | extend: {},
6 | },
7 | plugins: [],
8 | };
9 |
--------------------------------------------------------------------------------
/src/assets/add.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | /* eslint-env node */
2 | require("@rushstack/eslint-patch/modern-module-resolution");
3 |
4 | module.exports = {
5 | root: true,
6 | extends: [
7 | "plugin:vue/vue3-essential",
8 | "eslint:recommended",
9 | "@vue/eslint-config-prettier",
10 | ],
11 | };
12 |
--------------------------------------------------------------------------------
/.github/semantic.yml:
--------------------------------------------------------------------------------
1 | # Always validate the PR title AND all the commits
2 | titleAndCommits: true
3 | # Allows use of Merge commits (eg on github: "Merge branch 'master' into feature/ride-unicorns")
4 | # this is only relevant when using commitsOnly: true (or titleAndCommits: true)
5 | allowMergeCommits: true
6 |
--------------------------------------------------------------------------------
/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/pages/Home.vue:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | body {
6 | background-color: black;
7 | }
8 |
9 | /* chrommium based browsers */
10 | input::-webkit-outer-spin-button,
11 | input::-webkit-inner-spin-button {
12 | -webkit-appearance: none;
13 | margin: 0;
14 | }
15 |
16 | /* Firefox */
17 | input[type="number"] {
18 | -moz-appearance: textfield;
19 | }
20 |
--------------------------------------------------------------------------------
/src/components/Graph.vue:
--------------------------------------------------------------------------------
1 |
12 |
13 | Hello
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | # Fetch and update latest `npm` packages
4 | - package-ecosystem: npm
5 | directory: '/'
6 | schedule:
7 | interval: daily
8 | time: '00:00'
9 | open-pull-requests-limit: 10
10 | reviewers:
11 | - xkristofx
12 | assignees:
13 | - xkristofx
14 | commit-message:
15 | prefix: fix
16 | prefix-development: chore
17 | include: scope
18 |
--------------------------------------------------------------------------------
/src/components/ui/errorToast.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 | Error!
7 | {{ text }}
8 |
9 |
10 |
11 |
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | .DS_Store
12 | dist
13 | dist-ssr
14 | coverage
15 | *.local
16 |
17 | /cypress/videos/
18 | /cypress/screenshots/
19 |
20 | # Editor directories and files
21 | .vscode/*
22 | !.vscode/extensions.json
23 | .idea
24 | *.suo
25 | *.ntvs*
26 | *.njsproj
27 | *.sln
28 | *.sw?
29 | .firebase
30 |
31 | # lockfiles
32 | package-lock.json
33 |
34 | #other
35 | zzHELP.txt
--------------------------------------------------------------------------------
/src/assets/github-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "hosting": {
3 | "public": "dist",
4 | "ignore": [
5 | "firebase.json",
6 | "**/.*",
7 | "**/node_modules/**"
8 | ],
9 | "rewrites": [
10 | {
11 | "source": "**",
12 | "destination": "/index.html"
13 | }
14 | ]
15 | },
16 | "functions": [
17 | {
18 | "source": "functions",
19 | "codebase": "default",
20 | "ignore": [
21 | "node_modules",
22 | ".git",
23 | "firebase-debug.log",
24 | "firebase-debug.*.log"
25 | ]
26 | }
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/src/components/posts/Realmoji.vue:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
13 |
14 |
{{ realmoji.emoji }}
16 |
17 |
18 |
{{ realmoji.user.username }}
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/components/ui/Button.vue:
--------------------------------------------------------------------------------
1 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.github/workflows/firebase-hosting-pull-request.yml:
--------------------------------------------------------------------------------
1 | # This file was auto-generated by the Firebase CLI
2 | # https://github.com/firebase/firebase-tools
3 |
4 | name: Deploy to Firebase Hosting on PR
5 | "on": pull_request
6 | jobs:
7 | build_and_preview:
8 | runs-on: ubuntu-latest
9 | steps:
10 | - uses: actions/checkout@v3
11 | - run: npm install
12 | - run: npm run build
13 | - uses: FirebaseExtended/action-hosting-deploy@v0
14 | with:
15 | repoToken: "${{ secrets.GITHUB_TOKEN }}"
16 | firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_BEFAKE_623AF }}"
17 | projectId: befake-623af
18 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { fileURLToPath, URL } from "url";
2 |
3 | import { defineConfig } from "vite";
4 | import vue from "@vitejs/plugin-vue";
5 | import vueJsx from "@vitejs/plugin-vue-jsx";
6 |
7 | // https://vitejs.dev/config/
8 | export default defineConfig({
9 | plugins: [vue(), vueJsx()],
10 | resolve: {
11 | alias: {
12 | "@": fileURLToPath(new URL("./src", import.meta.url)),
13 | },
14 | },
15 | // remove console logs
16 | esbuild: {
17 | drop: ["debugger"],
18 | pure: [
19 | "console.log",
20 | "console.warn",
21 | "console.error",
22 | "console.debug",
23 | "console.trace",
24 | ],
25 | },
26 | });
27 |
--------------------------------------------------------------------------------
/src/components/ui/Input.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
13 |
26 |
--------------------------------------------------------------------------------
/.github/workflows/firebase-hosting-merge.yml:
--------------------------------------------------------------------------------
1 | # This file was auto-generated by the Firebase CLI
2 | # https://github.com/firebase/firebase-tools
3 |
4 | name: Deploy to Firebase Hosting on merge
5 | 'on':
6 | push:
7 | branches:
8 | - main
9 | jobs:
10 | build_and_deploy:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@v3
14 | - run: npm install
15 | - run: npm run build
16 | - uses: FirebaseExtended/action-hosting-deploy@v0
17 | with:
18 | repoToken: '${{ secrets.GITHUB_TOKEN }}'
19 | firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_BEFAKE_623AF }}'
20 | channelId: live
21 | projectId: befake-623af
22 |
--------------------------------------------------------------------------------
/src/assets/Twitter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/pages/Memories.vue:
--------------------------------------------------------------------------------
1 |
23 |
24 |
25 |
Memories
26 |
27 |
{{ m.memoryDay }}
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/assets/icons8-trash-can.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/ui/BeRealPhotos.vue:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
22 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
21 |
25 | BeFake
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
31 |
41 |
42 |
43 |
44 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/src/components/posts/uploadPostImage.vue:
--------------------------------------------------------------------------------
1 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | // code written by Rob--W author of cors-anywhere
2 | // Listen on a specific host via the HOST environment variable
3 | var host = process.env.HOST || "0.0.0.0";
4 | // Listen on a specific port via the PORT environment variable
5 | var port = process.env.PORT || 8080;
6 |
7 | var cors_proxy = require("cors-anywhere");
8 | cors_proxy
9 | .createServer({
10 | originBlacklist: [],
11 | originWhitelist: [],
12 | requireHeader: ["origin", "x-requested-with"],
13 | removeHeaders: [
14 | "cookie",
15 | "cookie2",
16 | // Strip Heroku-specific headers
17 | "x-request-start",
18 | "x-request-id",
19 | "via",
20 | "connect-time",
21 | "total-route-time",
22 | // Other Heroku added debug headers
23 | // 'x-forwarded-for',
24 | // 'x-forwarded-proto',
25 | // 'x-forwarded-port',
26 | ],
27 | redirectSameOrigin: true,
28 | httpProxyOptions: {
29 | // Do not add X-Forwarded-For, etc. headers, because Heroku already adds it.
30 | xfwd: false,
31 | },
32 | })
33 | .listen(port, host, function () {
34 | console.log("Running CORS Anywhere on " + host + ":" + port);
35 | });
36 |
--------------------------------------------------------------------------------
/src/assets/favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
9 |
11 |
15 |
18 |
22 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import VueSelect from "vue-select";
3 | import Home from "./pages/Home.vue";
4 | import About from "./pages/About.vue";
5 | import Friends from "./pages/Friends.vue";
6 | import Map from "./pages/Map.vue";
7 | import "./index.css";
8 | import App from "./App.vue";
9 | import VueClipboard from "vue3-clipboard";
10 | import { createRouter, createWebHistory } from "vue-router";
11 | import VueGtag from "vue-gtag";
12 | import store from "./store/index.js";
13 | import VueGoogleMaps from "@fawmi/vue-google-maps";
14 | import Memories from "./pages/Memories.vue";
15 |
16 | const routes = [
17 | { path: "/", component: Home },
18 | { path: "/about", component: About },
19 | { path: "/search", component: Friends },
20 | { path: "/map", component: Map },
21 | { path: "/memories", component: Memories },
22 | ];
23 |
24 | const router = createRouter({
25 | // 4. Provide the history implementation to use. We are using the hash history for simplicity here.
26 | history: createWebHistory(),
27 | routes, // short for `routes: routes`
28 | });
29 |
30 | const app = createApp(App);
31 | app.use(store);
32 | app.use(router);
33 | app.use(
34 | VueGtag,
35 | {
36 | config: { id: "G-ZJ1LQLNXRG" },
37 | },
38 | router
39 | );
40 | app.use(VueClipboard, {
41 | autoSetContainer: true,
42 | appendToBody: true,
43 | });
44 | app.use(VueGoogleMaps, {
45 | load: {
46 | key: "AIzaSyCEYjMqd66uqA-4AXsI0V-1ZyLz23dFEyY",
47 | },
48 | });
49 | app.component("v-select", VueSelect);
50 | app.config.globalProperties.window = window;
51 |
52 | app.mount("#app");
53 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "befake",
3 | "version": "1.2.8",
4 | "scripts": {
5 | "dev": "concurrently -k \"vite --host\" \"node server.js\"",
6 | "build": "run-p build-only",
7 | "deploy": "run-p deploy-only",
8 | "preview": "vite preview --port 4173",
9 | "build-only": "vite build",
10 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
11 | },
12 | "dependencies": {
13 | "@fawmi/vue-google-maps": "0.9.67",
14 | "@fortawesome/fontawesome-svg-core": "^6.4.0",
15 | "@fortawesome/free-brands-svg-icons": "^6.4.0",
16 | "@fortawesome/free-regular-svg-icons": "^6.4.0",
17 | "@fortawesome/free-solid-svg-icons": "^6.4.0",
18 | "@fortawesome/vue-fontawesome": "^3.0.3",
19 | "d3": "^7.6.1",
20 | "i": "^0.3.7",
21 | "js-sha256": "^0.9.0",
22 | "moment": "^2.29.4",
23 | "npm": "^9.2.0",
24 | "uuid": "^9.0.0",
25 | "vue": "^3.2.37",
26 | "vue-browser-geolocation": "^1.8.0",
27 | "vue-gtag": "^2.0.1",
28 | "vue-router": "^4.1.5",
29 | "vue-select": "^4.0.0-beta.6",
30 | "vue-simple-spinner": "^1.2.10",
31 | "vue-spinner": "^1.0.4",
32 | "vue3-clipboard": "^1.0.0",
33 | "vuex": "^4.0.2"
34 | },
35 | "devDependencies": {
36 | "@rushstack/eslint-patch": "^1.1.0",
37 | "@vitejs/plugin-vue": "^2.3.3",
38 | "@vitejs/plugin-vue-jsx": "^1.3.10",
39 | "@vue/eslint-config-prettier": "^7.0.0",
40 | "autoprefixer": "^10.4.7",
41 | "concurrently": "^8.2.1",
42 | "cors-anywhere": "^0.4.4",
43 | "eslint": "^8.5.0",
44 | "eslint-plugin-vue": "^9.0.0",
45 | "npm-run-all": "^4.1.5",
46 | "postcss": "^8.4.14",
47 | "prettier": "^2.5.1",
48 | "tailwindcss": "^3.1.5",
49 | "vite": "^2.9.12"
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/components/posts/PopupModal.vue:
--------------------------------------------------------------------------------
1 |
7 |
8 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/src/components/ui/reactToAll.vue:
--------------------------------------------------------------------------------
1 |
2 |
31 |
32 |
49 |
50 |
51 | {{ popupTitle }}
56 |
57 |
58 |
59 |
{{ popupTitle }}
60 |
{{ popupContent }}
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/src/assets/kofi.svg:
--------------------------------------------------------------------------------
1 |
2 |
12 |
14 |
16 |
17 | Kofi Cup
19 |
21 |
26 |
30 |
31 |
33 |
34 |
36 | Kofi Cup
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/src/assets/discord-logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/components/login/countrypicker.vue:
--------------------------------------------------------------------------------
1 |
53 |
54 |
60 |
61 |
62 |
70 |
71 |
--------------------------------------------------------------------------------
/src/assets/base.css:
--------------------------------------------------------------------------------
1 | /* color palette from */
2 | :root {
3 | --vt-c-white: #ffffff;
4 | --vt-c-white-soft: #f8f8f8;
5 | --vt-c-white-mute: #f2f2f2;
6 |
7 | --vt-c-black: #181818;
8 | --vt-c-black-soft: #222222;
9 | --vt-c-black-mute: #282828;
10 |
11 | --vt-c-indigo: #2c3e50;
12 |
13 | --vt-c-divider-light-1: rgba(60, 60, 60, 0.29);
14 | --vt-c-divider-light-2: rgba(60, 60, 60, 0.12);
15 | --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65);
16 | --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48);
17 |
18 | --vt-c-text-light-1: var(--vt-c-indigo);
19 | --vt-c-text-light-2: rgba(60, 60, 60, 0.66);
20 | --vt-c-text-dark-1: var(--vt-c-white);
21 | --vt-c-text-dark-2: rgba(235, 235, 235, 0.64);
22 | }
23 |
24 | /* semantic color variables for this project */
25 | :root {
26 | --color-background: var(--vt-c-white);
27 | --color-background-soft: var(--vt-c-white-soft);
28 | --color-background-mute: var(--vt-c-white-mute);
29 |
30 | --color-border: var(--vt-c-divider-light-2);
31 | --color-border-hover: var(--vt-c-divider-light-1);
32 |
33 | --color-heading: var(--vt-c-text-light-1);
34 | --color-text: var(--vt-c-text-light-1);
35 |
36 | --section-gap: 160px;
37 | }
38 |
39 | @media (prefers-color-scheme: dark) {
40 | :root {
41 | --color-background: var(--vt-c-black);
42 | --color-background-soft: var(--vt-c-black-soft);
43 | --color-background-mute: var(--vt-c-black-mute);
44 |
45 | --color-border: var(--vt-c-divider-dark-2);
46 | --color-border-hover: var(--vt-c-divider-dark-1);
47 |
48 | --color-heading: var(--vt-c-text-dark-1);
49 | --color-text: var(--vt-c-text-dark-2);
50 | }
51 | }
52 |
53 | *,
54 | *::before,
55 | *::after {
56 | box-sizing: border-box;
57 | margin: 0;
58 | position: relative;
59 | font-weight: normal;
60 | }
61 |
62 | body {
63 | min-height: 100vh;
64 | color: var(--color-text);
65 | background: var(--color-background);
66 | transition: color 0.5s, background-color 0.5s;
67 | line-height: 1.6;
68 | font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,
69 | Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
70 | font-size: 15px;
71 | text-rendering: optimizeLegibility;
72 | -webkit-font-smoothing: antialiased;
73 | -moz-osx-font-smoothing: grayscale;
74 | }
75 |
--------------------------------------------------------------------------------
/src/components/ui/myCheckbox.vue:
--------------------------------------------------------------------------------
1 |
2 |
26 |
27 |
59 |
60 |
61 |
62 |
63 |
70 |
71 |
75 |
80 |
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/src/pages/Friends.vue:
--------------------------------------------------------------------------------
1 |
43 |
44 |
45 |
46 |
52 | Search
53 |
54 |
55 |
58 |
59 |
60 |
68 |
69 |
{{ i.username }}
70 |
{{ i.mutualFriends }} mutual friends
71 |
72 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # BeFake
2 | ## Features
3 |
4 | 1. See friends' posts without posting anything yourself
5 |
6 | BeFake allows you to see your friends' posts without posting anything yourself. You can also screenshot their posts without them getting notified. You can also see the location (if available), date and time, retakes, comments, and realmoji reactions on all posts. You can even write your own comments straight from BeFake. Support for realmoji reactions is coming soon.
7 |
8 |
9 |
10 | 
11 |
12 | 2. Upload your own posts and realmoji reactions!
13 |
14 | You can also upload your own posts with photos from your camera roll, which will be visible to your friends. GIFs are also supported, meaning your BeReal can be a GIF! The BeFake client also supports custom location with longitude and latitude.
15 |
16 | 
17 |
18 | 3. Interactive Map
19 | See where your friends are posting from on an interactive map.The map is interactive, so you can zoom in and out, and move around. You can also click on a marker to see the details of the post in a popup on the map! Once logged in see [https://befake.ong/map](https://befake.ong/map) to see the map. Note: The map is does not work well on mobile devices.
20 | 
21 |
22 | ## Development Setup
23 |
24 | See [Vite Configuration Reference](https://vitejs.dev/config/).
25 |
26 | ## Project Setup
27 |
28 | ```sh
29 | npm install
30 | ```
31 |
32 | ### Compile and Hot-Reload for Development
33 |
34 | ```sh
35 | npm run dev
36 | ```
37 |
38 | ### Lint with [ESLint](https://eslint.org/)
39 |
40 | ```sh
41 | npm run lint
42 | ```
43 |
44 | # Contributing
45 |
46 | Thank you for considering contributing to Befake! We are grateful for your interest in helping to improve the project and make it even better.
47 |
48 | There are many ways that you can contribute to the project, including but not limited to:
49 |
50 | - Reporting bugs and submitting feature requests
51 | - Submitting pull requests for bug fixes and new features
52 |
53 | Before you start contributing, please take a moment to read through the following guidelines:
54 |
55 | - Familiarize yourself with the project and its goals.
56 | - Check the existing issues to see if your bug or feature request has already been reported. If it has, please add your thoughts to the existing issue.
57 | - Follow the project's code style and conventions.
58 | - Test your changes thoroughly before submitting a pull request.
59 | - Make sure your pull request targets the correct branch (usually master).
60 | - Thank you for your contributions! Every bug report, feature request, and code change helps make befake better for everyone.
61 |
62 | # Donations
63 |
64 | This project is free and open source. If you would like to support the development of this project, you can donate to the project [here](https://ko-fi.com/rahulvaidun)
65 |
--------------------------------------------------------------------------------
/src/components/ui/Carousel.vue:
--------------------------------------------------------------------------------
1 |
65 |
73 |
74 |
75 |
79 |
80 |
81 |
84 |
85 |
86 |
89 |
90 |
91 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/src/pages/Posts.vue:
--------------------------------------------------------------------------------
1 |
82 |
83 |
84 |
85 |
88 | Donate
89 |
90 |
91 | NEW!
92 | Always post on time even when you're not online :)
93 |
94 |
95 |
96 |
101 |
105 |
107 |
108 |
111 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/src/pages/About.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
Hi! 👋
10 |
11 | This website was created by
12 | Rahul Vaidun I am a 20 year old college
13 | student from California majoring in Computer Science.
14 |
15 |
16 |
17 | I created this website as a side project to learn more about Vue.js
18 | and web development. I also wanted to reverse engineer BeReal's API
19 | and create a web app that would allow users to view their BeReal data.
20 | This happens to allow users to also view their friends BeReals without
21 | posting their own BeReals and screenshot BeReals. This website was
22 | designed from ground up to work on mobile devices. All the styling is
23 | done with Tailwind CSS
24 |
25 |
26 | If you are interested in viewing the source code or making your own
27 | contributions to BeFake check out our
28 | github repository
31 |
32 |
Features
33 |
34 | See friends' posts without posting anything yourself BeFake allows you
35 | to see your friends' posts without posting anything yourself. You can
36 | also screenshot their posts without them getting notified. You can
37 | also see the location (if available), date and time, retakes,
38 | comments, and realmoji reactions on all posts. You can even write your
39 | own comments straight from BeFake.
40 |
41 |
42 |
43 | 2. Upload your own posts and realmoji reactions! You can also upload
44 | your own posts with photos from your camera roll, which will be
45 | visible to your friends. GIFs are also supported, meaning your BeReal
46 | can be a GIF! The BeFake client also supports custom location with
47 | longitude and latitude.
48 |
49 |
50 |
Contact me
51 |
52 |
Twitter
53 |
LinkedIn
54 |
Github
55 |
Instagram
56 |
57 |
Email
58 |
Donation
61 |
62 |
63 |
64 |
65 |
Contributors:
66 |
67 |
xKRISTOFx
72 |
73 |
74 |
75 | Student at Technikum Nowoczesnych Technologii, Kleszczów, Poland
76 |
77 |
78 | I made numerous improvements to the application, improved
79 | selection of countries,
80 |
81 |
82 | implemented responding to all bereals at once and many other minor
83 | ones.
84 |
85 |
Contact:
86 |
⬆️Click on my green nickname⬆️
87 |
88 |
89 |
90 |
91 |
92 |
93 |
--------------------------------------------------------------------------------
/src/components/layout/Navbar.vue:
--------------------------------------------------------------------------------
1 |
23 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
65 |
69 | BeFake
70 |
71 |
72 |
73 |
77 |
78 |
82 | Donate
83 |
84 |
85 |
86 |
87 |
(showNav = false)">
91 | Map
92 |
93 |
(showNav = false)">
97 | About
98 |
99 |
(showNav = false)">
103 | memories
104 |
105 |
109 | Logout
110 |
111 |
112 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
125 |
126 |
127 | e.stopPropagation()"
130 | class="flex flex-col gap-4 bg-black p-8 w-full z-50 fixed bottom-0">
131 |
135 |
136 |
140 | Donate
141 |
142 |
143 |
144 |
145 |
(showNav = false)">
149 | Map
150 |
151 |
(showNav = false)">
155 | About
156 |
157 |
158 |
(showNav = false)">
162 | Memoriues
163 |
164 |
168 | Logout
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
--------------------------------------------------------------------------------
/src/components/posts/uploadProfilePicture.vue:
--------------------------------------------------------------------------------
1 |
150 |
151 |
152 |
172 |
173 |
174 |
175 |
177 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 | Update Profile Picture
197 |
198 |
199 |
200 |
--------------------------------------------------------------------------------
/src/pages/Map.vue:
--------------------------------------------------------------------------------
1 |
10 |
11 |
17 |
31 |
35 |
36 |
37 |
38 |
39 |
40 |
255 |
--------------------------------------------------------------------------------
/src/components/posts/singlePostComponent.vue:
--------------------------------------------------------------------------------
1 |
112 |
113 |
115 |
116 |
117 |
137 |
138 |
139 |
140 | {{ user.username }}
141 |
142 |
143 |
144 |
145 | {{ reverseGeo }}
146 |
147 |
148 |
149 |
150 | {{ curpost.music.track }} - {{ curpost.music.artist }}
151 |
152 |
153 |
154 | Your browser does not support the audio element.
155 |
156 |
157 |
158 |
159 |
160 |
166 |
167 |
168 |
169 |
181 |
182 |
183 |
184 |
185 |
189 |
192 |
198 |
205 |
206 |
207 |
208 |
214 |
221 |
222 |
223 |
224 |
225 | {{ postdate() }}
226 | Retakes - {{ curpost.retakeCounter }}
227 |
228 |
229 |
230 | {{ user.username + ": " }}
231 | {{ curpost.caption }}
232 |
233 |
234 |
235 |
236 | {{ c.user.username + ": " }}
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
248 |
249 |
250 |
251 |
256 | Submit
259 |
260 |
261 |
262 |
--------------------------------------------------------------------------------
/src/components/posts/uploadRealmoji.vue:
--------------------------------------------------------------------------------
1 |
214 |
215 |
216 |
217 |
221 |
226 |
227 |
{{ realmoji.emoji }}
229 |
230 |
231 |
232 |
234 |
240 |
241 |
242 |
243 |
244 |
245 |
249 |
250 |
251 |
252 |
253 |
254 |
259 |
260 |
261 |
262 |
279 |
--------------------------------------------------------------------------------
/src/components/posts/uploadPost.vue:
--------------------------------------------------------------------------------
1 |
221 |
222 |
223 |
225 |
226 |
227 |
241 |
242 |
243 |
244 | {{ user.username }}
245 |
246 |
247 |
248 |
249 |
250 | Upload a post
251 |
252 |
First box is back camera. Second box is front camera.
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
Public
262 |
263 |
264 |
Post with location
265 |
266 |
270 |
274 |
275 |
276 |
277 |
Post on time
278 |
279 |
280 |
281 | Submit
282 |
283 |
284 |
285 |
286 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import { createStore } from "vuex";
2 | import { event } from "vue-gtag";
3 | const store = createStore({
4 | state() {
5 | return {
6 | proxyUrl: "http://localhost:8080", // cors-anywhere server
7 | // proxyUrl: "/proxy",
8 | loggedIn: localStorage.getItem("token") ? true : false,
9 | posts: [],
10 | user: {},
11 | userPosted: false,
12 | error: {
13 | text: "",
14 | show: false,
15 | },
16 | };
17 | },
18 | mutations: {
19 | error(state, payload) {
20 | console.log("in error mutation");
21 | state.error.text = payload;
22 | state.error.show = true;
23 | setTimeout(() => {
24 | state.error.show = false;
25 | console.log("in error after timeout");
26 | }, 5000);
27 | },
28 | logout(state) {
29 | localStorage.removeItem("token");
30 | localStorage.removeItem("expiration");
31 | localStorage.removeItem("refreshToken");
32 | localStorage.removeItem("user_id");
33 | localStorage.removeItem("fbrefreshtoken");
34 | localStorage.removeItem("fbtoken");
35 | state.loggedIn = false;
36 | },
37 | login(state) {
38 | state.loggedIn = true;
39 | },
40 | user(state, user) {
41 | state.user = user;
42 | },
43 | posts(state, posts) {
44 | state.posts = posts;
45 | },
46 | setposted(state, posted) {
47 | state.userPosted = posted;
48 | },
49 | },
50 | actions: {
51 | async login({ commit, dispatch }) {
52 | dispatch("getUser");
53 | commit("login");
54 | },
55 | refresh({ commit, state }) {
56 | console.log("in refresh");
57 | if (Date.now() > localStorage.getItem("expiration")) {
58 | console.log("in refresh if");
59 | return fetch(
60 | `${state.proxyUrl}/https://securetoken.googleapis.com/v1/token?key=AIzaSyDwjfEeparokD7sXPVQli9NsTuhT6fJ6iA`,
61 | {
62 | method: "POST",
63 | headers: {
64 | "content-type": "application/json",
65 | "x-firebase-client":
66 | "apple-platform/ios apple-sdk/19F64 appstore/true deploy/cocoapods device/iPhone13,2 fire-abt/8.15.0 fire-analytics/8.15.0 fire-auth/8.15.0 fire-db/8.15.0 fire-dl/8.15.0 fire-fcm/8.15.0 fire-fiam/8.15.0 fire-fst/8.15.0 fire-fun/8.15.0 fire-install/8.15.0 fire-ios/8.15.0 fire-perf/8.15.0 fire-rc/8.15.0 fire-str/8.15.0 firebase-crashlytics/8.15.0 os-version/15.5 xcode/13F100",
67 | accept: "*/*",
68 | "x-client-version": "iOS/FirebaseSDK/8.15.0/FirebaseCore-iOS",
69 | "x-firebase-client-log-type": "0",
70 | "x-ios-bundle-identifier": "AlexisBarreyat.BeReal",
71 | "accept-language": "en",
72 | "user-agent":
73 | "FirebaseAuth.iOS/8.15.0 AlexisBarreyat.BeReal/0.22.4 iPhone/15.5 hw/iPhone13_2",
74 | "x-firebase-locale": "en",
75 | },
76 | body: JSON.stringify({
77 | grant_type: "refresh_token",
78 | refresh_token: localStorage.getItem("fbrefreshtoken"),
79 | }),
80 | }
81 | )
82 | .then((res) => {
83 | if (!res.ok) {
84 | throw Error(res.statusText);
85 | }
86 | return res.json();
87 | })
88 | .then((tokendata) => {
89 | localStorage.setItem("fbrefreshtoken", tokendata.refresh_token);
90 | localStorage.setItem("fbtoken", tokendata.id_token);
91 | localStorage.setItem("user_id", tokendata.user_id);
92 | return fetch(
93 | `${state.proxyUrl}/https://auth.bereal.team/token?grant_type=firebase`,
94 | {
95 | method: "POST",
96 | headers: {
97 | accept: "application/json",
98 | "content-type": "application/json",
99 | "user-agent": "BeReal/7242 CFNetwork/1333.0.4 Darwin/21.5.0",
100 | "accept-language": "en-US,en;q=0.9",
101 | },
102 | body: JSON.stringify({
103 | grant_type: "firebase",
104 | client_id: "android",
105 | client_secret: "F5A71DA-32C7-425C-A3E3-375B4DACA406",
106 | token: tokendata.id_token,
107 | }),
108 | }
109 | )
110 | .then((res) => {
111 | if (!res.ok) {
112 | throw Error(res.statusText);
113 | }
114 | return res.json();
115 | })
116 | .then((data) => {
117 | localStorage.setItem("token", data.access_token);
118 | localStorage.setItem("refreshToken", data.refresh_token);
119 | localStorage.expiration =
120 | Date.now() + parseInt(data.expires_in) * 1000;
121 | return true;
122 | });
123 | })
124 | .catch((err) => {
125 | console.log("error while refreshing");
126 | console.log(err);
127 | });
128 | } else {
129 | return Promise.resolve(true);
130 | }
131 | },
132 | async getPosts({ commit, state, dispatch }) {
133 | return dispatch("refresh")
134 | .then(() => {
135 | console.log("successfully refreshed");
136 | return Promise.all([
137 | fetch(
138 | `${state.proxyUrl}/https://mobile.bereal.com/api/feeds/friends-v1`,
139 | {
140 | method: "GET",
141 | headers: {
142 | accept: "application/json",
143 | "content-type": "application/json",
144 | "user-agent": "BeReal/7242 CFNetwork/1333.0.4 Darwin/21.5.0",
145 | "accept-language": "en-US,en;q=0.9",
146 | authorization:
147 | `Bearer ${localStorage.getItem("token")}` ?? "",
148 | },
149 | }
150 | )
151 | .then((res) => {
152 | if (!res.ok) throw new Error("Error getting posts");
153 | return res.json();
154 | })
155 | .then((data) => {
156 | // reverse data.friendsPosts
157 | data.friendsPosts.reverse();
158 | // for each post in data.friendsPosts reverse the posts
159 | // data.friendsPosts.forEach((post) => {
160 | // post.posts.reverse();
161 | // });
162 | // if data.userPosts exist and data.friendsPosts exist and data.friendsPosts.length > 0 then prepend the userPosts object to the friendsPosts array
163 | if (data.userPosts && data.friendsPosts) {
164 | data.friendsPosts.unshift(data.userPosts);
165 | }
166 |
167 | commit("posts", data.friendsPosts);
168 | }),
169 | fetch(`${state.proxyUrl}/https://mobile.bereal.com/api/person/me`, {
170 | method: "GET",
171 | headers: {
172 | accept: "application/json",
173 | "content-type": "application/json",
174 | "user-agent": "BeReal/7242 CFNetwork/1333.0.4 Darwin/21.5.0",
175 | "accept-language": "en-US,en;q=0.9",
176 | authorization: `Bearer ${localStorage.getItem("token")}` ?? "",
177 | },
178 | })
179 | .then((res) => {
180 | if (!res.ok) throw new Error("Error getting user");
181 | return res.json();
182 | })
183 | .then((data) => {
184 | commit("user", data);
185 | }),
186 | ]);
187 | })
188 | .then(() => {
189 | return true;
190 | })
191 | .catch((err) => {
192 | reject(err);
193 | });
194 | },
195 | async getUser({ commit, state, dispatch }) {
196 | // const x = await dispatch("refresh");
197 | // if (!x) return Promise.reject("error refreshing the token");
198 | // return dispatch("refresh").then((res) => {
199 | // // fetch(`${state.proxyUrl}/https://mobile.bereal.com/api/person/me`, {
200 | // // method: "GET",
201 | // // headers: {
202 | // // accept: "application/json",
203 | // // "content-type": "application/json",
204 | // // "user-agent": "BeReal/7242 CFNetwork/1333.0.4 Darwin/21.5.0",
205 | // // "accept-language": "en-US,en;q=0.9",
206 | // // authorization: localStorage.getItem("token") ?? "",
207 | // // },
208 | // // })
209 | // // .then((res) => res.json())
210 | // // .then((data) => {
211 | // // commit("user", data);
212 | // // });
213 | // });
214 | },
215 | async deletePost({ commit, state, dispatch }) {
216 | fetch(`${state.proxyUrl}/https://mobile.bereal.com/api/content/posts`, {
217 | method: "DELETE",
218 | headers: {
219 | accept: "application/json",
220 | "content-type": "application/json",
221 | "user-agent": "BeReal/7242 CFNetwork/1333.0.4 Darwin/21.5.0",
222 | "accept-language": "en-US,en;q=0.9",
223 | authorization: `Bearer ${localStorage.getItem("token") ?? ""}`,
224 | },
225 | body: JSON.stringify({
226 | data: {
227 | uid: state.user.id,
228 | },
229 | }),
230 | }).then((res) => {
231 | if (res.ok) {
232 | commit("setposted", false);
233 | dispatch("getPosts");
234 | event("post", "delete");
235 | } else {
236 | commit("error", "Error deleting post");
237 | }
238 | });
239 | },
240 | async getMemories({ commit, state, dispatch }) {
241 | fetch(`${state.proxyUrl}/https://mobile.bereal.com/api/feeds/memories`, {
242 | method: "GET",
243 | headers: {
244 | accept: "application/json",
245 | "content-type": "application/json",
246 | "user-agent": "BeReal/7242 CFNetwork/1333.0.4 Darwin/21.5.0",
247 | authorization: `Bearer ${localStorage.getItem("token") ?? ""}`,
248 | "accept-language": "en-US,en;q=0.9",
249 | },
250 | })
251 | .then((res) => res.json())
252 | .then((data) => {
253 | console.log(data);
254 | state.memories = data.data;
255 | });
256 | },
257 | },
258 | });
259 |
260 | export default store;
261 |
--------------------------------------------------------------------------------
/src/pages/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
BeFake
5 | A BeReal Viewer
6 |
7 |
9 |
10 |
16 | Send
17 |
18 |
19 |
20 |
21 |
23 | Enter the OTP sent to your phone number:
25 |
26 |
32 | Verify
33 |
34 |
35 |
36 |
311 |
--------------------------------------------------------------------------------
/src/pages/Blog.vue:
--------------------------------------------------------------------------------
1 |
326 |
327 |
328 |
329 |
333 |
334 |
{{ post.title }}
335 |
{{ post.description }}
336 |
{{ post.date }}
337 |
338 |
339 |
340 |
341 |
342 |
343 |
{{ posts[$route.params.id].title }}
344 |
{{ posts[$route.params.id].description }}
345 |
{{ posts[$route.params.id].date }}
346 |
By Rahul Vaidun
347 |
348 |
349 |
350 |
351 |
--------------------------------------------------------------------------------
/src/data/countries.js:
--------------------------------------------------------------------------------
1 | const countries = [
2 | {
3 | name: "Afghanistan",
4 | dialCode: "+93",
5 | isoCode: "AF",
6 | flag: "https://cdn.kcak11.com/CountryFlags/countries/af.svg",
7 | },
8 | {
9 | name: "Aland Islands",
10 | dialCode: "+358",
11 | isoCode: "AX",
12 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ax.svg",
13 | },
14 | {
15 | name: "Albania",
16 | dialCode: "+355",
17 | isoCode: "AL",
18 | flag: "https://cdn.kcak11.com/CountryFlags/countries/al.svg",
19 | },
20 | {
21 | name: "Algeria",
22 | dialCode: "+213",
23 | isoCode: "DZ",
24 | flag: "https://cdn.kcak11.com/CountryFlags/countries/dz.svg",
25 | },
26 | {
27 | name: "American Samoa",
28 | dialCode: "+1684",
29 | isoCode: "AS",
30 | flag: "https://cdn.kcak11.com/CountryFlags/countries/as.svg",
31 | },
32 | {
33 | name: "Andorra",
34 | dialCode: "+376",
35 | isoCode: "AD",
36 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ad.svg",
37 | },
38 | {
39 | name: "Angola",
40 | dialCode: "+244",
41 | isoCode: "AO",
42 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ao.svg",
43 | },
44 | {
45 | name: "Anguilla",
46 | dialCode: "+1264",
47 | isoCode: "AI",
48 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ai.svg",
49 | },
50 | {
51 | name: "Antarctica",
52 | dialCode: "+672",
53 | isoCode: "AQ",
54 | flag: "https://cdn.kcak11.com/CountryFlags/countries/aq.svg",
55 | },
56 | {
57 | name: "Antigua and Barbuda",
58 | dialCode: "+1268",
59 | isoCode: "AG",
60 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ag.svg",
61 | },
62 | {
63 | name: "Argentina",
64 | dialCode: "+54",
65 | isoCode: "AR",
66 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ar.svg",
67 | },
68 | {
69 | name: "Armenia",
70 | dialCode: "+374",
71 | isoCode: "AM",
72 | flag: "https://cdn.kcak11.com/CountryFlags/countries/am.svg",
73 | },
74 | {
75 | name: "Aruba",
76 | dialCode: "+297",
77 | isoCode: "AW",
78 | flag: "https://cdn.kcak11.com/CountryFlags/countries/aw.svg",
79 | },
80 | {
81 | name: "Ascension Island",
82 | dialCode: "+247",
83 | isoCode: "AC",
84 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ac.svg",
85 | },
86 | {
87 | name: "Australia",
88 | dialCode: "+61",
89 | isoCode: "AU",
90 | flag: "https://cdn.kcak11.com/CountryFlags/countries/au.svg",
91 | },
92 | {
93 | name: "Austria",
94 | dialCode: "+43",
95 | isoCode: "AT",
96 | flag: "https://cdn.kcak11.com/CountryFlags/countries/at.svg",
97 | },
98 | {
99 | name: "Azerbaijan",
100 | dialCode: "+994",
101 | isoCode: "AZ",
102 | flag: "https://cdn.kcak11.com/CountryFlags/countries/az.svg",
103 | },
104 | {
105 | name: "Bahamas",
106 | dialCode: "+1242",
107 | isoCode: "BS",
108 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bs.svg",
109 | },
110 | {
111 | name: "Bahrain",
112 | dialCode: "+973",
113 | isoCode: "BH",
114 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bh.svg",
115 | },
116 | {
117 | name: "Bangladesh",
118 | dialCode: "+880",
119 | isoCode: "BD",
120 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bd.svg",
121 | },
122 | {
123 | name: "Barbados",
124 | dialCode: "+1246",
125 | isoCode: "BB",
126 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bb.svg",
127 | },
128 | {
129 | name: "Belarus",
130 | dialCode: "+375",
131 | isoCode: "BY",
132 | flag: "https://cdn.kcak11.com/CountryFlags/countries/by.svg",
133 | },
134 | {
135 | name: "Belgium",
136 | dialCode: "+32",
137 | isoCode: "BE",
138 | flag: "https://cdn.kcak11.com/CountryFlags/countries/be.svg",
139 | },
140 | {
141 | name: "Belize",
142 | dialCode: "+501",
143 | isoCode: "BZ",
144 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bz.svg",
145 | },
146 | {
147 | name: "Benin",
148 | dialCode: "+229",
149 | isoCode: "BJ",
150 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bj.svg",
151 | },
152 | {
153 | name: "Bermuda",
154 | dialCode: "+1441",
155 | isoCode: "BM",
156 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bm.svg",
157 | },
158 | {
159 | name: "Bhutan",
160 | dialCode: "+975",
161 | isoCode: "BT",
162 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bt.svg",
163 | },
164 | {
165 | name: "Bolivia",
166 | dialCode: "+591",
167 | isoCode: "BO",
168 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bo.svg",
169 | },
170 | {
171 | name: "Bosnia and Herzegovina",
172 | dialCode: "+387",
173 | isoCode: "BA",
174 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ba.svg",
175 | },
176 | {
177 | name: "Botswana",
178 | dialCode: "+267",
179 | isoCode: "BW",
180 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bw.svg",
181 | },
182 | {
183 | name: "Brazil",
184 | dialCode: "+55",
185 | isoCode: "BR",
186 | flag: "https://cdn.kcak11.com/CountryFlags/countries/br.svg",
187 | },
188 | {
189 | name: "British Indian Ocean Territory",
190 | dialCode: "+246",
191 | isoCode: "IO",
192 | flag: "https://cdn.kcak11.com/CountryFlags/countries/io.svg",
193 | },
194 | {
195 | name: "Brunei Darussalam",
196 | dialCode: "+673",
197 | isoCode: "BN",
198 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bn.svg",
199 | },
200 | {
201 | name: "Bulgaria",
202 | dialCode: "+359",
203 | isoCode: "BG",
204 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bg.svg",
205 | },
206 | {
207 | name: "Burkina Faso",
208 | dialCode: "+226",
209 | isoCode: "BF",
210 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bf.svg",
211 | },
212 | {
213 | name: "Burundi",
214 | dialCode: "+257",
215 | isoCode: "BI",
216 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bi.svg",
217 | },
218 | {
219 | name: "Cambodia",
220 | dialCode: "+855",
221 | isoCode: "KH",
222 | flag: "https://cdn.kcak11.com/CountryFlags/countries/kh.svg",
223 | },
224 | {
225 | name: "Cameroon",
226 | dialCode: "+237",
227 | isoCode: "CM",
228 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cm.svg",
229 | },
230 | {
231 | name: "Canada",
232 | dialCode: "+1",
233 | isoCode: "CA",
234 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ca.svg",
235 | },
236 | {
237 | name: "Cape Verde",
238 | dialCode: "+238",
239 | isoCode: "CV",
240 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cv.svg",
241 | },
242 | {
243 | name: "Cayman Islands",
244 | dialCode: "+1345",
245 | isoCode: "KY",
246 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ky.svg",
247 | },
248 | {
249 | name: "Central African Republic",
250 | dialCode: "+236",
251 | isoCode: "CF",
252 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cf.svg",
253 | },
254 | {
255 | name: "Chad",
256 | dialCode: "+235",
257 | isoCode: "TD",
258 | flag: "https://cdn.kcak11.com/CountryFlags/countries/td.svg",
259 | },
260 | {
261 | name: "Chile",
262 | dialCode: "+56",
263 | isoCode: "CL",
264 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cl.svg",
265 | },
266 | {
267 | name: "China",
268 | dialCode: "+86",
269 | isoCode: "CN",
270 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cn.svg",
271 | },
272 | {
273 | name: "Christmas Island",
274 | dialCode: "+61",
275 | isoCode: "CX",
276 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cx.svg",
277 | },
278 | {
279 | name: "Cocos (Keeling) Islands",
280 | dialCode: "+61",
281 | isoCode: "CC",
282 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cc.svg",
283 | },
284 | {
285 | name: "Colombia",
286 | dialCode: "+57",
287 | isoCode: "CO",
288 | flag: "https://cdn.kcak11.com/CountryFlags/countries/co.svg",
289 | },
290 | {
291 | name: "Comoros",
292 | dialCode: "+269",
293 | isoCode: "KM",
294 | flag: "https://cdn.kcak11.com/CountryFlags/countries/km.svg",
295 | },
296 | {
297 | name: "Congo",
298 | dialCode: "+242",
299 | isoCode: "CG",
300 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cg.svg",
301 | },
302 | {
303 | name: "Cook Islands",
304 | dialCode: "+682",
305 | isoCode: "CK",
306 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ck.svg",
307 | },
308 | {
309 | name: "Costa Rica",
310 | dialCode: "+506",
311 | isoCode: "CR",
312 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cr.svg",
313 | },
314 | {
315 | name: "Croatia",
316 | dialCode: "+385",
317 | isoCode: "HR",
318 | flag: "https://cdn.kcak11.com/CountryFlags/countries/hr.svg",
319 | },
320 | {
321 | name: "Cuba",
322 | dialCode: "+53",
323 | isoCode: "CU",
324 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cu.svg",
325 | },
326 | {
327 | name: "Cyprus",
328 | dialCode: "+357",
329 | isoCode: "CY",
330 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cy.svg",
331 | },
332 | {
333 | name: "Czech Republic",
334 | dialCode: "+420",
335 | isoCode: "CZ",
336 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cz.svg",
337 | },
338 | {
339 | name: "Democratic Republic of the Congo",
340 | dialCode: "+243",
341 | isoCode: "CD",
342 | flag: "https://cdn.kcak11.com/CountryFlags/countries/cd.svg",
343 | },
344 | {
345 | name: "Denmark",
346 | dialCode: "+45",
347 | isoCode: "DK",
348 | flag: "https://cdn.kcak11.com/CountryFlags/countries/dk.svg",
349 | },
350 | {
351 | name: "Djibouti",
352 | dialCode: "+253",
353 | isoCode: "DJ",
354 | flag: "https://cdn.kcak11.com/CountryFlags/countries/dj.svg",
355 | },
356 | {
357 | name: "Dominica",
358 | dialCode: "+1767",
359 | isoCode: "DM",
360 | flag: "https://cdn.kcak11.com/CountryFlags/countries/dm.svg",
361 | },
362 | {
363 | name: "Dominican Republic",
364 | dialCode: "+1849",
365 | isoCode: "DO",
366 | flag: "https://cdn.kcak11.com/CountryFlags/countries/do.svg",
367 | },
368 | {
369 | name: "Ecuador",
370 | dialCode: "+593",
371 | isoCode: "EC",
372 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ec.svg",
373 | },
374 | {
375 | name: "Egypt",
376 | dialCode: "+20",
377 | isoCode: "EG",
378 | flag: "https://cdn.kcak11.com/CountryFlags/countries/eg.svg",
379 | },
380 | {
381 | name: "El Salvador",
382 | dialCode: "+503",
383 | isoCode: "SV",
384 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sv.svg",
385 | },
386 | {
387 | name: "Equatorial Guinea",
388 | dialCode: "+240",
389 | isoCode: "GQ",
390 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gq.svg",
391 | },
392 | {
393 | name: "Eritrea",
394 | dialCode: "+291",
395 | isoCode: "ER",
396 | flag: "https://cdn.kcak11.com/CountryFlags/countries/er.svg",
397 | },
398 | {
399 | name: "Estonia",
400 | dialCode: "+372",
401 | isoCode: "EE",
402 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ee.svg",
403 | },
404 | {
405 | name: "Eswatini",
406 | dialCode: "+268",
407 | isoCode: "SZ",
408 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sz.svg",
409 | },
410 | {
411 | name: "Ethiopia",
412 | dialCode: "+251",
413 | isoCode: "ET",
414 | flag: "https://cdn.kcak11.com/CountryFlags/countries/et.svg",
415 | },
416 | {
417 | name: "Falkland Islands (Malvinas)",
418 | dialCode: "+500",
419 | isoCode: "FK",
420 | flag: "https://cdn.kcak11.com/CountryFlags/countries/fk.svg",
421 | },
422 | {
423 | name: "Faroe Islands",
424 | dialCode: "+298",
425 | isoCode: "FO",
426 | flag: "https://cdn.kcak11.com/CountryFlags/countries/fo.svg",
427 | },
428 | {
429 | name: "Fiji",
430 | dialCode: "+679",
431 | isoCode: "FJ",
432 | flag: "https://cdn.kcak11.com/CountryFlags/countries/fj.svg",
433 | },
434 | {
435 | name: "Finland",
436 | dialCode: "+358",
437 | isoCode: "FI",
438 | flag: "https://cdn.kcak11.com/CountryFlags/countries/fi.svg",
439 | },
440 | {
441 | name: "France",
442 | dialCode: "+33",
443 | isoCode: "FR",
444 | flag: "https://cdn.kcak11.com/CountryFlags/countries/fr.svg",
445 | },
446 | {
447 | name: "French Guiana",
448 | dialCode: "+594",
449 | isoCode: "GF",
450 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gf.svg",
451 | },
452 | {
453 | name: "French Polynesia",
454 | dialCode: "+689",
455 | isoCode: "PF",
456 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pf.svg",
457 | },
458 | {
459 | name: "Gabon",
460 | dialCode: "+241",
461 | isoCode: "GA",
462 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ga.svg",
463 | },
464 | {
465 | name: "Gambia",
466 | dialCode: "+220",
467 | isoCode: "GM",
468 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gm.svg",
469 | },
470 | {
471 | name: "Georgia",
472 | dialCode: "+995",
473 | isoCode: "GE",
474 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ge.svg",
475 | },
476 | {
477 | name: "Germany",
478 | dialCode: "+49",
479 | isoCode: "DE",
480 | flag: "https://cdn.kcak11.com/CountryFlags/countries/de.svg",
481 | },
482 | {
483 | name: "Ghana",
484 | dialCode: "+233",
485 | isoCode: "GH",
486 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gh.svg",
487 | },
488 | {
489 | name: "Gibraltar",
490 | dialCode: "+350",
491 | isoCode: "GI",
492 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gi.svg",
493 | },
494 | {
495 | name: "Greece",
496 | dialCode: "+30",
497 | isoCode: "GR",
498 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gr.svg",
499 | },
500 | {
501 | name: "Greenland",
502 | dialCode: "+299",
503 | isoCode: "GL",
504 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gl.svg",
505 | },
506 | {
507 | name: "Grenada",
508 | dialCode: "+1473",
509 | isoCode: "GD",
510 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gd.svg",
511 | },
512 | {
513 | name: "Guadeloupe",
514 | dialCode: "+590",
515 | isoCode: "GP",
516 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gp.svg",
517 | },
518 | {
519 | name: "Guam",
520 | dialCode: "+1671",
521 | isoCode: "GU",
522 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gu.svg",
523 | },
524 | {
525 | name: "Guatemala",
526 | dialCode: "+502",
527 | isoCode: "GT",
528 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gt.svg",
529 | },
530 | {
531 | name: "Guernsey",
532 | dialCode: "+44-1481",
533 | isoCode: "GG",
534 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gg.svg",
535 | },
536 | {
537 | name: "Guinea",
538 | dialCode: "+224",
539 | isoCode: "GN",
540 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gn.svg",
541 | },
542 | {
543 | name: "Guinea-Bissau",
544 | dialCode: "+245",
545 | isoCode: "GW",
546 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gw.svg",
547 | },
548 | {
549 | name: "Guyana",
550 | dialCode: "+592",
551 | isoCode: "GY",
552 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gy.svg",
553 | },
554 | {
555 | name: "Haiti",
556 | dialCode: "+509",
557 | isoCode: "HT",
558 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ht.svg",
559 | },
560 | {
561 | name: "Holy See (Vatican City State)",
562 | dialCode: "+379",
563 | isoCode: "VA",
564 | flag: "https://cdn.kcak11.com/CountryFlags/countries/va.svg",
565 | },
566 | {
567 | name: "Honduras",
568 | dialCode: "+504",
569 | isoCode: "HN",
570 | flag: "https://cdn.kcak11.com/CountryFlags/countries/hn.svg",
571 | },
572 | {
573 | name: "Hong Kong",
574 | dialCode: "+852",
575 | isoCode: "HK",
576 | flag: "https://cdn.kcak11.com/CountryFlags/countries/hk.svg",
577 | },
578 | {
579 | name: "Hungary",
580 | dialCode: "+36",
581 | isoCode: "HU",
582 | flag: "https://cdn.kcak11.com/CountryFlags/countries/hu.svg",
583 | },
584 | {
585 | name: "Iceland",
586 | dialCode: "+354",
587 | isoCode: "IS",
588 | flag: "https://cdn.kcak11.com/CountryFlags/countries/is.svg",
589 | },
590 | {
591 | name: "India",
592 | dialCode: "+91",
593 | isoCode: "IN",
594 | flag: "https://cdn.kcak11.com/CountryFlags/countries/in.svg",
595 | },
596 | {
597 | name: "Indonesia",
598 | dialCode: "+62",
599 | isoCode: "ID",
600 | flag: "https://cdn.kcak11.com/CountryFlags/countries/id.svg",
601 | },
602 | {
603 | name: "Iran",
604 | dialCode: "+98",
605 | isoCode: "IR",
606 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ir.svg",
607 | },
608 | {
609 | name: "Iraq",
610 | dialCode: "+964",
611 | isoCode: "IQ",
612 | flag: "https://cdn.kcak11.com/CountryFlags/countries/iq.svg",
613 | },
614 | {
615 | name: "Ireland",
616 | dialCode: "+353",
617 | isoCode: "IE",
618 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ie.svg",
619 | },
620 | {
621 | name: "Isle of Man",
622 | dialCode: "+44-1624",
623 | isoCode: "IM",
624 | flag: "https://cdn.kcak11.com/CountryFlags/countries/im.svg",
625 | },
626 | {
627 | name: "Israel",
628 | dialCode: "+972",
629 | isoCode: "IL",
630 | flag: "https://cdn.kcak11.com/CountryFlags/countries/il.svg",
631 | },
632 | {
633 | name: "Italy",
634 | dialCode: "+39",
635 | isoCode: "IT",
636 | flag: "https://cdn.kcak11.com/CountryFlags/countries/it.svg",
637 | },
638 | {
639 | name: "Ivory Coast / Cote d'Ivoire",
640 | dialCode: "+225",
641 | isoCode: "CI",
642 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ci.svg",
643 | },
644 | {
645 | name: "Jamaica",
646 | dialCode: "+1876",
647 | isoCode: "JM",
648 | flag: "https://cdn.kcak11.com/CountryFlags/countries/jm.svg",
649 | },
650 | {
651 | name: "Japan",
652 | dialCode: "+81",
653 | isoCode: "JP",
654 | flag: "https://cdn.kcak11.com/CountryFlags/countries/jp.svg",
655 | },
656 | {
657 | name: "Jersey",
658 | dialCode: "+44-1534",
659 | isoCode: "JE",
660 | flag: "https://cdn.kcak11.com/CountryFlags/countries/je.svg",
661 | },
662 | {
663 | name: "Jordan",
664 | dialCode: "+962",
665 | isoCode: "JO",
666 | flag: "https://cdn.kcak11.com/CountryFlags/countries/jo.svg",
667 | },
668 | {
669 | name: "Kazakhstan",
670 | dialCode: "+77",
671 | isoCode: "KZ",
672 | flag: "https://cdn.kcak11.com/CountryFlags/countries/kz.svg",
673 | },
674 | {
675 | name: "Kenya",
676 | dialCode: "+254",
677 | isoCode: "KE",
678 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ke.svg",
679 | },
680 | {
681 | name: "Kiribati",
682 | dialCode: "+686",
683 | isoCode: "KI",
684 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ki.svg",
685 | },
686 | {
687 | name: "Korea, Democratic People's Republic of Korea",
688 | dialCode: "+850",
689 | isoCode: "KP",
690 | flag: "https://cdn.kcak11.com/CountryFlags/countries/kp.svg",
691 | },
692 | {
693 | name: "Korea, Republic of South Korea",
694 | dialCode: "+82",
695 | isoCode: "KR",
696 | flag: "https://cdn.kcak11.com/CountryFlags/countries/kr.svg",
697 | },
698 | {
699 | name: "Kosovo",
700 | dialCode: "+383",
701 | isoCode: "XK",
702 | flag: "https://cdn.kcak11.com/CountryFlags/countries/xk.svg",
703 | },
704 | {
705 | name: "Kuwait",
706 | dialCode: "+965",
707 | isoCode: "KW",
708 | flag: "https://cdn.kcak11.com/CountryFlags/countries/kw.svg",
709 | },
710 | {
711 | name: "Kyrgyzstan",
712 | dialCode: "+996",
713 | isoCode: "KG",
714 | flag: "https://cdn.kcak11.com/CountryFlags/countries/kg.svg",
715 | },
716 | {
717 | name: "Laos",
718 | dialCode: "+856",
719 | isoCode: "LA",
720 | flag: "https://cdn.kcak11.com/CountryFlags/countries/la.svg",
721 | },
722 | {
723 | name: "Latvia",
724 | dialCode: "+371",
725 | isoCode: "LV",
726 | flag: "https://cdn.kcak11.com/CountryFlags/countries/lv.svg",
727 | },
728 | {
729 | name: "Lebanon",
730 | dialCode: "+961",
731 | isoCode: "LB",
732 | flag: "https://cdn.kcak11.com/CountryFlags/countries/lb.svg",
733 | },
734 | {
735 | name: "Lesotho",
736 | dialCode: "+266",
737 | isoCode: "LS",
738 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ls.svg",
739 | },
740 | {
741 | name: "Liberia",
742 | dialCode: "+231",
743 | isoCode: "LR",
744 | flag: "https://cdn.kcak11.com/CountryFlags/countries/lr.svg",
745 | },
746 | {
747 | name: "Libya",
748 | dialCode: "+218",
749 | isoCode: "LY",
750 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ly.svg",
751 | },
752 | {
753 | name: "Liechtenstein",
754 | dialCode: "+423",
755 | isoCode: "LI",
756 | flag: "https://cdn.kcak11.com/CountryFlags/countries/li.svg",
757 | },
758 | {
759 | name: "Lithuania",
760 | dialCode: "+370",
761 | isoCode: "LT",
762 | flag: "https://cdn.kcak11.com/CountryFlags/countries/lt.svg",
763 | },
764 | {
765 | name: "Luxembourg",
766 | dialCode: "+352",
767 | isoCode: "LU",
768 | flag: "https://cdn.kcak11.com/CountryFlags/countries/lu.svg",
769 | },
770 | {
771 | name: "Macau",
772 | dialCode: "+853",
773 | isoCode: "MO",
774 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mo.svg",
775 | },
776 | {
777 | name: "Madagascar",
778 | dialCode: "+261",
779 | isoCode: "MG",
780 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mg.svg",
781 | },
782 | {
783 | name: "Malawi",
784 | dialCode: "+265",
785 | isoCode: "MW",
786 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mw.svg",
787 | },
788 | {
789 | name: "Malaysia",
790 | dialCode: "+60",
791 | isoCode: "MY",
792 | flag: "https://cdn.kcak11.com/CountryFlags/countries/my.svg",
793 | },
794 | {
795 | name: "Maldives",
796 | dialCode: "+960",
797 | isoCode: "MV",
798 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mv.svg",
799 | },
800 | {
801 | name: "Mali",
802 | dialCode: "+223",
803 | isoCode: "ML",
804 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ml.svg",
805 | },
806 | {
807 | name: "Malta",
808 | dialCode: "+356",
809 | isoCode: "MT",
810 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mt.svg",
811 | },
812 | {
813 | name: "Marshall Islands",
814 | dialCode: "+692",
815 | isoCode: "MH",
816 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mh.svg",
817 | },
818 | {
819 | name: "Martinique",
820 | dialCode: "+596",
821 | isoCode: "MQ",
822 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mq.svg",
823 | },
824 | {
825 | name: "Mauritania",
826 | dialCode: "+222",
827 | isoCode: "MR",
828 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mr.svg",
829 | },
830 | {
831 | name: "Mauritius",
832 | dialCode: "+230",
833 | isoCode: "MU",
834 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mu.svg",
835 | },
836 | {
837 | name: "Mayotte",
838 | dialCode: "+262",
839 | isoCode: "YT",
840 | flag: "https://cdn.kcak11.com/CountryFlags/countries/yt.svg",
841 | },
842 | {
843 | name: "Mexico",
844 | dialCode: "+52",
845 | isoCode: "MX",
846 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mx.svg",
847 | },
848 | {
849 | name: "Micronesia, Federated States of Micronesia",
850 | dialCode: "+691",
851 | isoCode: "FM",
852 | flag: "https://cdn.kcak11.com/CountryFlags/countries/fm.svg",
853 | },
854 | {
855 | name: "Moldova",
856 | dialCode: "+373",
857 | isoCode: "MD",
858 | flag: "https://cdn.kcak11.com/CountryFlags/countries/md.svg",
859 | },
860 | {
861 | name: "Monaco",
862 | dialCode: "+377",
863 | isoCode: "MC",
864 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mc.svg",
865 | },
866 | {
867 | name: "Mongolia",
868 | dialCode: "+976",
869 | isoCode: "MN",
870 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mn.svg",
871 | },
872 | {
873 | name: "Montenegro",
874 | dialCode: "+382",
875 | isoCode: "ME",
876 | flag: "https://cdn.kcak11.com/CountryFlags/countries/me.svg",
877 | },
878 | {
879 | name: "Montserrat",
880 | dialCode: "+1664",
881 | isoCode: "MS",
882 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ms.svg",
883 | },
884 | {
885 | name: "Morocco",
886 | dialCode: "+212",
887 | isoCode: "MA",
888 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ma.svg",
889 | },
890 | {
891 | name: "Mozambique",
892 | dialCode: "+258",
893 | isoCode: "MZ",
894 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mz.svg",
895 | },
896 | {
897 | name: "Myanmar",
898 | dialCode: "+95",
899 | isoCode: "MM",
900 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mm.svg",
901 | },
902 | {
903 | name: "Namibia",
904 | dialCode: "+264",
905 | isoCode: "NA",
906 | flag: "https://cdn.kcak11.com/CountryFlags/countries/na.svg",
907 | },
908 | {
909 | name: "Nauru",
910 | dialCode: "+674",
911 | isoCode: "NR",
912 | flag: "https://cdn.kcak11.com/CountryFlags/countries/nr.svg",
913 | },
914 | {
915 | name: "Nepal",
916 | dialCode: "+977",
917 | isoCode: "NP",
918 | flag: "https://cdn.kcak11.com/CountryFlags/countries/np.svg",
919 | },
920 | {
921 | name: "Netherlands",
922 | dialCode: "+31",
923 | isoCode: "NL",
924 | flag: "https://cdn.kcak11.com/CountryFlags/countries/nl.svg",
925 | },
926 | {
927 | name: "Netherlands Antilles",
928 | dialCode: "+599",
929 | isoCode: "AN",
930 | flag: "https://cdn.kcak11.com/CountryFlags/countries/an.svg",
931 | },
932 | {
933 | name: "New Caledonia",
934 | dialCode: "+687",
935 | isoCode: "NC",
936 | flag: "https://cdn.kcak11.com/CountryFlags/countries/nc.svg",
937 | },
938 | {
939 | name: "New Zealand",
940 | dialCode: "+64",
941 | isoCode: "NZ",
942 | flag: "https://cdn.kcak11.com/CountryFlags/countries/nz.svg",
943 | },
944 | {
945 | name: "Nicaragua",
946 | dialCode: "+505",
947 | isoCode: "NI",
948 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ni.svg",
949 | },
950 | {
951 | name: "Niger",
952 | dialCode: "+227",
953 | isoCode: "NE",
954 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ne.svg",
955 | },
956 | {
957 | name: "Nigeria",
958 | dialCode: "+234",
959 | isoCode: "NG",
960 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ng.svg",
961 | },
962 | {
963 | name: "Niue",
964 | dialCode: "+683",
965 | isoCode: "NU",
966 | flag: "https://cdn.kcak11.com/CountryFlags/countries/nu.svg",
967 | },
968 | {
969 | name: "Norfolk Island",
970 | dialCode: "+672",
971 | isoCode: "NF",
972 | flag: "https://cdn.kcak11.com/CountryFlags/countries/nf.svg",
973 | },
974 | {
975 | name: "North Macedonia",
976 | dialCode: "+389",
977 | isoCode: "MK",
978 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mk.svg",
979 | },
980 | {
981 | name: "Northern Mariana Islands",
982 | dialCode: "+1670",
983 | isoCode: "MP",
984 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mp.svg",
985 | },
986 | {
987 | name: "Norway",
988 | dialCode: "+47",
989 | isoCode: "NO",
990 | flag: "https://cdn.kcak11.com/CountryFlags/countries/no.svg",
991 | },
992 | {
993 | name: "Oman",
994 | dialCode: "+968",
995 | isoCode: "OM",
996 | flag: "https://cdn.kcak11.com/CountryFlags/countries/om.svg",
997 | },
998 | {
999 | name: "Pakistan",
1000 | dialCode: "+92",
1001 | isoCode: "PK",
1002 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pk.svg",
1003 | },
1004 | {
1005 | name: "Palau",
1006 | dialCode: "+680",
1007 | isoCode: "PW",
1008 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pw.svg",
1009 | },
1010 | {
1011 | name: "Palestine",
1012 | dialCode: "+970",
1013 | isoCode: "PS",
1014 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ps.svg",
1015 | },
1016 | {
1017 | name: "Panama",
1018 | dialCode: "+507",
1019 | isoCode: "PA",
1020 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pa.svg",
1021 | },
1022 | {
1023 | name: "Papua New Guinea",
1024 | dialCode: "+675",
1025 | isoCode: "PG",
1026 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pg.svg",
1027 | },
1028 | {
1029 | name: "Paraguay",
1030 | dialCode: "+595",
1031 | isoCode: "PY",
1032 | flag: "https://cdn.kcak11.com/CountryFlags/countries/py.svg",
1033 | },
1034 | {
1035 | name: "Peru",
1036 | dialCode: "+51",
1037 | isoCode: "PE",
1038 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pe.svg",
1039 | },
1040 | {
1041 | name: "Philippines",
1042 | dialCode: "+63",
1043 | isoCode: "PH",
1044 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ph.svg",
1045 | },
1046 | {
1047 | name: "Pitcairn",
1048 | dialCode: "+872",
1049 | isoCode: "PN",
1050 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pn.svg",
1051 | },
1052 | {
1053 | name: "Poland",
1054 | dialCode: "+48",
1055 | isoCode: "PL",
1056 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pl.svg",
1057 | },
1058 | {
1059 | name: "Portugal",
1060 | dialCode: "+351",
1061 | isoCode: "PT",
1062 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pt.svg",
1063 | },
1064 | {
1065 | name: "Puerto Rico",
1066 | dialCode: "+1939",
1067 | isoCode: "PR",
1068 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pr.svg",
1069 | },
1070 | {
1071 | name: "Qatar",
1072 | dialCode: "+974",
1073 | isoCode: "QA",
1074 | flag: "https://cdn.kcak11.com/CountryFlags/countries/qa.svg",
1075 | },
1076 | {
1077 | name: "Reunion",
1078 | dialCode: "+262",
1079 | isoCode: "RE",
1080 | flag: "https://cdn.kcak11.com/CountryFlags/countries/re.svg",
1081 | },
1082 | {
1083 | name: "Romania",
1084 | dialCode: "+40",
1085 | isoCode: "RO",
1086 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ro.svg",
1087 | },
1088 | {
1089 | name: "Russia",
1090 | dialCode: "+7",
1091 | isoCode: "RU",
1092 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ru.svg",
1093 | },
1094 | {
1095 | name: "Rwanda",
1096 | dialCode: "+250",
1097 | isoCode: "RW",
1098 | flag: "https://cdn.kcak11.com/CountryFlags/countries/rw.svg",
1099 | },
1100 | {
1101 | name: "Saint Barthelemy",
1102 | dialCode: "+590",
1103 | isoCode: "BL",
1104 | flag: "https://cdn.kcak11.com/CountryFlags/countries/bl.svg",
1105 | },
1106 | {
1107 | name: "Saint Helena, Ascension and Tristan Da Cunha",
1108 | dialCode: "+290",
1109 | isoCode: "SH",
1110 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sh.svg",
1111 | },
1112 | {
1113 | name: "Saint Kitts and Nevis",
1114 | dialCode: "+1869",
1115 | isoCode: "KN",
1116 | flag: "https://cdn.kcak11.com/CountryFlags/countries/kn.svg",
1117 | },
1118 | {
1119 | name: "Saint Lucia",
1120 | dialCode: "+1758",
1121 | isoCode: "LC",
1122 | flag: "https://cdn.kcak11.com/CountryFlags/countries/lc.svg",
1123 | },
1124 | {
1125 | name: "Saint Martin",
1126 | dialCode: "+590",
1127 | isoCode: "MF",
1128 | flag: "https://cdn.kcak11.com/CountryFlags/countries/mf.svg",
1129 | },
1130 | {
1131 | name: "Saint Pierre and Miquelon",
1132 | dialCode: "+508",
1133 | isoCode: "PM",
1134 | flag: "https://cdn.kcak11.com/CountryFlags/countries/pm.svg",
1135 | },
1136 | {
1137 | name: "Saint Vincent and the Grenadines",
1138 | dialCode: "+1784",
1139 | isoCode: "VC",
1140 | flag: "https://cdn.kcak11.com/CountryFlags/countries/vc.svg",
1141 | },
1142 | {
1143 | name: "Samoa",
1144 | dialCode: "+685",
1145 | isoCode: "WS",
1146 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ws.svg",
1147 | },
1148 | {
1149 | name: "San Marino",
1150 | dialCode: "+378",
1151 | isoCode: "SM",
1152 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sm.svg",
1153 | },
1154 | {
1155 | name: "Sao Tome and Principe",
1156 | dialCode: "+239",
1157 | isoCode: "ST",
1158 | flag: "https://cdn.kcak11.com/CountryFlags/countries/st.svg",
1159 | },
1160 | {
1161 | name: "Saudi Arabia",
1162 | dialCode: "+966",
1163 | isoCode: "SA",
1164 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sa.svg",
1165 | },
1166 | {
1167 | name: "Senegal",
1168 | dialCode: "+221",
1169 | isoCode: "SN",
1170 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sn.svg",
1171 | },
1172 | {
1173 | name: "Serbia",
1174 | dialCode: "+381",
1175 | isoCode: "RS",
1176 | flag: "https://cdn.kcak11.com/CountryFlags/countries/rs.svg",
1177 | },
1178 | {
1179 | name: "Seychelles",
1180 | dialCode: "+248",
1181 | isoCode: "SC",
1182 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sc.svg",
1183 | },
1184 | {
1185 | name: "Sierra Leone",
1186 | dialCode: "+232",
1187 | isoCode: "SL",
1188 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sl.svg",
1189 | },
1190 | {
1191 | name: "Singapore",
1192 | dialCode: "+65",
1193 | isoCode: "SG",
1194 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sg.svg",
1195 | },
1196 | {
1197 | name: "Sint Maarten",
1198 | dialCode: "+1721",
1199 | isoCode: "SX",
1200 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sx.svg",
1201 | },
1202 | {
1203 | name: "Slovakia",
1204 | dialCode: "+421",
1205 | isoCode: "SK",
1206 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sk.svg",
1207 | },
1208 | {
1209 | name: "Slovenia",
1210 | dialCode: "+386",
1211 | isoCode: "SI",
1212 | flag: "https://cdn.kcak11.com/CountryFlags/countries/si.svg",
1213 | },
1214 | {
1215 | name: "Solomon Islands",
1216 | dialCode: "+677",
1217 | isoCode: "SB",
1218 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sb.svg",
1219 | },
1220 | {
1221 | name: "Somalia",
1222 | dialCode: "+252",
1223 | isoCode: "SO",
1224 | flag: "https://cdn.kcak11.com/CountryFlags/countries/so.svg",
1225 | },
1226 | {
1227 | name: "South Africa",
1228 | dialCode: "+27",
1229 | isoCode: "ZA",
1230 | flag: "https://cdn.kcak11.com/CountryFlags/countries/za.svg",
1231 | },
1232 | {
1233 | name: "South Georgia and the South Sandwich Islands",
1234 | dialCode: "+500",
1235 | isoCode: "GS",
1236 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gs.svg",
1237 | },
1238 | {
1239 | name: "South Sudan",
1240 | dialCode: "+211",
1241 | isoCode: "SS",
1242 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ss.svg",
1243 | },
1244 | {
1245 | name: "Spain",
1246 | dialCode: "+34",
1247 | isoCode: "ES",
1248 | flag: "https://cdn.kcak11.com/CountryFlags/countries/es.svg",
1249 | },
1250 | {
1251 | name: "Sri Lanka",
1252 | dialCode: "+94",
1253 | isoCode: "LK",
1254 | flag: "https://cdn.kcak11.com/CountryFlags/countries/lk.svg",
1255 | },
1256 | {
1257 | name: "Sudan",
1258 | dialCode: "+249",
1259 | isoCode: "SD",
1260 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sd.svg",
1261 | },
1262 | {
1263 | name: "Suriname",
1264 | dialCode: "+597",
1265 | isoCode: "SR",
1266 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sr.svg",
1267 | },
1268 | {
1269 | name: "Svalbard and Jan Mayen",
1270 | dialCode: "+47",
1271 | isoCode: "SJ",
1272 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sj.svg",
1273 | },
1274 | {
1275 | name: "Sweden",
1276 | dialCode: "+46",
1277 | isoCode: "SE",
1278 | flag: "https://cdn.kcak11.com/CountryFlags/countries/se.svg",
1279 | },
1280 | {
1281 | name: "Switzerland",
1282 | dialCode: "+41",
1283 | isoCode: "CH",
1284 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ch.svg",
1285 | },
1286 | {
1287 | name: "Syrian Arab Republic",
1288 | dialCode: "+963",
1289 | isoCode: "SY",
1290 | flag: "https://cdn.kcak11.com/CountryFlags/countries/sy.svg",
1291 | },
1292 | {
1293 | name: "Taiwan",
1294 | dialCode: "+886",
1295 | isoCode: "TW",
1296 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tw.svg",
1297 | },
1298 | {
1299 | name: "Tajikistan",
1300 | dialCode: "+992",
1301 | isoCode: "TJ",
1302 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tj.svg",
1303 | },
1304 | {
1305 | name: "Tanzania, United Republic of Tanzania",
1306 | dialCode: "+255",
1307 | isoCode: "TZ",
1308 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tz.svg",
1309 | },
1310 | {
1311 | name: "Thailand",
1312 | dialCode: "+66",
1313 | isoCode: "TH",
1314 | flag: "https://cdn.kcak11.com/CountryFlags/countries/th.svg",
1315 | },
1316 | {
1317 | name: "Timor-Leste",
1318 | dialCode: "+670",
1319 | isoCode: "TL",
1320 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tl.svg",
1321 | },
1322 | {
1323 | name: "Togo",
1324 | dialCode: "+228",
1325 | isoCode: "TG",
1326 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tg.svg",
1327 | },
1328 | {
1329 | name: "Tokelau",
1330 | dialCode: "+690",
1331 | isoCode: "TK",
1332 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tk.svg",
1333 | },
1334 | {
1335 | name: "Tonga",
1336 | dialCode: "+676",
1337 | isoCode: "TO",
1338 | flag: "https://cdn.kcak11.com/CountryFlags/countries/to.svg",
1339 | },
1340 | {
1341 | name: "Trinidad and Tobago",
1342 | dialCode: "+1868",
1343 | isoCode: "TT",
1344 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tt.svg",
1345 | },
1346 | {
1347 | name: "Tunisia",
1348 | dialCode: "+216",
1349 | isoCode: "TN",
1350 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tn.svg",
1351 | },
1352 | {
1353 | name: "Turkey",
1354 | dialCode: "+90",
1355 | isoCode: "TR",
1356 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tr.svg",
1357 | },
1358 | {
1359 | name: "Turkmenistan",
1360 | dialCode: "+993",
1361 | isoCode: "TM",
1362 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tm.svg",
1363 | },
1364 | {
1365 | name: "Turks and Caicos Islands",
1366 | dialCode: "+1649",
1367 | isoCode: "TC",
1368 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tc.svg",
1369 | },
1370 | {
1371 | name: "Tuvalu",
1372 | dialCode: "+688",
1373 | isoCode: "TV",
1374 | flag: "https://cdn.kcak11.com/CountryFlags/countries/tv.svg",
1375 | },
1376 | {
1377 | name: "Uganda",
1378 | dialCode: "+256",
1379 | isoCode: "UG",
1380 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ug.svg",
1381 | },
1382 | {
1383 | name: "Ukraine",
1384 | dialCode: "+380",
1385 | isoCode: "UA",
1386 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ua.svg",
1387 | },
1388 | {
1389 | name: "United Arab Emirates",
1390 | dialCode: "+971",
1391 | isoCode: "AE",
1392 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ae.svg",
1393 | },
1394 | {
1395 | name: "United Kingdom",
1396 | dialCode: "+44",
1397 | isoCode: "GB",
1398 | flag: "https://cdn.kcak11.com/CountryFlags/countries/gb.svg",
1399 | },
1400 | {
1401 | name: "United States",
1402 | dialCode: "+1",
1403 | isoCode: "US",
1404 | flag: "https://cdn.kcak11.com/CountryFlags/countries/us.svg",
1405 | },
1406 | {
1407 | name: "United States Minor Outlying Islands",
1408 | dialCode: "+246",
1409 | isoCode: "UMI",
1410 | flag: "https://cdn.kcak11.com/CountryFlags/countries/umi.svg",
1411 | },
1412 | {
1413 | name: "Uruguay",
1414 | dialCode: "+598",
1415 | isoCode: "UY",
1416 | flag: "https://cdn.kcak11.com/CountryFlags/countries/uy.svg",
1417 | },
1418 | {
1419 | name: "Uzbekistan",
1420 | dialCode: "+998",
1421 | isoCode: "UZ",
1422 | flag: "https://cdn.kcak11.com/CountryFlags/countries/uz.svg",
1423 | },
1424 | {
1425 | name: "Vanuatu",
1426 | dialCode: "+678",
1427 | isoCode: "VU",
1428 | flag: "https://cdn.kcak11.com/CountryFlags/countries/vu.svg",
1429 | },
1430 | {
1431 | name: "Venezuela, Bolivarian Republic of Venezuela",
1432 | dialCode: "+58",
1433 | isoCode: "VE",
1434 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ve.svg",
1435 | },
1436 | {
1437 | name: "Vietnam",
1438 | dialCode: "+84",
1439 | isoCode: "VN",
1440 | flag: "https://cdn.kcak11.com/CountryFlags/countries/vn.svg",
1441 | },
1442 | {
1443 | name: "Virgin Islands, British",
1444 | dialCode: "+1284",
1445 | isoCode: "VG",
1446 | flag: "https://cdn.kcak11.com/CountryFlags/countries/vg.svg",
1447 | },
1448 | {
1449 | name: "Virgin Islands, U.S.",
1450 | dialCode: "+1340",
1451 | isoCode: "VI",
1452 | flag: "https://cdn.kcak11.com/CountryFlags/countries/vi.svg",
1453 | },
1454 | {
1455 | name: "Wallis and Futuna",
1456 | dialCode: "+681",
1457 | isoCode: "WF",
1458 | flag: "https://cdn.kcak11.com/CountryFlags/countries/wf.svg",
1459 | },
1460 | {
1461 | name: "Yemen",
1462 | dialCode: "+967",
1463 | isoCode: "YE",
1464 | flag: "https://cdn.kcak11.com/CountryFlags/countries/ye.svg",
1465 | },
1466 | {
1467 | name: "Zambia",
1468 | dialCode: "+260",
1469 | isoCode: "ZM",
1470 | flag: "https://cdn.kcak11.com/CountryFlags/countries/zm.svg",
1471 | },
1472 | {
1473 | name: "Zimbabwe",
1474 | dialCode: "+263",
1475 | isoCode: "ZW",
1476 | flag: "https://cdn.kcak11.com/CountryFlags/countries/zw.svg",
1477 | },
1478 | ];
1479 |
1480 | const sorter = (a, b) => {
1481 | return a.name.localeCompare(b.name);
1482 | };
1483 | countries.sort(sorter);
1484 | countries.forEach((country) => {
1485 | country.label = `${country.name} (${country.dialCode})`;
1486 | });
1487 | export default countries;
1488 |
--------------------------------------------------------------------------------