2020-10-25 08:11:08 +01:00
|
|
|
<template>
|
2023-04-08 02:01:42 +02:00
|
|
|
<MkStickyContainer>
|
|
|
|
<template #header
|
|
|
|
><MkPageHeader :actions="headerActions" :tabs="headerTabs"
|
|
|
|
/></template>
|
|
|
|
<MkSpacer :content-max="700">
|
|
|
|
<div class="_formRoot">
|
|
|
|
<div class="_formBlock">
|
|
|
|
<MkInput
|
|
|
|
v-model="endpoint"
|
|
|
|
:datalist="endpoints"
|
|
|
|
class="_formBlock"
|
|
|
|
@update:modelValue="onEndpointChange()"
|
|
|
|
>
|
|
|
|
<template #label>Endpoint</template>
|
|
|
|
</MkInput>
|
|
|
|
<MkTextarea v-model="body" class="_formBlock" code>
|
|
|
|
<template #label>Params (JSON or JSON5)</template>
|
|
|
|
</MkTextarea>
|
|
|
|
<MkSwitch v-model="withCredential" class="_formBlock">
|
|
|
|
With credential
|
|
|
|
</MkSwitch>
|
|
|
|
<MkButton
|
|
|
|
class="_formBlock"
|
|
|
|
primary
|
|
|
|
:disabled="sending"
|
|
|
|
@click="send"
|
|
|
|
>
|
|
|
|
<template v-if="sending"><MkEllipsis /></template>
|
|
|
|
<template v-else
|
|
|
|
><i class="ph-paper-plane-tilt ph-bold ph-lg"></i>
|
|
|
|
Send</template
|
|
|
|
>
|
|
|
|
</MkButton>
|
|
|
|
</div>
|
|
|
|
<div v-if="res" class="_formBlock">
|
|
|
|
<MkTextarea v-model="res" code readonly tall>
|
|
|
|
<template #label>Response</template>
|
|
|
|
</MkTextarea>
|
|
|
|
</div>
|
2022-06-20 10:38:49 +02:00
|
|
|
</div>
|
2023-04-08 02:01:42 +02:00
|
|
|
</MkSpacer>
|
|
|
|
</MkStickyContainer>
|
2020-10-25 08:11:08 +01:00
|
|
|
</template>
|
|
|
|
|
2022-04-29 03:21:02 +02:00
|
|
|
<script lang="ts" setup>
|
2023-09-02 01:27:33 +02:00
|
|
|
import { computed, ref } from "vue";
|
2023-04-08 02:01:42 +02:00
|
|
|
import JSON5 from "json5";
|
2023-09-02 01:27:33 +02:00
|
|
|
import type { Endpoints } from "firefish-js";
|
2023-04-08 02:01:42 +02:00
|
|
|
import MkButton from "@/components/MkButton.vue";
|
|
|
|
import MkInput from "@/components/form/input.vue";
|
|
|
|
import MkTextarea from "@/components/form/textarea.vue";
|
|
|
|
import MkSwitch from "@/components/form/switch.vue";
|
|
|
|
import * as os from "@/os";
|
|
|
|
import { definePageMetadata } from "@/scripts/page-metadata";
|
2020-10-25 08:11:08 +01:00
|
|
|
|
2023-04-08 02:01:42 +02:00
|
|
|
const body = ref("{}");
|
|
|
|
const endpoint = ref("");
|
2022-04-29 03:21:02 +02:00
|
|
|
const endpoints = ref<any[]>([]);
|
|
|
|
const sending = ref(false);
|
2023-04-08 02:01:42 +02:00
|
|
|
const res = ref("");
|
2022-04-29 03:21:02 +02:00
|
|
|
const withCredential = ref(true);
|
2020-10-25 08:11:08 +01:00
|
|
|
|
2023-04-08 02:01:42 +02:00
|
|
|
os.api("endpoints").then((endpointResponse) => {
|
2022-04-29 03:21:02 +02:00
|
|
|
endpoints.value = endpointResponse;
|
|
|
|
});
|
2020-10-25 08:11:08 +01:00
|
|
|
|
2022-04-29 03:21:02 +02:00
|
|
|
function send() {
|
|
|
|
sending.value = true;
|
|
|
|
const requestBody = JSON5.parse(body.value);
|
2023-04-08 02:01:42 +02:00
|
|
|
os.api(
|
|
|
|
endpoint.value as keyof Endpoints,
|
|
|
|
requestBody,
|
2023-10-02 09:43:48 +02:00
|
|
|
null,
|
|
|
|
withCredential.value,
|
2023-04-08 02:01:42 +02:00
|
|
|
).then(
|
|
|
|
(resp) => {
|
|
|
|
sending.value = false;
|
|
|
|
res.value = JSON5.stringify(resp, null, 2);
|
|
|
|
},
|
|
|
|
(err) => {
|
|
|
|
sending.value = false;
|
|
|
|
res.value = JSON5.stringify(err, null, 2);
|
2023-07-06 03:28:27 +02:00
|
|
|
},
|
2023-04-08 02:01:42 +02:00
|
|
|
);
|
2022-04-29 03:21:02 +02:00
|
|
|
}
|
2020-10-25 08:11:08 +01:00
|
|
|
|
2022-04-29 03:21:02 +02:00
|
|
|
function onEndpointChange() {
|
2023-04-08 02:01:42 +02:00
|
|
|
os.api(
|
|
|
|
"endpoint",
|
|
|
|
{ endpoint: endpoint.value },
|
2023-07-06 03:28:27 +02:00
|
|
|
withCredential.value ? undefined : null,
|
2023-04-08 02:01:42 +02:00
|
|
|
).then((resp) => {
|
2022-04-29 03:21:02 +02:00
|
|
|
const endpointBody = {};
|
|
|
|
for (const p of resp.params) {
|
|
|
|
endpointBody[p.name] =
|
2023-04-08 02:01:42 +02:00
|
|
|
p.type === "String"
|
|
|
|
? ""
|
|
|
|
: p.type === "Number"
|
|
|
|
? 0
|
|
|
|
: p.type === "Boolean"
|
|
|
|
? false
|
|
|
|
: p.type === "Array"
|
|
|
|
? []
|
|
|
|
: p.type === "Object"
|
|
|
|
? {}
|
|
|
|
: null;
|
2022-04-29 03:21:02 +02:00
|
|
|
}
|
|
|
|
body.value = JSON5.stringify(endpointBody, null, 2);
|
|
|
|
});
|
|
|
|
}
|
2020-10-25 08:11:08 +01:00
|
|
|
|
2023-08-12 02:44:46 +02:00
|
|
|
const headerActions = computed(() => []);
|
2022-06-20 10:38:49 +02:00
|
|
|
|
2023-08-12 02:44:46 +02:00
|
|
|
const headerTabs = computed(() => []);
|
2022-06-20 10:38:49 +02:00
|
|
|
|
|
|
|
definePageMetadata({
|
2023-04-08 02:01:42 +02:00
|
|
|
title: "API console",
|
|
|
|
icon: "ph-terminal-window ph-bold ph-lg",
|
2020-10-25 08:11:08 +01:00
|
|
|
});
|
|
|
|
</script>
|