{"record":{"id":"4aad7ecd627089a3","repo":"AlistGo/alist","slug":"resolutions-is-required","errorCode":null,"errorMessage":"resolutions is required","messagePattern":"resolutions is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"drivers/123_open/other.go","lineNumber":733,"sourceCode":"\treturn d.client.Transcode.Resolutions(ctx, fileID)\n}\n\nfunc otherTranscodeVideo(d *Open123, ctx context.Context, args model.OtherArgs) (interface{}, error) {\n\tvar req struct {\n\t\tFileID      int64  `json:\"file_id\"`\n\t\tCodecName   string `json:\"codec_name\"`\n\t\tVideoTime   int64  `json:\"video_time\"`\n\t\tResolutions string `json:\"resolutions\"`\n\t}\n\tif err := decodeOtherArgs(args.Data, &req); err != nil {\n\t\treturn nil, err\n\t}\n\tfileID, err := resolveFileID(args, req.FileID)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif req.Resolutions == \"\" {\n\t\treturn nil, errors.New(\"resolutions is required\")\n\t}\n\terr = d.client.Transcode.Transcode(ctx, &pan123.TranscodeRequest{\n\t\tFileID:      fileID,\n\t\tCodecName:   req.CodecName,\n\t\tVideoTime:   req.VideoTime,\n\t\tResolutions: req.Resolutions,\n\t})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\treturn okResult{Success: true}, nil\n}\n\nfunc otherTranscodeRecords(d *Open123, ctx context.Context, args model.OtherArgs) (interface{}, error) {\n\tvar req fileIDRequest\n\tif err := decodeOtherArgs(args.Data, &req); err != nil {\n\t\treturn nil, err\n\t}","sourceCodeStart":715,"sourceCodeEnd":751,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/drivers/123_open/other.go#L715-L751","documentation":"Returned by the Thunder captcha-token verifier (drivers/thunder/util.go:157) when the verification API responds with a non-empty Url field. XunLei requires interactive verification (SMS/device verification) at that URL before further API calls are allowed, so the driver returns the link as an actionable error instead of a token.","triggerScenarios":"First-time login or risk-triggered re-verification on the XunLei account; new device fingerprint; logging in from an unusual region or IP; too frequent login attempts — any state where the verify endpoint issues resp.Url instead of resp.CaptchaToken.","commonSituations":"Fresh Thunder storage setups in AList-like tools; headless servers where the user missed the one-time verification; account flagged after password changes or travel.","solutions":["Open the verification URL in a browser (the error renders it as a clickable link), complete the challenge, then retry the operation — the driver will fetch a captchaToken on the next attempt.","Complete verification using the same network egress the server uses, to keep risk signals consistent.","If verification loops repeatedly, log out/in of the storage config or wait some hours for the risk flag to decay.","Keep the storage session warm (periodic token refresh) to reduce re-verification frequency."],"exampleFix":"// before\nerr := xc.refreshCaptchaToken(ctx)\n// err: need verify: <a ...>Click Here</a> — surfaced to logs, user never sees it\n\n// after: surface it to the user for interactive action\nif e != nil && strings.HasPrefix(e.Error(), \"need verify\") {\n\turl := extractHref(e.Error())\n\tnotifyUser(\"XunLei requires verification: open %s in your browser\", url)\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":"func isNeedVerifyErr(err error) bool {\n\treturn err != nil && strings.HasPrefix(err.Error(), \"need verify\")\n}","tryCatchPattern":"if err := xc.refreshCaptchaToken(ctx); isNeedVerifyErr(err) {\n\turl := extractHref(err.Error())\n\t// surface URL to the user; after they complete verification, retry once\n}","preventionTips":["Complete XunLei verification proactively when first adding the storage.","Keep sessions warm to reduce risk-triggered re-verification.","Use a consistent egress IP and UA for the server to avoid device-fingerprint flags."],"tags":["thunder","xunlei","verification","captcha"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}