Automated daily check-in script for Arknights Endfield (SKport). Built with TypeScript and Bun, runs via GitHub Actions automatically every day.
- Serverless: Runs automatically every day using GitHub Actions.
- Self-refreshing Tokens: Uses a single long-lived
ACCOUNT_TOKENto generate fresh credentials on every run. No more manual token updates. - Multi-Account Support: Supports checking in multiple accounts at once.
- Discord Notifications: Sends a daily result summary to your Discord server via Webhook.
- Reward Info: Reports the items and quantities received from each check-in.
Important
The ACCOUNT_TOKEN is not visible in the Application → Cookies tab. It lives on the Hypergryph auth server (as.gryphline.com) and must be found via the Network tab.
- Open https://game.skport.com/endfield/sign-in in your browser while already logged in.
- Press F12 to open DevTools and go to the Network tab.
- Reload the page (F5) to capture network requests.
- In the filter box at the top, type:
grant - Click on the request to
https://as.gryphline.com/user/oauth2/v2/grant - Click the Payload tab (not "Response" — Payload contains what was sent to the server).
- You will see a JSON body like:
{ "token": "YOUR_ACCOUNT_TOKEN_IS_HERE", "appCode": "6eb76d4e13aa36e6", "type": 0 } - Copy the value of
"token"— that is yourACCOUNT_TOKEN.
This token is long-lived (weeks to months). The script automatically generates all other credentials (
cred,signToken,gameRole) on every run, so you will rarely need to update it.
- Create a new repository (Public or Private) on GitHub.
- Push the contents of this folder to that repository.
-
In your repository, go to Settings → Secrets and variables → Actions.
-
Click New repository secret and add the following:
Name Value SKPORT_TOKENSJSON array with your token (see format below) DISCORD_WEBHOOK_URL(Optional) Your Discord webhook URL Format for
SKPORT_TOKENS:[ { "accountToken": "YOUR_ACCOUNT_TOKEN_HERE", "accountName": "Your Nickname", "language": "en" } ]For multiple accounts, add more objects to the array. Available languages:
en,ja,zh_Hant,zh_Hans,ko,ru_RU
Go to the Actions tab in your repository and enable workflows. The script will run automatically every day at 16:00 UTC (Midnight WIB). You can also trigger it manually via Run workflow.
- Install Bun.
- Copy
.env.exampleto.envand fill in yourACCOUNT_TOKEN. - Run:
bun run start
On each run, the script performs a full OAuth flow to generate fresh session credentials. This means no stored tokens ever go stale.
sequenceDiagram
participant Script
participant Gryphline as as.gryphline.com
participant SKport as zonai.skport.com
Script->>Gryphline: POST /user/oauth2/v2/grant<br/>(accountToken)
Gryphline-->>Script: oauthCode (one-time)
Script->>SKport: POST /user/auth/generate_cred_by_code<br/>(oauthCode)
SKport-->>Script: cred (fresh session)
Script->>SKport: GET /auth/refresh<br/>(cred)
SKport-->>Script: signToken (signing key)
Script->>SKport: GET /game/player/binding<br/>(cred + signed request)
SKport-->>Script: gameRole (UID + server)
Script->>SKport: POST /game/endfield/attendance<br/>(cred + gameRole + signed request)
SKport-->>Script: ✅ Check-in result
Thanks to the community for reverse-engineering the SKport API