@nuwa-ai/cap-kit
Version:
1 lines • 38.7 kB
Source Map (JSON)
{"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"]}