| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import type { AxiosResponse } from 'axios'
- import type { LeagdoApiResponse } from './api'
- import API, {
- setWebsocketOnError,
- setApiEntryPoint,
- legado_http_entry_point,
- setWebsocketOnMessage,
- } from './api'
- import ajax from './axios'
- import { validatorHttpUrl } from '@/utils/utils'
- import { createApp } from 'vue'
- import App from '@/App.vue'
- import store, { useConnectionStore } from '@/store'
- createApp(App).use(store)
- const connectionStore = useConnectionStore()
- const LeagdoApiResponseKeys: string[] = Array.of('isSuccess', 'errorMsg')
- const notification = ElMessage
- /** Axios.Interceptor: check if resp is LeagaoLeagdoApiResponse*/
- const responseCheckInterceptor = (resp: AxiosResponse) => {
- let isLeagdoApiResponse = true
- try {
- const data = resp.data
- for (const key of LeagdoApiResponseKeys) {
- if (!(key in data)) {
- isLeagdoApiResponse = false
- LeagdoApiResponseKeys.length = 0
- }
- }
- if ((data as LeagdoApiResponse<unknown>).isSuccess === true) {
- if (!('data' in data)) {
- isLeagdoApiResponse = false
- }
- }
- } catch {
- isLeagdoApiResponse = false
- }
- if (isLeagdoApiResponse === false) {
- notification.warning({ message: '后端返回内容格式错误', grouping: true })
- throw new Error()
- }
- connectionStore.setConnectType('primary')
- connectionStore.setConnectStatus('已连接 ' + legado_http_entry_point)
- return resp
- }
- const axiosErrorInterceptor = (err: unknown) => {
- notification.error({
- message: '后端连接失败,请检查阅读WEB服务或者设置其它可用链接',
- grouping: true,
- })
- connectionStore.setConnectType('danger')
- connectionStore.setConnectStatus('连接异常')
- throw err
- }
- // http全局
- ajax.interceptors.response.use(responseCheckInterceptor, axiosErrorInterceptor)
- // websocket
- setWebsocketOnError(axiosErrorInterceptor)
- setWebsocketOnMessage(() => {
- connectionStore.setConnectType('primary')
- connectionStore.setConnectStatus('已连接 ' + legado_http_entry_point)
- })
- /**
- * 按照阅读的默认规则 解析阅读HTTP WebSocket API入口地址
- * @returns [http_url, webSocekt_url]
- */
- export const parseLeagdoHttpUrlWithDefault = (
- http_url: string | URL,
- ): [string, string] => {
- let url = new URL(location.origin) //默认当前网址的origin部分
- if (validatorHttpUrl(http_url)) {
- url = new URL(http_url)
- }
- const { protocol, port } = url
- // websocket服务端口 为http服务端口 + 1
- let legado_webSocket_port
- if (port !== '') {
- legado_webSocket_port = String(Number(port) + 1)
- } else {
- legado_webSocket_port = protocol.startsWith('https:') ? '444' : '81'
- }
- // websocket协议是否为加密版本
- const legado_webSocket_protocol = protocol.startsWith('https:')
- ? 'wss://'
- : 'ws://'
- const http_entry_point = url.toString()
- url.protocol = legado_webSocket_protocol
- url.port = legado_webSocket_port
- const webSocket_entry_point = url.toString()
- console.info('legado_api_config:')
- console.table({
- 'http API入口': http_entry_point,
- 'webSocket API入口': webSocket_entry_point,
- })
- return [http_entry_point, webSocket_entry_point]
- }
- //export const useLeagdoRemoteUrlDialog = () => { }
- setApiEntryPoint(
- ...parseLeagdoHttpUrlWithDefault(ajax.defaults.baseURL as string),
- )
- export default API
- export * from './api'
|