diff --git a/apps/api-server/src/constants.ts b/apps/api-server/src/constants.ts new file mode 100644 index 0000000..c91f8a0 --- /dev/null +++ b/apps/api-server/src/constants.ts @@ -0,0 +1,4 @@ +/** + * Default port for the API server + */ +export const DEFAULT_PORT = 9861; diff --git a/apps/api-server/src/index.ts b/apps/api-server/src/index.ts index fce9a7f..d2ca2bd 100644 --- a/apps/api-server/src/index.ts +++ b/apps/api-server/src/index.ts @@ -1,9 +1,10 @@ import { RPCHandler } from "@orpc/server/fetch"; +import { DEFAULT_PORT } from "./constants.js"; import { router } from "./router.js"; const handler = new RPCHandler(router); -const port = import.meta.env.PORT ?? 3001; +const port = import.meta.env.PORT ?? DEFAULT_PORT; Bun.serve({ port, diff --git a/apps/publisher-dashboard/package.json b/apps/publisher-dashboard/package.json index 322a5e5..90172b9 100644 --- a/apps/publisher-dashboard/package.json +++ b/apps/publisher-dashboard/package.json @@ -12,6 +12,9 @@ "clean": "rm -rf .svelte-kit dist .eslintcache" }, "dependencies": { + "@orpc/client": "^1.13.2", + "@orpc/contract": "^1.13.2", + "@reviq/api-contract": "workspace:*", "@tanstack/svelte-query": "^6.0.14", "@tanstack/svelte-query-devtools": "^6.0.3", "bits-ui": "^2.15.4", diff --git a/apps/publisher-dashboard/src/lib/api/client.ts b/apps/publisher-dashboard/src/lib/api/client.ts new file mode 100644 index 0000000..1814244 --- /dev/null +++ b/apps/publisher-dashboard/src/lib/api/client.ts @@ -0,0 +1,14 @@ +import type { ContractRouterClient } from "@orpc/contract"; +import { createORPCClient } from "@orpc/client"; +import { RPCLink } from "@orpc/client/fetch"; +import { contract } from "@reviq/api-contract"; + +const link = new RPCLink({ + url: "/api/v1/rpc", +}); + +/** + * Type-safe oRPC client for the API + */ +export const api: ContractRouterClient = + createORPCClient(link); diff --git a/apps/publisher-dashboard/src/lib/api/index.ts b/apps/publisher-dashboard/src/lib/api/index.ts new file mode 100644 index 0000000..fdd960a --- /dev/null +++ b/apps/publisher-dashboard/src/lib/api/index.ts @@ -0,0 +1 @@ +export { api } from "./client.js"; diff --git a/apps/publisher-dashboard/vite.config.ts b/apps/publisher-dashboard/vite.config.ts index 9202773..2ba42c8 100644 --- a/apps/publisher-dashboard/vite.config.ts +++ b/apps/publisher-dashboard/vite.config.ts @@ -6,5 +6,11 @@ export default defineConfig({ plugins: [tailwindcss(), sveltekit()], server: { port: 6827, + proxy: { + "/api/v1/rpc": { + target: "http://localhost:9861", + changeOrigin: true, + }, + }, }, }); diff --git a/bun.lock b/bun.lock index 5104d59..08b80f8 100644 --- a/bun.lock +++ b/bun.lock @@ -50,6 +50,9 @@ "name": "@apps/publisher-dashboard", "version": "0.0.1", "dependencies": { + "@orpc/client": "^1.13.2", + "@orpc/contract": "^1.13.2", + "@reviq/api-contract": "workspace:*", "@tanstack/svelte-query": "^6.0.14", "@tanstack/svelte-query-devtools": "^6.0.3", "bits-ui": "^2.15.4", diff --git a/packages/api-contract/src/contract.ts b/packages/api-contract/src/contract.ts index b9c0a3f..ebaf79b 100644 --- a/packages/api-contract/src/contract.ts +++ b/packages/api-contract/src/contract.ts @@ -232,3 +232,5 @@ export const contract = oc.router({ }), }), }); + +export type APIContract = typeof contract; diff --git a/packages/api-contract/src/index.ts b/packages/api-contract/src/index.ts index 4d890a3..f336bb8 100644 --- a/packages/api-contract/src/index.ts +++ b/packages/api-contract/src/index.ts @@ -1,4 +1,5 @@ // Export the contract +export type { APIContract } from "./contract.js"; export { contract } from "./contract.js"; export * from "./schemas/admin.js"; export * from "./schemas/auth.js";