@oxyhq/core 12.11.1 → 13.0.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.
Files changed (41) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/index.js +2 -12
  3. package/dist/cjs/mixins/OxyServices.deviceBoot.js +0 -31
  4. package/dist/cjs/server/index.js +1 -6
  5. package/dist/cjs/server/rateLimit.js +3 -0
  6. package/dist/cjs/session/accountDialogController.js +6 -8
  7. package/dist/cjs/utils/oauthPkce.js +1 -5
  8. package/dist/cjs/utils/officialOrigins.js +3 -73
  9. package/dist/esm/.tsbuildinfo +1 -1
  10. package/dist/esm/index.js +2 -3
  11. package/dist/esm/mixins/OxyServices.deviceBoot.js +1 -32
  12. package/dist/esm/server/index.js +1 -1
  13. package/dist/esm/server/rateLimit.js +3 -0
  14. package/dist/esm/session/accountDialogController.js +6 -8
  15. package/dist/esm/utils/oauthPkce.js +0 -4
  16. package/dist/esm/utils/officialOrigins.js +3 -68
  17. package/dist/types/.tsbuildinfo +1 -1
  18. package/dist/types/index.d.ts +3 -5
  19. package/dist/types/mixins/OxyServices.auth.d.ts +1 -12
  20. package/dist/types/mixins/OxyServices.deviceBoot.d.ts +1 -5
  21. package/dist/types/server/index.d.ts +1 -1
  22. package/dist/types/session/accountDialogController.d.ts +9 -15
  23. package/dist/types/utils/oauthPkce.d.ts +11 -7
  24. package/dist/types/utils/officialOrigins.d.ts +3 -13
  25. package/package.json +3 -3
  26. package/src/index.ts +6 -14
  27. package/src/mixins/OxyServices.auth.ts +6 -13
  28. package/src/mixins/OxyServices.deviceBoot.ts +0 -47
  29. package/src/mixins/__tests__/commonsSignIn.test.ts +9 -2
  30. package/src/server/index.ts +1 -8
  31. package/src/server/rateLimit.ts +3 -0
  32. package/src/session/__tests__/accountDialogController.test.ts +3 -5
  33. package/src/session/accountDialogController.ts +12 -18
  34. package/src/utils/__tests__/officialOrigins.test.ts +0 -57
  35. package/src/utils/oauthPkce.ts +11 -9
  36. package/src/utils/officialOrigins.ts +3 -70
  37. package/dist/cjs/session/hubSync.js +0 -55
  38. package/dist/esm/session/hubSync.js +0 -51
  39. package/dist/types/session/hubSync.d.ts +0 -20
  40. package/src/session/__tests__/hubSync.test.ts +0 -51
  41. package/src/session/hubSync.ts +0 -79
