runServer function

Future<void> runServer(
  1. dynamic scheme,
  2. dynamic host,
  3. dynamic port,
  4. dynamic dataDir,
)

Implementation

Future<void> runServer(scheme, host, port, dataDir) async {
  final overrideHeaders = {
    ACCESS_CONTROL_ALLOW_ORIGIN: 'https://chat.openai.com',
    ACCESS_CONTROL_ALLOW_METHODS: 'GET,POST,DELETE,PUT,OPTIONS',
    ACCESS_CONTROL_ALLOW_HEADERS: "*"
  };
  final catalogDir = "$dataDir/catalog";
  final metaDir = "$dataDir/meta";
  final publicDir = "$dataDir/public";
  final serviceMapFile = File('$catalogDir/domain-map.json');
  final serviceIdMap = await readMap(serviceMapFile);
  final contentTypesFile = File('$catalogDir/content-types.json');
  final contentTypesMap = await readMap(contentTypesFile);
  final proxyMapFile = File('$catalogDir/api-map.json');
  final proxyMap = await readMap(proxyMapFile);
  final staticHandler =
      createStaticHandler(publicDir, defaultDocument: 'index.html');

  final handler = const shelf.Pipeline()
      .addMiddleware(shelf.logRequests())
      .addMiddleware(corsHeaders(headers: overrideHeaders))
      .addHandler(RequestHandler(
        serviceIdMap: serviceIdMap,
        proxyMap: proxyMap,
        contentTypes: contentTypesMap,
        catalogDir: catalogDir,
        metaDir: metaDir,
        host: host,
        scheme: scheme,
        staticHandler: staticHandler,
      ).handle);

  final ip = InternetAddress.anyIPv4;
  final server = await io.serve(handler, ip, port);
  print('Server listening on port ${server.port}');
}