Skip to content

handleSyncRequest

handleSyncRequest<TEnv, TDurableObjectRpc, CFHostMetada>(__namedParameters): Promise<Response>

Defined in: packages/@livestore/sync-cf/src/cf-worker/worker.ts:166

Handles /sync endpoint.

TEnv extends Env = Env

TDurableObjectRpc extends undefined | DurableObjectBranded = undefined

CFHostMetada = unknown

ExecutionContext

Only there for type-level reasons

TEnv

{ durableObject?: { name?: ExtractDurableObjectKeys<TEnv>; }; headers?: HeadersInit; validatePayload?: (payload, context) => void | Promise<void>; } = {}

{ name?: ExtractDurableObjectKeys<TEnv>; }

ExtractDurableObjectKeys<TEnv>

Needs to match the binding name from the wrangler config

Default

'SYNC_BACKEND_DO'

HeadersInit

(payload, context) => void | Promise<void>

Request<CFHostMetada>

{ payload: undefined | JsonValue; storeId: string; transport: "http" | "ws"; }

undefined | JsonValue = ...

string = Schema.String

"http" | "ws" = ...

Promise<Response>

const validatePayload = (payload: Schema.JsonValue | undefined, context: { storeId: string }) => {
console.log(`Validating connection for store: ${context.storeId}`)
if (payload?.authToken !== 'insecure-token-change-me') {
throw new Error('Invalid auth token')
}
}
export default {
fetch: async (request, env, ctx) => {
const requestParamsResult = getSyncRequestSearchParams(request)
// Is LiveStore sync request
if (requestParamsResult._tag === 'Some') {
return handleSyncRequest({
request,
searchParams: requestParamsResult.value,
env,
ctx,
options: { headers: {}, validatePayload }
})
}
return new Response('Invalid path', { status: 400 })
}
}

If the payload is invalid