@envive-ai/react-hooks 0.2.7-arthur-2 → 0.2.7
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/dist/{NewOrgConfig-CInGtTV6.cjs → NewOrgConfig-Bo1seKr6.cjs} +2 -2
- package/dist/{NewOrgConfig-BVByiYPp.js → NewOrgConfig-yptI2imS.js} +2 -2
- package/dist/{SystemSettingsContext-ei5B0dxO.js → SystemSettingsContext-BY1BFgAQ.js} +2 -2
- package/dist/{SystemSettingsContext-150LTxIk.cjs → SystemSettingsContext-EDpRMMt2.cjs} +2 -2
- package/dist/{TrackComponentVisibleEvent-CuwSLbug.js → TrackComponentVisibleEvent-qNE0dIL1.js} +2 -2
- package/dist/{TrackComponentVisibleEvent-C7-nnBks.cjs → TrackComponentVisibleEvent-tDRnrJi3.cjs} +2 -2
- package/dist/{amplitudeContext-C-0-DDk3.cjs → amplitudeContext-C6LHpqP_.cjs} +10 -7
- package/dist/{amplitudeContext-BBQ1ATA3.js → amplitudeContext-rEjGf57q.js} +10 -7
- package/dist/{app-XEFPotoH.cjs → app-BbPSHefQ.cjs} +4 -3
- package/dist/{app-C_Y-57U5.js → app-CflxT_xI.js} +4 -3
- package/dist/application/utils/index.cjs +8 -8
- package/dist/application/utils/index.d.cts +2 -2
- package/dist/application/utils/index.d.ts +2 -2
- package/dist/application/utils/index.js +8 -8
- package/dist/{atomStore-8ppNkJ_n.cjs → atomStore-CmZbgQHc.cjs} +1 -1
- package/dist/{atomStore-BLYJ2ZoQ.js → atomStore-DEcDhiLp.js} +1 -1
- package/dist/atoms/app/index.cjs +4 -4
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +7 -7
- package/dist/atoms/app/index.js +4 -4
- package/dist/atoms/atomStore/index.cjs +1 -1
- package/dist/atoms/atomStore/index.js +1 -1
- package/dist/atoms/chat/index.cjs +9 -9
- package/dist/atoms/chat/index.d.cts +26 -26
- package/dist/atoms/chat/index.d.ts +26 -26
- package/dist/atoms/chat/index.js +9 -9
- package/dist/atoms/globalSearch/index.d.cts +6 -6
- package/dist/atoms/globalSearch/index.d.ts +6 -6
- package/dist/atoms/org/index.cjs +1 -1
- package/dist/atoms/org/index.d.cts +15 -15
- package/dist/atoms/org/index.d.ts +17 -17
- package/dist/atoms/org/index.js +1 -1
- package/dist/atoms/search/index.cjs +11 -11
- package/dist/atoms/search/index.d.cts +1 -1
- package/dist/atoms/search/index.d.ts +1 -1
- package/dist/atoms/search/index.js +11 -11
- package/dist/{cdnContext-CTC-zBtx.js → cdnContext-B8zWuGGT.js} +2 -2
- package/dist/{cdnContext-Bzqk0s2M.cjs → cdnContext-DzifgoNo.cjs} +2 -2
- package/dist/{chat-Bzay7QnI.js → chat-DChvXHjz.js} +6 -6
- package/dist/{chat-Ckd1b_z_.cjs → chat-L_N0qaqs.cjs} +6 -6
- package/dist/{chatSearch-Bev4ZI8Z.cjs → chatSearch-B5whqPLW.cjs} +3 -3
- package/dist/{chatSearch-DNaGtQyx.js → chatSearch-so-qeiEL.js} +3 -3
- package/dist/{chatState-OkYPVghN.cjs → chatState-D9_aA1_h.cjs} +2 -2
- package/dist/{chatState-CcCvgmSM.js → chatState-Dl5lyuKC.js} +2 -2
- package/dist/{commerce-api-ml5fkEuk.js → commerce-api-DEFd5HUH.js} +6 -6
- package/dist/{commerce-api-sQtLuwTh.cjs → commerce-api-DqVD4NH8.cjs} +6 -6
- package/dist/contexts/amplitudeContext/index.cjs +8 -8
- package/dist/contexts/amplitudeContext/index.js +8 -8
- package/dist/contexts/cdnContext/index.cjs +3 -3
- package/dist/contexts/cdnContext/index.js +3 -3
- package/dist/contexts/chatContext/index.cjs +16 -16
- package/dist/contexts/chatContext/index.d.cts +2 -2
- package/dist/contexts/chatContext/index.d.ts +2 -2
- package/dist/contexts/chatContext/index.js +16 -16
- package/dist/contexts/enviveConfigContext/index.cjs +3 -3
- package/dist/contexts/enviveConfigContext/index.js +3 -3
- package/dist/contexts/enviveCssContext/index.cjs +6 -6
- package/dist/contexts/enviveCssContext/index.js +6 -6
- package/dist/contexts/featureFlagContext/index.cjs +4 -4
- package/dist/contexts/featureFlagContext/index.js +4 -4
- package/dist/contexts/graphqlContext/index.cjs +3 -3
- package/dist/contexts/graphqlContext/index.d.ts +1 -1
- package/dist/contexts/graphqlContext/index.js +3 -3
- package/dist/contexts/localStorageContext/index.cjs +1 -1
- package/dist/contexts/localStorageContext/index.js +1 -1
- package/dist/contexts/newOrgConfigContext/index.cjs +5 -5
- package/dist/contexts/newOrgConfigContext/index.d.ts +2 -2
- package/dist/contexts/newOrgConfigContext/index.js +5 -5
- package/dist/contexts/searchContext/index.cjs +10 -10
- package/dist/contexts/searchContext/index.js +10 -10
- package/dist/contexts/sessionStorageContext/index.cjs +1 -1
- package/dist/contexts/sessionStorageContext/index.js +1 -1
- package/dist/contexts/shopifyUrlContext/index.cjs +1 -1
- package/dist/contexts/shopifyUrlContext/index.js +1 -1
- package/dist/contexts/systemSettingsContext/index.cjs +3 -3
- package/dist/contexts/systemSettingsContext/index.d.ts +2 -2
- package/dist/contexts/systemSettingsContext/index.js +3 -3
- package/dist/contexts/userIdentityContext/index.cjs +11 -11
- package/dist/contexts/userIdentityContext/index.js +11 -11
- package/dist/{enviveConfig-DV8F12B9.js → enviveConfig-DZBohDpc.js} +2 -2
- package/dist/{enviveConfig-DZHdtLsQ.cjs → enviveConfig-Dv9-esGV.cjs} +2 -2
- package/dist/{enviveConfigContext-CTcHUIFP.cjs → enviveConfigContext-D2OELZDR.cjs} +2 -2
- package/dist/{enviveConfigContext-BS7aNop5.js → enviveConfigContext-DrDjCems.js} +2 -2
- package/dist/frontendConfig-Cawh5iqv.d.ts +1 -1
- package/dist/{graphqlContext-DgkS-UX1.d.ts → graphqlContext-CXQl0hq2.d.ts} +3 -3
- package/dist/{graphqlContext-CVbYIftg.cjs → graphqlContext-DP8T3-Kd.cjs} +2 -2
- package/dist/{graphqlContext-DouNZbYo.js → graphqlContext-czH0kIZg.js} +2 -2
- package/dist/hooks/AmplitudeOperations/index.cjs +8 -8
- package/dist/hooks/AmplitudeOperations/index.js +8 -8
- package/dist/hooks/AppDetails/index.cjs +7 -7
- package/dist/hooks/AppDetails/index.js +7 -7
- package/dist/hooks/CdnOperations/index.cjs +3 -3
- package/dist/hooks/CdnOperations/index.js +3 -3
- package/dist/hooks/ChatToggle/index.cjs +9 -9
- package/dist/hooks/ChatToggle/index.js +9 -9
- package/dist/hooks/ChatToggleAnalytics/index.cjs +9 -9
- package/dist/hooks/ChatToggleAnalytics/index.js +9 -9
- package/dist/hooks/GrabAndScroll/index.d.ts +2 -2
- package/dist/hooks/GraphQLConfig/index.cjs +4 -4
- package/dist/hooks/GraphQLConfig/index.d.ts +1 -1
- package/dist/hooks/GraphQLConfig/index.js +4 -4
- package/dist/hooks/IdentifyUser/index.cjs +11 -11
- package/dist/hooks/IdentifyUser/index.js +11 -11
- package/dist/hooks/ImageResolver/index.cjs +2 -2
- package/dist/hooks/ImageResolver/index.js +2 -2
- package/dist/hooks/LocalStorageOperations/index.cjs +1 -1
- package/dist/hooks/LocalStorageOperations/index.js +1 -1
- package/dist/hooks/NewOrgConfig/index.cjs +6 -6
- package/dist/hooks/NewOrgConfig/index.d.ts +2 -2
- package/dist/hooks/NewOrgConfig/index.js +6 -6
- package/dist/hooks/Search/index.cjs +17 -17
- package/dist/hooks/Search/index.d.cts +1 -1
- package/dist/hooks/Search/index.d.ts +1 -1
- package/dist/hooks/Search/index.js +17 -17
- package/dist/hooks/SearchOperations/index.cjs +10 -10
- package/dist/hooks/SearchOperations/index.js +10 -10
- package/dist/hooks/SessionStorageOperations/index.cjs +1 -1
- package/dist/hooks/SessionStorageOperations/index.js +1 -1
- package/dist/hooks/ShopifyUrlOperations/index.cjs +1 -1
- package/dist/hooks/ShopifyUrlOperations/index.js +1 -1
- package/dist/hooks/SystemSettingsContext/index.cjs +4 -4
- package/dist/hooks/SystemSettingsContext/index.d.cts +2 -2
- package/dist/hooks/SystemSettingsContext/index.d.ts +2 -2
- package/dist/hooks/SystemSettingsContext/index.js +4 -4
- package/dist/hooks/TrackComponentVisibleEvent/index.cjs +8 -8
- package/dist/hooks/TrackComponentVisibleEvent/index.js +8 -8
- package/dist/hooks/UpdateAnalyticsProps/index.cjs +7 -7
- package/dist/hooks/UpdateAnalyticsProps/index.js +7 -7
- package/dist/{index-DpJzjjpi.d.cts → index-BSd8767K.d.cts} +30 -30
- package/dist/{index-CMJM-3zV.d.ts → index-CUO68KG3.d.ts} +30 -30
- package/dist/{localStorageContext-CqcSvg2H.js → localStorageContext-BPZ82q-G.js} +1 -1
- package/dist/{localStorageContext-DiLfSsqL.cjs → localStorageContext-NRP-CdmF.cjs} +1 -1
- package/dist/{newOrgConfigContext-BIDz4ZuO.cjs → newOrgConfigContext-Bet9CgKP.cjs} +3 -3
- package/dist/{newOrgConfigContext-u_9UPNcX.js → newOrgConfigContext-Bi_dBNe5.js} +3 -3
- package/dist/{newOrgConfigContext-CKn7B2rj.d.ts → newOrgConfigContext-I2qceBB4.d.ts} +2 -2
- package/dist/{orgAnalyticsConfig-CGEQtAFs.cjs → orgAnalyticsConfig-Bm23fw4s.cjs} +1 -1
- package/dist/{orgAnalyticsConfig-i4jozLBB.js → orgAnalyticsConfig-CpBmga08.js} +1 -1
- package/dist/{search-CTVX9gC6.cjs → search-CneZkauD.cjs} +2 -2
- package/dist/{search-NgNrXNS9.js → search-DbZeJYdg.js} +2 -2
- package/dist/{searchContext-DtRmshTA.js → searchContext-BmgoAFMF.js} +5 -5
- package/dist/{searchContext-CnDXkawZ.cjs → searchContext-DksJfC1s.cjs} +5 -5
- package/dist/{sessionStorageContext-1Ks_d4Z0.cjs → sessionStorageContext-B6FsNKjj.cjs} +1 -1
- package/dist/{sessionStorageContext-CDcl7NVl.js → sessionStorageContext-CLYCm83p.js} +1 -1
- package/dist/{shopifyUrlContext-D2btP_lY.js → shopifyUrlContext-C-PkSgNC.js} +1 -1
- package/dist/{shopifyUrlContext-CxjV3qvH.cjs → shopifyUrlContext-ZOcARiMR.cjs} +1 -1
- package/dist/{systemSettingsContext-C4dtZ0uZ.js → systemSettingsContext-DF0jSq9m.js} +2 -2
- package/dist/{systemSettingsContext-BejoGzzB.cjs → systemSettingsContext-dmE1v6w8.cjs} +2 -2
- package/dist/types-BegmH0S1.d.ts +1 -1
- package/dist/{unsupportedProductExceptions-B0yx2bHK.cjs → unsupportedProductExceptions-DGENUnEA.cjs} +1 -1
- package/dist/{unsupportedProductExceptions-Cs66ngs3.js → unsupportedProductExceptions-uQuuelOs.js} +1 -1
- package/dist/{useAmplitudeOperations-Dym0Ker8.js → useAmplitudeOperations-B9HjVe6G.js} +2 -2
- package/dist/{useAmplitudeOperations-BJXD9v2u.cjs → useAmplitudeOperations-BdvxAzuI.cjs} +2 -2
- package/dist/{useAppDetails-Dmh16bWE.js → useAppDetails-B584gkCs.js} +4 -4
- package/dist/{useAppDetails-DsAZ1xQn.cjs → useAppDetails-DczgqeLG.cjs} +4 -4
- package/dist/{useGraphQLConfig-DSRaDTdT.js → useGraphQLConfig-7UxACM4n.js} +2 -2
- package/dist/{useGraphQLConfig-B3DlwmGg.cjs → useGraphQLConfig-D_rF2Sun.cjs} +2 -2
- package/dist/userIdentityContext-CPztaX6-.js +126 -0
- package/dist/userIdentityContext-DdySlQBz.cjs +143 -0
- package/dist/{utils-B7KTAEmV.js → utils-B4PvsKVY.js} +2 -2
- package/dist/{utils-CcC2jZRi.cjs → utils-BRVP7Mnu.cjs} +2 -2
- package/dist/utils-QKFAbPT6.d.ts +1 -1
- package/package.json +1 -1
- package/src/atoms/app/index.ts +1 -1
- package/src/contexts/amplitudeContext/amplitudeContext.tsx +1 -0
- package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +0 -162
- package/src/contexts/userIdentityContext/userIdentityContext.tsx +12 -5
- package/dist/userIdentityContext-DF3atBFE.js +0 -119
- package/dist/userIdentityContext-DpQTduhF.cjs +0 -136
- /package/dist/{amplitudeContext-BItT9HmT.js → amplitudeContext-DbicJUzl.js} +0 -0
- /package/dist/{amplitudeContext-DPtyVv3Q.cjs → amplitudeContext-q3mggFSE.cjs} +0 -0
|
@@ -496,168 +496,6 @@ describe("UserIdentityProvider", () => {
|
|
|
496
496
|
{ timeout: 3000 }
|
|
497
497
|
);
|
|
498
498
|
});
|
|
499
|
-
|
|
500
|
-
it("should not call identifyUser when context is not ready", async () => {
|
|
501
|
-
const identifySpy = vi.spyOn(CommerceApiClient, "identifyUser");
|
|
502
|
-
const logWarnSpy = vi.spyOn(Logger, "logWarn");
|
|
503
|
-
|
|
504
|
-
// Mock localStorage to be unavailable
|
|
505
|
-
const originalLocalStorage = window.localStorage;
|
|
506
|
-
Object.defineProperty(window, "localStorage", {
|
|
507
|
-
value: undefined,
|
|
508
|
-
writable: true,
|
|
509
|
-
});
|
|
510
|
-
|
|
511
|
-
renderWithProviders(<IdentifyUserComponent />);
|
|
512
|
-
|
|
513
|
-
await waitFor(() => {
|
|
514
|
-
expect(screen.getByTestId("identify-button")).toBeInTheDocument();
|
|
515
|
-
});
|
|
516
|
-
|
|
517
|
-
await act(async () => {
|
|
518
|
-
screen.getByTestId("identify-button").click();
|
|
519
|
-
});
|
|
520
|
-
|
|
521
|
-
await waitFor(() => {
|
|
522
|
-
expect(logWarnSpy).toHaveBeenCalledWith(
|
|
523
|
-
"[UserIdentityContext] Context not ready, skipping identifyUser",
|
|
524
|
-
undefined
|
|
525
|
-
);
|
|
526
|
-
expect(identifySpy).not.toHaveBeenCalled();
|
|
527
|
-
});
|
|
528
|
-
|
|
529
|
-
// Restore localStorage
|
|
530
|
-
Object.defineProperty(window, "localStorage", {
|
|
531
|
-
value: originalLocalStorage,
|
|
532
|
-
writable: true,
|
|
533
|
-
});
|
|
534
|
-
});
|
|
535
|
-
|
|
536
|
-
it("should handle errors when identifyUser fails", async () => {
|
|
537
|
-
const identifySpy = vi
|
|
538
|
-
.spyOn(CommerceApiClient, "identifyUser")
|
|
539
|
-
.mockRejectedValueOnce(new Error("API Error"));
|
|
540
|
-
const logErrorSpy = vi.spyOn(Logger, "logError");
|
|
541
|
-
|
|
542
|
-
renderWithProviders(<IdentifyUserComponent />);
|
|
543
|
-
|
|
544
|
-
await waitFor(() => {
|
|
545
|
-
expect(screen.getByTestId("identify-button")).toBeInTheDocument();
|
|
546
|
-
});
|
|
547
|
-
|
|
548
|
-
await act(async () => {
|
|
549
|
-
screen.getByTestId("identify-button").click();
|
|
550
|
-
});
|
|
551
|
-
|
|
552
|
-
await waitFor(() => {
|
|
553
|
-
expect(identifySpy).toHaveBeenCalled();
|
|
554
|
-
expect(logErrorSpy).toHaveBeenCalledWith(
|
|
555
|
-
"[spiffy-ai] Error identifying user",
|
|
556
|
-
expect.any(Error)
|
|
557
|
-
);
|
|
558
|
-
});
|
|
559
|
-
});
|
|
560
|
-
|
|
561
|
-
it("should skip identifyUser when cdpUserId is not available", async () => {
|
|
562
|
-
const identifySpy = vi.spyOn(CommerceApiClient, "identifyUser");
|
|
563
|
-
const logWarnSpy = vi.spyOn(Logger, "logWarn");
|
|
564
|
-
|
|
565
|
-
// The current implementation uses "UNKNOWN_CDP_USER_ID" as placeholder
|
|
566
|
-
// and checks if cdpUserId is falsy, so it will skip
|
|
567
|
-
renderWithProviders(<IdentifyUserComponent />);
|
|
568
|
-
|
|
569
|
-
await waitFor(() => {
|
|
570
|
-
expect(screen.getByTestId("identify-button")).toBeInTheDocument();
|
|
571
|
-
});
|
|
572
|
-
|
|
573
|
-
await act(async () => {
|
|
574
|
-
screen.getByTestId("identify-button").click();
|
|
575
|
-
});
|
|
576
|
-
|
|
577
|
-
// Note: The current implementation checks `if (!cdpUserId)` but uses "UNKNOWN_CDP_USER_ID"
|
|
578
|
-
// which is truthy, so this test may need adjustment based on actual behavior
|
|
579
|
-
// For now, we'll verify the call was made (since "UNKNOWN_CDP_USER_ID" is truthy)
|
|
580
|
-
await waitFor(() => {
|
|
581
|
-
// The current code will call identifyUser because "UNKNOWN_CDP_USER_ID" is truthy
|
|
582
|
-
// If the behavior changes, this test should be updated
|
|
583
|
-
expect(identifySpy).toHaveBeenCalled();
|
|
584
|
-
});
|
|
585
|
-
});
|
|
586
|
-
});
|
|
587
|
-
|
|
588
|
-
describe("isReady state", () => {
|
|
589
|
-
it("should be false when localStorage is not available", async () => {
|
|
590
|
-
const originalLocalStorage = window.localStorage;
|
|
591
|
-
Object.defineProperty(window, "localStorage", {
|
|
592
|
-
value: undefined,
|
|
593
|
-
writable: true,
|
|
594
|
-
});
|
|
595
|
-
|
|
596
|
-
renderWithProviders(<MockComponent />);
|
|
597
|
-
|
|
598
|
-
await waitFor(() => {
|
|
599
|
-
expect(screen.getByTestId("is-ready").textContent).toBe("false");
|
|
600
|
-
});
|
|
601
|
-
|
|
602
|
-
// Restore localStorage
|
|
603
|
-
Object.defineProperty(window, "localStorage", {
|
|
604
|
-
value: originalLocalStorage,
|
|
605
|
-
writable: true,
|
|
606
|
-
});
|
|
607
|
-
});
|
|
608
|
-
|
|
609
|
-
it("should be true when localStorage is available", async () => {
|
|
610
|
-
renderWithProviders(<MockComponent />);
|
|
611
|
-
|
|
612
|
-
await waitFor(() => {
|
|
613
|
-
expect(screen.getByTestId("is-ready").textContent).toBe("true");
|
|
614
|
-
});
|
|
615
|
-
});
|
|
616
|
-
|
|
617
|
-
it("should update when localStorage availability changes", async () => {
|
|
618
|
-
renderWithProviders(<MockComponent />);
|
|
619
|
-
|
|
620
|
-
await waitFor(() => {
|
|
621
|
-
expect(screen.getByTestId("is-ready").textContent).toBe("true");
|
|
622
|
-
});
|
|
623
|
-
|
|
624
|
-
// Note: Testing localStorage becoming unavailable requires unmounting and remounting
|
|
625
|
-
// the provider, which is complex. This test verifies the ready state is correct
|
|
626
|
-
// when localStorage is available. The unavailable case is tested in the other test.
|
|
627
|
-
});
|
|
628
|
-
});
|
|
629
|
-
|
|
630
|
-
describe("Context Value Memoization", () => {
|
|
631
|
-
it("should maintain stable context value references", async () => {
|
|
632
|
-
let contextValue1: UserIdentityContextType | undefined;
|
|
633
|
-
let contextValue2: UserIdentityContextType | undefined;
|
|
634
|
-
|
|
635
|
-
const Component1: React.FC = () => {
|
|
636
|
-
const context = useUserIdentity();
|
|
637
|
-
contextValue1 = context;
|
|
638
|
-
return <div>Component1</div>;
|
|
639
|
-
};
|
|
640
|
-
|
|
641
|
-
const Component2: React.FC = () => {
|
|
642
|
-
const context = useUserIdentity();
|
|
643
|
-
contextValue2 = context;
|
|
644
|
-
return <div>Component2</div>;
|
|
645
|
-
};
|
|
646
|
-
|
|
647
|
-
renderWithProviders(
|
|
648
|
-
<>
|
|
649
|
-
<Component1 />
|
|
650
|
-
<Component2 />
|
|
651
|
-
</>
|
|
652
|
-
);
|
|
653
|
-
|
|
654
|
-
await waitFor(() => {
|
|
655
|
-
expect(contextValue1).toBeDefined();
|
|
656
|
-
expect(contextValue2).toBeDefined();
|
|
657
|
-
// Both components should receive the same context instance
|
|
658
|
-
expect(contextValue1).toBe(contextValue2);
|
|
659
|
-
});
|
|
660
|
-
});
|
|
661
499
|
});
|
|
662
500
|
});
|
|
663
501
|
|
|
@@ -12,7 +12,7 @@ import CommerceApiClient from "src/application/commerce-api";
|
|
|
12
12
|
import { v4 as uuid } from "uuid";
|
|
13
13
|
import { ClientDetails } from "src/application/models/clientDetails";
|
|
14
14
|
import { useLocalStorage } from "src/contexts/localStorageContext";
|
|
15
|
-
import {
|
|
15
|
+
import { useSetAtom } from "jotai";
|
|
16
16
|
import { userIdAtom } from "src/atoms/app";
|
|
17
17
|
|
|
18
18
|
// Helper function from the original service
|
|
@@ -50,7 +50,8 @@ const UserIdentityContext = createContext<UserIdentityContextType | undefined>(
|
|
|
50
50
|
export const UserIdentityProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
51
51
|
children,
|
|
52
52
|
}) => {
|
|
53
|
-
const [
|
|
53
|
+
const [localUserId, setLocalUserId] = useState<string | undefined>(undefined);
|
|
54
|
+
const setUserId = useSetAtom(userIdAtom);
|
|
54
55
|
const {
|
|
55
56
|
getItem,
|
|
56
57
|
setItem,
|
|
@@ -182,11 +183,17 @@ export const UserIdentityProvider: React.FC<{ children: React.ReactNode }> = ({
|
|
|
182
183
|
]
|
|
183
184
|
);
|
|
184
185
|
useEffect(() => {
|
|
185
|
-
if (isReady && !
|
|
186
|
-
|
|
186
|
+
if (isReady && !localUserId) {
|
|
187
|
+
const newUserId = getUserIdOrDefault();
|
|
188
|
+
console.log("useUserIdentity useEffect - setting localUserId", newUserId);
|
|
189
|
+
setLocalUserId(newUserId);
|
|
190
|
+
setUserId(newUserId);
|
|
187
191
|
}
|
|
188
|
-
}, [isReady,
|
|
192
|
+
}, [isReady, localUserId, setUserId]);
|
|
189
193
|
|
|
194
|
+
if (!localUserId) {
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
190
197
|
return (
|
|
191
198
|
<UserIdentityContext.Provider value={value}>
|
|
192
199
|
{children}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { logger_default } from "./logger-W3lqg-4b.js";
|
|
2
|
-
import { useLocalStorage } from "./localStorageContext-CqcSvg2H.js";
|
|
3
|
-
import { userIdAtom } from "./app-C_Y-57U5.js";
|
|
4
|
-
import { commerce_api_default } from "./commerce-api-ml5fkEuk.js";
|
|
5
|
-
import { v4 } from "uuid";
|
|
6
|
-
import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
|
|
7
|
-
import { useAtom } from "jotai";
|
|
8
|
-
import { jsx } from "react/jsx-runtime";
|
|
9
|
-
import UAParser from "ua-parser-js";
|
|
10
|
-
|
|
11
|
-
//#region src/contexts/userIdentityContext/userIdentityContext.tsx
|
|
12
|
-
const getUserAgentDetails = () => {
|
|
13
|
-
const result = new UAParser().getResult();
|
|
14
|
-
return {
|
|
15
|
-
os: result?.os?.name,
|
|
16
|
-
osVersion: result?.os?.version,
|
|
17
|
-
deviceBrand: result?.device?.vendor,
|
|
18
|
-
deviceManufacturer: result?.device?.vendor,
|
|
19
|
-
deviceModel: result?.device?.model,
|
|
20
|
-
browser: result?.browser?.name,
|
|
21
|
-
browserVersion: result?.browser?.version,
|
|
22
|
-
userAgent: result?.ua
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
const UserIdentityContext = createContext(void 0);
|
|
26
|
-
const UserIdentityProvider = ({ children }) => {
|
|
27
|
-
const [userId, setUserId] = useAtom(userIdAtom);
|
|
28
|
-
const { getItem, setItem, isAvailable: localStorageIsReady } = useLocalStorage();
|
|
29
|
-
const [isReady, setIsReady] = useState(false);
|
|
30
|
-
useEffect(() => {
|
|
31
|
-
setIsReady(localStorageIsReady);
|
|
32
|
-
}, [localStorageIsReady]);
|
|
33
|
-
const USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
|
|
34
|
-
const USER_ID_DEFAULT_KEY = "v1-spiffy-user-id-default";
|
|
35
|
-
const getUserIdOverrideFromLocalStorage = useCallback(() => {
|
|
36
|
-
return getItem(USER_ID_OVERRIDE_KEY) ?? void 0;
|
|
37
|
-
}, [getItem]);
|
|
38
|
-
const getUserIdDefaultFromLocalStorage = useCallback(() => {
|
|
39
|
-
return getItem(USER_ID_DEFAULT_KEY) ?? void 0;
|
|
40
|
-
}, [getItem]);
|
|
41
|
-
const setUserIdDefaultInLocalStorage = useCallback((userId$1) => {
|
|
42
|
-
logger_default.logInfo(`setUserIdDefaultInLocalStorage - Setting user_id=${userId$1}`);
|
|
43
|
-
setItem(USER_ID_DEFAULT_KEY, userId$1);
|
|
44
|
-
return userId$1;
|
|
45
|
-
}, [setItem, USER_ID_DEFAULT_KEY]);
|
|
46
|
-
const setUserIdOverrideInLocalStorage = useCallback((userId$1) => {
|
|
47
|
-
logger_default.logInfo(`setUserIdOverrideInLocalStorage - Setting user_id=${userId$1}`);
|
|
48
|
-
setItem(USER_ID_OVERRIDE_KEY, userId$1);
|
|
49
|
-
return userId$1;
|
|
50
|
-
}, [setItem, USER_ID_OVERRIDE_KEY]);
|
|
51
|
-
const clearUserIdOverrideInLocalStorage = useCallback(() => {
|
|
52
|
-
logger_default.logInfo(`clearUserIdOverrideInLocalStorage - Clearing user_id`);
|
|
53
|
-
setItem(USER_ID_OVERRIDE_KEY, "");
|
|
54
|
-
}, [setItem, USER_ID_OVERRIDE_KEY]);
|
|
55
|
-
const getUserIdOrDefault = useCallback(() => {
|
|
56
|
-
const userIdOverride = getUserIdOverrideFromLocalStorage();
|
|
57
|
-
if (userIdOverride) return userIdOverride;
|
|
58
|
-
const defaultUserId = getUserIdDefaultFromLocalStorage();
|
|
59
|
-
if (defaultUserId) return defaultUserId;
|
|
60
|
-
return setUserIdDefaultInLocalStorage(`spiffy-user-id-${v4()}`);
|
|
61
|
-
}, [
|
|
62
|
-
getUserIdOverrideFromLocalStorage,
|
|
63
|
-
getUserIdDefaultFromLocalStorage,
|
|
64
|
-
setUserIdDefaultInLocalStorage
|
|
65
|
-
]);
|
|
66
|
-
const identifyUser = useCallback(async () => {
|
|
67
|
-
if (!isReady) {
|
|
68
|
-
logger_default.logWarn("[UserIdentityContext] Context not ready, skipping identifyUser", void 0);
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
try {
|
|
72
|
-
const cdpUserId = "UNKNOWN_CDP_USER_ID";
|
|
73
|
-
const userId$1 = getUserIdOrDefault();
|
|
74
|
-
const userAgentDetails = getUserAgentDetails();
|
|
75
|
-
await commerce_api_default.identifyUser(userId$1, cdpUserId, userAgentDetails);
|
|
76
|
-
} catch (error) {
|
|
77
|
-
logger_default.logError("[spiffy-ai] Error identifying user", error);
|
|
78
|
-
}
|
|
79
|
-
}, [isReady, getUserIdOrDefault]);
|
|
80
|
-
const value = useMemo(() => ({
|
|
81
|
-
identifyUser,
|
|
82
|
-
getUserIdOrDefault,
|
|
83
|
-
getUserIdOverrideFromLocalStorage,
|
|
84
|
-
getUserIdDefaultFromLocalStorage,
|
|
85
|
-
setUserIdDefaultInLocalStorage,
|
|
86
|
-
setUserIdOverrideInLocalStorage,
|
|
87
|
-
clearUserIdOverrideInLocalStorage,
|
|
88
|
-
isReady
|
|
89
|
-
}), [
|
|
90
|
-
identifyUser,
|
|
91
|
-
getUserIdOrDefault,
|
|
92
|
-
getUserIdOverrideFromLocalStorage,
|
|
93
|
-
getUserIdDefaultFromLocalStorage,
|
|
94
|
-
setUserIdDefaultInLocalStorage,
|
|
95
|
-
setUserIdOverrideInLocalStorage,
|
|
96
|
-
clearUserIdOverrideInLocalStorage,
|
|
97
|
-
isReady
|
|
98
|
-
]);
|
|
99
|
-
useEffect(() => {
|
|
100
|
-
if (isReady && !userId) setUserId(getUserIdOrDefault() ?? "");
|
|
101
|
-
}, [
|
|
102
|
-
isReady,
|
|
103
|
-
userId,
|
|
104
|
-
setUserId
|
|
105
|
-
]);
|
|
106
|
-
return /* @__PURE__ */ jsx(UserIdentityContext.Provider, {
|
|
107
|
-
value,
|
|
108
|
-
children
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
const useUserIdentity = () => {
|
|
112
|
-
const context = useContext(UserIdentityContext);
|
|
113
|
-
if (!context) throw new Error("useUserIdentity must be used within a UserIdentityProvider");
|
|
114
|
-
return context;
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
//#endregion
|
|
118
|
-
export { UserIdentityProvider, useUserIdentity };
|
|
119
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5Q29udGV4dC1ERjNhdEJGRS5qcyIsIm5hbWVzIjpbIlVzZXJJZGVudGl0eVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4iLCJ1c2VySWQiLCJ1dWlkIiwiQ29tbWVyY2VBcGlDbGllbnQiXSwic291cmNlcyI6WyIuLi9zcmMvY29udGV4dHMvdXNlcklkZW50aXR5Q29udGV4dC91c2VySWRlbnRpdHlDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFVBUGFyc2VyIGZyb20gXCJ1YS1wYXJzZXItanNcIjtcbmltcG9ydCBMb2dnZXIgZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlclwiO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gXCJzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IENsaWVudERldGFpbHMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9jbGllbnREZXRhaWxzXCI7XG5pbXBvcnQgeyB1c2VMb2NhbFN0b3JhZ2UgfSBmcm9tIFwic3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IHVzZXJJZEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FwcFwiO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gZnJvbSB0aGUgb3JpZ2luYWwgc2VydmljZVxuY29uc3QgZ2V0VXNlckFnZW50RGV0YWlscyA9ICgpOiBDbGllbnREZXRhaWxzID0+IHtcbiAgY29uc3QgdWFQYXJzZXIgPSBuZXcgVUFQYXJzZXIoKTtcbiAgY29uc3QgcmVzdWx0ID0gdWFQYXJzZXIuZ2V0UmVzdWx0KCk7XG5cbiAgcmV0dXJuIHtcbiAgICBvczogcmVzdWx0Py5vcz8ubmFtZSxcbiAgICBvc1ZlcnNpb246IHJlc3VsdD8ub3M/LnZlcnNpb24sXG4gICAgZGV2aWNlQnJhbmQ6IHJlc3VsdD8uZGV2aWNlPy52ZW5kb3IsXG4gICAgZGV2aWNlTWFudWZhY3R1cmVyOiByZXN1bHQ/LmRldmljZT8udmVuZG9yLFxuICAgIGRldmljZU1vZGVsOiByZXN1bHQ/LmRldmljZT8ubW9kZWwsXG4gICAgYnJvd3NlcjogcmVzdWx0Py5icm93c2VyPy5uYW1lLFxuICAgIGJyb3dzZXJWZXJzaW9uOiByZXN1bHQ/LmJyb3dzZXI/LnZlcnNpb24sXG4gICAgdXNlckFnZW50OiByZXN1bHQ/LnVhLFxuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB7XG4gIGlkZW50aWZ5VXNlcjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0VXNlcklkT3JEZWZhdWx0OiAoKSA9PiBzdHJpbmc7XG4gIGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZTogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZTogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZXRVc2VySWREZWZhdWx0SW5Mb2NhbFN0b3JhZ2U6ICh1c2VySWQ6IHN0cmluZykgPT4gc3RyaW5nO1xuICBzZXRVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlOiAodXNlcklkOiBzdHJpbmcpID0+IHN0cmluZztcbiAgY2xlYXJVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlOiAoKSA9PiB2b2lkO1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBVc2VySWRlbnRpdHlDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZFxuKTtcblxuZXhwb3J0IGNvbnN0IFVzZXJJZGVudGl0eVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoe1xuICBjaGlsZHJlbixcbn0pID0+IHtcbiAgY29uc3QgW3VzZXJJZCwgc2V0VXNlcklkXSA9IHVzZUF0b20odXNlcklkQXRvbSk7XG4gIGNvbnN0IHtcbiAgICBnZXRJdGVtLFxuICAgIHNldEl0ZW0sXG4gICAgaXNBdmFpbGFibGU6IGxvY2FsU3RvcmFnZUlzUmVhZHksXG4gIH0gPSB1c2VMb2NhbFN0b3JhZ2UoKTtcblxuICBjb25zdCBbaXNSZWFkeSwgc2V0SXNSZWFkeV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBBc3N1bWluZyBDb21tZXJjZUFwaUNsaWVudCBhbmQgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSByZWFkeSBpZiBsb2NhbFN0b3JhZ2UgaXMuXG4gICAgLy8gSW4gYSBtb3JlIGNvbXBsZXggc2NlbmFyaW8sIHlvdSBtaWdodCBoYXZlIG1vcmUgY2hlY2tzIGhlcmUuXG4gICAgc2V0SXNSZWFkeShsb2NhbFN0b3JhZ2VJc1JlYWR5KTtcbiAgfSwgW2xvY2FsU3RvcmFnZUlzUmVhZHldKTtcblxuICBjb25zdCBVU0VSX0lEX09WRVJSSURFX0tFWSA9IFwidjEtc3BpZmZ5LXVzZXItaWQtb3ZlcnJpZGVcIjtcbiAgY29uc3QgVVNFUl9JRF9ERUZBVUxUX0tFWSA9IFwidjEtc3BpZmZ5LXVzZXItaWQtZGVmYXVsdFwiO1xuXG4gIGNvbnN0IGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSA9IHVzZUNhbGxiYWNrKCgpOlxuICAgIHwgc3RyaW5nXG4gICAgfCB1bmRlZmluZWQgPT4ge1xuICAgIHJldHVybiBnZXRJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZKSA/PyB1bmRlZmluZWQ7XG4gIH0sIFtnZXRJdGVtXSk7XG5cbiAgY29uc3QgZ2V0VXNlcklkRGVmYXVsdEZyb21Mb2NhbFN0b3JhZ2UgPSB1c2VDYWxsYmFjaygoKTpcbiAgICB8IHN0cmluZ1xuICAgIHwgdW5kZWZpbmVkID0+IHtcbiAgICByZXR1cm4gZ2V0SXRlbShVU0VSX0lEX0RFRkFVTFRfS0VZKSA/PyB1bmRlZmluZWQ7XG4gIH0sIFtnZXRJdGVtXSk7XG5cbiAgY29uc3Qgc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHVzZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKFxuICAgICAgICBgc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlIC0gU2V0dGluZyB1c2VyX2lkPSR7dXNlcklkfWBcbiAgICAgICk7XG4gICAgICBzZXRJdGVtKFVTRVJfSURfREVGQVVMVF9LRVksIHVzZXJJZCk7XG4gICAgICAvLyB3aW5kb3cuZGlzcGF0Y2hFdmVudCBpcyBoYW5kbGVkIGJ5IHVzZUxvY2FsU3RvcmFnZSBub3dcbiAgICAgIHJldHVybiB1c2VySWQ7XG4gICAgfSxcbiAgICBbc2V0SXRlbSwgVVNFUl9JRF9ERUZBVUxUX0tFWV1cbiAgKTtcblxuICBjb25zdCBzZXRVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHVzZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKFxuICAgICAgICBgc2V0VXNlcklkT3ZlcnJpZGVJbkxvY2FsU3RvcmFnZSAtIFNldHRpbmcgdXNlcl9pZD0ke3VzZXJJZH1gXG4gICAgICApO1xuICAgICAgc2V0SXRlbShVU0VSX0lEX09WRVJSSURFX0tFWSwgdXNlcklkKTtcbiAgICAgIC8vIHdpbmRvdy5kaXNwYXRjaEV2ZW50IGlzIGhhbmRsZWQgYnkgdXNlTG9jYWxTdG9yYWdlIG5vd1xuICAgICAgcmV0dXJuIHVzZXJJZDtcbiAgICB9LFxuICAgIFtzZXRJdGVtLCBVU0VSX0lEX09WRVJSSURFX0tFWV1cbiAgKTtcblxuICBjb25zdCBjbGVhclVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oYGNsZWFyVXNlcklkT3ZlcnJpZGVJbkxvY2FsU3RvcmFnZSAtIENsZWFyaW5nIHVzZXJfaWRgKTtcbiAgICAvLyBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldExvY2FsU3RvcmFnZSgpPy5yZW1vdmVJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZKTtcbiAgICAvLyB3aW5kb3cuZGlzcGF0Y2hFdmVudCBpcyBoYW5kbGVkIGJ5IHVzZUxvY2FsU3RvcmFnZSBub3dcbiAgICBzZXRJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZLCBcIlwiKTsgLy8gU2V0IHRvIGVtcHR5IHN0cmluZyB0byBjbGVhclxuICB9LCBbc2V0SXRlbSwgVVNFUl9JRF9PVkVSUklERV9LRVldKTtcblxuICBjb25zdCBnZXRVc2VySWRPckRlZmF1bHQgPSB1c2VDYWxsYmFjaygoKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCB1c2VySWRPdmVycmlkZSA9IGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmICh1c2VySWRPdmVycmlkZSkge1xuICAgICAgcmV0dXJuIHVzZXJJZE92ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRVc2VySWQgPSBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmIChkZWZhdWx0VXNlcklkKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFVzZXJJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlKGBzcGlmZnktdXNlci1pZC0ke3V1aWQoKX1gKTtcbiAgfSwgW1xuICAgIGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSxcbiAgICBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSxcbiAgICBzZXRVc2VySWREZWZhdWx0SW5Mb2NhbFN0b3JhZ2UsXG4gIF0pO1xuXG4gIGNvbnN0IGlkZW50aWZ5VXNlciA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIWlzUmVhZHkpIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICBcIltVc2VySWRlbnRpdHlDb250ZXh0XSBDb250ZXh0IG5vdCByZWFkeSwgc2tpcHBpbmcgaWRlbnRpZnlVc2VyXCIsXG4gICAgICAgIHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVGVtcG9yYXJpbHkgY29tbWVudGVkIG91dCB1bnRpbCBXaW5kb3dEYXRhTGF5ZXJTZXJ2aWNlIGlzIHJlc29sdmVkXG4gICAgICAvLyBjb25zdCBjZHBVc2VySWQgPSBXaW5kb3dEYXRhTGF5ZXJTZXJ2aWNlLmdldEdvb2dsZUFuYWx5dGljc0NsaWVudElkKCk7XG4gICAgICBjb25zdCBjZHBVc2VySWQgPSBcIlVOS05PV05fQ0RQX1VTRVJfSURcIjsgLy8gUGxhY2Vob2xkZXJcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGdldFVzZXJJZE9yRGVmYXVsdCgpO1xuICAgICAgY29uc3QgdXNlckFnZW50RGV0YWlscyA9IGdldFVzZXJBZ2VudERldGFpbHMoKTtcblxuICAgICAgaWYgKCFjZHBVc2VySWQpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICAgXCJbc3BpZmZ5LWFpXSBObyBHQSBDbGllbnQgSUQgZm91bmQsIHNraXBwaW5nIGlkZW50aWZ5VXNlclwiLFxuICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmlkZW50aWZ5VXNlcih1c2VySWQsIGNkcFVzZXJJZCwgdXNlckFnZW50RGV0YWlscyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIEVycm9yIGlkZW50aWZ5aW5nIHVzZXJcIiwgZXJyb3IpO1xuICAgIH1cbiAgfSwgW2lzUmVhZHksIGdldFVzZXJJZE9yRGVmYXVsdF0pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgaWRlbnRpZnlVc2VyLFxuICAgICAgZ2V0VXNlcklkT3JEZWZhdWx0LFxuICAgICAgZ2V0VXNlcklkT3ZlcnJpZGVGcm9tTG9jYWxTdG9yYWdlLFxuICAgICAgZ2V0VXNlcklkRGVmYXVsdEZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgICBzZXRVc2VySWREZWZhdWx0SW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBzZXRVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlLFxuICAgICAgY2xlYXJVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlLFxuICAgICAgaXNSZWFkeSxcbiAgICB9KSxcbiAgICBbXG4gICAgICBpZGVudGlmeVVzZXIsXG4gICAgICBnZXRVc2VySWRPckRlZmF1bHQsXG4gICAgICBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgICBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSxcbiAgICAgIHNldFVzZXJJZERlZmF1bHRJbkxvY2FsU3RvcmFnZSxcbiAgICAgIHNldFVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBjbGVhclVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBpc1JlYWR5LFxuICAgIF1cbiAgKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNSZWFkeSAmJiAhdXNlcklkKSB7XG4gICAgICBzZXRVc2VySWQoZ2V0VXNlcklkT3JEZWZhdWx0KCkgPz8gXCJcIik7XG4gICAgfVxuICB9LCBbaXNSZWFkeSwgdXNlcklkLCBzZXRVc2VySWRdKTtcblxuICByZXR1cm4gKFxuICAgIDxVc2VySWRlbnRpdHlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Vc2VySWRlbnRpdHlDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVVzZXJJZGVudGl0eSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoVXNlcklkZW50aXR5Q29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwidXNlVXNlcklkZW50aXR5IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBVc2VySWRlbnRpdHlQcm92aWRlclwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBa0JBLE1BQU0sNEJBQTJDO0NBRS9DLE1BQU0sU0FEVyxJQUFJLFVBQVUsQ0FDUCxXQUFXO0FBRW5DLFFBQU87RUFDTCxJQUFJLFFBQVEsSUFBSTtFQUNoQixXQUFXLFFBQVEsSUFBSTtFQUN2QixhQUFhLFFBQVEsUUFBUTtFQUM3QixvQkFBb0IsUUFBUSxRQUFRO0VBQ3BDLGFBQWEsUUFBUSxRQUFRO0VBQzdCLFNBQVMsUUFBUSxTQUFTO0VBQzFCLGdCQUFnQixRQUFRLFNBQVM7RUFDakMsV0FBVyxRQUFRO0VBQ3BCOztBQWNILE1BQU0sc0JBQXNCLGNBQzFCLE9BQ0Q7QUFFRCxNQUFhQSx3QkFBaUUsRUFDNUUsZUFDSTtDQUNKLE1BQU0sQ0FBQyxRQUFRLGFBQWEsUUFBUSxXQUFXO0NBQy9DLE1BQU0sRUFDSixTQUNBLFNBQ0EsYUFBYSx3QkFDWCxpQkFBaUI7Q0FFckIsTUFBTSxDQUFDLFNBQVMsY0FBYyxTQUFTLE1BQU07QUFFN0MsaUJBQWdCO0FBR2QsYUFBVyxvQkFBb0I7SUFDOUIsQ0FBQyxvQkFBb0IsQ0FBQztDQUV6QixNQUFNLHVCQUF1QjtDQUM3QixNQUFNLHNCQUFzQjtDQUU1QixNQUFNLG9DQUFvQyxrQkFFekI7QUFDZixTQUFPLFFBQVEscUJBQXFCLElBQUk7SUFDdkMsQ0FBQyxRQUFRLENBQUM7Q0FFYixNQUFNLG1DQUFtQyxrQkFFeEI7QUFDZixTQUFPLFFBQVEsb0JBQW9CLElBQUk7SUFDdEMsQ0FBQyxRQUFRLENBQUM7Q0FFYixNQUFNLGlDQUFpQyxhQUNwQyxhQUEyQjtBQUMxQixpQkFBTyxRQUNMLG9EQUFvREMsV0FDckQ7QUFDRCxVQUFRLHFCQUFxQkEsU0FBTztBQUVwQyxTQUFPQTtJQUVULENBQUMsU0FBUyxvQkFBb0IsQ0FDL0I7Q0FFRCxNQUFNLGtDQUFrQyxhQUNyQyxhQUEyQjtBQUMxQixpQkFBTyxRQUNMLHFEQUFxREEsV0FDdEQ7QUFDRCxVQUFRLHNCQUFzQkEsU0FBTztBQUVyQyxTQUFPQTtJQUVULENBQUMsU0FBUyxxQkFBcUIsQ0FDaEM7Q0FFRCxNQUFNLG9DQUFvQyxrQkFBa0I7QUFDMUQsaUJBQU8sUUFBUSx1REFBdUQ7QUFHdEUsVUFBUSxzQkFBc0IsR0FBRztJQUNoQyxDQUFDLFNBQVMscUJBQXFCLENBQUM7Q0FFbkMsTUFBTSxxQkFBcUIsa0JBQTBCO0VBQ25ELE1BQU0saUJBQWlCLG1DQUFtQztBQUMxRCxNQUFJLGVBQ0YsUUFBTztFQUdULE1BQU0sZ0JBQWdCLGtDQUFrQztBQUN4RCxNQUFJLGNBQ0YsUUFBTztBQUdULFNBQU8sK0JBQStCLGtCQUFrQkMsSUFBTSxHQUFHO0lBQ2hFO0VBQ0Q7RUFDQTtFQUNBO0VBQ0QsQ0FBQztDQUVGLE1BQU0sZUFBZSxZQUFZLFlBQTJCO0FBQzFELE1BQUksQ0FBQyxTQUFTO0FBQ1osa0JBQU8sUUFDTCxrRUFDQSxPQUNEO0FBQ0Q7O0FBR0YsTUFBSTtHQUdGLE1BQU0sWUFBWTtHQUNsQixNQUFNRCxXQUFTLG9CQUFvQjtHQUNuQyxNQUFNLG1CQUFtQixxQkFBcUI7QUFVOUMsU0FBTUUscUJBQWtCLGFBQWFGLFVBQVEsV0FBVyxpQkFBaUI7V0FDbEUsT0FBTztBQUNkLGtCQUFPLFNBQVMsc0NBQXNDLE1BQU07O0lBRTdELENBQUMsU0FBUyxtQkFBbUIsQ0FBQztDQUVqQyxNQUFNLFFBQVEsZUFDTDtFQUNMO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDRCxHQUNEO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNELENBQ0Y7QUFDRCxpQkFBZ0I7QUFDZCxNQUFJLFdBQVcsQ0FBQyxPQUNkLFdBQVUsb0JBQW9CLElBQUksR0FBRztJQUV0QztFQUFDO0VBQVM7RUFBUTtFQUFVLENBQUM7QUFFaEMsUUFDRSxvQkFBQyxvQkFBb0I7RUFBZ0I7RUFDbEM7R0FDNEI7O0FBSW5DLE1BQWEsd0JBQXdCO0NBQ25DLE1BQU0sVUFBVSxXQUFXLG9CQUFvQjtBQUMvQyxLQUFJLENBQUMsUUFDSCxPQUFNLElBQUksTUFDUiw2REFDRDtBQUVILFFBQU8ifQ==
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
-
const require_logger = require('./logger-TBIl4uIH.cjs');
|
|
3
|
-
const require_localStorageContext = require('./localStorageContext-DiLfSsqL.cjs');
|
|
4
|
-
const require_app = require('./app-XEFPotoH.cjs');
|
|
5
|
-
const require_commerce_api = require('./commerce-api-sQtLuwTh.cjs');
|
|
6
|
-
let uuid = require("uuid");
|
|
7
|
-
uuid = require_chunk.__toESM(uuid);
|
|
8
|
-
let react = require("react");
|
|
9
|
-
react = require_chunk.__toESM(react);
|
|
10
|
-
let jotai = require("jotai");
|
|
11
|
-
jotai = require_chunk.__toESM(jotai);
|
|
12
|
-
let react_jsx_runtime = require("react/jsx-runtime");
|
|
13
|
-
react_jsx_runtime = require_chunk.__toESM(react_jsx_runtime);
|
|
14
|
-
let ua_parser_js = require("ua-parser-js");
|
|
15
|
-
ua_parser_js = require_chunk.__toESM(ua_parser_js);
|
|
16
|
-
|
|
17
|
-
//#region src/contexts/userIdentityContext/userIdentityContext.tsx
|
|
18
|
-
const getUserAgentDetails = () => {
|
|
19
|
-
const result = new ua_parser_js.default().getResult();
|
|
20
|
-
return {
|
|
21
|
-
os: result?.os?.name,
|
|
22
|
-
osVersion: result?.os?.version,
|
|
23
|
-
deviceBrand: result?.device?.vendor,
|
|
24
|
-
deviceManufacturer: result?.device?.vendor,
|
|
25
|
-
deviceModel: result?.device?.model,
|
|
26
|
-
browser: result?.browser?.name,
|
|
27
|
-
browserVersion: result?.browser?.version,
|
|
28
|
-
userAgent: result?.ua
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
const UserIdentityContext = (0, react.createContext)(void 0);
|
|
32
|
-
const UserIdentityProvider = ({ children }) => {
|
|
33
|
-
const [userId, setUserId] = (0, jotai.useAtom)(require_app.userIdAtom);
|
|
34
|
-
const { getItem, setItem, isAvailable: localStorageIsReady } = require_localStorageContext.useLocalStorage();
|
|
35
|
-
const [isReady, setIsReady] = (0, react.useState)(false);
|
|
36
|
-
(0, react.useEffect)(() => {
|
|
37
|
-
setIsReady(localStorageIsReady);
|
|
38
|
-
}, [localStorageIsReady]);
|
|
39
|
-
const USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
|
|
40
|
-
const USER_ID_DEFAULT_KEY = "v1-spiffy-user-id-default";
|
|
41
|
-
const getUserIdOverrideFromLocalStorage = (0, react.useCallback)(() => {
|
|
42
|
-
return getItem(USER_ID_OVERRIDE_KEY) ?? void 0;
|
|
43
|
-
}, [getItem]);
|
|
44
|
-
const getUserIdDefaultFromLocalStorage = (0, react.useCallback)(() => {
|
|
45
|
-
return getItem(USER_ID_DEFAULT_KEY) ?? void 0;
|
|
46
|
-
}, [getItem]);
|
|
47
|
-
const setUserIdDefaultInLocalStorage = (0, react.useCallback)((userId$1) => {
|
|
48
|
-
require_logger.logger_default.logInfo(`setUserIdDefaultInLocalStorage - Setting user_id=${userId$1}`);
|
|
49
|
-
setItem(USER_ID_DEFAULT_KEY, userId$1);
|
|
50
|
-
return userId$1;
|
|
51
|
-
}, [setItem, USER_ID_DEFAULT_KEY]);
|
|
52
|
-
const setUserIdOverrideInLocalStorage = (0, react.useCallback)((userId$1) => {
|
|
53
|
-
require_logger.logger_default.logInfo(`setUserIdOverrideInLocalStorage - Setting user_id=${userId$1}`);
|
|
54
|
-
setItem(USER_ID_OVERRIDE_KEY, userId$1);
|
|
55
|
-
return userId$1;
|
|
56
|
-
}, [setItem, USER_ID_OVERRIDE_KEY]);
|
|
57
|
-
const clearUserIdOverrideInLocalStorage = (0, react.useCallback)(() => {
|
|
58
|
-
require_logger.logger_default.logInfo(`clearUserIdOverrideInLocalStorage - Clearing user_id`);
|
|
59
|
-
setItem(USER_ID_OVERRIDE_KEY, "");
|
|
60
|
-
}, [setItem, USER_ID_OVERRIDE_KEY]);
|
|
61
|
-
const getUserIdOrDefault = (0, react.useCallback)(() => {
|
|
62
|
-
const userIdOverride = getUserIdOverrideFromLocalStorage();
|
|
63
|
-
if (userIdOverride) return userIdOverride;
|
|
64
|
-
const defaultUserId = getUserIdDefaultFromLocalStorage();
|
|
65
|
-
if (defaultUserId) return defaultUserId;
|
|
66
|
-
return setUserIdDefaultInLocalStorage(`spiffy-user-id-${(0, uuid.v4)()}`);
|
|
67
|
-
}, [
|
|
68
|
-
getUserIdOverrideFromLocalStorage,
|
|
69
|
-
getUserIdDefaultFromLocalStorage,
|
|
70
|
-
setUserIdDefaultInLocalStorage
|
|
71
|
-
]);
|
|
72
|
-
const identifyUser = (0, react.useCallback)(async () => {
|
|
73
|
-
if (!isReady) {
|
|
74
|
-
require_logger.logger_default.logWarn("[UserIdentityContext] Context not ready, skipping identifyUser", void 0);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
try {
|
|
78
|
-
const cdpUserId = "UNKNOWN_CDP_USER_ID";
|
|
79
|
-
const userId$1 = getUserIdOrDefault();
|
|
80
|
-
const userAgentDetails = getUserAgentDetails();
|
|
81
|
-
await require_commerce_api.commerce_api_default.identifyUser(userId$1, cdpUserId, userAgentDetails);
|
|
82
|
-
} catch (error) {
|
|
83
|
-
require_logger.logger_default.logError("[spiffy-ai] Error identifying user", error);
|
|
84
|
-
}
|
|
85
|
-
}, [isReady, getUserIdOrDefault]);
|
|
86
|
-
const value = (0, react.useMemo)(() => ({
|
|
87
|
-
identifyUser,
|
|
88
|
-
getUserIdOrDefault,
|
|
89
|
-
getUserIdOverrideFromLocalStorage,
|
|
90
|
-
getUserIdDefaultFromLocalStorage,
|
|
91
|
-
setUserIdDefaultInLocalStorage,
|
|
92
|
-
setUserIdOverrideInLocalStorage,
|
|
93
|
-
clearUserIdOverrideInLocalStorage,
|
|
94
|
-
isReady
|
|
95
|
-
}), [
|
|
96
|
-
identifyUser,
|
|
97
|
-
getUserIdOrDefault,
|
|
98
|
-
getUserIdOverrideFromLocalStorage,
|
|
99
|
-
getUserIdDefaultFromLocalStorage,
|
|
100
|
-
setUserIdDefaultInLocalStorage,
|
|
101
|
-
setUserIdOverrideInLocalStorage,
|
|
102
|
-
clearUserIdOverrideInLocalStorage,
|
|
103
|
-
isReady
|
|
104
|
-
]);
|
|
105
|
-
(0, react.useEffect)(() => {
|
|
106
|
-
if (isReady && !userId) setUserId(getUserIdOrDefault() ?? "");
|
|
107
|
-
}, [
|
|
108
|
-
isReady,
|
|
109
|
-
userId,
|
|
110
|
-
setUserId
|
|
111
|
-
]);
|
|
112
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(UserIdentityContext.Provider, {
|
|
113
|
-
value,
|
|
114
|
-
children
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
const useUserIdentity = () => {
|
|
118
|
-
const context = (0, react.useContext)(UserIdentityContext);
|
|
119
|
-
if (!context) throw new Error("useUserIdentity must be used within a UserIdentityProvider");
|
|
120
|
-
return context;
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
//#endregion
|
|
124
|
-
Object.defineProperty(exports, 'UserIdentityProvider', {
|
|
125
|
-
enumerable: true,
|
|
126
|
-
get: function () {
|
|
127
|
-
return UserIdentityProvider;
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
Object.defineProperty(exports, 'useUserIdentity', {
|
|
131
|
-
enumerable: true,
|
|
132
|
-
get: function () {
|
|
133
|
-
return useUserIdentity;
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5Q29udGV4dC1EcFFUZHVoRi5janMiLCJuYW1lcyI6WyJVQVBhcnNlciIsIlVzZXJJZGVudGl0eVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4iLCJ1c2VySWRBdG9tIiwidXNlTG9jYWxTdG9yYWdlIiwidXNlcklkIiwiQ29tbWVyY2VBcGlDbGllbnQiXSwic291cmNlcyI6WyIuLi9zcmMvY29udGV4dHMvdXNlcklkZW50aXR5Q29udGV4dC91c2VySWRlbnRpdHlDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFVBUGFyc2VyIGZyb20gXCJ1YS1wYXJzZXItanNcIjtcbmltcG9ydCBMb2dnZXIgZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlclwiO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gXCJzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IENsaWVudERldGFpbHMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9jbGllbnREZXRhaWxzXCI7XG5pbXBvcnQgeyB1c2VMb2NhbFN0b3JhZ2UgfSBmcm9tIFwic3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHRcIjtcbmltcG9ydCB7IHVzZUF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7IHVzZXJJZEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FwcFwiO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gZnJvbSB0aGUgb3JpZ2luYWwgc2VydmljZVxuY29uc3QgZ2V0VXNlckFnZW50RGV0YWlscyA9ICgpOiBDbGllbnREZXRhaWxzID0+IHtcbiAgY29uc3QgdWFQYXJzZXIgPSBuZXcgVUFQYXJzZXIoKTtcbiAgY29uc3QgcmVzdWx0ID0gdWFQYXJzZXIuZ2V0UmVzdWx0KCk7XG5cbiAgcmV0dXJuIHtcbiAgICBvczogcmVzdWx0Py5vcz8ubmFtZSxcbiAgICBvc1ZlcnNpb246IHJlc3VsdD8ub3M/LnZlcnNpb24sXG4gICAgZGV2aWNlQnJhbmQ6IHJlc3VsdD8uZGV2aWNlPy52ZW5kb3IsXG4gICAgZGV2aWNlTWFudWZhY3R1cmVyOiByZXN1bHQ/LmRldmljZT8udmVuZG9yLFxuICAgIGRldmljZU1vZGVsOiByZXN1bHQ/LmRldmljZT8ubW9kZWwsXG4gICAgYnJvd3NlcjogcmVzdWx0Py5icm93c2VyPy5uYW1lLFxuICAgIGJyb3dzZXJWZXJzaW9uOiByZXN1bHQ/LmJyb3dzZXI/LnZlcnNpb24sXG4gICAgdXNlckFnZW50OiByZXN1bHQ/LnVhLFxuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB7XG4gIGlkZW50aWZ5VXNlcjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgZ2V0VXNlcklkT3JEZWZhdWx0OiAoKSA9PiBzdHJpbmc7XG4gIGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZTogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZTogKCkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZXRVc2VySWREZWZhdWx0SW5Mb2NhbFN0b3JhZ2U6ICh1c2VySWQ6IHN0cmluZykgPT4gc3RyaW5nO1xuICBzZXRVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlOiAodXNlcklkOiBzdHJpbmcpID0+IHN0cmluZztcbiAgY2xlYXJVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlOiAoKSA9PiB2b2lkO1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBVc2VySWRlbnRpdHlDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxVc2VySWRlbnRpdHlDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZFxuKTtcblxuZXhwb3J0IGNvbnN0IFVzZXJJZGVudGl0eVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoe1xuICBjaGlsZHJlbixcbn0pID0+IHtcbiAgY29uc3QgW3VzZXJJZCwgc2V0VXNlcklkXSA9IHVzZUF0b20odXNlcklkQXRvbSk7XG4gIGNvbnN0IHtcbiAgICBnZXRJdGVtLFxuICAgIHNldEl0ZW0sXG4gICAgaXNBdmFpbGFibGU6IGxvY2FsU3RvcmFnZUlzUmVhZHksXG4gIH0gPSB1c2VMb2NhbFN0b3JhZ2UoKTtcblxuICBjb25zdCBbaXNSZWFkeSwgc2V0SXNSZWFkeV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBBc3N1bWluZyBDb21tZXJjZUFwaUNsaWVudCBhbmQgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSByZWFkeSBpZiBsb2NhbFN0b3JhZ2UgaXMuXG4gICAgLy8gSW4gYSBtb3JlIGNvbXBsZXggc2NlbmFyaW8sIHlvdSBtaWdodCBoYXZlIG1vcmUgY2hlY2tzIGhlcmUuXG4gICAgc2V0SXNSZWFkeShsb2NhbFN0b3JhZ2VJc1JlYWR5KTtcbiAgfSwgW2xvY2FsU3RvcmFnZUlzUmVhZHldKTtcblxuICBjb25zdCBVU0VSX0lEX09WRVJSSURFX0tFWSA9IFwidjEtc3BpZmZ5LXVzZXItaWQtb3ZlcnJpZGVcIjtcbiAgY29uc3QgVVNFUl9JRF9ERUZBVUxUX0tFWSA9IFwidjEtc3BpZmZ5LXVzZXItaWQtZGVmYXVsdFwiO1xuXG4gIGNvbnN0IGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSA9IHVzZUNhbGxiYWNrKCgpOlxuICAgIHwgc3RyaW5nXG4gICAgfCB1bmRlZmluZWQgPT4ge1xuICAgIHJldHVybiBnZXRJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZKSA/PyB1bmRlZmluZWQ7XG4gIH0sIFtnZXRJdGVtXSk7XG5cbiAgY29uc3QgZ2V0VXNlcklkRGVmYXVsdEZyb21Mb2NhbFN0b3JhZ2UgPSB1c2VDYWxsYmFjaygoKTpcbiAgICB8IHN0cmluZ1xuICAgIHwgdW5kZWZpbmVkID0+IHtcbiAgICByZXR1cm4gZ2V0SXRlbShVU0VSX0lEX0RFRkFVTFRfS0VZKSA/PyB1bmRlZmluZWQ7XG4gIH0sIFtnZXRJdGVtXSk7XG5cbiAgY29uc3Qgc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHVzZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKFxuICAgICAgICBgc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlIC0gU2V0dGluZyB1c2VyX2lkPSR7dXNlcklkfWBcbiAgICAgICk7XG4gICAgICBzZXRJdGVtKFVTRVJfSURfREVGQVVMVF9LRVksIHVzZXJJZCk7XG4gICAgICAvLyB3aW5kb3cuZGlzcGF0Y2hFdmVudCBpcyBoYW5kbGVkIGJ5IHVzZUxvY2FsU3RvcmFnZSBub3dcbiAgICAgIHJldHVybiB1c2VySWQ7XG4gICAgfSxcbiAgICBbc2V0SXRlbSwgVVNFUl9JRF9ERUZBVUxUX0tFWV1cbiAgKTtcblxuICBjb25zdCBzZXRVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHVzZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKFxuICAgICAgICBgc2V0VXNlcklkT3ZlcnJpZGVJbkxvY2FsU3RvcmFnZSAtIFNldHRpbmcgdXNlcl9pZD0ke3VzZXJJZH1gXG4gICAgICApO1xuICAgICAgc2V0SXRlbShVU0VSX0lEX09WRVJSSURFX0tFWSwgdXNlcklkKTtcbiAgICAgIC8vIHdpbmRvdy5kaXNwYXRjaEV2ZW50IGlzIGhhbmRsZWQgYnkgdXNlTG9jYWxTdG9yYWdlIG5vd1xuICAgICAgcmV0dXJuIHVzZXJJZDtcbiAgICB9LFxuICAgIFtzZXRJdGVtLCBVU0VSX0lEX09WRVJSSURFX0tFWV1cbiAgKTtcblxuICBjb25zdCBjbGVhclVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oYGNsZWFyVXNlcklkT3ZlcnJpZGVJbkxvY2FsU3RvcmFnZSAtIENsZWFyaW5nIHVzZXJfaWRgKTtcbiAgICAvLyBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldExvY2FsU3RvcmFnZSgpPy5yZW1vdmVJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZKTtcbiAgICAvLyB3aW5kb3cuZGlzcGF0Y2hFdmVudCBpcyBoYW5kbGVkIGJ5IHVzZUxvY2FsU3RvcmFnZSBub3dcbiAgICBzZXRJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZLCBcIlwiKTsgLy8gU2V0IHRvIGVtcHR5IHN0cmluZyB0byBjbGVhclxuICB9LCBbc2V0SXRlbSwgVVNFUl9JRF9PVkVSUklERV9LRVldKTtcblxuICBjb25zdCBnZXRVc2VySWRPckRlZmF1bHQgPSB1c2VDYWxsYmFjaygoKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCB1c2VySWRPdmVycmlkZSA9IGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmICh1c2VySWRPdmVycmlkZSkge1xuICAgICAgcmV0dXJuIHVzZXJJZE92ZXJyaWRlO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRVc2VySWQgPSBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSgpO1xuICAgIGlmIChkZWZhdWx0VXNlcklkKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFVzZXJJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlKGBzcGlmZnktdXNlci1pZC0ke3V1aWQoKX1gKTtcbiAgfSwgW1xuICAgIGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSxcbiAgICBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSxcbiAgICBzZXRVc2VySWREZWZhdWx0SW5Mb2NhbFN0b3JhZ2UsXG4gIF0pO1xuXG4gIGNvbnN0IGlkZW50aWZ5VXNlciA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZiAoIWlzUmVhZHkpIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICBcIltVc2VySWRlbnRpdHlDb250ZXh0XSBDb250ZXh0IG5vdCByZWFkeSwgc2tpcHBpbmcgaWRlbnRpZnlVc2VyXCIsXG4gICAgICAgIHVuZGVmaW5lZFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVGVtcG9yYXJpbHkgY29tbWVudGVkIG91dCB1bnRpbCBXaW5kb3dEYXRhTGF5ZXJTZXJ2aWNlIGlzIHJlc29sdmVkXG4gICAgICAvLyBjb25zdCBjZHBVc2VySWQgPSBXaW5kb3dEYXRhTGF5ZXJTZXJ2aWNlLmdldEdvb2dsZUFuYWx5dGljc0NsaWVudElkKCk7XG4gICAgICBjb25zdCBjZHBVc2VySWQgPSBcIlVOS05PV05fQ0RQX1VTRVJfSURcIjsgLy8gUGxhY2Vob2xkZXJcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGdldFVzZXJJZE9yRGVmYXVsdCgpO1xuICAgICAgY29uc3QgdXNlckFnZW50RGV0YWlscyA9IGdldFVzZXJBZ2VudERldGFpbHMoKTtcblxuICAgICAgaWYgKCFjZHBVc2VySWQpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICAgXCJbc3BpZmZ5LWFpXSBObyBHQSBDbGllbnQgSUQgZm91bmQsIHNraXBwaW5nIGlkZW50aWZ5VXNlclwiLFxuICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmlkZW50aWZ5VXNlcih1c2VySWQsIGNkcFVzZXJJZCwgdXNlckFnZW50RGV0YWlscyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIEVycm9yIGlkZW50aWZ5aW5nIHVzZXJcIiwgZXJyb3IpO1xuICAgIH1cbiAgfSwgW2lzUmVhZHksIGdldFVzZXJJZE9yRGVmYXVsdF0pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgaWRlbnRpZnlVc2VyLFxuICAgICAgZ2V0VXNlcklkT3JEZWZhdWx0LFxuICAgICAgZ2V0VXNlcklkT3ZlcnJpZGVGcm9tTG9jYWxTdG9yYWdlLFxuICAgICAgZ2V0VXNlcklkRGVmYXVsdEZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgICBzZXRVc2VySWREZWZhdWx0SW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBzZXRVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlLFxuICAgICAgY2xlYXJVc2VySWRPdmVycmlkZUluTG9jYWxTdG9yYWdlLFxuICAgICAgaXNSZWFkeSxcbiAgICB9KSxcbiAgICBbXG4gICAgICBpZGVudGlmeVVzZXIsXG4gICAgICBnZXRVc2VySWRPckRlZmF1bHQsXG4gICAgICBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgICBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSxcbiAgICAgIHNldFVzZXJJZERlZmF1bHRJbkxvY2FsU3RvcmFnZSxcbiAgICAgIHNldFVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBjbGVhclVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBpc1JlYWR5LFxuICAgIF1cbiAgKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNSZWFkeSAmJiAhdXNlcklkKSB7XG4gICAgICBzZXRVc2VySWQoZ2V0VXNlcklkT3JEZWZhdWx0KCkgPz8gXCJcIik7XG4gICAgfVxuICB9LCBbaXNSZWFkeSwgdXNlcklkLCBzZXRVc2VySWRdKTtcblxuICByZXR1cm4gKFxuICAgIDxVc2VySWRlbnRpdHlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Vc2VySWRlbnRpdHlDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZVVzZXJJZGVudGl0eSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoVXNlcklkZW50aXR5Q29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwidXNlVXNlcklkZW50aXR5IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBVc2VySWRlbnRpdHlQcm92aWRlclwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBLE1BQU0sNEJBQTJDO0NBRS9DLE1BQU0sU0FEVyxJQUFJQSxzQkFBVSxDQUNQLFdBQVc7QUFFbkMsUUFBTztFQUNMLElBQUksUUFBUSxJQUFJO0VBQ2hCLFdBQVcsUUFBUSxJQUFJO0VBQ3ZCLGFBQWEsUUFBUSxRQUFRO0VBQzdCLG9CQUFvQixRQUFRLFFBQVE7RUFDcEMsYUFBYSxRQUFRLFFBQVE7RUFDN0IsU0FBUyxRQUFRLFNBQVM7RUFDMUIsZ0JBQWdCLFFBQVEsU0FBUztFQUNqQyxXQUFXLFFBQVE7RUFDcEI7O0FBY0gsTUFBTSwrQ0FDSixPQUNEO0FBRUQsTUFBYUMsd0JBQWlFLEVBQzVFLGVBQ0k7Q0FDSixNQUFNLENBQUMsUUFBUSxnQ0FBcUJDLHVCQUFXO0NBQy9DLE1BQU0sRUFDSixTQUNBLFNBQ0EsYUFBYSx3QkFDWEMsNkNBQWlCO0NBRXJCLE1BQU0sQ0FBQyxTQUFTLGtDQUF1QixNQUFNO0FBRTdDLDRCQUFnQjtBQUdkLGFBQVcsb0JBQW9CO0lBQzlCLENBQUMsb0JBQW9CLENBQUM7Q0FFekIsTUFBTSx1QkFBdUI7Q0FDN0IsTUFBTSxzQkFBc0I7Q0FFNUIsTUFBTSxpRUFFVztBQUNmLFNBQU8sUUFBUSxxQkFBcUIsSUFBSTtJQUN2QyxDQUFDLFFBQVEsQ0FBQztDQUViLE1BQU0sZ0VBRVc7QUFDZixTQUFPLFFBQVEsb0JBQW9CLElBQUk7SUFDdEMsQ0FBQyxRQUFRLENBQUM7Q0FFYixNQUFNLHlEQUNILGFBQTJCO0FBQzFCLGdDQUFPLFFBQ0wsb0RBQW9EQyxXQUNyRDtBQUNELFVBQVEscUJBQXFCQSxTQUFPO0FBRXBDLFNBQU9BO0lBRVQsQ0FBQyxTQUFTLG9CQUFvQixDQUMvQjtDQUVELE1BQU0sMERBQ0gsYUFBMkI7QUFDMUIsZ0NBQU8sUUFDTCxxREFBcURBLFdBQ3REO0FBQ0QsVUFBUSxzQkFBc0JBLFNBQU87QUFFckMsU0FBT0E7SUFFVCxDQUFDLFNBQVMscUJBQXFCLENBQ2hDO0NBRUQsTUFBTSxpRUFBc0Q7QUFDMUQsZ0NBQU8sUUFBUSx1REFBdUQ7QUFHdEUsVUFBUSxzQkFBc0IsR0FBRztJQUNoQyxDQUFDLFNBQVMscUJBQXFCLENBQUM7Q0FFbkMsTUFBTSxrREFBK0M7RUFDbkQsTUFBTSxpQkFBaUIsbUNBQW1DO0FBQzFELE1BQUksZUFDRixRQUFPO0VBR1QsTUFBTSxnQkFBZ0Isa0NBQWtDO0FBQ3hELE1BQUksY0FDRixRQUFPO0FBR1QsU0FBTywrQkFBK0IsZ0NBQXdCLEdBQUc7SUFDaEU7RUFDRDtFQUNBO0VBQ0E7RUFDRCxDQUFDO0NBRUYsTUFBTSxzQ0FBMkIsWUFBMkI7QUFDMUQsTUFBSSxDQUFDLFNBQVM7QUFDWixpQ0FBTyxRQUNMLGtFQUNBLE9BQ0Q7QUFDRDs7QUFHRixNQUFJO0dBR0YsTUFBTSxZQUFZO0dBQ2xCLE1BQU1BLFdBQVMsb0JBQW9CO0dBQ25DLE1BQU0sbUJBQW1CLHFCQUFxQjtBQVU5QyxTQUFNQywwQ0FBa0IsYUFBYUQsVUFBUSxXQUFXLGlCQUFpQjtXQUNsRSxPQUFPO0FBQ2QsaUNBQU8sU0FBUyxzQ0FBc0MsTUFBTTs7SUFFN0QsQ0FBQyxTQUFTLG1CQUFtQixDQUFDO0NBRWpDLE1BQU0sa0NBQ0c7RUFDTDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0QsR0FDRDtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDRCxDQUNGO0FBQ0QsNEJBQWdCO0FBQ2QsTUFBSSxXQUFXLENBQUMsT0FDZCxXQUFVLG9CQUFvQixJQUFJLEdBQUc7SUFFdEM7RUFBQztFQUFTO0VBQVE7RUFBVSxDQUFDO0FBRWhDLFFBQ0UsMkNBQUMsb0JBQW9CO0VBQWdCO0VBQ2xDO0dBQzRCOztBQUluQyxNQUFhLHdCQUF3QjtDQUNuQyxNQUFNLGdDQUFxQixvQkFBb0I7QUFDL0MsS0FBSSxDQUFDLFFBQ0gsT0FBTSxJQUFJLE1BQ1IsNkRBQ0Q7QUFFSCxRQUFPIn0=
|
|
File without changes
|
|
File without changes
|