@opendatalabs/connect 0.8.0 → 0.8.1-canary.1d2cf51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +74 -0
  2. package/package.json +32 -4
  3. package/dist/core/constants.d.ts +0 -33
  4. package/dist/core/constants.d.ts.map +0 -1
  5. package/dist/core/constants.js +0 -25
  6. package/dist/core/constants.js.map +0 -1
  7. package/dist/core/errors.d.ts +0 -47
  8. package/dist/core/errors.d.ts.map +0 -1
  9. package/dist/core/errors.js +0 -50
  10. package/dist/core/errors.js.map +0 -1
  11. package/dist/core/grants.d.ts +0 -19
  12. package/dist/core/grants.d.ts.map +0 -1
  13. package/dist/core/grants.js +0 -31
  14. package/dist/core/grants.js.map +0 -1
  15. package/dist/core/index.d.ts +0 -5
  16. package/dist/core/index.d.ts.map +0 -1
  17. package/dist/core/index.js +0 -4
  18. package/dist/core/index.js.map +0 -1
  19. package/dist/core/types.d.ts +0 -131
  20. package/dist/core/types.d.ts.map +0 -1
  21. package/dist/core/types.js +0 -2
  22. package/dist/core/types.js.map +0 -1
  23. package/dist/index.d.ts +0 -2
  24. package/dist/index.d.ts.map +0 -1
  25. package/dist/index.js +0 -2
  26. package/dist/index.js.map +0 -1
  27. package/dist/react/ConnectButton.d.ts +0 -27
  28. package/dist/react/ConnectButton.d.ts.map +0 -1
  29. package/dist/react/ConnectButton.js +0 -39
  30. package/dist/react/ConnectButton.js.map +0 -1
  31. package/dist/react/index.d.ts +0 -4
  32. package/dist/react/index.d.ts.map +0 -1
  33. package/dist/react/index.js +0 -4
  34. package/dist/react/index.js.map +0 -1
  35. package/dist/react/useVanaConnect.d.ts +0 -50
  36. package/dist/react/useVanaConnect.d.ts.map +0 -1
  37. package/dist/react/useVanaConnect.js +0 -114
  38. package/dist/react/useVanaConnect.js.map +0 -1
  39. package/dist/react/useVanaData.d.ts +0 -69
  40. package/dist/react/useVanaData.d.ts.map +0 -1
  41. package/dist/react/useVanaData.js +0 -131
  42. package/dist/react/useVanaData.js.map +0 -1
  43. package/dist/server/config.d.ts +0 -36
  44. package/dist/server/config.d.ts.map +0 -1
  45. package/dist/server/config.js +0 -44
  46. package/dist/server/config.js.map +0 -1
  47. package/dist/server/connect.d.ts +0 -43
  48. package/dist/server/connect.d.ts.map +0 -1
  49. package/dist/server/connect.js +0 -98
  50. package/dist/server/connect.js.map +0 -1
  51. package/dist/server/data-client.d.ts +0 -31
  52. package/dist/server/data-client.d.ts.map +0 -1
  53. package/dist/server/data-client.js +0 -92
  54. package/dist/server/data-client.js.map +0 -1
  55. package/dist/server/index.d.ts +0 -8
  56. package/dist/server/index.d.ts.map +0 -1
  57. package/dist/server/index.js +0 -8
  58. package/dist/server/index.js.map +0 -1
  59. package/dist/server/manifest-signer.d.ts +0 -25
  60. package/dist/server/manifest-signer.d.ts.map +0 -1
  61. package/dist/server/manifest-signer.js +0 -51
  62. package/dist/server/manifest-signer.js.map +0 -1
  63. package/dist/server/request-signer.d.ts +0 -31
  64. package/dist/server/request-signer.d.ts.map +0 -1
  65. package/dist/server/request-signer.js +0 -69
  66. package/dist/server/request-signer.js.map +0 -1
  67. package/dist/server/session-relay.d.ts +0 -39
  68. package/dist/server/session-relay.d.ts.map +0 -1
  69. package/dist/server/session-relay.js +0 -74
  70. package/dist/server/session-relay.js.map +0 -1
  71. package/dist/server/webhook.d.ts +0 -11
  72. package/dist/server/webhook.d.ts.map +0 -1
  73. package/dist/server/webhook.js +0 -18
  74. package/dist/server/webhook.js.map +0 -1