package/dist/cjs/index.js CHANGED
@@ -21,8 +21,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.TopicType = exports.SECURITY_EVENT_SEVERITY_MAP = exports.DeviceManager = exports.deriveSharedSecret = exports.AEAD_NONCE_LENGTH = exports.AEAD_KEY_LENGTH = exports.decryptAead = exports.encryptAead = exports.hkdfSha256 = exports.RecoveryPhraseService = exports.SignatureService = exports.updateIdentityMarker = exports.readIdentityMarker = exports.IdentityUnavailableError = exports.IdentityPersistError = exports.IdentityAlreadyExistsError = exports.KeyManager = exports.sessionsArraysEqual = exports.normalizeAndSortSessions = exports.mergeSessions = exports.authenticatedApiCall = exports.withAuthErrorHandling = exports.isAuthenticationError = exports.ensureValidToken = exports.AuthenticationFailedError = exports.SessionSyncRequiredError = exports.verifyPublicCardAttestation = exports.parseAttestPayload = exports.parseIdPayload = exports.buildUserDid = exports.ORGANIZATION_CATEGORIES = exports.normalizeProfileLinks = exports.getNormalizedUserHandle = exports.getCanonicalUserHandle = exports.normalizeUserIdentityOrNull = exports.normalizeUserIdentity = exports.getNormalizedUserId = exports.OxyAppDataIdentifierError = exports.commonsDeliveryPlatform = exports.pushTargetsFromDelivery = exports.selectCommonsDelivery = exports.parseCommonsApprovalExpiresAt = exports.getCommonsApprovalBlockingReason = exports.ServiceCredentialMismatchError = exports.oxyClient = exports.OXY_CLOUD_URL = exports.OxyAuthenticationTimeoutError = exports.OxyAuthenticationError = exports.AssetUrlResolutionError = exports.OxyServices = void 0;
22
22
  exports.withRetry = exports.delay = exports.shouldAllowRequest = exports.recordSuccess = exports.recordFailure = exports.calculateBackoffInterval = exports.createCircuitBreakerState = exports.DEFAULT_CIRCUIT_BREAKER_CONFIG = exports.isRetryableError = exports.isNetworkError = exports.isServerError = exports.isRateLimitError = exports.isNotFoundError = exports.isForbiddenError = exports.isUnauthorizedError = exports.isAlreadyRegisteredError = exports.getErrorMessage = exports.getErrorStatus = exports.HttpStatus = exports.getSystemColorScheme = exports.systemPrefersDarkMode = exports.getOppositeTheme = exports.normalizeColorScheme = exports.normalizeTheme = exports.getContrastTextColor = exports.isLightColor = exports.withOpacity = exports.rgbToHex = exports.hexToRgb = exports.lightenColor = exports.darkenColor = exports.isWebBrowser = exports.isAndroid = exports.isIOS = exports.isNative = exports.isWeb = exports.setPlatformOS = exports.getPlatformOS = exports.getPrimaryLanguage = exports.getUserLanguages = exports.isRTLLocale = exports.getNativeLanguageName = exports.getLanguageName = exports.getLanguageMetadata = exports.isSupportedLocale = exports.normalizeLocale = exports.getBaseLanguage = exports.FALLBACK_LOCALE = exports.SUPPORTED_LANGUAGES = exports.TopicSource = void 0;
23
23
  exports.getAccountColor = exports.formatPublicKeyHandle = exports.getAccountFallbackHandle = exports.getAccountDisplayName = exports.createQuickAccount = exports.buildAccountsArray = exports.updateAvatarVisibility = exports.isDev = exports.consoleSink = exports.resetLoggerConfig = exports.getLoggerConfig = exports.configureLogger = exports.createLogger = exports.logger = exports.normalizeMultilineText = exports.normalizeInlineText = exports.validateAndSanitizeUserInput = exports.isValidObjectId = exports.sanitizeHTML = exports.sanitizeString = exports.isValidFileType = exports.isValidFileSize = exports.isValidDate = exports.isValidURL = exports.isValidUUID = exports.isValidObject = exports.isValidArray = exports.isRequiredBoolean = exports.isRequiredNumber = exports.isRequiredString = exports.DISPLAY_NAME_ORPHANED_MARK_SOURCE = exports.DISPLAY_NAME_DISALLOWED_SOURCE = exports.DISPLAY_NAME_ALLOWED_SCRIPTS = exports.isValidDisplayName = exports.isValidPassword = exports.isValidUsername = exports.isValidEmail = exports.PASSWORD_REGEX = exports.USERNAME_REGEX = exports.EMAIL_REGEX = exports.retryAsync = exports.validateRequiredFields = exports.handleHttpError = exports.createApiError = exports.ErrorCodes = exports.safeJsonParse = exports.buildPaginationParams = exports.buildUrl = exports.buildSearchParams = exports.translate = void 0;
