@clerk/backend 3.0.0-snapshot.v20260114034743 → 3.0.0-snapshot.v20260114114137

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.
@@ -3,6 +3,16 @@ export declare const API_VERSION = "v1";
3
3
  export declare const USER_AGENT: string;
4
4
  export declare const MAX_CACHE_LAST_UPDATED_AT_SECONDS: number;
5
5
  export declare const SUPPORTED_BAPI_VERSION = "2025-11-10";
6
+ /**
7
+ * Sync status values for the __clerk_sync query parameter.
8
+ * Used to coordinate satellite domain authentication flows.
9
+ */
10
+ export declare const ClerkSyncStatus: {
11
+ /** Trigger sync - satellite needs to handshake after returning from primary sign-in */
12
+ readonly NeedsSync: "1";
13
+ /** Sync completed - prevents re-sync loop after handshake completes */
14
+ readonly Completed: "2";
15
+ };
6
16
  /**
7
17
  * @internal
8
18
  */
@@ -58,7 +68,9 @@ export declare const constants: {
58
68
  readonly Json: "application/json";
59
69
  };
60
70
  readonly QueryParameters: {
71
+ /** @deprecated Use ClerkSync with ClerkSyncStatus instead */
61
72
  readonly ClerkSynced: "__clerk_synced";
73
+ readonly ClerkSync: "__clerk_sync";
62
74
  readonly SuffixedCookies: "suffixed_cookies";
63
75
  readonly ClerkRedirectUrl: "__clerk_redirect_url";
64
76
  readonly DevBrowser: "__clerk_db_jwt";
@@ -70,6 +82,12 @@ export declare const constants: {
70
82
  readonly HandshakeFormat: "format";
71
83
  readonly Session: "__session";
72
84
  };
85
+ readonly ClerkSyncStatus: {
86
+ /** Trigger sync - satellite needs to handshake after returning from primary sign-in */
87
+ readonly NeedsSync: "1";
88
+ /** Sync completed - prevents re-sync loop after handshake completes */
89
+ readonly Completed: "2";
90
+ };
73
91
  };
74
92
  export type Constants = typeof constants;
75
93
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,0BAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,OAAO,CAAC;AAEhC,eAAO,MAAM,UAAU,QAAuC,CAAC;AAC/D,eAAO,MAAM,iCAAiC,QAAS,CAAC;AACxD,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAuEnD;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAMZ,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,0BAA0B,CAAC;AAC/C,eAAO,MAAM,WAAW,OAAO,CAAC;AAEhC,eAAO,MAAM,UAAU,QAAuC,CAAC;AAC/D,eAAO,MAAM,iCAAiC,QAAS,CAAC;AACxD,eAAO,MAAM,sBAAsB,eAAe,CAAC;AAyEnD;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,uFAAuF;;IAEvF,uEAAuE;;CAE/D,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAjEpB,6DAA6D;;;;;;;;;;;;;;;QAwD7D,uFAAuF;;QAEvF,uEAAuE;;;CAc/D,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1870,7 +1870,7 @@ var snakecase_keys_default = snakecaseKeys;
1870
1870
  // src/constants.ts
1871
1871
  var API_URL = "https://api.clerk.com";
1872
1872
  var API_VERSION = "v1";
1873
- var USER_AGENT = `${"@clerk/backend"}@${"3.0.0-snapshot.v20260114034743"}`;
1873
+ var USER_AGENT = `${"@clerk/backend"}@${"3.0.0-snapshot.v20260114114137"}`;
1874
1874
  var MAX_CACHE_LAST_UPDATED_AT_SECONDS = 5 * 60;
1875
1875
  var SUPPORTED_BAPI_VERSION = "2025-11-10";
