gitextract_e9sl75y4/ ├── .dev.vars.example ├── .env.example ├── .env.test.example ├── .eslintignore ├── .gitignore ├── .husky/ │ ├── pre-commit │ └── pre-push ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── TODO.md ├── bin/ │ └── createApp.js ├── bindings.d.ts ├── build.js ├── eslint.config.js ├── jest.config.js ├── migrations/ │ └── 01_initial.ts ├── package.json ├── scripts/ │ └── migrate.ts ├── src/ │ ├── config/ │ │ ├── authProviders.ts │ │ ├── config.ts │ │ ├── database.ts │ │ ├── roles.ts │ │ └── tokens.ts │ ├── controllers/ │ │ ├── auth/ │ │ │ ├── auth.controller.ts │ │ │ └── oauth/ │ │ │ ├── apple.controller.ts │ │ │ ├── discord.controller.ts │ │ │ ├── facebook.controller.ts │ │ │ ├── github.controller.ts │ │ │ ├── google.controller.ts │ │ │ ├── oauth.controller.ts │ │ │ └── spotify.controller.ts │ │ └── user.controller.ts │ ├── durable-objects/ │ │ └── rate-limiter.do.ts │ ├── factories/ │ │ └── oauth.factory.ts │ ├── index.ts │ ├── middlewares/ │ │ ├── auth.ts │ │ ├── error.ts │ │ └── rate-limiter.ts │ ├── models/ │ │ ├── base.model.ts │ │ ├── oauth/ │ │ │ ├── apple-user.model.ts │ │ │ ├── discord-user.model.ts │ │ │ ├── facebook-user.model.ts │ │ │ ├── github-user.model.ts │ │ │ ├── google-user.model.ts │ │ │ ├── oauth-base.model.ts │ │ │ └── spotify-user.model.ts │ │ ├── one-time-oauth-code.ts │ │ ├── token.model.ts │ │ └── user.model.ts │ ├── routes/ │ │ ├── auth.route.ts │ │ ├── index.ts │ │ └── user.route.ts │ ├── services/ │ │ ├── auth.service.ts │ │ ├── email.service.ts │ │ ├── oauth/ │ │ │ ├── apple.service.ts │ │ │ ├── facebook.service.ts │ │ │ ├── github.service.ts │ │ │ └── spotify.service.ts │ │ ├── token.service.ts │ │ └── user.service.ts │ ├── tables/ │ │ ├── oauth.table.ts │ │ ├── one-time-oauth-code.table.ts │ │ └── user.table.ts │ ├── types/ │ │ └── oauth.types.ts │ ├── utils/ │ │ ├── api-error.ts │ │ ├── utils.ts │ │ └── zod.ts │ └── validations/ │ ├── auth.validation.ts │ ├── custom.refine.validation.ts │ ├── custom.transform.validation.ts │ ├── custom.type.validation.ts │ └── user.validation.ts ├── tests/ │ ├── cloudflare-test.d.ts │ ├── fixtures/ │ │ ├── authorisations.fixture.ts │ │ ├── token.fixture.ts │ │ └── user.fixture.ts │ ├── integration/ │ │ ├── auth/ │ │ │ ├── auth.test.ts │ │ │ └── oauth/ │ │ │ ├── apple.test.ts │ │ │ ├── discord.test.ts │ │ │ ├── facebook.test.ts │ │ │ ├── github.test.ts │ │ │ ├── google.test.ts │ │ │ └── spotify.test.ts │ │ ├── index.test.ts │ │ ├── rate-limiter.test.ts │ │ └── user.test.ts │ ├── mocks/ │ │ └── awsClientStub/ │ │ ├── aws-client-stub.ts │ │ ├── expect-mock.ts │ │ ├── index.ts │ │ └── mock-client.ts │ ├── tsconfig.json │ ├── utils/ │ │ ├── clear-db-tables.ts │ │ └── test-request.ts │ └── vitest.d.ts ├── tsconfig.json ├── vitest.config.ts └── wrangler.toml.example