Implements Phases 1-8 of the TFTSR implementation plan. Rust backend (Tauri 2.x, src-tauri/): - Multi-provider AI: OpenAI-compatible, Anthropic, Gemini, Mistral, Ollama - PII detection engine: 11 regex patterns with overlap resolution - SQLCipher AES-256 encrypted database with 10 versioned migrations - 28 Tauri IPC commands for triage, analysis, document, and system ops - Ollama: hardware probe, model recommendations, pull/delete with events - RCA and blameless post-mortem Markdown document generators - PDF export via printpdf - Audit log: SHA-256 hash of every external data send - Integration stubs for Confluence, ServiceNow, Azure DevOps (v0.2) Frontend (React 18 + TypeScript + Vite, src/): - 9 pages: full triage workflow NewIssue→LogUpload→Triage→Resolution→RCA→Postmortem→History+Settings - 7 components: ChatWindow, TriageProgress, PiiDiffViewer, DocEditor, HardwareReport, ModelSelector, UI primitives - 3 Zustand stores: session, settings (persisted), history - Type-safe tauriCommands.ts matching Rust backend types exactly - 8 IT domain system prompts (Linux, Windows, Network, K8s, DB, Virt, HW, Obs) DevOps: - .woodpecker/test.yml: rustfmt, clippy, cargo test, tsc, vitest on every push - .woodpecker/release.yml: linux/amd64 + linux/arm64 builds, Gogs release upload Verified: - cargo check: zero errors - tsc --noEmit: zero errors - vitest run: 13/13 unit tests passing Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
60 lines
1.9 KiB
Markdown
60 lines
1.9 KiB
Markdown
pac-resolver
|
|
============
|
|
### Generates an asynchronous resolver function from a [PAC file][pac-wikipedia]
|
|
|
|
|
|
This module accepts a JavaScript String of code, which is meant to be a
|
|
[PAC proxy file][pac-wikipedia], and returns a generated asynchronous
|
|
`FindProxyForURL()` function.
|
|
|
|
Example
|
|
-------
|
|
|
|
Given the PAC proxy file named `proxy.pac`:
|
|
|
|
```js
|
|
function FindProxyForURL(url, host) {
|
|
if (isInNet(myIpAddress(), "10.1.10.0", "255.255.255.0")) {
|
|
return "PROXY 1.2.3.4:8080";
|
|
} else {
|
|
return "DIRECT";
|
|
}
|
|
}
|
|
```
|
|
|
|
You can consume this PAC file with `pac-resolver` like so:
|
|
|
|
```ts
|
|
import { readFileSync } from 'fs';
|
|
import { createPacResolver } from 'pac-resolver';
|
|
|
|
const FindProxyForURL = createPacResolver(readFileSync('proxy.pac'));
|
|
|
|
const res = await FindProxyForURL('http://foo.com/');
|
|
console.log(res);
|
|
// "DIRECT"
|
|
```
|
|
|
|
|
|
API
|
|
---
|
|
|
|
### pac(qjs: QuickJSWASMModule, pacFileContents: string | Buffer, options?: PacResolverOptions) → Function
|
|
|
|
Returns an asynchronous `FindProxyForURL()` function based off of the given JS
|
|
string `pacFileContents` PAC proxy file. An optional `options` object may be
|
|
passed in which respects the following options:
|
|
|
|
* `filename` - String - the filename to use in error stack traces. Defaults to `proxy.pac`.
|
|
* `sandbox` - Object - a map of functions to include in the sandbox of the
|
|
JavaScript environment where the JS code will be executed. i.e. if you wanted to
|
|
include the common `alert` function you could pass `alert: console.log`. For
|
|
async functions, you must set the `async = true` property on the function
|
|
instance, and the JS code will be able to invoke the function as if it were
|
|
synchronous.
|
|
|
|
The `qjs` parameter is a QuickJS module instance as returned from `getQuickJS()` from the `quickjs-emscripten` module.
|
|
|
|
[pac-file-docs]: https://web.archive.org/web/20070602031929/http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
|
|
[pac-wikipedia]: http://wikipedia.org/wiki/Proxy_auto-config
|