diff --git a/server/db/pg/schema.ts b/server/db/pg/schema.ts index e94bfe36..94e2475e 100644 --- a/server/db/pg/schema.ts +++ b/server/db/pg/schema.ts @@ -720,4 +720,5 @@ export type OrgDomains = InferSelectModel; export type SiteResource = InferSelectModel; export type SetupToken = InferSelectModel; export type HostMeta = InferSelectModel; -export type TargetHealthCheck = InferSelectModel; \ No newline at end of file +export type TargetHealthCheck = InferSelectModel; +export type IdpOidcConfig = InferSelectModel; \ No newline at end of file diff --git a/server/db/sqlite/schema.ts b/server/db/sqlite/schema.ts index 9d64b85e..5ce415f2 100644 --- a/server/db/sqlite/schema.ts +++ b/server/db/sqlite/schema.ts @@ -759,4 +759,5 @@ export type SiteResource = InferSelectModel; export type OrgDomains = InferSelectModel; export type SetupToken = InferSelectModel; export type HostMeta = InferSelectModel; -export type TargetHealthCheck = InferSelectModel; \ No newline at end of file +export type TargetHealthCheck = InferSelectModel; +export type IdpOidcConfig = InferSelectModel; \ No newline at end of file diff --git a/server/lib/createUserAccountOrg.ts b/server/lib/createUserAccountOrg.ts index 8677d8e3..3728ec9b 100644 --- a/server/lib/createUserAccountOrg.ts +++ b/server/lib/createUserAccountOrg.ts @@ -15,8 +15,7 @@ import { } from "@server/db"; import { eq } from "drizzle-orm"; import { defaultRoleAllowedActions } from "@server/routers/role"; -import { FeatureId, limitsService, sandboxLimitSet } from "@server/lib/billing"; -import { createCustomer } from "@server/private/lib/billing/createCustomer"; +import { FeatureId, limitsService, sandboxLimitSet, createCustomer } from "@server/lib/billing"; import { usageService } from "@server/lib/billing/usageService"; export async function createUserAccountOrg( diff --git a/server/private/cleanup.ts b/server/private/cleanup.ts index 8e57ce29..8bf5ea3d 100644 --- a/server/private/cleanup.ts +++ b/server/private/cleanup.ts @@ -1,3 +1,16 @@ +/* + * This file is part of a proprietary work. + * + * Copyright (c) 2025 Fossorial, Inc. + * All rights reserved. + * + * This file is licensed under the Fossorial Commercial License. + * You may not use this file except in compliance with the License. + * Unauthorized use, copying, modification, or distribution is strictly prohibited. + * + * This file is not licensed under the AGPLv3. + */ + import { rateLimitService } from "#private/lib/rateLimit"; import { cleanup as wsCleanup } from "#private/routers/ws"; diff --git a/server/private/lib/rateLimit.ts b/server/private/lib/rateLimit.ts index 1d0e62ae..44aa0748 100644 --- a/server/private/lib/rateLimit.ts +++ b/server/private/lib/rateLimit.ts @@ -12,7 +12,7 @@ */ import logger from "@server/logger"; -import redisManager from "@server/private/lib/redis"; +import redisManager from "#private/lib/redis"; import { build } from "@server/build"; // Rate limiting configuration diff --git a/server/private/routers/auth/transferSession.ts b/server/private/routers/auth/transferSession.ts index e75f77dd..52138a75 100644 --- a/server/private/routers/auth/transferSession.ts +++ b/server/private/routers/auth/transferSession.ts @@ -26,6 +26,7 @@ import { sha256 } from "@oslojs/crypto/sha2"; import { serializeSessionCookie } from "@server/auth/sessions/app"; import { decrypt } from "@server/lib/crypto"; import config from "@server/lib/config"; +import { TransferSessionResponse } from "@server/routers/auth/types"; const bodySchema = z.object({ token: z.string() @@ -33,11 +34,6 @@ const bodySchema = z.object({ export type TransferSessionBodySchema = z.infer; -export type TransferSessionResponse = { - valid: boolean; - cookie?: string; -}; - export async function transferSession( req: Request, res: Response, diff --git a/server/private/routers/billing/getOrgSubscription.ts b/server/private/routers/billing/getOrgSubscription.ts index 3e4f575e..b97ca39f 100644 --- a/server/private/routers/billing/getOrgSubscription.ts +++ b/server/private/routers/billing/getOrgSubscription.ts @@ -22,6 +22,8 @@ import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromZodError } from "zod-validation-error"; import { OpenAPITags, registry } from "@server/openApi"; +import { GetOrgSubscriptionResponse } from "@server/routers/billing/types"; + // Import tables for billing import { customers, @@ -37,11 +39,6 @@ const getOrgSchema = z }) .strict(); -export type GetOrgSubscriptionResponse = { - subscription: Subscription | null; - items: SubscriptionItem[]; -}; - registry.registerPath({ method: "get", path: "/org/{orgId}/billing/subscription", diff --git a/server/private/routers/billing/getOrgUsage.ts b/server/private/routers/billing/getOrgUsage.ts index 5aad9609..bc879659 100644 --- a/server/private/routers/billing/getOrgUsage.ts +++ b/server/private/routers/billing/getOrgUsage.ts @@ -25,6 +25,7 @@ import { OpenAPITags, registry } from "@server/openApi"; import { Limit, limits, Usage, usage } from "@server/db"; import { usageService } from "@server/lib/billing/usageService"; import { FeatureId } from "@server/lib/billing"; +import { GetOrgUsageResponse } from "@server/routers/billing/types"; const getOrgSchema = z .object({ @@ -32,11 +33,6 @@ const getOrgSchema = z }) .strict(); -export type GetOrgUsageResponse = { - usage: Usage[]; - limits: Limit[]; -}; - registry.registerPath({ method: "get", path: "/org/{orgId}/billing/usage", diff --git a/server/private/routers/billing/internalGetOrgTier.ts b/server/private/routers/billing/internalGetOrgTier.ts index 8db41807..cca96243 100644 --- a/server/private/routers/billing/internalGetOrgTier.ts +++ b/server/private/routers/billing/internalGetOrgTier.ts @@ -19,6 +19,7 @@ import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromZodError } from "zod-validation-error"; import { getOrgTierData } from "#private/lib/billing"; +import { GetOrgTierResponse } from "@server/routers/billing/types"; const getOrgSchema = z .object({ @@ -26,11 +27,6 @@ const getOrgSchema = z }) .strict(); -export type GetOrgTierResponse = { - tier: string | null; - active: boolean; -}; - export async function getOrgTier( req: Request, res: Response, diff --git a/server/private/routers/certificates/getCertificate.ts b/server/private/routers/certificates/getCertificate.ts index a0bf74f6..8392cbc0 100644 --- a/server/private/routers/certificates/getCertificate.ts +++ b/server/private/routers/certificates/getCertificate.ts @@ -21,6 +21,7 @@ import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromError } from "zod-validation-error"; import { registry } from "@server/openApi"; +import { GetCertificateResponse } from "@server/routers/certificates/types"; const getCertificateSchema = z .object({ @@ -96,20 +97,6 @@ async function query(domainId: string, domain: string) { return existing.length > 0 ? existing[0] : null; } -export type GetCertificateResponse = { - certId: number; - domain: string; - domainId: string; - wildcard: boolean; - status: string; // pending, requested, valid, expired, failed - expiresAt: string | null; - lastRenewalAttempt: Date | null; - createdAt: string; - updatedAt: string; - errorMessage?: string | null; - renewalCount: number; -} - registry.registerPath({ method: "get", path: "/org/{orgId}/certificate/{domainId}/{domain}", diff --git a/server/private/routers/domain/checkDomainNamespaceAvailability.ts b/server/private/routers/domain/checkDomainNamespaceAvailability.ts index f1a4e103..745af9d3 100644 --- a/server/private/routers/domain/checkDomainNamespaceAvailability.ts +++ b/server/private/routers/domain/checkDomainNamespaceAvailability.ts @@ -21,6 +21,7 @@ import { fromError } from "zod-validation-error"; import { OpenAPITags, registry } from "@server/openApi"; import { db, domainNamespaces, resources } from "@server/db"; import { inArray } from "drizzle-orm"; +import { CheckDomainAvailabilityResponse } from "@server/routers/domain/types"; const paramsSchema = z.object({}).strict(); @@ -30,15 +31,6 @@ const querySchema = z }) .strict(); -export type CheckDomainAvailabilityResponse = { - available: boolean; - options: { - domainNamespaceId: string; - domainId: string; - fullDomain: string; - }[]; -}; - registry.registerPath({ method: "get", path: "/domain/check-namespace-availability", diff --git a/server/private/routers/loginPage/createLoginPage.ts b/server/private/routers/loginPage/createLoginPage.ts index 9c0359fe..cb0bb923 100644 --- a/server/private/routers/loginPage/createLoginPage.ts +++ b/server/private/routers/loginPage/createLoginPage.ts @@ -33,6 +33,7 @@ import { createCertificate } from "#private/routers/certificates/createCertifica import { getOrgTierData } from "#private/lib/billing"; import { TierId } from "@server/lib/billing/tiers"; import { build } from "@server/build"; +import { CreateLoginPageResponse } from "@server/routers/loginPage/types"; const paramsSchema = z .object({ @@ -49,8 +50,6 @@ const bodySchema = z export type CreateLoginPageBody = z.infer; -export type CreateLoginPageResponse = LoginPage; - export async function createLoginPage( req: Request, res: Response, diff --git a/server/private/routers/loginPage/deleteLoginPage.ts b/server/private/routers/loginPage/deleteLoginPage.ts index 7cc957a2..bf7941e7 100644 --- a/server/private/routers/loginPage/deleteLoginPage.ts +++ b/server/private/routers/loginPage/deleteLoginPage.ts @@ -20,6 +20,7 @@ import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromError } from "zod-validation-error"; import { eq, and } from "drizzle-orm"; +import { DeleteLoginPageResponse } from "@server/routers/loginPage/types"; const paramsSchema = z .object({ @@ -28,8 +29,6 @@ const paramsSchema = z }) .strict(); -export type DeleteLoginPageResponse = LoginPage; - export async function deleteLoginPage( req: Request, res: Response, diff --git a/server/private/routers/loginPage/getLoginPage.ts b/server/private/routers/loginPage/getLoginPage.ts index 9c9a18f5..76e20ffb 100644 --- a/server/private/routers/loginPage/getLoginPage.ts +++ b/server/private/routers/loginPage/getLoginPage.ts @@ -20,6 +20,7 @@ import HttpCode from "@server/types/HttpCode"; import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromError } from "zod-validation-error"; +import { GetLoginPageResponse } from "@server/routers/loginPage/types"; const paramsSchema = z .object({ @@ -40,10 +41,6 @@ async function query(orgId: string) { return res?.loginPage; } -export type GetLoginPageResponse = NonNullable< - Awaited> ->; - export async function getLoginPage( req: Request, res: Response, diff --git a/server/private/routers/loginPage/loadLoginPage.ts b/server/private/routers/loginPage/loadLoginPage.ts index 91cc002e..133336b6 100644 --- a/server/private/routers/loginPage/loadLoginPage.ts +++ b/server/private/routers/loginPage/loadLoginPage.ts @@ -20,6 +20,7 @@ import HttpCode from "@server/types/HttpCode"; import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromError } from "zod-validation-error"; +import { LoadLoginPageResponse } from "@server/routers/loginPage/types"; const querySchema = z.object({ resourceId: z.coerce.number().int().positive().optional(), @@ -70,10 +71,6 @@ async function query(orgId: string | undefined, fullDomain: string) { }; } -export type LoadLoginPageResponse = NonNullable< - Awaited> -> & { orgId: string }; - export async function loadLoginPage( req: Request, res: Response, diff --git a/server/private/routers/loginPage/updateLoginPage.ts b/server/private/routers/loginPage/updateLoginPage.ts index 4aebbb7a..4f2be084 100644 --- a/server/private/routers/loginPage/updateLoginPage.ts +++ b/server/private/routers/loginPage/updateLoginPage.ts @@ -26,6 +26,7 @@ import { createCertificate } from "#private/routers/certificates/createCertifica import { getOrgTierData } from "#private/lib/billing"; import { TierId } from "@server/lib/billing/tiers"; import { build } from "@server/build"; +import { UpdateLoginPageResponse } from "@server/routers/loginPage/types"; const paramsSchema = z .object({ @@ -55,8 +56,6 @@ const bodySchema = z export type UpdateLoginPageBody = z.infer; -export type UpdateLoginPageResponse = LoginPage; - export async function updateLoginPage( req: Request, res: Response, diff --git a/server/private/routers/orgIdp/createOrgOidcIdp.ts b/server/private/routers/orgIdp/createOrgOidcIdp.ts index 5f732864..02cef526 100644 --- a/server/private/routers/orgIdp/createOrgOidcIdp.ts +++ b/server/private/routers/orgIdp/createOrgOidcIdp.ts @@ -27,6 +27,7 @@ import config from "@server/lib/config"; import { build } from "@server/build"; import { getOrgTierData } from "#private/lib/billing"; import { TierId } from "@server/lib/billing/tiers"; +import { CreateOrgIdpResponse } from "@server/routers/orgIdp/types"; const paramsSchema = z.object({ orgId: z.string().nonempty() }).strict(); @@ -47,11 +48,6 @@ const bodySchema = z }) .strict(); -export type CreateOrgIdpResponse = { - idpId: number; - redirectUrl: string; -}; - // registry.registerPath({ // method: "put", // path: "/idp/oidc", diff --git a/server/private/routers/orgIdp/getOrgIdp.ts b/server/private/routers/orgIdp/getOrgIdp.ts index 73ccdcbb..0e6689fc 100644 --- a/server/private/routers/orgIdp/getOrgIdp.ts +++ b/server/private/routers/orgIdp/getOrgIdp.ts @@ -25,6 +25,7 @@ import { OpenAPITags, registry } from "@server/openApi"; import config from "@server/lib/config"; import { decrypt } from "@server/lib/crypto"; import { generateOidcRedirectUrl } from "@server/lib/idp/generateRedirectUrl"; +import { GetOrgIdpResponse } from "@server/routers/orgIdp/types"; const paramsSchema = z .object({ @@ -47,10 +48,6 @@ async function query(idpId: number, orgId: string) { return res; } -export type GetOrgIdpResponse = NonNullable< - Awaited> -> & { redirectUrl: string }; - // registry.registerPath({ // method: "get", // path: "/idp/{idpId}", diff --git a/server/private/routers/orgIdp/listOrgIdps.ts b/server/private/routers/orgIdp/listOrgIdps.ts index 208732de..0c69ff8d 100644 --- a/server/private/routers/orgIdp/listOrgIdps.ts +++ b/server/private/routers/orgIdp/listOrgIdps.ts @@ -22,6 +22,7 @@ import { eq, sql } from "drizzle-orm"; import logger from "@server/logger"; import { fromError } from "zod-validation-error"; import { OpenAPITags, registry } from "@server/openApi"; +import { ListOrgIdpsResponse } from "@server/routers/orgIdp/types"; const querySchema = z .object({ @@ -65,15 +66,6 @@ async function query(orgId: string, limit: number, offset: number) { return res; } -export type ListOrgIdpsResponse = { - idps: Awaited>; - pagination: { - total: number; - limit: number; - offset: number; - }; -}; - // registry.registerPath({ // method: "get", // path: "/idp", diff --git a/server/private/routers/remoteExitNode/createRemoteExitNode.ts b/server/private/routers/remoteExitNode/createRemoteExitNode.ts index 44fecb86..4c0fa38a 100644 --- a/server/private/routers/remoteExitNode/createRemoteExitNode.ts +++ b/server/private/routers/remoteExitNode/createRemoteExitNode.ts @@ -29,17 +29,12 @@ import { and, eq } from "drizzle-orm"; import { getNextAvailableSubnet } from "@server/lib/exitNodes"; import { usageService } from "@server/lib/billing/usageService"; import { FeatureId } from "@server/lib/billing"; +import { CreateRemoteExitNodeResponse } from "@server/routers/remoteExitNode/types"; export const paramsSchema = z.object({ orgId: z.string() }); -export type CreateRemoteExitNodeResponse = { - token: string; - remoteExitNodeId: string; - secret: string; -}; - const bodySchema = z .object({ remoteExitNodeId: z.string().length(15), diff --git a/server/private/routers/remoteExitNode/getRemoteExitNode.ts b/server/private/routers/remoteExitNode/getRemoteExitNode.ts index 19c4f263..2ef3fb06 100644 --- a/server/private/routers/remoteExitNode/getRemoteExitNode.ts +++ b/server/private/routers/remoteExitNode/getRemoteExitNode.ts @@ -21,6 +21,7 @@ import HttpCode from "@server/types/HttpCode"; import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromError } from "zod-validation-error"; +import { GetRemoteExitNodeResponse } from "@server/routers/remoteExitNode/types"; const getRemoteExitNodeSchema = z .object({ @@ -52,8 +53,6 @@ async function query(remoteExitNodeId: string) { return remoteExitNode; } -export type GetRemoteExitNodeResponse = Awaited>; - export async function getRemoteExitNode( req: Request, res: Response, diff --git a/server/private/routers/remoteExitNode/getRemoteExitNodeToken.ts b/server/private/routers/remoteExitNode/getRemoteExitNodeToken.ts index 48b0110d..16ec4d5d 100644 --- a/server/private/routers/remoteExitNode/getRemoteExitNodeToken.ts +++ b/server/private/routers/remoteExitNode/getRemoteExitNodeToken.ts @@ -35,8 +35,6 @@ export const remoteExitNodeGetTokenBodySchema = z.object({ token: z.string().optional() }); -export type RemoteExitNodeGetTokenBody = z.infer; - export async function getRemoteExitNodeToken( req: Request, res: Response, diff --git a/server/private/routers/remoteExitNode/listRemoteExitNodes.ts b/server/private/routers/remoteExitNode/listRemoteExitNodes.ts index d6d2466e..1029b1e9 100644 --- a/server/private/routers/remoteExitNode/listRemoteExitNodes.ts +++ b/server/private/routers/remoteExitNode/listRemoteExitNodes.ts @@ -21,6 +21,7 @@ import HttpCode from "@server/types/HttpCode"; import createHttpError from "http-errors"; import logger from "@server/logger"; import { fromError } from "zod-validation-error"; +import { ListRemoteExitNodesResponse } from "@server/routers/remoteExitNode/types"; const listRemoteExitNodesParamsSchema = z .object({ @@ -43,7 +44,7 @@ const listRemoteExitNodesSchema = z.object({ .pipe(z.number().int().nonnegative()) }); -function queryRemoteExitNodes(orgId: string) { +export function queryRemoteExitNodes(orgId: string) { return db .select({ remoteExitNodeId: remoteExitNodes.remoteExitNodeId, @@ -65,11 +66,6 @@ function queryRemoteExitNodes(orgId: string) { ); } -export type ListRemoteExitNodesResponse = { - remoteExitNodes: Awaited>; - pagination: { total: number; limit: number; offset: number }; -}; - export async function listRemoteExitNodes( req: Request, res: Response, diff --git a/server/private/routers/remoteExitNode/pickRemoteExitNodeDefaults.ts b/server/private/routers/remoteExitNode/pickRemoteExitNodeDefaults.ts index 684e616c..e5762f0d 100644 --- a/server/private/routers/remoteExitNode/pickRemoteExitNodeDefaults.ts +++ b/server/private/routers/remoteExitNode/pickRemoteExitNodeDefaults.ts @@ -19,11 +19,7 @@ import logger from "@server/logger"; import { generateId } from "@server/auth/sessions/app"; import { fromError } from "zod-validation-error"; import { z } from "zod"; - -export type PickRemoteExitNodeDefaultsResponse = { - remoteExitNodeId: string; - secret: string; -}; +import { PickRemoteExitNodeDefaultsResponse } from "@server/routers/remoteExitNode/types"; const paramsSchema = z .object({ diff --git a/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts b/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts index 689580b9..4d368152 100644 --- a/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts +++ b/server/private/routers/remoteExitNode/quickStartRemoteExitNode.ts @@ -12,7 +12,7 @@ */ import { NextFunction, Request, Response } from "express"; -import { db, exitNodes, exitNodeOrgs } from "@server/db"; +import { db } from "@server/db"; import HttpCode from "@server/types/HttpCode"; import { remoteExitNodes } from "@server/db"; import createHttpError from "http-errors"; @@ -24,11 +24,7 @@ import { hashPassword } from "@server/auth/password"; import logger from "@server/logger"; import z from "zod"; import { fromError } from "zod-validation-error"; - -export type QuickStartRemoteExitNodeResponse = { - remoteExitNodeId: string; - secret: string; -}; +import { QuickStartRemoteExitNodeResponse } from "@server/routers/remoteExitNode/types"; const INSTALLER_KEY = "af4e4785-7e09-11f0-b93a-74563c4e2a7e"; diff --git a/server/routers/auth/types.ts b/server/routers/auth/types.ts new file mode 100644 index 00000000..4c6148fa --- /dev/null +++ b/server/routers/auth/types.ts @@ -0,0 +1,4 @@ +export type TransferSessionResponse = { + valid: boolean; + cookie?: string; +}; \ No newline at end of file diff --git a/server/routers/billing/types.ts b/server/routers/billing/types.ts new file mode 100644 index 00000000..2ec5a1b1 --- /dev/null +++ b/server/routers/billing/types.ts @@ -0,0 +1,17 @@ +import { Limit, Subscription, SubscriptionItem, Usage } from "@server/db"; + +export type GetOrgSubscriptionResponse = { + subscription: Subscription | null; + items: SubscriptionItem[]; +}; + +export type GetOrgUsageResponse = { + usage: Usage[]; + limits: Limit[]; +}; + +export type GetOrgTierResponse = { + tier: string | null; + active: boolean; +}; + diff --git a/server/routers/certificates/types.ts b/server/routers/certificates/types.ts new file mode 100644 index 00000000..80136de8 --- /dev/null +++ b/server/routers/certificates/types.ts @@ -0,0 +1,13 @@ +export type GetCertificateResponse = { + certId: number; + domain: string; + domainId: string; + wildcard: boolean; + status: string; // pending, requested, valid, expired, failed + expiresAt: string | null; + lastRenewalAttempt: Date | null; + createdAt: string; + updatedAt: string; + errorMessage?: string | null; + renewalCount: number; +} \ No newline at end of file diff --git a/server/routers/domain/types.ts b/server/routers/domain/types.ts new file mode 100644 index 00000000..4ae48fb1 --- /dev/null +++ b/server/routers/domain/types.ts @@ -0,0 +1,8 @@ +export type CheckDomainAvailabilityResponse = { + available: boolean; + options: { + domainNamespaceId: string; + domainId: string; + fullDomain: string; + }[]; +}; \ No newline at end of file diff --git a/server/routers/loginPage/types.ts b/server/routers/loginPage/types.ts new file mode 100644 index 00000000..26f59cab --- /dev/null +++ b/server/routers/loginPage/types.ts @@ -0,0 +1,11 @@ +import { LoginPage } from "@server/db"; + +export type CreateLoginPageResponse = LoginPage; + +export type DeleteLoginPageResponse = LoginPage; + +export type GetLoginPageResponse = LoginPage; + +export type UpdateLoginPageResponse = LoginPage; + +export type LoadLoginPageResponse = LoginPage & { orgId: string }; \ No newline at end of file diff --git a/server/routers/orgIdp/types.ts b/server/routers/orgIdp/types.ts new file mode 100644 index 00000000..a8e205cc --- /dev/null +++ b/server/routers/orgIdp/types.ts @@ -0,0 +1,27 @@ +import { Idp, IdpOidcConfig } from "@server/db"; + +export type CreateOrgIdpResponse = { + idpId: number; + redirectUrl: string; +}; + +export type GetOrgIdpResponse = { + idp: Idp, + idpOidcConfig: IdpOidcConfig | null, + redirectUrl: string +} + +export type ListOrgIdpsResponse = { + idps: { + idpId: number; + orgId: string; + name: string; + type: string; + variant: string; + }[], + pagination: { + total: number; + limit: number; + offset: number; + }; +}; diff --git a/server/routers/remoteExitNode/types.ts b/server/routers/remoteExitNode/types.ts new file mode 100644 index 00000000..55d0a286 --- /dev/null +++ b/server/routers/remoteExitNode/types.ts @@ -0,0 +1,34 @@ +import { RemoteExitNode } from "@server/db"; + +export type CreateRemoteExitNodeResponse = { + token: string; + remoteExitNodeId: string; + secret: string; +}; + +export type PickRemoteExitNodeDefaultsResponse = { + remoteExitNodeId: string; + secret: string; +}; + +export type QuickStartRemoteExitNodeResponse = { + remoteExitNodeId: string; + secret: string; +}; + +export type ListRemoteExitNodesResponse = { + remoteExitNodes: { + remoteExitNodeId: string; + dateCreated: string; + version: string | null; + exitNodeId: number | null; + name: string; + address: string; + endpoint: string; + online: boolean; + type: string | null; + }[]; + pagination: { total: number; limit: number; offset: number }; +}; + +export type GetRemoteExitNodeResponse = { remoteExitNodeId: string; dateCreated: string; version: string | null; exitNodeId: number | null; name: string; address: string; endpoint: string; online: boolean; type: string | null; } \ No newline at end of file diff --git a/src/app/[orgId]/layout.tsx b/src/app/[orgId]/layout.tsx index d8f28a59..b03f06e8 100644 --- a/src/app/[orgId]/layout.tsx +++ b/src/app/[orgId]/layout.tsx @@ -10,7 +10,7 @@ import { redirect } from "next/navigation"; import { cache } from "react"; import SetLastOrgCookie from "@app/components/SetLastOrgCookie"; import PrivateSubscriptionStatusProvider from "@app/providers/SubscriptionStatusProvider"; -import { GetOrgSubscriptionResponse } from "#private/routers/billing/getOrgSubscription"; +import { GetOrgSubscriptionResponse } from "@server/routers/billing/types"; import { pullEnv } from "@app/lib/pullEnv"; import { build } from "@server/build"; diff --git a/src/app/[orgId]/settings/(private)/billing/page.tsx b/src/app/[orgId]/settings/(private)/billing/page.tsx index cab22311..a2841fb4 100644 --- a/src/app/[orgId]/settings/(private)/billing/page.tsx +++ b/src/app/[orgId]/settings/(private)/billing/page.tsx @@ -37,7 +37,7 @@ import { InfoPopup } from "@/components/ui/info-popup"; import { GetOrgSubscriptionResponse, GetOrgUsageResponse -} from "#private/routers/billing"; +} from "@server/routers/billing/types"; import { useTranslations } from "use-intl"; import Link from "next/link"; diff --git a/src/app/[orgId]/settings/(private)/idp/page.tsx b/src/app/[orgId]/settings/(private)/idp/page.tsx index 2d1882b9..b27cf63b 100644 --- a/src/app/[orgId]/settings/(private)/idp/page.tsx +++ b/src/app/[orgId]/settings/(private)/idp/page.tsx @@ -9,7 +9,7 @@ import { cache } from "react"; import { GetOrgSubscriptionResponse, GetOrgTierResponse -} from "#private/routers/billing"; +} from "@server/routers/billing/types"; import { TierId } from "@server/lib/billing/tiers"; import { build } from "@server/build"; diff --git a/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/layout.tsx b/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/layout.tsx index bfab3086..7a7b3611 100644 --- a/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/layout.tsx +++ b/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/layout.tsx @@ -1,5 +1,5 @@ import { internal } from "@app/lib/api"; -import { GetRemoteExitNodeResponse } from "#private/routers/remoteExitNode"; +import { GetRemoteExitNodeResponse } from "@server/routers/remoteExitNode/types"; import { AxiosResponse } from "axios"; import { redirect } from "next/navigation"; import { authCookieHeader } from "@app/lib/api/cookies"; diff --git a/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx b/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx index 7531ba6d..ca3e0cba 100644 --- a/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx +++ b/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx @@ -30,7 +30,7 @@ import { useEnvContext } from "@app/hooks/useEnvContext"; import { QuickStartRemoteExitNodeResponse, PickRemoteExitNodeDefaultsResponse -} from "#private/routers/remoteExitNode"; +} from "@server/routers/remoteExitNode/types"; import { toast } from "@app/hooks/useToast"; import { AxiosResponse } from "axios"; import { useParams, useRouter, useSearchParams } from "next/navigation"; diff --git a/src/app/[orgId]/settings/(private)/remote-exit-nodes/page.tsx b/src/app/[orgId]/settings/(private)/remote-exit-nodes/page.tsx index c4113558..632dc0ad 100644 --- a/src/app/[orgId]/settings/(private)/remote-exit-nodes/page.tsx +++ b/src/app/[orgId]/settings/(private)/remote-exit-nodes/page.tsx @@ -1,6 +1,6 @@ import { internal } from "@app/lib/api"; import { authCookieHeader } from "@app/lib/api/cookies"; -import { ListRemoteExitNodesResponse } from "#private/routers/remoteExitNode"; +import { ListRemoteExitNodesResponse } from "@server/routers/remoteExitNode/types"; import { AxiosResponse } from "axios"; import ExitNodesTable, { RemoteExitNodeRow } from "./ExitNodesTable"; import SettingsSectionTitle from "@app/components/SettingsSectionTitle"; diff --git a/src/app/[orgId]/settings/sites/create/page.tsx b/src/app/[orgId]/settings/sites/create/page.tsx index 73ead11f..c0b8c2a6 100644 --- a/src/app/[orgId]/settings/sites/create/page.tsx +++ b/src/app/[orgId]/settings/sites/create/page.tsx @@ -53,7 +53,7 @@ import { CreateSiteResponse, PickSiteDefaultsResponse } from "@server/routers/site"; -import { ListRemoteExitNodesResponse } from "#private/routers/remoteExitNode"; +import { ListRemoteExitNodesResponse } from "@server/routers/remoteExitNode/types"; import { toast } from "@app/hooks/useToast"; import { AxiosResponse } from "axios"; import { useParams, useRouter } from "next/navigation"; diff --git a/src/app/auth/(private)/org/page.tsx b/src/app/auth/(private)/org/page.tsx index c438ba66..70821f8f 100644 --- a/src/app/auth/(private)/org/page.tsx +++ b/src/app/auth/(private)/org/page.tsx @@ -6,13 +6,12 @@ import { verifySession } from "@app/lib/auth/verifySession"; import { redirect } from "next/navigation"; import { pullEnv } from "@app/lib/pullEnv"; import { LoginFormIDP } from "@app/components/LoginForm"; -import { ListOrgIdpsResponse } from "#private/routers/orgIdp"; +import { ListOrgIdpsResponse } from "@server/routers/orgIdp/types"; import { build } from "@server/build"; import { headers } from "next/headers"; import { - GetLoginPageResponse, LoadLoginPageResponse -} from "#private/routers/loginPage"; +} from "@server/routers/loginPage/types"; import IdpLoginButtons from "@app/components/private/IdpLoginButtons"; import { Card, @@ -26,7 +25,7 @@ import Link from "next/link"; import { getTranslations } from "next-intl/server"; import { GetSessionTransferTokenRenponse } from "#private/routers/auth/getSessionTransferToken"; import ValidateSessionTransferToken from "@app/components/private/ValidateSessionTransferToken"; -import { GetOrgTierResponse } from "#private/routers/billing"; +import { GetOrgTierResponse } from "@server/routers/billing/types"; import { TierId } from "@server/lib/billing/tiers"; export const dynamic = "force-dynamic"; diff --git a/src/app/auth/idp/[idpId]/oidc/callback/page.tsx b/src/app/auth/idp/[idpId]/oidc/callback/page.tsx index 6c503da8..a2432e3e 100644 --- a/src/app/auth/idp/[idpId]/oidc/callback/page.tsx +++ b/src/app/auth/idp/[idpId]/oidc/callback/page.tsx @@ -6,7 +6,7 @@ import { AxiosResponse } from "axios"; import { GetIdpResponse } from "@server/routers/idp"; import { getTranslations } from "next-intl/server"; import { pullEnv } from "@app/lib/pullEnv"; -import { LoadLoginPageResponse } from "#private/routers/loginPage"; +import { LoadLoginPageResponse } from "@server/routers/loginPage/types"; import { redirect } from "next/navigation"; export const dynamic = "force-dynamic"; diff --git a/src/app/auth/resource/[resourceGuid]/page.tsx b/src/app/auth/resource/[resourceGuid]/page.tsx index d37bc8ca..c7aec861 100644 --- a/src/app/auth/resource/[resourceGuid]/page.tsx +++ b/src/app/auth/resource/[resourceGuid]/page.tsx @@ -15,12 +15,12 @@ import AccessToken from "@app/components/AccessToken"; import { pullEnv } from "@app/lib/pullEnv"; import { LoginFormIDP } from "@app/components/LoginForm"; import { ListIdpsResponse } from "@server/routers/idp"; -import { ListOrgIdpsResponse } from "#private/routers/orgIdp"; +import { ListOrgIdpsResponse } from "@server/routers/orgIdp/types"; import AutoLoginHandler from "@app/components/AutoLoginHandler"; import { build } from "@server/build"; import { headers } from "next/headers"; -import { GetLoginPageResponse } from "#private/routers/loginPage"; -import { GetOrgTierResponse } from "#private/routers/billing"; +import { GetLoginPageResponse } from "@server/routers/loginPage/types"; +import { GetOrgTierResponse } from "@server/routers/billing/types"; import { TierId } from "@server/lib/billing/tiers"; export const dynamic = "force-dynamic"; diff --git a/src/components/DomainPicker.tsx b/src/components/DomainPicker.tsx index 20c9960c..78273ddf 100644 --- a/src/components/DomainPicker.tsx +++ b/src/components/DomainPicker.tsx @@ -32,7 +32,7 @@ import { createApiClient, formatAxiosError } from "@/lib/api"; import { useEnvContext } from "@/hooks/useEnvContext"; import { toast } from "@/hooks/useToast"; import { ListDomainsResponse } from "@server/routers/domain/listDomains"; -import { CheckDomainAvailabilityResponse } from "#private/routers/domain/checkDomainNamespaceAvailability"; +import { CheckDomainAvailabilityResponse } from "@server/routers/domain/types"; import { AxiosResponse } from "axios"; import { cn } from "@/lib/cn"; import { useTranslations } from "next-intl"; diff --git a/src/components/private/AuthPageSettings.tsx b/src/components/private/AuthPageSettings.tsx index 46c5ede0..8da85468 100644 --- a/src/components/private/AuthPageSettings.tsx +++ b/src/components/private/AuthPageSettings.tsx @@ -30,7 +30,7 @@ import { SettingsSectionForm } from "@app/components/Settings"; import { useTranslations } from "next-intl"; -import { GetLoginPageResponse } from "#private/routers/loginPage"; +import { GetLoginPageResponse } from "@server/routers/loginPage/types"; import { ListDomainsResponse } from "@server/routers/domain"; import { DomainRow } from "@app/components/DomainsTable"; import { toUnicode } from "punycode"; diff --git a/src/components/private/ValidateSessionTransferToken.tsx b/src/components/private/ValidateSessionTransferToken.tsx index 99ba42f1..fcb6a026 100644 --- a/src/components/private/ValidateSessionTransferToken.tsx +++ b/src/components/private/ValidateSessionTransferToken.tsx @@ -8,7 +8,7 @@ import { useEffect, useState } from "react"; import { Alert, AlertDescription } from "@/components/ui/alert"; import { AlertCircle } from "lucide-react"; import { useTranslations } from "next-intl"; -import { TransferSessionResponse } from "#private/routers/auth/transferSession"; +import { TransferSessionResponse } from "@server/routers/auth/types"; type ValidateSessionTransferTokenParams = { token: string; diff --git a/src/contexts/remoteExitNodeContext.ts b/src/contexts/remoteExitNodeContext.ts index f5834e82..8f556480 100644 --- a/src/contexts/remoteExitNodeContext.ts +++ b/src/contexts/remoteExitNodeContext.ts @@ -1,4 +1,4 @@ -import { GetRemoteExitNodeResponse } from "#private/routers/remoteExitNode"; +import { GetRemoteExitNodeResponse } from "@server/routers/remoteExitNode/types"; import { createContext } from "react"; type RemoteExitNodeContextType = { diff --git a/src/contexts/subscriptionStatusContext.ts b/src/contexts/subscriptionStatusContext.ts index 267c58af..33f05479 100644 --- a/src/contexts/subscriptionStatusContext.ts +++ b/src/contexts/subscriptionStatusContext.ts @@ -1,4 +1,4 @@ -import { GetOrgSubscriptionResponse } from "#private/routers/billing"; +import { GetOrgSubscriptionResponse } from "@server/routers/billing/types"; import { createContext } from "react"; type SubscriptionStatusContextType = { diff --git a/src/hooks/useCertificate.ts b/src/hooks/useCertificate.ts index b3c66080..bdb09e08 100644 --- a/src/hooks/useCertificate.ts +++ b/src/hooks/useCertificate.ts @@ -2,7 +2,7 @@ import { useState, useCallback, useEffect } from "react"; import { AxiosResponse } from "axios"; -import { GetCertificateResponse } from "#private/routers/certificates"; +import { GetCertificateResponse } from "@server/routers/certificates/types"; import { createApiClient } from "@app/lib/api"; import { useEnvContext } from "@app/hooks/useEnvContext"; diff --git a/src/providers/RemoteExitNodeProvider.tsx b/src/providers/RemoteExitNodeProvider.tsx index 72cfd107..a1bceaff 100644 --- a/src/providers/RemoteExitNodeProvider.tsx +++ b/src/providers/RemoteExitNodeProvider.tsx @@ -1,7 +1,7 @@ "use client"; import RemoteExitNodeContext from "@app/contexts/remoteExitNodeContext"; -import { GetRemoteExitNodeResponse } from "#private/routers/remoteExitNode"; +import { GetRemoteExitNodeResponse } from "@server/routers/remoteExitNode/types"; import { useState } from "react"; import { useTranslations } from "next-intl"; diff --git a/src/providers/SubscriptionStatusProvider.tsx b/src/providers/SubscriptionStatusProvider.tsx index 71a9401c..78c3b22a 100644 --- a/src/providers/SubscriptionStatusProvider.tsx +++ b/src/providers/SubscriptionStatusProvider.tsx @@ -2,7 +2,7 @@ import SubscriptionStatusContext from "@app/contexts/subscriptionStatusContext"; import { getTierPriceSet } from "@server/lib/billing/tiers"; -import { GetOrgSubscriptionResponse } from "#private/routers/billing"; +import { GetOrgSubscriptionResponse } from "@server/routers/billing/types"; import { useState } from "react"; interface ProviderProps {