1
- import { Warmer } from "types/open-next.js" ;
2
-
3
1
import { createGenericHandler } from "../core/createGenericHandler.js" ;
4
- import { debug , error } from "./logger .js" ;
2
+ import { resolveWarmerInvoke } from "../core/resolve .js" ;
5
3
import { generateUniqueId } from "./util.js" ;
6
4
7
5
export interface WarmerEvent {
@@ -17,88 +15,6 @@ export interface WarmerResponse {
17
15
serverId : string ;
18
16
}
19
17
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
-
102
18
export const handler = await createGenericHandler ( {
103
19
handler : defaultHandler ,
104
20
type : "warmer" ,
@@ -107,7 +23,9 @@ export const handler = await createGenericHandler({
107
23
async function defaultHandler ( ) {
108
24
const warmerId = `warmer-${ generateUniqueId ( ) } ` ;
109
25
110
- const invokeFn = await resolveWarmerInvoke ( ) ;
26
+ const invokeFn = await resolveWarmerInvoke (
27
+ globalThis . openNextConfig . warmer ?. invokeFunction ,
28
+ ) ;
111
29
112
30
await invokeFn . invoke ( warmerId ) ;
113
31
0 commit comments