47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import * as plugins from '../plugins.js';
|
|
|
|
/**
|
|
* SW-TypedRequest controller for service worker type-safe RPC endpoint
|
|
* This provides a separate endpoint for service worker communication
|
|
*/
|
|
@plugins.smartserve.Route('/sw-typedrequest')
|
|
export class SwTypedRequestController {
|
|
private typedRouter: plugins.typedrequest.TypedRouter;
|
|
|
|
constructor(typedRouter: plugins.typedrequest.TypedRouter) {
|
|
this.typedRouter = typedRouter;
|
|
}
|
|
|
|
@plugins.smartserve.Post('/')
|
|
async handleSwTypedRequest(ctx: plugins.smartserve.IRequestContext): Promise<Response> {
|
|
try {
|
|
const response = await this.typedRouter.routeAndAddResponse(ctx.body as plugins.typedrequestInterfaces.ITypedRequest);
|
|
|
|
return new Response(plugins.smartjson.stringify(response), {
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
} catch (error) {
|
|
return new Response(JSON.stringify({ error: 'Invalid request' }), {
|
|
status: 400,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
@plugins.smartserve.Head('/')
|
|
async handleSwTypedRequestHead(): Promise<Response> {
|
|
// HEAD request for online checking from service worker
|
|
return new Response(null, {
|
|
status: 200,
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
});
|
|
}
|
|
}
|