@stytch/vanilla-js 5.25.2 → 5.26.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @stytch/vanilla-js
2
2
 
3
+ ## 5.26.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 0fa72fa: Adds in support for custom scopes to Consumer applications
8
+
9
+ ### Patch Changes
10
+
11
+ - 06d3d08: Make session handling more resiliant to changing domains
12
+ - e410edb: Fix issue where SDKB2BDiscoveryIntermediateSessionsExchange can sometimes double trigger
13
+
3
14
  ## 5.25.2
4
15
 
5
16
  ### Patch Changes
@@ -1,15 +1,11 @@
1
1
  import { StytchB2BHeadlessClient } from './index.headless.js';
2
- import { IDPConsentScreenManifest, StytchProjectConfigurationInput, StyleConfig, Callbacks, StytchB2BUIConfig, StringsOptions } from '@stytch/core/public';
2
+ import { StytchProjectConfigurationInput, StyleConfig, Callbacks, StytchB2BUIConfig, StringsOptions } from '@stytch/core/public';
3
3
  export * from '@stytch/core/public';
4
+ import { B as B2BIDPConsentManifestGenerator } from '../types-BZJ7-EK3.js';
4
5
  import '@stytch/core';
5
6
  import '../OneTapClient-zVI7LxJ6.js';
6
7
  import 'google-one-tap';
7
8
 
8
- type B2BIDPConsentManifestGenerator = (input: {
9
- scopes: string[];
10
- clientName: string;
11
- }) => IDPConsentScreenManifest;
12
-
13
9
  /**
14
10
  * A client used for invoking Stytch's B2B APIs.
15
11
  * The Stytch UI Client can be used as a drop-in solution for authentication and session management.
@@ -4066,6 +4066,9 @@ var Discovery = function Discovery() {
4066
4066
  var _useBootstrap2 = useBootstrap(),
4067
4067
  createOrganizationEnabled = _useBootstrap2.createOrganizationEnabled;
4068
4068
  p$1(function () {
4069
+ if (isExchangeInProgress) {
4070
+ return;
4071
+ }
4069
4072
  var directLoginOrganization = shouldAllowDirectLoginToOrganization(state.formState.discoveryState.discoveredOrganizations, config.directLoginForSingleMembership);
4070
4073
  if (shouldDirectLoginConfigEnabled && directLoginOrganization !== null) {
4071
4074
  handleDiscoveryOrganizationStart(directLoginOrganization);
@@ -4116,7 +4119,7 @@ var Discovery = function Discovery() {
4116
4119
  }
4117
4120
  }),
4118
4121
  stytchDiscoveryExchange = _useMutate3.trigger,
4119
- isExchangeLoading = _useMutate3.isMutating;
4122
+ isExchangeInProgress = _useMutate3.isMutating;
4120
4123
  var _useMutate4 = useMutate('stytch.discovery.organizations.create', function () {
4121
4124
  return stytchClient.discovery.organizations.create({
4122
4125
  session_duration_minutes: config.sessionOptions.sessionDurationMinutes
@@ -4135,7 +4138,7 @@ var Discovery = function Discovery() {
4135
4138
  }),
4136
4139
  stytchCreateOrganization = _useMutate4.trigger,
4137
4140
  isCreateLoading = _useMutate4.isMutating;
4138
- if (isExchangeLoading) {
4141
+ if (isExchangeInProgress) {
4139
4142
  return /*#__PURE__*/y(LoggingInScreen, null);
4140
4143
  }
4141
4144
  if (isCreateLoading) {
@@ -216,7 +216,7 @@ var ClientsideServicesProvider = /*#__PURE__*/function () {
216
216
  }
217
217
  }]);
218
218
  }();
