@zhuixin/shared 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type TargetPlatform = \"ios\" | \"windows\" | \"macos\" | \"android\" | \"linux\";\nexport type HostPlatform = \"darwin\" | \"win32\" | \"linux\";\nexport type SourceId =\n | \"app-store\"\n | \"local-file\"\n | \"direct-url\"\n | \"microsoft-store\"\n | \"winget\";\nexport type PackageFormat =\n | \"ipa\"\n | \"msix\"\n | \"appx\"\n | \"exe\"\n | \"msi\"\n | \"zip\"\n | \"dmg\"\n | \"apk\";\n\nexport interface TargetRef {\n platform: TargetPlatform;\n sourceId: SourceId;\n sourceRef: string;\n}\n\nexport interface ResolvedTarget {\n targetRef: TargetRef;\n name: string;\n publisher?: string;\n version?: string;\n bundleId?: string;\n packageId?: string;\n iconUrl?: string;\n storeUrl?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface TargetRecord extends ResolvedTarget {\n id: string;\n slug: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ArtifactRecord {\n id: string;\n targetId: string;\n platform: TargetPlatform;\n packageFormat: PackageFormat;\n architecture?: string;\n sha256: string;\n path: string;\n sizeBytes: number;\n version?: string;\n buildNumber?: string;\n signature?: Record<string, unknown>;\n inspection?: Record<string, unknown>;\n sourceUrl?: string;\n downloadedAt: string;\n isCurrent: boolean;\n}\n\nexport type FindingType =\n | \"technology\"\n | \"route\"\n | \"network_endpoint\"\n | \"module\"\n | \"asset\"\n | \"storage\"\n | \"native_procedure\"\n | \"native_string\"\n | \"risk\"\n | \"limitation\";\n\nexport type FindingConfidence =\n | \"exact\"\n | \"high\"\n | \"medium\"\n | \"low\"\n | \"unknown\";\n\nexport interface FindingRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n evidenceId: string;\n type: FindingType;\n value: string;\n group?: string;\n sourcePath?: string;\n start?: { line: number; column: number };\n end?: { line: number; column: number };\n confidence: FindingConfidence;\n metadata: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface EvidenceRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n kind: string;\n format: \"json\" | \"markdown\" | \"text\";\n path: string;\n sha256: string;\n summary: Record<string, unknown>;\n parentEvidenceId?: string;\n createdAt: string;\n}\n\nexport interface FindingSearchResult {\n items: FindingRecord[];\n total: number;\n limit: number;\n offset: number;\n}\n\nexport interface AnalysisRunRecord {\n id: string;\n targetId?: string;\n status: \"running\" | \"completed\" | \"failed\" | \"interrupted\";\n startedAt: string;\n finishedAt?: string;\n result?: Record<string, unknown>;\n error?: { code: string; message: string; details?: unknown };\n updatedAt: string;\n}\n\nexport type JobStatus =\n | \"queued\"\n | \"resolving\"\n | \"awaiting_auth\"\n | \"awaiting_license\"\n | \"acquiring\"\n | \"inspecting\"\n | \"registering\"\n | \"ready\"\n | \"analyzing\"\n | \"analyzed\"\n | \"failed\"\n | \"cancelled\"\n | \"interrupted\";\n\nexport interface JobRecord {\n id: string;\n targetId?: string;\n sourceId?: SourceId;\n capabilityId: string;\n status: JobStatus;\n progress: number;\n params: Record<string, unknown>;\n result?: Record<string, unknown>;\n errorCode?: string;\n errorMessage?: string;\n createdAt: string;\n startedAt?: string;\n finishedAt?: string;\n}\n\nexport interface JobEvent {\n jobId: string;\n level: \"info\" | \"warn\" | \"error\";\n message: string;\n payload?: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface SourceDescriptor {\n id: SourceId;\n platform: TargetPlatform;\n displayName: string;\n requiresAuth: boolean;\n status: \"ready\" | \"preview\" | \"evaluate\";\n description: string;\n}\n\nexport interface CapabilityDescriptor {\n id: string;\n label: string;\n description: string;\n targetPlatforms: TargetPlatform[];\n packageFormats?: PackageFormat[];\n hostPlatforms?: HostPlatform[];\n available: boolean;\n reason?: string;\n requiresArtifact?: boolean;\n requiresInput?: \"function\" | \"query\";\n}\n\nexport interface ResolveResult {\n resolutionId: string;\n target: ResolvedTarget;\n provider: SourceDescriptor;\n}\n\nexport interface TargetDetail {\n target: TargetRecord;\n artifacts: ArtifactRecord[];\n jobs: JobRecord[];\n}\n\nexport interface CoreError {\n code: string;\n message: string;\n details?: unknown;\n}\n\nexport interface HealthInfo {\n version: string;\n workspaceRoot: string;\n hostPlatform: HostPlatform;\n store: \"sqlite\" | \"json\";\n tools?: ToolInfo[];\n}\n\nexport interface ToolInfo {\n id: string;\n label: string;\n path: string;\n available: boolean;\n}\n\nexport interface AccountStatus {\n authenticated: boolean;\n email?: string;\n name?: string;\n keychain: \"unlocked\" | \"locked\" | \"unknown\";\n checkedAt: string;\n message?: string;\n}\n\nexport interface EntitlementRecord {\n appId?: string | number;\n bundleId?: string;\n name: string;\n version?: string;\n platform?: string;\n}\n\nexport interface AccountEntitlements {\n items: EntitlementRecord[];\n checkedAt: string;\n truncated: boolean;\n error?: string;\n}\n\nexport interface EntitlementCheck {\n status: \"owned\" | \"not_owned\" | \"unknown\";\n checkedAt: string;\n message?: string;\n entitlement?: EntitlementRecord;\n}\n\nexport interface CoreRequest<T = unknown> {\n id: string;\n channel: string;\n payload: T;\n}\n\nexport type CoreResponse<T = unknown> =\n | { id: string; ok: true; data: T }\n | { id: string; ok: false; error: CoreError };\n\nexport type CoreEvent =\n | { type: \"job.updated\"; payload: JobRecord }\n | { type: \"job.log\"; payload: JobEvent }\n | { type: \"target.updated\"; payload: TargetRecord }\n | { type: \"terminal.data\"; payload: { sessionId: string; data: string } }\n | {\n type: \"terminal.exit\";\n payload: { sessionId: string; code: number | null; signal?: string | null };\n };\n\nexport const CHANNELS = {\n health: \"health\",\n sourcesList: \"sources:list\",\n targetsResolve: \"targets:resolve\",\n targetsCreate: \"targets:create\",\n targetsList: \"targets:list\",\n targetsGet: \"targets:get\",\n jobsCreate: \"jobs:create\",\n jobsGet: \"jobs:get\",\n jobsCancel: \"jobs:cancel\",\n capabilitiesList: \"capabilities:list\",\n findingsSearch: \"findings:search\",\n evidenceList: \"evidence:list\",\n terminalStart: \"terminal:start\",\n terminalInput: \"terminal:input\",\n terminalStop: \"terminal:stop\",\n accountStatus: \"account:status\",\n accountEntitlements: \"account:entitlements\",\n accountCheckEntitlement: \"account:check-entitlement\"\n} as const;\n\nexport const resolveInputSchema = z.object({\n input: z.string().trim().min(1).max(4096)\n});\n\nexport const createTargetSchema = z.object({\n resolutionId: z.string().min(1).max(128)\n});\n\nexport const createJobSchema = z.object({\n targetId: z.string().uuid(),\n capabilityId: z.string().trim().min(1).max(128),\n artifactId: z.string().uuid().optional(),\n input: z\n .object({\n functionName: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .regex(/^[A-Za-z_$][A-Za-z0-9_$.@:-]{0,255}$/)\n .optional(),\n query: z.string().trim().min(1).max(512).optional(),\n kind: z.enum([\"procedures\", \"strings\"]).optional(),\n mode: z.enum([\"literal\", \"regex\"]).optional()\n })\n .strict()\n .optional()\n});\n\nexport const findingsSearchSchema = z.object({\n targetId: z.string().uuid(),\n query: z.string().trim().max(512).optional(),\n types: z\n .array(\n z.enum([\n \"technology\",\n \"route\",\n \"network_endpoint\",\n \"module\",\n \"asset\",\n \"storage\",\n \"native_procedure\",\n \"native_string\",\n \"risk\",\n \"limitation\"\n ])\n )\n .optional(),\n limit: z.number().int().min(1).max(1000).optional(),\n offset: z.number().int().min(0).optional()\n});\n\nexport const evidenceListSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const capabilitiesListSchema = z\n .object({\n targetId: z.string().uuid().optional()\n })\n .optional();\n\nexport const targetIdSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const jobIdSchema = z.object({\n jobId: z.string().uuid()\n});\n\nexport const terminalStartSchema = z.object({\n kind: z.literal(\"ipatool-auth\")\n});\n\nexport const terminalInputSchema = z.object({\n sessionId: z.string().uuid(),\n data: z.string().max(16_384)\n});\n\nexport const terminalStopSchema = z.object({\n sessionId: z.string().uuid()\n});\n\nexport const accountStatusSchema = z.object({\n force: z.boolean().optional()\n});\n\nexport const accountCheckSchema = z\n .object({\n appId: z.union([z.string(), z.number()]).optional(),\n bundleId: z.string().optional()\n })\n .refine((value) => value.appId !== undefined || value.bundleId !== undefined, {\n message: \"appId or bundleId is required\"\n });\n\nexport function parseAppStoreId(input: string): { appId: number; country: string } | null {\n const trimmed = input.trim();\n const numeric = trimmed.match(/^\\d+$/);\n if (numeric) {\n return { appId: Number(numeric[0]), country: \"cn\" };\n }\n\n const idMatch = trimmed.match(/(?:\\/id|\\bid=)(\\d+)/);\n if (!idMatch) return null;\n\n const countryMatch = trimmed.match(/apps\\.apple\\.com\\/([a-z]{2})\\//i);\n return {\n appId: Number(idMatch[1]),\n country: (countryMatch?.[1] ?? \"cn\").toLowerCase()\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type TargetPlatform = \"ios\" | \"windows\" | \"macos\" | \"android\" | \"linux\";\nexport type HostPlatform = \"darwin\" | \"win32\" | \"linux\";\nexport type SourceId =\n | \"app-store\"\n | \"local-file\"\n | \"direct-url\"\n | \"microsoft-store\"\n | \"winget\";\nexport type PackageFormat =\n | \"ipa\"\n | \"msix\"\n | \"appx\"\n | \"exe\"\n | \"msi\"\n | \"zip\"\n | \"dmg\"\n | \"apk\";\n\nexport interface TargetRef {\n platform: TargetPlatform;\n sourceId: SourceId;\n sourceRef: string;\n}\n\nexport interface ResolvedTarget {\n targetRef: TargetRef;\n name: string;\n publisher?: string;\n version?: string;\n bundleId?: string;\n packageId?: string;\n iconUrl?: string;\n storeUrl?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface TargetRecord extends ResolvedTarget {\n id: string;\n slug: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ArtifactRecord {\n id: string;\n targetId: string;\n platform: TargetPlatform;\n packageFormat: PackageFormat;\n architecture?: string;\n sha256: string;\n path: string;\n sizeBytes: number;\n version?: string;\n buildNumber?: string;\n signature?: Record<string, unknown>;\n inspection?: Record<string, unknown>;\n sourceUrl?: string;\n downloadedAt: string;\n isCurrent: boolean;\n}\n\nexport type FindingType =\n | \"technology\"\n | \"route\"\n | \"network_endpoint\"\n | \"module\"\n | \"asset\"\n | \"storage\"\n | \"native_procedure\"\n | \"native_string\"\n | \"risk\"\n | \"limitation\";\n\nexport type FindingConfidence =\n | \"exact\"\n | \"high\"\n | \"medium\"\n | \"low\"\n | \"unknown\";\n\nexport interface FindingRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n evidenceId: string;\n type: FindingType;\n value: string;\n group?: string;\n sourcePath?: string;\n start?: { line: number; column: number };\n end?: { line: number; column: number };\n confidence: FindingConfidence;\n metadata: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface EvidenceRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n kind: string;\n format: \"json\" | \"markdown\" | \"text\";\n path: string;\n sha256: string;\n summary: Record<string, unknown>;\n parentEvidenceId?: string;\n createdAt: string;\n}\n\nexport interface FindingSearchResult {\n items: FindingRecord[];\n total: number;\n limit: number;\n offset: number;\n}\n\nexport interface AnalysisRunRecord {\n id: string;\n targetId?: string;\n status: \"running\" | \"completed\" | \"failed\" | \"interrupted\";\n startedAt: string;\n finishedAt?: string;\n result?: Record<string, unknown>;\n error?: { code: string; message: string; details?: unknown };\n updatedAt: string;\n}\n\nexport type JobStatus =\n | \"queued\"\n | \"resolving\"\n | \"awaiting_auth\"\n | \"awaiting_license\"\n | \"acquiring\"\n | \"inspecting\"\n | \"registering\"\n | \"ready\"\n | \"analyzing\"\n | \"analyzed\"\n | \"failed\"\n | \"cancelled\"\n | \"interrupted\";\n\nexport interface JobRecord {\n id: string;\n targetId?: string;\n sourceId?: SourceId;\n capabilityId: string;\n status: JobStatus;\n progress: number;\n params: Record<string, unknown>;\n result?: Record<string, unknown>;\n errorCode?: string;\n errorMessage?: string;\n createdAt: string;\n startedAt?: string;\n finishedAt?: string;\n}\n\nexport interface JobEvent {\n jobId: string;\n level: \"info\" | \"warn\" | \"error\";\n message: string;\n payload?: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface SourceDescriptor {\n id: SourceId;\n platform: TargetPlatform;\n displayName: string;\n requiresAuth: boolean;\n status: \"ready\" | \"preview\" | \"evaluate\";\n description: string;\n}\n\nexport interface CapabilityDescriptor {\n id: string;\n label: string;\n description: string;\n targetPlatforms: TargetPlatform[];\n packageFormats?: PackageFormat[];\n hostPlatforms?: HostPlatform[];\n available: boolean;\n reason?: string;\n requiresArtifact?: boolean;\n requiresInput?: \"function\" | \"query\";\n}\n\nexport interface ResolveResult {\n resolutionId: string;\n target: ResolvedTarget;\n provider: SourceDescriptor;\n}\n\nexport interface TargetDetail {\n target: TargetRecord;\n artifacts: ArtifactRecord[];\n jobs: JobRecord[];\n}\n\nexport interface CoreError {\n code: string;\n message: string;\n details?: unknown;\n}\n\nexport interface HealthInfo {\n version: string;\n workspaceRoot: string;\n hostPlatform: HostPlatform;\n store: \"sqlite\" | \"json\";\n tools?: ToolInfo[];\n}\n\nexport interface ToolInfo {\n id: string;\n label: string;\n path: string;\n available: boolean;\n}\n\nexport interface AccountStatus {\n authenticated: boolean;\n errorCode?: \"TOOL_NOT_INSTALLED\" | \"AUTH_CHECK_FAILED\" | \"AUTH_CHECK_TIMEOUT\";\n email?: string;\n name?: string;\n keychain: \"unlocked\" | \"locked\" | \"unknown\";\n checkedAt: string;\n message?: string;\n}\n\nexport interface EntitlementRecord {\n appId?: string | number;\n bundleId?: string;\n name: string;\n version?: string;\n platform?: string;\n}\n\nexport interface AccountEntitlements {\n items: EntitlementRecord[];\n checkedAt: string;\n truncated: boolean;\n error?: string;\n}\n\nexport interface EntitlementCheck {\n status: \"owned\" | \"not_owned\" | \"unknown\";\n checkedAt: string;\n message?: string;\n entitlement?: EntitlementRecord;\n}\n\nexport interface CoreRequest<T = unknown> {\n id: string;\n channel: string;\n payload: T;\n}\n\nexport type CoreResponse<T = unknown> =\n | { id: string; ok: true; data: T }\n | { id: string; ok: false; error: CoreError };\n\nexport type CoreEvent =\n | { type: \"job.updated\"; payload: JobRecord }\n | { type: \"job.log\"; payload: JobEvent }\n | { type: \"target.updated\"; payload: TargetRecord }\n | { type: \"terminal.data\"; payload: { sessionId: string; data: string } }\n | {\n type: \"terminal.exit\";\n payload: { sessionId: string; code: number | null; signal?: string | null };\n };\n\nexport const CHANNELS = {\n health: \"health\",\n sourcesList: \"sources:list\",\n targetsResolve: \"targets:resolve\",\n targetsCreate: \"targets:create\",\n targetsList: \"targets:list\",\n targetsGet: \"targets:get\",\n jobsCreate: \"jobs:create\",\n jobsGet: \"jobs:get\",\n jobsCancel: \"jobs:cancel\",\n capabilitiesList: \"capabilities:list\",\n findingsSearch: \"findings:search\",\n evidenceList: \"evidence:list\",\n terminalStart: \"terminal:start\",\n terminalInput: \"terminal:input\",\n terminalStop: \"terminal:stop\",\n accountStatus: \"account:status\",\n accountEntitlements: \"account:entitlements\",\n accountCheckEntitlement: \"account:check-entitlement\"\n} as const;\n\nexport const resolveInputSchema = z.object({\n input: z.string().trim().min(1).max(4096)\n});\n\nexport const createTargetSchema = z.object({\n resolutionId: z.string().min(1).max(128)\n});\n\nexport const createJobSchema = z.object({\n targetId: z.string().uuid(),\n capabilityId: z.string().trim().min(1).max(128),\n artifactId: z.string().uuid().optional(),\n input: z\n .object({\n functionName: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .regex(/^[A-Za-z_$][A-Za-z0-9_$.@:-]{0,255}$/)\n .optional(),\n query: z.string().trim().min(1).max(512).optional(),\n kind: z.enum([\"procedures\", \"strings\"]).optional(),\n mode: z.enum([\"literal\", \"regex\"]).optional()\n })\n .strict()\n .optional()\n});\n\nexport const findingsSearchSchema = z.object({\n targetId: z.string().uuid(),\n query: z.string().trim().max(512).optional(),\n types: z\n .array(\n z.enum([\n \"technology\",\n \"route\",\n \"network_endpoint\",\n \"module\",\n \"asset\",\n \"storage\",\n \"native_procedure\",\n \"native_string\",\n \"risk\",\n \"limitation\"\n ])\n )\n .optional(),\n limit: z.number().int().min(1).max(1000).optional(),\n offset: z.number().int().min(0).optional()\n});\n\nexport const evidenceListSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const capabilitiesListSchema = z\n .object({\n targetId: z.string().uuid().optional()\n })\n .optional();\n\nexport const targetIdSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const jobIdSchema = z.object({\n jobId: z.string().uuid()\n});\n\nexport const terminalStartSchema = z.object({\n kind: z.literal(\"ipatool-auth\")\n});\n\nexport const terminalInputSchema = z.object({\n sessionId: z.string().uuid(),\n data: z.string().max(16_384)\n});\n\nexport const terminalStopSchema = z.object({\n sessionId: z.string().uuid()\n});\n\nexport const accountStatusSchema = z.object({\n force: z.boolean().optional()\n});\n\nexport const accountCheckSchema = z\n .object({\n appId: z.union([z.string(), z.number()]).optional(),\n bundleId: z.string().optional()\n })\n .refine((value) => value.appId !== undefined || value.bundleId !== undefined, {\n message: \"appId or bundleId is required\"\n });\n\nexport function parseAppStoreId(input: string): { appId: number; country: string } | null {\n const trimmed = input.trim();\n const numeric = trimmed.match(/^\\d+$/);\n if (numeric) {\n return { appId: Number(numeric[0]), country: \"cn\" };\n }\n\n const idMatch = trimmed.match(/(?:\\/id|\\bid=)(\\d+)/);\n if (!idMatch) return null;\n\n const countryMatch = trimmed.match(/apps\\.apple\\.com\\/([a-z]{2})\\//i);\n return {\n appId: Number(idMatch[1]),\n country: (countryMatch?.[1] ?? \"cn\").toLowerCase()\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAkB;AAqRX,IAAM,WAAW;AAAA,EACtB,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,eAAe;AAAA,EACf,eAAe;AAAA,EACf,cAAc;AAAA,EACd,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,yBAAyB;AAC3B;AAEO,IAAM,qBAAqB,aAAE,OAAO;AAAA,EACzC,OAAO,aAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI;AAC1C,CAAC;AAEM,IAAM,qBAAqB,aAAE,OAAO;AAAA,EACzC,cAAc,aAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AACzC,CAAC;AAEM,IAAM,kBAAkB,aAAE,OAAO;AAAA,EACtC,UAAU,aAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,cAAc,aAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG;AAAA,EAC9C,YAAY,aAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AAAA,EACvC,OAAO,aACJ,OAAO;AAAA,IACN,cAAc,aACX,OAAO,EACP,KAAK,EACL,IAAI,CAAC,EACL,IAAI,GAAG,EACP,MAAM,sCAAsC,EAC5C,SAAS;AAAA,IACZ,OAAO,aAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,IAClD,MAAM,aAAE,KAAK,CAAC,cAAc,SAAS,CAAC,EAAE,SAAS;AAAA,IACjD,MAAM,aAAE,KAAK,CAAC,WAAW,OAAO,CAAC,EAAE,SAAS;AAAA,EAC9C,CAAC,EACA,OAAO,EACP,SAAS;AACd,CAAC;AAEM,IAAM,uBAAuB,aAAE,OAAO;AAAA,EAC3C,UAAU,aAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,OAAO,aAAE,OAAO,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC3C,OAAO,aACJ;AAAA,IACC,aAAE,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,EACC,SAAS;AAAA,EACZ,OAAO,aAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI,EAAE,SAAS;AAAA,EAClD,QAAQ,aAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAC3C,CAAC;AAEM,IAAM,qBAAqB,aAAE,OAAO;AAAA,EACzC,UAAU,aAAE,OAAO,EAAE,KAAK;AAC5B,CAAC;AAEM,IAAM,yBAAyB,aACnC,OAAO;AAAA,EACN,UAAU,aAAE,OAAO,EAAE,KAAK,EAAE,SAAS;AACvC,CAAC,EACA,SAAS;AAEL,IAAM,iBAAiB,aAAE,OAAO;AAAA,EACrC,UAAU,aAAE,OAAO,EAAE,KAAK;AAC5B,CAAC;AAEM,IAAM,cAAc,aAAE,OAAO;AAAA,EAClC,OAAO,aAAE,OAAO,EAAE,KAAK;AACzB,CAAC;AAEM,IAAM,sBAAsB,aAAE,OAAO;AAAA,EAC1C,MAAM,aAAE,QAAQ,cAAc;AAChC,CAAC;AAEM,IAAM,sBAAsB,aAAE,OAAO;AAAA,EAC1C,WAAW,aAAE,OAAO,EAAE,KAAK;AAAA,EAC3B,MAAM,aAAE,OAAO,EAAE,IAAI,KAAM;AAC7B,CAAC;AAEM,IAAM,qBAAqB,aAAE,OAAO;AAAA,EACzC,WAAW,aAAE,OAAO,EAAE,KAAK;AAC7B,CAAC;AAEM,IAAM,sBAAsB,aAAE,OAAO;AAAA,EAC1C,OAAO,aAAE,QAAQ,EAAE,SAAS;AAC9B,CAAC;AAEM,IAAM,qBAAqB,aAC/B,OAAO;AAAA,EACN,OAAO,aAAE,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EAClD,UAAU,aAAE,OAAO,EAAE,SAAS;AAChC,CAAC,EACA,OAAO,CAAC,UAAU,MAAM,UAAU,UAAa,MAAM,aAAa,QAAW;AAAA,EAC5E,SAAS;AACX,CAAC;AAEI,SAAS,gBAAgB,OAA0D;AACxF,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,UAAU,QAAQ,MAAM,OAAO;AACrC,MAAI,SAAS;AACX,WAAO,EAAE,OAAO,OAAO,QAAQ,CAAC,CAAC,GAAG,SAAS,KAAK;AAAA,EACpD;AAEA,QAAM,UAAU,QAAQ,MAAM,qBAAqB;AACnD,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,eAAe,QAAQ,MAAM,iCAAiC;AACpE,SAAO;AAAA,IACL,OAAO,OAAO,QAAQ,CAAC,CAAC;AAAA,IACxB,UAAU,eAAe,CAAC,KAAK,MAAM,YAAY;AAAA,EACnD;AACF;","names":[]}
package/dist/index.d.cts CHANGED
@@ -173,6 +173,7 @@ interface ToolInfo {
173
173
  }
