@@ -10,9 +10,12 @@ import {
1010 getQuery ,
1111 createError ,
1212 getHeader ,
13+ getRequestHeader ,
1314 setResponseHeaders ,
1415 getRouterParam ,
1516} from 'h3'
17+
18+ const ALLOWED_ORIGINS = new Set ( [ 'https://npmx.dev' , 'http://localhost:3000' ] )
1619import type { ConnectorState , PendingOperation , OperationType , ApiResponse } from './types.ts'
1720import {
1821 getNpmUser ,
@@ -66,24 +69,31 @@ export function createConnectorApp(expectedToken: string) {
6669 operations : [ ] ,
6770 }
6871
69- const app = createApp ( {
70- onRequest ( event ) {
71- // CORS headers for browser connections
72+ function setCorsHeaders ( event : Parameters < typeof setResponseHeaders > [ 0 ] ) {
73+ const origin = getRequestHeader ( event , 'origin' )
74+ if ( origin && ALLOWED_ORIGINS . has ( origin ) ) {
7275 setResponseHeaders ( event , {
73- 'Access-Control-Allow-Origin' : '*' ,
76+ 'Access-Control-Allow-Origin' : origin ,
7477 'Access-Control-Allow-Methods' : 'GET, POST, DELETE, OPTIONS' ,
7578 'Access-Control-Allow-Headers' : 'Content-Type, Authorization' ,
7679 } )
80+ }
81+ }
82+
83+ const app = createApp ( {
84+ onRequest ( event ) {
85+ setCorsHeaders ( event )
86+ } ,
87+ onBeforeResponse ( event ) {
88+ setCorsHeaders ( event )
7789 } ,
7890 } )
7991 const router = createRouter ( )
8092
8193 // Handle CORS preflight requests
8294 router . options (
8395 '/**' ,
84- eventHandler ( ( ) => {
85- return null
86- } ) ,
96+ eventHandler ( ( ) => '' ) ,
8797 )
8898
8999 function validateToken ( authHeader : string | null | undefined ) : boolean {
0 commit comments