Draft asset library JS asset registered as a file triggers file_get_contents() warning in locale's JS scan
### Overview
On a multilingual site, page renders that include a Canvas asset library draft emit a PHP warning:
```
file_get_contents(canvas/api/v0/auto-saves/js/asset_library/global): Failed to open stream: No such file or directory
in _locale_parse_js_file() (core/modules/locale/locale.module:771)
```
The interface-translation system (`locale`) scans every JavaScript asset of type `file` on a page to extract `Drupal.t()` / `Drupal.formatPlural()` strings, reading each one with `file_get_contents()`. Canvas registers the draft asset library's JS as a root-relative route URL (`/canvas/api/v0/auto-saves/js/asset_library/{id}`), which the library parser classifies as a local file. `locale` then tries to read that route as a file on disk and fails.
Because Drupal's PHPUnit configuration fails on warnings, this also turns the `phpunit` CI job red — currently surfacing through `ApiAutoSaveControllerTranslationTest`, where the warning is triggered.
### Steps to reproduce
1. Install Drupal with `locale` (a non-English interface language configured).
2. Have a Canvas asset library with an unpublished/draft change.
3. Render a page that attaches the draft asset library.
4. Observe the `file_get_contents()` warning in the logs.
### Proposed resolution
Register the draft asset library's JS asset as `external` instead of letting it default to `file`. The draft JS is served by a controller route, not a file on disk, so `external` is the semantically correct type: the library parser keeps the URL verbatim, `locale`'s scan skips it (it only reads `file` assets), and the browser still fetches the same URL. Only the draft JS entry is affected; the draft CSS entries are not scanned by `locale`.
### Remaining tasks
- Mark the draft asset library JS asset as `external` in `hook_library_info_build()`.
- Confirm the `phpunit` CI job passes and the warning no longer appears in `ApiAutoSaveControllerTranslationTest`.
### User interface changes
None in this issue.
### API changes
None.
### Data model changes
None.
issue