import {ruleBookApi, ruleScriptApi} from "@/mammon"; import {RuleBookResponse, RuleScopeRequest, RuleScriptRequest, RuleScriptResponse, UpdateRuleBookRequest} from "@/generated/mammon"; import {isAxiosError} from "axios"; import {defineStore} from "pinia"; import {ref} from "vue"; export type RuleBook = RuleBookResponse; export type RuleScript = RuleScriptResponse; export type RuleScope = RuleScriptResponse['scope']; export const emptyScope = (): RuleScopeRequest => ({ ledgers: {}, characters: {}, corporations: {}, walletDivisions: {}, }); export const useRuleBookStore = defineStore('rule-book', () => { const ruleBook = ref(null); const refresh = () => ruleBookApi.findRuleBook() .then(response => ruleBook.value = response.data) .catch(error => { if (isAxiosError(error) && error.response?.status === 404) { ruleBook.value = null; return; } throw error; }); const update = (scripts: RuleScriptRequest[]) => ruleBookApi.updateRuleBook({scripts} satisfies UpdateRuleBookRequest) .then(response => ruleBook.value = response.data); refresh(); return {ruleBook, update}; }) export const fetchScriptDefinitions = (): Promise => ruleScriptApi.listScriptDefinitions() .then(response => Promise.all( response.data.map(name => ruleScriptApi.getScriptDefinition(name, {responseType: 'text'}).then(r => r.data)) )) .then(definitions => definitions.join('\n'));