@stytch/nextjs 12.0.0 → 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 (77) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/Stytch.d.ts +172 -0
  3. package/dist/Stytch.js +214 -0
  4. package/dist/Stytch.js.map +1 -0
  5. package/dist/Stytch.spec.d.ts +1 -0
  6. package/dist/Stytch.spec.js +130 -0
  7. package/dist/Stytch.spec.js.map +1 -0
  8. package/dist/StytchContext.d.ts +104 -0
  9. package/dist/StytchContext.js +180 -0
  10. package/dist/StytchContext.js.map +1 -0
  11. package/dist/StytchContext.serverside.spec.d.ts +4 -0
  12. package/dist/StytchContext.serverside.spec.js +51 -0
  13. package/dist/StytchContext.serverside.spec.js.map +1 -0
  14. package/dist/StytchContext.spec.d.ts +1 -0
  15. package/dist/StytchContext.spec.js +212 -0
  16. package/dist/StytchContext.spec.js.map +1 -0
  17. package/dist/StytchSSRProxy.d.ts +2 -0
  18. package/dist/StytchSSRProxy.js +29 -0
  19. package/dist/StytchSSRProxy.js.map +1 -0
  20. package/dist/StytchSSRProxy.spec.d.ts +1 -0
  21. package/dist/StytchSSRProxy.spec.js +16 -0
  22. package/dist/StytchSSRProxy.spec.js.map +1 -0
  23. package/dist/b2b/Stytch.d.ts +104 -0
  24. package/dist/b2b/Stytch.js +90 -0
  25. package/dist/b2b/Stytch.js.map +1 -0
  26. package/dist/b2b/StytchB2BContext.d.ts +104 -0
  27. package/dist/b2b/StytchB2BContext.js +179 -0
  28. package/dist/b2b/StytchB2BContext.js.map +1 -0
  29. package/dist/b2b/StytchB2BContext.spec.d.ts +1 -0
  30. package/dist/b2b/StytchB2BContext.spec.js +217 -0
  31. package/dist/b2b/StytchB2BContext.spec.js.map +1 -0
  32. package/dist/b2b/createStytchB2BHeadlessClient.d.ts +15 -0
  33. package/dist/b2b/createStytchB2BHeadlessClient.js +26 -0
  34. package/dist/b2b/createStytchB2BHeadlessClient.js.map +1 -0
  35. package/dist/b2b/createStytchB2BUIClient.d.ts +16 -0
  36. package/dist/b2b/createStytchB2BUIClient.js +27 -0
  37. package/dist/b2b/createStytchB2BUIClient.js.map +1 -0
  38. package/dist/b2b/index.d.ts +3 -208
  39. package/dist/b2b/index.headless.d.ts +1 -16
  40. package/dist/b2b/index.headless.esm.js +569 -612
  41. package/dist/b2b/index.headless.js +17 -4164
  42. package/dist/b2b/index.headless.js.map +1 -0
  43. package/dist/b2b/index.js +14 -250
  44. package/dist/b2b/index.js.map +1 -0
  45. package/dist/b2b/index.ui.d.ts +1 -17
  46. package/dist/b2b/index.ui.js +16 -64
  47. package/dist/b2b/index.ui.js.map +1 -0
  48. package/dist/createStytchHeadlessClient.d.ts +15 -0
  49. package/dist/createStytchHeadlessClient.js +26 -0
  50. package/dist/createStytchHeadlessClient.js.map +1 -0
  51. package/dist/createStytchUIClient.d.ts +16 -0
  52. package/dist/createStytchUIClient.js +27 -0
  53. package/dist/createStytchUIClient.js.map +1 -0
  54. package/dist/index.d.ts +3 -244
  55. package/dist/index.esm.d.ts +32 -1
  56. package/dist/index.esm.js +56 -1
  57. package/dist/index.headless.d.ts +1 -16
  58. package/dist/index.headless.js +16 -63
  59. package/dist/index.headless.js.map +1 -0
  60. package/dist/index.js +16 -318
  61. package/dist/index.js.map +1 -0
  62. package/dist/index.ui.d.ts +1 -17
  63. package/dist/index.ui.js +16 -64
  64. package/dist/index.ui.js.map +1 -0
  65. package/dist/utils/async.d.ts +2 -0
  66. package/dist/utils/async.js +22 -0
  67. package/dist/utils/async.js.map +1 -0
  68. package/dist/utils/errors.d.ts +3 -0
  69. package/dist/utils/errors.js +28 -0
  70. package/dist/utils/errors.js.map +1 -0
  71. package/dist/utils/invariant.d.ts +1 -0
  72. package/dist/utils/invariant.js +10 -0
  73. package/dist/utils/invariant.js.map +1 -0
  74. package/dist/utils/useIsomorphicLayoutEffect.d.ts +3 -0
  75. package/dist/utils/useIsomorphicLayoutEffect.js +7 -0
  76. package/dist/utils/useIsomorphicLayoutEffect.js.map +1 -0
  77. package/package.json +3 -3
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.StytchB2B = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const StytchB2BContext_1 = require("./StytchB2BContext");
29
+ const invariant_1 = require("../utils/invariant");
30
+ const errors_1 = require("../utils/errors");
31
+ /**
32
+ * The Stytch B2B UI component.
33
+ * This component can only be used with a {@link StytchB2BUIClient} client constructor
34
+ * passed into the {@link StytchB2BProvider}
35
+ *
36
+ * See the {@link https://stytch.com/docs/b2b/sdks/javascript-sdk online reference}
37
+ *
38
+ * @example
39
+ * <StytchB2B
40
+ * config={{
41
+ * authFlowType: "Organization",
42
+ * emailMagicLinksOptions: {
43
+ * loginRedirectURL: 'https://example.com/authenticate',
44
+ * signupRedirectURL: 'https://example.com/authenticate',
45
+ * },
46
+ * ssoOptions: {
47
+ * loginRedirectURL: 'https://example.com/authenticate',
48
+ * signupRedirectURL: 'https://example.com/authenticate',
49
+ * },
50
+ * sessionOptions: {
51
+ * sessionDurationMinutes: 60,
52
+ * }
53
+ * }}
54
+ * styles={{
55
+ * fontFamily: '"Helvetica New", Helvetica, sans-serif',
56
+ * primaryColor: '#0577CA',
57
+ * width: '321px',
58
+ * }}
59
+ * callbacks={{
60
+ * onEvent: (event) => console.log(event)
61
+ * }}
62
+ * />
63
+ * @param props {@link StytchB2BProps}
64
+ */
65
+ const StytchB2B = ({ styles, callbacks, config }) => {
66
+ (0, invariant_1.invariant)((0, StytchB2BContext_1.useIsMounted__INTERNAL)(), (0, errors_1.noProviderError)('<StytchB2B />'));
67
+ const stytchClient = (0, StytchB2BContext_1.useStytchB2BClient)();
68
+ const containerEl = (0, react_1.useRef)(null);
69
+ (0, react_1.useLayoutEffect)(() => {
70
+ if (!(0, StytchB2BContext_1.isUIClient)(stytchClient)) {
71
+ throw Error(errors_1.noHeadlessClientError);
72
+ }
73
+ if (!containerEl.current) {
74
+ return;
75
+ }
76
+ if (!containerEl.current.id) {
77
+ const randId = Math.floor(Math.random() * 1e6);
78
+ containerEl.current.id = `stytch-b2b-ui-${randId}`;
79
+ }
80
+ stytchClient.mount({
81
+ callbacks,
82
+ config,
83
+ elementId: `#${containerEl.current.id}`,
84
+ styles,
85
+ });
86
+ }, [stytchClient, styles, callbacks]);
87
+ return react_1.default.createElement("div", { ref: containerEl });
88
+ };
89
+ exports.StytchB2B = StytchB2B;
90
+ //# sourceMappingURL=Stytch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stytch.js","sourceRoot":"","sources":["../../src/b2b/Stytch.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAuD;AAQvD,yDAA4F;AAC5F,kDAA+C;AAC/C,4CAAyE;AAsEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACI,MAAM,SAAS,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAkB,EAAE,EAAE;IACzE,IAAA,qBAAS,EAAC,IAAA,yCAAsB,GAAE,EAAE,IAAA,wBAAe,EAAC,eAAe,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,IAAA,qCAAkB,GAAE,CAAC;IAC1C,MAAM,WAAW,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAEjD,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAA,6BAAU,EAAC,YAAY,CAAC,EAAE;YAC7B,MAAM,KAAK,CAAC,8BAAqB,CAAC,CAAC;SACpC;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;YACxB,OAAO;SACR;QAED,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;YAC/C,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,iBAAiB,MAAM,EAAE,CAAC;SACpD;QAED,YAAY,CAAC,KAAK,CAAC;YACjB,SAAS;YACT,MAAM;YACN,SAAS,EAAE,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE;YACvC,MAAM;SACP,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtC,OAAO,uCAAK,GAAG,EAAE,WAAW,GAAI,CAAC;AACnC,CAAC,CAAC;AA5BW,QAAA,SAAS,aA4BpB"}
@@ -0,0 +1,104 @@
1
+ import React, { ComponentType, ReactNode } from 'react';
2
+ import type { Member, MemberSession, StytchB2BUIClient } from '@stytch/vanilla-js/b2b';
3
+ import type { StytchB2BHeadlessClient } from '@stytch/vanilla-js/b2b/headless';
4
+ /**
5
+ * The Stytch Client object passed in to <StytchProvider /> in your `_app.js`.
6
+ * Either a StytchUIClient or StytchHeadlessClient.
7
+ */
8
+ declare type StytchB2BClient = StytchB2BHeadlessClient | StytchB2BUIClient;
9
+ declare type SWRMember = {
10
+ member: null;
11
+ fromCache: false;
12
+ isInitialized: false;
13
+ } | {
14
+ member: Member | null;
15
+ fromCache: boolean;
16
+ isInitialized: true;
17
+ };
18
+ declare type SWRMemberSession = {
19
+ session: null;
20
+ fromCache: false;
21
+ isInitialized: false;
22
+ } | {
23
+ session: MemberSession | null;
24
+ fromCache: boolean;
25
+ isInitialized: true;
26
+ };
27
+ export declare const useIsMounted__INTERNAL: () => boolean;
28
+ export declare const isUIClient: (client: StytchB2BClient) => client is StytchB2BUIClient;
29
+ /**
30
+ * Returns the active member.
31
+ * The Stytch SDKs are used for client-side authentication and session management.
32
+ * Check the isInitialized property to determine if the SDK has completed initialization.
33
+ * Check the fromCache property to determine if the session data is from persistent storage.
34
+ * See Next's {@link https://nextjs.org/docs/authentication#authenticating-statically-generated-pages documentation} for more.
35
+ * @example
36
+ * const {member, isInitialized, fromCache} = useStytchMember();
37
+ * if (!isInitialized) {
38
+ * return <p>Loading...</p>;
39
+ * }
40
+ * return (<h1>Welcome, {member.name}</h1>);
41
+ */
42
+ export declare const useStytchMember: () => SWRMember;
43
+ /**
44
+ * Returns the member's active Stytch member session.
45
+ * The Stytch SDKs are used for client-side authentication and session management.
46
+ * Check the isInitialized property to determine if the SDK has completed initialization.
47
+ * Check the fromCache property to determine if the session data is from persistent storage.
48
+ * See Next's {@link https://nextjs.org/docs/authentication#authenticating-statically-generated-pages documentation} for more.
49
+ * @example
50
+ * const {session, isInitialized, fromCache} = useStytchMemberSession();
51
+ * useEffect(() => {
52
+ * if (!isInitialized) {
53
+ * return;
54
+ * }
55
+ * if (!session) {
56
+ * router.replace('/login')
57
+ * }
58
+ * }, [session, isInitialized]);
59
+ */
60
+ export declare const useStytchMemberSession: () => SWRMemberSession;
61
+ /**
62
+ * Returns the Stytch client stored in the Stytch context.
63
+ *
64
+ * @example
65
+ * const stytch = useStytch();
66
+ * useEffect(() => {
67
+ * stytch.magicLinks.authenticate('...')
68
+ * }, [stytch]);
69
+ */
70
+ export declare const useStytchB2BClient: () => StytchB2BClient;
71
+ export declare const withStytchB2BClient: <T extends object>(Component: React.ComponentType<T & {
72
+ stytch: StytchB2BClient;
73
+ }>) => React.ComponentType<T>;
74
+ export declare const withStytchMember: <T extends object>(Component: React.ComponentType<T & {
75
+ stytchMember: Member | null;
76
+ stytchMemberIsInitialized: boolean;
77
+ stytchMemberIsFromCache: boolean;
78
+ }>) => React.ComponentType<T>;
79
+ export declare const withStytchMemberSession: <T extends object>(Component: React.ComponentType<T & {
80
+ stytchMemberSession: MemberSession | null;
81
+ stytchMemberSessionIsInitialized: boolean;
82
+ stytchMemberSessionIsFromCache: boolean;
83
+ }>) => React.ComponentType<T>;
84
+ export interface StytchB2BProviderProps {
85
+ /**
86
+ * A Stytch client instance, created using either {@link createStytchHeadlessClient} or {@link createStytchUIClient}
87
+ */
88
+ stytch: StytchB2BClient;
89
+ children?: ReactNode;
90
+ }
91
+ /**
92
+ * The Stytch Context Provider.
93
+ * Wrap your application with this component in `_app.js` in order to use Stytch everywhere in your app.
94
+ * @example
95
+ * const stytch = createStytchB2BHeadlessClient('public-token-<find yours in the stytch dashboard>')
96
+ *
97
+ * return (
98
+ * <StytchB2BProvider stytch={stytch}>
99
+ * <App />
100
+ * </StytchB2BProvider>
101
+ * )
102
+ */
103
+ export declare const StytchB2BProvider: ({ stytch, children }: StytchB2BProviderProps) => JSX.Element;
104
+ export {};
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.StytchB2BProvider = exports.withStytchMemberSession = exports.withStytchMember = exports.withStytchB2BClient = exports.useStytchB2BClient = exports.useStytchMemberSession = exports.useStytchMember = exports.isUIClient = exports.useIsMounted__INTERNAL = void 0;
27
+ const react_1 = __importStar(require("react"));
28
+ const errors_1 = require("../utils/errors");
29
+ const invariant_1 = require("../utils/invariant");
30
+ const async_1 = require("../utils/async");
31
+ const StytchSSRProxy_1 = require("../StytchSSRProxy");
32
+ const initialMember = {
33
+ member: null,
34
+ fromCache: false,
35
+ isInitialized: false,
36
+ };
37
+ const initialMemberSession = {
38
+ session: null,
39
+ fromCache: false,
40
+ isInitialized: false,
41
+ };
42
+ const StytchContext = (0, react_1.createContext)({ isMounted: false });
43
+ const StytchMemberContext = (0, react_1.createContext)(initialMember);
44
+ const StytchMemberSessionContext = (0, react_1.createContext)(initialMemberSession);
45
+ const useIsMounted__INTERNAL = () => (0, react_1.useContext)(StytchContext).isMounted;
46
+ exports.useIsMounted__INTERNAL = useIsMounted__INTERNAL;
47
+ const isUIClient = (client) => {
48
+ return client.mount !== undefined;
49
+ };
50
+ exports.isUIClient = isUIClient;
51
+ /**
52
+ * Returns the active member.
53
+ * The Stytch SDKs are used for client-side authentication and session management.
54
+ * Check the isInitialized property to determine if the SDK has completed initialization.
55
+ * Check the fromCache property to determine if the session data is from persistent storage.
56
+ * See Next's {@link https://nextjs.org/docs/authentication#authenticating-statically-generated-pages documentation} for more.
57
+ * @example
58
+ * const {member, isInitialized, fromCache} = useStytchMember();
59
+ * if (!isInitialized) {
60
+ * return <p>Loading...</p>;
61
+ * }
62
+ * return (<h1>Welcome, {member.name}</h1>);
63
+ */
64
+ const useStytchMember = () => {
65
+ (0, invariant_1.invariant)((0, exports.useIsMounted__INTERNAL)(), (0, errors_1.noProviderError)('useStytchMember', 'StytchB2BProvider'));
66
+ return (0, react_1.useContext)(StytchMemberContext);
67
+ };
68
+ exports.useStytchMember = useStytchMember;
69
+ /**
70
+ * Returns the member's active Stytch member session.
71
+ * The Stytch SDKs are used for client-side authentication and session management.
72
+ * Check the isInitialized property to determine if the SDK has completed initialization.
73
+ * Check the fromCache property to determine if the session data is from persistent storage.
74
+ * See Next's {@link https://nextjs.org/docs/authentication#authenticating-statically-generated-pages documentation} for more.
75
+ * @example
76
+ * const {session, isInitialized, fromCache} = useStytchMemberSession();
77
+ * useEffect(() => {
78
+ * if (!isInitialized) {
79
+ * return;
80
+ * }
81
+ * if (!session) {
82
+ * router.replace('/login')
83
+ * }
84
+ * }, [session, isInitialized]);
85
+ */
86
+ const useStytchMemberSession = () => {
87
+ (0, invariant_1.invariant)((0, exports.useIsMounted__INTERNAL)(), (0, errors_1.noProviderError)('useStytchMemberSession', 'StytchB2BProvider'));
88
+ return (0, react_1.useContext)(StytchMemberSessionContext);
89
+ };
90
+ exports.useStytchMemberSession = useStytchMemberSession;
91
+ /**
92
+ * Returns the Stytch client stored in the Stytch context.
93
+ *
94
+ * @example
95
+ * const stytch = useStytch();
96
+ * useEffect(() => {
97
+ * stytch.magicLinks.authenticate('...')
98
+ * }, [stytch]);
99
+ */
100
+ const useStytchB2BClient = () => {
101
+ const ctx = (0, react_1.useContext)(StytchContext);
102
+ (0, invariant_1.invariant)(ctx.isMounted, (0, errors_1.noProviderError)('useStytchB2BClient', 'StytchB2BProvider'));
103
+ return ctx.client;
104
+ };
105
+ exports.useStytchB2BClient = useStytchB2BClient;
106
+ const withStytchB2BClient = (Component) => {
107
+ const WithStytch = (props) => {
108
+ (0, invariant_1.invariant)((0, exports.useIsMounted__INTERNAL)(), (0, errors_1.noProviderError)('withStytchB2BClient', 'StytchB2BProvider'));
109
+ return react_1.default.createElement(Component, Object.assign({}, props, { stytch: (0, exports.useStytchB2BClient)() }));
110
+ };
111
+ WithStytch.displayName = `withStytch(${Component.displayName || Component.name || 'Component'})`;
112
+ return WithStytch;
113
+ };
114
+ exports.withStytchB2BClient = withStytchB2BClient;
115
+ const withStytchMember = (Component) => {
116
+ const WithStytchUser = (props) => {
117
+ (0, invariant_1.invariant)((0, exports.useIsMounted__INTERNAL)(), (0, errors_1.noProviderError)('withStytchMember', 'StytchB2BProvider'));
118
+ const { member, isInitialized, fromCache } = (0, exports.useStytchMember)();
119
+ return (react_1.default.createElement(Component, Object.assign({}, props, { stytchMember: member, stytchMemberIsInitialized: isInitialized, stytchMemberIsFromCache: fromCache })));
120
+ };
121
+ WithStytchUser.displayName = `withStytchMember(${Component.displayName || Component.name || 'Component'})`;
122
+ return WithStytchUser;
123
+ };
124
+ exports.withStytchMember = withStytchMember;
125
+ const withStytchMemberSession = (Component) => {
126
+ const WithStytchSession = (props) => {
127
+ (0, invariant_1.invariant)((0, exports.useIsMounted__INTERNAL)(), (0, errors_1.noProviderError)('withStytchMemberSession', 'StytchB2BProvider'));
128
+ const { session, isInitialized, fromCache } = (0, exports.useStytchMemberSession)();
129
+ return (react_1.default.createElement(Component, Object.assign({}, props, { stytchMemberSession: session, stytchMemberSessionIsInitialized: isInitialized, stytchMemberSessionIsFromCache: fromCache })));
130
+ };
131
+ WithStytchSession.displayName = `withStytchMemberSession(${Component.displayName || Component.name || 'Component'})`;
132
+ return WithStytchSession;
133
+ };
134
+ exports.withStytchMemberSession = withStytchMemberSession;
135
+ /**
136
+ * The Stytch Context Provider.
137
+ * Wrap your application with this component in `_app.js` in order to use Stytch everywhere in your app.
138
+ * @example
139
+ * const stytch = createStytchB2BHeadlessClient('public-token-<find yours in the stytch dashboard>')
140
+ *
141
+ * return (
142
+ * <StytchB2BProvider stytch={stytch}>
143
+ * <App />
144
+ * </StytchB2BProvider>
145
+ * )
146
+ */
147
+ const StytchB2BProvider = ({ stytch, children }) => {
148
+ const ctx = (0, react_1.useMemo)(() => ({ client: stytch, isMounted: true }), [stytch]);
149
+ const [member, setMember] = (0, async_1.useAsyncState)(initialMember);
150
+ const [session, setMemberSession] = (0, async_1.useAsyncState)(initialMemberSession);
151
+ (0, react_1.useEffect)(() => {
152
+ if ((0, StytchSSRProxy_1.isStytchSSRProxy)(stytch)) {
153
+ return;
154
+ }
155
+ setMember({
156
+ member: stytch.member.getSync(),
157
+ fromCache: true,
158
+ isInitialized: true,
159
+ });
160
+ setMemberSession({
161
+ session: stytch.session.getSync(),
162
+ fromCache: true,
163
+ isInitialized: true,
164
+ });
165
+ const unsubscribeMember = stytch.member.onChange((member) => setMember({ member, fromCache: false, isInitialized: true }));
166
+ const unsubscribeMemberSession = stytch.session.onChange((session) => setMemberSession({ session, fromCache: false, isInitialized: true }));
167
+ return () => {
168
+ unsubscribeMember();
169
+ unsubscribeMemberSession();
170
+ };
171
+ }, [stytch, setMember, setMemberSession]);
172
+ const finalMemberSession = !!session.session === !!member.member ? session : initialMemberSession;
173
+ const finalMember = !!session.session === !!member.member ? member : initialMember;
174
+ return (react_1.default.createElement(StytchContext.Provider, { value: ctx },
175
+ react_1.default.createElement(StytchMemberContext.Provider, { value: finalMember },
176
+ react_1.default.createElement(StytchMemberSessionContext.Provider, { value: finalMemberSession }, children))));
177
+ };
178
+ exports.StytchB2BProvider = StytchB2BProvider;
179
+ //# sourceMappingURL=StytchB2BContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StytchB2BContext.js","sourceRoot":"","sources":["../../src/b2b/StytchB2BContext.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAuG;AAIvG,4CAAkD;AAClD,kDAA+C;AAC/C,0CAA+C;AAC/C,sDAAqD;AA6BrD,MAAM,aAAa,GAAc;IAC/B,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;CACrB,CAAC;AAcF,MAAM,oBAAoB,GAAqB;IAC7C,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,MAAM,aAAa,GAAG,IAAA,qBAAa,EAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACzE,MAAM,mBAAmB,GAAG,IAAA,qBAAa,EAAY,aAAa,CAAC,CAAC;AACpE,MAAM,0BAA0B,GAAG,IAAA,qBAAa,EAAmB,oBAAoB,CAAC,CAAC;AAElF,MAAM,sBAAsB,GAAG,GAAY,EAAE,CAAC,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC,SAAS,CAAC;AAA5E,QAAA,sBAAsB,0BAAsD;AAElF,MAAM,UAAU,GAAG,CAAC,MAAuB,EAA+B,EAAE;IACjF,OAAQ,MAA4B,CAAC,KAAK,KAAK,SAAS,CAAC;AAC3D,CAAC,CAAC;AAFW,QAAA,UAAU,cAErB;AAEF;;;;;;;;;;;;GAYG;AACI,MAAM,eAAe,GAAG,GAAc,EAAE;IAC7C,IAAA,qBAAS,EAAC,IAAA,8BAAsB,GAAE,EAAE,IAAA,wBAAe,EAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAC7F,OAAO,IAAA,kBAAU,EAAC,mBAAmB,CAAC,CAAC;AACzC,CAAC,CAAC;AAHW,QAAA,eAAe,mBAG1B;AAEF;;;;;;;;;;;;;;;;GAgBG;AACI,MAAM,sBAAsB,GAAG,GAAqB,EAAE;IAC3D,IAAA,qBAAS,EAAC,IAAA,8BAAsB,GAAE,EAAE,IAAA,wBAAe,EAAC,wBAAwB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACpG,OAAO,IAAA,kBAAU,EAAC,0BAA0B,CAAC,CAAC;AAChD,CAAC,CAAC;AAHW,QAAA,sBAAsB,0BAGjC;AAEF;;;;;;;;GAQG;AACI,MAAM,kBAAkB,GAAG,GAAoB,EAAE;IACtD,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,aAAa,CAAC,CAAC;IACtC,IAAA,qBAAS,EAAC,GAAG,CAAC,SAAS,EAAE,IAAA,wBAAe,EAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACrF,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC,CAAC;AAJW,QAAA,kBAAkB,sBAI7B;AAEK,MAAM,mBAAmB,GAAG,CACjC,SAAyD,EACvC,EAAE;IACpB,MAAM,UAAU,GAAqB,CAAC,KAAK,EAAE,EAAE;QAC7C,IAAA,qBAAS,EAAC,IAAA,8BAAsB,GAAE,EAAE,IAAA,wBAAe,EAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACjG,OAAO,8BAAC,SAAS,oBAAK,KAAK,IAAE,MAAM,EAAE,IAAA,0BAAkB,GAAE,IAAI,CAAC;IAChE,CAAC,CAAC;IACF,UAAU,CAAC,WAAW,GAAG,cAAc,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;IACjG,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AATW,QAAA,mBAAmB,uBAS9B;AAEK,MAAM,gBAAgB,GAAG,CAC9B,SAEC,EACiB,EAAE;IACpB,MAAM,cAAc,GAAqB,CAAC,KAAK,EAAE,EAAE;QACjD,IAAA,qBAAS,EAAC,IAAA,8BAAsB,GAAE,EAAE,IAAA,wBAAe,EAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAC9F,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAA,uBAAe,GAAE,CAAC;QAC/D,OAAO,CACL,8BAAC,SAAS,oBACJ,KAAK,IACT,YAAY,EAAE,MAAM,EACpB,yBAAyB,EAAE,aAAa,EACxC,uBAAuB,EAAE,SAAS,IAClC,CACH,CAAC;IACJ,CAAC,CAAC;IACF,cAAc,CAAC,WAAW,GAAG,oBAAoB,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;IAC3G,OAAO,cAAc,CAAC;AACxB,CAAC,CAAC;AAnBW,QAAA,gBAAgB,oBAmB3B;AAEK,MAAM,uBAAuB,GAAG,CACrC,SAMC,EACiB,EAAE;IACpB,MAAM,iBAAiB,GAAqB,CAAC,KAAK,EAAE,EAAE;QACpD,IAAA,qBAAS,EAAC,IAAA,8BAAsB,GAAE,EAAE,IAAA,wBAAe,EAAC,yBAAyB,EAAE,mBAAmB,CAAC,CAAC,CAAC;QACrG,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAA,8BAAsB,GAAE,CAAC;QACvE,OAAO,CACL,8BAAC,SAAS,oBACJ,KAAK,IACT,mBAAmB,EAAE,OAAO,EAC5B,gCAAgC,EAAE,aAAa,EAC/C,8BAA8B,EAAE,SAAS,IACzC,CACH,CAAC;IACJ,CAAC,CAAC;IACF,iBAAiB,CAAC,WAAW,GAAG,2BAA2B,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;IACrH,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAvBW,QAAA,uBAAuB,2BAuBlC;AAUF;;;;;;;;;;;GAWG;AACI,MAAM,iBAAiB,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA0B,EAAe,EAAE;IAC7F,MAAM,GAAG,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3E,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAA,qBAAa,EAAY,aAAa,CAAC,CAAC;IACpE,MAAM,CAAC,OAAO,EAAE,gBAAgB,CAAC,GAAG,IAAA,qBAAa,EAAmB,oBAAoB,CAAC,CAAC;IAE1F,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,IAAA,iCAAgB,EAAC,MAAM,CAAC,EAAE;YAC5B,OAAO;SACR;QACD,SAAS,CAAC;YACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YAC/B,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,gBAAgB,CAAC;YACf,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE;YACjC,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAC1D,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC7D,CAAC;QACF,MAAM,wBAAwB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CACnE,gBAAgB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CACrE,CAAC;QACF,OAAO,GAAG,EAAE;YACV,iBAAiB,EAAE,CAAC;YACpB,wBAAwB,EAAE,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE1C,MAAM,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAClG,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;IAEnF,OAAO,CACL,8BAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG;QAChC,8BAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,WAAW;YAC9C,8BAAC,0BAA0B,CAAC,QAAQ,IAAC,KAAK,EAAE,kBAAkB,IAAG,QAAQ,CAAuC,CACnF,CACR,CAC1B,CAAC;AACJ,CAAC,CAAC;AA1CW,QAAA,iBAAiB,qBA0C5B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const react_1 = __importStar(require("react"));
36
+ const react_2 = require("@testing-library/react");
37
+ const StytchB2BContext_1 = require("./StytchB2BContext");
38
+ const errors_1 = require("../utils/errors");
39
+ const captureValue = jest.fn();
40
+ const memberUnsubscribeStub = jest.fn();
41
+ const memberSessionUnsubscribeStub = jest.fn();
42
+ const mockStytchClient = {
43
+ member: { getSync: jest.fn(), onChange: jest.fn().mockReturnValue(memberUnsubscribeStub) },
44
+ session: { getSync: jest.fn(), onChange: jest.fn().mockReturnValue(memberSessionUnsubscribeStub) },
45
+ magicLinks: { authenticate: jest.fn() },
46
+ };
47
+ const testMember = {
48
+ member_id: 'test-member-123',
49
+ };
50
+ const testSession = {
51
+ expires_at: new Date(Date.now() + 10000).toUTCString(),
52
+ member_session_id: 'test-session-123',
53
+ };
54
+ describe('StytchContext', () => {
55
+ beforeEach(() => {
56
+ jest.resetAllMocks();
57
+ jest.spyOn(mockStytchClient.member, 'onChange').mockReturnValue(memberUnsubscribeStub);
58
+ jest.spyOn(mockStytchClient.session, 'onChange').mockReturnValue(memberSessionUnsubscribeStub);
59
+ });
60
+ const renderWithProvider = (ui, stytch = mockStytchClient) => (0, react_2.render)(react_1.default.createElement(StytchB2BContext_1.StytchB2BProvider, { stytch: stytch }, ui));
61
+ it('normal usage', () => __awaiter(void 0, void 0, void 0, function* () {
62
+ (0, react_2.render)(react_1.default.createElement(StytchB2BContext_1.StytchB2BProvider, { stytch: mockStytchClient }));
63
+ expect(mockStytchClient.member.onChange).toHaveBeenCalled();
64
+ expect(mockStytchClient.session.onChange).toHaveBeenCalled();
65
+ }));
66
+ const UseStytchB2BClientTest = () => {
67
+ const stytch = (0, StytchB2BContext_1.useStytchB2BClient)();
68
+ (0, react_1.useEffect)(() => {
69
+ stytch.magicLinks.authenticate({ magic_links_token: 'use-stytch-test-token', session_duration_minutes: 1 });
70
+ }, [stytch]);
71
+ return null;
72
+ };
73
+ it('UseStytchB2BClientTest passes the Stytch client into the component', () => __awaiter(void 0, void 0, void 0, function* () {
74
+ renderWithProvider(react_1.default.createElement(UseStytchB2BClientTest, null));
75
+ expect(mockStytchClient.magicLinks.authenticate).toHaveBeenCalledWith({
76
+ magic_links_token: 'use-stytch-test-token',
77
+ session_duration_minutes: 1,
78
+ });
79
+ }));
80
+ const WithStytchB2BClientTest = (0, StytchB2BContext_1.withStytchB2BClient)(({ stytch }) => {
81
+ (0, react_1.useEffect)(() => {
82
+ stytch.magicLinks.authenticate({ magic_links_token: 'use-stytch-test-token', session_duration_minutes: 1 });
83
+ }, [stytch]);
84
+ return null;
85
+ });
86
+ it('WithStytchB2BClientTest passes the Stytch client into the component', () => __awaiter(void 0, void 0, void 0, function* () {
87
+ renderWithProvider(react_1.default.createElement(WithStytchB2BClientTest, null));
88
+ expect(mockStytchClient.magicLinks.authenticate).toHaveBeenCalledWith({
89
+ magic_links_token: 'use-stytch-test-token',
90
+ session_duration_minutes: 1,
91
+ });
92
+ }));
93
+ const UseStytchMemberTest = () => {
94
+ const member = (0, StytchB2BContext_1.useStytchMember)();
95
+ (0, react_1.useEffect)(() => {
96
+ captureValue(member);
97
+ }, [member]);
98
+ return null;
99
+ };
100
+ it('useStytchMember passes the Stytch Member into the component', () => __awaiter(void 0, void 0, void 0, function* () {
101
+ // If the session isn't yet in the context, avoid race conditions! Don't force a render just yet
102
+ mockStytchClient.member.getSync.mockReturnValueOnce(testMember);
103
+ mockStytchClient.session.getSync.mockReturnValueOnce(null);
104
+ renderWithProvider(react_1.default.createElement(UseStytchMemberTest, null));
105
+ expect(captureValue).toBeCalledWith({ fromCache: false, isInitialized: false, member: null });
106
+ mockStytchClient.member.getSync.mockReturnValueOnce(testMember);
107
+ mockStytchClient.session.getSync.mockReturnValueOnce(testSession);
108
+ renderWithProvider(react_1.default.createElement(UseStytchMemberTest, null));
109
+ expect(captureValue).toBeCalledWith({ fromCache: true, isInitialized: true, member: testMember });
110
+ }));
111
+ const WithStytchMemberTest = (0, StytchB2BContext_1.withStytchMember)(({ stytchMember }) => {
112
+ (0, react_1.useEffect)(() => {
113
+ captureValue(stytchMember);
114
+ }, [stytchMember]);
115
+ return null;
116
+ });
117
+ it('withStytchMember passes the Stytch Member into the component', () => __awaiter(void 0, void 0, void 0, function* () {
118
+ // If the session isn't yet in the context, avoid race conditions! Don't force a render just yet
119
+ mockStytchClient.member.getSync.mockReturnValueOnce(testMember);
120
+ mockStytchClient.session.getSync.mockReturnValueOnce(null);
121
+ renderWithProvider(react_1.default.createElement(WithStytchMemberTest, null));
122
+ expect(captureValue).toBeCalledWith(null);
123
+ mockStytchClient.member.getSync.mockReturnValueOnce(testMember);
124
+ mockStytchClient.session.getSync.mockReturnValueOnce(testSession);
125
+ renderWithProvider(react_1.default.createElement(WithStytchMemberTest, null));
126
+ expect(captureValue).toBeCalledWith(testMember);
127
+ }));
128
+ const UseStytchMemberSessionTest = () => {
129
+ const session = (0, StytchB2BContext_1.useStytchMemberSession)();
130
+ (0, react_1.useEffect)(() => {
131
+ captureValue(session);
132
+ }, [session]);
133
+ return null;
134
+ };
135
+ it('useStytchMemberSession passes the Stytch Member Session into the component', () => __awaiter(void 0, void 0, void 0, function* () {
136
+ // If the session isn't yet in the context, avoid race conditions! Don't force a render just yet
137
+ mockStytchClient.member.getSync.mockReturnValueOnce(null);
138
+ mockStytchClient.session.getSync.mockReturnValueOnce(testSession);
139
+ renderWithProvider(react_1.default.createElement(UseStytchMemberSessionTest, null));
140
+ expect(captureValue).toBeCalledWith({ fromCache: false, isInitialized: false, session: null });
141
+ mockStytchClient.member.getSync.mockReturnValueOnce(testMember);
142
+ mockStytchClient.session.getSync.mockReturnValueOnce(testSession);
143
+ renderWithProvider(react_1.default.createElement(UseStytchMemberSessionTest, null));
144
+ expect(captureValue).toBeCalledWith({ fromCache: true, isInitialized: true, session: testSession });
145
+ }));
146
+ const WithStytchMemberSessionTest = (0, StytchB2BContext_1.withStytchMemberSession)(({ stytchMemberSession }) => {
147
+ (0, react_1.useEffect)(() => {
148
+ captureValue(stytchMemberSession);
149
+ }, [stytchMemberSession]);
150
+ return null;
151
+ });
152
+ it('withStytchMemberSession passes the Stytch Session into the component', () => __awaiter(void 0, void 0, void 0, function* () {
153
+ // If the session isn't yet in the context, avoid race conditions! Don't force a render just yet
154
+ mockStytchClient.member.getSync.mockReturnValueOnce(null);
155
+ mockStytchClient.session.getSync.mockReturnValueOnce(testSession);
156
+ renderWithProvider(react_1.default.createElement(WithStytchMemberSessionTest, null));
157
+ expect(captureValue).toBeCalledWith(null);
158
+ mockStytchClient.member.getSync.mockReturnValueOnce(testMember);
159
+ mockStytchClient.session.getSync.mockReturnValueOnce(testSession);
160
+ renderWithProvider(react_1.default.createElement(WithStytchMemberSessionTest, null));
161
+ expect(captureValue).toBeCalledWith(testSession);
162
+ }));
163
+ const LoginTest = () => {
164
+ const memberReturn = (0, StytchB2BContext_1.useStytchMember)();
165
+ const sessionReturn = (0, StytchB2BContext_1.useStytchMemberSession)();
166
+ captureValue({ memberReturn, sessionReturn });
167
+ return null;
168
+ };
169
+ it('Login and Logout events cause state changes inside the components', () => __awaiter(void 0, void 0, void 0, function* () {
170
+ mockStytchClient.member.getSync.mockReturnValueOnce(null);
171
+ mockStytchClient.session.getSync.mockReturnValueOnce(null);
172
+ const memberListenerProm = new Promise((captureValue) => mockStytchClient.member.onChange.mockImplementation((listener) => {
173
+ captureValue(listener);
174
+ return memberUnsubscribeStub;
175
+ }));
176
+ const sessionListenerProm = new Promise((captureValue) => mockStytchClient.session.onChange.mockImplementation((listener) => {
177
+ captureValue(listener);
178
+ return memberSessionUnsubscribeStub;
179
+ }));
180
+ // Initial render: nobody is logged in
181
+ renderWithProvider(react_1.default.createElement(LoginTest, null));
182
+ expect(captureValue).toHaveBeenCalledWith({
183
+ memberReturn: { fromCache: false, isInitialized: false, member: null },
184
+ sessionReturn: { fromCache: false, isInitialized: false, session: null },
185
+ });
186
+ const memberListener = yield memberListenerProm;
187
+ const sessionListener = yield sessionListenerProm;
188
+ // A login event occurs, and a rerender follows
189
+ (0, react_2.act)(() => {
190
+ memberListener(testMember);
191
+ sessionListener(testSession);
192
+ });
193
+ expect(captureValue).toHaveBeenCalledWith({
194
+ memberReturn: { fromCache: false, isInitialized: true, member: testMember },
195
+ sessionReturn: { fromCache: false, isInitialized: true, session: testSession },
196
+ });
197
+ captureValue.mockClear();
198
+ // A logout event occurs, and a rerender follows
199
+ (0, react_2.act)(() => {
200
+ memberListener(null);
201
+ sessionListener(null);
202
+ });
203
+ expect(captureValue).toHaveBeenCalledWith({
204
+ memberReturn: { fromCache: false, isInitialized: true, member: null },
205
+ sessionReturn: { fromCache: false, isInitialized: true, session: null },
206
+ });
207
+ }));
208
+ it('no provider errors', () => __awaiter(void 0, void 0, void 0, function* () {
209
+ expect(() => (0, react_2.render)(react_1.default.createElement(UseStytchB2BClientTest, null))).toThrow((0, errors_1.noProviderError)('useStytchB2BClient', 'StytchB2BProvider'));
210
+ expect(() => (0, react_2.render)(react_1.default.createElement(WithStytchB2BClientTest, null))).toThrow((0, errors_1.noProviderError)('withStytchB2BClient', 'StytchB2BProvider'));
211
+ expect(() => (0, react_2.render)(react_1.default.createElement(UseStytchMemberTest, null))).toThrow((0, errors_1.noProviderError)('useStytchMember', 'StytchB2BProvider'));
212
+ expect(() => (0, react_2.render)(react_1.default.createElement(WithStytchMemberTest, null))).toThrow((0, errors_1.noProviderError)('withStytchMember', 'StytchB2BProvider'));
213
+ expect(() => (0, react_2.render)(react_1.default.createElement(UseStytchMemberSessionTest, null))).toThrow((0, errors_1.noProviderError)('useStytchMemberSession', 'StytchB2BProvider'));
214
+ expect(() => (0, react_2.render)(react_1.default.createElement(WithStytchMemberSessionTest, null))).toThrow((0, errors_1.noProviderError)('withStytchMemberSession', 'StytchB2BProvider'));
215
+ }));
216
+ });
217
+ //# sourceMappingURL=StytchB2BContext.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StytchB2BContext.spec.js","sourceRoot":"","sources":["../../src/b2b/StytchB2BContext.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { StytchB2BHeadlessClient } from '@stytch/vanilla-js/b2b/headless';
2
+ /**
3
+ * Creates a Headless Stytch client object to call the stytch B2B APIs.
4
+ * The Stytch client is not available serverside.
5
+ * @example
6
+ * const stytch = createStytchB2BHeadlessClient('public-token-<find yours in the stytch dashboard>')
7
+ *
8
+ * return (
9
+ * <StytchB2BProvider stytch={stytch}>
10
+ * <App />
11
+ * </StytchB2BProvider>
12
+ * )
13
+ * @returns A {@link StytchB2BHeadlessClient}
14
+ */
15
+ export declare const createStytchB2BHeadlessClient: (_PUBLIC_TOKEN: string, options?: import("packages/core/dist/public").StytchClientOptions | undefined) => StytchB2BHeadlessClient;