Skip to content

Storage Layout

KV Storage Layout

Key PatternValueTTL
config:routesJSON array of routesPermanent
config:groupsJSON array of groupsPermanent
session:{id}Admin session { userId, login }7 days
token:{userId}{ userId, accessToken, expiresAt, refreshToken? }0.9 × token expiry
token-reverse:{sha256}User id for reverse lookup by token0.9 × token expiry
state:{hex}{ redirectTo, expiresAt, discordUserId?, telegramUserId?, telegramChatId? }600 seconds
invite:{token}{ groupId, role, expiresAt, createdBy, note? }7 days
invite:group:{id}Token index per group (keeps invite listing consistent)Permanent
delivery:{provider}:{groupId}:{id}Webhook delivery dedup (provider- and tenant-scoped)300 seconds
delivery-state:{provider}:{groupId}:{id}Queue delivery state (pending/processing/delivered/retrying/failed/dead)1 day
queue:payload:{provider}:{groupId}:{id}Oversized webhook payload parked for the queue consumer1 day
nonce:{nonce}Custom-webhook replay protection nonce (single use)600 seconds
tenant:{groupId}Per-group webhook secret (64-char hex, generated from the console)Permanent
msg:{routeId}:{key}:{target}Message id tracking for in-place updates (e.g. workflow_run / check_run)7 days
cmd:guild:{id}Guild id whose commands were registered (dedup)Permanent
cmd:registered:globalGlobal command registration marker (dedup)1 day
config:discord-app-idCached Discord application idPermanent
i18n:{lang}Translation overrides merged on top of EnglishPermanent

D1 Storage Layout

The D1 database (DB binding, database webhooker) holds four tables:

TablePurpose
send_logsOne row per dispatch attempt (route id, event, target, ok/error, duration, error code, detail)
audit_logsOne row per admin operation (login/logout, group/route/member/invite changes)
discord_linksMaps discord_user_idgithub_user_id for /gh Discord commands
telegram_linksMaps telegram_user_idgithub_user_id for /gh Telegram commands

audit_logs is pruned automatically by the scheduled trigger after AUDIT_RETENTION_DAYS (default 90). See Logs for the row fields.

Released under the MIT License.