@supacloud/admin 0.1.5 → 0.1.6

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/index.js CHANGED
@@ -4757,6 +4757,11 @@ var require_utils = __commonJS((exports, module) => {
4757
4757
  };
4758
4758
  });
4759
4759
 
4760
+ // node_modules/ssh2/lib/protocol/crypto/build/Release/sshcrypto.node
4761
+ var require_sshcrypto = __commonJS((exports, module) => {
4762
+ module.exports = __require("./sshcrypto-w7mnkyjv.node");
4763
+ });
4764
+
4760
4765
  // node_modules/ssh2/lib/protocol/crypto/poly1305.js
4761
4766
  var require_poly1305 = __commonJS((exports, module) => {
4762
4767
  var __dirname = "/home/runner/work/supacloud/supacloud/packages/admin/node_modules/ssh2/lib/protocol/crypto", __filename = "/home/runner/work/supacloud/supacloud/packages/admin/node_modules/ssh2/lib/protocol/crypto/poly1305.js";
@@ -5243,7 +5248,7 @@ var require_crypto = __commonJS((exports, module) => {
5243
5248
  var ChaChaPolyDecipher;
5244
5249
  var GenericDecipher;
5245
5250
  try {
5246
- binding = (()=>{throw new Error("Cannot require module "+"./crypto/build/Release/sshcrypto.node");})();
5251
+ binding = require_sshcrypto();
5247
5252
  ({
5248
5253
  AESGCMCipher,
5249
5254
  ChaChaPolyCipher,
@@ -23019,26 +23024,69 @@ function detectSource(sources) {
23019
23024
  return present.has("env") ? "env" : "dotenv";
23020
23025
  return "mixed";
23021
23026
  }
23027
+ function normalizeUrl(value) {
23028
+ const trimmed = value.trim().replace(/\/+$/, "");
23029
+ if (!trimmed)
23030
+ return "";
23031
+ try {
23032
+ return new URL(trimmed).toString().replace(/\/+$/, "");
23033
+ } catch {
23034
+ return "";
23035
+ }
23036
+ }
23037
+ function hostFromUrl(value) {
23038
+ try {
23039
+ return new URL(value).hostname;
23040
+ } catch {
23041
+ return "";
23042
+ }
23043
+ }
23044
+ function inferManagementApiUrlFromSupabaseUrl(value, projectRef = "") {
23045
+ const normalized = normalizeUrl(value);
23046
+ if (!normalized)
23047
+ return "";
23048
+ const url = new URL(normalized);
23049
+ const host = url.hostname;
23050
+ if (host.startsWith("api.")) {
23051
+ url.hostname = `studio.${host.slice("api.".length)}`;
23052
+ return url.toString().replace(/\/+$/, "");
23053
+ }
23054
+ const ref = projectRef.trim();
23055
+ if (ref && host.startsWith(`${ref}.api.`)) {
23056
+ url.hostname = `studio-${ref}.${host.slice(`${ref}.api.`.length)}`;
23057
+ return url.toString().replace(/\/+$/, "");
23058
+ }
23059
+ const managedHostMatch = host.match(/^([a-z0-9-]+)\.api\.(.+)$/i);
23060
+ if (managedHostMatch) {
23061
+ url.hostname = `studio-${managedHostMatch[1]}.${managedHostMatch[2]}`;
23062
+ return url.toString().replace(/\/+$/, "");
23063
+ }
23064
+ return normalized;
23065
+ }
23022
23066
  function resolveSupaCloudContext(env = process.env, cwd = process.cwd()) {
23023
23067
  const dotenv = readDotEnvFile(cwd);
23024
- const inferredUrl = pickValue(env, dotenv, ["SUPABASE_URL", "SUPACLOUD_API_URL"]);
23068
+ const supabaseUrl = pickValue(env, dotenv, ["SUPABASE_URL"]);
23069
+ const explicitApiUrl = pickValue(env, dotenv, ["SUPACLOUD_API_URL", "SUPACLOUD_MANAGEMENT_API_URL", "MANAGEMENT_API_URL"]);
23025
23070
  const inferredToken = pickValue(env, dotenv, ["SUPABASE_SERVICE_ROLE_KEY", "SUPACLOUD_API_TOKEN"]);
23071
+ const projectRef = pickValue(env, dotenv, ["SUPACLOUD_PROJECT_REF", "X_PROJECT_REF"]).value;
23026
23072
  const hostFromEnv = env.SUPACLOUD_HOST;
23027
- const hostFromUrl = inferredUrl.value ? new URL(inferredUrl.value).hostname : "";
23073
+ const normalizedSupabaseUrl = normalizeUrl(supabaseUrl.value);
23074
+ const apiUrl = normalizeUrl(explicitApiUrl.value) || inferManagementApiUrlFromSupabaseUrl(normalizedSupabaseUrl, projectRef) || (hostFromEnv ? `http://${hostFromEnv}:9090` : "");
23075
+ const resolvedHostFromUrl = hostFromUrl(apiUrl || normalizedSupabaseUrl);
23028
23076
  return {
23029
- host: hostFromEnv ?? hostFromUrl,
23077
+ host: hostFromEnv ?? resolvedHostFromUrl,
23030
23078
  sshUser: env.SUPACLOUD_SSH_USER ?? "root",
23031
23079
  sshPort: parseInt(env.SUPACLOUD_SSH_PORT ?? "22", 10),
23032
23080
  sshKey: env.SUPACLOUD_SSH_KEY ?? resolve(homedir(), ".ssh", "id_rsa"),
23033
23081
  sshPass: env.SUPACLOUD_SSH_PASS ?? "",
23034
- apiUrl: env.SUPACLOUD_API_URL ?? (inferredUrl.value ? inferredUrl.value.replace(/\/+$/, "") : hostFromEnv ? `http://${hostFromEnv}:9090` : ""),
23082
+ apiUrl,
23035
23083
  apiToken: env.SUPACLOUD_API_TOKEN ?? inferredToken.value,
23036
- projectRef: env.SUPACLOUD_PROJECT_REF ?? "",
23084
+ projectRef,
23037
23085
  readOnly: env.SUPACLOUD_READ_ONLY === "true",
23038
- inferredSupabaseUrl: inferredUrl.value,
23086
+ inferredSupabaseUrl: normalizedSupabaseUrl,
23039
23087
  inferredServiceRoleKey: inferredToken.value,
23040
23088
  source: detectSource([
23041
- inferredUrl.value ? inferredUrl.source : "none",
23089
+ supabaseUrl.value || explicitApiUrl.value ? supabaseUrl.value ? supabaseUrl.source : explicitApiUrl.source : "none",
23042
23090
  inferredToken.value ? inferredToken.source : "none"
23043
23091
  ])
23044
23092
  };
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@supacloud/admin",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Platform administration CLI for SupaCloud operators",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",