@webpieces/cloudtasks-client
v0.3.375
Published
Cloud Tasks enqueue client generated from a shared @PubSub API contract (twin of http-client)
Maintainers
Readme
@webpieces/cloudtasks-client
The Cloud Tasks twin of @webpieces/http-client. A @PubSub API contract is shared
by the enqueue client and the controller, exactly like RPC — calling a method on the
client enqueues a Cloud Task that is later delivered (POST) to the SAME endpoint,
where it runs through the full server filter chain.
// one shared contract
@PubSub() @AuthOidc() @ApiPath('/email')
abstract class EmailApi { @Endpoint('/send') sendEmail(r: SendEmailRequest): Promise<void> {…} }
// build the client once (sync); 'email-svc' is the callee's Cloud Run service name
const emailTasks = factory.createPubSubClient(EmailApi, new TaskClientConfig('email-svc'));
// ...or pin a URL lookup cannot describe (other region/project); svcName stays the log name
const other = factory.createPubSubClient(EmailApi, new TaskClientConfig('email-svc', 'https://email.eu.example'));
// producer (inside a request → RequestContext active)
await scheduler.addToQueue(() => emailTasks.sendEmail(req), { dedupName: req.id });ClientCloudTasksFactory.createPubSubClient(Api, TaskClientConfig)— builds the enqueue proxy. It injects aProvider<TaskProxyClient>and callsget()per contract;TaskProxyClientis bound TRANSIENT, so each client gets its own. The delivery URL is resolved at enqueue time fromsvcNameviaresolveServiceUrl: aClientRegistryoverride wins, else on GCP it is derived from the Cloud Run service name (same project + region, so you maintain no URL table), else (off-GCP, unregistered) it throws. Register non-derivable URLs (localhost, cross-region, non-Cloud-Run) once at startup withClientRegistry.addMapping(svcName, port)/addUrlMapping(svcName, url)- An enqueue outside
RequestContext.run(...)throws: a task with no caller trace is a bug CloudTaskScheduler—addToQueue/schedule/cancelJob; carries scheduling options out-of-band so the contract signature stays identical on both sidesTaskInvoker(abstract token) with two impls:GcpTaskInvoker— real@google-cloud/tasksdelivery (OIDC / shared-secret)InMemoryTaskInvoker— dispatches through the real server filter chain in-process (tests + local dev, no GCP, production parity)
