{"version":3,"sources":["jsdelivr-header.js","/npm/picgo-plugin-lankong@1.1.3/dist/index.js"],"names":[],"mappings":"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","file":"/npm/picgo-plugin-lankong@1.1.3/dist/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/picgo-plugin-lankong@1.1.3/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst https_1 = __importDefault(require(\"https\"));\r\nconst UPLOADER = 'lankong';\r\nmodule.exports = (ctx) => {\r\n    const register = () => {\r\n        ctx.helper.uploader.register(UPLOADER, {\r\n            handle,\r\n            name: UPLOADER,\r\n            config: config\r\n        });\r\n        // 注册同步删除 remove 事件\r\n        ctx.on('remove', onDelete);\r\n    };\r\n    async function onDelete(files, guiApi) {\r\n        let userConfig = ctx.getConfig('picBed.' + UPLOADER);\r\n        const syncDelete = userConfig.syncDelete;\r\n        // 如果同步删除按钮关闭则不执行\r\n        if (!syncDelete) {\r\n            return;\r\n        }\r\n        const isV2 = userConfig.lskyProVersion === 'V2';\r\n        if (!isV2) {\r\n            ctx.emit('notification', {\r\n                title: `V1版本的兰空图床不支持同步删除, 请关闭同步删除选项以抑制此通知`\r\n            });\r\n        }\r\n        const deleteList = files.filter(each => each.type === UPLOADER);\r\n        if (deleteList.length === 0) {\r\n            return;\r\n        }\r\n        for (let i = 0; i < deleteList.length; i++) {\r\n            const item = deleteList[i];\r\n            const deleteParam = GenDeleteParam(item, userConfig);\r\n            let body = await ctx.Request.request(deleteParam);\r\n            body = JSON.parse(body);\r\n            if (body.status === true) {\r\n                ctx.emit('notification', {\r\n                    title: `${item.imgUrl} 同步删除成功`,\r\n                    body: body.message\r\n                });\r\n            }\r\n            else {\r\n                ctx.emit('notification', {\r\n                    title: `${item.imgUrl} 同步删除失败`,\r\n                    body: body.message\r\n                });\r\n                throw new Error(body.message);\r\n            }\r\n        }\r\n    }\r\n    const GenDeleteParam = (img, userConfig) => {\r\n        const token = userConfig.token;\r\n        const ignoreCertErr = userConfig.ignoreCertErr;\r\n        const serverUrl = userConfig.server;\r\n        const currentImageKey = img.id;\r\n        const v2Headers = {\r\n            'Accept': 'application/json',\r\n            'User-Agent': 'PicGo',\r\n            'Connection': 'keep-alive',\r\n            'Authorization': token || undefined\r\n        };\r\n        // 如果忽略证书错误开关打开则带上 http agent 访问, 否则不需要带（以提高性能）\r\n        if (ignoreCertErr) {\r\n            let requestAgent = new https_1.default.Agent({\r\n                // 此处需要取反 忽略证书错误 拒绝未授权证书选项\r\n                rejectUnauthorized: !ignoreCertErr\r\n            });\r\n            return {\r\n                method: 'DELETE',\r\n                url: `${serverUrl}/api/v1/images/${currentImageKey}`,\r\n                agent: requestAgent,\r\n                headers: v2Headers\r\n            };\r\n        }\r\n        else {\r\n            return {\r\n                method: 'DELETE',\r\n                url: `${serverUrl}/api/v1/images/${currentImageKey}`,\r\n                headers: v2Headers\r\n            };\r\n        }\r\n    };\r\n    const postOptions = (userConfig, fileName, image) => {\r\n        const serverUrl = userConfig.server;\r\n        if (serverUrl.endsWith(\"/\")) {\r\n            throw new Error(\"Server url cannot ends with /\");\r\n        }\r\n        const isV2 = userConfig.lskyProVersion === 'V2';\r\n        const token = userConfig.token;\r\n        const ignoreCertErr = userConfig.ignoreCertErr;\r\n        const v1Headers = {\r\n            'Content-Type': 'multipart/form-data',\r\n            'User-Agent': 'PicGo',\r\n            'Connection': 'keep-alive',\r\n            'token': token || undefined\r\n        };\r\n        const v1FormData = {\r\n            image: {\r\n                value: image,\r\n                options: {\r\n                    filename: fileName\r\n                }\r\n            },\r\n            ssl: 'true'\r\n        };\r\n        const v2Headers = {\r\n            'Content-Type': 'multipart/form-data',\r\n            'User-Agent': 'PicGo',\r\n            'Connection': 'keep-alive',\r\n            'Accept': 'application/json',\r\n            'Authorization': token || undefined\r\n        };\r\n        const strategyId = userConfig.strategyId;\r\n        const albumId = userConfig.albumId;\r\n        let permission = userConfig.permission.value;\r\n        if (permission === undefined) {\r\n            permission = userConfig.permission;\r\n        }\r\n        const v2FormData = {\r\n            file: {\r\n                value: image,\r\n                options: {\r\n                    filename: fileName\r\n                }\r\n            },\r\n            ssl: 'true',\r\n            strategy_id: strategyId,\r\n            album_id: albumId,\r\n            permission: permission\r\n        };\r\n        // V2版本情况下, 如果用户没有填写策略ID, 删除 v2FormData 中的 key: strategy_id\r\n        if (!strategyId) {\r\n            delete v2FormData.strategy_id;\r\n        }\r\n        if (!albumId) {\r\n            delete v2FormData.album_id;\r\n        }\r\n        if (!(permission === 0 || permission === 1)) {\r\n            delete v2FormData.permission;\r\n        }\r\n        // 如果忽略证书错误开关打开则带上 http agent 访问, 否则不需要带（以提高性能）\r\n        if (ignoreCertErr) {\r\n            let requestAgent = new https_1.default.Agent({\r\n                // 此处需要取反 忽略证书错误 拒绝未授权证书选项\r\n                rejectUnauthorized: !ignoreCertErr\r\n            });\r\n            return {\r\n                method: 'POST',\r\n                url: isV2 ? `${serverUrl}/api/v1/upload` : `${serverUrl}/api/upload`,\r\n                agent: requestAgent,\r\n                headers: isV2 ? v2Headers : v1Headers,\r\n                formData: isV2 ? v2FormData : v1FormData\r\n            };\r\n        }\r\n        else {\r\n            return {\r\n                method: 'POST',\r\n                url: isV2 ? `${serverUrl}/api/v1/upload` : `${serverUrl}/api/upload`,\r\n                headers: isV2 ? v2Headers : v1Headers,\r\n                formData: isV2 ? v2FormData : v1FormData\r\n            };\r\n        }\r\n    };\r\n    const handle = async (ctx) => {\r\n        let userConfig = ctx.getConfig('picBed.' + UPLOADER);\r\n        if (!userConfig) {\r\n            throw new Error('Can\\'t find uploader config');\r\n        }\r\n        const imgList = ctx.output;\r\n        for (let i in imgList) {\r\n            let image = imgList[i].buffer;\r\n            if (!image && imgList[i].base64Image) {\r\n                image = Buffer.from(imgList[i].base64Image, 'base64');\r\n            }\r\n            const postConfig = postOptions(userConfig, imgList[i].fileName, image);\r\n            let body = await ctx.Request.request(postConfig);\r\n            body = JSON.parse(body);\r\n            let isV2 = userConfig.lskyProVersion === 'V2';\r\n            let condition = isV2 ? (body.status === true) : (body.code === 200);\r\n            if (condition) {\r\n                delete imgList[i].base64Image;\r\n                delete imgList[i].buffer;\r\n                imgList[i]['imgUrl'] = isV2 ? body.data.links.url : body.data.url;\r\n                if (isV2) {\r\n                    imgList[i]['id'] = body.data.key;\r\n                }\r\n            }\r\n            else {\r\n                ctx.emit('notification', {\r\n                    title: 'upload failed',\r\n                    body: body.message\r\n                });\r\n                throw new Error(body.message);\r\n            }\r\n        }\r\n        return ctx;\r\n    };\r\n    const config = ctx => {\r\n        let userConfig = ctx.getConfig('picBed.' + UPLOADER);\r\n        if (!userConfig) {\r\n            userConfig = {};\r\n        }\r\n        return [\r\n            {\r\n                name: 'lskyProVersion',\r\n                type: 'list',\r\n                default: userConfig.lskyProVersion || 'V1',\r\n                message: 'Choose a version',\r\n                choices: [\r\n                    {\r\n                        name: 'V1',\r\n                        value: 'V1'\r\n                    },\r\n                    {\r\n                        name: 'V2',\r\n                        value: 'V2'\r\n                    }\r\n                ],\r\n                required: true,\r\n                alias: 'Lsky Pro Version'\r\n            },\r\n            {\r\n                name: 'server',\r\n                type: 'input',\r\n                default: userConfig.server,\r\n                required: true,\r\n                message: '示例: https://example.com',\r\n                alias: 'Server'\r\n            },\r\n            {\r\n                name: 'token',\r\n                type: 'input',\r\n                default: userConfig.token,\r\n                required: true,\r\n                message: '认证 token 信息',\r\n                alias: 'Auth token'\r\n            },\r\n            {\r\n                name: 'strategyId',\r\n                type: 'input',\r\n                default: userConfig.strategyId,\r\n                required: false,\r\n                message: '选填, V1以及V2使用默认存储策略时请留空',\r\n                alias: 'Strategy ID'\r\n            },\r\n            {\r\n                name: 'albumId',\r\n                type: 'input',\r\n                default: userConfig.albumId,\r\n                required: false,\r\n                message: '选填, V2生效',\r\n                alias: 'Album ID'\r\n            },\r\n            {\r\n                name: 'permission',\r\n                type: 'list',\r\n                default: userConfig.permission || 'private(default)',\r\n                message: 'set permission',\r\n                choices: [\r\n                    {\r\n                        name: 'private(default)',\r\n                        value: 0\r\n                    },\r\n                    {\r\n                        name: 'public',\r\n                        value: 1\r\n                    }\r\n                ],\r\n                required: false,\r\n                alias: 'Permission'\r\n            },\r\n            {\r\n                name: 'ignoreCertErr',\r\n                type: 'confirm',\r\n                default: userConfig.ignoreCertErr || false,\r\n                message: '是否忽略证书错误, 如果上传失败提示证书过期请设为true',\r\n                required: true,\r\n                alias: 'Ignore certificate error'\r\n            },\r\n            {\r\n                name: 'syncDelete',\r\n                type: 'confirm',\r\n                default: userConfig.syncDelete || false,\r\n                message: '是否同步删除, 只支持V2',\r\n                required: true,\r\n                alias: 'Sync Delete'\r\n            }\r\n        ];\r\n    };\r\n    return {\r\n        uploader: UPLOADER,\r\n        config: config,\r\n        register\r\n        // guiMenu\r\n    };\r\n};\r\n"]}