Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions examples/nextjs-starter/.env.local.example
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
VANA_PRIVATE_KEY=0x... # Builder key, must be registered on-chain
APP_URL=http://localhost:3001 # Public URL of your deployed app
VANA_SCOPES=chatgpt.conversations # Comma-separated scopes
VANA_ENV=dev
NEXT_PUBLIC_VANA_ENV=dev
1 change: 0 additions & 1 deletion examples/nextjs-starter/src/app/api/data/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ export async function POST(request: Request) {
const data = await getData({
privateKey: config.privateKey,
grant,
environment: config.environment,
});

return NextResponse.json({ data });
Expand Down
4 changes: 1 addition & 3 deletions examples/nextjs-starter/src/components/ConnectFlow.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@ export default function ConnectFlow() {
initConnect,
fetchData,
isLoading,
} = useVanaData({
environment: (process.env.NEXT_PUBLIC_VANA_ENV as "dev" | "prod") ?? "dev",
});
} = useVanaData();

const initRef = useRef(false);
useEffect(() => {
Expand Down
1 change: 0 additions & 1 deletion examples/nextjs-starter/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@ export const config = createVanaConfig({
process.env.VANA_APP_PRIVATE_KEY) as `0x${string}`,
scopes: SCOPES,
appUrl: process.env.APP_URL ?? "",
environment: (process.env.VANA_ENV as "dev" | "prod") ?? "dev",
});
30 changes: 8 additions & 22 deletions src/core/constants.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,15 @@
/** SDK environment selector. */
export type VanaEnvironment = "dev" | "prod";

/** URL configuration for each SDK environment. */
/** URL configuration for the SDK. */
export const ENV_CONFIG = {
dev: {
sessionRelayUrl: "https://dev.session-relay.vana.org",
gatewayUrl: "https://dev.data-gateway.vana.org",
accountUrl: "https://account-dev.vana.org",
},
prod: {
sessionRelayUrl: "https://session-relay.vana.org",
gatewayUrl: "https://data-gateway.vana.org",
accountUrl: "https://account.vana.org",
},
sessionRelayUrl: "https://session-relay.vana.org",
gatewayUrl: "https://data-gateway.vana.org",
accountUrl: "https://account.vana.org",
} as const;

/** Default environment used when none is specified. */
export const DEFAULT_ENVIRONMENT: VanaEnvironment = "prod";

/**
* Returns the URL configuration for the given environment.
* Returns the SDK URL configuration.
*
* @param environment - `"dev"` or `"prod"`. Defaults to {@link DEFAULT_ENVIRONMENT}.
* @returns An object with `sessionRelayUrl` and `gatewayUrl`.
* @returns An object with `sessionRelayUrl`, `gatewayUrl`, and `accountUrl`.
*/
export function getEnvConfig(environment?: VanaEnvironment) {
return ENV_CONFIG[environment ?? DEFAULT_ENVIRONMENT];
export function getEnvConfig() {
return ENV_CONFIG;
}
7 changes: 1 addition & 6 deletions src/core/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,6 @@
export { ConnectError, ConnectErrorCode } from "./errors.js";
export { isValidGrant } from "./grants.js";
export {
getEnvConfig,
ENV_CONFIG,
DEFAULT_ENVIRONMENT,
type VanaEnvironment,
} from "./constants.js";
export { getEnvConfig, ENV_CONFIG } from "./constants.js";
export type {
ConnectionStatus,
SessionInitParams,
Expand Down
4 changes: 0 additions & 4 deletions src/core/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,6 @@ export interface ConnectConfig {
webhookUrl?: string;
/** Your app's user ID for correlation. */
appUserId?: string;
/** SDK environment (`"dev"` or `"prod"`). Defaults to `"prod"`. */
environment?: "dev" | "prod";
}

/** Configuration for the high-level {@link getData} function. */
Expand All @@ -114,8 +112,6 @@ export interface GetDataConfig {
privateKey: `0x${string}`;
/** Grant from the approval step. */
grant: GrantPayload;
/** SDK environment (`"dev"` or `"prod"`). Defaults to `"prod"`. */
environment?: "dev" | "prod";
}

/** Configuration for {@link signVanaManifest}. */
Expand Down
4 changes: 1 addition & 3 deletions src/react/useVanaConnect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ import type {
export interface UseVanaConnectConfig {
/** Polling interval in milliseconds (default: 2000). */
pollingInterval?: number;
/** SDK environment (`"dev"` or `"prod"`). Defaults to `"prod"`. */
environment?: "dev" | "prod";
}

/** Return value of the {@link useVanaConnect} hook. */
Expand Down Expand Up @@ -55,7 +53,7 @@ export interface UseVanaConnectResult {
export function useVanaConnect(
config?: UseVanaConnectConfig,
): UseVanaConnectResult {
const envConfig = getEnvConfig(config?.environment);
const envConfig = getEnvConfig();
const baseUrl = envConfig.sessionRelayUrl;
const accountUrl = envConfig.accountUrl;
const interval = config?.pollingInterval ?? 2000;
Expand Down
3 changes: 0 additions & 3 deletions src/react/useVanaData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ export interface UseVanaDataConfig {
dataUrl?: string;
/** Polling interval in ms passed to {@link useVanaConnect} (default: 2000). */
pollingInterval?: number;
/** SDK environment passed through to {@link useVanaConnect}. */
environment?: "dev" | "prod";
/** When true, automatically fetches data after grant approval (default: `true`). */
autoFetch?: boolean;
}
Expand Down Expand Up @@ -96,7 +94,6 @@ export function useVanaData(config?: UseVanaDataConfig): UseVanaDataResult {
reset: resetPoll,
} = useVanaConnect({
pollingInterval: config?.pollingInterval,
environment: config?.environment,
});

const [data, setData] = useState<unknown>(null);
Expand Down
4 changes: 0 additions & 4 deletions src/server/config.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import type { VanaEnvironment } from "../core/constants.js";
import { ConnectError, ConnectErrorCode } from "../core/errors.js";

export interface VanaConfig {
privateKey: `0x${string}`;
scopes: string[];
appUrl: string;
environment?: VanaEnvironment;
}

/**
Expand Down Expand Up @@ -34,7 +32,6 @@ export function createVanaConfig(config: {
privateKey: `0x${string}`;
scopes: string[];
appUrl: string;
environment?: VanaEnvironment;
}): VanaConfig {
if (!config.privateKey) {
throw new ConnectError(
Expand Down Expand Up @@ -68,6 +65,5 @@ export function createVanaConfig(config: {
privateKey: config.privateKey,
scopes: config.scopes,
appUrl: config.appUrl,
environment: config.environment,
};
}
4 changes: 2 additions & 2 deletions src/server/connect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import { createDataClient } from "./data-client.js";
export async function connect(
config: ConnectConfig,
): Promise<SessionInitResult> {
const { sessionRelayUrl, accountUrl } = getEnvConfig(config.environment);
const { sessionRelayUrl, accountUrl } = getEnvConfig();
const signer = createRequestSigner({ privateKey: config.privateKey });
const granteeAddress = signer.address;

Expand Down Expand Up @@ -90,7 +90,7 @@ export async function connect(
export async function getData(
config: GetDataConfig,
): Promise<Record<string, unknown>> {
const { gatewayUrl } = getEnvConfig(config.environment);
const { gatewayUrl } = getEnvConfig();
const { grant } = config;

const dataClient = createDataClient({
Expand Down
24 changes: 4 additions & 20 deletions test/core/constants.test.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,12 @@
import { describe, it, expect } from "vitest";
import {
getEnvConfig,
ENV_CONFIG,
DEFAULT_ENVIRONMENT,
} from "../../src/core/constants.js";
import { getEnvConfig, ENV_CONFIG } from "../../src/core/constants.js";

describe("getEnvConfig", () => {
it("returns dev config for 'dev'", () => {
const config = getEnvConfig("dev");
expect(config).toBe(ENV_CONFIG.dev);
it("returns the SDK URL configuration", () => {
const config = getEnvConfig();
expect(config).toBe(ENV_CONFIG);
expect(config.sessionRelayUrl).toContain("session-relay");
expect(config.gatewayUrl).toContain("data-gateway");
expect(config.accountUrl).toBe("https://account-dev.vana.org");
});

it("returns prod config for 'prod'", () => {
const config = getEnvConfig("prod");
expect(config).toBe(ENV_CONFIG.prod);
expect(config.accountUrl).toBe("https://account.vana.org");
});

it("defaults to prod when no environment is specified", () => {
const config = getEnvConfig();
expect(config).toBe(ENV_CONFIG[DEFAULT_ENVIRONMENT]);
expect(config).toBe(ENV_CONFIG.prod);
});
});
6 changes: 0 additions & 6 deletions test/server/config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,6 @@ describe("createVanaConfig", () => {
expect(config.privateKey).toBe(VALID_KEY);
expect(config.scopes).toEqual(["instagram.dpv1", "twitter.dpv1"]);
expect(config.appUrl).toBe("https://myapp.com");
expect(config.environment).toBeUndefined();
});

it("includes optional environment field", () => {
const config = createVanaConfig({ ...VALID_CONFIG, environment: "dev" });
expect(config.environment).toBe("dev");
});

it("throws CONFIG_INVALID when privateKey is missing", () => {
Expand Down
30 changes: 0 additions & 30 deletions test/server/connect.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,22 +102,6 @@ describe("connect", () => {
expect(url.searchParams.get("secret")).toBe("abc");
});

it("returns connectUrl with dev accountUrl when environment is dev", async () => {
mockInitSession();

const result = await connect({
privateKey: TEST_PRIVATE_KEY,
scopes: ["instagram.dpv1"],
environment: "dev",
});

const { accountUrl } = getEnvConfig("dev");
const url = new URL(result.connectUrl);
expect(url.origin).toBe(accountUrl);
expect(url.searchParams.get("sessionId")).toBe("sess-123");
expect(url.searchParams.get("secret")).toBe("abc");
});

it("includes appUrl in connectUrl when provided", async () => {
mockInitSession();

Expand Down Expand Up @@ -177,20 +161,6 @@ describe("connect", () => {

expect(mockFetch).toHaveBeenCalledTimes(1);
});

it("uses environment config URL when environment is specified", async () => {
mockInitSession();

await connect({
privateKey: TEST_PRIVATE_KEY,
scopes: ["instagram.dpv1"],
environment: "dev",
});

const initUrl = mockFetch.mock.calls[0][0] as string;
const { sessionRelayUrl } = getEnvConfig("dev");
expect(initUrl).toBe(`${sessionRelayUrl}/v1/session/init`);
});
});

describe("getData", () => {
Expand Down