
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
@opendatalabs/connect-js
Advanced tools
JavaScript SDK for launching Open Data Labs Connect and reading the selected data from the user's Personal Server.
The v2 flow uses the same trust split as Plaid Link or Stripe Connect:
npm install @opendatalabs/connect-js
// lib/odl.ts
import { createConnectController } from "@opendatalabs/connect-js/server";
export const odl = createConnectController({
apiBaseUrl: process.env.ODL_API_BASE_URL!,
apiKey: process.env.ODL_API_KEY!,
appId: process.env.ODL_APP_ID!,
defaultOrigin: process.env.APP_URL ?? "https://your-app.com",
source: "instagram",
scopes: ["read:profile", "read:posts"],
});
// app/api/connect/session/route.ts
import { odl } from "@/lib/odl";
export async function POST() {
return Response.json(
await odl.createConnectSession({
redirectUrl: `${process.env.APP_URL ?? "https://your-app.com"}/connect/return`,
})
);
}
// app/api/connect/status/route.ts
import { odl } from "@/lib/odl";
export async function GET(request: Request) {
const connectionId = new URL(request.url).searchParams.get("connectionId");
if (!connectionId) {
return Response.json({ error: "Missing connectionId" }, { status: 400 });
}
return Response.json(await odl.getStatus(connectionId));
}
// app/api/connect/data/route.ts
import { odl } from "@/lib/odl";
export async function GET(request: Request) {
const connectionId = new URL(request.url).searchParams.get("connectionId");
if (!connectionId) {
return Response.json({ error: "Missing connectionId" }, { status: 400 });
}
return Response.json(await odl.readAllWhenReady(connectionId));
}
import { useTwoTabConnect } from "@opendatalabs/connect-js/react";
export function ConnectButton() {
const connect = useTwoTabConnect({
openingUrl: process.env.NEXT_PUBLIC_VANA_CONNECT_OPENING_URL,
createSession: async () => {
const res = await fetch("/api/connect/session", { method: "POST" });
if (!res.ok) throw new Error("Failed to create Connect session");
return res.json();
},
getStatus: async (connectionId) => {
const res = await fetch(
`/api/connect/status?connectionId=${encodeURIComponent(connectionId)}`
);
if (!res.ok) throw new Error("Failed to fetch Connect status");
return res.json();
},
readResult: async (connectionId) => {
const res = await fetch(
`/api/connect/data?connectionId=${encodeURIComponent(connectionId)}`
);
if (!res.ok) throw new Error("Failed to read Connect data");
return res.json();
},
});
return (
<button disabled={connect.state.type !== "idle"} onClick={() => connect.start()} type="button">
{connect.state.type === "idle" ? "Connect data" : "Connecting..."}
</button>
);
}
useTwoTabConnect opens a Vana-hosted holding page synchronously inside the
click event, then redirects that tab to the Connect approval page after your
backend creates the session. This avoids popup blockers without showing users a
blank about:blank tab.
The default holding page is https://app.vana.org/connect/opening. For dev or
staging, set NEXT_PUBLIC_VANA_CONNECT_OPENING_URL to the matching Vana app,
for example https://app-dev.vana.org/connect/opening.
Use stable source IDs such as instagram or icloud_notes, not display names
such as "Instagram" or "iCloud Notes".
FAQs
JavaScript SDK for embedding Open Data Labs Connect flows
The npm package @opendatalabs/connect-js receives a total of 0 weekly downloads. As such, @opendatalabs/connect-js popularity was classified as not popular.
We found that @opendatalabs/connect-js demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.