24
- exports.createNativeIdentityPinStore = exports.createWebIdentityPinStore = exports.AUTH_STATE_STORAGE_KEY = exports.createMemoryAuthStateStore = exports.createNativeAuthStateStore = exports.createWebAuthStateStore = exports.createAccountDialogController = exports.AccountDialogController = exports.switchableAccountIds = exports.projectSwitchableAccounts = exports.accountIdsOf = exports.activeUserOf = exports.activeSessionIdOf = exports.deviceStateToClientSessions = exports.createSessionClient = exports.createSessionClientHost = exports.SessionClient = exports.redeemHubTicketOnHub = exports.syncHubAfterSignIn = exports.parseHubSyncReturnUrl = exports.normalizeOfficialReturnOrigin = exports.isAllowedDeviceJoinOrigin = exports.isOfficialWebOrigin = exports.isLoopbackOrigin = exports.isIdpHubOrigin = exports.buildHubSyncUrl = exports.buildIdpHubOrigin = exports.consumeOAuthReturnPath = exports.persistOAuthReturnPath = exports.clearOAuthHandshake = exports.readOAuthHandshake = exports.persistOAuthHandshake = exports.canonicalizeOAuthRedirectUri = exports.normalizeOAuthRedirectUri = exports.OXY_OAUTH_RETURN_PATH_STORAGE_KEY = exports.OXY_CROSS_ORIGIN_RESTORE_ATTEMPTED_KEY = exports.OXY_SILENT_OAUTH_ATTEMPTED_KEY = exports.OXY_OAUTH_REDIRECT_URI_STORAGE_KEY = exports.OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY = exports.OXY_OAUTH_STATE_STORAGE_KEY = exports.OXY_AUTHORIZE_URL = exports.DEFAULT_OAUTH_SCOPE = exports.generatePkcePair = exports.generateOAuthState = exports.computeCodeChallenge = exports.buildOAuthAuthorizeUrl = exports.runColdBoot = exports.isOxyRpOrigin = exports.CENTRAL_IDP_APEX = exports.registrableApex = void 0;
25
- exports.packageInfo = exports.runSessionColdBoot = exports.TOKEN_REFRESH_LEAD_MS = exports.startTokenRefreshScheduler = exports.installAuthRefreshHandler = exports.createAuthRefreshHandler = exports.refreshDeviceSecretArm = exports.refreshPersistedSession = exports.AccountNotOnDeviceError = exports.establishIdentitySession = exports.resolveIdentityPin = exports.IDENTITY_PIN_STORAGE_KEY = exports.identityPinMatches = exports.createMemoryIdentityPinStore = void 0;
24
+ exports.createAuthRefreshHandler = exports.refreshDeviceSecretArm = exports.refreshPersistedSession = exports.AccountNotOnDeviceError = exports.establishIdentitySession = exports.resolveIdentityPin = exports.IDENTITY_PIN_STORAGE_KEY = exports.identityPinMatches = exports.createMemoryIdentityPinStore = exports.createNativeIdentityPinStore = exports.createWebIdentityPinStore = exports.AUTH_STATE_STORAGE_KEY = exports.createMemoryAuthStateStore = exports.createNativeAuthStateStore = exports.createWebAuthStateStore = exports.createAccountDialogController = exports.AccountDialogController = exports.switchableAccountIds = exports.projectSwitchableAccounts = exports.accountIdsOf = exports.activeUserOf = exports.activeSessionIdOf = exports.deviceStateToClientSessions = exports.createSessionClient = exports.createSessionClientHost = exports.SessionClient = exports.isAllowedDeviceJoinOrigin = exports.isOfficialWebOrigin = exports.isLoopbackOrigin = exports.consumeOAuthReturnPath = exports.persistOAuthReturnPath = exports.clearOAuthHandshake = exports.readOAuthHandshake = exports.persistOAuthHandshake = exports.canonicalizeOAuthRedirectUri = exports.normalizeOAuthRedirectUri = exports.OXY_OAUTH_RETURN_PATH_STORAGE_KEY = exports.OXY_OAUTH_REDIRECT_URI_STORAGE_KEY = exports.OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY = exports.OXY_OAUTH_STATE_STORAGE_KEY = exports.OXY_AUTHORIZE_URL = exports.DEFAULT_OAUTH_SCOPE = exports.generatePkcePair = exports.generateOAuthState = exports.computeCodeChallenge = exports.buildOAuthAuthorizeUrl = exports.runColdBoot = exports.isOxyRpOrigin = exports.CENTRAL_IDP_APEX = exports.registrableApex = void 0;
25
+ exports.packageInfo = exports.runSessionColdBoot = exports.TOKEN_REFRESH_LEAD_MS = exports.startTokenRefreshScheduler = exports.installAuthRefreshHandler = void 0;
26
26
  // Ensure crypto polyfills are loaded before anything else
