MCPcopy Index your code
hub / github.com/MetaFam/TheGame

github.com/MetaFam/TheGame @v1.22.19

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.22.19 ↗ · + Follow
799 symbols 2,688 edges 439 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

The Game

Monorepo for the MetaGame applications, backend and databases.

We're using the following stack:

Frontend

Backend

Overall

MetaGame

Guides

If you're new to the MetaGame codebase, check out the following guides to learn how to contribute.

Development

Before you start contributing read the Contributing Guide!

Bootstrap

Create your local .env file

```shell script cp .env.sample .env


Create a GitHub token at https://github.com/settings/tokens

Set `GITHUB_API_TOKEN=your_github_token` in `.env`

### Install Packages

```shell script
yarn

Initial TS Compilation For Monorepo Packages

```shell script yarn typecheck


Adding a package to the codebase can be done with [Lerna](https://github.com/lerna/lerna/tree/main/commands/add#readme)

### Run services

**Start backend services**

```shell script
yarn docker:start

For M1 Mac Users

Official docker images of Hasura don't work on M1 yet

In hasura/Dockerfile Replace

FROM hasura/graphql-engine:v1.3.3.cli-migrations-v2

with

FROM fedormelexin/graphql-engine-arm64:v1.3.3.cli-migrations-v2
  • Runs docker containers for backend, Hasura Engine, and PostGres database
  • will auto-restart on any changes to packages/backend and packages/utils

If you are running for the first time on an empty database, once the services are running you have two options to populate the database:

  1. Populate the database with the production dataset:

```shell script yarn hasura:seed-db


2. Populate the database with the initial dataset:

```shell script
curl -X POST http://localhost:4000/actions/migrateSourceCredAccounts?force=true

Rebuild backend services

If your docker containers fail to start due to changes in config, you may need to rebuild the containers. This can take several minutes.

```shell script yarn docker:build


**Stop backend services**

```shell script
yarn docker:stop
  • Stops all the containers

Troubleshooting

Rebuild and run the containers (in attach mode):

```shell script docker-compose up --build


In case non of the above commands are working try purge the docker containers and images you can do this by running (notice: this removes all the containers and images on your computer!):

```shell script
docker system prune -a

If you're working on the front-end and the build fails with something like the error below, you'll need to create a .env file in packages/web and add NEXT_PUBLIC_GRAPHQL_URL=https://api-staging.metagame.wtf/v1/graphql

[Error [CombinedError]: [Network] request to http://localhost:8080/v1/graphql failed, reason: connect ECONNREFUSED 127.0.0.1:8080] {
  type: 'CombinedError',
  graphQLErrors: [],
  networkError: {
    message: 'request to http://localhost:8080/v1/graphql failed, reason: connect ECONNREFUSED 127.0.0.1:8080',
    type: 'system',
    errno: 'ECONNREFUSED',
    code: 'ECONNREFUSED'
  }
}

** A note about environment variables **

If you need to add an environment variable, it will need to go in several places:

  • your own .env file
  • .env.sample
  • gcp-deploy.yaml
  • For backend variables, add to the deploy-backend step alongside the others
  • For frontend variables, add to the deploy-frontend step. You may also need to add it to the build-frontend step, if it is used in a page that is statically generated by next.js
  • gcp-deploy-frontend.yaml for frontend variables, this should be the same as the frontend actions in the other yaml file

Secrets will need to be added to the TheGame Github secrets; contact a senior builder for assistance.

As an aside, the gcp-deploy-frontend.yaml is the deployment configuration for our test and production frontend instances, while gcp-deploy.yaml is only for PR environments.

Run NextJS Web App dev mode (new)

```shell script yarn web:dev


Go to [http://localhost:3000](http://localhost:3000)

Happy Coding!

### Run Discord Bot

```shell script
yarn discord-bot dev

This will automatically register with Discord and relay chat messages to your local instance! Pretty cool. Testing in a dedicated test Discord server (rather than MetaGame's) is recommended.

Tooling

Start Hasura console

```shell script yarn hasura:console


Hasura CLI example

```shell script
yarn hasura migrate status
yarn hasura migrate squash --name "<feature-name>" --from 1598417879553
yarn hasura migrate apply --version "<squash-migration-version>" --skip-execution

Hasura CLI documentation Hasura Migrations Guide

Generate GraphQL Types

```shell script yarn generate


Reload Schema + Generate GraphQL Types (backend needs to be running)

```shell script
yarn update-schema
yarn generate

Restart with fresh database

```shell script yarn docker:clean yarn docker:start


### Run typechecks

```shell script
yarn typecheck

WIP Branch Push

Upon pushing to the repository a linting check will be initialized validating your code. If you want to push the branch to the repository (maybe for collaboration) while the code isn't completely valid yet you have the option of skipping the linting process:

shell script git push -u origin <branch> [--no-verify]

Please use this only when absolutely necessary!

Debugging with Visual Studio Code

When running the backend stack locally using docker-compose, you can still debug the backend container using VS Code. Just add this configuration to your .vscode/launch.json.

Extension points exported contracts — how you extend this code

TimeZoneSelectProps (Interface)
(no doc)
packages/design-system/src/SelectTimeZone.tsx
LedgerLoadResult (Interface)
(no doc)
packages/discord-bot/src/sourcecred.ts
TitledDescription (Interface)
(no doc)
packages/utils/src/extendedProfileTypes.ts
IConfig (Interface)
(no doc)
packages/backend/src/config.ts
ParticipantCredGrain (Interface)
(no doc)
packages/@types/sourcecred/index.d.ts
EditGuildFormInputs (Interface)
(no doc)
packages/web/components/Guild/GuildForm.tsx
Content (Interface)
(no doc)
packages/design-system/src/ResponsiveText.tsx
IConfig (Interface)
(no doc)
packages/discord-bot/src/config.ts

Core symbols most depended-on inside this repo

errorHandler
called by 34
packages/web/utils/errorHandler.ts
useUser
called by 28
packages/web/lib/hooks/useUser.ts
fetch
called by 27
packages/utils/src/networkHelpers.ts
useWeb3
called by 22
packages/web/lib/hooks/useWeb3.ts
useProfileField
called by 19
packages/web/lib/hooks/useField.ts
useOnScreen
called by 17
packages/web/lib/hooks/useOnScreen.tsx
parseEnv
called by 14
packages/backend/src/config.ts
asyncHandlerWrapper
called by 12
packages/backend/src/lib/apiHelpers.ts

Shape

Function 678
Interface 75
Class 21
Method 20
Enum 5

Languages

TypeScript100%

Modules by API surface

packages/web/components/Landing/OnboardingGame/gameTypes.ts17 symbols
packages/web/utils/playerHelpers.ts15 symbols
packages/@types/sourcecred/index.d.ts15 symbols
packages/web/utils/layoutHelpers.ts12 symbols
packages/web/lib/hooks/players.ts12 symbols
packages/web/components/Landing/OnboardingGame/Rain.tsx12 symbols
packages/design-system/src/MetaFilterSelect.tsx11 symbols
packages/web/lib/jotaiState.ts9 symbols
packages/web/components/Landing/OnboardingGame/index.tsx9 symbols
packages/web/components/Setup/SetupRoles.tsx8 symbols
hasura/seed-db.mjs8 symbols
packages/web/utils/setupOptions.tsx7 symbols

For agents

$ claude mcp add TheGame \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact