@posthog/wizard 2.33.0 → 2.35.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/{add-mcp-server-to-clients-Dhq75Hda.js → add-mcp-server-to-clients-to65gLPl.js} +5 -5
- package/dist/{add-mcp-server-to-clients-Dhq75Hda.js.map → add-mcp-server-to-clients-to65gLPl.js.map} +1 -1
- package/dist/{agent-interface-DCeQ5Oiw.js → agent-interface-CXL9i_vX.js} +362 -48
- package/dist/agent-interface-CXL9i_vX.js.map +1 -0
- package/dist/{agent-runner-BRajaO84.js → agent-runner-CCTTG_Rn.js} +33 -14
- package/dist/agent-runner-CCTTG_Rn.js.map +1 -0
- package/dist/{analytics-CU4o3eF8.js → analytics-DP_j88IC.js} +2 -2
- package/dist/{analytics-CU4o3eF8.js.map → analytics-DP_j88IC.js.map} +1 -1
- package/dist/{api-BBRfHEZ-.js → api-Bdxv7mWH.js} +3 -3
- package/dist/{api-BBRfHEZ-.js.map → api-Bdxv7mWH.js.map} +1 -1
- package/dist/bin.js +78 -61
- package/dist/bin.js.map +1 -1
- package/dist/check-screens.tsx +25 -0
- package/dist/{ci-install-D-otkGW6.js → ci-install-BO-KLPLD.js} +5 -5
- package/dist/ci-install-BO-KLPLD.js.map +1 -0
- package/dist/{debug-BewTLNNr.js → debug-Clw8ctxh.js} +1 -1
- package/dist/{debug-BGMe1wP6.js → debug-DXWxKT5f.js} +3 -4
- package/dist/debug-DXWxKT5f.js.map +1 -0
- package/dist/{defaults-DII5CAog.js → defaults-4rSse24X.js} +1 -1
- package/dist/{defaults-DII5CAog.js.map → defaults-4rSse24X.js.map} +1 -1
- package/dist/{env-api-key-MlzJYAvt.js → env-api-key-B3gE9Un0.js} +1 -1
- package/dist/{env-api-key-MlzJYAvt.js.map → env-api-key-B3gE9Un0.js.map} +1 -1
- package/dist/{environment-G41UFzou.js → environment-C4HyCWTC.js} +3 -3
- package/dist/{environment-G41UFzou.js.map → environment-C4HyCWTC.js.map} +1 -1
- package/dist/{file-utils-D9InAvZd.js → file-utils-CW8XbbZP.js} +2 -2
- package/dist/{file-utils-D9InAvZd.js.map → file-utils-CW8XbbZP.js.map} +1 -1
- package/dist/{headless-ui-xjHVVUqe.js → headless-ui-BoZYhNpE.js} +2 -2
- package/dist/{headless-ui-xjHVVUqe.js.map → headless-ui-BoZYhNpE.js.map} +1 -1
- package/dist/host-resolution-Dw0fS8h5.js +115 -0
- package/dist/host-resolution-Dw0fS8h5.js.map +1 -0
- package/dist/{interactive-D2CKikzz.js → interactive-pwrc7QM-.js} +2 -2
- package/dist/{interactive-D2CKikzz.js.map → interactive-pwrc7QM-.js.map} +1 -1
- package/dist/{mcp-prompt-streaming-FrArGwfv.js → mcp-prompt-streaming-DZjjoeu3.js} +10 -7
- package/dist/mcp-prompt-streaming-DZjjoeu3.js.map +1 -0
- package/dist/{non-interactive-BXx6Q-D0.js → non-interactive-BW-MZYrP.js} +2 -2
- package/dist/{non-interactive-BXx6Q-D0.js.map → non-interactive-BW-MZYrP.js.map} +1 -1
- package/dist/{package-manager-D9ojA4jO.js → package-manager-BgXgJ1Mu.js} +2 -2
- package/dist/{package-manager-D9ojA4jO.js.map → package-manager-BgXgJ1Mu.js.map} +1 -1
- package/dist/{playground-Bgtxrusl.js → playground-xuLBqzJM.js} +6 -6
- package/dist/{playground-Bgtxrusl.js.map → playground-xuLBqzJM.js.map} +1 -1
- package/dist/{posthog-DU6JXG00.js → posthog-BrLFkaji.js} +1 -1
- package/dist/{posthog-DU6JXG00.js.map → posthog-BrLFkaji.js.map} +1 -1
- package/dist/{posthog-integration-gnC9v4kg.js → posthog-integration-Bj9WmwDq.js} +16 -16
- package/dist/{posthog-integration-gnC9v4kg.js.map → posthog-integration-Bj9WmwDq.js.map} +1 -1
- package/dist/{provisioning-C3qglLdc.js → provisioning-BF2reo5_.js} +28 -9
- package/dist/provisioning-BF2reo5_.js.map +1 -0
- package/dist/{registry-BVrvFTZ0.js → registry-Dj17F0a-.js} +4 -4
- package/dist/{registry-BVrvFTZ0.js.map → registry-Dj17F0a-.js.map} +1 -1
- package/dist/{setup-utils-CanVlGbX.js → setup-utils-DyTlaGOV.js} +100 -31
- package/dist/setup-utils-DyTlaGOV.js.map +1 -0
- package/dist/{start-tui-YE7bybIr.js → start-tui-S4fBBfmO.js} +176 -38
- package/dist/{start-tui-YE7bybIr.js.map → start-tui-S4fBBfmO.js.map} +1 -1
- package/dist/{steps-N20e4IoE.js → steps-CHgikk6q.js} +7 -7
- package/dist/{steps-N20e4IoE.js.map → steps-CHgikk6q.js.map} +1 -1
- package/dist/{store-D15C9YSW.js → store-vr5j37CU.js} +4 -4
- package/dist/{store-D15C9YSW.js.map → store-vr5j37CU.js.map} +1 -1
- package/dist/{task-stream-CPjpHFhI.js → task-stream-BVF6gi8x.js} +3 -3
- package/dist/{task-stream-CPjpHFhI.js.map → task-stream-BVF6gi8x.js.map} +1 -1
- package/dist/{telemetry-DknCDWP6.js → telemetry-CR-ilpWe.js} +3 -3
- package/dist/{telemetry-DknCDWP6.js.map → telemetry-CR-ilpWe.js.map} +1 -1
- package/dist/{terminal-Cvv0a-7Q.js → terminal-uzjco-wz.js} +86 -35
- package/dist/terminal-uzjco-wz.js.map +1 -0
- package/dist/urls-ChWit8SE.js +67 -0
- package/dist/urls-ChWit8SE.js.map +1 -0
- package/dist/{wizard-abort-Cw818xPr.js → wizard-abort-BE_j8xUt.js} +4 -4
- package/dist/{wizard-abort-Cw818xPr.js.map → wizard-abort-BE_j8xUt.js.map} +1 -1
- package/dist/{wizard-abort-DMvS0YXD.js → wizard-abort-CNYxdjJl.js} +1 -1
- package/dist/{wizard-session-CN55LYyZ.js → wizard-session-BHoLQueN.js} +2 -1
- package/dist/wizard-session-BHoLQueN.js.map +1 -0
- package/dist/{wizard-session-BKEdX9mO.js → wizard-session-D0PJ9lsl.js} +1 -1
- package/dist/wizard-ui-WZ48rUgr.js.map +1 -1
- package/package.json +1 -1
- package/dist/agent-interface-DCeQ5Oiw.js.map +0 -1
- package/dist/agent-runner-BRajaO84.js.map +0 -1
- package/dist/ci-install-D-otkGW6.js.map +0 -1
- package/dist/debug-BGMe1wP6.js.map +0 -1
- package/dist/mcp-prompt-streaming-FrArGwfv.js.map +0 -1
- package/dist/provisioning-C3qglLdc.js.map +0 -1
- package/dist/setup-utils-CanVlGbX.js.map +0 -1
- package/dist/terminal-Cvv0a-7Q.js.map +0 -1
- package/dist/urls-DrR6F_A3.js +0 -35
- package/dist/urls-DrR6F_A3.js.map +0 -1
- package/dist/wizard-session-CN55LYyZ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-BBRfHEZ-.js","names":[],"sources":["../src/lib/api.ts"],"sourcesContent":["import axios, { AxiosError } from 'axios';\nimport { z } from 'zod';\nimport { analytics } from '@utils/analytics';\nimport { WIZARD_USER_AGENT } from './constants';\n\n/**\n * User payload from `/api/users/@me/`. Schema typed for the fields the\n * wizard actually reads + passthrough on everything else so the full\n * upstream response rides through to the session for downstream features\n * (account-aware copy, plan-gated flows, org/team metadata, etc.).\n *\n * Top-level uses `.passthrough()` so unknown fields aren't stripped;\n * the few nested objects we care about (team, organization,\n * organizations[]) do the same so their additional fields survive too.\n *\n * Keep `distinct_id` required — analytics depends on it. Everything\n * else added here is nullish so partial responses don't fail parsing.\n */\nexport const ApiUserSchema = z\n .object({\n // Identifiers\n distinct_id: z.string(),\n uuid: z.string().nullish(),\n id: z.number().nullish(),\n\n // Profile\n email: z.string().nullish(),\n first_name: z.string().nullish(),\n last_name: z.string().nullish(),\n date_joined: z.string().nullish(),\n is_email_verified: z.boolean().nullish(),\n is_2fa_enabled: z.boolean().nullish(),\n is_staff: z.boolean().nullish(),\n\n // Preferences\n theme_mode: z.string().nullish(),\n toolbar_mode: z.string().nullish(),\n hide_mcp_hints: z.boolean().nullish(),\n\n // Optional / nullable on the backend — pre-onboarding signup paths\n // return null and older accounts may not have it set. Treat as a\n // hint, never a guarantee.\n role_at_organization: z.string().nullish(),\n\n // Current team + organization (objects from the API, kept typed on\n // the fields the wizard uses; passthrough preserves the rest).\n team: z\n .object({\n id: z.number(),\n uuid: z.string().nullish(),\n organization: z.string().uuid(),\n api_token: z.string().nullish(),\n project_id: z.number().nullish(),\n name: z.string().nullish(),\n timezone: z.string().nullish(),\n })\n .passthrough(),\n organization: z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n slug: z.string().nullish(),\n membership_level: z.number().nullish(),\n customer_id: z.string().nullish(),\n // Org-level AI consent gate. Signals drops all findings while\n // this is not true. Null on older orgs (pre-2026-05 default\n // flip) — treat null as \"unknown\", not \"off\".\n is_ai_data_processing_approved: z.boolean().nullish(),\n })\n .passthrough(),\n organizations: z.array(\n z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n membership_level: z.number().nullish(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/**\n * Single activity log entry the wizard cares about. The PostHog endpoint\n * returns much more — schema kept minimal so changes upstream don't break us.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling. Deliberately retained: this is a thin,\n * well-typed wrapper around a stable PostHog endpoint, and we're likely\n * to want it again for a future feature (e.g. \"what changed in your\n * project recently\"). Re-deriving the schema is more work than letting\n * it sit dormant.\n */\nexport const ActivityLogEntrySchema = z\n .object({\n scope: z.string().nullish(),\n activity: z.string().nullish(),\n created_at: z.string().nullish(),\n })\n .passthrough();\n\n/** @unused — see ActivityLogEntrySchema. */\nexport const ActivityLogResponseSchema = z.object({\n results: z.array(ActivityLogEntrySchema),\n});\n\n/** @unused — see ActivityLogEntrySchema. */\nexport type ActivityLogEntry = z.infer<typeof ActivityLogEntrySchema>;\n\nexport const ApiProjectSchema = z.object({\n id: z.number(),\n uuid: z.string().uuid(),\n organization: z.string().uuid(),\n api_token: z.string(),\n name: z.string(),\n // Product opt-ins (TeamSerializer-compat fields on /api/projects/:id).\n // Project-level truth for \"is this product enabled\" — a product can be\n // instrumented from another repo or the snippet, so these settings\n // override repo-local evidence. Null/absent = unknown. Only the\n // opt-ins a signals decision consumes: replay + exception autocapture\n // feed signal-source choices; surveys feeds the surveys-scout tuning.\n session_recording_opt_in: z.boolean().nullish(),\n autocapture_exceptions_opt_in: z.boolean().nullish(),\n surveys_opt_in: z.boolean().nullish(),\n});\n\nexport type ApiUser = z.infer<typeof ApiUserSchema>;\nexport type ApiProject = z.infer<typeof ApiProjectSchema>;\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly endpoint?: string,\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\nexport async function fetchUserData(\n accessToken: string,\n baseUrl: string,\n): Promise<ApiUser> {\n try {\n const response = await axios.get(`${baseUrl}/api/users/@me/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiUserSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch user data');\n analytics.captureException(apiError, {\n endpoint: '/api/users/@me/',\n baseUrl,\n });\n throw apiError;\n }\n}\n\n/**\n * Best-effort fetch of recent activity log entries. Returns [] on any error\n * so callers can treat absence of results as \"haven't detected anything yet\"\n * rather than a hard failure.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling from McpSuggestedPromptsScreen.\n * Deliberately retained for future features that want a soft signal of\n * recent project changes (e.g. dashboards, audit summaries). See the\n * ActivityLogEntrySchema doc comment for the keep-vs-delete rationale.\n */\nexport async function fetchRecentActivity(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n since: Date,\n): Promise<ActivityLogEntry[]> {\n try {\n const response = await axios.get(\n `${baseUrl}/api/projects/${projectId}/activity_log/`,\n {\n params: { limit: 10 },\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n // Short timeout — best-effort probe, not a critical path.\n timeout: 4000,\n },\n );\n const parsed = ActivityLogResponseSchema.safeParse(response.data);\n if (!parsed.success) return [];\n const sinceMs = since.getTime();\n return parsed.data.results.filter((entry) => {\n if (!entry.created_at) return false;\n const t = Date.parse(entry.created_at);\n return Number.isFinite(t) && t >= sinceMs;\n });\n } catch {\n return [];\n }\n}\n\nexport async function fetchProjectData(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n): Promise<ApiProject> {\n try {\n const response = await axios.get(`${baseUrl}/api/projects/${projectId}/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiProjectSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch project data');\n analytics.captureException(apiError, {\n endpoint: `/api/projects/${projectId}/`,\n baseUrl,\n projectId,\n });\n throw apiError;\n }\n}\n\n/** Minimal shape of `/api/projects/:id/integrations/` — we only read `kind`. */\nconst IntegrationsResponseSchema = z.object({\n results: z.array(z.object({ kind: z.string().nullish() }).passthrough()),\n});\n\n/**\n * Check whether the project already has a Slack integration connected.\n * Requires the `integration:read` scope. Throws on failure — callers\n * (including the SlackConnectScreen poll) decide how to degrade and\n * are responsible for capturing the error exactly once.\n */\nexport async function fetchSlackConnected(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n signal?: AbortSignal,\n): Promise<boolean> {\n const response = await axios.get(\n `${baseUrl}/api/projects/${projectId}/integrations/`,\n {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n signal,\n },\n );\n const parsed = IntegrationsResponseSchema.safeParse(response.data);\n if (!parsed.success) return false;\n return parsed.data.results.some((i) => i.kind === 'slack');\n}\n\nexport function handleApiError(error: unknown, operation: string): ApiError {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError<{ detail?: string }>;\n const status = axiosError.response?.status;\n const detail = axiosError.response?.data?.detail;\n const endpoint = axiosError.config?.url;\n\n if (status === 401) {\n return new ApiError(\n `Authentication failed while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 403) {\n return new ApiError(\n `Access denied while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 404) {\n return new ApiError(\n `Resource not found while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n const message = detail || `Failed to ${operation}`;\n return new ApiError(message, status, endpoint);\n }\n\n if (error instanceof z.ZodError) {\n return new ApiError(`Invalid response format while trying to ${operation}`);\n }\n\n return new ApiError(\n `Unexpected error while trying to ${operation}: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-Bdxv7mWH.js","names":[],"sources":["../src/lib/api.ts"],"sourcesContent":["import axios, { AxiosError } from 'axios';\nimport { z } from 'zod';\nimport { analytics } from '@utils/analytics';\nimport { WIZARD_USER_AGENT } from './constants';\n\n/**\n * User payload from `/api/users/@me/`. Schema typed for the fields the\n * wizard actually reads + passthrough on everything else so the full\n * upstream response rides through to the session for downstream features\n * (account-aware copy, plan-gated flows, org/team metadata, etc.).\n *\n * Top-level uses `.passthrough()` so unknown fields aren't stripped;\n * the few nested objects we care about (team, organization,\n * organizations[]) do the same so their additional fields survive too.\n *\n * Keep `distinct_id` required — analytics depends on it. Everything\n * else added here is nullish so partial responses don't fail parsing.\n */\nexport const ApiUserSchema = z\n .object({\n // Identifiers\n distinct_id: z.string(),\n uuid: z.string().nullish(),\n id: z.number().nullish(),\n\n // Profile\n email: z.string().nullish(),\n first_name: z.string().nullish(),\n last_name: z.string().nullish(),\n date_joined: z.string().nullish(),\n is_email_verified: z.boolean().nullish(),\n is_2fa_enabled: z.boolean().nullish(),\n is_staff: z.boolean().nullish(),\n\n // Preferences\n theme_mode: z.string().nullish(),\n toolbar_mode: z.string().nullish(),\n hide_mcp_hints: z.boolean().nullish(),\n\n // Optional / nullable on the backend — pre-onboarding signup paths\n // return null and older accounts may not have it set. Treat as a\n // hint, never a guarantee.\n role_at_organization: z.string().nullish(),\n\n // Current team + organization (objects from the API, kept typed on\n // the fields the wizard uses; passthrough preserves the rest).\n team: z\n .object({\n id: z.number(),\n uuid: z.string().nullish(),\n organization: z.string().uuid(),\n api_token: z.string().nullish(),\n project_id: z.number().nullish(),\n name: z.string().nullish(),\n timezone: z.string().nullish(),\n })\n .passthrough(),\n organization: z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n slug: z.string().nullish(),\n membership_level: z.number().nullish(),\n customer_id: z.string().nullish(),\n // Org-level AI consent gate. Signals drops all findings while\n // this is not true. Null on older orgs (pre-2026-05 default\n // flip) — treat null as \"unknown\", not \"off\".\n is_ai_data_processing_approved: z.boolean().nullish(),\n })\n .passthrough(),\n organizations: z.array(\n z\n .object({\n id: z.string().uuid(),\n name: z.string().nullish(),\n membership_level: z.number().nullish(),\n })\n .passthrough(),\n ),\n })\n .passthrough();\n\n/**\n * Single activity log entry the wizard cares about. The PostHog endpoint\n * returns much more — schema kept minimal so changes upstream don't break us.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling. Deliberately retained: this is a thin,\n * well-typed wrapper around a stable PostHog endpoint, and we're likely\n * to want it again for a future feature (e.g. \"what changed in your\n * project recently\"). Re-deriving the schema is more work than letting\n * it sit dormant.\n */\nexport const ActivityLogEntrySchema = z\n .object({\n scope: z.string().nullish(),\n activity: z.string().nullish(),\n created_at: z.string().nullish(),\n })\n .passthrough();\n\n/** @unused — see ActivityLogEntrySchema. */\nexport const ActivityLogResponseSchema = z.object({\n results: z.array(ActivityLogEntrySchema),\n});\n\n/** @unused — see ActivityLogEntrySchema. */\nexport type ActivityLogEntry = z.infer<typeof ActivityLogEntrySchema>;\n\nexport const ApiProjectSchema = z.object({\n id: z.number(),\n uuid: z.string().uuid(),\n organization: z.string().uuid(),\n api_token: z.string(),\n name: z.string(),\n // Product opt-ins (TeamSerializer-compat fields on /api/projects/:id).\n // Project-level truth for \"is this product enabled\" — a product can be\n // instrumented from another repo or the snippet, so these settings\n // override repo-local evidence. Null/absent = unknown. Only the\n // opt-ins a signals decision consumes: replay + exception autocapture\n // feed signal-source choices; surveys feeds the surveys-scout tuning.\n session_recording_opt_in: z.boolean().nullish(),\n autocapture_exceptions_opt_in: z.boolean().nullish(),\n surveys_opt_in: z.boolean().nullish(),\n});\n\nexport type ApiUser = z.infer<typeof ApiUserSchema>;\nexport type ApiProject = z.infer<typeof ApiProjectSchema>;\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly endpoint?: string,\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\nexport async function fetchUserData(\n accessToken: string,\n baseUrl: string,\n): Promise<ApiUser> {\n try {\n const response = await axios.get(`${baseUrl}/api/users/@me/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiUserSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch user data');\n analytics.captureException(apiError, {\n endpoint: '/api/users/@me/',\n baseUrl,\n });\n throw apiError;\n }\n}\n\n/**\n * Best-effort fetch of recent activity log entries. Returns [] on any error\n * so callers can treat absence of results as \"haven't detected anything yet\"\n * rather than a hard failure.\n *\n * @unused — no current caller after the Phase 6 streaming-agent pivot\n * dropped activity_log polling from McpSuggestedPromptsScreen.\n * Deliberately retained for future features that want a soft signal of\n * recent project changes (e.g. dashboards, audit summaries). See the\n * ActivityLogEntrySchema doc comment for the keep-vs-delete rationale.\n */\nexport async function fetchRecentActivity(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n since: Date,\n): Promise<ActivityLogEntry[]> {\n try {\n const response = await axios.get(\n `${baseUrl}/api/projects/${projectId}/activity_log/`,\n {\n params: { limit: 10 },\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n // Short timeout — best-effort probe, not a critical path.\n timeout: 4000,\n },\n );\n const parsed = ActivityLogResponseSchema.safeParse(response.data);\n if (!parsed.success) return [];\n const sinceMs = since.getTime();\n return parsed.data.results.filter((entry) => {\n if (!entry.created_at) return false;\n const t = Date.parse(entry.created_at);\n return Number.isFinite(t) && t >= sinceMs;\n });\n } catch {\n return [];\n }\n}\n\nexport async function fetchProjectData(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n): Promise<ApiProject> {\n try {\n const response = await axios.get(`${baseUrl}/api/projects/${projectId}/`, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n });\n\n return ApiProjectSchema.parse(response.data);\n } catch (error) {\n const apiError = handleApiError(error, 'fetch project data');\n analytics.captureException(apiError, {\n endpoint: `/api/projects/${projectId}/`,\n baseUrl,\n projectId,\n });\n throw apiError;\n }\n}\n\n/** Minimal shape of `/api/projects/:id/integrations/` — we only read `kind`. */\nconst IntegrationsResponseSchema = z.object({\n results: z.array(z.object({ kind: z.string().nullish() }).passthrough()),\n});\n\n/**\n * Check whether the project already has a Slack integration connected.\n * Requires the `integration:read` scope. Throws on failure — callers\n * (including the SlackConnectScreen poll) decide how to degrade and\n * are responsible for capturing the error exactly once.\n */\nexport async function fetchSlackConnected(\n accessToken: string,\n projectId: number,\n baseUrl: string,\n signal?: AbortSignal,\n): Promise<boolean> {\n const response = await axios.get(\n `${baseUrl}/api/projects/${projectId}/integrations/`,\n {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'User-Agent': WIZARD_USER_AGENT,\n },\n signal,\n },\n );\n const parsed = IntegrationsResponseSchema.safeParse(response.data);\n if (!parsed.success) return false;\n return parsed.data.results.some((i) => i.kind === 'slack');\n}\n\nexport function handleApiError(error: unknown, operation: string): ApiError {\n if (axios.isAxiosError(error)) {\n const axiosError = error as AxiosError<{ detail?: string }>;\n const status = axiosError.response?.status;\n const detail = axiosError.response?.data?.detail;\n const endpoint = axiosError.config?.url;\n\n if (status === 401) {\n return new ApiError(\n `Authentication failed while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 403) {\n return new ApiError(\n `Access denied while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n if (status === 404) {\n return new ApiError(\n `Resource not found while trying to ${operation}`,\n status,\n endpoint,\n );\n }\n\n const message = detail || `Failed to ${operation}`;\n return new ApiError(message, status, endpoint);\n }\n\n if (error instanceof z.ZodError) {\n return new ApiError(`Invalid response format while trying to ${operation}`);\n }\n\n return new ApiError(\n `Unexpected error while trying to ${operation}: ${\n error instanceof Error ? error.message : 'Unknown error'\n }`,\n );\n}\n"],"mappings":"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"}
|
package/dist/bin.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { I as POSTHOG_DOCS_URL,
|
|
3
|
-
import { t as analytics } from "./analytics-
|
|
4
|
-
import { r as setEntryCommand } from "./telemetry-
|
|
5
|
-
import { n as isUsingTypeScript } from "./setup-utils-
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import "./
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { n as
|
|
15
|
-
import { n as
|
|
2
|
+
import { $ as getSkillsBaseUrl, I as POSTHOG_DOCS_URL, Z as WIZARD_USER_AGENT, a as getLogFilePath, et as VERSION, h as LoggingUI, m as setUI, p as getUI, r as debug, s as logToFile } from "./debug-DXWxKT5f.js";
|
|
3
|
+
import { t as analytics } from "./analytics-DP_j88IC.js";
|
|
4
|
+
import { r as setEntryCommand } from "./telemetry-CR-ilpWe.js";
|
|
5
|
+
import { n as isUsingTypeScript } from "./setup-utils-DyTlaGOV.js";
|
|
6
|
+
import { o as getUiHostFromHost } from "./urls-ChWit8SE.js";
|
|
7
|
+
import { t as HostResolution } from "./host-resolution-Dw0fS8h5.js";
|
|
8
|
+
import { o as handleApiError } from "./api-Bdxv7mWH.js";
|
|
9
|
+
import "./wizard-session-BHoLQueN.js";
|
|
10
|
+
import { r as runCleanups } from "./wizard-abort-BE_j8xUt.js";
|
|
11
|
+
import { n as isNonInteractiveEnvironment } from "./environment-C4HyCWTC.js";
|
|
12
|
+
import { D as AUDIT_CHECKS_KEY, E as AUDIT_CHECKS_FILE, O as AUDIT_REPORT_FILE, f as AgentSignals, l as recoverOrphanedSettingsBackups, v as SETUP_REPORT_FILE, x as fetchSkillMenu, y as WIZARD_TOOL_NAMES } from "./agent-interface-CXL9i_vX.js";
|
|
13
|
+
import { i as SPINNER_MESSAGE } from "./registry-Dj17F0a-.js";
|
|
14
|
+
import { _ as parseRequirementsTxt, a as StatusPeekTrigger, c as isClearBlock, d as Colors, f as Icons, g as parsePyprojectToml, h as parsePipfile, i as PRODUCT_SUITE_BLOCK, n as FUNNEL_BLOCK, p as HEALTH_CHECK_STEP, r as LINE_CHART_BLOCK, t as posthogIntegrationConfig } from "./posthog-integration-Bj9WmwDq.js";
|
|
15
|
+
import { n as safeReadFile, r as walkProjectFiles, t as IGNORED_DIRS } from "./file-utils-CW8XbbZP.js";
|
|
16
|
+
import { n as readApiKeyFromEnv } from "./env-api-key-B3gE9Un0.js";
|
|
16
17
|
import { satisfies } from "semver";
|
|
17
18
|
import yargs from "yargs";
|
|
18
19
|
import { hideBin } from "yargs/helpers";
|
|
@@ -141,6 +142,11 @@ const GLOBAL_OPTIONS = {
|
|
|
141
142
|
type: "boolean",
|
|
142
143
|
hidden: true
|
|
143
144
|
},
|
|
145
|
+
"base-url": {
|
|
146
|
+
describe: "Override the PostHog base URL (e.g. http://localhost:8010), bypassing region resolution. Pins the API host, cloud URL, and OAuth server.\nenv: POSTHOG_WIZARD_BASE_URL",
|
|
147
|
+
type: "string",
|
|
148
|
+
hidden: true
|
|
149
|
+
},
|
|
144
150
|
benchmark: {
|
|
145
151
|
default: false,
|
|
146
152
|
describe: "Run in benchmark mode with per-phase token tracking\nenv: POSTHOG_WIZARD_BENCHMARK",
|
|
@@ -222,14 +228,15 @@ function runProvision(argv) {
|
|
|
222
228
|
email: argv.email,
|
|
223
229
|
region: argv.region.toUpperCase(),
|
|
224
230
|
name: argv.name ?? "",
|
|
231
|
+
baseUrl: argv.baseUrl,
|
|
225
232
|
jsonMode
|
|
226
233
|
});
|
|
227
234
|
}
|
|
228
|
-
async function provision({ email, region, name, jsonMode }) {
|
|
235
|
+
async function provision({ email, region, name, baseUrl, jsonMode }) {
|
|
229
236
|
try {
|
|
230
|
-
const { provisionNewAccount } = await import("./provisioning-
|
|
237
|
+
const { provisionNewAccount } = await import("./provisioning-BF2reo5_.js").then((n) => n.n);
|
|
231
238
|
if (!jsonMode) getUI().log.info(`Provisioning account for ${email} in ${region}...`);
|
|
232
|
-
emitResult(await provisionNewAccount(email, name, region), jsonMode);
|
|
239
|
+
emitResult(await provisionNewAccount(email, name, region, { baseUrl }), jsonMode);
|
|
233
240
|
process.exit(0);
|
|
234
241
|
} catch (error) {
|
|
235
242
|
emitError(error, jsonMode);
|
|
@@ -292,22 +299,22 @@ const basicIntegrationCommand = {
|
|
|
292
299
|
setEntryCommand("integrate");
|
|
293
300
|
(async () => {
|
|
294
301
|
if (isHeadless(argv)) {
|
|
295
|
-
const { runHeadlessInstall } = await import("./ci-install-
|
|
302
|
+
const { runHeadlessInstall } = await import("./ci-install-BO-KLPLD.js");
|
|
296
303
|
return runHeadlessInstall(argv);
|
|
297
304
|
}
|
|
298
305
|
if (argv.ci) {
|
|
299
|
-
const { runCIInstall } = await import("./ci-install-
|
|
306
|
+
const { runCIInstall } = await import("./ci-install-BO-KLPLD.js");
|
|
300
307
|
return runCIInstall(argv);
|
|
301
308
|
}
|
|
302
309
|
if (isNonInteractiveEnvironment()) {
|
|
303
|
-
const { failNonInteractive } = await import("./non-interactive-
|
|
310
|
+
const { failNonInteractive } = await import("./non-interactive-BW-MZYrP.js");
|
|
304
311
|
return failNonInteractive();
|
|
305
312
|
}
|
|
306
313
|
if (argv.playground) {
|
|
307
|
-
const { runPlayground } = await import("./playground-
|
|
314
|
+
const { runPlayground } = await import("./playground-xuLBqzJM.js");
|
|
308
315
|
return runPlayground();
|
|
309
316
|
}
|
|
310
|
-
const { runInteractive } = await import("./interactive-
|
|
317
|
+
const { runInteractive } = await import("./interactive-pwrc7QM-.js");
|
|
311
318
|
runInteractive(argv);
|
|
312
319
|
})();
|
|
313
320
|
}
|
|
@@ -1632,17 +1639,17 @@ const auditRun = async (session) => {
|
|
|
1632
1639
|
const baseRun = typeof baseConfig.run === "function" ? await baseConfig.run(session) : baseConfig.run;
|
|
1633
1640
|
return {
|
|
1634
1641
|
...baseRun,
|
|
1635
|
-
buildOutroData: (
|
|
1636
|
-
const cloudUrl = cloudRegion ?
|
|
1637
|
-
const continueUrl =
|
|
1642
|
+
buildOutroData: (session, _credentials, cloudRegion) => {
|
|
1643
|
+
const cloudUrl = cloudRegion ? HostResolution.fromRegion(cloudRegion, { baseUrl: session.baseUrl }).appHost : void 0;
|
|
1644
|
+
const continueUrl = session.signup && cloudUrl ? `${cloudUrl}/products?source=wizard` : void 0;
|
|
1638
1645
|
return {
|
|
1639
1646
|
kind: "success",
|
|
1640
1647
|
message: baseRun.successMessage,
|
|
1641
1648
|
reportFile: baseRun.reportFile,
|
|
1642
1649
|
docsUrl: baseRun.docsUrl,
|
|
1643
1650
|
continueUrl,
|
|
1644
|
-
dashboardUrl:
|
|
1645
|
-
notebookUrl:
|
|
1651
|
+
dashboardUrl: session.dashboardUrl ?? void 0,
|
|
1652
|
+
notebookUrl: session.notebookUrl ?? void 0
|
|
1646
1653
|
};
|
|
1647
1654
|
}
|
|
1648
1655
|
};
|
|
@@ -1798,7 +1805,7 @@ Project context:
|
|
|
1798
1805
|
- PostHog Host: ${ctx.host}
|
|
1799
1806
|
`,
|
|
1800
1807
|
buildOutroData: (sess, _credentials, cloudRegion) => {
|
|
1801
|
-
const cloudUrl = cloudRegion ?
|
|
1808
|
+
const cloudUrl = cloudRegion ? HostResolution.fromRegion(cloudRegion, { baseUrl: sess.baseUrl }).appHost : void 0;
|
|
1802
1809
|
return {
|
|
1803
1810
|
kind: "success",
|
|
1804
1811
|
message: "Your events audit was successful",
|
|
@@ -3836,24 +3843,25 @@ const mcpAddCommand = {
|
|
|
3836
3843
|
function runMcpAdd(argv) {
|
|
3837
3844
|
const features = parseFeatures(argv.features);
|
|
3838
3845
|
(async () => {
|
|
3839
|
-
const { readApiKeyFromEnv } = await import("./env-api-key-
|
|
3846
|
+
const { readApiKeyFromEnv } = await import("./env-api-key-B3gE9Un0.js").then((n) => n.t);
|
|
3840
3847
|
const apiKey = argv.apiKey || readApiKeyFromEnv();
|
|
3841
3848
|
const debug = argv.debug;
|
|
3842
3849
|
const localMcp = argv.local;
|
|
3843
3850
|
try {
|
|
3844
|
-
const { startTUI } = await import("./start-tui-
|
|
3845
|
-
const { buildSession } = await import("./wizard-session-
|
|
3851
|
+
const { startTUI } = await import("./start-tui-S4fBBfmO.js");
|
|
3852
|
+
const { buildSession } = await import("./wizard-session-D0PJ9lsl.js");
|
|
3846
3853
|
const tui = startTUI(VERSION, Program.McpAdd);
|
|
3847
3854
|
tui.store.session = buildSession({
|
|
3848
3855
|
debug,
|
|
3849
3856
|
localMcp,
|
|
3850
3857
|
mcpFeatures: features,
|
|
3851
|
-
apiKey
|
|
3858
|
+
apiKey,
|
|
3859
|
+
baseUrl: argv.baseUrl
|
|
3852
3860
|
});
|
|
3853
3861
|
} catch (error) {
|
|
3854
3862
|
if (!isTUIUnavailable(error)) throw error;
|
|
3855
3863
|
setUI(new LoggingUI());
|
|
3856
|
-
const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-
|
|
3864
|
+
const { addMCPServerToClientsStep } = await import("./add-mcp-server-to-clients-to65gLPl.js").then((n) => n.r);
|
|
3857
3865
|
await addMCPServerToClientsStep({
|
|
3858
3866
|
local: localMcp,
|
|
3859
3867
|
features,
|
|
@@ -3892,16 +3900,17 @@ function runMcpRemove(argv) {
|
|
|
3892
3900
|
const debug = argv.debug;
|
|
3893
3901
|
const localMcp = argv.local;
|
|
3894
3902
|
try {
|
|
3895
|
-
const { startTUI } = await import("./start-tui-
|
|
3896
|
-
const { buildSession } = await import("./wizard-session-
|
|
3903
|
+
const { startTUI } = await import("./start-tui-S4fBBfmO.js");
|
|
3904
|
+
const { buildSession } = await import("./wizard-session-D0PJ9lsl.js");
|
|
3897
3905
|
const tui = startTUI(VERSION, Program.McpRemove);
|
|
3898
3906
|
tui.store.session = buildSession({
|
|
3899
3907
|
debug,
|
|
3900
|
-
localMcp
|
|
3908
|
+
localMcp,
|
|
3909
|
+
baseUrl: argv.baseUrl
|
|
3901
3910
|
});
|
|
3902
3911
|
} catch {
|
|
3903
3912
|
setUI(new LoggingUI());
|
|
3904
|
-
const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-
|
|
3913
|
+
const { removeMCPServerFromClientsStep } = await import("./add-mcp-server-to-clients-to65gLPl.js").then((n) => n.r);
|
|
3905
3914
|
await removeMCPServerFromClientsStep({ local: localMcp });
|
|
3906
3915
|
}
|
|
3907
3916
|
})();
|
|
@@ -3923,12 +3932,13 @@ function runMcpTutorial(argv) {
|
|
|
3923
3932
|
const debug = argv.debug;
|
|
3924
3933
|
const localMcp = argv.local;
|
|
3925
3934
|
try {
|
|
3926
|
-
const { startTUI } = await import("./start-tui-
|
|
3927
|
-
const { buildSession } = await import("./wizard-session-
|
|
3935
|
+
const { startTUI } = await import("./start-tui-S4fBBfmO.js");
|
|
3936
|
+
const { buildSession } = await import("./wizard-session-D0PJ9lsl.js");
|
|
3928
3937
|
const tui = startTUI(VERSION, Program.McpTutorial);
|
|
3929
3938
|
tui.store.session = buildSession({
|
|
3930
3939
|
debug,
|
|
3931
|
-
localMcp
|
|
3940
|
+
localMcp,
|
|
3941
|
+
baseUrl: argv.baseUrl
|
|
3932
3942
|
});
|
|
3933
3943
|
} catch (err) {
|
|
3934
3944
|
setUI(new LoggingUI());
|
|
@@ -3978,10 +3988,10 @@ function runWizard(config, options) {
|
|
|
3978
3988
|
(async () => {
|
|
3979
3989
|
try {
|
|
3980
3990
|
const installDir = options.installDir || process.cwd();
|
|
3981
|
-
const { startTUI } = await import("./start-tui-
|
|
3982
|
-
const { buildSession, RunPhase } = await import("./wizard-session-
|
|
3983
|
-
const { TaskStreamPush } = await import("./task-stream-
|
|
3984
|
-
const { PostHogDestination } = await import("./posthog-
|
|
3991
|
+
const { startTUI } = await import("./start-tui-S4fBBfmO.js");
|
|
3992
|
+
const { buildSession, RunPhase } = await import("./wizard-session-D0PJ9lsl.js");
|
|
3993
|
+
const { TaskStreamPush } = await import("./task-stream-BVF6gi8x.js");
|
|
3994
|
+
const { PostHogDestination } = await import("./posthog-BrLFkaji.js");
|
|
3985
3995
|
tui = startTUI(WIZARD_VERSION, config.id);
|
|
3986
3996
|
const activeTui = tui;
|
|
3987
3997
|
const session = buildSession({
|
|
@@ -3993,6 +4003,7 @@ function runWizard(config, options) {
|
|
|
3993
4003
|
apiKey: options.apiKey,
|
|
3994
4004
|
projectId: options.projectId,
|
|
3995
4005
|
email: options.email,
|
|
4006
|
+
baseUrl: options.baseUrl,
|
|
3996
4007
|
benchmark: options.benchmark,
|
|
3997
4008
|
yaraReport: options.yaraReport,
|
|
3998
4009
|
noTelemetry: resolveNoTelemetry(options)
|
|
@@ -4034,12 +4045,13 @@ function runWizard(config, options) {
|
|
|
4034
4045
|
await activeTui.store.getGate("health-check");
|
|
4035
4046
|
const skipAgent = config.run == null;
|
|
4036
4047
|
if (skipAgent) {
|
|
4037
|
-
const { getOrAskForProjectData } = await import("./setup-utils-
|
|
4048
|
+
const { getOrAskForProjectData } = await import("./setup-utils-DyTlaGOV.js").then((n) => n.r);
|
|
4038
4049
|
const { projectApiKey, host, accessToken, projectId } = await getOrAskForProjectData({
|
|
4039
4050
|
signup: session.signup,
|
|
4040
4051
|
ci: session.ci,
|
|
4041
4052
|
apiKey: session.apiKey,
|
|
4042
4053
|
projectId: session.projectId,
|
|
4054
|
+
baseUrl: session.baseUrl,
|
|
4043
4055
|
programId: config.id
|
|
4044
4056
|
});
|
|
4045
4057
|
activeTui.store.setCredentials({
|
|
@@ -4049,7 +4061,7 @@ function runWizard(config, options) {
|
|
|
4049
4061
|
projectId
|
|
4050
4062
|
});
|
|
4051
4063
|
} else {
|
|
4052
|
-
const { runAgent } = await import("./agent-runner-
|
|
4064
|
+
const { runAgent } = await import("./agent-runner-CCTTG_Rn.js");
|
|
4053
4065
|
await runAgent(config, activeTui.store.session);
|
|
4054
4066
|
}
|
|
4055
4067
|
const isDone = () => skipAgent ? activeTui.store.session.outroDismissed : activeTui.store.session.skillsComplete;
|
|
@@ -4138,11 +4150,11 @@ function runNonInteractive(config, options, mode) {
|
|
|
4138
4150
|
analytics.setTag("build", mode);
|
|
4139
4151
|
(async () => {
|
|
4140
4152
|
const path = await import("path");
|
|
4141
|
-
const { buildSession, RunPhase, OutroKind } = await import("./wizard-session-
|
|
4142
|
-
const { readEnvironment } = await import("./environment-
|
|
4143
|
-
const { readApiKeyFromEnv } = await import("./env-api-key-
|
|
4144
|
-
const { configureLogFileFromEnvironment, logToFile } = await import("./debug-
|
|
4145
|
-
const { wizardAbort, WizardError } = await import("./wizard-abort-
|
|
4153
|
+
const { buildSession, RunPhase, OutroKind } = await import("./wizard-session-D0PJ9lsl.js");
|
|
4154
|
+
const { readEnvironment } = await import("./environment-C4HyCWTC.js").then((n) => n.t);
|
|
4155
|
+
const { readApiKeyFromEnv } = await import("./env-api-key-B3gE9Un0.js").then((n) => n.t);
|
|
4156
|
+
const { configureLogFileFromEnvironment, logToFile } = await import("./debug-Clw8ctxh.js");
|
|
4157
|
+
const { wizardAbort, WizardError } = await import("./wizard-abort-CNYxdjJl.js");
|
|
4146
4158
|
configureLogFileFromEnvironment();
|
|
4147
4159
|
const env = readEnvironment();
|
|
4148
4160
|
const apiKey = options.apiKey ?? readApiKeyFromEnv() ?? void 0;
|
|
@@ -4156,6 +4168,7 @@ function runNonInteractive(config, options, mode) {
|
|
|
4156
4168
|
apiKey,
|
|
4157
4169
|
email: options.email,
|
|
4158
4170
|
projectId: options.projectId,
|
|
4171
|
+
baseUrl: options.baseUrl,
|
|
4159
4172
|
benchmark: options.benchmark,
|
|
4160
4173
|
yaraReport: options.yaraReport,
|
|
4161
4174
|
noTelemetry: resolveNoTelemetry(options),
|
|
@@ -4169,9 +4182,9 @@ function runNonInteractive(config, options, mode) {
|
|
|
4169
4182
|
let store = null;
|
|
4170
4183
|
let taskStream = null;
|
|
4171
4184
|
if (mode === "headless") {
|
|
4172
|
-
const { WizardStore } = await import("./store-
|
|
4173
|
-
const { HeadlessUI } = await import("./headless-ui-
|
|
4174
|
-
const { TaskStreamPush, PostHogDestination } = await import("./task-stream-
|
|
4185
|
+
const { WizardStore } = await import("./store-vr5j37CU.js").then((n) => n.n);
|
|
4186
|
+
const { HeadlessUI } = await import("./headless-ui-BoZYhNpE.js");
|
|
4187
|
+
const { TaskStreamPush, PostHogDestination } = await import("./task-stream-BVF6gi8x.js");
|
|
4175
4188
|
store = new WizardStore(config.id);
|
|
4176
4189
|
store.session = session;
|
|
4177
4190
|
setUI(new HeadlessUI(store));
|
|
@@ -4226,7 +4239,7 @@ function runNonInteractive(config, options, mode) {
|
|
|
4226
4239
|
});
|
|
4227
4240
|
}
|
|
4228
4241
|
}
|
|
4229
|
-
const { runAgent } = await import("./agent-runner-
|
|
4242
|
+
const { runAgent } = await import("./agent-runner-CCTTG_Rn.js");
|
|
4230
4243
|
await runAgent(config, session);
|
|
4231
4244
|
await settleStream(RunPhase.Completed);
|
|
4232
4245
|
} catch (error) {
|
|
@@ -5153,12 +5166,13 @@ async function runDoctorCI(options) {
|
|
|
5153
5166
|
getUI().intro("Welcome to the PostHog setup wizard");
|
|
5154
5167
|
getUI().log.info("Running posthog-doctor in CI mode");
|
|
5155
5168
|
try {
|
|
5156
|
-
const { getOrAskForProjectData } = await import("./setup-utils-
|
|
5169
|
+
const { getOrAskForProjectData } = await import("./setup-utils-DyTlaGOV.js").then((n) => n.r);
|
|
5157
5170
|
const { host, accessToken, projectId } = await getOrAskForProjectData({
|
|
5158
5171
|
signup: false,
|
|
5159
5172
|
ci: true,
|
|
5160
5173
|
apiKey,
|
|
5161
|
-
projectId: options.projectId ? Number(options.projectId) : void 0
|
|
5174
|
+
projectId: options.projectId ? Number(options.projectId) : void 0,
|
|
5175
|
+
baseUrl: options.baseUrl
|
|
5162
5176
|
});
|
|
5163
5177
|
const issues = await fetchHealthIssues(accessToken, host, projectId);
|
|
5164
5178
|
if (issues.length === 0) {
|
|
@@ -5170,7 +5184,7 @@ async function runDoctorCI(options) {
|
|
|
5170
5184
|
for (const issue of sorted) getUI().log.info(` • [${issue.severity}] ${getKindMeta(issue.kind).title}`);
|
|
5171
5185
|
process.exit(1);
|
|
5172
5186
|
} catch (error) {
|
|
5173
|
-
const { ApiError } = await import("./api-
|
|
5187
|
+
const { ApiError } = await import("./api-Bdxv7mWH.js").then((n) => n.n);
|
|
5174
5188
|
const message = error instanceof ApiError && error.statusCode === 401 ? "Your PostHog API key is invalid or expired." : error instanceof Error ? error.message : String(error);
|
|
5175
5189
|
getUI().log.error(`Doctor failed: ${message}`);
|
|
5176
5190
|
process.exit(1);
|
|
@@ -5247,10 +5261,13 @@ function runSlackConnect(argv) {
|
|
|
5247
5261
|
(async () => {
|
|
5248
5262
|
const debug = argv.debug;
|
|
5249
5263
|
try {
|
|
5250
|
-
const { startTUI } = await import("./start-tui-
|
|
5251
|
-
const { buildSession } = await import("./wizard-session-
|
|
5264
|
+
const { startTUI } = await import("./start-tui-S4fBBfmO.js");
|
|
5265
|
+
const { buildSession } = await import("./wizard-session-D0PJ9lsl.js");
|
|
5252
5266
|
const tui = startTUI(VERSION, Program.SlackConnect);
|
|
5253
|
-
tui.store.session = buildSession({
|
|
5267
|
+
tui.store.session = buildSession({
|
|
5268
|
+
debug,
|
|
5269
|
+
baseUrl: argv.baseUrl
|
|
5270
|
+
});
|
|
5254
5271
|
} catch (err) {
|
|
5255
5272
|
setUI(new LoggingUI());
|
|
5256
5273
|
getUI().log.error(`Connecting Slack requires an interactive terminal. ${err instanceof Error ? err.message : String(err)}`);
|