diff --git a/package.json b/package.json index f463aca8..68103e0a 100644 --- a/package.json +++ b/package.json @@ -86,9 +86,9 @@ "zhi-blog-api": "^1.56.2", "zhi-common": "^1.31.0", "zhi-device": "^2.11.0", - "zhi-fetch-middleware": "^0.8.0", + "zhi-fetch-middleware": "^0.8.2", "zhi-github-middleware": "^0.4.15", - "zhi-gitlab-middleware": "^0.6.26", + "zhi-gitlab-middleware": "^0.6.28", "zhi-lib-base": "^0.8.0", "zhi-notion-markdown": "^0.1.4", "zhi-siyuan-api": "^2.18.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d8458303..259b3a97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,14 +99,14 @@ dependencies: specifier: ^2.11.0 version: 2.11.0 zhi-fetch-middleware: - specifier: ^0.8.0 - version: 0.8.0(typescript@5.4.2) + specifier: ^0.8.2 + version: 0.8.2(typescript@5.4.2) zhi-github-middleware: specifier: ^0.4.15 version: 0.4.15(typescript@5.4.2) zhi-gitlab-middleware: - specifier: ^0.6.26 - version: 0.6.26(typescript@5.4.2) + specifier: ^0.6.28 + version: 0.6.28(typescript@5.4.2) zhi-lib-base: specifier: ^0.8.0 version: 0.8.0 @@ -959,8 +959,8 @@ packages: engines: {node: '>=6.0.0'} dev: true - /@jridgewell/source-map@0.3.5: - resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 @@ -1192,104 +1192,104 @@ packages: picomatch: 2.3.1 dev: true - /@rollup/rollup-android-arm-eabi@4.12.1: - resolution: {integrity: sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==} + /@rollup/rollup-android-arm-eabi@4.13.0: + resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} cpu: [arm] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-android-arm64@4.12.1: - resolution: {integrity: sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==} + /@rollup/rollup-android-arm64@4.13.0: + resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} cpu: [arm64] os: [android] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-arm64@4.12.1: - resolution: {integrity: sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==} + /@rollup/rollup-darwin-arm64@4.13.0: + resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-darwin-x64@4.12.1: - resolution: {integrity: sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==} + /@rollup/rollup-darwin-x64@4.13.0: + resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.12.1: - resolution: {integrity: sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==} + /@rollup/rollup-linux-arm-gnueabihf@4.13.0: + resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} cpu: [arm] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-gnu@4.12.1: - resolution: {integrity: sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==} + /@rollup/rollup-linux-arm64-gnu@4.13.0: + resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-arm64-musl@4.12.1: - resolution: {integrity: sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==} + /@rollup/rollup-linux-arm64-musl@4.13.0: + resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-riscv64-gnu@4.12.1: - resolution: {integrity: sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==} + /@rollup/rollup-linux-riscv64-gnu@4.13.0: + resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} cpu: [riscv64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-gnu@4.12.1: - resolution: {integrity: sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==} + /@rollup/rollup-linux-x64-gnu@4.13.0: + resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-linux-x64-musl@4.12.1: - resolution: {integrity: sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==} + /@rollup/rollup-linux-x64-musl@4.13.0: + resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-arm64-msvc@4.12.1: - resolution: {integrity: sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==} + /@rollup/rollup-win32-arm64-msvc@4.13.0: + resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-ia32-msvc@4.12.1: - resolution: {integrity: sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==} + /@rollup/rollup-win32-ia32-msvc@4.13.0: + resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} cpu: [ia32] os: [win32] requiresBuild: true dev: true optional: true - /@rollup/rollup-win32-x64-msvc@4.12.1: - resolution: {integrity: sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==} + /@rollup/rollup-win32-x64-msvc@4.13.0: + resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} cpu: [x64] os: [win32] requiresBuild: true @@ -1448,11 +1448,11 @@ packages: /@types/lodash-es@4.17.12: resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} dependencies: - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.0 dev: false - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} + /@types/lodash@4.17.0: + resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==} dev: false /@types/mdast@3.0.15: @@ -3334,7 +3334,7 @@ packages: '@element-plus/icons-vue': 2.3.1(vue@3.4.21) '@floating-ui/dom': 1.6.3 '@popperjs/core': /@sxzz/popperjs-es@2.11.7 - '@types/lodash': 4.14.202 + '@types/lodash': 4.17.0 '@types/lodash-es': 4.17.12 '@vueuse/core': 9.13.0(vue@3.4.21) async-validator: 4.2.5 @@ -6669,26 +6669,26 @@ packages: - utf-8-validate dev: true - /rollup@4.12.1: - resolution: {integrity: sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==} + /rollup@4.13.0: + resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true dependencies: '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.12.1 - '@rollup/rollup-android-arm64': 4.12.1 - '@rollup/rollup-darwin-arm64': 4.12.1 - '@rollup/rollup-darwin-x64': 4.12.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.12.1 - '@rollup/rollup-linux-arm64-gnu': 4.12.1 - '@rollup/rollup-linux-arm64-musl': 4.12.1 - '@rollup/rollup-linux-riscv64-gnu': 4.12.1 - '@rollup/rollup-linux-x64-gnu': 4.12.1 - '@rollup/rollup-linux-x64-musl': 4.12.1 - '@rollup/rollup-win32-arm64-msvc': 4.12.1 - '@rollup/rollup-win32-ia32-msvc': 4.12.1 - '@rollup/rollup-win32-x64-msvc': 4.12.1 + '@rollup/rollup-android-arm-eabi': 4.13.0 + '@rollup/rollup-android-arm64': 4.13.0 + '@rollup/rollup-darwin-arm64': 4.13.0 + '@rollup/rollup-darwin-x64': 4.13.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 + '@rollup/rollup-linux-arm64-gnu': 4.13.0 + '@rollup/rollup-linux-arm64-musl': 4.13.0 + '@rollup/rollup-linux-riscv64-gnu': 4.13.0 + '@rollup/rollup-linux-x64-gnu': 4.13.0 + '@rollup/rollup-linux-x64-musl': 4.13.0 + '@rollup/rollup-win32-arm64-msvc': 4.13.0 + '@rollup/rollup-win32-ia32-msvc': 4.13.0 + '@rollup/rollup-win32-x64-msvc': 4.13.0 fsevents: 2.3.3 dev: true @@ -7183,7 +7183,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - '@jridgewell/source-map': 0.3.5 + '@jridgewell/source-map': 0.3.6 acorn: 8.11.3 commander: 2.20.3 source-map-support: 0.5.21 @@ -7761,7 +7761,7 @@ packages: '@types/node': 18.19.23 esbuild: 0.19.12 postcss: 8.4.35 - rollup: 4.12.1 + rollup: 4.13.0 stylus: 0.63.0 optionalDependencies: fsevents: 2.3.3 @@ -8218,8 +8218,8 @@ packages: - typescript dev: false - /zhi-fetch-middleware@0.8.0(typescript@5.4.2): - resolution: {integrity: sha512-peaAG0hSXNvld3dd5RNKYXhuoGcBsOMyFlExGeS98k7ikDVY4JF3S6vTw3Xg0Feu61Jik84q7z4AYEGOVuV5Og==} + /zhi-fetch-middleware@0.8.2(typescript@5.4.2): + resolution: {integrity: sha512-W7hkvQqDTwqnfHLTIdtUgG2SnUqbiQNQdLf7K3psz+N6ngFS0t6F2jQk3jEn6CkS5WrjVkWbT5CpsK2ffaZuGw==} dependencies: zhi-common: 1.31.0(typescript@5.4.2) zhi-device: 2.11.0 @@ -8239,10 +8239,10 @@ packages: - typescript dev: false - /zhi-gitlab-middleware@0.6.26(typescript@5.4.2): - resolution: {integrity: sha512-uBsYtJKVWZ7Gml+MnsNfbgLbhLe1r02VKhKZxcHX1MRCejq5+RVQipzshb2KrvVViKl4yrqJEdmqYGxkjKoYkQ==} + /zhi-gitlab-middleware@0.6.28(typescript@5.4.2): + resolution: {integrity: sha512-abb/OaL6AoZGLCE9A2DkfnKtOe76UKL3KpGyg0NK5PviaMktcYVVQhRLXpo7PHbf/iaDUivBzHf2YIgUOcWW4w==} dependencies: - zhi-fetch-middleware: 0.8.0(typescript@5.4.2) + zhi-fetch-middleware: 0.8.2(typescript@5.4.2) zhi-lib-base: 0.8.0 transitivePeerDependencies: - typescript diff --git a/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts b/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts index 40b7446c..5047706b 100644 --- a/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts +++ b/src/adaptors/api/base/metaweblog/metaweblogBlogApiAdaptor.ts @@ -40,7 +40,7 @@ import { useProxy } from "~/src/composables/useProxy.ts" * @since 0.9.0 */ class MetaweblogBlogApiAdaptor extends BaseBlogApi { - private readonly proxyXmlrpc: any + protected readonly proxyXmlrpc: any /** * 初始化 metaweblog API 适配器 diff --git a/src/adaptors/api/wordpress/wordpressApiAdaptor.ts b/src/adaptors/api/wordpress/wordpressApiAdaptor.ts index 417eedf9..57ebfb07 100644 --- a/src/adaptors/api/wordpress/wordpressApiAdaptor.ts +++ b/src/adaptors/api/wordpress/wordpressApiAdaptor.ts @@ -36,6 +36,8 @@ import { MetaweblogBlogApiAdaptor } from "~/src/adaptors/api/base/metaweblog/met * @since 0.9.0 */ class WordpressApiAdaptor extends MetaweblogBlogApiAdaptor { + private NEED_PROXY_BLOGS = ["wordpress.com"] + /** * 初始化 WordPress API 适配器 * @@ -47,5 +49,22 @@ class WordpressApiAdaptor extends MetaweblogBlogApiAdaptor { this.logger = createAppLogger("wordpress-api-adaptor") this.cfg.blogid = "wordpress" } + + /** + * WordPress API 调用 + * + * @param method 方法名 + * @param params 参数 + * @returns 返回值 + */ + protected override async metaweblogCall(method: string, params: any[]) { + const url = new URL(this.cfg.apiUrl) + const mainDomain = url.hostname.match(/[^.]+\.[^.]+$/)[0] + if (this.NEED_PROXY_BLOGS.includes(mainDomain)) { + return await this.proxyXmlrpc(this.cfg.apiUrl, method, params, true) + } + return await this.proxyXmlrpc(this.cfg.apiUrl, method, params) + } } + export { WordpressApiAdaptor } diff --git a/src/composables/useProxy.ts b/src/composables/useProxy.ts index 92e54e6d..3cd657d4 100644 --- a/src/composables/useProxy.ts +++ b/src/composables/useProxy.ts @@ -74,8 +74,24 @@ const useProxy = (middlewareUrl?: string, corsProxyUrl?: string) => { contentType: string = "application/json", forceProxy: boolean = false ) => { - const siyuanSupported = ["application/json", "text/html", "text/xml", ""] - if (!forceProxy && isUseSiyuanProxy && siyuanSupported.includes(contentType)) { + const siyuanSupported = ["application/json", "text/html", "text/xml"] + if (forceProxy || !isUseSiyuanProxy || !siyuanSupported.includes(contentType)) { + logger.info("Using middleware proxy") + const header = headers.length > 0 ? headers[0] : {} + const fetchOptions = { + method: method, + headers: { + "Content-Type": contentType, + ...header, + }, + body: params, + } + logger.info("commonFetchClient url in proxyFetch =>", url) + logger.info("commonFetchClient fetchOptions in proxyFetch =>", fetchOptions) + const res = await commonFetchClient.fetchCall(url, fetchOptions, forceProxy) + logger.debug("Result of proxyFetch in commonFetchClient =>", res) + return res + } else { logger.info("Using Siyuan forwardProxy, contentType=>", contentType) let body: any if (typeof params === "string" && !StrUtil.isEmptyString(params)) { @@ -130,21 +146,6 @@ const useProxy = (middlewareUrl?: string, corsProxyUrl?: string) => { logger.info("SiYuan proxy directly response fetchResult for content type:", contentType) return fetchResult } - } else { - logger.info("Using middleware proxy") - const header = headers.length > 0 ? headers[0] : {} - const fetchOptions = { - method: method, - headers: { - "Content-Type": contentType, - ...header, - }, - } - logger.info("commonFetchClient url in proxyFetch =>", url) - logger.info("commonFetchClient fetchOptions in proxyFetch =>", fetchOptions) - const res = await commonFetchClient.fetchCall(url, fetchOptions, forceProxy) - logger.debug("Result of proxyFetch in commonFetchClient =>", res) - return res } } @@ -154,11 +155,17 @@ const useProxy = (middlewareUrl?: string, corsProxyUrl?: string) => { * @param url - xmlrpc 端点地址 * @param reqMethod - 请求的方法名 * @param reqParams - 请求的参数 + * @param forceProxy - 是否强制使用代理 */ - const proxyXmlrpc = async (url: string, reqMethod: string, reqParams: any[]) => { + const proxyXmlrpc = async (url: string, reqMethod: string, reqParams: any[], forceProxy: boolean = false) => { const body = serializer.serializeMethodCall(reqMethod, reqParams) - const res = await proxyFetch(url, [], body, "POST", "text/xml") - let resText = res + let resText: string + if (forceProxy) { + const res = await proxyFetch(url, [], body, "POST", "text/xml", forceProxy) + resText = await res?.body["xml-body"] + } else { + resText = await proxyFetch(url, [], body, "POST", "text/xml", forceProxy) + } resText = XmlrpcUtil.removeXmlHeader(resText) const deserializer = new Deserializer() const resJson = await deserializer.deserializeMethodResponse(resText)