Quickstart
Start with the Node/server package entry. The first quickstart uses the released @csl/wrapper-sdk surface.
node-server.ts
typescript
NODE ENTRY
import { CslClient } from "@csl/wrapper-sdk";
const client = new CslClient({
baseUrl: process.env.CSL_BASE_URL ?? "http://127.0.0.1:3000",
getApiKey: () => process.env.CSL_WRAPPER_API_KEY ?? "",
decisionDelivery: "polling",
});
const job = await client.createJob({
job_type: "chat",
model_id: "gpt-4o-mini",
locale: "en-US",
consent: {
semantic_targeting: true,
session_persistence: false,
cross_session_persistence: false,
},
prompt: { text: "I want a travel deal for a weekend trip." },
slots_requested: 1,
});
const decision = job?.slot_ids[0] ? await client.getDecision(job.slot_ids[0]) : null;
console.log(decision);What happens to the prompt text-
The prompt field is sent to the CSL, wavebird's middleware layer, where the data firewall extracts only an abstract topic category and the language. These two signals are the only data that reaches the ad market. The raw prompt text stays within the CSL and is never forwarded to SSPs, DSPs, or advertisers. If you want to understand the full data flow, see How wavebird works and Data Firewall.
Copy the code first, then move to Integration flow, Configuration, and the CslClient reference for the deeper lifecycle and type details.
- Shows the released Node/server entry with
getApiKey()and explicit polling delivery. - Matches the README quickstart for
@csl/wrapper-sdk.
Read next
Ask about integration
Ask about integration
Start with Node direct for the recommended production-ready integration path.