diff --git a/openapitools.json b/openapitools.json new file mode 100644 index 0000000..5571688 --- /dev/null +++ b/openapitools.json @@ -0,0 +1,7 @@ +{ + "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "7.4.0" + } +} diff --git a/package.json b/package.json index b623ead..149cf00 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "dev": "vite", "build": "vue-tsc --noEmit && vite build", "preview": "vite preview", - "lint": "eslint . --fix --ignore-path .gitignore" + "lint": "eslint . --fix --ignore-path .gitignore", + "gen": "openapi-generator-cli generate -i src/api/swagger.json -g typescript-axios -o src/api" }, "dependencies": { "@mdi/font": "6.2.95", diff --git a/src/api/.gitignore b/src/api/.gitignore new file mode 100644 index 0000000..149b576 --- /dev/null +++ b/src/api/.gitignore @@ -0,0 +1,4 @@ +wwwroot/*.js +node_modules +typings +dist diff --git a/src/api/.npmignore b/src/api/.npmignore new file mode 100644 index 0000000..999d88d --- /dev/null +++ b/src/api/.npmignore @@ -0,0 +1 @@ +# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm \ No newline at end of file diff --git a/src/api/.openapi-generator-ignore b/src/api/.openapi-generator-ignore new file mode 100644 index 0000000..7484ee5 --- /dev/null +++ b/src/api/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/src/api/.openapi-generator/FILES b/src/api/.openapi-generator/FILES new file mode 100644 index 0000000..16b445e --- /dev/null +++ b/src/api/.openapi-generator/FILES @@ -0,0 +1,9 @@ +.gitignore +.npmignore +.openapi-generator-ignore +api.ts +base.ts +common.ts +configuration.ts +git_push.sh +index.ts diff --git a/src/api/.openapi-generator/VERSION b/src/api/.openapi-generator/VERSION new file mode 100644 index 0000000..ba7f754 --- /dev/null +++ b/src/api/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.4.0 diff --git a/src/api/api.ts b/src/api/api.ts new file mode 100644 index 0000000..cc4ae59 --- /dev/null +++ b/src/api/api.ts @@ -0,0 +1,622 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * MC Search API + * MC Search API 服务 + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import type { Configuration } from './configuration'; +import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; +import globalAxios from 'axios'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +import type { RequestArgs } from './base'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, BaseAPI, RequiredError, operationServerMap } from './base'; + +/** + * + * @export + * @interface ModelPendingLink + */ +export interface ModelPendingLink { + /** + * + * @type {string} + * @memberof ModelPendingLink + */ + 'CreatedAt'?: string; + /** + * + * @type {string} + * @memberof ModelPendingLink + */ + 'DeletedAt'?: string; + /** + * + * @type {string} + * @memberof ModelPendingLink + */ + 'FailedReason'?: string; + /** + * + * @type {number} + * @memberof ModelPendingLink + */ + 'Id'?: number; + /** + * UserId uint `xorm:\"unsigned\"` + * @type {string} + * @memberof ModelPendingLink + */ + 'LastModify'?: string; + /** + * + * @type {number} + * @memberof ModelPendingLink + */ + 'Retries'?: number; + /** + * + * @type {number} + * @memberof ModelPendingLink + */ + 'SpiderId'?: number; + /** + * + * @type {number} + * @memberof ModelPendingLink + */ + 'StatusCode'?: number; + /** + * + * @type {string} + * @memberof ModelPendingLink + */ + 'UpdatedAt'?: string; + /** + * + * @type {string} + * @memberof ModelPendingLink + */ + 'Url'?: string; + /** + * + * @type {string} + * @memberof ModelPendingLink + */ + 'UrlHash'?: string; +} +/** + * + * @export + * @interface ModelSpiderPublic + */ +export interface ModelSpiderPublic { + /** + * + * @type {string} + * @memberof ModelSpiderPublic + */ + 'CreatedAt'?: string; + /** + * + * @type {string} + * @memberof ModelSpiderPublic + */ + 'DeletedAt'?: string; + /** + * + * @type {number} + * @memberof ModelSpiderPublic + */ + 'Id'?: number; + /** + * + * @type {string} + * @memberof ModelSpiderPublic + */ + 'Ip'?: string; + /** + * + * @type {string} + * @memberof ModelSpiderPublic + */ + 'Name'?: string; + /** + * + * @type {string} + * @memberof ModelSpiderPublic + */ + 'Status'?: string; + /** + * + * @type {string} + * @memberof ModelSpiderPublic + */ + 'UpdatedAt'?: string; + /** + * + * @type {number} + * @memberof ModelSpiderPublic + */ + 'UserId'?: number; +} +/** + * + * @export + * @interface SpiderAllSpidersResponse + */ +export interface SpiderAllSpidersResponse { + /** + * + * @type {number} + * @memberof SpiderAllSpidersResponse + */ + 'Page'?: number; + /** + * + * @type {Array} + * @memberof SpiderAllSpidersResponse + */ + 'Spiders'?: Array; + /** + * + * @type {number} + * @memberof SpiderAllSpidersResponse + */ + 'Total'?: number; + /** + * + * @type {number} + * @memberof SpiderAllSpidersResponse + */ + 'TotalPages'?: number; +} +/** + * + * @export + * @interface SpiderCreateSpiderRequest + */ +export interface SpiderCreateSpiderRequest { + /** + * + * @type {string} + * @memberof SpiderCreateSpiderRequest + */ + 'name': string; +} +/** + * + * @export + * @interface SpiderGetSpiderResponse + */ +export interface SpiderGetSpiderResponse { + /** + * + * @type {ModelSpiderPublic} + * @memberof SpiderGetSpiderResponse + */ + 'spider'?: ModelSpiderPublic; +} +/** + * + * @export + * @interface SpiderSpiderPushLinkRequest + */ +export interface SpiderSpiderPushLinkRequest { + /** + * + * @type {string} + * @memberof SpiderSpiderPushLinkRequest + */ + 'LastModify'?: string; + /** + * + * @type {string} + * @memberof SpiderSpiderPushLinkRequest + */ + 'Url'?: string; +} + +/** + * SpiderApi - axios parameter creator + * @export + */ +export const SpiderApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary 查看指定的蜘蛛(仅能当前账户) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSpidersGet: async (options: RawAxiosRequestConfig = {}): Promise => { + const localVarPath = `/api/spiders`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication BearerToken required + await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 获取蜘蛛的 Token + * @param {number} id + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSpidersIdTokenGet: async (id: number, options: RawAxiosRequestConfig = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('apiSpidersIdTokenGet', 'id', id) + const localVarPath = `/api/spiders/:Id/token`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication BearerToken required + await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration) + + if (id !== undefined) { + localVarQueryParameter['Id'] = id; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 创建一个蜘蛛 + * @param {SpiderCreateSpiderRequest} payload 创建蜘蛛 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSpidersPost: async (payload: SpiderCreateSpiderRequest, options: RawAxiosRequestConfig = {}): Promise => { + // verify required parameter 'payload' is not null or undefined + assertParamExists('apiSpidersPost', 'payload', payload) + const localVarPath = `/api/spiders`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication BearerToken required + await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(payload, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary 获取下一个链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + devicesSpidersLinksGet: async (options: RawAxiosRequestConfig = {}): Promise => { + const localVarPath = `/devices/spiders/links`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication BearerTokenSpider required + await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * 爬虫探测到链接后,将提交链接。 + * @summary 爬虫提交链接 + * @param {SpiderSpiderPushLinkRequest} payload 爬虫提交链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + devicesSpidersLinksPost: async (payload: SpiderSpiderPushLinkRequest, options: RawAxiosRequestConfig = {}): Promise => { + // verify required parameter 'payload' is not null or undefined + assertParamExists('devicesSpidersLinksPost', 'payload', payload) + const localVarPath = `/devices/spiders/links`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication BearerTokenSpider required + await setApiKeyToObject(localVarHeaderParameter, "Authorization", configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(payload, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SpiderApi - functional programming interface + * @export + */ +export const SpiderApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SpiderApiAxiosParamCreator(configuration) + return { + /** + * + * @summary 查看指定的蜘蛛(仅能当前账户) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSpidersGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.apiSpidersGet(options); + const localVarOperationServerIndex = configuration?.serverIndex ?? 0; + const localVarOperationServerBasePath = operationServerMap['SpiderApi.apiSpidersGet']?.[localVarOperationServerIndex]?.url; + return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); + }, + /** + * + * @summary 获取蜘蛛的 Token + * @param {number} id + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSpidersIdTokenGet(id: number, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.apiSpidersIdTokenGet(id, options); + const localVarOperationServerIndex = configuration?.serverIndex ?? 0; + const localVarOperationServerBasePath = operationServerMap['SpiderApi.apiSpidersIdTokenGet']?.[localVarOperationServerIndex]?.url; + return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); + }, + /** + * + * @summary 创建一个蜘蛛 + * @param {SpiderCreateSpiderRequest} payload 创建蜘蛛 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async apiSpidersPost(payload: SpiderCreateSpiderRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.apiSpidersPost(payload, options); + const localVarOperationServerIndex = configuration?.serverIndex ?? 0; + const localVarOperationServerBasePath = operationServerMap['SpiderApi.apiSpidersPost']?.[localVarOperationServerIndex]?.url; + return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); + }, + /** + * + * @summary 获取下一个链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async devicesSpidersLinksGet(options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.devicesSpidersLinksGet(options); + const localVarOperationServerIndex = configuration?.serverIndex ?? 0; + const localVarOperationServerBasePath = operationServerMap['SpiderApi.devicesSpidersLinksGet']?.[localVarOperationServerIndex]?.url; + return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); + }, + /** + * 爬虫探测到链接后,将提交链接。 + * @summary 爬虫提交链接 + * @param {SpiderSpiderPushLinkRequest} payload 爬虫提交链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async devicesSpidersLinksPost(payload: SpiderSpiderPushLinkRequest, options?: RawAxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.devicesSpidersLinksPost(payload, options); + const localVarOperationServerIndex = configuration?.serverIndex ?? 0; + const localVarOperationServerBasePath = operationServerMap['SpiderApi.devicesSpidersLinksPost']?.[localVarOperationServerIndex]?.url; + return (axios, basePath) => createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration)(axios, localVarOperationServerBasePath || basePath); + }, + } +}; + +/** + * SpiderApi - factory interface + * @export + */ +export const SpiderApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SpiderApiFp(configuration) + return { + /** + * + * @summary 查看指定的蜘蛛(仅能当前账户) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSpidersGet(options?: any): AxiosPromise { + return localVarFp.apiSpidersGet(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 获取蜘蛛的 Token + * @param {number} id + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSpidersIdTokenGet(id: number, options?: any): AxiosPromise { + return localVarFp.apiSpidersIdTokenGet(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 创建一个蜘蛛 + * @param {SpiderCreateSpiderRequest} payload 创建蜘蛛 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + apiSpidersPost(payload: SpiderCreateSpiderRequest, options?: any): AxiosPromise { + return localVarFp.apiSpidersPost(payload, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary 获取下一个链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + devicesSpidersLinksGet(options?: any): AxiosPromise { + return localVarFp.devicesSpidersLinksGet(options).then((request) => request(axios, basePath)); + }, + /** + * 爬虫探测到链接后,将提交链接。 + * @summary 爬虫提交链接 + * @param {SpiderSpiderPushLinkRequest} payload 爬虫提交链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + devicesSpidersLinksPost(payload: SpiderSpiderPushLinkRequest, options?: any): AxiosPromise { + return localVarFp.devicesSpidersLinksPost(payload, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SpiderApi - object-oriented interface + * @export + * @class SpiderApi + * @extends {BaseAPI} + */ +export class SpiderApi extends BaseAPI { + /** + * + * @summary 查看指定的蜘蛛(仅能当前账户) + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SpiderApi + */ + public apiSpidersGet(options?: RawAxiosRequestConfig) { + return SpiderApiFp(this.configuration).apiSpidersGet(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary 获取蜘蛛的 Token + * @param {number} id + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SpiderApi + */ + public apiSpidersIdTokenGet(id: number, options?: RawAxiosRequestConfig) { + return SpiderApiFp(this.configuration).apiSpidersIdTokenGet(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary 创建一个蜘蛛 + * @param {SpiderCreateSpiderRequest} payload 创建蜘蛛 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SpiderApi + */ + public apiSpidersPost(payload: SpiderCreateSpiderRequest, options?: RawAxiosRequestConfig) { + return SpiderApiFp(this.configuration).apiSpidersPost(payload, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary 获取下一个链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SpiderApi + */ + public devicesSpidersLinksGet(options?: RawAxiosRequestConfig) { + return SpiderApiFp(this.configuration).devicesSpidersLinksGet(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * 爬虫探测到链接后,将提交链接。 + * @summary 爬虫提交链接 + * @param {SpiderSpiderPushLinkRequest} payload 爬虫提交链接 + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SpiderApi + */ + public devicesSpidersLinksPost(payload: SpiderSpiderPushLinkRequest, options?: RawAxiosRequestConfig) { + return SpiderApiFp(this.configuration).devicesSpidersLinksPost(payload, options).then((request) => request(this.axios, this.basePath)); + } +} + + + diff --git a/src/api/base.ts b/src/api/base.ts new file mode 100644 index 0000000..8bf5fc4 --- /dev/null +++ b/src/api/base.ts @@ -0,0 +1,86 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * MC Search API + * MC Search API 服务 + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import type { Configuration } from './configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import type { AxiosPromise, AxiosInstance, RawAxiosRequestConfig } from 'axios'; +import globalAxios from 'axios'; + +export const BASE_PATH = "http://localhost".replace(/\/+$/, ""); + +/** + * + * @export + */ +export const COLLECTION_FORMATS = { + csv: ",", + ssv: " ", + tsv: "\t", + pipes: "|", +}; + +/** + * + * @export + * @interface RequestArgs + */ +export interface RequestArgs { + url: string; + options: RawAxiosRequestConfig; +} + +/** + * + * @export + * @class BaseAPI + */ +export class BaseAPI { + protected configuration: Configuration | undefined; + + constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) { + if (configuration) { + this.configuration = configuration; + this.basePath = configuration.basePath ?? basePath; + } + } +}; + +/** + * + * @export + * @class RequiredError + * @extends {Error} + */ +export class RequiredError extends Error { + constructor(public field: string, msg?: string) { + super(msg); + this.name = "RequiredError" + } +} + +interface ServerMap { + [key: string]: { + url: string, + description: string, + }[]; +} + +/** + * + * @export + */ +export const operationServerMap: ServerMap = { +} diff --git a/src/api/common.ts b/src/api/common.ts new file mode 100644 index 0000000..302500b --- /dev/null +++ b/src/api/common.ts @@ -0,0 +1,150 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * MC Search API + * MC Search API 服务 + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import type { Configuration } from "./configuration"; +import type { RequestArgs } from "./base"; +import type { AxiosInstance, AxiosResponse } from 'axios'; +import { RequiredError } from "./base"; + +/** + * + * @export + */ +export const DUMMY_BASE_URL = 'https://example.com' + +/** + * + * @throws {RequiredError} + * @export + */ +export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) { + if (paramValue === null || paramValue === undefined) { + throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`); + } +} + +/** + * + * @export + */ +export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) { + if (configuration && configuration.apiKey) { + const localVarApiKeyValue = typeof configuration.apiKey === 'function' + ? await configuration.apiKey(keyParamName) + : await configuration.apiKey; + object[keyParamName] = localVarApiKeyValue; + } +} + +/** + * + * @export + */ +export const setBasicAuthToObject = function (object: any, configuration?: Configuration) { + if (configuration && (configuration.username || configuration.password)) { + object["auth"] = { username: configuration.username, password: configuration.password }; + } +} + +/** + * + * @export + */ +export const setBearerAuthToObject = async function (object: any, configuration?: Configuration) { + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + object["Authorization"] = "Bearer " + accessToken; + } +} + +/** + * + * @export + */ +export const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) { + if (configuration && configuration.accessToken) { + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? await configuration.accessToken(name, scopes) + : await configuration.accessToken; + object["Authorization"] = "Bearer " + localVarAccessTokenValue; + } +} + +function setFlattenedQueryParams(urlSearchParams: URLSearchParams, parameter: any, key: string = ""): void { + if (parameter == null) return; + if (typeof parameter === "object") { + if (Array.isArray(parameter)) { + (parameter as any[]).forEach(item => setFlattenedQueryParams(urlSearchParams, item, key)); + } + else { + Object.keys(parameter).forEach(currentKey => + setFlattenedQueryParams(urlSearchParams, parameter[currentKey], `${key}${key !== '' ? '.' : ''}${currentKey}`) + ); + } + } + else { + if (urlSearchParams.has(key)) { + urlSearchParams.append(key, parameter); + } + else { + urlSearchParams.set(key, parameter); + } + } +} + +/** + * + * @export + */ +export const setSearchParams = function (url: URL, ...objects: any[]) { + const searchParams = new URLSearchParams(url.search); + setFlattenedQueryParams(searchParams, objects); + url.search = searchParams.toString(); +} + +/** + * + * @export + */ +export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { + const nonString = typeof value !== 'string'; + const needsSerialization = nonString && configuration && configuration.isJsonMime + ? configuration.isJsonMime(requestOptions.headers['Content-Type']) + : nonString; + return needsSerialization + ? JSON.stringify(value !== undefined ? value : {}) + : (value || ""); +} + +/** + * + * @export + */ +export const toPathString = function (url: URL) { + return url.pathname + url.search + url.hash +} + +/** + * + * @export + */ +export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) { + return >(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs = {...axiosArgs.options, url: (axios.defaults.baseURL ? '' : configuration?.basePath ?? basePath) + axiosArgs.url}; + return axios.request(axiosRequestArgs); + }; +} diff --git a/src/api/configuration.ts b/src/api/configuration.ts new file mode 100644 index 0000000..69ad1e6 --- /dev/null +++ b/src/api/configuration.ts @@ -0,0 +1,110 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * MC Search API + * MC Search API 服务 + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface ConfigurationParameters { + apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); + username?: string; + password?: string; + accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); + basePath?: string; + serverIndex?: number; + baseOptions?: any; + formDataCtor?: new () => any; +} + +export class Configuration { + /** + * parameter for apiKey security + * @param name security name + * @memberof Configuration + */ + apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); + /** + * parameter for basic security + * + * @type {string} + * @memberof Configuration + */ + username?: string; + /** + * parameter for basic security + * + * @type {string} + * @memberof Configuration + */ + password?: string; + /** + * parameter for oauth2 security + * @param name security name + * @param scopes oauth2 scope + * @memberof Configuration + */ + accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); + /** + * override base path + * + * @type {string} + * @memberof Configuration + */ + basePath?: string; + /** + * override server index + * + * @type {number} + * @memberof Configuration + */ + serverIndex?: number; + /** + * base options for axios calls + * + * @type {any} + * @memberof Configuration + */ + baseOptions?: any; + /** + * The FormData constructor that will be used to create multipart form data + * requests. You can inject this here so that execution environments that + * do not support the FormData class can still run the generated client. + * + * @type {new () => FormData} + */ + formDataCtor?: new () => any; + + constructor(param: ConfigurationParameters = {}) { + this.apiKey = param.apiKey; + this.username = param.username; + this.password = param.password; + this.accessToken = param.accessToken; + this.basePath = param.basePath; + this.serverIndex = param.serverIndex; + this.baseOptions = param.baseOptions; + this.formDataCtor = param.formDataCtor; + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * application/vnd.company+json + * @param mime - MIME (Multipurpose Internet Mail Extensions) + * @return True if the given MIME is JSON, false otherwise. + */ + public isJsonMime(mime: string): boolean { + const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i'); + return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json'); + } +} diff --git a/src/api/git_push.sh b/src/api/git_push.sh new file mode 100644 index 0000000..f53a75d --- /dev/null +++ b/src/api/git_push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=$(git remote) +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..f439770 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,18 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * MC Search API + * MC Search API 服务 + * + * The version of the OpenAPI document: 1.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export * from "./api"; +export * from "./configuration"; + diff --git a/src/api/swagger.json b/src/api/swagger.json new file mode 100644 index 0000000..fe59878 --- /dev/null +++ b/src/api/swagger.json @@ -0,0 +1,305 @@ +{ + "swagger": "2.0", + "info": { + "description": "MC Search API 服务", + "title": "MC Search API", + "contact": {}, + "version": "1.0" + }, + "paths": { + "/api/spiders": { + "get": { + "security": [ + { + "BearerToken": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Spider" + ], + "summary": "查看指定的蜘蛛(仅能当前账户)", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/spider.getSpiderResponse" + } + } + } + }, + "post": { + "security": [ + { + "BearerToken": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Spider" + ], + "summary": "创建一个蜘蛛", + "parameters": [ + { + "description": "创建蜘蛛", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/spider.createSpiderRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/spider.getSpiderResponse" + } + } + } + } + }, + "/api/spiders/:Id/token": { + "get": { + "security": [ + { + "BearerToken": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Spider" + ], + "summary": "获取蜘蛛的 Token", + "parameters": [ + { + "type": "integer", + "name": "Id", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/spider.getSpiderResponse" + } + } + } + } + }, + "/devices/spiders/links": { + "get": { + "security": [ + { + "BearerTokenSpider": [] + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Spider" + ], + "summary": "获取下一个链接", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/model.PendingLink" + } + } + } + }, + "post": { + "security": [ + { + "BearerTokenSpider": [] + } + ], + "description": "爬虫探测到链接后,将提交链接。", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Spider" + ], + "summary": "爬虫提交链接", + "parameters": [ + { + "description": "爬虫提交链接", + "name": "payload", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/spider.spiderPushLinkRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/model.PendingLink" + } + } + } + } + } + }, + "definitions": { + "model.PendingLink": { + "type": "object", + "properties": { + "CreatedAt": { + "type": "string" + }, + "DeletedAt": { + "type": "string" + }, + "FailedReason": { + "type": "string" + }, + "Id": { + "type": "integer" + }, + "LastModify": { + "description": "UserId uint `xorm:\"unsigned\"`", + "type": "string" + }, + "Retries": { + "type": "integer" + }, + "SpiderId": { + "type": "integer" + }, + "StatusCode": { + "type": "integer" + }, + "UpdatedAt": { + "type": "string" + }, + "Url": { + "type": "string" + }, + "UrlHash": { + "type": "string" + } + } + }, + "model.SpiderPublic": { + "type": "object", + "properties": { + "CreatedAt": { + "type": "string" + }, + "DeletedAt": { + "type": "string" + }, + "Id": { + "type": "integer" + }, + "Ip": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Status": { + "type": "string" + }, + "UpdatedAt": { + "type": "string" + }, + "UserId": { + "type": "integer" + } + } + }, + "spider.allSpidersResponse": { + "type": "object", + "properties": { + "Page": { + "type": "integer" + }, + "Spiders": { + "type": "array", + "items": { + "$ref": "#/definitions/model.SpiderPublic" + } + }, + "Total": { + "type": "integer" + }, + "TotalPages": { + "type": "integer" + } + } + }, + "spider.createSpiderRequest": { + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "type": "string" + } + } + }, + "spider.getSpiderResponse": { + "type": "object", + "properties": { + "spider": { + "$ref": "#/definitions/model.SpiderPublic" + } + } + }, + "spider.spiderPushLinkRequest": { + "type": "object", + "properties": { + "LastModify": { + "type": "string" + }, + "Url": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "BearerToken": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + }, + "BearerTokenSpider": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } +} \ No newline at end of file