@@ -1,4 +0,0 @@
1
- export { useVanaConnect, type UseVanaConnectConfig, type UseVanaConnectResult, } from "./useVanaConnect.js";
2
- export { ConnectButton, type ConnectButtonProps } from "./ConnectButton.js";
3
- export { useVanaData, type UseVanaDataConfig, type UseVanaDataResult, } from "./useVanaData.js";
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC"}
@@ -1,4 +0,0 @@
1
- export { useVanaConnect, } from "./useVanaConnect.js";
2
- export { ConnectButton } from "./ConnectButton.js";
3
- export { useVanaData, } from "./useVanaData.js";
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,WAAW,GAGZ,MAAM,kBAAkB,CAAC"}
@@ -1,50 +0,0 @@
1
- import type { ConnectionStatus, GrantPayload } from "../core/types.js";
2
- /** Configuration for the {@link useVanaConnect} hook. */
3
- export interface UseVanaConnectConfig {
4
- /** Polling interval in milliseconds (default: 2000). */
5
- pollingInterval?: number;
6
- /** SDK environment (`"dev"` or `"prod"`). Defaults to `"prod"`. */
7
- environment?: "dev" | "prod";
8
- }
9
- /** Return value of the {@link useVanaConnect} hook. */
10
- export interface UseVanaConnectResult {
11
- /** Starts polling the Session Relay for the given session. */
12
- connect: (params: {
13
- sessionId: string;
14
- connectUrl?: string;
15
- }) => void;
16
- /** Current connection status. */
17
- status: ConnectionStatus;
18
- /** Grant payload after user approval, or `null`. */
19
- grant: GrantPayload | null;
20
- /** Error message, or `null`. */
21
- error: string | null;
22
- /** URL to account.vana.org where the user signs in and launches Data Connect, or `null`. */
23
- connectUrl: string | null;
24
- /** Resets all state back to idle and stops polling. */
25
- reset: () => void;
26
- }
27
- /**
28
- * React hook that polls the Session Relay and manages connection state.
29
- *
30
- * Call `connect()` with a session ID (from your server's `/api/connect` route)
31
- * to begin polling. The hook will update `status` through the lifecycle:
32
- * `idle` -> `connecting` -> `waiting` -> `approved` | `denied` | `expired` | `error`.
33
- *
34
- * @param config - Optional configuration for polling interval and environment.
35
- * @returns A {@link UseVanaConnectResult} with state and actions.
36
- *
37
- * @example
38
- * ```tsx
39
- * const { connect, status, grant, connectUrl } = useVanaConnect();
40
- *
41
- * useEffect(() => {
42
- * connect({ sessionId: "sess-123" });
43
- * }, []);
44
- *
45
- * if (status === "waiting") return <a href={connectUrl!}>Open Vana</a>;
46
- * if (status === "approved") return <p>Connected! Grant: {grant!.grantId}</p>;
47
- * ```
48
- */
49
- export declare function useVanaConnect(config?: UseVanaConnectConfig): UseVanaConnectResult;
50
- //# sourceMappingURL=useVanaConnect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useVanaConnect.d.ts","sourceRoot":"","sources":["../../src/react/useVanaConnect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EAEb,MAAM,kBAAkB,CAAC;AAE1B,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC9B;AAED,uDAAuD;AACvD,MAAM,WAAW,oBAAoB;IACnC,8DAA8D;IAC9D,OAAO,EAAE,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACtE,iCAAiC;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,oDAAoD;IACpD,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,gCAAgC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,uDAAuD;IACvD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,oBAAoB,GAC5B,oBAAoB,CA0GtB"}
@@ -1,114 +0,0 @@
1
- import { useState, useCallback, useRef, useEffect } from "react";
2
- import { getEnvConfig } from "../core/constants.js";
3
- /**
4
- * React hook that polls the Session Relay and manages connection state.
5
- *
6
- * Call `connect()` with a session ID (from your server's `/api/connect` route)
7
- * to begin polling. The hook will update `status` through the lifecycle:
8
- * `idle` -> `connecting` -> `waiting` -> `approved` | `denied` | `expired` | `error`.
9
- *
10
- * @param config - Optional configuration for polling interval and environment.
11
- * @returns A {@link UseVanaConnectResult} with state and actions.
12
- *
13
- * @example
14
- * ```tsx
15
- * const { connect, status, grant, connectUrl } = useVanaConnect();
16
- *
17
- * useEffect(() => {
18
- * connect({ sessionId: "sess-123" });
19
- * }, []);
20
- *
21
- * if (status === "waiting") return <a href={connectUrl!}>Open Vana</a>;
22
- * if (status === "approved") return <p>Connected! Grant: {grant!.grantId}</p>;
23
- * ```
24
- */
25
- export function useVanaConnect(config) {
26
- const envConfig = getEnvConfig(config?.environment);
27
- const baseUrl = envConfig.sessionRelayUrl;
28
- const accountUrl = envConfig.accountUrl;
29
- const interval = config?.pollingInterval ?? 2000;
30
- const [status, setStatus] = useState("idle");
31
- const [grant, setGrant] = useState(null);
32
- const [error, setError] = useState(null);
33
- const [connectUrl, setConnectUrl] = useState(null);
34
- const timerRef = useRef(null);
35
- const stopPolling = useCallback(() => {
36
- if (timerRef.current !== null) {
37
- clearInterval(timerRef.current);
38
- timerRef.current = null;
39
- }
40
- }, []);
41
- const reset = useCallback(() => {
42
- stopPolling();
43
- setStatus("idle");
44
- setGrant(null);
45
- setError(null);
46
- setConnectUrl(null);
47
- }, [stopPolling]);
48
- const connect = useCallback((params) => {
49
- stopPolling();
50
- setStatus("connecting");
51
- setGrant(null);
52
- setError(null);
53
- setConnectUrl(params.connectUrl ??
54
- `${accountUrl}/connect?sessionId=${params.sessionId}`);
55
- const pollUrl = `${baseUrl}/v1/session/${params.sessionId}/poll`;
56
- const poll = async () => {
57
- try {
58
- const res = await fetch(pollUrl);
59
- if (!res.ok) {
60
- // Try to extract structured error from response body
61
- const body = await res.json().catch(() => null);
62
- const errorCode = body && typeof body === "object"
63
- ? body.error
64
- ?.errorCode
65
- : undefined;
66
- if (res.status === 410 || errorCode === "SESSION_EXPIRED") {
67
- setStatus("expired");
68
- setError("Session expired");
69
- }
70
- else {
71
- setStatus("error");
72
- setError(`Poll failed: ${res.status}`);
73
- }
74
- stopPolling();
75
- return;
76
- }
77
- const result = (await res.json());
78
- switch (result.status) {
79
- case "pending":
80
- case "claimed":
81
- setStatus("waiting");
82
- break;
83
- case "approved":
84
- setStatus("approved");
85
- setGrant(result.grant ?? null);
86
- stopPolling();
87
- break;
88
- case "denied":
89
- setStatus("denied");
90
- setError(result.reason ?? "User denied the request");
91
- stopPolling();
92
- break;
93
- case "expired":
94
- setStatus("expired");
95
- setError("Session expired");
96
- stopPolling();
97
- break;
98
- }
99
- }
100
- catch (err) {
101
- setStatus("error");
102
- setError(err instanceof Error ? err.message : "Unknown polling error");
103
- stopPolling();
104
- }
105
- };
106
- // First poll immediately, then at interval
107
- void poll();
108
- timerRef.current = setInterval(() => void poll(), interval);
109
- }, [baseUrl, accountUrl, interval, stopPolling]);
110
- // Cleanup on unmount
111
- useEffect(() => stopPolling, [stopPolling]);
112
- return { connect, status, grant, error, connectUrl, reset };
113
- }
114
- //# sourceMappingURL=useVanaConnect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useVanaConnect.js","sourceRoot":"","sources":["../../src/react/useVanaConnect.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- import type { GrantPayload, ConnectionStatus } from "../core/types.js";
2
- /**
3
- * Configuration for the {@link useVanaData} hook.
4
- */
5
- export interface UseVanaDataConfig {
6
- /** URL of the connect API route (default: `"/api/connect"`). */
7
- connectUrl?: string;
8
- /** URL of the data API route (default: `"/api/data"`). */
9
- dataUrl?: string;
10
- /** Polling interval in ms passed to {@link useVanaConnect} (default: 2000). */
11
- pollingInterval?: number;
12
- /** SDK environment passed through to {@link useVanaConnect}. */
13
- environment?: "dev" | "prod";
14
- /** When true, automatically fetches data after grant approval (default: `true`). */
15
- autoFetch?: boolean;
16
- }
17
- /**
18
- * Return value of the {@link useVanaData} hook.
19
- */
20
- export interface UseVanaDataResult {
21
- /** Current connection status. */
22
- status: ConnectionStatus;
23
- /** Grant payload after user approval, or `null`. */
24
- grant: GrantPayload | null;
25
- /** Fetched data after calling the data route, or `null`. */
26
- data: unknown;
27
- /** Error message, or `null`. */
28
- error: string | null;
29
- /** URL to account.vana.org where the user signs in and launches Data Connect, or `null`. */
30
- connectUrl: string | null;
31
- /** Opens the connect URL in a new tab. Use this instead of rendering the URL directly to avoid navigating away from your app. */
32
- openConnect: () => void;
33
- /** Starts the connect flow by calling the connect API route. */
34
- initConnect: () => Promise<void>;
35
- /** Manually fetches data using the current grant. */
36
- fetchData: () => Promise<void>;
37
- /** Resets all state back to idle. */
38
- reset: () => void;
39
- /** `true` while any async operation is in progress. */
40
- isLoading: boolean;
41
- /** `true` when status is `"approved"`. */
42
- isConnected: boolean;
43
- }
44
- /**
45
- * Full-flow hook that orchestrates the entire Vana Connect lifecycle:
46
- * session init, polling, and data fetching.
47
- *
48
- * Composes {@link useVanaConnect} internally and adds automatic
49
- * calls to your app's `/api/connect` and `/api/data` routes.
50
- *
51
- * @param config - Optional configuration.
52
- * @returns A {@link UseVanaDataResult} with state and actions.
53
- *
54
- * @example
55
- * ```tsx
56
- * import { useVanaData } from "@opendatalabs/connect/react";
57
- *
58
- * function MyComponent() {
59
- * const { status, data, deepLinkUrl, initConnect, isLoading } = useVanaData();
60
- *
61
- * if (status === "idle") return <button onClick={initConnect}>Connect</button>;
62
- * if (status === "waiting") return <a href={deepLinkUrl!}>Open Vana</a>;
63
- * if (data) return <pre>{JSON.stringify(data, null, 2)}</pre>;
64
- * return <p>{isLoading ? "Loading..." : status}</p>;
65
- * }
66
- * ```
67
- */
68
- export declare function useVanaData(config?: UseVanaDataConfig): UseVanaDataResult;
69
- //# sourceMappingURL=useVanaData.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useVanaData.d.ts","sourceRoot":"","sources":["../../src/react/useVanaData.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC7B,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,MAAM,EAAE,gBAAgB,CAAC;IACzB,oDAAoD;IACpD,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,4DAA4D;IAC5D,IAAI,EAAE,OAAO,CAAC;IACd,gCAAgC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,4FAA4F;IAC5F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iIAAiI;IACjI,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,gEAAgE;IAChE,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,qDAAqD;IACrD,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,qCAAqC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,uDAAuD;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,iBAAiB,GAAG,iBAAiB,CA4HzE"}
@@ -1,131 +0,0 @@
1
- import { useState, useCallback, useRef, useEffect } from "react";
2
- import { useVanaConnect } from "./useVanaConnect.js";
3
- /**
4
- * Full-flow hook that orchestrates the entire Vana Connect lifecycle:
5
- * session init, polling, and data fetching.
6
- *
7
- * Composes {@link useVanaConnect} internally and adds automatic
8
- * calls to your app's `/api/connect` and `/api/data` routes.
9
- *
10
- * @param config - Optional configuration.
11
- * @returns A {@link UseVanaDataResult} with state and actions.
12
- *
13
- * @example
14
- * ```tsx
15
- * import { useVanaData } from "@opendatalabs/connect/react";
16
- *
17
- * function MyComponent() {
18
- * const { status, data, deepLinkUrl, initConnect, isLoading } = useVanaData();
19
- *
20
- * if (status === "idle") return <button onClick={initConnect}>Connect</button>;
21
- * if (status === "waiting") return <a href={deepLinkUrl!}>Open Vana</a>;
22
- * if (data) return <pre>{JSON.stringify(data, null, 2)}</pre>;
23
- * return <p>{isLoading ? "Loading..." : status}</p>;
24
- * }
25
- * ```
26
- */
27
- export function useVanaData(config) {
28
- const connectApiUrl = config?.connectUrl ?? "/api/connect";
29
- const dataUrl = config?.dataUrl ?? "/api/data";
30
- const autoFetch = config?.autoFetch ?? true;
31
- const { connect, status: pollStatus, grant: pollGrant, error: pollError, connectUrl, reset: resetPoll, } = useVanaConnect({
32
- pollingInterval: config?.pollingInterval,
33
- environment: config?.environment,
34
- });
35
- const [data, setData] = useState(null);
36
- const [fetchError, setFetchError] = useState(null);
37
- const [fetching, setFetching] = useState(false);
38
- const [initLoading, setInitLoading] = useState(false);
39
- const autoFetchedRef = useRef(false);
40
- const fetchData = useCallback(async () => {
41
- if (!pollGrant)
42
- return;
43
- setFetching(true);
44
- setFetchError(null);
45
- try {
46
- const res = await fetch(dataUrl, {
47
- method: "POST",
48
- headers: { "Content-Type": "application/json" },
49
- body: JSON.stringify({ grant: pollGrant }),
50
- });
51
- const json = await res.json();
52
- if (!res.ok) {
53
- setFetchError(json.error
54
- ? String(json.error)
55
- : `Data fetch failed: ${res.status}`);
56
- return;
57
- }
58
- setData(json);
59
- }
60
- catch (err) {
61
- setFetchError(err instanceof Error ? err.message : "Unknown data fetch error");
62
- }
63
- finally {
64
- setFetching(false);
65
- }
66
- }, [pollGrant, dataUrl]);
67
- // Auto-fetch on approval
68
- useEffect(() => {
69
- if (pollStatus === "approved" &&
70
- pollGrant &&
71
- autoFetch &&
72
- !autoFetchedRef.current) {
73
- autoFetchedRef.current = true;
74
- void fetchData();
75
- }
76
- }, [pollStatus, pollGrant, autoFetch, fetchData]);
77
- const initConnect = useCallback(async () => {
78
- setData(null);
79
- setFetchError(null);
80
- autoFetchedRef.current = false;
81
- setInitLoading(true);
82
- try {
83
- const res = await fetch(connectApiUrl, { method: "POST" });
84
- const json = (await res.json());
85
- if (!res.ok) {
86
- setFetchError(json.error ? String(json.error) : `Connect failed: ${res.status}`);
87
- return;
88
- }
89
- connect({
90
- sessionId: json.sessionId,
91
- connectUrl: json.connectUrl || undefined,
92
- });
93
- }
94
- catch (err) {
95
- setFetchError(err instanceof Error ? err.message : "Unknown connect error");
96
- }
97
- finally {
98
- setInitLoading(false);
99
- }
100
- }, [connectApiUrl, connect]);
101
- const reset = useCallback(() => {
102
- resetPoll();
103
- setData(null);
104
- setFetchError(null);
105
- setFetching(false);
106
- setInitLoading(false);
107
- autoFetchedRef.current = false;
108
- }, [resetPoll]);
109
- const openConnect = useCallback(() => {
110
- if (connectUrl) {
111
- window.open(connectUrl, "_blank", "noopener,noreferrer");
112
- }
113
- }, [connectUrl]);
114
- const error = pollError ?? fetchError;
115
- const isLoading = initLoading || fetching || pollStatus === "connecting";
116
- const isConnected = pollStatus === "approved";
117
- return {
118
- status: pollStatus,
119
- grant: pollGrant,
120
- data,
121
- error,
122
- connectUrl,
123
- openConnect,
124
- initConnect,
125
- fetchData,
126
- reset,
127
- isLoading,
128
- isConnected,
129
- };
130
- }
131
- //# sourceMappingURL=useVanaData.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useVanaData.js","sourceRoot":"","sources":["../../src/react/useVanaData.ts"],"names":[],"mappings":"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"}
@@ -1,36 +0,0 @@
1
- import type { VanaEnvironment } from "../core/constants.js";
2
- export interface VanaConfig {
3
- privateKey: `0x${string}`;
4
- scopes: string[];
5
- appUrl: string;
6
- environment?: VanaEnvironment;
7
- }
8
- /**
9
- * Creates a validated SDK configuration.
10
- *
11
- * All values must be passed explicitly — the SDK does not read
12
- * environment variables. The calling application is responsible
13
- * for sourcing config values (e.g. from `process.env`).
14
- *
15
- * @param config - Required configuration fields.
16
- * @returns A validated {@link VanaConfig} object.
17
- * @throws {@link ConnectError} with code `CONFIG_INVALID` if any required field is missing or invalid.
18
- *
19
- * @example
20
- * ```typescript
21
- * import { createVanaConfig } from "@opendatalabs/connect/server";
22
- *
23
- * const config = createVanaConfig({
24
- * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
25
- * scopes: ["chatgpt.conversations"],
26
- * appUrl: process.env.APP_URL!,
27
- * });
28
- * ```
29
- */
30
- export declare function createVanaConfig(config: {
31
- privateKey: `0x${string}`;
32
- scopes: string[];
33
- appUrl: string;
34
- environment?: VanaEnvironment;
35
- }): VanaConfig;
36
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B,GAAG,UAAU,CAmCb"}
@@ -1,44 +0,0 @@
1
- import { ConnectError, ConnectErrorCode } from "../core/errors.js";
2
- /**
3
- * Creates a validated SDK configuration.
4
- *
5
- * All values must be passed explicitly — the SDK does not read
6
- * environment variables. The calling application is responsible
7
- * for sourcing config values (e.g. from `process.env`).
8
- *
9
- * @param config - Required configuration fields.
10
- * @returns A validated {@link VanaConfig} object.
11
- * @throws {@link ConnectError} with code `CONFIG_INVALID` if any required field is missing or invalid.
12
- *
13
- * @example
14
- * ```typescript
15
- * import { createVanaConfig } from "@opendatalabs/connect/server";
16
- *
17
- * const config = createVanaConfig({
18
- * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
19
- * scopes: ["chatgpt.conversations"],
20
- * appUrl: process.env.APP_URL!,
21
- * });
22
- * ```
23
- */
24
- export function createVanaConfig(config) {
25
- if (!config.privateKey) {
26
- throw new ConnectError("Missing privateKey. Pass a 0x-prefixed private key.", ConnectErrorCode.CONFIG_INVALID);
27
- }
28
- if (!config.privateKey.startsWith("0x")) {
29
- throw new ConnectError("privateKey must start with 0x.", ConnectErrorCode.CONFIG_INVALID);
30
- }
31
- if (!Array.isArray(config.scopes) || config.scopes.length === 0) {
32
- throw new ConnectError("Missing scopes. Pass a non-empty array of scope strings.", ConnectErrorCode.CONFIG_INVALID);
33
- }
34
- if (!config.appUrl) {
35
- throw new ConnectError("Missing appUrl. Pass the public URL of your deployed app.", ConnectErrorCode.CONFIG_INVALID);
36
- }
37
- return {
38
- privateKey: config.privateKey,
39
- scopes: config.scopes,
40
- appUrl: config.appUrl,
41
- environment: config.environment,
42
- };
43
- }
44
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAUnE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAKhC;IACC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CACpB,qDAAqD,EACrD,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,YAAY,CACpB,gCAAgC,EAChC,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,YAAY,CACpB,0DAA0D,EAC1D,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CACpB,2DAA2D,EAC3D,gBAAgB,CAAC,cAAc,CAChC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC"}
@@ -1,43 +0,0 @@
1
- import type { ConnectConfig, GetDataConfig, SessionInitResult } from "../core/types.js";
2
- /**
3
- * Creates a session on the Session Relay and returns the session ID, connect URL, and deep link URL.
4
- *
5
- * This is the entry point for the Vana Connect flow. The returned `connectUrl`
6
- * should be presented to the user to sign in on account.vana.org and launch Data Connect.
7
- *
8
- * @param config - Connection configuration including private key and scopes.
9
- * @returns Session ID, connect URL, and expiration timestamp.
10
- * @throws {@link ConnectError} with code `SESSION_INIT_FAILED` if the relay rejects the request.
11
- *
12
- * @example
13
- * ```typescript
14
- * const session = await connect({
15
- * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
16
- * scopes: ["chatgpt.conversations"],
17
- * });
18
- * // session.sessionId, session.connectUrl, session.expiresAt
19
- * ```
20
- */
21
- export declare function connect(config: ConnectConfig): Promise<SessionInitResult>;
22
- /**
23
- * Fetches user data from their Personal Server using a signed grant.
24
- *
25
- * Resolves the server URL via the Data Portability Gateway, then fetches
26
- * data for each scope in the grant concurrently.
27
- *
28
- * @param config - Data fetch configuration including private key and grant.
29
- * @returns A `Record` keyed by scope name with the fetched data as values.
30
- * @throws {@link ConnectError} with code `SERVER_NOT_FOUND` if no server is registered.
31
- * @throws {@link ConnectError} with code `DATA_FETCH_FAILED` if a scope fetch fails.
32
- *
33
- * @example
34
- * ```typescript
35
- * const data = await getData({
36
- * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
37
- * grant,
38
- * });
39
- * const conversations = data["chatgpt.conversations"];
40
- * ```
41
- */
42
- export declare function getData(config: GetDataConfig): Promise<Record<string, unknown>>;
43
- //# sourceMappingURL=connect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/server/connect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,EAClB,MAAM,kBAAkB,CAAC;AAK1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,iBAAiB,CAAC,CAiC5B;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA8BlC"}
@@ -1,98 +0,0 @@
1
- import { getEnvConfig } from "../core/constants.js";
2
- import { createRequestSigner } from "./request-signer.js";
3
- import { createSessionRelay } from "./session-relay.js";
4
- import { createDataClient } from "./data-client.js";
5
- /**
6
- * Creates a session on the Session Relay and returns the session ID, connect URL, and deep link URL.
7
- *
8
- * This is the entry point for the Vana Connect flow. The returned `connectUrl`
9
- * should be presented to the user to sign in on account.vana.org and launch Data Connect.
10
- *
11
- * @param config - Connection configuration including private key and scopes.
12
- * @returns Session ID, connect URL, and expiration timestamp.
13
- * @throws {@link ConnectError} with code `SESSION_INIT_FAILED` if the relay rejects the request.
14
- *
15
- * @example
16
- * ```typescript
17
- * const session = await connect({
18
- * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
19
- * scopes: ["chatgpt.conversations"],
20
- * });
21
- * // session.sessionId, session.connectUrl, session.expiresAt
22
- * ```
23
- */
24
- export async function connect(config) {
25
- const { sessionRelayUrl, accountUrl } = getEnvConfig(config.environment);
26
- const signer = createRequestSigner({ privateKey: config.privateKey });
27
- const granteeAddress = signer.address;
28
- const relay = createSessionRelay({
29
- privateKey: config.privateKey,
30
- granteeAddress,
31
- sessionRelayUrl,
32
- });
33
- const relayResult = await relay.initSession({
34
- scopes: config.scopes,
35
- webhookUrl: config.webhookUrl,
36
- appUserId: config.appUserId,
37
- });
38
- // Build the account.vana.org connect URL from the relay response
39
- const connectUrl = new URL("/connect", accountUrl);
40
- connectUrl.searchParams.set("sessionId", relayResult.sessionId);
41
- try {
42
- const deepLinkParams = new URL(relayResult.deepLinkUrl);
43
- const secret = deepLinkParams.searchParams.get("secret");
44
- if (secret)
45
- connectUrl.searchParams.set("secret", secret);
46
- }
47
- catch {
48
- // deepLinkUrl may not be a valid URL; proceed without secret
49
- }
50
- return {
51
- sessionId: relayResult.sessionId,
52
- connectUrl: connectUrl.toString(),
53
- expiresAt: relayResult.expiresAt,
54
- };
55
- }
56
- /**
57
- * Fetches user data from their Personal Server using a signed grant.
58
- *
59
- * Resolves the server URL via the Data Portability Gateway, then fetches
60
- * data for each scope in the grant concurrently.
61
- *
62
- * @param config - Data fetch configuration including private key and grant.
63
- * @returns A `Record` keyed by scope name with the fetched data as values.
64
- * @throws {@link ConnectError} with code `SERVER_NOT_FOUND` if no server is registered.
65
- * @throws {@link ConnectError} with code `DATA_FETCH_FAILED` if a scope fetch fails.
66
- *
67
- * @example
68
- * ```typescript
69
- * const data = await getData({
70
- * privateKey: process.env.VANA_PRIVATE_KEY as `0x${string}`,
71
- * grant,
72
- * });
73
- * const conversations = data["chatgpt.conversations"];
74
- * ```
75
- */
76
- export async function getData(config) {
77
- const { gatewayUrl } = getEnvConfig(config.environment);
78
- const { grant } = config;
79
- const dataClient = createDataClient({
80
- privateKey: config.privateKey,
81
- gatewayUrl,
82
- });
83
- const serverUrl = await dataClient.resolveServerUrl(grant.serverAddress ?? grant.userAddress);
84
- const results = await Promise.all(grant.scopes.map(async (scope) => {
85
- const result = await dataClient.fetchData({
86
- serverUrl,
87
- scope,
88
- grantId: grant.grantId,
89
- });
90
- return [scope, result];
91
- }));
92
- const data = {};
93
- for (const [scope, result] of results) {
94
- data[scope] = result;
95
- }
96
- return data;
97
- }
98
- //# sourceMappingURL=connect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/server/connect.ts"],"names":[],"mappings":"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"}