Copy disabled (too large)
Download .txt
Showing preview only (14,202K chars total). Download the full file to get everything.
Repository: transitive-bullshit/agentic
Branch: main
Commit: beffa8ecfaff
Files: 1049
Total size: 24.1 MB
Directory structure:
gitextract_8yb8dgx_/
├── .cursor/
│ └── rules/
│ └── general.mdc
├── .editorconfig
├── .github/
│ ├── funding.yml
│ └── workflows/
│ ├── main.yml
│ └── release.yml
├── .gitignore
├── .npmrc
├── .prettierignore
├── .vscode/
│ └── launch.json
├── CLAUDE.md
├── Tiltfile
├── apps/
│ ├── api/
│ │ ├── drizzle.config.ts
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── api-v1/
│ │ │ │ ├── auth/
│ │ │ │ │ ├── github-callback.ts
│ │ │ │ │ ├── github-exchange.ts
│ │ │ │ │ ├── github-init.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ ├── sign-in-with-password.ts
│ │ │ │ │ ├── sign-up-with-password.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── consumers/
│ │ │ │ │ ├── admin-activate-consumer.ts
│ │ │ │ │ ├── admin-get-consumer-by-api-key.ts
│ │ │ │ │ ├── create-billing-portal-session.ts
│ │ │ │ │ ├── create-consumer-billing-portal-session.ts
│ │ │ │ │ ├── create-consumer-checkout-session.ts
│ │ │ │ │ ├── create-consumer.ts
│ │ │ │ │ ├── get-consumer-by-project-identifier.ts
│ │ │ │ │ ├── get-consumer.ts
│ │ │ │ │ ├── list-consumers.ts
│ │ │ │ │ ├── list-project-consumers.ts
│ │ │ │ │ ├── refresh-consumer-api-key.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ ├── update-consumer.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── deployments/
│ │ │ │ │ ├── admin-get-deployment-by-identifier.ts
│ │ │ │ │ ├── create-deployment.ts
│ │ │ │ │ ├── get-deployment-by-identifier.ts
│ │ │ │ │ ├── get-deployment.ts
│ │ │ │ │ ├── get-public-deployment-by-identifier.ts
│ │ │ │ │ ├── list-deployments.ts
│ │ │ │ │ ├── publish-deployment.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ └── update-deployment.ts
│ │ │ │ ├── health-check.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── projects/
│ │ │ │ │ ├── create-project.ts
│ │ │ │ │ ├── get-project-by-identifier.ts
│ │ │ │ │ ├── get-project.ts
│ │ │ │ │ ├── get-public-project-by-identifier.ts
│ │ │ │ │ ├── get-public-project.ts
│ │ │ │ │ ├── list-projects.ts
│ │ │ │ │ ├── list-public-projects.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ └── update-project.ts
│ │ │ │ ├── storage/
│ │ │ │ │ └── get-signed-storage-upload-url.ts
│ │ │ │ ├── teams/
│ │ │ │ │ ├── create-team.ts
│ │ │ │ │ ├── delete-team.ts
│ │ │ │ │ ├── get-team.ts
│ │ │ │ │ ├── list-teams.ts
│ │ │ │ │ ├── members/
│ │ │ │ │ │ ├── create-team-member.ts
│ │ │ │ │ │ ├── delete-team-member.ts
│ │ │ │ │ │ ├── schemas.ts
│ │ │ │ │ │ └── update-team-member.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ └── update-team.ts
│ │ │ │ ├── users/
│ │ │ │ │ ├── get-user.ts
│ │ │ │ │ ├── schemas.ts
│ │ │ │ │ └── update-user.ts
│ │ │ │ └── webhooks/
│ │ │ │ └── stripe-webhook.ts
│ │ │ ├── db/
│ │ │ │ ├── index.ts
│ │ │ │ ├── schema/
│ │ │ │ │ ├── account.ts
│ │ │ │ │ ├── auth-data.ts
│ │ │ │ │ ├── common.test.ts
│ │ │ │ │ ├── common.ts
│ │ │ │ │ ├── consumer.ts
│ │ │ │ │ ├── deployment.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── log-entry.ts
│ │ │ │ │ ├── project.ts
│ │ │ │ │ ├── team-member.ts
│ │ │ │ │ ├── team.ts
│ │ │ │ │ └── user.ts
│ │ │ │ ├── schemas.ts
│ │ │ │ ├── types.test.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils.ts
│ │ │ ├── lib/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── storage.test.ts.snap
│ │ │ │ ├── acl-admin.ts
│ │ │ │ ├── acl-public-project.ts
│ │ │ │ ├── acl-team-admin.ts
│ │ │ │ ├── acl-team-member.ts
│ │ │ │ ├── acl.ts
│ │ │ │ ├── auth/
│ │ │ │ │ ├── auth-storage.ts
│ │ │ │ │ ├── create-auth-token.ts
│ │ │ │ │ ├── drizzle-auth-storage.ts
│ │ │ │ │ └── upsert-or-link-user-account.ts
│ │ │ │ ├── billing/
│ │ │ │ │ ├── create-stripe-checkout-session.ts
│ │ │ │ │ ├── upsert-stripe-connect-customer.ts
│ │ │ │ │ ├── upsert-stripe-customer.ts
│ │ │ │ │ ├── upsert-stripe-pricing-resources.ts
│ │ │ │ │ └── upsert-stripe-subscription.ts
│ │ │ │ ├── cache-control.ts
│ │ │ │ ├── consumers/
│ │ │ │ │ ├── upsert-consumer-stripe-checkout.ts
│ │ │ │ │ ├── upsert-consumer.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── create-avatar.ts
│ │ │ │ ├── create-consumer-api-key.ts
│ │ │ │ ├── deployments/
│ │ │ │ │ ├── get-deployment-by-id.ts
│ │ │ │ │ ├── normalize-deployment-version.ts
│ │ │ │ │ ├── publish-deployment.ts
│ │ │ │ │ └── try-get-deployment-by-identifier.ts
│ │ │ │ ├── ensure-auth-user.ts
│ │ │ │ ├── ensure-unique-namespace.ts
│ │ │ │ ├── env.ts
│ │ │ │ ├── exit-hooks.ts
│ │ │ │ ├── external/
│ │ │ │ │ ├── github.ts
│ │ │ │ │ ├── resend.ts
│ │ │ │ │ ├── sentry.ts
│ │ │ │ │ └── stripe.ts
│ │ │ │ ├── middleware/
│ │ │ │ │ ├── authenticate.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── me.ts
│ │ │ │ │ └── team.ts
│ │ │ │ ├── openapi-utils.ts
│ │ │ │ ├── projects/
│ │ │ │ │ └── try-get-project-by-identifier.ts
│ │ │ │ ├── storage.test.ts
│ │ │ │ ├── storage.ts
│ │ │ │ ├── temp
│ │ │ │ ├── types.ts
│ │ │ │ └── utils.ts
│ │ │ ├── oauth-redirect.ts
│ │ │ ├── reset.d.ts
│ │ │ └── server.ts
│ │ ├── tsconfig.json
│ │ ├── tsup.config.ts
│ │ └── vitest.config.ts
│ ├── e2e/
│ │ ├── bin/
│ │ │ ├── deploy-fixtures.ts
│ │ │ ├── publish-fixtures.ts
│ │ │ └── seed-db.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── http-e2e.test.ts.snap
│ │ │ │ └── mcp-e2e.test.ts.snap
│ │ │ ├── agentic-examples.ts
│ │ │ ├── deploy-projects.ts
│ │ │ ├── dev-client.ts
│ │ │ ├── dev-fixtures.ts
│ │ │ ├── env.ts
│ │ │ ├── http-e2e.test.ts
│ │ │ ├── http-fixtures.ts
│ │ │ ├── mcp-e2e.test.ts
│ │ │ ├── mcp-fixtures.ts
│ │ │ └── publish-deployments.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── gateway/
│ │ ├── .dev.vars.example
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── app.ts
│ │ │ ├── lib/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── utils.test.ts.snap
│ │ │ │ ├── agentic-client.ts
│ │ │ │ ├── cf-validate-json-schema.ts
│ │ │ │ ├── create-http-request-for-openapi-operation.ts
│ │ │ │ ├── create-http-response-from-mcp-tool-call-response.ts
│ │ │ │ ├── durable-mcp-client.ts
│ │ │ │ ├── durable-mcp-server.ts
│ │ │ │ ├── env.ts
│ │ │ │ ├── external/
│ │ │ │ │ └── stripe.ts
│ │ │ │ ├── fetch-cache.ts
│ │ │ │ ├── get-admin-consumer.ts
│ │ │ │ ├── get-admin-deployment.ts
│ │ │ │ ├── get-request-cache-key.ts
│ │ │ │ ├── get-tool-args-from-request.ts
│ │ │ │ ├── get-tool.ts
│ │ │ │ ├── handle-mcp-tool-call-error.ts
│ │ │ │ ├── normalize-url.test.ts
│ │ │ │ ├── normalize-url.ts
│ │ │ │ ├── rate-limits/
│ │ │ │ │ ├── durable-rate-limiter.ts
│ │ │ │ │ └── enforce-rate-limit.ts
│ │ │ │ ├── record-tool-call-usage.ts
│ │ │ │ ├── reset.d.ts
│ │ │ │ ├── resolve-edge-request.ts
│ │ │ │ ├── resolve-http-edge-request.ts
│ │ │ │ ├── resolve-mcp-edge-request.ts
│ │ │ │ ├── resolve-origin-tool-call.ts
│ │ │ │ ├── temp
│ │ │ │ ├── temp-mcp
│ │ │ │ ├── transform-http-response-to-mcp-tool-call-response.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── update-origin-request.ts
│ │ │ │ ├── utils.test.ts
│ │ │ │ └── utils.ts
│ │ │ └── worker.ts
│ │ ├── tsconfig.json
│ │ ├── vitest.config.ts
│ │ └── wrangler.jsonc
│ └── web/
│ ├── components.json
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── public/
│ │ ├── adamsbridge.hdr
│ │ └── schema.json
│ ├── readme.md
│ ├── src/
│ │ ├── app/
│ │ │ ├── about/
│ │ │ │ └── page.tsx
│ │ │ ├── app/
│ │ │ │ ├── app-dashboard.tsx
│ │ │ │ ├── consumers/
│ │ │ │ │ ├── [consumerId]/
│ │ │ │ │ │ ├── app-consumer-index.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── app-consumers-index.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ ├── projects/
│ │ │ │ │ ├── [namespace]/
│ │ │ │ │ │ └── [project-slug]/
│ │ │ │ │ │ ├── app-project-index.tsx
│ │ │ │ │ │ └── page.tsx
│ │ │ │ │ ├── app-projects-index.tsx
│ │ │ │ │ └── page.tsx
│ │ │ │ └── temp-testing
│ │ │ ├── auth/
│ │ │ │ └── [provider]/
│ │ │ │ └── success/
│ │ │ │ ├── oauth-success-callback.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── contact/
│ │ │ │ └── page.tsx
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ ├── login/
│ │ │ │ ├── login-form.tsx
│ │ │ │ └── page.tsx
│ │ │ ├── logout/
│ │ │ │ └── page.tsx
│ │ │ ├── marketplace/
│ │ │ │ ├── marketplace-index.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ └── projects/
│ │ │ │ └── [namespace]/
│ │ │ │ └── [project-slug]/
│ │ │ │ ├── marketplace-nav.tsx
│ │ │ │ ├── marketplace-public-project-detail.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ └── utils.ts
│ │ │ ├── not-found.tsx
│ │ │ ├── page.tsx
│ │ │ ├── pricing/
│ │ │ │ └── page.tsx
│ │ │ ├── privacy/
│ │ │ │ └── page.tsx
│ │ │ ├── providers.tsx
│ │ │ ├── publishing/
│ │ │ │ └── page.tsx
│ │ │ ├── signup/
│ │ │ │ ├── page.tsx
│ │ │ │ └── signup-form.tsx
│ │ │ └── terms/
│ │ │ └── page.tsx
│ │ ├── components/
│ │ │ ├── active-link.tsx
│ │ │ ├── agentic-provider.tsx
│ │ │ ├── app-consumers-list.tsx
│ │ │ ├── app-projects-list.tsx
│ │ │ ├── bootstrap.tsx
│ │ │ ├── code-block/
│ │ │ │ ├── highlight.ts
│ │ │ │ └── index.tsx
│ │ │ ├── confetti.tsx
│ │ │ ├── dark-mode-toggle.tsx
│ │ │ ├── demand-side-cta.tsx
│ │ │ ├── dots-section.tsx
│ │ │ ├── example-agentic-configs.tsx
│ │ │ ├── example-usage-section.tsx
│ │ │ ├── example-usage.tsx
│ │ │ ├── feature.tsx
│ │ │ ├── footer/
│ │ │ │ ├── dynamic.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── github-star-counter.tsx
│ │ │ ├── grid-pattern.tsx
│ │ │ ├── header/
│ │ │ │ ├── authenticated-header.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ ├── styles.module.css
│ │ │ │ └── unauthenticated-header.tsx
│ │ │ ├── hero-button/
│ │ │ │ ├── index.tsx
│ │ │ │ └── styles.module.css
│ │ │ ├── hero-simulation-2.tsx
│ │ │ ├── hero-simulation.tsx
│ │ │ ├── loading-indicator/
│ │ │ │ ├── index.tsx
│ │ │ │ ├── loading-dark.json
│ │ │ │ ├── loading-light.json
│ │ │ │ └── styles.module.css
│ │ │ ├── markdown/
│ │ │ │ ├── index.tsx
│ │ │ │ ├── ssr-markdown.tsx
│ │ │ │ └── styles.module.css
│ │ │ ├── mcp-gateway-features.tsx
│ │ │ ├── mcp-marketplace-features.tsx
│ │ │ ├── page-container.tsx
│ │ │ ├── posthog-provider.tsx
│ │ │ ├── project-pricing-plans/
│ │ │ │ ├── index.tsx
│ │ │ │ └── project-pricing-plan.tsx
│ │ │ ├── public-project.tsx
│ │ │ ├── supply-side-cta.tsx
│ │ │ ├── theme-provider.tsx
│ │ │ └── ui/
│ │ │ ├── avatar.tsx
│ │ │ ├── breadcrumb.tsx
│ │ │ ├── button.tsx
│ │ │ ├── collapsible.tsx
│ │ │ ├── dropdown-menu.tsx
│ │ │ ├── input.tsx
│ │ │ ├── label.tsx
│ │ │ ├── tabs.tsx
│ │ │ └── tooltip.tsx
│ │ ├── icons/
│ │ │ ├── github.tsx
│ │ │ ├── twitter.tsx
│ │ │ └── typescript.tsx
│ │ ├── lib/
│ │ │ ├── auth-copy.ts
│ │ │ ├── bootstrap.ts
│ │ │ ├── config.ts
│ │ │ ├── default-agentic-api-client.ts
│ │ │ ├── developer-config.ts
│ │ │ ├── global-api.ts
│ │ │ ├── notifications.ts
│ │ │ ├── query-client.ts
│ │ │ ├── utils.test.ts
│ │ │ └── utils.ts
│ │ └── reset.d.ts
│ └── tsconfig.json
├── contributing.md
├── docs/
│ ├── contact.mdx
│ ├── docs.json
│ ├── index.mdx
│ ├── inject.js
│ ├── marketplace/
│ │ ├── index.mdx
│ │ ├── mcp-clients/
│ │ │ ├── claude-code.mdx
│ │ │ ├── claude-desktop.mdx
│ │ │ ├── cline.mdx
│ │ │ ├── cursor.mdx
│ │ │ ├── raycast.mdx
│ │ │ ├── trae.mdx
│ │ │ ├── vscode.mdx
│ │ │ ├── warp.mdx
│ │ │ └── windsurf.mdx
│ │ └── ts-sdks/
│ │ ├── ai-sdk.mdx
│ │ ├── genkit.mdx
│ │ ├── langchain.mdx
│ │ ├── llamaindex.mdx
│ │ ├── mastra.mdx
│ │ ├── openai-chat.mdx
│ │ └── openai-responses.mdx
│ ├── package.json
│ └── publishing/
│ ├── config/
│ │ ├── auth.mdx
│ │ ├── caching.mdx
│ │ ├── examples.mdx
│ │ ├── index.mdx
│ │ ├── pricing.mdx
│ │ ├── rate-limits.mdx
│ │ └── tool-config.mdx
│ ├── guides/
│ │ ├── existing-mcp-server.mdx
│ │ ├── existing-openapi-service.mdx
│ │ ├── py-fastmcp.mdx
│ │ ├── ts-fastmcp.mdx
│ │ ├── ts-mcp-hono.mdx
│ │ ├── ts-modelfetch.mdx
│ │ ├── ts-openapi-hono.mdx
│ │ └── ts-xmcp.mdx
│ ├── index.mdx
│ ├── origin/
│ │ ├── index.mdx
│ │ ├── metadata.mdx
│ │ └── security.mdx
│ └── quickstart.mdx
├── eslint.config.js
├── examples/
│ ├── mcp-servers/
│ │ ├── context7/
│ │ │ ├── agentic.config.ts
│ │ │ ├── package.json
│ │ │ └── tsconfig.json
│ │ ├── github/
│ │ │ ├── agentic.config.ts
│ │ │ ├── package.json
│ │ │ └── tsconfig.json
│ │ ├── search/
│ │ │ ├── .dev.vars.example
│ │ │ ├── agentic.config.ts
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── env.ts
│ │ │ │ └── worker.ts
│ │ │ ├── tsconfig.json
│ │ │ └── wrangler.jsonc
│ │ └── xmcp/
│ │ ├── .gitignore
│ │ ├── agentic.config.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ └── tools/
│ │ │ └── greet.ts
│ │ ├── tsconfig.json
│ │ ├── vercel.json
│ │ ├── xmcp-env.d.ts
│ │ └── xmcp.config.ts
│ └── ts-sdks/
│ ├── ai-sdk/
│ │ ├── bin/
│ │ │ ├── mcp-filesystem.ts
│ │ │ ├── weather-experimental-active-tools.ts
│ │ │ └── weather.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── genkit/
│ │ ├── bin/
│ │ │ └── weather.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── langchain/
│ │ ├── bin/
│ │ │ └── weather.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── llamaindex/
│ │ ├── bin/
│ │ │ └── weather.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── mastra/
│ │ ├── bin/
│ │ │ └── weather.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ └── openai/
│ ├── bin/
│ │ ├── weather-responses.ts
│ │ └── weather.ts
│ ├── package.json
│ └── tsconfig.json
├── fixtures/
│ ├── invalid/
│ │ ├── invalid-metadata-0/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-metadata-1/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-name-0/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-name-1/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-name-2/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-origin-url-0/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-origin-url-1/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-origin-url-2/
│ │ │ └── agentic.config.json
│ │ ├── invalid-origin-url-3/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-slug-0/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-slug-1/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-slug-2/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-slug-3/
│ │ │ └── agentic.config.ts
│ │ ├── invalid-slug-4/
│ │ │ └── agentic.config.ts
│ │ ├── pricing-base-inconsistent/
│ │ │ └── agentic.config.ts
│ │ ├── pricing-custom-inconsistent/
│ │ │ └── agentic.config.ts
│ │ ├── pricing-duplicate-0/
│ │ │ └── agentic.config.ts
│ │ ├── pricing-duplicate-1/
│ │ │ └── agentic.config.ts
│ │ ├── pricing-empty-0/
│ │ │ └── agentic.config.ts
│ │ ├── pricing-empty-1/
│ │ │ └── agentic.config.ts
│ │ └── pricing-empty-2/
│ │ └── agentic.config.ts
│ ├── package.json
│ ├── tsconfig.json
│ └── valid/
│ ├── basic-mcp/
│ │ ├── agentic.config.ts
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── env.ts
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── basic-openapi/
│ │ ├── agentic.config.ts
│ │ └── jsonplaceholder.json
│ ├── basic-raw-free-json/
│ │ └── agentic.config.json
│ ├── basic-raw-free-ts/
│ │ └── agentic.config.ts
│ ├── everything-openapi/
│ │ ├── agentic.config.ts
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── exit-hooks.ts
│ │ │ ├── lib/
│ │ │ │ └── db.ts
│ │ │ ├── routes/
│ │ │ │ ├── custom-cache-control-tool.ts
│ │ │ │ ├── custom-rate-limit-approximate-tool.ts
│ │ │ │ ├── custom-rate-limit-tool.ts
│ │ │ │ ├── disabled-for-free-plan-tool.ts
│ │ │ │ ├── disabled-rate-limit-tool.ts
│ │ │ │ ├── disabled-tool.ts
│ │ │ │ ├── echo-headers.ts
│ │ │ │ ├── echo.ts
│ │ │ │ ├── get-user.ts
│ │ │ │ ├── health-check.ts
│ │ │ │ ├── no-cache-cache-control-tool.ts
│ │ │ │ ├── no-store-cache-control-tool.ts
│ │ │ │ ├── pure.ts
│ │ │ │ ├── strict-additional-properties.ts
│ │ │ │ └── unpure-marked-pure.ts
│ │ │ └── server.ts
│ │ └── tsconfig.json
│ ├── metadata-0/
│ │ ├── agentic.config.ts
│ │ └── readme.md
│ ├── metadata-1/
│ │ └── agentic.config.ts
│ ├── metadata-2/
│ │ └── agentic.config.ts
│ ├── pricing-3-plans/
│ │ └── agentic.config.ts
│ ├── pricing-custom-0/
│ │ └── agentic.config.ts
│ ├── pricing-freemium/
│ │ └── agentic.config.ts
│ ├── pricing-monthly-annual/
│ │ └── agentic.config.ts
│ └── pricing-pay-as-you-go/
│ └── agentic.config.ts
├── legacy/
│ ├── .editorconfig
│ ├── .github/
│ │ ├── funding.yml
│ │ └── workflows/
│ │ ├── main.yml
│ │ └── release.yml
│ ├── .gitignore
│ ├── .husky/
│ │ └── _/
│ │ └── pre-commit
│ ├── .npmrc
│ ├── .prettierignore
│ ├── .vscode/
│ │ └── launch.json
│ ├── docs/
│ │ ├── intro.mdx
│ │ ├── mint.json
│ │ ├── quickstart.mdx
│ │ ├── scratch.md
│ │ ├── sdks/
│ │ │ ├── genaiscript.mdx
│ │ │ └── xsai.mdx
│ │ ├── tools/
│ │ │ ├── airtable.mdx
│ │ │ ├── apollo.mdx
│ │ │ ├── arxiv.mdx
│ │ │ ├── bing.mdx
│ │ │ ├── brave-search.mdx
│ │ │ ├── calculator.mdx
│ │ │ ├── clearbit.mdx
│ │ │ ├── dexa.mdx
│ │ │ ├── diffbot.mdx
│ │ │ ├── duck-duck-go.mdx
│ │ │ ├── e2b.mdx
│ │ │ ├── exa.mdx
│ │ │ ├── firecrawl.mdx
│ │ │ ├── google-custom-search.mdx
│ │ │ ├── google-docs.mdx
│ │ │ ├── google-drive.mdx
│ │ │ ├── gravatar.mdx
│ │ │ ├── hacker-news.mdx
│ │ │ ├── hunter.mdx
│ │ │ ├── jina.mdx
│ │ │ ├── leadmagic.mdx
│ │ │ ├── mcp.mdx
│ │ │ ├── midjourney.mdx
│ │ │ ├── notion.mdx
│ │ │ ├── novu.mdx
│ │ │ ├── open-meteo.mdx
│ │ │ ├── people-data-labs.mdx
│ │ │ ├── perigon.mdx
│ │ │ ├── polygon.mdx
│ │ │ ├── predict-leads.mdx
│ │ │ ├── proxycurl.mdx
│ │ │ ├── reddit.mdx
│ │ │ ├── rocketreach.mdx
│ │ │ ├── searxng.mdx
│ │ │ ├── serpapi.mdx
│ │ │ ├── serper.mdx
│ │ │ ├── slack.mdx
│ │ │ ├── social-data.mdx
│ │ │ ├── tavily.mdx
│ │ │ ├── twilio.mdx
│ │ │ ├── twitter.mdx
│ │ │ ├── typeform.mdx
│ │ │ ├── weather.mdx
│ │ │ ├── wikidata.mdx
│ │ │ ├── wikipedia.mdx
│ │ │ ├── wolfram-alpha.mdx
│ │ │ ├── youtube.mdx
│ │ │ └── zoominfo.mdx
│ │ └── usage.mdx
│ ├── eslint.config.js
│ ├── examples/
│ │ ├── dexter/
│ │ │ ├── bin/
│ │ │ │ ├── code-interpreter.ts
│ │ │ │ ├── election-news.ts
│ │ │ │ └── weather.ts
│ │ │ ├── package.json
│ │ │ └── tsconfig.json
│ │ ├── playground/
│ │ │ ├── bin/
│ │ │ │ └── scratch.ts
│ │ │ ├── package.json
│ │ │ └── tsconfig.json
│ │ └── xsai/
│ │ ├── bin/
│ │ │ └── weather.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── license
│ ├── package.json
│ ├── packages/
│ │ ├── airtable/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── airtable-client.ts
│ │ │ │ ├── airtable.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── apollo/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── apollo-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── arxiv/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── arxiv-client.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── utils.ts
│ │ │ └── tsconfig.json
│ │ ├── bing/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── bing-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── brave-search/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── brave-search-client.ts
│ │ │ │ ├── brave-search.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── calculator/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── calculator.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── clearbit/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── clearbit-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── diffbot/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── diffbot-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── duck-duck-go/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── duck-duck-go-client.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── paginate.ts
│ │ │ └── tsconfig.json
│ │ ├── e2b/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── e2b.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── exa/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── exa-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── firecrawl/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── firecrawl-client.test.ts
│ │ │ │ ├── firecrawl-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── github/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── github-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── google-custom-search/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── google-custom-search-client.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── paginate.ts
│ │ │ └── tsconfig.json
│ │ ├── google-docs/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── google-docs-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── google-drive/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── google-drive-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── gravatar/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── gravatar-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── hacker-news/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── hacker-news-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── hunter/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── hunter-client.ts
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── jigsawstack/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── integration.test.ts
│ │ │ │ ├── jigsawstack-client.ts
│ │ │ │ └── tool.test.ts
│ │ │ └── tsconfig.json
│ │ ├── jina/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── jina-client.ts
│ │ │ └── tsconfig.json
│ │ ├── leadmagic/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── leadmagic-client.ts
│ │ │ └── tsconfig.json
│ │ ├── midjourney/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── midjourney-client.ts
│ │ │ └── tsconfig.json
│ │ ├── notion/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── notion-client.ts
│ │ │ │ └── notion.ts
│ │ │ └── tsconfig.json
│ │ ├── novu/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── novu-client.ts
│ │ │ └── tsconfig.json
│ │ ├── open-meteo/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── open-meteo-client.ts
│ │ │ │ └── open-meteo.ts
│ │ │ └── tsconfig.json
│ │ ├── openapi-to-ts/
│ │ │ ├── bin/
│ │ │ │ └── openapi-to-ts.ts
│ │ │ ├── fixtures/
│ │ │ │ ├── generated/
│ │ │ │ │ ├── firecrawl-client.ts
│ │ │ │ │ ├── firecrawl.ts
│ │ │ │ │ ├── github-client.ts
│ │ │ │ │ ├── github.ts
│ │ │ │ │ ├── notion-client.ts
│ │ │ │ │ ├── notion.ts
│ │ │ │ │ ├── open-meteo-client.ts
│ │ │ │ │ ├── open-meteo.ts
│ │ │ │ │ ├── pet-store-client.ts
│ │ │ │ │ ├── pet-store.ts
│ │ │ │ │ ├── petstore-expanded-client.ts
│ │ │ │ │ ├── petstore-expanded.ts
│ │ │ │ │ ├── security-client.ts
│ │ │ │ │ ├── security.ts
│ │ │ │ │ ├── tic-tac-toe-client.ts
│ │ │ │ │ └── tic-tac-toe.ts
│ │ │ │ └── openapi/
│ │ │ │ ├── firecrawl.json
│ │ │ │ ├── github.json
│ │ │ │ ├── notion.json
│ │ │ │ ├── open-meteo.yaml
│ │ │ │ ├── pet-store.json
│ │ │ │ ├── petstore-expanded.json
│ │ │ │ ├── readme.json
│ │ │ │ ├── security.json
│ │ │ │ ├── stripe.json
│ │ │ │ └── tic-tac-toe.json
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── generate-ts-from-openapi.test.ts.snap
│ │ │ │ ├── generate-ts-from-openapi.test.ts
│ │ │ │ ├── generate-ts-from-openapi.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── openapi-parameters-to-json-schema.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils.ts
│ │ │ ├── tsconfig.json
│ │ │ └── tsup.config.ts
│ │ ├── people-data-labs/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── people-data-labs-client.ts
│ │ │ └── tsconfig.json
│ │ ├── perigon/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── perigon-client.ts
│ │ │ └── tsconfig.json
│ │ ├── polygon/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── polygon-client.ts
│ │ │ └── tsconfig.json
│ │ ├── predict-leads/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── predict-leads-client.ts
│ │ │ └── tsconfig.json
│ │ ├── proxycurl/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── proxycurl-client.ts
│ │ │ └── tsconfig.json
│ │ ├── reddit/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── reddit-client.ts
│ │ │ └── tsconfig.json
│ │ ├── rocketreach/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── rocketreach-client.ts
│ │ │ └── tsconfig.json
│ │ ├── searxng/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── searxng-client.ts
│ │ │ └── tsconfig.json
│ │ ├── slack/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── slack-client.ts
│ │ │ │ └── slack.ts
│ │ │ └── tsconfig.json
│ │ ├── social-data/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── social-data-client.ts
│ │ │ └── tsconfig.json
│ │ ├── stdlib/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.json
│ │ ├── tavily/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── tavily-client.ts
│ │ │ └── tsconfig.json
│ │ ├── twilio/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── twilio-client.ts
│ │ │ └── tsconfig.json
│ │ ├── twitter/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── client.ts
│ │ │ │ ├── error.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── nango.ts
│ │ │ │ ├── twitter-client.ts
│ │ │ │ ├── types.ts
│ │ │ │ └── utils.ts
│ │ │ └── tsconfig.json
│ │ ├── typeform/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── typeform-client.ts
│ │ │ └── tsconfig.json
│ │ ├── weather/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── weather-client.ts
│ │ │ └── tsconfig.json
│ │ ├── wikidata/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── wikidata-client.ts
│ │ │ └── tsconfig.json
│ │ ├── wikipedia/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── wikipedia-client.ts
│ │ │ └── tsconfig.json
│ │ ├── wolfram-alpha/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── wolfram-alpha-client.ts
│ │ │ └── tsconfig.json
│ │ ├── xsai/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ ├── xsai.test.ts
│ │ │ │ └── xsai.ts
│ │ │ └── tsconfig.json
│ │ ├── youtube/
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── index.ts
│ │ │ │ └── youtube-client.ts
│ │ │ └── tsconfig.json
│ │ └── zoominfo/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── zoominfo-client.ts
│ │ └── tsconfig.json
│ ├── pnpm-workspace.yaml
│ ├── readme.md
│ ├── tsconfig.json
│ ├── tsup.config.ts
│ ├── turbo.json
│ └── vite.config.ts
├── license
├── package.json
├── packages/
│ ├── api-client/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── agentic-api-client.ts
│ │ │ ├── index.ts
│ │ │ └── types.ts
│ │ └── tsconfig.json
│ ├── cli/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── cli.ts
│ │ │ ├── commands/
│ │ │ │ ├── debug.ts
│ │ │ │ ├── deploy.ts
│ │ │ │ ├── get.ts
│ │ │ │ ├── list.ts
│ │ │ │ ├── publish.ts
│ │ │ │ ├── signin.ts
│ │ │ │ ├── signout.ts
│ │ │ │ ├── signup.ts
│ │ │ │ └── whoami.ts
│ │ │ ├── lib/
│ │ │ │ ├── auth-store.ts
│ │ │ │ ├── auth.ts
│ │ │ │ ├── commander.d.ts
│ │ │ │ ├── env.ts
│ │ │ │ ├── exit-hooks.ts
│ │ │ │ ├── handle-error.ts
│ │ │ │ ├── prompt-for-deployment-version.ts
│ │ │ │ ├── reset.d.ts
│ │ │ │ ├── resolve-deployment.ts
│ │ │ │ └── utils.ts
│ │ │ └── types.ts
│ │ ├── tsconfig.json
│ │ └── tsup.config.ts
│ ├── emails/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── emails/
│ │ │ │ └── send-verify-code-email.tsx
│ │ │ ├── index.ts
│ │ │ └── resend-email-client.tsx
│ │ └── tsconfig.json
│ ├── hono/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── env.ts
│ │ │ ├── error-handler.ts
│ │ │ ├── header-utils.ts
│ │ │ ├── index.ts
│ │ │ ├── json-rpc-errors.ts
│ │ │ ├── logger/
│ │ │ │ ├── index.ts
│ │ │ │ ├── logger.ts
│ │ │ │ └── utils.ts
│ │ │ ├── middleware/
│ │ │ │ ├── access-logger.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── init.ts
│ │ │ │ ├── response-time.ts
│ │ │ │ └── unless.ts
│ │ │ ├── sentry.test.ts
│ │ │ ├── sentry.ts
│ │ │ └── types.ts
│ │ └── tsconfig.json
│ ├── json-schema/
│ │ ├── license
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── coercion.ts
│ │ │ ├── deep-compare-strict.ts
│ │ │ ├── dereference.ts
│ │ │ ├── format.ts
│ │ │ ├── index.ts
│ │ │ ├── pointer.ts
│ │ │ ├── types.ts
│ │ │ ├── ucs2-length.ts
│ │ │ ├── validate.ts
│ │ │ └── validator.ts
│ │ ├── test/
│ │ │ ├── coercion.test.ts
│ │ │ ├── index.test.ts
│ │ │ ├── json-schema-test-suite.ts
│ │ │ ├── meta-schema.ts
│ │ │ ├── types.ts
│ │ │ ├── unsupported.ts
│ │ │ └── validator.spec.ts
│ │ └── tsconfig.json
│ ├── openapi-utils/
│ │ ├── fixtures/
│ │ │ ├── basic.json
│ │ │ ├── firecrawl.json
│ │ │ ├── mixed.json
│ │ │ ├── notion.json
│ │ │ ├── open-meteo.yaml
│ │ │ ├── pet-store.json
│ │ │ ├── petstore-expanded.json
│ │ │ ├── readme.json
│ │ │ ├── security.json
│ │ │ └── tic-tac-toe.json
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── get-tools-from-openapi-spec.test.ts.snap
│ │ │ │ └── validate-openapi-spec.test.ts.snap
│ │ │ ├── get-tools-from-openapi-spec.test.ts
│ │ │ ├── get-tools-from-openapi-spec.ts
│ │ │ ├── index.ts
│ │ │ ├── openapi-parameters-to-json-schema.ts
│ │ │ ├── redocly-config.ts
│ │ │ ├── types.ts
│ │ │ ├── utils.ts
│ │ │ ├── validate-json-schema-object.ts
│ │ │ ├── validate-openapi-spec.test.ts
│ │ │ └── validate-openapi-spec.ts
│ │ └── tsconfig.json
│ ├── platform/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── __snapshots__/
│ │ │ │ └── load-agentic-config.test.ts.snap
│ │ │ ├── define-config.ts
│ │ │ ├── index.ts
│ │ │ ├── load-agentic-config.test.ts
│ │ │ ├── load-agentic-config.ts
│ │ │ ├── origin-adapters/
│ │ │ │ ├── mcp.ts
│ │ │ │ └── openapi.ts
│ │ │ ├── parse-agentic-project-config.ts
│ │ │ ├── resolve-agentic-project-config.ts
│ │ │ ├── resolve-metadata-file.ts
│ │ │ ├── resolve-metadata-files.ts
│ │ │ ├── resolve-metadata.ts
│ │ │ ├── resolve-origin-adapter.ts
│ │ │ ├── types.ts
│ │ │ ├── validate-agentic-project-config.ts
│ │ │ ├── validate-metadata-file.ts
│ │ │ ├── validate-metadata-files.ts
│ │ │ ├── validate-origin-adapter.ts
│ │ │ ├── validate-origin-url.ts
│ │ │ ├── validate-pricing.ts
│ │ │ └── validate-tools.ts
│ │ └── tsconfig.json
│ ├── platform-core/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── __snapshots__/
│ │ │ │ └── utils.test.ts.snap
│ │ │ ├── errors.ts
│ │ │ ├── hash-object.test.ts
│ │ │ ├── hash-object.ts
│ │ │ ├── index.ts
│ │ │ ├── rate-limit-headers.ts
│ │ │ ├── types.test.ts
│ │ │ ├── types.ts
│ │ │ ├── utils.test.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── tool-client/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── agentic-tool-client.ts
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── types/
│ │ ├── bin/
│ │ │ └── generate-project-config-json-schema.ts
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── __snapshots__/
│ │ │ │ └── rate-limit.test.ts.snap
│ │ │ ├── agentic-project-config.test.ts
│ │ │ ├── agentic-project-config.ts
│ │ │ ├── auth-subjects.ts
│ │ │ ├── index.ts
│ │ │ ├── mcp.ts
│ │ │ ├── openapi.d.ts
│ │ │ ├── origin-adapter.ts
│ │ │ ├── pricing.test.ts
│ │ │ ├── pricing.ts
│ │ │ ├── rate-limit.test.ts
│ │ │ ├── rate-limit.ts
│ │ │ ├── temp
│ │ │ ├── tools.ts
│ │ │ ├── types.ts
│ │ │ ├── utils.ts
│ │ │ └── webhook.ts
│ │ └── tsconfig.json
│ └── validators/
│ ├── package.json
│ ├── readme.md
│ ├── src/
│ │ ├── __snapshots__/
│ │ │ ├── parse-deployment-identifier.test.ts.snap
│ │ │ ├── parse-project-identifier.test.ts.snap
│ │ │ └── parse-tool-identifier.test.ts.snap
│ │ ├── index.ts
│ │ ├── namespace-blacklist.ts
│ │ ├── parse-deployment-identifier.test.ts
│ │ ├── parse-deployment-identifier.ts
│ │ ├── parse-project-identifier.test.ts
│ │ ├── parse-project-identifier.ts
│ │ ├── parse-tool-identifier.test.ts
│ │ ├── parse-tool-identifier.ts
│ │ ├── tool-name-blacklist.ts
│ │ ├── types.ts
│ │ ├── utils.ts
│ │ ├── validators.test.ts
│ │ └── validators.ts
│ └── tsconfig.json
├── pnpm-workspace.yaml
├── readme.md
├── stdlib/
│ ├── ai-sdk/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── ai-sdk.test.ts
│ │ │ ├── ai-sdk.ts
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── core/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── parse-structured-output.test.ts.snap
│ │ │ │ └── utils.test.ts.snap
│ │ │ ├── _utils.ts
│ │ │ ├── ai-function-set.test.ts
│ │ │ ├── ai-function-set.ts
│ │ │ ├── assert.ts
│ │ │ ├── create-ai-function.test.ts
│ │ │ ├── create-ai-function.ts
│ │ │ ├── echo.ts
│ │ │ ├── errors.ts
│ │ │ ├── fns.ts
│ │ │ ├── index.ts
│ │ │ ├── message.test.ts
│ │ │ ├── message.ts
│ │ │ ├── parse-structured-output.test.ts
│ │ │ ├── parse-structured-output.ts
│ │ │ ├── reset.d.ts
│ │ │ ├── schema.test.ts
│ │ │ ├── schema.ts
│ │ │ ├── types.ts
│ │ │ ├── utils.test.ts
│ │ │ ├── utils.ts
│ │ │ ├── zod-to-json-schema.test.ts
│ │ │ └── zod-to-json-schema.ts
│ │ └── tsconfig.json
│ ├── genkit/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── genkit.test.ts
│ │ │ ├── genkit.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── vitest.config.ts
│ ├── langchain/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── langchain.test.ts
│ │ │ └── langchain.ts
│ │ └── tsconfig.json
│ ├── license
│ ├── llamaindex/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── llamaindex.test.ts
│ │ │ └── llamaindex.ts
│ │ └── tsconfig.json
│ ├── mastra/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── mastra.test.ts
│ │ │ └── mastra.ts
│ │ └── tsconfig.json
│ ├── mcp/
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── mcp-tools.ts
│ │ │ ├── paginate.ts
│ │ │ └── types.ts
│ │ └── tsconfig.json
│ ├── serpapi/
│ │ ├── package.json
│ │ ├── readme.md
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ └── serpapi-client.ts
│ │ └── tsconfig.json
│ └── serper/
│ ├── package.json
│ ├── readme.md
│ ├── src/
│ │ ├── index.ts
│ │ └── serper-client.ts
│ └── tsconfig.json
├── todo.md
├── tsconfig.json
├── tsup.config.ts
└── turbo.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .cursor/rules/general.mdc
================================================
---
description:
globs:
alwaysApply: false
---
---
description: General TypeScript coding guidelines
globs:
---
## General
- Write elegant, concise, and readable code
- Prefer `const` over `let` (never use `var`)
- Use kebab-case for file and directory names
- Use clear, descriptive names for variables, functions, and components
## Modules
### Imports & Exports
- Always use ESM `import` and `export` (never use CJS `require`)
- File imports should never use an extension (NOT `.js`, `.ts` or `.tsx`).
- GOOD examples:
- `import { Foo } from './foo'`
- `import { type Route } from './types/root'`
- `import zod from 'zod'`
- `import { logger } from '~/types'`
- BAD examples:
- `import { Foo } from './foo.js'`
- `import { type Route } from './types/root.js'`
- `import { Foo } from './foo.ts'`
- Always prefer named exports over default exports
### Packages
All packages must follow these `package.json` rules:
- `type` must be set to `module`
## TypeScript
- Avoid semicolons at the end of lines
- Use TypeScript's utility types (e.g., `Partial`, `Pick`, `Omit`) to manipulate existing types
- Create custom types for complex data structures used throughout the application
- If possible, avoid using `any`/`unknown` or casting values like `(value as any)` in TypeScript outside of test files e.g. `*.test.ts` or test fixtures e.g. `**/test-data.ts`.
- Don't rely on `typeof`, `ReturnType<>`, `Awaited<>`, etc for complex type inference (it's ok for simple types)
- You can use `as const` as needed for better type inference
- Functions should accept an object parameter instead of multiple parameters
- Good examples:
```ts
function myFunction({ foo, bar }: { foo: boolean; bar: string }) {}
function VideoPlayer({ sid }: { sid: string }) {}
```
- Bad examples:
```ts
function myFunction(foo: boolean, bar: string, baz: number) {}
```
- Arguments should generally be destructured in the function definition, not the function body.
- Good example:
```ts
function myFunction({ foo, bar }: { foo: boolean; bar: string }) {}
```
- Bad example:
```ts
function myFunction(args: { foo: boolean; bar: string }) {
const { foo, bar } = args
}
```
- Zod should be used to parse untrusted data, but not for data that is trusted like function arguments
- Prefer Zod unions over Zod enums
- For example, this union `z.union([ z.literal('youtube'), z.literal('spotify') ])` is better than this enum `z.enum([ 'youtube', 'spotify' ])`
- Promises (and `async` functions which implicitly create Promises) must always be properly handled, either via:
- Using `await` to wait for the Promise to resolve successfully
- Using `.then` or `.catch` to handle Promise resolution
- Returning a Promise to a calling function which itself has to handle the Promise.
## Node.js
- Utilize the `node:` protocol when importing Node.js modules (e.g., `import fs from 'node:fs/promises'`)
- Prefer promise-based APIs over Node's legacy callback APIs
- Use environment variables for secrets (avoid hardcoding sensitive information)
### Web Standard APIs
Always prefer using standard web APIs like `fetch`, `WebSocket`, and `ReadableStream` when possible. Avoid redundant libraries (like `node-fetch`).
- Prefer the `fetch` API for making HTTP requests instead of Node.js modules like `http` or `https`
- Use the native `fetch` API instead of `node-fetch` or polyfilled `cross-fetch`
- Use the `ky` library for HTTP requests instead of `axios` or `superagent`
- Use the WHATWG `URL` and `URLSearchParams` classes instead of the Node.js `url` module
- Use `Request` and `Response` objects from the Fetch API instead of Node.js-specific request and response objects
## Error Handling
- Prefer `async`/`await` over `.then()` and `.catch()`
- Always handle errors correctly (eg: `try`/`catch` or `.catch()`)
- Avoid swallowing errors silently; always log or handle caught errors appropriately
## Comments
Comments should be used to document and explain code. They should complement the use of descriptive variable and function names and type declarations.
- Add comments to explain complex sections of code
- Add comments that will improve the autocompletion preview in IDEs (eg: functions and types)
- Don't add comments that just reword symbol names or repeat type declarations
- Use **JSDoc** formatting for comments (not TSDoc or inline comments)
## Logging
- Just use `console` for logging.
## Testing
### Unit Testing
- **All unit tests should use Vitest**
- DO NOT attempt to install or use other testing libraries like Jest
- Test files should be named `[target].test.ts` and placed in the same directory as the code they are testing (NOT a separate directory)
- Good example: `src/my-file.ts` and `src/my-file.test.ts`
- Bad example: `src/my-file.ts` and `src/test/my-file.test.ts` or `test/my-file.test.ts` or `src/__tests__/my-file.test.ts`
- Tests should be run with `pnpm test:unit`
- It's acceptable to use `any`/`unknown` in test files (such as `*.test.ts`) or test fixtures (like `**/test-data.ts`) to facilitate mocking or stubbing external modules or partial function arguments, referencing the usage guidelines in the TypeScript section.
- Frontend react code does not need unit tests
### Test Coverage
- Test critical business logic and edge cases
- Don't add tests for trivial code or just to increase test coverage
- Don't make tests too brittle or flaky by relying on implementation details
## Git
- When possible, combine the `git add` and `git commit` commands into a single `git commit -am` command, to speed things up
================================================
FILE: .editorconfig
================================================
root = true
[*]
indent_style = space
indent_size = 2
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .github/funding.yml
================================================
github: [transitive-bullshit]
================================================
FILE: .github/workflows/main.yml
================================================
name: CI
on: [push]
jobs:
test:
name: Test Node.js ${{ matrix.node-version }}
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
node-version:
- 22
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
NODE_OPTIONS: --max-old-space-size=8192
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'pnpm'
- run: pnpm install --frozen-lockfile --strict-peer-dependencies
- name: Cache turbo build setup
uses: actions/cache@v4
with:
path: .turbo
key: ${{ runner.os }}-node-${{ matrix.node-version }}-turbo-${{ github.sha }}
restore-keys: |
${{ runner.os }}-node-${{ matrix.node-version }}-turbo-
- run: pnpm build
- run: pnpm test
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: lts/*
cache: pnpm
- run: pnpm dlx changelogithub
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
.next/
# production
build/
dist/
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# dotenv files
.env
.env.production
.env.staging
.env.test
.env*.local
# cloudflare env vars
.dev.vars
.dev.vars.production
.dev.vars.staging
.dev.vars.test
# turbo
.turbo
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
old/
out/
.wrangler
.sentryclirc
.eslintcache
.nitro
.tanstack
.xmcp
================================================
FILE: .npmrc
================================================
enable-pre-post-scripts=true
package-manager-strict=false
================================================
FILE: .prettierignore
================================================
# autogenerated files
packages/types/src/openapi.d.ts
apps/web/src/routeTree.gen.ts
legacy/packages/openapi-to-ts/fixtures/generated
examples/mcp-servers/xmcp/xmcp-env.d.ts
================================================
FILE: .vscode/launch.json
================================================
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug API",
"type": "node",
"request": "launch",
// Debug server in VSCode
"cwd": "${workspaceFolder}/apps/api",
"program": "src/server.ts",
// "program": "${file}",
/*
* Path to tsx binary
* Assuming locally installed
*/
"runtimeExecutable": "tsx",
/*
* Open terminal when debugging starts (Optional)
* Useful to see console.logs
*/
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
// Files to exclude from debugger (e.g. call stack)
"skipFiles": [
// Node.js internal core modules
"<node_internals>/**"
// Ignore all dependencies (optional)
// "${workspaceFolder}/node_modules/**"
]
}
// Wrangler's vscode support seems to be extremely buggy. It sometimes works
// 1/10th of the time, but nothing I tried could improve that consistency.
// Will use browser debugger instead for now.
// {
// "name": "gateway",
// "type": "node",
// "request": "attach",
// "port": 9229,
// "cwd": "${workspaceFolder}/apps/gateway",
// // "cwd": "${workspaceFolder}",
// // "cwd": "/",
// "attachExistingChildren": false,
// "autoAttachChildProcesses": false,
// "sourceMaps": true,
// "outFiles": ["${workspaceFolder}/apps/gateway/.wrangler/tmp/**/*"],
// "resolveSourceMapLocations": null,
// // "resolveSourceMapLocations": ["**", "!**/node_modules/**"],
// "skipFiles": ["<node_internals>/**"],
// "internalConsoleOptions": "neverOpen",
// "restart": true
// },
// {
// "name": "Wrangler",
// "type": "node",
// "request": "attach",
// "port": 9229,
// "cwd": "/",
// "resolveSourceMapLocations": null,
// "attachExistingChildren": false,
// "autoAttachChildProcesses": false,
// "sourceMaps": true // works with or without this line (supposedly)
// }
]
// "compounds": [
// {
// "name": "Debug Workers",
// "configurations": ["gateway"],
// "stopAll": true
// }
// ]
}
================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
This is a monorepo for Agentic - a platform that provides API gateway services for MCP (Model Context Protocol) and OpenAPI integrations.
### Core Architecture
The platform consists of:
- **API Service** (`apps/api/`) - Platform backend API with authentication, billing, and resource management
- **Gateway Service** (`apps/gateway/`) - Cloudflare Worker that proxies requests to origin MCP/OpenAPI services
- **Website** (`apps/web/`) - Next.js site for both the marketing site and authenticated webapp
- **E2E Tests** (`apps/e2e/`) - End-to-end test suite for HTTP and MCP gateway requests
- **Shared Packages** (`packages/`) - Common utilities, types, validators, and config
- **StdLib Packages** (`stdlib/`) - TS AI SDK adapters
The gateway accepts HTTP requests at `https://gateway.agentic.so/deploymentIdentifier/tool-name` or `https://gateway.agentic.so/deploymentIdentifier/mcp` for MCP.
### Development Commands
**Main development workflow:**
- `pnpm dev` - Start all services in development mode
- `pnpm build` - Build all packages and apps (except for the website)
- `pnpm test` - Run all tests (format, lint, typecheck, unit, but not e2e tests)
- `pnpm clean` - Clean all build artifacts
**Individual test commands:**
- `pnpm test:format` - Check code formatting with Prettier
- `pnpm test:lint` - Run ESLint across all packages
- `pnpm test:typecheck` - Run TypeScript type checking
- `pnpm test:unit` - Run unit tests with Vitest
**Code quality:**
- `pnpm fix` - Auto-fix formatting and linting issues
- `pnpm knip` - Check for unused dependencies
**E2E testing:**
- (from the `apps/e2e` directory)
- `pnpm e2e` - Run all E2E tests
- `pnpm e2e-http` - Run HTTP edge E2E tests
- `pnpm e2e-mcp` - Run MCP edge E2E tests
### Key Database Models
The system uses Drizzle ORM with PostgreSQL. Core entities:
- **User** - Platform users
- **Team** - Organizations with members and billing
- **Project** - Namespace API products comprised of immutable Deployments
- **Deployment** - Immutable instances of MCP/OpenAPI services, including gateway and pricing config
- **Consumer** - Customer subscription tracking usage and billing
### Agentic Configuration
Agentic projects use `agentic.config.{ts,js,json}` files to define:
- Project name and metadata
- Origin adapter (MCP server or OpenAPI spec)
- Tool configurations and permissions
- Pricing plans and rate limits
- Authentication requirements
The platform supports both MCP servers and OpenAPI specifications as origin adapters.
### Gateway Request Flow
1. Request hits gateway with deployment identifier
2. Gateway validates consumer authentication/rate limits/caching
3. Request is transformed and forwarded to origin service
4. Response is processed and returned with appropriate headers
5. Usage is tracked for billing and analytics
### Environment Setup
All apps require environment variables for:
- Database connections (`DATABASE_URL`)
- External services (Stripe, GitHub, Resend, Sentry)
- Internal services (API, gateway, etc)
- Authentication secrets
- Stripe secrets
- Admin API keys
- Sentry DSN
- etc
## Coding Conventions
### General
- Write elegant, concise, and readable code
- Prefer `const` over `let` (never use `var`)
- Use kebab-case for file and directory names
- Use clear, descriptive names for variables, functions, and components
### Modules
- Always use ESM `import` and `export` (never use CJS `require`)
- File imports should never use an extension (NOT `.js`, `.ts` or `.tsx`).
- GOOD examples:
- `import { Foo } from './foo'`
- `import { type Route } from './types/root'`
- `import zod from 'zod'`
- `import { logger } from '~/types'`
- BAD examples:
- `import { Foo } from './foo.js'`
- `import { type Route } from './types/root.js'`
- `import { Foo } from './foo.ts'`
- Always prefer named exports over default exports except for when default exports are required (like in Next.js `page.tsx` components)
### Packages
All packages must follow these `package.json` rules:
- `type` must be set to `module`
### TypeScript
- Avoid semicolons at the end of lines
- Use TypeScript's utility types (e.g., `Partial`, `Pick`, `Omit`) to manipulate existing types
- Create custom types for complex data structures used throughout the application
- If possible, avoid using `any`/`unknown` or casting values like `(value as any)` in TypeScript outside of test files e.g. `*.test.ts` or test fixtures e.g. `**/test-data.ts`.
- Try not to rely on `typeof`, `ReturnType<>`, `Awaited<>`, etc for complex type inference (it's ok for simple types)
- You can use `as const` as needed for better type inference
- Functions should accept an object parameter instead of multiple parameters
- GOOD examples:
```ts
function myFunction({ foo, bar }: { foo: boolean; bar: string }) {}
function VideoPlayer({ sid }: { sid: string }) {}
```
- BAD examples:
```ts
function myFunction(foo: boolean, bar: string, baz: number) {}
```
- Arguments should generally be destructured in the function definition, not the function body.
- GOOD example:
```ts
function myFunction({ foo, bar }: { foo: boolean; bar: string }) {}
function exampleWithOptionalParams({
foo = 'example'
}: { foo?: string } = {}) {}
```
- BAD example:
```ts
function myFunction(opts: { foo: boolean; bar: string }) {
const { foo, bar } = opts
}
```
- Zod should be used to parse untrusted data, but not for data that is trusted like function arguments
- Prefer Zod unions over Zod enums
- For example, this union `z.union([ z.literal('youtube'), z.literal('spotify') ])` is better than this enum `z.enum([ 'youtube', 'spotify' ])`
- Promises (and `async` functions which implicitly create Promises) must always be properly handled, either via:
- Using `await` to wait for the Promise to resolve successfully
- Using `.then` or `.catch` to handle Promise resolution
- Returning a Promise to a calling function which itself has to handle the Promise.
## Node.js
- Utilize the `node:` protocol when importing Node.js modules (e.g., `import fs from 'node:fs/promises'`)
- Prefer promise-based APIs over Node's legacy callback APIs
- Use environment variables for secrets (avoid hardcoding sensitive information)
### Web Standard APIs
Always prefer using standard web APIs like `fetch`, `WebSocket`, and `ReadableStream` when possible. Avoid redundant libraries (like `node-fetch`).
- Prefer the `fetch` API for making HTTP requests instead of Node.js modules like `http` or `https`
- Prefer using the `ky` `fetch` wrapper for HTTP requests instead of `axios`, `superagent`, `node-fetch` or any other HTTP request library
- Never use `node-fetch`; prefer `ky` or native `fetch` directly
- Use the WHATWG `URL` and `URLSearchParams` classes instead of the Node.js `url` module
- Use `Request` and `Response` objects from the Fetch API instead of Node.js-specific request and response objects
### Error Handling
- Prefer `async`/`await` over `.then()` and `.catch()`
- Always handle errors correctly (eg: `try`/`catch` or `.catch()`)
- Avoid swallowing errors silently; always log or handle caught errors appropriately
### Comments
Comments should be used to document and explain code. They should complement the use of descriptive variable and function names and type declarations.
- Add comments to explain complex sections of code
- Add comments that will improve the autocompletion preview in IDEs (eg: functions and types)
- Don't add comments that just reword symbol names or repeat type declarations
- Use **JSDoc** formatting for comments (not TSDoc or inline comments)
### Logging
- Just use `console` for logging.
### Testing
#### Unit Testing
- **All unit tests should use Vitest**
- DO NOT attempt to install or use other testing libraries like Jest
- Test files should be named `[target].test.ts` and placed in the same directory as the code they are testing (NOT a separate directory)
- GOOD example: `src/my-file.ts` and `src/my-file.test.ts`
- BAD example: `src/my-file.ts` and `src/test/my-file.test.ts` or `test/my-file.test.ts` or `src/__tests__/my-file.test.ts`
- Tests should be run with `pnpm test:unit`
- You may use `any`/`unknown` in test files (such as `*.test.ts`) or test fixtures (like `**/test-data.ts`) to facilitate mocking or stubbing external modules or partial function arguments, referencing the usage guidelines in the TypeScript section.
- Frontend react code does not need unit tests
#### Test Coverage
- Test critical business logic and edge cases
- Don't add tests for trivial code or just to increase test coverage
- Don't make tests too brittle or flaky by relying on implementation details
### Git
- When possible, combine the `git add` and `git commit` commands into a single `git commit -am` command, to speed things up
================================================
FILE: Tiltfile
================================================
# 🌊 run `tilt up` to start
# then open http://localhost:10350/r/(all)/overview
load('ext://uibutton', 'cmd_button', 'bool_input', 'location')
# Find docs on Tilt at https://docs.tilt.dev/api.html#api.local_resource
# Find icons at https://fonts.google.com/icons
local_resource(
'🍍 API',
serve_dir='apps/api',
serve_cmd='pnpm dev:server',
links=[ link('http://localhost:3001/v1/health', 'API'), ],
labels=['Agentic']
)
local_resource(
'🌶️ Web',
serve_dir='apps/web',
serve_cmd='pnpm dev',
links=[ link('http://localhost:3000', 'Web'), ],
labels=['Agentic']
)
local_resource(
'🍉 Gateway',
serve_dir='apps/gateway',
serve_cmd='pnpm dev',
labels=['Agentic']
)
local_resource(
'🧪 E2E Tests',
cmd='echo 0',
labels=['Testing'],
auto_init=False
)
local_resource(
'🔍 Drizzle Studio',
serve_dir='apps/api',
serve_cmd='pnpm drizzle-kit studio',
links=[ link('https://local.drizzle.studio', 'Drizzle Studio'), ],
labels=['Services'],
)
local_resource(
'💸 Stripe Webhooks',
serve_dir='apps/api',
serve_cmd='pnpm dev:stripe',
# links=[ link('http://localhost:4983', 'Stripe Webhooks'), ],
labels=['Services'],
)
cmd_button(
'Seed Database',
argv=['sh', '-c', 'cd apps/e2e && pnpm run seed-db'],
location=location.NAV,
icon_name='nature',
text='Seed Database',
)
================================================
FILE: apps/api/drizzle.config.ts
================================================
import { defineConfig } from 'drizzle-kit'
export default defineConfig({
out: './drizzle',
schema: './src/db/schema/index.ts',
dialect: 'postgresql',
dbCredentials: {
// eslint-disable-next-line no-process-env
url: process.env.DATABASE_URL!
}
})
================================================
FILE: apps/api/package.json
================================================
{
"name": "api",
"private": true,
"version": "8.4.4",
"description": "Internal Agentic platform API service.",
"author": "Travis Fischer <travis@transitivebullsh.it>",
"license": "AGPL-3.0",
"repository": {
"type": "git",
"url": "git+https://github.com/transitive-bullshit/agentic.git",
"directory": "apps/api"
},
"type": "module",
"source": "./src/server.ts",
"scripts": {
"build": "tsup",
"dev": "run-p dev:*",
"dev:server": "dotenvx run -- tsx src/server.ts",
"dev:stripe": "dotenvx run -- stripe listen --forward-to http://localhost:3001/v1/webhooks/stripe",
"prod": "run-p prod:*",
"prod:server": "dotenvx run -o -f .env.production -- tsx src/server.ts",
"prod:stripe": "dotenvx run -o -f .env.production -- stripe listen --forward-to http://localhost:3001/v1/webhooks/stripe",
"start": "tsx src/server.ts",
"drizzle-kit": "dotenvx run -- drizzle-kit",
"drizzle-kit:prod": "dotenvx run -o -f .env.production -- drizzle-kit",
"clean": "del dist",
"test": "run-s test:*",
"test:typecheck": "tsc --noEmit",
"test:unit": "[ -n \"$CI\" ] || dotenvx run -- vitest run"
},
"dependencies": {
"@agentic/platform": "workspace:*",
"@agentic/platform-core": "workspace:*",
"@agentic/platform-emails": "workspace:*",
"@agentic/platform-hono": "workspace:*",
"@agentic/platform-types": "workspace:*",
"@agentic/platform-validators": "workspace:*",
"@aws-sdk/client-s3": "^3.726.1",
"@aws-sdk/s3-request-presigner": "^3.726.1",
"@dicebear/collection": "catalog:",
"@dicebear/core": "catalog:",
"@fisch0920/drizzle-orm": "catalog:",
"@fisch0920/drizzle-zod": "catalog:",
"@hono/node-server": "catalog:",
"@hono/zod-openapi": "catalog:",
"@paralleldrive/cuid2": "catalog:",
"@sentry/node": "catalog:",
"bcryptjs": "catalog:",
"exit-hook": "catalog:",
"file-type": "^21.0.0",
"hono": "catalog:",
"ky": "catalog:",
"mrmime": "^2.0.1",
"octokit": "catalog:",
"p-all": "catalog:",
"postgres": "catalog:",
"restore-cursor": "catalog:",
"semver": "catalog:",
"stripe": "catalog:",
"type-fest": "catalog:",
"zod-validation-error": "catalog:"
},
"devDependencies": {
"@types/semver": "catalog:",
"drizzle-kit": "catalog:",
"drizzle-orm": "catalog:"
}
}
================================================
FILE: apps/api/readme.md
================================================
<p align="center">
<a href="https://agentic.so">
<img alt="Agentic" src="https://raw.githubusercontent.com/transitive-bullshit/agentic/main/apps/web/public/agentic-social-image-light.jpg" width="640">
</a>
</p>
<p>
<a href="https://github.com/transitive-bullshit/agentic/actions/workflows/main.yml"><img alt="Build Status" src="https://github.com/transitive-bullshit/agentic/actions/workflows/main.yml/badge.svg" /></a>
<a href="https://prettier.io"><img alt="Prettier Code Formatting" src="https://img.shields.io/badge/code_style-prettier-brightgreen.svg" /></a>
</p>
# Agentic API <!-- omit from toc -->
> Backend API for the Agentic platform.
- [Website](https://agentic.so)
- [Docs](https://docs.agentic.so)
## Dependencies
- **Postgres**
- `DATABASE_URL` - Postgres connection string
- [On macOS](https://wiki.postgresql.org/wiki/Homebrew): `brew install postgresql && brew services start postgresql`
- You'll need to run `pnpm drizzle-kit push` to set up your database schema
- **S3** - Required to use file attachments
- Any S3-compatible provider is supported, such as [Cloudflare R2](https://developers.cloudflare.com/r2/)
- Alterantively, you can use a local S3 server like [MinIO](https://github.com/minio/minio#homebrew-recommended) or [LocalStack](https://github.com/localstack/localstack)
- To run LocalStack on macOS: `brew install localstack/tap/localstack-cli && localstack start -d`
- To run MinIO macOS: `brew install minio/stable/minio && minio server /data`
- I recommend using Cloudflare R2, though – it's amazing and should be free for most use cases!
- `S3_BUCKET` - Required
- `S3_REGION` - Optional; defaults to `auto`
- `S3_ENDPOINT` - Required; example: `https://<id>.r2.cloudflarestorage.com`
- `ACCESS_KEY_ID` - Required ([cloudflare R2 docs](https://developers.cloudflare.com/r2/api/s3/tokens/))
- `SECRET_ACCESS_KEY` - Required ([cloudflare R2 docs](https://developers.cloudflare.com/r2/api/s3/tokens/))
## License
[GNU AGPL 3.0](https://choosealicense.com/licenses/agpl-3.0/)
================================================
FILE: apps/api/src/api-v1/auth/github-callback.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import type { OpenAPIHono } from '@hono/zod-openapi'
import { assert } from '@agentic/platform-core'
import { authStorage } from './utils'
export function registerV1GitHubOAuthCallback(
app: OpenAPIHono<DefaultHonoEnv>
) {
return app.get('auth/github/callback', async (c) => {
const logger = c.get('logger')
const query = c.req.query()
assert(query.state, 400, 'State is required')
const entry = await authStorage.get(['github', query.state, 'redirectUri'])
assert(entry, 400, 'Redirect URI not found')
const redirectUri = entry.redirectUri
assert(entry.redirectUri, 400, 'Redirect URI not found')
const url = new URL(redirectUri)
for (const [key, value] of Object.entries(query)) {
url.searchParams.set(key, value)
}
logger.info('GitHub auth callback', query, '=>', url.toString(), {
rawUrl: redirectUri,
query
})
return c.redirect(url.toString())
})
}
================================================
FILE: apps/api/src/api-v1/auth/github-exchange.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import { createAuthToken } from '@/lib/auth/create-auth-token'
import { upsertOrLinkUserAccount } from '@/lib/auth/upsert-or-link-user-account'
import {
exchangeGitHubOAuthCodeForAccessToken,
getGitHubClient
} from '@/lib/external/github'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { authSessionResponseSchema } from './schemas'
const route = createRoute({
description: 'Exchanges a GitHub OAuth code for an Agentic auth session.',
tags: ['auth'],
operationId: 'exchangeOAuthCodeWithGitHub',
method: 'post',
path: 'auth/github/exchange',
security: openapiAuthenticatedSecuritySchemas,
request: {
body: {
required: true,
content: {
'application/json': {
schema: z
.object({
code: z.string()
})
.passthrough()
}
}
}
},
responses: {
200: {
description: 'An auth session',
content: {
'application/json': {
schema: authSessionResponseSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GitHubOAuthExchange(
app: OpenAPIHono<DefaultHonoEnv>
) {
return app.openapi(route, async (c) => {
const logger = c.get('logger')
const body = c.req.valid('json')
const result = await exchangeGitHubOAuthCodeForAccessToken(body)
logger.info('github oauth', result)
const client = getGitHubClient({ accessToken: result.access_token! })
const { data: ghUser } = await client.rest.users.getAuthenticated()
logger.info('github user', ghUser)
if (!ghUser.email) {
const { data: emails } = await client.request('GET /user/emails')
const primary = emails.find((e) => e.primary)
const verified = emails.find((e) => e.verified)
const fallback = emails.find((e) => e.email)
const email = primary?.email || verified?.email || fallback?.email
ghUser.email = email!
}
assert(
ghUser.email,
'Error authenticating with GitHub: user email is required.'
)
const now = Date.now()
const user = await upsertOrLinkUserAccount({
partialAccount: {
provider: 'github',
accountId: `${ghUser.id}`,
accountUsername: ghUser.login.toLowerCase(),
accessToken: result.access_token,
refreshToken: result.refresh_token,
// `expires_in` and `refresh_token_expires_in` are given in seconds
accessTokenExpiresAt: result.expires_in
? new Date(now + result.expires_in * 1000)
: undefined,
refreshTokenExpiresAt: result.refresh_token_expires_in
? new Date(now + result.refresh_token_expires_in * 1000)
: undefined,
scope: result.scope || undefined
},
partialUser: {
email: ghUser.email,
isEmailVerified: true,
name: ghUser.name || undefined,
username: ghUser.login.toLowerCase(),
image: ghUser.avatar_url
}
})
logger.info('github user result', user)
const token = await createAuthToken(user)
return c.json(parseZodSchema(authSessionResponseSchema, { token, user }))
})
}
================================================
FILE: apps/api/src/api-v1/auth/github-init.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import { env } from '@/lib/env'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { authStorage } from './utils'
const route = createRoute({
description: 'Starts a GitHub OAuth flow.',
tags: ['auth'],
operationId: 'initGitHubOAuthFlow',
method: 'get',
path: 'auth/github/init',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: z
.object({
redirect_uri: z.string(),
client_id: z.string().optional(),
scope: z.string().optional()
})
.passthrough()
},
responses: {
302: {
description: 'Redirected to GitHub'
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GitHubOAuthInitFlow(
app: OpenAPIHono<DefaultHonoEnv>
) {
return app.openapi(route, async (c) => {
const logger = c.get('logger')
const {
client_id: clientId = env.GITHUB_CLIENT_ID,
scope = 'user:email',
redirect_uri: redirectUri
} = c.req.query()
const state = crypto.randomUUID()
// TODO: unique identifier!
// TODO: THIS IS IMPORTANT!! if multiple users are authenticating with github concurrently, this will currently really mess things up...
await authStorage.set(['github', state, 'redirectUri'], { redirectUri })
const publicRedirectUri = `${env.apiBaseUrl}/v1/auth/github/callback`
const url = new URL('https://github.com/login/oauth/authorize')
url.searchParams.append('client_id', clientId)
url.searchParams.append('scope', scope)
url.searchParams.append('state', state)
url.searchParams.append('redirect_uri', publicRedirectUri)
logger.info('Redirecting to GitHub', {
url: url.toString(),
clientId,
scope,
publicRedirectUri
})
return c.redirect(url.toString())
})
}
================================================
FILE: apps/api/src/api-v1/auth/schemas.ts
================================================
import { z } from '@hono/zod-openapi'
import { schema } from '@/db'
export const authSessionResponseSchema = z
.object({
token: z.string().nonempty(),
user: schema.userSelectSchema
})
.openapi('AuthSession')
================================================
FILE: apps/api/src/api-v1/auth/sign-in-with-password.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import type { Context } from 'hono'
import { assert, parseZodSchema } from '@agentic/platform-core'
import { isValidPassword } from '@agentic/platform-validators'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import { compare } from 'bcryptjs'
import { and, db, eq, schema } from '@/db'
import { createAuthToken } from '@/lib/auth/create-auth-token'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { authSessionResponseSchema } from './schemas'
const route = createRoute({
description: 'Signs in with email and password.',
tags: ['auth'],
operationId: 'signInWithPassword',
method: 'post',
path: 'auth/password/signin',
security: openapiAuthenticatedSecuritySchemas,
request: {
body: {
required: true,
content: {
'application/json': {
schema: z.object({
email: z.string().email(),
password: z.string().refine((password) => isValidPassword(password))
})
}
}
}
},
responses: {
200: {
description: 'An auth session',
content: {
'application/json': {
schema: authSessionResponseSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1SignInWithPassword(app: OpenAPIHono<DefaultHonoEnv>) {
return app.openapi(route, trySignIn)
}
export async function trySignIn(
c: Context<
DefaultHonoEnv,
'auth/password/signin',
{
in: {
json: {
password: string
email: string
}
}
out: {
json: {
password: string
email: string
}
}
}
>
) {
const { email, password } = c.req.valid('json')
const user = await db.query.users.findFirst({
where: eq(schema.users.email, email)
})
assert(user, 404, `User not found "${email}"`)
const account = await db.query.accounts.findFirst({
where: and(
eq(schema.accounts.userId, user.id),
eq(schema.accounts.provider, 'password')
)
})
assert(account?.password, 404, `User "${email}" does not have a password set`)
assert(compare(password, account.password), 403, 'Authentication error')
const token = await createAuthToken(user)
return c.json(parseZodSchema(authSessionResponseSchema, { token, user }))
}
================================================
FILE: apps/api/src/api-v1/auth/sign-up-with-password.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { parseZodSchema } from '@agentic/platform-core'
import { isValidPassword } from '@agentic/platform-validators'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import { genSalt, hash } from 'bcryptjs'
import { usernameSchema } from '@/db'
import { createAuthToken } from '@/lib/auth/create-auth-token'
import { upsertOrLinkUserAccount } from '@/lib/auth/upsert-or-link-user-account'
import { ensureUniqueNamespace } from '@/lib/ensure-unique-namespace'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { authSessionResponseSchema } from './schemas'
import { trySignIn } from './sign-in-with-password'
const route = createRoute({
description: 'Signs up for a new account with email and password.',
tags: ['auth'],
operationId: 'signUpWithPassword',
method: 'post',
path: 'auth/password/signup',
security: openapiAuthenticatedSecuritySchemas,
request: {
body: {
required: true,
content: {
'application/json': {
schema: z.object({
username: usernameSchema,
email: z.string().email(),
password: z.string().refine((password) => isValidPassword(password))
})
}
}
}
},
responses: {
200: {
description: 'An auth session',
content: {
'application/json': {
schema: authSessionResponseSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1SignUpWithPassword(app: OpenAPIHono<DefaultHonoEnv>) {
return app.openapi(route, async (c) => {
try {
// try signing in to see if the user already exists
return await trySignIn(c)
} catch {
// Ignore errors
}
const { username, email, password } = c.req.valid('json')
await ensureUniqueNamespace(username, { label: 'username' })
const salt = await genSalt()
const hashedPassword = await hash(password, salt)
// TODO: fail if username is taken
const user = await upsertOrLinkUserAccount({
partialAccount: {
provider: 'password',
accountId: email,
password: hashedPassword
},
partialUser: {
username,
email
}
})
const token = await createAuthToken(user)
return c.json(parseZodSchema(authSessionResponseSchema, { token, user }))
})
}
================================================
FILE: apps/api/src/api-v1/auth/utils.ts
================================================
import { DrizzleAuthStorage } from '@/lib/auth/drizzle-auth-storage'
export const authStorage = DrizzleAuthStorage()
================================================
FILE: apps/api/src/api-v1/consumers/admin-activate-consumer.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { aclAdmin } from '@/lib/acl-admin'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponse410,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { consumerIdParamsSchema } from './schemas'
import { setAdminCacheControlForConsumer } from './utils'
const route = createRoute({
description:
"Activates a consumer signifying that at least one API call has been made using the consumer's API token. This method is idempotent and admin-only.",
tags: ['admin', 'consumers'],
operationId: 'adminActivateConsumer',
method: 'put',
path: 'admin/consumers/{consumerId}/activate',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: consumerIdParamsSchema
},
responses: {
200: {
description: 'An admin consumer object',
content: {
'application/json': {
schema: schema.consumerAdminSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409,
...openapiErrorResponse410
}
})
export function registerV1AdminActivateConsumer(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { consumerId } = c.req.valid('param')
await aclAdmin(c)
const [consumer] = await db
.update(schema.consumers)
.set({ activated: true })
.where(eq(schema.consumers.id, consumerId))
.returning()
assert(consumer, 404, `Consumer not found "${consumerId}"`)
setAdminCacheControlForConsumer(c, consumer)
return c.json(parseZodSchema(schema.consumerAdminSelectSchema, consumer))
})
}
================================================
FILE: apps/api/src/api-v1/consumers/admin-get-consumer-by-api-key.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { aclAdmin } from '@/lib/acl-admin'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { consumerApiKeyParamsSchema, populateConsumerSchema } from './schemas'
import { setAdminCacheControlForConsumer } from './utils'
const route = createRoute({
description: 'Gets a consumer by API key. This route is admin-only.',
tags: ['admin', 'consumers'],
operationId: 'adminGetConsumerByApiKey',
method: 'get',
// TODO: is it wise to use a path param for the API key? especially wehn it'll
// be cached in cloudflare's shared cache?
path: 'admin/consumers/api-keys/{apiKey}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: consumerApiKeyParamsSchema,
query: populateConsumerSchema
},
responses: {
200: {
description: 'An admin consumer object',
content: {
'application/json': {
schema: schema.consumerAdminSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1AdminGetConsumerByApiKey(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { apiKey } = c.req.valid('param')
const { populate = [] } = c.req.valid('query')
await aclAdmin(c)
const consumer = await db.query.consumers.findFirst({
where: eq(schema.consumers.token, apiKey),
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(consumer, 404, `API key not found "${apiKey}"`)
setAdminCacheControlForConsumer(c, consumer)
return c.json(parseZodSchema(schema.consumerAdminSelectSchema, consumer))
})
}
================================================
FILE: apps/api/src/api-v1/consumers/create-billing-portal-session.ts
================================================
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { upsertStripeCustomer } from '@/lib/billing/upsert-stripe-customer'
import { env } from '@/lib/env'
import { stripe } from '@/lib/external/stripe'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponse410,
openapiErrorResponses
} from '@/lib/openapi-utils'
const route = createRoute({
description:
'Creates a Stripe billing portal session for the authenticated user.',
tags: ['consumers'],
operationId: 'createBillingPortalSession',
method: 'post',
path: 'consumers/billing-portal',
security: openapiAuthenticatedSecuritySchemas,
responses: {
200: {
description: 'A billing portal session URL',
content: {
'application/json': {
schema: z.object({
url: z.string().url()
})
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409,
...openapiErrorResponse410
}
})
export function registerV1CreateBillingPortalSession(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { stripeCustomer } = await upsertStripeCustomer(c)
const portalSession = await stripe.billingPortal.sessions.create({
customer: stripeCustomer.id,
return_url: `${env.AGENTIC_WEB_BASE_URL}/app/consumers`
})
return c.json({ url: portalSession.url })
})
}
================================================
FILE: apps/api/src/api-v1/consumers/create-consumer-billing-portal-session.ts
================================================
import { assert } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { env } from '@/lib/env'
import { stripe } from '@/lib/external/stripe'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponse410,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { consumerIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Creates a Stripe billing portal session for a customer.',
tags: ['consumers'],
operationId: 'createConsumerBillingPortalSession',
method: 'post',
path: 'consumers/{consumerId}/billing-portal',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: consumerIdParamsSchema
},
responses: {
200: {
description: 'A billing portal session URL',
content: {
'application/json': {
schema: z.object({
url: z.string().url()
})
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409,
...openapiErrorResponse410
}
})
export function registerV1CreateConsumerBillingPortalSession(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { consumerId } = c.req.valid('param')
const consumer = await db.query.consumers.findFirst({
where: eq(schema.consumers.id, consumerId)
})
assert(consumer, 404, `Consumer not found "${consumerId}"`)
await acl(c, consumer, { label: 'Consumer' })
const portalSession = await stripe.billingPortal.sessions.create({
customer: consumer._stripeCustomerId,
return_url: `${env.AGENTIC_WEB_BASE_URL}/app/consumers/${consumerId}`
})
return c.json({ url: portalSession.url })
})
}
================================================
FILE: apps/api/src/api-v1/consumers/create-consumer-checkout-session.ts
================================================
import { parseZodSchema, pick } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { schema } from '@/db'
import { upsertConsumerStripeCheckout } from '@/lib/consumers/upsert-consumer-stripe-checkout'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponse410,
openapiErrorResponses
} from '@/lib/openapi-utils'
const route = createRoute({
description:
'Creates a Stripe checkout session for a consumer to modify their subscription to a project.',
tags: ['consumers'],
operationId: 'createConsumerCheckoutSession',
method: 'post',
path: 'consumers/checkout',
security: openapiAuthenticatedSecuritySchemas,
request: {
body: {
required: true,
content: {
'application/json': {
schema: schema.consumerInsertSchema
}
}
}
},
responses: {
200: {
description: 'A consumer object',
content: {
'application/json': {
schema: z.object({
checkoutSession: z.object({
id: z.string(),
url: z.string().url()
}),
consumer: schema.consumerSelectSchema
})
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409,
...openapiErrorResponse410
}
})
export function registerV1CreateConsumerCheckoutSession(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const body = c.req.valid('json')
const { checkoutSession, consumer } = await upsertConsumerStripeCheckout(
c,
body
)
return c.json({
checkoutSession: pick(checkoutSession, 'id', 'url'),
consumer: parseZodSchema(schema.consumerSelectSchema, consumer)
})
})
}
================================================
FILE: apps/api/src/api-v1/consumers/create-consumer.ts
================================================
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { schema } from '@/db'
import { upsertConsumer } from '@/lib/consumers/upsert-consumer'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponse410,
openapiErrorResponses
} from '@/lib/openapi-utils'
const route = createRoute({
description:
"Upserts a consumer by modifying a customer's subscription to a project.",
tags: ['consumers'],
operationId: 'createConsumer',
method: 'post',
path: 'consumers',
security: openapiAuthenticatedSecuritySchemas,
request: {
body: {
required: true,
content: {
'application/json': {
schema: schema.consumerInsertSchema
}
}
}
},
responses: {
200: {
description: 'A consumer object',
content: {
'application/json': {
schema: schema.consumerSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409,
...openapiErrorResponse410
}
})
export function registerV1CreateConsumer(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const body = c.req.valid('json')
const consumer = await upsertConsumer(c, body)
return c.json(parseZodSchema(schema.consumerSelectSchema, consumer))
})
}
================================================
FILE: apps/api/src/api-v1/consumers/get-consumer-by-project-identifier.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { and, db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { aclPublicProject } from '@/lib/acl-public-project'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { projectIdentifierAndPopulateConsumerSchema } from './schemas'
const route = createRoute({
description:
'Gets a consumer for the authenticated user and the given project identifier.',
tags: ['consumers'],
operationId: 'getConsumerByProjectIdentifier',
method: 'get',
path: 'consumers/by-project-identifier',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: projectIdentifierAndPopulateConsumerSchema
},
responses: {
200: {
description: 'A consumer object',
content: {
'application/json': {
schema: schema.consumerSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetConsumerByProjectIdentifier(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { projectIdentifier, populate = [] } = c.req.valid('query')
const userId = c.get('userId')
const project = await db.query.projects.findFirst({
where: eq(schema.projects.identifier, projectIdentifier)
})
assert(project, 404, `Project not found "${projectIdentifier}"`)
aclPublicProject(project)
const consumer = await db.query.consumers.findFirst({
where: and(
eq(schema.consumers.userId, userId),
eq(schema.consumers.projectId, project.id)
),
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(
consumer,
404,
`Consumer not found for user "${userId}" and project "${projectIdentifier}"`
)
await acl(c, consumer, { label: 'Consumer' })
return c.json(parseZodSchema(schema.consumerSelectSchema, consumer))
})
}
================================================
FILE: apps/api/src/api-v1/consumers/get-consumer.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { consumerIdParamsSchema, populateConsumerSchema } from './schemas'
const route = createRoute({
description: 'Gets a consumer by ID.',
tags: ['consumers'],
operationId: 'getConsumer',
method: 'get',
path: 'consumers/{consumerId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: consumerIdParamsSchema,
query: populateConsumerSchema
},
responses: {
200: {
description: 'A consumer object',
content: {
'application/json': {
schema: schema.consumerSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetConsumer(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const { consumerId } = c.req.valid('param')
const { populate = [] } = c.req.valid('query')
const consumer = await db.query.consumers.findFirst({
where: eq(schema.consumers.id, consumerId),
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(consumer, 404, `Consumer not found "${consumerId}"`)
await acl(c, consumer, { label: 'Consumer' })
return c.json(parseZodSchema(schema.consumerSelectSchema, consumer))
})
}
================================================
FILE: apps/api/src/api-v1/consumers/list-consumers.ts
================================================
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { ensureAuthUser } from '@/lib/ensure-auth-user'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { paginationAndPopulateConsumerSchema } from './schemas'
const route = createRoute({
description: 'Lists all of the customer subscriptions for the current user.',
tags: ['consumers'],
operationId: 'listConsumers',
method: 'get',
path: 'consumers',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: paginationAndPopulateConsumerSchema
},
responses: {
200: {
description: 'A list of consumers',
content: {
'application/json': {
schema: z.array(schema.consumerSelectSchema)
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1ListConsumers(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const {
offset = 0,
limit = 10,
sort = 'desc',
sortBy = 'createdAt',
populate = []
} = c.req.valid('query')
const user = await ensureAuthUser(c)
const consumers = await db.query.consumers.findMany({
where: eq(schema.consumers.userId, user.id),
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
},
orderBy: (consumers, { asc, desc }) => [
sort === 'desc' ? desc(consumers[sortBy]) : asc(consumers[sortBy])
],
offset,
limit
})
return c.json(
parseZodSchema(z.array(schema.consumerSelectSchema), consumers)
)
})
}
================================================
FILE: apps/api/src/api-v1/consumers/list-project-consumers.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { projectIdParamsSchema } from '../projects/schemas'
import { paginationAndPopulateConsumerSchema } from './schemas'
const route = createRoute({
description: 'Lists all of the customers for a project.',
tags: ['consumers'],
operationId: 'listConsumersForProject',
method: 'get',
path: 'projects/{projectId}/consumers',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: projectIdParamsSchema,
query: paginationAndPopulateConsumerSchema
},
responses: {
200: {
description: 'A list of consumers subscribed to the given project',
content: {
'application/json': {
schema: z.array(schema.consumerSelectSchema)
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1ListConsumersForProject(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const {
offset = 0,
limit = 10,
sort = 'desc',
sortBy = 'createdAt',
populate = []
} = c.req.valid('query')
const { projectId } = c.req.valid('param')
assert(projectId, 400, 'Project ID is required')
const project = await db.query.projects.findFirst({
where: eq(schema.projects.id, projectId)
})
assert(project, 404, `Project not found "${projectId}"`)
await acl(c, project, { label: 'Project' })
const consumers = await db.query.consumers.findMany({
where: eq(schema.consumers.projectId, projectId),
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
},
orderBy: (consumers, { asc, desc }) => [
sort === 'desc' ? desc(consumers[sortBy]) : asc(consumers[sortBy])
],
offset,
limit
})
return c.json(
parseZodSchema(z.array(schema.consumerSelectSchema), consumers)
)
})
}
================================================
FILE: apps/api/src/api-v1/consumers/refresh-consumer-api-key.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { createConsumerApiKey } from '@/lib/create-consumer-api-key'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { consumerIdParamsSchema } from './schemas'
const route = createRoute({
description: "Refreshes a consumer's API key.",
tags: ['consumers'],
operationId: 'refreshConsumerApiKey',
method: 'post',
path: 'consumers/{consumerId}/refresh-api-key',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: consumerIdParamsSchema
},
responses: {
200: {
description: 'A consumer object',
content: {
'application/json': {
schema: schema.consumerSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1RefreshConsumerApiKey(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { consumerId } = c.req.valid('param')
let consumer = await db.query.consumers.findFirst({
where: eq(schema.consumers.id, consumerId)
})
assert(consumer, 404, 'Consumer not found')
await acl(c, consumer, { label: 'Consumer' })
// Update the consumer's API token
;[consumer] = await db
.update(schema.consumers)
.set({
token: await createConsumerApiKey()
})
.where(eq(schema.consumers.id, consumer.id))
.returning()
assert(consumer, 500, 'Error updating consumer')
return c.json(parseZodSchema(schema.consumerSelectSchema, consumer))
})
}
================================================
FILE: apps/api/src/api-v1/consumers/schemas.ts
================================================
import { z } from '@hono/zod-openapi'
import {
consumerIdSchema,
consumerRelationsSchema,
paginationSchema,
projectIdentifierSchema
} from '@/db'
export const consumerIdParamsSchema = z.object({
consumerId: consumerIdSchema.openapi({
param: {
description: 'Consumer ID',
name: 'consumerId',
in: 'path'
}
})
})
export const consumerApiKeyParamsSchema = z.object({
apiKey: z
.string()
.nonempty()
.openapi({
param: {
description: 'Consumer API key',
name: 'apiKey',
in: 'path'
}
})
})
export const projectIdentifierQuerySchema = z.object({
projectIdentifier: projectIdentifierSchema
})
export const populateConsumerSchema = z.object({
populate: z
.union([consumerRelationsSchema, z.array(consumerRelationsSchema)])
.default([])
.transform((p) => (Array.isArray(p) ? p : [p]))
.optional()
})
export const paginationAndPopulateConsumerSchema = z.object({
...paginationSchema.shape,
...populateConsumerSchema.shape
})
export const projectIdentifierAndPopulateConsumerSchema = z.object({
...projectIdentifierQuerySchema.shape,
...populateConsumerSchema.shape
})
================================================
FILE: apps/api/src/api-v1/consumers/update-consumer.ts
================================================
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { schema } from '@/db'
import { upsertConsumer } from '@/lib/consumers/upsert-consumer'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponse410,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { consumerIdParamsSchema } from './schemas'
const route = createRoute({
description:
"Updates a consumer's subscription to a different deployment or pricing plan. Set `plan` to undefined to cancel the subscription.",
tags: ['consumers'],
operationId: 'updateConsumer',
method: 'post',
path: 'consumers/{consumerId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: consumerIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.consumerUpdateSchema
}
}
}
},
responses: {
200: {
description: 'A consumer object',
content: {
'application/json': {
schema: schema.consumerSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409,
...openapiErrorResponse410
}
})
export function registerV1UpdateConsumer(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { consumerId } = c.req.valid('param')
const body = c.req.valid('json')
const consumer = await upsertConsumer(c, {
...body,
consumerId
})
return c.json(parseZodSchema(schema.consumerSelectSchema, consumer))
})
}
================================================
FILE: apps/api/src/api-v1/consumers/utils.ts
================================================
import type { RawConsumer } from '@/db'
import type { AuthenticatedHonoContext } from '@/lib/types'
import { setPublicCacheControl } from '@/lib/cache-control'
import { env } from '@/lib/env'
export function setAdminCacheControlForConsumer(
c: AuthenticatedHonoContext,
consumer: RawConsumer
) {
if (
consumer.plan === 'free' ||
!consumer.activated ||
!consumer.isStripeSubscriptionActive
) {
// TODO: should we cache free-tier consumers for longer on prod?
// We really don't want free tier customers to cause our backend API so
// much traffic, but we'd also like for customers upgrading to a paid tier
// to have a snappy, smooth experience – without having to wait for their
// free tier subscription to expire from the cache.
setPublicCacheControl(c.res, env.isProd ? '30s' : '10s')
} else {
// We don't want the gateway hitting our API too often, so cache active
// customer subscriptions for longer in production
setPublicCacheControl(c.res, env.isProd ? '30m' : '1m')
}
}
================================================
FILE: apps/api/src/api-v1/deployments/admin-get-deployment-by-identifier.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { schema } from '@/db'
import { acl } from '@/lib/acl'
import { aclAdmin } from '@/lib/acl-admin'
import { setPublicCacheControl } from '@/lib/cache-control'
import { tryGetDeploymentByIdentifier } from '@/lib/deployments/try-get-deployment-by-identifier'
import { env } from '@/lib/env'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { deploymentIdentifierAndPopulateSchema } from './schemas'
const route = createRoute({
description:
'Gets a deployment by its public identifier. This route is admin-only.',
tags: ['admin', 'deployments'],
operationId: 'adminGetDeploymentByIdentifier',
method: 'get',
path: 'admin/deployments/by-identifier',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: deploymentIdentifierAndPopulateSchema
},
responses: {
200: {
description: 'An admin deployment object',
content: {
'application/json': {
schema: schema.deploymentAdminSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1AdminGetDeploymentByIdentifier(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { deploymentIdentifier, populate = [] } = c.req.valid('query')
await aclAdmin(c)
const { project, ...deployment } = await tryGetDeploymentByIdentifier(c, {
deploymentIdentifier,
with: {
...Object.fromEntries(populate.map((field) => [field, true])),
project: true
}
})
assert(deployment, 404, `Deployment not found "${deploymentIdentifier}"`)
assert(
project,
404,
`Project not found for deployment "${deploymentIdentifier}"`
)
await acl(c, deployment, { label: 'Deployment' })
// TODO: ensure that the deployment's project is either public OR the
// consumer has access to it?
const hasPopulateProject = populate.includes('project')
if (env.isProd) {
// Published deployments are immutable, so cache them for longer in production
setPublicCacheControl(c.res, deployment.published ? '1h' : '5m')
} else {
setPublicCacheControl(c.res, '10s')
}
return c.json(
parseZodSchema(schema.deploymentAdminSelectSchema, {
...deployment,
...(hasPopulateProject ? { project } : {}),
_secret: project._secret
})
)
})
}
================================================
FILE: apps/api/src/api-v1/deployments/create-deployment.ts
================================================
import { resolveAgenticProjectConfig } from '@agentic/platform'
import { assert, parseZodSchema, sha256, slugify } from '@agentic/platform-core'
import {
isValidDeploymentIdentifier,
parseProjectIdentifier
} from '@agentic/platform-validators'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { normalizeDeploymentVersion } from '@/lib/deployments/normalize-deployment-version'
import { publishDeployment } from '@/lib/deployments/publish-deployment'
import { ensureAuthUser } from '@/lib/ensure-auth-user'
import { env } from '@/lib/env'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { uploadFileUrlToStorage } from '@/lib/storage'
import { createDeploymentQuerySchema } from './schemas'
const route = createRoute({
description: 'Creates a new deployment within a project.',
tags: ['deployments'],
operationId: 'createDeployment',
method: 'post',
path: 'deployments',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: createDeploymentQuerySchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.deploymentInsertSchema
}
}
}
},
responses: {
200: {
description: 'A deployment object',
content: {
'application/json': {
schema: schema.deploymentSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409
}
})
export function registerV1CreateDeployment(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const user = await ensureAuthUser(c)
const { publish } = c.req.valid('query')
const body = c.req.valid('json')
const teamMember = c.get('teamMember')
const logger = c.get('logger')
const inputNamespace = teamMember ? teamMember.teamSlug : user.username
const slug = body.slug ?? slugify(body.name) // TODO: don't duplicate this logic here
const inputProjectIdentifier = `@${inputNamespace}/${slug}`
const { projectIdentifier, projectNamespace, projectSlug } =
parseProjectIdentifier(inputProjectIdentifier)
let project = await db.query.projects.findFirst({
where: eq(schema.projects.identifier, projectIdentifier),
with: {
lastPublishedDeployment: true
}
})
if (!project) {
// Used for testing e2e fixtures in the development marketplace
const isPrivate = !(
(user.username === 'dev' && env.isDev) ||
user.username === 'agentic'
)
// Used to simplify recreating the demo `@agentic/search` project during
// development while we're frequently resetting the database
const secret =
projectIdentifier === '@dev/search' ||
projectIdentifier === '@agentic/search'
? env.AGENTIC_SEARCH_PROXY_SECRET
: await sha256()
// Upsert the project if it doesn't already exist
// The typecast is necessary here because we're not populating the
// lastPublishedDeployment, but that's fine because it's a new project
// so it will be empty anyway.
project = (
await db
.insert(schema.projects)
.values({
name: body.name,
identifier: projectIdentifier,
namespace: projectNamespace,
slug: projectSlug,
userId: user.id,
teamId: teamMember?.teamId,
private: isPrivate,
_secret: secret
})
.returning()
)[0] as typeof project
}
assert(project, 404, `Project not found "${projectIdentifier}"`)
await acl(c, project, { label: 'Project' })
const projectId = project.id
// TODO: investigate better short hash generation
const hash = (await sha256()).slice(0, 8)
const deploymentIdentifier = `${project.identifier}@${hash}`
assert(
isValidDeploymentIdentifier(deploymentIdentifier),
400,
`Invalid deployment identifier "${deploymentIdentifier}"`
)
let { version } = body
if (publish) {
assert(
version,
400,
`Deployment "version" field is required to publish deployment "${deploymentIdentifier}"`
)
}
if (version) {
version = normalizeDeploymentVersion({
deploymentIdentifier,
project,
version
})
}
// Validate project config, including:
// - pricing plans
// - origin adapter config
// - origin API base URL
// - origin adapter OpenAPI or MCP specs
// - tool definitions
const agenticProjectConfig = await resolveAgenticProjectConfig(body, {
label: `deployment "${deploymentIdentifier}"`,
logger,
uploadFileUrlToStorage: async (source) => {
return uploadFileUrlToStorage(source, {
prefix: projectIdentifier
})
}
})
// Create the deployment
let [deployment] = await db
.insert(schema.deployments)
.values({
iconUrl: user.image,
...agenticProjectConfig,
identifier: deploymentIdentifier,
hash,
userId: user.id,
teamId: teamMember?.teamId,
projectId,
version
})
.returning()
assert(
deployment,
500,
`Failed to create deployment "${deploymentIdentifier}"`
)
// Update the project
await db
.update(schema.projects)
.set({
lastDeploymentId: deployment.id
})
.where(eq(schema.projects.id, projectId))
if (publish) {
deployment = await publishDeployment(c, {
deployment,
version: deployment.version!
})
}
return c.json(parseZodSchema(schema.deploymentSelectSchema, deployment))
})
}
================================================
FILE: apps/api/src/api-v1/deployments/get-deployment-by-identifier.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { schema } from '@/db'
import { acl } from '@/lib/acl'
import { tryGetDeploymentByIdentifier } from '@/lib/deployments/try-get-deployment-by-identifier'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { deploymentIdentifierAndPopulateSchema } from './schemas'
const route = createRoute({
description:
'Gets a deployment by its identifier (eg, "@username/project-slug@latest").',
tags: ['deployments'],
operationId: 'getDeploymentByIdentifier',
method: 'get',
path: 'deployments/by-identifier',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: deploymentIdentifierAndPopulateSchema
},
responses: {
200: {
description: 'A deployment object',
content: {
'application/json': {
schema: schema.deploymentSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetDeploymentByIdentifier(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { deploymentIdentifier, populate = [] } = c.req.valid('query')
const deployment = await tryGetDeploymentByIdentifier(c, {
deploymentIdentifier,
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(deployment, 404, `Deployment not found "${deploymentIdentifier}"`)
await acl(c, deployment, { label: 'Deployment' })
return c.json(parseZodSchema(schema.deploymentSelectSchema, deployment))
})
}
================================================
FILE: apps/api/src/api-v1/deployments/get-deployment.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { schema } from '@/db'
import { acl } from '@/lib/acl'
import { getDeploymentById } from '@/lib/deployments/get-deployment-by-id'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { deploymentIdParamsSchema, populateDeploymentSchema } from './schemas'
const route = createRoute({
description: 'Gets a deployment by its ID',
tags: ['deployments'],
operationId: 'getDeployment',
method: 'get',
path: 'deployments/{deploymentId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: deploymentIdParamsSchema,
query: populateDeploymentSchema
},
responses: {
200: {
description: 'A deployment object',
content: {
'application/json': {
schema: schema.deploymentSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetDeployment(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { deploymentId } = c.req.valid('param')
const { populate = [] } = c.req.valid('query')
const deployment = await getDeploymentById({
deploymentId,
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(deployment, 404, `Deployment not found "${deploymentId}"`)
await acl(c, deployment, { label: 'Deployment' })
return c.json(parseZodSchema(schema.deploymentSelectSchema, deployment))
})
}
================================================
FILE: apps/api/src/api-v1/deployments/get-public-deployment-by-identifier.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import { schema } from '@/db'
import { aclPublicProject } from '@/lib/acl-public-project'
import { setPublicCacheControl } from '@/lib/cache-control'
import { tryGetDeploymentByIdentifier } from '@/lib/deployments/try-get-deployment-by-identifier'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { deploymentIdentifierAndPopulateSchema } from './schemas'
const route = createRoute({
description:
'Gets a public deployment by its identifier (eg, "@username/project-slug@latest").',
tags: ['deployments'],
operationId: 'getPublicDeploymentByIdentifier',
method: 'get',
path: 'deployments/public/by-identifier',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: deploymentIdentifierAndPopulateSchema
},
responses: {
200: {
description: 'A deployment object',
content: {
'application/json': {
schema: schema.deploymentSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetPublicDeploymentByIdentifier(
app: OpenAPIHono<DefaultHonoEnv>
) {
return app.openapi(route, async (c) => {
const { deploymentIdentifier, populate = [] } = c.req.valid('query')
const deployment = await tryGetDeploymentByIdentifier(c, {
deploymentIdentifier,
with: {
project: true,
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(deployment, 404, `Deployment not found "${deploymentIdentifier}"`)
assert(
deployment.project,
404,
`Project not found for deployment "${deploymentIdentifier}"`
)
aclPublicProject(deployment.project!)
if (deployment.published) {
// Note that published deployments should be immutable
setPublicCacheControl(c.res, '1m')
} else {
setPublicCacheControl(c.res, '10s')
}
return c.json(parseZodSchema(schema.deploymentSelectSchema, deployment))
})
}
================================================
FILE: apps/api/src/api-v1/deployments/list-deployments.ts
================================================
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { and, db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { ensureAuthUser } from '@/lib/ensure-auth-user'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { tryGetProjectByIdentifier } from '@/lib/projects/try-get-project-by-identifier'
import { paginationAndPopulateAndFilterDeploymentSchema } from './schemas'
const route = createRoute({
description:
'Lists deployments the user or team has access to, optionally filtering by project.',
tags: ['deployments'],
operationId: 'listDeployments',
method: 'get',
path: 'deployments',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: paginationAndPopulateAndFilterDeploymentSchema
},
responses: {
200: {
description: 'A list of deployments',
content: {
'application/json': {
schema: z.array(schema.deploymentSelectSchema)
}
}
},
...openapiErrorResponses
}
})
export function registerV1ListDeployments(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const {
offset = 0,
limit = 10,
sort = 'desc',
sortBy = 'createdAt',
populate = [],
projectIdentifier,
deploymentIdentifier
} = c.req.valid('query')
const userId = c.get('userId')
const teamMember = c.get('teamMember')
const user = await ensureAuthUser(c)
const isAdmin = user.role === 'admin'
let projectId: string | undefined
if (projectIdentifier) {
const project = await tryGetProjectByIdentifier(c, {
projectIdentifier
})
await acl(c, project, { label: 'Project' })
projectId = project.id
}
const deployments = await db.query.deployments.findMany({
where: and(
isAdmin
? undefined
: teamMember
? eq(schema.deployments.teamId, teamMember.teamId)
: eq(schema.deployments.userId, userId),
projectId ? eq(schema.deployments.projectId, projectId) : undefined,
deploymentIdentifier
? eq(schema.deployments.identifier, deploymentIdentifier)
: undefined
),
with: {
...Object.fromEntries(populate.map((field) => [field, true]))
},
orderBy: (deployments, { asc, desc }) => [
sort === 'desc' ? desc(deployments[sortBy]) : asc(deployments[sortBy])
],
offset,
limit
})
return c.json(
parseZodSchema(z.array(schema.deploymentSelectSchema), deployments)
)
})
}
================================================
FILE: apps/api/src/api-v1/deployments/publish-deployment.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { schema } from '@/db'
import { acl } from '@/lib/acl'
import { getDeploymentById } from '@/lib/deployments/get-deployment-by-id'
import { publishDeployment } from '@/lib/deployments/publish-deployment'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { deploymentIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Publishes a deployment.',
tags: ['deployments'],
operationId: 'publishDeployment',
method: 'post',
path: 'deployments/{deploymentId}/publish',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: deploymentIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.deploymentPublishSchema
}
}
}
},
responses: {
200: {
description: 'A deployment object',
content: {
'application/json': {
schema: schema.deploymentSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1PublishDeployment(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { deploymentId } = c.req.valid('param')
const { version } = c.req.valid('json')
// First ensure the deployment exists and the user has access to it
const deployment = await getDeploymentById({ deploymentId })
assert(deployment, 404, `Deployment not found "${deploymentId}"`)
await acl(c, deployment, { label: 'Deployment' })
const publishedDeployment = await publishDeployment(c, {
deployment,
version
})
return c.json(
parseZodSchema(schema.deploymentSelectSchema, publishedDeployment)
)
})
}
================================================
FILE: apps/api/src/api-v1/deployments/schemas.ts
================================================
import { z } from '@hono/zod-openapi'
import {
deploymentIdentifierSchema,
deploymentIdSchema,
deploymentRelationsSchema,
paginationSchema,
projectIdentifierSchema
} from '@/db'
export const deploymentIdParamsSchema = z.object({
deploymentId: deploymentIdSchema.openapi({
param: {
description: 'deployment ID',
name: 'deploymentId',
in: 'path'
}
})
})
export const createDeploymentQuerySchema = z.object({
publish: z
.union([z.literal('true'), z.literal('false')])
.default('false')
.transform((p) => p === 'true')
})
export const filterDeploymentSchema = z.object({
projectIdentifier: projectIdentifierSchema.optional(),
deploymentIdentifier: deploymentIdentifierSchema.optional()
})
export const populateDeploymentSchema = z.object({
populate: z
.union([deploymentRelationsSchema, z.array(deploymentRelationsSchema)])
.default([])
.transform((p) => (Array.isArray(p) ? p : [p]))
.optional()
})
export const deploymentIdentifierQuerySchema = z.object({
deploymentIdentifier: deploymentIdentifierSchema
})
export const deploymentIdentifierAndPopulateSchema = z.object({
...populateDeploymentSchema.shape,
...deploymentIdentifierQuerySchema.shape
})
export const paginationAndPopulateAndFilterDeploymentSchema = z.object({
...paginationSchema.shape,
...populateDeploymentSchema.shape,
...filterDeploymentSchema.shape
})
================================================
FILE: apps/api/src/api-v1/deployments/update-deployment.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { getDeploymentById } from '@/lib/deployments/get-deployment-by-id'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { deploymentIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Updates a deployment.',
tags: ['deployments'],
operationId: 'updateDeployment',
method: 'post',
path: 'deployments/{deploymentId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: deploymentIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.deploymentUpdateSchema
}
}
}
},
responses: {
200: {
description: 'A deployment object',
content: {
'application/json': {
schema: schema.deploymentSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1UpdateDeployment(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { deploymentId } = c.req.valid('param')
const body = c.req.valid('json')
// First ensure the deployment exists and the user has access to it
let deployment = await getDeploymentById({ deploymentId })
assert(deployment, 404, `Deployment not found "${deploymentId}"`)
await acl(c, deployment, { label: 'Deployment' })
// Update the deployment
;[deployment] = await db
.update(schema.deployments)
.set(body)
.where(eq(schema.deployments.id, deploymentId))
.returning()
assert(deployment, 500, `Failed to update deployment "${deploymentId}"`)
return c.json(parseZodSchema(schema.deploymentSelectSchema, deployment))
})
}
================================================
FILE: apps/api/src/api-v1/health-check.ts
================================================
import { createRoute, z } from '@hono/zod-openapi'
import type { HonoApp } from '@/lib/types'
const route = createRoute({
description: 'Health check endpoint.',
operationId: 'healthCheck',
method: 'get',
path: 'health',
responses: {
200: {
description: 'OK',
content: {
'application/json': {
schema: z.object({
status: z.string()
})
}
}
}
}
})
export function registerHealthCheck(app: HonoApp) {
return app.openapi(route, async (c) => {
return c.json({ status: 'ok' })
})
}
================================================
FILE: apps/api/src/api-v1/index.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import * as middleware from '@/lib/middleware'
import { defaultHook, registerOpenAPIErrorResponses } from '@/lib/openapi-utils'
import { registerV1GitHubOAuthCallback } from './auth/github-callback'
import { registerV1GitHubOAuthExchange } from './auth/github-exchange'
import { registerV1GitHubOAuthInitFlow } from './auth/github-init'
import { registerV1SignInWithPassword } from './auth/sign-in-with-password'
import { registerV1SignUpWithPassword } from './auth/sign-up-with-password'
import { registerV1AdminActivateConsumer } from './consumers/admin-activate-consumer'
import { registerV1AdminGetConsumerByApiKey } from './consumers/admin-get-consumer-by-api-key'
import { registerV1CreateBillingPortalSession } from './consumers/create-billing-portal-session'
import { registerV1CreateConsumer } from './consumers/create-consumer'
import { registerV1CreateConsumerBillingPortalSession } from './consumers/create-consumer-billing-portal-session'
import { registerV1CreateConsumerCheckoutSession } from './consumers/create-consumer-checkout-session'
import { registerV1GetConsumer } from './consumers/get-consumer'
import { registerV1GetConsumerByProjectIdentifier } from './consumers/get-consumer-by-project-identifier'
import { registerV1ListConsumers } from './consumers/list-consumers'
import { registerV1ListConsumersForProject } from './consumers/list-project-consumers'
import { registerV1RefreshConsumerApiKey } from './consumers/refresh-consumer-api-key'
import { registerV1UpdateConsumer } from './consumers/update-consumer'
import { registerV1AdminGetDeploymentByIdentifier } from './deployments/admin-get-deployment-by-identifier'
import { registerV1CreateDeployment } from './deployments/create-deployment'
import { registerV1GetDeployment } from './deployments/get-deployment'
import { registerV1GetDeploymentByIdentifier } from './deployments/get-deployment-by-identifier'
import { registerV1GetPublicDeploymentByIdentifier } from './deployments/get-public-deployment-by-identifier'
import { registerV1ListDeployments } from './deployments/list-deployments'
import { registerV1PublishDeployment } from './deployments/publish-deployment'
import { registerV1UpdateDeployment } from './deployments/update-deployment'
import { registerHealthCheck } from './health-check'
import { registerV1CreateProject } from './projects/create-project'
import { registerV1GetProject } from './projects/get-project'
import { registerV1GetProjectByIdentifier } from './projects/get-project-by-identifier'
import { registerV1GetPublicProject } from './projects/get-public-project'
import { registerV1GetPublicProjectByIdentifier } from './projects/get-public-project-by-identifier'
import { registerV1ListProjects } from './projects/list-projects'
import { registerV1ListPublicProjects } from './projects/list-public-projects'
import { registerV1UpdateProject } from './projects/update-project'
import { registerV1GetSignedStorageUploadUrl } from './storage/get-signed-storage-upload-url'
import { registerV1CreateTeam } from './teams/create-team'
import { registerV1DeleteTeam } from './teams/delete-team'
import { registerV1GetTeam } from './teams/get-team'
import { registerV1ListTeams } from './teams/list-teams'
import { registerV1CreateTeamMember } from './teams/members/create-team-member'
import { registerV1DeleteTeamMember } from './teams/members/delete-team-member'
import { registerV1UpdateTeamMember } from './teams/members/update-team-member'
import { registerV1UpdateTeam } from './teams/update-team'
import { registerV1GetUser } from './users/get-user'
import { registerV1UpdateUser } from './users/update-user'
import { registerV1StripeWebhook } from './webhooks/stripe-webhook'
// Note that the order of some of these routes is important because of
// wildcards, so be careful when updating them or adding new routes.
export const apiV1 = new OpenAPIHono<DefaultHonoEnv>({ defaultHook })
apiV1.openAPIRegistry.registerComponent('securitySchemes', 'Bearer', {
type: 'http',
scheme: 'bearer',
bearerFormat: 'JWT'
})
registerOpenAPIErrorResponses(apiV1)
// Public routes
const publicRouter = new OpenAPIHono<DefaultHonoEnv>({ defaultHook })
// Private, authenticated routes
const privateRouter = new OpenAPIHono<AuthenticatedHonoEnv>({ defaultHook })
registerHealthCheck(publicRouter)
// Auth
registerV1SignInWithPassword(publicRouter)
registerV1SignUpWithPassword(publicRouter)
registerV1GitHubOAuthExchange(publicRouter)
registerV1GitHubOAuthInitFlow(publicRouter)
registerV1GitHubOAuthCallback(publicRouter)
// Users
registerV1GetUser(privateRouter)
registerV1UpdateUser(privateRouter)
// Teams
registerV1CreateTeam(privateRouter)
registerV1ListTeams(privateRouter)
registerV1GetTeam(privateRouter)
registerV1DeleteTeam(privateRouter)
registerV1UpdateTeam(privateRouter)
// Team members
registerV1CreateTeamMember(privateRouter)
registerV1UpdateTeamMember(privateRouter)
registerV1DeleteTeamMember(privateRouter)
// Storage
registerV1GetSignedStorageUploadUrl(privateRouter)
// Public projects
registerV1ListPublicProjects(publicRouter)
registerV1GetPublicProjectByIdentifier(publicRouter) // must be before `registerV1GetPublicProject`
registerV1GetPublicProject(publicRouter)
// Private projects
registerV1CreateProject(privateRouter)
registerV1ListProjects(privateRouter)
registerV1GetProjectByIdentifier(privateRouter) // must be before `registerV1GetProject`
registerV1GetProject(privateRouter)
registerV1UpdateProject(privateRouter)
// Consumers
registerV1GetConsumerByProjectIdentifier(privateRouter) // must be before `registerV1GetConsumer`
registerV1CreateBillingPortalSession(privateRouter)
registerV1GetConsumer(privateRouter)
registerV1CreateConsumer(privateRouter)
registerV1CreateConsumerCheckoutSession(privateRouter)
registerV1CreateConsumerBillingPortalSession(privateRouter)
registerV1UpdateConsumer(privateRouter)
registerV1RefreshConsumerApiKey(privateRouter)
registerV1ListConsumers(privateRouter)
registerV1ListConsumersForProject(privateRouter)
// Deployments
registerV1GetPublicDeploymentByIdentifier(publicRouter)
registerV1GetDeploymentByIdentifier(privateRouter) // must be before `registerV1GetDeployment`
registerV1GetDeployment(privateRouter)
registerV1CreateDeployment(privateRouter)
registerV1UpdateDeployment(privateRouter)
registerV1ListDeployments(privateRouter)
registerV1PublishDeployment(privateRouter)
// Internal admin routes
registerV1AdminGetConsumerByApiKey(privateRouter)
registerV1AdminActivateConsumer(privateRouter)
registerV1AdminGetDeploymentByIdentifier(privateRouter)
// Webhook event handlers
registerV1StripeWebhook(publicRouter)
// Setup routes and middleware
apiV1.route('/', publicRouter)
apiV1.use(middleware.authenticate)
apiV1.use(middleware.team)
apiV1.use(middleware.me)
apiV1.route('/', privateRouter)
// API route types to be used by Hono's RPC client.
// Should include all routes except for internal and admin routes.
// NOTE: Removing for now because Hono's RPC client / types are clunky and slow.
// export type ApiRoutes =
// | ReturnType<typeof registerHealthCheck>
================================================
FILE: apps/api/src/api-v1/projects/create-project.ts
================================================
import { assert, parseZodSchema, sha256 } from '@agentic/platform-core'
import { parseProjectIdentifier } from '@agentic/platform-validators'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, schema } from '@/db'
import { ensureAuthUser } from '@/lib/ensure-auth-user'
import { env } from '@/lib/env'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponses
} from '@/lib/openapi-utils'
const route = createRoute({
description: 'Creates a new project.',
tags: ['projects'],
operationId: 'createProject',
method: 'post',
path: 'projects',
security: openapiAuthenticatedSecuritySchemas,
request: {
body: {
required: true,
content: {
'application/json': {
schema: schema.projectInsertSchema
}
}
}
},
responses: {
200: {
description: 'The created project',
content: {
'application/json': {
schema: schema.projectSelectSchema
}
}
},
...openapiErrorResponses
}
})
export function registerV1CreateProject(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const body = c.req.valid('json')
const user = await ensureAuthUser(c)
// if (body.teamId) {
// await aclTeamMember(c, { teamId: body.teamId })
// }
const teamMember = c.get('teamMember')
const namespace = teamMember ? teamMember.teamSlug : user.username
const identifier = `@${namespace}/${body.slug}`
const { projectIdentifier, projectNamespace, projectSlug } =
parseProjectIdentifier(identifier)
// Used for testing e2e fixtures in the development marketplace
const isPrivate = !(
(user.username === 'dev' && env.isDev) ||
user.username === 'agentic'
)
// Used to simplify recreating the demo `@agentic/search` project during
// development while we're frequently resetting the database
const secret =
projectIdentifier === '@dev/search' ||
projectIdentifier === '@agentic/search'
? env.AGENTIC_SEARCH_PROXY_SECRET
: await sha256()
const [project] = await db
.insert(schema.projects)
.values({
...body,
identifier: projectIdentifier,
namespace: projectNamespace,
slug: projectSlug,
teamId: teamMember?.teamId,
userId: user.id,
private: isPrivate,
_secret: secret
})
.returning()
assert(project, 500, `Failed to create project "${body.name}"`)
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})
}
================================================
FILE: apps/api/src/api-v1/projects/get-project-by-identifier.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { projectIdentifierAndPopulateSchema } from './schemas'
const route = createRoute({
description:
'Gets a project by its public identifier (eg, "@username/project-slug").',
tags: ['projects'],
operationId: 'getProjectByIdentifier',
method: 'get',
path: 'projects/by-identifier',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: projectIdentifierAndPopulateSchema
},
responses: {
200: {
description: 'A project',
content: {
'application/json': {
schema: schema.projectSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetProjectByIdentifier(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { projectIdentifier, populate = [] } = c.req.valid('query')
const project = await db.query.projects.findFirst({
where: eq(schema.projects.identifier, projectIdentifier),
with: {
lastPublishedDeployment: true,
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(project, 404, `Project not found "${projectIdentifier}"`)
await acl(c, project, { label: 'Project' })
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})
}
================================================
FILE: apps/api/src/api-v1/projects/get-project.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { populateProjectSchema, projectIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Gets a project by ID.',
tags: ['projects'],
operationId: 'getProject',
method: 'get',
path: 'projects/{projectId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: projectIdParamsSchema,
query: populateProjectSchema
},
responses: {
200: {
description: 'A project',
content: {
'application/json': {
schema: schema.projectSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetProject(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const { projectId } = c.req.valid('param')
const { populate = [] } = c.req.valid('query')
const project = await db.query.projects.findFirst({
where: eq(schema.projects.id, projectId),
with: {
lastPublishedDeployment: true,
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
assert(project, 404, `Project not found "${projectId}"`)
await acl(c, project, { label: 'Project' })
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})
}
================================================
FILE: apps/api/src/api-v1/projects/get-public-project-by-identifier.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
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 { setPublicCacheControl } from '@/lib/cache-control'
import { env } from '@/lib/env'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { projectIdentifierAndPopulateSchema } from './schemas'
const route = createRoute({
description:
'Gets a public project by its public identifier (eg, "@username/project-slug").',
tags: ['projects'],
operationId: 'getPublicProjectByIdentifier',
method: 'get',
path: 'projects/public/by-identifier',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: projectIdentifierAndPopulateSchema
},
responses: {
200: {
description: 'A project',
content: {
'application/json': {
schema: schema.projectSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetPublicProjectByIdentifier(
app: OpenAPIHono<DefaultHonoEnv>
) {
return app.openapi(route, async (c) => {
const { projectIdentifier, populate = [] } = c.req.valid('query')
const project = await db.query.projects.findFirst({
where: eq(schema.projects.identifier, projectIdentifier),
with: {
lastPublishedDeployment: true,
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
aclPublicProject(project, projectIdentifier)
setPublicCacheControl(c.res, env.isProd ? '1m' : '10s')
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})
}
================================================
FILE: apps/api/src/api-v1/projects/get-public-project.ts
================================================
import type { DefaultHonoEnv } from '@agentic/platform-hono'
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 { setPublicCacheControl } from '@/lib/cache-control'
import { env } from '@/lib/env'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { populateProjectSchema, projectIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Gets a public project by ID.',
tags: ['projects'],
operationId: 'getPublicProject',
method: 'get',
path: 'projects/public/{projectId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: projectIdParamsSchema,
query: populateProjectSchema
},
responses: {
200: {
description: 'A project',
content: {
'application/json': {
schema: schema.projectSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetPublicProject(app: OpenAPIHono<DefaultHonoEnv>) {
return app.openapi(route, async (c) => {
const { projectId } = c.req.valid('param')
const { populate = [] } = c.req.valid('query')
const project = await db.query.projects.findFirst({
where: eq(schema.projects.id, projectId),
with: {
lastPublishedDeployment: true,
...Object.fromEntries(populate.map((field) => [field, true]))
}
})
aclPublicProject(project, projectId)
setPublicCacheControl(c.res, env.isProd ? '1m' : '10s')
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})
}
================================================
FILE: apps/api/src/api-v1/projects/list-projects.ts
================================================
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { ensureAuthUser } from '@/lib/ensure-auth-user'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { paginationAndPopulateProjectSchema } from './schemas'
const route = createRoute({
description: 'Lists projects owned by the authenticated user or team.',
tags: ['projects'],
operationId: 'listProjects',
method: 'get',
path: 'projects',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: paginationAndPopulateProjectSchema
},
responses: {
200: {
description: 'A list of projects',
content: {
'application/json': {
schema: z.array(schema.projectSelectSchema)
}
}
},
...openapiErrorResponses
}
})
export function registerV1ListProjects(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const {
offset = 0,
limit = 10,
sort = 'desc',
sortBy = 'createdAt',
populate = []
} = c.req.valid('query')
const user = await ensureAuthUser(c)
const teamMember = c.get('teamMember')
const isAdmin = user.role === 'admin'
const projects = await db.query.projects.findMany({
where: isAdmin
? undefined
: teamMember
? eq(schema.projects.teamId, teamMember.teamId)
: eq(schema.projects.userId, user.id),
with: {
lastPublishedDeployment: true,
...Object.fromEntries(populate.map((field) => [field, true]))
},
orderBy: (projects, { asc, desc }) => [
sort === 'desc' ? desc(projects[sortBy]) : asc(projects[sortBy])
],
offset,
limit
})
return c.json(parseZodSchema(z.array(schema.projectSelectSchema), projects))
})
}
================================================
FILE: apps/api/src/api-v1/projects/list-public-projects.ts
================================================
import { env } from 'node:process'
import type { DefaultHonoEnv } from '@agentic/platform-hono'
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import {
and,
arrayContains,
db,
eq,
isNotNull,
isNull,
not,
or,
schema
} from '@/db'
import { setPublicCacheControl } from '@/lib/cache-control'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { listPublicProjectsQuerySchema } from './schemas'
const route = createRoute({
description:
'Lists projects that have been published publicly to the marketplace.',
tags: ['projects'],
operationId: 'listPublicProjects',
method: 'get',
path: 'projects/public',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: listPublicProjectsQuerySchema
},
responses: {
200: {
description: 'A list of projects',
content: {
'application/json': {
schema: z.array(schema.projectSelectSchema)
}
}
},
...openapiErrorResponses
}
})
export function registerV1ListPublicProjects(app: OpenAPIHono<DefaultHonoEnv>) {
return app.openapi(route, async (c) => {
const {
offset = 0,
limit = 10,
sort = 'desc',
sortBy = 'createdAt',
populate = [],
tag,
notTag
} = c.req.valid('query')
const projects = await db.query.projects.findMany({
// List projects that are not private and have at least one published deployment
// And optionally match a given tag
where: and(
eq(schema.projects.private, false),
isNotNull(schema.projects.lastPublishedDeploymentId),
tag ? arrayContains(schema.projects.tags, [tag]) : undefined,
notTag
? or(
not(arrayContains(schema.projects.tags, [notTag])),
isNull(schema.projects.tags)
)
: undefined
),
with: {
lastPublishedDeployment: true,
...Object.fromEntries(populate.map((field) => [field, true]))
},
orderBy: (projects, { asc, desc }) => [
sort === 'desc' ? desc(projects[sortBy]) : asc(projects[sortBy])
],
offset,
limit
})
setPublicCacheControl(c.res, env.isProd ? '1m' : '10s')
return c.json(parseZodSchema(z.array(schema.projectSelectSchema), projects))
})
}
================================================
FILE: apps/api/src/api-v1/projects/schemas.ts
================================================
// import { isValidNamespace } from '@agentic/platform-validators'
import { z } from '@hono/zod-openapi'
import {
paginationSchema,
projectIdentifierSchema,
projectIdSchema,
projectRelationsSchema
} from '@/db'
export const projectIdParamsSchema = z.object({
projectId: projectIdSchema.openapi({
param: {
description: 'Project ID',
name: 'projectId',
in: 'path'
}
})
})
// export const namespaceParamsSchema = z.object({
// namespace: z
// .string()
// .refine((namespace) => isValidNamespace(namespace), {
// message: 'Invalid namespace'
// })
// .openapi({
// param: {
// description: 'Namespace',
// name: 'namespace',
// in: 'path'
// }
// })
// })
export const projectIdentifierQuerySchema = z.object({
projectIdentifier: projectIdentifierSchema
})
export const filterPublicProjectSchema = z.object({
tag: z.string().optional(),
notTag: z.string().optional()
})
export const populateProjectSchema = z.object({
populate: z
.union([projectRelationsSchema, z.array(projectRelationsSchema)])
.default([])
.transform((p) => (Array.isArray(p) ? p : [p]))
.optional()
})
export const projectIdentifierAndPopulateSchema = z.object({
...populateProjectSchema.shape,
...projectIdentifierQuerySchema.shape
})
export const paginationAndPopulateProjectSchema = z.object({
...paginationSchema.shape,
...populateProjectSchema.shape
})
export const listPublicProjectsQuerySchema = z.object({
...paginationSchema.shape,
...populateProjectSchema.shape,
...filterPublicProjectSchema.shape
})
================================================
FILE: apps/api/src/api-v1/projects/update-project.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { projectIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Updates a project.',
tags: ['projects'],
operationId: 'updateProject',
method: 'post',
path: 'projects/{projectId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: projectIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.projectUpdateSchema
}
}
}
},
responses: {
200: {
description: 'The updated project',
content: {
'application/json': {
schema: schema.projectSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1UpdateProject(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { projectId } = c.req.valid('param')
const body = c.req.valid('json')
// First ensure the project exists and the user has access to it
let project = await db.query.projects.findFirst({
where: eq(schema.projects.id, projectId)
})
assert(project, 404, `Project not found "${projectId}"`)
await acl(c, project, { label: 'Project' })
// Update the project
;[project] = await db
.update(schema.projects)
.set(body)
.where(eq(schema.projects.id, projectId))
.returning()
assert(project, 500, `Failed to update project "${projectId}"`)
return c.json(parseZodSchema(schema.projectSelectSchema, project))
})
}
================================================
FILE: apps/api/src/api-v1/storage/get-signed-storage-upload-url.ts
================================================
import { assert } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, projectIdentifierSchema, schema } from '@/db'
import { acl } from '@/lib/acl'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import {
getStorageObjectPublicUrl,
getStorageSignedUploadUrl
} from '@/lib/storage'
export const getSignedUploadUrlQuerySchema = z.object({
projectIdentifier: projectIdentifierSchema,
/**
* Should be a hash of the contents of the file to upload with the correct
* file extension.
*
* @example `9f86d081884c7d659a2feaa0c55ad015a.png`
*/
key: z
.string()
.nonempty()
.describe(
'Should be a hash of the contents of the file to upload with the correct file extension (eg, "9f86d081884c7d659a2feaa0c55ad015a.png").'
)
})
const route = createRoute({
description:
"Gets a signed URL for uploading a file to Agentic's blob storage. Files are namespaced to a given project and are identified by a key that should be a hash of the file's contents, with the correct file extension.",
tags: ['storage'],
operationId: 'getSignedStorageUploadUrl',
method: 'get',
path: 'storage/signed-upload-url',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: getSignedUploadUrlQuerySchema
},
responses: {
200: {
description: 'A signed upload URL',
content: {
'application/json': {
schema: z.object({
signedUploadUrl: z
.string()
.url()
.describe('The signed upload URL.'),
publicObjectUrl: z
.string()
.url()
.describe('The public URL the object will have once uploaded.')
})
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetSignedStorageUploadUrl(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { projectIdentifier, key } = c.req.valid('query')
const project = await db.query.projects.findFirst({
where: eq(schema.projects.identifier, projectIdentifier)
})
assert(project, 404, `Project not found "${projectIdentifier}"`)
await acl(c, project, { label: 'Project' })
const compoundKey = `${project.identifier}/${key}`
const signedUploadUrl = await getStorageSignedUploadUrl(compoundKey)
const publicObjectUrl = getStorageObjectPublicUrl(compoundKey)
return c.json({ signedUploadUrl, publicObjectUrl })
})
}
================================================
FILE: apps/api/src/api-v1/teams/create-team.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, schema } from '@/db'
import { ensureAuthUser } from '@/lib/ensure-auth-user'
import { ensureUniqueNamespace } from '@/lib/ensure-unique-namespace'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponses
} from '@/lib/openapi-utils'
const route = createRoute({
description: 'Creates a new team.',
tags: ['teams'],
operationId: 'createTeam',
method: 'post',
path: 'teams',
security: openapiAuthenticatedSecuritySchemas,
request: {
body: {
required: true,
content: {
'application/json': {
schema: schema.teamInsertSchema
}
}
}
},
responses: {
200: {
description: 'The created team',
content: {
'application/json': {
schema: schema.teamSelectSchema
}
}
},
...openapiErrorResponses
}
})
export function registerV1CreateTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const user = await ensureAuthUser(c)
const body = c.req.valid('json')
await ensureUniqueNamespace(body.slug, { label: 'Team slug' })
return db.transaction(async (tx) => {
const [team] = await tx
.insert(schema.teams)
.values({
...body,
ownerId: user.id
})
.returning()
assert(team, 500, `Failed to create team "${body.slug}"`)
const [teamMember] = await tx
.insert(schema.teamMembers)
.values({
userId: user.id,
teamId: team.id,
teamSlug: team.slug,
role: 'admin',
confirmed: true
})
.returning()
assert(
teamMember,
500,
`Failed to create team member owner for team "${body.slug}"`
)
return c.json(parseZodSchema(schema.teamSelectSchema, team))
})
})
}
================================================
FILE: apps/api/src/api-v1/teams/delete-team.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { aclTeamAdmin } from '@/lib/acl-team-admin'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { teamIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Deletes a team by ID.',
tags: ['teams'],
operationId: 'deleteTeam',
method: 'delete',
path: 'teams/{teamId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: teamIdParamsSchema
},
responses: {
200: {
description: 'The team that was deleted',
content: {
'application/json': {
schema: schema.teamSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1DeleteTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const { teamId } = c.req.valid('param')
await aclTeamAdmin(c, { teamId })
const [team] = await db
.delete(schema.teams)
.where(eq(schema.teams.id, teamId))
.returning()
assert(team, 404, `Team not found "${teamId}"`)
return c.json(parseZodSchema(schema.teamSelectSchema, team))
})
}
================================================
FILE: apps/api/src/api-v1/teams/get-team.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { aclTeamMember } from '@/lib/acl-team-member'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { teamIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Gets a team by ID.',
tags: ['teams'],
operationId: 'getTeam',
method: 'get',
path: 'teams/{teamId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: teamIdParamsSchema
},
responses: {
200: {
description: 'A team object',
content: {
'application/json': {
schema: schema.teamSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const { teamId } = c.req.valid('param')
await aclTeamMember(c, { teamId })
const team = await db.query.teams.findFirst({
where: eq(schema.teams.id, teamId)
})
assert(team, 404, `Team not found "${teamId}"`)
return c.json(parseZodSchema(schema.teamSelectSchema, team))
})
}
================================================
FILE: apps/api/src/api-v1/teams/list-teams.ts
================================================
import { parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, paginationSchema, schema } from '@/db'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponses
} from '@/lib/openapi-utils'
const route = createRoute({
description: 'Lists all teams the authenticated user belongs to.',
tags: ['teams'],
operationId: 'listTeams',
method: 'get',
path: 'teams',
security: openapiAuthenticatedSecuritySchemas,
request: {
query: paginationSchema
},
responses: {
200: {
description: 'A list of teams',
content: {
'application/json': {
schema: z.array(schema.teamSelectSchema)
}
}
},
...openapiErrorResponses
}
})
export function registerV1ListTeams(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const {
offset = 0,
limit = 10,
sort = 'desc',
sortBy = 'createdAt'
} = c.req.valid('query')
const userId = c.get('userId')
// schema.teamMembers._.columns
const teamMembers = await db.query.teamMembers.findMany({
where: eq(schema.teamMembers.userId, userId),
with: {
team: true
},
orderBy: (teamMembers, { asc, desc }) => [
sort === 'desc' ? desc(teamMembers[sortBy]) : asc(teamMembers[sortBy])
],
offset,
limit
})
return c.json(parseZodSchema(z.array(schema.teamSelectSchema), teamMembers))
})
}
================================================
FILE: apps/api/src/api-v1/teams/members/create-team-member.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { and, db, eq, schema } from '@/db'
import { aclTeamAdmin } from '@/lib/acl-team-admin'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponse409,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { teamIdParamsSchema } from '../schemas'
const route = createRoute({
description: 'Creates a new team member.',
tags: ['teams'],
operationId: 'createTeamMember',
method: 'post',
path: 'teams/{teamId}/members',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: teamIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.teamMemberInsertSchema
}
}
}
},
responses: {
200: {
description: 'The created team member',
content: {
'application/json': {
schema: schema.teamMemberSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404,
...openapiErrorResponse409
}
})
export function registerV1CreateTeamMember(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { teamId } = c.req.valid('param')
const body = c.req.valid('json')
await aclTeamAdmin(c, { teamId })
const team = await db.query.teams.findFirst({
where: eq(schema.teams.id, teamId)
})
assert(team, 404, `Team not found "${teamId}"`)
const existingTeamMember = await db.query.teamMembers.findFirst({
where: and(
eq(schema.teamMembers.teamId, teamId),
eq(schema.teamMembers.userId, body.userId)
)
})
assert(
existingTeamMember,
409,
`User "${body.userId}" is already a member of team "${teamId}"`
)
const [teamMember] = await db
.insert(schema.teamMembers)
.values({
...body,
teamId,
teamSlug: team.slug
})
.returning()
assert(
teamMember,
500,
`Failed to create team member "${body.userId}"for team "${teamId}"`
)
// TODO: send team invite email
return c.json(parseZodSchema(schema.teamMemberSelectSchema, teamMember))
})
}
================================================
FILE: apps/api/src/api-v1/teams/members/delete-team-member.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { and, db, eq, schema } from '@/db'
import { aclTeamAdmin } from '@/lib/acl-team-admin'
import { aclTeamMember } from '@/lib/acl-team-member'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { teamIdTeamMemberUserIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Deletes a team member.',
tags: ['teams'],
operationId: 'deleteTeamMember',
method: 'delete',
path: 'teams/{teamId}/members/{userId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: teamIdTeamMemberUserIdParamsSchema
},
responses: {
200: {
description: 'The deleted team member',
content: {
'application/json': {
schema: schema.teamMemberSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1DeleteTeamMember(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { teamId, userId } = c.req.valid('param')
await aclTeamAdmin(c, { teamId })
await aclTeamMember(c, { teamId, userId })
const [teamMember] = await db
.delete(schema.teamMembers)
.where(
and(
eq(schema.teamMembers.teamId, teamId),
eq(schema.teamMembers.userId, userId)
)
)
.returning()
assert(
teamMember,
400,
`Failed to update team member "${userId}" for team "${teamId}"`
)
return c.json(parseZodSchema(schema.teamMemberSelectSchema, teamMember))
})
}
================================================
FILE: apps/api/src/api-v1/teams/members/schemas.ts
================================================
import { z } from '@hono/zod-openapi'
import { userIdSchema } from '@/db'
import { teamIdParamsSchema } from '../schemas'
export const teamIdTeamMemberUserIdParamsSchema = z.object({
...teamIdParamsSchema.shape,
userId: userIdSchema.openapi({
param: {
description: 'Team member user ID',
name: 'userId',
in: 'path'
}
})
})
================================================
FILE: apps/api/src/api-v1/teams/members/update-team-member.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { and, db, eq, schema } from '@/db'
import { aclTeamAdmin } from '@/lib/acl-team-admin'
import { aclTeamMember } from '@/lib/acl-team-member'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { teamIdTeamMemberUserIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Updates a team member.',
tags: ['teams'],
operationId: 'updateTeamMember',
method: 'post',
path: 'teams/{teamId}/members/{userId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: teamIdTeamMemberUserIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.teamMemberUpdateSchema
}
}
}
},
responses: {
200: {
description: 'The updated team member',
content: {
'application/json': {
schema: schema.teamMemberSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1UpdateTeamMember(
app: OpenAPIHono<AuthenticatedHonoEnv>
) {
return app.openapi(route, async (c) => {
const { teamId, userId } = c.req.valid('param')
const body = c.req.valid('json')
await aclTeamAdmin(c, { teamId })
await aclTeamMember(c, { teamId, userId })
const [teamMember] = await db
.update(schema.teamMembers)
.set(body)
.where(
and(
eq(schema.teamMembers.teamId, teamId),
eq(schema.teamMembers.userId, userId)
)
)
.returning()
assert(
teamMember,
400,
`Failed to update team member "${userId}" for team "${teamId}"`
)
return c.json(parseZodSchema(schema.teamMemberSelectSchema, teamMember))
})
}
================================================
FILE: apps/api/src/api-v1/teams/schemas.ts
================================================
import { z } from '@hono/zod-openapi'
import { teamIdSchema } from '@/db'
export const teamIdParamsSchema = z.object({
teamId: teamIdSchema.openapi({
param: {
description: 'Team ID',
name: 'teamId',
in: 'path'
}
})
})
================================================
FILE: apps/api/src/api-v1/teams/update-team.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { aclTeamAdmin } from '@/lib/acl-team-admin'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { teamIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Updates a team.',
tags: ['teams'],
operationId: 'updateTeam',
method: 'post',
path: 'teams/{teamId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: teamIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.teamUpdateSchema
}
}
}
},
responses: {
200: {
description: 'The updated team',
content: {
'application/json': {
schema: schema.teamSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1UpdateTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const { teamId } = c.req.valid('param')
const body = c.req.valid('json')
await aclTeamAdmin(c, { teamId })
const [team] = await db
.update(schema.teams)
.set(body)
.where(eq(schema.teams.id, teamId))
.returning()
assert(team, 404, `Team not found "${teamId}"`)
return c.json(parseZodSchema(schema.teamSelectSchema, team))
})
}
================================================
FILE: apps/api/src/api-v1/users/get-user.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import { setPublicCacheControl } from '@/lib/cache-control'
import { env } from '@/lib/env'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { userIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Gets a user by ID.',
tags: ['users'],
operationId: 'getUser',
method: 'get',
path: 'users/{userId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: userIdParamsSchema
},
responses: {
200: {
description: 'A user object',
content: {
'application/json': {
schema: schema.userSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1GetUser(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const { userId } = c.req.valid('param')
await acl(c, { userId }, { label: 'User' })
const user = await db.query.users.findFirst({
where: eq(schema.users.id, userId)
})
assert(user, 404, `User not found "${userId}"`)
setPublicCacheControl(c.res, env.isProd ? '30s' : '10s')
return c.json(parseZodSchema(schema.userSelectSchema, user))
})
}
================================================
FILE: apps/api/src/api-v1/users/schemas.ts
================================================
import { z } from '@hono/zod-openapi'
import { userIdSchema } from '@/db'
export const userIdParamsSchema = z.object({
userId: userIdSchema.openapi({
param: {
description: 'User ID',
name: 'userId',
in: 'path'
}
})
})
================================================
FILE: apps/api/src/api-v1/users/update-user.ts
================================================
import { assert, parseZodSchema } from '@agentic/platform-core'
import { createRoute, type OpenAPIHono } from '@hono/zod-openapi'
import type { AuthenticatedHonoEnv } from '@/lib/types'
import { db, eq, schema } from '@/db'
import { acl } from '@/lib/acl'
import {
openapiAuthenticatedSecuritySchemas,
openapiErrorResponse404,
openapiErrorResponses
} from '@/lib/openapi-utils'
import { userIdParamsSchema } from './schemas'
const route = createRoute({
description: 'Updates a user by ID.',
tags: ['users'],
operationId: 'updateUser',
method: 'post',
path: 'users/{userId}',
security: openapiAuthenticatedSecuritySchemas,
request: {
params: userIdParamsSchema,
body: {
required: true,
content: {
'application/json': {
schema: schema.userUpdateSchema
}
}
}
},
responses: {
200: {
description: 'A user object',
content: {
'application/json': {
schema: schema.userSelectSchema
}
}
},
...openapiErrorResponses,
...openapiErrorResponse404
}
})
export function registerV1UpdateUser(app: OpenAPIHono<AuthenticatedHonoEnv>) {
return app.openapi(route, async (c) => {
const { userId } = c.req.valid('param')
await acl(c, { userId }, { label: 'User' })
const body = c.req.valid('json')
const [user] = await db
.update(schema.users)
.set(body)
.where(eq(schema.users.id, userId))
.returning()
assert(user, 404, `User not found "${userId}"`)
return c.json(parseZodSchema(schema.userSelectSchema, user))
})
}
================================================
FILE: apps/api/src/api-v1/webhooks/stripe-webhook.ts
================================================
import type Stripe from 'stripe'
import { assert, HttpError } from '@agentic/platform-core'
import type { HonoApp } from '@/lib/types'
import {
and,
db,
eq,
getStripePriceIdForPricingPlanLineItem,
type RawConsumer,
type RawDeployment,
type RawProject,
schema
} from '@/db'
import { setConsumerStripeSubscriptionStatus } from '@/lib/consumers/utils'
import { env } from '@/lib/env'
import { stripe } from '@/lib/external/stripe'
const relevantStripeEvents = new Set<Stripe.Event.Type>([
// Stripe Checkout Sessions
'checkout.session.completed',
// TODO: Handle these events
// 'checkout.session.expired',
// 'checkout.session.async_payment_failed',
// 'checkout.session.async_payment_succeeded',
// Stripe Subscriptions
'customer.subscription.created',
// TODO: Test these events which should be able to all use the same code path
'customer.subscription.updated',
'customer.subscription.paused',
'customer.subscription.resumed',
'customer.subscription.deleted'
// TODO: Handle these events
// 'customer.subscription.pending_update_applied',
// 'customer.subscription.pending_update_expired',
// 'customer.subscription.trial_will_end'
])
export function registerV1StripeWebhook(app: HonoApp) {
return app.post('webhooks/stripe', async (ctx) => {
const logger = ctx.get('logger')
const body = await ctx.req.text()
const signature = ctx.req.header('Stripe-Signature')
assert(
signature,
400,
'error invalid stripe webhook event: missing signature'
)
let event: Stripe.Event
try {
event = stripe.webhooks.constructEvent(
body,
signature,
env.STRIPE_WEBHOOK_SECRET
)
} catch (err) {
throw new HttpError({
message: 'error invalid stripe webhook event: signature mismatch',
cause: err,
statusCode: 400
})
}
// Shouldn't ever happen because the signatures _should_ be different, but
// it's a useful sanity check just in case.
assert(
event.livemode === env.isStripeLive,
400,
'error invalid stripe webhook event: livemode mismatch'
)
if (!relevantStripeEvents.has(event.type)) {
return ctx.json({ status: 'ok' })
}
logger.info('stripe webhook', event.type, event.data?.object)
try {
switch (event.type) {
case 'checkout.session.completed': {
const checkoutSession = event.data.object
const { subscription: subscriptionOrId } = checkoutSession
assert(subscriptionOrId, 400, 'missing subscription')
const { consumerId, plan, userId, projectId, deploymentId } =
checkoutSession.metadata ?? {}
assert(consumerId, 400, 'missing metadata.consumerId')
assert(plan !== undefined, 400, 'missing metadata.plan')
const subscriptionId =
typeof subscriptionOrId === 'string'
? subscriptionOrId
: subscriptionOrId.id
const [subscription, consumer, deployment] = await Promise.all([
// Make sure we have the full subscription instead of just the id
typeof subscriptionOrId === 'string'
? stripe.subscriptions.retrieve(subscriptionId)
: subscriptionOrId,
db.query.consumers.findFirst({
where: and(eq(schema.consumers.id, consumerId)),
with: { project: true }
}),
deploymentId
? db.query.deployments.findFirst({
where: and(eq(schema.deployments.id, deploymentId))
})
: undefined
])
assert(
subscription,
404,
`stripe subscription "${subscriptionId}" not found`
)
assert(consumer, 404, `consumer "${consumerId}" not found`)
if (deploymentId) {
assert(deployment, 404, `deployment "${deploymentId}" not found`)
}
const { project } = consumer
assert(project, 404, `project "${projectId}" not found`)
// TODO: Treat this as a transaction...
await Promise.all([
// Ensure the underlying Stripe Subscription has all the necessary
// metadata
stripe.subscriptions.update(subscription.id, {
metadata: {
...subscription.metadata,
...checkoutSession.metadata
}
}),
// Sync our Consumer's state with the Stripe Subscription's state
syncConsumerWithStripeSubscription({
consumer,
deployment,
project,
subscription,
plan,
userId,
projectId,
deploymentId
})
])
break
}
case 'customer.subscription.created': {
// Stripe Checkout-created subscriptions won't have the metadata
// necessary to identify the consumer, so ignore this event for now.
const subscription = event.data.object
const { consumerId, userId, projectId, deploymentId, plan } =
subscription.metadata
// TODO: This should be coming from Stripe Checkout, and a subsequent
// webhook event should record the subscription and initialize the
// consumer, but it feels wrong to me to just be logging and ignore
// this event. In the future, if we support both Stripe Checkout and
// non-Stripe Checkout-based subscription flows, then this codepath
// should act very similarly to `customer.subscription.updated`.
if (
!consumerId ||
!userId ||
!projectId ||
!deploymentId ||
plan === undefined
) {
break
}
// Intentional fallthrough
}
case 'customer.subscription.paused':
case 'customer.subscription.resumed':
case 'customer.subscription.deleted':
case 'customer.subscription.updated': {
// https://docs.stripe.com/billing/subscriptions/overview#subscription-statuses
const subscription = event.data.object
const { consumerId, userId, projectId, deploymentId, plan } =
subscription.metadata
assert(consumerId, 'missing metadata.consumerId')
assert(plan !== undefined, 400, 'missing metadata.plan')
logger.info('stripe webhook', event.type, {
consumerId,
userId,
projectId,
deploymentId,
plan,
status: subscription.status
})
const [consumer, deployment] = await Promise.all([
db.query.consumers.findFirst({
where: eq(schema.consumers.id, consumerId),
with: { project: true }
}),
deploymentId
? db.query.deployments.findFirst({
where: and(eq(schema.deployments.id, deploymentId))
})
: undefined
])
assert(consumer, 404, `consumer "${consumerId}" not found`)
if (deploymentId) {
assert(deployment, 404, `deployment "${deploymentId}" not found`)
}
const { project } = consumer
// Sync our Consumer's state with the Stripe Subscription's state
await syncConsumerWithStripeSubscription({
consumer,
deployment,
project,
subscription,
plan,
userId,
projectId,
deploymentId
})
break
}
default:
logger.warn(
`unexpected unhandled event "${event.id}" type "${event.type}"`,
event.data?.object
)
}
} catch (err: any) {
throw new HttpError({
message: `error processing stripe webhook event "${event.id}" type "${event.type}": ${err.message}`,
cause: err.cause ?? err,
statusCode: err.statusCode ?? err
})
}
return ctx.json({ status: 'ok' })
})
}
/**
* Sync our database Consumer's state with the Stripe Subscription's state.
*
* For anything billing-related, Stripe's resources is always considered the
* single source of truth. Our database's `Consumer` state should always be
* derived from the corresponding Stripe subscription.
*/
export async function syncConsumerWithStripeSubscription({
consumer,
project,
deployment,
subscription,
plan,
userId,
projectId,
deploymentId
}: {
consumer: RawConsumer
project: RawProject
deployment?: RawDeployment
subscription: Stripe.Subscription
plan: string | null | undefined
userId?: string
projectId?: string
deploymentId?: string
}): Promise<RawConsumer> {
// These extra checks aren't really necessary, but they're nice sanity checks
// to ensure metadata consistency with our consumer
assert(
consumer.userId === userId,
400,
`consumer "${consumer.id}" user "${consumer.userId}" does not match stripe checkout metadata user "${userId}"`
)
assert(
consumer.projectId === projectId,
400,
`consumer "${consumer.id}" project "${consumer.projectId}" does not match stripe checkout metadata project "${projectId}"`
)
consumer._stripeSubscriptionId = subscription.id
consumer.stripeStatus = subscription.status
consumer.plan = plan as any // TODO: types
setConsumerStripeSubscriptionStatus(consumer)
if (deploymentId) {
consumer.deploymentId = deploymentId
}
const pricingPlan = plan
? deployment?.pricingPlans.find((p) => p.slug === plan)
: undefined
if (pricingPlan) {
for (const lineItem of pricingPlan.lineItems) {
const stripeSubscriptionItemId =
consumer._stripeSubscriptionItemIdMap[lineItem.slug]
const stripePriceId: string | undefined = stripeSubscriptionItemId
? undefined
: await getStripePriceIdForPricingPlanLineItem({
pricingPlan,
pricingPlanLineItem: lineItem,
project
})
const stripeSubscriptionItem: Stripe.SubscriptionItem | undefined =
subscription.items.data.find((item) =>
stripeSubscriptionItemId
? item.id === stripeSubscriptionItemId
: item.price.id === stripePriceId
)
assert(
stripeSubscriptionItem,
500,
`Error post-processing stripe subscription "${subscription.id}" for line-item "${lineItem.slug}" on plan "${pricingPlan.slug}"`
)
consumer._stripeSubscriptionItemIdMap[lineItem.slug] =
stripeSubscriptionItem.id
assert(
consumer._stripeSubscriptionItemIdMap[lineItem.slug],
500,
`Error post-processing stripe subscription "${subscription.id}" for line-item "${lineItem.slug}" on plan "${pricingPlan.slug}"`
)
}
}
const [updatedConsumer] = await db
.update(schema.consumers)
.set(consumer)
.where(eq(schema.consumers.id, consumer.id))
.returning()
assert(updatedConsumer, 500, `consumer "${consumer.id}" not found`)
// TODO: invoke provider webhooks
// event.data.customer = consumer.getPublicDocument()
// await invokeWebhooks(consumer.project, event)
return updatedConsumer
}
================================================
FILE: apps/api/src/db/index.ts
================================================
import { drizzle } from '@fisch0920/drizzle-orm/postgres-js'
import postgres from 'postgres'
import { env } from '@/lib/env'
import * as schema from './schema'
type PostgresClient = ReturnType<typeof postgres>
let _postgresClient: PostgresClient | undefined
const postgresClient =
_postgresClient ?? (_postgresClient = postgres(env.DATABASE_URL))
export const db = drizzle({ client: postgresClient, schema })
export * as schema from './schema'
export {
createIdForModel,
idMaxLength,
idPrefixMap,
type ModelType
} from './schema/common'
export * from './schemas'
export type * from './types'
export * from './utils'
export {
and,
arrayContained,
arrayContains,
arrayOverlaps,
asc,
between,
desc,
eq,
exists,
gt,
gte,
ilike,
inArray,
isNotNull,
isNull,
like,
lt,
lte,
ne,
not,
notBetween,
notExists,
notIlike,
notInArray,
notLike,
or
} from '@fisch0920/drizzle-orm'
================================================
FILE: apps/api/src/db/schema/account.ts
================================================
import { relations } from '@fisch0920/drizzle-orm'
import { index, pgTable, text, timestamp } from '@fisch0920/drizzle-orm/pg-core'
import { userIdSchema } from '../schemas'
import {
accountPrimaryId,
authProviderTypeEnum,
createSelectSchema,
timestamps,
userId
} from './common'
import { users } from './user'
export const accounts = pgTable(
'accounts',
{
...accountPrimaryId,
...timestamps,
userId: userId()
.notNull()
.references(() => users.id, { onDelete: 'cascade' }),
provider: authProviderTypeEnum().notNull(),
/** Provider-specific account ID (or email in the case of `password` provider) */
accountId: text().notNull(),
password: text(),
/** Provider-specific username */
accountUsername: text(),
/** Standard OAuth2 access token */
accessToken: text(),
/** Standard OAuth2 refresh token */
refreshToken: text(),
/** Standard OAuth2 access token expires at */
accessTokenExpiresAt: timestamp(),
/** Standard OAuth2 refresh token expires at */
refreshTokenExpiresAt: timestamp(),
/** OAuth scope(s) */
scope: text()
},
(table) => [
index('account_provider_idx').on(table.provider),
index('account_userId_idx').on(table.userId),
index('account_createdAt_idx').on(table.createdAt),
index('account_updatedAt_idx').on(table.updatedAt),
index('account_deletedAt_idx').on(table.deletedAt)
]
)
export const accountsRelations = relations(accounts, ({ one }) => ({
user: one(users, {
fields: [accounts.userId],
references: [users.id]
})
}))
export const accountSelectSchema = createSelectSchema(accounts, {
userId: userIdSchema
})
.omit({
password: true,
accessToken: true,
refreshToken: true,
accessTokenExpiresAt: true,
refreshTokenExpiresAt: true
})
.strip()
.openapi('Account')
================================================
FILE: apps/api/src/db/schema/auth-data.ts
================================================
import { jsonb, pgTable, text, timestamp } from '@fisch0920/drizzle-orm/pg-core'
import { timestamps } from './common'
// Simple key-value store of JSON data for OpenAuth-related state.
// TODO: remove this and/or replace this with non-openauth version
export const authData = pgTable('auth_data', {
// Example ID keys:
// "oauth:refresh\u001fuser:f99d3004946f9abb\u001f2cae301e-3fdc-40c4-8cda-83b25a616d06"
// "signing:key\u001ff001a516-838d-4c88-aa9e-719d8fc9d5a3"
// "email\u001ft@t.com\u001fpassword"
// "encryption:key\u001f14d3c324-f9c7-4867-81a9-b0b77b0db0be"
id: text().primaryKey(),
...timestamps,
value: jsonb().$type<Record<string, any>>().notNull(),
expiry: timestamp()
})
================================================
FILE: apps/api/src/db/schema/common.test.ts
================================================
import { expect, test } from 'vitest'
import { getIdSchemaForModelType } from '../schemas'
import {
createIdForModel,
idMaxLength,
idPrefixMap,
type ModelType
} from './common'
for (const modelType of Object.keys(idPrefixMap)) {
test(`${modelType} id`, () => {
for (let i = 0; i < 100; ++i) {
const id = createIdForModel(modelType as ModelType)
expect(id.startsWith(idPrefixMap[modelType as ModelType])).toBe(true)
expect(id.length).toBeLessThanOrEqual(idMaxLength)
expect(getIdSchemaForModelType(modelType as ModelType).parse(id)).toBe(id)
}
})
}
================================================
FILE: apps/api/src/db/schema/common.ts
================================================
import { assert } from '@agentic/platform-core'
import { type Equal, sql, type Writable } from '@fisch0920/drizzle-orm'
import {
pgEnum,
type PgTimestampBuilderInitial,
type PgTimestampConfig,
type PgTimestampStringBuilderInitial,
type PgVarcharBuilderInitial,
type PgVarcharConfig,
timestamp as timestampImpl,
varchar
} from '@fisch0920/drizzle-orm/pg-core'
import { createSchemaFactory } from '@fisch0920/drizzle-zod'
import { z } from '@hono/zod-openapi'
import { createId as createCuid2 } from '@paralleldrive/cuid2'
export const namespaceMaxLength = 256 as const
export const projectSlugMaxLength = 256 as const
export const projectNameMaxLength = 1024 as const
// prefix is max 5 characters
// separator is 1 character
// cuid2 is max 24 characters
// so use 32 characters to be safe for storing ids
export const idMaxLength = 32 as const
export const idPrefixMap = {
team: 'team',
project: 'proj',
deployment: 'depl',
consumer: 'csmr',
logEntry: 'log',
// auth
user: 'user',
account: 'acct'
} as const
export type ModelType = keyof typeof idPrefixMap
export function createIdForModel(modelType: ModelType): string {
const prefix = idPrefixMap[modelType]
assert(prefix, 500, `Invalid model type: ${modelType}`)
return `${prefix}_${createCuid2()}`
}
/**
* Returns the primary `id` key to use for a given model type.
*/
function getPrimaryId(modelType: ModelType) {
return {
id: id()
.primaryKey()
.$defaultFn(() => createIdForModel(modelType))
}
}
export const projectPrimaryId = getPrimaryId('project')
export const deploymentPrimaryId = getPrimaryId('deployment')
export const consumerPrimaryId = getPrimaryId('consumer')
export const logEntryPrimaryId = getPrimaryId('logEntry')
export const teamPrimaryId = getPrimaryId('team')
export const userPrimaryId = getPrimaryId('user')
export const accountPrimaryId = getPrimaryId('account')
/**
* All of our model primary ids have the following format:
*
* `${modelPrefix}_${cuid2}`
*/
export function id<U extends string, T extends Readonly<[U, ...U[]]>>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, typeof idMaxLength> {
return varchar({ length: idMaxLength, ...config })
}
export const projectId = id
export const deploymentId = id
export const consumerId = id
export const logEntryId = id
export const teamId = id
export const userId = id
export function stripeId<U extends string, T extends Readonly<[U, ...U[]]>>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, 255> {
return varchar({ length: 255, ...config })
}
/**
* `namespace/project-slug`
*/
export function projectIdentifier<
U extends string,
T extends Readonly<[U, ...U[]]>
>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, 514> {
return varchar({ length: 514, ...config })
}
/**
* `namespace/project-slug@hash`
*/
export function deploymentIdentifier<
U extends string,
T extends Readonly<[U, ...U[]]>
>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, 530> {
return varchar({ length: 530, ...config })
}
export function username<U extends string, T extends Readonly<[U, ...U[]]>>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, typeof namespaceMaxLength> {
return varchar({ length: namespaceMaxLength, ...config })
}
export function teamSlug<U extends string, T extends Readonly<[U, ...U[]]>>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, typeof namespaceMaxLength> {
return varchar({ length: namespaceMaxLength, ...config })
}
export function projectNamespace<
U extends string,
T extends Readonly<[U, ...U[]]>
>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, typeof namespaceMaxLength> {
return varchar({ length: namespaceMaxLength, ...config })
}
export function projectSlug<U extends string, T extends Readonly<[U, ...U[]]>>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, typeof projectSlugMaxLength> {
return varchar({ length: projectSlugMaxLength, ...config })
}
export function projectName<U extends string, T extends Readonly<[U, ...U[]]>>(
config?: PgVarcharConfig<T | Writable<T>, never>
): PgVarcharBuilderInitial<'', Writable<T>, typeof projectNameMaxLength> {
return varchar({ length: projectNameMaxLength, ...config })
}
/**
* Timestamp with mode `string`
*/
export function timestamp<
TMode extends PgTimestampConfig['mode'] & {} = 'string'
>(
config?: PgTimestampConfig<TMode>
): Equal<TMode, 'string'> extends true
? PgTimestampStringBuilderInitial<''>
: PgTimestampBuilderInitial<''> {
return timestampImpl<TMode>({
mode: 'string' as unknown as TMode,
withTimezone: true,
...config
})
}
export const timestamps = {
createdAt: timestamp().notNull().defaultNow(),
updatedAt: timestamp()
.notNull()
.default(sql`now()`),
deletedAt: timestamp()
}
export const userRoleEnum = pgEnum('UserRole', ['user', 'admin'])
export const teamMemberRoleEnum = pgEnum('TeamMemberRole', ['user', 'admin'])
export const logEntryTypeEnum = pgEnum('LogEntryType', ['log'])
export const logEntryLevelEnum = pgEnum('LogEntryLevel', [
'trace',
'debug',
'info',
'warn',
'error'
])
export const pricingIntervalEnum = pgEnum('PricingInterval', [
'day',
'week',
'month',
'year'
])
export const pricingCurrencyEnum = pgEnum('PricingCurrency', ['usd'])
export const authProviderTypeEnum = pgEnum('AuthProviderType', [
'github',
'password'
])
export const { createInsertSchema, createSelectSchema, createUpdateSchema } =
createSchemaFactory({
zodInstance: z,
coerce: {
// Coerce dates / strings to timetamps
date: true
}
})
================================================
FILE: apps/api/src/db/schema/consumer.ts
================================================
import {
type StripeSubscriptionItemIdMap,
stripeSubscriptionItemIdMapSchema
} from '@agentic/platform-types'
import { relations } from '@fisch0920/drizzle-orm'
import {
boolean,
index,
jsonb,
pgTable,
text
} from '@fisch0920/drizzle-orm/pg-core'
import { z } from '@hono/zod-openapi'
import { env } from '@/lib/env'
import {
consumerIdSchema,
deploymentIdSchema,
projectIdSchema,
userIdSchema
} from '../schemas'
import {
consumerPrimaryId,
createInsertSchema,
createSelectSchema,
createUpdateSchema,
deploymentId,
projectId,
stripeId,
timestamps,
userId
} from './common'
import { deployments, deploymentSelectSchema } from './deployment'
import { projects, projectSelectSchema } from './project'
import { users, userSelectSchema } from './user'
// TODO: Consumers should be valid for any enabled project like in RapidAPI and GCP.
// This may require a separate model to aggregate User Applications.
// https://docs.rapidapi.com/docs/keys#section-different-api-keys-per-application
/**
* A `Consumer` represents a user who has subscribed to a `Project` and is used
* to track usage and billing.
*
* Consumers are linked to a corresponding Stripe Customer and Subscription.
* The Stripe customer will either be the user's default Stripe Customer if the
* project uses the default Agentic platform account, or a customer on the project
* owner's connected Stripe account if the project has Stripe Connect enabled.
*/
export const consumers = pgTable(
'consumers',
{
...consumerPrimaryId,
...timestamps,
// API key for this consumer
// (called "token" for backwards compatibility)
token: text().notNull(),
// The slug of the PricingPlan in the target deployment that this consumer
// is subscribed to.
plan: text(),
// Whether the consumer has made at least one successful API call after
// initializing their subscription.
activated: boolean().default(false).notNull(),
// TODO: Re-add coupon support
// coupon: text(),
// only used during initial creation
source: text(),
userId: userId()
.notNull()
.references(() => users.id),
// The project this user is subscribed to
projectId: projectId()
.notNull()
.references(() => projects.id, {
onDelete: 'cascade'
}),
// The specific deployment this user is subscribed to, since pricing can
// change across deployment versions)
deploymentId: deploymentId()
.notNull()
.references(() => deployments.id, {
onDelete: 'cascade'
}),
// Stripe subscription status (synced via webhooks). Should move from
// `incomplete` to `active` after the first successful payment.
stripeStatus: text().default('incomplete').notNull(),
// Whether the consumer's subscription is currently active, depending on
// `stripeStatus`.
isStripeSubscriptionActive: boolean().default(true).notNull(),
// Main Stripe Subscription id
_stripeSubscriptionId: stripeId(),
// [pricingPlanLineItemSlug: string]: string
_stripeSubscriptionItemIdMap: jsonb()
.$type<StripeSubscriptionItemIdMap>()
.default({})
.notNull(),
// Denormalized from User or possibly separate for stripe connect
// TODO: is this necessary?
_stripeCustomerId: stripeId().notNull()
},
(table) => [
index('consumer_token_idx').on(table.token),
index('consumer_userId_idx').on(table.userId),
index('consumer_projectId_idx').on(table.projectId),
index('consumer_deploymentId_idx').on(table.deploymentId),
index('consumer_isStripeSubscriptionActive_idx').on(
table.isStripeSubscriptionActive
),
index('consumer_createdAt_idx').on(table.createdAt),
index('consumer_updatedAt_idx').on(table.updatedAt),
index('consumer_deletedAt_idx').on(table.deletedAt)
]
)
export const consumersRelations = relations(consumers, ({ one }) => ({
user: one(users, {
fields: [consumers.userId],
references: [users.id]
}),
project: one(projects, {
fields: [consumers.projectId],
references: [projects.id]
}),
deployment: one(deployments, {
fields: [consumers.deploymentId],
references: [deployments.id]
})
}))
export const consumerSelectBaseSchema = createSelectSchema(consumers, {
id: consumerIdSchema,
userId: userIdSchema,
projectId: projectIdSchema,
deploymentId: deploymentIdSchema,
_stripeSubscriptionItemIdMap: stripeSubscriptionItemIdMapSchema
})
.omit({
_stripeSubscriptionId: true,
_stripeSubscriptionItemIdMap: true,
_stripeCustomerId: true
})
.extend({
user: z
.lazy(() => userSelectSchema)
.optional()
.openapi('User', { type: 'object' }),
project: z
.lazy(() => projectSelectSchema)
.optional()
.openapi('Project', { type: 'object' }),
// deployment: z
// .lazy(() => deploymentSelectSchema)
// .optional()
// .openapi('Deployment', { type: 'object' })
// TODO: Improve the self-referential typing here that `@hono/zod-openapi`
// trips up on.
deployment: z
.any()
.refine(
(deployment): boolean =>
!deployment || deploymentSelectSchema.safeParse(deployment).success,
{
message: 'Invalid lastDeployment'
}
)
.transform((deployment): any => {
if (!deployment) return undefined
return deploymentSelectSchema.parse(deployment)
})
.optional()
})
// These are all derived virtual URLs that are not stored in the database
export const derivedConsumerFields = {
/**
* A private admin URL for managing the customer's subscription. This URL
* is only accessible by the customer.
*
* @example https://agentic.so/app/consumers/cons_123
*/
adminUrl: z
.string()
.url()
.describe(
"A private admin URL for managing the customer's subscription. This URL is only accessible by the customer."
)
} as const
export const consumerSelectSchema = consumerSelectBaseSchema
.transform((consumer) => ({
...consumer,
adminUrl: `${env.AGENTIC_WEB_BASE_URL}/app/consumers/${consumer.id}`
}))
.pipe(consumerSelectBaseSchema.extend(derivedConsumerFields).strip())
.describe(
`A Consumer represents a user who has subscribed to a Project and is used
to track usage and billing.
Consumers are linked to a corresponding Stripe Customer and Subscription.
The Stripe customer will either be the user's default Stripe Customer if the
project uses the default Agentic platform account, or a customer on the project
owner's connected Stripe account if the project has Stripe Connect enabled.`
)
.openapi('Consumer')
export const consumerAdminSelectSchema = consumerSelectBaseSchema
.extend({
_stripeCustomerId: z.string().nonempty()
})
.transform((consumer) => ({
...consumer,
adminUrl: `${env.AGENTIC_WEB_BASE_URL}/app/consumers/${consumer.id}`
}))
.openapi('AdminConsumer')
export const consumerInsertSchema = createInsertSchema(consumers, {
deploymentId: deploymentIdSchema.optional(),
plan: z.string().nonempty()
})
.pick({
plan: true,
source: true,
deploymentId: true
})
.strict()
export const consumerUpdateSchema = createUpdateSchema(consumers, {
deploymentId: deploymentIdSchema.optional()
})
.pick({
plan: true,
deploymentId: true
})
.strict()
================================================
FILE: apps/api/src/db/schema/deployment.ts
================================================
import {
agenticProjectConfigSchema,
defaultRequestsRateLimit,
type OriginAdapter,
type PricingPlanList,
type RateLimit,
resolvedAgenticProjectConfigSchema,
type Tool,
type ToolConfig
} from '@agentic/platform-types'
import {
isValidDeploymentHash,
parseDeploymentIdentifier
} from '@agentic/platform-validators'
import { relations } from '@fisch0920/drizzle-orm'
import {
boolean,
index,
jsonb,
pgTable,
text,
uniqueIndex
} from '@fisch0920/drizzle-orm/pg-core'
import { z } from '@hono/zod-openapi'
import { env } from '@/lib/env'
import {
deploymentIdentifierSchema,
deploymentIdSchema,
projectIdSchema,
teamIdSchema,
userIdSchema
} from '../schemas'
import {
createSelectSchema,
createUpdateSchema,
deploymentIdentifier,
deploymentPrimaryId,
pricingIntervalEnum,
projectId,
projectName,
teamId,
timestamps,
userId
} from './common'
import { projects, projectSelectSchema } from './project'
import { teams } from './team'
import { users } from './user'
/**
* A Deployment is a single, immutable instance of a Project. Each deployment
* contains pricing plans, origin server config (OpenAPI or MCP server), tool
* definitions, and metadata.
*
* Deployments are private to a developer or team until they are published, at
* which point they are accessible to any customers with access to the parent
* Project.
*/
export const deployments = pgTable(
'deployments',
{
...deploymentPrimaryId,
...timestamps,
identifier: deploymentIdentifier().unique().notNull(),
hash: text().notNull(),
version: text(),
published: boolean().default(false).notNull(),
// display name
name: projectName().notNull(),
description: text().default('').notNull(),
readme: text(), // URL to uploaded markdown document
iconUrl: text(),
sourceUrl: text(),
homepageUrl: text(),
userId: userId()
.notNull()
.references(() => users.id),
teamId: teamId().references(() => teams.id),
projectId: projectId()
.notNull()
.references(() => projects.id, {
onDelete: 'cascade'
}),
// Tool definitions exposed by the origin server
tools: jsonb().$type<Tool[]>().notNull(),
// Tool configs customize the behavior of tools for different pricing plans
toolConfigs: jsonb().$type<ToolConfig[]>().default([]).notNull(),
// Origin API adapter config (url, openapi/mcp/raw, internal/external hosting, etc)
origin: jsonb().$type<OriginAdapter>().notNull(),
// Array<PricingPlan>
pricingPlans: jsonb().$type<PricingPlanList>().notNull(),
// Which pricing intervals are supported for subscriptions to this project
pricingIntervals: pricingIntervalEnum()
.array()
.default(['month'])
.notNull(),
// Default rate limit across all pricing plans
defaultRateLimit: jsonb()
.$type<RateLimit>()
.notNull()
.default(defaultRequestsRateLimit)
// TODO: metadata config (logo, keywords, examples, etc)
// TODO: webhooks
// TODO: coupons
// TODO: third-party auth provider config
// NOTE: will need consumer.authProviders as well as user.authProviders for
// this because custom oauth credentials that are deployment-specific. will
// prolly also need to hash the individual AuthProviders in
// deployment.authProviders to compare across deployments.
},
(table) => [
uniqueIndex('deployment_identifier_idx').on(table.identifier),
index('deployment_userId_idx').on(table.userId),
index('deployment_teamId_idx').on(table.teamId),
index('deployment_projectId_idx').on(table.projectId),
index('deployment_published_idx').on(table.published),
index('deployment_version_idx').on(table.version),
index('deployment_createdAt_idx').on(table.createdAt),
index('deployment_updatedAt_idx').on(table.updatedAt),
index('deployment_deletedAt_idx').on(table.deletedAt)
]
)
export const deploymentsRelations = relations(deployments, ({ one }) => ({
user: one(users, {
fields: [deployments.userId],
references: [users.id]
}),
team: one(teams, {
fields: [deployments.teamId],
references: [teams.id]
}),
project: one(projects, {
fields: [deployments.projectId],
references: [projects.id]
})
}))
// TODO: virtual hasFreeTier
// TODO: virtual url
// TODO: virtual openApiUrl
// TODO: virtual saasUrl
// TODO: virtual authProviders?
// TODO: virtual openapi spec? (hide openapi.servers)
export const deploymentSelectBaseSchema = createSelectSchema(deployments, {
id: deploymentIdSchema,
userId: userIdSchema,
teamId: teamIdSchema.optional(),
projectId: projectIdSchema,
identifier: deploymentIdentifierSchema,
hash: (schema) =>
schema.refine((hash) => isValidDeploymentHash(hash), {
message: 'Invalid deployment hash'
}),
name: resolvedAgenticProjectConfigSchema.shape.name,
version: resolvedAgenticProjectConfigSchema.shape.version,
description: resolvedAgenticProjectConfigSchema.shape.description,
readme: resolvedAgenticProjectConfigSchema.shape.readme,
iconUrl: resolvedAgenticProjectConfigSchema.shape.iconUrl,
sourceUrl: resolvedAgenticProjectConfigSchema.shape.sourceUrl,
homepageUrl: resolvedAgenticProjectConfigSchema.shape.homepageUrl,
origin: resolvedAgenticProjectConfigSchema.shape.origin,
pricingPlans: resolvedAgenticProjectConfigSchema.shape.pricingPlans,
pricingIntervals: resolvedAgenticProjectConfigSchema.shape.pricingIntervals,
tools: resolvedAgenticProjectConfigSchema.shape.tools,
toolConfigs: resolvedAgenticProjectConfigSchema.shape.toolConfigs,
defaultRateLimit: resolvedAgenticProjectConfigSchema.shape.defaultRateLimit
})
.omit({
origin: true
})
.extend({
// user: z
// .lazy(() => userSelectSchema)
// .optional()
// .openapi('User', { type: 'object' }),
// team: z
// .lazy(() => teamSelectSchema)
// .optional()
// .openapi('Team', { type: 'object' }),
// project: z
// .lazy(() => projectSelectSchema)
// .optional()
// .openapi('Project', { type: 'object' })
// TODO: Improve the self-referential typing here that `@hono/zod-openapi`
// trips up on.
project: z
.any()
.refine(
(project): boolean =>
!project || projectSelectSchema.safeParse(project).success,
{
message: 'Invalid lastDeployment'
}
)
.transform((project): any => {
if (!project) return undefined
return projectSelectSchema.parse(project)
})
.optional()
// .openapi('Project', { type: 'object' })
// TODO: Circular references make this schema less than ideal
// project: z.object({}).optional().openapi('Project', { type: 'object' })
})
// These are all derived virtual URLs that are not stored in the database
export const derivedDeploymentFields = {
/**
* The public base HTTP URL for the deployment supporting HTTP POST requests
* for individual tools at `/tool-name` subpaths.
*
* @example https://gateway.agentic.so/@agentic/search@latest
*/
gatewayBaseUrl: z
.string()
.url()
.describe(
'The public base HTTP URL for the deployment supporting HTTP POST requests for individual tools at `/tool-name` subpaths.'
),
/**
* The public MCP URL for the deployment supporting the Streamable HTTP
* transport.
*
* @example https://gateway.agentic.so/@agentic/search@latest/mcp
*/
gatewayMcpUrl: z
.string()
.url()
.describe(
'The public MCP URL for the deployment supporting the Streamable HTTP transport.'
),
/**
* The public marketplace URL for the deployment's project.
*
* Note that only published deployments are visible on the marketplace.
*
* @example https://agentic.so/marketplace/projects/@agentic/search
*/
marketplaceUrl: z
.string()
.url()
.describe("The public marketplace URL for the deployment's project."),
/**
* A private admin URL for managing the deployment. This URL is only accessible
* by project owners.
*
* @example https://agentic.so/app/projects/@agentic/search/deployments/123
*/
adminUrl: z
.string()
.url()
.describe(
'A private admin URL for managing the deployment. This URL is only accessible by project owners.'
)
} as const
export const deploymentSelectSchema = deploymentSelectBaseSchema
.transform((deployment) => {
const { projectIdentifier, deploymentIdentifier } =
parseDeploymentIdentifier(deployment.identifier)
return {
...deployment,
gatewayBaseUrl: `${env.AGENTIC_GATEWAY_BASE_URL}/${deploymentIdentifier}`,
gatewayMcpUrl: `${env.AGENTIC_GATEWAY_BASE_URL}/${deploymentIdentifier}/mcp`,
marketplaceUrl: `${env.AGENTIC_WEB_BASE_URL}/marketplace/projects/${projectIdentifier}`,
adminUrl: `${env.AGENTIC_WEB_BASE_URL}/app/projects/${projectIdentifier}/deployments/${deployment.hash}`
}
})
.pipe(deploymentSelectBaseSchema.extend(derivedDeploymentFields).strip())
.describe(
`A Deployment is a single, immutable instance of a Project. Each deployment contains pricing plans, origin server config (OpenAPI or MCP server), tool definitions, and metadata.
Deployments are private to a developer or team until they are published, at which point they are accessible to any customers with access to the parent Project.`
)
.openapi('Deployment')
export const deploymentAdminSelectSchema = deploymentSelectBaseSchema
.extend({
origin: resolvedAgenticProjectConfigSchema.shape.origin,
_secret: z.string().nonempty()
})
.transform((deployment) => {
const { projectIdentifier, deploymentIdentifier } =
parseDeploymentIdentifier(deployment.identifier)
return {
...deployment,
gatewayBaseUrl: `${env.AGENTIC_GATEWAY_BASE_URL}/${deploymentIdentifier}`,
gatewayMcpUrl: `${env.AGENTIC_GATEWAY_BASE_URL}/${deploymentIdentifier}/mcp`,
marketplaceUrl: `${env.AGENTIC_WEB_BASE_URL}/marketplace/projects/${projectIdentifier}`,
adminUrl: `${env.AGENTIC_WEB_BASE_URL}/app/projects/${projectIdentifier}/deployments/${deployment.hash}`
}
})
.openapi('AdminDeployment')
export const deploymentInsertSchema = agenticProjectConfigSchema.strict()
// TODO: Deployments should be immutable, so we should not allow updates aside
// from publishing. But editing a project's description should be possible from
// the admin UI, so maybe we allow only updates to some properties? Or we
// denormalize these fields in `project`?
export const deploymentUpdateSchema = createUpdateSchema(deployments)
.pick({
deletedAt: true,
description: true
})
.strict()
export const deploymentPublishSchema = createUpdateSchema(deployments, {
version: z.string().nonempty()
})
.pick({
version: true
})
.strict()
================================================
FILE: apps/api/src/db/schema/index.ts
================================================
export * from './account'
export * from './auth-data'
export * from './common'
export * from './consumer'
export * from './deployment'
export * from './log-entry'
export * from './project'
export * from './team'
export * from './team-member'
export * from './user'
================================================
FILE: apps/api/src/db/schema/log-entry.ts
================================================
import { relations } from '@fisch0920/drizzle-orm'
import {
index,
jsonb,
pgTable,
text,
varchar
} from '@fisch0920/drizzle-orm/pg-core'
import {
consumerIdSchema,
deploymentIdSchema,
projectIdSchema,
userIdSchema
} from '../schemas'
import {
consumerId,
createSelectSchema,
deploymentId,
logEntryLevelEnum,
logEntryPrimaryId,
logEntryTypeEnum,
projectId,
timestamps,
userId
} from './common'
import { consumers } from './consumer'
import { deployments } from './deployment'
import { projects } from './project'
import { users } from './user'
/**
* A `LogEntry` is an internal audit log entry.
*/
export const logEntries = pgTable(
'log_entries',
{
...logEntryPrimaryId,
...timestamps,
// core data (required)
type: logEntryTypeEnum().notNull().default('log'),
level: logEntryLevelEnum().notNull().default('info'),
message: text().notNull(),
// context info (required)
environment: text(),
service: text(),
requestId: varchar({ length: 512 }),
traceId: varchar({ length: 512 }),
// relations (optional)
userId: userId(),
projectId: projectId(),
deploymentId: deploymentId(),
consumerId: consumerId(),
// misc metadata (optional)
metadata: jsonb().$type<Record<string, unknown>>().default({}).notNull()
},
(table) => [
index('log_entry_type_idx').on(table.type),
// TODO: Don't add these extra indices until we need them. They'll become
// very large very fast.
// index('log_entry_level_idx').on(table.level),
// index('log_entry_environment_idx').on(table.environment),
// index('log_entry_service_idx').on(table.service),
// index('log_entry_requestId_idx').on(table.requestId),
// index('log_entry_traceId_idx').on(table.traceId),
index('log_entry_userId_idx').on(table.userId),
index('log_entry_projectId_idx').on(table.projectId),
index('log_entry_deploymentId_idx').on(table.deploymentId),
// index('log_entry_consumerId_idx').on(table.consumerId),
index('log_entry_createdAt_idx').on(table.createdAt),
index('log_entry_updatedAt_idx').on(table.updatedAt),
index('log_entry_deletedAt_idx').on(table.deletedAt)
]
)
export const logEntriesRelations = relations(logEntries, ({ one }) => ({
user: one(users, {
fields: [logEntries.userId],
references: [users.id]
}),
project: one(projects, {
fields: [logEntries.projectId],
references: [projects.id]
}),
deployment: one(deployments, {
fields: [logEntries.deploymentId],
references: [deployments.id]
}),
consumer: one(consumers, {
fields: [logEntries.consumerId],
references: [consumers.id]
})
}))
export const logEntrySelectSchema = createSelectSchema(logEntries, {
userId: userIdSchema.optional(),
projectId: projectIdSchema.optional(),
deploymentId: deploymentIdSchema.optional(),
consumerId: consumerIdSchema.optional()
})
// .extend({
// user: z
// .lazy(() => userSelectSchema)
// .optional()
// .openapi('User', { type: 'object' }),
// project: z
// .lazy(() => projectSelectSchema)
// .optional()
// .openapi('Project', { type: 'object' }),
// deployment: z
// .lazy(() => deploymentSelectSchema)
// .optional()
// .openapi('Deployment', { type: 'object' }),
// consumer: z
// .lazy(() => consumerSelectSchema)
// .optional()
// .openapi('Consumer', { type: 'object' })
// })
.strip()
.openapi('LogEntry')
================================================
FILE: apps/api/src/db/schema/project.ts
================================================
import {
agenticProjectConfigSchema,
pricingIntervalSchema,
type StripeMeterIdMap,
stripeMeterIdMapSchema,
type StripePriceIdMap,
stripePriceIdMapSchema,
type StripeProductIdMap,
stripeProductIdMapSchema
} from '@agentic/platform-types'
import { relations } from '@fisch0920/drizzle-orm'
import {
boolean,
index,
integer,
jsonb,
pgTable,
text,
uniqueIndex
} from '@fisch0920/drizzle-orm/pg-core'
import { z } from '@hono/zod-openapi'
import { env } from '@/lib/env'
import {
deploymentIdSchema,
projectIdentifierSchema,
projectIdSchema,
teamIdSchema,
userIdSchema
} from '../schemas'
import {
createInsertSchema,
createSelectSchema,
createUpdateSchema,
deploymentId,
pricingCurrencyEnum,
pricingIntervalEnum,
projectIdentifier,
projectName,
projectNamespace,
projectPrimaryId,
projectSlug,
stripeId,
teamId,
timestamps,
userId
} from './common'
import { deployments, deploymentSelectSchema } from './deployment'
import { teams, teamSelectSchema } from './team'
import { users, userSelectSchema } from './user'
/**
* A Project represents a single Agentic API product. Is is comprised of a
* series of immutable Deployments, each of which contains pricing data, origin
* API config, OpenAPI or MCP specs, tool definitions, and various metadata.
*
* You can think of Agentic Projects as similar to Vercel projects. They both
* hold some common configuration and are comprised of a series of immutable
* Deployments.
*
* Internally, Projects manage all of the Stripe billing resources across
* Deployments (Stripe Products, Prices, and Meters for usage-based billing).
*/
export const projects = pgTable(
'projects',
{
...projectPrimaryId,
...timestamps,
// display name
name: projectName().notNull(),
// identifier is `@namespace/slug`
identifier: projectIdentifier().unique().notNull(),
// namespace is either a username or team slug
namespace: projectNamespace().notNull(),
// slug is a unique identifier for the project within its namespace
slug: projectSlug().notNull(),
// Defaulting to `true` for now to hide all projects from the marketplace
// by default. Will need to manually set to `true` to allow projects to be
// visible on the marketplace.
private: boolean().default(true).notNull(),
// Admin-controlled tags for organizing and featuring on the marketplace
tags: text().array(),
// TODO: allow for multiple aliases like vercel
// alias: text(),
userId: userId()
.notNull()
.references(() => users.id),
teamId: teamId(),
// Most recently published Deployment if one exists
lastPublishedDeploymentId: deploymentId(),
// Most recent Deployment if one exists
lastDeploymentId: deploymentId(),
// Semver version of the most recently published Deployment (if one exists)
// (denormalized for convenience)
lastPublishedDeploymentVersion: text(),
applicationFeePercent: integer().default(20).notNull(),
// TODO: This is going to need to vary from dev to prod
//isStripeConnectEnabled: boolean().default(false).notNull(),
// Default pricing interval for subscriptions to this project
// Note: This is essentially hard-coded and not configurable by users for now.
defaultPricingInterval: pricingIntervalEnum().default('month').notNull(),
// Pricing currency used across all prices and subscriptions to this project
pricingCurrency: pricingCurrencyEnum().default('usd').notNull(),
// All deployments share the same underlying proxy secret, which allows
// origin servers to verify that requests are coming from Agentic's API
// gateway.
_secret: text().notNull(),
// Auth token used to access the platform API on behalf of this project
// _providerToken: text().notNull(),
// TODO: Full-text search
// _text: text().default('').notNull(),
// Stripe coupons associated with this project, mapping from unique coupon
// object hash to stripe coupon id.
// `[hash: string]: string`
// _stripeCouponsMap: jsonb()
// .$type<Record<string, string>>()
// .default({})
// .notNull(),
// Stripe billing Products associated with this project across deployments,
// mapping from PricingPlanLineItem **slug** to Stripe Product id.
// NOTE: This map uses slugs as keys, unlike `_stripePriceIdMap`, because
// Stripe Products are agnostic to the PricingPlanLineItem config. This is
// important for them to be shared across deployments even if the pricing
// details change.
_stripeProductIdMap: jsonb()
.$type<StripeProductIdMap>()
.default({})
.notNull(),
// Stripe billing Prices associated with this project, mapping from unique
// PricingPlanLineItem **hash** to Stripe Price id.
// NOTE: This map uses hashes as keys, because Stripe Prices are dependent
// on the PricingPlanLineItem config. This is important for them to be shared
// across deployments even if the pricing details change.
_stripePriceIdMap: jsonb().$type<StripePriceIdMap>().default({}).notNull(),
// Stripe billing LineItems associated with this project, mapping from unique
// PricingPlanLineItem **slug** to Stripe Meter id.
// NOTE: This map uses slugs as keys, unlike `_stripePriceIdMap`, because
// Stripe Products are agnostic to the PricingPlanLineItem config. This is
// important for them to be shared across deployments even if the pricing
// details change.
_stripeMeterIdMap: jsonb().$type<StripeMeterIdMap>().default({}).notNull(),
// Connected Stripe account (standard or express).
// If not defined, then subscriptions for this project route through our
// main Stripe account.
_stripeAccountId: stripeId()
},
(table) => [
uniqueIndex('project_identifier_idx').on(table.identifier),
index('project_namespace_idx').on(table.namespace),
index('project_userId_idx').on(table.userId),
index('project_teamId_idx').on(table.teamId),
// index('project_alias_idx').on(table.alias),
index('project_private_idx').on(table.private),
index('project_tags_idx').on(table.tags),
index('project_lastPublishedDeploymentId_idx').on(
table.lastPublishedDeploymentId
),
index('project_createdAt_idx').on(table.createdAt),
index('project_updatedAt_idx').on(table.updatedAt),
index('project_deletedAt_idx').on(table.deletedAt)
]
)
export const projectsRelations = relations(projects, ({ one }) => ({
user: one(users, {
fields: [projects.userId],
references: [users.id]
}),
team: one(teams, {
fields: [projects.teamId],
references: [teams.id]
}),
lastPublishedDeployment: one(deployments, {
fields: [projects.lastPublishedDeploymentId],
references: [deployments.id],
relationName: 'lastPublishedDeployment'
}),
lastDeployment: one(deployments, {
fields: [projects.lastDeploymentId],
references: [deployments.id],
relationName: 'lastDeployment'
})
// deployments: many(deployments, {
// relationName: 'deployments'
// }),
// publishedDeployments: many(deployments, {
// relationName: 'publishedDeployments'
// })
}))
export const projectSelectBaseSchema = createSelectSchema(projects, {
id: projectIdSchema,
userId: userIdSchema,
teamId: teamIdSchema.optional(),
identifier: projectIdentifierSchema,
name: agenticProjectConfigSchema.shape.name,
slug: agenticProjectConfigSchema.shape.slug,
tags: z.array(z.string()).optional(),
lastPublishedDeploymentId: deploymentIdSchema.optional(),
lastDeploymentId: deploymentIdSchema.optional(),
applicationFeePercent: (schema) => schema.nonnegative(),
defaultPricingInterval: pricingIntervalSchema,
_stripeProductIdMap: stripeProductIdMapSchema,
_stripePriceIdMap: stripePriceIdMapSchema,
_stripeMeterIdMap: stripeMeterIdMapSchema
})
.omit({
applicationFeePercent: true,
_secret: true,
// _text: true,
_stripeProductIdMap: true,
_stripePriceIdMap: true,
_stripeMeterIdMap: true,
_stripeAccountId: true
})
.extend({
user: z
.lazy(() => userSelectSchema)
.optional()
.openapi('User', { type: 'object' }),
team: z
.lazy(() => teamSelectSchema)
.optional()
.openapi('Team', { type: 'object' }),
// TODO: Improve the self-referential typing here that `@hono/zod-openapi`
// trips up on.
lastPublishedDeployment: z
.any()
.refine(
(deployment): boolean =>
!deployment || deploymentSelectSchema.safeParse(deployment).success,
{
message: 'Invalid lastPublishedDeployment'
}
)
.transform((deployment): any => {
if (!deployment) return undefined
return deploymentSelectSchema.parse(deployment)
})
.optional(),
lastDeployment: z
.any()
.refine(
(deployment): boolean =>
!deployment || deploymentSelectSchema.safeParse(deployment).success,
{
message: 'Invalid lastDeployment'
}
)
.transform((deployment): any => {
if (!deployment) return undefined
return deploymentSelectSchema.parse(deployment)
})
.optional(),
deployment: z
.any()
.refine(
(deployment): boolean =>
!deployment || deploymentSelectSchema.safeParse(deployment).success,
{
message: 'Invalid lastDeployment'
}
)
.transform((deployment): any => {
if (!deployment) return undefined
return deploymentSelectSchema.parse(deployment)
})
.optional()
})
// These are all derived virtual URLs that are not stored in the database
export const derivedProjectFields = {
/**
* The public base HTTP URL for the project supporting HTTP POST requests for
* individual tools at `/tool-name` subpaths.
*
* @example https://gateway.agentic.so/@agentic/search
*/
gatewayBaseUrl: z
.string()
.url()
.describe(
'The public base HTTP URL for the project supporting HTTP POST requests for individual tools at `/tool-name` subpaths.'
),
/**
* The public MCP URL for the project supporting the Streamable HTTP transport.
*
* @example https://gateway.agentic.so/@agentic/search/mcp
*/
gatewayMcpUrl: z
.string()
.url()
.describe(
'The public MCP URL for the project supporting the Streamable HTTP transport.'
),
/**
* The public marketplace URL for the project.
*
* @example https://agentic.so/marketplace/projects/@agentic/search
*/
marketplaceUrl: z
.string()
.url()
.describe('The public marketplace URL for the project.'),
/**
* A private admin URL for managing the project. This URL is only accessible
* by project owners.
*
* @example https://agentic.so/app/projects/@agentic/search
*/
adminUrl: z
.string()
.url()
.describe(
'A private admin URL for managing the project. This URL is only accessible by project owners.'
)
} as const
export const projectSelectSchema = projectSelectBaseSchema
.transform((project) => ({
...project,
gatewayBaseUrl: `${env.AGENTIC_GATEWAY_BASE_URL}/${project.identifier}`,
gatewayMcpUrl: `${env.AGENTIC_GATEWAY_BASE_URL}/${project.identifier}/mcp`,
marketplaceUrl: `${env.AGENTIC_WEB_BASE_URL}/marketplace/projects/${project.identifier}`,
adminUrl: `${env.AGENTIC_WEB_BASE_URL}/app/projects/${project.identifier}`
}))
.pipe(projectSelectBaseSchema.extend(derivedProjectFields).strip())
.describe(
`A Project represents a single Agentic API product. It is comprised of a series of immutable Deployments, each of which contains pricing data, origin API config, OpenAPI or MCP specs, tool definitions, and various metadata.
You can think of Agentic Projects as similar to Vercel projects. They both hold some common configuration and are comprised of a series of immutable Deployments.
Internally, Projects manage all of the Stripe billing resources across Deployments (Stripe Products, Prices, and Meters for usage-based billing).`
)
.openapi('Project')
export const projectInsertSchema = createInsertSchema(projects, {
identifier: projectIdentifierSchema,
name: agenticProjectConfigSchema.shape.name,
slug: agenticProjectConfigSchema.shape.slug
})
.pick({
name: true,
slug: true
})
.strict()
export const projectUpdateSchema = createUpdateSchema(projects)
.pick({
name: true
// alias: true
})
.strict()
// TODO: virtual saasUrl
// TODO: virtual aliasUrl
================================================
FILE: apps/api/src/db/schema/team-member.ts
================================================
import { relations } from '@fisch0920/drizzle-orm'
import {
boolean,
index,
pgTable,
primaryKey
} from '@fisch0920/drizzle-orm/pg-core'
import { userIdSchema } from '../schemas'
import {
createInsertSchema,
createSelectSchema,
createUpdateSchema,
teamId,
teamMemberRoleEnum,
teamSlug,
timestamp,
timestamps,
userId
} from './common'
import { teams } from './team'
import { users } from './user'
export const teamMembers = pgTable(
'team_members',
{
...timestamps,
userId: userId()
.notNull()
.references(() => users.id, { onDelete: 'cascade' }),
teamSlug: teamSlug()
.notNull()
.references(() => teams.slug, { onDelete: 'cascade' }),
teamId: teamId()
.notNull()
.references(() => teams.id, { onDelete: 'cascade' }),
role: teamMemberRoleEnum().default('user').notNull(),
confirmed: boolean().default(false).notNull(),
confirmedAt: timestamp()
},
(table) => [
primaryKey({ columns: [table.userId, table.teamId] }),
index('team_member_user_idx').on(table.userId),
index('team_member_team_idx').on(table.teamId),
index('team_member_slug_idx').on(table.teamSlug),
index('team_member_createdAt_idx').on(table.createdAt),
index('team_member_updatedAt_idx').on(table.updatedAt),
index('team_member_deletedAt_idx').on(table.deletedAt)
]
)
export const teamMembersRelations = relations(teamMembers, ({ one }) => ({
user: one(users, {
fields: [teamMembers.userId],
references: [users.id]
gitextract_8yb8dgx_/ ├── .cursor/ │ └── rules/ │ └── general.mdc ├── .editorconfig ├── .github/ │ ├── funding.yml │ └── workflows/ │ ├── main.yml │ └── release.yml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .vscode/ │ └── launch.json ├── CLAUDE.md ├── Tiltfile ├── apps/ │ ├── api/ │ │ ├── drizzle.config.ts │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── api-v1/ │ │ │ │ ├── auth/ │ │ │ │ │ ├── github-callback.ts │ │ │ │ │ ├── github-exchange.ts │ │ │ │ │ ├── github-init.ts │ │ │ │ │ ├── schemas.ts │ │ │ │ │ ├── sign-in-with-password.ts │ │ │ │ │ ├── sign-up-with-password.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── consumers/ │ │ │ │ │ ├── admin-activate-consumer.ts │ │ │ │ │ ├── admin-get-consumer-by-api-key.ts │ │ │ │ │ ├── create-billing-portal-session.ts │ │ │ │ │ ├── create-consumer-billing-portal-session.ts │ │ │ │ │ ├── create-consumer-checkout-session.ts │ │ │ │ │ ├── create-consumer.ts │ │ │ │ │ ├── get-consumer-by-project-identifier.ts │ │ │ │ │ ├── get-consumer.ts │ │ │ │ │ ├── list-consumers.ts │ │ │ │ │ ├── list-project-consumers.ts │ │ │ │ │ ├── refresh-consumer-api-key.ts │ │ │ │ │ ├── schemas.ts │ │ │ │ │ ├── update-consumer.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── deployments/ │ │ │ │ │ ├── admin-get-deployment-by-identifier.ts │ │ │ │ │ ├── create-deployment.ts │ │ │ │ │ ├── get-deployment-by-identifier.ts │ │ │ │ │ ├── get-deployment.ts │ │ │ │ │ ├── get-public-deployment-by-identifier.ts │ │ │ │ │ ├── list-deployments.ts │ │ │ │ │ ├── publish-deployment.ts │ │ │ │ │ ├── schemas.ts │ │ │ │ │ └── update-deployment.ts │ │ │ │ ├── health-check.ts │ │ │ │ ├── index.ts │ │ │ │ ├── projects/ │ │ │ │ │ ├── create-project.ts │ │ │ │ │ ├── get-project-by-identifier.ts │ │ │ │ │ ├── get-project.ts │ │ │ │ │ ├── get-public-project-by-identifier.ts │ │ │ │ │ ├── get-public-project.ts │ │ │ │ │ ├── list-projects.ts │ │ │ │ │ ├── list-public-projects.ts │ │ │ │ │ ├── schemas.ts │ │ │ │ │ └── update-project.ts │ │ │ │ ├── storage/ │ │ │ │ │ └── get-signed-storage-upload-url.ts │ │ │ │ ├── teams/ │ │ │ │ │ ├── create-team.ts │ │ │ │ │ ├── delete-team.ts │ │ │ │ │ ├── get-team.ts │ │ │ │ │ ├── list-teams.ts │ │ │ │ │ ├── members/ │ │ │ │ │ │ ├── create-team-member.ts │ │ │ │ │ │ ├── delete-team-member.ts │ │ │ │ │ │ ├── schemas.ts │ │ │ │ │ │ └── update-team-member.ts │ │ │ │ │ ├── schemas.ts │ │ │ │ │ └── update-team.ts │ │ │ │ ├── users/ │ │ │ │ │ ├── get-user.ts │ │ │ │ │ ├── schemas.ts │ │ │ │ │ └── update-user.ts │ │ │ │ └── webhooks/ │ │ │ │ └── stripe-webhook.ts │ │ │ ├── db/ │ │ │ │ ├── index.ts │ │ │ │ ├── schema/ │ │ │ │ │ ├── account.ts │ │ │ │ │ ├── auth-data.ts │ │ │ │ │ ├── common.test.ts │ │ │ │ │ ├── common.ts │ │ │ │ │ ├── consumer.ts │ │ │ │ │ ├── deployment.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── log-entry.ts │ │ │ │ │ ├── project.ts │ │ │ │ │ ├── team-member.ts │ │ │ │ │ ├── team.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── schemas.ts │ │ │ │ ├── types.test.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── lib/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── storage.test.ts.snap │ │ │ │ ├── acl-admin.ts │ │ │ │ ├── acl-public-project.ts │ │ │ │ ├── acl-team-admin.ts │ │ │ │ ├── acl-team-member.ts │ │ │ │ ├── acl.ts │ │ │ │ ├── auth/ │ │ │ │ │ ├── auth-storage.ts │ │ │ │ │ ├── create-auth-token.ts │ │ │ │ │ ├── drizzle-auth-storage.ts │ │ │ │ │ └── upsert-or-link-user-account.ts │ │ │ │ ├── billing/ │ │ │ │ │ ├── create-stripe-checkout-session.ts │ │ │ │ │ ├── upsert-stripe-connect-customer.ts │ │ │ │ │ ├── upsert-stripe-customer.ts │ │ │ │ │ ├── upsert-stripe-pricing-resources.ts │ │ │ │ │ └── upsert-stripe-subscription.ts │ │ │ │ ├── cache-control.ts │ │ │ │ ├── consumers/ │ │ │ │ │ ├── upsert-consumer-stripe-checkout.ts │ │ │ │ │ ├── upsert-consumer.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── create-avatar.ts │ │ │ │ ├── create-consumer-api-key.ts │ │ │ │ ├── deployments/ │ │ │ │ │ ├── get-deployment-by-id.ts │ │ │ │ │ ├── normalize-deployment-version.ts │ │ │ │ │ ├── publish-deployment.ts │ │ │ │ │ └── try-get-deployment-by-identifier.ts │ │ │ │ ├── ensure-auth-user.ts │ │ │ │ ├── ensure-unique-namespace.ts │ │ │ │ ├── env.ts │ │ │ │ ├── exit-hooks.ts │ │ │ │ ├── external/ │ │ │ │ │ ├── github.ts │ │ │ │ │ ├── resend.ts │ │ │ │ │ ├── sentry.ts │ │ │ │ │ └── stripe.ts │ │ │ │ ├── middleware/ │ │ │ │ │ ├── authenticate.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── me.ts │ │ │ │ │ └── team.ts │ │ │ │ ├── openapi-utils.ts │ │ │ │ ├── projects/ │ │ │ │ │ └── try-get-project-by-identifier.ts │ │ │ │ ├── storage.test.ts │ │ │ │ ├── storage.ts │ │ │ │ ├── temp │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── oauth-redirect.ts │ │ │ ├── reset.d.ts │ │ │ └── server.ts │ │ ├── tsconfig.json │ │ ├── tsup.config.ts │ │ └── vitest.config.ts │ ├── e2e/ │ │ ├── bin/ │ │ │ ├── deploy-fixtures.ts │ │ │ ├── publish-fixtures.ts │ │ │ └── seed-db.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── http-e2e.test.ts.snap │ │ │ │ └── mcp-e2e.test.ts.snap │ │ │ ├── agentic-examples.ts │ │ │ ├── deploy-projects.ts │ │ │ ├── dev-client.ts │ │ │ ├── dev-fixtures.ts │ │ │ ├── env.ts │ │ │ ├── http-e2e.test.ts │ │ │ ├── http-fixtures.ts │ │ │ ├── mcp-e2e.test.ts │ │ │ ├── mcp-fixtures.ts │ │ │ └── publish-deployments.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── gateway/ │ │ ├── .dev.vars.example │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.ts │ │ │ ├── lib/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── utils.test.ts.snap │ │ │ │ ├── agentic-client.ts │ │ │ │ ├── cf-validate-json-schema.ts │ │ │ │ ├── create-http-request-for-openapi-operation.ts │ │ │ │ ├── create-http-response-from-mcp-tool-call-response.ts │ │ │ │ ├── durable-mcp-client.ts │ │ │ │ ├── durable-mcp-server.ts │ │ │ │ ├── env.ts │ │ │ │ ├── external/ │ │ │ │ │ └── stripe.ts │ │ │ │ ├── fetch-cache.ts │ │ │ │ ├── get-admin-consumer.ts │ │ │ │ ├── get-admin-deployment.ts │ │ │ │ ├── get-request-cache-key.ts │ │ │ │ ├── get-tool-args-from-request.ts │ │ │ │ ├── get-tool.ts │ │ │ │ ├── handle-mcp-tool-call-error.ts │ │ │ │ ├── normalize-url.test.ts │ │ │ │ ├── normalize-url.ts │ │ │ │ ├── rate-limits/ │ │ │ │ │ ├── durable-rate-limiter.ts │ │ │ │ │ └── enforce-rate-limit.ts │ │ │ │ ├── record-tool-call-usage.ts │ │ │ │ ├── reset.d.ts │ │ │ │ ├── resolve-edge-request.ts │ │ │ │ ├── resolve-http-edge-request.ts │ │ │ │ ├── resolve-mcp-edge-request.ts │ │ │ │ ├── resolve-origin-tool-call.ts │ │ │ │ ├── temp │ │ │ │ ├── temp-mcp │ │ │ │ ├── transform-http-response-to-mcp-tool-call-response.ts │ │ │ │ ├── types.ts │ │ │ │ ├── update-origin-request.ts │ │ │ │ ├── utils.test.ts │ │ │ │ └── utils.ts │ │ │ └── worker.ts │ │ ├── tsconfig.json │ │ ├── vitest.config.ts │ │ └── wrangler.jsonc │ └── web/ │ ├── components.json │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public/ │ │ ├── adamsbridge.hdr │ │ └── schema.json │ ├── readme.md │ ├── src/ │ │ ├── app/ │ │ │ ├── about/ │ │ │ │ └── page.tsx │ │ │ ├── app/ │ │ │ │ ├── app-dashboard.tsx │ │ │ │ ├── consumers/ │ │ │ │ │ ├── [consumerId]/ │ │ │ │ │ │ ├── app-consumer-index.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── app-consumers-index.tsx │ │ │ │ │ └── page.tsx │ │ │ │ ├── page.tsx │ │ │ │ ├── projects/ │ │ │ │ │ ├── [namespace]/ │ │ │ │ │ │ └── [project-slug]/ │ │ │ │ │ │ ├── app-project-index.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ ├── app-projects-index.tsx │ │ │ │ │ └── page.tsx │ │ │ │ └── temp-testing │ │ │ ├── auth/ │ │ │ │ └── [provider]/ │ │ │ │ └── success/ │ │ │ │ ├── oauth-success-callback.tsx │ │ │ │ └── page.tsx │ │ │ ├── contact/ │ │ │ │ └── page.tsx │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ ├── login/ │ │ │ │ ├── login-form.tsx │ │ │ │ └── page.tsx │ │ │ ├── logout/ │ │ │ │ └── page.tsx │ │ │ ├── marketplace/ │ │ │ │ ├── marketplace-index.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── projects/ │ │ │ │ └── [namespace]/ │ │ │ │ └── [project-slug]/ │ │ │ │ ├── marketplace-nav.tsx │ │ │ │ ├── marketplace-public-project-detail.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── utils.ts │ │ │ ├── not-found.tsx │ │ │ ├── page.tsx │ │ │ ├── pricing/ │ │ │ │ └── page.tsx │ │ │ ├── privacy/ │ │ │ │ └── page.tsx │ │ │ ├── providers.tsx │ │ │ ├── publishing/ │ │ │ │ └── page.tsx │ │ │ ├── signup/ │ │ │ │ ├── page.tsx │ │ │ │ └── signup-form.tsx │ │ │ └── terms/ │ │ │ └── page.tsx │ │ ├── components/ │ │ │ ├── active-link.tsx │ │ │ ├── agentic-provider.tsx │ │ │ ├── app-consumers-list.tsx │ │ │ ├── app-projects-list.tsx │ │ │ ├── bootstrap.tsx │ │ │ ├── code-block/ │ │ │ │ ├── highlight.ts │ │ │ │ └── index.tsx │ │ │ ├── confetti.tsx │ │ │ ├── dark-mode-toggle.tsx │ │ │ ├── demand-side-cta.tsx │ │ │ ├── dots-section.tsx │ │ │ ├── example-agentic-configs.tsx │ │ │ ├── example-usage-section.tsx │ │ │ ├── example-usage.tsx │ │ │ ├── feature.tsx │ │ │ ├── footer/ │ │ │ │ ├── dynamic.tsx │ │ │ │ └── index.tsx │ │ │ ├── github-star-counter.tsx │ │ │ ├── grid-pattern.tsx │ │ │ ├── header/ │ │ │ │ ├── authenticated-header.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.module.css │ │ │ │ └── unauthenticated-header.tsx │ │ │ ├── hero-button/ │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── hero-simulation-2.tsx │ │ │ ├── hero-simulation.tsx │ │ │ ├── loading-indicator/ │ │ │ │ ├── index.tsx │ │ │ │ ├── loading-dark.json │ │ │ │ ├── loading-light.json │ │ │ │ └── styles.module.css │ │ │ ├── markdown/ │ │ │ │ ├── index.tsx │ │ │ │ ├── ssr-markdown.tsx │ │ │ │ └── styles.module.css │ │ │ ├── mcp-gateway-features.tsx │ │ │ ├── mcp-marketplace-features.tsx │ │ │ ├── page-container.tsx │ │ │ ├── posthog-provider.tsx │ │ │ ├── project-pricing-plans/ │ │ │ │ ├── index.tsx │ │ │ │ └── project-pricing-plan.tsx │ │ │ ├── public-project.tsx │ │ │ ├── supply-side-cta.tsx │ │ │ ├── theme-provider.tsx │ │ │ └── ui/ │ │ │ ├── avatar.tsx │ │ │ ├── breadcrumb.tsx │ │ │ ├── button.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── tabs.tsx │ │ │ └── tooltip.tsx │ │ ├── icons/ │ │ │ ├── github.tsx │ │ │ ├── twitter.tsx │ │ │ └── typescript.tsx │ │ ├── lib/ │ │ │ ├── auth-copy.ts │ │ │ ├── bootstrap.ts │ │ │ ├── config.ts │ │ │ ├── default-agentic-api-client.ts │ │ │ ├── developer-config.ts │ │ │ ├── global-api.ts │ │ │ ├── notifications.ts │ │ │ ├── query-client.ts │ │ │ ├── utils.test.ts │ │ │ └── utils.ts │ │ └── reset.d.ts │ └── tsconfig.json ├── contributing.md ├── docs/ │ ├── contact.mdx │ ├── docs.json │ ├── index.mdx │ ├── inject.js │ ├── marketplace/ │ │ ├── index.mdx │ │ ├── mcp-clients/ │ │ │ ├── claude-code.mdx │ │ │ ├── claude-desktop.mdx │ │ │ ├── cline.mdx │ │ │ ├── cursor.mdx │ │ │ ├── raycast.mdx │ │ │ ├── trae.mdx │ │ │ ├── vscode.mdx │ │ │ ├── warp.mdx │ │ │ └── windsurf.mdx │ │ └── ts-sdks/ │ │ ├── ai-sdk.mdx │ │ ├── genkit.mdx │ │ ├── langchain.mdx │ │ ├── llamaindex.mdx │ │ ├── mastra.mdx │ │ ├── openai-chat.mdx │ │ └── openai-responses.mdx │ ├── package.json │ └── publishing/ │ ├── config/ │ │ ├── auth.mdx │ │ ├── caching.mdx │ │ ├── examples.mdx │ │ ├── index.mdx │ │ ├── pricing.mdx │ │ ├── rate-limits.mdx │ │ └── tool-config.mdx │ ├── guides/ │ │ ├── existing-mcp-server.mdx │ │ ├── existing-openapi-service.mdx │ │ ├── py-fastmcp.mdx │ │ ├── ts-fastmcp.mdx │ │ ├── ts-mcp-hono.mdx │ │ ├── ts-modelfetch.mdx │ │ ├── ts-openapi-hono.mdx │ │ └── ts-xmcp.mdx │ ├── index.mdx │ ├── origin/ │ │ ├── index.mdx │ │ ├── metadata.mdx │ │ └── security.mdx │ └── quickstart.mdx ├── eslint.config.js ├── examples/ │ ├── mcp-servers/ │ │ ├── context7/ │ │ │ ├── agentic.config.ts │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ ├── github/ │ │ │ ├── agentic.config.ts │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ ├── search/ │ │ │ ├── .dev.vars.example │ │ │ ├── agentic.config.ts │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── env.ts │ │ │ │ └── worker.ts │ │ │ ├── tsconfig.json │ │ │ └── wrangler.jsonc │ │ └── xmcp/ │ │ ├── .gitignore │ │ ├── agentic.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ └── tools/ │ │ │ └── greet.ts │ │ ├── tsconfig.json │ │ ├── vercel.json │ │ ├── xmcp-env.d.ts │ │ └── xmcp.config.ts │ └── ts-sdks/ │ ├── ai-sdk/ │ │ ├── bin/ │ │ │ ├── mcp-filesystem.ts │ │ │ ├── weather-experimental-active-tools.ts │ │ │ └── weather.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── genkit/ │ │ ├── bin/ │ │ │ └── weather.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── langchain/ │ │ ├── bin/ │ │ │ └── weather.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── llamaindex/ │ │ ├── bin/ │ │ │ └── weather.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── mastra/ │ │ ├── bin/ │ │ │ └── weather.ts │ │ ├── package.json │ │ └── tsconfig.json │ └── openai/ │ ├── bin/ │ │ ├── weather-responses.ts │ │ └── weather.ts │ ├── package.json │ └── tsconfig.json ├── fixtures/ │ ├── invalid/ │ │ ├── invalid-metadata-0/ │ │ │ └── agentic.config.ts │ │ ├── invalid-metadata-1/ │ │ │ └── agentic.config.ts │ │ ├── invalid-name-0/ │ │ │ └── agentic.config.ts │ │ ├── invalid-name-1/ │ │ │ └── agentic.config.ts │ │ ├── invalid-name-2/ │ │ │ └── agentic.config.ts │ │ ├── invalid-origin-url-0/ │ │ │ └── agentic.config.ts │ │ ├── invalid-origin-url-1/ │ │ │ └── agentic.config.ts │ │ ├── invalid-origin-url-2/ │ │ │ └── agentic.config.json │ │ ├── invalid-origin-url-3/ │ │ │ └── agentic.config.ts │ │ ├── invalid-slug-0/ │ │ │ └── agentic.config.ts │ │ ├── invalid-slug-1/ │ │ │ └── agentic.config.ts │ │ ├── invalid-slug-2/ │ │ │ └── agentic.config.ts │ │ ├── invalid-slug-3/ │ │ │ └── agentic.config.ts │ │ ├── invalid-slug-4/ │ │ │ └── agentic.config.ts │ │ ├── pricing-base-inconsistent/ │ │ │ └── agentic.config.ts │ │ ├── pricing-custom-inconsistent/ │ │ │ └── agentic.config.ts │ │ ├── pricing-duplicate-0/ │ │ │ └── agentic.config.ts │ │ ├── pricing-duplicate-1/ │ │ │ └── agentic.config.ts │ │ ├── pricing-empty-0/ │ │ │ └── agentic.config.ts │ │ ├── pricing-empty-1/ │ │ │ └── agentic.config.ts │ │ └── pricing-empty-2/ │ │ └── agentic.config.ts │ ├── package.json │ ├── tsconfig.json │ └── valid/ │ ├── basic-mcp/ │ │ ├── agentic.config.ts │ │ ├── package.json │ │ ├── src/ │ │ │ ├── env.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── basic-openapi/ │ │ ├── agentic.config.ts │ │ └── jsonplaceholder.json │ ├── basic-raw-free-json/ │ │ └── agentic.config.json │ ├── basic-raw-free-ts/ │ │ └── agentic.config.ts │ ├── everything-openapi/ │ │ ├── agentic.config.ts │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── exit-hooks.ts │ │ │ ├── lib/ │ │ │ │ └── db.ts │ │ │ ├── routes/ │ │ │ │ ├── custom-cache-control-tool.ts │ │ │ │ ├── custom-rate-limit-approximate-tool.ts │ │ │ │ ├── custom-rate-limit-tool.ts │ │ │ │ ├── disabled-for-free-plan-tool.ts │ │ │ │ ├── disabled-rate-limit-tool.ts │ │ │ │ ├── disabled-tool.ts │ │ │ │ ├── echo-headers.ts │ │ │ │ ├── echo.ts │ │ │ │ ├── get-user.ts │ │ │ │ ├── health-check.ts │ │ │ │ ├── no-cache-cache-control-tool.ts │ │ │ │ ├── no-store-cache-control-tool.ts │ │ │ │ ├── pure.ts │ │ │ │ ├── strict-additional-properties.ts │ │ │ │ └── unpure-marked-pure.ts │ │ │ └── server.ts │ │ └── tsconfig.json │ ├── metadata-0/ │ │ ├── agentic.config.ts │ │ └── readme.md │ ├── metadata-1/ │ │ └── agentic.config.ts │ ├── metadata-2/ │ │ └── agentic.config.ts │ ├── pricing-3-plans/ │ │ └── agentic.config.ts │ ├── pricing-custom-0/ │ │ └── agentic.config.ts │ ├── pricing-freemium/ │ │ └── agentic.config.ts │ ├── pricing-monthly-annual/ │ │ └── agentic.config.ts │ └── pricing-pay-as-you-go/ │ └── agentic.config.ts ├── legacy/ │ ├── .editorconfig │ ├── .github/ │ │ ├── funding.yml │ │ └── workflows/ │ │ ├── main.yml │ │ └── release.yml │ ├── .gitignore │ ├── .husky/ │ │ └── _/ │ │ └── pre-commit │ ├── .npmrc │ ├── .prettierignore │ ├── .vscode/ │ │ └── launch.json │ ├── docs/ │ │ ├── intro.mdx │ │ ├── mint.json │ │ ├── quickstart.mdx │ │ ├── scratch.md │ │ ├── sdks/ │ │ │ ├── genaiscript.mdx │ │ │ └── xsai.mdx │ │ ├── tools/ │ │ │ ├── airtable.mdx │ │ │ ├── apollo.mdx │ │ │ ├── arxiv.mdx │ │ │ ├── bing.mdx │ │ │ ├── brave-search.mdx │ │ │ ├── calculator.mdx │ │ │ ├── clearbit.mdx │ │ │ ├── dexa.mdx │ │ │ ├── diffbot.mdx │ │ │ ├── duck-duck-go.mdx │ │ │ ├── e2b.mdx │ │ │ ├── exa.mdx │ │ │ ├── firecrawl.mdx │ │ │ ├── google-custom-search.mdx │ │ │ ├── google-docs.mdx │ │ │ ├── google-drive.mdx │ │ │ ├── gravatar.mdx │ │ │ ├── hacker-news.mdx │ │ │ ├── hunter.mdx │ │ │ ├── jina.mdx │ │ │ ├── leadmagic.mdx │ │ │ ├── mcp.mdx │ │ │ ├── midjourney.mdx │ │ │ ├── notion.mdx │ │ │ ├── novu.mdx │ │ │ ├── open-meteo.mdx │ │ │ ├── people-data-labs.mdx │ │ │ ├── perigon.mdx │ │ │ ├── polygon.mdx │ │ │ ├── predict-leads.mdx │ │ │ ├── proxycurl.mdx │ │ │ ├── reddit.mdx │ │ │ ├── rocketreach.mdx │ │ │ ├── searxng.mdx │ │ │ ├── serpapi.mdx │ │ │ ├── serper.mdx │ │ │ ├── slack.mdx │ │ │ ├── social-data.mdx │ │ │ ├── tavily.mdx │ │ │ ├── twilio.mdx │ │ │ ├── twitter.mdx │ │ │ ├── typeform.mdx │ │ │ ├── weather.mdx │ │ │ ├── wikidata.mdx │ │ │ ├── wikipedia.mdx │ │ │ ├── wolfram-alpha.mdx │ │ │ ├── youtube.mdx │ │ │ └── zoominfo.mdx │ │ └── usage.mdx │ ├── eslint.config.js │ ├── examples/ │ │ ├── dexter/ │ │ │ ├── bin/ │ │ │ │ ├── code-interpreter.ts │ │ │ │ ├── election-news.ts │ │ │ │ └── weather.ts │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ ├── playground/ │ │ │ ├── bin/ │ │ │ │ └── scratch.ts │ │ │ ├── package.json │ │ │ └── tsconfig.json │ │ └── xsai/ │ │ ├── bin/ │ │ │ └── weather.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── license │ ├── package.json │ ├── packages/ │ │ ├── airtable/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── airtable-client.ts │ │ │ │ ├── airtable.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── apollo/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── apollo-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── arxiv/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── arxiv-client.ts │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ └── tsconfig.json │ │ ├── bing/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── bing-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── brave-search/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── brave-search-client.ts │ │ │ │ ├── brave-search.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── calculator/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── calculator.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── clearbit/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── clearbit-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── diffbot/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── diffbot-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── duck-duck-go/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── duck-duck-go-client.ts │ │ │ │ ├── index.ts │ │ │ │ └── paginate.ts │ │ │ └── tsconfig.json │ │ ├── e2b/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── e2b.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── exa/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── exa-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── firecrawl/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── firecrawl-client.test.ts │ │ │ │ ├── firecrawl-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── github/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── github-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── google-custom-search/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── google-custom-search-client.ts │ │ │ │ ├── index.ts │ │ │ │ └── paginate.ts │ │ │ └── tsconfig.json │ │ ├── google-docs/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── google-docs-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── google-drive/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── google-drive-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── gravatar/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── gravatar-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── hacker-news/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── hacker-news-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── hunter/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── hunter-client.ts │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── jigsawstack/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── integration.test.ts │ │ │ │ ├── jigsawstack-client.ts │ │ │ │ └── tool.test.ts │ │ │ └── tsconfig.json │ │ ├── jina/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── jina-client.ts │ │ │ └── tsconfig.json │ │ ├── leadmagic/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── leadmagic-client.ts │ │ │ └── tsconfig.json │ │ ├── midjourney/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── midjourney-client.ts │ │ │ └── tsconfig.json │ │ ├── notion/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── notion-client.ts │ │ │ │ └── notion.ts │ │ │ └── tsconfig.json │ │ ├── novu/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── novu-client.ts │ │ │ └── tsconfig.json │ │ ├── open-meteo/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── open-meteo-client.ts │ │ │ │ └── open-meteo.ts │ │ │ └── tsconfig.json │ │ ├── openapi-to-ts/ │ │ │ ├── bin/ │ │ │ │ └── openapi-to-ts.ts │ │ │ ├── fixtures/ │ │ │ │ ├── generated/ │ │ │ │ │ ├── firecrawl-client.ts │ │ │ │ │ ├── firecrawl.ts │ │ │ │ │ ├── github-client.ts │ │ │ │ │ ├── github.ts │ │ │ │ │ ├── notion-client.ts │ │ │ │ │ ├── notion.ts │ │ │ │ │ ├── open-meteo-client.ts │ │ │ │ │ ├── open-meteo.ts │ │ │ │ │ ├── pet-store-client.ts │ │ │ │ │ ├── pet-store.ts │ │ │ │ │ ├── petstore-expanded-client.ts │ │ │ │ │ ├── petstore-expanded.ts │ │ │ │ │ ├── security-client.ts │ │ │ │ │ ├── security.ts │ │ │ │ │ ├── tic-tac-toe-client.ts │ │ │ │ │ └── tic-tac-toe.ts │ │ │ │ └── openapi/ │ │ │ │ ├── firecrawl.json │ │ │ │ ├── github.json │ │ │ │ ├── notion.json │ │ │ │ ├── open-meteo.yaml │ │ │ │ ├── pet-store.json │ │ │ │ ├── petstore-expanded.json │ │ │ │ ├── readme.json │ │ │ │ ├── security.json │ │ │ │ ├── stripe.json │ │ │ │ └── tic-tac-toe.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── generate-ts-from-openapi.test.ts.snap │ │ │ │ ├── generate-ts-from-openapi.test.ts │ │ │ │ ├── generate-ts-from-openapi.ts │ │ │ │ ├── index.ts │ │ │ │ ├── openapi-parameters-to-json-schema.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ ├── tsconfig.json │ │ │ └── tsup.config.ts │ │ ├── people-data-labs/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── people-data-labs-client.ts │ │ │ └── tsconfig.json │ │ ├── perigon/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── perigon-client.ts │ │ │ └── tsconfig.json │ │ ├── polygon/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── polygon-client.ts │ │ │ └── tsconfig.json │ │ ├── predict-leads/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── predict-leads-client.ts │ │ │ └── tsconfig.json │ │ ├── proxycurl/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── proxycurl-client.ts │ │ │ └── tsconfig.json │ │ ├── reddit/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── reddit-client.ts │ │ │ └── tsconfig.json │ │ ├── rocketreach/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── rocketreach-client.ts │ │ │ └── tsconfig.json │ │ ├── searxng/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── searxng-client.ts │ │ │ └── tsconfig.json │ │ ├── slack/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── slack-client.ts │ │ │ │ └── slack.ts │ │ │ └── tsconfig.json │ │ ├── social-data/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── social-data-client.ts │ │ │ └── tsconfig.json │ │ ├── stdlib/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ └── index.ts │ │ │ └── tsconfig.json │ │ ├── tavily/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── tavily-client.ts │ │ │ └── tsconfig.json │ │ ├── twilio/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── twilio-client.ts │ │ │ └── tsconfig.json │ │ ├── twitter/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── client.ts │ │ │ │ ├── error.ts │ │ │ │ ├── index.ts │ │ │ │ ├── nango.ts │ │ │ │ ├── twitter-client.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils.ts │ │ │ └── tsconfig.json │ │ ├── typeform/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── typeform-client.ts │ │ │ └── tsconfig.json │ │ ├── weather/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── weather-client.ts │ │ │ └── tsconfig.json │ │ ├── wikidata/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── wikidata-client.ts │ │ │ └── tsconfig.json │ │ ├── wikipedia/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── wikipedia-client.ts │ │ │ └── tsconfig.json │ │ ├── wolfram-alpha/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── wolfram-alpha-client.ts │ │ │ └── tsconfig.json │ │ ├── xsai/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ ├── xsai.test.ts │ │ │ │ └── xsai.ts │ │ │ └── tsconfig.json │ │ ├── youtube/ │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── youtube-client.ts │ │ │ └── tsconfig.json │ │ └── zoominfo/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── zoominfo-client.ts │ │ └── tsconfig.json │ ├── pnpm-workspace.yaml │ ├── readme.md │ ├── tsconfig.json │ ├── tsup.config.ts │ ├── turbo.json │ └── vite.config.ts ├── license ├── package.json ├── packages/ │ ├── api-client/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── agentic-api-client.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── cli/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── cli.ts │ │ │ ├── commands/ │ │ │ │ ├── debug.ts │ │ │ │ ├── deploy.ts │ │ │ │ ├── get.ts │ │ │ │ ├── list.ts │ │ │ │ ├── publish.ts │ │ │ │ ├── signin.ts │ │ │ │ ├── signout.ts │ │ │ │ ├── signup.ts │ │ │ │ └── whoami.ts │ │ │ ├── lib/ │ │ │ │ ├── auth-store.ts │ │ │ │ ├── auth.ts │ │ │ │ ├── commander.d.ts │ │ │ │ ├── env.ts │ │ │ │ ├── exit-hooks.ts │ │ │ │ ├── handle-error.ts │ │ │ │ ├── prompt-for-deployment-version.ts │ │ │ │ ├── reset.d.ts │ │ │ │ ├── resolve-deployment.ts │ │ │ │ └── utils.ts │ │ │ └── types.ts │ │ ├── tsconfig.json │ │ └── tsup.config.ts │ ├── emails/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── emails/ │ │ │ │ └── send-verify-code-email.tsx │ │ │ ├── index.ts │ │ │ └── resend-email-client.tsx │ │ └── tsconfig.json │ ├── hono/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── env.ts │ │ │ ├── error-handler.ts │ │ │ ├── header-utils.ts │ │ │ ├── index.ts │ │ │ ├── json-rpc-errors.ts │ │ │ ├── logger/ │ │ │ │ ├── index.ts │ │ │ │ ├── logger.ts │ │ │ │ └── utils.ts │ │ │ ├── middleware/ │ │ │ │ ├── access-logger.ts │ │ │ │ ├── index.ts │ │ │ │ ├── init.ts │ │ │ │ ├── response-time.ts │ │ │ │ └── unless.ts │ │ │ ├── sentry.test.ts │ │ │ ├── sentry.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── json-schema/ │ │ ├── license │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── coercion.ts │ │ │ ├── deep-compare-strict.ts │ │ │ ├── dereference.ts │ │ │ ├── format.ts │ │ │ ├── index.ts │ │ │ ├── pointer.ts │ │ │ ├── types.ts │ │ │ ├── ucs2-length.ts │ │ │ ├── validate.ts │ │ │ └── validator.ts │ │ ├── test/ │ │ │ ├── coercion.test.ts │ │ │ ├── index.test.ts │ │ │ ├── json-schema-test-suite.ts │ │ │ ├── meta-schema.ts │ │ │ ├── types.ts │ │ │ ├── unsupported.ts │ │ │ └── validator.spec.ts │ │ └── tsconfig.json │ ├── openapi-utils/ │ │ ├── fixtures/ │ │ │ ├── basic.json │ │ │ ├── firecrawl.json │ │ │ ├── mixed.json │ │ │ ├── notion.json │ │ │ ├── open-meteo.yaml │ │ │ ├── pet-store.json │ │ │ ├── petstore-expanded.json │ │ │ ├── readme.json │ │ │ ├── security.json │ │ │ └── tic-tac-toe.json │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── get-tools-from-openapi-spec.test.ts.snap │ │ │ │ └── validate-openapi-spec.test.ts.snap │ │ │ ├── get-tools-from-openapi-spec.test.ts │ │ │ ├── get-tools-from-openapi-spec.ts │ │ │ ├── index.ts │ │ │ ├── openapi-parameters-to-json-schema.ts │ │ │ ├── redocly-config.ts │ │ │ ├── types.ts │ │ │ ├── utils.ts │ │ │ ├── validate-json-schema-object.ts │ │ │ ├── validate-openapi-spec.test.ts │ │ │ └── validate-openapi-spec.ts │ │ └── tsconfig.json │ ├── platform/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── __snapshots__/ │ │ │ │ └── load-agentic-config.test.ts.snap │ │ │ ├── define-config.ts │ │ │ ├── index.ts │ │ │ ├── load-agentic-config.test.ts │ │ │ ├── load-agentic-config.ts │ │ │ ├── origin-adapters/ │ │ │ │ ├── mcp.ts │ │ │ │ └── openapi.ts │ │ │ ├── parse-agentic-project-config.ts │ │ │ ├── resolve-agentic-project-config.ts │ │ │ ├── resolve-metadata-file.ts │ │ │ ├── resolve-metadata-files.ts │ │ │ ├── resolve-metadata.ts │ │ │ ├── resolve-origin-adapter.ts │ │ │ ├── types.ts │ │ │ ├── validate-agentic-project-config.ts │ │ │ ├── validate-metadata-file.ts │ │ │ ├── validate-metadata-files.ts │ │ │ ├── validate-origin-adapter.ts │ │ │ ├── validate-origin-url.ts │ │ │ ├── validate-pricing.ts │ │ │ └── validate-tools.ts │ │ └── tsconfig.json │ ├── platform-core/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── __snapshots__/ │ │ │ │ └── utils.test.ts.snap │ │ │ ├── errors.ts │ │ │ ├── hash-object.test.ts │ │ │ ├── hash-object.ts │ │ │ ├── index.ts │ │ │ ├── rate-limit-headers.ts │ │ │ ├── types.test.ts │ │ │ ├── types.ts │ │ │ ├── utils.test.ts │ │ │ └── utils.ts │ │ └── tsconfig.json │ ├── tool-client/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── agentic-tool-client.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── types/ │ │ ├── bin/ │ │ │ └── generate-project-config-json-schema.ts │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── __snapshots__/ │ │ │ │ └── rate-limit.test.ts.snap │ │ │ ├── agentic-project-config.test.ts │ │ │ ├── agentic-project-config.ts │ │ │ ├── auth-subjects.ts │ │ │ ├── index.ts │ │ │ ├── mcp.ts │ │ │ ├── openapi.d.ts │ │ │ ├── origin-adapter.ts │ │ │ ├── pricing.test.ts │ │ │ ├── pricing.ts │ │ │ ├── rate-limit.test.ts │ │ │ ├── rate-limit.ts │ │ │ ├── temp │ │ │ ├── tools.ts │ │ │ ├── types.ts │ │ │ ├── utils.ts │ │ │ └── webhook.ts │ │ └── tsconfig.json │ └── validators/ │ ├── package.json │ ├── readme.md │ ├── src/ │ │ ├── __snapshots__/ │ │ │ ├── parse-deployment-identifier.test.ts.snap │ │ │ ├── parse-project-identifier.test.ts.snap │ │ │ └── parse-tool-identifier.test.ts.snap │ │ ├── index.ts │ │ ├── namespace-blacklist.ts │ │ ├── parse-deployment-identifier.test.ts │ │ ├── parse-deployment-identifier.ts │ │ ├── parse-project-identifier.test.ts │ │ ├── parse-project-identifier.ts │ │ ├── parse-tool-identifier.test.ts │ │ ├── parse-tool-identifier.ts │ │ ├── tool-name-blacklist.ts │ │ ├── types.ts │ │ ├── utils.ts │ │ ├── validators.test.ts │ │ └── validators.ts │ └── tsconfig.json ├── pnpm-workspace.yaml ├── readme.md ├── stdlib/ │ ├── ai-sdk/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── ai-sdk.test.ts │ │ │ ├── ai-sdk.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── core/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── parse-structured-output.test.ts.snap │ │ │ │ └── utils.test.ts.snap │ │ │ ├── _utils.ts │ │ │ ├── ai-function-set.test.ts │ │ │ ├── ai-function-set.ts │ │ │ ├── assert.ts │ │ │ ├── create-ai-function.test.ts │ │ │ ├── create-ai-function.ts │ │ │ ├── echo.ts │ │ │ ├── errors.ts │ │ │ ├── fns.ts │ │ │ ├── index.ts │ │ │ ├── message.test.ts │ │ │ ├── message.ts │ │ │ ├── parse-structured-output.test.ts │ │ │ ├── parse-structured-output.ts │ │ │ ├── reset.d.ts │ │ │ ├── schema.test.ts │ │ │ ├── schema.ts │ │ │ ├── types.ts │ │ │ ├── utils.test.ts │ │ │ ├── utils.ts │ │ │ ├── zod-to-json-schema.test.ts │ │ │ └── zod-to-json-schema.ts │ │ └── tsconfig.json │ ├── genkit/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── genkit.test.ts │ │ │ ├── genkit.ts │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ └── vitest.config.ts │ ├── langchain/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── langchain.test.ts │ │ │ └── langchain.ts │ │ └── tsconfig.json │ ├── license │ ├── llamaindex/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── llamaindex.test.ts │ │ │ └── llamaindex.ts │ │ └── tsconfig.json │ ├── mastra/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── mastra.test.ts │ │ │ └── mastra.ts │ │ └── tsconfig.json │ ├── mcp/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── mcp-tools.ts │ │ │ ├── paginate.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── serpapi/ │ │ ├── package.json │ │ ├── readme.md │ │ ├── src/ │ │ │ ├── index.ts │ │ │ └── serpapi-client.ts │ │ └── tsconfig.json │ └── serper/ │ ├── package.json │ ├── readme.md │ ├── src/ │ │ ├── index.ts │ │ └── serper-client.ts │ └── tsconfig.json ├── todo.md ├── tsconfig.json ├── tsup.config.ts └── turbo.json
Showing preview only (589K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (6080 symbols across 444 files)
FILE: apps/api/src/api-v1/auth/github-callback.ts
function registerV1GitHubOAuthCallback (line 7) | function registerV1GitHubOAuthCallback(
FILE: apps/api/src/api-v1/auth/github-exchange.ts
function registerV1GitHubOAuthExchange (line 54) | function registerV1GitHubOAuthExchange(
FILE: apps/api/src/api-v1/auth/github-init.ts
function registerV1GitHubOAuthInitFlow (line 38) | function registerV1GitHubOAuthInitFlow(
FILE: apps/api/src/api-v1/auth/sign-in-with-password.ts
function registerV1SignInWithPassword (line 52) | function registerV1SignInWithPassword(app: OpenAPIHono<DefaultHonoEnv>) {
function trySignIn (line 56) | async function trySignIn(
FILE: apps/api/src/api-v1/auth/sign-up-with-password.ts
function registerV1SignUpWithPassword (line 55) | function registerV1SignUpWithPassword(app: OpenAPIHono<DefaultHonoEnv>) {
FILE: apps/api/src/api-v1/consumers/admin-activate-consumer.ts
function registerV1AdminActivateConsumer (line 45) | function registerV1AdminActivateConsumer(
FILE: apps/api/src/api-v1/consumers/admin-get-consumer-by-api-key.ts
function registerV1AdminGetConsumerByApiKey (line 43) | function registerV1AdminGetConsumerByApiKey(
FILE: apps/api/src/api-v1/consumers/create-billing-portal-session.ts
function registerV1CreateBillingPortalSession (line 41) | function registerV1CreateBillingPortalSession(
FILE: apps/api/src/api-v1/consumers/create-consumer-billing-portal-session.ts
function registerV1CreateConsumerBillingPortalSession (line 47) | function registerV1CreateConsumerBillingPortalSession(
FILE: apps/api/src/api-v1/consumers/create-consumer-checkout-session.ts
function registerV1CreateConsumerCheckoutSession (line 55) | function registerV1CreateConsumerCheckoutSession(
FILE: apps/api/src/api-v1/consumers/create-consumer.ts
function registerV1CreateConsumer (line 49) | function registerV1CreateConsumer(
FILE: apps/api/src/api-v1/consumers/get-consumer-by-project-identifier.ts
function registerV1GetConsumerByProjectIdentifier (line 41) | function registerV1GetConsumerByProjectIdentifier(
FILE: apps/api/src/api-v1/consumers/get-consumer.ts
function registerV1GetConsumer (line 40) | function registerV1GetConsumer(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/consumers/list-consumers.ts
function registerV1ListConsumers (line 39) | function registerV1ListConsumers(
FILE: apps/api/src/api-v1/consumers/list-project-consumers.ts
function registerV1ListConsumersForProject (line 41) | function registerV1ListConsumersForProject(
FILE: apps/api/src/api-v1/consumers/refresh-consumer-api-key.ts
function registerV1RefreshConsumerApiKey (line 40) | function registerV1RefreshConsumerApiKey(
FILE: apps/api/src/api-v1/consumers/update-consumer.ts
function registerV1UpdateConsumer (line 52) | function registerV1UpdateConsumer(
FILE: apps/api/src/api-v1/consumers/utils.ts
function setAdminCacheControlForConsumer (line 6) | function setAdminCacheControlForConsumer(
FILE: apps/api/src/api-v1/deployments/admin-get-deployment-by-identifier.ts
function registerV1AdminGetDeploymentByIdentifier (line 44) | function registerV1AdminGetDeploymentByIdentifier(
FILE: apps/api/src/api-v1/deployments/create-deployment.ts
function registerV1CreateDeployment (line 59) | function registerV1CreateDeployment(
FILE: apps/api/src/api-v1/deployments/get-deployment-by-identifier.ts
function registerV1GetDeploymentByIdentifier (line 41) | function registerV1GetDeploymentByIdentifier(
FILE: apps/api/src/api-v1/deployments/get-deployment.ts
function registerV1GetDeployment (line 41) | function registerV1GetDeployment(
FILE: apps/api/src/api-v1/deployments/get-public-deployment-by-identifier.ts
function registerV1GetPublicDeploymentByIdentifier (line 42) | function registerV1GetPublicDeploymentByIdentifier(
FILE: apps/api/src/api-v1/deployments/list-deployments.ts
function registerV1ListDeployments (line 40) | function registerV1ListDeployments(
FILE: apps/api/src/api-v1/deployments/publish-deployment.ts
function registerV1PublishDeployment (line 49) | function registerV1PublishDeployment(
FILE: apps/api/src/api-v1/deployments/update-deployment.ts
function registerV1UpdateDeployment (line 48) | function registerV1UpdateDeployment(
FILE: apps/api/src/api-v1/health-check.ts
function registerHealthCheck (line 24) | function registerHealthCheck(app: HonoApp) {
FILE: apps/api/src/api-v1/projects/create-project.ts
function registerV1CreateProject (line 44) | function registerV1CreateProject(
FILE: apps/api/src/api-v1/projects/get-project-by-identifier.ts
function registerV1GetProjectByIdentifier (line 40) | function registerV1GetProjectByIdentifier(
FILE: apps/api/src/api-v1/projects/get-project.ts
function registerV1GetProject (line 40) | function registerV1GetProject(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/projects/get-public-project-by-identifier.ts
function registerV1GetPublicProjectByIdentifier (line 42) | function registerV1GetPublicProjectByIdentifier(
FILE: apps/api/src/api-v1/projects/get-public-project.ts
function registerV1GetPublicProject (line 42) | function registerV1GetPublicProject(app: OpenAPIHono<DefaultHonoEnv>) {
FILE: apps/api/src/api-v1/projects/list-projects.ts
function registerV1ListProjects (line 37) | function registerV1ListProjects(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/projects/list-public-projects.ts
function registerV1ListPublicProjects (line 50) | function registerV1ListPublicProjects(app: OpenAPIHono<DefaultHonoEnv>) {
FILE: apps/api/src/api-v1/projects/update-project.ts
function registerV1UpdateProject (line 47) | function registerV1UpdateProject(
FILE: apps/api/src/api-v1/storage/get-signed-storage-upload-url.ts
function registerV1GetSignedStorageUploadUrl (line 68) | function registerV1GetSignedStorageUploadUrl(
FILE: apps/api/src/api-v1/teams/create-team.ts
function registerV1CreateTeam (line 43) | function registerV1CreateTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/teams/delete-team.ts
function registerV1DeleteTeam (line 39) | function registerV1DeleteTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/teams/get-team.ts
function registerV1GetTeam (line 39) | function registerV1GetTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/teams/list-teams.ts
function registerV1ListTeams (line 34) | function registerV1ListTeams(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/teams/members/create-team-member.ts
function registerV1CreateTeamMember (line 49) | function registerV1CreateTeamMember(
FILE: apps/api/src/api-v1/teams/members/delete-team-member.ts
function registerV1DeleteTeamMember (line 40) | function registerV1DeleteTeamMember(
FILE: apps/api/src/api-v1/teams/members/update-team-member.ts
function registerV1UpdateTeamMember (line 48) | function registerV1UpdateTeamMember(
FILE: apps/api/src/api-v1/teams/update-team.ts
function registerV1UpdateTeam (line 47) | function registerV1UpdateTeam(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/users/get-user.ts
function registerV1GetUser (line 41) | function registerV1GetUser(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/users/update-user.ts
function registerV1UpdateUser (line 47) | function registerV1UpdateUser(app: OpenAPIHono<AuthenticatedHonoEnv>) {
FILE: apps/api/src/api-v1/webhooks/stripe-webhook.ts
function registerV1StripeWebhook (line 43) | function registerV1StripeWebhook(app: HonoApp) {
function syncConsumerWithStripeSubscription (line 258) | async function syncConsumerWithStripeSubscription({
FILE: apps/api/src/db/index.ts
type PostgresClient (line 8) | type PostgresClient = ReturnType<typeof postgres>
FILE: apps/api/src/db/schema/common.ts
type ModelType (line 39) | type ModelType = keyof typeof idPrefixMap
function createIdForModel (line 41) | function createIdForModel(modelType: ModelType): string {
function getPrimaryId (line 51) | function getPrimaryId(modelType: ModelType) {
function id (line 72) | function id<U extends string, T extends Readonly<[U, ...U[]]>>(
function stripeId (line 85) | function stripeId<U extends string, T extends Readonly<[U, ...U[]]>>(
function projectIdentifier (line 94) | function projectIdentifier<
function deploymentIdentifier (line 106) | function deploymentIdentifier<
function username (line 115) | function username<U extends string, T extends Readonly<[U, ...U[]]>>(
function teamSlug (line 121) | function teamSlug<U extends string, T extends Readonly<[U, ...U[]]>>(
function projectNamespace (line 127) | function projectNamespace<
function projectSlug (line 136) | function projectSlug<U extends string, T extends Readonly<[U, ...U[]]>>(
function projectName (line 142) | function projectName<U extends string, T extends Readonly<[U, ...U[]]>>(
function timestamp (line 151) | function timestamp<
FILE: apps/api/src/db/schemas.ts
function getIdSchemaForModelType (line 17) | function getIdSchemaForModelType(modelType: ModelType) {
type ProjectRelationFields (line 108) | type ProjectRelationFields = keyof ReturnType<
type DeploymentRelationFields (line 118) | type DeploymentRelationFields = keyof ReturnType<
type ConsumerRelationFields (line 124) | type ConsumerRelationFields = keyof ReturnType<
FILE: apps/api/src/db/types.test.ts
type UserKeys (line 16) | type UserKeys = Exclude<keyof User & keyof RawUser, 'authProviders'>
type LogEntryKeys (line 17) | type LogEntryKeys = keyof RawLogEntry & keyof LogEntry
type ConsumerKeys (line 18) | type ConsumerKeys = keyof RawConsumer & keyof Consumer
type TODOFixedConsumer (line 20) | type TODOFixedConsumer = Simplify<
FILE: apps/api/src/db/types.ts
type Tables (line 12) | type Tables = ExtractTablesWithRelations<typeof schema>
type User (line 14) | type User = z.infer<typeof schema.userSelectSchema>
type RawUser (line 15) | type RawUser = InferSelectModel<typeof schema.users>
type Team (line 17) | type Team = z.infer<typeof schema.teamSelectSchema>
type TeamWithMembers (line 18) | type TeamWithMembers = BuildQueryResult<
type RawTeam (line 23) | type RawTeam = InferSelectModel<typeof schema.teams>
type TeamMember (line 25) | type TeamMember = z.infer<typeof schema.teamMemberSelectSchema>
type TeamMemberWithTeam (line 26) | type TeamMemberWithTeam = BuildQueryResult<
type RawTeamMember (line 31) | type RawTeamMember = InferSelectModel<typeof schema.teamMembers>
type Project (line 33) | type Project = z.infer<typeof schema.projectSelectSchema>
type ProjectWithLastPublishedDeployment (line 34) | type ProjectWithLastPublishedDeployment = BuildQueryResult<
type RawProject (line 39) | type RawProject = Simplify<
type Deployment (line 46) | type Deployment = z.infer<typeof schema.deploymentSelectSchema>
type DeploymentWithProject (line 47) | type DeploymentWithProject = BuildQueryResult<
type RawDeployment (line 52) | type RawDeployment = Simplify<
type Consumer (line 58) | type Consumer = z.infer<typeof schema.consumerSelectSchema>
type ConsumerWithProjectAndDeployment (line 59) | type ConsumerWithProjectAndDeployment = BuildQueryResult<
type RawConsumer (line 64) | type RawConsumer = Simplify<
type RawConsumerUpdate (line 71) | type RawConsumerUpdate = Partial<
type LogEntry (line 78) | type LogEntry = z.infer<typeof schema.logEntrySelectSchema>
type RawLogEntry (line 79) | type RawLogEntry = InferSelectModel<typeof schema.logEntries>
type Account (line 81) | type Account = z.infer<typeof schema.accountSelectSchema>
type RawAccount (line 82) | type RawAccount = InferSelectModel<typeof schema.accounts>
FILE: apps/api/src/db/utils.ts
function getPricingPlanLineItemHashForStripePrice (line 13) | async function getPricingPlanLineItemHashForStripePrice({
function getStripePriceIdForPricingPlanLineItem (line 43) | async function getStripePriceIdForPricingPlanLineItem({
FILE: apps/api/src/lib/acl-admin.ts
function aclAdmin (line 6) | async function aclAdmin(ctx: AuthenticatedHonoContext) {
FILE: apps/api/src/lib/acl-public-project.ts
function aclPublicProject (line 5) | function aclPublicProject(
FILE: apps/api/src/lib/acl-team-admin.ts
function aclTeamAdmin (line 8) | async function aclTeamAdmin(
FILE: apps/api/src/lib/acl-team-member.ts
function aclTeamMember (line 8) | async function aclTeamMember(
FILE: apps/api/src/lib/acl.ts
function acl (line 6) | async function acl<
FILE: apps/api/src/lib/auth/auth-storage.ts
type AuthStorageAdapter (line 1) | interface AuthStorageAdapter {
constant SEPERATOR (line 8) | const SEPERATOR = String.fromCodePoint(0x1f)
function joinKey (line 10) | function joinKey(key: string[]) {
function splitKey (line 14) | function splitKey(key: string) {
function encode (line 19) | function encode(key: string[]) {
function get (line 22) | function get<T>(adapter: AuthStorageAdapter, key: string[]) {
function set (line 26) | function set(
function remove (line 36) | function remove(adapter: AuthStorageAdapter, key: string[]) {
function scan (line 40) | function scan<T>(
FILE: apps/api/src/lib/auth/create-auth-token.ts
function createAuthToken (line 6) | async function createAuthToken(user: RawUser): Promise<string> {
FILE: apps/api/src/lib/auth/drizzle-auth-storage.ts
function DrizzleAuthStorage (line 5) | function DrizzleAuthStorage(): AuthStorageAdapter {
FILE: apps/api/src/lib/auth/upsert-or-link-user-account.ts
function upsertOrLinkUserAccount (line 18) | async function upsertOrLinkUserAccount({
FILE: apps/api/src/lib/billing/create-stripe-checkout-session.ts
function createStripeCheckoutSession (line 16) | async function createStripeCheckoutSession(
FILE: apps/api/src/lib/billing/upsert-stripe-connect-customer.ts
function upsertStripeConnectCustomer (line 9) | async function upsertStripeConnectCustomer({
FILE: apps/api/src/lib/billing/upsert-stripe-customer.ts
function upsertStripeCustomer (line 9) | async function upsertStripeCustomer(
FILE: apps/api/src/lib/billing/upsert-stripe-pricing-resources.ts
function upsertStripePricingResources (line 38) | async function upsertStripePricingResources({
FILE: apps/api/src/lib/billing/upsert-stripe-subscription.ts
function upsertStripeSubscription (line 20) | async function upsertStripeSubscription(
FILE: apps/api/src/lib/cache-control.ts
type PublicCacheControlLevels (line 3) | type PublicCacheControlLevels =
function setPublicCacheControl (line 26) | function setPublicCacheControl(
FILE: apps/api/src/lib/consumers/upsert-consumer-stripe-checkout.ts
function upsertConsumerStripeCheckout (line 22) | async function upsertConsumerStripeCheckout(
FILE: apps/api/src/lib/consumers/upsert-consumer.ts
function upsertConsumer (line 14) | async function upsertConsumer(
FILE: apps/api/src/lib/consumers/utils.ts
function setConsumerStripeSubscriptionStatus (line 11) | function setConsumerStripeSubscriptionStatus(
FILE: apps/api/src/lib/create-avatar.ts
function createAvatar (line 10) | function createAvatar(seed: string): string {
FILE: apps/api/src/lib/create-consumer-api-key.ts
function createConsumerApiKey (line 3) | async function createConsumerApiKey(): Promise<string> {
FILE: apps/api/src/lib/deployments/get-deployment-by-id.ts
function getDeploymentById (line 12) | async function getDeploymentById({
FILE: apps/api/src/lib/deployments/normalize-deployment-version.ts
function normalizeDeploymentVersion (line 6) | function normalizeDeploymentVersion({
FILE: apps/api/src/lib/deployments/publish-deployment.ts
function publishDeployment (line 9) | async function publishDeployment(
FILE: apps/api/src/lib/deployments/try-get-deployment-by-identifier.ts
function tryGetDeploymentByIdentifier (line 25) | async function tryGetDeploymentByIdentifier(
FILE: apps/api/src/lib/ensure-auth-user.ts
function ensureAuthUser (line 6) | async function ensureAuthUser(
FILE: apps/api/src/lib/ensure-unique-namespace.ts
function ensureUniqueNamespace (line 5) | async function ensureUniqueNamespace(
function getUniqueNamespace (line 28) | async function getUniqueNamespace(
FILE: apps/api/src/lib/env.ts
type RawEnv (line 47) | type RawEnv = z.infer<typeof envSchema>
function parseEnv (line 49) | function parseEnv(inputEnv: Record<string, unknown>) {
type Env (line 76) | type Env = Simplify<ReturnType<typeof parseEnv>>
FILE: apps/api/src/lib/exit-hooks.ts
function initExitHooks (line 10) | function initExitHooks({
FILE: apps/api/src/lib/external/github.ts
constant USER_AGENT (line 6) | const USER_AGENT = 'agentic-platform'
type GitHubUserTokenResponse (line 13) | interface GitHubUserTokenResponse {
function getGitHubClient (line 53) | function getGitHubClient({
function exchangeGitHubOAuthCodeForAccessToken (line 61) | async function exchangeGitHubOAuthCodeForAccessToken({
FILE: apps/api/src/lib/openapi-utils.ts
function registerOpenAPIErrorResponses (line 59) | function registerOpenAPIErrorResponses(app: HonoApp) {
function defaultHook (line 91) | function defaultHook(result: any, ctx: any) {
FILE: apps/api/src/lib/projects/try-get-project-by-identifier.ts
function tryGetProjectByIdentifier (line 14) | async function tryGetProjectByIdentifier(
FILE: apps/api/src/lib/storage.ts
constant STORAGE_DOMAIN (line 21) | const STORAGE_DOMAIN = 'storage.agentic.so'
function getStorageObject (line 51) | async function getStorageObject(
function putStorageObject (line 58) | async function putStorageObject(
function deleteStorageObject (line 68) | async function deleteStorageObject(
function getStorageObjectInternalUrl (line 77) | function getStorageObjectInternalUrl(key: string) {
function getStorageObjectPublicUrl (line 81) | function getStorageObjectPublicUrl(key: string) {
function getStorageSignedUploadUrl (line 89) | async function getStorageSignedUploadUrl(
function uploadFileUrlToStorage (line 104) | async function uploadFileUrlToStorage(
FILE: apps/api/src/lib/types.ts
type AuthenticatedHonoVariables (line 14) | type AuthenticatedHonoVariables = Simplify<
type AuthenticatedHonoBindings (line 22) | type AuthenticatedHonoBindings = Simplify<DefaultHonoBindings & Env>
type AuthenticatedHonoEnv (line 24) | type AuthenticatedHonoEnv = {
type AuthenticatedHonoContext (line 29) | type AuthenticatedHonoContext = Context<AuthenticatedHonoEnv>
type HonoApp (line 31) | type HonoApp = OpenAPIHono<DefaultHonoEnv>
type AuthenticatedHonoApp (line 32) | type AuthenticatedHonoApp = OpenAPIHono<AuthenticatedHonoEnv>
FILE: apps/api/src/lib/utils.ts
function timingSafeCompare (line 3) | function timingSafeCompare(a: string, b: string): boolean {
FILE: apps/api/src/oauth-redirect.ts
function registerOAuthRedirect (line 5) | function registerOAuthRedirect(app: OpenAPIHono<DefaultHonoEnv>) {
FILE: apps/e2e/bin/deploy-fixtures.ts
function main (line 5) | async function main() {
FILE: apps/e2e/bin/publish-fixtures.ts
function main (line 6) | async function main() {
FILE: apps/e2e/bin/seed-db.ts
function main (line 13) | async function main() {
FILE: apps/e2e/src/deploy-projects.ts
function deployProjects (line 5) | async function deployProjects(
FILE: apps/e2e/src/http-fixtures.ts
type E2ETestFixture (line 3) | type E2ETestFixture = {
type E2ETestFixtureSuite (line 37) | type E2ETestFixtureSuite = {
FILE: apps/e2e/src/mcp-fixtures.ts
type MCPE2ETestFixture (line 3) | type MCPE2ETestFixture = {
type MCPE2ETestFixtureSuite (line 36) | type MCPE2ETestFixtureSuite = {
FILE: apps/e2e/src/publish-deployments.ts
function publishDeployments (line 7) | async function publishDeployments(
FILE: apps/gateway/src/app.ts
function updateResponse (line 142) | function updateResponse(
FILE: apps/gateway/src/lib/agentic-client.ts
function createAgenticClient (line 8) | function createAgenticClient({
FILE: apps/gateway/src/lib/cf-validate-json-schema.ts
function cfValidateJsonSchema (line 16) | function cfValidateJsonSchema<T = unknown>({
FILE: apps/gateway/src/lib/create-http-request-for-openapi-operation.ts
function createHttpRequestForOpenAPIOperation (line 10) | async function createHttpRequestForOpenAPIOperation({
FILE: apps/gateway/src/lib/create-http-response-from-mcp-tool-call-response.ts
function createHttpResponseFromMcpToolCallResponse (line 7) | async function createHttpResponseFromMcpToolCallResponse(
FILE: apps/gateway/src/lib/durable-mcp-client.ts
type DurableMcpClientInfo (line 10) | type DurableMcpClientInfo = {
class DurableMcpClientBase (line 22) | class DurableMcpClientBase extends DurableObject<RawEnv> {
method init (line 26) | async init(mcpClientInfo: DurableMcpClientInfo) {
method isInitialized (line 47) | async isInitialized(): Promise<boolean> {
method ensureClientConnection (line 51) | async ensureClientConnection(mcpClientInfo?: DurableMcpClientInfo) {
method callTool (line 77) | async callTool({
FILE: apps/gateway/src/lib/durable-mcp-server.ts
class DurableMcpServerBase (line 23) | class DurableMcpServerBase extends McpAgent<
method constructor (line 32) | public constructor(state: DurableObjectState, env: RawEnv) {
method init (line 36) | override async init() {
FILE: apps/gateway/src/lib/env.ts
type RawEnv (line 37) | type RawEnv = z.infer<typeof envSchema>
function isDurableObjectNamespace (line 39) | function isDurableObjectNamespace(
function isAnalyticsEngineDataset (line 52) | function isAnalyticsEngineDataset(ae: unknown): ae is AnalyticsEngineDat...
function parseEnv (line 56) | function parseEnv(inputEnv: Record<string, unknown>) {
type Env (line 79) | type Env = Simplify<ReturnType<typeof parseEnv>>
FILE: apps/gateway/src/lib/external/stripe.ts
function createStripe (line 5) | function createStripe(env: RawEnv): Stripe {
FILE: apps/gateway/src/lib/fetch-cache.ts
function fetchCache (line 3) | async function fetchCache({
FILE: apps/gateway/src/lib/get-admin-consumer.ts
function getAdminConsumer (line 5) | async function getAdminConsumer(
FILE: apps/gateway/src/lib/get-admin-deployment.ts
function getAdminDeployment (line 7) | async function getAdminDeployment(
FILE: apps/gateway/src/lib/get-request-cache-key.ts
constant MAX_POST_BODY_SIZE_BYTES (line 8) | const MAX_POST_BODY_SIZE_BYTES = 10_000
function getRequestCacheKey (line 10) | async function getRequestCacheKey(
function normalizeRequestHeaders (line 96) | function normalizeRequestHeaders(request: Request) {
FILE: apps/gateway/src/lib/get-tool-args-from-request.ts
function getToolArgsFromRequest (line 7) | async function getToolArgsFromRequest(
FILE: apps/gateway/src/lib/get-tool.ts
function getTool (line 4) | function getTool({
FILE: apps/gateway/src/lib/handle-mcp-tool-call-error.ts
function handleMcpToolCallError (line 17) | function handleMcpToolCallError(
FILE: apps/gateway/src/lib/normalize-url.ts
function normalizeUrl (line 9) | function normalizeUrl(url: string): string {
FILE: apps/gateway/src/lib/rate-limits/durable-rate-limiter.ts
class DurableRateLimiterBase (line 12) | class DurableRateLimiterBase extends DurableObject<RawEnv> {
method update (line 13) | async update({
method reset (line 57) | async reset() {
method alarm (line 62) | override async alarm() {
FILE: apps/gateway/src/lib/rate-limits/enforce-rate-limit.ts
function enforceRateLimit (line 20) | async function enforceRateLimit({
FILE: apps/gateway/src/lib/record-tool-call-usage.ts
function recordToolCallUsage (line 33) | function recordToolCallUsage({
FILE: apps/gateway/src/lib/resolve-edge-request.ts
function resolveEdgeRequest (line 17) | async function resolveEdgeRequest(
function resolveConsumerForEdgeRequest (line 45) | async function resolveConsumerForEdgeRequest(
FILE: apps/gateway/src/lib/resolve-http-edge-request.ts
function resolveHttpEdgeRequest (line 17) | async function resolveHttpEdgeRequest(
FILE: apps/gateway/src/lib/resolve-mcp-edge-request.ts
function resolveMcpEdgeRequest (line 10) | async function resolveMcpEdgeRequest(
FILE: apps/gateway/src/lib/resolve-origin-tool-call.ts
function resolveOriginToolCall (line 33) | async function resolveOriginToolCall({
FILE: apps/gateway/src/lib/transform-http-response-to-mcp-tool-call-response.ts
function transformHttpResponseToMcpToolCallResponse (line 8) | async function transformHttpResponseToMcpToolCallResponse({
FILE: apps/gateway/src/lib/types.ts
type McpToolCallResponse (line 25) | type McpToolCallResponse = Simplify<
type AdminConsumer (line 29) | type AdminConsumer = Simplify<
type GatewayHonoVariables (line 35) | type GatewayHonoVariables = Simplify<
type GatewayHonoBindings (line 44) | type GatewayHonoBindings = Simplify<DefaultHonoBindings & Env>
type GatewayHonoEnv (line 46) | type GatewayHonoEnv = {
type GatewayHonoContext (line 51) | type GatewayHonoContext = Context<GatewayHonoEnv>
type ToolCallArgs (line 54) | type ToolCallArgs = Record<string, any>
type RateLimitState (line 56) | type RateLimitState = {
type RateLimitCache (line 61) | type RateLimitCache = Map<string, RateLimitState>
type CacheStatus (line 63) | type CacheStatus = 'HIT' | 'MISS' | 'BYPASS' | 'DYNAMIC'
type EdgeRequestMode (line 64) | type EdgeRequestMode = 'MCP' | 'HTTP'
type WaitUntil (line 66) | type WaitUntil = (promise: Promise<any>) => void
type ResolvedEdgeRequest (line 68) | interface ResolvedEdgeRequest extends Record<string, unknown> {
type ResolvedMcpEdgeRequest (line 76) | interface ResolvedMcpEdgeRequest extends ResolvedEdgeRequest {
type ResolvedHttpEdgeRequest (line 82) | interface ResolvedHttpEdgeRequest extends ResolvedEdgeRequest {
type ResolvedOriginToolCallResult (line 91) | type ResolvedOriginToolCallResult = {
FILE: apps/gateway/src/lib/update-origin-request.ts
function updateOriginRequest (line 8) | function updateOriginRequest(
FILE: apps/gateway/src/lib/utils.ts
function isRequestPubliclyCacheable (line 4) | function isRequestPubliclyCacheable(request: Request): boolean {
function isResponsePubliclyCacheable (line 13) | function isResponsePubliclyCacheable(response: Response): boolean {
function isCacheControlPubliclyCacheable (line 22) | function isCacheControlPubliclyCacheable(
function agenticMcpMetadataFieldComparator (line 56) | function agenticMcpMetadataFieldComparator(a: string, b: string): number {
function createAgenticMcpMetadata (line 66) | function createAgenticMcpMetadata(
FILE: apps/gateway/src/worker.ts
method fetch (line 21) | async fetch(
FILE: apps/web/src/app/about/page.tsx
function AboutPage (line 9) | function AboutPage() {
FILE: apps/web/src/app/app/app-dashboard.tsx
function AppDashboard (line 5) | function AppDashboard() {
FILE: apps/web/src/app/app/consumers/[consumerId]/app-consumer-index.tsx
function AppConsumerIndex (line 16) | function AppConsumerIndex({ consumerId }: { consumerId: string }) {
FILE: apps/web/src/app/app/consumers/[consumerId]/page.tsx
function AppConsumerIndexPage (line 3) | async function AppConsumerIndexPage({
FILE: apps/web/src/app/app/consumers/app-consumers-index.tsx
function AppConsumersIndex (line 12) | function AppConsumersIndex() {
FILE: apps/web/src/app/app/consumers/page.tsx
function AppConsumersIndexPage (line 3) | function AppConsumersIndexPage() {
FILE: apps/web/src/app/app/page.tsx
function AppIndexPage (line 3) | function AppIndexPage() {
FILE: apps/web/src/app/app/projects/[namespace]/[project-slug]/app-project-index.tsx
function AppProjectIndex (line 8) | function AppProjectIndex({
FILE: apps/web/src/app/app/projects/[namespace]/[project-slug]/page.tsx
function AppProjectIndexPage (line 8) | async function AppProjectIndexPage({
FILE: apps/web/src/app/app/projects/app-projects-index.tsx
function AppProjectsIndex (line 4) | function AppProjectsIndex() {
FILE: apps/web/src/app/app/projects/page.tsx
function AppProjectsIndexPage (line 3) | function AppProjectsIndexPage() {
FILE: apps/web/src/app/auth/[provider]/success/oauth-success-callback.tsx
function OAuthSuccessCallback (line 14) | function OAuthSuccessCallback({
FILE: apps/web/src/app/auth/[provider]/success/page.tsx
function Page (line 6) | async function Page({
FILE: apps/web/src/app/contact/page.tsx
function AboutPage (line 10) | function AboutPage() {
FILE: apps/web/src/app/layout.tsx
function RootLayout (line 41) | function RootLayout({
FILE: apps/web/src/app/login/login-form.tsx
function LoginForm (line 22) | function LoginForm() {
FILE: apps/web/src/app/login/page.tsx
function Page (line 7) | function Page() {
FILE: apps/web/src/app/logout/page.tsx
function LogoutPage (line 7) | function LogoutPage() {
FILE: apps/web/src/app/marketplace/marketplace-index.tsx
function MarketplaceIndex (line 13) | function MarketplaceIndex({ limit }: { limit: number }) {
FILE: apps/web/src/app/marketplace/page.tsx
function MarketplaceIndexPage (line 11) | async function MarketplaceIndexPage() {
FILE: apps/web/src/app/marketplace/projects/[namespace]/[project-slug]/marketplace-nav.tsx
function MarketplacePublicProjectDetailNav (line 10) | function MarketplacePublicProjectDetailNav({
FILE: apps/web/src/app/marketplace/projects/[namespace]/[project-slug]/marketplace-public-project-detail.tsx
function MarketplacePublicProjectDetail (line 39) | function MarketplacePublicProjectDetail({
function ProjectHeader (line 555) | function ProjectHeader({
FILE: apps/web/src/app/marketplace/projects/[namespace]/[project-slug]/page.tsx
function MarketplacePublicProjectDetailPage (line 14) | async function MarketplacePublicProjectDetailPage({
FILE: apps/web/src/app/marketplace/projects/[namespace]/[project-slug]/utils.ts
constant MAX_TOOLS_TO_SHOW (line 1) | const MAX_TOOLS_TO_SHOW = 5
type MarketplacePublicProjectDetailTab (line 12) | type MarketplacePublicProjectDetailTab =
FILE: apps/web/src/app/not-found.tsx
function NotFound (line 9) | function NotFound() {
FILE: apps/web/src/app/page.tsx
function TheBestDamnLandingPageEver (line 13) | async function TheBestDamnLandingPageEver() {
FILE: apps/web/src/app/pricing/page.tsx
function AboutPage (line 10) | function AboutPage() {
FILE: apps/web/src/app/privacy/page.tsx
function AboutPage (line 8) | function AboutPage() {
FILE: apps/web/src/app/providers.tsx
function createQueryClient (line 12) | function createQueryClient() {
function getQueryClient (line 24) | function getQueryClient(): QueryClient {
function Providers (line 41) | function Providers({ children }: { children: React.ReactNode }) {
FILE: apps/web/src/app/publishing/page.tsx
function PublishingMCPsPage (line 14) | function PublishingMCPsPage() {
FILE: apps/web/src/app/signup/page.tsx
function Page (line 7) | function Page() {
FILE: apps/web/src/app/signup/signup-form.tsx
function SignupForm (line 26) | function SignupForm() {
FILE: apps/web/src/app/terms/page.tsx
function AboutPage (line 8) | function AboutPage() {
FILE: apps/web/src/components/active-link.tsx
type ActiveLinkProps (line 8) | type ActiveLinkProps = LinkProps & {
FILE: apps/web/src/components/agentic-provider.tsx
type AgenticContextType (line 21) | type AgenticContextType = {
function AgenticProvider (line 29) | function AgenticProvider({ children }: { children: ReactNode }) {
function useAgentic (line 108) | function useAgentic(): AgenticContextType | undefined {
function useUnauthenticatedAgentic (line 126) | function useUnauthenticatedAgentic(): AgenticContextType | undefined {
function useAuthenticatedAgentic (line 140) | function useAuthenticatedAgentic(): AgenticContextType | undefined {
function useNextUrl (line 165) | function useNextUrl(): string | undefined {
FILE: apps/web/src/components/app-consumers-list.tsx
function AppConsumersList (line 10) | function AppConsumersList() {
FILE: apps/web/src/components/app-projects-list.tsx
function AppProjectsList (line 10) | function AppProjectsList() {
FILE: apps/web/src/components/bootstrap.tsx
function Bootstrap (line 7) | function Bootstrap() {
FILE: apps/web/src/components/code-block/highlight.ts
function highlight (line 10) | async function highlight({
FILE: apps/web/src/components/code-block/index.tsx
function CodeBlock (line 19) | function CodeBlock({
FILE: apps/web/src/components/confetti.tsx
type ConfettiOptions (line 9) | type ConfettiOptions = Simplify<
function useConfettiFireworks (line 17) | function useConfettiFireworks() {
FILE: apps/web/src/components/dark-mode-toggle.tsx
function DarkModeToggle (line 15) | function DarkModeToggle({ className }: { className?: string }) {
FILE: apps/web/src/components/demand-side-cta.tsx
function DemandSideCTA (line 6) | function DemandSideCTA() {
FILE: apps/web/src/components/dots-section.tsx
function DotsSection (line 3) | function DotsSection({
FILE: apps/web/src/components/example-agentic-configs.tsx
type Format (line 16) | type Format = (typeof formats)[number]
type OriginAdaptor (line 25) | type OriginAdaptor = (typeof originAdaptors)[number]
type ExampleAgenticConfig (line 27) | type ExampleAgenticConfig = {
type CodeSnippet (line 37) | type CodeSnippet = {
function ExampleAgenticConfigs (line 42) | function ExampleAgenticConfigs() {
function ExampleAgenticConfigsContent (line 59) | function ExampleAgenticConfigsContent({
function getCodeSnippetForExampleAgenticConfig (line 133) | function getCodeSnippetForExampleAgenticConfig(
FILE: apps/web/src/components/example-usage-section.tsx
function ExampleUsageSection (line 11) | async function ExampleUsageSection() {
FILE: apps/web/src/components/example-usage.tsx
function ExampleUsage (line 37) | function ExampleUsage({
function ExampleUsageContent (line 125) | function ExampleUsageContent({
function CodeSnippetBlock (line 355) | function CodeSnippetBlock({
FILE: apps/web/src/components/feature.tsx
type FeatureData (line 14) | type FeatureData = {
function Feature (line 22) | function Feature({
function FeatureIcon (line 87) | function FeatureIcon({ icon: Icon }: { icon: FeatureData['icon'] }) {
function FeaturePattern (line 95) | function FeaturePattern({
FILE: apps/web/src/components/footer/dynamic.tsx
function DynamicFooter (line 6) | function DynamicFooter() {
FILE: apps/web/src/components/footer/index.tsx
function Footer (line 10) | function Footer() {
FILE: apps/web/src/components/github-star-counter.tsx
function GitHubStarCounter (line 16) | function GitHubStarCounter({
FILE: apps/web/src/components/grid-pattern.tsx
type GridPattern (line 3) | type GridPattern = Omit<
function GridPattern (line 14) | function GridPattern({
FILE: apps/web/src/components/header/authenticated-header.tsx
function AuthenticatedHeader (line 16) | function AuthenticatedHeader() {
FILE: apps/web/src/components/header/index.tsx
function Header (line 14) | function Header() {
FILE: apps/web/src/components/header/unauthenticated-header.tsx
function UnauthenticatedHeader (line 7) | function UnauthenticatedHeader() {
FILE: apps/web/src/components/hero-button/index.tsx
type HeroButtonVariant (line 9) | type HeroButtonVariant = 'orange' | 'blue' | 'purple'
type HeroButtonProps (line 11) | type HeroButtonProps = Simplify<
function HeroButton (line 19) | function HeroButton({
FILE: apps/web/src/components/hero-simulation-2.tsx
function HeroSimulation2 (line 24) | function HeroSimulation2({ className }: { className?: string }) {
function Clump (line 90) | function Clump({
function Pointer (line 136) | function Pointer() {
FILE: apps/web/src/components/hero-simulation.tsx
function MetaBall (line 20) | function MetaBall({
function Pointer (line 67) | function Pointer({ vec = new THREE.Vector3() }) {
function HeroSimulation (line 83) | function HeroSimulation({ className }: { className?: string }) {
FILE: apps/web/src/components/loading-indicator/index.tsx
function LoadingIndicator (line 17) | function LoadingIndicator({ className }: { className?: string }) {
FILE: apps/web/src/components/markdown/index.tsx
function Markdown (line 5) | function Markdown({
FILE: apps/web/src/components/markdown/ssr-markdown.tsx
function SSRMarkdown (line 12) | function SSRMarkdown({
FILE: apps/web/src/components/mcp-gateway-features.tsx
function MCPGatewayFeatures (line 192) | function MCPGatewayFeatures() {
FILE: apps/web/src/components/mcp-marketplace-features.tsx
function MCPMarketplaceFeatures (line 130) | function MCPMarketplaceFeatures() {
FILE: apps/web/src/components/page-container.tsx
function PageContainer (line 3) | function PageContainer({
FILE: apps/web/src/components/posthog-provider.tsx
function PostHogProvider (line 10) | function PostHogProvider({ children }: { children: React.ReactNode }) {
function PostHogPageView (line 34) | function PostHogPageView() {
function SuspendedPostHogPageView (line 63) | function SuspendedPostHogPageView() {
FILE: apps/web/src/components/project-pricing-plans/index.tsx
function ProjectPricingPlans (line 11) | function ProjectPricingPlans({
FILE: apps/web/src/components/project-pricing-plans/project-pricing-plan.tsx
function ProjectPricingPlan (line 31) | function ProjectPricingPlan({
FILE: apps/web/src/components/public-project.tsx
function PublicProject (line 6) | function PublicProject({ project }: { project: Project }) {
FILE: apps/web/src/components/supply-side-cta.tsx
function SupplySideCTA (line 17) | function SupplySideCTA({
FILE: apps/web/src/components/theme-provider.tsx
function ThemeProvider (line 6) | function ThemeProvider({
FILE: apps/web/src/components/ui/avatar.tsx
function Avatar (line 8) | function Avatar({
function AvatarImage (line 24) | function AvatarImage({
function AvatarFallback (line 37) | function AvatarFallback({
FILE: apps/web/src/components/ui/breadcrumb.tsx
function Breadcrumb (line 7) | function Breadcrumb({ ...props }: React.ComponentProps<'nav'>) {
function BreadcrumbList (line 11) | function BreadcrumbList({ className, ...props }: React.ComponentProps<'o...
function BreadcrumbItem (line 24) | function BreadcrumbItem({ className, ...props }: React.ComponentProps<'l...
function BreadcrumbLink (line 34) | function BreadcrumbLink({
function BreadcrumbPage (line 52) | function BreadcrumbPage({ className, ...props }: React.ComponentProps<'s...
function BreadcrumbSeparator (line 65) | function BreadcrumbSeparator({
function BreadcrumbEllipsis (line 83) | function BreadcrumbEllipsis({
FILE: apps/web/src/components/ui/button.tsx
type ButtonProps (line 38) | type ButtonProps = React.ComponentProps<'button'> &
function Button (line 43) | function Button({
FILE: apps/web/src/components/ui/collapsible.tsx
function Collapsible (line 5) | function Collapsible({
function CollapsibleTrigger (line 11) | function CollapsibleTrigger({
function CollapsibleContent (line 22) | function CollapsibleContent({
FILE: apps/web/src/components/ui/dropdown-menu.tsx
function DropdownMenu (line 7) | function DropdownMenu({
function DropdownMenuPortal (line 13) | function DropdownMenuPortal({
function DropdownMenuTrigger (line 21) | function DropdownMenuTrigger({
function DropdownMenuContent (line 32) | function DropdownMenuContent({
function DropdownMenuGroup (line 52) | function DropdownMenuGroup({
function DropdownMenuItem (line 60) | function DropdownMenuItem({
function DropdownMenuCheckboxItem (line 83) | function DropdownMenuCheckboxItem({
function DropdownMenuRadioGroup (line 109) | function DropdownMenuRadioGroup({
function DropdownMenuRadioItem (line 120) | function DropdownMenuRadioItem({
function DropdownMenuLabel (line 144) | function DropdownMenuLabel({
function DropdownMenuSeparator (line 164) | function DropdownMenuSeparator({
function DropdownMenuShortcut (line 177) | function DropdownMenuShortcut({
function DropdownMenuSub (line 193) | function DropdownMenuSub({
function DropdownMenuSubTrigger (line 199) | function DropdownMenuSubTrigger({
function DropdownMenuSubContent (line 223) | function DropdownMenuSubContent({
FILE: apps/web/src/components/ui/input.tsx
function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<'inpu...
FILE: apps/web/src/components/ui/label.tsx
function Label (line 8) | function Label({
FILE: apps/web/src/components/ui/tabs.tsx
function Tabs (line 8) | function Tabs({
function TabsList (line 21) | function TabsList({
function TabsTrigger (line 37) | function TabsTrigger({
function TabsContent (line 53) | function TabsContent({
FILE: apps/web/src/components/ui/tooltip.tsx
function TooltipProvider (line 6) | function TooltipProvider({
function Tooltip (line 19) | function Tooltip({
function TooltipTrigger (line 29) | function TooltipTrigger({
function TooltipContent (line 35) | function TooltipContent({
FILE: apps/web/src/icons/github.tsx
function GitHubIcon (line 1) | function GitHubIcon({ className }: { className?: string }) {
FILE: apps/web/src/icons/twitter.tsx
function TwitterIcon (line 1) | function TwitterIcon({ className }: { className?: string }) {
FILE: apps/web/src/icons/typescript.tsx
function TypeScriptIcon (line 3) | function TypeScriptIcon({ className }: { className?: string }) {
FILE: apps/web/src/lib/bootstrap.ts
function bootstrap (line 19) | function bootstrap() {
FILE: apps/web/src/lib/developer-config.ts
type Target (line 17) | type Target = (typeof targets)[number]
type HTTPTarget (line 26) | type HTTPTarget = (typeof httpTargets)[number]
type MCPClientTarget (line 45) | type MCPClientTarget = (typeof mcpClientTargets)[number]
type TsFrameworkTarget (line 64) | type TsFrameworkTarget = (typeof tsFrameworkTargets)[number]
type PyFrameworkTarget (line 74) | type PyFrameworkTarget = (typeof pyFrameworkTargets)[number]
type DeveloperConfig (line 76) | type DeveloperConfig = {
type CodeSnippet (line 92) | type CodeSnippet = {
type GetCodeForDeveloperConfigOpts (line 104) | type GetCodeForDeveloperConfigOpts = {
type GetCodeForDeveloperConfigInnerOpts (line 113) | type GetCodeForDeveloperConfigInnerOpts = Simplify<
function getCodeForDeveloperConfig (line 121) | function getCodeForDeveloperConfig(
function getCodeForMCPClientConfig (line 169) | function getCodeForMCPClientConfig({
function getCodeForTSFrameworkConfig (line 292) | function getCodeForTSFrameworkConfig({
function getCodeForPythonFrameworkConfig (line 535) | function getCodeForPythonFrameworkConfig({
function getCodeForHTTPConfig (line 622) | function getCodeForHTTPConfig({
FILE: apps/web/src/lib/notifications.ts
function toastError (line 4) | async function toastError(
FILE: apps/web/src/lib/query-client.ts
function retry (line 13) | function retry(failureCount: number, error: any): boolean {
function useQuery (line 24) | function useQuery<
function useInfiniteQuery (line 40) | function useInfiniteQuery<
FILE: apps/web/src/lib/utils.ts
function cn (line 7) | function cn(...inputs: ClassValue[]) {
function randomInRange (line 11) | function randomInRange(min: number, max: number) {
function pricingAmountToFixedString (line 15) | function pricingAmountToFixedString(amount: number): string {
function getRateLimitIntervalLabel (line 33) | function getRateLimitIntervalLabel(rateLimitInterval: number): string {
FILE: docs/inject.js
function bootstrap (line 51) | function bootstrap() {
FILE: examples/mcp-servers/search/src/env.ts
type Env (line 8) | type Env = z.infer<typeof envSchema>
function parseEnv (line 10) | function parseEnv(inputEnv: Record<string, unknown>): Env {
FILE: examples/mcp-servers/search/src/worker.ts
method fetch (line 25) | async fetch(
FILE: examples/mcp-servers/xmcp/src/tools/greet.ts
function greet (line 22) | async function greet({ name }: InferSchema<typeof schema>) {
FILE: examples/ts-sdks/ai-sdk/bin/mcp-filesystem.ts
function main (line 9) | async function main() {
FILE: examples/ts-sdks/ai-sdk/bin/weather-experimental-active-tools.ts
function main (line 8) | async function main() {
FILE: examples/ts-sdks/ai-sdk/bin/weather.ts
function main (line 8) | async function main() {
FILE: examples/ts-sdks/genkit/bin/weather.ts
function main (line 8) | async function main() {
FILE: examples/ts-sdks/langchain/bin/weather.ts
function main (line 9) | async function main() {
FILE: examples/ts-sdks/llamaindex/bin/weather.ts
function main (line 8) | async function main() {
FILE: examples/ts-sdks/mastra/bin/weather.ts
function main (line 8) | async function main() {
FILE: examples/ts-sdks/openai/bin/weather-responses.ts
function main (line 7) | async function main() {
FILE: examples/ts-sdks/openai/bin/weather.ts
function main (line 6) | async function main() {
FILE: fixtures/valid/basic-mcp/src/env.ts
type Env (line 7) | type Env = z.infer<typeof envSchema>
FILE: fixtures/valid/everything-openapi/src/exit-hooks.ts
function initExitHooks (line 4) | function initExitHooks({ server }: { server: ServerType }) {
FILE: fixtures/valid/everything-openapi/src/routes/custom-cache-control-tool.ts
function registerCustomCacheControlTool (line 29) | function registerCustomCacheControlTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/custom-rate-limit-approximate-tool.ts
function registerCustomRateLimitApproximateTool (line 29) | function registerCustomRateLimitApproximateTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/custom-rate-limit-tool.ts
function registerCustomRateLimitTool (line 29) | function registerCustomRateLimitTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/disabled-for-free-plan-tool.ts
function registerDisabledForFreePlanTool (line 22) | function registerDisabledForFreePlanTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/disabled-rate-limit-tool.ts
function registerDisabledRateLimitTool (line 29) | function registerDisabledRateLimitTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/disabled-tool.ts
function registerDisabledTool (line 22) | function registerDisabledTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/echo-headers.ts
function registerEchoHeaders (line 20) | function registerEchoHeaders(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/echo.ts
function registerEcho (line 29) | function registerEcho(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/get-user.ts
function registerGetUser (line 38) | function registerGetUser(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/health-check.ts
function registerHealthCheck (line 22) | function registerHealthCheck(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/no-cache-cache-control-tool.ts
function registerNoCacheCacheControlTool (line 29) | function registerNoCacheCacheControlTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/no-store-cache-control-tool.ts
function registerNoStoreCacheControlTool (line 29) | function registerNoStoreCacheControlTool(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/pure.ts
function registerPure (line 29) | function registerPure(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/strict-additional-properties.ts
function registerStrictAdditionalProperties (line 33) | function registerStrictAdditionalProperties(app: OpenAPIHono) {
FILE: fixtures/valid/everything-openapi/src/routes/unpure-marked-pure.ts
function registerUnpureMarkedPure (line 33) | function registerUnpureMarkedPure(app: OpenAPIHono) {
FILE: legacy/examples/dexter/bin/code-interpreter.ts
function main (line 7) | async function main() {
FILE: legacy/examples/dexter/bin/election-news.ts
function main (line 8) | async function main() {
FILE: legacy/examples/dexter/bin/weather.ts
function main (line 7) | async function main() {
FILE: legacy/examples/playground/bin/scratch.ts
function main (line 9) | async function main() {
FILE: legacy/examples/xsai/bin/weather.ts
function main (line 8) | async function main() {
FILE: legacy/packages/airtable/src/airtable-client.ts
class AirtableClient (line 18) | class AirtableClient extends AIFunctionsProvider {
method constructor (line 23) | constructor({
method listBases (line 60) | async listBases(): Promise<airtable.ListBasesResponse> {
method listTables (line 72) | async listTables<
method getTable (line 100) | async getTable<
method listRecords (line 121) | async listRecords(
method listAllRecords (line 140) | async listAllRecords(
method getRecord (line 170) | async getRecord(
method createRecord (line 187) | async createRecord(
method updateRecords (line 206) | async updateRecords(
method deleteRecords (line 225) | async deleteRecords(
method createTable (line 246) | async createTable(args: airtable.CreateTableArgs): Promise<airtable.Ta...
method updateTable (line 264) | async updateTable(args: airtable.UpdateTableArgs): Promise<airtable.Ta...
method createField (line 281) | async createField(args: airtable.CreateFieldArgs): Promise<airtable.Fi...
method updateField (line 298) | async updateField(args: airtable.UpdateFieldArgs): Promise<airtable.Fi...
method searchRecords (line 315) | async searchRecords(
method validateAndGetSearchFields (line 340) | protected async validateAndGetSearchFields({
function transformTableDetailLevel (line 390) | function transformTableDetailLevel<
FILE: legacy/packages/airtable/src/airtable.ts
type Base (line 11) | type Base = z.infer<typeof BaseSchema>
type ListBasesResponse (line 17) | type ListBasesResponse = z.infer<typeof ListBasesResponseSchema>
type FieldOptions (line 29) | type FieldOptions = z.infer<typeof FieldOptionsSchema>
type Field (line 484) | type Field = z.infer<typeof FieldSchema> & { id: string }
type View (line 491) | type View = z.infer<typeof ViewSchema>
type Table (line 501) | type Table = z.infer<typeof TableSchema>
type BaseSchemaResponse (line 506) | type BaseSchemaResponse = z.infer<typeof BaseSchemaResponseSchema>
type ListRecordsArgs (line 525) | type ListRecordsArgs = z.infer<typeof ListRecordsArgsSchema>
type SearchRecordsArgs (line 542) | type SearchRecordsArgs = z.infer<typeof SearchRecordsArgsSchema>
type TableDetailLevel (line 559) | type TableDetailLevel = z.infer<typeof TableDetailLevelSchema>
type DescribeTableArgs (line 566) | type DescribeTableArgs = z.infer<typeof DescribeTableArgsSchema>
type ListTablesArgs (line 572) | type ListTablesArgs = z.infer<typeof ListTablesArgsSchema>
type GetRecordArgs (line 579) | type GetRecordArgs = z.infer<typeof GetRecordArgsSchema>
type CreateRecordArgs (line 586) | type CreateRecordArgs = z.infer<typeof CreateRecordArgsSchema>
type UpdateRecordsArgs (line 598) | type UpdateRecordsArgs = z.infer<typeof UpdateRecordsArgsSchema>
type DeleteRecordsArgs (line 605) | type DeleteRecordsArgs = z.infer<typeof DeleteRecordsArgsSchema>
type CreateTableArgs (line 617) | type CreateTableArgs = z.infer<typeof CreateTableArgsSchema>
type UpdateTableArgs (line 625) | type UpdateTableArgs = z.infer<typeof UpdateTableArgsSchema>
type CreateFieldArgs (line 635) | type CreateFieldArgs = z.infer<typeof CreateFieldArgsSchema>
type UpdateFieldArgs (line 644) | type UpdateFieldArgs = z.infer<typeof UpdateFieldArgsSchema>
type FieldSet (line 646) | type FieldSet = Record<string, any>
type AirtableRecord (line 647) | type AirtableRecord = { id: string; fields: FieldSet }
type AirtableTableToDetailLevel (line 649) | type AirtableTableToDetailLevel<
FILE: legacy/packages/apollo/src/apollo-client.ts
type EnrichPersonOptions (line 22) | interface EnrichPersonOptions {
type EnrichPersonResponse (line 37) | interface EnrichPersonResponse {
type Person (line 41) | interface Person {
type EmploymentHistory (line 74) | interface EmploymentHistory {
type Contact (line 95) | interface Contact {
type TypedCustomFields (line 161) | type TypedCustomFields = any
type ContactEmail (line 163) | interface ContactEmail {
type PhoneNumber (line 175) | interface PhoneNumber {
type DialerFlags (line 186) | interface DialerFlags {
type Organization (line 193) | interface Organization {
type PrimaryPhone (line 248) | type PrimaryPhone = any
type IndustryTagHash (line 250) | interface IndustryTagHash {
type FundingEvent (line 254) | interface FundingEvent {
type CurrentTechnology (line 264) | interface CurrentTechnology {
class ApolloClient (line 276) | class ApolloClient extends AIFunctionsProvider {
method constructor (line 281) | constructor({
method enrichPerson (line 343) | async enrichPerson(opts: apollo.EnrichPersonOptions) {
FILE: legacy/packages/arxiv/src/arxiv-client.ts
type ValueOf (line 38) | type ValueOf<T extends NonNullable<unknown>> = T[keyof T]
type ArXivResponse (line 56) | interface ArXivResponse {
type SearchParams (line 109) | type SearchParams = z.infer<typeof SearchParamsSchema>
class ArXivClient (line 117) | class ArXivClient extends AIFunctionsProvider {
method constructor (line 121) | constructor({
method search (line 145) | async search(queryOrOpts: string | arxiv.SearchParams) {
FILE: legacy/packages/arxiv/src/utils.ts
function hasProp (line 1) | function hasProp<T>(
function getProp (line 8) | function getProp(
function castArray (line 27) | function castArray<T>(arr: T) {
FILE: legacy/packages/bing/src/bing-client.ts
type SearchQuery (line 14) | interface SearchQuery {
type SearchResponse (line 24) | interface SearchResponse {
type Entities (line 36) | interface Entities {
type EntitiesValue (line 40) | interface EntitiesValue {
type PurpleContractualRule (line 51) | interface PurpleContractualRule {
type DeepLink (line 61) | interface DeepLink {
type EntityPresentationInfo (line 66) | interface EntityPresentationInfo {
type Image (line 71) | interface Image {
type Provider (line 82) | interface Provider {
type Images (line 87) | interface Images {
type ImagesValue (line 95) | interface ImagesValue {
type Thumbnail (line 109) | interface Thumbnail {
type Places (line 114) | interface Places {
type PlacesValue (line 118) | interface PlacesValue {
type Address (line 129) | interface Address {
type QueryContext (line 137) | interface QueryContext {
type RankingResponse (line 142) | interface RankingResponse {
type Mainline (line 147) | interface Mainline {
type Item (line 151) | interface Item {
type ItemValue (line 157) | interface ItemValue {
type RelatedSearches (line 161) | interface RelatedSearches {
type RelatedSearchesValue (line 166) | interface RelatedSearchesValue {
type Videos (line 172) | interface Videos {
type VideosValue (line 181) | interface VideosValue {
type Creator (line 206) | interface Creator {
type EncodingFormat (line 210) | enum EncodingFormat {
type WebPages (line 214) | interface WebPages {
type WebPagesValue (line 220) | interface WebPagesValue {
type FluffyContractualRule (line 235) | interface FluffyContractualRule {
class BingClient (line 250) | class BingClient extends AIFunctionsProvider {
method constructor (line 255) | constructor({
method search (line 289) | async search(queryOrOpts: string | bing.SearchQuery) {
FILE: legacy/packages/brave-search/src/brave-search-client.ts
class BraveSearchClient (line 17) | class BraveSearchClient extends AIFunctionsProvider {
method constructor (line 22) | constructor({
method search (line 60) | async search(
method localSearch (line 94) | async localSearch(
method getPoisData (line 135) | async getPoisData(ids: string[]): Promise<bravesearch.PoiResponse> {
method getDescriptionsData (line 145) | async getDescriptionsData(ids: string[]): Promise<bravesearch.Descript...
FILE: legacy/packages/brave-search/src/brave-search.ts
type SearchParams (line 23) | type SearchParams = z.infer<typeof SearchParamsSchema>
type LocalSearchParams (line 38) | type LocalSearchParams = z.infer<typeof LocalSearchParamsSchema>
type SearchResponse (line 40) | interface SearchResponse {
type Location (line 59) | interface Location {
type PoiResponse (line 81) | interface PoiResponse {
type Description (line 85) | interface Description {
type LocalSearchResponse (line 89) | type LocalSearchResponse = Array<Location & { description: string }>
FILE: legacy/packages/calculator/src/calculator.ts
type CalculatorInput (line 10) | type CalculatorInput = z.infer<typeof CalculatorInputSchema>
FILE: legacy/packages/clearbit/src/clearbit-client.ts
type CompanyEnrichmentOptions (line 22) | interface CompanyEnrichmentOptions {
type CompanyNullableProps (line 31) | type CompanyNullableProps = {
type EmailLookupResponse (line 124) | type EmailLookupResponse = Partial<{
type CompanyResponse (line 186) | type CompanyResponse = {
type CompanySearchOptions (line 190) | interface CompanySearchOptions {
type CompanySearchResponse (line 204) | interface CompanySearchResponse {
type BasicCompanyResponse (line 210) | interface BasicCompanyResponse {
type PeopleSearchOptionsV2 (line 216) | interface PeopleSearchOptionsV2 {
type ProspectorResponseV2 (line 236) | interface ProspectorResponseV2 {
type EmploymentAttributes (line 243) | interface EmploymentAttributes {
type EmailAttributes (line 259) | interface EmailAttributes {
type PhoneAttributes (line 264) | interface PhoneAttributes {
type Name (line 269) | interface Name {
type PersonAttributesV2 (line 275) | type PersonAttributesV2 = {
type PeopleSearchOptionsV1 (line 287) | type PeopleSearchOptionsV1 = {
type Company (line 309) | interface Company {
type PeopleSearchResponseV1 (line 313) | interface PeopleSearchResponseV1 {
type ProspectorResponseV1 (line 326) | interface ProspectorResponseV1 {
type GeoIP (line 333) | interface GeoIP {
type CompanyRevealResponse (line 343) | interface CompanyRevealResponse {
class ClearbitClient (line 508) | class ClearbitClient {
method constructor (line 512) | constructor({
method companyEnrichment (line 541) | async companyEnrichment(options: clearbit.CompanyEnrichmentOptions) {
method companySearch (line 551) | async companySearch(options: clearbit.CompanySearchOptions) {
method companyAutocomplete (line 561) | async companyAutocomplete(name: string) {
method prospectorPeopleV2 (line 571) | async prospectorPeopleV2(options: clearbit.PeopleSearchOptionsV2) {
method prospectorPeopleV1 (line 587) | async prospectorPeopleV1(options: clearbit.PeopleSearchOptionsV1) {
method emailLookup (line 607) | async emailLookup({
method nameToDomain (line 643) | async nameToDomain(name: string) {
method revealCompanyFromIP (line 652) | async revealCompanyFromIP(ip: string) {
method filterEmploymentProspectorV2 (line 665) | static filterEmploymentProspectorV2(
FILE: legacy/packages/diffbot/src/diffbot-client.ts
type ExtractOptions (line 25) | interface ExtractOptions {
type ExtractAnalyzeOptions (line 56) | interface ExtractAnalyzeOptions extends ExtractOptions {
type ExtractArticleOptions (line 67) | interface ExtractArticleOptions extends ExtractOptions {
type ExtractResponse (line 81) | interface ExtractResponse {
type ExtractArticleResponse (line 86) | type ExtractArticleResponse = ExtractResponse
type ExtractAnalyzeResponse (line 88) | interface ExtractAnalyzeResponse extends ExtractResponse {
type DiffbotObject (line 94) | interface DiffbotObject {
type ListItem (line 121) | interface ListItem {
type Author (line 128) | interface Author {
type ObjectCategory (line 133) | interface ObjectCategory {
type Breadcrumb (line 139) | interface Breadcrumb {
type Image (line 144) | interface Image {
type Tag (line 157) | interface Tag {
type DiffbotRequest (line 166) | interface DiffbotRequest {
type KnowledgeGraphSearchOptions (line 172) | interface KnowledgeGraphSearchOptions {
type KnowledgeGraphEnhanceOptions (line 194) | interface KnowledgeGraphEnhanceOptions {
type KnowledgeGraphResponse (line 221) | interface KnowledgeGraphResponse {
type KnowledgeGraphNode (line 232) | interface KnowledgeGraphNode {
type KnowledgeGraphEntity (line 246) | interface KnowledgeGraphEntity {
type EntityType (line 275) | type EntityType = 'Organization' | 'Place'
type EnhanceEntityOptions (line 328) | type EnhanceEntityOptions = z.infer<typeof EnhanceEntityOptionsSchema>
type EnhanceEntityResponse (line 330) | interface EnhanceEntityResponse {
type RequestCtx (line 339) | interface RequestCtx {
type Query (line 344) | interface Query {
type QueryCtx (line 349) | interface QueryCtx {
type EnhanceEntityResult (line 353) | interface EnhanceEntityResult {
type Entity (line 360) | interface Entity {
type AnnualRevenue (line 469) | interface AnnualRevenue {
type Technographic (line 477) | interface Technographic {
type Category (line 482) | interface Category {
type Investment (line 491) | interface Investment {
type Amount (line 499) | interface Amount {
type EmailAddress (line 504) | interface EmailAddress {
type Education (line 509) | interface Education {
type DateTime (line 518) | interface DateTime {
type Nationality (line 524) | interface Nationality {
type Image (line 529) | interface Image {
type NameDetail (line 534) | interface NameDetail {
type Gender (line 540) | interface Gender {
type Stock (line 544) | interface Stock {
type Union (line 550) | interface Union {
type BasicEntity (line 557) | interface BasicEntity {
type Language (line 567) | interface Language {
type Employment (line 572) | interface Employment {
type Location (line 583) | interface Location {
type Award (line 599) | interface Award {
type Interest (line 604) | interface Interest {
class DiffbotClient (line 617) | class DiffbotClient extends AIFunctionsProvider {
method constructor (line 625) | constructor({
method analyzeUrl (line 674) | async analyzeUrl(options: diffbot.ExtractAnalyzeOptions) {
method extractArticleFromUrl (line 689) | async extractArticleFromUrl(options: diffbot.ExtractArticleOptions) {
method enhanceEntity (line 707) | async enhanceEntity(
method searchKnowledgeGraph (line 720) | async searchKnowledgeGraph(options: diffbot.KnowledgeGraphSearchOption...
method enhanceKnowledgeGraph (line 731) | async enhanceKnowledgeGraph(options: diffbot.KnowledgeGraphEnhanceOpti...
method _extract (line 742) | protected async _extract<
FILE: legacy/packages/duck-duck-go/src/duck-duck-go-client.ts
type DuckDuckGoSearchToolOptions (line 8) | interface DuckDuckGoSearchToolOptions {
type DuckDuckGoSearchToolRunOptions (line 13) | interface DuckDuckGoSearchToolRunOptions {
class DuckDuckGoClient (line 22) | class DuckDuckGoClient extends AIFunctionsProvider {
method search (line 34) | async search(
FILE: legacy/packages/duck-duck-go/src/paginate.ts
type PaginateInput (line 1) | interface PaginateInput<T, C> {
function paginate (line 9) | async function paginate<T, C = number>(
FILE: legacy/packages/exa/src/exa-client.ts
type TextContentsOptions (line 22) | type TextContentsOptions = z.infer<typeof TextContentsOptionsSchema>
type HighlightsContentsOptions (line 38) | type HighlightsContentsOptions = z.infer<
type ContentsOptions (line 48) | type ContentsOptions = z.infer<typeof ContentsOptionsSchema>
type BaseSearchOptions (line 95) | type BaseSearchOptions = z.infer<typeof BaseSearchOptionsSchema>
type RegularSearchOptions (line 102) | type RegularSearchOptions = z.infer<typeof RegularSearchOptionsSchema>
type FindSimilarOptions (line 113) | type FindSimilarOptions = z.infer<typeof FindSimilarOptionsSchema>
type GetContentsOptions (line 121) | type GetContentsOptions = z.infer<typeof GetContentsOptionsSchema>
type SearchResult (line 126) | type SearchResult = {
type SearchResponse (line 158) | type SearchResponse = {
class ExaClient (line 175) | class ExaClient extends AIFunctionsProvider {
method constructor (line 180) | constructor({
method search (line 214) | async search(queryOrOpts: string | exa.RegularSearchOptions) {
method findSimilar (line 229) | async findSimilar(opts: exa.FindSimilarOptions) {
method getContents (line 254) | async getContents({ ids, ...opts }: exa.GetContentsOptions) {
FILE: legacy/packages/firecrawl/src/firecrawl-client.test.ts
function testUrlScraping (line 12) | async function testUrlScraping() {
function testSearch (line 26) | async function testSearch() {
function testCrawlUrl (line 46) | async function testCrawlUrl() {
function testExtract (line 84) | async function testExtract() {
function testExtractUntilCompletion (line 131) | async function testExtractUntilCompletion() {
FILE: legacy/packages/firecrawl/src/firecrawl-client.ts
type ClientConfig (line 26) | interface ClientConfig {
type DocumentMetadata (line 34) | interface DocumentMetadata {
type Document (line 73) | interface Document<
type ScrapeOptions (line 95) | interface ScrapeOptions {
type ScrapeParams (line 127) | interface ScrapeParams<
type Action (line 170) | type Action =
type ActionsResult (line 205) | interface ActionsResult {
type ScrapeResponse (line 212) | interface ScrapeResponse<
type SearchParams (line 224) | interface SearchParams {
type SearchResponse (line 239) | interface SearchResponse {
type CrawlParams (line 249) | interface CrawlParams {
type CrawlResponse (line 275) | interface CrawlResponse {
type CrawlStatusResponse (line 285) | interface CrawlStatusResponse {
type CrawlErrorsResponse (line 299) | interface CrawlErrorsResponse {
type ErrorResponse (line 312) | interface ErrorResponse {
class FirecrawlError (line 320) | class FirecrawlError extends Error {
method constructor (line 324) | constructor(message: string, statusCode: number, details?: any) {
type ExtractParams (line 334) | interface ExtractParams<T extends z.ZodSchema = any> {
type ExtractResponse (line 348) | interface ExtractResponse<T = any> {
type ExtractStatusResponse (line 360) | interface ExtractStatusResponse<T = any> {
type GenerateLLMsTextParams (line 371) | interface GenerateLLMsTextParams {
type GenerateLLMsTextResponse (line 387) | interface GenerateLLMsTextResponse {
type GenerateLLMsTextStatusResponse (line 395) | interface GenerateLLMsTextStatusResponse {
class FirecrawlClient (line 414) | class FirecrawlClient extends AIFunctionsProvider {
method constructor (line 419) | constructor({
method scrapeUrl (line 468) | async scrapeUrl<
method search (line 540) | async search(
method crawlUrl (line 595) | async crawlUrl(
method checkCrawlStatus (line 627) | async checkCrawlStatus(
method checkCrawlErrors (line 652) | async checkCrawlErrors(
method cancelCrawl (line 673) | async cancelCrawl(id: string): Promise<firecrawl.ErrorResponse> {
method extract (line 696) | async extract<T extends z.ZodSchema>(
method checkExtractStatus (line 729) | async checkExtractStatus<T = any>(
method generateLLMsText (line 753) | async generateLLMsText(
method postRequest (line 781) | protected async postRequest(path: string, data: any): Promise<any> {
method getRequest (line 803) | protected async getRequest(path: string): Promise<any> {
method deleteRequest (line 825) | protected async deleteRequest(path: string): Promise<any> {
FILE: legacy/packages/github/src/github-client.ts
type User (line 6) | interface User {
class GitHubClient (line 45) | class GitHubClient extends AIFunctionsProvider {
method constructor (line 49) | constructor({
method getUserByUsername (line 74) | async getUserByUsername(
FILE: legacy/packages/google-custom-search/src/google-custom-search-client.ts
type SearchParams (line 16) | type SearchParams = z.infer<typeof SearchParamsSchema>
class GoogleCustomSearchClient (line 24) | class GoogleCustomSearchClient extends AIFunctionsProvider {
method constructor (line 30) | constructor({
method search (line 66) | async search(
FILE: legacy/packages/google-custom-search/src/paginate.ts
type PaginateInput (line 1) | interface PaginateInput<T, C> {
function paginate (line 9) | async function paginate<T, C = number>(
FILE: legacy/packages/google-docs/src/google-docs-client.ts
type Document (line 12) | type Document = Simplify<
class GoogleDocsClient (line 37) | class GoogleDocsClient extends AIFunctionsProvider {
method constructor (line 40) | constructor({ docs }: { docs: google.docs_v1.Docs }) {
method getDocument (line 56) | async getDocument(
function convertDocument (line 72) | function convertDocument(
FILE: legacy/packages/google-drive/src/google-drive-client.ts
type File (line 13) | type File = Simplify<
type ListFilesResponse (line 43) | interface ListFilesResponse {
type DownloadResponse (line 48) | interface DownloadResponse {
class GoogleDriveClient (line 77) | class GoogleDriveClient extends AIFunctionsProvider {
method constructor (line 80) | constructor({ drive }: { drive: google.drive_v3.Drive }) {
method listFiles (line 94) | async listFiles(
method getFile (line 136) | async getFile(
method exportFile (line 160) | async exportFile(
method createFolder (line 174) | async createFolder(
function convertFile (line 197) | function convertFile(data: google.drive_v3.Schema$File): googleDrive.File {
FILE: legacy/packages/gravatar/src/gravatar-client.ts
type GetProfileByIdentifierOptions (line 28) | type GetProfileByIdentifierOptions = {
type Profile (line 32) | interface Profile {
type VerifiedAccount (line 81) | interface VerifiedAccount {
type Link (line 89) | interface Link {
type GalleryImage (line 94) | interface GalleryImage {
type CryptoWallet (line 99) | interface CryptoWallet {
type ContactInfo (line 104) | interface ContactInfo {
class GravatarClient (line 121) | class GravatarClient extends AIFunctionsProvider {
method constructor (line 126) | constructor({
method getProfileByIdentifier (line 174) | async getProfileByIdentifier(
method getAvatarForIdentifier (line 197) | async getAvatarForIdentifier(
FILE: legacy/packages/hacker-news/src/hacker-news-client.ts
type ItemType (line 17) | type ItemType =
type Item (line 25) | interface Item {
type User (line 40) | interface User {
type SearchTag (line 48) | type SearchTag =
type SearchNumericFilterField (line 57) | type SearchNumericFilterField =
type SearchNumericFilterCondition (line 61) | type SearchNumericFilterCondition = '<' | '<=' | '=' | '>=' | '>'
type SearchSortBy (line 63) | type SearchSortBy = 'relevance' | 'recency'
type SearchOptions (line 65) | interface SearchOptions {
type SearchItem (line 91) | interface SearchItem {
type SearchUser (line 107) | interface SearchUser {
type SearchResponse (line 113) | interface SearchResponse {
type SearchHit (line 126) | interface SearchHit {
type SearchHighlightResult (line 146) | interface SearchHighlightResult {
type Highlight (line 155) | interface Highlight {
class HackerNewsClient (line 216) | class HackerNewsClient extends AIFunctionsProvider {
method constructor (line 224) | constructor({
method getSearchItem (line 274) | async getSearchItem(itemIdOrOpts: string | number | { itemId: string }) {
method getSearchUser (line 293) | async getSearchUser(usernameOrOpts: string | number | { username: stri...
method searchItems (line 311) | async searchItems(queryOrOpts: string | hackernews.SearchOptions) {
method getSearchTopStories (line 353) | async getSearchTopStories(queryOrOpts: string | hackernews.SearchOptio...
method getItem (line 363) | async getItem(id: string | number) {
method getTopStories (line 367) | async getTopStories() {
method getNewStories (line 371) | async getNewStories() {
method getBestStories (line 375) | async getBestStories() {
FILE: legacy/packages/hunter/src/hunter-client.ts
type Department (line 31) | type Department = z.infer<typeof DepartmentSchema>
type Seniority (line 34) | type Seniority = z.infer<typeof SenioritySchema>
type PersonField (line 41) | type PersonField = z.infer<typeof PersonFieldSchema>
type DomainSearchOptions (line 57) | type DomainSearchOptions = z.infer<typeof DomainSearchOptionsSchema>
type EmailFinderOptions (line 66) | type EmailFinderOptions = z.infer<typeof EmailFinderOptionsSchema>
type EmailVerifierOptions (line 71) | type EmailVerifierOptions = z.infer<typeof EmailVerifierOptionsSchema>
type DomainSearchResponse (line 73) | interface DomainSearchResponse {
type DomainSearchData (line 90) | interface DomainSearchData {
type Email (line 116) | interface Email {
type Source (line 132) | interface Source {
type Verification (line 140) | interface Verification {
type EmailFinderResponse (line 145) | interface EmailFinderResponse {
type EmailFinderData (line 160) | interface EmailFinderData {
type EmailVerifierResponse (line 176) | interface EmailVerifierResponse {
type EmailVerifierData (line 186) | interface EmailVerifierData {
type Error (line 210) | interface Error {
class HunterClient (line 223) | class HunterClient extends AIFunctionsProvider {
method constructor (line 228) | constructor({
method domainSearch (line 264) | async domainSearch(domainOrOpts: string | hunter.DomainSearchOptions) {
method emailFinder (line 300) | async emailFinder(opts: hunter.EmailFinderOptions) {
method emailVerifier (line 325) | async emailVerifier(emailOrOpts: string | hunter.EmailVerifierOptions) {
FILE: legacy/packages/jigsawstack/src/jigsawstack-client.ts
type BaseResponse (line 6) | interface BaseResponse {
type SearchParams (line 12) | interface SearchParams {
type SearchResponse (line 19) | interface SearchResponse extends BaseResponse {
type CookieParameter (line 40) | interface CookieParameter {
type ScrapeParams (line 54) | interface ScrapeParams {
type ScrapeResponse (line 80) | interface ScrapeResponse extends BaseResponse {
type VOCRParams (line 84) | interface VOCRParams {
type VOCRResponse (line 90) | interface VOCRResponse extends BaseResponse {
type TextToSqlParams (line 99) | interface TextToSqlParams {
type TextToSqlResponse (line 105) | interface TextToSqlResponse extends BaseResponse {
type SpeechToTextParams (line 109) | interface SpeechToTextParams {
type SpeechToTextResponse (line 118) | interface SpeechToTextResponse extends BaseResponse {
class JigsawStackClient (line 132) | class JigsawStackClient extends AIFunctionsProvider {
method constructor (line 135) | constructor({
method aiSearch (line 169) | async aiSearch(params: jigsawstack.SearchParams) {
method aiScrape (line 194) | async aiScrape(params: jigsawstack.ScrapeParams) {
method vocr (line 219) | async vocr(params: jigsawstack.VOCRParams) {
method textToSql (line 244) | async textToSql(
method speechToText (line 267) | async speechToText(
FILE: legacy/packages/jina/src/jina-client.ts
type ReaderFormat (line 19) | type ReaderFormat = z.infer<typeof ReaderFormatSchema>
type ReaderOptions (line 45) | type ReaderOptions = z.infer<typeof ReaderOptionsSchema>
type SearchOptions (line 65) | type SearchOptions = z.infer<typeof SearchOptionsSchema>
type JinaResponse (line 67) | interface JinaResponse {
type ReaderResponse (line 73) | interface ReaderResponse extends JinaResponse {
type ReaderResponseScreenshot (line 77) | interface ReaderResponseScreenshot extends JinaResponse {
type ReaderResponseHtml (line 83) | interface ReaderResponseHtml extends JinaResponse {
type SearchResponse (line 89) | interface SearchResponse extends JinaResponse {
type ReaderData (line 93) | interface ReaderData {
class JinaClient (line 114) | class JinaClient extends AIFunctionsProvider {
method constructor (line 119) | constructor({
method readUrl (line 172) | async readUrl<T extends string | jina.ReaderOptions>(
method search (line 215) | async search<T extends string | jina.SearchOptions>(
method _getHeadersFromOptions (line 241) | protected _getHeadersFromOptions(
FILE: legacy/packages/leadmagic/src/leadmagic-client.ts
type ProfileSearchOptions (line 22) | interface ProfileSearchOptions {
type EnrichedPerson (line 26) | interface EnrichedPerson {
type Experience (line 49) | interface Experience {
type EmailFinderOptions (line 56) | interface EmailFinderOptions {
type MobileFinderOptions (line 62) | interface MobileFinderOptions {
type RoleFinderOptions (line 66) | interface RoleFinderOptions {
type CreditsResponse (line 71) | interface CreditsResponse {
type EmailFinderResponse (line 75) | interface EmailFinderResponse {
type MobileFinderResponse (line 84) | interface MobileFinderResponse {
type RoleFinderResponse (line 93) | interface RoleFinderResponse {
type RoleMatch (line 98) | interface RoleMatch {
class LeadMagicClient (line 114) | class LeadMagicClient extends AIFunctionsProvider {
method constructor (line 119) | constructor({
method getPersonByLinkedInUrl (line 168) | async getPersonByLinkedInUrl(urlOrOpts: leadmagic.ProfileSearchOptions) {
method checkCredits (line 190) | async checkCredits() {
method findEmailsForPerson (line 210) | async findEmailsForPerson(opts: leadmagic.EmailFinderOptions) {
method findMobilePhoneNumberForPerson (line 237) | async findMobilePhoneNumberForPerson(
method findPeopleByRole (line 271) | async findPeopleByRole(opts: leadmagic.RoleFinderOptions) {
FILE: legacy/packages/midjourney/src/midjourney-client.ts
type JobStatus (line 18) | type JobStatus = 'pending' | 'in-progress' | 'completed' | 'failed'
type ImagineResponse (line 20) | interface ImagineResponse {
type Job (line 24) | interface Job {
type JobOptions (line 39) | interface JobOptions {
class MidjourneyClient (line 51) | class MidjourneyClient extends AIFunctionsProvider {
method constructor (line 56) | constructor({
method imagine (line 97) | async imagine(
method getJobById (line 136) | async getJobById(
method waitForJobById (line 173) | async waitForJobById(
FILE: legacy/packages/notion/src/notion-client.ts
class NotionClient (line 16) | class NotionClient extends AIFunctionsProvider {
method constructor (line 21) | constructor({
method getSelf (line 55) | async getSelf(
method getUser (line 69) | async getUser(params: notion.GetUserParams): Promise<notion.GetUserRes...
method listUsers (line 83) | async listUsers(
method createPage (line 103) | async createPage(
method getPage (line 121) | async getPage(params: notion.GetPageParams): Promise<notion.GetPageRes...
method updatePage (line 137) | async updatePage(
method getPageProperty (line 155) | async getPageProperty(
method getBlock (line 175) | async getBlock(
method deleteBlock (line 191) | async deleteBlock(
method updateBlock (line 207) | async updateBlock(
method listBlockChildren (line 252) | async listBlockChildren(
method appendBlockChildren (line 272) | async appendBlockChildren(
method getDatabase (line 290) | async getDatabase(
method updateDatabase (line 306) | async updateDatabase(
method queryDatabase (line 333) | async queryDatabase(
method listDatabases (line 359) | async listDatabases(
method createDatabase (line 379) | async createDatabase(
method search (line 406) | async search(params: notion.SearchParams): Promise<notion.SearchRespon...
method listComments (line 429) | async listComments(
method createComment (line 450) | async createComment(
method oauthToken (line 468) | async oauthToken(
FILE: legacy/packages/notion/src/notion.ts
type UserObjectResponse (line 17) | type UserObjectResponse = z.infer<typeof UserObjectResponseSchema>
type AnnotationRequest (line 49) | type AnnotationRequest = z.infer<typeof AnnotationRequestSchema>
type DateRequest (line 56) | type DateRequest = z.infer<typeof DateRequestSchema>
type PageObjectResponse (line 66) | type PageObjectResponse = z.infer<typeof PageObjectResponseSchema>
type PartialPageObjectResponse (line 72) | type PartialPageObjectResponse = z.infer<
type PropertyItemObjectResponse (line 80) | type PropertyItemObjectResponse = z.infer<
type PartialBlockObjectResponse (line 88) | type PartialBlockObjectResponse = z.infer<
type BlockObjectResponse (line 101) | type BlockObjectResponse = z.infer<typeof BlockObjectResponseSchema>
type TitlePropertyResponse (line 108) | type TitlePropertyResponse = z.infer<
type RichTextPropertyResponse (line 117) | type RichTextPropertyResponse = z.infer<
type NumberPropertyResponse (line 126) | type NumberPropertyResponse = z.infer<
type SelectOption (line 135) | type SelectOption = z.infer<typeof SelectOptionSchema>
type DatePropertyResponse (line 142) | type DatePropertyResponse = z.infer<typeof DatePropertyResponseSchema>
type PeoplePropertyResponse (line 149) | type PeoplePropertyResponse = z.infer<
type FilePropertyResponse (line 158) | type FilePropertyResponse = z.infer<typeof FilePropertyResponseSchema>
type CheckboxPropertyResponse (line 165) | type CheckboxPropertyResponse = z.infer<
type UrlPropertyResponse (line 174) | type UrlPropertyResponse = z.infer<typeof UrlPropertyResponseSchema>
type EmailPropertyResponse (line 181) | type EmailPropertyResponse = z.infer<
type PhoneNumberPropertyResponse (line 190) | type PhoneNumberPropertyResponse = z.infer<
type FormulaPropertyResponse (line 199) | type FormulaPropertyResponse = z.infer<
type RelationPropertyResponse (line 212) | type RelationPropertyResponse = z.infer<
type RollupPropertyResponse (line 227) | type RollupPropertyResponse = z.infer<
type CreatedTimePropertyResponse (line 236) | type CreatedTimePropertyResponse = z.infer<
type CreatedByPropertyResponse (line 245) | type CreatedByPropertyResponse = z.infer<
type LastEditedTimePropertyResponse (line 254) | type LastEditedTimePropertyResponse = z.infer<
type LastEditedByPropertyResponse (line 263) | type LastEditedByPropertyResponse = z.infer<
type PartialUserObjectResponse (line 271) | type PartialUserObjectResponse = z.infer<
type AnnotationResponse (line 303) | type AnnotationResponse = z.infer<typeof AnnotationResponseSchema>
type DateResponse (line 310) | type DateResponse = z.infer<typeof DateResponseSchema>
type PropertyUpdateSchema (line 316) | type PropertyUpdateSchema = z.infer<typeof PropertyUpdateSchemaSchema>
type TextPropertyFilter (line 328) | type TextPropertyFilter = z.infer<typeof TextPropertyFilterSchema>
type NumberPropertyFilter (line 340) | type NumberPropertyFilter = z.infer<typeof NumberPropertyFilterSchema>
type CheckboxPropertyFilter (line 346) | type CheckboxPropertyFilter = z.infer<
type SelectPropertyFilter (line 356) | type SelectPropertyFilter = z.infer<typeof SelectPropertyFilterSchema>
type MultiSelectPropertyFilter (line 364) | type MultiSelectPropertyFilter = z.infer<
type DatePropertyFilter (line 383) | type DatePropertyFilter = z.infer<typeof DatePropertyFilterSchema>
type PeoplePropertyFilter (line 391) | type PeoplePropertyFilter = z.infer<typeof PeoplePropertyFilterSchema>
type FilesPropertyFilter (line 397) | type FilesPropertyFilter = z.infer<typeof FilesPropertyFilterSchema>
type RelationPropertyFilter (line 405) | type RelationPropertyFilter = z.infer<
type PropertySchema (line 413) | type PropertySchema = z.infer<typeof PropertySchemaSchema>
type SearchParameters (line 432) | type SearchParameters = z.infer<typeof SearchParametersSchema>
type PartialCommentObjectResponse (line 438) | type PartialCommentObjectResponse = z.infer<
type OauthTokenParameters (line 448) | type OauthTokenParameters = z.infer<typeof OauthTokenParametersSchema>
type ListUsersResponse (line 455) | type ListUsersResponse = z.infer<typeof ListUsersResponseSchema>
type PropertyItemListResponse (line 462) | type PropertyItemListResponse = z.infer<
type SelectPropertyResponse (line 471) | type SelectPropertyResponse = z.infer<
type MultiSelectPropertyResponse (line 480) | type MultiSelectPropertyResponse = z.infer<
type TextRichTextItemResponse (line 494) | type TextRichTextItemResponse = z.infer<
type EquationRichTextItemResponse (line 505) | type EquationRichTextItemResponse = z.infer<
type ListBlockChildrenResponse (line 517) | type ListBlockChildrenResponse = z.infer<
type AppendBlockChildrenResponse (line 529) | type AppendBlockChildrenResponse = z.infer<
type QueryDatabaseResponse (line 541) | type QueryDatabaseResponse = z.infer<
type OauthTokenResponse (line 564) | type OauthTokenResponse = z.infer<typeof OauthTokenResponseSchema>
type RichTextItemRequest (line 596) | type RichTextItemRequest = z.infer<typeof RichTextItemRequestSchema>
type CreatePageParameters (line 618) | type CreatePageParameters = z.infer<typeof CreatePageParametersSchema>
type UpdatePageParameters (line 635) | type UpdatePageParameters = z.infer<typeof UpdatePageParametersSchema>
type UpdateBlockParameters (line 731) | type UpdateBlockParameters = z.infer<
type BlockObjectRequest (line 940) | type BlockObjectRequest = z.infer<typeof BlockObjectRequestSchema>
type MentionRichTextItemResponse (line 967) | type MentionRichTextItemResponse = z.infer<
type CreateCommentParameters (line 984) | type CreateCommentParameters = z.infer<
type AppendBlockChildrenParameters (line 991) | type AppendBlockChildrenParameters = z.infer<
type UpdateDatabaseParameters (line 1021) | type UpdateDatabaseParameters = z.infer<
type CreateDatabaseParameters (line 1054) | type CreateDatabaseParameters = z.infer<
type RichTextItemResponse (line 1063) | type RichTextItemResponse = z.infer<typeof RichTextItemResponseSchema>
type CommentObjectResponse (line 1078) | type CommentObjectResponse = z.infer<
type PropertyFilter (line 1118) | type PropertyFilter = z.infer<typeof PropertyFilterSchema>
type ListCommentsResponse (line 1126) | type ListCommentsResponse = z.infer<typeof ListCommentsResponseSchema>
type CompoundFilter (line 1132) | type CompoundFilter = z.infer<typeof CompoundFilterSchema>
type QueryDatabaseParameters (line 1154) | type QueryDatabaseParameters = z.infer<
type DatabasePropertyConfigResponse (line 1179) | type DatabasePropertyConfigResponse = z.infer<
type PartialDatabaseObjectResponse (line 1188) | type PartialDatabaseObjectResponse = z.infer<
type DatabaseObjectResponse (line 1229) | type DatabaseObjectResponse = z.infer<
type ListDatabasesResponse (line 1244) | type ListDatabasesResponse = z.infer<
type SearchResponse (line 1261) | type SearchResponse = z.infer<typeof SearchResponseSchema>
type GetSelfParams (line 1268) | type GetSelfParams = z.infer<typeof GetSelfParamsSchema>
type GetSelfResponse (line 1271) | type GetSelfResponse = z.infer<typeof GetSelfResponseSchema>
type GetUserParams (line 1274) | type GetUserParams = z.infer<typeof GetUserParamsSchema>
type GetUserResponse (line 1277) | type GetUserResponse = z.infer<typeof GetUserResponseSchema>
type ListUsersParams (line 1283) | type ListUsersParams = z.infer<typeof ListUsersParamsSchema>
type CreatePageParams (line 1286) | type CreatePageParams = z.infer<typeof CreatePageParamsSchema>
type CreatePageResponse (line 1292) | type CreatePageResponse = z.infer<typeof CreatePageResponseSchema>
type GetPageParams (line 1298) | type GetPageParams = z.infer<typeof GetPageParamsSchema>
type GetPageResponse (line 1304) | type GetPageResponse = z.infer<typeof GetPageResponseSchema>
type UpdatePageParams (line 1309) | type UpdatePageParams = z.infer<typeof UpdatePageParamsSchema>
type UpdatePageResponse (line 1315) | type UpdatePageResponse = z.infer<typeof UpdatePageResponseSchema>
type GetPagePropertyParams (line 1323) | type GetPagePropertyParams = z.infer<
type GetPagePropertyResponse (line 1331) | type GetPagePropertyResponse = z.infer<
type GetBlockParams (line 1336) | type GetBlockParams = z.infer<typeof GetBlockParamsSchema>
type GetBlockResponse (line 1342) | type GetBlockResponse = z.infer<typeof GetBlockResponseSchema>
type DeleteBlockParams (line 1345) | type DeleteBlockParams = z.infer<typeof DeleteBlockParamsSchema>
type DeleteBlockResponse (line 1351) | type DeleteBlockResponse = z.infer<typeof DeleteBlockResponseSchema>
type UpdateBlockParams (line 1356) | type UpdateBlockParams = z.infer<typeof UpdateBlockParamsSchema>
type UpdateBlockResponse (line 1362) | type UpdateBlockResponse = z.infer<typeof UpdateBlockResponseSchema>
type ListBlockChildrenParams (line 1369) | type ListBlockChildrenParams = z.infer<
type AppendBlockChildrenParams (line 1376) | type AppendBlockChildrenParams = z.infer<
type GetDatabaseParams (line 1381) | type GetDatabaseParams = z.infer<typeof GetDatabaseParamsSchema>
type GetDatabaseResponse (line 1387) | type GetDatabaseResponse = z.infer<typeof GetDatabaseResponseSchema>
type UpdateDatabaseParams (line 1392) | type UpdateDatabaseParams = z.infer<typeof UpdateDatabaseParamsSchema>
type UpdateDatabaseResponse (line 1398) | type UpdateDatabaseResponse = z.infer<
type QueryDatabaseParams (line 1408) | type QueryDatabaseParams = z.infer<typeof QueryDatabaseParamsSchema>
type ListDatabasesParams (line 1414) | type ListDatabasesParams = z.infer<typeof ListDatabasesParamsSchema>
type CreateDatabaseParams (line 1417) | type CreateDatabaseParams = z.infer<typeof CreateDatabaseParamsSchema>
type CreateDatabaseResponse (line 1423) | type CreateDatabaseResponse = z.infer<
type SearchParams (line 1428) | type SearchParams = z.infer<typeof SearchParamsSchema>
type ListCommentsParams (line 1435) | type ListCommentsParams = z.infer<typeof ListCommentsParamsSchema>
type CreateCommentParams (line 1438) | type CreateCommentParams = z.infer<typeof CreateCommentParamsSchema>
type CreateCommentResponse (line 1444) | type CreateCommentResponse = z.infer<
type OauthTokenParams (line 1449) | type OauthTokenParams = z.infer<typeof OauthTokenParamsSchema>
FILE: legacy/packages/novu/src/novu-client.ts
type Subscriber (line 11) | type Subscriber = {
type TriggerEventResponse (line 43) | type TriggerEventResponse = {
type TriggerOptions (line 73) | type TriggerOptions = {
class NovuClient (line 97) | class NovuClient extends AIFunctionsProvider {
method constructor (line 102) | constructor({
method triggerEvent (line 152) | async triggerEvent(options: novu.TriggerOptions) {
FILE: legacy/packages/open-meteo/src/open-meteo-client.ts
class OpenMeteoClient (line 23) | class OpenMeteoClient extends AIFunctionsProvider {
method constructor (line 28) | constructor({
method getForecast (line 66) | async getForecast(
method _geocode (line 115) | protected async _geocode(
function toDateString (line 138) | function toDateString(date: Date): string {
function validateAndSetDates (line 142) | function validateAndSetDates(
FILE: legacy/packages/open-meteo/src/open-meteo.ts
type HourlyResponse (line 55) | type HourlyResponse = z.infer<typeof HourlyResponseSchema>
type DailyResponse (line 81) | type DailyResponse = z.infer<typeof DailyResponseSchema>
type CurrentWeather (line 95) | type CurrentWeather = z.infer<typeof CurrentWeatherSchema>
type GetV1ForecastParams (line 132) | type GetV1ForecastParams = z.infer<typeof GetV1ForecastParamsSchema>
type GetV1ForecastResponse (line 187) | type GetV1ForecastResponse = z.infer<
type Location (line 191) | interface Location {
type LocationSearch (line 196) | interface LocationSearch {
FILE: legacy/packages/openapi-to-ts/bin/openapi-to-ts.ts
function main (line 8) | async function main() {
FILE: legacy/packages/openapi-to-ts/fixtures/generated/firecrawl-client.ts
class FirecrawlClient (line 21) | class FirecrawlClient extends AIFunctionsProvider {
method constructor (line 26) | constructor({
method scrape (line 61) | async scrape(
method crawlUrls (line 90) | async crawlUrls(
method searchGoogle (line 109) | async searchGoogle(
method getCrawlStatus (line 128) | async getCrawlStatus(
method cancelCrawlJob (line 145) | async cancelCrawlJob(
FILE: legacy/packages/openapi-to-ts/fixtures/generated/firecrawl.ts
type ScrapeResponse (line 79) | type ScrapeResponse = z.infer<typeof ScrapeResponseSchema>
type CrawlResponse (line 86) | type CrawlResponse = z.infer<typeof CrawlResponseSchema>
type SearchResponse (line 92) | type SearchResponse = z.infer<typeof SearchResponseSchema>
type CrawlStatusResponseObj (line 146) | type CrawlStatusResponseObj = z.infer<
type ScrapeParams (line 225) | type ScrapeParams = z.infer<typeof ScrapeParamsSchema>
type CrawlUrlsParams (line 372) | type CrawlUrlsParams = z.infer<typeof CrawlUrlsParamsSchema>
type CrawlUrlsResponse (line 375) | type CrawlUrlsResponse = z.infer<typeof CrawlUrlsResponseSchema>
type SearchGoogleParams (line 423) | type SearchGoogleParams = z.infer<typeof SearchGoogleParamsSchema>
type SearchGoogleResponse (line 426) | type SearchGoogleResponse = z.infer<typeof SearchGoogleResponseSchema>
type GetCrawlStatusParams (line 432) | type GetCrawlStatusParams = z.infer<typeof GetCrawlStatusParamsSchema>
type GetCrawlStatusResponse (line 457) | type GetCrawlStatusResponse = z.infer<
type CancelCrawlJobParams (line 465) | type CancelCrawlJobParams = z.infer<typeof CancelCrawlJobParamsSchema>
type CancelCrawlJobResponse (line 471) | type CancelCrawlJobResponse = z.infer<
FILE: legacy/packages/openapi-to-ts/fixtures/generated/github-client.ts
class GithubClient (line 20) | class GithubClient extends AIFunctionsProvider {
method constructor (line 25) | constructor({
method metaRoot (line 51) | async metaRoot(
method securityAdvisoriesListGlobalAdvisories (line 70) | async securityAdvisoriesListGlobalAdvisories(
method securityAdvisoriesGetGlobalAdvisory (line 111) | async securityAdvisoriesGetGlobalAdvisory(
method appsGetAuthenticated (line 132) | async appsGetAuthenticated(
method appsCreateFromManifest (line 147) | async appsCreateFromManifest(
method appsGetWebhookConfigForApp (line 168) | async appsGetWebhookConfigForApp(
method appsUpdateWebhookConfigForApp (line 189) | async appsUpdateWebhookConfigForApp(
method appsListWebhookDeliveries (line 212) | async appsListWebhookDeliveries(
method appsGetWebhookDelivery (line 235) | async appsGetWebhookDelivery(
method appsRedeliverWebhookDelivery (line 256) | async appsRedeliverWebhookDelivery(
method appsListInstallationRequestsForAuthenticatedApp (line 274) | async appsListInstallationRequestsForAuthenticatedApp(
method appsListInstallations (line 297) | async appsListInstallations(
method appsGetInstallation (line 322) | async appsGetInstallation(
method appsDeleteInstallation (line 343) | async appsDeleteInstallation(
method appsCreateInstallationAccessToken (line 372) | async appsCreateInstallationAccessToken(
method appsSuspendInstallation (line 395) | async appsSuspendInstallation(
method appsUnsuspendInstallation (line 416) | async appsUnsuspendInstallation(
method appsDeleteAuthorization (line 435) | async appsDeleteAuthorization(
method appsCheckToken (line 454) | async appsCheckToken(
method appsDeleteToken (line 473) | async appsDeleteToken(
method appsResetToken (line 492) | async appsResetToken(
method appsScopeToken (line 519) | async appsScopeToken(
method appsGetBySlug (line 548) | async appsGetBySlug(
method classroomGetAnAssignment (line 565) | async classroomGetAnAssignment(
method classroomListAcceptedAssignmentsForAnAssignment (line 583) | async classroomListAcceptedAssignmentsForAnAssignment(
method classroomGetAssignmentGrades (line 602) | async classroomGetAssignmentGrades(
method classroomListClassrooms (line 619) | async classroomListClassrooms(
method classroomGetAClassroom (line 638) | async classroomGetAClassroom(
method classroomListAssignmentsForAClassroom (line 655) | async classroomListAssignmentsForAClassroom(
method codesOfConductGetAllCodesOfConduct (line 674) | async codesOfConductGetAllCodesOfConduct(
method codesOfConductGetConductCode (line 691) | async codesOfConductGetConductCode(
method emojisGet (line 708) | async emojisGet(
method codeSecurityGetConfigurationsForEnterprise (line 731) | async codeSecurityGetConfigurationsForEnterprise(
method codeSecurityCreateConfigurationForEnterprise (line 764) | async codeSecurityCreateConfigurationForEnterprise(
method codeSecurityGetDefaultConfigurationsForEnterprise (line 816) | async codeSecurityGetDefaultConfigurationsForEnterprise(
method codeSecurityGetSingleConfigurationForEnterprise (line 844) | async codeSecurityGetSingleConfigurationForEnterprise(
method codeSecurityDeleteConfigurationForEnterprise (line 877) | async codeSecurityDeleteConfigurationForEnterprise(
method codeSecurityUpdateEnterpriseConfiguration (line 905) | async codeSecurityUpdateEnterpriseConfiguration(
method codeSecurityAttachEnterpriseConfiguration (line 960) | async codeSecurityAttachEnterpriseConfiguration(
method codeSecuritySetConfigurationAsDefaultForEnterprise (line 995) | async codeSecuritySetConfigurationAsDefaultForEnterprise(
method codeSecurityGetRepositoriesForEnterpriseConfiguration (line 1026) | async codeSecurityGetRepositoriesForEnterpriseConfiguration(
method dependabotListAlertsForEnterprise (line 1062) | async dependabotListAlertsForEnterprise(
method secretScanningListAlertsForEnterprise (line 1110) | async secretScanningListAlertsForEnterprise(
method activityListPublicEvents (line 1146) | async activityListPublicEvents(
method activityGetFeeds (line 1191) | async activityGetFeeds(
method gistsList (line 1206) | async gistsList(
method gistsCreate (line 1233) | async gistsCreate(
method gistsListPublic (line 1256) | async gistsListPublic(
method gistsListStarred (line 1277) | async gistsListStarred(
method gistsGet (line 1308) | async gistsGet(
method gistsDelete (line 1325) | async gistsDelete(
method gistsUpdate (line 1360) | async gistsUpdate(
method gistsListComments (line 1389) | async gistsListComments(
method gistsCreateComment (line 1418) | async gistsCreateComment(
method gistsGetComment (line 1447) | async gistsGetComment(
method gistsDeleteComment (line 1464) | async gistsDeleteComment(
method gistsUpdateComment (line 1494) | async gistsUpdateComment(
method gistsListCommits (line 1513) | async gistsListCommits(
method gistsListForks (line 1532) | async gistsListForks(
method gistsFork (line 1551) | async gistsFork(
method gistsCheckIsStarred (line 1568) | async gistsCheckIsStarred(
method gistsStar (line 1585) | async gistsStar(
method gistsUnstar (line 1602) | async gistsUnstar(
method gistsGetRevision (line 1629) | async gistsGetRevision(
method gitignoreGetAllTemplates (line 1646) | async gitignoreGetAllTemplates(
method gitignoreGetTemplate (line 1671) | async gitignoreGetTemplate(
method appsListReposAccessibleToInstallation (line 1688) | async appsListReposAccessibleToInstallation(
method appsRevokeInstallationAccessToken (line 1711) | async appsRevokeInstallationAccessToken(
method issuesList (line 1752) | async issuesList(
method licensesGetAllCommonlyUsed (line 1787) | async licensesGetAllCommonlyUsed(
method licensesGet (line 1808) | async licensesGet(
method markdownRender (line 1825) | async markdownRender(
method markdownRenderRaw (line 1844) | async markdownRenderRaw(
method appsGetSubscriptionPlanForAccount (line 1865) | async appsGetSubscriptionPlanForAccount(
method appsListPlans (line 1886) | async appsListPlans(
method appsListAccountsForPlan (line 1909) | async appsListAccountsForPlan(
method appsGetSubscriptionPlanForAccountStubbed (line 1934) | async appsGetSubscriptionPlanForAccountStubbed(
method appsListPlansStubbed (line 1955) | async appsListPlansStubbed(
method appsListAccountsForPlanStubbed (line 1978) | async appsListAccountsForPlanStubbed(
method metaGet (line 2013) | async metaGet(
method activityListPublicEventsForRepoNetwork (line 2030) | async activityListPublicEventsForRepoNetwork(
method activityListNotificationsForAuthenticatedUser (line 2050) | async activityListNotificationsForAuthenticatedUser(
method activityMarkNotificationsAsRead (line 2079) | async activityMarkNotificationsAsRead(
method activityGetThread (line 2098) | async activityGetThread(
method activityMarkThreadAsDone (line 2115) | async activityMarkThreadAsDone(
method activityMarkThreadAsRead (line 2132) | async activityMarkThreadAsRead(
method activityGetThreadSubscriptionForAuthenticatedUser (line 2154) | async activityGetThreadSubscriptionForAuthenticatedUser(
method activitySetThreadSubscription (line 2179) | async activitySetThreadSubscription(
method activityDeleteThreadSubscription (line 2198) | async activityDeleteThreadSubscription(
method metaGetOctocat (line 2215) | async metaGetOctocat(
method orgsList (line 2240) | async orgsList(
method billingGetGithubBillingUsageReportOrg (line 2263) | async billingGetGithubBillingUsageReportOrg(
method orgsGet (line 2300) | async orgsGet(params: github.OrgsGetParams): Promise<github.OrgsGetRes...
method orgsDelete (line 2325) | async orgsDelete(
method orgsUpdate (line 2362) | async orgsUpdate(
method actionsGetActionsCacheUsageForOrg (line 2419) | async actionsGetActionsCacheUsageForOrg(
method actionsGetActionsCacheUsageByRepoForOrg (line 2442) | async actionsGetActionsCacheUsageByRepoForOrg(
method actionsListHostedRunnersForOrg (line 2465) | async actionsListHostedRunnersForOrg(
method actionsCreateHostedRunnerForOrg (line 2486) | async actionsCreateHostedRunnerForOrg(
method actionsGetHostedRunnersGithubOwnedImagesForOrg (line 2514) | async actionsGetHostedRunnersGithubOwnedImagesForOrg(
method actionsGetHostedRunnersPartnerImagesForOrg (line 2531) | async actionsGetHostedRunnersPartnerImagesForOrg(
method actionsGetHostedRunnersLimitsForOrg (line 2548) | async actionsGetHostedRunnersLimitsForOrg(
method actionsGetHostedRunnersMachineSpecsForOrg (line 2565) | async actionsGetHostedRunnersMachineSpecsForOrg(
method actionsGetHostedRunnersPlatformsForOrg (line 2582) | async actionsGetHostedRunnersPlatformsForOrg(
method actionsGetHostedRunnerForOrg (line 2603) | async actionsGetHostedRunnerForOrg(
method actionsDeleteHostedRunnerForOrg (line 2623) | async actionsDeleteHostedRunnerForOrg(
method actionsUpdateHostedRunnerForOrg (line 2645) | async actionsUpdateHostedRunnerForOrg(
method oidcGetOidcCustomSubTemplateForOrg (line 2677) | async oidcGetOidcCustomSubTemplateForOrg(
method oidcUpdateOidcCustomSubTemplateForOrg (line 2698) | async oidcUpdateOidcCustomSubTemplateForOrg(
method actionsGetGithubActionsPermissionsOrganization (line 2722) | async actionsGetGithubActionsPermissionsOrganization(
method actionsSetGithubActionsPermissionsOrganization (line 2744) | async actionsSetGithubActionsPermissionsOrganization(
method actionsListSelectedRepositoriesEnabledGithubActionsOrganization (line 2768) | async actionsListSelectedRepositoriesEnabledGithubActionsOrganization(
method actionsSetSelectedRepositoriesEnabledGithubActionsOrganization (line 2794) | async actionsSetSelectedRepositoriesEnabledGithubActionsOrganization(
method actionsEnableSelectedRepositoryGithubActionsOrganization (line 2818) | async actionsEnableSelectedRepositoryGithubActionsOrganization(
method actionsDisableSelectedRepositoryGithubActionsOrganization (line 2843) | async actionsDisableSelectedRepositoryGithubActionsOrganization(
method actionsGetAllowedActionsOrganization (line 2867) | async actionsGetAllowedActionsOrganization(
method actionsSetAllowedActionsOrganization (line 2888) | async actionsSetAllowedActionsOrganization(
method actionsGetGithubActionsDefaultWorkflowPermissionsOrganization (line 2921) | async actionsGetGithubActionsDefaultWorkflowPermissionsOrganization(
method actionsSetGithubActionsDefaultWorkflowPermissionsOrganization (line 2947) | async actionsSetGithubActionsDefaultWorkflowPermissionsOrganization(
method actionsListSelfHostedRunnerGroupsForOrg (line 2974) | async actionsListSelfHostedRunnerGroupsForOrg(
method actionsCreateSelfHostedRunnerGroupForOrg (line 2999) | async actionsCreateSelfHostedRunnerGroupForOrg(
method actionsGetSelfHostedRunnerGroupForOrg (line 3032) | async actionsGetSelfHostedRunnerGroupForOrg(
method actionsDeleteSelfHostedRunnerGroupFromOrg (line 3056) | async actionsDeleteSelfHostedRunnerGroupFromOrg(
method actionsUpdateSelfHostedRunnerGroupForOrg (line 3080) | async actionsUpdateSelfHostedRunnerGroupForOrg(
method actionsListGithubHostedRunnersInGroupForOrg (line 3114) | async actionsListGithubHostedRunnersInGroupForOrg(
method actionsListRepoAccessToSelfHostedRunnerGroupInOrg (line 3141) | async actionsListRepoAccessToSelfHostedRunnerGroupInOrg(
method actionsSetRepoAccessToSelfHostedRunnerGroupInOrg (line 3168) | async actionsSetRepoAccessToSelfHostedRunnerGroupInOrg(
method actionsAddRepoAccessToSelfHostedRunnerGroupInOrg (line 3195) | async actionsAddRepoAccessToSelfHostedRunnerGroupInOrg(
method actionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg (line 3220) | async actionsRemoveRepoAccessToSelfHostedRunnerGroupInOrg(
method actionsListSelfHostedRunnersInGroupForOrg (line 3244) | async actionsListSelfHostedRunnersInGroupForOrg(
method actionsSetSelfHostedRunnersInGroupForOrg (line 3270) | async actionsSetSelfHostedRunnersInGroupForOrg(
method actionsAddSelfHostedRunnerToGroupForOrg (line 3296) | async actionsAddSelfHostedRunnerToGroupForOrg(
method actionsRemoveSelfHostedRunnerFromGroupForOrg (line 3321) | async actionsRemoveSelfHostedRunnerFromGroupForOrg(
method actionsListSelfHostedRunnersForOrg (line 3349) | async actionsListSelfHostedRunnersForOrg(
method actionsListRunnerApplicationsForOrg (line 3378) | async actionsListRunnerApplicationsForOrg(
method actionsGenerateRunnerJitconfigForOrg (line 3403) | async actionsGenerateRunnerJitconfigForOrg(
method actionsCreateRegistrationTokenForOrg (line 3442) | async actionsCreateRegistrationTokenForOrg(
method actionsCreateRemoveTokenForOrg (line 3479) | async actionsCreateRemoveTokenForOrg(
method actionsGetSelfHostedRunnerForOrg (line 3504) | async actionsGetSelfHostedRunnerForOrg(
method actionsDeleteSelfHostedRunnerFromOrg (line 3529) | async actionsDeleteSelfHostedRunnerFromOrg(
method actionsListLabelsForSelfHostedRunnerForOrg (line 3557) | async actionsListLabelsForSelfHostedRunnerForOrg(
method actionsAddCustomLabelsToSelfHostedRunnerForOrg (line 3586) | async actionsAddCustomLabelsToSelfHostedRunnerForOrg(
method actionsSetCustomLabelsForSelfHostedRunnerForOrg (line 3619) | async actionsSetCustomLabelsForSelfHostedRunnerForOrg(
method actionsRemoveAllCustomLabelsFromSelfHostedRunnerForOrg (line 3652) | async actionsRemoveAllCustomLabelsFromSelfHostedRunnerForOrg(
method actionsRemoveCustomLabelFromSelfHostedRunnerForOrg (line 3689) | async actionsRemoveCustomLabelFromSelfHostedRunnerForOrg(
method actionsListOrgSecrets (line 3719) | async actionsListOrgSecrets(
method actionsGetOrgPublicKey (line 3748) | async actionsGetOrgPublicKey(
method actionsGetOrgSecret (line 3773) | async actionsGetOrgSecret(
method actionsCreateOrUpdateOrgSecret (line 3803) | async actionsCreateOrUpdateOrgSecret(
method actionsDeleteOrgSecret (line 3836) | async actionsDeleteOrgSecret(
method actionsListSelectedReposForOrgSecret (line 3866) | async actionsListSelectedReposForOrgSecret(
method actionsSetSelectedReposForOrgSecret (line 3900) | async actionsSetSelectedReposForOrgSecret(
method actionsAddSelectedRepoToOrgSecret (line 3934) | async actionsAddSelectedRepoToOrgSecret(
method actionsRemoveSelectedRepoFromOrgSecret (line 3966) | async actionsRemoveSelectedRepoFromOrgSecret(
method actionsListOrgVariables (line 3994) | async actionsListOrgVariables(
method actionsCreateOrgVariable (line 4021) | async actionsCreateOrgVariable(
method actionsGetOrgVariable (line 4054) | async actionsGetOrgVariable(
method actionsDeleteOrgVariable (line 4079) | async actionsDeleteOrgVariable(
method actionsUpdateOrgVariable (line 4104) | async actionsUpdateOrgVariable(
method actionsListSelectedReposForOrgVariable (line 4139) | async actionsListSelectedReposForOrgVariable(
method actionsSetSelectedReposForOrgVariable (line 4173) | async actionsSetSelectedReposForOrgVariable(
method actionsAddSelectedRepoToOrgVariable (line 4205) | async actionsAddSelectedRepoToOrgVariable(
method actionsRemoveSelectedRepoFromOrgVariable (line 4237) | async actionsRemoveSelectedRepoFromOrgVariable(
method orgsListAttestations (line 4265) | async orgsListAttestations(
method orgsListBlockedUsers (line 4286) | async orgsListBlockedUsers(
method orgsCheckBlockedUser (line 4305) | async orgsCheckBlockedUser(
method orgsBlockUser (line 4322) | async orgsBlockUser(
method orgsUnblockUser (line 4339) | async orgsUnblockUser(
method codeScanningListAlertsForOrg (line 4364) | async codeScanningListAlertsForOrg(
method codeSecurityGetConfigurationsForOrg (line 4405) | async codeSecurityGetConfigurationsForOrg(
method codeSecurityCreateConfiguration (line 4434) | async codeSecurityCreateConfiguration(
method codeSecurityGetDefaultConfigurations (line 4484) | async codeSecurityGetDefaultConfigurations(
method codeSecurityDetachConfiguration (line 4511) | async codeSecurityDetachConfiguration(
method codeSecurityGetConfiguration (line 4538) | async codeSecurityGetConfiguration(
method codeSecurityDeleteConfiguration (line 4570) | async codeSecurityDeleteConfiguration(
method codeSecurityUpdateConfiguration (line 4598) | async codeSecurityUpdateConfiguration(
method codeSecurityAttachConfiguration (line 4655) | async codeSecurityAttachConfiguration(
method codeSecuritySetConfigurationAsDefault (line 4689) | async codeSecuritySetConfigurationAsDefault(
method codeSecurityGetRepositoriesForConfiguration (line 4719) | async codeSecurityGetRepositoriesForConfiguration(
method codespacesListInOrganization (line 4747) | async codespacesListInOrganization(
method codespacesSetCodespacesAccess (line 4768) | async codespacesSetCodespacesAccess(
method codespacesSetCodespacesAccessUsers (line 4797) | async codespacesSetCodespacesAccessUsers(
method codespacesDeleteCodespacesAccessUsers (line 4826) | async codespacesDeleteCodespacesAccessUsers(
method codespacesListOrgSecrets (line 4851) | async codespacesListOrgSecrets(
method codespacesGetOrgPublicKey (line 4872) | async codespacesGetOrgPublicKey(
method codespacesGetOrgSecret (line 4893) | async codespacesGetOrgSecret(
method codespacesCreateOrUpdateOrgSecret (line 4919) | async codespacesCreateOrUpdateOrgSecret(
method codespacesDeleteOrgSecret (line 4951) | async codespacesDeleteOrgSecret(
method codespacesListSelectedReposForOrgSecret (line 4977) | async codespacesListSelectedReposForOrgSecret(
method codespacesSetSelectedReposForOrgSecret (line 5007) | async codespacesSetSelectedReposForOrgSecret(
method codespacesAddSelectedRepoToOrgSecret (line 5031) | async codespacesAddSelectedRepoToOrgSecret(
method codespacesRemoveSelectedRepoFromOrgSecret (line 5059) | async codespacesRemoveSelectedRepoFromOrgSecret(
method copilotGetCopilotOrganizationDetails (line 5097) | async copilotGetCopilotOrganizationDetails(
method copilotListCopilotSeats (line 5132) | async copilotListCopilotSeats(
method copilotAddCopilotSeatsForTeams (line 5175) | async copilotAddCopilotSeatsForTeams(
method copilotCancelCopilotSeatAssignmentForTeams (line 5216) | async copilotCancelCopilotSeatAssignmentForTeams(
method copilotAddCopilotSeatsForUsers (line 5259) | async copilotAddCopilotSeatsForUsers(
method copilotCancelCopilotSeatAssignmentForUsers (line 5300) | async copilotCancelCopilotSeatAssignmentForUsers(
method copilotCopilotMetricsForOrganization (line 5343) | async copilotCopilotMetricsForOrganization(
method copilotUsageMetricsForOrg (line 5390) | async copilotUsageMetricsForOrg(
method dependabotListAlertsForOrg (line 5419) | async dependabotListAlertsForOrg(
method dependabotListOrgSecrets (line 5461) | async dependabotListOrgSecrets(
method dependabotGetOrgPublicKey (line 5486) | async dependabotGetOrgPublicKey(
method dependabotGetOrgSecret (line 5507) | async dependabotGetOrgSecret(
method dependabotCreateOrUpdateOrgSecret (line 5533) | async dependabotCreateOrUpdateOrgSecret(
method dependabotDeleteOrgSecret (line 5565) | async dependabotDeleteOrgSecret(
method dependabotListSelectedReposForOrgSecret (line 5591) | async dependabotListSelectedReposForOrgSecret(
method dependabotSetSelectedReposForOrgSecret (line 5621) | async dependabotSetSelectedReposForOrgSecret(
method dependabotAddSelectedRepoToOrgSecret (line 5651) | async dependabotAddSelectedRepoToOrgSecret(
method dependabotRemoveSelectedRepoFromOrgSecret (line 5679) | async dependabotRemoveSelectedRepoFromOrgSecret(
method packagesListDockerMigrationConflictingPackagesForOrganization (line 5704) | async packagesListDockerMigrationConflictingPackagesForOrganization(
method activityListPublicOrgEvents (line 5723) | async activityListPublicOrgEvents(
method orgsListFailedInvitations (line 5742) | async orgsListFailedInvitations(
method orgsListWebhooks (line 5771) | async orgsListWebhooks(
method orgsCreateWebhook (line 5800) | async orgsCreateWebhook(
method orgsGetWebhook (line 5831) | async orgsGetWebhook(
method orgsDeleteWebhook (line 5858) | async orgsDeleteWebhook(
method orgsUpdateWebhook (line 5893) | async orgsUpdateWebhook(
method orgsGetWebhookConfigForOrg (line 5922) | async orgsGetWebhookConfigForOrg(
method orgsUpdateWebhookConfigForOrg (line 5949) | async orgsUpdateWebhookConfigForOrg(
method orgsListWebhookDeliveries (line 5978) | async orgsListWebhookDeliveries(
method orgsGetWebhookDelivery (line 6007) | async orgsGetWebhookDelivery(
method orgsRedeliverWebhookDelivery (line 6037) | async orgsRedeliverWebhookDelivery(
method orgsPingWebhook (line 6069) | async orgsPingWebhook(
method apiInsightsGetRouteStatsByActor (line 6086) | async apiInsightsGetRouteStatsByActor(
method apiInsightsGetSubjectStats (line 6119) | async apiInsightsGetSubjectStats(
method apiInsightsGetSummaryStats (line 6149) | async apiInsightsGetSummaryStats(
method apiInsightsGetSummaryStatsByUser (line 6170) | async apiInsightsGetSummaryStatsByUser(
method apiInsightsGetSummaryStatsByActor (line 6194) | async apiInsightsGetSummaryStatsByActor(
method apiInsightsGetTimeStats (line 6218) | async apiInsightsGetTimeStats(
method apiInsightsGetTimeStatsByUser (line 6239) | async apiInsightsGetTimeStatsByUser(
method apiInsightsGetTimeStatsByActor (line 6268) | async apiInsightsGetTimeStatsByActor(
method apiInsightsGetUserStats (line 6297) | async apiInsightsGetUserStats(
method appsGetOrgInstallation (line 6334) | async appsGetOrgInstallation(
method orgsListAppInstallations (line 6361) | async orgsListAppInstallations(
method interactionsGetRestrictionsForOrg (line 6380) | async interactionsGetRestrictionsForOrg(
method interactionsSetRestrictionsForOrg (line 6397) | async interactionsSetRestrictionsForOrg(
method interactionsRemoveRestrictionsForOrg (line 6416) | async interactionsRemoveRestrictionsForOrg(
method orgsListPendingInvitations (line 6439) | async orgsListPendingInvitations(
method orgsCreateInvitation (line 6466) | async orgsCreateInvitation(
method orgsCancelInvitation (line 6489) | async orgsCancelInvitation(
method orgsListInvitationTeams (line 6509) | async orgsListInvitationTeams(
method orgsListIssueTypes (line 6531) | async orgsListIssueTypes(
method orgsCreateIssueType (line 6558) | async orgsCreateIssueType(
method orgsUpdateIssueType (line 6594) | async orgsUpdateIssueType(
method orgsDeleteIssueType (line 6630) | async orgsDeleteIssueType(
method issuesListForOrg (line 6670) | async issuesListForOrg(
method orgsListMembers (line 6702) | async orgsListMembers(
method orgsCheckMembershipForUser (line 6723) | async orgsCheckMembershipForUser(
method orgsRemoveMember (line 6740) | async orgsRemoveMember(
method codespacesGetCodespacesForUserInOrg (line 6761) | async codespacesGetCodespacesForUserInOrg(
method codespacesDeleteFromOrganization (line 6784) | async codespacesDeleteFromOrganization(
method codespacesStopInOrganization (line 6808) | async codespacesStopInOrganization(
method copilotGetCopilotSeatDetailsForUser (line 6848) | async copilotGetCopilotSeatDetailsForUser(
method orgsGetMembershipForUser (line 6865) | async orgsGetMembershipForUser(
method orgsSetMembershipForUser (line 6898) | async orgsSetMembershipForUser(
method orgsRemoveMembershipForUser (line 6921) | async orgsRemoveMembershipForUser(
method migrationsListForOrg (line 6942) | async migrationsListForOrg(
method migrationsStartForOrg (line 6963) | async migrationsStartForOrg(
method migrationsGetStatusForOrg (line 7007) | async migrationsGetStatusForOrg(
method migrationsDownloadArchiveForOrg (line 7026) | async migrationsDownloadArchiveForOrg(
method migrationsDeleteArchiveForOrg (line 7046) | async migrationsDeleteArchiveForOrg(
method migrationsUnlockRepoForOrg (line 7066) | async migrationsUnlockRepoForOrg(
method migrationsListReposForOrg (line 7086) | async migrationsListReposForOrg(
method orgsListOrgRoles (line 7122) | async orgsListOrgRoles(
method orgsRevokeAllOrgRolesTeam (line 7147) | async orgsRevokeAllOrgRolesTeam(
method orgsAssignTeamToOrgRole (line 7175) | async orgsAssignTeamToOrgRole(
method orgsRevokeOrgRoleTeam (line 7203) | async orgsRevokeOrgRoleTeam(
method orgsRevokeAllOrgRolesUser (line 7231) | async orgsRevokeAllOrgRolesUser(
method orgsAssignUserToOrgRole (line 7259) | async orgsAssignUserToOrgRole(
method orgsRevokeOrgRoleUser (line 7287) | async orgsRevokeOrgRoleUser(
method orgsGetOrgRole (line 7321) | async orgsGetOrgRole(
method orgsListOrgRoleTeams (line 7346) | async orgsListOrgRoleTeams(
method orgsListOrgRoleUsers (line 7376) | async orgsListOrgRoleUsers(
method orgsListOutsideCollaborators (line 7398) | async orgsListOutsideCollaborators(
method orgsConvertMemberToOutsideCollaborator (line 7419) | async orgsConvertMemberToOutsideCollaborator(
method orgsRemoveOutsideCollaborator (line 7441) | async orgsRemoveOutsideCollaborator(
method packagesListPackagesForOrganization (line 7465) | async packagesListPackagesForOrganization(
method packagesGetPackageForOrganization (line 7490) | async packagesGetPackageForOrganization(
method packagesDeletePackageForOrg (line 7518) | async packagesDeletePackageForOrg(
method packagesRestorePackageForOrg (line 7554) | async packagesRestorePackageForOrg(
method packagesGetAllPackageVersionsForPackageOwnedByOrg (line 7581) | async packagesGetAllPackageVersionsForPackageOwnedByOrg(
method packagesGetPackageVersionForOrganization (line 7609) | async packagesGetPackageVersionForOrganization(
method packagesDeletePackageVersionForOrg (line 7637) | async packagesDeletePackageVersionForOrg(
method packagesRestorePackageVersionForOrg (line 7673) | async packagesRestorePackageVersionForOrg(
method orgsListPatGrantRequests (line 7697) | async orgsListPatGrantRequests(
method orgsReviewPatGrantRequestsInBulk (line 7734) | async orgsReviewPatGrantRequestsInBulk(
method orgsReviewPatGrantRequest (line 7757) | async orgsReviewPatGrantRequest(
method orgsListPatGrantRequestRepositories (line 7783) | async orgsListPatGrantRequestRepositories(
method orgsListPatGrants (line 7809) | async orgsListPatGrants(
method orgsUpdatePatAccesses (line 7846) | async orgsUpdatePatAccesses(
method orgsUpdatePatAccess (line 7869) | async orgsUpdatePatAccess(
method orgsListPatGrantRepositories (line 7895) | async orgsListPatGrantRepositories(
method privateRegistriesListOrgPrivateRegistries (line 7929) | async privateRegistriesListOrgPrivateRegistries(
method privateRegistriesCreateOrgPrivateRegistry (line 7958) | async privateRegistriesCreateOrgPrivateRegistry(
method privateRegistriesGetOrgPublicKey (line 7995) | async privateRegistriesGetOrgPublicKey(
method privateRegistriesGetOrgPrivateRegistry (line 8022) | async privateRegistriesGetOrgPrivateRegistry(
method privateRegistriesDeleteOrgPrivateRegistry (line 8052) | async privateRegistriesDeleteOrgPrivateRegistry(
method privateRegistriesUpdateOrgPrivateRegistry (line 8082) | async privateRegistriesUpdateOrgPrivateRegistry(
method projectsListForOrg (line 8116) | async projectsListForOrg(
method projectsCreateForOrg (line 8141) | async projectsCreateForOrg(
method orgsGetAllCustomProperties (line 8162) | async orgsGetAllCustomProperties(
method orgsCreateOrUpdateCustomProperties (line 8195) | async orgsCreateOrUpdateCustomProperties(
method orgsGetCustomProperty (line 8216) | async orgsGetCustomProperty(
method orgsCreateOrUpdateCustomProperty (line 8244) | async orgsCreateOrUpdateCustomProperty(
method orgsRemoveCustomProperty (line 8282) | async orgsRemoveCustomProperty(
method orgsListCustomPropertiesValuesForRepos (line 8304) | async orgsListCustomPropertiesValuesForRepos(
method orgsCreateOrUpdateCustomPropertiesValuesForRepos (line 8344) | async orgsCreateOrUpdateCustomPropertiesValuesForRepos(
method orgsListPublicMembers (line 8363) | async orgsListPublicMembers(
method orgsCheckPublicMembershipForUser (line 8382) | async orgsCheckPublicMembershipForUser(
method orgsSetPublicMembershipForAuthenticatedUser (line 8403) | async orgsSetPublicMembershipForAuthenticatedUser(
method orgsRemovePublicMembershipForAuthenticatedUser (line 8421) | async orgsRemovePublicMembershipForAuthenticatedUser(
method reposListForOrg (line 8444) | async reposListForOrg(
method reposCreateInOrg (line 8469) | async reposCreateInOrg(
method reposGetOrgRulesets (line 8515) | async reposGetOrgRulesets(
method reposCreateOrgRuleset (line 8536) | async reposCreateOrgRuleset(
method reposGetOrgRuleSuites (line 8565) | async reposGetOrgRuleSuites(
method reposGetOrgRuleSuite (line 8597) | async reposGetOrgRuleSuite(
method reposGetOrgRuleset (line 8623) | async reposGetOrgRuleset(
method reposUpdateOrgRuleset (line 8640) | async reposUpdateOrgRuleset(
method reposDeleteOrgRuleset (line 8667) | async reposDeleteOrgRuleset(
method orgsGetOrgRulesetHistory (line 8684) | async orgsGetOrgRulesetHistory(
method orgsGetOrgRulesetVersion (line 8703) | async orgsGetOrgRulesetVersion(
method secretScanningListAlertsForOrg (line 8731) | async secretScanningListAlertsForOrg(
method securityAdvisoriesListOrgRepositoryAdvisories (line 8775) | async securityAdvisoriesListOrgRepositoryAdvisories(
method orgsListSecurityManagerTeams (line 8806) | async orgsListSecurityManagerTeams(
method orgsAddSecurityManagerTeam (line 8825) | async orgsAddSecurityManagerTeam(
method orgsRemoveSecurityManagerTeam (line 8847) | async orgsRemoveSecurityManagerTeam(
method billingGetGithubActionsBillingOrg (line 8875) | async billingGetGithubActionsBillingOrg(
method billingGetGithubPackagesBillingOrg (line 8900) | async billingGetGithubPackagesBillingOrg(
method billingGetSharedStorageBillingOrg (line 8925) | async billingGetSharedStorageBillingOrg(
method hostedComputeListNetworkConfigurationsForOrg (line 8947) | async hostedComputeListNetworkConfigurationsForOrg(
method hostedComputeCreateNetworkConfigurationForOrg (line 8971) | async hostedComputeCreateNetworkConfigurationForOrg(
method hostedComputeGetNetworkConfigurationForOrg (line 8994) | async hostedComputeGetNetworkConfigurationForOrg(
method hostedComputeDeleteNetworkConfigurationFromOrg (line 9019) | async hostedComputeDeleteNetworkConfigurationFromOrg(
method hostedComputeUpdateNetworkConfigurationForOrg (line 9044) | async hostedComputeUpdateNetworkConfigurationForOrg(
method hostedComputeGetNetworkSettingsForOrg (line 9070) | async hostedComputeGetNetworkSettingsForOrg(
method copilotCopilotMetricsForTeam (line 9114) | async copilotCopilotMetricsForTeam(
method copilotUsageMetricsForTeam (line 9170) | async copilotUsageMetricsForTeam(
method teamsList (line 9191) | async teamsList(
method teamsCreate (line 9214) | async teamsCreate(
method teamsGetByName (line 9249) | async teamsGetByName(
method teamsDeleteInOrg (line 9276) | async teamsDeleteInOrg(
method teamsUpdateInOrg (line 9299) | async teamsUpdateInOrg(
method teamsListDiscussionsInOrg (line 9336) | async teamsListDiscussionsInOrg(
method teamsCreateDiscussionInOrg (line 9371) | async teamsCreateDiscussionInOrg(
method teamsGetDiscussionInOrg (line 9400) | async teamsGetDiscussionInOrg(
method teamsDeleteDiscussionInOrg (line 9430) | async teamsDeleteDiscussionInOrg(
method teamsUpdateDiscussionInOrg (line 9460) | async teamsUpdateDiscussionInOrg(
method teamsListDiscussionCommentsInOrg (line 9492) | async teamsListDiscussionCommentsInOrg(
method teamsCreateDiscussionCommentInOrg (line 9530) | async teamsCreateDiscussionCommentInOrg(
method teamsGetDiscussionCommentInOrg (line 9562) | async teamsGetDiscussionCommentInOrg(
method teamsDeleteDiscussionCommentInOrg (line 9592) | async teamsDeleteDiscussionCommentInOrg(
method teamsUpdateDiscussionCommentInOrg (line 9622) | async teamsUpdateDiscussionCommentInOrg(
method reactionsListForTeamDiscussionCommentInOrg (line 9654) | async reactionsListForTeamDiscussionCommentInOrg(
method reactionsCreateForTeamDiscussionCommentInOrg (line 9693) | async reactionsCreateForTeamDiscussionCommentInOrg(
method reactionsDeleteForTeamDiscussionComment (line 9725) | async reactionsDeleteForTeamDiscussionComment(
method reactionsListForTeamDiscussionInOrg (line 9755) | async reactionsListForTeamDiscussionInOrg(
method reactionsCreateForTeamDiscussionInOrg (line 9793) | async reactionsCreateForTeamDiscussionInOrg(
method reactionsDeleteForTeamDiscussion (line 9825) | async reactionsDeleteForTeamDiscussion(
method teamsListPendingInvitationsInOrg (line 9851) | async teamsListPendingInvitationsInOrg(
method teamsListMembersInOrg (line 9874) | async teamsListMembersInOrg(
method teamsGetMembershipForUserInOrg (line 9915) | async teamsGetMembershipForUserInOrg(
method teamsAddOrUpdateMembershipForUserInOrg (line 9959) | async teamsAddOrUpdateMembershipForUserInOrg(
method teamsRemoveMembershipForUserInOrg (line 9997) | async teamsRemoveMembershipForUserInOrg(
method teamsListProjectsInOrg (line 10021) | async teamsListProjectsInOrg(
method teamsCheckPermissionsForProjectInOrg (line 10044) | async teamsCheckPermissionsForProjectInOrg(
method teamsAddOrUpdateProjectPermissionsInOrg (line 10068) | async teamsAddOrUpdateProjectPermissionsInOrg(
method teamsRemoveProjectInOrg (line 10094) | async teamsRemoveProjectInOrg(
method teamsListReposInOrg (line 10120) | async teamsListReposInOrg(
method teamsCheckPermissionsForRepoInOrg (line 10157) | async teamsCheckPermissionsForRepoInOrg(
method teamsAddOrUpdateRepoPermissionsInOrg (line 10187) | async teamsAddOrUpdateRepoPermissionsInOrg(
method teamsRemoveRepoInOrg (line 10215) | async teamsRemoveRepoInOrg(
method teamsListChildInOrg (line 10241) | async teamsListChildInOrg(
method orgsEnableOrDisableSecurityProductOnAllOrgRepos (line 10275) | async orgsEnableOrDisableSecurityProductOnAllOrgRepos(
method projectsGetCard (line 10301) | async projectsGetCard(
method projectsDeleteCard (line 10322) | async projectsDeleteCard(
method projectsUpdateCard (line 10343) | async projectsUpdateCard(
method projectsMoveCard (line 10366) | async projectsMoveCard(
method projectsGetColumn (line 10389) | async projectsGetColumn(
method projectsDeleteColumn (line 10410) | async projectsDeleteColumn(
method projectsUpdateColumn (line 10431) | async projectsUpdateColumn(
method projectsListCards (line 10454) | async projectsListCards(
method projectsCreateCard (line 10480) | async projectsCreateCard(
method projectsMoveColumn (line 10503) | async projectsMoveColumn(
method projectsGet (line 10526) | async projectsGet(
method projectsDelete (line 10547) | async projectsDelete(
method projectsUpdate (line 10568) | async projectsUpdate(
method projectsListCollaborators (line 10598) | async projectsListCollaborators(
method projectsAddCollaborator (line 10623) | async projectsAddCollaborator(
method projectsRemoveCollaborator (line 10649) | async projectsRemoveCollaborator(
method projectsGetPermissionForUser (line 10673) | async projectsGetPermissionForUser(
method projectsListColumns (line 10697) | async projectsListColumns(
method projectsCreateColumn (line 10720) | async projectsCreateColumn(
method rateLimitGet (line 10769) | async rateLimitGet(
method reposGet (line 10790) | async reposGet(
method reposDelete (line 10817) | async reposDelete(
method reposUpdate (line 10834) | async reposUpdate(
method actionsListArtifactsForRepo (line 10888) | async actionsListArtifactsForRepo(
method actionsGetArtifact (line 10917) | async actionsGetArtifact(
method actionsDeleteArtifact (line 10939) | async actionsDeleteArtifact(
method actionsDownloadArtifact (line 10965) | async actionsDownloadArtifact(
method actionsGetActionsCacheUsage (line 10995) | async actionsGetActionsCacheUsage(
method actionsGetActionsCacheList (line 11019) | async actionsGetActionsCacheList(
method actionsDeleteActionsCacheByKey (line 11044) | async actionsDeleteActionsCacheByKey(
method actionsDeleteActionsCacheById (line 11067) | async actionsDeleteActionsCacheById(
method actionsGetJobForWorkflowRun (line 11095) | async actionsGetJobForWorkflowRun(
method actionsDownloadJobLogsForWorkflowRun (line 11125) | async actionsDownloadJobLogsForWorkflowRun(
method actionsReRunJobForWorkflowRun (line 11149) | async actionsReRunJobForWorkflowRun(
method actionsGetCustomOidcSubClaimForRepo (line 11175) | async actionsGetCustomOidcSubClaimForRepo(
method actionsSetCustomOidcSubClaimForRepo (line 11199) | async actionsSetCustomOidcSubClaimForRepo(
method actionsListRepoOrganizationSecrets (line 11231) | async actionsListRepoOrganizationSecrets(
method actionsListRepoOrganizationVariables (line 11261) | async actionsListRepoOrganizationVariables(
method actionsGetGithubActionsPermissionsRepository (line 11288) | async actionsGetGithubActionsPermissionsRepository(
method actionsSetGithubActionsPermissionsRepository (line 11313) | async actionsSetGithubActionsPermissionsRepository(
method actionsGetWorkflowAccessToRepository (line 11340) | async actionsGetWorkflowAccessToRepository(
method actionsSetWorkflowAccessToRepository (line 11368) | async actionsSetWorkflowAccessToRepository(
method actionsGetAllowedActionsRepository (line 11394) | async actionsGetAllowedActionsRepository(
method actionsSetAllowedActionsRepository (line 11418) | async actionsSetAllowedActionsRepository(
method actionsGetGithubActionsDefaultWorkflowPermissionsRepository (line 11454) | async actionsGetGithubActionsDefaultWorkflowPermissionsRepository(
method actionsSetGithubActionsDefaultWorkflowPermissionsRepository (line 11483) | async actionsSetGithubActionsDefaultWorkflowPermissionsRepository(
method actionsListSelfHostedRunnersForRepo (line 11517) | async actionsListSelfHostedRunnersForRepo(
method actionsListRunnerApplicationsForRepo (line 11546) | async actionsListRunnerApplicationsForRepo(
method actionsGenerateRunnerJitconfigForRepo (line 11574) | async actionsGenerateRunnerJitconfigForRepo(
method actionsCreateRegistrationTokenForRepo (line 11616) | async actionsCreateRegistrationTokenForRepo(
method actionsCreateRemoveTokenForRepo (line 11656) | async actionsCreateRemoveTokenForRepo(
method actionsGetSelfHostedRunnerForRepo (line 11684) | async actionsGetSelfHostedRunnerForRepo(
method actionsDeleteSelfHostedRunnerFromRepo (line 11712) | async actionsDeleteSelfHostedRunnerFromRepo(
method actionsListLabelsForSelfHostedRunnerForRepo (line 11740) | async actionsListLabelsForSelfHostedRunnerForRepo(
method actionsAddCustomLabelsToSelfHostedRunnerForRepo (line 11769) | async actionsAddCustomLabelsToSelfHostedRunnerForRepo(
method actionsSetCustomLabelsForSelfHostedRunnerForRepo (line 11802) | async actionsSetCustomLabelsForSelfHostedRunnerForRepo(
method actionsRemoveAllCustomLabelsFromSelfHostedRunnerForRepo (line 11835) | async actionsRemoveAllCustomLabelsFromSelfHostedRunnerForRepo(
method actionsRemoveCustomLabelFromSelfHostedRunnerForRepo (line 11872) | async actionsRemoveCustomLabelFromSelfHostedRunnerForRepo(
method actionsListWorkflowRunsForRepo (line 11904) | async actionsListWorkflowRunsForRepo(
method actionsGetWorkflowRun (line 11945) | async actionsGetWorkflowRun(
method actionsDeleteWorkflowRun (line 11977) | async actionsDeleteWorkflowRun(
method actionsGetReviewsForRun (line 12001) | async actionsGetReviewsForRun(
method actionsApproveWorkflowRun (line 12025) | async actionsApproveWorkflowRun(
method actionsListWorkflowRunArtifacts (line 12053) | async actionsListWorkflowRunArtifacts(
method actionsGetWorkflowRunAttempt (line 12085) | async actionsGetWorkflowRunAttempt(
method actionsListJobsForWorkflowRunAttempt (line 12119) | async actionsListJobsForWorkflowRunAttempt(
method actionsDownloadWorkflowRunAttemptLogs (line 12151) | async actionsDownloadWorkflowRunAttemptLogs(
method actionsCancelWorkflowRun (line 12175) | async actionsCancelWorkflowRun(
method actionsReviewCustomGatesForRun (line 12206) | async actionsReviewCustomGatesForRun(
method actionsForceCancelWorkflowRun (line 12234) | async actionsForceCancelWorkflowRun(
method actionsListJobsForWorkflowRun (line 12264) | async actionsListJobsForWorkflowRun(
method actionsDownloadWorkflowRunLogs (line 12298) | async actionsDownloadWorkflowRunLogs(
method actionsDeleteWorkflowRunLogs (line 12322) | async actionsDeleteWorkflowRunLogs(
method actionsGetPendingDeploymentsForRun (line 12350) | async actionsGetPendingDeploymentsForRun(
method actionsReviewPendingDeploymentsForRun (line 12378) | async actionsReviewPendingDeploymentsForRun(
method actionsReRunWorkflow (line 12404) | async actionsReRunWorkflow(
method actionsReRunWorkflowFailedJobs (line 12430) | async actionsReRunWorkflowFailedJobs(
method actionsGetWorkflowRunUsage (line 12466) | async actionsGetWorkflowRunUsage(
method actionsListRepoSecrets (line 12496) | async actionsListRepoSecrets(
method actionsGetRepoPublicKey (line 12525) | async actionsGetRepoPublicKey(
method actionsGetRepoSecret (line 12553) | async actionsGetRepoSecret(
method actionsCreateOrUpdateRepoSecret (line 12583) | async actionsCreateOrUpdateRepoSecret(
method actionsDeleteRepoSecret (line 12613) | async actionsDeleteRepoSecret(
method actionsListRepoVariables (line 12641) | async actionsListRepoVariables(
method actionsCreateRepoVariable (line 12668) | async actionsCreateRepoVariable(
method actionsGetRepoVariable (line 12695) | async actionsGetRepoVariable(
method actionsDeleteRepoVariable (line 12723) | async actionsDeleteRepoVariable(
method actionsUpdateRepoVariable (line 12751) | async actionsUpdateRepoVariable(
method actionsListRepoWorkflows (line 12781) | async actionsListRepoWorkflows(
method actionsGetWorkflow (line 12810) | async actionsGetWorkflow(
method actionsDisableWorkflow (line 12834) | async actionsDisableWorkflow(
method actionsCreateWorkflowDispatch (line 12862) | async actionsCreateWorkflowDispatch(
method actionsEnableWorkflow (line 12888) | async actionsEnableWorkflow(
method actionsListWorkflowRuns (line 12920) | async actionsListWorkflowRuns(
method actionsGetWorkflowUsage (line 12974) | async actionsGetWorkflowUsage(
method reposListActivities (line 13000) | async reposListActivities(
method issuesListAssignees (line 13031) | async issuesListAssignees(
method issuesCheckUserCanBeAssigned (line 13058) | async issuesCheckUserCanBeAssigned(
method reposCreateAttestation (line 13086) | async reposCreateAttestation(
method reposListAttestations (line 13113) | async reposListAttestations(
method reposListAutolinks (line 13141) | async reposListAutolinks(
method reposCreateAutolink (line 13158) | async reposCreateAutolink(
method reposGetAutolink (line 13181) | async reposGetAutolink(
method reposDeleteAutolink (line 13205) | async reposDeleteAutolink(
method reposCheckAutomatedSecurityFixes (line 13225) | async reposCheckAutomatedSecurityFixes(
method reposEnableAutomatedSecurityFixes (line 13245) | async reposEnableAutomatedSecurityFixes(
method reposDisableAutomatedSecurityFixes (line 13265) | async reposDisableAutomatedSecurityFixes(
method reposListBranches (line 13285) | async reposListBranches(
method reposGetBranch (line 13306) | async reposGetBranch(
method reposGetBranchProtection (line 13326) | async reposGetBranchProtection(
method reposUpdateBranchProtection (line 13362) | async reposUpdateBranchProtection(
method reposDeleteBranchProtection (line 13397) | async reposDeleteBranchProtection(
method reposGetAdminBranchProtection (line 13417) | async reposGetAdminBranchProtection(
method reposSetAdminBranchProtection (line 13441) | async reposSetAdminBranchProtection(
method reposDeleteAdminBranchProtection (line 13465) | async reposDeleteAdminBranchProtection(
method reposGetPullRequestReviewProtection (line 13485) | async reposGetPullRequestReviewProtection(
method reposDeletePullRequestReviewProtection (line 13505) | async reposDeletePullRequestReviewProtection(
method reposUpdatePullRequestReviewProtection (line 13535) | async reposUpdatePullRequestReviewProtection(
method reposGetCommitSignatureProtection (line 13575) | async reposGetCommitSignatureProtection(
method reposCreateCommitSignatureProtection (line 13599) | async reposCreateCommitSignatureProtection(
method reposDeleteCommitSignatureProtection (line 13623) | async reposDeleteCommitSignatureProtection(
method reposGetStatusChecksProtection (line 13643) | async reposGetStatusChecksProtection(
method reposRemoveStatusCheckProtection (line 13663) | async reposRemoveStatusCheckProtection(
method reposUpdateStatusCheckProtection (line 13687) | async reposUpdateStatusCheckProtection(
method reposGetAllStatusCheckContexts (line 13709) | async reposGetAllStatusCheckContexts(
method reposAddStatusCheckContexts (line 13730) | async reposAddStatusCheckContexts(
method reposSetStatusCheckContexts (line 13753) | async reposSetStatusCheckContexts(
method reposRemoveStatusCheckContexts (line 13776) | async reposRemoveStatusCheckContexts(
method reposGetAccessRestrictions (line 13808) | async reposGetAccessRestrictions(
method reposDeleteAccessRestrictions (line 13832) | async reposDeleteAccessRestrictions(
method reposGetAppsWithAccessToProtectedBranch (line 13856) | async reposGetAppsWithAccessToProtectedBranch(
method reposAddAppAccessRestrictions (line 13880) | async reposAddAppAccessRestrictions(
method reposSetAppAccessRestrictions (line 13906) | async reposSetAppAccessRestrictions(
method reposRemoveAppAccessRestrictions (line 13932) | async reposRemoveAppAccessRestrictions(
method reposGetTeamsWithAccessToProtectedBranch (line 13958) | async reposGetTeamsWithAccessToProtectedBranch(
method reposAddTeamAccessRestrictions (line 13983) | async reposAddTeamAccessRestrictions(
method reposSetTeamAccessRestrictions (line 14010) | async reposSetTeamAccessRestrictions(
method reposRemoveTeamAccessRestrictions (line 14037) | async reposRemoveTeamAccessRestrictions(
method reposGetUsersWithAccessToProtectedBranch (line 14063) | async reposGetUsersWithAccessToProtectedBranch(
method reposAddUserAccessRestrictions (line 14095) | async reposAddUserAccessRestrictions(
method reposSetUserAccessRestrictions (line 14129) | async reposSetUserAccessRestrictions(
method reposRemoveUserAccessRestrictions (line 14163) | async reposRemoveUserAccessRestrictions(
method reposRenameBranch (line 14199) | async reposRenameBranch(
method checksCreate (line 14236) | async checksCreate(
method checksGet (line 14265) | async checksGet(
method checksUpdate (line 14296) | async checksUpdate(
method checksListAnnotations (line 14322) | async checksListAnnotations(
method checksRerequestRun (line 14352) | async checksRerequestRun(
method checksCreateSuite (line 14382) | async checksCreateSuite(
method checksSetSuitesPreferences (line 14403) | async checksSetSuitesPreferences(
method checksGetSuite (line 14435) | async checksGetSuite(
method checksListForSuite (line 14465) | async checksListForSuite(
method checksRerequestSuite (line 14493) | async checksRerequestSuite(
method codeScanningListAlertsForRepo (line 14525) | async codeScanningListAlertsForRepo(
method codeScanningGetAlert (line 14564) | async codeScanningGetAlert(
method codeScanningUpdateAlert (line 14586) | async codeScanningUpdateAlert(
method codeScanningGetAutofix (line 14618) | async codeScanningGetAutofix(
method codeScanningCreateAutofix (line 14650) | async codeScanningCreateAutofix(
method codeScanningCommitAutofix (line 14678) | async codeScanningCommitAutofix(
method codeScanningListAlertInstances (line 14704) | async codeScanningListAlertInstances(
method codeScanningListRecentAnalyses (line 14756) | async codeScanningListRecentAnalyses(
method codeScanningGetAnalysis (line 14823) | async codeScanningGetAnalysis(
method codeScanningDeleteAnalysis (line 14969) | async codeScanningDeleteAnalysis(
method codeScanningListCodeqlDatabases (line 14995) | async codeScanningListCodeqlDatabases(
method codeScanningGetCodeqlDatabase (line 15031) | async codeScanningGetCodeqlDatabase(
method codeScanningDeleteCodeqlDatabase (line 15055) | async codeScanningDeleteCodeqlDatabase(
method codeScanningCreateVariantAnalysis (line 15090) | async codeScanningCreateVariantAnalysis(
method codeScanningGetVariantAnalysis (line 15116) | async codeScanningGetVariantAnalysis(
method codeScanningGetVariantAnalysisRepoTask (line 15140) | async codeScanningGetVariantAnalysisRepoTask(
method codeScanningGetDefaultSetup (line 15164) | async codeScanningGetDefaultSetup(
method codeScanningUpdateDefaultSetup (line 15188) | async codeScanningUpdateDefaultSetup(
method codeScanningUploadSarif (line 15283) | async codeScanningUploadSarif(
method codeScanningGetSarif (line 15316) | async codeScanningGetSarif(
method codeSecurityGetConfigurationForRepository (line 15344) | async codeSecurityGetConfigurationForRepository(
method reposCodeownersErrors (line 15372) | async reposCodeownersErrors(
method codespacesListInRepositoryForAuthenticatedUser (line 15396) | async codespacesListInRepositoryForAuthenticatedUser(
method codespacesCreateWithRepoForAuthenticatedUser (line 15420) | async codespacesCreateWithRepoForAuthenticatedUser(
method codespacesListDevcontainersInRepositoryForAuthenticatedUser (line 15459) | async codespacesListDevcontainersInRepositoryForAuthenticatedUser(
method codespacesRepoMachinesForAuthenticatedUser (line 15485) | async codespacesRepoMachinesForAuthenticatedUser(
method codespacesPreFlightWithRepoForAuthenticatedUser (line 15511) | async codespacesPreFlightWithRepoForAuthenticatedUser(
method codespacesCheckPermissionsForDevcontainer (line 15534) | async codespacesCheckPermissionsForDevcontainer(
method codespacesListRepoSecrets (line 15564) | async codespacesListRepoSecrets(
method codespacesGetRepoPublicKey (line 15589) | async codespacesGetRepoPublicKey(
method codespacesGetRepoSecret (line 15613) | async codespacesGetRepoSecret(
method codespacesCreateOrUpdateRepoSecret (line 15639) | async codespacesCreateOrUpdateRepoSecret(
method codespacesDeleteRepoSecret (line 15665) | async codespacesDeleteRepoSecret(
method reposListCollaborators (line 15699) | async reposListCollaborators(
method reposCheckCollaborator (line 15732) | async reposCheckCollaborator(
method reposAddCollaborator (line 15792) | async reposAddCollaborator(
method reposRemoveCollaborator (line 15856) | async reposRemoveCollaborator(
method reposGetCollaboratorPermissionLevel (line 15888) | async reposGetCollaboratorPermissionLevel(
method reposListCommitCommentsForRepo (line 15922) | async reposListCommitCommentsForRepo(
method reposGetCommitComment (line 15955) | async reposGetCommitComment(
method reposDeleteCommitComment (line 15975) | async reposDeleteCommitComment(
method reposUpdateCommitComment (line 16009) | async reposUpdateCommitComment(
method reactionsListForCommitComment (line 16031) | async reactionsListForCommitComment(
method reactionsCreateForCommitComment (line 16055) | async reactionsCreateForCommitComment(
method reactionsDeleteForCommitComment (line 16083) | async reactionsDeleteForCommitComment(
method reposListCommits (line 16159) | async reposListCommits(
method reposListBranchesForHeadCommit (line 16194) | async reposListBranchesForHeadCommit(
method reposListCommentsForCommit (line 16228) | async reposListCommentsForCommit(
method reposCreateCommitComment (line 16268) | async reposCreateCommitComment(
method reposListPullRequestsAssociatedWithCommit (line 16294) | async reposListPullRequestsAssociatedWithCommit(
method reposGetCommit (line 16394) | async reposGetCommit(
method checksListForRef (line 16430) | async checksListForRef(
method checksListSuitesForRef (line 16472) | async checksListSuitesForRef(
method reposGetCombinedStatusForRef (line 16510) | async reposGetCombinedStatusForRef(
method reposListCommitStatusesForRef (line 16536) | async reposListCommitStatusesForRef(
method reposGetCommunityProfileMetrics (line 16578) | async reposGetCommunityProfileMetrics(
method reposCompareCommits (line 16695) | async reposCompareCommits(
method reposGetContent (line 16765) | async reposGetContent(
method reposCreateOrUpdateFileContents (line 16797) | async reposCreateOrUpdateFileContents(
method reposDeleteFile (line 16845) | async reposDeleteFile(
method reposListContributors (line 16871) | async reposListContributors(
method dependabotListAlertsForRepo (line 16892) | async dependabotListAlertsForRepo(
method dependabotGetAlert (line 16930) | async dependabotGetAlert(
method dependabotUpdateAlert (line 16954) | async dependabotUpdateAlert(
method dependabotListRepoSecrets (line 16982) | async dependabotListRepoSecrets(
method dependabotGetRepoPublicKey (line 17009) | async dependabotGetRepoPublicKey(
method dependabotGetRepoSecret (line 17033) | async dependabotGetRepoSecret(
method dependabotCreateOrUpdateRepoSecret (line 17059) | async dependabotCreateOrUpdateRepoSecret(
method dependabotDeleteRepoSecret (line 17085) | async dependabotDeleteRepoSecret(
method dependencyGraphDiffRange (line 17105) | async dependencyGraphDiffRange(
method dependencyGraphExportSbom (line 17127) | async dependencyGraphExportSbom(
method dependencyGraphCreateRepositorySnapshot (line 17155) | async dependencyGraphCreateRepositorySnapshot(
method reposListDeployments (line 17187) | async reposListDeployments(
method reposCreateDeployment (line 17302) | async reposCreateDeployment(
method reposGetDeployment (line 17332) | async reposGetDeployment(
method reposDeleteDeployment (line 17370) | async reposDeleteDeployment(
method reposListDeploymentStatuses (line 17390) | async reposListDeploymentStatuses(
method reposCreateDeploymentStatus (line 17416) | async reposCreateDeploymentStatus(
method reposGetDeploymentStatus (line 17447) | async reposGetDeploymentStatus(
method reposCreateDispatchEvent (line 17479) | async reposCreateDispatchEvent(
method reposGetAllEnvironments (line 17506) | async reposGetAllEnvironments(
method reposGetEnvironment (line 17535) | async reposGetEnvironment(
method reposCreateOrUpdateEnvironment (line 17571) | async reposCreateOrUpdateEnvironment(
method reposDeleteAnEnvironment (line 17599) | async reposDeleteAnEnvironment(
method reposListDeploymentBranchPolicies (line 17627) | async reposListDeploymentBranchPolicies(
method reposCreateDeploymentBranchPolicy (line 17653) | async reposCreateDeploymentBranchPolicy(
method reposGetDeploymentBranchPolicy (line 17683) | async reposGetDeploymentBranchPolicy(
method reposUpdateDeploymentBranchPolicy (line 17707) | async reposUpdateDeploymentBranchPolicy(
method reposDeleteDeploymentBranchPolicy (line 17733) | async reposDeleteDeploymentBranchPolicy(
method reposGetAllDeploymentProtectionRules (line 17761) | async reposGetAllDeploymentProtectionRules(
method reposCreateDeploymentProtectionRule (line 17793) | async reposCreateDeploymentProtectionRule(
method reposListCustomDeploymentRuleIntegrations (line 17831) | async reposListCustomDeploymentRuleIntegrations(
method reposGetCustomDeploymentProtectionRule (line 17861) | async reposGetCustomDeploymentProtectionRule(
method reposDisableDeploymentProtectionRule (line 17889) | async reposDisableDeploymentProtectionRule(
method actionsListEnvironmentSecrets (line 17919) | async actionsListEnvironmentSecrets(
method actionsGetEnvironmentPublicKey (line 17951) | async actionsGetEnvironmentPublicKey(
method actionsGetEnvironmentSecret (line 17979) | async actionsGetEnvironmentSecret(
method actionsCreateOrUpdateEnvironmentSecret (line 18009) | async actionsCreateOrUpdateEnvironmentSecret(
method actionsDeleteEnvironmentSecret (line 18039) | async actionsDeleteEnvironmentSecret(
method actionsListEnvironmentVariables (line 18067) | async actionsListEnvironmentVariables(
method actionsCreateEnvironmentVariable (line 18097) | async actionsCreateEnvironmentVariable(
method actionsGetEnvironmentVariable (line 18127) | async actionsGetEnvironmentVariable(
method actionsDeleteEnvironmentVariable (line 18155) | async actionsDeleteEnvironmentVariable(
method actionsUpdateEnvironmentVariable (line 18183) | async actionsUpdateEnvironmentVariable(
method activityListRepoEvents (line 18207) | async activityListRepoEvents(
method reposListForks (line 18226) | async reposListForks(
method reposCreateFork (line 18259) | async reposCreateFork(
method gitCreateBlob (line 18278) | async gitCreateBlob(
method gitGetBlob (line 18311) | async gitGetBlob(
method gitCreateCommit (line 18391) | async gitCreateCommit(
method gitGetCommit (line 18482) | async gitGetCommit(
method gitListMatchingRefs (line 18516) | async gitListMatchingRefs(
method gitGetRef (line 18542) | async gitGetRef(
method gitCreateRef (line 18562) | async gitCreateRef(
method gitDeleteRef (line 18581) | async gitDeleteRef(
method gitUpdateRef (line 18601) | async gitUpdateRef(
method gitCreateTag (line 18683) | async gitCreateTag(
method gitGetTag (line 18758) | async gitGetTag(
method gitCreateTree (line 18786) | async gitCreateTree(
method gitGetTree (line 18815) | async gitGetTree(
method reposListWebhooks (line 18837) | async reposListWebhooks(
method reposCreateWebhook (line 18858) | async reposCreateWebhook(
method reposGetWebhook (line 18877) | async reposGetWebhook(
method reposDeleteWebhook (line 18901) | async reposDeleteWebhook(
method reposUpdateWebhook (line 18921) | async reposUpdateWebhook(
method reposGetWebhookConfigForRepo (line 18954) | async reposGetWebhookConfigForRepo(
method reposUpdateWebhookConfigForRepo (line 18978) | async reposUpdateWebhookConfigForRepo(
method reposListWebhookDeliveries (line 19000) | async reposListWebhookDeliveries(
method reposGetWebhookDelivery (line 19022) | async reposGetWebhookDelivery(
method reposRedeliverWebhookDelivery (line 19042) | async reposRedeliverWebhookDelivery(
method reposPingWebhook (line 19062) | async reposPingWebhook(
method reposTestPushWebhook (line 19088) | async reposTestPushWebhook(
method migrationsGetImportStatus (line 19180) | async migrationsGetImportStatus(
method migrationsStartImport (line 19207) | async migrationsStartImport(
method migrationsCancelImport (line 19239) | async migrationsCancelImport(
method migrationsUpdateImport (line 19272) | async migrationsUpdateImport(
method migrationsGetCommitAuthors (line 19307) | async migrationsGetCommitAuthors(
method migrationsMapCommitAuthor (line 19334) | async migrationsMapCommitAuthor(
method migrationsGetLargeFiles (line 19362) | async migrationsGetLargeFiles(
method migrationsSetLfsPreference (line 19393) | async migrationsSetLfsPreference(
method appsGetRepoInstallation (line 19416) | async appsGetRepoInstallation(
method interactionsGetRestrictionsForRepo (line 19433) | async interactionsGetRestrictionsForRepo(
method interactionsSetRestrictionsForRepo (line 19450) | async interactionsSetRestrictionsForRepo(
method interactionsRemoveRestrictionsForRepo (line 19469) | async interactionsRemoveRestrictionsForRepo(
method reposListInvitations (line 19489) | async reposListInvitations(
method reposDeleteInvitation (line 19508) | async reposDeleteInvitation(
method reposUpdateInvitation (line 19528) | async reposUpdateInvitation(
method issuesListForRepo (line 19570) | async issuesListForRepo(
method issuesCreate (line 19625) | async issuesCreate(
method issuesListCommentsForRepo (line 19671) | async issuesListCommentsForRepo(
method issuesGetComment (line 19706) | async issuesGetComment(
method issuesDeleteComment (line 19726) | async issuesDeleteComment(
method issuesUpdateComment (line 19760) | async issuesUpdateComment(
method reactionsListForIssueComment (line 19782) | async reactionsListForIssueComment(
method reactionsCreateForIssueComment (line 19806) | async reactionsCreateForIssueComment(
method reactionsDeleteForIssueComment (line 19834) | async reactionsDeleteForIssueComment(
method issuesListEventsForRepo (line 19854) | async issuesListEventsForRepo(
method issuesGetEvent (line 19873) | async issuesGetEvent(
method issuesGet (line 19923) | async issuesGet(
method issuesUpdate (line 19957) | async issuesUpdate(
method issuesAddAssignees (line 19990) | async issuesAddAssignees(
method issuesRemoveAssignees (line 20012) | async issuesRemoveAssignees(
method issuesCheckUserCanBeAssignedToIssue (line 20042) | async issuesCheckUserCanBeAssignedToIssue(
method issuesListComments (line 20080) | async issuesListComments(
method issuesCreateComment (line 20128) | async issuesCreateComment(
method issuesListEvents (line 20150) | async issuesListEvents(
method issuesListLabelsOnIssue (line 20172) | async issuesListLabelsOnIssue(
method issuesAddLabels (line 20195) | async issuesAddLabels(
method issuesSetLabels (line 20218) | async issuesSetLabels(
method issuesRemoveAllLabels (line 20240) | async issuesRemoveAllLabels(
method issuesRemoveLabel (line 20260) | async issuesRemoveLabel(
method issuesLock (line 20284) | async issuesLock(
method issuesUnlock (line 20306) | async issuesUnlock(
method reactionsListForIssue (line 20326) | async reactionsListForIssue(
method reactionsCreateForIssue (line 20350) | async reactionsCreateForIssue(
method reactionsDeleteForIssue (line 20378) | async reactionsDeleteForIssue(
method issuesRemoveSubIssue (line 20414) | async issuesRemoveSubIssue(
method issuesListSubIssues (line 20450) | async issuesListSubIssues(
method issuesAddSubIssue (line 20494) | async issuesAddSubIssue(
method issuesReprioritizeSubIssue (line 20516) | async issuesReprioritizeSubIssue(
method issuesListEventsForTimeline (line 20538) | async issuesListEventsForTimeline(
method reposListDeployKeys (line 20560) | async reposListDeployKeys(
method reposCreateDeployKey (line 20579) | async reposCreateDeployKey(
method reposGetDeployKey (line 20598) | async reposGetDeployKey(
method reposDeleteDeployKey (line 20618) | async reposDeleteDeployKey(
method issuesListLabelsForRepo (line 20638) | async issuesListLabelsForRepo(
method issuesCreateLabel (line 20657) | async issuesCreateLabel(
method issuesGetLabel (line 20676) | async issuesGetLabel(
method issuesDeleteLabel (line 20696) | async issuesDeleteLabel(
method issuesUpdateLabel (line 20716) | async issuesUpdateLabel(
method reposListLanguages (line 20738) | async reposListLanguages(
method licensesGetForRepo (line 20765) | async licensesGetForRepo(
method reposMergeUpstream (line 20784) | async reposMergeUpstream(
method reposMerge (line 20803) | async reposMerge(
method issuesListMilestones (line 20822) | async issuesListMilestones(
method issuesCreateMilestone (line 20843) | async issuesCreateMilestone(
method issuesGetMilestone (line 20862) | async issuesGetMilestone(
method issuesDeleteMilestone (line 20882) | async issuesDeleteMilestone(
method issuesUpdateMilestone (line 20902) | async issuesUpdateMilestone(
method issuesListLabelsForMilestone (line 20924) | async issuesListLabelsForMilestone(
method activityListRepoNotificationsForAuthenticatedUser (line 20947) | async activityListRepoNotificationsForAuthenticatedUser(
method activityMarkRepoNotificationsAsRead (line 20976) | async activityMarkRepoNotificationsAsRead(
method reposGetPages (line 20999) | async reposGetPages(
method reposCreatePagesSite (line 21025) | async reposCreatePagesSite(
method reposUpdateInformationAboutPagesSite (line 21053) | async reposUpdateInformationAboutPagesSite(
method reposDeletePagesSite (line 21080) | async reposDeletePagesSite(
method reposListPagesBuilds (line 21101) | async reposListPagesBuilds(
method reposRequestPagesBuild (line 21124) | async reposRequestPagesBuild(
method reposGetLatestPagesBuild (line 21145) | async reposGetLatestPagesBuild(
method reposGetPagesBuild (line 21169) | async reposGetPagesBuild(
method reposCreatePagesDeployment (line 21193) | async reposCreatePagesDeployment(
method reposGetPagesDeployment (line 21223) | async reposGetPagesDeployment(
method reposCancelPagesDeployment (line 21247) | async reposCancelPagesDeployment(
method reposGetPagesHealthCheck (line 21279) | async reposGetPagesHealthCheck(
method reposCheckPrivateVulnerabilityReporting (line 21296) | async reposCheckPrivateVulnerabilityReporting(
method reposEnablePrivateVulnerabilityReporting (line 21316) | async reposEnablePrivateVulnerabilityReporting(
method reposDisablePrivateVulnerabilityReporting (line 21336) | async reposDisablePrivateVulnerabilityReporting(
method projectsListForRepo (line 21360) | async projectsListForRepo(
method projectsCreateForRepo (line 21385) | async projectsCreateForRepo(
method reposGetCustomPropertiesValues (line 21406) | async reposGetCustomPropertiesValues(
method reposCreateOrUpdateCustomPropertiesValues (line 21429) | async reposCreateOrUpdateCustomPropertiesValues(
method pullsList (line 21474) | async pullsList(
method pullsCreate (line 21526) | async pullsCreate(
method pullsListReviewCommentsForRepo (line 21571) | async pullsListReviewCommentsForRepo(
method pullsGetReviewComment (line 21606) | async pullsGetReviewComment(
method pullsDeleteReviewComment (line 21626) | async pullsDeleteReviewComment(
method pullsUpdateReviewComment (line 21660) | async pullsUpdateReviewComment(
method reactionsListForPullRequestReviewComment (line 21682) | async reactionsListForPullRequestReviewComment(
method reactionsCreateForPullRequestReviewComment (line 21706) | async reactionsCreateForPullRequestReviewComment(
method reactionsDeleteForPullRequestComment (line 21734) | async reactionsDeleteForPullRequestComment(
method pullsGet (line 21798) | async pullsGet(
method pullsUpdate (line 21836) | async pullsUpdate(
method codespacesCreateWithPrForAuthenticatedUser (line 21869) | async codespacesCreateWithPrForAuthenticatedUser(
method pullsListReviewComments (line 21919) | async pullsListReviewComments(
method pullsCreateReviewComment (line 21971) | async pullsCreateReviewComment(
method pullsCreateReplyForReviewComment (line 22025) | async pullsCreateReplyForReviewComment(
method pullsListCommits (line 22065) | async pullsListCommits(
method pullsListFiles (line 22107) | async pullsListFiles(
method pullsCheckIfMerged (line 22129) | async pullsCheckIfMerged(
method pullsMerge (line 22151) | async pullsMerge(
method pullsListRequestedReviewers (line 22179) | async pullsListRequestedReviewers(
method pullsRequestReviewers (line 22202) | async pullsRequestReviewers(
method pullsRemoveRequestedReviewers (line 22224) | async pullsRemoveRequestedReviewers(
method pullsListReviews (line 22260) | async pullsListReviews(
method pullsCreateReview (line 22314) | async pullsCreateReview(
method pullsGetReview (line 22350) | async pullsGetReview(
method pullsUpdateReview (line 22384) | async pullsUpdateReview(
method pullsDeletePendingReview (line 22420) | async pullsDeletePendingReview(
method pullsListCommentsForReview (line 22454) | async pullsListCommentsForReview(
method pullsDismissReview (line 22496) | async pullsDismissReview(
method pullsSubmitReview (line 22532) | async pullsSubmitReview(
method pullsUpdateBranch (line 22556) | async pullsUpdateBranch(
method reposGetReadme (line 22588) | async reposGetReadme(
method reposGetReadmeInDirectory (line 22617) | async reposGetReadmeInDirectory(
method reposListReleases (line 22643) | async reposListReleases(
method reposCreateRelease (line 22666) | async reposCreateRelease(
method reposGetReleaseAsset (line 22708) | async reposGetReleaseAsset(
method reposDeleteReleaseAsset (line 22728) | async reposDeleteReleaseAsset(
method reposUpdateReleaseAsset (line 22748) | async reposUpdateReleaseAsset(
method reposGenerateReleaseNotes (line 22770) | async reposGenerateReleaseNotes(
method reposGetLatestRelease (line 22802) | async reposGetLatestRelease(
method reposGetReleaseByTag (line 22819) | async reposGetReleaseByTag(
method reposGetRelease (line 22845) | async reposGetRelease(
method reposDeleteRelease (line 22865) | async reposDeleteRelease(
method reposUpdateRelease (line 22885) | async reposUpdateRelease(
method reposListReleaseAssets (line 22917) | async reposListReleaseAssets(
method reposUploadReleaseAsset (line 22975) | async reposUploadReleaseAsset(
method reactionsListForRelease (line 22997) | async reactionsListForRelease(
method reactionsCreateForRelease (line 23021) | async reactionsCreateForRelease(
method reactionsDeleteForRelease (line 23049) | async reactionsDeleteForRelease(
method reposGetBranchRules (line 23075) | async reposGetBranchRules(
method reposGetRepoRulesets (line 23097) | async reposGetRepoRulesets(
method reposCreateRepoRuleset (line 23118) | async reposCreateRepoRuleset(
method reposGetRepoRuleSuites (line 23147) | async reposGetRepoRuleSuites(
method reposGetRepoRuleSuite (line 23178) | async reposGetRepoRuleSuite(
method reposGetRepoRuleset (line 23204) | async reposGetRepoRuleset(
method reposUpdateRepoRuleset (line 23226) | async reposUpdateRepoRuleset(
method reposDeleteRepoRuleset (line 23256) | async reposDeleteRepoRuleset(
method reposGetRepoRulesetHistory (line 23276) | async reposGetRepoRulesetHistory(
method reposGetRepoRulesetVersion (line 23298) | async reposGetRepoRulesetVersion(
method secretScanningListAlertsForRepo (line 23326) | async secretScanningListAlertsForRepo(
method secretScanningGetAlert (line 23372) | async secretScanningGetAlert(
method secretScanningUpdateAlert (line 23400) | async secretScanningUpdateAlert(
method secretScanningListLocationsForAlert (line 23430) | async secretScanningListLocationsForAlert(
method secretScanningCreatePushProtectionBypass (line 23460) | async secretScanningCreatePushProtectionBypass(
method secretScanningGetScanHistory (line 23486) | async secretScanningGetScanHistory(
method securityAdvisoriesListRepositoryAdvisories (line 23514) | async securityAdvisoriesListRepositoryAdvisories(
method securityAdvisoriesCreateRepositoryAdvisory (line 23551) | async securityAdvisoriesCreateRepositoryAdvisory(
method securityAdvisoriesCreatePrivateVulnerabilityReport (line 23584) | async securityAdvisoriesCreatePrivateVulnerabilityReport(
method securityAdvisoriesGetRepositoryAdvisory (line 23629) | async securityAdvisoriesGetRepositoryAdvisory(
method securityAdvisoriesUpdateRepositoryAdvisory (line 23659) | async securityAdvisoriesUpdateRepositoryAdvisory(
method securityAdvisoriesCreateRepositoryAdvisoryCveRequest (line 23707) | async securityAdvisoriesCreateRepositoryAdvisoryCveRequest(
method securityAdvisoriesCreateFork (line 23733) | async securityAdvisoriesCreateFork(
method activityListStargazersForRepo (line 23761) | async activityListStargazersForRepo(
method reposGetCodeFrequencyStats (line 23786) | async reposGetCodeFrequencyStats(
method reposGetCommitActivityStats (line 23806) | async reposGetCommitActivityStats(
method reposGetContributorsStats (line 23844) | async reposGetContributorsStats(
method reposGetParticipationStats (line 23869) | async reposGetParticipationStats(
method reposGetPunchCardStats (line 23901) | async reposGetPunchCardStats(
method reposCreateCommitStatus (line 23922) | async reposCreateCommitStatus(
method activityListWatchersForRepo (line 23944) | async activityListWatchersForRepo(
method activityGetRepoSubscription (line 23963) | async activityGetRepoSubscription(
method activitySetRepoSubscription (line 23980) | async activitySetRepoSubscription(
method activityDeleteRepoSubscription (line 23999) | async activityDeleteRepoSubscription(
method reposListTags (line 24016) | async reposListTags(
method reposListTagProtection (line 24045) | async reposListTagProtection(
method reposCreateTagProtection (line 24070) | async reposCreateTagProtection(
method reposDeleteTagProtection (line 24097) | async reposDeleteTagProtection(
method reposDownloadTarballArchive (line 24127) | async reposDownloadTarballArchive(
method reposListTeams (line 24155) | async reposListTeams(
method reposGetAllTopics (line 24174) | async reposGetAllTopics(
method reposReplaceAllTopics (line 24193) | async reposReplaceAllTopics(
method reposGetClones (line 24212) | async reposGetClones(
method reposGetTopPaths (line 24231) | async reposGetTopPaths(
method reposGetTopReferrers (line 24251) | async reposGetTopReferrers(
method reposGetViews (line 24271) | async reposGetViews(
method reposTransfer (line 24290) | async reposTransfer(
method reposCheckVulnerabilityAlerts (line 24309) | async reposCheckVulnerabilityAlerts(
method reposEnableVulnerabilityAlerts (line 24329) | async reposEnableVulnerabilityAlerts(
method reposDisableVulnerabilityAlerts (line 24353) | async reposDisableVulnerabilityAlerts(
method reposDownloadZipballArchive (line 24383) | async reposDownloadZipballArchive(
method reposCreateUsingTemplate (line 24407) | async reposCreateUsingTemplate(
method reposListPublic (line 24444) | async reposListPublic(
method searchCode (line 24501) | async searchCode(
method searchCommits (line 24536) | async searchCommits(
method searchIssuesAndPullRequests (line 24561) | async searchIssuesAndPullRequests(
method searchLabels (line 24606) | async searchLabels(
method searchRepos (line 24651) | async searchRepos(
method searchTopics (line 24688) | async searchTopics(
method searchUsers (line 24729) | async searchUsers(
method teamsGetLegacy (line 24752) | async teamsGetLegacy(
method teamsDeleteLegacy (line 24779) | async teamsDeleteLegacy(
method teamsUpdateLegacy (line 24808) | async teamsUpdateLegacy(
method teamsListDiscussionsLegacy (line 24845) | async teamsListDiscussionsLegacy(
method teamsCreateDiscussionLegacy (line 24880) | async teamsCreateDiscussionLegacy(
method teamsGetDiscussionLegacy (line 24909) | async teamsGetDiscussionLegacy(
method teamsDeleteDiscussionLegacy (line 24939) | async teamsDeleteDiscussionLegacy(
method teamsUpdateDiscussionLegacy (line 24969) | async teamsUpdateDiscussionLegacy(
method teamsListDiscussionCommentsLegacy (line 25001) | async teamsListDiscussionCommentsLegacy(
method teamsCreateDiscussionCommentLegacy (line 25039) | async teamsCreateDiscussionCommentLegacy(
method teamsGetDiscussionCommentLegacy (line 25071) | async teamsGetDiscussionCommentLegacy(
method teamsDeleteDiscussionCommentLegacy (line 25101) | async teamsDeleteDiscussionCommentLegacy(
method teamsUpdateDiscussionCommentLegacy (line 25131) | async teamsUpdateDiscussionCommentLegacy(
method reactionsListForTeamDiscussionCommentLegacy (line 25163) | async reactionsListForTeamDiscussionCommentLegacy(
method reactionsCreateForTeamDiscussionCommentLegacy (line 25202) | async reactionsCreateForTeamDiscussionCommentLegacy(
method reactionsListForTeamDiscussionLegacy (line 25234) | async reactionsListForTeamDiscussionLegacy(
method reactionsCreateForTeamDiscussionLegacy (line 25272) | async reactionsCreateForTeamDiscussionLegacy(
method teamsListPendingInvitationsLegacy (line 25300) | async teamsListPendingInvitationsLegacy(
method teamsListMembersLegacy (line 25325) | async teamsListMembersLegacy(
method teamsGetMemberLegacy (line 25354) | async teamsGetMemberLegacy(
method teamsAddMemberLegacy (line 25393) | async teamsAddMemberLegacy(
method teamsRemoveMemberLegacy (line 25428) | async teamsRemoveMemberLegacy(
method teamsGetMembershipForUserLegacy (line 25465) | async teamsGetMembershipForUserLegacy(
method teamsAddOrUpdateMembershipForUserLegacy (line 25506) | async teamsAddOrUpdateMembershipForUserLegacy(
method teamsRemoveMembershipForUserLegacy (line 25541) | async teamsRemoveMembershipForUserLegacy(
method teamsListProjectsLegacy (line 25565) | async teamsListProjectsLegacy(
method teamsCheckPermissionsForProjectLegacy (line 25588) | async teamsCheckPermissionsForProjectLegacy(
method teamsAddOrUpdateProjectPermissionsLegacy (line 25609) | async teamsAddOrUpdateProjectPermissionsLegacy(
method teamsRemoveProjectLegacy (line 25632) | async teamsRemoveProjectLegacy(
method teamsListReposLegacy (line 25654) | async teamsListReposLegacy(
method teamsCheckPermissionsForRepoLegacy (line 25685) | async teamsCheckPermissionsForRepoLegacy(
method teamsAddOrUpdateRepoPermissionsLegacy (line 25715) | async teamsAddOrUpdateRepoPermissionsLegacy(
method teamsRemoveRepoLegacy (line 25743) | async teamsRemoveRepoLegacy(
method teamsListChildLegacy (line 25765) | async teamsListChildLegacy(
method usersGetAuthenticated (line 25784) | async usersGetAuthenticated(
method usersUpdateAuthenticated (line 25799) | async usersUpdateAuthenticated(
method usersListBlockedByAuthenticatedUser (line 25828) | async usersListBlockedByAuthenticatedUser(
method usersCheckBlocked (line 25847) | async usersCheckBlocked(
method usersBlock (line 25864) | async usersBlock(
method usersUnblock (line 25881) | async usersUnblock(
method codespacesListForAuthenticatedUser (line 25902) | async codespacesListForAuthenticatedUser(
method codespacesCreateForAuthenticatedUser (line 25932) | async codespacesCreateForAuthenticatedUser(
method codespacesListSecretsForAuthenticatedUser (line 25961) | async codespacesListSecretsForAuthenticatedUser(
method codespacesGetPublicKeyForAuthenticatedUser (line 25988) | async codespacesGetPublicKeyForAuthenticatedUser(
method codespacesGetSecretForAuthenticatedUser (line 26013) | async codespacesGetSecretForAuthenticatedUser(
method codespacesCreateOrUpdateSecretForAuthenticatedUser (line 26041) | async codespacesCreateOrUpdateSecretForAuthenticatedUser(
method codespacesDeleteSecretForAuthenticatedUser (line 26073) | async codespacesDeleteSecretForAuthenticatedUser(
method codespacesListRepositoriesForSecretForAuthenticatedUser (line 26099) | async codespacesListRepositoriesForSecretForAuthenticatedUser(
method codespacesSetRepositoriesForSecretForAuthenticatedUser (line 26125) | async codespacesSetRepositoriesForSecretForAuthenticatedUser(
method codespacesAddRepositoryForSecretForAuthenticatedUser (line 26153) | async codespacesAddRepositoryForSecretForAuthenticatedUser(
method codespacesRemoveRepositoryForSecretForAuthenticatedUser (line 26182) | async codespacesRemoveRepositoryForSecretForAuthenticatedUser(
method codespacesGetForAuthenticatedUser (line 26206) | async codespacesGetForAuthenticatedUser(
method codespacesDeleteForAuthenticatedUser (line 26227) | async codespacesDeleteForAuthenticatedUser(
method codespacesUpdateForAuthenticatedUser (line 26252) | async codespacesUpdateForAuthenticatedUser(
method codespacesExportForAuthenticatedUser (line 26279) | async codespacesExportForAuthenticatedUser(
method codespacesGetExportDetailsForAuthenticatedUser (line 26301) | async codespacesGetExportDetailsForAuthenticatedUser(
method codespacesCodespaceMachinesForAuthenticatedUser (line 26326) | async codespacesCodespaceMachinesForAuthenticatedUser(
method codespacesPublishForAuthenticatedUser (line 26355) | async codespacesPublishForAuthenticatedUser(
method codespacesStartForAuthenticatedUser (line 26378) | async codespacesStartForAuthenticatedUser(
method codespacesStopForAuthenticatedUser (line 26399) | async codespacesStopForAuthenticatedUser(
method packagesListDockerMigrationConflictingPackagesForAuthenticatedUser (line 26421) | async packagesListDockerMigrationConflictingPackagesForAuthenticatedUser(
method usersSetPrimaryEmailVisibilityForAuthenticatedUser (line 26439) | async usersSetPrimaryEmailVisibilityForAuthenticatedUser(
method usersListEmailsForAuthenticatedUser (line 26464) | async usersListEmailsForAuthenticatedUser(
method usersAddEmailForAuthenticatedUser (line 26484) | async usersAddEmailForAuthenticatedUser(
method usersDeleteEmailForAuthenticatedUser (line 26504) | async usersDeleteEmailForAuthenticatedUser(
method usersListFollowersForAuthenticatedUser (line 26523) | async usersListFollowersForAuthenticatedUser(
method usersListFollowedByAuthenticatedUser (line 26542) | async usersListFollowedByAuthenticatedUser(
method usersCheckPersonIsFollowedByAuthenticated (line 26561) | async usersCheckPersonIsFollowedByAuthenticated(
method usersFollow (line 26582) | async usersFollow(
method usersUnfollow (line 26599) | async usersUnfollow(
method usersListGpgKeysForAuthenticatedUser (line 26620) | async usersListGpgKeysForAuthenticatedUser(
method usersCreateGpgKeyForAuthenticatedUser (line 26643) | async usersCreateGpgKeyForAuthenticatedUser(
method usersGetGpgKeyForAuthenticatedUser (line 26666) | async usersGetGpgKeyForAuthenticatedUser(
method usersDeleteGpgKeyForAuthenticatedUser (line 26687) | async usersDeleteGpgKeyForAuthenticatedUser(
method appsListInstallationsForAuthenticatedUser (line 26712) | async appsListInstallationsForAuthenticatedUser(
method appsListInstallationReposForAuthenticatedUser (line 26740) | async appsListInstallationReposForAuthenticatedUser(
method appsAddRepoToInstallationForAuthenticatedUser (line 26764) | async appsAddRepoToInstallationForAuthenticatedUser(
method appsRemoveRepoFromInstallationForAuthenticatedUser (line 26789) | async appsRemoveRepoFromInstallationForAuthenticatedUser(
method interactionsGetRestrictionsForAuthenticatedUser (line 26810) | async interactionsGetRestrictionsForAuthenticatedUser(
method interactionsSetRestrictionsForAuthenticatedUser (line 26828) | async interactionsSetRestrictionsForAuthenticatedUser(
method interactionsRemoveRestrictionsForAuthenticatedUser (line 26848) | async interactionsRemoveRestrictionsForAuthenticatedUser(
method issuesListForAuthenticatedUser (line 26885) | async issuesListForAuthenticatedUser(
method usersListPublicSshKeysForAuthenticatedUser (line 26920) | async usersListPublicSshKeysForAuthenticatedUser(
method usersCreatePublicSshKeyForAuthenticatedUser (line 26943) | async usersCreatePublicSshKeyForAuthenticatedUser(
method usersGetPublicSshKeyForAuthenticatedUser (line 26966) | async usersGetPublicSshKeyForAuthenticatedUser(
method usersDeletePublicSshKeyForAuthenticatedUser (line 26987) | async usersDeletePublicSshKeyForAuthenticatedUser(
method appsListSubscriptionsForAuthenticatedUser (line 27004) | async appsListSubscriptionsForAuthenticatedUser(
method appsListSubscriptionsForAuthenticatedUserStubbed (line 27024) | async appsListSubscriptionsForAuthenticatedUserStubbed(
method orgsListMembershipsForAuthenticatedUser (line 27043) | async orgsListMembershipsForAuthenticatedUser(
method orgsGetMembershipForAuthenticatedUser (line 27064) | async orgsGetMembershipForAuthenticatedUser(
method orgsUpdateMembershipForAuthenticatedUser (line 27081) | async orgsUpdateMembershipForAuthenticatedUser(
method migrationsListForAuthenticatedUser (line 27100) | async migrationsListForAuthenticatedUser(
method migrationsStartForAuthenticatedUser (line 27119) | async migrationsStartForAuthenticatedUser(
method migrationsGetStatusForAuthenticatedUser (line 27163) | async migrationsGetStatusForAuthenticatedUser(
method migrationsGetArchiveForAuthenticatedUser (line 27222) | async migrationsGetArchiveForAuthenticatedUser(
method migrationsDeleteArchiveForAuthenticatedUser (line 27239) | async migrationsDeleteArchiveForAuthenticatedUser(
method migrationsUnlockRepoForAuthenticatedUser (line 27256) | async migrationsUnlockRepoForAuthenticatedUser(
method migrationsListReposForAuthenticatedUser (line 27276) | async migrationsListReposForAuthenticatedUser(
method orgsListForAuthenticatedUser (line 27305) | async orgsListForAuthenticatedUser(
method packagesListPackagesForAuthenticatedUser (line 27328) | async packagesListPackagesForAuthenticatedUser(
method packagesGetPackageForAuthenticatedUser (line 27353) | async packagesGetPackageForAuthenticatedUser(
method packagesDeletePackageForAuthenticatedUser (line 27377) | async packagesDeletePackageForAuthenticatedUser(
method packagesRestorePackageForAuthenticatedUser (line 27409) | async packagesRestorePackageForAuthenticatedUser(
method packagesGetAllPackageVersionsForPackageOwnedByAuthenticatedUser (line 27436) | async packagesGetAllPackageVersionsForPackageOwnedByAuthenticatedUser(
method packagesGetPackageVersionForAuthenticatedUser (line 27465) | async packagesGetPackageVersionForAuthenticatedUser(
method packagesDeletePackageVersionForAuthenticatedUser (line 27494) | async packagesDeletePackageVersionForAuthenticatedUser(
method packagesRestorePackageVersionForAuthenticatedUser (line 27527) | async packagesRestorePackageVersionForAuthenticatedUser(
method projectsCreateForAuthenticatedUser (line 27551) | async projectsCreateForAuthenticatedUser(
method usersListPublicEmailsForAuthenticatedUser (line 27578) | async usersListPublicEmailsForAuthenticatedUser(
method reposListForAuthenticatedUser (line 27601) | async reposListForAuthenticatedUser(
method reposCreateForAuthenticatedUser (line 27637) | async reposCreateForAuthenticatedUser(
method reposListInvitationsForAuthenticatedUser (line 27681) | async reposListInvitationsForAuthenticatedUser(
method reposDeclineInvitationForAuthenticatedUser (line 27700) | async reposDeclineInvitationForAuthenticatedUser(
method reposAcceptInvitationForAuthenticatedUser (line 27717) | async reposAcceptInvitationForAuthenticatedUser(
method usersListSocialAccountsForAuthenticatedUser (line 27734) | async usersListSocialAccountsForAuthenticatedUser(
method usersAddSocialAccountForAuthenticatedUser (line 27757) | async usersAddSocialAccountForAuthenticatedUser(
method usersDeleteSocialAccountForAuthenticatedUser (line 27781) | async usersDeleteSocialAccountForAuthenticatedUser(
method usersListSshSigningKeysForAuthenticatedUser (line 27804) | async usersListSshSigningKeysForAuthenticatedUser(
method usersCreateSshSigningKeyForAuthenticatedUser (line 27828) | async usersCreateSshSigningKeyForAuthenticatedUser(
method usersGetSshSigningKeyForAuthenticatedUser (line 27851) | async usersGetSshSigningKeyForAuthenticatedUser(
method usersDeleteSshSigningKeyForAuthenticatedUser (line 27873) | async usersDeleteSshSigningKeyForAuthenticatedUser(
method activityListReposStarredByAuthenticatedUser (line 27898) | async activityListReposStarredByAuthenticatedUser(
method activityCheckRepoIsStarredByAuthenticatedUser (line 27920) | async activityCheckRepoIsStarredByAuthenticatedUser(
method activityStarRepoForAuthenticatedUser (line 27937) | async activityStarRepoForAuthenticatedUser(
method activityUnstarRepoForAuthenticatedUser (line 27954) | async activityUnstarRepoForAuthenticatedUser(
method activityListWatchedReposForAuthenticatedUser (line 27972) | async activityListWatchedReposForAuthenticatedUser(
method teamsListForAuthenticatedUser (line 28001) | async teamsListForAuthenticatedUser(
method usersGetById (line 28032) | async usersGetById(
method usersList (line 28053) | async usersList(
method usersGetByUsername (line 28084) | async usersGetByUsername(
method usersListAttestations (line 28109) | async usersListAttestations(
method packagesListDockerMigrationConflictingPackagesForUser (line 28138) | async packagesListDockerMigrationConflictingPackagesForUser(
method activityListEventsForAuthenticatedUser (line 28161) | async activityListEventsForAuthenticatedUser(
method activityListOrgEventsForAuthenticatedUser (line 28186) | async activityListOrgEventsForAuthenticatedUser(
method activityListPublicEventsForUser (line 28207) | async activityListPublicEventsForUser(
method usersListFollowersForUser (line 28226) | async usersListFollowersForUser(
method usersListFollowingForUser (line 28245) | async usersListFollowingForUser(
method usersCheckFollowingForUser (line 28264) | async usersCheckFollowingForUser(
method gistsListForUser (line 28284) | async gistsListForUser(
method usersListGpgKeysForUser (line 28305) | async usersListGpgKeysForUser(
method usersGetContextForUser (line 28332) | async usersGetContextForUser(
method appsGetUserInstallation (line 28357) | async appsGetUserInstallation(
method usersListPublicKeysForUser (line 28374) | async usersListPublicKeysForUser(
method orgsListForUser (line 28397) | async orgsListForUser(
method packagesListPackagesForUser (line 28420) | async packagesListPackagesForUser(
method packagesGetPackageForUser (line 28445) | async packagesGetPackageForUser(
method packagesDeletePackageForUser (line 28473) | async packagesDeletePackageForUser(
method packagesRestorePackageForUser (line 28509) | async packagesRestorePackageForUser(
method packagesGetAllPackageVersionsForPackageOwnedByUser (line 28536) | async packagesGetAllPackageVersionsForPackageOwnedByUser(
method packagesGetPackageVersionForUser (line 28560) | async packagesGetPackageVersionForUser(
method packagesDeletePackageVersionForUser (line 28588) | async packagesDeletePackageVersionForUser(
method packagesRestorePackageVersionForUser (line 28624) | async packagesRestorePackageVersionForUser(
method projectsListForUser (line 28648) | async projectsListForUser(
method activityListReceivedEventsForUser (line 28677) | async activityListReceivedEventsForUser(
method activityListReceivedPublicEventsForUser (line 28698) | async activityListReceivedPublicEventsForUser(
method reposListForUser (line 28717) | async reposListForUser(
method billingGetGithubActionsBillingUser (line 28746) | async billingGetGithubActionsBillingUser(
method billingGetGithubPackagesBillingUser (line 28771) | async billingGetGithubPackagesBillingUser(
method billingGetSharedStorageBillingUser (line 28796) | async billingGetSharedStorageBillingUser(
method usersListSocialAccountsForUser (line 28813) | async usersListSocialAccountsForUser(
method usersListSshSigningKeysForUser (line 28832) | async usersListSshSigningKeysForUser(
method activityListReposStarredByUser (line 28859) | async activityListReposStarredByUser(
method activityListReposWatchedByUser (line 28880) | async activityListReposWatchedByUser(
method metaGetAllVersions (line 28899) | async metaGetAllVersions(
method metaGetZen (line 28914) | async metaGetZen(
FILE: legacy/packages/openapi-to-ts/fixtures/generated/github.ts
type Root (line 49) | type Root = z.infer<typeof RootSchema>
type SecurityAdvisoryEcosystems (line 68) | type SecurityAdvisoryEcosystems = z.infer<
type CvssSeverities (line 96) | type CvssSeverities = z.infer<typeof CvssSeveritiesSchema>
type SecurityAdvisoryEpss (line 107) | type SecurityAdvisoryEpss = z.infer<typeof SecurityAdvisoryEpssSchema>
type SimpleUser (line 135) | type SimpleUser = z.infer<typeof SimpleUserSchema>
type SecurityAdvisoryCreditTypes (line 151) | type SecurityAdvisoryCreditTypes = z.infer<
type PaginationBefore (line 160) | type PaginationBefore = z.infer<typeof PaginationBeforeSchema>
type PaginationAfter (line 167) | type PaginationAfter = z.infer<typeof PaginationAfterSchema>
type Direction (line 172) | type Direction = z.infer<typeof DirectionSchema>
type GhsaId (line 177) | type GhsaId = z.infer<typeof GhsaIdSchema>
type Enterprise (line 184) | type Enterprise = z.infer<typeof EnterpriseSchema>
type WebhookConfigUrl (line 190) | type WebhookConfigUrl = z.infer<typeof WebhookConfigUrlSchema>
type WebhookConfigContentType (line 197) | type WebhookConfigContentType = z.infer<
type WebhookConfigSecret (line 206) | type WebhookConfigSecret = z.infer<typeof WebhookConfigSecretSchema>
type WebhookConfigInsecureSsl (line 216) | type WebhookConfigInsecureSsl = z.infer<
type HookDeliveryItem (line 273) | type HookDeliveryItem = z.infer<typeof HookDeliveryItemSchema>
type PerPage (line 280) | type PerPage = z.infer<typeof PerPageSchema>
type Cursor (line 287) | type Cursor = z.infer<typeof CursorSchema>
type HookDelivery (line 348) | type HookDelivery = z.infer<typeof HookDeliverySchema>
type DeliveryId (line 351) | type DeliveryId = z.infer<typeof DeliveryIdSchema>
type Page (line 398) | type Page = z.infer<typeof PageSchema>
type AppPermissions (line 692) | type AppPermissions = z.infer<typeof AppPermissionsSchema>
type NullableSimpleUser (line 720) | type NullableSimpleUser = z.infer<typeof NullableSimpleUserSchema>
type Since (line 727) | type Since = z.infer<typeof SinceSchema>
type InstallationId (line 732) | type InstallationId = z.infer<typeof InstallationIdSchema>
type NullableLicenseSimple (line 744) | type NullableLicenseSimple = z.infer<
type ClientId (line 751) | type ClientId = z.infer<typeof ClientIdSchema>
type AppSlug (line 754) | type AppSlug = z.infer<typeof AppSlugSchema>
type SimpleClassroomRepository (line 773) | type SimpleClassroomRepository = z.infer<
type SimpleClassroomOrganization (line 787) | type SimpleClassroomOrganization = z.infer<
type AssignmentId (line 794) | type AssignmentId = z.infer<typeof AssignmentIdSchema>
type SimpleClassroomUser (line 804) | type SimpleClassroomUser = z.infer<typeof SimpleClassroomUserSchema>
type SimpleClassroom (line 816) | type SimpleClassroom = z.infer<typeof SimpleClassroomSchema>
type ClassroomAssignmentGrade (line 852) | type ClassroomAssignmentGrade = z.infer<
type ClassroomId (line 859) | type ClassroomId = z.infer<typeof ClassroomIdSchema>
type CodeOfConduct (line 870) | type CodeOfConduct = z.infer<typeof CodeOfConductSchema>
type CodeSecurityConfiguration (line 1024) | type CodeSecurityConfiguration = z.infer<
type CodeScanningDefaultSetupOptions (line 1042) | type CodeScanningDefaultSetupOptions = z.infer<
type ConfigurationId (line 1049) | type ConfigurationId = z.infer<typeof ConfigurationIdSchema>
type AlertNumber (line 1056) | type AlertNumber = z.infer<typeof AlertNumberSchema>
type DependabotAlertPackage (line 1072) | type DependabotAlertPackage = z.infer<
type AlertUrl (line 1081) | type AlertUrl = z.infer<typeof AlertUrlSchema>
type AlertHtmlUrl (line 1088) | type AlertHtmlUrl = z.infer<typeof AlertHtmlUrlSchema>
type AlertCreatedAt (line 1097) | type AlertCreatedAt = z.infer<typeof AlertCreatedAtSchema>
type AlertUpdatedAt (line 1106) | type AlertUpdatedAt = z.infer<typeof AlertUpdatedAtSchema>
type AlertDismissedAt (line 1115) | type AlertDismissedAt = z.infer<typeof AlertDismissedAtSchema>
type AlertFixedAt (line 1124) | type AlertFixedAt = z.infer<typeof AlertFixedAtSchema>
type AlertAutoDismissedAt (line 1133) | type AlertAutoDismissedAt = z.infer<typeof AlertAutoDismissedAtSchema>
type DependabotAlertCommaSeparatedStates (line 1140) | type DependabotAlertCommaSeparatedStates = z.infer<
type DependabotAlertCommaSeparatedSeverities (line 1149) | type DependabotAlertCommaSeparatedSeverities = z.infer<
type DependabotAlertCommaSeparatedEcosystems (line 1158) | type DependabotAlertCommaSeparatedEcosystems = z.infer<
type DependabotAlertCommaSeparatedPackages (line 1167) | type DependabotAlertCommaSeparatedPackages = z.infer<
type DependabotAlertCommaSeparatedEpss (line 1176) | type DependabotAlertCommaSeparatedEpss = z.infer<
type DependabotAlertScope (line 1185) | type DependabotAlertScope = z.infer<typeof DependabotAlertScopeSchema>
type DependabotAlertSort (line 1192) | type DependabotAlertSort = z.infer<typeof DependabotAlertSortSchema>
type PaginationFirst (line 1199) | type PaginationFirst = z.infer<typeof PaginationFirstSchema>
type PaginationLast (line 1206) | type PaginationLast = z.infer<typeof PaginationLastSchema>
type NullableAlertUpdatedAt (line 1215) | type NullableAlertUpdatedAt = z.infer<
type SecretScanningAlertState (line 1224) | type SecretScanningAlertState = z.infer<
type SecretScanningAlertResolution (line 1233) | type SecretScanningAlertResolution = z.infer<
type SecretScanningAlertSecretType (line 1242) | type SecretScanningAlertSecretType = z.infer<
type SecretScanningAlertSort (line 1251) | type SecretScanningAlertSort = z.infer<
type SecretScanningAlertValidity (line 1260) | type SecretScanningAlertValidity = z.infer<
type SecretScanningAlertPubliclyLeaked (line 1269) | type SecretScanningAlertPubliclyLeaked = z.infer<
type SecretScanningAlertMultiRepo (line 1278) | type SecretScanningAlertMultiRepo = z.infer<
type Actor (line 1287) | type Actor = z.infer<typeof ActorSchema>
type IssueType (line 1324) | type IssueType = z.infer<typeof IssueTypeSchema>
type AuthorAssociation (line 1338) | type AuthorAssociation = z.infer<typeof AuthorAssociationSchema>
type ReactionRollup (line 1352) | type ReactionRollup = z.infer<typeof ReactionRollupSchema>
type SubIssuesSummary (line 1359) | type SubIssuesSummary = z.infer<typeof SubIssuesSummarySchema>
type LinkWithType (line 1364) | type LinkWithType = z.infer<typeof LinkWithTypeSchema>
type PublicUser (line 1418) | type PublicUser = z.infer<typeof PublicUserSchema>
type GistId (line 1423) | type GistId = z.infer<typeof GistIdSchema>
type CommentId (line 1428) | type CommentId = z.infer<typeof CommentIdSchema>
type GitignoreTemplate (line 1433) | type GitignoreTemplate = z.infer<typeof GitignoreTemplateSchema>
type Labels (line 1438) | type Labels = z.infer<typeof LabelsSchema>
type LicenseSimple (line 1450) | type LicenseSimple = z.infer<typeof LicenseSimpleSchema>
type License (line 1469) | type License = z.infer<typeof LicenseSchema>
type MarketplaceListingPlan (line 1488) | type MarketplaceListingPlan = z.infer<
type AccountId (line 1493) | type AccountId = z.infer<typeof AccountIdSchema>
type PlanId (line 1498) | type PlanId = z.infer<typeof PlanIdSchema>
type Sort (line 1503) | type Sort = z.infer<typeof SortSchema>
type ApiOverview (line 1553) | type ApiOverview = z.infer<typeof ApiOverviewSchema>
type Owner (line 1560) | type Owner = z.infer<typeof OwnerSchema>
type Repo (line 1567) | type Repo = z.infer<typeof RepoSchema>
type SecurityAndAnalysis (line 1599) | type SecurityAndAnalysis = z.infer<typeof SecurityAndAnalysisSchema>
type All (line 1604) | type All = z.infer<typeof AllSchema>
type Participating (line 1611) | type Participating = z.infer<typeof ParticipatingSchema>
type Before (line 1618) | type Before = z.infer<typeof BeforeSchema>
type ThreadId (line 1625) | type ThreadId = z.infer<typeof ThreadIdSchema>
type ThreadSubscription (line 1638) | type ThreadSubscription = z.infer<typeof ThreadSubscriptionSchema>
type OrganizationSimple (line 1656) | type OrganizationSimple = z.infer<typeof OrganizationSimpleSchema>
type SinceOrg (line 1663) | type SinceOrg = z.infer<typeof SinceOrgSchema>
type BillingUsageReport (line 1696) | type BillingUsageReport = z.infer<typeof BillingUsageReportSchema>
type Org (line 1701) | type Org = z.infer<typeof OrgSchema>
type BillingUsageReportYear (line 1708) | type BillingUsageReportYear = z.infer<
type BillingUsageReportMonth (line 1717) | type BillingUsageReportMonth = z.infer<
type BillingUsageReportDay (line 1726) | type BillingUsageReportDay = z.infer<
type BillingUsageReportHour (line 1735) | type BillingUsageReportHour = z.infer<
type OrganizationFull (line 1860) | type OrganizationFull = z.infer<typeof OrganizationFullSchema>
type ActionsCacheUsageOrgEnterprise (line 1876) | type ActionsCacheUsageOrgEnterprise = z.infer<
type ActionsCacheUsageByRepository (line 1899) | type ActionsCacheUsageByRepository = z.infer<
type NullableActionsHostedRunnerPoolImage (line 1917) | type NullableActionsHostedRunnerPoolImage = z.infer<
type ActionsHostedRunnerMachineSpec (line 1939) | type ActionsHostedRunnerMachineSpec = z.infer<
type PublicIp (line 1956) | type PublicIp = z.infer<typeof PublicIpSchema>
type ActionsHostedRunnerImage (line 1973) | type ActionsHostedRunnerImage = z.infer<
type ActionsHostedRunnerLimits (line 1997) | type ActionsHostedRunnerLimits = z.infer<
type HostedRunnerId (line 2004) | type HostedRunnerId = z.infer<typeof HostedRunnerIdSchema>
type OidcCustomSub (line 2015) | type OidcCustomSub = z.infer<typeof OidcCustomSubSchema>
type EmptyObject (line 2021) | type EmptyObject = z.infer<typeof EmptyObjectSchema>
type EnabledRepositories (line 2028) | type EnabledRepositories = z.infer<typeof EnabledRepositoriesSchema>
type AllowedActions (line 2035) | type AllowedActions = z.infer<typeof AllowedActionsSchema>
type SelectedActionsUrl (line 2042) | type SelectedActionsUrl = z.infer<typeof SelectedActionsUrlSchema>
type RepositoryId (line 2047) | type RepositoryId = z.infer<typeof RepositoryIdSchema>
type SelectedActions (line 2069) | type SelectedActions = z.infer<typeof SelectedActionsSchema>
type ActionsDefaultWorkflowPermissions (line 2076) | type ActionsDefaultWorkflowPermissions = z.infer<
type ActionsCanApprovePullRequestReviews (line 2085) | type ActionsCanApprovePullRequestReviews = z.infer<
type RunnerGroupsOrg (line 2134) | type RunnerGroupsOrg = z.infer<typeof RunnerGroupsOrgSchema>
type VisibleToRepository (line 2141) | type VisibleToRepository = z.infer<typeof VisibleToRepositorySchema>
type RunnerGroupId (line 2146) | type RunnerGroupId = z.infer<typeof RunnerGroupIdSchema>
type RunnerLabel (line 2164) | type RunnerLabel = z.infer<typeof RunnerLabelSchema>
type RunnerId (line 2169) | type RunnerId = z.infer<typeof RunnerIdSchema>
type RunnerApplication (line 2186) | type RunnerApplication = z.infer<typeof RunnerApplicationSchema>
type RunnerLabelName (line 2191) | type RunnerLabelName = z.infer<typeof RunnerLabelNameSchema>
type OrganizationActionsSecret (line 2204) | type OrganizationActionsSecret = z.infer<
type ActionsPublicKey (line 2218) | type ActionsPublicKey = z.infer<typeof ActionsPublicKeySchema>
type SecretName (line 2221) | type SecretName = z.infer<typeof SecretNameSchema>
type OrganizationActionsVariable (line 2245) | type OrganizationActionsVariable = z.infer<
type VariablesPerPage (line 2254) | type VariablesPerPage = z.infer<typeof VariablesPerPageSchema>
type VariableName (line 2259) | type VariableName = z.infer<typeof VariableNameSchema>
type Username (line 2264) | type Username = z.infer<typeof UsernameSchema>
type AlertInstancesUrl (line 2273) | type AlertInstancesUrl = z.infer<typeof AlertInstancesUrlSchema>
type CodeScanningAlertState (line 2278) | type CodeScanningAlertState = z.infer<
type CodeScanningAlertDismissedReason (line 2287) | type CodeScanningAlertDismissedReason = z.infer<
type CodeScanningAlertDismissedComment (line 2297) | type CodeScanningAlertDismissedComment = z.infer<
type CodeScanningAlertRuleSummary (line 2343) | type CodeScanningAlertRuleSummary = z.infer<
type CodeScanningAnalysisToolName (line 2352) | type CodeScanningAnalysisToolName = z.infer<
type CodeScanningAnalysisToolVersion (line 2361) | type CodeScanningAnalysisToolVersion = z.infer<
type CodeScanningAnalysisToolGuid (line 2370) | type CodeScanningAnalysisToolGuid = z.infer<
type CodeScanningRef (line 2379) | type CodeScanningRef = z.infer<typeof CodeScanningRefSchema>
type CodeScanningAnalysisAnalysisKey (l
Copy disabled (too large)
Download .json
Condensed preview — 1049 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (14,926K chars).
[
{
"path": ".cursor/rules/general.mdc",
"chars": 5660,
"preview": "---\ndescription:\nglobs:\nalwaysApply: false\n---\n---\ndescription: General TypeScript coding guidelines\nglobs:\n---\n\n## Gene"
},
{
"path": ".editorconfig",
"chars": 161,
"preview": "root = true\n\n[*]\nindent_style = space\nindent_size = 2\ntab_width = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_white"
},
{
"path": ".github/funding.yml",
"chars": 30,
"preview": "github: [transitive-bullshit]\n"
},
{
"path": ".github/workflows/main.yml",
"chars": 959,
"preview": "name: CI\n\non: [push]\n\njobs:\n test:\n name: Test Node.js ${{ matrix.node-version }}\n runs-on: ubuntu-latest\n\n st"
},
{
"path": ".github/workflows/release.yml",
"chars": 478,
"preview": "name: Release\n\non:\n push:\n tags:\n - 'v*'\n workflow_dispatch:\n\njobs:\n release:\n runs-on: ubuntu-latest\n "
},
{
"path": ".gitignore",
"chars": 599,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\nnode_modules\n/.pnp"
},
{
"path": ".npmrc",
"chars": 58,
"preview": "enable-pre-post-scripts=true\npackage-manager-strict=false\n"
},
{
"path": ".prettierignore",
"chars": 173,
"preview": "# autogenerated files\npackages/types/src/openapi.d.ts\napps/web/src/routeTree.gen.ts\nlegacy/packages/openapi-to-ts/fixtur"
},
{
"path": ".vscode/launch.json",
"chars": 2225,
"preview": "{\n \"version\": \"0.2.0\",\n \"configurations\": [\n {\n \"name\": \"Debug API\",\n \"type\": \"node\",\n \"request\": \"l"
},
{
"path": "CLAUDE.md",
"chars": 9019,
"preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
},
{
"path": "Tiltfile",
"chars": 1389,
"preview": "# 🌊 run `tilt up` to start\n# then open http://localhost:10350/r/(all)/overview\n\nload('ext://uibutton', 'cmd_button', 'bo"
},
{
"path": "apps/api/drizzle.config.ts",
"chars": 265,
"preview": "import { defineConfig } from 'drizzle-kit'\n\nexport default defineConfig({\n out: './drizzle',\n schema: './src/db/schema"
},
{
"path": "apps/api/package.json",
"chars": 2365,
"preview": "{\n \"name\": \"api\",\n \"private\": true,\n \"version\": \"8.4.4\",\n \"description\": \"Internal Agentic platform API service.\",\n "
},
{
"path": "apps/api/readme.md",
"chars": 2059,
"preview": "<p align=\"center\">\n <a href=\"https://agentic.so\">\n <img alt=\"Agentic\" src=\"https://raw.githubusercontent.com/transit"
},
{
"path": "apps/api/src/api-v1/auth/github-callback.ts",
"chars": 997,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport type { OpenAPIHono } from '@hono/zod-openapi'\nimport"
},
{
"path": "apps/api/src/api-v1/auth/github-exchange.ts",
"chars": 3440,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { assert, parseZodSchema } from '@agentic/platform-c"
},
{
"path": "apps/api/src/api-v1/auth/github-init.ts",
"chars": 2010,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/auth/schemas.ts",
"chars": 224,
"preview": "import { z } from '@hono/zod-openapi'\n\nimport { schema } from '@/db'\n\nexport const authSessionResponseSchema = z\n .obje"
},
{
"path": "apps/api/src/api-v1/auth/sign-in-with-password.ts",
"chars": 2465,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport type { Context } from 'hono'\nimport { assert, parseZ"
},
{
"path": "apps/api/src/api-v1/auth/sign-up-with-password.ts",
"chars": 2497,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { parseZodSchema } from '@agentic/platform-core'\nimp"
},
{
"path": "apps/api/src/api-v1/auth/utils.ts",
"chars": 118,
"preview": "import { DrizzleAuthStorage } from '@/lib/auth/drizzle-auth-storage'\n\nexport const authStorage = DrizzleAuthStorage()\n"
},
{
"path": "apps/api/src/api-v1/consumers/admin-activate-consumer.ts",
"chars": 1899,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/consumers/admin-get-consumer-by-api-key.ts",
"chars": 1962,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/consumers/create-billing-portal-session.ts",
"chars": 1544,
"preview": "import { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'\n\nimport type { AuthenticatedHonoEnv } from '@/lib/t"
},
{
"path": "apps/api/src/api-v1/consumers/create-consumer-billing-portal-session.ts",
"chars": 1942,
"preview": "import { assert } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'\n\nim"
},
{
"path": "apps/api/src/api-v1/consumers/create-consumer-checkout-session.ts",
"chars": 1910,
"preview": "import { parseZodSchema, pick } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zo"
},
{
"path": "apps/api/src/api-v1/consumers/create-consumer.ts",
"chars": 1508,
"preview": "import { parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod-openapi"
},
{
"path": "apps/api/src/api-v1/consumers/get-consumer-by-project-identifier.ts",
"chars": 2173,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/consumers/get-consumer.ts",
"chars": 1650,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/consumers/list-consumers.ts",
"chars": 1836,
"preview": "import { parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zod-open"
},
{
"path": "apps/api/src/api-v1/consumers/list-project-consumers.ts",
"chars": 2252,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/"
},
{
"path": "apps/api/src/api-v1/consumers/refresh-consumer-api-key.ts",
"chars": 1836,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/consumers/schemas.ts",
"chars": 1183,
"preview": "import { z } from '@hono/zod-openapi'\n\nimport {\n consumerIdSchema,\n consumerRelationsSchema,\n paginationSchema,\n pro"
},
{
"path": "apps/api/src/api-v1/consumers/update-consumer.ts",
"chars": 1750,
"preview": "import { parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod-openapi"
},
{
"path": "apps/api/src/api-v1/consumers/utils.ts",
"chars": 1041,
"preview": "import type { RawConsumer } from '@/db'\nimport type { AuthenticatedHonoContext } from '@/lib/types'\nimport { setPublicCa"
},
{
"path": "apps/api/src/api-v1/deployments/admin-get-deployment-by-identifier.ts",
"chars": 2659,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/deployments/create-deployment.ts",
"chars": 5974,
"preview": "import { resolveAgenticProjectConfig } from '@agentic/platform'\nimport { assert, parseZodSchema, sha256, slugify } from "
},
{
"path": "apps/api/src/api-v1/deployments/get-deployment-by-identifier.ts",
"chars": 1786,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/deployments/get-deployment.ts",
"chars": 1725,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/deployments/get-public-deployment-by-identifier.ts",
"chars": 2228,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { assert, parseZodSchema } from '@agentic/platform-c"
},
{
"path": "apps/api/src/api-v1/deployments/list-deployments.ts",
"chars": 2746,
"preview": "import { parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zod-open"
},
{
"path": "apps/api/src/api-v1/deployments/publish-deployment.ts",
"chars": 1987,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/deployments/schemas.ts",
"chars": 1415,
"preview": "import { z } from '@hono/zod-openapi'\n\nimport {\n deploymentIdentifierSchema,\n deploymentIdSchema,\n deploymentRelation"
},
{
"path": "apps/api/src/api-v1/deployments/update-deployment.ts",
"chars": 2038,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/health-check.ts",
"chars": 571,
"preview": "import { createRoute, z } from '@hono/zod-openapi'\n\nimport type { HonoApp } from '@/lib/types'\n\nconst route = createRout"
},
{
"path": "apps/api/src/api-v1/index.ts",
"chars": 7248,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { OpenAPIHono } from '@hono/zod-openapi'\n\nimport typ"
},
{
"path": "apps/api/src/api-v1/projects/create-project.ts",
"chars": 2651,
"preview": "import { assert, parseZodSchema, sha256 } from '@agentic/platform-core'\nimport { parseProjectIdentifier } from '@agentic"
},
{
"path": "apps/api/src/api-v1/projects/get-project-by-identifier.ts",
"chars": 1706,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/projects/get-project.ts",
"chars": 1658,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/projects/get-public-project-by-identifier.ts",
"chars": 1835,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { parseZodSchema } from '@agentic/platform-core'\nimp"
},
{
"path": "apps/api/src/api-v1/projects/get-public-project.ts",
"chars": 1787,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { parseZodSchema } from '@agentic/platform-core'\nimp"
},
{
"path": "apps/api/src/api-v1/projects/list-projects.ts",
"chars": 1982,
"preview": "import { parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zod-open"
},
{
"path": "apps/api/src/api-v1/projects/list-public-projects.ts",
"chars": 2410,
"preview": "import { env } from 'node:process'\n\nimport type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport { parseZodSchema"
},
{
"path": "apps/api/src/api-v1/projects/schemas.ts",
"chars": 1627,
"preview": "// import { isValidNamespace } from '@agentic/platform-validators'\nimport { z } from '@hono/zod-openapi'\n\nimport {\n pag"
},
{
"path": "apps/api/src/api-v1/projects/update-project.ts",
"chars": 1927,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/storage/get-signed-storage-upload-url.ts",
"chars": 2692,
"preview": "import { assert } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zod-openapi'\n\nim"
},
{
"path": "apps/api/src/api-v1/teams/create-team.ts",
"chars": 2024,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/teams/delete-team.ts",
"chars": 1418,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/teams/get-team.ts",
"chars": 1378,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/teams/list-teams.ts",
"chars": 1571,
"preview": "import { parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono, z } from '@hono/zod-open"
},
{
"path": "apps/api/src/api-v1/teams/members/create-team-member.ts",
"chars": 2357,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/teams/members/delete-team-member.ts",
"chars": 1792,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/teams/members/schemas.ts",
"chars": 359,
"preview": "import { z } from '@hono/zod-openapi'\n\nimport { userIdSchema } from '@/db'\n\nimport { teamIdParamsSchema } from '../schem"
},
{
"path": "apps/api/src/api-v1/teams/members/update-team-member.ts",
"chars": 1998,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/teams/schemas.ts",
"chars": 250,
"preview": "import { z } from '@hono/zod-openapi'\n\nimport { teamIdSchema } from '@/db'\n\nexport const teamIdParamsSchema = z.object({"
},
{
"path": "apps/api/src/api-v1/teams/update-team.ts",
"chars": 1603,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/users/get-user.ts",
"chars": 1518,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/users/schemas.ts",
"chars": 250,
"preview": "import { z } from '@hono/zod-openapi'\n\nimport { userIdSchema } from '@/db'\n\nexport const userIdParamsSchema = z.object({"
},
{
"path": "apps/api/src/api-v1/users/update-user.ts",
"chars": 1596,
"preview": "import { assert, parseZodSchema } from '@agentic/platform-core'\nimport { createRoute, type OpenAPIHono } from '@hono/zod"
},
{
"path": "apps/api/src/api-v1/webhooks/stripe-webhook.ts",
"chars": 11326,
"preview": "import type Stripe from 'stripe'\nimport { assert, HttpError } from '@agentic/platform-core'\n\nimport type { HonoApp } fro"
},
{
"path": "apps/api/src/db/index.ts",
"chars": 933,
"preview": "import { drizzle } from '@fisch0920/drizzle-orm/postgres-js'\nimport postgres from 'postgres'\n\nimport { env } from '@/lib"
},
{
"path": "apps/api/src/db/schema/account.ts",
"chars": 1866,
"preview": "import { relations } from '@fisch0920/drizzle-orm'\nimport { index, pgTable, text, timestamp } from '@fisch0920/drizzle-o"
},
{
"path": "apps/api/src/db/schema/auth-data.ts",
"chars": 706,
"preview": "import { jsonb, pgTable, text, timestamp } from '@fisch0920/drizzle-orm/pg-core'\n\nimport { timestamps } from './common'\n"
},
{
"path": "apps/api/src/db/schema/common.test.ts",
"chars": 594,
"preview": "import { expect, test } from 'vitest'\n\nimport { getIdSchemaForModelType } from '../schemas'\nimport {\n createIdForModel,"
},
{
"path": "apps/api/src/db/schema/common.ts",
"chars": 5931,
"preview": "import { assert } from '@agentic/platform-core'\nimport { type Equal, sql, type Writable } from '@fisch0920/drizzle-orm'\n"
},
{
"path": "apps/api/src/db/schema/consumer.ts",
"chars": 7399,
"preview": "import {\n type StripeSubscriptionItemIdMap,\n stripeSubscriptionItemIdMapSchema\n} from '@agentic/platform-types'\nimport"
},
{
"path": "apps/api/src/db/schema/deployment.ts",
"chars": 10878,
"preview": "import {\n agenticProjectConfigSchema,\n defaultRequestsRateLimit,\n type OriginAdapter,\n type PricingPlanList,\n type "
},
{
"path": "apps/api/src/db/schema/index.ts",
"chars": 265,
"preview": "export * from './account'\nexport * from './auth-data'\nexport * from './common'\nexport * from './consumer'\nexport * from "
},
{
"path": "apps/api/src/db/schema/log-entry.ts",
"chars": 3507,
"preview": "import { relations } from '@fisch0920/drizzle-orm'\nimport {\n index,\n jsonb,\n pgTable,\n text,\n varchar\n} from '@fisc"
},
{
"path": "apps/api/src/db/schema/project.ts",
"chars": 12638,
"preview": "import {\n agenticProjectConfigSchema,\n pricingIntervalSchema,\n type StripeMeterIdMap,\n stripeMeterIdMapSchema,\n typ"
},
{
"path": "apps/api/src/db/schema/team-member.ts",
"chars": 2263,
"preview": "import { relations } from '@fisch0920/drizzle-orm'\nimport {\n boolean,\n index,\n pgTable,\n primaryKey\n} from '@fisch09"
},
{
"path": "apps/api/src/db/schema/team.ts",
"chars": 1723,
"preview": "import { isValidTeamSlug } from '@agentic/platform-validators'\nimport { relations } from '@fisch0920/drizzle-orm'\nimport"
},
{
"path": "apps/api/src/db/schema/user.ts",
"chars": 1448,
"preview": "import { relations } from '@fisch0920/drizzle-orm'\nimport {\n boolean,\n index,\n pgTable,\n text,\n uniqueIndex\n} from "
},
{
"path": "apps/api/src/db/schemas.ts",
"chars": 4046,
"preview": "import { assert } from '@agentic/platform-core'\nimport {\n isNamespaceAllowed,\n isValidCuid,\n isValidDeploymentIdentif"
},
{
"path": "apps/api/src/db/types.test.ts",
"chars": 1539,
"preview": "import type { Simplify } from 'type-fest'\nimport { expectTypeOf, test } from 'vitest'\n\nimport type {\n Consumer,\n LogEn"
},
{
"path": "apps/api/src/db/types.ts",
"chars": 2818,
"preview": "import type {\n BuildQueryResult,\n ExtractTablesWithRelations,\n InferInsertModel,\n InferSelectModel\n} from '@fisch092"
},
{
"path": "apps/api/src/db/utils.ts",
"chars": 1727,
"preview": "import type { PricingPlan, PricingPlanLineItem } from '@agentic/platform-types'\nimport { hashObject } from '@agentic/pla"
},
{
"path": "apps/api/src/lib/__snapshots__/storage.test.ts.snap",
"chars": 562,
"preview": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`Storage > uploadFileUrlToStorage data-uri 1`] = "
},
{
"path": "apps/api/src/lib/acl-admin.ts",
"chars": 366,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext } from './types'\nimport { ensure"
},
{
"path": "apps/api/src/lib/acl-public-project.ts",
"chars": 515,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type { RawProject } from '@/db'\n\nexport function aclPublicProjec"
},
{
"path": "apps/api/src/lib/acl-team-admin.ts",
"chars": 1524,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport { and, db, eq, schema, type TeamMember } from '@/db'\n\nimport typ"
},
{
"path": "apps/api/src/lib/acl-team-member.ts",
"chars": 1498,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport { and, db, eq, type RawTeamMember, schema } from '@/db'\n\nimport "
},
{
"path": "apps/api/src/lib/acl.ts",
"chars": 1097,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext } from './types'\nimport { ensure"
},
{
"path": "apps/api/src/lib/auth/auth-storage.ts",
"chars": 1226,
"preview": "export interface AuthStorageAdapter {\n get(key: string[]): Promise<Record<string, any> | undefined>\n remove(key: strin"
},
{
"path": "apps/api/src/lib/auth/create-auth-token.ts",
"chars": 296,
"preview": "import { sign } from 'hono/jwt'\n\nimport type { RawUser } from '@/db'\nimport { env } from '@/lib/env'\n\nexport async funct"
},
{
"path": "apps/api/src/lib/auth/drizzle-auth-storage.ts",
"chars": 1607,
"preview": "import { and, db, eq, gt, isNull, like, or, schema } from '@/db'\n\nimport { type AuthStorageAdapter, joinKey, splitKey } "
},
{
"path": "apps/api/src/lib/auth/upsert-or-link-user-account.ts",
"chars": 5276,
"preview": "import type { SetRequired, Simplify } from 'type-fest'\nimport { assert } from '@agentic/platform-core'\n\nimport { and, db"
},
{
"path": "apps/api/src/lib/billing/create-stripe-checkout-session.ts",
"chars": 11193,
"preview": "import type Stripe from 'stripe'\nimport { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext"
},
{
"path": "apps/api/src/lib/billing/upsert-stripe-connect-customer.ts",
"chars": 1746,
"preview": "import type Stripe from 'stripe'\nimport { assert } from '@agentic/platform-core'\n\nimport { db, eq, type RawConsumer, typ"
},
{
"path": "apps/api/src/lib/billing/upsert-stripe-customer.ts",
"chars": 1566,
"preview": "import type Stripe from 'stripe'\nimport { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext"
},
{
"path": "apps/api/src/lib/billing/upsert-stripe-pricing-resources.ts",
"chars": 10242,
"preview": "import type Stripe from 'stripe'\nimport { assert } from '@agentic/platform-core'\nimport {\n getLabelForPricingInterval,\n"
},
{
"path": "apps/api/src/lib/billing/upsert-stripe-subscription.ts",
"chars": 11467,
"preview": "import type Stripe from 'stripe'\nimport { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext"
},
{
"path": "apps/api/src/lib/cache-control.ts",
"chars": 1170,
"preview": "import { assert } from '@agentic/platform-core'\n\nexport type PublicCacheControlLevels =\n | '1s'\n | '10s'\n | '30s'\n |"
},
{
"path": "apps/api/src/lib/consumers/upsert-consumer-stripe-checkout.ts",
"chars": 5914,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext } from '@/lib/types'\nimport {\n "
},
{
"path": "apps/api/src/lib/consumers/upsert-consumer.ts",
"chars": 5566,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext } from '@/lib/types'\nimport { an"
},
{
"path": "apps/api/src/lib/consumers/utils.ts",
"chars": 568,
"preview": "import type { RawConsumerUpdate } from '@/db'\n\n// https://docs.stripe.com/api/subscriptions/object#subscription_object-s"
},
{
"path": "apps/api/src/lib/create-avatar.ts",
"chars": 6263,
"preview": "import { identicon } from '@dicebear/collection'\nimport { createAvatar as createAvatarImpl } from '@dicebear/core'\n\ncons"
},
{
"path": "apps/api/src/lib/create-consumer-api-key.ts",
"chars": 168,
"preview": "import { sha256 } from '@agentic/platform-core'\n\nexport async function createConsumerApiKey(): Promise<string> {\n const"
},
{
"path": "apps/api/src/lib/deployments/get-deployment-by-id.ts",
"chars": 665,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport { db, eq, type RawDeployment, schema } from '@/db'\n\n/**\n * Finds"
},
{
"path": "apps/api/src/lib/deployments/normalize-deployment-version.ts",
"chars": 901,
"preview": "import { assert } from '@agentic/platform-core'\nimport semver from 'semver'\n\nimport type { RawProject } from '@/db'\n\nexp"
},
{
"path": "apps/api/src/lib/deployments/publish-deployment.ts",
"chars": 1938,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext } from '@/lib/types'\nimport { db"
},
{
"path": "apps/api/src/lib/deployments/try-get-deployment-by-identifier.ts",
"chars": 4021,
"preview": "import type { DefaultHonoContext } from '@agentic/platform-hono'\nimport { assert } from '@agentic/platform-core'\nimport "
},
{
"path": "apps/api/src/lib/ensure-auth-user.ts",
"chars": 545,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type { AuthenticatedHonoContext } from '@/lib/types'\nimport { db"
},
{
"path": "apps/api/src/lib/ensure-unique-namespace.ts",
"chars": 1332,
"preview": "import { assert, sha256 } from '@agentic/platform-core'\n\nimport { db, eq, schema } from '@/db'\n\nexport async function en"
},
{
"path": "apps/api/src/lib/env.ts",
"chars": 2153,
"preview": "import type { Simplify } from 'type-fest'\nimport { parseZodSchema } from '@agentic/platform-core'\nimport {\n envSchema a"
},
{
"path": "apps/api/src/lib/exit-hooks.ts",
"chars": 1252,
"preview": "import { promisify } from 'node:util'\n\nimport type { ServerType } from '@hono/node-server'\nimport * as Sentry from '@sen"
},
{
"path": "apps/api/src/lib/external/github.ts",
"chars": 1952,
"preview": "import ky from 'ky'\nimport { Octokit } from 'octokit'\n\nimport { env } from '@/lib/env'\n\nconst USER_AGENT = 'agentic-plat"
},
{
"path": "apps/api/src/lib/external/resend.ts",
"chars": 173,
"preview": "import { ResendEmailClient } from '@agentic/platform-emails'\n\nimport { env } from '@/lib/env'\n\nexport const resend = new"
},
{
"path": "apps/api/src/lib/external/sentry.ts",
"chars": 463,
"preview": "import * as Sentry from '@sentry/node'\n\n// This MUST be run before anything else (imported first in the root file).\n// N"
},
{
"path": "apps/api/src/lib/external/stripe.ts",
"chars": 283,
"preview": "import Stripe from 'stripe'\n\nimport { env } from '@/lib/env'\n\nconst version = '2025-06-30.basil'\n\nexport const stripe = "
},
{
"path": "apps/api/src/lib/middleware/authenticate.ts",
"chars": 1726,
"preview": "import { assert } from '@agentic/platform-core'\nimport { authUserSchema } from '@agentic/platform-types'\nimport { create"
},
{
"path": "apps/api/src/lib/middleware/index.ts",
"chars": 195,
"preview": "export * from './authenticate'\nexport * from './me'\nexport * from './team'\nexport {\n accessLogger,\n compress,\n cors,\n"
},
{
"path": "apps/api/src/lib/middleware/me.ts",
"chars": 543,
"preview": "import { createMiddleware } from 'hono/factory'\n\nimport type { AuthenticatedHonoEnv } from '@/lib/types'\n\nimport { ensur"
},
{
"path": "apps/api/src/lib/middleware/team.ts",
"chars": 1020,
"preview": "import { assert } from '@agentic/platform-core'\nimport { createMiddleware } from 'hono/factory'\n\nimport type { Authentic"
},
{
"path": "apps/api/src/lib/openapi-utils.ts",
"chars": 2177,
"preview": "import { fromError } from 'zod-validation-error'\n\nimport type { HonoApp } from './types'\n\nexport const openapiErrorRespo"
},
{
"path": "apps/api/src/lib/projects/try-get-project-by-identifier.ts",
"chars": 1561,
"preview": "import { assert } from '@agentic/platform-core'\nimport { parseProjectIdentifier } from '@agentic/platform-validators'\n\ni"
},
{
"path": "apps/api/src/lib/storage.test.ts",
"chars": 2949,
"preview": "import { describe, expect, test } from 'vitest'\n\nimport {\n deleteStorageObject,\n getStorageObject,\n putStorageObject,"
},
{
"path": "apps/api/src/lib/storage.ts",
"chars": 5214,
"preview": "import { sha256 } from '@agentic/platform-core'\nimport {\n DeleteObjectCommand,\n type DeleteObjectCommandInput,\n GetOb"
},
{
"path": "apps/api/src/lib/temp",
"chars": 4355,
"preview": "import ky from 'ky'\n\nimport { env } from './env'\n\nconst USER_AGENT = 'agentic-platform'\n\n/**\n * GitHub (user-level) OAut"
},
{
"path": "apps/api/src/lib/types.ts",
"chars": 866,
"preview": "import type {\n DefaultHonoBindings,\n DefaultHonoEnv,\n DefaultHonoVariables\n} from '@agentic/platform-hono'\nimport typ"
},
{
"path": "apps/api/src/lib/utils.ts",
"chars": 304,
"preview": "import { timingSafeEqual } from 'node:crypto'\n\nexport function timingSafeCompare(a: string, b: string): boolean {\n if ("
},
{
"path": "apps/api/src/oauth-redirect.ts",
"chars": 1715,
"preview": "import type { DefaultHonoEnv } from '@agentic/platform-hono'\nimport type { OpenAPIHono } from '@hono/zod-openapi'\nimport"
},
{
"path": "apps/api/src/reset.d.ts",
"chars": 36,
"preview": "import '@fisch0920/config/ts-reset'\n"
},
{
"path": "apps/api/src/server.ts",
"chars": 1377,
"preview": "import '@/lib/external/sentry'\n\nimport { type DefaultHonoEnv, errorHandler } from '@agentic/platform-hono'\nimport { serv"
},
{
"path": "apps/api/tsconfig.json",
"chars": 219,
"preview": "{\n \"extends\": \"@fisch0920/config/tsconfig-node\",\n \"compilerOptions\": {\n \"baseUrl\": \".\",\n \"paths\": {\n \"@/*\":"
},
{
"path": "apps/api/tsup.config.ts",
"chars": 286,
"preview": "import { defineConfig } from 'tsup'\n\nexport default defineConfig([\n {\n entry: ['src/server.ts'],\n outDir: 'dist',"
},
{
"path": "apps/api/vitest.config.ts",
"chars": 256,
"preview": "import tsconfigPaths from 'vite-tsconfig-paths'\nimport { defineConfig } from 'vitest/config'\n\nexport default defineConfi"
},
{
"path": "apps/e2e/bin/deploy-fixtures.ts",
"chars": 443,
"preview": "import { deployProjects } from '../src/deploy-projects'\nimport { devClient } from '../src/dev-client'\nimport { fixtures "
},
{
"path": "apps/e2e/bin/publish-fixtures.ts",
"chars": 731,
"preview": "import { deployProjects } from '../src/deploy-projects'\nimport { devClient } from '../src/dev-client'\nimport { fixtures "
},
{
"path": "apps/e2e/bin/seed-db.ts",
"chars": 2054,
"preview": "import { AgenticApiClient } from '@agentic/platform-api-client'\n\nimport { examples } from '../src/agentic-examples'\nimpo"
},
{
"path": "apps/e2e/package.json",
"chars": 1881,
"preview": "{\n \"name\": \"@agentic/platform-e2e-tests\",\n \"private\": true,\n \"version\": \"8.4.4\",\n \"description\": \"Internal Agentic p"
},
{
"path": "apps/e2e/src/__snapshots__/http-e2e.test.ts.snap",
"chars": 8177,
"preview": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`HTTP => MCP origin basic \"add\" tool > 6.0: POST "
},
{
"path": "apps/e2e/src/__snapshots__/mcp-e2e.test.ts.snap",
"chars": 5300,
"preview": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`MCP => OpenAPI origin basic @ dev get_post succe"
},
{
"path": "apps/e2e/src/agentic-examples.ts",
"chars": 332,
"preview": "import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst exampleProjectNames = ['search']\n\nconst exa"
},
{
"path": "apps/e2e/src/deploy-projects.ts",
"chars": 686,
"preview": "import type { AgenticApiClient } from '@agentic/platform-api-client'\nimport { loadAgenticConfig } from '@agentic/platfor"
},
{
"path": "apps/e2e/src/dev-client.ts",
"chars": 224,
"preview": "import { AgenticApiClient } from '@agentic/platform-api-client'\n\nimport { env } from './env'\n\nexport const devClient = n"
},
{
"path": "apps/e2e/src/dev-fixtures.ts",
"chars": 626,
"preview": "import path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst fixtureNames = [\n // TODO: re-add these\n "
},
{
"path": "apps/e2e/src/env.ts",
"chars": 1003,
"preview": "import 'dotenv/config'\n\nimport { parseZodSchema } from '@agentic/platform-core'\nimport { z } from 'zod'\n\n// TODO: derive"
},
{
"path": "apps/e2e/src/http-e2e.test.ts",
"chars": 5704,
"preview": "import contentType from 'fast-content-type-parse'\nimport defaultKy from 'ky'\nimport pTimes from 'p-times'\nimport { descr"
},
{
"path": "apps/e2e/src/http-fixtures.ts",
"chars": 17825,
"preview": "import { expect } from 'vitest'\n\nexport type E2ETestFixture = {\n path: string\n\n /** @default 60_000 milliseconds */\n "
},
{
"path": "apps/e2e/src/mcp-e2e.test.ts",
"chars": 7841,
"preview": "import { pick } from '@agentic/platform-core'\nimport { Client as McpClient } from '@modelcontextprotocol/sdk/client/inde"
},
{
"path": "apps/e2e/src/mcp-fixtures.ts",
"chars": 15137,
"preview": "import { expect } from 'vitest'\n\nexport type MCPE2ETestFixture = {\n /** @default 60_000 milliseconds */\n timeout?: num"
},
{
"path": "apps/e2e/src/publish-deployments.ts",
"chars": 1173,
"preview": "import type { AgenticApiClient } from '@agentic/platform-api-client'\nimport type { Deployment } from '@agentic/platform-"
},
{
"path": "apps/e2e/tsconfig.json",
"chars": 134,
"preview": "{\n \"extends\": \"@fisch0920/config/tsconfig-node\",\n \"include\": [\"src\", \"bin\", \"*.config.ts\"],\n \"exclude\": [\"node_module"
},
{
"path": "apps/e2e/vitest.config.ts",
"chars": 178,
"preview": "import { defineConfig } from 'vitest/config'\n\nexport default defineConfig({\n test: {\n environment: 'node',\n globa"
},
{
"path": "apps/gateway/.dev.vars.example",
"chars": 85,
"preview": "ENVIRONMENT=\nSENTRY_DSN=\n\nAGENTIC_API_BASE_URL=\nAGENTIC_API_KEY=\n\nSTRIPE_SECRET_KEY=\n"
},
{
"path": "apps/gateway/package.json",
"chars": 2001,
"preview": "{\n \"name\": \"gateway\",\n \"private\": true,\n \"version\": \"8.4.4\",\n \"description\": \"Internal Agentic platform API gateway."
},
{
"path": "apps/gateway/src/app.ts",
"chars": 5400,
"preview": "import { assert } from '@agentic/platform-core'\nimport {\n applyRateLimitHeaders,\n cors,\n errorHandler,\n init,\n resp"
},
{
"path": "apps/gateway/src/lib/__snapshots__/utils.test.ts.snap",
"chars": 213,
"preview": "// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html\n\nexports[`createAgenticMcpMetadata 1`] = `\"{\"agentic\":{\"de"
},
{
"path": "apps/gateway/src/lib/agentic-client.ts",
"chars": 1980,
"preview": "import { AgenticApiClient } from '@agentic/platform-api-client'\nimport defaultKy from 'ky'\n\nimport type { RawEnv } from "
},
{
"path": "apps/gateway/src/lib/cf-validate-json-schema.ts",
"chars": 3287,
"preview": "import { Validator } from '@agentic/json-schema'\nimport { assert, HttpError } from '@agentic/platform-core'\nimport plur "
},
{
"path": "apps/gateway/src/lib/create-http-request-for-openapi-operation.ts",
"chars": 5370,
"preview": "import type {\n AdminDeployment,\n OpenAPIToolOperation,\n ToolConfig\n} from '@agentic/platform-types'\nimport { assert }"
},
{
"path": "apps/gateway/src/lib/create-http-response-from-mcp-tool-call-response.ts",
"chars": 2106,
"preview": "import type { AdminDeployment, Tool, ToolConfig } from '@agentic/platform-types'\nimport { assert } from '@agentic/platfo"
},
{
"path": "apps/gateway/src/lib/durable-mcp-client.ts",
"chars": 3472,
"preview": "import type { AgenticMcpRequestMetadata } from '@agentic/platform-types'\nimport { assert } from '@agentic/platform-core'"
},
{
"path": "apps/gateway/src/lib/durable-mcp-server.ts",
"chars": 5555,
"preview": "import { assert, getRateLimitHeaders } from '@agentic/platform-core'\nimport { parseDeploymentIdentifier } from '@agentic"
},
{
"path": "apps/gateway/src/lib/env.ts",
"chars": 1947,
"preview": "import type {\n AnalyticsEngineDataset,\n DurableObjectNamespace\n} from '@cloudflare/workers-types'\nimport type { Simpli"
},
{
"path": "apps/gateway/src/lib/external/stripe.ts",
"chars": 206,
"preview": "import Stripe from 'stripe'\n\nimport type { RawEnv } from '../env'\n\nexport function createStripe(env: RawEnv): Stripe {\n "
},
{
"path": "apps/gateway/src/lib/fetch-cache.ts",
"chars": 1003,
"preview": "import type { WaitUntil } from './types'\n\nexport async function fetchCache({\n cacheKey,\n fetchResponse,\n waitUntil\n}:"
},
{
"path": "apps/gateway/src/lib/get-admin-consumer.ts",
"chars": 781,
"preview": "import { assert, HttpError } from '@agentic/platform-core'\n\nimport type { AdminConsumer, GatewayHonoContext } from './ty"
},
{
"path": "apps/gateway/src/lib/get-admin-deployment.ts",
"chars": 752,
"preview": "import type { AdminDeployment } from '@agentic/platform-types'\nimport { assert } from '@agentic/platform-core'\nimport { "
},
{
"path": "apps/gateway/src/lib/get-request-cache-key.ts",
"chars": 3268,
"preview": "import { hashObject, sha256 } from '@agentic/platform-core'\nimport contentType from 'fast-content-type-parse'\n\nimport { "
},
{
"path": "apps/gateway/src/lib/get-tool-args-from-request.ts",
"chars": 2689,
"preview": "import type { AdminDeployment, Tool } from '@agentic/platform-types'\nimport { assert, HttpError } from '@agentic/platfor"
},
{
"path": "apps/gateway/src/lib/get-tool.ts",
"chars": 1981,
"preview": "import type { AdminDeployment, Tool } from '@agentic/platform-types'\nimport { assert } from '@agentic/platform-core'\n\nex"
},
{
"path": "apps/gateway/src/lib/handle-mcp-tool-call-error.ts",
"chars": 2560,
"preview": "import type { ContentfulStatusCode } from 'hono/utils/http-status'\nimport { HttpError } from '@agentic/platform-core'\nim"
},
{
"path": "apps/gateway/src/lib/normalize-url.test.ts",
"chars": 5304,
"preview": "import { expect, test } from 'vitest'\n\nimport { normalizeUrl } from './normalize-url'\n\ntest('main', () => {\n expect(nor"
},
{
"path": "apps/gateway/src/lib/normalize-url.ts",
"chars": 1431,
"preview": "/**\n * Stripped down version of [normalize-url](https://github.com/sindresorhus/normalize-url)\n * by sindresorhus\n *\n * "
},
{
"path": "apps/gateway/src/lib/rate-limits/durable-rate-limiter.ts",
"chars": 1914,
"preview": "import type { SetOptional } from 'type-fest'\nimport * as Sentry from '@sentry/cloudflare'\nimport { DurableObject } from "
},
{
"path": "apps/gateway/src/lib/rate-limits/enforce-rate-limit.ts",
"chars": 3354,
"preview": "import type { RateLimit } from '@agentic/platform-types'\nimport { assert } from '@agentic/platform-core'\n\nimport type { "
},
{
"path": "apps/gateway/src/lib/record-tool-call-usage.ts",
"chars": 5825,
"preview": "import type {\n AdminDeployment,\n PricingPlan,\n Tool\n} from '@agentic/platform-types'\n\nimport type { RawEnv } from './"
},
{
"path": "apps/gateway/src/lib/reset.d.ts",
"chars": 36,
"preview": "import '@fisch0920/config/ts-reset'\n"
},
{
"path": "apps/gateway/src/lib/resolve-edge-request.ts",
"chars": 2670,
"preview": "import type { AdminDeployment, PricingPlan } from '@agentic/platform-types'\nimport { assert } from '@agentic/platform-co"
},
{
"path": "apps/gateway/src/lib/resolve-http-edge-request.ts",
"chars": 2149,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type {\n GatewayHonoContext,\n ResolvedEdgeRequest,\n ResolvedHt"
},
{
"path": "apps/gateway/src/lib/resolve-mcp-edge-request.ts",
"chars": 937,
"preview": "import { assert } from '@agentic/platform-core'\n\nimport type {\n GatewayHonoContext,\n ResolvedEdgeRequest,\n ResolvedMc"
},
{
"path": "apps/gateway/src/lib/resolve-origin-tool-call.ts",
"chars": 11418,
"preview": "import type {\n AdminDeployment,\n AgenticMcpRequestMetadata,\n PricingPlan,\n Tool\n} from '@agentic/platform-types'\nimp"
},
{
"path": "apps/gateway/src/lib/temp",
"chars": 4610,
"preview": "// import type { AdminDeployment, PricingPlan } from '@agentic/platform-types'\n// import type { JSONRPCRequest } from '@"
},
{
"path": "apps/gateway/src/lib/temp-mcp",
"chars": 12533,
"preview": "// import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\n// import { StreamableHTTPClientTransport } from "
},
{
"path": "apps/gateway/src/lib/transform-http-response-to-mcp-tool-call-response.ts",
"chars": 3367,
"preview": "import type { Tool, ToolConfig } from '@agentic/platform-types'\nimport { assert, HttpError } from '@agentic/platform-cor"
},
{
"path": "apps/gateway/src/lib/types.ts",
"chars": 2844,
"preview": "import type { AgenticApiClient } from '@agentic/platform-api-client'\nimport type { RateLimitResult } from '@agentic/plat"
},
{
"path": "apps/gateway/src/lib/update-origin-request.ts",
"chars": 3725,
"preview": "import type { AdminDeployment } from '@agentic/platform-types'\n\nimport type { AdminConsumer } from './types'\n\n// TODO: s"
},
{
"path": "apps/gateway/src/lib/utils.test.ts",
"chars": 2786,
"preview": "import { expect, test } from 'vitest'\n\nimport {\n createAgenticMcpMetadata,\n isCacheControlPubliclyCacheable,\n isReque"
},
{
"path": "apps/gateway/src/lib/utils.ts",
"chars": 2272,
"preview": "import { pruneEmpty } from '@agentic/platform-core'\nimport sortKeys from 'sort-keys'\n\nexport function isRequestPubliclyC"
},
{
"path": "apps/gateway/src/worker.ts",
"chars": 1380,
"preview": "import * as Sentry from '@sentry/cloudflare'\n\nimport { app } from './app'\nimport { type Env, parseEnv, type RawEnv } fro"
},
{
"path": "apps/gateway/tsconfig.json",
"chars": 198,
"preview": "{\n \"extends\": \"@fisch0920/config/tsconfig-node\",\n \"compilerOptions\": {\n \"types\": [\"@cloudflare/workers-types\"]\n },"
},
{
"path": "apps/gateway/vitest.config.ts",
"chars": 186,
"preview": "import { defineConfig } from 'vitest/config'\n\nexport default defineConfig({\n test: {\n environment: 'edge-runtime',\n "
},
{
"path": "apps/gateway/wrangler.jsonc",
"chars": 2070,
"preview": "/**\n * https://developers.cloudflare.com/workers/wrangler/configuration/\n */\n{\n \"$schema\": \"node_modules/wrangler/confi"
},
{
"path": "apps/web/components.json",
"chars": 449,
"preview": "{\n \"$schema\": \"https://ui.shadcn.com/schema.json\",\n \"style\": \"new-york\",\n \"rsc\": true,\n \"tsx\": true,\n \"tailwind\": {"
},
{
"path": "apps/web/next.config.ts",
"chars": 179,
"preview": "import type { NextConfig } from 'next'\n\nconst nextConfig: NextConfig = {\n // TODO: handle remote profile pictures or up"
},
{
"path": "apps/web/package.json",
"chars": 2875,
"preview": "{\n \"name\": \"web\",\n \"private\": true,\n \"version\": \"8.4.4\",\n \"description\": \"Agentic platform webapp.\",\n \"author\": \"Tr"
},
{
"path": "apps/web/postcss.config.mjs",
"chars": 67,
"preview": "export default {\n plugins: {\n '@tailwindcss/postcss': {}\n }\n}\n"
},
{
"path": "apps/web/public/schema.json",
"chars": 17871,
"preview": "{\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"maxLength\": 1024,\n \"minLength\""
}
]
// ... and 849 more files (download for full content)
About this extraction
This page contains the full source code of the transitive-bullshit/agentic GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1049 files (24.1 MB), approximately 3.6M tokens, and a symbol index with 6080 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.