1- import { Warmer } from "types/open-next.js" ;
2-
31import { createGenericHandler } from "../core/createGenericHandler.js" ;
4- import { debug , error } from "./logger .js" ;
2+ import { resolveWarmerInvoke } from "../core/resolve .js" ;
53import { generateUniqueId } from "./util.js" ;
64
75export interface WarmerEvent {
@@ -17,88 +15,6 @@ export interface WarmerResponse {
1715 serverId : string ;
1816}
1917
20- const resolveWarmerInvoke = async ( ) => {
21- const openNextParams = globalThis . openNextConfig . warmer ! ;
22- if ( typeof openNextParams ?. invokeFunction === "function" ) {
23- return await openNextParams . invokeFunction ( ) ;
24- } else {
25- return Promise . resolve < Warmer > ( {
26- name : "aws-invoke" ,
27- invoke : async ( warmerId : string ) => {
28- const { InvokeCommand, LambdaClient } = await import (
29- "@aws-sdk/client-lambda"
30- ) ;
31- const lambda = new LambdaClient ( { } ) ;
32- const warmParams = JSON . parse ( process . env . WARM_PARAMS ! ) as {
33- concurrency : number ;
34- function : string ;
35- } [ ] ;
36-
37- for ( const warmParam of warmParams ) {
38- const { concurrency : CONCURRENCY , function : FUNCTION_NAME } =
39- warmParam ;
40- debug ( {
41- event : "warmer invoked" ,
42- functionName : FUNCTION_NAME ,
43- concurrency : CONCURRENCY ,
44- warmerId,
45- } ) ;
46- const ret = await Promise . all (
47- Array . from ( { length : CONCURRENCY } , ( _v , i ) => i ) . map ( ( i ) => {
48- try {
49- return lambda . send (
50- new InvokeCommand ( {
51- FunctionName : FUNCTION_NAME ,
52- InvocationType : "RequestResponse" ,
53- Payload : Buffer . from (
54- JSON . stringify ( {
55- type : "warmer" ,
56- warmerId,
57- index : i ,
58- concurrency : CONCURRENCY ,
59- delay : 75 ,
60- } satisfies WarmerEvent ) ,
61- ) ,
62- } ) ,
63- ) ;
64- } catch ( e ) {
65- error ( `failed to warm up #${ i } ` , e ) ;
66- // ignore error
67- }
68- } ) ,
69- ) ;
70-
71- // Print status
72-
73- const warmedServerIds = ret
74- . map ( ( r , i ) => {
75- if ( r ?. StatusCode !== 200 || ! r ?. Payload ) {
76- error ( `failed to warm up #${ i } :` , r ?. Payload ?. toString ( ) ) ;
77- return ;
78- }
79- const payload = JSON . parse (
80- Buffer . from ( r . Payload ) . toString ( ) ,
81- ) as WarmerResponse ;
82- return {
83- statusCode : r . StatusCode ,
84- payload,
85- type : "warmer" as const ,
86- } ;
87- } )
88- . filter ( ( r ) : r is Exclude < typeof r , undefined > => ! ! r ) ;
89-
90- debug ( {
91- event : "warmer result" ,
92- sent : CONCURRENCY ,
93- success : warmedServerIds . length ,
94- uniqueServersWarmed : [ ...new Set ( warmedServerIds ) ] . length ,
95- } ) ;
96- }
97- } ,
98- } ) ;
99- }
100- } ;
101-
10218export const handler = await createGenericHandler ( {
10319 handler : defaultHandler ,
10420 type : "warmer" ,
@@ -107,7 +23,9 @@ export const handler = await createGenericHandler({
10723async function defaultHandler ( ) {
10824 const warmerId = `warmer-${ generateUniqueId ( ) } ` ;
10925
110- const invokeFn = await resolveWarmerInvoke ( ) ;
26+ const invokeFn = await resolveWarmerInvoke (
27+ globalThis . openNextConfig . warmer ?. invokeFunction ,
28+ ) ;
11129
11230 await invokeFn . invoke ( warmerId ) ;
11331
0 commit comments