builtwith-api 3.1.0 → 3.2.0
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/dist/cli.js +148 -94
- package/dist/cli.js.map +10 -9
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +162 -0
- package/dist/commands.js.map +10 -0
- package/dist/format.d.ts +2 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/index.d.ts +27 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -47
- package/dist/index.js.map +6 -6
- package/dist/params.d.ts.map +1 -1
- package/dist/request.d.ts.map +1 -1
- package/dist/schemas.d.ts +179 -36
- package/dist/schemas.d.ts.map +1 -1
- package/package.json +15 -22
- package/LICENSE +0 -21
- package/README.md +0 -249
- package/dist/config.js +0 -11
- package/dist/config.js.map +0 -1
- package/dist/mcp.d.ts +0 -3
- package/dist/mcp.d.ts.map +0 -1
- package/dist/mcp.js +0 -689
- package/dist/mcp.js.map +0 -17
- package/dist/params.js +0 -37
- package/dist/params.js.map +0 -1
- package/dist/request.js +0 -39
- package/dist/request.js.map +0 -1
- package/dist/types.d.ts +0 -48
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
package/dist/mcp.js.map
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/config.ts", "../src/schemas.ts", "../src/params.ts", "../src/request.ts", "../src/index.ts", "../src/errors.ts", "../src/mcp.ts", "../src/commands.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ResponseFormat } from \"./schemas.js\";\n\nexport const VALID_RESPONSE_TYPES = {\n XML: \"xml\",\n JSON: \"json\",\n TXT: \"txt\",\n CSV: \"csv\",\n TSV: \"tsv\",\n} as const satisfies Record<string, ResponseFormat>;\n",
|
|
6
|
-
"import { z } from \"zod/v4\";\n\n// ─── Input Schemas ───────────────────────────────────────────────────────────\n\nexport const ResponseFormatSchema = z.enum([\"xml\", \"json\", \"txt\", \"csv\", \"tsv\"]);\nexport type ResponseFormat = z.infer<typeof ResponseFormatSchema>;\n\nexport const ClientOptionsSchema = z.strictObject({\n responseFormat: ResponseFormatSchema.optional(),\n});\nexport type ClientOptions = z.infer<typeof ClientOptionsSchema>;\n\nexport const DomainParamsSchema = z.strictObject({\n hideAll: z.boolean().optional(),\n hideDescriptionAndLinks: z.boolean().optional(),\n onlyLiveTechnologies: z.boolean().optional(),\n noMetaData: z.boolean().optional(),\n noAttributeData: z.boolean().optional(),\n noPII: z.boolean().optional(),\n firstDetectedRange: z.string().optional(),\n lastDetectedRange: z.string().optional(),\n});\nexport type DomainParams = z.infer<typeof DomainParamsSchema>;\n\nexport const ListsParamsSchema = z.strictObject({\n includeMetaData: z.boolean().optional(),\n offset: z.string().optional(),\n since: z.string().optional(),\n});\nexport type ListsParams = z.infer<typeof ListsParamsSchema>;\n\nexport const TrendsParamsSchema = z.strictObject({\n date: z.string().optional(),\n});\nexport type TrendsParams = z.infer<typeof TrendsParamsSchema>;\n\nexport const CompanyToUrlParamsSchema = z.strictObject({\n tld: z.string().optional(),\n amount: z.number().optional(),\n});\nexport type CompanyToUrlParams = z.infer<typeof CompanyToUrlParamsSchema>;\n\nexport const TrustParamsSchema = z.strictObject({\n words: z.string().optional(),\n live: z.boolean().optional(),\n});\nexport type TrustParams = z.infer<typeof TrustParamsSchema>;\n\nexport const SingleLookupSchema = z.string().min(1);\nexport const MultiLookupSchema = z.union([\n z.string().min(1),\n z.array(z.string().min(1)).min(1).max(16),\n]);\n\n// ─── Response Schemas ────────────────────────────────────────────────────────\n// Use z.object() (loose/passthrough) to tolerate extra fields from the API\n\nexport const FreeResponseSchema = z.object({\n domain: z.string(),\n first: z.number(),\n last: z.number(),\n groups: z.array(\n z.object({\n name: z.string(),\n live: z.number(),\n dead: z.number(),\n latest: z.number(),\n oldest: z.number(),\n categories: z.array(\n z.object({\n live: z.number(),\n dead: z.number(),\n latest: z.number(),\n oldest: z.number(),\n name: z.string(),\n }),\n ),\n }),\n ),\n});\nexport type FreeResponse = z.infer<typeof FreeResponseSchema>;\n\nconst TechnologySchema = z.object({\n Name: z.string(),\n Description: z.string(),\n Link: z.string(),\n Parent: z.string().optional(),\n Tag: z.string(),\n FirstDetected: z.number(),\n LastDetected: z.number(),\n IsPremium: z.string(),\n Categories: z.array(z.string()).optional(),\n});\n\nconst PathSchema = z.object({\n Technologies: z.array(TechnologySchema),\n FirstIndexed: z.number(),\n LastIndexed: z.number(),\n Domain: z.string(),\n Url: z.string(),\n SubDomain: z.string(),\n});\n\nconst MetaSchema = z.object({\n Majestic: z.number(),\n Vertical: z.string(),\n Social: z.array(z.string()),\n CompanyName: z.string(),\n Telephones: z.array(z.string()),\n Emails: z.array(z.string()),\n City: z.string(),\n State: z.string(),\n Postcode: z.string(),\n Country: z.string(),\n Names: z.array(\n z.object({\n Name: z.string(),\n Type: z.number(),\n Level: z.string(),\n Email: z.string(),\n }),\n ),\n ARank: z.number(),\n QRank: z.number(),\n});\n\nconst AttributesSchema = z.object({\n MJRank: z.number(),\n MJTLDRank: z.number(),\n RefSN: z.number(),\n RefIP: z.number(),\n Sitemap: z.number(),\n GTMTags: z.number(),\n QubitTags: z.number(),\n TealiumTags: z.number(),\n AdobeTags: z.number(),\n CDimensions: z.number(),\n CGoals: z.number(),\n CMetrics: z.number(),\n});\n\nexport const DomainResponseSchema = z.object({\n Results: z.array(\n z.object({\n Result: z.object({\n SpendHistory: z.array(\n z.object({\n D: z.number(),\n S: z.number(),\n }),\n ),\n IsDB: z.string(),\n Spend: z.number(),\n Paths: z.array(PathSchema),\n }),\n Meta: MetaSchema,\n Attributes: AttributesSchema,\n FirstIndexed: z.number(),\n LastIndexed: z.number(),\n Lookup: z.string(),\n SalesRevenue: z.number(),\n }),\n ),\n Errors: z.array(z.string()),\n});\nexport type DomainResponse = z.infer<typeof DomainResponseSchema>;\n\nexport const ListsResponseSchema = z.object({\n NextOffset: z.string(),\n Results: z.array(\n z.object({\n D: z.string(),\n FI: z.number().optional(),\n LI: z.number().optional(),\n LOS: z.array(z.string()).optional(),\n Q: z.number().optional(),\n A: z.number().optional(),\n U: z.number().optional(),\n M: z.number().optional(),\n SKU: z.number().optional(),\n F: z.number().optional(),\n E: z.number().optional(),\n FD: z.number().optional(),\n LD: z.number().optional(),\n S: z.number().optional(),\n R: z.number().optional(),\n Country: z.string().optional(),\n }),\n ),\n});\nexport type ListsResponse = z.infer<typeof ListsResponseSchema>;\n\nexport const RelationshipsResponseSchema = z.object({\n Relationships: z.array(\n z.object({\n Domain: z.string(),\n Identifiers: z.array(\n z.object({\n Value: z.string(),\n Type: z.string(),\n First: z.number(),\n Last: z.number(),\n Matches: z.array(\n z.object({\n Domain: z.string(),\n First: z.number(),\n Last: z.number(),\n Overlap: z.boolean(),\n }),\n ),\n }),\n ),\n }),\n ),\n Errors: z.array(z.string()),\n results: z.number(),\n max_per_page: z.number(),\n next_skip: z.number(),\n more_results: z.boolean(),\n});\nexport type RelationshipsResponse = z.infer<typeof RelationshipsResponseSchema>;\n\nexport const KeywordsResponseSchema = z.object({\n Keywords: z.array(\n z.object({\n Domain: z.string(),\n Keywords: z.array(z.string()),\n }),\n ),\n});\nexport type KeywordsResponse = z.infer<typeof KeywordsResponseSchema>;\n\nexport const TrendsResponseSchema = z.object({\n Tech: z.object({\n icon: z.string(),\n categories: z.array(z.string()),\n tag: z.string(),\n is_premium: z.string(),\n name: z.string(),\n description: z.string(),\n link: z.string(),\n trends_link: z.string(),\n coverage: z.object({\n ten_k: z.number(),\n hundred_k: z.number(),\n milly: z.number(),\n live: z.number(),\n expired: z.number(),\n }),\n }),\n});\nexport type TrendsResponse = z.infer<typeof TrendsResponseSchema>;\n\nexport const CompanyToUrlResponseSchema = z.array(\n z.object({\n Domain: z.string(),\n CompanyName: z.string(),\n Spend: z.number(),\n PageRank: z.number(),\n BuiltWithRank: z.number(),\n Parked: z.boolean(),\n Country: z.string(),\n State: z.string(),\n Postcode: z.string(),\n City: z.string(),\n Socials: z.array(z.string()),\n }),\n);\nexport type CompanyToUrlResponse = z.infer<typeof CompanyToUrlResponseSchema>;\n\nexport const TrustResponseSchema = z.object({\n Domain: z.string(),\n DBRecord: z.object({\n EarliestRecord: z.number(),\n LatestUpdate: z.number(),\n PremiumTechs: z.number(),\n LiveTechs: z.boolean(),\n AffiliateLinks: z.boolean(),\n PaymentOptions: z.boolean(),\n Ecommerce: z.boolean(),\n Parked: z.boolean(),\n Spend: z.number(),\n Established: z.boolean(),\n DBIndexed: z.boolean(),\n }),\n LiveRecord: z.object({}).passthrough().nullable(),\n Status: z.number(),\n});\nexport type TrustResponse = z.infer<typeof TrustResponseSchema>;\n\nexport const TagsResponseSchema = z.array(\n z.object({\n Value: z.string(),\n Matches: z.array(\n z.object({\n Domain: z.string(),\n First: z.string(),\n Last: z.string(),\n }),\n ),\n }),\n);\nexport type TagsResponse = z.infer<typeof TagsResponseSchema>;\n\nexport const RecommendationsResponseSchema = z.array(\n z.object({\n Domain: z.string(),\n Compiled: z.string(),\n Recommendations: z.array(\n z.object({\n link: z.string(),\n name: z.string(),\n tag: z.string(),\n categories: z.array(z.string()),\n stars: z.number(),\n match: z.number(),\n }),\n ),\n }),\n);\nexport type RecommendationsResponse = z.infer<typeof RecommendationsResponseSchema>;\n\nexport const RedirectsResponseSchema = z.object({\n Lookup: z.string(),\n Inbound: z.array(\n z.object({\n Domain: z.string(),\n FirstDetected: z.string(),\n LastDetected: z.string(),\n }),\n ),\n Outbound: z.array(\n z.object({\n Domain: z.string(),\n FirstDetected: z.string(),\n LastDetected: z.string(),\n }),\n ),\n});\nexport type RedirectsResponse = z.infer<typeof RedirectsResponseSchema>;\n\nexport const ProductResponseSchema = z.object({\n query: z.string(),\n is_more: z.boolean(),\n page: z.number(),\n limit: z.number(),\n results: z.number(),\n shop_count: z.number(),\n credits: z.number(),\n used: z.number(),\n remaining: z.number(),\n used_this_query: z.number(),\n next_page: z.string(),\n shops: z.array(\n z.object({\n Domain: z.string(),\n Products: z.array(\n z.object({\n Title: z.string(),\n Url: z.string(),\n Indexed: z.string(),\n FirstIndexed: z.string(),\n Price: z.number(),\n }),\n ),\n Type: z.number(),\n Spend: z.number(),\n }),\n ),\n});\nexport type ProductResponse = z.infer<typeof ProductResponseSchema>;\n\n// ─── Client Interface ────────────────────────────────────────────────────────\n\nexport interface BuiltWithClient {\n free(lookup: string): Promise<FreeResponse | string>;\n domain(lookup: string | string[], params?: DomainParams): Promise<DomainResponse | string>;\n lists(technology: string, params?: ListsParams): Promise<ListsResponse | string>;\n relationships(lookup: string | string[]): Promise<RelationshipsResponse | string>;\n keywords(lookup: string | string[]): Promise<KeywordsResponse | string>;\n trends(technology: string, params?: TrendsParams): Promise<TrendsResponse | string>;\n companyToUrl(companyName: string, params?: CompanyToUrlParams): Promise<CompanyToUrlResponse | string>;\n domainLive(lookup: string): Promise<DomainResponse | string>;\n trust(lookup: string, params?: TrustParams): Promise<TrustResponse | string>;\n tags(lookup: string): Promise<TagsResponse | string>;\n recommendations(lookup: string): Promise<RecommendationsResponse | string>;\n redirects(lookup: string): Promise<RedirectsResponse | string>;\n product(query: string): Promise<ProductResponse | string>;\n}\n\n// ─── Utility Types ───────────────────────────────────────────────────────────\n\nexport type BooleanMapping = Record<string, string>;\nexport type QueryParams = Record<string, string | number | undefined>;\n",
|
|
7
|
-
"import { SingleLookupSchema, MultiLookupSchema } from \"./schemas.js\";\nimport type { BooleanMapping, QueryParams } from \"./schemas.js\";\n\nexport const toQueryString = (params: QueryParams): string =>\n Object.entries(params)\n .filter((entry): entry is [string, string | number] => entry[1] !== undefined)\n .map(([k, v]) => `${k}=${encodeURIComponent(v).replace(/%2C/gi, \",\")}`)\n .join(\"&\");\n\nconst booleanFlag = (value: unknown): \"yes\" | undefined =>\n value ? \"yes\" : undefined;\n\nexport const booleanParams = (\n params: Record<string, unknown> | null | undefined,\n mapping: BooleanMapping,\n): QueryParams =>\n Object.fromEntries(\n Object.entries(mapping).map(([jsKey, apiKey]) => [\n apiKey,\n booleanFlag(params?.[jsKey]),\n ]),\n );\n\nexport const cleanWords = (words: string | undefined): string | undefined =>\n words\n ? words\n .split(\",\")\n .map((w) => w.trim())\n .join(\",\")\n : undefined;\n\nexport const buildURL = (\n apiKey: string,\n format: string,\n path: string,\n params: QueryParams,\n subdomain: string = \"api\",\n): string => {\n const base = `https://${subdomain}.builtwith.com/${path}/api.${format}?KEY=${apiKey}`;\n const qs = toQueryString(params);\n return qs ? `${base}&${qs}` : base;\n};\n\nexport const validateLookup = (\n url: string | string[],\n { multi = false }: { multi?: boolean } = {},\n): void => {\n if (multi) {\n MultiLookupSchema.parse(url);\n } else {\n SingleLookupSchema.parse(url);\n }\n if (Array.isArray(url)) {\n if (!multi) throw new Error(\"API does not allow for multi-domain LOOKUP\");\n if (url.length > 16) throw new Error(\"Domain LOOKUP size too big (16 max)\");\n }\n};\n",
|
|
8
|
-
"import type { z } from \"zod/v4\";\nimport { VALID_RESPONSE_TYPES } from \"./config.js\";\nimport type { ResponseFormat } from \"./schemas.js\";\n\nconst TEXT_FORMATS: readonly ResponseFormat[] = [\n VALID_RESPONSE_TYPES.TXT,\n VALID_RESPONSE_TYPES.XML,\n VALID_RESPONSE_TYPES.CSV,\n VALID_RESPONSE_TYPES.TSV,\n];\n\nexport const request = async <T>(\n url: string,\n format: ResponseFormat,\n schema: z.ZodType<T>,\n): Promise<T | string> => {\n const res = await fetch(url);\n if (!res.ok) {\n const body = await res.text();\n throw new Error(`BuiltWith API error ${res.status}: ${body}`);\n }\n if (TEXT_FORMATS.includes(format)) {\n return res.text();\n }\n const data: unknown = await res.json();\n return schema.parse(data);\n};\n\nexport const requestSafe = async <T>(\n url: string,\n format: ResponseFormat,\n schema: z.ZodType<T>,\n): Promise<T | string> => {\n const res = await fetch(url);\n if (!res.ok) {\n const body = await res.text();\n throw new Error(`BuiltWith API error ${res.status}: ${body}`);\n }\n if (TEXT_FORMATS.includes(format)) {\n return res.text();\n }\n const raw = await res.text();\n let data: unknown;\n try {\n data = JSON.parse(raw);\n } catch {\n console.warn(\n \"BuiltWith sent an invalid JSON payload. Falling back to text parsing.\",\n );\n return raw;\n }\n return schema.parse(data);\n};\n",
|
|
9
|
-
"import { VALID_RESPONSE_TYPES } from \"./config.js\";\nimport { buildURL, booleanParams, cleanWords, validateLookup } from \"./params.js\";\nimport { request, requestSafe } from \"./request.js\";\nimport {\n ResponseFormatSchema,\n ClientOptionsSchema,\n DomainParamsSchema,\n ListsParamsSchema,\n TrendsParamsSchema,\n CompanyToUrlParamsSchema,\n TrustParamsSchema,\n FreeResponseSchema,\n DomainResponseSchema,\n ListsResponseSchema,\n RelationshipsResponseSchema,\n KeywordsResponseSchema,\n TrendsResponseSchema,\n CompanyToUrlResponseSchema,\n TrustResponseSchema,\n TagsResponseSchema,\n RecommendationsResponseSchema,\n RedirectsResponseSchema,\n ProductResponseSchema,\n} from \"./schemas.js\";\nimport type {\n ResponseFormat,\n ClientOptions,\n DomainParams,\n ListsParams,\n TrendsParams,\n CompanyToUrlParams,\n TrustParams,\n BuiltWithClient,\n BooleanMapping,\n QueryParams,\n} from \"./schemas.js\";\n\nconst DOMAIN_BOOLEANS: BooleanMapping = {\n hideAll: \"HIDETEXT\",\n hideDescriptionAndLinks: \"HIDEDL\",\n onlyLiveTechnologies: \"LIVEONLY\",\n noMetaData: \"NOMETA\",\n noAttributeData: \"NOATTR\",\n noPII: \"NOPII\",\n};\n\nexport function createClient(\n apiKey: string,\n moduleParams: ClientOptions = {},\n): BuiltWithClient {\n if (!apiKey) {\n throw new Error(\"You must initialize the BuiltWith module with an api key\");\n }\n\n const parsed = ClientOptionsSchema.parse(moduleParams);\n const format: ResponseFormat = parsed.responseFormat || \"json\";\n\n if (format === VALID_RESPONSE_TYPES.TXT) {\n console.warn(\n \"TXT response format is only supported for the BuiltWith Lists API. See: https://api.builtwith.com/lists-api\",\n );\n }\n\n const url = (path: string, params: QueryParams) =>\n buildURL(apiKey, format, path, params);\n const get = <T>(bwURL: string, schema: import(\"zod/v4\").ZodType<T>) =>\n request(bwURL, format, schema);\n const getSafe = <T>(bwURL: string, schema: import(\"zod/v4\").ZodType<T>) =>\n requestSafe(bwURL, format, schema);\n\n return {\n free: async (lookup: string) => {\n validateLookup(lookup);\n return get(url(\"free1\", { LOOKUP: lookup }), FreeResponseSchema);\n },\n\n domain: async (lookup: string | string[], params?: DomainParams) => {\n validateLookup(lookup, { multi: true });\n if (params) DomainParamsSchema.parse(params);\n return get(\n url(\"v22\", {\n LOOKUP: Array.isArray(lookup) ? lookup.join(\",\") : lookup,\n ...booleanParams(params, DOMAIN_BOOLEANS),\n FDRANGE: params?.firstDetectedRange,\n LDRANGE: params?.lastDetectedRange,\n }),\n DomainResponseSchema,\n );\n },\n\n lists: async (technology: string, params?: ListsParams) => {\n if (params) ListsParamsSchema.parse(params);\n return getSafe(\n url(\"lists12\", {\n TECH: technology,\n META: params?.includeMetaData ? \"yes\" : undefined,\n OFFSET: params?.offset,\n SINCE: params?.since,\n }),\n ListsResponseSchema,\n );\n },\n\n relationships: async (lookup: string | string[]) => {\n validateLookup(lookup, { multi: true });\n return get(\n url(\"rv4\", {\n LOOKUP: Array.isArray(lookup) ? lookup.join(\",\") : lookup,\n }),\n RelationshipsResponseSchema,\n );\n },\n\n keywords: async (lookup: string | string[]) => {\n validateLookup(lookup, { multi: true });\n return get(\n url(\"kw2\", {\n LOOKUP: Array.isArray(lookup) ? lookup.join(\",\") : lookup,\n }),\n KeywordsResponseSchema,\n );\n },\n\n trends: async (technology: string, params?: TrendsParams) => {\n if (params) TrendsParamsSchema.parse(params);\n return getSafe(\n url(\"trends/v6\", {\n TECH: technology,\n DATE: params?.date,\n }),\n TrendsResponseSchema,\n );\n },\n\n companyToUrl: async (companyName: string, params?: CompanyToUrlParams) => {\n if (params) CompanyToUrlParamsSchema.parse(params);\n return get(\n url(\"ctu3\", {\n COMPANY: companyName,\n TLD: params?.tld,\n AMOUNT: params?.amount,\n }),\n CompanyToUrlResponseSchema,\n );\n },\n\n domainLive: async (lookup: string) => {\n validateLookup(lookup);\n return get(url(\"ddlv2\", { LOOKUP: lookup }), DomainResponseSchema);\n },\n\n trust: async (lookup: string, params?: TrustParams) => {\n validateLookup(lookup);\n if (params) TrustParamsSchema.parse(params);\n return get(\n url(\"trustv1\", {\n LOOKUP: lookup,\n WORDS: cleanWords(params?.words),\n LIVE: params?.live ? \"yes\" : undefined,\n }),\n TrustResponseSchema,\n );\n },\n\n tags: async (lookup: string) => {\n validateLookup(lookup);\n return get(url(\"tag1\", { LOOKUP: lookup }), TagsResponseSchema);\n },\n\n recommendations: async (lookup: string) => {\n validateLookup(lookup);\n return get(url(\"rec1\", { LOOKUP: lookup }), RecommendationsResponseSchema);\n },\n\n redirects: async (lookup: string) => {\n validateLookup(lookup);\n return get(url(\"redirect1\", { LOOKUP: lookup }), RedirectsResponseSchema);\n },\n\n product: async (query: string) => {\n return get(url(\"productv1\", { QUERY: query }), ProductResponseSchema);\n },\n };\n}\n\nexport type {\n ResponseFormat,\n ClientOptions,\n DomainParams,\n ListsParams,\n TrendsParams,\n CompanyToUrlParams,\n TrustParams,\n BuiltWithClient,\n BooleanMapping,\n QueryParams,\n} from \"./schemas.js\";\n",
|
|
10
|
-
"import { z } from \"zod/v4\";\n\nexport function formatError(err: unknown): string {\n if (err instanceof z.ZodError) {\n const fields = err.issues.map((i) => {\n const path = i.path.length > 0 ? i.path.join(\".\") : \"response\";\n return ` ${path}: ${i.message}`;\n });\n return `BuiltWith API returned an unexpected response:\\n${fields.join(\"\\n\")}`;\n }\n if (err instanceof Error) {\n return err.message;\n }\n return String(err);\n}\n",
|
|
11
|
-
"#!/usr/bin/env node\nimport { createRequire } from \"node:module\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { z } from \"zod/v4\";\nimport { createClient } from \"./index.js\";\nimport { commands } from \"./commands.js\";\nimport { formatError } from \"./errors.js\";\n\nconst require = createRequire(import.meta.url);\nconst { version } = require(\"../package.json\");\n\n// Accept --api-key flag or BUILTWITH_API_KEY env var\nconst keyFlagIndex = process.argv.indexOf(\"--api-key\");\nconst apiKey =\n (keyFlagIndex !== -1 ? process.argv[keyFlagIndex + 1] : undefined) ||\n process.env.BUILTWITH_API_KEY;\nif (!apiKey) {\n console.error(\"Error: pass --api-key or set BUILTWITH_API_KEY environment variable.\");\n process.exit(1);\n}\n\nconst client = createClient(apiKey);\n\nconst server = new McpServer({\n name: \"builtwith\",\n version,\n});\n\nfor (const cmd of commands) {\n // Build Zod schema from arg definitions\n const shape: Record<string, z.ZodType> = {};\n for (const arg of cmd.args) {\n let schema: z.ZodType;\n switch (arg.type) {\n case \"number\":\n schema = z.number().describe(arg.description);\n break;\n case \"boolean\":\n schema = z.boolean().describe(arg.description);\n break;\n default:\n schema = z.string().describe(arg.description);\n break;\n }\n shape[arg.name] = arg.required ? schema : schema.optional();\n }\n\n server.tool(\n `builtwith_${cmd.name}`,\n cmd.description,\n shape,\n async (params) => {\n try {\n const result = await cmd.execute(client, params);\n return {\n content: [{ type: \"text\" as const, text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n return {\n content: [{ type: \"text\" as const, text: formatError(err) }],\n isError: true,\n };\n }\n },\n );\n}\n\nconst transport = new StdioServerTransport();\nserver.connect(transport);\n",
|
|
12
|
-
"import type { BuiltWithClient } from \"./schemas.js\";\n\nexport interface ArgDefinition {\n name: string;\n description: string;\n type: \"string\" | \"number\" | \"boolean\";\n required: boolean;\n}\n\nexport interface CommandDefinition {\n name: keyof BuiltWithClient;\n description: string;\n args: ArgDefinition[];\n execute: (client: BuiltWithClient, args: Record<string, unknown>) => Promise<unknown>;\n}\n\nexport function splitLookup(value: unknown): string | string[] {\n const str = String(value);\n return str.includes(\",\") ? str.split(\",\").map((s) => s.trim()) : str;\n}\n\nexport const commands: CommandDefinition[] = [\n {\n name: \"free\",\n description: \"Free lookup — basic technology profile for a domain\",\n args: [\n { name: \"lookup\", description: \"Domain to look up\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.free(String(args.lookup)),\n },\n {\n name: \"domain\",\n description: \"Detailed technology profile for one or more domains (comma-separated)\",\n args: [\n { name: \"lookup\", description: \"Domain(s) to look up (comma-separated for multiple)\", type: \"string\", required: true },\n { name: \"hideAll\", description: \"Hide description text and links\", type: \"boolean\", required: false },\n { name: \"hideDescriptionAndLinks\", description: \"Hide description and links only\", type: \"boolean\", required: false },\n { name: \"onlyLiveTechnologies\", description: \"Only return live technologies\", type: \"boolean\", required: false },\n { name: \"noMetaData\", description: \"Exclude metadata\", type: \"boolean\", required: false },\n { name: \"noAttributeData\", description: \"Exclude attribute data\", type: \"boolean\", required: false },\n { name: \"noPII\", description: \"Exclude personally identifiable information\", type: \"boolean\", required: false },\n { name: \"firstDetectedRange\", description: \"Filter by first detected date range\", type: \"string\", required: false },\n { name: \"lastDetectedRange\", description: \"Filter by last detected date range\", type: \"string\", required: false },\n ],\n execute: (client, args) => {\n const lookup = splitLookup(args.lookup);\n const { lookup: _, ...params } = args;\n return client.domain(lookup, Object.keys(params).length > 0 ? params as any : undefined);\n },\n },\n {\n name: \"lists\",\n description: \"List domains using a specific technology\",\n args: [\n { name: \"technology\", description: \"Technology name to search for\", type: \"string\", required: true },\n { name: \"includeMetaData\", description: \"Include metadata in results\", type: \"boolean\", required: false },\n { name: \"offset\", description: \"Pagination offset\", type: \"string\", required: false },\n { name: \"since\", description: \"Only return results since this date\", type: \"string\", required: false },\n ],\n execute: (client, args) => {\n const { technology, ...params } = args;\n return client.lists(String(technology), Object.keys(params).length > 0 ? params as any : undefined);\n },\n },\n {\n name: \"relationships\",\n description: \"Find related domains via shared identifiers\",\n args: [\n { name: \"lookup\", description: \"Domain(s) to look up (comma-separated for multiple)\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.relationships(splitLookup(args.lookup)),\n },\n {\n name: \"keywords\",\n description: \"Get keywords for one or more domains\",\n args: [\n { name: \"lookup\", description: \"Domain(s) to look up (comma-separated for multiple)\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.keywords(splitLookup(args.lookup)),\n },\n {\n name: \"trends\",\n description: \"Technology adoption trends\",\n args: [\n { name: \"technology\", description: \"Technology name\", type: \"string\", required: true },\n { name: \"date\", description: \"Date filter\", type: \"string\", required: false },\n ],\n execute: (client, args) => {\n const { technology, ...params } = args;\n return client.trends(String(technology), Object.keys(params).length > 0 ? params as any : undefined);\n },\n },\n {\n name: \"companyToUrl\",\n description: \"Find domains associated with a company name\",\n args: [\n { name: \"companyName\", description: \"Company name to search\", type: \"string\", required: true },\n { name: \"tld\", description: \"Filter by top-level domain\", type: \"string\", required: false },\n { name: \"amount\", description: \"Number of results to return\", type: \"number\", required: false },\n ],\n execute: (client, args) => {\n const { companyName, ...params } = args;\n return client.companyToUrl(String(companyName), Object.keys(params).length > 0 ? params as any : undefined);\n },\n },\n {\n name: \"domainLive\",\n description: \"Live technology lookup for a domain\",\n args: [\n { name: \"lookup\", description: \"Domain to look up\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.domainLive(String(args.lookup)),\n },\n {\n name: \"trust\",\n description: \"Trust/verification score for a domain\",\n args: [\n { name: \"lookup\", description: \"Domain to look up\", type: \"string\", required: true },\n { name: \"words\", description: \"Comma-separated keywords to check\", type: \"string\", required: false },\n { name: \"live\", description: \"Include live analysis\", type: \"boolean\", required: false },\n ],\n execute: (client, args) => {\n const { lookup, ...params } = args;\n return client.trust(String(lookup), Object.keys(params).length > 0 ? params as any : undefined);\n },\n },\n {\n name: \"tags\",\n description: \"Get tracking/analytics tags for a domain\",\n args: [\n { name: \"lookup\", description: \"Domain to look up\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.tags(String(args.lookup)),\n },\n {\n name: \"recommendations\",\n description: \"Get technology recommendations for a domain\",\n args: [\n { name: \"lookup\", description: \"Domain to look up\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.recommendations(String(args.lookup)),\n },\n {\n name: \"redirects\",\n description: \"Get redirect chains for a domain\",\n args: [\n { name: \"lookup\", description: \"Domain to look up\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.redirects(String(args.lookup)),\n },\n {\n name: \"product\",\n description: \"Search for products across e-commerce sites\",\n args: [\n { name: \"query\", description: \"Product search query\", type: \"string\", required: true },\n ],\n execute: (client, args) => client.product(String(args.query)),\n },\n];\n"
|
|
13
|
-
],
|
|
14
|
-
"mappings": ";;;AAEO,IAAM,uBAAuB;AAAA,EAClC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;;;ACRA;AAIO,IAAM,uBAAuB,EAAE,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,KAAK,CAAC;AAGxE,IAAM,sBAAsB,EAAE,aAAa;AAAA,EAChD,gBAAgB,qBAAqB,SAAS;AAChD,CAAC;AAGM,IAAM,qBAAqB,EAAE,aAAa;AAAA,EAC/C,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9B,yBAAyB,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9C,sBAAsB,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC3C,YAAY,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjC,iBAAiB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,mBAAmB,EAAE,OAAO,EAAE,SAAS;AACzC,CAAC;AAGM,IAAM,oBAAoB,EAAE,aAAa;AAAA,EAC9C,iBAAiB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAGM,IAAM,qBAAqB,EAAE,aAAa;AAAA,EAC/C,MAAM,EAAE,OAAO,EAAE,SAAS;AAC5B,CAAC;AAGM,IAAM,2BAA2B,EAAE,aAAa;AAAA,EACrD,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,EACzB,QAAQ,EAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAGM,IAAM,oBAAoB,EAAE,aAAa;AAAA,EAC9C,OAAO,EAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,MAAM,EAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAGM,IAAM,qBAAqB,EAAE,OAAO,EAAE,IAAI,CAAC;AAC3C,IAAM,oBAAoB,EAAE,MAAM;AAAA,EACvC,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAChB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;AAC1C,CAAC;AAKM,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,QAAQ,EAAE,OAAO;AAAA,EACjB,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,QAAQ,EAAE,MACR,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,IACf,QAAQ,EAAE,OAAO;AAAA,IACjB,QAAQ,EAAE,OAAO;AAAA,IACjB,YAAY,EAAE,MACZ,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAO;AAAA,MACf,MAAM,EAAE,OAAO;AAAA,MACf,QAAQ,EAAE,OAAO;AAAA,MACjB,QAAQ,EAAE,OAAO;AAAA,MACjB,MAAM,EAAE,OAAO;AAAA,IACjB,CAAC,CACH;AAAA,EACF,CAAC,CACH;AACF,CAAC;AAGD,IAAM,mBAAmB,EAAE,OAAO;AAAA,EAChC,MAAM,EAAE,OAAO;AAAA,EACf,aAAa,EAAE,OAAO;AAAA,EACtB,MAAM,EAAE,OAAO;AAAA,EACf,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,KAAK,EAAE,OAAO;AAAA,EACd,eAAe,EAAE,OAAO;AAAA,EACxB,cAAc,EAAE,OAAO;AAAA,EACvB,WAAW,EAAE,OAAO;AAAA,EACpB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAC3C,CAAC;AAED,IAAM,aAAa,EAAE,OAAO;AAAA,EAC1B,cAAc,EAAE,MAAM,gBAAgB;AAAA,EACtC,cAAc,EAAE,OAAO;AAAA,EACvB,aAAa,EAAE,OAAO;AAAA,EACtB,QAAQ,EAAE,OAAO;AAAA,EACjB,KAAK,EAAE,OAAO;AAAA,EACd,WAAW,EAAE,OAAO;AACtB,CAAC;AAED,IAAM,aAAa,EAAE,OAAO;AAAA,EAC1B,UAAU,EAAE,OAAO;AAAA,EACnB,UAAU,EAAE,OAAO;AAAA,EACnB,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC1B,aAAa,EAAE,OAAO;AAAA,EACtB,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC9B,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC1B,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO;AAAA,EAChB,UAAU,EAAE,OAAO;AAAA,EACnB,SAAS,EAAE,OAAO;AAAA,EAClB,OAAO,EAAE,MACP,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,IACf,OAAO,EAAE,OAAO;AAAA,IAChB,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC,CACH;AAAA,EACA,OAAO,EAAE,OAAO;AAAA,EAChB,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,IAAM,mBAAmB,EAAE,OAAO;AAAA,EAChC,QAAQ,EAAE,OAAO;AAAA,EACjB,WAAW,EAAE,OAAO;AAAA,EACpB,OAAO,EAAE,OAAO;AAAA,EAChB,OAAO,EAAE,OAAO;AAAA,EAChB,SAAS,EAAE,OAAO;AAAA,EAClB,SAAS,EAAE,OAAO;AAAA,EAClB,WAAW,EAAE,OAAO;AAAA,EACpB,aAAa,EAAE,OAAO;AAAA,EACtB,WAAW,EAAE,OAAO;AAAA,EACpB,aAAa,EAAE,OAAO;AAAA,EACtB,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AACrB,CAAC;AAEM,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,SAAS,EAAE,MACT,EAAE,OAAO;AAAA,IACP,QAAQ,EAAE,OAAO;AAAA,MACf,cAAc,EAAE,MACd,EAAE,OAAO;AAAA,QACP,GAAG,EAAE,OAAO;AAAA,QACZ,GAAG,EAAE,OAAO;AAAA,MACd,CAAC,CACH;AAAA,MACA,MAAM,EAAE,OAAO;AAAA,MACf,OAAO,EAAE,OAAO;AAAA,MAChB,OAAO,EAAE,MAAM,UAAU;AAAA,IAC3B,CAAC;AAAA,IACD,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,cAAc,EAAE,OAAO;AAAA,IACvB,aAAa,EAAE,OAAO;AAAA,IACtB,QAAQ,EAAE,OAAO;AAAA,IACjB,cAAc,EAAE,OAAO;AAAA,EACzB,CAAC,CACH;AAAA,EACA,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAC5B,CAAC;AAGM,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,MACT,EAAE,OAAO;AAAA,IACP,GAAG,EAAE,OAAO;AAAA,IACZ,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,IAClC,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,KAAK,EAAE,OAAO,EAAE,SAAS;AAAA,IACzB,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,IAAI,EAAE,OAAO,EAAE,SAAS;AAAA,IACxB,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,GAAG,EAAE,OAAO,EAAE,SAAS;AAAA,IACvB,SAAS,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,CAAC,CACH;AACF,CAAC;AAGM,IAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,eAAe,EAAE,MACf,EAAE,OAAO;AAAA,IACP,QAAQ,EAAE,OAAO;AAAA,IACjB,aAAa,EAAE,MACb,EAAE,OAAO;AAAA,MACP,OAAO,EAAE,OAAO;AAAA,MAChB,MAAM,EAAE,OAAO;AAAA,MACf,OAAO,EAAE,OAAO;AAAA,MAChB,MAAM,EAAE,OAAO;AAAA,MACf,SAAS,EAAE,MACT,EAAE,OAAO;AAAA,QACP,QAAQ,EAAE,OAAO;AAAA,QACjB,OAAO,EAAE,OAAO;AAAA,QAChB,MAAM,EAAE,OAAO;AAAA,QACf,SAAS,EAAE,QAAQ;AAAA,MACrB,CAAC,CACH;AAAA,IACF,CAAC,CACH;AAAA,EACF,CAAC,CACH;AAAA,EACA,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC1B,SAAS,EAAE,OAAO;AAAA,EAClB,cAAc,EAAE,OAAO;AAAA,EACvB,WAAW,EAAE,OAAO;AAAA,EACpB,cAAc,EAAE,QAAQ;AAC1B,CAAC;AAGM,IAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,UAAU,EAAE,MACV,EAAE,OAAO;AAAA,IACP,QAAQ,EAAE,OAAO;AAAA,IACjB,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,EAC9B,CAAC,CACH;AACF,CAAC;AAGM,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,MAAM,EAAE,OAAO;AAAA,IACb,MAAM,EAAE,OAAO;AAAA,IACf,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC9B,KAAK,EAAE,OAAO;AAAA,IACd,YAAY,EAAE,OAAO;AAAA,IACrB,MAAM,EAAE,OAAO;AAAA,IACf,aAAa,EAAE,OAAO;AAAA,IACtB,MAAM,EAAE,OAAO;AAAA,IACf,aAAa,EAAE,OAAO;AAAA,IACtB,UAAU,EAAE,OAAO;AAAA,MACjB,OAAO,EAAE,OAAO;AAAA,MAChB,WAAW,EAAE,OAAO;AAAA,MACpB,OAAO,EAAE,OAAO;AAAA,MAChB,MAAM,EAAE,OAAO;AAAA,MACf,SAAS,EAAE,OAAO;AAAA,IACpB,CAAC;AAAA,EACH,CAAC;AACH,CAAC;AAGM,IAAM,6BAA6B,EAAE,MAC1C,EAAE,OAAO;AAAA,EACP,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,EAAE,OAAO;AAAA,EACtB,OAAO,EAAE,OAAO;AAAA,EAChB,UAAU,EAAE,OAAO;AAAA,EACnB,eAAe,EAAE,OAAO;AAAA,EACxB,QAAQ,EAAE,QAAQ;AAAA,EAClB,SAAS,EAAE,OAAO;AAAA,EAClB,OAAO,EAAE,OAAO;AAAA,EAChB,UAAU,EAAE,OAAO;AAAA,EACnB,MAAM,EAAE,OAAO;AAAA,EACf,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;AAC7B,CAAC,CACH;AAGO,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AAAA,IACjB,gBAAgB,EAAE,OAAO;AAAA,IACzB,cAAc,EAAE,OAAO;AAAA,IACvB,cAAc,EAAE,OAAO;AAAA,IACvB,WAAW,EAAE,QAAQ;AAAA,IACrB,gBAAgB,EAAE,QAAQ;AAAA,IAC1B,gBAAgB,EAAE,QAAQ;AAAA,IAC1B,WAAW,EAAE,QAAQ;AAAA,IACrB,QAAQ,EAAE,QAAQ;AAAA,IAClB,OAAO,EAAE,OAAO;AAAA,IAChB,aAAa,EAAE,QAAQ;AAAA,IACvB,WAAW,EAAE,QAAQ;AAAA,EACvB,CAAC;AAAA,EACD,YAAY,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,SAAS;AAAA,EAChD,QAAQ,EAAE,OAAO;AACnB,CAAC;AAGM,IAAM,qBAAqB,EAAE,MAClC,EAAE,OAAO;AAAA,EACP,OAAO,EAAE,OAAO;AAAA,EAChB,SAAS,EAAE,MACT,EAAE,OAAO;AAAA,IACP,QAAQ,EAAE,OAAO;AAAA,IACjB,OAAO,EAAE,OAAO;AAAA,IAChB,MAAM,EAAE,OAAO;AAAA,EACjB,CAAC,CACH;AACF,CAAC,CACH;AAGO,IAAM,gCAAgC,EAAE,MAC7C,EAAE,OAAO;AAAA,EACP,QAAQ,EAAE,OAAO;AAAA,EACjB,UAAU,EAAE,OAAO;AAAA,EACnB,iBAAiB,EAAE,MACjB,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,OAAO;AAAA,IACf,MAAM,EAAE,OAAO;AAAA,IACf,KAAK,EAAE,OAAO;AAAA,IACd,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,IAC9B,OAAO,EAAE,OAAO;AAAA,IAChB,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC,CACH;AACF,CAAC,CACH;AAGO,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,QAAQ,EAAE,OAAO;AAAA,EACjB,SAAS,EAAE,MACT,EAAE,OAAO;AAAA,IACP,QAAQ,EAAE,OAAO;AAAA,IACjB,eAAe,EAAE,OAAO;AAAA,IACxB,cAAc,EAAE,OAAO;AAAA,EACzB,CAAC,CACH;AAAA,EACA,UAAU,EAAE,MACV,EAAE,OAAO;AAAA,IACP,QAAQ,EAAE,OAAO;AAAA,IACjB,eAAe,EAAE,OAAO;AAAA,IACxB,cAAc,EAAE,OAAO;AAAA,EACzB,CAAC,CACH;AACF,CAAC;AAGM,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,OAAO,EAAE,OAAO;AAAA,EAChB,SAAS,EAAE,QAAQ;AAAA,EACnB,MAAM,EAAE,OAAO;AAAA,EACf,OAAO,EAAE,OAAO;AAAA,EAChB,SAAS,EAAE,OAAO;AAAA,EAClB,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,OAAO;AAAA,EACf,WAAW,EAAE,OAAO;AAAA,EACpB,iBAAiB,EAAE,OAAO;AAAA,EAC1B,WAAW,EAAE,OAAO;AAAA,EACpB,OAAO,EAAE,MACP,EAAE,OAAO;AAAA,IACP,QAAQ,EAAE,OAAO;AAAA,IACjB,UAAU,EAAE,MACV,EAAE,OAAO;AAAA,MACP,OAAO,EAAE,OAAO;AAAA,MAChB,KAAK,EAAE,OAAO;AAAA,MACd,SAAS,EAAE,OAAO;AAAA,MAClB,cAAc,EAAE,OAAO;AAAA,MACvB,OAAO,EAAE,OAAO;AAAA,IAClB,CAAC,CACH;AAAA,IACA,MAAM,EAAE,OAAO;AAAA,IACf,OAAO,EAAE,OAAO;AAAA,EAClB,CAAC,CACH;AACF,CAAC;;;AC9WM,IAAM,gBAAgB,CAAC,WAC5B,OAAO,QAAQ,MAAM,EAClB,OAAO,CAAC,UAA8C,MAAM,OAAO,SAAS,EAC5E,IAAI,EAAE,GAAG,OAAO,GAAG,KAAK,mBAAmB,CAAC,EAAE,QAAQ,SAAS,GAAG,GAAG,EACrE,KAAK,GAAG;AAEb,IAAM,cAAc,CAAC,UACnB,QAAQ,QAAQ;AAEX,IAAM,gBAAgB,CAC3B,QACA,YAEA,OAAO,YACL,OAAO,QAAQ,OAAO,EAAE,IAAI,EAAE,OAAO,YAAY;AAAA,EAC/C;AAAA,EACA,YAAY,SAAS,MAAM;AAC7B,CAAC,CACH;AAEK,IAAM,aAAa,CAAC,UACzB,QACI,MACG,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,KAAK,GAAG,IACX;AAEC,IAAM,WAAW,CACtB,QACA,QACA,MACA,QACA,YAAoB,UACT;AAAA,EACX,MAAM,OAAO,WAAW,2BAA2B,YAAY,cAAc;AAAA,EAC7E,MAAM,KAAK,cAAc,MAAM;AAAA,EAC/B,OAAO,KAAK,GAAG,QAAQ,OAAO;AAAA;AAGzB,IAAM,iBAAiB,CAC5B,OACE,QAAQ,UAA+B,CAAC,MACjC;AAAA,EACT,IAAI,OAAO;AAAA,IACT,kBAAkB,MAAM,GAAG;AAAA,EAC7B,EAAO;AAAA,IACL,mBAAmB,MAAM,GAAG;AAAA;AAAA,EAE9B,IAAI,MAAM,QAAQ,GAAG,GAAG;AAAA,IACtB,IAAI,CAAC;AAAA,MAAO,MAAM,IAAI,MAAM,4CAA4C;AAAA,IACxE,IAAI,IAAI,SAAS;AAAA,MAAI,MAAM,IAAI,MAAM,qCAAqC;AAAA,EAC5E;AAAA;;;ACnDF,IAAM,eAA0C;AAAA,EAC9C,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AAAA,EACrB,qBAAqB;AACvB;AAEO,IAAM,UAAU,OACrB,KACA,QACA,WACwB;AAAA,EACxB,MAAM,MAAM,MAAM,MAAM,GAAG;AAAA,EAC3B,IAAI,CAAC,IAAI,IAAI;AAAA,IACX,MAAM,OAAO,MAAM,IAAI,KAAK;AAAA,IAC5B,MAAM,IAAI,MAAM,uBAAuB,IAAI,WAAW,MAAM;AAAA,EAC9D;AAAA,EACA,IAAI,aAAa,SAAS,MAAM,GAAG;AAAA,IACjC,OAAO,IAAI,KAAK;AAAA,EAClB;AAAA,EACA,MAAM,OAAgB,MAAM,IAAI,KAAK;AAAA,EACrC,OAAO,OAAO,MAAM,IAAI;AAAA;AAGnB,IAAM,cAAc,OACzB,KACA,QACA,WACwB;AAAA,EACxB,MAAM,MAAM,MAAM,MAAM,GAAG;AAAA,EAC3B,IAAI,CAAC,IAAI,IAAI;AAAA,IACX,MAAM,OAAO,MAAM,IAAI,KAAK;AAAA,IAC5B,MAAM,IAAI,MAAM,uBAAuB,IAAI,WAAW,MAAM;AAAA,EAC9D;AAAA,EACA,IAAI,aAAa,SAAS,MAAM,GAAG;AAAA,IACjC,OAAO,IAAI,KAAK;AAAA,EAClB;AAAA,EACA,MAAM,MAAM,MAAM,IAAI,KAAK;AAAA,EAC3B,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,GAAG;AAAA,IACrB,MAAM;AAAA,IACN,QAAQ,KACN,uEACF;AAAA,IACA,OAAO;AAAA;AAAA,EAET,OAAO,OAAO,MAAM,IAAI;AAAA;;;ACd1B,IAAM,kBAAkC;AAAA,EACtC,SAAS;AAAA,EACT,yBAAyB;AAAA,EACzB,sBAAsB;AAAA,EACtB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,OAAO;AACT;AAEO,SAAS,YAAY,CAC1B,QACA,eAA8B,CAAC,GACd;AAAA,EACjB,IAAI,CAAC,QAAQ;AAAA,IACX,MAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAAA,EAEA,MAAM,SAAS,oBAAoB,MAAM,YAAY;AAAA,EACrD,MAAM,SAAyB,OAAO,kBAAkB;AAAA,EAExD,IAAI,WAAW,qBAAqB,KAAK;AAAA,IACvC,QAAQ,KACN,6GACF;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,CAAC,MAAc,WACzB,SAAS,QAAQ,QAAQ,MAAM,MAAM;AAAA,EACvC,MAAM,MAAM,CAAI,OAAe,WAC7B,QAAQ,OAAO,QAAQ,MAAM;AAAA,EAC/B,MAAM,UAAU,CAAI,OAAe,WACjC,YAAY,OAAO,QAAQ,MAAM;AAAA,EAEnC,OAAO;AAAA,IACL,MAAM,OAAO,WAAmB;AAAA,MAC9B,eAAe,MAAM;AAAA,MACrB,OAAO,IAAI,IAAI,SAAS,EAAE,QAAQ,OAAO,CAAC,GAAG,kBAAkB;AAAA;AAAA,IAGjE,QAAQ,OAAO,QAA2B,WAA0B;AAAA,MAClE,eAAe,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,MACtC,IAAI;AAAA,QAAQ,mBAAmB,MAAM,MAAM;AAAA,MAC3C,OAAO,IACL,IAAI,OAAO;AAAA,QACT,QAAQ,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AAAA,WAChD,cAAc,QAAQ,eAAe;AAAA,QACxC,SAAS,QAAQ;AAAA,QACjB,SAAS,QAAQ;AAAA,MACnB,CAAC,GACD,oBACF;AAAA;AAAA,IAGF,OAAO,OAAO,YAAoB,WAAyB;AAAA,MACzD,IAAI;AAAA,QAAQ,kBAAkB,MAAM,MAAM;AAAA,MAC1C,OAAO,QACL,IAAI,WAAW;AAAA,QACb,MAAM;AAAA,QACN,MAAM,QAAQ,kBAAkB,QAAQ;AAAA,QACxC,QAAQ,QAAQ;AAAA,QAChB,OAAO,QAAQ;AAAA,MACjB,CAAC,GACD,mBACF;AAAA;AAAA,IAGF,eAAe,OAAO,WAA8B;AAAA,MAClD,eAAe,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,MACtC,OAAO,IACL,IAAI,OAAO;AAAA,QACT,QAAQ,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AAAA,MACrD,CAAC,GACD,2BACF;AAAA;AAAA,IAGF,UAAU,OAAO,WAA8B;AAAA,MAC7C,eAAe,QAAQ,EAAE,OAAO,KAAK,CAAC;AAAA,MACtC,OAAO,IACL,IAAI,OAAO;AAAA,QACT,QAAQ,MAAM,QAAQ,MAAM,IAAI,OAAO,KAAK,GAAG,IAAI;AAAA,MACrD,CAAC,GACD,sBACF;AAAA;AAAA,IAGF,QAAQ,OAAO,YAAoB,WAA0B;AAAA,MAC3D,IAAI;AAAA,QAAQ,mBAAmB,MAAM,MAAM;AAAA,MAC3C,OAAO,QACL,IAAI,aAAa;AAAA,QACf,MAAM;AAAA,QACN,MAAM,QAAQ;AAAA,MAChB,CAAC,GACD,oBACF;AAAA;AAAA,IAGF,cAAc,OAAO,aAAqB,WAAgC;AAAA,MACxE,IAAI;AAAA,QAAQ,yBAAyB,MAAM,MAAM;AAAA,MACjD,OAAO,IACL,IAAI,QAAQ;AAAA,QACV,SAAS;AAAA,QACT,KAAK,QAAQ;AAAA,QACb,QAAQ,QAAQ;AAAA,MAClB,CAAC,GACD,0BACF;AAAA;AAAA,IAGF,YAAY,OAAO,WAAmB;AAAA,MACpC,eAAe,MAAM;AAAA,MACrB,OAAO,IAAI,IAAI,SAAS,EAAE,QAAQ,OAAO,CAAC,GAAG,oBAAoB;AAAA;AAAA,IAGnE,OAAO,OAAO,QAAgB,WAAyB;AAAA,MACrD,eAAe,MAAM;AAAA,MACrB,IAAI;AAAA,QAAQ,kBAAkB,MAAM,MAAM;AAAA,MAC1C,OAAO,IACL,IAAI,WAAW;AAAA,QACb,QAAQ;AAAA,QACR,OAAO,WAAW,QAAQ,KAAK;AAAA,QAC/B,MAAM,QAAQ,OAAO,QAAQ;AAAA,MAC/B,CAAC,GACD,mBACF;AAAA;AAAA,IAGF,MAAM,OAAO,WAAmB;AAAA,MAC9B,eAAe,MAAM;AAAA,MACrB,OAAO,IAAI,IAAI,QAAQ,EAAE,QAAQ,OAAO,CAAC,GAAG,kBAAkB;AAAA;AAAA,IAGhE,iBAAiB,OAAO,WAAmB;AAAA,MACzC,eAAe,MAAM;AAAA,MACrB,OAAO,IAAI,IAAI,QAAQ,EAAE,QAAQ,OAAO,CAAC,GAAG,6BAA6B;AAAA;AAAA,IAG3E,WAAW,OAAO,WAAmB;AAAA,MACnC,eAAe,MAAM;AAAA,MACrB,OAAO,IAAI,IAAI,aAAa,EAAE,QAAQ,OAAO,CAAC,GAAG,uBAAuB;AAAA;AAAA,IAG1E,SAAS,OAAO,UAAkB;AAAA,MAChC,OAAO,IAAI,IAAI,aAAa,EAAE,OAAO,MAAM,CAAC,GAAG,qBAAqB;AAAA;AAAA,EAExE;AAAA;;;ACtLF,cAAS;AAEF,SAAS,WAAW,CAAC,KAAsB;AAAA,EAChD,IAAI,eAAe,GAAE,UAAU;AAAA,IAC7B,MAAM,SAAS,IAAI,OAAO,IAAI,CAAC,MAAM;AAAA,MACnC,MAAM,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,KAAK,GAAG,IAAI;AAAA,MACpD,OAAO,KAAK,SAAS,EAAE;AAAA,KACxB;AAAA,IACD,OAAO;AAAA,EAAmD,OAAO,KAAK;AAAA,CAAI;AAAA,EAC5E;AAAA,EACA,IAAI,eAAe,OAAO;AAAA,IACxB,OAAO,IAAI;AAAA,EACb;AAAA,EACA,OAAO,OAAO,GAAG;AAAA;;;ACZnB;AACA;AACA;AACA,cAAS;;;ACYF,SAAS,WAAW,CAAC,OAAmC;AAAA,EAC7D,MAAM,MAAM,OAAO,KAAK;AAAA,EACxB,OAAO,IAAI,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI;AAAA;AAG5D,IAAM,WAAgC;AAAA,EAC3C;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,qBAAqB,MAAM,UAAU,UAAU,KAAK;AAAA,IACrF;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,KAAK,OAAO,KAAK,MAAM,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,uDAAuD,MAAM,UAAU,UAAU,KAAK;AAAA,MACrH,EAAE,MAAM,WAAW,aAAa,mCAAmC,MAAM,WAAW,UAAU,MAAM;AAAA,MACpG,EAAE,MAAM,2BAA2B,aAAa,mCAAmC,MAAM,WAAW,UAAU,MAAM;AAAA,MACpH,EAAE,MAAM,wBAAwB,aAAa,iCAAiC,MAAM,WAAW,UAAU,MAAM;AAAA,MAC/G,EAAE,MAAM,cAAc,aAAa,oBAAoB,MAAM,WAAW,UAAU,MAAM;AAAA,MACxF,EAAE,MAAM,mBAAmB,aAAa,0BAA0B,MAAM,WAAW,UAAU,MAAM;AAAA,MACnG,EAAE,MAAM,SAAS,aAAa,+CAA+C,MAAM,WAAW,UAAU,MAAM;AAAA,MAC9G,EAAE,MAAM,sBAAsB,aAAa,uCAAuC,MAAM,UAAU,UAAU,MAAM;AAAA,MAClH,EAAE,MAAM,qBAAqB,aAAa,sCAAsC,MAAM,UAAU,UAAU,MAAM;AAAA,IAClH;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS;AAAA,MACzB,MAAM,SAAS,YAAY,KAAK,MAAM;AAAA,MACtC,QAAQ,QAAQ,MAAM,WAAW;AAAA,MACjC,OAAO,OAAO,OAAO,QAAQ,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAgB,SAAS;AAAA;AAAA,EAE3F;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,cAAc,aAAa,iCAAiC,MAAM,UAAU,UAAU,KAAK;AAAA,MACnG,EAAE,MAAM,mBAAmB,aAAa,+BAA+B,MAAM,WAAW,UAAU,MAAM;AAAA,MACxG,EAAE,MAAM,UAAU,aAAa,qBAAqB,MAAM,UAAU,UAAU,MAAM;AAAA,MACpF,EAAE,MAAM,SAAS,aAAa,uCAAuC,MAAM,UAAU,UAAU,MAAM;AAAA,IACvG;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS;AAAA,MACzB,QAAQ,eAAe,WAAW;AAAA,MAClC,OAAO,OAAO,MAAM,OAAO,UAAU,GAAG,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAgB,SAAS;AAAA;AAAA,EAEtG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,uDAAuD,MAAM,UAAU,UAAU,KAAK;AAAA,IACvH;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,cAAc,YAAY,KAAK,MAAM,CAAC;AAAA,EAC1E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,uDAAuD,MAAM,UAAU,UAAU,KAAK;AAAA,IACvH;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,SAAS,YAAY,KAAK,MAAM,CAAC;AAAA,EACrE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,cAAc,aAAa,mBAAmB,MAAM,UAAU,UAAU,KAAK;AAAA,MACrF,EAAE,MAAM,QAAQ,aAAa,eAAe,MAAM,UAAU,UAAU,MAAM;AAAA,IAC9E;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS;AAAA,MACzB,QAAQ,eAAe,WAAW;AAAA,MAClC,OAAO,OAAO,OAAO,OAAO,UAAU,GAAG,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAgB,SAAS;AAAA;AAAA,EAEvG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,eAAe,aAAa,0BAA0B,MAAM,UAAU,UAAU,KAAK;AAAA,MAC7F,EAAE,MAAM,OAAO,aAAa,8BAA8B,MAAM,UAAU,UAAU,MAAM;AAAA,MAC1F,EAAE,MAAM,UAAU,aAAa,+BAA+B,MAAM,UAAU,UAAU,MAAM;AAAA,IAChG;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS;AAAA,MACzB,QAAQ,gBAAgB,WAAW;AAAA,MACnC,OAAO,OAAO,aAAa,OAAO,WAAW,GAAG,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAgB,SAAS;AAAA;AAAA,EAE9G;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,qBAAqB,MAAM,UAAU,UAAU,KAAK;AAAA,IACrF;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,WAAW,OAAO,KAAK,MAAM,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,qBAAqB,MAAM,UAAU,UAAU,KAAK;AAAA,MACnF,EAAE,MAAM,SAAS,aAAa,qCAAqC,MAAM,UAAU,UAAU,MAAM;AAAA,MACnG,EAAE,MAAM,QAAQ,aAAa,yBAAyB,MAAM,WAAW,UAAU,MAAM;AAAA,IACzF;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS;AAAA,MACzB,QAAQ,WAAW,WAAW;AAAA,MAC9B,OAAO,OAAO,MAAM,OAAO,MAAM,GAAG,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAgB,SAAS;AAAA;AAAA,EAElG;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,qBAAqB,MAAM,UAAU,UAAU,KAAK;AAAA,IACrF;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,KAAK,OAAO,KAAK,MAAM,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,qBAAqB,MAAM,UAAU,UAAU,KAAK;AAAA,IACrF;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,gBAAgB,OAAO,KAAK,MAAM,CAAC;AAAA,EACvE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,UAAU,aAAa,qBAAqB,MAAM,UAAU,UAAU,KAAK;AAAA,IACrF;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,UAAU,OAAO,KAAK,MAAM,CAAC;AAAA,EACjE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,MAAM,SAAS,aAAa,wBAAwB,MAAM,UAAU,UAAU,KAAK;AAAA,IACvF;AAAA,IACA,SAAS,CAAC,QAAQ,SAAS,OAAO,QAAQ,OAAO,KAAK,KAAK,CAAC;AAAA,EAC9D;AACF;;;ADrJA,IAAM,WAAU,cAAc,YAAY,GAAG;AAC7C,MAAQ,YAAY,SAAQ,iBAAiB;AAG7C,IAAM,eAAe,QAAQ,KAAK,QAAQ,WAAW;AACrD,IAAM,UACH,iBAAiB,KAAK,QAAQ,KAAK,eAAe,KAAK,cACxD,QAAQ,IAAI;AACd,IAAI,CAAC,QAAQ;AAAA,EACX,QAAQ,MAAM,sEAAsE;AAAA,EACpF,QAAQ,KAAK,CAAC;AAChB;AAEA,IAAM,SAAS,aAAa,MAAM;AAElC,IAAM,SAAS,IAAI,UAAU;AAAA,EAC3B,MAAM;AAAA,EACN;AACF,CAAC;AAED,WAAW,OAAO,UAAU;AAAA,EAE1B,MAAM,QAAmC,CAAC;AAAA,EAC1C,WAAW,OAAO,IAAI,MAAM;AAAA,IAC1B,IAAI;AAAA,IACJ,QAAQ,IAAI;AAAA,WACL;AAAA,QACH,SAAS,GAAE,OAAO,EAAE,SAAS,IAAI,WAAW;AAAA,QAC5C;AAAA,WACG;AAAA,QACH,SAAS,GAAE,QAAQ,EAAE,SAAS,IAAI,WAAW;AAAA,QAC7C;AAAA;AAAA,QAEA,SAAS,GAAE,OAAO,EAAE,SAAS,IAAI,WAAW;AAAA,QAC5C;AAAA;AAAA,IAEJ,MAAM,IAAI,QAAQ,IAAI,WAAW,SAAS,OAAO,SAAS;AAAA,EAC5D;AAAA,EAEA,OAAO,KACL,aAAa,IAAI,QACjB,IAAI,aACJ,OACA,OAAO,WAAW;AAAA,IAChB,IAAI;AAAA,MACF,MAAM,SAAS,MAAM,IAAI,QAAQ,QAAQ,MAAM;AAAA,MAC/C,OAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAiB,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,CAAC;AAAA,MAC5E;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,OAAO;AAAA,QACL,SAAS,CAAC,EAAE,MAAM,QAAiB,MAAM,YAAY,GAAG,EAAE,CAAC;AAAA,QAC3D,SAAS;AAAA,MACX;AAAA;AAAA,GAGN;AACF;AAEA,IAAM,YAAY,IAAI;AACtB,OAAO,QAAQ,SAAS;",
|
|
15
|
-
"debugId": "B601A9B5AC386F4D64756E2164756E21",
|
|
16
|
-
"names": []
|
|
17
|
-
}
|
package/dist/params.js
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.validateLookup = exports.buildURL = exports.cleanWords = exports.booleanParams = exports.toQueryString = void 0;
|
|
4
|
-
const toQueryString = (params) => Object.entries(params)
|
|
5
|
-
.filter(([, v]) => v !== undefined)
|
|
6
|
-
.map(([k, v]) => `${k}=${encodeURIComponent(v).replace(/%2C/gi, ",")}`)
|
|
7
|
-
.join("&");
|
|
8
|
-
exports.toQueryString = toQueryString;
|
|
9
|
-
const booleanFlag = (value) => value ? "yes" : undefined;
|
|
10
|
-
const booleanParams = (params, mapping) => Object.fromEntries(Object.entries(mapping).map(([jsKey, apiKey]) => [
|
|
11
|
-
apiKey,
|
|
12
|
-
booleanFlag(params?.[jsKey]),
|
|
13
|
-
]));
|
|
14
|
-
exports.booleanParams = booleanParams;
|
|
15
|
-
const cleanWords = (words) => words
|
|
16
|
-
? words
|
|
17
|
-
.split(",")
|
|
18
|
-
.map((w) => w.trim())
|
|
19
|
-
.join(",")
|
|
20
|
-
: undefined;
|
|
21
|
-
exports.cleanWords = cleanWords;
|
|
22
|
-
const buildURL = (apiKey, format, path, params, subdomain = "api") => {
|
|
23
|
-
const base = `https://${subdomain}.builtwith.com/${path}/api.${format}?KEY=${apiKey}`;
|
|
24
|
-
const qs = (0, exports.toQueryString)(params);
|
|
25
|
-
return qs ? `${base}&${qs}` : base;
|
|
26
|
-
};
|
|
27
|
-
exports.buildURL = buildURL;
|
|
28
|
-
const validateLookup = (url, { multi = false } = {}) => {
|
|
29
|
-
if (!Array.isArray(url))
|
|
30
|
-
return;
|
|
31
|
-
if (!multi)
|
|
32
|
-
throw new Error("API does not allow for multi-domain LOOKUP");
|
|
33
|
-
if (url.length > 16)
|
|
34
|
-
throw new Error("Domain LOOKUP size too big (16 max)");
|
|
35
|
-
};
|
|
36
|
-
exports.validateLookup = validateLookup;
|
|
37
|
-
//# sourceMappingURL=params.js.map
|
package/dist/params.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"params.js","sourceRoot":"","sources":["../src/params.ts"],"names":[],"mappings":";;;AAEO,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAU,EAAE,CAC3D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KACnB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;KAClC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;KACvE,IAAI,CAAC,GAAG,CAAC,CAAC;AAJF,QAAA,aAAa,iBAIX;AAEf,MAAM,WAAW,GAAG,CAAC,KAAc,EAAqB,EAAE,CACxD,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAErB,MAAM,aAAa,GAAG,CAC3B,MAAiC,EACjC,OAAuB,EACV,EAAE,CACf,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;IAC/C,MAAM;IACN,WAAW,CAAE,MAAqD,EAAE,CAAC,KAAK,CAAC,CAAC;CAC7E,CAAC,CACH,CAAC;AATS,QAAA,aAAa,iBAStB;AAEG,MAAM,UAAU,GAAG,CAAC,KAAyB,EAAsB,EAAE,CAC1E,KAAK;IACH,CAAC,CAAC,KAAK;SACF,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,IAAI,CAAC,GAAG,CAAC;IACd,CAAC,CAAC,SAAS,CAAC;AANH,QAAA,UAAU,cAMP;AAET,MAAM,QAAQ,GAAG,CACtB,MAAc,EACd,MAAc,EACd,IAAY,EACZ,MAAmB,EACnB,YAAoB,KAAK,EACjB,EAAE;IACV,MAAM,IAAI,GAAG,WAAW,SAAS,kBAAkB,IAAI,QAAQ,MAAM,QAAQ,MAAM,EAAE,CAAC;IACtF,MAAM,EAAE,GAAG,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC,CAAC;AAVW,QAAA,QAAQ,YAUnB;AAEK,MAAM,cAAc,GAAG,CAC5B,GAAsB,EACtB,EAAE,KAAK,GAAG,KAAK,KAA0B,EAAE,EACrC,EAAE;IACR,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO;IAChC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC1E,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAPW,QAAA,cAAc,kBAOzB"}
|
package/dist/request.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.requestSafe = exports.request = void 0;
|
|
4
|
-
const config_1 = require("./config");
|
|
5
|
-
const TEXT_FORMATS = [
|
|
6
|
-
config_1.VALID_RESPONSE_TYPES.TXT,
|
|
7
|
-
config_1.VALID_RESPONSE_TYPES.XML,
|
|
8
|
-
config_1.VALID_RESPONSE_TYPES.CSV,
|
|
9
|
-
config_1.VALID_RESPONSE_TYPES.TSV,
|
|
10
|
-
];
|
|
11
|
-
const request = async (url, format) => {
|
|
12
|
-
const res = await fetch(url);
|
|
13
|
-
if (!res.ok) {
|
|
14
|
-
const body = await res.text();
|
|
15
|
-
throw new Error(`BuiltWith API error ${res.status}: ${body}`);
|
|
16
|
-
}
|
|
17
|
-
return TEXT_FORMATS.includes(format) ? res.text() : res.json();
|
|
18
|
-
};
|
|
19
|
-
exports.request = request;
|
|
20
|
-
const requestSafe = async (url, format) => {
|
|
21
|
-
const res = await fetch(url);
|
|
22
|
-
if (!res.ok) {
|
|
23
|
-
const body = await res.text();
|
|
24
|
-
throw new Error(`BuiltWith API error ${res.status}: ${body}`);
|
|
25
|
-
}
|
|
26
|
-
if (TEXT_FORMATS.includes(format)) {
|
|
27
|
-
return res.text();
|
|
28
|
-
}
|
|
29
|
-
const parsed = await res.text();
|
|
30
|
-
try {
|
|
31
|
-
return JSON.parse(parsed);
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
console.warn("BuiltWith sent an invalid JSON payload. Falling back to text parsing.");
|
|
35
|
-
return parsed;
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
exports.requestSafe = requestSafe;
|
|
39
|
-
//# sourceMappingURL=request.js.map
|
package/dist/request.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":";;;AAAA,qCAAgD;AAGhD,MAAM,YAAY,GAA8B;IAC9C,6BAAoB,CAAC,GAAG;IACxB,6BAAoB,CAAC,GAAG;IACxB,6BAAoB,CAAC,GAAG;IACxB,6BAAoB,CAAC,GAAG;CACzB,CAAC;AAEK,MAAM,OAAO,GAAG,KAAK,EAC1B,GAAW,EACX,MAAsB,EACJ,EAAE;IACpB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACjE,CAAC,CAAC;AAVW,QAAA,OAAO,WAUlB;AAEK,MAAM,WAAW,GAAG,KAAK,EAC9B,GAAW,EACX,MAAsB,EACJ,EAAE;IACpB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CACV,uEAAuE,CACxE,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AArBW,QAAA,WAAW,eAqBtB"}
|
package/dist/types.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
export type ResponseFormat = "xml" | "json" | "txt" | "csv" | "tsv";
|
|
2
|
-
export interface ClientOptions {
|
|
3
|
-
responseFormat?: ResponseFormat;
|
|
4
|
-
}
|
|
5
|
-
export interface DomainParams {
|
|
6
|
-
hideAll?: boolean;
|
|
7
|
-
hideDescriptionAndLinks?: boolean;
|
|
8
|
-
onlyLiveTechnologies?: boolean;
|
|
9
|
-
noMetaData?: boolean;
|
|
10
|
-
noAttributeData?: boolean;
|
|
11
|
-
noPII?: boolean;
|
|
12
|
-
firstDetectedRange?: string;
|
|
13
|
-
lastDetectedRange?: string;
|
|
14
|
-
}
|
|
15
|
-
export interface ListsParams {
|
|
16
|
-
includeMetaData?: boolean;
|
|
17
|
-
offset?: string;
|
|
18
|
-
since?: string;
|
|
19
|
-
}
|
|
20
|
-
export interface TrendsParams {
|
|
21
|
-
date?: string;
|
|
22
|
-
}
|
|
23
|
-
export interface CompanyToUrlParams {
|
|
24
|
-
tld?: string;
|
|
25
|
-
amount?: number;
|
|
26
|
-
}
|
|
27
|
-
export interface TrustParams {
|
|
28
|
-
words?: string;
|
|
29
|
-
live?: boolean;
|
|
30
|
-
}
|
|
31
|
-
export interface BuiltWithClient {
|
|
32
|
-
free(lookup: string): Promise<unknown>;
|
|
33
|
-
domain(lookup: string | string[], params?: DomainParams): Promise<unknown>;
|
|
34
|
-
lists(technology: string, params?: ListsParams): Promise<unknown>;
|
|
35
|
-
relationships(lookup: string | string[]): Promise<unknown>;
|
|
36
|
-
keywords(lookup: string | string[]): Promise<unknown>;
|
|
37
|
-
trends(technology: string, params?: TrendsParams): Promise<unknown>;
|
|
38
|
-
companyToUrl(companyName: string, params?: CompanyToUrlParams): Promise<unknown>;
|
|
39
|
-
domainLive(lookup: string): Promise<unknown>;
|
|
40
|
-
trust(lookup: string, params?: TrustParams): Promise<unknown>;
|
|
41
|
-
tags(lookup: string): Promise<unknown>;
|
|
42
|
-
recommendations(lookup: string): Promise<unknown>;
|
|
43
|
-
redirects(lookup: string): Promise<unknown>;
|
|
44
|
-
product(query: string): Promise<unknown>;
|
|
45
|
-
}
|
|
46
|
-
export type BooleanMapping = Record<string, string>;
|
|
47
|
-
export type QueryParams = Record<string, string | number | undefined>;
|
|
48
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3E,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClE,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC"}
|
package/dist/types.js
DELETED
package/dist/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|