27
27
  require("./crypto/polyfill");
28
28
  // ---------------------------------------------------------------------------
@@ -319,8 +319,6 @@ Object.defineProperty(exports, "OXY_AUTHORIZE_URL", { enumerable: true, get: fun
319
319
  Object.defineProperty(exports, "OXY_OAUTH_STATE_STORAGE_KEY", { enumerable: true, get: function () { return oauthPkce_1.OXY_OAUTH_STATE_STORAGE_KEY; } });
320
320
  Object.defineProperty(exports, "OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY", { enumerable: true, get: function () { return oauthPkce_1.OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY; } });
321
321
  Object.defineProperty(exports, "OXY_OAUTH_REDIRECT_URI_STORAGE_KEY", { enumerable: true, get: function () { return oauthPkce_1.OXY_OAUTH_REDIRECT_URI_STORAGE_KEY; } });
322
- Object.defineProperty(exports, "OXY_SILENT_OAUTH_ATTEMPTED_KEY", { enumerable: true, get: function () { return oauthPkce_1.OXY_SILENT_OAUTH_ATTEMPTED_KEY; } });
323
- Object.defineProperty(exports, "OXY_CROSS_ORIGIN_RESTORE_ATTEMPTED_KEY", { enumerable: true, get: function () { return oauthPkce_1.OXY_CROSS_ORIGIN_RESTORE_ATTEMPTED_KEY; } });
324
322
  Object.defineProperty(exports, "OXY_OAUTH_RETURN_PATH_STORAGE_KEY", { enumerable: true, get: function () { return oauthPkce_1.OXY_OAUTH_RETURN_PATH_STORAGE_KEY; } });
325
323
  Object.defineProperty(exports, "normalizeOAuthRedirectUri", { enumerable: true, get: function () { return oauthPkce_1.normalizeOAuthRedirectUri; } });
326
324
  Object.defineProperty(exports, "canonicalizeOAuthRedirectUri", { enumerable: true, get: function () { return oauthPkce_1.canonicalizeOAuthRedirectUri; } });
@@ -330,17 +328,9 @@ Object.defineProperty(exports, "clearOAuthHandshake", { enumerable: true, get: f
330
328
  Object.defineProperty(exports, "persistOAuthReturnPath", { enumerable: true, get: function () { return oauthPkce_1.persistOAuthReturnPath; } });
331
329
  Object.defineProperty(exports, "consumeOAuthReturnPath", { enumerable: true, get: function () { return oauthPkce_1.consumeOAuthReturnPath; } });
332
330
  var officialOrigins_1 = require("./utils/officialOrigins");
333
- Object.defineProperty(exports, "buildIdpHubOrigin", { enumerable: true, get: function () { return officialOrigins_1.buildIdpHubOrigin; } });
334
- Object.defineProperty(exports, "buildHubSyncUrl", { enumerable: true, get: function () { return officialOrigins_1.buildHubSyncUrl; } });
335
- Object.defineProperty(exports, "isIdpHubOrigin", { enumerable: true, get: function () { return officialOrigins_1.isIdpHubOrigin; } });
336
331
  Object.defineProperty(exports, "isLoopbackOrigin", { enumerable: true, get: function () { return officialOrigins_1.isLoopbackOrigin; } });
337
332
  Object.defineProperty(exports, "isOfficialWebOrigin", { enumerable: true, get: function () { return officialOrigins_1.isOfficialWebOrigin; } });
338
333
  Object.defineProperty(exports, "isAllowedDeviceJoinOrigin", { enumerable: true, get: function () { return officialOrigins_1.isAllowedDeviceJoinOrigin; } });
339
- Object.defineProperty(exports, "normalizeOfficialReturnOrigin", { enumerable: true, get: function () { return officialOrigins_1.normalizeOfficialReturnOrigin; } });
340
- Object.defineProperty(exports, "parseHubSyncReturnUrl", { enumerable: true, get: function () { return officialOrigins_1.parseHubSyncReturnUrl; } });
341
- var hubSync_1 = require("./session/hubSync");
342
- Object.defineProperty(exports, "syncHubAfterSignIn", { enumerable: true, get: function () { return hubSync_1.syncHubAfterSignIn; } });
343
- Object.defineProperty(exports, "redeemHubTicketOnHub", { enumerable: true, get: function () { return hubSync_1.redeemHubTicketOnHub; } });
344
334
  // ---------------------------------------------------------------------------
345
335
  // Session sync (device-scoped multi-account session client)
346
336
  // ---------------------------------------------------------------------------
@@ -110,36 +110,5 @@ function OxyServicesDeviceBootMixin(Base) {
110
110
  throw normalized;
111
111
  }
112
112
  }
113
- /** Mint a one-time hub sync ticket (bearer required). */
114
- async issueHubTicket(returnOrigin) {
115
- try {
116
- const res = await this.makeRequest('POST', '/session/device/hub-ticket', { returnOrigin }, { cache: false });
117
- const parsed = (0, contracts_1.safeParseContract)(contracts_1.deviceHubTicketIssueResponseSchema, res);
118
- if (!parsed) {
119
- throw new Error('session/device/hub-ticket returned an unexpected response shape');
120
- }
121
- return parsed;
122
- }
123
- catch (error) {
124
- throw this.handleError(error);
125
- }
126
- }
127
- /** Redeem a hub sync ticket for a fresh device secret (public). */
128
- async redeemHubTicket(ticket, returnOrigin) {
129
- try {
130
- const res = await this.makeRequest('POST', '/session/device/redeem-ticket', { ticket, returnOrigin },
131
- // Public device-hub sync mint (bearer-less). Same control-plane class as
132
- // the device-secret mint — bypassQueue so it never waits for a slot.
133
- { cache: false, skipAuth: true, bypassQueue: true });
134
- const parsed = (0, contracts_1.safeParseContract)(contracts_1.deviceHubTicketRedeemResponseSchema, res);
135
- if (!parsed) {
136
- throw new Error('session/device/redeem-ticket returned an unexpected response shape');
137
- }
138
- return parsed;
139
- }
140
- catch (error) {
141
- throw this.handleError(error);
142
- }
143
- }
144
113
  };
145
114
  }
@@ -16,7 +16,7 @@
16
16
  * ```
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.parseHubSyncReturnUrl = exports.normalizeOfficialReturnOrigin = exports.isOfficialWebOrigin = exports.isIdpHubOrigin = exports.buildHubSyncUrl = exports.buildIdpHubOrigin = exports.registrableApex = exports.verifySecret = exports.createOxyCors = exports.UPSTREAM_HEADERS_TIMEOUT_MS = exports.MAX_URL_LENGTH = exports.MAX_REDIRECTS = exports.DEFAULT_USER_AGENT = exports.BLOCKED_HOSTNAMES = exports.ALLOWED_PROTOCOLS = exports.ALLOWED_PORTS = exports.UpstreamError = exports.SsrfRejection = exports.safeFetch = exports.isBlockedIp = exports.assertSafePublicUrl = exports.createOxyRateLimit = exports.OXY_SERVICE_ENVIRONMENTS = exports.requireOxyAuth = exports.isOxyAuthenticated = exports.getRequiredOxyUserId = exports.getOxyUserId = exports.createOxyAuthMiddleware = exports.createOptionalOxyAuth = void 0;
19
+ exports.isOfficialWebOrigin = exports.registrableApex = exports.verifySecret = exports.createOxyCors = exports.UPSTREAM_HEADERS_TIMEOUT_MS = exports.MAX_URL_LENGTH = exports.MAX_REDIRECTS = exports.DEFAULT_USER_AGENT = exports.BLOCKED_HOSTNAMES = exports.ALLOWED_PROTOCOLS = exports.ALLOWED_PORTS = exports.UpstreamError = exports.SsrfRejection = exports.safeFetch = exports.isBlockedIp = exports.assertSafePublicUrl = exports.createOxyRateLimit = exports.OXY_SERVICE_ENVIRONMENTS = exports.requireOxyAuth = exports.isOxyAuthenticated = exports.getRequiredOxyUserId = exports.getOxyUserId = exports.createOxyAuthMiddleware = exports.createOptionalOxyAuth = void 0;
20
20
  var auth_1 = require("./auth");
21
21
  Object.defineProperty(exports, "createOptionalOxyAuth", { enumerable: true, get: function () { return auth_1.createOptionalOxyAuth; } });
22
22
  Object.defineProperty(exports, "createOxyAuthMiddleware", { enumerable: true, get: function () { return auth_1.createOxyAuthMiddleware; } });
@@ -54,9 +54,4 @@ Object.defineProperty(exports, "verifySecret", { enumerable: true, get: function
54
54
  var registrableApex_1 = require("../utils/registrableApex");
55
55
  Object.defineProperty(exports, "registrableApex", { enumerable: true, get: function () { return registrableApex_1.registrableApex; } });
56
56
  var officialOrigins_1 = require("../utils/officialOrigins");
57
- Object.defineProperty(exports, "buildIdpHubOrigin", { enumerable: true, get: function () { return officialOrigins_1.buildIdpHubOrigin; } });
58
- Object.defineProperty(exports, "buildHubSyncUrl", { enumerable: true, get: function () { return officialOrigins_1.buildHubSyncUrl; } });
59
- Object.defineProperty(exports, "isIdpHubOrigin", { enumerable: true, get: function () { return officialOrigins_1.isIdpHubOrigin; } });
60
57
  Object.defineProperty(exports, "isOfficialWebOrigin", { enumerable: true, get: function () { return officialOrigins_1.isOfficialWebOrigin; } });
61
- Object.defineProperty(exports, "normalizeOfficialReturnOrigin", { enumerable: true, get: function () { return officialOrigins_1.normalizeOfficialReturnOrigin; } });
62
- Object.defineProperty(exports, "parseHubSyncReturnUrl", { enumerable: true, get: function () { return officialOrigins_1.parseHubSyncReturnUrl; } });
@@ -174,6 +174,9 @@ function createOxyRateLimit(oxy, options = {}) {
174
174
  standardHeaders: true,
175
175
  legacyHeaders: false,
176
176
  skip,
177
+ // hashAnonymousIp already buckets IPv6 to /56 before HMAC; disable the v8
178
+ // static source scan that false-positives on req.ip (ERR_ERL_KEY_GEN_IPV6).
179
+ validate: { keyGeneratorIpFallback: false },
177
180
  });
178
181
  return (req, res, next) => {
179
182
  // Skipped paths bypass BOTH session resolution and limiting — cheap and
@@ -481,9 +481,9 @@ class AccountDialogController {
481
481
  user: result.user,
482
482
  accessToken: result.accessToken,
483
483
  }, result.user,
484
- // A switch is IN-PLACE: commit without the hub-sync redirect (the
485
- // device is already known/synced). Cross-tab/app propagation rides the
486
- // server's `session_state` socket broadcast, not a navigation.
484
+ // A switch is IN-PLACE: use the switch commit funnel (not sign-in).
485
+ // Cross-tab/app propagation rides the server's `session_state` socket
486
+ // broadcast, not a navigation.
487
487
  { fromSwitch: true });
488
488
  }
489
489
  // Re-project + refetch immediately; the subscription also fires.
@@ -986,11 +986,9 @@ class AccountDialogController {
986
986
  * consumer's commit funnel (durable persist + hydration); falls back to
987
987
  * `SessionClient.registerAndActivate` (registration + activation only).
988
988
  *
989
- * A SWITCH (`opts.fromSwitch`) uses the IN-PLACE `commitSwitchedSession` funnel
990
- * so it never runs the cross-origin hub-sync redirect; a SIGN-IN uses
991
- * `commitSession` (which may hub-sync on an official web origin). When the
992
- * switch funnel is not wired it falls back to the sign-in funnel, then to
993
- * `registerAndActivate`.
989
+ * A SWITCH (`opts.fromSwitch`) uses the IN-PLACE `commitSwitchedSession` funnel;
990
+ * a SIGN-IN uses `commitSession`. When the switch funnel is not wired it falls
991
+ * back to the sign-in funnel, then to `registerAndActivate`.
994
992
  */
995
993
  async commitAuthorizedSession(session, user, opts) {
996
994
  const commit = opts?.fromSwitch
@@ -17,7 +17,7 @@
17
17
  * React Native. No `require()`, so the ESM build stays bundler-clean.
18
18
  */
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.OXY_OAUTH_RETURN_PATH_STORAGE_KEY = exports.OXY_CROSS_ORIGIN_RESTORE_ATTEMPTED_KEY = exports.OXY_SILENT_OAUTH_ATTEMPTED_KEY = exports.OXY_OAUTH_REDIRECT_URI_STORAGE_KEY = exports.OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY = exports.OXY_OAUTH_STATE_STORAGE_KEY = exports.DEFAULT_OAUTH_SCOPE = exports.OXY_AUTHORIZE_URL = void 0;
20
+ exports.OXY_OAUTH_RETURN_PATH_STORAGE_KEY = exports.OXY_OAUTH_REDIRECT_URI_STORAGE_KEY = exports.OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY = exports.OXY_OAUTH_STATE_STORAGE_KEY = exports.DEFAULT_OAUTH_SCOPE = exports.OXY_AUTHORIZE_URL = void 0;
21
21
  exports.computeCodeChallenge = computeCodeChallenge;
22
22
  exports.generatePkcePair = generatePkcePair;
23
23
  exports.generateOAuthState = generateOAuthState;
@@ -159,10 +159,6 @@ exports.OXY_OAUTH_STATE_STORAGE_KEY = 'oxy_oauth_state';
159
159
  exports.OXY_OAUTH_CODE_VERIFIER_STORAGE_KEY = 'oxy_oauth_code_verifier';
160
160
  /** `sessionStorage` key — the exact `redirect_uri` sent on the authorize request. */
161
161
  exports.OXY_OAUTH_REDIRECT_URI_STORAGE_KEY = 'oxy.oauth_redirect_uri';
162
- /** `sessionStorage` key — at most one silent OAuth attempt per navigation. */
163
- exports.OXY_SILENT_OAUTH_ATTEMPTED_KEY = 'oxy.silent_oauth_attempted';
164
- /** `sessionStorage` key — blocks further cross-origin auto-restore in this tab. */
165
- exports.OXY_CROSS_ORIGIN_RESTORE_ATTEMPTED_KEY = 'oxy.cross_origin_restore_attempted';
166
162
  /**
167
163
  * `sessionStorage` key for the in-app path to return to after an authorize
168
164
  * round trip. See {@link persistOAuthReturnPath}.
@@ -1,17 +1,12 @@
1
1
  "use strict";
2
2
  /**
3
- * Official first-party web origin allowlist — shared by hub-ticket issuance,
4
- * OAuth redirect validation, and cross-origin session restore.
3
+ * Official first-party web origin allowlist — shared by OAuth redirect
4
+ * validation and the server-side trusted-origin checks.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.isAllowedDeviceJoinOrigin = void 0;
8
- exports.buildIdpHubOrigin = buildIdpHubOrigin;
9
- exports.isIdpHubOrigin = isIdpHubOrigin;
10
8
  exports.isLoopbackOrigin = isLoopbackOrigin;
11
9
  exports.isOfficialWebOrigin = isOfficialWebOrigin;
12
- exports.normalizeOfficialReturnOrigin = normalizeOfficialReturnOrigin;
13
- exports.parseHubSyncReturnUrl = parseHubSyncReturnUrl;
14
- exports.buildHubSyncUrl = buildHubSyncUrl;
15
10
  const authWebUrl_1 = require("./authWebUrl");
16
11
  const registrableApex_1 = require("./registrableApex");
17
12
  /** Official first-party registrable apexes (mirrors API trusted origins). */
@@ -27,30 +22,9 @@ const OFFICIAL_APEXES = new Set([
27
22
  'moovo.now',
28
23
  'mercaria.co',
29
24
  ]);
30
- function buildIdpHubOrigin() {
31
- return `https://auth.${authWebUrl_1.CENTRAL_IDP_APEX}`;
32
- }
33
- /** Whether the current web origin is the central IdP hub (`auth.oxy.so`). */
34
- function isIdpHubOrigin() {
35
- if (typeof globalThis === 'undefined') {
36
- return false;
37
- }
38
- const location = globalThis.location;
39
- if (!location) {
40
- return false;
41
- }
42
- try {
43
- const { hostname } = new URL(location.href);
44
- return hostname === `auth.${authWebUrl_1.CENTRAL_IDP_APEX}`;
45
- }
46
- catch {
47
- return false;
48
- }
49
- }
50
25
  /**
51
26
  * Whether an origin is a loopback / local-dev origin (`localhost`, `127.0.0.1`,
52
- * or `[::1]` on any port, http or https). Local dev must never be bounced to a
53
- * hosted IdP for cross-origin session restore.
27
+ * or `[::1]` on any port, http or https).
54
28
  */
