pull/715/head
Travis Fischer 2025-06-18 07:39:02 +07:00
rodzic 61cb19b381
commit 35ff518ff7
7 zmienionych plików z 47 dodań i 22 usunięć

Wyświetl plik

@ -1,8 +1,9 @@
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { assert, parseZodSchema } from '@agentic/platform-core'
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import { db, eq, schema } from '@/db'
import { aclPublicProject } from '@/lib/acl-public-project'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
@ -49,11 +50,7 @@ export function registerV1GetPublicProjectByIdentifier(
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(
project && !project.private && project.lastPublishedDeploymentId,
404,
`Public project not found "${projectIdentifier}"`
)
await aclPublicProject(project, projectIdentifier)
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})

Wyświetl plik

@ -1,8 +1,9 @@
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { assert, parseZodSchema } from '@agentic/platform-core'
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import { db, eq, schema } from '@/db'
import { aclPublicProject } from '@/lib/acl-public-project'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
@ -48,11 +49,7 @@ export function registerV1GetPublicProject(app: OpenAPIHono<DefaultHonoEnv>) {
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(
project && !project.private && project.lastPublishedDeploymentId,
404,
`Public project not found "${projectId}"`
)
await aclPublicProject(project, projectId)
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})

Wyświetl plik

@ -0,0 +1,22 @@
import { assert } from '@agentic/platform-core'
import type { RawProject } from '@/db'
export async function aclPublicProject(
project: RawProject | undefined,
projectId?: string
) {
assert(
project,
404,
`Public project not found${projectId ? ` "${projectId}"` : ''}`
)
assert(
!project.private && project.lastPublishedDeploymentId,
404,
`Public project not found "${project.id}"`
)
assert(!project.deletedAt, 410, `Project has been deleted "${project.id}"`)
}

Wyświetl plik

@ -17,6 +17,7 @@ import { upsertStripeCustomer } from '@/lib/billing/upsert-stripe-customer'
import { upsertStripePricing } from '@/lib/billing/upsert-stripe-pricing'
import { createConsumerToken } from '@/lib/create-consumer-token'
import { aclPublicProject } from '../acl-public-project'
import { createStripeCheckoutSession } from '../billing/create-stripe-checkout-session'
export async function upsertConsumerStripeCheckout(
@ -65,12 +66,6 @@ export async function upsertConsumerStripeCheckout(
}
})
assert(deployment, 404, `Deployment not found "${deploymentId}"`)
assert(
!deployment.deletedAt,
410,
`Deployment has been deleted by its owner "${deployment.id}"`
)
await acl(c, deployment, { label: 'Deployment' })
project = deployment.project!
assert(
@ -78,7 +73,16 @@ export async function upsertConsumerStripeCheckout(
404,
`Project not found "${projectId}" for deployment "${deploymentId}"`
)
await acl(c, project, { label: 'Project' })
await aclPublicProject(project)
// Validate the deployment only after we're sure the project is publicly
// accessible.
assert(
!deployment.deletedAt,
410,
`Deployment has been deleted by its owner "${deployment.id}"`
)
projectId = project.id
}

Wyświetl plik

@ -70,7 +70,8 @@ export function MarketplaceIndex() {
<p>Error fetching projects</p>
) : !projects.length ? (
<p>
No projects found. Create your first project to get started!
No projects found. This is likely an error on Agentic's side.
Please refresh or contact support.
</p>
) : (
<div className='grid gap-4'>

Wyświetl plik

@ -33,7 +33,9 @@ export async function toastError(
}
console.error(...[ctx?.label, message, details].filter(Boolean))
toastImpl.error(message)
toastImpl.error(message, {
duration: 10_000
})
}
export { toast } from 'sonner'

Wyświetl plik

@ -347,7 +347,9 @@ export class AgenticApiClient {
} = {}
): Promise<Array<PopulateProject<TPopulate>>> {
return this.ky
.get('v1/projects', { searchParams: sanitizeSearchParams(searchParams) })
.get('v1/projects/public', {
searchParams: sanitizeSearchParams(searchParams)
})
.json()
}