Skip to content

Commit fb49d11

Browse files
committed
analytics domain override
1 parent f1fde88 commit fb49d11

3 files changed

Lines changed: 20 additions & 3 deletions

File tree

packages/stack-shared/src/interface/client-interface.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export type ClientInterfaceOptions = {
3636
clientVersion: string,
3737
// This is a function instead of a string because it might be different based on the environment (for example client vs server)
3838
getBaseUrl: () => string,
39+
getAnalyticsBaseUrl?: () => string,
3940
extraRequestHeaders: Record<string, string>,
4041
projectId: string,
4142
prepareRequest?: () => Promise<void>,
@@ -60,6 +61,10 @@ export class StackClientInterface {
6061
return this.options.getBaseUrl() + "/api/v1";
6162
}
6263

64+
getAnalyticsApiUrl() {
65+
return (this.options.getAnalyticsBaseUrl ?? this.options.getBaseUrl)() + "/api/v1";
66+
}
67+
6368
public async runNetworkDiagnostics(session?: InternalSession | null, requestType?: "client" | "server" | "admin") {
6469
if (this.pendingNetworkDiagnostics) {
6570
return await this.pendingNetworkDiagnostics;
@@ -224,13 +229,14 @@ export class StackClientInterface {
224229
requestOptions: RequestInit,
225230
session: InternalSession | null,
226231
requestType: "client" | "server" | "admin" = "client",
232+
apiUrlOverride?: string,
227233
) {
228234
session ??= this.createSession({
229235
refreshToken: null,
230236
});
231237

232238
return await this._networkRetry(
233-
() => this.sendClientRequestInner(path, requestOptions, session!, requestType),
239+
() => this.sendClientRequestInner(path, requestOptions, session!, requestType, apiUrlOverride),
234240
session,
235241
requestType,
236242
);
@@ -259,6 +265,8 @@ export class StackClientInterface {
259265
keepalive: options.keepalive,
260266
},
261267
session,
268+
"client",
269+
this.getAnalyticsApiUrl(),
262270
);
263271
return Result.ok(response);
264272
} catch (e) {
@@ -281,6 +289,8 @@ export class StackClientInterface {
281289
keepalive: options.keepalive,
282290
},
283291
session,
292+
"client",
293+
this.getAnalyticsApiUrl(),
284294
);
285295
return Result.ok(response);
286296
} catch (e) {
@@ -319,6 +329,7 @@ export class StackClientInterface {
319329
options: RequestInit,
320330
session: InternalSession,
321331
requestType: "client" | "server" | "admin",
332+
apiUrlOverride?: string,
322333
): Promise<Result<Response & {
323334
usedTokens: {
324335
accessToken: AccessToken,
@@ -353,7 +364,7 @@ export class StackClientInterface {
353364
// all requests should be dynamic to prevent Next.js caching
354365
await this.options.prepareRequest?.();
355366

356-
let url = this.getApiUrl() + path;
367+
let url = (apiUrlOverride ?? this.getApiUrl()) + path;
357368
if (url.endsWith("/")) {
358369
url = url.slice(0, -1);
359370
}

packages/template/src/lib/stack-app/apps/implementations/client-app-impl.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ import { EditableTeamMemberProfile, Team, TeamCreateOptions, TeamInvitation, Tea
5252
import { ActiveSession, Auth, BaseUser, CurrentUser, InternalUserExtra, OAuthProvider, ProjectCurrentUser, SyncedPartialUser, TokenPartialUser, UserExtra, UserUpdateOptions, userUpdateOptionsToCrud, withUserDestructureGuard } from "../../users";
5353
import { StackClientApp, StackClientAppConstructorOptions, StackClientAppJson } from "../interfaces/client-app";
5454
import { _StackAdminAppImplIncomplete } from "./admin-app-impl";
55-
import { TokenObject, clientVersion, createCache, createCacheBySession, createEmptyTokenStore, getBaseUrl, getDefaultExtraRequestHeaders, getDefaultProjectId, getDefaultPublishableClientKey, getUrls, resolveConstructorOptions } from "./common";
55+
import { TokenObject, clientVersion, createCache, createCacheBySession, createEmptyTokenStore, getAnalyticsBaseUrl, getBaseUrl, getDefaultExtraRequestHeaders, getDefaultProjectId, getDefaultPublishableClientKey, getUrls, resolveConstructorOptions } from "./common";
5656
import { EventTracker } from "./event-tracker";
5757
import { AnalyticsOptions, SessionRecorder, analyticsOptionsFromJson, analyticsOptionsToJson } from "./session-replay";
5858

@@ -417,6 +417,7 @@ export class _StackClientAppImplIncomplete<HasTokenStore extends boolean, Projec
417417
} else {
418418
this._interface = new StackClientInterface({
419419
getBaseUrl: () => getBaseUrl(resolvedOptions.baseUrl),
420+
getAnalyticsBaseUrl: () => getAnalyticsBaseUrl(getBaseUrl(resolvedOptions.baseUrl)),
420421
extraRequestHeaders: resolvedOptions.extraRequestHeaders ?? getDefaultExtraRequestHeaders(),
421422
projectId,
422423
clientVersion,

packages/template/src/lib/stack-app/apps/implementations/common.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,11 @@ export function getBaseUrl(userSpecifiedBaseUrl: string | { browser: string, ser
144144
return replaceStackPortPrefix(url.endsWith('/') ? url.slice(0, -1) : url);
145145
}
146146
export const defaultBaseUrl = "https://api.stack-auth.com";
147+
export const defaultAnalyticsBaseUrl = "https://r.stack-auth.com";
148+
149+
export function getAnalyticsBaseUrl(regularBaseUrl: string): string {
150+
return regularBaseUrl === defaultBaseUrl ? defaultAnalyticsBaseUrl : regularBaseUrl;
151+
}
147152

148153
export type TokenObject = {
149154
accessToken: string | null,

0 commit comments

Comments
 (0)