bluelamp 2.0.10 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -25
- package/bin/bluelamp +368 -0
- package/bin/bluelamp-base +368 -0
- package/bin/bluelamp10 +368 -0
- package/bin/bluelamp100 +368 -0
- package/bin/bluelamp11 +368 -0
- package/bin/bluelamp12 +368 -0
- package/bin/bluelamp13 +368 -0
- package/bin/bluelamp14 +368 -0
- package/bin/bluelamp15 +368 -0
- package/bin/bluelamp16 +368 -0
- package/bin/bluelamp17 +368 -0
- package/bin/bluelamp18 +368 -0
- package/bin/bluelamp19 +368 -0
- package/bin/bluelamp2 +368 -0
- package/bin/bluelamp20 +368 -0
- package/bin/bluelamp21 +368 -0
- package/bin/bluelamp22 +368 -0
- package/bin/bluelamp23 +368 -0
- package/bin/bluelamp24 +368 -0
- package/bin/bluelamp25 +368 -0
- package/bin/bluelamp26 +368 -0
- package/bin/bluelamp27 +368 -0
- package/bin/bluelamp28 +368 -0
- package/bin/bluelamp29 +368 -0
- package/bin/bluelamp3 +368 -0
- package/bin/bluelamp30 +368 -0
- package/bin/bluelamp31 +368 -0
- package/bin/bluelamp32 +368 -0
- package/bin/bluelamp33 +368 -0
- package/bin/bluelamp34 +368 -0
- package/bin/bluelamp35 +368 -0
- package/bin/bluelamp36 +368 -0
- package/bin/bluelamp37 +368 -0
- package/bin/bluelamp38 +368 -0
- package/bin/bluelamp39 +368 -0
- package/bin/bluelamp4 +368 -0
- package/bin/bluelamp40 +368 -0
- package/bin/bluelamp41 +368 -0
- package/bin/bluelamp42 +368 -0
- package/bin/bluelamp43 +368 -0
- package/bin/bluelamp44 +368 -0
- package/bin/bluelamp45 +368 -0
- package/bin/bluelamp46 +368 -0
- package/bin/bluelamp47 +368 -0
- package/bin/bluelamp48 +368 -0
- package/bin/bluelamp49 +368 -0
- package/bin/bluelamp5 +368 -0
- package/bin/bluelamp50 +368 -0
- package/bin/bluelamp51 +368 -0
- package/bin/bluelamp52 +368 -0
- package/bin/bluelamp53 +368 -0
- package/bin/bluelamp54 +368 -0
- package/bin/bluelamp55 +368 -0
- package/bin/bluelamp56 +368 -0
- package/bin/bluelamp57 +368 -0
- package/bin/bluelamp58 +368 -0
- package/bin/bluelamp59 +368 -0
- package/bin/bluelamp6 +368 -0
- package/bin/bluelamp60 +368 -0
- package/bin/bluelamp61 +368 -0
- package/bin/bluelamp62 +368 -0
- package/bin/bluelamp63 +368 -0
- package/bin/bluelamp64 +368 -0
- package/bin/bluelamp65 +368 -0
- package/bin/bluelamp66 +368 -0
- package/bin/bluelamp67 +368 -0
- package/bin/bluelamp68 +368 -0
- package/bin/bluelamp69 +368 -0
- package/bin/bluelamp7 +368 -0
- package/bin/bluelamp70 +368 -0
- package/bin/bluelamp71 +368 -0
- package/bin/bluelamp72 +368 -0
- package/bin/bluelamp73 +368 -0
- package/bin/bluelamp74 +368 -0
- package/bin/bluelamp75 +368 -0
- package/bin/bluelamp76 +368 -0
- package/bin/bluelamp77 +368 -0
- package/bin/bluelamp78 +368 -0
- package/bin/bluelamp79 +368 -0
- package/bin/bluelamp8 +368 -0
- package/bin/bluelamp80 +368 -0
- package/bin/bluelamp81 +368 -0
- package/bin/bluelamp82 +368 -0
- package/bin/bluelamp83 +368 -0
- package/bin/bluelamp84 +368 -0
- package/bin/bluelamp85 +368 -0
- package/bin/bluelamp86 +368 -0
- package/bin/bluelamp87 +368 -0
- package/bin/bluelamp88 +368 -0
- package/bin/bluelamp89 +368 -0
- package/bin/bluelamp9 +368 -0
- package/bin/bluelamp90 +368 -0
- package/bin/bluelamp91 +368 -0
- package/bin/bluelamp92 +368 -0
- package/bin/bluelamp93 +368 -0
- package/bin/bluelamp94 +368 -0
- package/bin/bluelamp95 +368 -0
- package/bin/bluelamp96 +368 -0
- package/bin/bluelamp97 +368 -0
- package/bin/bluelamp98 +368 -0
- package/bin/bluelamp99 +368 -0
- package/lib/mcp-server/dist/bluelamp-system.js +32 -0
- package/lib/mcp-server/dist/crypto-utils.js +27 -0
- package/lib/mcp-server/dist/database-version.js +33 -0
- package/lib/mcp-server/dist/index.js +62 -0
- package/lib/mcp-server/dist/plugins/base-plugin.js +24 -0
- package/lib/mcp-server/dist/plugins/plugin-manager.js +31 -0
- package/lib/mcp-server/dist/plugins/services/leonardo-plugin.js +95 -0
- package/lib/mcp-server/dist/plugins/services/leonardo-prompt-parser.js +36 -0
- package/lib/mcp-server/dist/plugins/services/portal-api-client.js +22 -0
- package/lib/mcp-server/dist/plugins/services/portal-plugin.js +52 -0
- package/lib/mcp-server/dist/secure-mcp-server.js +76 -0
- package/lib/mcp-server/dist/security/ApiKeyManager.js +24 -0
- package/lib/mcp-server/dist/security/InteractiveLogin.js +32 -0
- package/lib/mcp-server/dist/security/PortalAuthClient.js +1 -0
- package/lib/mcp-server/dist/security/SimpleAuthManager.js +1 -0
- package/lib/mcp-server/dist/security/TokenManager.js +25 -0
- package/lib/mcp-server/package.json +21 -0
- package/package.json +118 -34
- package/INSTALLATION_GUIDE.md +0 -109
- package/bin/blcf +0 -2
- package/bin/blcf2 +0 -28
- package/bin/blcf3 +0 -2
- package/bin/blcf4 +0 -2
- package/knowledge-injection/hooks/inject-encrypted.sh +0 -321
- package/lib/agents//343/203/225/343/202/231/343/203/253/343/203/274/343/203/251/343/203/263/343/203/225/343/202/232.md +0 -106
- package/lib/mcp-server/dist_optimized/bluelamp-system.d.ts +0 -29
- package/lib/mcp-server/dist_optimized/bluelamp-system.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/bluelamp-system.js +0 -1
- package/lib/mcp-server/dist_optimized/bluelamp-system.js.bak +0 -340
- package/lib/mcp-server/dist_optimized/bluelamp-system.js.map +0 -1
- package/lib/mcp-server/dist_optimized/crypto-utils.d.ts +0 -33
- package/lib/mcp-server/dist_optimized/crypto-utils.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/crypto-utils.js +0 -1
- package/lib/mcp-server/dist_optimized/crypto-utils.js.map +0 -1
- package/lib/mcp-server/dist_optimized/database-version.d.ts +0 -72
- package/lib/mcp-server/dist_optimized/database-version.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/database-version.js +0 -2
- package/lib/mcp-server/dist_optimized/database-version.js.bak +0 -374
- package/lib/mcp-server/dist_optimized/database-version.js.map +0 -1
- package/lib/mcp-server/dist_optimized/index.d.ts +0 -3
- package/lib/mcp-server/dist_optimized/index.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/index.js +0 -2
- package/lib/mcp-server/dist_optimized/index.js.map +0 -1
- package/lib/mcp-server/dist_optimized/secure-mcp-server.d.ts +0 -64
- package/lib/mcp-server/dist_optimized/secure-mcp-server.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/secure-mcp-server.js +0 -1
- package/lib/mcp-server/dist_optimized/secure-mcp-server.js.bak +0 -1
- package/lib/mcp-server/dist_optimized/secure-mcp-server.js.bak2 +0 -1
- package/lib/mcp-server/dist_optimized/secure-mcp-server.js.map +0 -1
- package/lib/mcp-server/dist_optimized/security/InteractiveLogin.d.ts +0 -47
- package/lib/mcp-server/dist_optimized/security/InteractiveLogin.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/security/InteractiveLogin.js +0 -1
- package/lib/mcp-server/dist_optimized/security/InteractiveLogin.js.map +0 -1
- package/lib/mcp-server/dist_optimized/security/PortalAuthClient.d.ts +0 -65
- package/lib/mcp-server/dist_optimized/security/PortalAuthClient.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/security/PortalAuthClient.js +0 -1
- package/lib/mcp-server/dist_optimized/security/PortalAuthClient.js.map +0 -1
- package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.backup +0 -294
- package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.d.ts +0 -71
- package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.js +0 -1
- package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.js.backup +0 -25
- package/lib/mcp-server/dist_optimized/security/SimpleAuthManager.js.map +0 -1
- package/lib/mcp-server/dist_optimized/security/TokenManager.d.ts +0 -61
- package/lib/mcp-server/dist_optimized/security/TokenManager.d.ts.map +0 -1
- package/lib/mcp-server/dist_optimized/security/TokenManager.js +0 -1
- package/lib/mcp-server/dist_optimized/security/TokenManager.js.map +0 -1
- package/scripts/setup-agents.js +0 -9
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict"
|
|
2
|
+
var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,o,a){void 0===a&&(a=o)
|
|
3
|
+
var r=Object.getOwnPropertyDescriptor(t,o)
|
|
4
|
+
r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,a,r)}:function(e,t,o,a){void 0===a&&(a=o),e[a]=t[o]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[]
|
|
5
|
+
for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&(t[t.length]=o)
|
|
6
|
+
return t},e(t)}
|
|
7
|
+
return function(t){if(t&&t.__esModule)return t
|
|
8
|
+
var o={}
|
|
9
|
+
if(null!=t)for(var a=e(t),r=0;r<a.length;r++)"default"!==a[r]&&__createBinding(o,t,a[r])
|
|
10
|
+
return __setModuleDefault(o,t),o}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
11
|
+
Object.defineProperty(exports,"__esModule",{value:!0})
|
|
12
|
+
const sdk_1=require("@leonardo-ai/sdk"),zod_1=require("zod"),fs=__importStar(require("fs/promises")),path=__importStar(require("path")),node_fetch_1=__importDefault(require("node-fetch")),sharp_1=__importDefault(require("sharp")),base_plugin_js_1=require("../base-plugin.js"),SimpleAuthManager_js_1=require("../../security/SimpleAuthManager.js"),leonardo_prompt_parser_js_1=require("./leonardo-prompt-parser.js"),LeonardoAnimateSchema=zod_1.z.object({folderPath:zod_1.z.string().default("./outputs").describe("画像が保存されているフォルダパス"),pattern:zod_1.z.string().default("*.png").describe("対象ファイルのパターン(例: *.png, leonardo_*.png)"),motionStrength:zod_1.z.number().int().min(1).max(10).default(5).describe("動きの強さ(1:穏やか~10:激しい)"),fileLimit:zod_1.z.number().int().min(1).max(10).optional().describe("処理する画像の最大数"),sortBy:zod_1.z.enum(["newest","oldest","name"]).default("newest").describe("ファイルの並び順"),outputPath:zod_1.z.string().default("./outputs/videos").describe("動画の保存先"),isPublic:zod_1.z.boolean().default(!1).describe("生成した動画を公開するか")}),LeonardoGenerateSchema=zod_1.z.object({prompt:zod_1.z.string().min(1,"プロンプトは必須です"),width:zod_1.z.number().int().min(512).max(2048).default(1024),height:zod_1.z.number().int().min(512).max(2048).default(1024),num_images:zod_1.z.number().int().min(1).max(8).default(1),modelId:zod_1.z.string().optional(),negativePrompt:zod_1.z.string().optional(),photoReal:zod_1.z.boolean().default(!1),photoRealVersion:zod_1.z.enum(["v1","v2"]).default("v2"),alchemy:zod_1.z.boolean().default(!0),guidance_scale:zod_1.z.number().min(1).max(30).default(7),seed:zod_1.z.number().int().optional(),steps:zod_1.z.number().int().min(30).max(60).default(50),contrast:zod_1.z.number().min(1).max(4.5).default(1),outputPath:zod_1.z.string().default("./outputs"),presetStyle:zod_1.z.enum(["CINEMATIC","DYNAMIC","ENVIRONMENTAL","GENERAL","ILLUSTRATION","PHOTOGRAPHY","RAYTRACED","RENDER_3D","SKETCH_BW","SKETCH_COLOR","VIBRANT"]).optional()})
|
|
13
|
+
class LeonardoPlugin extends base_plugin_js_1.BasePlugin{constructor(){super(...arguments),this.manifest={id:"leonardo",name:"Leonardo AI",version:"1.0.0",category:"AI",description:"Leonardo AIによる高品質な画像生成。PhotoReal、Alchemy v2対応",authType:"api_key",loadPriority:"high",tools:[{name:"leonardo_generate",description:"Leonardo AIで高品質な画像を生成します。プロンプトに基づいて1-8枚の画像を作成し、指定されたフォルダに保存します。",inputSchema:LeonardoGenerateSchema,outputExample:{success:!0,content:[{type:"text",text:"✅ Leonardo AIで2枚の画像を生成しました\\n📁 保存先:\\n- ./outputs/leonardo_20250830_001.png\\n- ./outputs/leonardo_20250830_002.png"}]}},{name:"leonardo_animate",description:"フォルダ内の画像をLeonardo AI Motion 1.0で動画化します。画像をアップロードして動きを追加し、MP4形式で保存します。",inputSchema:LeonardoAnimateSchema,outputExample:{success:!0,content:[{type:"text",text:"🎬 3枚の画像を動画化しました\\n📁 保存先:\\n- ./outputs/videos/motion_20250830_001.mp4\\n- ./outputs/videos/motion_20250830_002.mp4\\n- ./outputs/videos/motion_20250830_003.mp4"}]}}]},this.availableModels=[]}async initialize(){try{this.availableModels=await this.getDefaultModels(),this.markInitialized()}catch(e){throw e}}async shutdown(){this.leonardo=void 0}async executeTool(e,t,o){if(!this.isInitialized)return this.handleError("プラグインが初期化されていません","executeTool")
|
|
14
|
+
switch(e){case"leonardo_generate":return await this.generateImage(t,o)
|
|
15
|
+
case"leonardo_animate":return await this.animateImages(t,o)
|
|
16
|
+
default:return this.handleError("未知のツール: "+e,"executeTool")}}async generateImage(e,t){const o=Date.now()
|
|
17
|
+
try{const a=this.validateArgs(e,LeonardoGenerateSchema),r=leonardo_prompt_parser_js_1.LeonardoPromptParser.parsePrompt(a.prompt),n=this.mergeSettings(r,a)
|
|
18
|
+
if(leonardo_prompt_parser_js_1.LeonardoPromptParser.validateSettings(n).length,await this.initializeLeonardoClient(t),!this.leonardo)return this.handleError("Leonardo AI クライアントの初期化に失敗","generateImage")
|
|
19
|
+
await this.ensureOutputDirectory(n.outputPath||"./outputs")
|
|
20
|
+
const i=await this.requestGeneration(n),s=await this.waitForGeneration(i.generationId)
|
|
21
|
+
if("FAILED"===s.status)return this.handleError("画像生成に失敗しました","generateImage")
|
|
22
|
+
if(!s.images||0===s.images.length)return this.handleError("生成された画像が見つかりません","generateImage")
|
|
23
|
+
const d=await this.downloadAndSaveImages(s.images,n.outputPath||"./outputs"),l=Date.now()-o
|
|
24
|
+
return await this.recordUsage("leonardo_generate",t.userId,!0,l,{imageCount:d.length,prompt:n.cleanPrompt,modelId:n.modelId,parsedFromPrompt:!0}),this.createSuccessResponse([{type:"text",text:`✅ Leonardo AIで${d.length}枚の画像を生成しました\n📝 設定: ${n.modelName||"デフォルト"} / ${n.width}x${n.height}\n📁 保存先:\n${d.map(e=>"- "+e).join("\n")}`}],{generationId:s.id,imageCount:d.length,executionTimeMs:l,savedFiles:d,parsedSettings:{model:n.modelName,size:`${n.width}x${n.height}`,style:n.presetStyle}})}catch(e){const a=Date.now()-o
|
|
25
|
+
return await this.recordUsage("leonardo_generate",t.userId,!1,a,{error:e+""}),this.handleError(e,"generateImage")}}mergeSettings(e,t){return{prompt:e.cleanPrompt||t.prompt,width:t.width||e.width||1024,height:t.height||e.height||1024,num_images:t.num_images||e.num_images||1,modelId:t.modelId||e.modelId,modelName:e.modelName,photoReal:void 0!==t.photoReal?t.photoReal:e.photoReal,photoRealVersion:t.photoRealVersion||e.photoRealVersion||"v2",presetStyle:t.presetStyle||e.presetStyle,alchemy:void 0!==t.alchemy?t.alchemy:void 0===e.alchemy||e.alchemy,guidance_scale:t.guidance_scale||e.guidanceScale||7,steps:t.steps||e.steps||50,contrast:t.contrast||e.contrast||1,negativePrompt:t.negativePrompt,seed:t.seed,outputPath:t.outputPath,originalPrompt:t.prompt,cleanPrompt:e.cleanPrompt}}async initializeLeonardoClient(e){if(this.leonardo)return
|
|
26
|
+
let t=e.apiKey
|
|
27
|
+
if(!t)try{const e=await SimpleAuthManager_js_1.SimpleAuthManager.getToken()
|
|
28
|
+
if(e){const o=await(0,node_fetch_1.default)("http://localhost:8080/api/cli/user-credentials/leonardo-ai",{method:"GET",headers:{"X-CLI-Token":e,"Content-Type":"application/json"}})
|
|
29
|
+
if(o.ok){const e=await o.json()
|
|
30
|
+
e.success&&e.data&&e.data.apiKey&&(t=e.data.apiKey)}}}catch(e){}if(t||(t=process.env.LEONARDO_API_KEY),!t)throw Error("Leonardo AI APIキーが取得できません。bluelamp loginを実行してください。")
|
|
31
|
+
this.leonardo=new sdk_1.Leonardo({bearerAuth:t})}async requestGeneration(e){if(!this.leonardo)throw Error("Leonardo AIクライアントが初期化されていません")
|
|
32
|
+
try{const t={prompt:e.prompt,width:e.width||1024,height:e.height||1024,numImages:e.num_images||1,guidanceScale:e.guidance_scale||7,alchemy:!1!==e.alchemy}
|
|
33
|
+
e.modelId&&(t.modelId=e.modelId),e.negativePrompt&&(t.negativePrompt=e.negativePrompt),e.photoReal&&(t.photoReal=!0,t.photoRealVersion=e.photoRealVersion||"v2"),e.seed&&(t.seed=e.seed),e.steps&&(t.numInferenceSteps=e.steps),e.presetStyle&&(t.presetStyle=e.presetStyle)
|
|
34
|
+
const o=await this.leonardo.image.createGeneration(t),a=o?.object?.sdGenerationJob?.generationId
|
|
35
|
+
if(!a)throw Error("生成IDが取得できませんでした")
|
|
36
|
+
return{generationId:a}}catch(e){throw Error("Leonardo AI API エラー: "+(e.message||e))}}async waitForGeneration(e){if(!this.leonardo)throw Error("Leonardo AIクライアントが初期化されていません")
|
|
37
|
+
let t=0
|
|
38
|
+
for(;t<30;)try{const o=await this.leonardo.image.getGenerationById(e),a=o?.object?.generationsByPk
|
|
39
|
+
if("COMPLETE"===a?.status)return{id:e,status:"COMPLETE",images:a.generatedImages?.map(e=>({id:e.id||"",url:e.url||"",likelyGuid:e.likelyGuid||""}))}
|
|
40
|
+
if("FAILED"===a?.status)return{id:e,status:"FAILED"}
|
|
41
|
+
await new Promise(e=>setTimeout(e,1e4)),t++}catch(e){if(t++,t>=30)throw Error("生成確認の最大試行回数を超えました: "+e)
|
|
42
|
+
await new Promise(e=>setTimeout(e,5e3))}throw Error("生成がタイムアウトしました。Leonardo AIのサーバーが混雑している可能性があります。")}async downloadAndSaveImages(e,t){const o=[],a=new Date,r=a.toISOString().replace(/[:\-]/g,"").replace("T","_").replace(/\..+/,""),n=`${a.getTime()}_${Math.random().toString(36).substring(2,8)}`
|
|
43
|
+
for(let a=0;a<e.length;a++){const i=e[a]
|
|
44
|
+
try{const e=await(0,node_fetch_1.default)(i.url)
|
|
45
|
+
if(!e.ok)throw Error(`ダウンロード失敗: ${e.status} ${e.statusText}`)
|
|
46
|
+
const s=Buffer.from(await e.arrayBuffer()),d=`leonardo_${r}_${n}_${i.id?i.id.substring(0,8):""}_${(a+1+"").padStart(2,"0")}.png`,l=path.join(t,d)
|
|
47
|
+
await(0,sharp_1.default)(s).png({quality:95,compressionLevel:6}).toFile(l),o.push(l)}catch(e){}}if(0===o.length)throw Error("画像の保存に全て失敗しました")
|
|
48
|
+
return o}async ensureOutputDirectory(e){try{await fs.mkdir(e,{recursive:!0})}catch(t){throw Error(`出力ディレクトリの作成に失敗: ${e} - ${t}`)}}async getDefaultModels(){return[{id:"6bef9f1b-29cb-40c7-b9df-32b51c1f67d3",name:"Leonardo Phoenix",description:"2024年リリースの最新モデル。高いプロンプト忠実度と詳細なテキスト生成が特徴",supportsAlchemy:!0},{id:"aa77f04e-3eec-4034-9c07-d0f619684628",name:"Leonardo Diffusion XL",description:"SDXL基盤の高品質汎用モデル",supportsPhotoReal:!0,supportsAlchemy:!0},{id:"1e60896f-3c26-4296-8ecc-53e2afecc132",name:"Leonardo Kino XL",description:"シネマティック品質の画像生成に特化",supportsPhotoReal:!0,supportsAlchemy:!0},{id:"5c232a9e-9061-4777-980a-ddc8e65647c6",name:"Leonardo Vision XL",description:"フォトリアルな画像生成に最適化",supportsPhotoReal:!0,supportsAlchemy:!0}]}async performHealthCheck(){const e={userId:"health_check",service:"leonardo",apiKey:process.env.LEONARDO_API_KEY}
|
|
49
|
+
if(!e.apiKey)throw Error("Leonardo AI APIキーが設定されていません")
|
|
50
|
+
try{new sdk_1.Leonardo({bearerAuth:e.apiKey})}catch(e){throw Error("Leonardo AI接続テストに失敗: "+e)}}async animateImages(e,t){const o=Date.now()
|
|
51
|
+
try{const a=this.validateArgs(e,LeonardoAnimateSchema)
|
|
52
|
+
if(await this.initializeLeonardoClient(t),!this.leonardo)return this.handleError("Leonardo AI クライアントの初期化に失敗","animateImages")
|
|
53
|
+
const r=await this.findImageFiles(a.folderPath,a.pattern,a.sortBy,a.fileLimit)
|
|
54
|
+
if(0===r.length)return this.handleError(`${a.folderPath}に対象画像が見つかりません(パターン: ${a.pattern})`,"animateImages")
|
|
55
|
+
await this.ensureOutputDirectory(a.outputPath)
|
|
56
|
+
const n=[],i=[]
|
|
57
|
+
for(let e=0;e<r.length;e++){const t=r[e]
|
|
58
|
+
try{const e=await this.uploadImageToLeonardo(t),o=await this.requestMotionGeneration(e,a.motionStrength,a.isPublic),r=await this.waitForMotionGeneration(o),i=await this.downloadVideo(r,a.outputPath,t)
|
|
59
|
+
n.push(i)}catch(e){const o=`❌ ${path.basename(t)}: ${e}`
|
|
60
|
+
i.push(o)}}const s=Date.now()-o
|
|
61
|
+
return await this.recordUsage("leonardo_animate",t.userId,n.length>0,s,{processedImages:r.length,generatedVideos:n.length,errors:i.length}),0===n.length?this.handleError("すべての動画生成に失敗しました","animateImages"):this.createSuccessResponse([{type:"text",text:`🎬 ${n.length}/${r.length}個の動画を生成しました\n📁 保存先:\n${n.map(e=>"- "+e).join("\n")}${i.length>0?"\n\n⚠️ エラー:\n"+i.join("\n"):""}`}],{processedImages:r.length,generatedVideos:n.length,executionTimeMs:s,savedFiles:n})}catch(e){const a=Date.now()-o
|
|
62
|
+
return await this.recordUsage("leonardo_animate",t.userId,!1,a,{error:e+""}),this.handleError(e,"animateImages")}}async findImageFiles(e,t,o,a){const r=(await Promise.resolve().then(()=>__importStar(require("glob")))).glob,n=path.join(e,t),i=await r(n,{nodir:!0,absolute:!0})
|
|
63
|
+
if(0===i.length)return[]
|
|
64
|
+
const s=await Promise.all(i.map(async e=>({path:e,stat:await fs.stat(e)})))
|
|
65
|
+
return s.sort((e,t)=>{switch(o){case"newest":return t.stat.mtime.getTime()-e.stat.mtime.getTime()
|
|
66
|
+
case"oldest":return e.stat.mtime.getTime()-t.stat.mtime.getTime()
|
|
67
|
+
default:return e.path.localeCompare(t.path)}}),(a?s.slice(0,a):s).map(e=>e.path)}async uploadImageToLeonardo(e){if(!this.leonardo)throw Error("Leonardo AIクライアントが初期化されていません")
|
|
68
|
+
const t=await fs.readFile(e),o=path.basename(e),a=await this.leonardo.image.uploadInitImage({extension:path.extname(o).substring(1)})
|
|
69
|
+
if(!a.object?.uploadInitImage?.url||!a.object?.uploadInitImage?.id)throw Error("アップロードURL取得に失敗しました")
|
|
70
|
+
const{url:r,id:n}=a.object.uploadInitImage,i=await(0,node_fetch_1.default)(r,{method:"PUT",body:t,headers:{"Content-Type":"image/png"}})
|
|
71
|
+
if(!i.ok)throw Error("画像アップロード失敗: "+i.status)
|
|
72
|
+
return n}async requestMotionGeneration(e,t,o){if(!this.leonardo)throw Error("Leonardo AIクライアントが初期化されていません")
|
|
73
|
+
const a=await this.getLeonardoApiKey(),r=await(0,node_fetch_1.default)("https://cloud.leonardo.ai/api/rest/v1/generations-motion-svd",{method:"POST",headers:{Authorization:"Bearer "+a,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({imageId:e,motionStrength:t,isInitImage:!0,isPublic:o})})
|
|
74
|
+
if(!r.ok){const e=await r.text()
|
|
75
|
+
throw Error(`Motion生成リクエスト失敗: ${r.status} - ${e}`)}const n=await r.json()
|
|
76
|
+
if(!n.motionSvdGenerationJob?.generationId)throw Error("Motion生成IDが取得できませんでした")
|
|
77
|
+
return n.motionSvdGenerationJob.generationId}async waitForMotionGeneration(e){let t=0
|
|
78
|
+
const o=await this.getLeonardoApiKey()
|
|
79
|
+
for(;t<60;)try{const a=await(0,node_fetch_1.default)("https://cloud.leonardo.ai/api/rest/v1/generations/"+e,{method:"GET",headers:{Authorization:"Bearer "+o,Accept:"application/json"}})
|
|
80
|
+
if(!a.ok)throw Error("生成状況確認失敗: "+a.status)
|
|
81
|
+
const r=(await a.json()).generationsByPk
|
|
82
|
+
if("COMPLETE"===r?.status){const e=r.generatedVideos?.[0]
|
|
83
|
+
if(e?.url)return e.url
|
|
84
|
+
throw Error("動画URLが見つかりません")}if("FAILED"===r?.status)throw Error("動画生成に失敗しました")
|
|
85
|
+
await new Promise(e=>setTimeout(e,1e4)),t++}catch(e){if(t++,t>=60)throw Error("生成確認の最大試行回数を超えました: "+e)
|
|
86
|
+
await new Promise(e=>setTimeout(e,5e3))}throw Error("動画生成がタイムアウトしました")}async getLeonardoApiKey(){if(this.leonardo){const e=this.leonardo.config
|
|
87
|
+
if(e?.bearerAuth)return e.bearerAuth}try{const e=await SimpleAuthManager_js_1.SimpleAuthManager.getToken()
|
|
88
|
+
if(e){const t=await(0,node_fetch_1.default)("http://localhost:8080/api/cli/user-credentials/leonardo-ai",{method:"GET",headers:{"X-CLI-Token":e,"Content-Type":"application/json"}})
|
|
89
|
+
if(t.ok){const e=await t.json()
|
|
90
|
+
if(e.success&&e.data?.apiKey)return e.data.apiKey}}}catch(e){}const e=process.env.LEONARDO_API_KEY
|
|
91
|
+
if(e)return e
|
|
92
|
+
throw Error("Leonardo AI APIキーが取得できません。bluelamp loginを実行してください。")}async downloadVideo(e,t,o){const a=await(0,node_fetch_1.default)(e)
|
|
93
|
+
if(!a.ok)throw Error("動画ダウンロード失敗: "+a.status)
|
|
94
|
+
const r=Buffer.from(await a.arrayBuffer()),n=(new Date).toISOString().replace(/[:\-]/g,"").replace("T","_").replace(/\..+/,""),i=`motion_${path.basename(o,path.extname(o))}_${n}.mp4`,s=path.join(t,i)
|
|
95
|
+
return await fs.writeFile(s,r),s}}exports.default=LeonardoPlugin
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict"
|
|
2
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.LeonardoPromptParser=exports.ASPECT_RATIOS=exports.PRESET_STYLES=exports.LEONARDO_MODELS=void 0,exports.LEONARDO_MODELS={phoenix:{id:"6bef9f1b-29cb-40c7-b9df-32b51c1f67d3",name:"Leonardo Phoenix",keywords:["phoenix","フェニックス","最新","latest"],supportsAlchemy:!0,supportsPhotoReal:!1},vision_xl:{id:"5c232a9e-9061-4777-980a-ddc8e65647c6",name:"Leonardo Vision XL",keywords:["vision","ビジョン","フォトリアル","photorealistic","リアル","写真"],supportsAlchemy:!0,supportsPhotoReal:!0},diffusion_xl:{id:"aa77f04e-3eec-4034-9c07-d0f619684628",name:"Leonardo Diffusion XL",keywords:["diffusion","ディフュージョン","汎用","general","バランス"],supportsAlchemy:!0,supportsPhotoReal:!0},kino_xl:{id:"1e60896f-3c26-4296-8ecc-53e2afecc132",name:"Leonardo Kino XL",keywords:["kino","キノ","映画","cinematic","シネマ","movie","film"],supportsAlchemy:!0,supportsPhotoReal:!0,preferredAspectRatio:"21:9"},anime_xl:{id:"e71a1c2f-4f80-4800-934f-2c68979d8cc8",name:"Leonardo Anime XL",keywords:["anime","アニメ","manga","マンガ","漫画","cartoon","illustration"],supportsAlchemy:!0,supportsPhotoReal:!1},lightning_xl:{id:"b24e16ff-06e3-43eb-8aec-8ab3166edcb6",name:"Leonardo Lightning XL",keywords:["lightning","ライトニング","高速","fast","quick","rapid","速い"],supportsAlchemy:!1,supportsPhotoReal:!1}},exports.PRESET_STYLES={cinematic:{value:"CINEMATIC",keywords:["cinematic","シネマティック","映画的","movie","film"],preferredModel:"kino_xl"},dynamic:{value:"DYNAMIC",keywords:["dynamic","ダイナミック","動的","action","motion"],preferredModel:"diffusion_xl"},photography:{value:"PHOTOGRAPHY",keywords:["photography","フォトグラフィー","写真","photo","camera"],preferredModel:"vision_xl"},vibrant:{value:"VIBRANT",keywords:["vibrant","ビブラント","鮮やか","colorful","vivid"]},raytraced:{value:"RAYTRACED",keywords:["raytraced","レイトレース","3D","render","レンダー"]},illustration:{value:"ILLUSTRATION",keywords:["illustration","イラスト","drawing","絵","artwork"]}},exports.ASPECT_RATIOS={"1:1":{keywords:["1:1","正方形","square","スクエア","インスタ","instagram"],width:1024,height:1024},"16:9":{keywords:["16:9","横長","wide","ワイド","youtube","ユーチューブ","HD"],width:1920,height:1080},"9:16":{keywords:["9:16","縦長","portrait","ポートレート","tiktok","ティックトック","stories","ストーリー"],width:1080,height:1920},"4:3":{keywords:["4:3","standard","スタンダード","標準"],width:1024,height:768},"3:4":{keywords:["3:4","縦向き標準"],width:768,height:1024},"2:3":{keywords:["2:3","縦向き","vertical","バーティカル"],width:1024,height:1536},"3:2":{keywords:["3:2","横向き","horizontal","ホリゾンタル"],width:1536,height:1024},"21:9":{keywords:["21:9","ultrawide","ウルトラワイド","cinema","シネマスコープ"],width:2560,height:1080},facebook:{keywords:["facebook","フェイスブック","fb"],width:1200,height:630},twitter:{keywords:["twitter","ツイッター","x"],width:1200,height:675},linkedin:{keywords:["linkedin","リンクトイン"],width:1200,height:627}}
|
|
3
|
+
class LeonardoPromptParser{static parsePrompt(e){const t={cleanPrompt:e},o=this.extractAspectRatio(e)
|
|
4
|
+
o&&(Object.assign(t,o),t.cleanPrompt=o.cleanPrompt||t.cleanPrompt)
|
|
5
|
+
const r=this.extractModel(t.cleanPrompt)
|
|
6
|
+
r&&(Object.assign(t,r),t.cleanPrompt=r.cleanPrompt||t.cleanPrompt)
|
|
7
|
+
const a=this.extractStyle(t.cleanPrompt)
|
|
8
|
+
a&&(Object.assign(t,a),t.cleanPrompt=a.cleanPrompt||t.cleanPrompt)
|
|
9
|
+
const i=this.extractQuality(t.cleanPrompt)
|
|
10
|
+
i&&(Object.assign(t,i),t.cleanPrompt=i.cleanPrompt||t.cleanPrompt)
|
|
11
|
+
const s=this.extractImageCount(t.cleanPrompt)
|
|
12
|
+
s&&(Object.assign(t,s),t.cleanPrompt=s.cleanPrompt||t.cleanPrompt)
|
|
13
|
+
const c=this.extractPhotoReal(t.cleanPrompt)
|
|
14
|
+
return c&&(Object.assign(t,c),t.cleanPrompt=c.cleanPrompt||t.cleanPrompt),t.cleanPrompt=this.cleanupPrompt(t.cleanPrompt),t}static extractAspectRatio(e){let t=e
|
|
15
|
+
const o=e.match(/(\d{3,4})\s*[x×]\s*(\d{3,4})/i)
|
|
16
|
+
if(o){const e=parseInt(o[1]),r=parseInt(o[2])
|
|
17
|
+
return t=t.replace(o[0],"").trim(),{width:e,height:r,cleanPrompt:t}}for(const[o,r]of Object.entries(exports.ASPECT_RATIOS)){const o=r.keywords.join("|"),a=RegExp(`\\b(${o})\\b`,"gi")
|
|
18
|
+
if(e.match(a))return t=t.replace(a,"").trim(),{width:r.width,height:r.height,cleanPrompt:t}}return null}static extractModel(e){let t=e
|
|
19
|
+
for(const[o,r]of Object.entries(exports.LEONARDO_MODELS))for(const keyword of r.keywords){const a=RegExp(/[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]/.test(keyword)?keyword:`\\b${keyword}\\b`,"gi")
|
|
20
|
+
if(e.match(a))return t=t.replace(a,"").trim(),"vision_xl"===o&&e.match(/photoreal|フォトリアル/gi)?{photoReal:!0,photoRealVersion:"v2",modelId:r.id,modelName:r.name,cleanPrompt:t}:{modelId:r.id,modelName:r.name,cleanPrompt:t}}return null}static extractStyle(e){let t=e
|
|
21
|
+
for(const[o,r]of Object.entries(exports.PRESET_STYLES))for(const keyword of r.keywords){const o=RegExp(/[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FAF]/.test(keyword)?keyword:`\\b${keyword}\\b`,"gi")
|
|
22
|
+
if(e.match(o)){t=t.replace(o,"").trim()
|
|
23
|
+
const a={presetStyle:r.value,cleanPrompt:t}
|
|
24
|
+
if("preferredModel"in r&&r.preferredModel&&!e.match(/model|モデル/gi)){const e=exports.LEONARDO_MODELS[r.preferredModel]
|
|
25
|
+
e&&(a.modelId=e.id,a.modelName=e.name)}return a}}return null}static extractQuality(e){let t=e
|
|
26
|
+
const o={}
|
|
27
|
+
return e.match(/高品質|高画質|最高品質|ultra|high quality|best quality/gi)?(o.steps=60,o.guidanceScale=10,o.alchemy=!0,t=t.replace(/高品質|高画質|最高品質|ultra|high quality|best quality/gi,"").trim()):e.match(/中品質|標準|standard|medium quality/gi)?(o.steps=50,o.guidanceScale=7,o.alchemy=!0,t=t.replace(/中品質|標準|standard|medium quality/gi,"").trim()):e.match(/低品質|ドラフト|draft|quick|fast|低画質/gi)&&(o.steps=30,o.guidanceScale=5,o.alchemy=!1,t=t.replace(/低品質|ドラフト|draft|quick|fast|低画質/gi,"").trim()),e.match(/alchemy|アルケミー|魔法/gi)&&(o.alchemy=!0,t=t.replace(/alchemy|アルケミー|魔法/gi,"").trim()),Object.keys(o).length>0?(o.cleanPrompt=t,o):null}static extractImageCount(e){let t=e
|
|
28
|
+
const o=e.match(/(\d+)\s*[枚つ個]/)
|
|
29
|
+
if(o){const e=Math.min(parseInt(o[1]),8)
|
|
30
|
+
return t=t.replace(o[0],"").trim(),{num_images:e,cleanPrompt:t}}const r=e.match(/(\d+)\s*(images?|pictures?|photos?|pieces?)/i)
|
|
31
|
+
if(r){const e=Math.min(parseInt(r[1]),8)
|
|
32
|
+
return t=t.replace(r[0],"").trim(),{num_images:e,cleanPrompt:t}}return null}static extractPhotoReal(e){let t=e
|
|
33
|
+
return e.match(/photoreal|フォトリアル|写真のような|photorealistic/gi)?(t=t.replace(/photoreal|フォトリアル|写真のような|photorealistic/gi,"").trim(),{photoReal:!0,photoRealVersion:"v2",cleanPrompt:t}):null}static cleanupPrompt(e){return e.replace(/\s+/g," ").replace(/^\s*[,、]\s*/g,"").replace(/\s*[,、]\s*$/g,"").replace(/[,、]\s*[,、]/g,",").replace(/で\s*$/g,"").replace(/を\s*$/g,"").trim()}static validateSettings(e){const t=[]
|
|
34
|
+
if(e.photoReal&&e.modelId){const o=Object.values(exports.LEONARDO_MODELS).find(t=>t.id===e.modelId)
|
|
35
|
+
o&&!o.supportsPhotoReal&&t.push(`警告: ${o.name}はPhotoRealをサポートしていません`)}if(e.alchemy&&e.modelId){const o=Object.values(exports.LEONARDO_MODELS).find(t=>t.id===e.modelId)
|
|
36
|
+
o&&!o.supportsAlchemy&&t.push(`警告: ${o.name}はAlchemyをサポートしていません`)}return e.width&&e.width>2048&&t.push("警告: 幅が2048pxを超えています"),e.height&&e.height>2048&&t.push("警告: 高さが2048pxを超えています"),t}}exports.LeonardoPromptParser=LeonardoPromptParser
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict"
|
|
2
|
+
var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}}
|
|
3
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.portalAPIClient=exports.PortalAPIClient=void 0
|
|
4
|
+
const node_fetch_1=__importDefault(require("node-fetch")),SimpleAuthManager_js_1=require("../../security/SimpleAuthManager.js")
|
|
5
|
+
class PortalAPIClient{constructor(){this.baseURL=process.env.BLUELAMP_PORTAL_API_URL||"http://localhost:8080",this.timeout=3e4,this.retryAttempts=3,this.retryDelay=1e3}async getAuthToken(){try{return await SimpleAuthManager_js_1.SimpleAuthManager.getToken()||null}catch(t){return null}}async makeRequest(t,e={}){const token=await this.getAuthToken()
|
|
6
|
+
if(!token)throw Error("Portal API: 認証トークンが利用できません")
|
|
7
|
+
const a=`${this.baseURL}${t}`,r={method:"GET",headers:{"X-CLI-Token":token,"Content-Type":"application/json","User-Agent":"BlueLamp-MCP-Client/1.0",...e.headers},timeout:this.timeout,...e}
|
|
8
|
+
for(let t=1;t<=this.retryAttempts;t++)try{const t=new AbortController,e=setTimeout(()=>t.abort(),this.timeout),s=await(0,node_fetch_1.default)(a,{...r,signal:t.signal})
|
|
9
|
+
if(clearTimeout(e),!s.ok){if(401===s.status)throw Error("Portal API: 認証失敗 - 無効なトークン")
|
|
10
|
+
if(404===s.status)return null
|
|
11
|
+
throw Error(`Portal API: リクエスト失敗 - ${s.status} ${s.statusText}`)}return await s.json()}catch(e){if(t===this.retryAttempts)throw e
|
|
12
|
+
await new Promise(e=>setTimeout(e,this.retryDelay*t))}return null}async resolveSlot(t){try{const e="/api/slots/resolve/"+t,a=await this.makeRequest(e)
|
|
13
|
+
return a&&a.success?{slotNumber:t,orchestratorEndpoint:a.data.orchestratorEndpoint,configuration:a.data.configuration,status:a.data.status,lastUpdated:a.data.lastUpdated}:null}catch(t){return null}}async getAllSlots(){try{const t="/api/slots/all",e=await this.makeRequest(t)
|
|
14
|
+
return e?.data?.slots||[]}catch(t){return[]}}async getUsageStats(){try{const t="/api/usage/stats",e=await this.makeRequest(t)
|
|
15
|
+
return e?.data||null}catch(t){return null}}async updateUsage(t,e="orchestrator_call"){try{const a="/api/usage/update",r=await this.makeRequest(a,{method:"POST",body:JSON.stringify({slotNumber:t,operation:e,timestamp:(new Date).toISOString()})})
|
|
16
|
+
return r?.success||!1}catch(t){return!1}}async checkFreeUsageAvailable(){try{const t=await this.getUsageStats()
|
|
17
|
+
if(!t)return!1
|
|
18
|
+
const e=t.freeUsageLimit||3
|
|
19
|
+
return(t.totalUsage||0)<e}catch(t){return!1}}async getUserInfo(){try{const t="/api/user/info",e=await this.makeRequest(t)
|
|
20
|
+
return e?.data||null}catch(t){return null}}async getServiceCredentials(t){try{const e="/api/cli/user-credentials/"+t,a=await this.makeRequest(e)
|
|
21
|
+
return a?.success&&a.data?a.data:null}catch(t){return null}}async injectKnowledge(keyword,t){try{const e="/api/knowledge/inject",a=await this.makeRequest(e,{method:"POST",body:JSON.stringify({keyword:keyword,context:t,level:"detailed"})})
|
|
22
|
+
return a?.success&&a.data?{success:!0,knowledge:a.data.knowledge,sources:a.data.sources,confidence:a.data.confidence}:{success:!1,error:"Knowledge injection failed"}}catch(t){return{success:!1,error:"Knowledge injection error: "+t}}}}exports.PortalAPIClient=PortalAPIClient,exports.portalAPIClient=new PortalAPIClient
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict"
|
|
2
|
+
var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r)
|
|
3
|
+
var n=Object.getOwnPropertyDescriptor(t,r)
|
|
4
|
+
n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,n)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[]
|
|
5
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
6
|
+
return t},e(t)}
|
|
7
|
+
return function(t){if(t&&t.__esModule)return t
|
|
8
|
+
var r={}
|
|
9
|
+
if(null!=t)for(var a=e(t),n=0;n<a.length;n++)"default"!==a[n]&&__createBinding(r,t,a[n])
|
|
10
|
+
return __setModuleDefault(r,t),r}}()
|
|
11
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.DynamicSlotResolver=void 0
|
|
12
|
+
const zod_1=require("zod"),fs=__importStar(require("fs/promises")),path=__importStar(require("path")),os=__importStar(require("os")),base_plugin_js_1=require("../base-plugin.js"),SimpleAuthManager_js_1=require("../../security/SimpleAuthManager.js"),portal_api_client_js_1=require("./portal-api-client.js"),DelegateToAgentSchema=zod_1.z.object({agentName:zod_1.z.string().min(1,"エージェント名は必須です"),token:zod_1.z.string().optional()}),InjectKnowledgeSchema=zod_1.z.object({keyword:zod_1.z.string().min(1,"キーワードは必須です"),context:zod_1.z.string().optional(),level:zod_1.z.string().default("detailed")}),SaveKnowledgeSchema=zod_1.z.object({knowledge:zod_1.z.string().min(1,"知識内容は必須です"),identifier:zod_1.z.string().min(1,"識別子は必須です"),token:zod_1.z.string().min(1,"トークンは必須です")}),ListPromptsSchema=zod_1.z.object({category:zod_1.z.string().optional(),token:zod_1.z.string().min(1,"トークンは必須です")})
|
|
13
|
+
class DynamicSlotResolver{constructor(){this.cacheTimeout=3e5,this.slotCache=new Map,this.agentSlotMapping={orchestrator:1,orchestrator1:1,orchestrator2:2,orchestrator3:3,orchestrator4:4,orchestrator5:5},this.portalClient=portal_api_client_js_1.portalAPIClient}extractSlotNumber(e){if(!e||"string"!=typeof e)throw Error("Invalid agent name provided")
|
|
14
|
+
const t=e.toLowerCase().trim()
|
|
15
|
+
if(this.agentSlotMapping[t])return this.agentSlotMapping[t]
|
|
16
|
+
const r=t.match(/^orchestrator(\d+)?$/)
|
|
17
|
+
if(r)return r[1]?parseInt(r[1],10):1
|
|
18
|
+
const a=e.match(/\d+/)
|
|
19
|
+
return a?parseInt(a[0],10):1}async getSlotConfiguration(e){const t="slot_"+e,r=this.slotCache.get(t)
|
|
20
|
+
if(r&&Date.now()-r.timestamp<this.cacheTimeout)return r.data
|
|
21
|
+
try{const r=await this.portalClient.resolveSlot(e)
|
|
22
|
+
return this.slotCache.set(t,{data:r,timestamp:Date.now()}),r}catch(e){return null}}async resolveOrchestratorConfig(e){try{const t=this.extractSlotNumber(e),r=await this.getSlotConfiguration(t)
|
|
23
|
+
return r?await this.portalClient.checkFreeUsageAvailable()?{success:!0,slotNumber:t,agentName:e,orchestratorEndpoint:r.orchestratorEndpoint,configuration:r.configuration}:{success:!1,error:"Free usage limit exceeded",slotNumber:t,agentName:e,usageExceeded:!0,usageFallback:"Please upgrade to continue using orchestrator features"}:{success:!1,error:`Slot ${t} is not configured in Portal`,slotNumber:t,agentName:e,fallback:this.getFallbackConfig(t)}}catch(t){return{success:!1,error:"Failed to resolve configuration: "+t,agentName:e}}}async delegateToAgent(e){const t=await this.resolveOrchestratorConfig(e)
|
|
24
|
+
if(!t.success)return t
|
|
25
|
+
try{return await this.portalClient.updateUsage(t.slotNumber,"orchestrator_call"),{success:!0,message:"Successfully delegated to "+e,slotNumber:t.slotNumber,orchestratorEndpoint:t.orchestratorEndpoint,configuration:t.configuration}}catch(t){return{success:!1,error:"Delegation failed: "+t,agentName:e}}}getFallbackConfig(e){return{endpoint:"http://localhost:8080/api/orchestrator/fallback",message:`Slot ${e} not configured, using fallback`,features:["basic_responses","error_handling"]}}}exports.DynamicSlotResolver=DynamicSlotResolver
|
|
26
|
+
class PortalPlugin extends base_plugin_js_1.BasePlugin{constructor(){super(...arguments),this.manifest={id:"portal",name:"Portal Integration",version:"1.0.0",category:"Integration",description:"Portal APIとの統合機能を提供(エージェント委譲、知識注入、認証管理)",authType:"token",loadPriority:"high",tools:[{name:"delegate_to_agent",description:"専門エージェントにタスクを委譲します。動的スロット解決により適切なオーケストレーターに接続します。",inputSchema:DelegateToAgentSchema,outputExample:{success:!0,content:[{type:"text",text:"✅ orchestrator2 にタスクを委譲しました\\n🔗 エンドポイント: https://orchestrator-slot2.example.com\\n📊 使用回数を更新しました"}]}},{name:"inject_knowledge",description:"Portal APIから専門知識を注入します。キーワードに基づいて関連する知識ベースからコンテンツを取得します。",inputSchema:InjectKnowledgeSchema,outputExample:{success:!0,content:[{type:"text",text:"🧠 専門知識を注入しました\\n🔍 キーワード: React\\n📚 知識内容: Reactは..."}]}},{name:"save_knowledge",description:"暗号化された知識を保存します。",inputSchema:SaveKnowledgeSchema,outputExample:{success:!0,content:[{type:"text",text:"💾 知識を暗号化して保存しました"}]}},{name:"list_prompts",description:"利用可能な暗号化プロンプトテンプレートを一覧表示します。",inputSchema:ListPromptsSchema,outputExample:{success:!0,content:[{type:"text",text:"📋 利用可能なプロンプト: システムアーキテクト, UI/UXデザイナー, 実装エージェント"}]}}]},this.validTokens=new Set,this.promptCache=new Map,this.cacheTimeout=3e5}async initialize(){try{this.logFilePath=path.join(os.tmpdir(),`portal-debug-${Date.now()}.log`),this.debugLog("Portal Integration Plugin starting - Log file: "+this.logFilePath),this.slotResolver=new DynamicSlotResolver,this.keywordMapping=new Map([["orchestrator","オーケストレーター"],["requirements-engineer","要件定義エンジニア"],["ui-ux-designer","UI/UXデザイナー"],["data-modeling-engineer","データモデリングエンジニア"],["system-architect","システムアーキテクト"],["implementation-consultant","実装コンサルタント"],["environment-setup","環境構築"],["prototype-implementation","プロトタイプ実装"],["implementation-agent","実装エージェント"],["debug-agent","デバッグエージェント"],["deploy-specialist","デプロイスペシャリスト"],["page-creator","ページクリエイター"],["refactoring-engineer","リファクタリングエンジニア"],["ai-friendliness-diagnostic","AI親和性診断"]]),await this.initializeTokens(),this.markInitialized()}catch(e){throw e}}async shutdown(){this.validTokens.clear(),this.promptCache.clear()}async executeTool(e,t,r){if(!this.isInitialized)return this.handleError("プラグインが初期化されていません","executeTool")
|
|
27
|
+
this.debugLog("Tool called: "+e,t)
|
|
28
|
+
try{switch(e){case"delegate_to_agent":return await this.handleDelegateToAgent(t)
|
|
29
|
+
case"inject_knowledge":return await this.handleInjectKnowledge(t)
|
|
30
|
+
case"save_knowledge":return await this.handleSaveKnowledge(t)
|
|
31
|
+
case"list_prompts":return await this.handleListPrompts(t)
|
|
32
|
+
case"get_debug_log_path":return this.handleGetDebugLogPath()
|
|
33
|
+
default:return this.handleError("未知のツール: "+e,"executeTool")}}catch(e){return this.handleError(e,"executeTool")}}async handleDelegateToAgent(e){try{const t=this.validateArgs(e,DelegateToAgentSchema),token=await this.getSystemToken()
|
|
34
|
+
if(!token||!this.validateToken(token))return this.createErrorResponse("システム認証に失敗しました","SYSTEM_AUTH_ERROR")
|
|
35
|
+
this.debugLog("Delegating to agent: "+t.agentName)
|
|
36
|
+
const r=await this.slotResolver.delegateToAgent(t.agentName)
|
|
37
|
+
if(!r.success){this.debugLog(`Delegation failed for ${t.agentName}:`,r)
|
|
38
|
+
const e=r.usageExceeded?"USAGE_EXCEEDED":"SLOT_RESOLUTION_FAILED"
|
|
39
|
+
return this.createErrorResponse(r.error||"エージェント委譲に失敗しました",e,{agentName:t.agentName,slotNumber:r.slotNumber,fallback:r.fallback||r.usageFallback})}return this.createSuccessResponse([{type:"text",text:`✅ ${t.agentName} にタスクを委譲しました\n🔗 エンドポイント: ${r.orchestratorEndpoint}\n📊 スロット番号: ${r.slotNumber}\n⏰ 使用回数を更新しました`}],{agentName:t.agentName,slotNumber:r.slotNumber,orchestratorEndpoint:r.orchestratorEndpoint,success:!0})}catch(e){return this.handleError(e,"handleDelegateToAgent")}}async handleInjectKnowledge(e){try{const t=this.validateArgs(e,InjectKnowledgeSchema),token=await this.getSystemToken()
|
|
40
|
+
if(!token||!this.validateToken(token))return this.createErrorResponse("システム認証に失敗しました","SYSTEM_AUTH_ERROR")
|
|
41
|
+
const r=`${t.keyword}:${t.level}`,a=this.promptCache.get(r)
|
|
42
|
+
let n,o="unknown"
|
|
43
|
+
if(a&&Date.now()-a.timestamp<this.cacheTimeout)n=a.content,o=a.source||"cache",this.debugLog("Using cached knowledge for "+t.keyword)
|
|
44
|
+
else{const e=await portal_api_client_js_1.portalAPIClient.injectKnowledge(t.keyword,t.context)
|
|
45
|
+
if(!e.success)return this.createErrorResponse(e.error||"知識注入に失敗しました","KNOWLEDGE_INJECTION_FAILED")
|
|
46
|
+
n=e.knowledge,o="portal_api",this.promptCache.set(r,{content:n,timestamp:Date.now(),source:o}),this.debugLog("Knowledge injected from Portal API for "+t.keyword)}return this.createSuccessResponse([{type:"text",text:`🧠 専門知識を注入しました\n🔍 キーワード: ${t.keyword}\n📚 ソース: ${o}\n📖 知識内容: ${n||"知識が見つかりませんでした"}`}],{keyword:t.keyword,source:o,knowledgeContent:n,cached:"cache"===o})}catch(e){return this.handleError(e,"handleInjectKnowledge")}}async handleSaveKnowledge(e){try{const t=this.validateArgs(e,SaveKnowledgeSchema)
|
|
47
|
+
return this.validateToken(t.token)?this.createSuccessResponse([{type:"text",text:`💾 知識を暗号化して保存しました\n🔑 識別子: ${t.identifier}\n📝 サイズ: ${t.knowledge.length} 文字`}],{identifier:t.identifier,saved:!0}):this.createErrorResponse("無効な認証トークンです","AUTH_ERROR")}catch(e){return this.handleError(e,"handleSaveKnowledge")}}async handleListPrompts(e){try{const t=this.validateArgs(e,ListPromptsSchema)
|
|
48
|
+
if(!this.validateToken(t.token))return this.createErrorResponse("無効な認証トークンです","AUTH_ERROR")
|
|
49
|
+
const r=Array.from(this.keywordMapping.entries()).map(([e,name])=>({key:e,name:name})),a=r.map(e=>`- ${e.name} (${e.key})`).join("\n")
|
|
50
|
+
return this.createSuccessResponse([{type:"text",text:`📋 利用可能なプロンプトテンプレート:\n${a}\n\n💡 inject_knowledge ツールで任意のキーワードを使用して専門知識を取得できます。`}],{availablePrompts:r,count:r.length})}catch(e){return this.handleError(e,"handleListPrompts")}}handleGetDebugLogPath(){return this.createSuccessResponse([{type:"text",text:JSON.stringify({success:!0,logPath:this.logFilePath,message:"Debug log is being written to: "+this.logFilePath})}],{logPath:this.logFilePath})}async getSystemToken(){try{return await SimpleAuthManager_js_1.SimpleAuthManager.getToken()}catch(e){return this.debugLog("Failed to get system token:",e),null}}validateToken(token){return this.validTokens.has(token)}async initializeTokens(){try{const token=await this.getSystemToken()
|
|
51
|
+
token&&(this.validTokens.add(token),this.debugLog(`System token initialized: ${token.substring(0,30)}...`))}catch(e){this.debugLog("Token initialization failed:",e)}}debugLog(e,t){const r=(new Date).toISOString(),a=t?`[${r}] ${e}\n${JSON.stringify(t,null,2)}\n`:`[${r}] ${e}\n`
|
|
52
|
+
try{fs.appendFile(this.logFilePath,a).catch(()=>{})}catch(e){}}createErrorResponse(e,t,r){return this.createSuccessResponse([{type:"text",text:JSON.stringify({success:!1,error:e,code:t,...r})}],{success:!1,error:e,code:t,...r})}async performHealthCheck(){try{if(!await portal_api_client_js_1.portalAPIClient.getUserInfo())throw Error("Portal API接続テストに失敗しました")}catch(e){throw Error("Portal API接続テストに失敗: "+e)}}}exports.default=PortalPlugin
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict"
|
|
2
|
+
var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r)
|
|
3
|
+
var o=Object.getOwnPropertyDescriptor(t,r)
|
|
4
|
+
o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,o)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[]
|
|
5
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
6
|
+
return t},e(t)}
|
|
7
|
+
return function(t){if(t&&t.__esModule)return t
|
|
8
|
+
var r={}
|
|
9
|
+
if(null!=t)for(var n=e(t),o=0;o<n.length;o++)"default"!==n[o]&&__createBinding(r,t,n[o])
|
|
10
|
+
return __setModuleDefault(r,t),r}}()
|
|
11
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.SecureMCPServer=void 0
|
|
12
|
+
const index_js_1=require("@modelcontextprotocol/sdk/server/index.js"),stdio_js_1=require("@modelcontextprotocol/sdk/server/stdio.js"),types_js_1=require("@modelcontextprotocol/sdk/types.js"),crypto_utils_js_1=require("./crypto-utils.js"),fs=__importStar(require("fs")),path=__importStar(require("path")),os=__importStar(require("os")),plugin_manager_js_1=require("./plugins/plugin-manager.js")
|
|
13
|
+
class SecureMCPServer{constructor(){this.cacheTimeout=3e5,this.server=new index_js_1.Server({name:"secure-bluelamp-mcp",version:"3.0.0"},{capabilities:{tools:{}}}),this.validTokens=new Set,this.promptCache=new Map,this.encryptionKey=process.env.BLUELAMP_ENCRYPTION_KEY||"demo-encryption-password-2024",this.keywordMapping=new Map([["orchestrator","オーケストレーター"],["requirements-engineer","要件定義エンジニア"],["ui-ux-designer","UI/UXデザイナー"],["data-modeling-engineer","データモデリングエンジニア"],["system-architect","システムアーキテクト"],["implementation-consultant","実装コンサルタント"],["environment-setup","環境構築"],["prototype-implementation","プロトタイプ実装"],["implementation-agent","実装エージェント"],["debug-agent","デバッグエージェント"],["deploy-specialist","デプロイスペシャリスト"],["page-creator","ページクリエイター"],["refactoring-engineer","リファクタリングエンジニア"],["ai-friendliness-diagnostic","AI親和性診断"]]),this.logFilePath=path.join(os.tmpdir(),`bluelamp-debug-${Date.now()}.log`),this.debugLog("BlueLamp MCP Server starting - Log file: "+this.logFilePath),this.initializeTokensSync(),this.setupHandlers()}debugLog(e,t){const r=(new Date).toISOString(),n=t?`[${r}] ${e}\n${JSON.stringify(t,null,2)}\n`:`[${r}] ${e}\n`
|
|
14
|
+
try{fs.appendFileSync(this.logFilePath,n)}catch(e){}}initializeTokensSync(){try{const e=process.env.BLUELAMP_TOKEN
|
|
15
|
+
e&&this.validTokens.add(e),this.loadCLITokenFromFile(),this.validTokens.add("secure-token-2024"),this.debugLog("Total valid tokens: "+this.validTokens.size)}catch(e){this.validTokens.add("secure-token-2024"),this.debugLog("Token initialization error:",e)}}loadCLITokenFromFile(){this.loadCLITokenAsync()}async loadCLITokenAsync(){try{const e=await Promise.resolve().then(()=>__importStar(require("path"))),t=(await Promise.resolve().then(()=>__importStar(require("url"))),e.dirname(__filename)),r=e.dirname(e.dirname(e.dirname(t))),n=e.join(r,"lib/mcp-server/dist/security"),o=await Promise.resolve(`file://${n}/SimpleAuthManager.js`).then(e=>__importStar(require(e))),token=await o.SimpleAuthManager.getToken()
|
|
16
|
+
token&&token.startsWith("cli_")&&(this.validTokens.add(token),this.debugLog(`Loaded CLI token from SimpleAuthManager: ${token.substring(0,20)}...`))}catch(e){this.debugLog("CLI token loading error:",e)}}async getSystemToken(){try{const e=process.env.BLUELAMP_TOKEN
|
|
17
|
+
if(e&&this.validTokens.has(e))return e
|
|
18
|
+
const t=await Promise.resolve().then(()=>__importStar(require("path"))),r=(await Promise.resolve().then(()=>__importStar(require("url"))),t.dirname(__filename)),n=t.dirname(t.dirname(t.dirname(r))),o=t.join(n,"lib/mcp-server/dist/security")
|
|
19
|
+
try{const e=await Promise.resolve(`file://${o}/SimpleAuthManager.js`).then(e=>__importStar(require(e))),token=await e.SimpleAuthManager.getToken()
|
|
20
|
+
if(token&&token.startsWith("cli_"))return token}catch(e){this.debugLog("Failed to load token from SimpleAuthManager:",e)}for(const token of this.validTokens)if(token.startsWith("cli_"))return token
|
|
21
|
+
return"secure-token-2024"}catch(e){return this.debugLog("System token retrieval error:",e),"secure-token-2024"}}setupHandlers(){this.server.setRequestHandler(types_js_1.ListToolsRequestSchema,async()=>{const e=[{name:"inject_knowledge",description:"Inject specialized knowledge from Portal API",inputSchema:{type:"object",properties:{keyword:{type:"string",description:"Keyword to search for specialized knowledge"},context:{type:"string",description:"Additional context"},level:{type:"string",description:"Knowledge detail level"}},required:["keyword","context"]}},{name:"save_knowledge",description:"Save knowledge to encrypted storage",inputSchema:{type:"object",properties:{knowledge:{type:"string",description:"Knowledge content to save (encrypted)"},identifier:{type:"string",description:"Unique identifier for the knowledge"},token:{type:"string",description:"Authentication token for access"}},required:["knowledge","identifier","token"]}},{name:"list_prompts",description:"List available encrypted prompt templates",inputSchema:{type:"object",properties:{token:{type:"string",description:"Authentication token for access"},category:{type:"string",description:"Filter by category (optional)"}},required:["token"]}},{name:"delegate_to_agent",description:"Delegate task to specialized sub-agent with knowledge injection",inputSchema:{type:"object",properties:{agentName:{type:"string",description:"Name of the target agent"},token:{type:"string",description:"Authentication token for access"}},required:["agentName","token"]}},{name:"get_debug_log_path",description:"Get the path to the debug log file",inputSchema:{type:"object",properties:{},required:[]}}]
|
|
22
|
+
let t=[]
|
|
23
|
+
try{plugin_manager_js_1.pluginManager&&(t=plugin_manager_js_1.pluginManager.getAvailableTools(),this.debugLog(`プラグインツール取得完了: ${t.length}個`))}catch(e){this.debugLog("プラグインツール取得エラー",e)}const r=[...e,...t]
|
|
24
|
+
return this.debugLog(`全ツール数: ${r.length} (基本: ${e.length}, プラグイン: ${t.length})`),{tools:r}}),this.server.setRequestHandler(types_js_1.CallToolRequestSchema,async e=>{const{name:t,arguments:r}=e.params
|
|
25
|
+
this.debugLog("Tool called: "+t),this.debugLog("Tool args:",r)
|
|
26
|
+
try{switch(t){case"inject_knowledge":return this.debugLog("Calling handleInjectKnowledge"),await this.handleInjectKnowledge(r)
|
|
27
|
+
case"save_knowledge":return await this.handleSaveKnowledge(r)
|
|
28
|
+
case"list_prompts":return await this.handleListPrompts(r)
|
|
29
|
+
case"delegate_to_agent":return await this.handleDelegateToAgent(r)
|
|
30
|
+
case"get_debug_log_path":return{content:[{type:"text",text:JSON.stringify({success:!0,logPath:this.logFilePath,message:"Debug log is being written to: "+this.logFilePath})}]}
|
|
31
|
+
default:const e=await this.handlePluginTool(t,r)
|
|
32
|
+
if(e)return e
|
|
33
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound,"Unknown tool: "+t)}}catch(e){if(e instanceof types_js_1.McpError)throw e
|
|
34
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError,`Tool execution failed: ${t}: ${e}`)}})}validateToken(token){return this.validTokens.has(token)}async fetchFromPortalAPI(keyword,token){try{const e=`${process.env.BLUELAMP_PORTAL_API_URL||"https://bluelamp-235426778039.asia-northeast1.run.app/api/cli/prompts/knowledge-injection"}/${encodeURIComponent(keyword)}`
|
|
35
|
+
this.debugLog("Portal API request:",{url:e,token:token.substring(0,20)+"...",keyword:keyword})
|
|
36
|
+
const t=new AbortController,r=setTimeout(()=>t.abort(),3e4),n=await fetch(e,{method:"GET",headers:{"X-CLI-Token":token,"Content-Type":"application/json","User-Agent":"BlueLamp-MCP-Server/1.0"},signal:t.signal})
|
|
37
|
+
if(clearTimeout(r),this.debugLog("Portal API response status: "+n.status),!n.ok){if(this.debugLog(`Portal API error: ${n.status} ${n.statusText}`),401===n.status)return this.debugLog("Authentication failed - token may be invalid"),null
|
|
38
|
+
if(404===n.status)return this.debugLog("Knowledge not found for keyword: "+keyword),null
|
|
39
|
+
throw Error(`Portal API error: ${n.status} ${n.statusText}`)}const o=await n.text()
|
|
40
|
+
return this.debugLog("Portal API raw response:",o.substring(0,200)+"..."),o&&o.trim()?o.trim():(this.debugLog("Empty response from Portal API"),null)}catch(e){return null}}async handleInjectKnowledge(e){this.debugLog("Received args:",e),this.debugLog("Valid tokens: "+Array.from(this.validTokens).map(e=>e.substring(0,30)+"...").join(", "))
|
|
41
|
+
let token=await this.getSystemToken()
|
|
42
|
+
if(this.debugLog(`Using system token: ${token?.substring(0,30)}...`),!token||!this.validateToken(token))return this.debugLog("System authentication failed"),{content:[{type:"text",text:JSON.stringify({success:!1,error:"System authentication failed",code:"SYSTEM_AUTH_ERROR"})}]}
|
|
43
|
+
try{const t=`${e.keyword}:${e.level}`,r=this.promptCache.get(t)
|
|
44
|
+
let n,o="unknown"
|
|
45
|
+
if(r&&Date.now()-r.timestamp<this.cacheTimeout)n=r.content,o=r.source||"cache"
|
|
46
|
+
else{const r=path.join(process.cwd(),"lib/knowledge","encrypted",e.keyword+".enc")
|
|
47
|
+
if(fs.existsSync(r))try{n=crypto_utils_js_1.CryptoUtils.decryptFile(r,this.encryptionKey),o="local"}catch(t){const r=await this.fetchFromPortalAPI(e.keyword,token)
|
|
48
|
+
if(!r)return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Portal APIから知識を取得できませんでした: "+e.keyword,code:"KNOWLEDGE_NOT_FOUND"})}]}
|
|
49
|
+
n=r,o="api"}else{this.debugLog("Fetching from Portal API for keyword: "+e.keyword)
|
|
50
|
+
const t=await this.fetchFromPortalAPI(e.keyword,token)
|
|
51
|
+
if(this.debugLog("Portal API result:",{keyword:e.keyword,resultExists:!!t,resultType:typeof t,resultLength:t?t.length:0}),!t)return this.debugLog("Portal API returned null for keyword: "+e.keyword),{content:[{type:"text",text:JSON.stringify({success:!1,error:"専門知識が見つかりませんでした: "+e.keyword,code:"KNOWLEDGE_NOT_FOUND"})}]}
|
|
52
|
+
n=t,o="api"}this.promptCache.set(t,{content:n,timestamp:Date.now(),source:o})}const s=this.buildResponse(n,token)
|
|
53
|
+
return{content:[{type:"text",text:JSON.stringify({success:!0,result:s,keyword:e.keyword,token:token.substring(0,20)+"...",cached:"cache"===o,source:o,timestamp:(new Date).toISOString()})}]}}catch(e){return{content:[{type:"text",text:JSON.stringify({success:!1,error:"知識注入処理中にエラーが発生しました: "+e,code:"INJECTION_ERROR"})}]}}}buildResponse(e,token){return this.debugLog("buildResponse called with content length: "+(e?e.length:0)),{content:[{type:"text",text:e}]}}async handleSaveKnowledge(e){if(!this.validateToken(e.token))return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Invalid authentication token",code:"AUTH_ERROR"})}]}
|
|
54
|
+
try{const t=path.join(process.cwd(),"lib/knowledge","encrypted")
|
|
55
|
+
fs.existsSync(t)||fs.mkdirSync(t,{recursive:!0})
|
|
56
|
+
const r=path.join(t,e.identifier+".enc")
|
|
57
|
+
return crypto_utils_js_1.CryptoUtils.encryptFile(e.knowledge,r,this.encryptionKey),{content:[{type:"text",text:JSON.stringify({success:!0,message:"Knowledge saved successfully",outputPath:r,size:fs.statSync(r).size})}]}}catch(e){return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Knowledge save failed: "+e,code:"SAVE_ERROR"})}]}}}async handleListPrompts(e){if(!this.validateToken(e.token))return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Invalid authentication token",code:"AUTH_ERROR"})}]}
|
|
58
|
+
try{const t=path.join(process.cwd(),"lib/knowledge","encrypted"),r=path.join(t,"prompt-registry.json")
|
|
59
|
+
if(!fs.existsSync(r))return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Prompt registry not found",code:"REGISTRY_NOT_FOUND"})}]}
|
|
60
|
+
const n=JSON.parse(fs.readFileSync(r,"utf8"))
|
|
61
|
+
let o=n.prompts
|
|
62
|
+
return e.category&&(o=o.filter(t=>t.category===e.category)),{content:[{type:"text",text:JSON.stringify({success:!0,totalCount:o.length,prompts:o,categories:n.categories,lastUpdated:n.lastUpdated})}]}}catch(e){return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Failed to list prompts: "+e,code:"LIST_ERROR"})}]}}}async handleDelegateToAgent(e){if(!this.validateToken(e.token))return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Invalid authentication token",code:"AUTH_ERROR"})}]}
|
|
63
|
+
try{const t=path.join(process.cwd(),"lib/knowledge","agents",e.agentName+".agent")
|
|
64
|
+
if(!fs.existsSync(t))return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Agent script not found: "+e.agentName,code:"AGENT_NOT_FOUND"})}]}
|
|
65
|
+
const r=JSON.parse(fs.readFileSync(t,"utf8")),n=path.join(process.cwd(),"lib/knowledge","encrypted"),o=path.join(n,e.agentName+".enc"),s=fs.existsSync(o)
|
|
66
|
+
return{content:[{type:"text",text:JSON.stringify({success:!0,agentName:e.agentName,agentData:r,hasKnowledge:s,knowledgeSize:s?fs.statSync(o).size:0})}]}}catch(e){return{content:[{type:"text",text:JSON.stringify({success:!1,error:"Agent delegation failed: "+e,code:"DELEGATION_ERROR"})}]}}}startCacheCleanup(){}async handlePluginTool(e,t){try{if(!plugin_manager_js_1.pluginManager)return null
|
|
67
|
+
if(!plugin_manager_js_1.pluginManager.getAvailableTools().find(t=>t.name===e))return null
|
|
68
|
+
this.debugLog("プラグインツール実行: "+e,t)
|
|
69
|
+
const r={userId:"current_user",service:"leonardo",apiKey:process.env.LEONARDO_API_KEY,settings:{}}
|
|
70
|
+
let n="leonardo"
|
|
71
|
+
e.startsWith("leonardo_")&&(n="leonardo")
|
|
72
|
+
const o=await plugin_manager_js_1.pluginManager.executePlugin(n,e,t,r)
|
|
73
|
+
if(o.success)return this.debugLog("プラグインツール実行成功: "+e),{content:o.content,_meta:o.metadata}
|
|
74
|
+
throw this.debugLog("プラグインツール実行失敗: "+e,o.error),new types_js_1.McpError(types_js_1.ErrorCode.InternalError,"プラグインツール実行エラー: "+o.error)}catch(t){if(this.debugLog("プラグインツール処理エラー: "+e,t),t instanceof types_js_1.McpError)throw t
|
|
75
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.InternalError,"プラグイン処理中にエラーが発生しました: "+t.message)}}async run(){try{await plugin_manager_js_1.pluginManager.initialize(),this.debugLog("プラグインマネージャー初期化完了")}catch(e){this.debugLog("プラグインマネージャー初期化エラー",e)}const e=new stdio_js_1.StdioServerTransport
|
|
76
|
+
await this.server.connect(e),this.startCacheCleanup()}}exports.SecureMCPServer=SecureMCPServer,require.main===module&&(new SecureMCPServer).run().catch(()=>{})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict"
|
|
2
|
+
var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,a){void 0===a&&(a=r)
|
|
3
|
+
var n=Object.getOwnPropertyDescriptor(t,r)
|
|
4
|
+
n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,a,n)}:function(e,t,r,a){void 0===a&&(a=r),e[a]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[]
|
|
5
|
+
for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[t.length]=r)
|
|
6
|
+
return t},e(t)}
|
|
7
|
+
return function(t){if(t&&t.__esModule)return t
|
|
8
|
+
var r={}
|
|
9
|
+
if(null!=t)for(var a=e(t),n=0;n<a.length;n++)"default"!==a[n]&&__createBinding(r,t,a[n])
|
|
10
|
+
return __setModuleDefault(r,t),r}}()
|
|
11
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.ApiKeyManager=void 0
|
|
12
|
+
const https=__importStar(require("https")),http=__importStar(require("http")),url_1=require("url"),TokenManager_js_1=require("./TokenManager.js")
|
|
13
|
+
class ApiKeyManager{static async getApiKey(e){try{const t=this.cache[e]
|
|
14
|
+
if(t&&Date.now()-t.fetchedAt<t.ttl)return t.apiKey
|
|
15
|
+
const r=await TokenManager_js_1.TokenManager.loadToken()
|
|
16
|
+
if(!r||!r.token)return null
|
|
17
|
+
const a=await this.fetchApiKeysFromPortal(r.token)
|
|
18
|
+
if(!a)return null
|
|
19
|
+
const n=a.find(t=>t.serviceId===e||t.service?.id===e||t.serviceName?.toLowerCase()===e.toLowerCase())
|
|
20
|
+
return n?(this.cache[e]={apiKey:n.apiKey,fetchedAt:Date.now(),ttl:this.DEFAULT_TTL},n.apiKey):null}catch(e){return null}}static async fetchApiKeysFromPortal(token){return new Promise((e,t)=>{const r=new url_1.URL(this.PORTAL_API_URL+"/api/simple/api-keys"),a={hostname:r.hostname,port:r.port||("https:"===r.protocol?443:80),path:r.pathname,method:"GET",headers:{Authorization:"Bearer "+token,"X-CLI-Token":token,"Content-Type":"application/json"},timeout:1e4},n=("https:"===r.protocol?https:http).request(a,t=>{let r=""
|
|
21
|
+
t.on("data",e=>{r+=e}),t.on("end",()=>{try{const t=JSON.parse(r)
|
|
22
|
+
t.success&&t.data?.apiKeys?e(t.data.apiKeys):e(null)}catch(t){e(null)}})})
|
|
23
|
+
n.on("error",t=>{e(null)}),n.on("timeout",()=>{n.destroy(),e(null)}),n.end()})}static clearCache(e){e?delete this.cache[e]:this.cache={}}static async preloadApiKeys(e){const t=e.map(e=>this.getApiKey(e))
|
|
24
|
+
await Promise.allSettled(t)}}exports.ApiKeyManager=ApiKeyManager,ApiKeyManager.cache={},ApiKeyManager.DEFAULT_TTL=3e5,ApiKeyManager.PORTAL_API_URL=process.env.PORTAL_URL||"https://bluelamp-portal-6clpzmy5pa-an.a.run.app"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict"
|
|
2
|
+
var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n)
|
|
3
|
+
var i=Object.getOwnPropertyDescriptor(t,n)
|
|
4
|
+
i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[]
|
|
5
|
+
for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n)
|
|
6
|
+
return t},e(t)}
|
|
7
|
+
return function(t){if(t&&t.__esModule)return t
|
|
8
|
+
var n={}
|
|
9
|
+
if(null!=t)for(var r=e(t),i=0;i<r.length;i++)"default"!==r[i]&&__createBinding(n,t,r[i])
|
|
10
|
+
return __setModuleDefault(n,t),n}}()
|
|
11
|
+
Object.defineProperty(exports,"__esModule",{value:!0}),exports.InteractiveLogin=void 0
|
|
12
|
+
const readline=__importStar(require("readline")),fs=__importStar(require("fs")),path=__importStar(require("path")),os=__importStar(require("os")),crypto=__importStar(require("crypto")),PortalAuthClient_js_1=require("./PortalAuthClient.js"),TokenManager_js_1=require("./TokenManager.js")
|
|
13
|
+
class InteractiveLogin{static getLoginInfoPath(){const e=os.homedir()
|
|
14
|
+
return path.join(e,".bluelamp_login_info.enc")}static exists(){return fs.existsSync(this.getLoginInfoPath())}static async loadLoginInfo(){const e=this.getLoginInfoPath()
|
|
15
|
+
if(!fs.existsSync(e))return null
|
|
16
|
+
try{const t=fs.readFileSync(e,"utf8"),n=crypto.createHash("sha256").update(os.userInfo().username+os.hostname()).digest(),r=crypto.createDecipheriv("aes-256-cbc",n.slice(0,32),Buffer.alloc(16))
|
|
17
|
+
let i=r.update(t,"hex","utf8")
|
|
18
|
+
return i+=r.final("utf8"),JSON.parse(i)}catch(e){return null}}static async deleteLoginInfo(){const e=this.getLoginInfoPath()
|
|
19
|
+
return!!fs.existsSync(e)&&(fs.unlinkSync(e),!0)}static async performLogin(){try{const e=await TokenManager_js_1.TokenManager.loadToken()
|
|
20
|
+
if(e&&e.token){const t=await TokenManager_js_1.TokenManager.validateToken(e.token)
|
|
21
|
+
if(t.valid)return{token:e.token,user:t.userInfo,isFromCache:!0}
|
|
22
|
+
await TokenManager_js_1.TokenManager.deleteToken()}let t=await this.loadLoginInfo()
|
|
23
|
+
if(t){const e=await PortalAuthClient_js_1.PortalAuthClient.authenticate(t.email,t.passwordHash)
|
|
24
|
+
if(!e.success){if(!e.error||!e.error.includes("ナレッジインジェクション使用回数上限"))return await InteractiveLogin.deleteLoginInfo(),await this.performLogin()
|
|
25
|
+
process.exit(1)}return await TokenManager_js_1.TokenManager.saveToken(e.token,e.user)&&await InteractiveLogin.deleteLoginInfo(),{token:e.token,user:e.user,isFirstTime:!1,isFromCache:!1,migrated:!0}}{const e=await this.promptCredentials(),t=await PortalAuthClient_js_1.PortalAuthClient.authenticate(e.email,e.password)
|
|
26
|
+
return t.success||(t.error&&t.error.includes("ナレッジインジェクション使用回数上限"),process.exit(1)),await TokenManager_js_1.TokenManager.saveToken(t.token,t.user),await InteractiveLogin.deleteLoginInfo(),{token:t.token,user:t.user,isFirstTime:!0,isFromCache:!1}}}catch(e){process.exit(1)}}static async promptCredentials(){const e=readline.createInterface({input:process.stdin,output:process.stdout})
|
|
27
|
+
try{const t=await this.question(e,"Email: ")
|
|
28
|
+
this.validateEmail(t)||(e.close(),process.exit(1))
|
|
29
|
+
const n=await this.question(e,"Password: ")
|
|
30
|
+
return n&&0!==n.trim().length||(e.close(),process.exit(1)),e.close(),{email:t.trim(),password:n.trim()}}catch(t){throw e.close(),t}}static question(e,t){return new Promise(n=>{e.question(t,e=>{n(e)})})}static validateEmail(e){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)}static displayLoginSuccess(e){e.isFirstTime}static async logout(){const e=readline.createInterface({input:process.stdin,output:process.stdout})
|
|
31
|
+
try{const t=await this.question(e,"ログイン情報を削除しますか? (y/N): ")
|
|
32
|
+
"y"!==t.toLowerCase()&&"yes"!==t.toLowerCase()||await InteractiveLogin.deleteLoginInfo()}finally{e.close()}}static async checkLoginStatus(){return!!InteractiveLogin.exists()&&!!await InteractiveLogin.loadLoginInfo()}}exports.InteractiveLogin=InteractiveLogin
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';const a0_0x31fa58=a0_0x1a9f;(function(_0x5b6ab4,_0x3bcbb6){const _0x1508fd=a0_0x1a9f,_0x2468cf=_0x5b6ab4();while(!![]){try{const _0x56545f=-parseInt(_0x1508fd(0xfa))/0x1*(-parseInt(_0x1508fd(0x11f))/0x2)+-parseInt(_0x1508fd(0xb3))/0x3*(-parseInt(_0x1508fd(0xed))/0x4)+-parseInt(_0x1508fd(0x18a))/0x5+-parseInt(_0x1508fd(0x9b))/0x6+-parseInt(_0x1508fd(0x120))/0x7+-parseInt(_0x1508fd(0xdb))/0x8*(-parseInt(_0x1508fd(0x1a3))/0x9)+parseInt(_0x1508fd(0xad))/0xa*(-parseInt(_0x1508fd(0xf2))/0xb);if(_0x56545f===_0x3bcbb6)break;else _0x2468cf['push'](_0x2468cf['shift']());}catch(_0x4db23e){_0x2468cf['push'](_0x2468cf['shift']());}}}(a0_0x11e8,0x55741));var a0_0x4472b4=this&&this[a0_0x31fa58(0x1a0)]||(Object[a0_0x31fa58(0xb2)]?function(_0xd34003,_0x2a5c5a,_0x3973de,_0x4e967e){const _0x4f1445=a0_0x31fa58,_0x159884={};_0x159884['wurnZ']=function(_0x32f064,_0x38bb80){return _0x32f064!==_0x38bb80;},_0x159884[_0x4f1445(0xb1)]=_0x4f1445(0x16f),_0x159884[_0x4f1445(0xab)]=_0x4f1445(0xa2),_0x159884[_0x4f1445(0x172)]=function(_0x7dd93b,_0x1a5c3c){return _0x7dd93b in _0x1a5c3c;},_0x159884[_0x4f1445(0x100)]=_0x4f1445(0x170);const _0x454722=_0x159884;if(_0x4e967e===undefined)_0x4e967e=_0x3973de;var _0x364b1f=Object[_0x4f1445(0x160)](_0x2a5c5a,_0x3973de);(!_0x364b1f||(_0x454722[_0x4f1445(0x172)](_0x454722[_0x4f1445(0x100)],_0x364b1f)?!_0x2a5c5a['__esModule']:_0x364b1f[_0x4f1445(0x16d)]||_0x364b1f['configurable']))&&(_0x364b1f={'enumerable':!![],'get':function(){const _0x5c7a3c=_0x4f1445;return _0x454722[_0x5c7a3c(0xd1)](_0x454722['wNPcC'],_0x454722['rFmez'])?_0x2a5c5a[_0x3973de]:![];}}),Object[_0x4f1445(0x174)](_0xd34003,_0x4e967e,_0x364b1f);}:function(_0x3ea129,_0x33b414,_0x5bcd9e,_0x56deef){if(_0x56deef===undefined)_0x56deef=_0x5bcd9e;_0x3ea129[_0x56deef]=_0x33b414[_0x5bcd9e];}),a0_0x34504e=this&&this[a0_0x31fa58(0xcb)]||(Object[a0_0x31fa58(0xb2)]?function(_0x213b00,_0x5c4bd6){const _0x434ab3=a0_0x31fa58,_0x332956={};_0x332956[_0x434ab3(0xfe)]=!![],_0x332956[_0x434ab3(0xec)]=_0x5c4bd6,Object[_0x434ab3(0x174)](_0x213b00,_0x434ab3(0x134),_0x332956);}:function(_0x4c3903,_0x26841d){const _0x20c0b3=a0_0x31fa58;_0x4c3903[_0x20c0b3(0x134)]=_0x26841d;}),a0_0x687fe7=this&&this[a0_0x31fa58(0x136)]||(function(){const _0x618803=a0_0x31fa58,_0x4c5561={'ElyLJ':_0x618803(0x17d),'kAUkY':function(_0x4365a6,_0x4abbbc){return _0x4365a6+_0x4abbbc;},'aEGUu':'BlueLamp\x20MCP\x20Server','yotji':_0x618803(0x131),'Uibbw':_0x618803(0x9f),'ibADY':'(((.+)+)+)+$','eTjgI':_0x618803(0xc0),'IYRLA':_0x618803(0xa4),'vTAaj':function(_0x283c33,_0x2a984e){return _0x283c33<_0x2a984e;},'kXUEA':function(_0x4d3ff8,_0x59f197){return _0x4d3ff8*_0x59f197;},'WWbnL':function(_0x3bf4f2,_0x50e04a){return _0x3bf4f2*_0x50e04a;},'FhzNx':_0x618803(0x192),'PeYyL':_0x618803(0x163),'hvjJm':_0x618803(0x191),'KxiAh':_0x618803(0x105),'gHsKo':function(_0x336425,_0x138914){return _0x336425(_0x138914);},'bUIyD':_0x618803(0x123),'kEOVN':function(_0x3d5d1c,_0x273a8a,_0x395eed){return _0x3d5d1c(_0x273a8a,_0x395eed);},'cYQBL':_0x618803(0xe4),'zoqcN':function(_0x964449,_0x195cdb){return _0x964449(_0x195cdb);},'YgTTs':_0x618803(0x10f),'CZvJz':_0x618803(0x155),'VfoOl':function(_0x539bde){return _0x539bde();},'UIIqU':_0x618803(0x157),'MbEvd':_0x618803(0xb4),'KfNCQ':_0x618803(0x197),'xmkeo':'table','ZLrqy':function(_0x45361e,_0x426833){return _0x45361e!=_0x426833;},'CythF':function(_0x11ac28,_0x283a36){return _0x11ac28<_0x283a36;},'ybWwh':function(_0x501ad9,_0xfa43cb){return _0x501ad9!==_0xfa43cb;},'TGlpJ':_0x618803(0x134),'eEtvP':function(_0x358e4b,_0x39c6e3,_0x40c592){return _0x358e4b(_0x39c6e3,_0x40c592);},'sKhQD':function(_0x450c92){return _0x450c92();},'tDSzm':function(_0x67d02b,_0x11940e,_0x504106){return _0x67d02b(_0x11940e,_0x504106);}},_0x52ad44=(function(){const _0x306e85=_0x618803,_0x160a8e={'IYgIA':_0x4c5561[_0x306e85(0x193)],'koNAZ':function(_0x11ba07,_0x58039d){const _0x4c3941=_0x306e85;return _0x4c5561[_0x4c3941(0xda)](_0x11ba07,_0x58039d);},'trysw':'gger'};let _0x546649=!![];return function(_0x849485,_0x1e52ef){const _0x49e30c=_0x306e85,_0x59f5db={'uxRkz':function(_0x2249f3,_0x2780f3){return _0x160a8e['koNAZ'](_0x2249f3,_0x2780f3);},'qofHo':_0x160a8e[_0x49e30c(0x190)],'bEbof':_0x49e30c(0x1a5)},_0x4bbf3f=_0x546649?function(){const _0xbe0527=_0x49e30c;if(_0x1e52ef){if(_0x160a8e[_0xbe0527(0xfb)]===_0x160a8e['IYgIA']){const _0x3200ed=_0x1e52ef[_0xbe0527(0x149)](_0x849485,arguments);return _0x1e52ef=null,_0x3200ed;}else(function(){return!![];}[_0xbe0527(0x158)](hIFBPa[_0xbe0527(0x90)](_0xbe0527(0x99),hIFBPa[_0xbe0527(0x151)]))[_0xbe0527(0x9d)](hIFBPa[_0xbe0527(0x8a)]));}}:function(){};return _0x546649=![],_0x4bbf3f;};}()),_0x5265e5=_0x4c5561[_0x618803(0x14a)](_0x52ad44,this,function(){const _0x48e16b=_0x618803;return _0x4c5561['yotji']!==_0x4c5561['Uibbw']?_0x5265e5[_0x48e16b(0x15a)]()[_0x48e16b(0x167)](_0x4c5561[_0x48e16b(0xa3)])[_0x48e16b(0x15a)]()['constructor'](_0x5265e5)[_0x48e16b(0x167)](_0x48e16b(0x14d)):{'deviceName':_0x3a8d89[_0x48e16b(0x91)](),'platform':_0x37820c[_0x48e16b(0x10d)](),'arch':_0x1a887a[_0x48e16b(0x8f)](),'userAgent':_0x4c5561[_0x48e16b(0xc9)],'nodeVersion':_0x279aab[_0x48e16b(0x18b)],'timestamp':_0x5eca09[_0x48e16b(0xc3)]()};});_0x4c5561[_0x618803(0x19b)](_0x5265e5);const _0x4bc52f=(function(){const _0x1acf90=_0x618803,_0x1d67c3={};_0x1d67c3['osZUC']=function(_0x5ea972,_0x2bd3e8){return _0x5ea972===_0x2bd3e8;},_0x1d67c3[_0x1acf90(0xde)]=_0x4c5561[_0x1acf90(0xd8)],_0x1d67c3[_0x1acf90(0x127)]='jEYXC';const _0x218a65=_0x1d67c3;if(_0x1acf90(0x94)!==_0x4c5561[_0x1acf90(0x19d)]){let _0x439d13=!![];return function(_0x44fe56,_0x44bbb8){const _0x1fb272=_0x1acf90;if(_0x218a65[_0x1fb272(0xc7)](_0x218a65[_0x1fb272(0xde)],_0x218a65[_0x1fb272(0x127)]))return!![];else{const _0x42704c=_0x439d13?function(){const _0x3e963c=_0x1fb272;if(_0x44bbb8){const _0x1825f9=_0x44bbb8[_0x3e963c(0x149)](_0x44fe56,arguments);return _0x44bbb8=null,_0x1825f9;}}:function(){};return _0x439d13=![],_0x42704c;}};}else return![];}());(function(){const _0x234b65=_0x618803,_0x2f62de={'IUKcq':function(_0x5ca69b,_0x3b0c8e){const _0x2caebf=a0_0x1a9f;return _0x4c5561[_0x2caebf(0xef)](_0x5ca69b,_0x3b0c8e);},'vexeZ':function(_0xbb05d8,_0x3c74d8){return _0x4c5561['kXUEA'](_0xbb05d8,_0x3c74d8);},'JgtsT':function(_0x21d73e,_0x5d56e0){const _0x50db1c=a0_0x1a9f;return _0x4c5561[_0x50db1c(0xea)](_0x21d73e,_0x5d56e0);},'vkcEY':_0x4c5561[_0x234b65(0x92)],'iPHyW':_0x4c5561[_0x234b65(0x128)],'XTlNh':_0x4c5561[_0x234b65(0x10a)],'IFPRO':'init','GYnjI':function(_0x43945b,_0x16f4c7){const _0x340f3d=_0x234b65;return _0x4c5561[_0x340f3d(0xda)](_0x43945b,_0x16f4c7);},'xmXJQ':_0x234b65(0x140),'xshxW':function(_0x52fabd,_0x4db071){const _0x19c19e=_0x234b65;return _0x4c5561[_0x19c19e(0xda)](_0x52fabd,_0x4db071);},'kVBqC':_0x4c5561['KxiAh'],'gMQIh':function(_0x341a6e,_0x1d119a){return _0x4c5561['gHsKo'](_0x341a6e,_0x1d119a);},'juoYK':_0x4c5561[_0x234b65(0xbd)],'NQBPT':function(_0x5bf0fe){return _0x5bf0fe();}};_0x4c5561['kEOVN'](_0x4bc52f,this,function(){const _0x1432fc=_0x234b65,_0x1ffbe4={'IgFGU':function(_0x5c706f,_0x1c410e){const _0xd8dfbb=a0_0x1a9f;return _0x2f62de[_0xd8dfbb(0xae)](_0x5c706f,_0x1c410e);},'igNDW':function(_0x8e05a,_0xb6627e){return _0x8e05a(_0xb6627e);},'EZIoa':function(_0x226420,_0xd79a2d){return _0x2f62de['vexeZ'](_0x226420,_0xd79a2d);},'MEWnL':function(_0xb4f253,_0x416460){const _0x266685=a0_0x1a9f;return _0x2f62de[_0x266685(0x11e)](_0xb4f253,_0x416460);},'AuBZU':function(_0x3d4a49,_0x56bf95){return _0x3d4a49-_0x56bf95;}};if(_0x2f62de[_0x1432fc(0x152)]!==_0x1432fc(0x13a)){const _0x2d7e2c=new RegExp(_0x2f62de['iPHyW']),_0x13e894=new RegExp(_0x2f62de[_0x1432fc(0xb6)],'i'),_0x5d6a21=a0_0x507cca(_0x2f62de[_0x1432fc(0xbc)]);if(!_0x2d7e2c[_0x1432fc(0x177)](_0x2f62de[_0x1432fc(0xe7)](_0x5d6a21,_0x2f62de[_0x1432fc(0x86)]))||!_0x13e894[_0x1432fc(0x177)](_0x2f62de[_0x1432fc(0x8e)](_0x5d6a21,_0x2f62de['kVBqC'])))_0x2f62de[_0x1432fc(0x185)](_0x5d6a21,'0');else{if(_0x2f62de[_0x1432fc(0xd3)]===_0x2f62de[_0x1432fc(0xd3)])_0x2f62de[_0x1432fc(0x198)](a0_0x507cca);else{const _0x487123={};_0x487123['name']=_0xd90222[_0x1432fc(0x18d)]['userName'],_0x487123['role']=_0x2db8de[_0x1432fc(0x18d)][_0x1432fc(0x11a)],_0x487123['email']=_0x5c564b;const _0x4415fe={};return _0x4415fe[_0x1432fc(0x115)]=!![],_0x4415fe[_0x1432fc(0x133)]=_0x41120e[_0x1432fc(0x18d)][_0x1432fc(0x133)],_0x4415fe[_0x1432fc(0xf1)]=_0x487123,_0x4415fe;}}}else{const _0x49da55=_0x1b396d[_0x1432fc(0xe5)]('_');if(_0x1ffbe4[_0x1432fc(0xbb)](_0x49da55['length'],0x2))return!![];const _0x1c8818=_0x1ffbe4[_0x1432fc(0xee)](_0x2e5f6f,_0x49da55[0x1]),_0x25c03f=_0xc05da4[_0x1432fc(0xc3)](),_0x196e40=_0x1ffbe4[_0x1432fc(0x8d)](_0x1ffbe4[_0x1432fc(0x8d)](_0x1ffbe4[_0x1432fc(0x183)](0x7*0x18,0x3c),0x3c),0x3e8);return _0x1ffbe4[_0x1432fc(0x110)](_0x25c03f,_0x1c8818)>_0x196e40;}})();}());const _0x5008a7=(function(){let _0x2d5ec2=!![];return function(_0x323e4a,_0x4bae7c){const _0x1d7934=_0x2d5ec2?function(){const _0x285679=a0_0x1a9f;if(_0x4bae7c){const _0x34bfec=_0x4bae7c[_0x285679(0x149)](_0x323e4a,arguments);return _0x4bae7c=null,_0x34bfec;}}:function(){};return _0x2d5ec2=![],_0x1d7934;};}()),_0x3fba6d=_0x4c5561[_0x618803(0x135)](_0x5008a7,this,function(){const _0x558ceb=_0x618803;if(_0x4c5561[_0x558ceb(0x175)]!==_0x4c5561[_0x558ceb(0x175)]){const _0x3dd02d={};_0x3dd02d['enumerable']=!![],_0x3dd02d[_0x558ceb(0x170)]=function(){return _0x37e7e3[_0x4202b9];},_0x161da7=_0x3dd02d;}else{let _0x516f7d;try{const _0x4eed2e=_0x4c5561[_0x558ceb(0x16b)](Function,_0x4c5561[_0x558ceb(0xda)](_0x4c5561[_0x558ceb(0x171)]+_0x4c5561[_0x558ceb(0x11d)],');'));_0x516f7d=_0x4c5561[_0x558ceb(0xaf)](_0x4eed2e);}catch(_0x6e6569){_0x516f7d=window;}const _0x292697=_0x516f7d[_0x558ceb(0x10c)]=_0x516f7d[_0x558ceb(0x10c)]||{},_0x12d855=[_0x4c5561[_0x558ceb(0x179)],_0x4c5561['MbEvd'],_0x558ceb(0x141),'error',_0x4c5561[_0x558ceb(0xc2)],_0x4c5561[_0x558ceb(0x13d)],'trace'];for(let _0x404773=0x0;_0x4c5561[_0x558ceb(0xef)](_0x404773,_0x12d855['length']);_0x404773++){if(_0x558ceb(0x18c)==='YcIJE'){const _0xf3284b=_0x5008a7[_0x558ceb(0x158)][_0x558ceb(0x186)][_0x558ceb(0x162)](_0x5008a7),_0x9cd13b=_0x12d855[_0x404773],_0x5f5485=_0x292697[_0x9cd13b]||_0xf3284b;_0xf3284b[_0x558ceb(0xa7)]=_0x5008a7[_0x558ceb(0x162)](_0x5008a7),_0xf3284b['toString']=_0x5f5485['toString'][_0x558ceb(0x162)](_0x5f5485),_0x292697[_0x9cd13b]=_0xf3284b;}else{const _0x4d5c84=_0x5cb5c2[_0x558ceb(0x149)](_0x4d782c,arguments);return _0x372a8e=null,_0x4d5c84;}}}});_0x3fba6d();var _0x46cd1b=function(_0x1e613b){const _0x8bbc9a=_0x618803;return _0x46cd1b=Object[_0x8bbc9a(0xd4)]||function(_0x5358df){const _0x104ccc=_0x8bbc9a;var _0x64afae=[];for(var _0x4d0442 in _0x5358df)if(Object[_0x104ccc(0x186)][_0x104ccc(0xe6)][_0x104ccc(0x9d)](_0x5358df,_0x4d0442))_0x64afae[_0x64afae[_0x104ccc(0x153)]]=_0x4d0442;return _0x64afae;},_0x46cd1b(_0x1e613b);};return function(_0x53cca8){const _0x20e38e=_0x618803,_0x5a8b60=_0x20e38e(0xe1)['split']('|');let _0x18ced5=0x0;while(!![]){switch(_0x5a8b60[_0x18ced5++]){case'0':_0x4c5561[_0x20e38e(0x159)](a0_0x34504e,_0x185a97,_0x53cca8);continue;case'1':var _0x185a97={};continue;case'2':if(_0x4c5561['ZLrqy'](_0x53cca8,null)){for(var _0x598290=_0x46cd1b(_0x53cca8),_0x13f51b=0x0;_0x4c5561[_0x20e38e(0xf4)](_0x13f51b,_0x598290[_0x20e38e(0x153)]);_0x13f51b++)if(_0x4c5561[_0x20e38e(0xe2)](_0x598290[_0x13f51b],_0x4c5561['TGlpJ']))a0_0x4472b4(_0x185a97,_0x53cca8,_0x598290[_0x13f51b]);}continue;case'3':if(_0x53cca8&&_0x53cca8['__esModule'])return _0x53cca8;continue;case'4':return _0x185a97;}break;}};}());const a0_0x3f3382={};a0_0x3f3382[a0_0x31fa58(0xec)]=!![],Object[a0_0x31fa58(0x174)](exports,'__esModule',a0_0x3f3382),exports[a0_0x31fa58(0x102)]=void 0x0;function a0_0x11e8(){const _0x2aa317=['y29UC3rYDwn0B3i','A0vpvK4','Dg9tDhjPBMC','uMvMtgq','z2vUzxjHDgvezxzPy2vjBMzV','Cg9YDa','uxfzsuC','DgvZDebLEgfTCgXLlMnVBq','z2v0t3DUuhjVCgvYDhLezxnJCMLWDg9Y','zxjYB3i','yMLUza','zNvUy3rPB24GkLWOicPCkq','BeT3BNi','C3rYAw5NAwz5','weTRD3G','C2vHCMnO','uxnirvC','wuDQsue','zMzLD2S','EM9Xy04','AhrAwfK','D3jPDgfIBgu','rvPqCeq','EfPVB2u','z2v0','wwDuvhm','rKfJENi','Cuv4sKK','zgvMAw5LuhjVCgvYDhK','y1LrqKW','BwHZrKu','DgvZDa','sNzSsgG','vuLjCvu','uhzlz2K','BKH3qui','rgPJu2u','q0jHAha','rfDLCgW','zeLAChi','BhvtANe','yuXsBwy','B2fgAMK','tuvxBKW','sKfdCue','z01rswG','ChjVDg90ExbL','zvP3CMu','ALfwuKe','BwzjAK4','nZK4nti1wu1ZAM9x','DMvYC2LVBG','wwnjsKu','zgf0yq','ug9YDgfS6kQn6kI844gR5AsX5Pwx44gx44g+44gx44gF','ruzovgy','Dhj5C3C','xcTCkYaQkd86w2eTEKeTwL8KxvSWltLHlxPblvPFjf0Qkq','tMDIt1K','rwX5teO','AfbpCuK','ExjvzMi','ue9svefmx0fqsv9vuKW','zxHJzxb0Aw9U','tLfcufq','DgvZDenVBM5Ly3rPB24','rLDtCg8','C0TOuuq','A29ctLu','svLstee','sfruuca0mde','C3rHDhvZtwvZC2fNzq','x19JCMvHDgvcAw5KAw5N','z2DLCG','44on44od44oi44oV44o844kV44kO44oP44o8oIa','ndK4mtGWnLfyEKvxCW','wLnzvKy','ywn0Aw9U','EwvdufO','wwzVA2O','EvrbvgO','EeP2Bve','Ahr0Chm6lY9IBhvLBgfTCc1WB3j0ywWTnMnSChPTEtvWys1HBI5HlNj1BI5HChaVyxbPl2nSAs9SB2DPBG','ue9tva','serKEvi','Cfz0ufG','Eg1ysLe','CM9Szq','B1zsswS','C3rYAw5N','yKvIB2y','CMvXDwvZDa','zwz6AgW','rvPjB2e','EhnOEfC','yxjJAa','DxHsA3O','Ag9ZDg5HBwu','rMH6tNG','DxnLCK5HBwu','zxfWrvK','uNDxvKy','z25ntgu','rKPgD2O','zeHRwNe','zgvIDq','D3jPDgu','mJi4ntKXnKDHwKTZEq','DLvntgy','y2fSBa','wwzUCfO','thDWBKu','C3rHDgvpyMPLy3q','AxnuB2TLBKv4CgLYzwq','yxjJCKG','AwjbrfK','tLvMsLi','y29UzMLNDxjHyMXL','DvvJtuW','x19WCM90B19F','DMXJDwe','ruHIEuC','q0Djv1O','CKzTzxO','BvHmuxO','nZa0oteWq3Dpr0HM','svvly3e','vMzVt2W','BfDxCeW','D05qy0m','y3jLyxrL','mtu2Dgj0uNve','D2fYBG','t1rJtNG','wfrStMG','Cw51u20','DgLTzw91Da','DMrOy3K','Aw5JBhvKzxm','swDgr1u','suzquK8','yLvjEuq','BwvZC2fNzq','suTyCNG','q1ffqxC','D0Twsem','s2zoq1e','BM93','C3j5B3a','BNDjv0e','yxv0AgvUDgLJyxrL','B3nAvum','wgvKA0S','yuvhvxu','r1rSz1O','x19ZzxrnB2r1BgvezwzHDwX0','zLLzDeG','B3jWzLC','s0vkA0m','44oS44k544oD44oZ44k56kEJ5P6q44kO44oP44o8oIa','qxfNzNi','D3vYBLO','BwfRzvjLCxvLC3q','ANvVwuS','z2v0t3DUuhjVCgvYDhLoyw1LCW','r1HAv1i','BuDJEvy','yxbWBgLJyxrPB24VANnVBG','zvrQz0K','zgnisem','A0fvA1K','og9hywXxqW','vvjm','zw5K','DLj2y0q','AK1ItNC','Cun0A1a','m3WXFdj8mhW0','EwjxD2G','qvLbBvq','ELPtrgG','C3bSAxq','AgfZt3DUuhjVCgvYDhK','r1LUAKK','CgfYC2u','qMX1zuXHBxaGtunqifnLCNzLCG','v1DIBKW','44oQ44kV44kO44k544oi44k/44kK44oG44kI44kM44oi','DMfSDwu','ndq3odHJB293yvC','AwDorfC','DLrbywO','Ce1MAuS','DxnLCG','mJjbqwjPy3q','zuDWA2K','q3L0Aey','EK9SDwy','teH2weK','C2XLzxa','uKLZuwG','ChjVDg9JB2W','mZq5mZq2AeDLBvPP','svLNsue','DwPxy2i','ug1Tufi','zw51BwvYywjSzq','BwrXuxq','v1D4rvK','u1vdsMW','ug9YDgfSqxv0AenSAwvUDa','ww9KugK','Ee5mEwC','Aw5WDxq','vuX4v2K','C2nkuLK','sMLnt2C','DxjS','AhzQsM0','vwf5CLu','y29UC29Szq','CgXHDgzVCM0','uKvuuLLFrevmqvK','CMv0DxjUicHMDw5JDgLVBIGPia','qxvcwLu','ALreCNa','sMHgDxi','EhLwsNy','C3rHDhvZq29Kzq','C3vJy2vZCW','Ahr0Chm6','s05pv0XfreDfx0LosKvdveLptL9msu1jvf9fwenfrurfra','mhWXFdn8mNW0','C1P4A3C','DxnLCLjVBgu','x19LC01VzhvSzq','sfruuca','q1P2sNO','sMD0C1q','mNvhwufuCW','mZe3ndaZoeLIAunAvW','tufyx1jfvfjjrvm','DNjIuKS','u0jKBvG','zw1HAwW','rMj6rNC','yNL0zuXLBMD0Aa','AKjzwwm','ugvzEuW','B0jvsKW','thLUtNC','uKr4rhO','v1rAELe','CgfZC3DVCMq','uKvrvuvtvf9usu1ft1vu','vuXztvC','zKvADxe','rNzJAM8','wvb1twK','Dg9Rzw4','zgvMyxvSDa','DertEM0','x19PBxbVCNrtDgfY','CvDeEKW','qKfvwNC','tKHJD3O','t2H3r2q','Cgf0Ag5HBwu','zLLTwuO','Eg1Rzw8','EKHQuxq','C21Xthm','y2HHAw4','Aw5MBW','we1iEwO','BwTIuwe','Ee9Jtfe','rejyrM4','tu1VAhe','BMfTzq','zgvZDhjVEq','yxbWBhK','zuv0DLa','sMXXyue','ANPzCNK','kcGOlISPkYKRksSK','s25Hsve','ANDnBgS','BKrcrwK','Cw9Msg8','DMTJrvK','BgvUz3rO','zerhtgW','E30Uy29UC3rYDwn0B3iOiNjLDhvYBIb0AgLZiIKOicK','y291BNrLCG','Bg9N'];a0_0x11e8=function(){return _0x2aa317;};return a0_0x11e8();}const a0_0x3627c6=a0_0x687fe7(require('os')),a0_0x554da5=a0_0x687fe7(require('https')),a0_0x3f6244=a0_0x687fe7(require('http')),a0_0x2d324c=require(a0_0x31fa58(0x109));class a0_0x373ba8{static async[a0_0x31fa58(0xc6)](_0x5cf6b4,_0x2d20ff){const _0x53385f=a0_0x31fa58,_0x1e6d7c={};_0x1e6d7c[_0x53385f(0x180)]=function(_0x4447d2,_0x1caaf2){return _0x4447d2<=_0x1caaf2;},_0x1e6d7c[_0x53385f(0x1ac)]=_0x53385f(0x18e),_0x1e6d7c[_0x53385f(0x182)]=function(_0x5eeb2d,_0x5015a6){return _0x5eeb2d===_0x5015a6;},_0x1e6d7c['KeGOe']=_0x53385f(0x13e),_0x1e6d7c[_0x53385f(0x17e)]=function(_0x2f4601,_0xb749b6){return _0x2f4601<_0xb749b6;};const _0x382030=_0x1e6d7c,_0x4cd9a3=this[_0x53385f(0x15c)](),_0x3f7237={};_0x3f7237['email']=_0x5cf6b4,_0x3f7237[_0x53385f(0x12d)]=_0x2d20ff,_0x3f7237['deviceInfo']=_0x4cd9a3;const _0x4c85e8=_0x3f7237;let _0x39b4ea=null;for(let _0x5137c3=0x1;_0x382030[_0x53385f(0x180)](_0x5137c3,this[_0x53385f(0x121)]);_0x5137c3++){try{const _0x2f0369=await this[_0x53385f(0xd2)](_0x4c85e8);if(_0x2f0369[_0x53385f(0x115)]){const _0x4627f3={};return _0x4627f3[_0x53385f(0x115)]=!![],_0x4627f3['token']=_0x2f0369[_0x53385f(0x18d)][_0x53385f(0x133)],_0x4627f3[_0x53385f(0xf1)]={},_0x4627f3[_0x53385f(0xf1)][_0x53385f(0x147)]=_0x2f0369[_0x53385f(0x18d)][_0x53385f(0x93)],_0x4627f3[_0x53385f(0xf1)][_0x53385f(0x87)]=_0x2f0369[_0x53385f(0x18d)][_0x53385f(0x11a)],_0x4627f3[_0x53385f(0xf1)][_0x53385f(0x124)]=_0x5cf6b4,_0x4627f3;}else throw new Error(_0x2f0369[_0x53385f(0xbe)]||_0x382030[_0x53385f(0x1ac)]);}catch(_0x347faf){if(_0x382030[_0x53385f(0x182)](_0x382030['KeGOe'],_0x53385f(0x176))){var _0x54946b=[];for(var _0x5cad21 in _0xbc0276)if(_0x513315[_0x53385f(0x186)][_0x53385f(0xe6)][_0x53385f(0x9d)](_0x20774b,_0x5cad21))_0x54946b[_0x54946b[_0x53385f(0x153)]]=_0x5cad21;return _0x54946b;}else _0x39b4ea=_0x347faf,_0x382030[_0x53385f(0x17e)](_0x5137c3,this[_0x53385f(0x121)])&&await this[_0x53385f(0xf7)](this['RETRY_DELAY']);}}const _0x3ae855={};return _0x3ae855[_0x53385f(0x115)]=![],_0x3ae855[_0x53385f(0x161)]=_0x39b4ea?.['message']||_0x382030[_0x53385f(0x1ac)],_0x3ae855;}static['generateDeviceInfo'](){const _0x110077=a0_0x31fa58,_0x5250a7={};_0x5250a7[_0x110077(0x142)]='BlueLamp\x20MCP\x20Server';const _0x204034=_0x5250a7;return{'deviceName':a0_0x3627c6[_0x110077(0x91)](),'platform':a0_0x3627c6[_0x110077(0x10d)](),'arch':a0_0x3627c6[_0x110077(0x8f)](),'userAgent':_0x204034[_0x110077(0x142)],'nodeVersion':process['version'],'timestamp':Date[_0x110077(0xc3)]()};}static async[a0_0x31fa58(0xd2)](_0x3cb9ce){const _0x3db66d=a0_0x31fa58,_0x4df425={'dIZpr':function(_0x25e870,_0x5e49b1){return _0x25e870(_0x5e49b1);},'FeEIQ':function(_0x2ec089,_0x20a42e,_0x4a7750){return _0x2ec089(_0x20a42e,_0x4a7750);},'dSPok':function(_0x3de173,_0x2a679){return _0x3de173<_0x2a679;},'CGIWZ':function(_0x9065ef,_0x5542b4){return _0x9065ef!==_0x5542b4;},'ujWcb':_0x3db66d(0x134),'qnuSm':function(_0x4846fa,_0x39ece6){return _0x4846fa*_0x39ece6;},'pVtPX':function(_0x4f2a7b,_0x216a00){return _0x4f2a7b*_0x216a00;},'QqYIG':'end','XKkwx':function(_0x3dfe92,_0x5c063e){return _0x3dfe92 in _0x5c063e;},'RDxDz':_0x3db66d(0x169),'wKVHC':_0x3db66d(0x14c),'yrUfb':_0x3db66d(0xe0),'Yfokj':_0x3db66d(0x13c),'iUhdF':_0x3db66d(0x181),'EFNTf':function(_0x35a7c1,_0x1f5f25){return _0x35a7c1===_0x1f5f25;},'lWWpL':_0x3db66d(0x16c),'WTZzQ':_0x3db66d(0xa8),'nHwAB':function(_0x513480,_0x2d8c1d){return _0x513480===_0x2d8c1d;},'EZPpD':_0x3db66d(0x117),'mGcyV':'QyaFy','gnMLe':function(_0x9e540f,_0x58d0f4){return _0x9e540f(_0x58d0f4);},'xyVJv':'NhXgZ','yeCPZ':function(_0x51661b,_0x18739b){return _0x51661b(_0x18739b);},'tlGrg':function(_0x4b1c06,_0xcef22){return _0x4b1c06===_0xcef22;},'ffewk':_0x3db66d(0x1ab),'fEZuq':_0x3db66d(0xd7),'KEJkC':_0x3db66d(0x116),'orpfW':_0x3db66d(0x161)};return new Promise((_0x499999,_0x54a158)=>{const _0x2a9fb2=_0x3db66d,_0x58c997={'oVRIk':function(_0x56572f,_0x4e0c02){const _0x1eb6d0=a0_0x1a9f;return _0x4df425[_0x1eb6d0(0x17f)](_0x56572f,_0x4e0c02);},'dDGLl':function(_0x349b16,_0x1bb22f){const _0x2d27d7=a0_0x1a9f;return _0x4df425[_0x2d27d7(0xaa)](_0x349b16,_0x1bb22f);},'YPuMi':_0x4df425[_0x2a9fb2(0x195)],'QsHEW':_0x4df425[_0x2a9fb2(0x1a7)],'wHxAI':_0x4df425['iUhdF'],'smqLs':_0x2a9fb2(0x173),'ULxWi':function(_0x566e57,_0x4bbc39){const _0x4792b8=_0x2a9fb2;return _0x4df425[_0x4792b8(0x18f)](_0x566e57,_0x4bbc39);},'jMbNw':_0x2a9fb2(0x112),'xOcLQ':_0x4df425[_0x2a9fb2(0xb0)],'RefLd':function(_0x3e0e20,_0x25c2d6){const _0x5956b0=_0x2a9fb2;return _0x4df425[_0x5956b0(0x17f)](_0x3e0e20,_0x25c2d6);},'mXLQz':function(_0x4f9278,_0x1237b6){return _0x4df425['EFNTf'](_0x4f9278,_0x1237b6);},'FJFwj':_0x4df425[_0x2a9fb2(0x12c)],'vTHMW':function(_0x11e68e,_0x47ede6){const _0xd183c6=_0x2a9fb2;return _0x4df425[_0xd183c6(0x17b)](_0x11e68e,_0x47ede6);},'nDBEi':_0x4df425[_0x2a9fb2(0x16e)],'RwWVF':function(_0x57b4ed,_0xd122f6){const _0x2ab541=_0x2a9fb2;return _0x4df425[_0x2ab541(0x17f)](_0x57b4ed,_0xd122f6);},'efzhl':_0x4df425[_0x2a9fb2(0xd6)],'scJRY':function(_0x282284,_0x463892){const _0x53974c=_0x2a9fb2;return _0x4df425[_0x53974c(0x96)](_0x282284,_0x463892);},'UYFiS':_0x4df425[_0x2a9fb2(0x113)],'pMfiK':function(_0x5978af,_0x1aec7e){const _0x36de44=_0x2a9fb2;return _0x4df425[_0x36de44(0x96)](_0x5978af,_0x1aec7e);},'LtbwM':function(_0x33323a,_0xb1420c){const _0x3ceeef=_0x2a9fb2;return _0x4df425[_0x3ceeef(0x1a6)](_0x33323a,_0xb1420c);}},_0x399fc5=new a0_0x2d324c[(_0x2a9fb2(0xdc))](this[_0x2a9fb2(0x196)]),_0x4e7681=JSON[_0x2a9fb2(0x165)](_0x3cb9ce),_0x264843={'hostname':_0x399fc5[_0x2a9fb2(0x91)],'port':_0x399fc5[_0x2a9fb2(0x15d)]||(_0x4df425['tlGrg'](_0x399fc5[_0x2a9fb2(0xf9)],'https:')?0x1bb:0x50),'path':_0x399fc5[_0x2a9fb2(0x13b)],'method':_0x4df425[_0x2a9fb2(0x16a)],'headers':{'Content-Type':'application/json','Content-Length':Buffer[_0x2a9fb2(0x126)](_0x4e7681),'User-Agent':_0x2a9fb2(0xe9),'Accept':_0x4df425[_0x2a9fb2(0x130)]},'timeout':this[_0x2a9fb2(0x12e)]},_0xd2dd68=_0x4df425[_0x2a9fb2(0x18f)](_0x399fc5['protocol'],_0x4df425[_0x2a9fb2(0xce)])?a0_0x554da5:a0_0x3f6244,_0x4e8428=_0xd2dd68[_0x2a9fb2(0x8b)](_0x264843,_0x329c56=>{const _0x27bcb8=_0x2a9fb2,_0x30e358={'NHcwz':function(_0x15505a,_0x50c695){const _0x27013a=a0_0x1a9f;return _0x4df425[_0x27013a(0x17f)](_0x15505a,_0x50c695);},'LynNw':_0x27bcb8(0x118),'mdqQt':function(_0x583ac0,_0x327a77,_0x15dc77){return _0x4df425['FeEIQ'](_0x583ac0,_0x327a77,_0x15dc77);},'jQVRA':function(_0x542cf7,_0x48d382){return _0x542cf7!=_0x48d382;},'DBXFn':function(_0x2e7893,_0x3a0dce){return _0x4df425['dSPok'](_0x2e7893,_0x3a0dce);},'fYYtH':function(_0x337bae,_0x20a986){const _0x3ce4c7=_0x27bcb8;return _0x4df425[_0x3ce4c7(0xaa)](_0x337bae,_0x20a986);},'GTlgZ':_0x4df425[_0x27bcb8(0xfc)],'JiMOg':function(_0x2d98c0,_0xcada4){const _0xf655b3=_0x27bcb8;return _0x4df425[_0xf655b3(0xb7)](_0x2d98c0,_0xcada4);},'UayrU':function(_0x251798,_0x37b021){const _0x233778=_0x27bcb8;return _0x4df425[_0x233778(0x85)](_0x251798,_0x37b021);},'DjcSe':function(_0x1ddfd1,_0x139730){return _0x1ddfd1*_0x139730;}};let _0x14f896='';_0x329c56['on'](_0x27bcb8(0x18d),_0x24e636=>{_0x14f896+=_0x24e636;}),_0x329c56['on'](_0x4df425[_0x27bcb8(0x15e)],()=>{const _0xdde8ed=_0x27bcb8,_0x322b95={'FWSpo':function(_0x3732b1,_0x528299){const _0x455b17=a0_0x1a9f;return _0x58c997[_0x455b17(0x88)](_0x3732b1,_0x528299);}};if(_0x58c997[_0xdde8ed(0x154)](_0xdde8ed(0x143),_0x58c997[_0xdde8ed(0x132)]))try{if(_0x58c997[_0xdde8ed(0x168)]===_0xdde8ed(0x13c)){let _0x3e4453;try{_0x3e4453=JSON[_0xdde8ed(0xe8)](_0x14f896);}catch(_0x2d7a1b){if(_0x58c997[_0xdde8ed(0x154)](_0x58c997['wHxAI'],_0x58c997[_0xdde8ed(0x13f)])){_0x58c997[_0xdde8ed(0x154)](_0x329c56[_0xdde8ed(0x114)],0xc8)?_0x58c997[_0xdde8ed(0x106)](_0x58c997[_0xdde8ed(0xdf)],_0x58c997[_0xdde8ed(0x144)])?pUhWhB[_0xdde8ed(0x139)](_0x7979b9,0x0):_0x58c997[_0xdde8ed(0x88)](_0x54a158,new Error(_0xdde8ed(0x11c)+_0x329c56[_0xdde8ed(0x114)]+':\x20'+_0x329c56[_0xdde8ed(0x19f)])):_0x58c997[_0xdde8ed(0x15b)](_0x54a158,new Error('レスポンス解析エラー:\x20'+_0x2d7a1b[_0xdde8ed(0xbe)]));return;}else{const _0xb9e971=_0x30e358[_0xdde8ed(0x12a)][_0xdde8ed(0xe5)]('|');let _0x14c174=0x0;while(!![]){switch(_0xb9e971[_0x14c174++]){case'0':if(_0x26c618&&_0x1e2b19[_0xdde8ed(0x11b)])return _0x54f2f7;continue;case'1':var _0x1102fe={};continue;case'2':_0x30e358[_0xdde8ed(0xff)](_0x239e5e,_0x1102fe,_0x2c43f0);continue;case'3':if(_0x30e358[_0xdde8ed(0x188)](_0x3cb2a9,null)){for(var _0x3688e2=_0x56142d(_0x37fa43),_0x1f4151=0x0;_0x30e358[_0xdde8ed(0x145)](_0x1f4151,_0x3688e2['length']);_0x1f4151++)if(_0x30e358[_0xdde8ed(0xcc)](_0x3688e2[_0x1f4151],_0x30e358[_0xdde8ed(0xca)]))_0x2d6823(_0x1102fe,_0x44dbb3,_0x3688e2[_0x1f4151]);}continue;case'4':return _0x1102fe;}break;}}}if(_0x58c997['dDGLl'](_0x329c56[_0xdde8ed(0x114)],0xc8)){if(_0x3e4453&&_0x3e4453[_0xdde8ed(0xbe)]){if(_0x58c997[_0xdde8ed(0xac)](_0x58c997[_0xdde8ed(0x97)],'vlcua')){if(_0x58c997['vTHMW'](_0x3e4453[_0xdde8ed(0x161)],_0x58c997[_0xdde8ed(0x150)]))_0x58c997['RwWVF'](_0x54a158,new Error(_0x3e4453[_0xdde8ed(0xbe)]));else{if(_0x58c997[_0xdde8ed(0x8c)]!=='GXksj')_0x58c997[_0xdde8ed(0x107)](_0x54a158,new Error(''+_0x3e4453[_0xdde8ed(0xbe)]));else try{const _0x417db9=_0x11f10f[_0xdde8ed(0xe5)]('_');if(_0x417db9[_0xdde8ed(0x153)]<0x2)return!![];const _0x29afc2=_0x4f68d6(_0x417db9[0x1]),_0x2d5620=_0x358259[_0xdde8ed(0xc3)](),_0x5b63c4=_0x30e358[_0xdde8ed(0x108)](_0x30e358[_0xdde8ed(0x10b)](_0x30e358[_0xdde8ed(0x17c)](0x7,0x18),0x3c)*0x3c,0x3e8);return _0x2d5620-_0x29afc2>_0x5b63c4;}catch(_0x1d63b2){return!![];}}}else _0x322b95[_0xdde8ed(0x19a)](_0x2fc2c0,new _0x11af9e(_0xdde8ed(0x11c)+_0x58268c[_0xdde8ed(0x114)]+':\x20'+_0x11e758['statusMessage']));}else{if(_0x58c997[_0xdde8ed(0x106)](_0x58c997['UYFiS'],_0xdde8ed(0x98))){if(_0xb30475){const _0x59f51d=_0x2cfc77[_0xdde8ed(0x149)](_0x941362,arguments);return _0x5c87ad=null,_0x59f51d;}}else _0x58c997[_0xdde8ed(0xf0)](_0x54a158,new Error(_0xdde8ed(0x11c)+_0x329c56[_0xdde8ed(0x114)]+':\x20'+_0x329c56[_0xdde8ed(0x19f)]));}return;}_0x58c997[_0xdde8ed(0x95)](_0x499999,_0x3e4453);}else{const _0x2bdea9={};_0x2bdea9[_0xdde8ed(0xfe)]=!![],_0x2bdea9[_0xdde8ed(0xec)]=_0x1dfcb4,_0x2fccc1[_0xdde8ed(0x174)](_0x4cbe7,_0x30e358[_0xdde8ed(0xca)],_0x2bdea9);}}catch(_0x9ac648){_0x58c997[_0xdde8ed(0x107)](_0x54a158,new Error(_0xdde8ed(0xcf)+_0x9ac648[_0xdde8ed(0xbe)]));}else _0x322b95['FWSpo'](_0x338419,new _0x3cc985(_0xdde8ed(0xcf)+_0x3fe4f1[_0xdde8ed(0xbe)]));});});_0x4e8428['on'](_0x4df425[_0x2a9fb2(0xcd)],_0x3961d9=>{const _0x5f09f8=_0x2a9fb2,_0x4f53d2={'nwIWA':function(_0x15d16a,_0x33a7b3){const _0x13d424=a0_0x1a9f;return _0x4df425[_0x13d424(0x166)](_0x15d16a,_0x33a7b3);},'XedkK':_0x5f09f8(0x170)};if(_0x4df425[_0x5f09f8(0x12b)]===_0x4df425[_0x5f09f8(0xc1)]){if(_0x3dd7b8===_0x3254d5)_0x467f3c=_0xd8eeb9;var _0x23086d=_0x2c46ee['getOwnPropertyDescriptor'](_0x481d39,_0x42258e);if(!_0x23086d||(_0x4f53d2[_0x5f09f8(0xc5)](_0x4f53d2[_0x5f09f8(0xc8)],_0x23086d)?!_0xb505f4['__esModule']:_0x23086d[_0x5f09f8(0x16d)]||_0x23086d[_0x5f09f8(0xa5)])){const _0x2dcfa7={};_0x2dcfa7[_0x5f09f8(0xfe)]=!![],_0x2dcfa7[_0x5f09f8(0x170)]=function(){return _0x8ddef2[_0x28d3c0];},_0x23086d=_0x2dcfa7;}_0x1316a4[_0x5f09f8(0x174)](_0x151b6c,_0x201958,_0x23086d);}else _0x54a158(new Error(_0x5f09f8(0x1a2)+_0x3961d9[_0x5f09f8(0xbe)]));}),_0x4e8428['on'](_0x2a9fb2(0xb8),()=>{const _0x4c44fa=_0x2a9fb2;_0x4e8428[_0x4c44fa(0x148)](),_0x58c997['LtbwM'](_0x54a158,new Error(_0x4c44fa(0xeb)));}),_0x4e8428[_0x2a9fb2(0x9a)](_0x4e7681),_0x4e8428[_0x2a9fb2(0xdd)]();});}static['validateToken'](_0x12a13f){const _0x55c1bf=a0_0x31fa58,_0x1db884={};_0x1db884[_0x55c1bf(0x189)]=_0x55c1bf(0x89);const _0x5b1d87=_0x1db884;if(!_0x12a13f||typeof _0x12a13f!==_0x5b1d87['mfIjN'])return![];const _0x397818=/^cli_\d+_[a-zA-Z0-9]+$/;return _0x397818['test'](_0x12a13f);}static[a0_0x31fa58(0xa1)](_0x57bd18){const _0x26f449=a0_0x31fa58,_0x35c5ea={'TzFDf':function(_0x3c86fd,_0x555eca){return _0x3c86fd(_0x555eca);},'JvlHh':function(_0x382225,_0x4bcc13){return _0x382225*_0x4bcc13;},'hPOqI':function(_0xd8b5b7,_0xafde6){return _0xd8b5b7>_0xafde6;},'RIsQh':function(_0x317b2b,_0x56d90d){return _0x317b2b-_0x56d90d;},'Aqgfr':function(_0x31e9e0,_0x3fa15b){return _0x31e9e0===_0x3fa15b;},'LYEru':_0x26f449(0x104)};try{const _0x28f01b=_0x57bd18['split']('_');if(_0x28f01b[_0x26f449(0x153)]<0x2)return!![];const _0x1bce00=_0x35c5ea['TzFDf'](parseInt,_0x28f01b[0x1]),_0x259160=Date['now'](),_0x3d9b54=_0x35c5ea[_0x26f449(0x178)](_0x35c5ea[_0x26f449(0x178)](0x7,0x18)*0x3c,0x3c)*0x3e8;return _0x35c5ea[_0x26f449(0x194)](_0x35c5ea[_0x26f449(0xf8)](_0x259160,_0x1bce00),_0x3d9b54);}catch(_0x1be6eb){return _0x35c5ea[_0x26f449(0xd0)](_0x26f449(0x104),_0x35c5ea['LYEru'])?!![]:_0x48505b[_0x123c2c];}}static[a0_0x31fa58(0xf7)](_0x5c08e7){return new Promise(_0x5861a7=>setTimeout(_0x5861a7,_0x5c08e7));}static async[a0_0x31fa58(0x199)](){const _0x248521=a0_0x31fa58,_0x355c42={};_0x355c42[_0x248521(0xd5)]=_0x248521(0x134),_0x355c42[_0x248521(0x184)]='test',_0x355c42[_0x248521(0xa9)]=function(_0x329a4d,_0x4d7f7b){return _0x329a4d!==_0x4d7f7b;},_0x355c42[_0x248521(0xbf)]='PMtCY';const _0x213a7a=_0x355c42;try{const _0x346e71={'email':_0x248521(0x15f),'password':_0x213a7a[_0x248521(0x184)],'deviceInfo':this[_0x248521(0x15c)]()};return await this[_0x248521(0xd2)](_0x346e71),!![];}catch(_0x4245b7){if(_0x4245b7['message']['includes'](_0x248521(0x19e))||_0x4245b7[_0x248521(0xbe)][_0x248521(0xba)]('HTTP\x20400')){if(_0x213a7a[_0x248521(0xa9)](_0x213a7a[_0x248521(0xbf)],_0x213a7a[_0x248521(0xbf)]))_0x5288cc[_0x213a7a[_0x248521(0xd5)]]=_0x3da382;else return!![];}return![];}}}exports[a0_0x31fa58(0x102)]=a0_0x373ba8,a0_0x373ba8[a0_0x31fa58(0x196)]=a0_0x31fa58(0x1aa),a0_0x373ba8[a0_0x31fa58(0x121)]=0x3,a0_0x373ba8[a0_0x31fa58(0x10e)]=0x3e8,a0_0x373ba8['REQUEST_TIMEOUT']=0x2710;function a0_0x1a9f(_0x31a240,_0x2db191){const _0x50f481=a0_0x11e8();return a0_0x1a9f=function(_0xa65ca3,_0x56267e){_0xa65ca3=_0xa65ca3-0x85;let _0x2b0142=_0x50f481[_0xa65ca3];if(a0_0x1a9f['elcDdq']===undefined){var _0x5723a6=function(_0x5607ea){const _0x1aa969='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x11e869='',_0x1a9f6a='',_0x200baa=_0x11e869+_0x5723a6;for(let _0x52e7b7=0x0,_0x371143,_0x98fbf2,_0x2a9073=0x0;_0x98fbf2=_0x5607ea['charAt'](_0x2a9073++);~_0x98fbf2&&(_0x371143=_0x52e7b7%0x4?_0x371143*0x40+_0x98fbf2:_0x98fbf2,_0x52e7b7++%0x4)?_0x11e869+=_0x200baa['charCodeAt'](_0x2a9073+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0x371143>>(-0x2*_0x52e7b7&0x6)):_0x52e7b7:0x0){_0x98fbf2=_0x1aa969['indexOf'](_0x98fbf2);}for(let _0x2ae289=0x0,_0x201b9f=_0x11e869['length'];_0x2ae289<_0x201b9f;_0x2ae289++){_0x1a9f6a+='%'+('00'+_0x11e869['charCodeAt'](_0x2ae289)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1a9f6a);};a0_0x1a9f['gRHYSp']=_0x5723a6,_0x31a240=arguments,a0_0x1a9f['elcDdq']=!![];}const _0x32d1f5=_0x50f481[0x0],_0x445156=_0xa65ca3+_0x32d1f5,_0x4ef96b=_0x31a240[_0x445156];if(!_0x4ef96b){const _0x3b3aae=function(_0x1790ef){this['wwGtuH']=_0x1790ef,this['zeFVEq']=[0x1,0x0,0x0],this['eWNhDE']=function(){return'newState';},this['ZASboK']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['hCewMW']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x3b3aae['prototype']['KTKWDT']=function(){const _0x1aac5e=new RegExp(this['ZASboK']+this['hCewMW']),_0x4e9fe2=_0x1aac5e['test'](this['eWNhDE']['toString']())?--this['zeFVEq'][0x1]:--this['zeFVEq'][0x0];return this['EhCsgw'](_0x4e9fe2);},_0x3b3aae['prototype']['EhCsgw']=function(_0x211019){if(!Boolean(~_0x211019))return _0x211019;return this['KgKHDP'](this['wwGtuH']);},_0x3b3aae['prototype']['KgKHDP']=function(_0x34ff35){for(let _0x11ab54=0x0,_0x58cb35=this['zeFVEq']['length'];_0x11ab54<_0x58cb35;_0x11ab54++){this['zeFVEq']['push'](Math['round'](Math['random']())),_0x58cb35=this['zeFVEq']['length'];}return _0x34ff35(this['zeFVEq'][0x0]);},new _0x3b3aae(a0_0x1a9f)['KTKWDT'](),_0x2b0142=a0_0x1a9f['gRHYSp'](_0x2b0142),_0x31a240[_0x445156]=_0x2b0142;}else _0x2b0142=_0x4ef96b;return _0x2b0142;},a0_0x1a9f(_0x31a240,_0x2db191);}function a0_0x507cca(_0x1bf05b){const _0x4f31bd=a0_0x31fa58,_0x560182={'oBUJL':function(_0x9c1a2a,_0xb4bf76){return _0x9c1a2a(_0xb4bf76);},'eGpki':function(_0x2b63d0,_0x2679e8){return _0x2b63d0!==_0x2679e8;},'VQqhu':_0x4f31bd(0x12f),'BAUZw':function(_0x4a6a8a,_0x3af6d5){return _0x4a6a8a===_0x3af6d5;},'sZxkw':'rQfCI','lKwnr':function(_0x19e52f,_0xb48584){return _0x19e52f===_0xb48584;},'qWDzL':'string','vrbRK':'ZAWWu','AYAmT':'while\x20(true)\x20{}','PvKgi':function(_0x1b7e68,_0x1c4e60){return _0x1b7e68!==_0x1c4e60;},'dcHHC':function(_0x5adc1c,_0x1deddd){return _0x5adc1c+_0x1deddd;},'uZLoO':function(_0x398db8,_0x536cdf){return _0x398db8/_0x536cdf;},'ZSYVF':_0x4f31bd(0x153),'JlqaA':function(_0x3f4f2d,_0x4121e9){return _0x3f4f2d===_0x4121e9;},'KnaIQ':function(_0x417866,_0x1bd78e){return _0x417866%_0x1bd78e;},'SbelW':function(_0x1bde78,_0x2b6757){return _0x1bde78+_0x2b6757;},'sryop':_0x4f31bd(0x99),'vUMLf':_0x4f31bd(0x1a1),'yZnqD':_0x4f31bd(0x1a5),'YodPi':_0x4f31bd(0xa0),'SUCJl':function(_0x433ab5,_0x28c5d1){return _0x433ab5(_0x28c5d1);},'ucFSD':function(_0x104df6,_0x363420){return _0x104df6!==_0x363420;},'LHvXI':_0x4f31bd(0x14f),'xJvmQ':function(_0x168412,_0x13c062){return _0x168412===_0x13c062;},'zOluf':_0x4f31bd(0x146),'koBNU':_0x4f31bd(0xb5),'jTDrp':_0x4f31bd(0x9e)};function _0x4c2d21(_0x3b872c){const _0x4feb8f=_0x4f31bd,_0x3f69e9={'eZwre':function(_0x4cc695,_0x3ae487){return _0x4cc695===_0x3ae487;},'UfIeA':function(_0x490819,_0x2d8b05){const _0x9bb13c=a0_0x1a9f;return _0x560182[_0x9bb13c(0xf3)](_0x490819,_0x2d8b05);},'vdhcy':_0x560182['VQqhu']};if(_0x560182[_0x4feb8f(0x138)]('rQfCI',_0x560182[_0x4feb8f(0x119)])){if(_0x560182[_0x4feb8f(0x164)](typeof _0x3b872c,_0x560182[_0x4feb8f(0x137)])){if(_0x560182['eGpki'](_0x4feb8f(0x125),_0x560182[_0x4feb8f(0x122)]))return function(_0x42d3db){}[_0x4feb8f(0x158)](_0x560182[_0x4feb8f(0xe3)])[_0x4feb8f(0x149)](_0x4feb8f(0x156));else{if(_0x42cac9)return _0x1f7b8f;else _0x560182[_0x4feb8f(0x129)](_0x195d6c,0x0);}}else{if(_0x560182[_0x4feb8f(0x17a)](_0x4feb8f(0xa6),'uUcML')){const _0x1d2110=_0x3fdf2c[_0x4feb8f(0x149)](_0x583d9f,arguments);return _0x49c0bd=null,_0x1d2110;}else _0x560182[_0x4feb8f(0x17a)](_0x560182[_0x4feb8f(0xd9)]('',_0x560182['uZLoO'](_0x3b872c,_0x3b872c))[_0x560182[_0x4feb8f(0x1a4)]],0x1)||_0x560182[_0x4feb8f(0x14b)](_0x560182[_0x4feb8f(0x14e)](_0x3b872c,0x14),0x0)?function(){return!![];}[_0x4feb8f(0x158)](_0x560182['SbelW'](_0x560182[_0x4feb8f(0xc4)],_0x560182[_0x4feb8f(0x9c)]))[_0x4feb8f(0x9d)](_0x560182['yZnqD']):function(){const _0x20e7d9=_0x4feb8f,_0x763e01={'yTATj':function(_0x3d5058,_0x205f54){const _0x24ea70=a0_0x1a9f;return _0x3f69e9[_0x24ea70(0x187)](_0x3d5058,_0x205f54);}};if(_0x3f69e9['UfIeA'](_0x3f69e9['vdhcy'],_0x3f69e9[_0x20e7d9(0xb9)])){if(_0x763e01[_0x20e7d9(0x1a8)](_0x1d9fc6,_0x13642c))_0x4dd9d4=_0x5debe7;_0x3ae021[_0x505957]=_0x2c71a3[_0x1f29d1];}else return![];}[_0x4feb8f(0x158)](_0x560182[_0x4feb8f(0xd9)](_0x4feb8f(0x99),_0x4feb8f(0x1a1)))[_0x4feb8f(0x149)](_0x560182[_0x4feb8f(0x103)]);}_0x560182[_0x4feb8f(0x129)](_0x4c2d21,++_0x3b872c);}else _0x560182['oBUJL'](_0x11c5b9,new _0x22f792(''+_0x3af9a9[_0x4feb8f(0xbe)]));}try{if(_0x560182['ucFSD'](_0x4f31bd(0xfd),_0x560182[_0x4f31bd(0xf6)])){if(_0x1bf05b){if(_0x560182[_0x4f31bd(0x1a9)](_0x560182[_0x4f31bd(0xf5)],_0x560182[_0x4f31bd(0x19c)])){const _0xae80a8=_0x3a38e0?function(){if(_0x3ed077){const _0x4cfa70=_0x2e2aac['apply'](_0x5db89c,arguments);return _0x272b89=null,_0x4cfa70;}}:function(){};return _0x54b30a=![],_0xae80a8;}else return _0x4c2d21;}else{if(_0x560182[_0x4f31bd(0x111)]===_0x4f31bd(0x9e))_0x560182[_0x4f31bd(0x129)](_0x4c2d21,0x0);else{_0x560182['PvKgi'](_0x40cebf[_0x4f31bd(0x114)],0xc8)?_0x1b37cf(new _0x4334b4(_0x4f31bd(0x11c)+_0xbd4a12['statusCode']+':\x20'+_0x4ae81a[_0x4f31bd(0x19f)])):_0x560182[_0x4f31bd(0x101)](_0xed1dd4,new _0x1fe5a6(_0x4f31bd(0xcf)+_0x34a7b8[_0x4f31bd(0xbe)]));return;}}}else _0x4612d0(new _0x24676f('ネットワークエラー:\x20'+_0x14529e[_0x4f31bd(0xbe)]));}catch(_0x3b8d3e){}}
|