feat: prefer SALEOR_API_URL env var over stored auth URL
- NormalizingAPL now checks for SALEOR_API_URL env var - If set, uses env var URL for API calls while keeping stored token - Enables internal K8s networking without reinstallation - Makes app portable across different network configurations The app stores auth data during installation, but at runtime uses SALEOR_API_URL for API calls. This allows deployment with internal networking (e.g., http://saleor-api.saleor:8000) while keeping the same token from installation.
This commit is contained in:
+25
-2
@@ -3,7 +3,9 @@ import { SaleorApp } from "@saleor/app-sdk/saleor-app";
|
|||||||
import { FileAPL } from "@saleor/app-sdk/APL/file";
|
import { FileAPL } from "@saleor/app-sdk/APL/file";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APL wrapper that normalizes HTTP to HTTPS for auth data lookups
|
* APL wrapper that:
|
||||||
|
* 1. Normalizes HTTP to HTTPS for auth data lookups (for Cloudflare compatibility)
|
||||||
|
* 2. Prefers SALEOR_API_URL env var over stored auth URL (for internal networking)
|
||||||
*/
|
*/
|
||||||
class NormalizingAPL implements APL {
|
class NormalizingAPL implements APL {
|
||||||
private apl: FileAPL;
|
private apl: FileAPL;
|
||||||
@@ -16,10 +18,31 @@ class NormalizingAPL implements APL {
|
|||||||
return url.replace(/^http:\/\//, "https://");
|
return url.replace(/^http:\/\//, "https://");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get auth data and optionally override saleorApiUrl with env var
|
||||||
|
*/
|
||||||
async get(saleorApiUrl: string): Promise<AuthData | undefined> {
|
async get(saleorApiUrl: string): Promise<AuthData | undefined> {
|
||||||
const normalizedUrl = this.normalizeUrl(saleorApiUrl);
|
const normalizedUrl = this.normalizeUrl(saleorApiUrl);
|
||||||
console.log(`[NormalizingAPL] Looking up auth for: ${saleorApiUrl} -> ${normalizedUrl}`);
|
console.log(`[NormalizingAPL] Looking up auth for: ${saleorApiUrl} -> ${normalizedUrl}`);
|
||||||
return this.apl.get(normalizedUrl);
|
|
||||||
|
const authData = await this.apl.get(normalizedUrl);
|
||||||
|
|
||||||
|
if (!authData) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If SALEOR_API_URL is set, prefer it over the stored URL
|
||||||
|
// This enables internal networking (e.g., http://saleor-api.saleor:8000)
|
||||||
|
// while still using the stored token for authentication
|
||||||
|
if (process.env.SALEOR_API_URL) {
|
||||||
|
console.log(`[NormalizingAPL] Using SALEOR_API_URL: ${process.env.SALEOR_API_URL} (env var overrides stored: ${authData.saleorApiUrl})`);
|
||||||
|
return {
|
||||||
|
...authData,
|
||||||
|
saleorApiUrl: process.env.SALEOR_API_URL,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return authData;
|
||||||
}
|
}
|
||||||
|
|
||||||
async set(authData: AuthData): Promise<void> {
|
async set(authData: AuthData): Promise<void> {
|
||||||
|
|||||||
Reference in New Issue
Block a user