55
29
  function isLoopbackOrigin(origin) {
56
30
  try {
@@ -86,49 +60,5 @@ function isOfficialWebOrigin(origin) {
86
60
  return false;
87
61
  }
88
62
  }
89
- /** Normalize and validate a return URL against official origins. Returns origin only. */
90
- function normalizeOfficialReturnOrigin(raw) {
91
- try {
92
- const parsed = new URL(raw);
93
- if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
94
- return null;
95
- }
96
- if (!isOfficialWebOrigin(parsed.origin)) {
97
- return null;
98
- }
99
- return parsed.origin;
100
- }
101
- catch {
102
- return null;
103
- }
104
- }
105
- /** Validate a hub-sync return URL; returns the full normalized URL string. */
106
- function parseHubSyncReturnUrl(raw) {
107
- if (!raw) {
108
- return null;
109
- }
110
- try {
111
- const parsed = new URL(raw);
112
- if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') {
113
- return null;
114
- }
115
- if (!isOfficialWebOrigin(parsed.origin)) {
116
- return null;
117
- }
118
- return parsed.toString();
119
- }
120
- catch {
121
- return null;
122
- }
123
- }
124
- /** Build auth.oxy.so/sync redirect URL with a one-time hub ticket. */
125
- function buildHubSyncUrl(ticket, returnUrl) {
126
- const url = new URL('/sync', buildIdpHubOrigin());
127
- url.searchParams.set('ticket', ticket);
128
- if (returnUrl) {
129
- url.searchParams.set('return', returnUrl);
130
- }
131
- return url.toString();
132
- }
133
63
  /** @deprecated Use {@link isOfficialWebOrigin}. */
134
64
  exports.isAllowedDeviceJoinOrigin = isOfficialWebOrigin;