@propelauth/nextjs 0.0.111 → 0.0.112-beta.1
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/client/index.d.ts +40 -2
- package/dist/client/index.js +122 -15
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +122 -15
- package/dist/client/index.mjs.map +1 -1
- package/dist/server/app-router/index.d.ts +34 -2
- package/dist/server/app-router/index.js +201 -35
- package/dist/server/app-router/index.js.map +1 -1
- package/dist/server/app-router/index.mjs +201 -35
- package/dist/server/app-router/index.mjs.map +1 -1
- package/dist/server/index.d.ts +32 -1
- package/dist/server/index.js +36 -15
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +36 -15
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/pages/index.d.ts +32 -1
- package/dist/server/pages/index.js +51 -23
- package/dist/server/pages/index.js.map +1 -1
- package/dist/server/pages/index.mjs +51 -23
- package/dist/server/pages/index.mjs.map +1 -1
- package/package.json +1 -1
    
        package/dist/client/index.d.ts
    CHANGED
    
    | @@ -2,6 +2,7 @@ import React from 'react'; | |
| 2 2 |  | 
| 3 3 | 
             
            declare class UserFromToken {
         | 
| 4 4 | 
             
                userId: string;
         | 
| 5 | 
            +
                activeOrgId?: string;
         | 
| 5 6 | 
             
                orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo;
         | 
| 6 7 | 
             
                email: string;
         | 
| 7 8 | 
             
                firstName?: string;
         | 
| @@ -14,12 +15,15 @@ declare class UserFromToken { | |
| 14 15 | 
             
                impersonatorUserId?: string;
         | 
| 15 16 | 
             
                constructor(userId: string, email: string, orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo, firstName?: string, lastName?: string, username?: string, legacyUserId?: string, impersonatorUserId?: string, properties?: {
         | 
| 16 17 | 
             
                    [key: string]: unknown;
         | 
| 17 | 
            -
                });
         | 
| 18 | 
            +
                }, activeOrgId?: string);
         | 
| 19 | 
            +
                getActiveOrg(): OrgMemberInfo | undefined;
         | 
| 20 | 
            +
                getActiveOrgId(): string | undefined;
         | 
| 18 21 | 
             
                getOrg(orgId: string): OrgMemberInfo | undefined;
         | 
| 19 22 | 
             
                getOrgByName(orgName: string): OrgMemberInfo | undefined;
         | 
| 20 23 | 
             
                getOrgs(): OrgMemberInfo[];
         | 
| 21 24 | 
             
                isImpersonating(): boolean;
         | 
| 22 25 | 
             
                static fromJSON(json: string): UserFromToken;
         | 
| 26 | 
            +
                static fromJwtPayload(payload: InternalUser): UserFromToken;
         | 
| 23 27 | 
             
            }
         | 