219
- var version = "5.25.2";
219
+ var version = "5.26.0";
220
220
  var NetworkClient = /*#__PURE__*/function () {
221
221
  function NetworkClient(_publicToken, _subscriptionDataLayer, _liveAPIURL, _testAPIURL, additionalTelemetryDataFn) {
222
222
  _classCallCheck(this, NetworkClient);
@@ -583,6 +583,7 @@ var api = init(defaultConverter, {
583
583
  var STYTCH_SESSION_COOKIE = 'stytch_session';
584
584
  var STYTCH_SESSION_JWT_COOKIE = 'stytch_session_jwt';
585
585
  var STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE = 'stytch_intermediate_session_token';
586
+ var SEEN_DOMAINS_KEY = 'seen_domains';
586
587
  var isStorageAvailable = function isStorageAvailable(storage) {
587
588
  return typeof storage !== 'undefined' && storage !== null;
588
589
  };
@@ -714,6 +715,9 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
714
715
  path: this._cookiePath,
715
716
  domain: this._domain
716
717
  });
718
+ if (cookieOpts.domain) {
719
+ this.addSeenDomain(cookieOpts.domain);
720
+ }
717
721
  api.set(this.opaqueTokenCookieName, session_token, cookieOpts);
718
722
  api.set(this.jwtCookieName, session_jwt, cookieOpts);
719
723
  var alternateCookieOptions = SubscriptionDataLayer.generateCookieOpts({
@@ -722,6 +726,9 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
722
726
  path: this._cookiePath,
723
727
  domain: this._domain
724
728
  });
729
+ if (alternateCookieOptions.domain) {
730
+ this.addSeenDomain(alternateCookieOptions.domain);
731
+ }
725
732
  if (hasMultipleCookies(this.jwtCookieName)) {
726
733
  api.remove(this.jwtCookieName, alternateCookieOptions);
727
734
  }
@@ -761,9 +768,12 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
761
768
  key: "removeCookies",
762
769
  value: function removeCookies(cookiesToRemove) {
763
770
  var _this5 = this;
771
+ var trackedDomains = this.getSeenDomains();
772
+ var allDomains = [this._domain, null].concat(_toConsumableArray(trackedDomains));
773
+ var uniqueDomains = _toConsumableArray(new Set(allDomains));
764
774
  [true, false].forEach(function (availableToSubdomains) {
765
775
  [_this5._cookiePath, null].forEach(function (path) {
766
- [_this5._domain, null].forEach(function (domain) {
776
+ uniqueDomains.forEach(function (domain) {
767
777
  var cookieOpts = SubscriptionDataLayer.generateCookieOpts({
768
778
  expiresAt: new Date(0).toString(),
769
779
  availableToSubdomains: availableToSubdomains,
@@ -811,6 +821,32 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
811
821
  key: getPersistentStorageKey(this.publicToken, key)
812
822
  });
813
823
  }
824
+ }, {
825
+ key: "getSeenDomains",
826
+ value: function getSeenDomains() {
827
+ var storedDomains = this.getItem(SEEN_DOMAINS_KEY);
828
+ if (!storedDomains) {
829
+ return [];
830
+ }
831
+ try {
832
+ var parsed = JSON.parse(storedDomains);
833
+ return Array.isArray(parsed) ? parsed : [];
834
+ } catch (e) {
835
+ return [];
836
+ }
837
+ }
838
+ }, {
839
+ key: "addSeenDomain",
840
+ value: function addSeenDomain(domain) {
841
+ if (!domain) {
842
+ return;
843
+ }
844
+ var storedDomains = this.getSeenDomains();
845
+ if (!storedDomains.includes(domain)) {
846
+ storedDomains.push(domain);
847
+ this.setItem(SEEN_DOMAINS_KEY, JSON.stringify(storedDomains));
848
+ }
849
+ }
814
850
  }], [{
815
851
  key: "generateCookieOpts",
816
852
  value: function generateCookieOpts(_ref1) {
@@ -217,7 +217,7 @@ var ClientsideServicesProvider = /*#__PURE__*/function () {
217
217
  }
218
218
  }]);
219
219
  }();
220
- var version = "5.25.2";
220
+ var version = "5.26.0";
221
221
  var NetworkClient = /*#__PURE__*/function () {
222
222
  function NetworkClient(_publicToken, _subscriptionDataLayer, _liveAPIURL, _testAPIURL, additionalTelemetryDataFn) {
223
223
  _classCallCheck(this, NetworkClient);
@@ -584,6 +584,7 @@ var api = init(defaultConverter, {
584
584
  var STYTCH_SESSION_COOKIE = 'stytch_session';
585
585
  var STYTCH_SESSION_JWT_COOKIE = 'stytch_session_jwt';
586
586
  var STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE = 'stytch_intermediate_session_token';
587
+ var SEEN_DOMAINS_KEY = 'seen_domains';
587
588
  var isStorageAvailable = function isStorageAvailable(storage) {
588
589
  return typeof storage !== 'undefined' && storage !== null;
589
590
  };
@@ -715,6 +716,9 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
715
716
  path: this._cookiePath,
716
717
  domain: this._domain
717
718
  });
719
+ if (cookieOpts.domain) {
720
+ this.addSeenDomain(cookieOpts.domain);
721
+ }
718
722
  api.set(this.opaqueTokenCookieName, session_token, cookieOpts);
719
723
  api.set(this.jwtCookieName, session_jwt, cookieOpts);
720
724
  var alternateCookieOptions = SubscriptionDataLayer.generateCookieOpts({
@@ -723,6 +727,9 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
723
727
  path: this._cookiePath,
724
728
  domain: this._domain
725
729
  });
730
+ if (alternateCookieOptions.domain) {
731
+ this.addSeenDomain(alternateCookieOptions.domain);
732
+ }
726
733
  if (internal.hasMultipleCookies(this.jwtCookieName)) {
727
734
  api.remove(this.jwtCookieName, alternateCookieOptions);
728
735
  }
@@ -762,9 +769,12 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
762
769
  key: "removeCookies",
763
770
  value: function removeCookies(cookiesToRemove) {
764
771
  var _this5 = this;
772
+ var trackedDomains = this.getSeenDomains();
773
+ var allDomains = [this._domain, null].concat(_toConsumableArray(trackedDomains));
774
+ var uniqueDomains = _toConsumableArray(new Set(allDomains));
765
775
  [true, false].forEach(function (availableToSubdomains) {
766
776
  [_this5._cookiePath, null].forEach(function (path) {
767
- [_this5._domain, null].forEach(function (domain) {
777
+ uniqueDomains.forEach(function (domain) {
768
778
  var cookieOpts = SubscriptionDataLayer.generateCookieOpts({
769
779
  expiresAt: new Date(0).toString(),
770
780
  availableToSubdomains: availableToSubdomains,
@@ -812,6 +822,32 @@ var SubscriptionDataLayer = /*#__PURE__*/function () {
812
822
  key: internal.getPersistentStorageKey(this.publicToken, key)
813
823
  });
814
824
  }
825
+ }, {
826
+ key: "getSeenDomains",
827
+ value: function getSeenDomains() {
828
+ var storedDomains = this.getItem(SEEN_DOMAINS_KEY);
829
+ if (!storedDomains) {
830
+ return [];
831
+ }
832
+ try {
833
+ var parsed = JSON.parse(storedDomains);
834
+ return Array.isArray(parsed) ? parsed : [];
835
+ } catch (e) {
836
+ return [];
837
+ }
838
+ }
839
+ }, {
840
+ key: "addSeenDomain",
841
+ value: function addSeenDomain(domain) {
842
+ if (!domain) {
843
+ return;
844
+ }
845
+ var storedDomains = this.getSeenDomains();
846
+ if (!storedDomains.includes(domain)) {
847
+ storedDomains.push(domain);
848
+ this.setItem(SEEN_DOMAINS_KEY, JSON.stringify(storedDomains));
849
+ }
850
+ }
815
851
  }], [{
816
852
  key: "generateCookieOpts",
817
853
  value: function generateCookieOpts(_ref1) {
package/dist/b2b/index.js CHANGED
@@ -4067,6 +4067,9 @@ var Discovery = function Discovery() {
4067
4067
  var _useBootstrap2 = useBootstrap(),
4068
4068
  createOrganizationEnabled = _useBootstrap2.createOrganizationEnabled;
4069
4069
  extractErrorMessage.p(function () {
4070
+ if (isExchangeInProgress) {
4071
+ return;
4072
+ }
4070
4073
  var directLoginOrganization = shouldAllowDirectLoginToOrganization(state.formState.discoveryState.discoveredOrganizations, config.directLoginForSingleMembership);
4071
4074
  if (shouldDirectLoginConfigEnabled && directLoginOrganization !== null) {
4072
4075
  handleDiscoveryOrganizationStart(directLoginOrganization);
@@ -4117,7 +4120,7 @@ var Discovery = function Discovery() {
4117
4120
  }
4118
4121
  }),
4119
4122
  stytchDiscoveryExchange = _useMutate3.trigger,
4120
- isExchangeLoading = _useMutate3.isMutating;
4123
+ isExchangeInProgress = _useMutate3.isMutating;
4121
4124
  var _useMutate4 = useMutate('stytch.discovery.organizations.create', function () {
4122
4125
  return stytchClient.discovery.organizations.create({
4123
4126
  session_duration_minutes: config.sessionOptions.sessionDurationMinutes
@@ -4136,7 +4139,7 @@ var Discovery = function Discovery() {
4136
4139
  }),
4137
4140
  stytchCreateOrganization = _useMutate4.trigger,
4138
4141
  isCreateLoading = _useMutate4.isMutating;
4139
- if (isExchangeLoading) {
4142
+ if (isExchangeInProgress) {
4140
4143
  return /*#__PURE__*/extractErrorMessage.y(LoggingInScreen, null);
4141
4144
  }
4142
4145
  if (isCreateLoading) {
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { StytchHeadlessClient } from './index.headless.js';
2
2
  import { StytchProjectConfigurationInput, StytchLoginConfig, StyleConfig, Callbacks, StringsOptions } from '@stytch/core/public';
3
3
  export * from '@stytch/core/public';
4
+ import { I as IDPConsentManifestGenerator } from './types-BZJ7-EK3.js';
4
5
  import '@stytch/core';
5
6
  import './OneTapClient-zVI7LxJ6.js';
6
7
  import 'google-one-tap';
@@ -106,10 +107,11 @@ declare class StytchUIClient<TProjectConfiguration extends StytchProjectConfigur
106
107
  * @param callbacks - Optional {@link Callbacks} triggered by various events in the Stytch SDK.
107
108
  * @throws An error when the element specified by elementId cannot be found.
108
109
  */
109
- mountIdentityProvider({ elementId, styles, callbacks, strings, }: {
110
+ mountIdentityProvider({ elementId, styles, callbacks, strings, getIDPConsentManifest, }: {
110
111
  elementId: string;
111
112
  styles?: StyleConfig;
112
113
  callbacks?: Callbacks<TProjectConfiguration>;
114
+ getIDPConsentManifest?: IDPConsentManifestGenerator;
113
115
  } & StringsOptions): void;
114
116
  }
115
117