Busca: os 7 kinds e o filtro vazio
Oito funções concretas, categorias de missão/diário, recentes autorizados e validação.
Use o api recebido por um bloco montado do módulo. Estas funções são trechos completos de JavaScript; importe uma delas em seu main.js e chame dentro de mount({ api, signal }). O exemplo de pacote mínimo está em Sistemas e módulos.
Como GM, crie documentos sintéticos com os nomes abaixo numa campanha descartável e conceda leitura ao jogador quando quiser testar visibilidade. A busca precisa estar habilitada no host. Cada consulta usa pelo menos dois caracteres. O filtro vazio pesquisa todas as categorias; omitir kind tem o mesmo efeito.
kind identifica a categoria do resultado. Missões e quadros continuam sendo documentos de diário: seu type no resultado é journal, enquanto o kind é quest ou quest_board. O filtro journal retorna os demais diários, não as missões e os quadros.
kind: "": Todos os tipos de documento
Pré-requisito: crie ao menos dois documentos Beacon em categorias diferentes.
export async function findAll(api, signal) {
return api.table.search("Beacon", {
kind: "",
signal,
});
}Resultado esperado: Até 20 documentos legíveis de qualquer categoria que correspondam a Beacon, ordenados por título.
Valide: execute findAll(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
kind: "actor": Atores
Pré-requisito: crie Beacon Scout na categoria actor.
export async function findActors(api, signal) {
return api.table.search("Beacon Scout", {
kind: "actor",
signal,
});
}Resultado esperado: Documentos legíveis com kind: "actor" que correspondam a Beacon Scout.
Valide: execute findActors(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
kind: "item": Itens
Pré-requisito: crie Beacon Rope na categoria item.
export async function findItems(api, signal) {
return api.table.search("Beacon Rope", {
kind: "item",
signal,
});
}Resultado esperado: Documentos legíveis com kind: "item" que correspondam a Beacon Rope.
Valide: execute findItems(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
kind: "journal": Diários
Pré-requisito: crie Beacon Notes na categoria journal.
export async function findJournals(api, signal) {
return api.table.search("Beacon Notes", {
kind: "journal",
signal,
});
}Resultado esperado: Documentos legíveis com kind: "journal" que correspondam a Beacon Notes.
Valide: execute findJournals(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
kind: "quest": Missões
Pré-requisito: crie Beacon Rescue na categoria quest.
export async function findQuests(api, signal) {
return api.table.search("Beacon Rescue", {
kind: "quest",
signal,
});
}Resultado esperado: Documentos legíveis com kind: "quest" que correspondam a Beacon Rescue.
Valide: execute findQuests(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
kind: "quest_board": Quadros de missões
Pré-requisito: crie Beacon Jobs na categoria quest_board.
export async function findQuestBoards(api, signal) {
return api.table.search("Beacon Jobs", {
kind: "quest_board",
signal,
});
}Resultado esperado: Documentos legíveis com kind: "quest_board" que correspondam a Beacon Jobs.
Valide: execute findQuestBoards(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
kind: "scene": Cenas
Pré-requisito: crie Beacon Harbor na categoria scene.
export async function findScenes(api, signal) {
return api.table.search("Beacon Harbor", {
kind: "scene",
signal,
});
}Resultado esperado: Documentos legíveis com kind: "scene" que correspondam a Beacon Harbor.
Valide: execute findScenes(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
kind: "compendium": Compêndios
Pré-requisito: crie Beacon Collection na categoria compendium.
export async function findCompendiums(api, signal) {
return api.table.search("Beacon Collection", {
kind: "compendium",
signal,
});
}Resultado esperado: Documentos legíveis com kind: "compendium" que correspondam a Beacon Collection.
Valide: execute findCompendiums(api, signal) como GM e jogador; remova a leitura de um documento e repita. A ausência de resultados é um array vazio, não um erro.
Resultados recentes e erros
Para recentes, use consulta vazia e até 12 referências previamente retornadas pela busca. Use type: "journal" para missão/quadro; não coloque quest em recent.type. O servidor verifica novamente campanha e leitura a cada chamada.
export async function recentDocuments(api, previousResults, signal) {
const recent = previousResults.slice(0, 12).map(({ id, type }) => ({ id, type }));
return api.table.search("", { recent, signal });
}Uma consulta de menos de dois caracteres sem recent retorna []. Mais de 200 caracteres, filtro desconhecido ou referência inválida são entradas rejeitadas. Busca desabilitada ou vínculo revogado impedem a chamada; o adaptador expõe códigos como permission_denied e invalid_data. cancelled/stale_context indicam cancelamento ou fechamento do bloco. Não use a lista de resultados como cache de permissões.
Como usar a IA para criar uma busca por tipo
Na release alvo, confira table/services.py e domain-api.js. Adapte o exemplo de kind quest_board para um seletor de quadros legíveis. Mostre título com textContent, use signal do bloco e trate resultados vazios, permissões revogadas e cancelamento. Não invente api.quests nem exponha notas privadas. Entregue um teste de GM/jogador com dados Beacon.