Я пытаюсь хранить и извлекать личные данные в своих хуках, устанавливая install.private
, как описано здесь , но последующие запросы хуков не включают в себя свойство install.private
.
Использование Приведенное ниже приложение install.json
и рабочий index.js
, я тестирую это следующим образом:
- Я нажимаю Установить частное значение флажок
- Крюк отправляет
"option-change:testSetPrivate"
запрос на Worker - Worker устанавливает
install.private = { value: install.options.privateIn }
в ответ - Я нажимаю флажок Восстановить личное значение
- Hook send
"option-change:testGetPrivate"
запрос к работнику - работник пытается получить доступ к
install.private.value
, но выдает исключение Cannot read property 'value' of undefined
Вот как выглядит итоговый пользовательский интерфейс:
Установка приложения. json
{
"$schema": "http://json.schemastore.org/install",
"resources": {
"head": [],
"body": []
},
"dns": [],
"preview": {
"handlers": [
{
"options": ["_default"],
"execute": "INSTALL_SCOPE.setOptions(INSTALL_OPTIONS)"
}
]
},
"hooks": [
{
"endpoint": "...",
"events": ["option-change:testSetPrivate"],
"block": true,
"failure": {
"action": "failure",
"message": "Something went wrong"
}
},
{
"endpoint": "...",
"events": ["option-change:testGetPrivate"],
"block": true,
"failure": {
"action": "failure",
"message": "Something went wrong."
}
}
],
"options": {
"properties": {
"privateIn": {
"order": 1,
"title": "The Private Value to Set",
"type": "string",
"default": "this is private"
},
"testSetPrivate": {
"order": 2,
"title": "Set the Private Value",
"type": "boolean",
"default": false
},
"testGetPrivate": {
"order": 3,
"title": "Retrieve the Private Value",
"type": "boolean",
"default": false
},
"privateOut": {
"order": 4,
"title": "The Private Value we Got",
"type": "string"
}
}
}
}
Рабочий индекс. js
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest (request) {
const data = await request.json()
let install = data.install
let errors = []
if (data.event === "option-change:testSetPrivate") {
// Write privateIn to install.private
install.private = {
value: install.options.privateIn
}
} else if (data.event === "option-change:testGetPrivate") {
// Read from install.private and write to install.options.privateOut
try {
install.options.privateOut = install.private.value
} catch (e) {
errors.push({type: "unknown", message: e.message})
}
} else {
throw `Unhandled event: ${data.event}`
}
const responseData = {
proceed: errors.length === 0,
errors,
install,
}
return new Response(JSON.stringify(responseData), {
status: responseData.proceed ? 200 : 400,
headers: { 'content-type': 'application/json' },
})
}