| 511 | } |
| 512 | |
| 513 | export async function createDaemonHttpServer(options: { |
| 514 | handleRequest: DaemonInvokeFn; |
| 515 | token?: string; |
| 516 | retainArtifacts?: boolean; |
| 517 | }): Promise<http.Server> { |
| 518 | const authHook = await loadHttpAuthHook(); |
| 519 | const { handleRequest, token, retainArtifacts = false } = options; |
| 520 | return http.createServer((req, res) => { |
| 521 | if (req.method === 'GET' && req.url === '/health') { |
| 522 | res.statusCode = 200; |
| 523 | res.setHeader('content-type', 'application/json'); |
| 524 | res.end(JSON.stringify(buildDaemonHealthPayload('agent-device-daemon'))); |
| 525 | return; |
| 526 | } |
| 527 | |
| 528 | if ( |
| 529 | tryHandleUploadHttpRoute({ |
| 530 | req, |
| 531 | res, |
| 532 | token: resolveToken({}, req.headers), |
| 533 | authorize: async (request) => |
| 534 | await authorizeAuxiliaryHttpRequest({ |
| 535 | req: request.req, |
| 536 | res: request.res, |
| 537 | authHook, |
| 538 | expectedToken: token, |
| 539 | daemonRequest: request.daemonRequest, |
| 540 | }), |
| 541 | }) |
| 542 | ) { |
| 543 | return; |
| 544 | } |
| 545 | |
| 546 | if ( |
| 547 | tryHandleDownloadableArtifactHttpRoute({ |
| 548 | req, |
| 549 | res, |
| 550 | retainArtifacts, |
| 551 | authorize: async (request) => |
| 552 | await authorizeAuxiliaryHttpRequest({ |
| 553 | req: request.req, |
| 554 | res: request.res, |
| 555 | authHook, |
| 556 | expectedToken: token, |
| 557 | daemonRequest: request.daemonRequest, |
| 558 | }), |
| 559 | }) |
| 560 | ) { |
| 561 | return; |
| 562 | } |
| 563 | |
| 564 | if (req.method !== 'POST' || req.url !== '/rpc') { |
| 565 | res.statusCode = 404; |
| 566 | res.end('Not found'); |
| 567 | return; |
| 568 | } |
| 569 | |
| 570 | let body = ''; |