174
174
  interface AccountStatus {
175
175
  authenticated: boolean;
176
+ errorCode?: "TOOL_NOT_INSTALLED" | "AUTH_CHECK_FAILED" | "AUTH_CHECK_TIMEOUT";
176
177
  email?: string;
177
178
  name?: string;
178
179
  keychain: "unlocked" | "locked" | "unknown";
package/dist/index.d.ts CHANGED
@@ -173,6 +173,7 @@ interface ToolInfo {
173
173
  }
174
174
  interface AccountStatus {
175
175
  authenticated: boolean;
176
+ errorCode?: "TOOL_NOT_INSTALLED" | "AUTH_CHECK_FAILED" | "AUTH_CHECK_TIMEOUT";
176
177
  email?: string;
177
178
  name?: string;
178
179
  keychain: "unlocked" | "locked" | "unknown";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type TargetPlatform = \"ios\" | \"windows\" | \"macos\" | \"android\" | \"linux\";\nexport type HostPlatform = \"darwin\" | \"win32\" | \"linux\";\nexport type SourceId =\n | \"app-store\"\n | \"local-file\"\n | \"direct-url\"\n | \"microsoft-store\"\n | \"winget\";\nexport type PackageFormat =\n | \"ipa\"\n | \"msix\"\n | \"appx\"\n | \"exe\"\n | \"msi\"\n | \"zip\"\n | \"dmg\"\n | \"apk\";\n\nexport interface TargetRef {\n platform: TargetPlatform;\n sourceId: SourceId;\n sourceRef: string;\n}\n\nexport interface ResolvedTarget {\n targetRef: TargetRef;\n name: string;\n publisher?: string;\n version?: string;\n bundleId?: string;\n packageId?: string;\n iconUrl?: string;\n storeUrl?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface TargetRecord extends ResolvedTarget {\n id: string;\n slug: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ArtifactRecord {\n id: string;\n targetId: string;\n platform: TargetPlatform;\n packageFormat: PackageFormat;\n architecture?: string;\n sha256: string;\n path: string;\n sizeBytes: number;\n version?: string;\n buildNumber?: string;\n signature?: Record<string, unknown>;\n inspection?: Record<string, unknown>;\n sourceUrl?: string;\n downloadedAt: string;\n isCurrent: boolean;\n}\n\nexport type FindingType =\n | \"technology\"\n | \"route\"\n | \"network_endpoint\"\n | \"module\"\n | \"asset\"\n | \"storage\"\n | \"native_procedure\"\n | \"native_string\"\n | \"risk\"\n | \"limitation\";\n\nexport type FindingConfidence =\n | \"exact\"\n | \"high\"\n | \"medium\"\n | \"low\"\n | \"unknown\";\n\nexport interface FindingRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n evidenceId: string;\n type: FindingType;\n value: string;\n group?: string;\n sourcePath?: string;\n start?: { line: number; column: number };\n end?: { line: number; column: number };\n confidence: FindingConfidence;\n metadata: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface EvidenceRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n kind: string;\n format: \"json\" | \"markdown\" | \"text\";\n path: string;\n sha256: string;\n summary: Record<string, unknown>;\n parentEvidenceId?: string;\n createdAt: string;\n}\n\nexport interface FindingSearchResult {\n items: FindingRecord[];\n total: number;\n limit: number;\n offset: number;\n}\n\nexport interface AnalysisRunRecord {\n id: string;\n targetId?: string;\n status: \"running\" | \"completed\" | \"failed\" | \"interrupted\";\n startedAt: string;\n finishedAt?: string;\n result?: Record<string, unknown>;\n error?: { code: string; message: string; details?: unknown };\n updatedAt: string;\n}\n\nexport type JobStatus =\n | \"queued\"\n | \"resolving\"\n | \"awaiting_auth\"\n | \"awaiting_license\"\n | \"acquiring\"\n | \"inspecting\"\n | \"registering\"\n | \"ready\"\n | \"analyzing\"\n | \"analyzed\"\n | \"failed\"\n | \"cancelled\"\n | \"interrupted\";\n\nexport interface JobRecord {\n id: string;\n targetId?: string;\n sourceId?: SourceId;\n capabilityId: string;\n status: JobStatus;\n progress: number;\n params: Record<string, unknown>;\n result?: Record<string, unknown>;\n errorCode?: string;\n errorMessage?: string;\n createdAt: string;\n startedAt?: string;\n finishedAt?: string;\n}\n\nexport interface JobEvent {\n jobId: string;\n level: \"info\" | \"warn\" | \"error\";\n message: string;\n payload?: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface SourceDescriptor {\n id: SourceId;\n platform: TargetPlatform;\n displayName: string;\n requiresAuth: boolean;\n status: \"ready\" | \"preview\" | \"evaluate\";\n description: string;\n}\n\nexport interface CapabilityDescriptor {\n id: string;\n label: string;\n description: string;\n targetPlatforms: TargetPlatform[];\n packageFormats?: PackageFormat[];\n hostPlatforms?: HostPlatform[];\n available: boolean;\n reason?: string;\n requiresArtifact?: boolean;\n requiresInput?: \"function\" | \"query\";\n}\n\nexport interface ResolveResult {\n resolutionId: string;\n target: ResolvedTarget;\n provider: SourceDescriptor;\n}\n\nexport interface TargetDetail {\n target: TargetRecord;\n artifacts: ArtifactRecord[];\n jobs: JobRecord[];\n}\n\nexport interface CoreError {\n code: string;\n message: string;\n details?: unknown;\n}\n\nexport interface HealthInfo {\n version: string;\n workspaceRoot: string;\n hostPlatform: HostPlatform;\n store: \"sqlite\" | \"json\";\n tools?: ToolInfo[];\n}\n\nexport interface ToolInfo {\n id: string;\n label: string;\n path: string;\n available: boolean;\n}\n\nexport interface AccountStatus {\n authenticated: boolean;\n email?: string;\n name?: string;\n keychain: \"unlocked\" | \"locked\" | \"unknown\";\n checkedAt: string;\n message?: string;\n}\n\nexport interface EntitlementRecord {\n appId?: string | number;\n bundleId?: string;\n name: string;\n version?: string;\n platform?: string;\n}\n\nexport interface AccountEntitlements {\n items: EntitlementRecord[];\n checkedAt: string;\n truncated: boolean;\n error?: string;\n}\n\nexport interface EntitlementCheck {\n status: \"owned\" | \"not_owned\" | \"unknown\";\n checkedAt: string;\n message?: string;\n entitlement?: EntitlementRecord;\n}\n\nexport interface CoreRequest<T = unknown> {\n id: string;\n channel: string;\n payload: T;\n}\n\nexport type CoreResponse<T = unknown> =\n | { id: string; ok: true; data: T }\n | { id: string; ok: false; error: CoreError };\n\nexport type CoreEvent =\n | { type: \"job.updated\"; payload: JobRecord }\n | { type: \"job.log\"; payload: JobEvent }\n | { type: \"target.updated\"; payload: TargetRecord }\n | { type: \"terminal.data\"; payload: { sessionId: string; data: string } }\n | {\n type: \"terminal.exit\";\n payload: { sessionId: string; code: number | null; signal?: string | null };\n };\n\nexport const CHANNELS = {\n health: \"health\",\n sourcesList: \"sources:list\",\n targetsResolve: \"targets:resolve\",\n targetsCreate: \"targets:create\",\n targetsList: \"targets:list\",\n targetsGet: \"targets:get\",\n jobsCreate: \"jobs:create\",\n jobsGet: \"jobs:get\",\n jobsCancel: \"jobs:cancel\",\n capabilitiesList: \"capabilities:list\",\n findingsSearch: \"findings:search\",\n evidenceList: \"evidence:list\",\n terminalStart: \"terminal:start\",\n terminalInput: \"terminal:input\",\n terminalStop: \"terminal:stop\",\n accountStatus: \"account:status\",\n accountEntitlements: \"account:entitlements\",\n accountCheckEntitlement: \"account:check-entitlement\"\n} as const;\n\nexport const resolveInputSchema = z.object({\n input: z.string().trim().min(1).max(4096)\n});\n\nexport const createTargetSchema = z.object({\n resolutionId: z.string().min(1).max(128)\n});\n\nexport const createJobSchema = z.object({\n targetId: z.string().uuid(),\n capabilityId: z.string().trim().min(1).max(128),\n artifactId: z.string().uuid().optional(),\n input: z\n .object({\n functionName: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .regex(/^[A-Za-z_$][A-Za-z0-9_$.@:-]{0,255}$/)\n .optional(),\n query: z.string().trim().min(1).max(512).optional(),\n kind: z.enum([\"procedures\", \"strings\"]).optional(),\n mode: z.enum([\"literal\", \"regex\"]).optional()\n })\n .strict()\n .optional()\n});\n\nexport const findingsSearchSchema = z.object({\n targetId: z.string().uuid(),\n query: z.string().trim().max(512).optional(),\n types: z\n .array(\n z.enum([\n \"technology\",\n \"route\",\n \"network_endpoint\",\n \"module\",\n \"asset\",\n \"storage\",\n \"native_procedure\",\n \"native_string\",\n \"risk\",\n \"limitation\"\n ])\n )\n .optional(),\n limit: z.number().int().min(1).max(1000).optional(),\n offset: z.number().int().min(0).optional()\n});\n\nexport const evidenceListSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const capabilitiesListSchema = z\n .object({\n targetId: z.string().uuid().optional()\n })\n .optional();\n\nexport const targetIdSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const jobIdSchema = z.object({\n jobId: z.string().uuid()\n});\n\nexport const terminalStartSchema = z.object({\n kind: z.literal(\"ipatool-auth\")\n});\n\nexport const terminalInputSchema = z.object({\n sessionId: z.string().uuid(),\n data: z.string().max(16_384)\n});\n\nexport const terminalStopSchema = z.object({\n sessionId: z.string().uuid()\n});\n\nexport const accountStatusSchema = z.object({\n force: z.boolean().optional()\n});\n\nexport const accountCheckSchema = z\n .object({\n appId: z.union([z.string(), z.number()]).optional(),\n bundleId: z.string().optional()\n })\n .refine((value) => value.appId !== undefined || value.bundleId !== undefined, {\n message: \"appId or bundleId is required\"\n });\n\nexport function parseAppStoreId(input: string): { appId: number; country: string } | null {\n const trimmed = input.trim();\n const numeric = trimmed.match(/^\\d+$/);\n if (numeric) {\n return { appId: Number(numeric[0]), country: \"cn\" };\n }\n\n const idMatch = trimmed.match(/(?:\\/id|\\bid=)(\\d+)/);\n if (!idMatch) return null;\n\n const countryMatch = trimmed.match(/apps\\.apple\\.com\\/([a-z]{2})\\//i);\n return {\n appId: Number(idMatch[1]),\n country: (countryMatch?.[1] ?? \"cn\").toLowerCase()\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { z } from \"zod\";\n\nexport type TargetPlatform = \"ios\" | \"windows\" | \"macos\" | \"android\" | \"linux\";\nexport type HostPlatform = \"darwin\" | \"win32\" | \"linux\";\nexport type SourceId =\n | \"app-store\"\n | \"local-file\"\n | \"direct-url\"\n | \"microsoft-store\"\n | \"winget\";\nexport type PackageFormat =\n | \"ipa\"\n | \"msix\"\n | \"appx\"\n | \"exe\"\n | \"msi\"\n | \"zip\"\n | \"dmg\"\n | \"apk\";\n\nexport interface TargetRef {\n platform: TargetPlatform;\n sourceId: SourceId;\n sourceRef: string;\n}\n\nexport interface ResolvedTarget {\n targetRef: TargetRef;\n name: string;\n publisher?: string;\n version?: string;\n bundleId?: string;\n packageId?: string;\n iconUrl?: string;\n storeUrl?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface TargetRecord extends ResolvedTarget {\n id: string;\n slug: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ArtifactRecord {\n id: string;\n targetId: string;\n platform: TargetPlatform;\n packageFormat: PackageFormat;\n architecture?: string;\n sha256: string;\n path: string;\n sizeBytes: number;\n version?: string;\n buildNumber?: string;\n signature?: Record<string, unknown>;\n inspection?: Record<string, unknown>;\n sourceUrl?: string;\n downloadedAt: string;\n isCurrent: boolean;\n}\n\nexport type FindingType =\n | \"technology\"\n | \"route\"\n | \"network_endpoint\"\n | \"module\"\n | \"asset\"\n | \"storage\"\n | \"native_procedure\"\n | \"native_string\"\n | \"risk\"\n | \"limitation\";\n\nexport type FindingConfidence =\n | \"exact\"\n | \"high\"\n | \"medium\"\n | \"low\"\n | \"unknown\";\n\nexport interface FindingRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n evidenceId: string;\n type: FindingType;\n value: string;\n group?: string;\n sourcePath?: string;\n start?: { line: number; column: number };\n end?: { line: number; column: number };\n confidence: FindingConfidence;\n metadata: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface EvidenceRecord {\n id: string;\n targetId: string;\n artifactId?: string;\n jobId: string;\n kind: string;\n format: \"json\" | \"markdown\" | \"text\";\n path: string;\n sha256: string;\n summary: Record<string, unknown>;\n parentEvidenceId?: string;\n createdAt: string;\n}\n\nexport interface FindingSearchResult {\n items: FindingRecord[];\n total: number;\n limit: number;\n offset: number;\n}\n\nexport interface AnalysisRunRecord {\n id: string;\n targetId?: string;\n status: \"running\" | \"completed\" | \"failed\" | \"interrupted\";\n startedAt: string;\n finishedAt?: string;\n result?: Record<string, unknown>;\n error?: { code: string; message: string; details?: unknown };\n updatedAt: string;\n}\n\nexport type JobStatus =\n | \"queued\"\n | \"resolving\"\n | \"awaiting_auth\"\n | \"awaiting_license\"\n | \"acquiring\"\n | \"inspecting\"\n | \"registering\"\n | \"ready\"\n | \"analyzing\"\n | \"analyzed\"\n | \"failed\"\n | \"cancelled\"\n | \"interrupted\";\n\nexport interface JobRecord {\n id: string;\n targetId?: string;\n sourceId?: SourceId;\n capabilityId: string;\n status: JobStatus;\n progress: number;\n params: Record<string, unknown>;\n result?: Record<string, unknown>;\n errorCode?: string;\n errorMessage?: string;\n createdAt: string;\n startedAt?: string;\n finishedAt?: string;\n}\n\nexport interface JobEvent {\n jobId: string;\n level: \"info\" | \"warn\" | \"error\";\n message: string;\n payload?: Record<string, unknown>;\n createdAt: string;\n}\n\nexport interface SourceDescriptor {\n id: SourceId;\n platform: TargetPlatform;\n displayName: string;\n requiresAuth: boolean;\n status: \"ready\" | \"preview\" | \"evaluate\";\n description: string;\n}\n\nexport interface CapabilityDescriptor {\n id: string;\n label: string;\n description: string;\n targetPlatforms: TargetPlatform[];\n packageFormats?: PackageFormat[];\n hostPlatforms?: HostPlatform[];\n available: boolean;\n reason?: string;\n requiresArtifact?: boolean;\n requiresInput?: \"function\" | \"query\";\n}\n\nexport interface ResolveResult {\n resolutionId: string;\n target: ResolvedTarget;\n provider: SourceDescriptor;\n}\n\nexport interface TargetDetail {\n target: TargetRecord;\n artifacts: ArtifactRecord[];\n jobs: JobRecord[];\n}\n\nexport interface CoreError {\n code: string;\n message: string;\n details?: unknown;\n}\n\nexport interface HealthInfo {\n version: string;\n workspaceRoot: string;\n hostPlatform: HostPlatform;\n store: \"sqlite\" | \"json\";\n tools?: ToolInfo[];\n}\n\nexport interface ToolInfo {\n id: string;\n label: string;\n path: string;\n available: boolean;\n}\n\nexport interface AccountStatus {\n authenticated: boolean;\n errorCode?: \"TOOL_NOT_INSTALLED\" | \"AUTH_CHECK_FAILED\" | \"AUTH_CHECK_TIMEOUT\";\n email?: string;\n name?: string;\n keychain: \"unlocked\" | \"locked\" | \"unknown\";\n checkedAt: string;\n message?: string;\n}\n\nexport interface EntitlementRecord {\n appId?: string | number;\n bundleId?: string;\n name: string;\n version?: string;\n platform?: string;\n}\n\nexport interface AccountEntitlements {\n items: EntitlementRecord[];\n checkedAt: string;\n truncated: boolean;\n error?: string;\n}\n\nexport interface EntitlementCheck {\n status: \"owned\" | \"not_owned\" | \"unknown\";\n checkedAt: string;\n message?: string;\n entitlement?: EntitlementRecord;\n}\n\nexport interface CoreRequest<T = unknown> {\n id: string;\n channel: string;\n payload: T;\n}\n\nexport type CoreResponse<T = unknown> =\n | { id: string; ok: true; data: T }\n | { id: string; ok: false; error: CoreError };\n\nexport type CoreEvent =\n | { type: \"job.updated\"; payload: JobRecord }\n | { type: \"job.log\"; payload: JobEvent }\n | { type: \"target.updated\"; payload: TargetRecord }\n | { type: \"terminal.data\"; payload: { sessionId: string; data: string } }\n | {\n type: \"terminal.exit\";\n payload: { sessionId: string; code: number | null; signal?: string | null };\n };\n\nexport const CHANNELS = {\n health: \"health\",\n sourcesList: \"sources:list\",\n targetsResolve: \"targets:resolve\",\n targetsCreate: \"targets:create\",\n targetsList: \"targets:list\",\n targetsGet: \"targets:get\",\n jobsCreate: \"jobs:create\",\n jobsGet: \"jobs:get\",\n jobsCancel: \"jobs:cancel\",\n capabilitiesList: \"capabilities:list\",\n findingsSearch: \"findings:search\",\n evidenceList: \"evidence:list\",\n terminalStart: \"terminal:start\",\n terminalInput: \"terminal:input\",\n terminalStop: \"terminal:stop\",\n accountStatus: \"account:status\",\n accountEntitlements: \"account:entitlements\",\n accountCheckEntitlement: \"account:check-entitlement\"\n} as const;\n\nexport const resolveInputSchema = z.object({\n input: z.string().trim().min(1).max(4096)\n});\n\nexport const createTargetSchema = z.object({\n resolutionId: z.string().min(1).max(128)\n});\n\nexport const createJobSchema = z.object({\n targetId: z.string().uuid(),\n capabilityId: z.string().trim().min(1).max(128),\n artifactId: z.string().uuid().optional(),\n input: z\n .object({\n functionName: z\n .string()\n .trim()\n .min(1)\n .max(256)\n .regex(/^[A-Za-z_$][A-Za-z0-9_$.@:-]{0,255}$/)\n .optional(),\n query: z.string().trim().min(1).max(512).optional(),\n kind: z.enum([\"procedures\", \"strings\"]).optional(),\n mode: z.enum([\"literal\", \"regex\"]).optional()\n })\n .strict()\n .optional()\n});\n\nexport const findingsSearchSchema = z.object({\n targetId: z.string().uuid(),\n query: z.string().trim().max(512).optional(),\n types: z\n .array(\n z.enum([\n \"technology\",\n \"route\",\n \"network_endpoint\",\n \"module\",\n \"asset\",\n \"storage\",\n \"native_procedure\",\n \"native_string\",\n \"risk\",\n \"limitation\"\n ])\n )\n .optional(),\n limit: z.number().int().min(1).max(1000).optional(),\n offset: z.number().int().min(0).optional()\n});\n\nexport const evidenceListSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const capabilitiesListSchema = z\n .object({\n targetId: z.string().uuid().optional()\n })\n .optional();\n\nexport const targetIdSchema = z.object({\n targetId: z.string().uuid()\n});\n\nexport const jobIdSchema = z.object({\n jobId: z.string().uuid()\n});\n\nexport const terminalStartSchema = z.object({\n kind: z.literal(\"ipatool-auth\")\n});\n\nexport const terminalInputSchema = z.object({\n sessionId: z.string().uuid(),\n data: z.string().max(16_384)\n});\n\nexport const terminalStopSchema = z.object({\n sessionId: z.string().uuid()\n});\n\nexport const accountStatusSchema = z.object({\n force: z.boolean().optional()\n});\n\nexport const accountCheckSchema = z\n .object({\n appId: z.union([z.string(), z.number()]).optional(),\n bundleId: z.string().optional()\n })\n .refine((value) => value.appId !== undefined || value.bundleId !== undefined, {\n message: \"appId or bundleId is required\"\n });\n\nexport function parseAppStoreId(input: string): { appId: number; country: string } | null {\n const trimmed = input.trim();\n const numeric = trimmed.match(/^\\d+$/);\n if (numeric) {\n return { appId: Number(numeric[0]), country: \"cn\" };\n }\n\n const idMatch = trimmed.match(/(?:\\/id|\\bid=)(\\d+)/);\n if (!idMatch) return null;\n\n const countryMatch = trimmed.match(/apps\\.apple\\.com\\/([a-z]{2})\\//i);\n return {\n appId: Number(idMatch[1]),\n country: (countryMatch?.[1] ?? \"cn\").toLowerCase()\n };\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuixin/shared",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Shared AppTrace types and schemas",
6
6
  "repository": {