
Fetch
The JavaScript fetch
API is available; but we also provide a helper
fetchText
for issuing requests into a friendly format.
host.fetch
Section titled “host.fetch”The host.fetch
function is a wrapper around the global fetch
function which adds builtin proxy support and retry capabilities.
const response = await host.fetch("https://api.example.com", { retries: 3 })
host.fetchText
Section titled “host.fetchText”Use host.fetchText
to issue requests and download text from the internet.
const { text, file } = await host.fetchText("https://....")if (text) $`And also ${text}`
def("FILE", file)
fetchText
will also resolve the contents of file in the current workspace if the url is a relative path.
const { file } = await host.fetchText("README.md")def("README", file)
HTML to markdown or text
Section titled “HTML to markdown or text”fetchText
provides various converters to extract the text from the HTML source to a more compact text representation.
If you plan to use HTML source in your LLM calls, you will surely run out of context!
// markdownconst md = await host.fetch("https://...", { convert: "markdown" })// textconst md = await host.fetch("https://...", { convert: "text" })
host.resolveResource
Section titled “host.resolveResource”Use host.resolveResource
to resolve and download resources from URLs. This function handles various URL schemes and protocols,
and can resolve GitHub blob URLs to raw content, among other transformations.
const result = await host.resolveResource("https://github.com/microsoft/genaiscript/blob/main/docs/public/images/favicon.png")if (result) { console.log(`Resolved URI: ${result.uri}`) for (const file of result.files) { console.log(`File: ${file.filename}`) if (file.content) { console.log(`Binary content: ${file.content.length} bytes`) } else if (file.text) { console.log(`Text content: ${file.text.length} characters`) } }}
The function returns an object with:
uri
: The resolved URL as a URL objectfiles
: An array of resolved files with their content
Domain Filtering
Section titled “Domain Filtering”Domain filtering restricts which domains can be accessed through GenAIScript’s host
APIs (host.fetchText
, host.resolveResource
). By default, all domains are allowed (*
) for convenience, but you can configure specific restrictions.
Configuration
Section titled “Configuration”You can configure allowed domains in several ways:
Environment Variables:
# Comma-separated listGENAISCRIPT_ALLOWED_DOMAINS=github.com,*.openai.com,example.org
# YAML array formatGENAISCRIPT_ALLOWED_DOMAINS='["github.com", "*.openai.com", "example.org"]'
Configuration File (genaiscript.config.yml):
allowedDomains: - github.com - '*.openai.com' - example.org
Configuration File (genaiscript.config.json):
{ "allowedDomains": ["github.com", "*.openai.com", "example.org"]}
Script-Level Configuration: Individual scripts can specify their own allowed domains, which override the global configuration:
script({ title: "My Script", allowedDomains: [ "github.com", "*.openai.com", "example.com" ]})
// This script can only access the domains listed aboveconst response = await host.fetchText("https://api.openai.com/data")
Script-level configuration takes precedence over global settings, allowing fine-grained control over domain access per script.
Wildcard Patterns
Section titled “Wildcard Patterns”Domain patterns support glob-style wildcards using minimatch:
github.com
- Exact match only*.github.com
- Matches any subdomain (e.g.,api.github.com
)*
- Matches all domains (use with caution)
When a domain is blocked, you’ll see an error message like:
Domain 'example.com' is not allowed. Allowed domains: *.Configure allowed domains via GENAISCRIPT_ALLOWED_DOMAINS environment variable or allowedDomains in script configuration.
Secrets
Section titled “Secrets”If the API you are querying requires an API key, you can use the secrets object to store the key.