---
# System prepended metadata

title: Endpoint Core

---

``` mermaid
sequenceDiagram

actor u as authenticated user
participant w as fuel-web
participant c as fuel-core
participant d as discord
participant db as discord-bot
participant a as bc-aggregator




u->>+w: after claim
    w ->>+c: /users/account
    c ->>-w: account_data
    w ->>w: check if the user has discord_name already

    w ->>+d: if no: start discord oauth challenge
    d ->>d: consent happens
    d ->>+w: finish discord oauth challenge
    w ->>+d: get discord user_data
    d ->>-w: discord user_data
    
    w ->>+c: send encypted discord_name
    c ->>c: decrypt and save
    c ->>-w: 200
    
    u ->>+d: join channel
    d ->>+db: join event
    db->>+c: owns_token(user, server)?
    c->>-a: have token?
    a->>+c: yes
    c->>-db: grant(None | RoleName)
    
    c->>c: job: check ownership (30min)
    c->>a: all users still have token?
    a->>c: no
    c->>db: revoke role
    
```


# Endpoint Core

GET `api.onfuel.io/discord/shouldGrantRole`
Params:
- `${username}#${discriminator}`
- guild (server name)

Response:
- `None | grant<rolename>`o


```
u->>+w: opens the claim page
    w ->>+c: get redirect oauth url
    c ->>+w: return oauth_url 
    w ->>+d: redirect to consent
    d ->>+w: redirect to the cb url
    w ->>+c: forwards payload to cb url
    c ->>+c: adds a discord user_name to the users table
    c ->>+w: 200 / 403
    w ->>-u: 200 / 403
    
    u ->>+d: join channel
    d ->>+db: join event
    db->>+c: owns_token(user, server)?
    c->>-a: have token?
    a->>+c: yes
    c->>-db: grant(None | RoleName)
    
    c->>c: job: check ownership (30min)
    c->>a: all users still have token?
    a->>c: no
    c->>db: revoce role
    
```