Skip to content

mohamed-mahmoud377/Payment-Gateway--Graduation-project

Repository files navigation

HashCash is a gradation project which aims to build a payment gateway for small merchants to start accepting payment really easy throw API integration without worrying about any PCI requirements and merchant account details.

We are focusing on implementing the actual service and APIs the merchant is going to use and the PCI requirements that comes with it not focusing on the system as a whole.

see wiki pages for more info.

Code Tree (files structure)

Payment-Gateway--Graduation-project
β”œβ”€β”€ apikey-manager
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ eventTypes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ APIKeyVerifiedEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── verifyAPIKeyEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ listeners
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ emailVerifiedListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ merchantActivationListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── verifyAPIKeyListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── publishers
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── APIKeyVerifiedPublisher.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── keys.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ routes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ changeMode.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getKey.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── getMode.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ types
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── queueGroupName.ts
β”‚Β Β  β”‚Β Β  └── utils
β”‚Β Β  β”‚Β Β      └── generateKey.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ auth
β”‚Β Β  β”œβ”€β”€ config
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ dev.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ keys.ts
β”‚Β Β  β”‚Β Β  └── prod.ts
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ listeners
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── merchantActivationListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── publishers
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ emailVerifiedPublisher.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ userCreatedPublisher.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ userForgotPasswordPublisher.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── userLoggingInPublisher.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ helpers
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── runInDevelopment.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ middlewares
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ rquireAuthforcurrent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── twoWayAuth.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ loginSession.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── user.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __mocks__
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ routes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkPassword.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ clearSessions.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ currentUser.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ deactivateMerchant.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ enableTwoFactorAuth.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forgotPassword.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getUsers.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getUser.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ me.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ otpRegister.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ otpResend.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ refreshAccess.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ resetPassword.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ signout.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ signup.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __test__
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkPassword.test.ts.old
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login.test.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ otpRegister.test.ts.old
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── signup.test.ts.old
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── verifyEmail.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ test
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── setup.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ types
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ queueGroupName.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── roles.ts
β”‚Β Β  β”‚Β Β  └── utils
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ generateFackUsers.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ jwtGenerator.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ otpGenerator.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ passwordManger.ts
β”‚Β Β  β”‚Β Β      └── userAgentParser.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ checkout
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ eventsTypes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ APIKeyVerifiedEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkoutSessionCreated.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── verifyAPIKeyEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ listeners
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── APIKeyVerifiedListeners.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── publishers
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ checkoutSessionCreatedPublisher.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── verifyAPIKeyPublisher.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkoutSession.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ customer.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── item.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ routes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ createCheckoutSession.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getCheckoutSeeion.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── init.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ types
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ chckoutStatus.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── queueGroupName.ts
β”‚Β Β  β”‚Β Β  └── validators
β”‚Β Β  β”‚Β Β      └── validateCreateCheckoutSession.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ client
β”‚Β Β  β”œβ”€β”€ angular.json
β”‚Β Β  β”œβ”€β”€ Dockerfile
β”‚Β Β  β”œβ”€β”€ karma.conf.js
β”‚Β Β  β”œβ”€β”€ nginx.conf
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ README.md
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.module.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app-routing.module.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkout
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkout.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkout.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkout.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── checkout.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forget-password
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forget-password.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forget-password.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forget-password.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── forget-password.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ guards
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ auth.guard.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login.guard.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── verify-email.guard.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ home
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Components
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activate-account
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activate-account.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activate-account.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activate-account.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activate-account.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activation-form
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activation-form.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activation-form.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ activation-form.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── activation-form.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ declined
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ declined.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ declined.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ declined.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── declined.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── pending
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ pending.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ pending.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ pending.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      └── pending.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ navbar
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ navbar.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ navbar.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ navbar.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── navbar.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── profile
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ profile.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ profile.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ profile.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      └── profile.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ home.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ home.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ home.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ home.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ home.module.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── home-routing.module.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── login.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Models
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── types.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ not-found
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ not-found.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ not-found.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ not-found.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── not-found.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ primeng
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── primeng.module.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ reset-password
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ reset-password.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ reset-password.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ reset-password.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── reset-password.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Services
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ auth.service.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ auth.service.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ refresh-token.service.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ shared
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── handle-errors.service.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── user.service.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ shared
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ error
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ error.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ error.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ error.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── error.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ interceptors
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── header.interceptor.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ loading
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ component
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── comp-loading
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ comp-loading.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ comp-loading.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      └── comp-loading.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ loading.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ loading.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      └── loading.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── utils
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β      └── cleanObj.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ signup
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ signup.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ signup.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ signup.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── signup.component.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── verify-email
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ verify-email.component.css
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ verify-email.component.html
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ verify-email.component.spec.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── verify-email.component.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ assets
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── images
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ declined.png
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ error.png
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ haeder.png
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ logo.png
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ not-found.png
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ otp.jpg
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ otp.png
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── pending.png
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ environments
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ environment.prod.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── environment.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ favicon.ico
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.html
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ main.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ polyfills.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ proxy.conf.json
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ styles.css
β”‚Β Β  β”‚Β Β  └── test.ts
β”‚Β Β  β”œβ”€β”€ tsconfig.app.json
β”‚Β Β  β”œβ”€β”€ tsconfig.json
β”‚Β Β  └── tsconfig.spec.json
β”œβ”€β”€ common
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errors
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ badRequestError.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ customError.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forbiddenError.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ InternalServerError.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ notAuthorizedError.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ notFoundError.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ requestValidationError.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── types
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── errorCodes.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ eventTypes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ emailVerifiedEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ forgotPasswordEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ merchantActivationEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ userCreatedEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── userLoggingInEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ listeners
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── listener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ publishers
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── publisher.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── Subjects.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ middlewares
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ errorHandler.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ requireAuth.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ restrictTo.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── validateRequest.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── events.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ types
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ modes.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Payload.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── roles.ts
β”‚Β Β  β”‚Β Β  └── utils
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ APIFilter.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ decrypt.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ encrypt.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ handlerFactory.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ jwtGenerator.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ passwordManger.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ security.ts
β”‚Β Β  β”‚Β Β      └── sendSuccess.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ customer
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  └── nats
β”‚Β Β  β”‚Β Β      └── nats-wrapper.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ emailing
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ emails
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── emails.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── listeners
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ merchantActivationListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ merchantCreatedListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      β”œβ”€β”€ merchantForgotPasswordListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── userLoggingInListener.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ types
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── queueGroupName.ts
β”‚Β Β  β”‚Β Β  └── views
β”‚Β Β  β”‚Β Β      └── emails
β”‚Β Β  β”‚Β Β          β”œβ”€β”€ applicationApproved.pug
β”‚Β Β  β”‚Β Β          β”œβ”€β”€ applicationDeclined.pug
β”‚Β Β  β”‚Β Β          β”œβ”€β”€ baseEmail.pug
β”‚Β Β  β”‚Β Β          β”œβ”€β”€ otp-login.pug
β”‚Β Β  β”‚Β Β          β”œβ”€β”€ otp-signup.pug
β”‚Β Β  β”‚Β Β          β”œβ”€β”€ passwordReset.pug
β”‚Β Β  β”‚Β Β          β”œβ”€β”€ _style.pug
β”‚Β Β  β”‚Β Β          └── welcome.pug
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ Images
β”‚Β Β  └── Logo
β”‚Β Β      β”œβ”€β”€ Asset 22.svg
β”‚Β Β      β”œβ”€β”€ Asset 23.svg
β”‚Β Β      β”œβ”€β”€ Asset logo 1 2.svg
β”‚Β Β      β”œβ”€β”€ Asset logo 2 2.svg
β”‚Β Β      └── icon 10.svg
β”œβ”€β”€ infra
β”‚Β Β  β”œβ”€β”€ k8s
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ apikey-manager-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ apikey-manager-mongo-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ authentication-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ authentication-mongo-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkout-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkout-mongo-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ customer-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ customer-mongo-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ emailing-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ kms-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ kms-mongo-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ manage-business-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ manage-businessmongo-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ payment-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ payment-mongo-depl.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ tokenization-depl.yaml
β”‚Β Β  β”‚Β Β  └── tokenization-mongo-depl.yaml
β”‚Β Β  β”œβ”€β”€ k8s-accounts
β”‚Β Β  β”‚Β Β  └── admin.yaml
β”‚Β Β  β”œβ”€β”€ k8s-dev
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ingress-srv.yaml
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ mongo-authentication-nodePort.yaml
β”‚Β Β  β”‚Β Β  └── mongo-kms-nodeport.yaml
β”‚Β Β  └── k8s-prod
β”‚Β Β      β”œβ”€β”€ client-deply.yaml
β”‚Β Β      └── ingress-srv.yaml
β”œβ”€β”€ kms
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── publishers
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── userLoggingInPublisher.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ helpers
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── runInDevelopment.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ middlewares
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── protect.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ admin.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events.ts.old
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ key.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ loginSession.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── tokens.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __mocks__
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ routes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ dataEncryptKey.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ decryptDataEncryptKey.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ deleteKey.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ deleteToken.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ generateMaster.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getKeys.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getKey.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getServiceAccessToken.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getTokens.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ login.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── otpRegister.ts
β”‚Β Β  β”‚Β Β  └── utils
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ decrypt.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ encrypt.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ generateKey.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ jwtGenerator.ts
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ otpGenerator.ts
β”‚Β Β  β”‚Β Β      └── userAgentParser.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ LICENSE
β”œβ”€β”€ manage-business
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ listeners
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ emailVerifiedListener.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── queueGroupName.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── publishers
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── merchantActivatedPublisher.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ bankAccount.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ businessActivationRequest.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ businessApplication.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ businessInfo.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── businessOwner.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ routes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ AllActivationsRequests.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ approveActivationRequest.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ declineActivationRequest.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getAcitvationRequest.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ MyActivationRequest.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── submitActivationRequest.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ types
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── RequestStatus.ts
β”‚Β Β  β”‚Β Β  └── utils
β”‚Β Β  β”‚Β Β      └── validator.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ payment
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ eventsTypes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ APIKeyVerifiedEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ checkoutSessionCreated.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── verifyAPIKeyEvent.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── listeners
β”‚Β Β  β”‚Β Β  β”‚Β Β      └── checkoutCreatedListener.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Item.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── payment.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  └── types
β”‚Β Β  β”‚Β Β      β”œβ”€β”€ paymentStatus.ts
β”‚Β Β  β”‚Β Β      └── queueGroupName.ts
β”‚Β Β  └── tsconfig.json
β”œβ”€β”€ push.ps1
β”œβ”€β”€ push.sh
β”œβ”€β”€ README.md
β”œβ”€β”€ skaffold.yaml
β”œβ”€β”€ tokenization
β”‚Β Β  β”œβ”€β”€ docker
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ Dockerfile-dev
β”‚Β Β  β”‚Β Β  └── Dockerfile-prod
β”‚Β Β  β”œβ”€β”€ package.json
β”‚Β Β  β”œβ”€β”€ package-lock.json
β”‚Β Β  β”œβ”€β”€ src
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ app.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ helpers
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── runInDevelopment.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ index.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ middlewares
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── protect.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ models
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ accessToken.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── token.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ nats
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ __mocks__
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── nats-wrapper.ts
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ routes
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ deTokenize.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  β”œβ”€β”€ getServiceAccessToken.ts
β”‚Β Β  β”‚Β Β  β”‚Β Β  └── tokenize.ts
β”‚Β Β  β”‚Β Β  └── utils
β”‚Β Β  β”‚Β Β      └── generateToken.ts
β”‚Β Β  └── tsconfig.json
└── updatePackages.ps1

150 directories, 399 files

How did we build it ?

We are using event driven microservices' architecture.

our technology stack:

You can view all the services endpoints docs from postman workspace

To test these endpoints you should run it in the production env

Note that we are deploying all of our services on a digitalOcean cluster that may not be available at any point of time in the future which means that may need to run the code locally to test it.