@jhizzard/termdeck 0.7.2 → 0.8.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.
@@ -39,6 +39,18 @@
39
39
 
40
40
  const { spawnSync } = require('child_process');
41
41
  const pgRunner = require('./pg-runner');
42
+ const supabaseUrlHelper = require('./supabase-url');
43
+
44
+ // Build the project-specific Supabase dashboard URL for the Database →
45
+ // Extensions page when SUPABASE_URL is derivable, else null. Sprint 35 T3:
46
+ // previous hints said "Database → Extensions" with no clickable target —
47
+ // this gives the user a one-click landing page.
48
+ function extensionsDashboardUrl(secrets) {
49
+ if (!secrets || !secrets.SUPABASE_URL) return null;
50
+ const parsed = supabaseUrlHelper.parseProjectUrl(secrets.SUPABASE_URL);
51
+ if (!parsed.ok) return null;
52
+ return `https://supabase.com/dashboard/project/${parsed.projectRef}/database/extensions`;
53
+ }
42
54
 
43
55
  // Render a single gap into 2-3 lines of CLI output (one indented hint per
44
56
  // non-empty `hint` line). Format aligned with the rest of the wizard's
@@ -144,6 +156,13 @@ async function auditRumenPreconditions({ secrets, env, _pgClient } = {}) {
144
156
  return { ok: gaps.length === 0, gaps };
145
157
  }
146
158
 
159
+ // Project-specific dashboard URL for missing-extension hints. Falls back
160
+ // to generic copy when SUPABASE_URL isn't derivable.
161
+ const dashboardUrl = extensionsDashboardUrl(secrets);
162
+ const dashboardLine = dashboardUrl
163
+ ? ` Open: ${dashboardUrl}\n Search for the extension and toggle it ON.`
164
+ : ' Database → Extensions → toggle ON';
165
+
147
166
  try {
148
167
  // pg_cron extension
149
168
  const cron = await safeQuery(client,
@@ -153,8 +172,8 @@ async function auditRumenPreconditions({ secrets, env, _pgClient } = {}) {
153
172
  key: 'pg_cron',
154
173
  message: 'The pg_cron extension is not enabled on this Supabase project',
155
174
  hint:
156
- 'Enable it in the Supabase dashboard:\n' +
157
- ' Database Extensions → pg_cron → toggle ON\n' +
175
+ 'Enable pg_cron in the Supabase dashboard:\n' +
176
+ dashboardLine + '\n' +
158
177
  '(Without pg_cron, the rumen-tick schedule cannot run.)'
159
178
  });
160
179
  }
@@ -167,8 +186,8 @@ async function auditRumenPreconditions({ secrets, env, _pgClient } = {}) {
167
186
  key: 'pg_net',
168
187
  message: 'The pg_net extension is not enabled on this Supabase project',
169
188
  hint:
170
- 'Enable it in the Supabase dashboard:\n' +
171
- ' Database Extensions → pg_net → toggle ON\n' +
189
+ 'Enable pg_net in the Supabase dashboard:\n' +
190
+ dashboardLine + '\n' +
172
191
  '(pg_net is what the cron schedule uses to call the Edge Function.)'
173
192
  });
174
193
  }
@@ -364,6 +383,7 @@ module.exports = {
364
383
  verifyMnestraOutcomes,
365
384
  printAuditReport,
366
385
  printVerifyReport,
386
+ extensionsDashboardUrl,
367
387
  // Test surface
368
388
  _probeSupabaseAuth: probeSupabaseAuth,
369
389
  _safeQuery: safeQuery