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>
197 lines
7.6 KiB
TypeScript
197 lines
7.6 KiB
TypeScript
type WaitState = 'none' | 'interactive' | 'networkIdle' | 'complete';
|
|
/**
|
|
*
|
|
* The `url` command loads an URL in the browser. If a baseUrl is specified in the config,
|
|
* it will be prepended to the url parameter using node's url.resolve() method. Calling
|
|
* `browser.url('...')` with the same url as last time will trigger a page reload. However,
|
|
* if the url contains a hash, the browser will not trigger a new navigation and the user
|
|
* has to [refresh](/docs/api/webdriver#refresh) the page to trigger one.
|
|
*
|
|
* The command returns an `WebdriverIO.Request` object that contains information about the
|
|
* request and response data of the page load:
|
|
*
|
|
* ```ts
|
|
* interface WebdriverIO.Request {
|
|
* id?: string
|
|
* url: string
|
|
* timestamp: number
|
|
* navigation?: string
|
|
* redirectChain?: string[],
|
|
* headers: Record<string, string>
|
|
* cookies?: NetworkCookie[]
|
|
* \/**
|
|
* * Error message if request failed
|
|
* *\/
|
|
* error?: string
|
|
* response?: {
|
|
* fromCache: boolean
|
|
* headers: Record<string, string>
|
|
* mimeType: string
|
|
* status: number
|
|
* },
|
|
* /**
|
|
* * List of all requests that were made due to the main request.
|
|
* * Note: the list may be incomplete and does not contain request that were
|
|
* * made after the command has finished.
|
|
* *
|
|
* * The property will be undefined if the request is not a document request
|
|
* * that was initiated by the browser.
|
|
* *\/
|
|
* children?: Request[]
|
|
* }
|
|
* ```
|
|
*
|
|
* The command supports the following options:
|
|
*
|
|
* :::note
|
|
*
|
|
* These features unfortunately won't be available to you if your remote environment doesn't support WebDriver Bidi. You can check if Bidi is support in your session by looking into the `browser.isBidi` property.
|
|
*
|
|
* :::
|
|
*
|
|
* ### wait
|
|
* The desired state the requested resource should be in before finishing the command.
|
|
* It supports the following states:
|
|
*
|
|
* - `none`: no wait after the page request is made and the response is received
|
|
* - `interactive`: wait until the page is interactive
|
|
* - `complete`: wait until the DOM tree of the page is fully loaded
|
|
* - `networkIdle`: wait until there are no pending network requests
|
|
*
|
|
* ### headers
|
|
*
|
|
* Headers to be sent with the request.
|
|
*
|
|
* __Default:__ `{}`
|
|
*
|
|
* ### auth
|
|
*
|
|
* Basic authentication credentials.
|
|
* Note: this will overwrite the existing `Authorization` header if provided in the `headers` option.
|
|
*
|
|
* ### timeout
|
|
*
|
|
* If set to a number, the command will wait for the specified amount of milliseconds for the page to load
|
|
* all responses before returning.
|
|
*
|
|
* Note: for this to have an impact, it requires the `wait` option to be set to `networkIdle`.
|
|
*
|
|
* __Default:__ `5000`
|
|
*
|
|
* <example>
|
|
:url.js
|
|
// navigate to a new URL
|
|
const request = await browser.url('https://webdriver.io');
|
|
// log url
|
|
console.log(request.url); // outputs: "https://webdriver.io"
|
|
console.log(request.response?.status); // outputs: 200
|
|
console.log(request.response?.headers); // outputs: { 'content-type': 'text/html; charset=UTF-8' }
|
|
|
|
:baseUrlResolutions.js
|
|
// With a base URL of http://example.com/site, the following url parameters resolve as such:
|
|
// When providing a scheme:
|
|
// https://webdriver.io
|
|
await browser.url('https://webdriver.io');
|
|
|
|
// When not starting with a slash, the URL resolves relative to the baseUrl
|
|
// http://example.com/site/relative
|
|
await browser.url('relative');
|
|
|
|
// When starting with a slash, the URL resolves relative to the root path of the baseUrl
|
|
// http://example.com/rootRelative
|
|
await browser.url('/rootRelative');
|
|
|
|
:basicAuth.js
|
|
// navigate to a URL with basic authentication
|
|
await browser.url('https://the-internet.herokuapp.com/basic_auth', {
|
|
auth: {
|
|
user
|
|
pass
|
|
}
|
|
});
|
|
await expect($('p=Congratulations! You must have the proper credentials.').toBeDisplayed();
|
|
|
|
:onBeforeLoad.js
|
|
// navigate to a URL and mock the battery API
|
|
await browser.url('https://pazguille.github.io/demo-battery-api/', {
|
|
onBeforeLoad (win) {
|
|
// mock "navigator.battery" property
|
|
// returning mock charge object
|
|
win.navigator.getBattery = () => Promise.resolve({
|
|
level: 0.5,
|
|
charging: false,
|
|
chargingTime: Infinity,
|
|
dischargingTime: 3600, // seconds
|
|
})
|
|
}
|
|
})
|
|
// now we can assert actual text - we are charged at 50%
|
|
await expect($('.battery-percentage')).toHaveText('50%')
|
|
// and has enough juice for 1 hour
|
|
await expect($('.battery-remaining')).toHaveText('01:00)
|
|
* </example>
|
|
*
|
|
* @param {string=} url the URL to navigate to
|
|
* @param {UrlOptions=} options navigation options
|
|
* @param {'none'|'interactive'|'networkIdle'|'complete'} [options.wait] The desired state the requested resource should be in before finishing the command. Default: 'complete'
|
|
* @param {number=} options.timeout If set to a number, the command will wait for the specified amount of milliseconds for the page to load
|
|
* all responses before returning. Default: 5000
|
|
* @param {Function=} options.onBeforeLoad A function that is being called before your page has loaded all of its resources. It allows you to easily
|
|
* mock the environment, e.g. overwrite Web APIs that your application uses.
|
|
* @param {`{user: string, pass: string}`=} options.auth basic authentication credentials
|
|
* @param {`Record<string, string>`=} options.headers headers to be sent with the request
|
|
* @returns {WebdriverIO.Request} a request object of the page load with information about the request and response data
|
|
*
|
|
* @see https://w3c.github.io/webdriver/webdriver-spec.html#dfn-get
|
|
* @see https://nodejs.org/api/url.html#url_url_resolve_from_to
|
|
* @type protocol
|
|
*
|
|
*/
|
|
export declare function url(this: WebdriverIO.Browser, path: string, options?: UrlCommandOptions): Promise<WebdriverIO.Request | void>;
|
|
interface UrlCommandOptions {
|
|
/**
|
|
* The desired state the requested resource should be in before finishing the command.
|
|
* It supports the following states:
|
|
*
|
|
* - `none`: no wait after the page request is made and the response is received
|
|
* - `interactive`: wait until the page is interactive
|
|
* - `complete`: wait until the DOM tree of the page is fully loaded
|
|
* - `networkIdle`: wait until there are no pending network requests
|
|
*
|
|
* @default 'complete'
|
|
*/
|
|
wait?: WaitState;
|
|
/**
|
|
* Headers to be sent with the request.
|
|
* @default {}
|
|
*/
|
|
headers?: Record<string, string>;
|
|
/**
|
|
* Basic authentication credentials
|
|
* Note: this will overwrite the existing `Authorization` header if provided in the `headers` option
|
|
*/
|
|
auth?: {
|
|
user: string;
|
|
pass: string;
|
|
};
|
|
/**
|
|
* If set to a number, the command will wait for the specified amount of milliseconds for the page to load
|
|
* all responses before returning.
|
|
*
|
|
* Note: for this to have an impact, it requires the `wait` option to be set to `networkIdle`
|
|
*
|
|
* @default 5000
|
|
*/
|
|
timeout?: number;
|
|
/**
|
|
* A function that is being called before your page has loaded all of its resources. It allows you to easily
|
|
* mock the environment, e.g. overwrite Web APIs that your application uses.
|
|
*
|
|
* Note: the provided function is being serialized and executed in the browser context. You can not pass in variables
|
|
* from the Node.js context. Furthermore changes to the environment only apply for this specific page load.
|
|
* Checkout `browser.addPreloadScript` for a more versatile way to mock the environment.
|
|
*/
|
|
onBeforeLoad?: () => unknown;
|
|
}
|
|
export {};
|
|
//# sourceMappingURL=url.d.ts.map
|