1876
1876
  var Attributes = {
@@ -1891,7 +1891,9 @@ var Cookies = {
1891
1891
  HandshakeNonce: "__clerk_handshake_nonce"
1892
1892
  };
1893
1893
  var QueryParameters = {
1894
+ /** @deprecated Use ClerkSync with ClerkSyncStatus instead */
1894
1895
  ClerkSynced: "__clerk_synced",
1896
+ ClerkSync: "__clerk_sync",
1895
1897
  SuffixedCookies: "suffixed_cookies",
1896
1898
  ClerkRedirectUrl: "__clerk_redirect_url",
1897
1899
  // use the reference to Cookies to indicate that it's the same value
@@ -1937,12 +1939,19 @@ var Headers2 = {
1937
1939
  var ContentTypes = {
1938
1940
  Json: "application/json"
1939
1941
  };
1942
+ var ClerkSyncStatus = {
1943
+ /** Trigger sync - satellite needs to handshake after returning from primary sign-in */
1944
+ NeedsSync: "1",
1945
+ /** Sync completed - prevents re-sync loop after handshake completes */
1946
+ Completed: "2"
1947
+ };
1940
1948
  var constants = {
1941
1949
  Attributes,
1942
1950
  Cookies,
1943
1951
  Headers: Headers2,
1944
1952
  ContentTypes,
1945
- QueryParameters
1953
+ QueryParameters,
1954
+ ClerkSyncStatus
1946
1955
  };
1947
1956
 
1948
1957
  // src/util/optionsAssertions.ts
@@ -5870,17 +5879,46 @@ var authenticateRequest = (async (request, options) => {
5870
5879
  }
5871
5880
  }
5872
5881
  const isRequestEligibleForMultiDomainSync = authenticateContext.isSatellite && authenticateContext.secFetchDest === "document";
5873
- if (authenticateContext.instanceType === "production" && isRequestEligibleForMultiDomainSync) {
5874
- return handleMaybeHandshakeStatus(authenticateContext, AuthErrorReason.SatelliteCookieNeedsSyncing, "");
5875
- }
5876
- if (authenticateContext.instanceType === "development" && isRequestEligibleForMultiDomainSync && !authenticateContext.clerkUrl.searchParams.has(constants.QueryParameters.ClerkSynced)) {
5877
- const redirectURL = new URL(authenticateContext.signInUrl);
5878
- redirectURL.searchParams.append(
5879
- constants.QueryParameters.ClerkRedirectUrl,
5880
- authenticateContext.clerkUrl.toString()
5881
- );
5882
- const headers = new Headers({ [constants.Headers.Location]: redirectURL.toString() });
5883
- return handleMaybeHandshakeStatus(authenticateContext, AuthErrorReason.SatelliteCookieNeedsSyncing, "", headers);
5882
+ const syncStatus = authenticateContext.clerkUrl.searchParams.get(constants.QueryParameters.ClerkSync);
5883
+ const needsSync = syncStatus === constants.ClerkSyncStatus.NeedsSync;
5884
+ const legacySynced = authenticateContext.clerkUrl.searchParams.get(constants.QueryParameters.ClerkSynced) === "true";
5885
+ const syncCompleted = syncStatus === constants.ClerkSyncStatus.Completed || legacySynced;
5886
+ const hasCookies = hasSessionToken || hasActiveClient;
5887
+ const shouldSkipSatelliteHandshake = authenticateContext.satelliteAutoSync === false && !hasCookies && !needsSync;
5888
+ if (authenticateContext.instanceType === "production" && isRequestEligibleForMultiDomainSync && !syncCompleted) {
5889
+ if (shouldSkipSatelliteHandshake) {
5890
+ return signedOut({
5891
+ tokenType: TokenType.SessionToken,
5892
+ authenticateContext,
5893
+ reason: AuthErrorReason.SessionTokenAndUATMissing
5894
+ });
5895
+ }
5896
+ if (!hasCookies || needsSync) {
5897
+ return handleMaybeHandshakeStatus(authenticateContext, AuthErrorReason.SatelliteCookieNeedsSyncing, "");
5898
+ }
5899
+ }
5900
+ if (authenticateContext.instanceType === "development" && isRequestEligibleForMultiDomainSync && !syncCompleted) {
5901
+ if (shouldSkipSatelliteHandshake) {
5902
+ return signedOut({
5903
+ tokenType: TokenType.SessionToken,
5904
+ authenticateContext,
5905
+ reason: AuthErrorReason.SessionTokenAndUATMissing
5906
+ });
5907
+ }
5908
+ if (!hasCookies || needsSync) {
5909
+ const redirectURL = new URL(authenticateContext.signInUrl);
5910
+ redirectURL.searchParams.append(
5911
+ constants.QueryParameters.ClerkRedirectUrl,
5912
+ authenticateContext.clerkUrl.toString()
5913
+ );
5914
+ const headers = new Headers({ [constants.Headers.Location]: redirectURL.toString() });
5915
+ return handleMaybeHandshakeStatus(
5916
+ authenticateContext,
5917
+ AuthErrorReason.SatelliteCookieNeedsSyncing,
5918
+ "",
5919
+ headers
5920
+ );
5921
+ }
5884
5922
  }
5885
5923
  const redirectUrl = new URL(authenticateContext.clerkUrl).searchParams.get(
5886
5924
  constants.QueryParameters.ClerkRedirectUrl
@@ -5893,7 +5931,10 @@ var authenticateRequest = (async (request, options) => {
5893
5931
  authenticateContext.devBrowserToken
5894
5932
  );
5895
5933
  }
5896
- redirectBackToSatelliteUrl.searchParams.append(constants.QueryParameters.ClerkSynced, "true");
5934
+ redirectBackToSatelliteUrl.searchParams.set(
5935
+ constants.QueryParameters.ClerkSync,
5936
+ constants.ClerkSyncStatus.Completed
5937
+ );
5897
5938
  const headers = new Headers({ [constants.Headers.Location]: redirectBackToSatelliteUrl.toString() });
5898
5939
  return handleMaybeHandshakeStatus(authenticateContext, AuthErrorReason.PrimaryRespondsToSyncing, "", headers);
5899
5940
  }