@@ -2,13 +2,15 @@ import { action, json, query, useAction, useSubmission } from "@solidjs/router"
22import { createEffect , createMemo , createSignal , For , onCleanup , Show } from "solid-js"
33import { getRequestEvent } from "solid-js/web"
44import { Referral } from "@opencode-ai/console-core/referral.js"
5+ import { Actor } from "@opencode-ai/console-core/actor.js"
56import { withActor } from "~/context/auth.withActor"
67import { Modal } from "~/component/modal"
78import { IconCheck , IconCopy } from "~/component/icon"
89import { useI18n } from "~/context/i18n"
910import { useLanguage } from "~/context/language"
1011import { formatResetTime , liteResetTimeKeys } from "~/lib/format-reset-time"
1112import { queryLiteSubscription } from "~/routes/workspace/[id]/go/lite-section"
13+ import { clearReferralCookie , referralCodeFromCookieHeader } from "~/lib/referral-invite"
1214import "./go-referral.css"
1315
1416type GoReferralSummary = Awaited < ReturnType < typeof Referral . summary > >
@@ -25,7 +27,21 @@ const emptyUsagePreview = {
2527
2628export const queryGoReferral = query ( async ( workspaceID : string ) => {
2729 "use server"
28- return withActor ( ( ) => Referral . summary ( ) , workspaceID )
30+ return withActor ( async ( ) => {
31+ const event = getRequestEvent ( )
32+ const referralCode = referralCodeFromCookieHeader ( event ?. request . headers . get ( "cookie" ) ?? null )
33+ if ( referralCode ) {
34+ await Referral . createFromAccount ( {
35+ accountID : Actor . account ( ) ,
36+ referralCode,
37+ } ) . catch ( ( error ) => {
38+ console . error ( "Referral create failed" , error )
39+ } )
40+ event ?. response . headers . append ( "set-cookie" , clearReferralCookie ( ) )
41+ }
42+
43+ return Referral . summary ( )
44+ } , workspaceID )
2945} , "go.referral.get" )
3046
3147export const queryGoReferralUsagePreview = query ( async ( workspaceID : string , referralID ?: string ) => {
@@ -65,6 +81,8 @@ function rewardDescriptionKey(source: GoReferralReward["source"]) {
6581
6682function rewardActionKey ( reward : GoReferralReward , hasActiveGo : boolean ) {
6783 if ( reward . status === "applied" ) return "workspace.referral.reward.action.applied" as const
84+ if ( reward . status === "pending" && reward . source === "inviter" )
85+ return "workspace.referral.reward.source.pendingInviter" as const
6886 if ( reward . status === "pending" || ! hasActiveGo ) return "workspace.referral.reward.action.subscribeUnlock" as const
6987 return "workspace.referral.reward.action.view" as const
7088}
0 commit comments