{"version":3,"sources":["../src/index.ts","../src/type.ts","../src/mcp.ts","../src/client.ts","../src/restful.ts"],"sourcesContent":["export * from './type';\n\nexport { CapKitMcp } from './mcp';\n\nexport { CapKitRestful } from './restful';\n","import { z } from 'zod/v3';\n\nexport const CapAuthorDIDSchema = z.string().startsWith('did:');\nexport const CapIDNameSchema = z\n  .string()\n  .regex(/^[a-z0-9_]+$/, 'Name must contain only lowercase letters, numbers, and underscores')\n  .min(6, 'Name must be at least 6 characters')\n  .max(20, 'Name must be at most 20 characters');\n\nexport const CapArtifactSchema = z.object({\n  srcUrl: z.string().url('Must be a valid URL'),\n});\n\nexport const CapIDSchema = z\n  .object({\n    authorDID: CapAuthorDIDSchema,\n    idName: CapIDNameSchema,\n  })\n  .transform(data => ({\n    ...data,\n    id: `${data.authorDID}:${data.idName}`,\n  }));\n\nexport const CapModelSchema = z.object({\n  customGatewayUrl: z.string().url('Must be a valid URL').optional(),\n  providerId: z.enum([\n    'openai_chat_completion',\n    'openai_responses',\n    'anthropic',\n    'google',\n    'openrouter',\n    'xai',\n    'groq',\n    'togetherai',\n    'azure',\n    'deepseek',\n    'mistral',\n  ]),\n  modelId: z\n    .string()\n    .max(50, 'Model ID must be at most 50 characters')\n    .refine(id => id.length > 0, 'Model ID is required'),\n  parameters: z.record(z.string(), z.any()).optional(),\n  supportedInputs: z\n    .array(z.enum(['text', 'image', 'file', 'audio']))\n    .min(1)\n    .refine(inputs => inputs.includes('text'), 'text input is required'),\n  contextLength: z.number().min(1000, 'Please enter a valid context length'),\n});\n\nexport const CapPromptSuggestionSchema = z\n  .string()\n  .max(100, 'Each suggestion must be at most 50 characters');\n\nexport const CapPromptSchema = z.object({\n  value: z.string(),\n  suggestions: z.array(CapPromptSuggestionSchema).optional(),\n});\n\nexport const CapMcpServerSchema = z.string().url('Must be a valid URL');\n\nexport const CapCoreSchema = z.object({\n  prompt: CapPromptSchema,\n  model: CapModelSchema,\n  mcpServers: z.record(z.string(), CapMcpServerSchema),\n  artifact: CapArtifactSchema.optional(),\n});\n\nexport const CapThumbnailSchema = z.string().url('Must be a valid URL').optional();\n\nexport const CapMetadataSchema = z.object({\n  displayName: z.string().min(1, 'Display name is required').max(50, 'Display name too long'),\n  description: z\n    .string()\n    .min(10, 'Description must be at least 10 characters')\n    .max(150, 'Description too long'),\n  introduction: z\n    .string()\n    .min(10, 'Introduction must be at least 10 characters')\n    .max(5000, 'Introduction too long'),\n  tags: z.array(z.string()).min(1, 'At least one tag is required'),\n  homepage: z.string().url('Must be a valid URL').optional(),\n  repository: z.string().url('Must be a valid URL').optional(),\n  thumbnail: CapThumbnailSchema,\n});\n\nexport const CapSchema = CapIDSchema.and(\n  z.object({\n    core: CapCoreSchema,\n    metadata: CapMetadataSchema,\n  })\n);\n\n// Inferred TypeScript types from Zod schemas\nexport type CapMcpServer = z.infer<typeof CapMcpServerSchema>;\nexport type CapModel = z.infer<typeof CapModelSchema>;\nexport type CapPrompt = z.infer<typeof CapPromptSchema>;\nexport type CapID = z.infer<typeof CapIDSchema>;\nexport type CapCore = z.infer<typeof CapCoreSchema>;\nexport type CapThumbnail = z.infer<typeof CapThumbnailSchema>;\nexport type CapMetadata = z.infer<typeof CapMetadataSchema>;\nexport type Cap = z.infer<typeof CapSchema>;\n\nexport interface Result<T> {\n  code: number;\n  error?: string;\n  data?: T;\n}\n\nexport interface Page<T> {\n  totalItems: number;\n  page: number;\n  pageSize: number;\n  items: T[];\n}\n\nexport const CapStatsSchema = z.object({\n  capId: z.string(),\n  downloads: z.number(),\n  ratingCount: z.number(),\n  averageRating: z.number(),\n  favorites: z.number(),\n  userRating: z.number().optional(),\n});\n\nexport const ResultCapMetadataSchema = z.object({\n  id: z.string(),\n  cid: z.string(),\n  name: z.string(),\n  version: z.string(),\n  displayName: z.string(),\n  description: z.string(),\n  introduction: z.string(),\n  timestamp: z.string(),\n  tags: z.array(z.string()),\n  homepage: z.string().optional(),\n  repository: z.string().optional(),\n  thumbnail: CapThumbnailSchema,\n  stats: CapStatsSchema,\n});\n\nexport const RatingDistribution = z.object({\n  rating: z.number(),\n  count: z.number(),\n});\n\n// Inferred TypeScript types from Zod schemas\nexport type ResultCap = z.infer<typeof ResultCapMetadataSchema>;\nexport type CapStats = z.infer<typeof CapStatsSchema>;\nexport type RatingDistribution = z.infer<typeof RatingDistribution>;\nexport type Artifact = z.infer<typeof CapArtifactSchema>;\n","// import { DidAccountSigner, type SignerInterface } from \"@nuwa-ai/identity-kit\";\nimport { Args, RoochClient, Transaction } from '@roochnetwork/rooch-sdk';\nimport * as yaml from 'js-yaml';\nimport { buildClient } from './client';\nimport type { Cap, CapStats, Page, Result, ResultCap, RatingDistribution } from './type';\nimport { IdentityEnv } from '@nuwa-ai/identity-kit';\nimport { UniversalMcpClient } from '@nuwa-ai/payment-kit';\n\nexport * from './type';\n\nexport class CapKitMcp {\n  protected roochClient: RoochClient;\n  protected contractAddress: string;\n  protected mcpUrl: string;\n  protected env: IdentityEnv;\n  protected mcpClient?: UniversalMcpClient;\n  protected mcpTools?: any;\n  protected isInitializing: boolean = false;\n\n  constructor(option: {\n    mcpUrl: string;\n    roochUrl: string;\n    contractAddress: string;\n    env: IdentityEnv;\n  }) {\n    this.roochClient = new RoochClient({ url: option.roochUrl });\n    this.contractAddress = option.contractAddress;\n    this.mcpUrl = option.mcpUrl;\n    this.env = option.env;\n  }\n\n  async getTools() {\n    if (!this.mcpTools) {\n      const client = await this.getMcpClient();\n      // Ensure the client is fully initialized by calling tools()\n      this.mcpTools = await client.tools();\n    }\n    return this.mcpTools;\n  }\n\n  async getMcpClient(): Promise<UniversalMcpClient> {\n    if (this.mcpClient) {\n      return this.mcpClient;\n    }\n\n    // Wait for any ongoing initialization\n    while (this.isInitializing) {\n      await new Promise(resolve => setTimeout(resolve, 50));\n      if (this.mcpClient) {\n        return this.mcpClient;\n      }\n    }\n\n    this.isInitializing = true;\n    try {\n      const client = await buildClient(this.mcpUrl, this.env);\n      // Trigger actual connection by calling listTools\n      // This ensures the client is fully connected and ready to use\n      await client.listTools();\n      this.mcpClient = client;\n      return client;\n    } catch (error) {\n      console.error('Failed to initialize MCP client:', error);\n      throw error;\n    } finally {\n      this.isInitializing = false;\n    }\n  }\n\n  async mcpClose() {\n    this.mcpClient?.close();\n  }\n\n  async queryByID(id: { id?: string; cid?: string }): Promise<Result<ResultCap>> {\n    try {\n      // Get tools from MCP server\n      const tools = await this.getTools();\n      const queryCapByID = tools.queryCapByID;\n\n      if (!queryCapByID) {\n        throw new Error('Query Cap by id tool not available on MCP server');\n      }\n\n      // Upload file to IPFS\n      const result = await queryCapByID.execute(id, {\n        toolCallId: 'queryCapByID',\n        messages: [],\n      });\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      const queryResult = JSON.parse((result.content as any)[0].text);\n\n      if (queryResult.code !== 200 && queryResult.code !== 404) {\n        throw new Error(`Query with id failed: ${queryResult.error || 'Unknown error'}`);\n      }\n\n      return queryResult;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  async queryByName(\n    name?: string,\n    opt?: {\n      tags?: string[];\n      page?: number;\n      size?: number;\n      sortBy?: 'average_rating' | 'downloads' | 'favorites' | 'rating_count' | 'updated_at';\n      sortOrder?: 'asc' | 'desc';\n    }\n  ): Promise<Result<Page<ResultCap>>> {\n    try {\n      // Get tools from MCP server\n      const tools = await this.getTools();\n      const queryCapByName = tools.queryCapByName;\n\n      if (!queryCapByName) {\n        throw new Error('query tool not available on MCP server');\n      }\n\n      // Upload file to IPFS\n      const result = await queryCapByName.execute(\n        {\n          name: name,\n          tags: opt?.tags,\n          page: opt?.page,\n          pageSize: opt?.size,\n          sortBy: opt?.sortBy,\n          sortOrder: opt?.sortOrder,\n        },\n        {\n          toolCallId: 'query-cap-by-name',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      const queryResult = JSON.parse((result.content as any)[0].text);\n      if (queryResult.code === 404) {\n        return {\n          code: 200,\n          data: {\n            totalItems: 0,\n            page: opt?.page || 0,\n            pageSize: opt?.size || 50,\n            items: [] as ResultCap[],\n          },\n        } as Result<Page<ResultCap>>;\n      }\n      if (queryResult.code !== 200) {\n        throw new Error(`query failed: ${queryResult.error || 'Unknown error'}`);\n      }\n      // Transform the raw response data to ResultCap format\n      // const transformedItems = queryResult.data.items.map((item: any) => {\n      // \treturn {\n      // \t\t...item,\n      // \t};\n      // });\n\n      return {\n        code: queryResult.code,\n        data: {\n          totalItems: queryResult.data.totalItems,\n          page: queryResult.data.page,\n          pageSize: queryResult.data.pageSize,\n          items: queryResult.data.items,\n        },\n      } as Result<Page<ResultCap>>;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  async queryMyFavorite(page?: number, size?: number): Promise<Result<Page<ResultCap>>> {\n    try {\n      const tools = await this.getTools();\n      const queryMyFavoriteCaps = tools.queryMyFavoriteCap;\n\n      if (!queryMyFavoriteCaps) {\n        throw new Error('queryMyFavoriteCaps tool not available on MCP server');\n      }\n\n      const result = await queryMyFavoriteCaps.execute(\n        {\n          page: page,\n          pageSize: size,\n        },\n        {\n          toolCallId: 'queryMyFavoriteCaps',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      const queryResult = JSON.parse((result.content as any)[0].text);\n\n      if (queryResult.code !== 200) {\n        throw new Error(`queryMyFavoriteCaps failed: ${queryResult.error || 'Unknown error'}`);\n      }\n\n      return {\n        code: queryResult.code,\n        data: {\n          totalItems: queryResult.data.totalItems,\n          page: queryResult.data.page,\n          pageSize: queryResult.data.pageSize,\n          items: queryResult.data.items,\n        },\n      } as Result<Page<ResultCap>>;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  async queryCapStats(capId: string): Promise<Result<CapStats>> {\n    try {\n      const tools = await this.getTools();\n      const queryCapStats = tools.queryCapStats;\n\n      if (!queryCapStats) {\n        throw new Error('queryCapStats tool not available on MCP server');\n      }\n\n      const result = await queryCapStats.execute(\n        {\n          capId: capId,\n        },\n        {\n          toolCallId: 'queryCapStats',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      const queryResult = JSON.parse((result.content as any)[0].text);\n\n      if (queryResult.code !== 200) {\n        throw new Error(`query cap stats failed: ${queryResult.error || 'Unknown error'}`);\n      }\n\n      return queryResult as Result<CapStats>;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  async rateCap(capId: string, rating: number): Promise<Result<boolean>> {\n    // Validate rating is between 1 and 5\n    if (rating < 1 || rating > 5 || !Number.isInteger(rating)) {\n      throw new Error('Rating must be an integer between 1 and 5');\n    }\n\n    try {\n      const tools = await this.getTools();\n      const rateCap = tools.rateCap;\n\n      if (!rateCap) {\n        throw new Error('rateCap tool not available on MCP server');\n      }\n\n      const result = await rateCap.execute(\n        {\n          capId: capId,\n          rating: rating,\n        },\n        {\n          toolCallId: 'rateCap',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      return {\n        code: 200,\n        data: true,\n      } as Result<boolean>;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  async queryCapRatingDistribution(capId: string): Promise<Result<RatingDistribution[]>> {\n    try {\n      const tools = await this.getTools();\n      const queryCapRatingDistribution = tools.queryCapRatingDistribution;\n\n      if (!queryCapRatingDistribution) {\n        throw new Error('queryCapRatingDistribution tool not available on MCP server');\n      }\n\n      const result = await queryCapRatingDistribution.execute(\n        {\n          capId: capId,\n        },\n        {\n          toolCallId: 'queryCapRatingDistribution',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      const content = (result.content as any)?.[0]?.text;\n      if (content) {\n        try {\n          const resut = JSON.parse(content);\n          return {\n            code: 200,\n            data: resut.data.distribution,\n          } as Result<RatingDistribution[]>;\n        } catch (parseError) {\n          throw new Error('Failed to parse rating distribution response');\n        }\n      }\n\n      throw new Error('No data received');\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  async install(capId: string, action: 'add' | 'remove' | 'isInstall'): Promise<Result<boolean>> {\n    try {\n      const tools = await this.getTools();\n      const favoriteCap = tools.favoriteCap;\n\n      if (!favoriteCap) {\n        throw new Error('favoriteCap tool not available on MCP server');\n      }\n\n      const result = await favoriteCap.execute(\n        {\n          capId: capId,\n          action: action === 'isInstall' ? 'isFavorite' : action,\n        },\n        {\n          toolCallId: 'favoriteCap',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      if (action === 'isInstall') {\n        const data = JSON.parse(result.content[0].text);\n        return {\n          code: 200,\n          data: data.isFavorite,\n        } as Result<boolean>;\n      } else {\n        return {\n          code: 200,\n          data: true,\n        } as Result<boolean>;\n      }\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  async updateEnableCap(capId: string, action: 'enable' | 'disable'): Promise<Result<boolean>> {\n    try {\n      const tools = await this.getTools();\n      const updateEnableCap = tools.updateEnableCap;\n\n      if (!updateEnableCap) {\n        throw new Error('updateEnableCap tool not available on MCP server');\n      }\n\n      const result = await updateEnableCap.execute(\n        {\n          capId: capId,\n          action: action,\n        },\n        {\n          toolCallId: 'updateEnableCap',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      return {\n        code: 200,\n        data: true,\n      } as Result<boolean>;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  // async downloadByID(id: string, format?: \"base64\" | \"utf8\"): Promise<Cap> {\n  //   const result = await this.queryByID({ id: id });\n  //\n  //   if (result.code === 200) {\n  //     return this.downloadByCID(result.data!.cid, format);\n  //   } else {\n  //     throw new Error(\"Invalid Cap ID\");\n  //   }\n  // }\n\n  async downloadByID(id: string): Promise<Cap> {\n    try {\n      // Get tools from MCP server\n      const tools = await this.getTools();\n      const downloadCap = tools.downloadCap;\n\n      if (!downloadCap) {\n        throw new Error('downloadCap tool not available on MCP server');\n      }\n\n      // Download file from IPFS\n      const result = await downloadCap.execute(\n        {\n          id: id,\n        },\n        {\n          toolCallId: 'download-cap',\n          messages: [],\n        }\n      );\n\n      if (result.isError) {\n        throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n      }\n\n      const downloadResult = JSON.parse((result.content as any)[0].text);\n\n      if (downloadResult.code !== 200) {\n        throw new Error(`Download failed: ${downloadResult.error || 'Unknown error'}`);\n      }\n      const data = downloadResult.data.rawData;\n      const utf8 = new TextDecoder().decode(Uint8Array.from(atob(data), c => c.charCodeAt(0)));\n\n      return yaml.load(utf8) as Cap;\n    } catch (e) {\n      throw e;\n    }\n  }\n\n  // async registerCap(cap: Cap) {\n  //   // len > 6 && len < 20, only contain a-z, A-Z, 0-9, _\n  //   if (!/^[a-zA-Z0-9_]{6,20}$/.test(cap.idName)) {\n  //     throw new Error(\n  //       \"Name must be between 6 and 20 characters and only contain a-z, A-Z, 0-9, _\",\n  //     );\n  //   }\n  //\n  //   // 1. Create ACP (Agent Capability Package) file\n  //   const acpContent = yaml.dump(cap);\n  //\n  //   // 2. Upload ACP file to IPFS using nuwa-cap-store MCP\n  //   const cid = await this.uploadToIPFS(cap.id, acpContent);\n  //\n  //   // 3. Call Move contract to register the capability\n  //   const result = await this.registerOnChain(cap.idName, cid, this.env.keyManager);\n  //\n  //   if (result.execution_info.status.type !== \"executed\") {\n  //     throw new Error(\"unknown error\");\n  //   }\n  //\n  //   return cid;\n  // }\n\n  async registerCap(cap: Cap) {\n    // len > 6 && len < 20, only contain a-z, A-Z, 0-9, _\n    if (!/^[a-zA-Z0-9_]{6,20}$/.test(cap.idName)) {\n      throw new Error('Name must be between 6 and 20 characters and only contain a-z, A-Z, 0-9, _');\n    }\n\n    // 1. Create ACP (Agent Capability Package) file\n    const acpContent = yaml.dump(cap);\n\n    const encoder = new TextEncoder();\n    const bytes = encoder.encode(acpContent);\n    const rawData = btoa(String.fromCharCode(...bytes));\n\n    const tools = await this.getTools();\n    const uploadCap = tools.uploadCap;\n\n    const result = await uploadCap.execute(\n      {\n        cap: rawData,\n      },\n      {\n        toolCallId: 'upload-cap',\n        messages: [],\n      }\n    );\n\n    if (result.isError) {\n      throw new Error((result.content as any)?.[0]?.text || 'Unknown error');\n    }\n\n    const uploadResult = JSON.parse((result.content as any)[0].text);\n    const uploadData = uploadResult.data;\n\n    if (uploadResult.code !== 200) {\n      throw new Error(`Upload cap failed: ${uploadResult.error || 'Unknown error'}`);\n    }\n\n    return cap.id;\n  }\n\n  // private async uploadToIPFS(\n  //   name: string,\n  //   content: string,\n  // ): Promise<string> {\n  //\n  //   try {\n  //     // Get tools from MCP server\n  //     const tools = await this.getTools()\n  //     const uploadCap = tools.uploadCap;\n  //\n  //     if (!uploadCap) {\n  //       throw new Error(\"uploadCap tool not available on MCP server\");\n  //     }\n  //\n  //     // Convert content to base64 (UTF-8 safe)\n  //     const encoder = new TextEncoder();\n  //     const bytes = encoder.encode(content);\n  //     const fileData = btoa(String.fromCharCode(...bytes));\n  //     const fileName = `${name}.cap.yaml`;\n  //\n  //     // Upload file to IPFS\n  //     const result = await uploadCap.execute(\n  //       {\n  //         fileName,\n  //         fileData,\n  //       },\n  //       {\n  //         toolCallId: \"upload-cap\",\n  //         messages: [],\n  //       },\n  //     );\n  //\n  //     if (result.isError) {\n  //       throw new Error((result.content as any)?.[0]?.text || \"Unknown error\");\n  //     }\n  //\n  //     const uploadResult = JSON.parse((result.content as any)[0].text);\n  //     const uploadData = uploadResult.data;\n  //\n  //     if (uploadResult.code !== 200 || !uploadData.ipfsCid) {\n  //       throw new Error(\n  //         `Upload cap failed: ${uploadResult.error || \"Unknown error\"}`,\n  //       );\n  //     }\n  //\n  //     return uploadData.ipfsCid;\n  //   } catch (e) {\n  //     throw e\n  //   }\n  // }\n  //\n  // private async registerOnChain(\n  //   name: string,\n  //   cid: string,\n  //   signer: SignerInterface,\n  // ) {\n  //   const chainSigner = await DidAccountSigner.create(signer);\n  //   const transaction = new Transaction();\n  //   transaction.callFunction({\n  //     target: `${this.contractAddress}::acp_registry::register`,\n  //     typeArgs: [],\n  //     args: [Args.string(name), Args.string(cid)],\n  //     maxGas: 500000000,\n  //   });\n  //\n  //   return await this.roochClient.signAndExecuteTransaction({\n  //     transaction,\n  //     signer: chainSigner,\n  //   });\n  // }\n}\n","// import { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp\";\n// import { DIDAuth, type SignerInterface } from \"@nuwa-ai/identity-kit\";\nimport { IdentityEnv } from '@nuwa-ai/identity-kit';\nimport { createMcpClient, UniversalMcpClient } from '@nuwa-ai/payment-kit';\n\nexport const buildClient = async (\n  mcpUrl: string,\n  env: IdentityEnv\n): Promise<UniversalMcpClient> => {\n  return createMcpClient({\n    baseUrl: mcpUrl,\n    env,\n    maxAmount: BigInt(10_000_000),\n    debug: false,\n    forceMode: 'payment',\n  });\n};\n","import { Cap, Page, Result, ResultCap } from './type';\nimport * as yaml from 'js-yaml';\n\nexport interface DownloadCaps {\n  successful: { [id: string]: Cap };\n  failed: { [id: string]: string };\n  summary: {\n    total: number;\n    successful: number;\n    failed: number;\n  };\n}\n\nexport class CapKitRestful {\n  protected apiUrl: string;\n\n  constructor(apiUrl: string) {\n    this.apiUrl = apiUrl;\n  }\n\n  async queryCap(capId: string): Promise<Result<ResultCap>> {\n    const response = await fetch(`${this.apiUrl}/cap/${capId}`);\n    return await response.json();\n  }\n\n  async queryCaps(\n    name?: string,\n    tags?: string[],\n    page?: number,\n    pageSize?: number,\n    sortBy?: 'average_rating' | 'downloads' | 'favorites' | 'rating_count' | 'updated_at',\n    sortOrder?: 'asc' | 'desc'\n  ): Promise<Result<Page<ResultCap>>> {\n    const params = new URLSearchParams();\n\n    if (name) params.append('name', name);\n    if (tags && tags.length > 0) {\n      tags.forEach(tag => params.append('tags', tag));\n    }\n    if (page !== undefined) params.append('page', page.toString());\n    if (pageSize !== undefined) params.append('pageSize', pageSize.toString());\n    if (sortBy) params.append('sortBy', sortBy);\n    if (sortOrder) params.append('sortOrder', sortOrder);\n\n    const url = params.toString()\n      ? `${this.apiUrl}/caps?${params.toString()}`\n      : `${this.apiUrl}/caps`;\n    const response = await fetch(url);\n    return await response.json();\n  }\n\n  async queryUserInstalledCaps(\n    did: string,\n    page?: number,\n    pageSize?: number\n  ): Promise<Result<Page<ResultCap>>> {\n    const params = new URLSearchParams();\n\n    if (did) params.append('did', did);\n    if (page !== undefined) params.append('page', page.toString());\n    if (pageSize !== undefined) params.append('pageSize', pageSize.toString());\n\n    const url = `${this.apiUrl}/caps/installed?${params.toString()}`;\n    const response = await fetch(url);\n    return await response.json();\n  }\n\n  async downloadCap(capId: string): Promise<Cap> {\n    const response = await fetch(`${this.apiUrl}/cap/download/${capId}`);\n\n    const result = await response.json();\n    const utf8 = new TextDecoder().decode(\n      Uint8Array.from(atob(result.data.raw_data), c => c.charCodeAt(0))\n    );\n\n    return yaml.load(utf8) as Cap;\n  }\n\n  async downloadCaps(capIDs: string[]): Promise<DownloadCaps> {\n    if (capIDs.length === 0) {\n      return {\n        successful: {},\n        failed: {},\n        summary: {\n          successful: 0,\n          failed: 0,\n          total: 0,\n        },\n      };\n    }\n    const response = await fetch(`${this.apiUrl}/caps/download`, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({ ids: capIDs }),\n    });\n\n    const result = await response.json();\n    const successful = result.data.successful;\n    const formatSuccessful: { [id: string]: Cap } = {};\n    for (const [id, value] of Object.entries(successful)) {\n      const utf8 = new TextDecoder().decode(\n        Uint8Array.from(atob(value as string), c => c.charCodeAt(0))\n      );\n      const cap = yaml.load(utf8) as Cap;\n      formatSuccessful[id] = cap;\n    }\n\n    return {\n      ...result.data,\n      successful: formatSuccessful,\n    };\n  }\n}\n"],"mappings":"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","names":["yaml"]}