Skip to content

Commit 7447460

Browse files
author
Frank
committed
wip: zen
1 parent 5345c82 commit 7447460

24 files changed

Lines changed: 995 additions & 242 deletions

File tree

github/sst-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
/// <reference path="../sst-env.d.ts" />
77

88
import "sst"
9-
export {}
9+
export {}

infra/app.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { domain } from "./stage"
22

33
const GITHUB_APP_ID = new sst.Secret("GITHUB_APP_ID")
44
const GITHUB_APP_PRIVATE_KEY = new sst.Secret("GITHUB_APP_PRIVATE_KEY")
5+
export const EMAILOCTOPUS_API_KEY = new sst.Secret("EMAILOCTOPUS_API_KEY")
56
const bucket = new sst.cloudflare.Bucket("Bucket")
67

78
export const api = new sst.cloudflare.Worker("Api", {

infra/console.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { domain } from "./stage"
2+
import { EMAILOCTOPUS_API_KEY } from "./app"
23

34
////////////////
45
// DATABASE
@@ -121,7 +122,7 @@ if ($app.stage === "production" || $app.stage === "frank") {
121122
new sst.cloudflare.x.SolidStart("Console", {
122123
domain,
123124
path: "packages/console/app",
124-
link: [database, AUTH_API_URL, STRIPE_WEBHOOK_SECRET, STRIPE_SECRET_KEY, ZEN_MODELS],
125+
link: [database, AUTH_API_URL, STRIPE_WEBHOOK_SECRET, STRIPE_SECRET_KEY, ZEN_MODELS, EMAILOCTOPUS_API_KEY],
125126
environment: {
126127
//VITE_DOCS_URL: web.url.apply((url) => url!),
127128
//VITE_API_URL: gateway.url.apply((url) => url!),

packages/app/src/sst-env.d.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
/* tslint:disable */
33
/* eslint-disable */
44
/// <reference types="vite/client" />
5-
interface ImportMetaEnv {}
5+
interface ImportMetaEnv {
6+
7+
}
68
interface ImportMeta {
79
readonly env: ImportMetaEnv
8-
}
10+
}

packages/app/sst-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
/// <reference path="../../sst-env.d.ts" />
77

88
import "sst"
9-
export {}
9+
export {}

packages/console/app/src/routes/workspace/member-section.tsx

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { createStore } from "solid-js/store"
55
import { formatDateUTC, formatDateForTable } from "./common"
66
import styles from "./member-section.module.css"
77
import { and, Database, eq, sql } from "@opencode/console-core/drizzle/index.js"
8-
import { UserTable } from "@opencode/console-core/schema/user.sql.js"
8+
import { UserTable, UserRole } from "@opencode/console-core/schema/user.sql.js"
99
import { Identifier } from "@opencode/console-core/identifier.js"
1010

1111
const removeMember = action(async (form: FormData) => {
@@ -31,10 +31,12 @@ const removeMember = action(async (form: FormData) => {
3131

3232
const inviteMember = action(async (form: FormData) => {
3333
"use server"
34-
const name = form.get("name")?.toString().trim()
35-
if (!name) return { error: "Name is required" }
34+
const email = form.get("email")?.toString().trim()
35+
if (!email) return { error: "Email is required" }
3636
const workspaceID = form.get("workspaceID")?.toString()
3737
if (!workspaceID) return { error: "Workspace ID is required" }
38+
const role = form.get("role")?.toString() as (typeof UserRole)[number]
39+
if (!role) return { error: "Role is required" }
3840
return json(
3941
await withActor(
4042
() =>
@@ -44,12 +46,10 @@ const inviteMember = action(async (form: FormData) => {
4446
.values({
4547
id: Identifier.create("user"),
4648
name: "",
47-
email: name,
49+
email,
4850
workspaceID,
49-
role: "member",
50-
timeJoined: sql`now()`,
51+
role,
5152
})
52-
.onDuplicateKeyUpdate({ set: { timeJoined: sql`now()` } })
5353
.then((data) => ({ error: undefined, data }))
5454
.catch((e) => ({ error: e.message as string })),
5555
),
@@ -109,7 +109,23 @@ export function MemberCreateForm() {
109109
>
110110
<form action={inviteMember} method="post" data-slot="create-form">
111111
<div data-slot="input-container">
112-
<input ref={(r) => (input = r)} data-component="input" name="name" type="text" placeholder="Enter email" />
112+
<input ref={(r) => (input = r)} data-component="input" name="email" type="text" placeholder="Enter email" />
113+
<div data-slot="role-selector">
114+
<label>
115+
<input type="radio" name="role" value="admin" checked />
116+
<div>
117+
<strong>Admin</strong>
118+
<p>Can manage models, members, and billing</p>
119+
</div>
120+
</label>
121+
<label>
122+
<input type="radio" name="role" value="member" />
123+
<div>
124+
<strong>Member</strong>
125+
<p>Can only generate API keys for themselves</p>
126+
</div>
127+
</label>
128+
</div>
113129
<Show when={submission.result && submission.result.error}>
114130
{(err) => <div data-slot="form-error">{err()}</div>}
115131
</Show>
@@ -160,15 +176,15 @@ export function MemberSection() {
160176
<tbody>
161177
<For each={members()!}>
162178
{(member) => {
163-
const [copied, setCopied] = createSignal(false)
164-
// const submission = useSubmission(removeKey, ([fd]) => fd.get("id")?.toString() === key.id)
165179
return (
166180
<tr>
167181
<td data-slot="member-email">{member.email}</td>
168182
<td data-slot="member-role">{member.role}</td>
169-
<td data-slot="member-joined" title={formatDateUTC(member.timeJoined!)}>
170-
{formatDateForTable(member.timeJoined!)}
171-
</td>
183+
<Show when={member.timeSeen} fallback={<td data-slot="member-joined">invited</td>}>
184+
<td data-slot="member-joined" title={formatDateUTC(member.timeSeen!)}>
185+
{formatDateForTable(member.timeSeen!)}
186+
</td>
187+
</Show>
172188
<td data-slot="member-actions">
173189
<form action={removeMember} method="post">
174190
<input type="hidden" name="id" value={member.id} />

packages/console/app/sst-env.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@
66
/// <reference path="../../../sst-env.d.ts" />
77

88
import "sst"
9-
export {}
9+
export {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE `user` DROP COLUMN `time_joined`;

0 commit comments

Comments
 (0)