@@ -8,31 +8,13 @@ Object.assign(globalThis, {
8
8
} ) ;
9
9
const index = await ( ( ) => import ( "./middleware.js" ) ) ( ) ;
10
10
11
- // TODO
12
- //console.log(self);
13
- //handler({
14
- // Records: [
15
- // {
16
- // cf: {
17
- // request: {
18
- // uri: "https://sst.dev/_next/data/5fCVTp6Xr7VQpZ-m8Wxxq/middleware-redirect.json",
19
- // method: "GET",
20
- // headers: {
21
- // host: [{ value: "sst.dev" }]
22
- // },
23
- // querystring: "",
24
- // },
25
- // }
26
- // }
27
- // ]
28
- //}).then((res) => console.log(JSON.stringify(res, null, 2)));
29
-
30
11
export async function handler ( event ) {
31
12
// Convert CloudFront request to Node request
32
13
const request = event . Records [ 0 ] . cf . request ;
33
14
const { uri, method, headers, querystring, body } = request ;
34
15
console . log ( uri ) ;
35
16
console . log ( request ) ;
17
+ console . log ( request . headers ) ;
36
18
const requestHeaders = new Headers ( ) ;
37
19
for ( const [ key , values ] of Object . entries ( headers ) ) {
38
20
for ( const { value } of values ) {
@@ -59,112 +41,58 @@ export async function handler(event) {
59
41
waitUntil : ( ) => { } ,
60
42
} ) ;
61
43
62
- // Build headers
63
- ( response . headers . get ( "x-middleware-override-headers" ) || "" )
64
- . split ( "," )
65
- . forEach ( key => {
66
- headers [ key ] = [ {
67
- key,
68
- value : response . headers . get ( `x-middleware-request-${ key } ` )
69
- } ] ;
70
- } ) ;
71
-
44
+ // WORKAROUND (AWS): pass middleware headers to server
72
45
if ( response . headers . get ( "x-middleware-next" ) === "1" ) {
73
- headers [ "x-wahaha" ] = [ { key : "x-wahaha" , value : "wahaha" } ] ;
74
- headers [ "wahaha" ] = [ { key : "wahaha" , value : "wahaha" } ] ;
46
+ console . log ( "== getMiddlewareHeaders ==" , response . headers ) ;
47
+ headers [ "x-op-middleware-request-headers" ] = [ {
48
+ key : "x-op-middleware-request-headers" ,
49
+ value : getMiddlewareRequestHeaders ( response ) ,
50
+ } ] ;
51
+ headers [ "x-op-middleware-response-headers" ] = [ {
52
+ key : "x-op-middleware-response-headers" ,
53
+ value : getMiddlewareResponseHeaders ( response ) ,
54
+ } ] ;
75
55
console . log ( "== conitnue to origin ==" , request )
76
56
return request ;
77
57
}
78
58
79
- console . log ( "== do not hit origin ==" , {
59
+ console . log ( "== do not hit origin ==" , response , {
80
60
status : response . status ,
81
- headers,
61
+ headers : httpHeadersToCfHeaders ( response . headers ) ,
82
62
} ) ;
83
63
return {
84
64
status : response . status ,
85
- headers,
86
- }
65
+ headers : httpHeadersToCfHeaders ( response . headers ) ,
66
+ } ;
87
67
}
88
68
89
- /**
90
- * middleware-fetch
91
- *
92
- * nextresponse [response] {
93
- size: 0,
94
- [symbol(body internals)]: {
95
- body: null,
96
- stream: null,
97
- boundary: null,
98
- disturbed: false,
99
- error: null
100
- },
101
- [symbol(response internals)]: {
102
- type: 'default',
103
- url: undefined,
104
- status: 200,
105
- statustext: '',
106
- headers: { 'x-middleware-next': '1' },
107
- counter: undefined,
108
- highwatermark: undefined
109
- },
110
- [Symbol(internal response)]: {
111
- cookies: ResponseCookies { _parsed: Map(0) {}, _headers: [Object] },
112
- url: undefined
113
- }
114
- }
115
- */
116
- /**
117
- * middleware-set-header
118
- *
119
- * NextResponse [Response] {
120
- size: 0,
121
- [Symbol(Body internals)]: {
122
- body: null,
123
- stream: null,
124
- boundary: null,
125
- disturbed: false,
126
- error: null
127
- },
128
- [Symbol(Response internals)]: {
129
- type: 'default',
130
- url: undefined,
131
- status: 200,
132
- statusText: '',
133
- headers: {
134
- 'x-hello-from-middleware2': 'hello',
135
- 'x-middleware-next': '1',
136
- 'x-middleware-override-headers': 'x-hello-from-middleware1',
137
- 'x-middleware-request-x-hello-from-middleware1': 'hello'
138
- },
139
- counter: undefined,
140
- highWaterMark: undefined
141
- },
142
- [Symbol(internal response)]: {
143
- cookies: ResponseCookies { _parsed: Map(0) {}, _headers: [Object] },
144
- url: undefined
145
- }
69
+ function getMiddlewareRequestHeaders ( response ) {
70
+ const headers = { } ;
71
+ ( response . headers . get ( "x-middleware-override-headers" ) || "" )
72
+ . split ( "," )
73
+ . forEach ( key => {
74
+ headers [ key ] = response . headers . get ( `x-middleware-request-${ key } ` )
75
+ } ) ;
76
+ console . log ( "== getMiddlewareRequestHeaders ==" , headers ) ;
77
+ return JSON . stringify ( headers ) ;
146
78
}
147
- */
148
- /**
149
- * middleware-redirect
150
- *
151
- * Response {
152
- size: 0,
153
- [Symbol(Body internals)]: {
154
- body: null,
155
- stream: null,
156
- boundary: null,
157
- disturbed: false,
158
- error: null
159
- },
160
- [Symbol(Response internals)]: {
161
- type: 'default',
162
- url: '',
163
- status: 307,
164
- statusText: '',
165
- headers: { location: 'https://sst.dev/ssr' },
166
- counter: undefined,
167
- highWaterMark: undefined
168
- }
79
+
80
+ function getMiddlewareResponseHeaders ( response ) {
81
+ const headers = { } ;
82
+ response . headers . forEach ( ( value , key ) => {
83
+ if ( ! key . startsWith ( "x-middleware-" ) ) {
84
+ headers [ key ] = value ;
85
+ }
86
+ } ) ;
87
+ console . log ( "== getMiddlewareResponseHeaders ==" , headers ) ;
88
+ return JSON . stringify ( headers ) ;
169
89
}
170
- */
90
+
91
+ function httpHeadersToCfHeaders ( httpHeaders ) {
92
+ const headers = { } ;
93
+ httpHeaders . forEach ( ( value , key ) => {
94
+ headers [ key ] = [ { key, value } ] ;
95
+ } ) ;
96
+ console . log ( "== responseHeadersToCloudFrontHeaders ==" , headers ) ;
97
+ return headers ;
98
+ }
0 commit comments