JavaScript 脚本
用户可以通过 JavaScript 脚本修改流经 Stash 的 HTTP 请求、响应。
配置格式
http:
script:
- match: url-you-want-to-match
name: your-fancy-script
type: response # request / response
require-body: true
timeout: 20
argument: ''
binary-mode: false
max-size: 1048576 # 1MB
script-providers:
your-fancy-script:
url: https://your-fancy-script.com/your-fancy-script.js
interval: 86400
参数:
match
: 脚本匹配的 URL 正则表达式。type
: 脚本类型,可选值为request
或response
。require-body
: 是否需要请求体 / 响应体,在脚本中处理 body 需要消耗更多的内存空间,仅在必要时启用。timeout
: 脚本执行超时时间,单位为秒。argument
: 脚本执行时的参数,类型为string
。binary-mode
:二进制模式,body
会以Uint8Array
而不是string
传递给脚本。max-size
:单位为字节,body 超过这个大小的请求不会触发脚本。
💡
二进制模式仅在 Stash iOS 2.0.2 以及之后的版本支持。
语法与接口
基础方法
$script.name
:脚本名称$script.type
:脚本类型,如request
,response
和tile
$script.startTime
:脚本开始运行的时间$environment["stash-build"]
:Stash Build 编号$environment["stash-version"]
:Stash 版本号$environment.language
:Stash 运行语言$environment.system
:Stash 运行系统 (iOS / macOS)$argument
:运行参数$done(value)
:结束脚本运行,释放资源$notification.post(title, subtitle, body)
:发送 iOS 通知console.log(value)
:输出日志,脚本日志会输出到单独的文件setTimeout(callback, delay)
:延迟执行回调函数
持久化存储
$persistentStore.write(value, key)
:写入持久化存储$persistentStore.read(key)
:读取持久化存储
Request Object
$request.url
:请求 URL$request.method
:请求方法$request.headers
:请求头$request.body
:请求体,仅在requires-body: true
时有,根据是否开启二进制模式,可以为string
或者Uint8Array
Response Object
$request.url
:请求 URL$request.method
:请求方法$request.headers
:请求头$response.status
:响应状态码$response.headers
:响应头$response.body
:响应体,仅在requires-body: true
时有,根据是否开启二进制模式,可以为string
或者Uint8Array
HTTP Client
$httpClient.get(object)
$httpClient.put(object)
$httpClient.delete(object)
$httpClient.head(object)
$httpClient.options(object)
$httpClient.patch(object)
例子
$httpClient.get('http://www.example.com', (error, response, data) => {
if (error) {
console.log(error)
} else {
console.log(data)
}
})
$httpClient.post(
{
url: 'http://www.example.com',
headers: { headerKey: 'headerValue' },
body: '{}', // can be object or string
},
(error, response, data) => {
if (error) {
console.log(error)
} else {
console.log(data)
}
}
)
$done(value)
⚠️
对于所有脚本,在结束时候必须调用 $done(value)
方法释放资源。
对于 request 类型的脚本,调用 $done(object)
可以改写 HTTP 请求,object
可以包含下述字段:
url
:修改请求的 URLheaders
:修改请求的 headersbody
:修改请求的 bodyresponse
:替换 HTTP 响应,不再实际发出 HTTP 请求
你可以调用 $done()
来打断请求,或者 $done({})
不修改请求的任何内容。
对于 response 类型的脚本,调用 $done(object)
可以改写 HTTP 响应,object
可以包含下述字段:
status
:修改响应的状态码headers
:修改响应的 headersbody
:修改响应的 body
你可以调用 $done()
来打断请求,或者 $done({})
不修改响应的任何内容。
Last updated on January 6, 2023