| 24 28 | 
             
            type OrgIdToOrgMemberInfo = {
         | 
| 25 29 | 
             
                [orgId: string]: OrgMemberInfo;
         | 
| @@ -46,6 +50,33 @@ declare class OrgMemberInfo { | |
| 46 50 | 
             
                get inheritedRolesPlusCurrentRole(): string[];
         | 
| 47 51 | 
             
                get permissions(): string[];
         | 
| 48 52 | 
             
            }
         | 
| 53 | 
            +
            type InternalOrgMemberInfo = {
         | 
| 54 | 
            +
                org_id: string;
         | 
| 55 | 
            +
                org_name: string;
         | 
| 56 | 
            +
                org_metadata: {
         | 
| 57 | 
            +
                    [key: string]: any;
         | 
| 58 | 
            +
                };
         | 
| 59 | 
            +
                url_safe_org_name: string;
         | 
| 60 | 
            +
                user_role: string;
         | 
| 61 | 
            +
                inherited_user_roles_plus_current_role: string[];
         | 
| 62 | 
            +
                user_permissions: string[];
         | 
| 63 | 
            +
            };
         | 
| 64 | 
            +
            type InternalUser = {
         | 
| 65 | 
            +
                user_id: string;
         | 
| 66 | 
            +
                org_member_info?: InternalOrgMemberInfo;
         | 
| 67 | 
            +
                org_id_to_org_member_info?: {
         | 
| 68 | 
            +
                    [org_id: string]: InternalOrgMemberInfo;
         | 
| 69 | 
            +
                };
         | 
| 70 | 
            +
                email: string;
         | 
| 71 | 
            +
                first_name?: string;
         | 
| 72 | 
            +
                last_name?: string;
         | 
| 73 | 
            +
                username?: string;
         | 
| 74 | 
            +
                properties?: {
         | 
| 75 | 
            +
                    [key: string]: unknown;
         | 
| 76 | 
            +
                };
         | 
| 77 | 
            +
                legacy_user_id?: string;
         | 
| 78 | 
            +
                impersonatorUserId?: string;
         | 
| 79 | 
            +
            };
         | 
| 49 80 |  | 
| 50 81 | 
             
            declare class User {
         | 
| 51 82 | 
             
                userId: string;
         | 
| @@ -57,6 +88,7 @@ declare class User { | |
| 57 88 | 
             
                lastName?: string;
         | 
| 58 89 | 
             
                pictureUrl?: string;
         | 
| 59 90 | 
             
                orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo;
         | 
| 91 | 
            +
                activeOrgId?: string;
         | 
| 60 92 | 
             
                mfaEnabled: boolean;
         | 
| 61 93 | 
             
                canCreateOrgs: boolean;
         | 
| 62 94 | 
             
                updatePasswordRequired: boolean;
         | 
| @@ -67,7 +99,7 @@ declare class User { | |
| 67 99 | 
             
                };
         | 
| 68 100 | 
             
                legacyUserId?: string;
         | 
| 69 101 | 
             
                impersonatorUserId?: string;
         | 
| 70 | 
            -
                constructor({ userId, email, emailConfirmed, hasPassword, username, firstName, lastName, pictureUrl, orgIdToOrgMemberInfo, mfaEnabled, canCreateOrgs, updatePasswordRequired, createdAt, lastActiveAt, legacyUserId, properties, impersonatorUserId, }: {
         | 
| 102 | 
            +
                constructor({ userId, email, emailConfirmed, hasPassword, username, firstName, lastName, pictureUrl, orgIdToOrgMemberInfo, activeOrgId, mfaEnabled, canCreateOrgs, updatePasswordRequired, createdAt, lastActiveAt, legacyUserId, properties, impersonatorUserId, }: {
         | 
| 71 103 | 
             
                    userId: string;
         | 
| 72 104 | 
             
                    email: string;
         | 
| 73 105 | 
             
                    emailConfirmed: boolean;
         | 
| @@ -77,6 +109,7 @@ declare class User { | |
| 77 109 | 
             
                    lastName?: string;
         | 
| 78 110 | 
             
                    pictureUrl?: string;
         | 
| 79 111 | 
             
                    orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo;
         | 
| 112 | 
            +
                    activeOrgId?: string;
         | 
| 80 113 | 
             
                    mfaEnabled: boolean;
         | 
| 81 114 | 
             
                    canCreateOrgs: boolean;
         | 
| 82 115 | 
             
                    updatePasswordRequired: boolean;
         | 
| @@ -88,6 +121,8 @@ declare class User { | |
| 88 121 | 
             
                    };
         | 
| 89 122 | 
             
                    impersonatorUserId?: string;
         | 
| 90 123 | 
             
                });
         | 
| 124 | 
            +
                getActiveOrg(): OrgMemberInfo | undefined;
         | 
| 125 | 
            +
                getActiveOrgId(): string | undefined;
         | 
| 91 126 | 
             
                getOrg(orgId: string): OrgMemberInfo | undefined;
         | 
| 92 127 | 
             
                getOrgByName(orgName: string): OrgMemberInfo | undefined;
         | 
| 93 128 | 
             
                getOrgs(): OrgMemberInfo[];
         | 
| @@ -98,18 +133,21 @@ type UseUserLoading = { | |
| 98 133 | 
             
                isLoggedIn: never;
         | 
| 99 134 | 
             
                user: never;
         | 
| 100 135 | 
             
                accessToken: never;
         | 
| 136 | 
            +
                setActiveOrg: never;
         | 
| 101 137 | 
             
            };
         | 
| 102 138 | 
             
            type UseUserLoggedIn = {
         | 
| 103 139 | 
             
                loading: false;
         | 
| 104 140 | 
             
                isLoggedIn: true;
         | 
| 105 141 | 
             
                user: User;
         | 
| 106 142 | 
             
                accessToken: string;
         | 
| 143 | 
            +
                setActiveOrg: (orgId: string) => Promise<User | undefined>;
         | 
| 107 144 | 
             
            };
         | 
| 108 145 | 
             
            type UseUserNotLoggedIn = {
         | 
| 109 146 | 
             
                loading: false;
         | 
| 110 147 | 
             
                isLoggedIn: false;
         | 
| 111 148 | 
             
                user: undefined;
         | 
| 112 149 | 
             
                accessToken: undefined;
         | 
| 150 | 
            +
                setActiveOrg: never;
         | 
| 113 151 | 
             
            };
         | 
| 114 152 | 
             
            type UseUser = UseUserLoading | UseUserLoggedIn | UseUserNotLoggedIn;
         | 
| 115 153 | 
             
            declare function useUser(): UseUser;
         | 
    
        package/dist/client/index.js
    CHANGED
    
    | @@ -84,8 +84,9 @@ module.exports = __toCommonJS(client_exports); | |
| 84 84 |  | 
| 85 85 | 
             
            // src/user.ts
         | 
| 86 86 | 
             
            var UserFromToken = class {
         | 
| 87 | 
            -
              constructor(userId, email, orgIdToOrgMemberInfo, firstName, lastName, username, legacyUserId, impersonatorUserId, properties) {
         | 
| 87 | 
            +
              constructor(userId, email, orgIdToOrgMemberInfo, firstName, lastName, username, legacyUserId, impersonatorUserId, properties, activeOrgId) {
         | 
| 88 88 | 
             
                this.userId = userId;
         | 
| 89 | 
            +
                this.activeOrgId = activeOrgId;
         | 
| 89 90 | 
             
                this.orgIdToOrgMemberInfo = orgIdToOrgMemberInfo;
         | 
| 90 91 | 
             
                this.email = email;
         | 
| 91 92 | 
             
                this.firstName = firstName;
         | 
| @@ -95,6 +96,15 @@ var UserFromToken = class { | |
| 95 96 | 
             
                this.impersonatorUserId = impersonatorUserId;
         | 
| 96 97 | 
             
                this.properties = properties;
         | 
| 97 98 | 
             
              }
         | 
| 99 | 
            +
              getActiveOrg() {
         | 
| 100 | 
            +
                if (!this.activeOrgId || !this.orgIdToOrgMemberInfo) {
         | 
| 101 | 
            +
                  return void 0;
         | 
| 102 | 
            +
                }
         | 
| 103 | 
            +
                return this.orgIdToOrgMemberInfo[this.activeOrgId];
         | 
| 104 | 
            +
              }
         | 
| 105 | 
            +
              getActiveOrgId() {
         | 
| 106 | 
            +
                return this.activeOrgId;
         | 
| 107 | 
            +
              }
         | 
| 98 108 | 
             
              getOrg(orgId) {
         | 
| 99 109 | 
             
                if (!this.orgIdToOrgMemberInfo) {
         | 
| 100 110 | 
             
                  return void 0;
         | 
| @@ -127,9 +137,7 @@ var UserFromToken = class { | |
| 127 137 | 
             
                const obj = JSON.parse(json);
         | 
| 128 138 | 
             
                const orgIdToOrgMemberInfo = {};
         | 
| 129 139 | 
             
                for (const orgId in obj.orgIdToOrgMemberInfo) {
         | 
| 130 | 
            -
                  orgIdToOrgMemberInfo[orgId] = OrgMemberInfo.fromJSON(
         | 
| 131 | 
            -
                    JSON.stringify(obj.orgIdToOrgMemberInfo[orgId])
         | 
| 132 | 
            -
                  );
         | 
| 140 | 
            +
                  orgIdToOrgMemberInfo[orgId] = OrgMemberInfo.fromJSON(JSON.stringify(obj.orgIdToOrgMemberInfo[orgId]));
         | 
| 133 141 | 
             
                }
         | 
| 134 142 | 
             
                return new UserFromToken(
         | 
| 135 143 | 
             
                  obj.userId,
         | 
| @@ -143,6 +151,29 @@ var UserFromToken = class { | |
| 143 151 | 
             
                  obj.properties
         | 
| 144 152 | 
             
                );
         | 
| 145 153 | 
             
              }
         | 
| 154 | 
            +
              static fromJwtPayload(payload) {
         | 
| 155 | 
            +
                let activeOrgId;
         | 
| 156 | 
            +
                let orgIdToOrgMemberInfo;
         | 
| 157 | 
            +
                if (payload.org_member_info) {
         | 
| 158 | 
            +
                  activeOrgId = payload.org_member_info.org_id;
         | 
| 159 | 
            +
                  orgIdToOrgMemberInfo = toOrgIdToOrgMemberInfo({ [activeOrgId]: payload.org_member_info });
         | 
| 160 | 
            +
                } else {
         | 
| 161 | 
            +
                  activeOrgId = void 0;
         | 
| 162 | 
            +
                  orgIdToOrgMemberInfo = toOrgIdToOrgMemberInfo(payload.org_id_to_org_member_info);
         | 
| 163 | 
            +
                }
         | 
| 164 | 
            +
                return new UserFromToken(
         | 
| 165 | 
            +
                  payload.user_id,
         | 
| 166 | 
            +
                  payload.email,
         | 
| 167 | 
            +
                  orgIdToOrgMemberInfo,
         | 
| 168 | 
            +
                  payload.first_name,
         | 
| 169 | 
            +
                  payload.last_name,
         | 
| 170 | 
            +
                  payload.username,
         | 
| 171 | 
            +
                  payload.legacy_user_id,
         | 
| 172 | 
            +
                  payload.impersonatorUserId,
         | 
| 173 | 
            +
                  payload.properties,
         | 
| 174 | 
            +
                  activeOrgId
         | 
| 175 | 
            +
                );
         | 
| 176 | 
            +
              }
         | 
| 146 177 | 
             
            };
         | 
| 147 178 | 
             
            var OrgMemberInfo = class {
         | 
| 148 179 | 
             
              constructor(orgId, orgName, orgMetadata, urlSafeOrgName, userAssignedRole, userInheritedRolesPlusCurrentRole, userPermissions) {
         | 
| @@ -292,6 +323,7 @@ var User = class { | |
| 292 323 | 
             
                lastName,
         | 
| 293 324 | 
             
                pictureUrl,
         | 
| 294 325 | 
             
                orgIdToOrgMemberInfo,
         | 
| 326 | 
            +
                activeOrgId,
         | 
| 295 327 | 
             
                mfaEnabled,
         | 
| 296 328 | 
             
                canCreateOrgs,
         | 
| 297 329 | 
             
                updatePasswordRequired,
         | 
| @@ -310,6 +342,7 @@ var User = class { | |
| 310 342 | 
             
                this.lastName = lastName;
         | 
| 311 343 | 
             
                this.pictureUrl = pictureUrl;
         | 
| 312 344 | 
             
                this.orgIdToOrgMemberInfo = orgIdToOrgMemberInfo;
         | 
| 345 | 
            +
                this.activeOrgId = activeOrgId;
         | 
| 313 346 | 
             
                this.mfaEnabled = mfaEnabled;
         | 
| 314 347 | 
             
                this.canCreateOrgs = canCreateOrgs;
         | 
| 315 348 | 
             
                this.updatePasswordRequired = updatePasswordRequired;
         | 
| @@ -319,6 +352,15 @@ var User = class { | |
| 319 352 | 
             
                this.properties = properties;
         | 
| 320 353 | 
             
                this.impersonatorUserId = impersonatorUserId;
         | 
| 321 354 | 
             
              }
         | 
| 355 | 
            +
              getActiveOrg() {
         | 
| 356 | 
            +
                if (!this.activeOrgId) {
         | 
| 357 | 
            +
                  return void 0;
         | 
| 358 | 
            +
                }
         | 
| 359 | 
            +
                return this.getOrg(this.activeOrgId);
         | 
| 360 | 
            +
              }
         | 
| 361 | 
            +
              getActiveOrgId() {
         | 
| 362 | 
            +
                return this.activeOrgId;
         | 
| 363 | 
            +
              }
         | 
| 322 364 | 
             
              getOrg(orgId) {
         | 
| 323 365 | 
             
                var _a;
         | 
| 324 366 | 
             
                return (_a = this.orgIdToOrgMemberInfo) == null ? void 0 : _a[orgId];
         | 
| @@ -357,21 +399,24 @@ function useUser() { | |
| 357 399 | 
             
                  loading: true,
         | 
| 358 400 | 
             
                  isLoggedIn: void 0,
         | 
| 359 401 | 
             
                  user: void 0,
         | 
| 360 | 
            -
                  accessToken: void 0
         | 
| 402 | 
            +
                  accessToken: void 0,
         | 
| 403 | 
            +
                  setActiveOrg: void 0
         | 
| 361 404 | 
             
                };
         | 
| 362 405 | 
             
              } else if (userAndAccessToken.user) {
         | 
| 363 406 | 
             
                return {
         | 
| 364 407 | 
             
                  loading: false,
         | 
| 365 408 | 
             
                  isLoggedIn: true,
         | 
| 366 409 | 
             
                  user: userAndAccessToken.user,
         | 
| 367 | 
            -
                  accessToken: userAndAccessToken.accessToken
         | 
| 410 | 
            +
                  accessToken: userAndAccessToken.accessToken,
         | 
| 411 | 
            +
                  setActiveOrg: context.setActiveOrg
         | 
| 368 412 | 
             
                };
         | 
| 369 413 | 
             
              } else {
         | 
| 370 414 | 
             
                return {
         | 
| 371 415 | 
             
                  loading: false,
         | 
| 372 416 | 
             
                  isLoggedIn: false,
         | 
| 373 417 | 
             
                  user: void 0,
         | 
| 374 | 
            -
                  accessToken: void 0
         | 
| 418 | 
            +
                  accessToken: void 0,
         | 
| 419 | 
            +
                  setActiveOrg: void 0
         | 
| 375 420 | 
             
                };
         | 
| 376 421 | 
             
              }
         | 
| 377 422 | 
             
            }
         | 
| @@ -424,10 +469,13 @@ var AuthProvider = (props) => { | |
| 424 469 | 
             
              const [authState, dispatchInner] = (0, import_react2.useReducer)(authStateReducer, initialAuthState);
         | 
| 425 470 | 
             
              const router = (0, import_navigation.useRouter)();
         | 
| 426 471 | 
             
              const reloadOnAuthChange = (_a = props.reloadOnAuthChange) != null ? _a : true;
         | 
| 427 | 
            -
              const dispatch = (0, import_react2.useCallback)( | 
| 428 | 
            -
                 | 
| 429 | 
            -
             | 
| 430 | 
            -
             | 
| 472 | 
            +
              const dispatch = (0, import_react2.useCallback)(
         | 
| 473 | 
            +
                (action) => {
         | 
| 474 | 
            +
                  dispatchInner(action);
         | 
| 475 | 
            +
                  saveUserToLocalStorage(action.user);
         | 
| 476 | 
            +
                },
         | 
| 477 | 
            +
                [dispatchInner]
         | 
| 478 | 
            +
              );
         | 
| 431 479 | 
             
              (0, import_react2.useEffect)(() => {
         | 
| 432 480 | 
             
                if (reloadOnAuthChange && authState.authChangeDetected) {
         | 
| 433 481 | 
             
                  router.refresh();
         | 
| @@ -534,11 +582,23 @@ var AuthProvider = (props) => { | |
| 534 582 | 
             
              const redirectToOrgPage = (orgId) => redirectTo(getOrgPageUrl(orgId));
         | 
| 535 583 | 
             
              const redirectToCreateOrgPage = () => redirectTo(getCreateOrgPageUrl());
         | 
| 536 584 | 
             
              const redirectToSetupSAMLPage = (orgId) => redirectTo(getSetupSAMLPageUrl(orgId));
         | 
| 537 | 
            -
              const refreshAuthInfo = () => __async(void 0, null, function* () {
         | 
| 585 | 
            +
              const refreshAuthInfo = (0, import_react2.useCallback)(() => __async(void 0, null, function* () {
         | 
| 538 586 | 
             
                const action = yield apiGetUserInfo();
         | 
| 539 587 | 
             
                dispatch(action);
         | 
| 540 588 | 
             
                return action.user;
         | 
| 541 | 
            -
              });
         | 
| 589 | 
            +
              }), [dispatch]);
         | 
| 590 | 
            +
              const setActiveOrg = (0, import_react2.useCallback)(
         | 
| 591 | 
            +
                (orgId) => __async(void 0, null, function* () {
         | 
| 592 | 
            +
                  const action = yield apiPostSetActiveOrg(orgId);
         | 
| 593 | 
            +
                  if (action.error === "not_in_org") {
         | 
| 594 | 
            +
                    return void 0;
         | 
| 595 | 
            +
                  } else {
         | 
| 596 | 
            +
                    dispatch(action);
         | 
| 597 | 
            +
                    return action.user;
         | 
| 598 | 
            +
                  }
         | 
| 599 | 
            +
                }),
         | 
| 600 | 
            +
                [dispatch]
         | 
| 601 | 
            +
              );
         | 
| 542 602 | 
             
              const value = {
         | 
| 543 603 | 
             
                loading: authState.loading,
         | 
| 544 604 | 
             
                userAndAccessToken: authState.userAndAccessToken,
         | 
| @@ -555,7 +615,8 @@ var AuthProvider = (props) => { | |
| 555 615 | 
             
                getOrgPageUrl,
         | 
| 556 616 | 
             
                getCreateOrgPageUrl,
         | 
| 557 617 | 
             
                getSetupSAMLPageUrl,
         | 
| 558 | 
            -
                refreshAuthInfo
         | 
| 618 | 
            +
                refreshAuthInfo,
         | 
| 619 | 
            +
                setActiveOrg
         | 
| 559 620 | 
             
              };
         | 
| 560 621 | 
             
              return /* @__PURE__ */ import_react2.default.createElement(AuthContext.Provider, { value }, props.children);
         | 
| 561 622 | 
             
            };
         | 
| @@ -570,7 +631,7 @@ function apiGetUserInfo() { | |
| 570 631 | 
             
                    credentials: "include"
         | 
| 571 632 | 
             
                  });
         | 
| 572 633 | 
             
                  if (userInfoResponse.ok) {
         | 
| 573 | 
            -
                    const { userinfo, accessToken, impersonatorUserId } = yield userInfoResponse.json();
         | 
| 634 | 
            +
                    const { userinfo, accessToken, impersonatorUserId, activeOrgId } = yield userInfoResponse.json();
         | 
| 574 635 | 
             
                    const user = new User({
         | 
| 575 636 | 
             
                      userId: userinfo.user_id,
         | 
| 576 637 | 
             
                      email: userinfo.email,
         | 
| @@ -581,6 +642,7 @@ function apiGetUserInfo() { | |
| 581 642 | 
             
                      lastName: userinfo.last_name,
         | 
| 582 643 | 
             
                      pictureUrl: userinfo.picture_url,
         | 
| 583 644 | 
             
                      orgIdToOrgMemberInfo: toOrgIdToOrgMemberInfo(userinfo.org_id_to_org_info),
         | 
| 645 | 
            +
                      activeOrgId,
         | 
| 584 646 | 
             
                      mfaEnabled: userinfo.mfa_enabled,
         | 
| 585 647 | 
             
                      canCreateOrgs: userinfo.can_create_orgs,
         | 
| 586 648 | 
             
                      updatePasswordRequired: userinfo.update_password_required,
         | 
| @@ -601,6 +663,51 @@ function apiGetUserInfo() { | |
| 601 663 | 
             
                throw new Error("Failed to refresh token");
         | 
| 602 664 | 
             
              });
         | 
| 603 665 | 
             
            }
         | 
| 666 | 
            +
            function apiPostSetActiveOrg(orgId) {
         | 
| 667 | 
            +
              return __async(this, null, function* () {
         | 
| 668 | 
            +
                try {
         | 
| 669 | 
            +
                  const queryParams = new URLSearchParams({ active_org_id: orgId }).toString();
         | 
| 670 | 
            +
                  const url = `/api/auth/set-active-org?${queryParams}`;
         | 
| 671 | 
            +
                  const userInfoResponse = yield fetch(url, {
         | 
| 672 | 
            +
                    method: "POST",
         | 
| 673 | 
            +
                    headers: {
         | 
| 674 | 
            +
                      "Content-Type": "application/json"
         | 
| 675 | 
            +
                    },
         | 
| 676 | 
            +
                    credentials: "include"
         | 
| 677 | 
            +
                  });
         | 
| 678 | 
            +
                  if (userInfoResponse.ok) {
         | 
| 679 | 
            +
                    const { userinfo, accessToken, impersonatorUserId, activeOrgId } = yield userInfoResponse.json();
         | 
| 680 | 
            +
                    const user = new User({
         | 
| 681 | 
            +
                      userId: userinfo.user_id,
         | 
| 682 | 
            +
                      email: userinfo.email,
         | 
| 683 | 
            +
                      emailConfirmed: userinfo.email_confirmed,
         | 
| 684 | 
            +
                      hasPassword: userinfo.has_password,
         | 
| 685 | 
            +
                      username: userinfo.username,
         | 
| 686 | 
            +
                      firstName: userinfo.first_name,
         | 
| 687 | 
            +
                      lastName: userinfo.last_name,
         | 
| 688 | 
            +
                      pictureUrl: userinfo.picture_url,
         | 
| 689 | 
            +
                      orgIdToOrgMemberInfo: toOrgIdToOrgMemberInfo(userinfo.org_id_to_org_info),
         | 
| 690 | 
            +
                      activeOrgId,
         | 
| 691 | 
            +
                      mfaEnabled: userinfo.mfa_enabled,
         | 
| 692 | 
            +
                      canCreateOrgs: userinfo.can_create_orgs,
         | 
| 693 | 
            +
                      updatePasswordRequired: userinfo.update_password_required,
         | 
| 694 | 
            +
                      createdAt: userinfo.created_at,
         | 
| 695 | 
            +
                      lastActiveAt: userinfo.last_active_at,
         | 
| 696 | 
            +
                      properties: userinfo.properties,
         | 
| 697 | 
            +
                      impersonatorUserId
         | 
| 698 | 
            +
                    });
         | 
| 699 | 
            +
                    return { user, accessToken, error: void 0 };
         | 
| 700 | 
            +
                  } else if (userInfoResponse.status === 401) {
         | 
| 701 | 
            +
                    return { error: "not_in_org" };
         | 
| 702 | 
            +
                  } else {
         | 
| 703 | 
            +
                    console.info("Failed to set active org", userInfoResponse);
         | 
| 704 | 
            +
                  }
         | 
| 705 | 
            +
                } catch (e) {
         | 
| 706 | 
            +
                  console.info("Failed to set active org", e);
         | 
| 707 | 
            +
                }
         | 
| 708 | 
            +
                throw new Error("Failed to set active org");
         | 
| 709 | 
            +
              });
         | 
| 710 | 
            +
            }
         | 
| 604 711 |  | 
| 605 712 | 
             
            // src/client/useHostedPageUrls.tsx
         | 
| 606 713 | 
             
            var import_react3 = require("react");
         | 
    
        package/dist/client/index.js.map
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            {"version":3,"sources":["../../src/client/index.ts","../../src/user.ts","../../src/client/AuthProvider.tsx","../../src/client/utils.ts","../../src/client/useUser.tsx","../../src/client/useHostedPageUrls.tsx","../../src/client/useLogoutFunction.ts","../../src/client/useRedirectFunctions.tsx","../../src/client/useRefreshAuth.ts"],"sourcesContent":["export type {OrgIdToOrgMemberInfo} from \"../user\"\nexport {UserFromToken, OrgMemberInfo} from \"../user\"\nexport {AuthProvider} from \"./AuthProvider\"\nexport type {AuthProviderProps, RedirectToLoginOptions, RedirectToSignupOptions} from \"./AuthProvider\"\nexport {useUser, User} from \"./useUser\"\nexport type {UseUser, UseUserLoading, UseUserLoggedIn, UseUserNotLoggedIn} from \"./useUser\"\nexport {useHostedPageUrls} from \"./useHostedPageUrls\"\nexport {useLogoutFunction} from \"./useLogoutFunction\"\nexport {useRedirectFunctions, RedirectToLogin, RedirectToSignup} from \"./useRedirectFunctions\"\nexport type {RedirectProps} from \"./useRedirectFunctions\"\nexport {useRefreshAuth} from \"./useRefreshAuth\"","export class UserFromToken {\n    public userId: string\n    public orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo\n\n    // Metadata about the user\n    public email: string\n    public firstName?: string\n    public lastName?: string\n    public username?: string\n    public properties?: { [key: string]: unknown }\n\n    // If you used our migration APIs to migrate this user from a different system,\n    //   this is their original ID from that system.\n    public legacyUserId?: string\n    public impersonatorUserId?: string\n\n    constructor(\n        userId: string,\n        email: string,\n        orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo,\n        firstName?: string,\n        lastName?: string,\n        username?: string,\n        legacyUserId?: string,\n        impersonatorUserId?: string,\n        properties?: { [key: string]: unknown },\n    ) {\n        this.userId = userId\n        this.orgIdToOrgMemberInfo = orgIdToOrgMemberInfo\n\n        this.email = email\n        this.firstName = firstName\n        this.lastName = lastName\n        this.username = username\n\n        this.legacyUserId = legacyUserId\n        this.impersonatorUserId = impersonatorUserId\n\n        this.properties = properties\n    }\n\n    public getOrg(orgId: string): OrgMemberInfo | undefined {\n        if (!this.orgIdToOrgMemberInfo) {\n            return undefined\n        }\n\n        return this.orgIdToOrgMemberInfo[orgId]\n    }\n\n    public getOrgByName(orgName: string): OrgMemberInfo | undefined {\n        if (!this.orgIdToOrgMemberInfo) {\n            return undefined\n        }\n\n        const urlSafeOrgName = orgName.toLowerCase().replace(/ /g, \"-\")\n        for (const orgId in this.orgIdToOrgMemberInfo) {\n            const orgMemberInfo = this.orgIdToOrgMemberInfo[orgId]\n            if (orgMemberInfo.urlSafeOrgName === urlSafeOrgName) {\n                return orgMemberInfo\n            }\n        }\n\n        return undefined\n    }\n\n    public getOrgs(): OrgMemberInfo[] {\n        if (!this.orgIdToOrgMemberInfo) {\n            return []\n        }\n\n        return Object.values(this.orgIdToOrgMemberInfo)\n    }\n\n    public isImpersonating(): boolean {\n        return !!this.impersonatorUserId\n    }\n\n    public static fromJSON(json: string): UserFromToken {\n        const obj = JSON.parse(json)\n        const orgIdToOrgMemberInfo: OrgIdToOrgMemberInfo = {}\n        for (const orgId in obj.orgIdToOrgMemberInfo) {\n            orgIdToOrgMemberInfo[orgId] = OrgMemberInfo.fromJSON(\n                JSON.stringify(obj.orgIdToOrgMemberInfo[orgId])\n            )\n        }\n        return new UserFromToken(\n            obj.userId,\n            obj.email,\n            orgIdToOrgMemberInfo,\n            obj.firstName,\n            obj.lastName,\n            obj.username,\n            obj.legacyUserId,\n            obj.impersonatorUserId,\n            obj.properties,\n        )\n    }\n}\n\nexport type OrgIdToOrgMemberInfo = {\n    [orgId: string]: OrgMemberInfo\n}\n\nexport class OrgMemberInfo {\n    public orgId: string\n    public orgName: string\n    public orgMetadata: { [key: string]: any }\n    public urlSafeOrgName: string\n\n    public userAssignedRole: string\n    public userInheritedRolesPlusCurrentRole: string[]\n    public userPermissions: string[]\n\n    constructor(\n        orgId: string,\n        orgName: string,\n        orgMetadata: { [key: string]: any },\n        urlSafeOrgName: string,\n        userAssignedRole: string,\n        userInheritedRolesPlusCurrentRole: string[],\n        userPermissions: string[]\n    ) {\n        this.orgId = orgId\n        this.orgName = orgName\n        this.orgMetadata = orgMetadata\n        this.urlSafeOrgName = urlSafeOrgName\n\n        this.userAssignedRole = userAssignedRole\n        this.userInheritedRolesPlusCurrentRole = userInheritedRolesPlusCurrentRole\n        this.userPermissions = userPermissions\n    }\n\n    // validation methods\n\n    public isRole(role: string): boolean {\n        return this.userAssignedRole === role\n    }\n\n    public isAtLeastRole(role: string): boolean {\n        return this.userInheritedRolesPlusCurrentRole.includes(role)\n    }\n\n    public hasPermission(permission: string): boolean {\n        return this.userPermissions.includes(permission)\n    }\n\n    public hasAllPermissions(permissions: string[]): boolean {\n        return permissions.every((permission) => this.hasPermission(permission))\n    }\n\n    public static fromJSON(json: string): OrgMemberInfo {\n        const obj = JSON.parse(json)\n        return new OrgMemberInfo(\n            obj.orgId,\n            obj.orgName,\n            obj.orgMetadata,\n            obj.urlSafeOrgName,\n            obj.userAssignedRole,\n            obj.userInheritedRolesPlusCurrentRole,\n            obj.userPermissions\n        )\n    }\n\n    // getters for the private fields\n\n    get assignedRole(): string {\n        return this.userAssignedRole\n    }\n\n    get inheritedRolesPlusCurrentRole(): string[] {\n        return this.userInheritedRolesPlusCurrentRole\n    }\n\n    get permissions(): string[] {\n        return this.userPermissions\n    }\n}\n\n// These Internal types exist since the server returns snake case, but typescript/javascript\n// convention is camelCase.\nexport type InternalOrgMemberInfo = {\n    org_id: string\n    org_name: string\n    org_metadata: { [key: string]: any }\n    url_safe_org_name: string\n    user_role: string\n    inherited_user_roles_plus_current_role: string[]\n    user_permissions: string[]\n}\nexport type InternalUser = {\n    user_id: string\n    org_id_to_org_member_info?: { [org_id: string]: InternalOrgMemberInfo }\n\n    email: string\n    first_name?: string\n    last_name?: string\n    username?: string\n    properties?: { [key: string]: unknown }\n\n    // If you used our migration APIs to migrate this user from a different system, this is their original ID from that system.\n    legacy_user_id?: string\n    impersonatorUserId?: string\n}\n\nexport function toUser(snake_case: InternalUser): UserFromToken {\n    return new UserFromToken(\n        snake_case.user_id,\n        snake_case.email,\n        toOrgIdToOrgMemberInfo(snake_case.org_id_to_org_member_info),\n        snake_case.first_name,\n        snake_case.last_name,\n        snake_case.username,\n        snake_case.legacy_user_id,\n        snake_case.impersonatorUserId,\n        snake_case.properties,\n    )\n}\n\nexport function toOrgIdToOrgMemberInfo(snake_case?: {\n    [org_id: string]: InternalOrgMemberInfo\n}): OrgIdToOrgMemberInfo | undefined {\n    if (snake_case === undefined) {\n        return undefined\n    }\n    const camelCase: OrgIdToOrgMemberInfo = {}\n\n    for (const key of Object.keys(snake_case)) {\n        const snakeCaseValue = snake_case[key]\n        if (snakeCaseValue) {\n            camelCase[key] = new OrgMemberInfo(\n                snakeCaseValue.org_id,\n                snakeCaseValue.org_name,\n                snakeCaseValue.org_metadata,\n                snakeCaseValue.url_safe_org_name,\n                snakeCaseValue.user_role,\n                snakeCaseValue.inherited_user_roles_plus_current_role,\n                snakeCaseValue.user_permissions\n            )\n        }\n    }\n\n    return camelCase\n}\n","'use client'\n\nimport React, {useCallback, useEffect, useReducer} from \"react\"\nimport {doesLocalStorageMatch, hasWindow, isEqual, saveUserToLocalStorage, USER_INFO_KEY} from \"./utils\";\nimport {useRouter} from \"next/navigation.js\";\nimport {User} from \"./useUser\";\nimport {toOrgIdToOrgMemberInfo} from \"../user\";\n\nexport interface RedirectToSignupOptions {\n    postSignupRedirectPath: string;\n}\nexport interface RedirectToLoginOptions {\n    postLoginRedirectPath: string;\n}\n\ninterface InternalAuthState {\n    loading: boolean\n    userAndAccessToken: UserAndAccessToken\n\n    logout: () => Promise<void>\n\n    redirectToLoginPage: (opts?: RedirectToLoginOptions) => void\n    redirectToSignupPage: (opts?: RedirectToSignupOptions) => void\n    redirectToAccountPage: () => void\n    redirectToOrgPage: (orgId?: string) => void\n    redirectToCreateOrgPage: () => void\n    redirectToSetupSAMLPage: (orgId: string) => void\n\n    getSignupPageUrl(opts?: RedirectToSignupOptions): string\n    getLoginPageUrl(opts?: RedirectToLoginOptions): string\n    getAccountPageUrl(): string\n    getOrgPageUrl(orgId?: string): string\n    getCreateOrgPageUrl(): string\n    getSetupSAMLPageUrl(orgId: string): string\n\n    refreshAuthInfo: () => Promise<User | undefined>\n}\n\nexport type AuthProviderProps = {\n    authUrl: string\n    reloadOnAuthChange?: boolean\n    children?: React.ReactNode\n}\n\nexport const AuthContext = React.createContext<InternalAuthState | undefined>(undefined)\n\ntype UserAndAccessToken = {\n    user: User\n    accessToken: string\n} | {\n    user: undefined\n    accessToken: undefined\n}\n\ntype AuthState = {\n    loading: boolean\n    userAndAccessToken: UserAndAccessToken\n\n    // There's no good way to trigger server components to reload outside of router.refresh()\n    // This is our workaround until the app router has something better\n    authChangeDetected: boolean\n}\n\nconst initialAuthState = {\n    loading: true,\n    userAndAccessToken: {\n        user: undefined,\n        accessToken: undefined,\n    },\n    authChangeDetected: false,\n}\n\ntype AuthStateAction = {\n    user: User\n    accessToken: string\n} | {\n    user: undefined\n    accessToken: undefined\n}\n\nfunction authStateReducer(_state: AuthState, action: AuthStateAction): AuthState {\n    const newUserForEqualityChecking = {...action.user, lastActiveAt: undefined}\n    const existingUserForEqualityChecking = {..._state.userAndAccessToken.user, lastActiveAt: undefined}\n    const authChangeDetected = !_state.loading && !isEqual(newUserForEqualityChecking, existingUserForEqualityChecking)\n\n    if (!action.user) {\n        return {\n            loading: false,\n            userAndAccessToken: {\n                user: undefined,\n                accessToken: undefined,\n            },\n            authChangeDetected,\n        }\n    } else if (_state.loading) {\n        return {\n            loading: false,\n            userAndAccessToken: {\n                user: action.user,\n                accessToken: action.accessToken,\n            },\n            authChangeDetected,\n        }\n    } else {\n        return {\n            loading: false,\n            userAndAccessToken: {\n                user: action.user,\n                accessToken: action.accessToken,\n            },\n            authChangeDetected\n        }\n    }\n}\n\nexport const AuthProvider = (props: AuthProviderProps) => {\n    const [authState, dispatchInner] = useReducer(authStateReducer, initialAuthState)\n    const router = useRouter()\n    const reloadOnAuthChange = props.reloadOnAuthChange ?? true\n\n    const dispatch = useCallback((action: AuthStateAction) => {\n        dispatchInner(action)\n        saveUserToLocalStorage(action.user)\n    }, [dispatchInner])\n\n    // This is because we don't have a good way to trigger server components to reload outside of router.refresh()\n    // Once server actions isn't alpha, we can hopefully use that instead\n    useEffect(() => {\n        if (reloadOnAuthChange && authState.authChangeDetected) {\n            router.refresh()\n        }\n    }, [authState.authChangeDetected, reloadOnAuthChange, router])\n\n    // Trigger an initial refresh\n    useEffect(() => {\n        let didCancel = false\n\n        async function refreshAuthInfo() {\n            const action = await apiGetUserInfo()\n            if (!didCancel) {\n                dispatch(action)\n            }\n        }\n\n        refreshAuthInfo()\n        return () => {\n            didCancel = true\n        }\n    }, [])\n\n\n    // Periodically refresh the token\n    useEffect(() => {\n        let didCancel = false\n\n        async function refreshToken() {\n            const action = await apiGetUserInfo()\n            if (!didCancel) {\n                dispatch(action)\n            }\n        }\n\n        async function onStorageEvent(event: StorageEvent) {\n            if (event.key === USER_INFO_KEY && !doesLocalStorageMatch(event.newValue, authState.userAndAccessToken.user)) {\n                await refreshToken()\n            }\n        }\n\n        // TODO: Retry logic if the request fails\n        const interval = setInterval(refreshToken, 5 * 60 * 1000)\n\n        if (hasWindow()) {\n            window.addEventListener(\"storage\", onStorageEvent)\n            window.addEventListener(\"online\", refreshToken)\n            window.addEventListener(\"focus\", refreshToken)\n        }\n\n        return () => {\n            didCancel = true\n            clearInterval(interval)\n            if (hasWindow()) {\n                window.removeEventListener(\"storage\", onStorageEvent)\n                window.removeEventListener(\"online\", refreshToken)\n                window.removeEventListener(\"focus\", refreshToken)\n            }\n        }\n    }, [dispatch, authState.userAndAccessToken.user])\n\n\n    const logout = useCallback(async () => {\n        await fetch(\"/api/auth/logout\", {\n            method: \"POST\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            credentials: \"include\",\n        })\n        dispatch({user: undefined, accessToken: undefined})\n    }, [dispatch])\n\n    const getLoginPageUrl = (opts?: RedirectToLoginOptions) => {\n        if (opts?.postLoginRedirectPath) {\n            return `/api/auth/login?return_to_path=${encodeURIComponent(opts.postLoginRedirectPath)}`\n        }\n\n        return \"/api/auth/login\"\n    }\n    const getSignupPageUrl = (opts?: RedirectToSignupOptions) => {\n        if (opts?.postSignupRedirectPath) {\n            return `/api/auth/signup?return_to_path=${encodeURIComponent(opts.postSignupRedirectPath)}`\n        }\n\n        return \"/api/auth/signup\"\n    }\n    const getAccountPageUrl = useCallback(() => {\n        return `${props.authUrl}/account`\n    }, [props.authUrl])\n    const getOrgPageUrl = useCallback(\n        (orgId?: string) => {\n            if (orgId) {\n                return `${props.authUrl}/org?id=${orgId}`\n            } else {\n                return `${props.authUrl}/org`\n            }\n        },\n        [props.authUrl]\n    )\n    const getCreateOrgPageUrl = useCallback(() => {\n        return `${props.authUrl}/create_org`\n    }, [props.authUrl])\n\n    const getSetupSAMLPageUrl = useCallback(\n        (orgId: string) => {\n            return `${props.authUrl}/saml?id=${orgId}`\n        },\n        [props.authUrl]\n    )\n\n    const redirectTo = (url: string) => {\n        window.location.href = url\n    }\n\n    const redirectToLoginPage = (opts?: RedirectToLoginOptions) => redirectTo(getLoginPageUrl(opts))\n    const redirectToSignupPage = (opts?: RedirectToSignupOptions) => redirectTo(getSignupPageUrl(opts))\n    const redirectToAccountPage = () => redirectTo(getAccountPageUrl())\n    const redirectToOrgPage = (orgId?: string) => redirectTo(getOrgPageUrl(orgId))\n    const redirectToCreateOrgPage = () => redirectTo(getCreateOrgPageUrl())\n    const redirectToSetupSAMLPage = (orgId: string) => redirectTo(getSetupSAMLPageUrl(orgId))\n\n    const refreshAuthInfo = async () => {\n        const action = await apiGetUserInfo()\n        dispatch(action)\n        return action.user\n    }\n\n    const value = {\n        loading: authState.loading,\n        userAndAccessToken: authState.userAndAccessToken,\n        logout,\n        redirectToLoginPage,\n        redirectToSignupPage,\n        redirectToAccountPage,\n        redirectToOrgPage,\n        redirectToCreateOrgPage,\n        redirectToSetupSAMLPage,\n        getLoginPageUrl,\n        getSignupPageUrl,\n        getAccountPageUrl,\n        getOrgPageUrl,\n        getCreateOrgPageUrl,\n        getSetupSAMLPageUrl,\n        refreshAuthInfo,\n    }\n    return <AuthContext.Provider value={value}>{props.children}</AuthContext.Provider>\n}\n\ntype UserInfoResponse = {\n    user: User\n    accessToken: string\n} | {\n    user: undefined\n    accessToken: undefined\n}\n\nasync function apiGetUserInfo(): Promise<UserInfoResponse> {\n    try {\n        const userInfoResponse = await fetch(\"/api/auth/userinfo\", {\n            method: \"GET\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n            },\n            credentials: \"include\",\n        })\n\n        if (userInfoResponse.ok) {\n            const {userinfo, accessToken, impersonatorUserId} = await userInfoResponse.json()\n            const user = new User({\n                userId: userinfo.user_id,\n                email: userinfo.email,\n                emailConfirmed: userinfo.email_confirmed,\n                hasPassword: userinfo.has_password,\n                username: userinfo.username,\n                firstName: userinfo.first_name,\n                lastName: userinfo.last_name,\n                pictureUrl: userinfo.picture_url,\n                orgIdToOrgMemberInfo: toOrgIdToOrgMemberInfo(userinfo.org_id_to_org_info),\n                mfaEnabled: userinfo.mfa_enabled,\n                canCreateOrgs: userinfo.can_create_orgs,\n                updatePasswordRequired: userinfo.update_password_required,\n                createdAt: userinfo.created_at,\n                lastActiveAt: userinfo.last_active_at,\n                properties: userinfo.properties,\n                impersonatorUserId,\n            })\n\n            return {user, accessToken}\n        } else if (userInfoResponse.status === 401) {\n            return {user: undefined, accessToken: undefined}\n        } else {\n            console.info(\"Failed to refresh token\", userInfoResponse)\n        }\n    } catch (e) {\n        console.info(\"Failed to refresh token\", e)\n    }\n    throw new Error(\"Failed to refresh token\")\n}\n","import {UserFromToken} from \"../user\";\nimport {User} from \"./useUser\";\n\nexport const USER_INFO_KEY = \"__PROPEL_AUTH_USER_INFO\"\n\nexport function hasWindow(): boolean {\n    return typeof window !== \"undefined\"\n}\n\nexport function saveUserToLocalStorage(user: User | undefined) {\n    if (user) {\n        localStorage.setItem(USER_INFO_KEY, JSON.stringify(user))\n    } else {\n        localStorage.setItem(USER_INFO_KEY, \"{}\")\n    }\n}\n\nexport function doesLocalStorageMatch(newValue: string | null, user: UserFromToken | undefined): boolean {\n    if (!newValue) {\n        return false\n    } else if (!user) {\n        return newValue === \"{}\"\n    }\n\n    const parsed = JSON.parse(newValue)\n    if (!parsed) {\n        return false\n    }\n\n    return isEqual(parsed, user)\n}\n\nexport function isEqual(a: any, b: any): boolean {\n    if (typeof a !== typeof b) {\n        return false\n    }\n\n    if (Array.isArray(a) !== Array.isArray(b)) {\n        return false\n    }\n\n    if (Array.isArray(a)) {\n        const aArray = a as any[]\n        const bArray = b as any[]\n        if (aArray.length !== bArray.length) {\n            return false\n        }\n\n        for (let i = 0; i < aArray.length; i++) {\n            if (!isEqual(aArray[i], bArray[i])) {\n                return false\n            }\n        }\n\n        return true\n    }\n\n    if (typeof a === \"object\") {\n        const aKeys = Object.keys(a)\n        const bKeys = Object.keys(b)\n        if (aKeys.length !== bKeys.length) {\n            return false\n        }\n\n        for (const key of aKeys) {\n            if (!isEqual(a[key], b[key])) {\n                return false\n            }\n        }\n\n        return true\n    } else {\n        return a === b\n    }\n}","'use client'\n\nimport {useContext} from \"react\"\nimport {AuthContext} from \"./AuthProvider\"\nimport {OrgIdToOrgMemberInfo, OrgMemberInfo} from \"../user\";\n\nexport class User {\n    public userId: string\n    public email: string\n    public emailConfirmed: boolean\n    public hasPassword: boolean\n\n    public username?: string\n    public firstName?: string\n    public lastName?: string\n    public pictureUrl?: string\n\n    public orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo\n\n    public mfaEnabled: boolean\n    public canCreateOrgs: boolean\n    public updatePasswordRequired: boolean\n\n    public createdAt: number\n    public lastActiveAt: number\n\n    public properties?: {[key: string]: unknown}\n\n    public legacyUserId?: string\n    public impersonatorUserId?: string\n\n    constructor({\n                    userId,\n                    email,\n                    emailConfirmed,\n                    hasPassword,\n                    username,\n                    firstName,\n                    lastName,\n                    pictureUrl,\n                    orgIdToOrgMemberInfo,\n                    mfaEnabled,\n                    canCreateOrgs,\n                    updatePasswordRequired,\n                    createdAt,\n                    lastActiveAt,\n                    legacyUserId,\n                    properties,\n                    impersonatorUserId,\n                }: {\n        userId: string\n        email: string\n        emailConfirmed: boolean\n        hasPassword: boolean\n        username?: string\n        firstName?: string\n        lastName?: string\n        pictureUrl?: string\n        orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo\n        mfaEnabled: boolean\n        canCreateOrgs: boolean\n        updatePasswordRequired: boolean\n        createdAt: number\n        lastActiveAt: number\n        legacyUserId?: string\n        properties?: {[key: string]: unknown}\n        impersonatorUserId?: string\n    }) {\n        this.userId = userId\n        this.email = email\n        this.emailConfirmed = emailConfirmed\n        this.hasPassword = hasPassword\n        this.username = username\n        this.firstName = firstName\n        this.lastName = lastName\n        this.pictureUrl = pictureUrl\n        this.orgIdToOrgMemberInfo = orgIdToOrgMemberInfo\n        this.mfaEnabled = mfaEnabled\n        this.canCreateOrgs = canCreateOrgs\n        this.updatePasswordRequired = updatePasswordRequired\n        this.createdAt = createdAt\n        this.lastActiveAt = lastActiveAt\n        this.legacyUserId = legacyUserId\n        this.properties = properties\n        this.impersonatorUserId = impersonatorUserId\n    }\n\n    public getOrg(orgId: string): OrgMemberInfo | undefined {\n        return this.orgIdToOrgMemberInfo?.[orgId]\n    }\n\n    public getOrgByName(orgName: string): OrgMemberInfo | undefined {\n        if (!this.orgIdToOrgMemberInfo) {\n            return undefined\n        }\n\n        const urlSafeOrgName = orgName.toLowerCase().replace(/ /g, \"-\")\n        for (const orgId in this.orgIdToOrgMemberInfo) {\n            const orgMemberInfo = this.orgIdToOrgMemberInfo[orgId]\n            if (orgMemberInfo.urlSafeOrgName === urlSafeOrgName) {\n                return orgMemberInfo\n            }\n        }\n\n        return undefined\n    }\n\n    public getOrgs(): OrgMemberInfo[] {\n        if (!this.orgIdToOrgMemberInfo) {\n            return []\n        }\n\n        return Object.values(this.orgIdToOrgMemberInfo)\n    }\n\n    public isImpersonating(): boolean {\n        return !!this.impersonatorUserId\n    }\n}\n\nexport type UseUserLoading = {\n    loading: true\n    isLoggedIn: never\n    user: never\n    accessToken: never\n}\n\nexport type UseUserLoggedIn = {\n    loading: false\n    isLoggedIn: true\n    user: User\n    accessToken: string\n}\n\nexport type UseUserNotLoggedIn = {\n    loading: false\n    isLoggedIn: false\n    user: undefined\n    accessToken: undefined\n}\n\nexport type UseUser = UseUserLoading | UseUserLoggedIn | UseUserNotLoggedIn\n\nexport function useUser(): UseUser {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useUser must be used within an AuthProvider\")\n    }\n\n    const {loading, userAndAccessToken} = context\n    if (loading) {\n        return {\n            loading: true,\n            isLoggedIn: undefined as never,\n            user: undefined as never,\n            accessToken: undefined as never,\n        }\n    } else if (userAndAccessToken.user) {\n        return {\n            loading: false,\n            isLoggedIn: true,\n            user: userAndAccessToken.user,\n            accessToken: userAndAccessToken.accessToken,\n        }\n    } else {\n        return {\n            loading: false,\n            isLoggedIn: false,\n            user: undefined,\n            accessToken: undefined,\n        }\n    }\n}","import { useContext } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useHostedPageUrls() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useHostedPageUrls must be used within an AuthProvider\")\n    }\n    const {\n        getLoginPageUrl,\n        getSignupPageUrl,\n        getAccountPageUrl,\n        getOrgPageUrl,\n        getCreateOrgPageUrl,\n        getSetupSAMLPageUrl,\n    } = context\n    return {\n        getLoginPageUrl,\n        getSignupPageUrl,\n        getAccountPageUrl,\n        getOrgPageUrl,\n        getCreateOrgPageUrl,\n        getSetupSAMLPageUrl,\n    }\n}\n","import { useContext } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useLogoutFunction() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useLogoutFunction must be used within an AuthProvider\")\n    }\n    const { logout } = context\n    return logout\n}\n","import React, { useContext, useEffect } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useRedirectFunctions() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useRedirectFunctions must be used within an AuthProvider\")\n    }\n    const {\n        redirectToAccountPage,\n        redirectToSignupPage,\n        redirectToLoginPage,\n        redirectToOrgPage,\n        redirectToCreateOrgPage,\n    } = context\n    return {\n        redirectToSignupPage,\n        redirectToLoginPage,\n        redirectToAccountPage,\n        redirectToOrgPage,\n        redirectToCreateOrgPage,\n    }\n}\n\nexport interface RedirectProps {\n    children?: React.ReactNode\n}\n\nexport function RedirectToSignup({ children }: RedirectProps) {\n    const { redirectToSignupPage } = useRedirectFunctions()\n\n    useEffect(() => {\n        redirectToSignupPage()\n    }, [])\n\n    return <>{children}</>\n}\n\nexport function RedirectToLogin({ children }: RedirectProps) {\n    const { redirectToLoginPage } = useRedirectFunctions()\n    useEffect(() => {\n        redirectToLoginPage()\n    }, [])\n    return <>{children}</>\n}\n","import { useContext } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useRefreshAuth() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useRefreshAuth must be used within an AuthProvider\")\n    }\n    const { refreshAuthInfo } = context\n    return refreshAuthInfo\n}\n"],"mappings":"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","names":["import_react","React","refreshAuthInfo","import_react","import_react","import_react","React","import_react"]}
         | 
| 1 | 
            +
            {"version":3,"sources":["../../src/client/index.ts","../../src/user.ts","../../src/client/AuthProvider.tsx","../../src/client/utils.ts","../../src/client/useUser.tsx","../../src/client/useHostedPageUrls.tsx","../../src/client/useLogoutFunction.ts","../../src/client/useRedirectFunctions.tsx","../../src/client/useRefreshAuth.ts"],"sourcesContent":["export type {OrgIdToOrgMemberInfo} from \"../user\"\nexport {UserFromToken, OrgMemberInfo} from \"../user\"\nexport {AuthProvider} from \"./AuthProvider\"\nexport type {AuthProviderProps, RedirectToLoginOptions, RedirectToSignupOptions} from \"./AuthProvider\"\nexport {useUser, User} from \"./useUser\"\nexport type {UseUser, UseUserLoading, UseUserLoggedIn, UseUserNotLoggedIn} from \"./useUser\"\nexport {useHostedPageUrls} from \"./useHostedPageUrls\"\nexport {useLogoutFunction} from \"./useLogoutFunction\"\nexport {useRedirectFunctions, RedirectToLogin, RedirectToSignup} from \"./useRedirectFunctions\"\nexport type {RedirectProps} from \"./useRedirectFunctions\"\nexport {useRefreshAuth} from \"./useRefreshAuth\"","export class UserFromToken {\n    public userId: string\n\n    public activeOrgId?: string\n    public orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo\n\n    // Metadata about the user\n    public email: string\n    public firstName?: string\n    public lastName?: string\n    public username?: string\n    public properties?: { [key: string]: unknown }\n\n    // If you used our migration APIs to migrate this user from a different system,\n    //   this is their original ID from that system.\n    public legacyUserId?: string\n    public impersonatorUserId?: string\n\n    constructor(\n        userId: string,\n        email: string,\n        orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo,\n        firstName?: string,\n        lastName?: string,\n        username?: string,\n        legacyUserId?: string,\n        impersonatorUserId?: string,\n        properties?: { [key: string]: unknown },\n        activeOrgId?: string\n    ) {\n        this.userId = userId\n\n        this.activeOrgId = activeOrgId\n        this.orgIdToOrgMemberInfo = orgIdToOrgMemberInfo\n\n        this.email = email\n        this.firstName = firstName\n        this.lastName = lastName\n        this.username = username\n\n        this.legacyUserId = legacyUserId\n        this.impersonatorUserId = impersonatorUserId\n\n        this.properties = properties\n    }\n\n    public getActiveOrg(): OrgMemberInfo | undefined {\n        if (!this.activeOrgId || !this.orgIdToOrgMemberInfo) {\n            return undefined\n        }\n\n        return this.orgIdToOrgMemberInfo[this.activeOrgId]\n    }\n\n    public getActiveOrgId(): string | undefined {\n        return this.activeOrgId\n    }\n\n    public getOrg(orgId: string): OrgMemberInfo | undefined {\n        if (!this.orgIdToOrgMemberInfo) {\n            return undefined\n        }\n\n        return this.orgIdToOrgMemberInfo[orgId]\n    }\n\n    public getOrgByName(orgName: string): OrgMemberInfo | undefined {\n        if (!this.orgIdToOrgMemberInfo) {\n            return undefined\n        }\n\n        const urlSafeOrgName = orgName.toLowerCase().replace(/ /g, '-')\n        for (const orgId in this.orgIdToOrgMemberInfo) {\n            const orgMemberInfo = this.orgIdToOrgMemberInfo[orgId]\n            if (orgMemberInfo.urlSafeOrgName === urlSafeOrgName) {\n                return orgMemberInfo\n            }\n        }\n\n        return undefined\n    }\n\n    public getOrgs(): OrgMemberInfo[] {\n        if (!this.orgIdToOrgMemberInfo) {\n            return []\n        }\n\n        return Object.values(this.orgIdToOrgMemberInfo)\n    }\n\n    public isImpersonating(): boolean {\n        return !!this.impersonatorUserId\n    }\n\n    public static fromJSON(json: string): UserFromToken {\n        const obj = JSON.parse(json)\n        const orgIdToOrgMemberInfo: OrgIdToOrgMemberInfo = {}\n        for (const orgId in obj.orgIdToOrgMemberInfo) {\n            orgIdToOrgMemberInfo[orgId] = OrgMemberInfo.fromJSON(JSON.stringify(obj.orgIdToOrgMemberInfo[orgId]))\n        }\n        return new UserFromToken(\n            obj.userId,\n            obj.email,\n            orgIdToOrgMemberInfo,\n            obj.firstName,\n            obj.lastName,\n            obj.username,\n            obj.legacyUserId,\n            obj.impersonatorUserId,\n            obj.properties\n        )\n    }\n\n    public static fromJwtPayload(payload: InternalUser): UserFromToken {\n        let activeOrgId: string | undefined\n        let orgIdToOrgMemberInfo: OrgIdToOrgMemberInfo | undefined\n\n        if (payload.org_member_info) {\n            activeOrgId = payload.org_member_info.org_id\n            orgIdToOrgMemberInfo = toOrgIdToOrgMemberInfo({ [activeOrgId]: payload.org_member_info })\n        } else {\n            activeOrgId = undefined\n            orgIdToOrgMemberInfo = toOrgIdToOrgMemberInfo(payload.org_id_to_org_member_info)\n        }\n\n        return new UserFromToken(\n            payload.user_id,\n            payload.email,\n            orgIdToOrgMemberInfo,\n            payload.first_name,\n            payload.last_name,\n            payload.username,\n            payload.legacy_user_id,\n            payload.impersonatorUserId,\n            payload.properties,\n            activeOrgId\n        )\n    }\n}\n\nexport type OrgIdToOrgMemberInfo = {\n    [orgId: string]: OrgMemberInfo\n}\n\nexport class OrgMemberInfo {\n    public orgId: string\n    public orgName: string\n    public orgMetadata: { [key: string]: any }\n    public urlSafeOrgName: string\n\n    public userAssignedRole: string\n    public userInheritedRolesPlusCurrentRole: string[]\n    public userPermissions: string[]\n\n    constructor(\n        orgId: string,\n        orgName: string,\n        orgMetadata: { [key: string]: any },\n        urlSafeOrgName: string,\n        userAssignedRole: string,\n        userInheritedRolesPlusCurrentRole: string[],\n        userPermissions: string[]\n    ) {\n        this.orgId = orgId\n        this.orgName = orgName\n        this.orgMetadata = orgMetadata\n        this.urlSafeOrgName = urlSafeOrgName\n\n        this.userAssignedRole = userAssignedRole\n        this.userInheritedRolesPlusCurrentRole = userInheritedRolesPlusCurrentRole\n        this.userPermissions = userPermissions\n    }\n\n    // validation methods\n\n    public isRole(role: string): boolean {\n        return this.userAssignedRole === role\n    }\n\n    public isAtLeastRole(role: string): boolean {\n        return this.userInheritedRolesPlusCurrentRole.includes(role)\n    }\n\n    public hasPermission(permission: string): boolean {\n        return this.userPermissions.includes(permission)\n    }\n\n    public hasAllPermissions(permissions: string[]): boolean {\n        return permissions.every((permission) => this.hasPermission(permission))\n    }\n\n    public static fromJSON(json: string): OrgMemberInfo {\n        const obj = JSON.parse(json)\n        return new OrgMemberInfo(\n            obj.orgId,\n            obj.orgName,\n            obj.orgMetadata,\n            obj.urlSafeOrgName,\n            obj.userAssignedRole,\n            obj.userInheritedRolesPlusCurrentRole,\n            obj.userPermissions\n        )\n    }\n\n    // getters for the private fields\n\n    get assignedRole(): string {\n        return this.userAssignedRole\n    }\n\n    get inheritedRolesPlusCurrentRole(): string[] {\n        return this.userInheritedRolesPlusCurrentRole\n    }\n\n    get permissions(): string[] {\n        return this.userPermissions\n    }\n}\n\n// These Internal types exist since the server returns snake case, but typescript/javascript\n// convention is camelCase.\nexport type InternalOrgMemberInfo = {\n    org_id: string\n    org_name: string\n    org_metadata: { [key: string]: any }\n    url_safe_org_name: string\n    user_role: string\n    inherited_user_roles_plus_current_role: string[]\n    user_permissions: string[]\n}\nexport type InternalUser = {\n    user_id: string\n\n    org_member_info?: InternalOrgMemberInfo\n    org_id_to_org_member_info?: { [org_id: string]: InternalOrgMemberInfo }\n\n    email: string\n    first_name?: string\n    last_name?: string\n    username?: string\n    properties?: { [key: string]: unknown }\n\n    // If you used our migration APIs to migrate this user from a different system, this is their original ID from that system.\n    legacy_user_id?: string\n    impersonatorUserId?: string\n}\n\nexport function toUser(snake_case: InternalUser): UserFromToken {\n    return UserFromToken.fromJwtPayload(snake_case)\n}\n\nexport function toOrgIdToOrgMemberInfo(snake_case?: {\n    [org_id: string]: InternalOrgMemberInfo\n}): OrgIdToOrgMemberInfo | undefined {\n    if (snake_case === undefined) {\n        return undefined\n    }\n    const camelCase: OrgIdToOrgMemberInfo = {}\n\n    for (const key of Object.keys(snake_case)) {\n        const snakeCaseValue = snake_case[key]\n        if (snakeCaseValue) {\n            camelCase[key] = new OrgMemberInfo(\n                snakeCaseValue.org_id,\n                snakeCaseValue.org_name,\n                snakeCaseValue.org_metadata,\n                snakeCaseValue.url_safe_org_name,\n                snakeCaseValue.user_role,\n                snakeCaseValue.inherited_user_roles_plus_current_role,\n                snakeCaseValue.user_permissions\n            )\n        }\n    }\n\n    return camelCase\n}\n","'use client'\n\nimport React, { useCallback, useEffect, useReducer } from 'react'\nimport { doesLocalStorageMatch, hasWindow, isEqual, saveUserToLocalStorage, USER_INFO_KEY } from './utils'\nimport { useRouter } from 'next/navigation.js'\nimport { User } from './useUser'\nimport { toOrgIdToOrgMemberInfo } from '../user'\n\nexport interface RedirectToSignupOptions {\n    postSignupRedirectPath: string\n}\nexport interface RedirectToLoginOptions {\n    postLoginRedirectPath: string\n}\n\ninterface InternalAuthState {\n    loading: boolean\n    userAndAccessToken: UserAndAccessToken\n\n    logout: () => Promise<void>\n\n    redirectToLoginPage: (opts?: RedirectToLoginOptions) => void\n    redirectToSignupPage: (opts?: RedirectToSignupOptions) => void\n    redirectToAccountPage: () => void\n    redirectToOrgPage: (orgId?: string) => void\n    redirectToCreateOrgPage: () => void\n    redirectToSetupSAMLPage: (orgId: string) => void\n\n    getSignupPageUrl(opts?: RedirectToSignupOptions): string\n    getLoginPageUrl(opts?: RedirectToLoginOptions): string\n    getAccountPageUrl(): string\n    getOrgPageUrl(orgId?: string): string\n    getCreateOrgPageUrl(): string\n    getSetupSAMLPageUrl(orgId: string): string\n\n    refreshAuthInfo: () => Promise<User | undefined>\n    setActiveOrg: (orgId: string) => Promise<User | undefined>\n}\n\nexport type AuthProviderProps = {\n    authUrl: string\n    reloadOnAuthChange?: boolean\n    children?: React.ReactNode\n}\n\nexport const AuthContext = React.createContext<InternalAuthState | undefined>(undefined)\n\ntype UserAndAccessToken =\n    | {\n          user: User\n          accessToken: string\n      }\n    | {\n          user: undefined\n          accessToken: undefined\n      }\n\ntype AuthState = {\n    loading: boolean\n    userAndAccessToken: UserAndAccessToken\n\n    // There's no good way to trigger server components to reload outside of router.refresh()\n    // This is our workaround until the app router has something better\n    authChangeDetected: boolean\n}\n\nconst initialAuthState = {\n    loading: true,\n    userAndAccessToken: {\n        user: undefined,\n        accessToken: undefined,\n    },\n    authChangeDetected: false,\n}\n\ntype AuthStateAction =\n    | {\n          user: User\n          accessToken: string\n      }\n    | {\n          user: undefined\n          accessToken: undefined\n      }\n\nfunction authStateReducer(_state: AuthState, action: AuthStateAction): AuthState {\n    const newUserForEqualityChecking = { ...action.user, lastActiveAt: undefined }\n    const existingUserForEqualityChecking = { ..._state.userAndAccessToken.user, lastActiveAt: undefined }\n    const authChangeDetected = !_state.loading && !isEqual(newUserForEqualityChecking, existingUserForEqualityChecking)\n\n    if (!action.user) {\n        return {\n            loading: false,\n            userAndAccessToken: {\n                user: undefined,\n                accessToken: undefined,\n            },\n            authChangeDetected,\n        }\n    } else if (_state.loading) {\n        return {\n            loading: false,\n            userAndAccessToken: {\n                user: action.user,\n                accessToken: action.accessToken,\n            },\n            authChangeDetected,\n        }\n    } else {\n        return {\n            loading: false,\n            userAndAccessToken: {\n                user: action.user,\n                accessToken: action.accessToken,\n            },\n            authChangeDetected,\n        }\n    }\n}\n\nexport const AuthProvider = (props: AuthProviderProps) => {\n    const [authState, dispatchInner] = useReducer(authStateReducer, initialAuthState)\n    const router = useRouter()\n    const reloadOnAuthChange = props.reloadOnAuthChange ?? true\n\n    const dispatch = useCallback(\n        (action: AuthStateAction) => {\n            dispatchInner(action)\n            saveUserToLocalStorage(action.user)\n        },\n        [dispatchInner]\n    )\n\n    // This is because we don't have a good way to trigger server components to reload outside of router.refresh()\n    // Once server actions isn't alpha, we can hopefully use that instead\n    useEffect(() => {\n        if (reloadOnAuthChange && authState.authChangeDetected) {\n            router.refresh()\n        }\n    }, [authState.authChangeDetected, reloadOnAuthChange, router])\n\n    // Trigger an initial refresh\n    useEffect(() => {\n        let didCancel = false\n\n        async function refreshAuthInfo() {\n            const action = await apiGetUserInfo()\n            if (!didCancel) {\n                dispatch(action)\n            }\n        }\n\n        refreshAuthInfo()\n        return () => {\n            didCancel = true\n        }\n    }, [])\n\n    // Periodically refresh the token\n    useEffect(() => {\n        let didCancel = false\n\n        async function refreshToken() {\n            const action = await apiGetUserInfo()\n            if (!didCancel) {\n                dispatch(action)\n            }\n        }\n\n        async function onStorageEvent(event: StorageEvent) {\n            if (\n                event.key === USER_INFO_KEY &&\n                !doesLocalStorageMatch(event.newValue, authState.userAndAccessToken.user)\n            ) {\n                await refreshToken()\n            }\n        }\n\n        // TODO: Retry logic if the request fails\n        const interval = setInterval(refreshToken, 5 * 60 * 1000)\n\n        if (hasWindow()) {\n            window.addEventListener('storage', onStorageEvent)\n            window.addEventListener('online', refreshToken)\n            window.addEventListener('focus', refreshToken)\n        }\n\n        return () => {\n            didCancel = true\n            clearInterval(interval)\n            if (hasWindow()) {\n                window.removeEventListener('storage', onStorageEvent)\n                window.removeEventListener('online', refreshToken)\n                window.removeEventListener('focus', refreshToken)\n            }\n        }\n    }, [dispatch, authState.userAndAccessToken.user])\n\n    const logout = useCallback(async () => {\n        await fetch('/api/auth/logout', {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n            },\n            credentials: 'include',\n        })\n        dispatch({ user: undefined, accessToken: undefined })\n    }, [dispatch])\n\n    const getLoginPageUrl = (opts?: RedirectToLoginOptions) => {\n        if (opts?.postLoginRedirectPath) {\n            return `/api/auth/login?return_to_path=${encodeURIComponent(opts.postLoginRedirectPath)}`\n        }\n\n        return '/api/auth/login'\n    }\n    const getSignupPageUrl = (opts?: RedirectToSignupOptions) => {\n        if (opts?.postSignupRedirectPath) {\n            return `/api/auth/signup?return_to_path=${encodeURIComponent(opts.postSignupRedirectPath)}`\n        }\n\n        return '/api/auth/signup'\n    }\n    const getAccountPageUrl = useCallback(() => {\n        return `${props.authUrl}/account`\n    }, [props.authUrl])\n    const getOrgPageUrl = useCallback(\n        (orgId?: string) => {\n            if (orgId) {\n                return `${props.authUrl}/org?id=${orgId}`\n            } else {\n                return `${props.authUrl}/org`\n            }\n        },\n        [props.authUrl]\n    )\n    const getCreateOrgPageUrl = useCallback(() => {\n        return `${props.authUrl}/create_org`\n    }, [props.authUrl])\n\n    const getSetupSAMLPageUrl = useCallback(\n        (orgId: string) => {\n            return `${props.authUrl}/saml?id=${orgId}`\n        },\n        [props.authUrl]\n    )\n\n    const redirectTo = (url: string) => {\n        window.location.href = url\n    }\n\n    const redirectToLoginPage = (opts?: RedirectToLoginOptions) => redirectTo(getLoginPageUrl(opts))\n    const redirectToSignupPage = (opts?: RedirectToSignupOptions) => redirectTo(getSignupPageUrl(opts))\n    const redirectToAccountPage = () => redirectTo(getAccountPageUrl())\n    const redirectToOrgPage = (orgId?: string) => redirectTo(getOrgPageUrl(orgId))\n    const redirectToCreateOrgPage = () => redirectTo(getCreateOrgPageUrl())\n    const redirectToSetupSAMLPage = (orgId: string) => redirectTo(getSetupSAMLPageUrl(orgId))\n\n    const refreshAuthInfo = useCallback(async () => {\n        const action = await apiGetUserInfo()\n        dispatch(action)\n        return action.user\n    }, [dispatch])\n\n    const setActiveOrg = useCallback(\n        async (orgId: string) => {\n            const action = await apiPostSetActiveOrg(orgId)\n            if (action.error === 'not_in_org') {\n                return undefined\n            } else {\n                dispatch(action)\n                return action.user\n            }\n        },\n        [dispatch]\n    )\n\n    const value = {\n        loading: authState.loading,\n        userAndAccessToken: authState.userAndAccessToken,\n        logout,\n        redirectToLoginPage,\n        redirectToSignupPage,\n        redirectToAccountPage,\n        redirectToOrgPage,\n        redirectToCreateOrgPage,\n        redirectToSetupSAMLPage,\n        getLoginPageUrl,\n        getSignupPageUrl,\n        getAccountPageUrl,\n        getOrgPageUrl,\n        getCreateOrgPageUrl,\n        getSetupSAMLPageUrl,\n        refreshAuthInfo,\n        setActiveOrg,\n    }\n    return <AuthContext.Provider value={value}>{props.children}</AuthContext.Provider>\n}\n\ntype UserInfoResponse =\n    | {\n          user: User\n          accessToken: string\n      }\n    | {\n          user: undefined\n          accessToken: undefined\n      }\n\nasync function apiGetUserInfo(): Promise<UserInfoResponse> {\n    try {\n        const userInfoResponse = await fetch('/api/auth/userinfo', {\n            method: 'GET',\n            headers: {\n                'Content-Type': 'application/json',\n            },\n            credentials: 'include',\n        })\n\n        if (userInfoResponse.ok) {\n            const { userinfo, accessToken, impersonatorUserId, activeOrgId } = await userInfoResponse.json()\n            const user = new User({\n                userId: userinfo.user_id,\n                email: userinfo.email,\n                emailConfirmed: userinfo.email_confirmed,\n                hasPassword: userinfo.has_password,\n                username: userinfo.username,\n                firstName: userinfo.first_name,\n                lastName: userinfo.last_name,\n                pictureUrl: userinfo.picture_url,\n                orgIdToOrgMemberInfo: toOrgIdToOrgMemberInfo(userinfo.org_id_to_org_info),\n                activeOrgId,\n                mfaEnabled: userinfo.mfa_enabled,\n                canCreateOrgs: userinfo.can_create_orgs,\n                updatePasswordRequired: userinfo.update_password_required,\n                createdAt: userinfo.created_at,\n                lastActiveAt: userinfo.last_active_at,\n                properties: userinfo.properties,\n                impersonatorUserId,\n            })\n\n            return { user, accessToken }\n        } else if (userInfoResponse.status === 401) {\n            return { user: undefined, accessToken: undefined }\n        } else {\n            console.info('Failed to refresh token', userInfoResponse)\n        }\n    } catch (e) {\n        console.info('Failed to refresh token', e)\n    }\n    throw new Error('Failed to refresh token')\n}\n\ntype SetActiveOrgResponse =\n    | {\n          user: User\n          accessToken: string\n          error: undefined\n      }\n    | {\n          error: 'not_in_org'\n      }\n\nasync function apiPostSetActiveOrg(orgId: string): Promise<SetActiveOrgResponse> {\n    try {\n        const queryParams = new URLSearchParams({ active_org_id: orgId }).toString()\n        const url = `/api/auth/set-active-org?${queryParams}`\n        const userInfoResponse = await fetch(url, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n            },\n            credentials: 'include',\n        })\n\n        if (userInfoResponse.ok) {\n            const { userinfo, accessToken, impersonatorUserId, activeOrgId } = await userInfoResponse.json()\n            const user = new User({\n                userId: userinfo.user_id,\n                email: userinfo.email,\n                emailConfirmed: userinfo.email_confirmed,\n                hasPassword: userinfo.has_password,\n                username: userinfo.username,\n                firstName: userinfo.first_name,\n                lastName: userinfo.last_name,\n                pictureUrl: userinfo.picture_url,\n                orgIdToOrgMemberInfo: toOrgIdToOrgMemberInfo(userinfo.org_id_to_org_info),\n                activeOrgId,\n                mfaEnabled: userinfo.mfa_enabled,\n                canCreateOrgs: userinfo.can_create_orgs,\n                updatePasswordRequired: userinfo.update_password_required,\n                createdAt: userinfo.created_at,\n                lastActiveAt: userinfo.last_active_at,\n                properties: userinfo.properties,\n                impersonatorUserId,\n            })\n\n            return { user, accessToken, error: undefined }\n        } else if (userInfoResponse.status === 401) {\n            return { error: 'not_in_org' }\n        } else {\n            console.info('Failed to set active org', userInfoResponse)\n        }\n    } catch (e) {\n        console.info('Failed to set active org', e)\n    }\n    throw new Error('Failed to set active org')\n}\n","import {UserFromToken} from \"../user\";\nimport {User} from \"./useUser\";\n\nexport const USER_INFO_KEY = \"__PROPEL_AUTH_USER_INFO\"\n\nexport function hasWindow(): boolean {\n    return typeof window !== \"undefined\"\n}\n\nexport function saveUserToLocalStorage(user: User | undefined) {\n    if (user) {\n        localStorage.setItem(USER_INFO_KEY, JSON.stringify(user))\n    } else {\n        localStorage.setItem(USER_INFO_KEY, \"{}\")\n    }\n}\n\nexport function doesLocalStorageMatch(newValue: string | null, user: UserFromToken | undefined): boolean {\n    if (!newValue) {\n        return false\n    } else if (!user) {\n        return newValue === \"{}\"\n    }\n\n    const parsed = JSON.parse(newValue)\n    if (!parsed) {\n        return false\n    }\n\n    return isEqual(parsed, user)\n}\n\nexport function isEqual(a: any, b: any): boolean {\n    if (typeof a !== typeof b) {\n        return false\n    }\n\n    if (Array.isArray(a) !== Array.isArray(b)) {\n        return false\n    }\n\n    if (Array.isArray(a)) {\n        const aArray = a as any[]\n        const bArray = b as any[]\n        if (aArray.length !== bArray.length) {\n            return false\n        }\n\n        for (let i = 0; i < aArray.length; i++) {\n            if (!isEqual(aArray[i], bArray[i])) {\n                return false\n            }\n        }\n\n        return true\n    }\n\n    if (typeof a === \"object\") {\n        const aKeys = Object.keys(a)\n        const bKeys = Object.keys(b)\n        if (aKeys.length !== bKeys.length) {\n            return false\n        }\n\n        for (const key of aKeys) {\n            if (!isEqual(a[key], b[key])) {\n                return false\n            }\n        }\n\n        return true\n    } else {\n        return a === b\n    }\n}","'use client'\n\nimport { useContext } from 'react'\nimport { AuthContext } from './AuthProvider'\nimport { OrgIdToOrgMemberInfo, OrgMemberInfo } from '../user'\n\nexport class User {\n    public userId: string\n    public email: string\n    public emailConfirmed: boolean\n    public hasPassword: boolean\n\n    public username?: string\n    public firstName?: string\n    public lastName?: string\n    public pictureUrl?: string\n\n    public orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo\n    public activeOrgId?: string\n\n    public mfaEnabled: boolean\n    public canCreateOrgs: boolean\n    public updatePasswordRequired: boolean\n\n    public createdAt: number\n    public lastActiveAt: number\n\n    public properties?: { [key: string]: unknown }\n\n    public legacyUserId?: string\n    public impersonatorUserId?: string\n\n    constructor({\n        userId,\n        email,\n        emailConfirmed,\n        hasPassword,\n        username,\n        firstName,\n        lastName,\n        pictureUrl,\n        orgIdToOrgMemberInfo,\n        activeOrgId,\n        mfaEnabled,\n        canCreateOrgs,\n        updatePasswordRequired,\n        createdAt,\n        lastActiveAt,\n        legacyUserId,\n        properties,\n        impersonatorUserId,\n    }: {\n        userId: string\n        email: string\n        emailConfirmed: boolean\n        hasPassword: boolean\n        username?: string\n        firstName?: string\n        lastName?: string\n        pictureUrl?: string\n        orgIdToOrgMemberInfo?: OrgIdToOrgMemberInfo\n        activeOrgId?: string\n        mfaEnabled: boolean\n        canCreateOrgs: boolean\n        updatePasswordRequired: boolean\n        createdAt: number\n        lastActiveAt: number\n        legacyUserId?: string\n        properties?: { [key: string]: unknown }\n        impersonatorUserId?: string\n    }) {\n        this.userId = userId\n        this.email = email\n        this.emailConfirmed = emailConfirmed\n        this.hasPassword = hasPassword\n        this.username = username\n        this.firstName = firstName\n        this.lastName = lastName\n        this.pictureUrl = pictureUrl\n        this.orgIdToOrgMemberInfo = orgIdToOrgMemberInfo\n        this.activeOrgId = activeOrgId\n        this.mfaEnabled = mfaEnabled\n        this.canCreateOrgs = canCreateOrgs\n        this.updatePasswordRequired = updatePasswordRequired\n        this.createdAt = createdAt\n        this.lastActiveAt = lastActiveAt\n        this.legacyUserId = legacyUserId\n        this.properties = properties\n        this.impersonatorUserId = impersonatorUserId\n    }\n\n    public getActiveOrg(): OrgMemberInfo | undefined {\n        if (!this.activeOrgId) {\n            return undefined\n        }\n        return this.getOrg(this.activeOrgId)\n    }\n\n    public getActiveOrgId(): string | undefined {\n        return this.activeOrgId\n    }\n\n    public getOrg(orgId: string): OrgMemberInfo | undefined {\n        return this.orgIdToOrgMemberInfo?.[orgId]\n    }\n\n    public getOrgByName(orgName: string): OrgMemberInfo | undefined {\n        if (!this.orgIdToOrgMemberInfo) {\n            return undefined\n        }\n\n        const urlSafeOrgName = orgName.toLowerCase().replace(/ /g, '-')\n        for (const orgId in this.orgIdToOrgMemberInfo) {\n            const orgMemberInfo = this.orgIdToOrgMemberInfo[orgId]\n            if (orgMemberInfo.urlSafeOrgName === urlSafeOrgName) {\n                return orgMemberInfo\n            }\n        }\n\n        return undefined\n    }\n\n    public getOrgs(): OrgMemberInfo[] {\n        if (!this.orgIdToOrgMemberInfo) {\n            return []\n        }\n\n        return Object.values(this.orgIdToOrgMemberInfo)\n    }\n\n    public isImpersonating(): boolean {\n        return !!this.impersonatorUserId\n    }\n}\n\nexport type UseUserLoading = {\n    loading: true\n    isLoggedIn: never\n    user: never\n    accessToken: never\n    setActiveOrg: never\n}\n\nexport type UseUserLoggedIn = {\n    loading: false\n    isLoggedIn: true\n    user: User\n    accessToken: string\n    setActiveOrg: (orgId: string) => Promise<User | undefined>\n}\n\nexport type UseUserNotLoggedIn = {\n    loading: false\n    isLoggedIn: false\n    user: undefined\n    accessToken: undefined\n    setActiveOrg: never\n}\n\nexport type UseUser = UseUserLoading | UseUserLoggedIn | UseUserNotLoggedIn\n\nexport function useUser(): UseUser {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error('useUser must be used within an AuthProvider')\n    }\n\n    const { loading, userAndAccessToken } = context\n    if (loading) {\n        return {\n            loading: true,\n            isLoggedIn: undefined as never,\n            user: undefined as never,\n            accessToken: undefined as never,\n            setActiveOrg: undefined as never,\n        }\n    } else if (userAndAccessToken.user) {\n        return {\n            loading: false,\n            isLoggedIn: true,\n            user: userAndAccessToken.user,\n            accessToken: userAndAccessToken.accessToken,\n            setActiveOrg: context.setActiveOrg,\n        }\n    } else {\n        return {\n            loading: false,\n            isLoggedIn: false,\n            user: undefined,\n            accessToken: undefined,\n            setActiveOrg: undefined as never,\n        }\n    }\n}\n","import { useContext } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useHostedPageUrls() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useHostedPageUrls must be used within an AuthProvider\")\n    }\n    const {\n        getLoginPageUrl,\n        getSignupPageUrl,\n        getAccountPageUrl,\n        getOrgPageUrl,\n        getCreateOrgPageUrl,\n        getSetupSAMLPageUrl,\n    } = context\n    return {\n        getLoginPageUrl,\n        getSignupPageUrl,\n        getAccountPageUrl,\n        getOrgPageUrl,\n        getCreateOrgPageUrl,\n        getSetupSAMLPageUrl,\n    }\n}\n","import { useContext } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useLogoutFunction() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useLogoutFunction must be used within an AuthProvider\")\n    }\n    const { logout } = context\n    return logout\n}\n","import React, { useContext, useEffect } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useRedirectFunctions() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useRedirectFunctions must be used within an AuthProvider\")\n    }\n    const {\n        redirectToAccountPage,\n        redirectToSignupPage,\n        redirectToLoginPage,\n        redirectToOrgPage,\n        redirectToCreateOrgPage,\n    } = context\n    return {\n        redirectToSignupPage,\n        redirectToLoginPage,\n        redirectToAccountPage,\n        redirectToOrgPage,\n        redirectToCreateOrgPage,\n    }\n}\n\nexport interface RedirectProps {\n    children?: React.ReactNode\n}\n\nexport function RedirectToSignup({ children }: RedirectProps) {\n    const { redirectToSignupPage } = useRedirectFunctions()\n\n    useEffect(() => {\n        redirectToSignupPage()\n    }, [])\n\n    return <>{children}</>\n}\n\nexport function RedirectToLogin({ children }: RedirectProps) {\n    const { redirectToLoginPage } = useRedirectFunctions()\n    useEffect(() => {\n        redirectToLoginPage()\n    }, [])\n    return <>{children}</>\n}\n","import { useContext } from \"react\"\nimport { AuthContext } from \"./AuthProvider\"\n\nexport function useRefreshAuth() {\n    const context = useContext(AuthContext)\n    if (context === undefined) {\n        throw new Error(\"useRefreshAuth must be used within an AuthProvider\")\n    }\n    const { refreshAuthInfo } = context\n    return refreshAuthInfo\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,gBAAN,MAAoB;AAAA,EAkBvB,YACI,QACA,OACA,sBACA,WACA,UACA,UACA,cACA,oBACA,YACA,aACF;AACE,SAAK,SAAS;AAEd,SAAK,cAAc;AACnB,SAAK,uBAAuB;AAE5B,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,WAAW;AAChB,SAAK,WAAW;AAEhB,SAAK,eAAe;AACpB,SAAK,qBAAqB;AAE1B,SAAK,aAAa;AAAA,EACtB;AAAA,EAEO,eAA0C;AAC7C,QAAI,CAAC,KAAK,eAAe,CAAC,KAAK,sBAAsB;AACjD,aAAO;AAAA,IACX;AAEA,WAAO,KAAK,qBAAqB,KAAK,WAAW;AAAA,EACrD;AAAA,EAEO,iBAAqC;AACxC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAO,OAA0C;AACpD,QAAI,CAAC,KAAK,sBAAsB;AAC5B,aAAO;AAAA,IACX;AAEA,WAAO,KAAK,qBAAqB,KAAK;AAAA,EAC1C;AAAA,EAEO,aAAa,SAA4C;AAC5D,QAAI,CAAC,KAAK,sBAAsB;AAC5B,aAAO;AAAA,IACX;AAEA,UAAM,iBAAiB,QAAQ,YAAY,EAAE,QAAQ,MAAM,GAAG;AAC9D,eAAW,SAAS,KAAK,sBAAsB;AAC3C,YAAM,gBAAgB,KAAK,qBAAqB,KAAK;AACrD,UAAI,cAAc,mBAAmB,gBAAgB;AACjD,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEO,UAA2B;AAC9B,QAAI,CAAC,KAAK,sBAAsB;AAC5B,aAAO,CAAC;AAAA,IACZ;AAEA,WAAO,OAAO,OAAO,KAAK,oBAAoB;AAAA,EAClD;AAAA,EAEO,kBAA2B;AAC9B,WAAO,CAAC,CAAC,KAAK;AAAA,EAClB;AAAA,EAEA,OAAc,SAAS,MAA6B;AAChD,UAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,UAAM,uBAA6C,CAAC;AACpD,eAAW,SAAS,IAAI,sBAAsB;AAC1C,2BAAqB,KAAK,IAAI,cAAc,SAAS,KAAK,UAAU,IAAI,qBAAqB,KAAK,CAAC,CAAC;AAAA,IACxG;AACA,WAAO,IAAI;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ;AAAA,MACA,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACR;AAAA,EACJ;AAAA,EAEA,OAAc,eAAe,SAAsC;AAC/D,QAAI;AACJ,QAAI;AAEJ,QAAI,QAAQ,iBAAiB;AACzB,oBAAc,QAAQ,gBAAgB;AACtC,6BAAuB,uBAAuB,EAAE,CAAC,WAAW,GAAG,QAAQ,gBAAgB,CAAC;AAAA,IAC5F,OAAO;AACH,oBAAc;AACd,6BAAuB,uBAAuB,QAAQ,yBAAyB;AAAA,IACnF;AAEA,WAAO,IAAI;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,IACJ;AAAA,EACJ;AACJ;AAMO,IAAM,gBAAN,MAAoB;AAAA,EAUvB,YACI,OACA,SACA,aACA,gBACA,kBACA,mCACA,iBACF;AACE,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,cAAc;AACnB,SAAK,iBAAiB;AAEtB,SAAK,mBAAmB;AACxB,SAAK,oCAAoC;AACzC,SAAK,kBAAkB;AAAA,EAC3B;AAAA;AAAA,EAIO,OAAO,MAAuB;AACjC,WAAO,KAAK,qBAAqB;AAAA,EACrC;AAAA,EAEO,cAAc,MAAuB;AACxC,WAAO,KAAK,kCAAkC,SAAS,IAAI;AAAA,EAC/D;AAAA,EAEO,cAAc,YAA6B;AAC9C,WAAO,KAAK,gBAAgB,SAAS,UAAU;AAAA,EACnD;AAAA,EAEO,kBAAkB,aAAgC;AACrD,WAAO,YAAY,MAAM,CAAC,eAAe,KAAK,cAAc,UAAU,CAAC;AAAA,EAC3E;AAAA,EAEA,OAAc,SAAS,MAA6B;AAChD,UAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,WAAO,IAAI;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IACR;AAAA,EACJ;AAAA;AAAA,EAIA,IAAI,eAAuB;AACvB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,gCAA0C;AAC1C,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,cAAwB;AACxB,WAAO,KAAK;AAAA,EAChB;AACJ;AAkCO,SAAS,uBAAuB,YAEF;AACjC,MAAI,eAAe,QAAW;AAC1B,WAAO;AAAA,EACX;AACA,QAAM,YAAkC,CAAC;AAEzC,aAAW,OAAO,OAAO,KAAK,UAAU,GAAG;AACvC,UAAM,iBAAiB,WAAW,GAAG;AACrC,QAAI,gBAAgB;AAChB,gBAAU,GAAG,IAAI,IAAI;AAAA,QACjB,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,QACf,eAAe;AAAA,MACnB;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;;;ACjRA,IAAAA,gBAA0D;;;ACCnD,IAAM,gBAAgB;AAEtB,SAAS,YAAqB;AACjC,SAAO,OAAO,WAAW;AAC7B;AAEO,SAAS,uBAAuB,MAAwB;AAC3D,MAAI,MAAM;AACN,iBAAa,QAAQ,eAAe,KAAK,UAAU,IAAI,CAAC;AAAA,EAC5D,OAAO;AACH,iBAAa,QAAQ,eAAe,IAAI;AAAA,EAC5C;AACJ;AAEO,SAAS,sBAAsB,UAAyB,MAA0C;AACrG,MAAI,CAAC,UAAU;AACX,WAAO;AAAA,EACX,WAAW,CAAC,MAAM;AACd,WAAO,aAAa;AAAA,EACxB;AAEA,QAAM,SAAS,KAAK,MAAM,QAAQ;AAClC,MAAI,CAAC,QAAQ;AACT,WAAO;AAAA,EACX;AAEA,SAAO,QAAQ,QAAQ,IAAI;AAC/B;AAEO,SAAS,QAAQ,GAAQ,GAAiB;AAC7C,MAAI,OAAO,MAAM,OAAO,GAAG;AACvB,WAAO;AAAA,EACX;AAEA,MAAI,MAAM,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,GAAG;AACvC,WAAO;AAAA,EACX;AAEA,MAAI,MAAM,QAAQ,CAAC,GAAG;AAClB,UAAM,SAAS;AACf,UAAM,SAAS;AACf,QAAI,OAAO,WAAW,OAAO,QAAQ;AACjC,aAAO;AAAA,IACX;AAEA,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAI,CAAC,QAAQ,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG;AAChC,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,MAAM,UAAU;AACvB,UAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,UAAM,QAAQ,OAAO,KAAK,CAAC;AAC3B,QAAI,MAAM,WAAW,MAAM,QAAQ;AAC/B,aAAO;AAAA,IACX;AAEA,eAAW,OAAO,OAAO;AACrB,UAAI,CAAC,QAAQ,EAAE,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG;AAC1B,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX,OAAO;AACH,WAAO,MAAM;AAAA,EACjB;AACJ;;;ADtEA,wBAA0B;;;AEF1B,mBAA2B;AAIpB,IAAM,OAAN,MAAW;AAAA,EA0Bd,YAAY;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAmBG;AACC,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,iBAAiB;AACtB,SAAK,cAAc;AACnB,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,uBAAuB;AAC5B,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,gBAAgB;AACrB,SAAK,yBAAyB;AAC9B,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,eAAe;AACpB,SAAK,aAAa;AAClB,SAAK,qBAAqB;AAAA,EAC9B;AAAA,EAEO,eAA0C;AAC7C,QAAI,CAAC,KAAK,aAAa;AACnB,aAAO;AAAA,IACX;AACA,WAAO,KAAK,OAAO,KAAK,WAAW;AAAA,EACvC;AAAA,EAEO,iBAAqC;AACxC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAO,OAA0C;AAtG5D;AAuGQ,YAAO,UAAK,yBAAL,mBAA4B;AAAA,EACvC;AAAA,EAEO,aAAa,SAA4C;AAC5D,QAAI,CAAC,KAAK,sBAAsB;AAC5B,aAAO;AAAA,IACX;AAEA,UAAM,iBAAiB,QAAQ,YAAY,EAAE,QAAQ,MAAM,GAAG;AAC9D,eAAW,SAAS,KAAK,sBAAsB;AAC3C,YAAM,gBAAgB,KAAK,qBAAqB,KAAK;AACrD,UAAI,cAAc,mBAAmB,gBAAgB;AACjD,eAAO;AAAA,MACX;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEO,UAA2B;AAC9B,QAAI,CAAC,KAAK,sBAAsB;AAC5B,aAAO,CAAC;AAAA,IACZ;AAEA,WAAO,OAAO,OAAO,KAAK,oBAAoB;AAAA,EAClD;AAAA,EAEO,kBAA2B;AAC9B,WAAO,CAAC,CAAC,KAAK;AAAA,EAClB;AACJ;AA4BO,SAAS,UAAmB;AAC/B,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,YAAY,QAAW;AACvB,UAAM,IAAI,MAAM,6CAA6C;AAAA,EACjE;AAEA,QAAM,EAAE,SAAS,mBAAmB,IAAI;AACxC,MAAI,SAAS;AACT,WAAO;AAAA,MACH,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,IAClB;AAAA,EACJ,WAAW,mBAAmB,MAAM;AAChC,WAAO;AAAA,MACH,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,MAAM,mBAAmB;AAAA,MACzB,aAAa,mBAAmB;AAAA,MAChC,cAAc,QAAQ;AAAA,IAC1B;AAAA,EACJ,OAAO;AACH,WAAO;AAAA,MACH,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,IAClB;AAAA,EACJ;AACJ;;;AFpJO,IAAM,cAAc,cAAAC,QAAM,cAA6C,MAAS;AAqBvF,IAAM,mBAAmB;AAAA,EACrB,SAAS;AAAA,EACT,oBAAoB;AAAA,IAChB,MAAM;AAAA,IACN,aAAa;AAAA,EACjB;AAAA,EACA,oBAAoB;AACxB;AAYA,SAAS,iBAAiB,QAAmB,QAAoC;AAC7E,QAAM,6BAA6B,iCAAK,OAAO,OAAZ,EAAkB,cAAc,OAAU;AAC7E,QAAM,kCAAkC,iCAAK,OAAO,mBAAmB,OAA/B,EAAqC,cAAc,OAAU;AACrG,QAAM,qBAAqB,CAAC,OAAO,WAAW,CAAC,QAAQ,4BAA4B,+BAA+B;AAElH,MAAI,CAAC,OAAO,MAAM;AACd,WAAO;AAAA,MACH,SAAS;AAAA,MACT,oBAAoB;AAAA,QAChB,MAAM;AAAA,QACN,aAAa;AAAA,MACjB;AAAA,MACA;AAAA,IACJ;AAAA,EACJ,WAAW,OAAO,SAAS;AACvB,WAAO;AAAA,MACH,SAAS;AAAA,MACT,oBAAoB;AAAA,QAChB,MAAM,OAAO;AAAA,QACb,aAAa,OAAO;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAAA,EACJ,OAAO;AACH,WAAO;AAAA,MACH,SAAS;AAAA,MACT,oBAAoB;AAAA,QAChB,MAAM,OAAO;AAAA,QACb,aAAa,OAAO;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,IAAM,eAAe,CAAC,UAA6B;AAxH1D;AAyHI,QAAM,CAAC,WAAW,aAAa,QAAI,0BAAW,kBAAkB,gBAAgB;AAChF,QAAM,aAAS,6BAAU;AACzB,QAAM,sBAAqB,WAAM,uBAAN,YAA4B;AAEvD,QAAM,eAAW;AAAA,IACb,CAAC,WAA4B;AACzB,oBAAc,MAAM;AACpB,6BAAuB,OAAO,IAAI;AAAA,IACtC;AAAA,IACA,CAAC,aAAa;AAAA,EAClB;AAIA,+BAAU,MAAM;AACZ,QAAI,sBAAsB,UAAU,oBAAoB;AACpD,aAAO,QAAQ;AAAA,IACnB;AAAA,EACJ,GAAG,CAAC,UAAU,oBAAoB,oBAAoB,MAAM,CAAC;AAG7D,+BAAU,MAAM;AACZ,QAAI,YAAY;AAEhB,aAAeC,mBAAkB;AAAA;AAC7B,cAAM,SAAS,MAAM,eAAe;AACpC,YAAI,CAAC,WAAW;AACZ,mBAAS,MAAM;AAAA,QACnB;AAAA,MACJ;AAAA;AAEA,IAAAA,iBAAgB;AAChB,WAAO,MAAM;AACT,kBAAY;AAAA,IAChB;AAAA,EACJ,GAAG,CAAC,CAAC;AAGL,+BAAU,MAAM;AACZ,QAAI,YAAY;AAEhB,aAAe,eAAe;AAAA;AAC1B,cAAM,SAAS,MAAM,eAAe;AACpC,YAAI,CAAC,WAAW;AACZ,mBAAS,MAAM;AAAA,QACnB;AAAA,MACJ;AAAA;AAEA,aAAe,eAAe,OAAqB;AAAA;AAC/C,YACI,MAAM,QAAQ,iBACd,CAAC,sBAAsB,MAAM,UAAU,UAAU,mBAAmB,IAAI,GAC1E;AACE,gBAAM,aAAa;AAAA,QACvB;AAAA,MACJ;AAAA;AAGA,UAAM,WAAW,YAAY,cAAc,IAAI,KAAK,GAAI;AAExD,QAAI,UAAU,GAAG;AACb,aAAO,iBAAiB,WAAW,cAAc;AACjD,aAAO,iBAAiB,UAAU,YAAY;AAC9C,aAAO,iBAAiB,SAAS,YAAY;AAAA,IACjD;AAEA,WAAO,MAAM;AACT,kBAAY;AACZ,oBAAc,QAAQ;AACtB,UAAI,UAAU,GAAG;AACb,eAAO,oBAAoB,WAAW,cAAc;AACpD,eAAO,oBAAoB,UAAU,YAAY;AACjD,eAAO,oBAAoB,SAAS,YAAY;AAAA,MACpD;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,UAAU,UAAU,mBAAmB,IAAI,CAAC;AAEhD,QAAM,aAAS,2BAAY,MAAY;AACnC,UAAM,MAAM,oBAAoB;AAAA,MAC5B,QAAQ;AAAA,MACR,SAAS;AAAA,QACL,gBAAgB;AAAA,MACpB;AAAA,MACA,aAAa;AAAA,IACjB,CAAC;AACD,aAAS,EAAE,MAAM,QAAW,aAAa,OAAU,CAAC;AAAA,EACxD,IAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,kBAAkB,CAAC,SAAkC;AACvD,QAAI,6BAAM,uBAAuB;AAC7B,aAAO,kCAAkC,mBAAmB,KAAK,qBAAqB;AAAA,IAC1F;AAEA,WAAO;AAAA,EACX;AACA,QAAM,mBAAmB,CAAC,SAAmC;AACzD,QAAI,6BAAM,wBAAwB;AAC9B,aAAO,mCAAmC,mBAAmB,KAAK,sBAAsB;AAAA,IAC5F;AAEA,WAAO;AAAA,EACX;AACA,QAAM,wBAAoB,2BAAY,MAAM;AACxC,WAAO,GAAG,MAAM;AAAA,EACpB,GAAG,CAAC,MAAM,OAAO,CAAC;AAClB,QAAM,oBAAgB;AAAA,IAClB,CAAC,UAAmB;AAChB,UAAI,OAAO;AACP,eAAO,GAAG,MAAM,kBAAkB;AAAA,MACtC,OAAO;AACH,eAAO,GAAG,MAAM;AAAA,MACpB;AAAA,IACJ;AAAA,IACA,CAAC,MAAM,OAAO;AAAA,EAClB;AACA,QAAM,0BAAsB,2BAAY,MAAM;AAC1C,WAAO,GAAG,MAAM;AAAA,EACpB,GAAG,CAAC,MAAM,OAAO,CAAC;AAElB,QAAM,0BAAsB;AAAA,IACxB,CAAC,UAAkB;AACf,aAAO,GAAG,MAAM,mBAAmB;AAAA,IACvC;AAAA,IACA,CAAC,MAAM,OAAO;AAAA,EAClB;AAEA,QAAM,aAAa,CAAC,QAAgB;AAChC,WAAO,SAAS,OAAO;AAAA,EAC3B;AAEA,QAAM,sBAAsB,CAAC,SAAkC,WAAW,gBAAgB,IAAI,CAAC;AAC/F,QAAM,uBAAuB,CAAC,SAAmC,WAAW,iBAAiB,IAAI,CAAC;AAClG,QAAM,wBAAwB,MAAM,WAAW,kBAAkB,CAAC;AAClE,QAAM,oBAAoB,CAAC,UAAmB,WAAW,cAAc,KAAK,CAAC;AAC7E,QAAM,0BAA0B,MAAM,WAAW,oBAAoB,CAAC;AACtE,QAAM,0BAA0B,CAAC,UAAkB,WAAW,oBAAoB,KAAK,CAAC;AAExF,QAAM,sBAAkB,2BAAY,MAAY;AAC5C,UAAM,SAAS,MAAM,eAAe;AACpC,aAAS,MAAM;AACf,WAAO,OAAO;AAAA,EAClB,IAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,mBAAe;AAAA,IACjB,CAAO,UAAkB;AACrB,YAAM,SAAS,MAAM,oBAAoB,KAAK;AAC9C,UAAI,OAAO,UAAU,cAAc;AAC/B,eAAO;AAAA,MACX,OAAO;AACH,iBAAS,MAAM;AACf,eAAO,OAAO;AAAA,MAClB;AAAA,IACJ;AAAA,IACA,CAAC,QAAQ;AAAA,EACb;AAEA,QAAM,QAAQ;AAAA,IACV,SAAS,UAAU;AAAA,IACnB,oBAAoB,UAAU;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACA,SAAO,8BAAAD,QAAA,cAAC,YAAY,UAAZ,EAAqB,SAAe,MAAM,QAAS;AAC/D;AAYA,SAAe,iBAA4C;AAAA;AACvD,QAAI;AACA,YAAM,mBAAmB,MAAM,MAAM,sBAAsB;AAAA,QACvD,QAAQ;AAAA,QACR,SAAS;AAAA,UACL,gBAAgB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,MACjB,CAAC;AAED,UAAI,iBAAiB,IAAI;AACrB,cAAM,EAAE,UAAU,aAAa,oBAAoB,YAAY,IAAI,MAAM,iBAAiB,KAAK;AAC/F,cAAM,OAAO,IAAI,KAAK;AAAA,UAClB,QAAQ,SAAS;AAAA,UACjB,OAAO,SAAS;AAAA,UAChB,gBAAgB,SAAS;AAAA,UACzB,aAAa,SAAS;AAAA,UACtB,UAAU,SAAS;AAAA,UACnB,WAAW,SAAS;AAAA,UACpB,UAAU,SAAS;AAAA,UACnB,YAAY,SAAS;AAAA,UACrB,sBAAsB,uBAAuB,SAAS,kBAAkB;AAAA,UACxE;AAAA,UACA,YAAY,SAAS;AAAA,UACrB,eAAe,SAAS;AAAA,UACxB,wBAAwB,SAAS;AAAA,UACjC,WAAW,SAAS;AAAA,UACpB,cAAc,SAAS;AAAA,UACvB,YAAY,SAAS;AAAA,UACrB;AAAA,QACJ,CAAC;AAED,eAAO,EAAE,MAAM,YAAY;AAAA,MAC/B,WAAW,iBAAiB,WAAW,KAAK;AACxC,eAAO,EAAE,MAAM,QAAW,aAAa,OAAU;AAAA,MACrD,OAAO;AACH,gBAAQ,KAAK,2BAA2B,gBAAgB;AAAA,MAC5D;AAAA,IACJ,SAAS,GAAP;AACE,cAAQ,KAAK,2BAA2B,CAAC;AAAA,IAC7C;AACA,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC7C;AAAA;AAYA,SAAe,oBAAoB,OAA8C;AAAA;AAC7E,QAAI;AACA,YAAM,cAAc,IAAI,gBAAgB,EAAE,eAAe,MAAM,CAAC,EAAE,SAAS;AAC3E,YAAM,MAAM,4BAA4B;AACxC,YAAM,mBAAmB,MAAM,MAAM,KAAK;AAAA,QACtC,QAAQ;AAAA,QACR,SAAS;AAAA,UACL,gBAAgB;AAAA,QACpB;AAAA,QACA,aAAa;AAAA,MACjB,CAAC;AAED,UAAI,iBAAiB,IAAI;AACrB,cAAM,EAAE,UAAU,aAAa,oBAAoB,YAAY,IAAI,MAAM,iBAAiB,KAAK;AAC/F,cAAM,OAAO,IAAI,KAAK;AAAA,UAClB,QAAQ,SAAS;AAAA,UACjB,OAAO,SAAS;AAAA,UAChB,gBAAgB,SAAS;AAAA,UACzB,aAAa,SAAS;AAAA,UACtB,UAAU,SAAS;AAAA,UACnB,WAAW,SAAS;AAAA,UACpB,UAAU,SAAS;AAAA,UACnB,YAAY,SAAS;AAAA,UACrB,sBAAsB,uBAAuB,SAAS,kBAAkB;AAAA,UACxE;AAAA,UACA,YAAY,SAAS;AAAA,UACrB,eAAe,SAAS;AAAA,UACxB,wBAAwB,SAAS;AAAA,UACjC,WAAW,SAAS;AAAA,UACpB,cAAc,SAAS;AAAA,UACvB,YAAY,SAAS;AAAA,UACrB;AAAA,QACJ,CAAC;AAED,eAAO,EAAE,MAAM,aAAa,OAAO,OAAU;AAAA,MACjD,WAAW,iBAAiB,WAAW,KAAK;AACxC,eAAO,EAAE,OAAO,aAAa;AAAA,MACjC,OAAO;AACH,gBAAQ,KAAK,4BAA4B,gBAAgB;AAAA,MAC7D;AAAA,IACJ,SAAS,GAAP;AACE,cAAQ,KAAK,4BAA4B,CAAC;AAAA,IAC9C;AACA,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC9C;AAAA;;;AGvZA,IAAAE,gBAA2B;AAGpB,SAAS,oBAAoB;AAChC,QAAM,cAAU,0BAAW,WAAW;AACtC,MAAI,YAAY,QAAW;AACvB,UAAM,IAAI,MAAM,uDAAuD;AAAA,EAC3E;AACA,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AACJ,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;;;ACxBA,IAAAC,gBAA2B;AAGpB,SAAS,oBAAoB;AAChC,QAAM,cAAU,0BAAW,WAAW;AACtC,MAAI,YAAY,QAAW;AACvB,UAAM,IAAI,MAAM,uDAAuD;AAAA,EAC3E;AACA,QAAM,EAAE,OAAO,IAAI;AACnB,SAAO;AACX;;;ACVA,IAAAC,gBAA6C;AAGtC,SAAS,uBAAuB;AACnC,QAAM,cAAU,0BAAW,WAAW;AACtC,MAAI,YAAY,QAAW;AACvB,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC9E;AACA,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AACJ,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAMO,SAAS,iBAAiB,EAAE,SAAS,GAAkB;AAC1D,QAAM,EAAE,qBAAqB,IAAI,qBAAqB;AAEtD,+BAAU,MAAM;AACZ,yBAAqB;AAAA,EACzB,GAAG,CAAC,CAAC;AAEL,SAAO,8BAAAC,QAAA,4BAAAA,QAAA,gBAAG,QAAS;AACvB;AAEO,SAAS,gBAAgB,EAAE,SAAS,GAAkB;AACzD,QAAM,EAAE,oBAAoB,IAAI,qBAAqB;AACrD,+BAAU,MAAM;AACZ,wBAAoB;AAAA,EACxB,GAAG,CAAC,CAAC;AACL,SAAO,8BAAAA,QAAA,4BAAAA,QAAA,gBAAG,QAAS;AACvB;;;AC5CA,IAAAC,gBAA2B;AAGpB,SAAS,iBAAiB;AAC7B,QAAM,cAAU,0BAAW,WAAW;AACtC,MAAI,YAAY,QAAW;AACvB,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACxE;AACA,QAAM,EAAE,gBAAgB,IAAI;AAC5B,SAAO;AACX;","names":["import_react","React","refreshAuthInfo","import_react","import_react","import_react","React","import_react"]}
         |