# nginx: Serving .mjs Files with Correct MIME Type

## Problem

pdfjs-dist uses a web worker loaded as an ES module (`.mjs`). The worker is referenced via Vite's `new URL()` pattern in `src/main.tsx`:

```typescript
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
  'pdfjs-dist/build/pdf.worker.min.mjs',
  import.meta.url,
).toString();
```

At runtime this resolves to e.g. `/assets/pdf.worker.min-DEtVeC4l.mjs`. Browsers **refuse** to load ES modules served with `Content-Type: application/octet-stream` — they require `text/javascript` or `application/javascript`.

nginx's default `mime.types` does not include `.mjs`, so it falls back to the `default_type` of `application/octet-stream`. This causes "Export as Images" (and any feature using pdfjs-dist) to fail with:

```
Failed to fetch dynamically imported module: https://grajmedia.duckdns.org/assets/pdf.worker.min-XXXX.mjs
```

## Fix

Add a `types` block in `/etc/nginx/nginx.conf` after the `include /etc/nginx/mime.types;` line:

```nginx
include /etc/nginx/mime.types;

# ES modules (.mjs) need text/javascript MIME type — browsers refuse
# application/octet-stream for dynamic imports.
types {
    application/javascript mjs;
}

default_type application/octet-stream;
```

Then reload:

```bash
sudo nginx -t && sudo nginx -s reload
```

Verify:

```bash
curl -sI https://grajmedia.duckdns.org/assets/pdf.worker.min-XXXX.mjs | grep -i content-type
# → Content-Type: application/javascript
```
