@workos-inc/widgets 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -8
- package/dist/cjs/admin-portal-domain-verification.client.cjs +34 -20
- package/dist/cjs/admin-portal-domain-verification.client.cjs.map +1 -1
- package/dist/cjs/admin-portal-domain-verification.client.d.cts +3 -2
- package/dist/cjs/{admin-portal-sso-connection-client.cjs → admin-portal-sso-connection.client.cjs} +61 -35
- package/dist/cjs/admin-portal-sso-connection.client.cjs.map +1 -0
- package/dist/cjs/admin-portal-sso-connection.client.d.cts +16 -0
- package/dist/cjs/api/api-provider.cjs +27 -19
- package/dist/cjs/api/api-provider.cjs.map +1 -1
- package/dist/cjs/api/api-provider.d.cts +5 -4
- package/dist/cjs/api/endpoint.cjs +62 -2
- package/dist/cjs/api/endpoint.cjs.map +1 -1
- package/dist/cjs/api/endpoint.d.cts +62 -1
- package/dist/cjs/api/utils.cjs +10 -0
- package/dist/cjs/api/utils.cjs.map +1 -1
- package/dist/cjs/api/utils.d.cts +7 -2
- package/dist/cjs/api/widgets-api-client.cjs +11 -5
- package/dist/cjs/api/widgets-api-client.cjs.map +1 -1
- package/dist/cjs/{api-keys-client.cjs → api-keys.client.cjs} +45 -33
- package/dist/cjs/api-keys.client.cjs.map +1 -0
- package/dist/cjs/api-keys.client.d.cts +15 -0
- package/dist/cjs/index.cjs +9 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +6 -2
- package/dist/cjs/lib/add-mfa-dialog.cjs +1 -1
- package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-domain-verification.cjs +18 -12
- package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-domain-verification.d.cts +10 -6
- package/dist/cjs/lib/admin-portal-sso-connection.cjs +84 -106
- package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-sso-connection.d.cts +13 -6
- package/dist/cjs/lib/api-keys/api-keys.cjs +70 -66
- package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys.d.cts +16 -8
- package/dist/cjs/lib/card-list.cjs.map +1 -0
- package/dist/cjs/lib/constants.cjs +5 -2
- package/dist/cjs/lib/constants.cjs.map +1 -1
- package/dist/cjs/lib/constants.d.cts +2 -1
- package/dist/cjs/lib/elevated-access.cjs.map +1 -1
- package/dist/cjs/lib/empty-state.cjs +24 -8
- package/dist/cjs/lib/empty-state.cjs.map +1 -1
- package/dist/cjs/lib/empty-state.d.cts +6 -2
- package/dist/cjs/lib/errors.cjs +1 -1
- package/dist/cjs/lib/errors.cjs.map +1 -1
- package/dist/cjs/lib/generic-error.cjs +56 -58
- package/dist/cjs/lib/generic-error.cjs.map +1 -1
- package/dist/cjs/lib/generic-error.d.cts +10 -3
- package/dist/cjs/lib/identity-providers.cjs +2 -1
- package/dist/cjs/lib/identity-providers.cjs.map +1 -1
- package/dist/cjs/lib/identity-providers.d.cts +2 -2
- package/dist/cjs/lib/oauth-icons.cjs +12 -7
- package/dist/cjs/lib/oauth-icons.cjs.map +1 -1
- package/dist/cjs/lib/oauth-icons.d.cts +7 -3
- package/dist/cjs/lib/organization-switcher.cjs +62 -9
- package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
- package/dist/cjs/lib/organization-switcher.d.cts +12 -9
- package/dist/cjs/lib/otp-input.cjs +1 -1
- package/dist/cjs/lib/otp-input.cjs.map +1 -1
- package/dist/cjs/lib/pipes.cjs +343 -0
- package/dist/cjs/lib/pipes.cjs.map +1 -0
- package/dist/cjs/lib/pipes.d.cts +19 -0
- package/dist/cjs/lib/provider-icon.cjs +0 -6
- package/dist/cjs/lib/provider-icon.cjs.map +1 -1
- package/dist/cjs/lib/provider-icon.d.cts +4 -1
- package/dist/cjs/lib/save-button.cjs.map +1 -1
- package/dist/cjs/lib/use-permissions.cjs +7 -14
- package/dist/cjs/lib/use-permissions.cjs.map +1 -1
- package/dist/cjs/lib/use-permissions.d.cts +1 -1
- package/dist/cjs/lib/user-profile.cjs +77 -83
- package/dist/cjs/lib/user-profile.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.d.cts +11 -7
- package/dist/cjs/lib/user-security.cjs +31 -25
- package/dist/cjs/lib/user-security.cjs.map +1 -1
- package/dist/cjs/lib/user-security.d.cts +10 -7
- package/dist/cjs/lib/user-sessions.cjs +20 -10
- package/dist/cjs/lib/user-sessions.cjs.map +1 -1
- package/dist/cjs/lib/user-sessions.d.cts +10 -6
- package/dist/cjs/lib/users-management.cjs +224 -216
- package/dist/cjs/lib/users-management.cjs.map +1 -1
- package/dist/cjs/lib/users-management.d.cts +10 -7
- package/dist/cjs/lib/utils.cjs +43 -0
- package/dist/cjs/lib/utils.cjs.map +1 -1
- package/dist/cjs/lib/utils.d.cts +29 -2
- package/dist/cjs/organization-switcher.client.cjs +47 -20
- package/dist/cjs/organization-switcher.client.cjs.map +1 -1
- package/dist/cjs/organization-switcher.client.d.cts +2 -1
- package/dist/cjs/pipes.client.cjs +64 -0
- package/dist/cjs/pipes.client.cjs.map +1 -0
- package/dist/cjs/pipes.client.d.cts +15 -0
- package/dist/cjs/user-profile.client.cjs +29 -16
- package/dist/cjs/user-profile.client.cjs.map +1 -1
- package/dist/cjs/user-profile.client.d.cts +4 -3
- package/dist/cjs/user-security.client.cjs +32 -14
- package/dist/cjs/user-security.client.cjs.map +1 -1
- package/dist/cjs/user-security.client.d.cts +3 -2
- package/dist/cjs/user-sessions.client.cjs +42 -28
- package/dist/cjs/user-sessions.client.cjs.map +1 -1
- package/dist/cjs/user-sessions.client.d.cts +4 -2
- package/dist/cjs/users-management.client.cjs +38 -27
- package/dist/cjs/users-management.client.cjs.map +1 -1
- package/dist/cjs/users-management.client.d.cts +3 -2
- package/dist/cjs/workos-widgets.client.cjs +7 -12
- package/dist/cjs/workos-widgets.client.cjs.map +1 -1
- package/dist/css/lib/provider-icon.css +16 -11
- package/dist/esm/admin-portal-domain-verification.client.d.ts +3 -2
- package/dist/esm/admin-portal-domain-verification.client.js +34 -21
- package/dist/esm/admin-portal-domain-verification.client.js.map +1 -1
- package/dist/esm/admin-portal-sso-connection.client.d.ts +16 -0
- package/dist/esm/{admin-portal-sso-connection-client.js → admin-portal-sso-connection.client.js} +61 -36
- package/dist/esm/admin-portal-sso-connection.client.js.map +1 -0
- package/dist/esm/api/api-provider.d.ts +5 -4
- package/dist/esm/api/api-provider.js +26 -19
- package/dist/esm/api/api-provider.js.map +1 -1
- package/dist/esm/api/endpoint.d.ts +62 -1
- package/dist/esm/api/endpoint.js +56 -2
- package/dist/esm/api/endpoint.js.map +1 -1
- package/dist/esm/api/utils.d.ts +7 -2
- package/dist/esm/api/utils.js +9 -0
- package/dist/esm/api/utils.js.map +1 -1
- package/dist/esm/api/widgets-api-client.js +11 -5
- package/dist/esm/api/widgets-api-client.js.map +1 -1
- package/dist/esm/api-keys.client.d.ts +15 -0
- package/dist/esm/api-keys.client.js +75 -0
- package/dist/esm/api-keys.client.js.map +1 -0
- package/dist/esm/index.d.ts +6 -2
- package/dist/esm/index.js +9 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/add-mfa-dialog.js +1 -1
- package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/admin-portal-domain-verification.d.ts +10 -6
- package/dist/esm/lib/admin-portal-domain-verification.js +18 -12
- package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
- package/dist/esm/lib/admin-portal-sso-connection.d.ts +13 -6
- package/dist/esm/lib/admin-portal-sso-connection.js +88 -107
- package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys.d.ts +16 -8
- package/dist/esm/lib/api-keys/api-keys.js +69 -54
- package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
- package/dist/esm/lib/card-list.js.map +1 -0
- package/dist/esm/lib/constants.d.ts +2 -1
- package/dist/esm/lib/constants.js +3 -1
- package/dist/esm/lib/constants.js.map +1 -1
- package/dist/esm/lib/elevated-access.js.map +1 -1
- package/dist/esm/lib/empty-state.d.ts +6 -2
- package/dist/esm/lib/empty-state.js +24 -8
- package/dist/esm/lib/empty-state.js.map +1 -1
- package/dist/esm/lib/errors.js +1 -1
- package/dist/esm/lib/errors.js.map +1 -1
- package/dist/esm/lib/generic-error.d.ts +10 -3
- package/dist/esm/lib/generic-error.js +56 -60
- package/dist/esm/lib/generic-error.js.map +1 -1
- package/dist/esm/lib/identity-providers.d.ts +2 -2
- package/dist/esm/lib/identity-providers.js +2 -1
- package/dist/esm/lib/identity-providers.js.map +1 -1
- package/dist/esm/lib/oauth-icons.d.ts +7 -3
- package/dist/esm/lib/oauth-icons.js +11 -6
- package/dist/esm/lib/oauth-icons.js.map +1 -1
- package/dist/esm/lib/organization-switcher.d.ts +12 -9
- package/dist/esm/lib/organization-switcher.js +54 -9
- package/dist/esm/lib/organization-switcher.js.map +1 -1
- package/dist/esm/lib/otp-input.js +1 -1
- package/dist/esm/lib/otp-input.js.map +1 -1
- package/dist/esm/lib/pipes.d.ts +19 -0
- package/dist/esm/lib/pipes.js +334 -0
- package/dist/esm/lib/pipes.js.map +1 -0
- package/dist/esm/lib/provider-icon.d.ts +4 -1
- package/dist/esm/lib/provider-icon.js +0 -8
- package/dist/esm/lib/provider-icon.js.map +1 -1
- package/dist/esm/lib/save-button.js.map +1 -1
- package/dist/esm/lib/use-permissions.d.ts +1 -1
- package/dist/esm/lib/use-permissions.js +8 -15
- package/dist/esm/lib/use-permissions.js.map +1 -1
- package/dist/esm/lib/user-profile.d.ts +11 -7
- package/dist/esm/lib/user-profile.js +82 -75
- package/dist/esm/lib/user-profile.js.map +1 -1
- package/dist/esm/lib/user-security.d.ts +10 -7
- package/dist/esm/lib/user-security.js +35 -26
- package/dist/esm/lib/user-security.js.map +1 -1
- package/dist/esm/lib/user-sessions.d.ts +10 -6
- package/dist/esm/lib/user-sessions.js +21 -10
- package/dist/esm/lib/user-sessions.js.map +1 -1
- package/dist/esm/lib/users-management.d.ts +10 -7
- package/dist/esm/lib/users-management.js +230 -217
- package/dist/esm/lib/users-management.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +29 -2
- package/dist/esm/lib/utils.js +46 -1
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/organization-switcher.client.d.ts +2 -1
- package/dist/esm/organization-switcher.client.js +47 -21
- package/dist/esm/organization-switcher.client.js.map +1 -1
- package/dist/esm/pipes.client.d.ts +15 -0
- package/dist/esm/pipes.client.js +42 -0
- package/dist/esm/pipes.client.js.map +1 -0
- package/dist/esm/user-profile.client.d.ts +4 -3
- package/dist/esm/user-profile.client.js +29 -17
- package/dist/esm/user-profile.client.js.map +1 -1
- package/dist/esm/user-security.client.d.ts +3 -2
- package/dist/esm/user-security.client.js +32 -15
- package/dist/esm/user-security.client.js.map +1 -1
- package/dist/esm/user-sessions.client.d.ts +4 -2
- package/dist/esm/user-sessions.client.js +43 -30
- package/dist/esm/user-sessions.client.js.map +1 -1
- package/dist/esm/users-management.client.d.ts +3 -2
- package/dist/esm/users-management.client.js +38 -28
- package/dist/esm/users-management.client.js.map +1 -1
- package/dist/esm/workos-widgets.client.js +7 -12
- package/dist/esm/workos-widgets.client.js.map +1 -1
- package/package.json +20 -10
- package/dist/cjs/admin-portal-sso-connection-client.cjs.map +0 -1
- package/dist/cjs/admin-portal-sso-connection-client.d.cts +0 -12
- package/dist/cjs/api-keys-client.cjs.map +0 -1
- package/dist/cjs/api-keys-client.d.cts +0 -10
- package/dist/cjs/card-list.cjs.map +0 -1
- package/dist/esm/admin-portal-sso-connection-client.d.ts +0 -12
- package/dist/esm/admin-portal-sso-connection-client.js.map +0 -1
- package/dist/esm/api-keys-client.d.ts +0 -10
- package/dist/esm/api-keys-client.js +0 -65
- package/dist/esm/api-keys-client.js.map +0 -1
- package/dist/esm/card-list.js.map +0 -1
- /package/dist/cjs/{card-list.cjs → lib/card-list.cjs} +0 -0
- /package/dist/cjs/{card-list.d.cts → lib/card-list.d.cts} +0 -0
- /package/dist/esm/{card-list.d.ts → lib/card-list.d.ts} +0 -0
- /package/dist/esm/{card-list.js → lib/card-list.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workos-widgets.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { Theme as RadixThemes } from \"@radix-ui/themes\";\nimport type { GetPropDefTypes, themePropDefs } from \"@radix-ui/themes/props\";\nimport {\n QueryClient,\n QueryClientProvider,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { namespaceClassNames } from \"./lib/utils.js\";\nimport { DEFAULT_API_HOSTNAME } from \"./lib/api/config.js\";\nimport type { Elements } from \"./lib/elements.js\";\nimport { WidgetsContext } from \"./lib/widgets-context.js\";\
|
|
1
|
+
{"version":3,"sources":["../../src/workos-widgets.client.tsx"],"sourcesContent":["\"use client\";\n\nimport { Theme as RadixThemes } from \"@radix-ui/themes\";\nimport type { GetPropDefTypes, themePropDefs } from \"@radix-ui/themes/props\";\nimport {\n QueryClient,\n QueryClientProvider,\n useQueryClient,\n} from \"@tanstack/react-query\";\nimport cx from \"clsx\";\nimport * as React from \"react\";\nimport { namespaceClassNames } from \"./lib/utils.js\";\nimport { DEFAULT_API_HOSTNAME } from \"./lib/api/config.js\";\nimport type { Elements } from \"./lib/elements.js\";\nimport { WidgetsContext } from \"./lib/widgets-context.js\";\nimport { WIDGETS_DATA_ATTRIBUTE_NAMESPACE } from \"./lib/constants.js\";\n\nexport interface WorkOsWidgetsProps {\n elements?: Elements;\n theme?: Omit<GetPropDefTypes<typeof themePropDefs>, \"asChild\"> & {\n fontFamily?: string;\n };\n style?: React.CSSProperties;\n className?: string;\n children: React.ReactNode;\n apiHostname?: string;\n port?: number | null;\n https?: boolean;\n /**\n * Optional query client for users who are already using Tanstack Query. If\n * not provided, a new query client will be created and mounted internally.\n */\n queryClient?: QueryClient;\n}\n\nexport const WorkOsWidgets: React.FC<WorkOsWidgetsProps> = ({\n elements = {},\n theme: { fontFamily, ...radixThemesProps } = {},\n style = {},\n children,\n apiHostname = DEFAULT_API_HOSTNAME,\n port = null,\n https = true,\n queryClient,\n className,\n}) => {\n const customStyle: React.CSSProperties = fontFamily\n ? {\n \"--default-font-family\": fontFamily,\n ...style,\n }\n : style;\n\n const apiBaseUrl = React.useMemo(() => {\n try {\n const url = new URL(\n \"/\",\n `${https ? \"https\" : \"http\"}://${apiHostname}${port ? `:${port}` : \"\"}`,\n );\n return url.toString().slice(0, -1);\n } catch {\n console.error(\n \"Failed to validate the WorkOS API URL. Check to ensure that valid `apiHostname` and `port` props are passed to WorkOsWidgets\",\n );\n return `https://${DEFAULT_API_HOSTNAME}`;\n }\n }, [apiHostname, https, port]);\n\n return (\n <QueryClientProviderImpl client={queryClient}>\n <RadixThemes\n {...radixThemesProps}\n {...{ [`data-${WIDGETS_DATA_ATTRIBUTE_NAMESPACE}-root`]: true }}\n style={customStyle}\n className={cx(namespaceClassNames(\"root\"), className)}\n >\n <WidgetsContext.Provider value={{ elements, apiBaseUrl }}>\n {children}\n </WidgetsContext.Provider>\n </RadixThemes>\n </QueryClientProviderImpl>\n );\n};\n\nconst QueryClientProviderImpl = ({\n client: providedClient,\n children,\n}: {\n client: QueryClient | undefined;\n children: React.ReactNode;\n}) => {\n const [queryClient] = React.useState(\n () => providedClient ?? new QueryClient(),\n );\n\n const client = useQueryClient(queryClient);\n if (Object.is(client, providedClient)) {\n // No need for a new context provider if the user provided the client to\n // their own provider, which has already mounted the client.\n return <>{children}</>;\n }\n\n return <QueryClientProvider client={client}>{children}</QueryClientProvider>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4EQ;AA1ER,oBAAqC;AAErC,yBAIO;AACP,kBAAe;AACf,YAAuB;AACvB,mBAAoC;AACpC,oBAAqC;AAErC,6BAA+B;AAC/B,uBAAiD;AAoB1C,MAAM,gBAA8C,CAAC;AAAA,EAC1D,WAAW,CAAC;AAAA,EACZ,OAAO,EAAE,YAAY,GAAG,iBAAiB,IAAI,CAAC;AAAA,EAC9C,QAAQ,CAAC;AAAA,EACT;AAAA,EACA,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAmC,aACrC;AAAA,IACE,yBAAyB;AAAA,IACzB,GAAG;AAAA,EACL,IACA;AAEJ,QAAM,aAAa,MAAM,QAAQ,MAAM;AACrC,QAAI;AACF,YAAM,MAAM,IAAI;AAAA,QACd;AAAA,QACA,GAAG,QAAQ,UAAU,MAAM,MAAM,WAAW,GAAG,OAAO,IAAI,IAAI,KAAK,EAAE;AAAA,MACvE;AACA,aAAO,IAAI,SAAS,EAAE,MAAM,GAAG,EAAE;AAAA,IACnC,QAAQ;AACN,cAAQ;AAAA,QACN;AAAA,MACF;AACA,aAAO,WAAW,kCAAoB;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,aAAa,OAAO,IAAI,CAAC;AAE7B,SACE,4CAAC,2BAAwB,QAAQ,aAC/B;AAAA,IAAC,cAAAA;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACH,GAAG,EAAE,CAAC,QAAQ,iDAAgC,OAAO,GAAG,KAAK;AAAA,MAC9D,OAAO;AAAA,MACP,eAAW,YAAAC,aAAG,kCAAoB,MAAM,GAAG,SAAS;AAAA,MAEpD,sDAAC,sCAAe,UAAf,EAAwB,OAAO,EAAE,UAAU,WAAW,GACpD,UACH;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,QAAQ;AAAA,EACR;AACF,MAGM;AACJ,QAAM,CAAC,WAAW,IAAI,MAAM;AAAA,IAC1B,MAAM,kBAAkB,IAAI,+BAAY;AAAA,EAC1C;AAEA,QAAM,aAAS,mCAAe,WAAW;AACzC,MAAI,OAAO,GAAG,QAAQ,cAAc,GAAG;AAGrC,WAAO,2EAAG,UAAS;AAAA,EACrB;AAEA,SAAO,4CAAC,0CAAoB,QAAiB,UAAS;AACxD;","names":["RadixThemes","cx"]}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
--provider-icon-cas: url(https://cdn.workos.com/provider-icons/light/cas.svg);
|
|
14
14
|
--provider-icon-cezanne-hr: url(https://cdn.workos.com/provider-icons/light/cezanne-hr.svg);
|
|
15
15
|
--provider-icon-classlink: url(https://cdn.workos.com/provider-icons/light/classlink.svg);
|
|
16
|
+
--provider-icon-clever: url(https://cdn.workos.com/provider-icons/dark/clever.svg);
|
|
16
17
|
--provider-icon-cloudflare: url(https://cdn.workos.com/provider-icons/light/cloudflare.svg);
|
|
17
18
|
--provider-icon-cyberark: url(https://cdn.workos.com/provider-icons/light/cyberark.svg);
|
|
18
19
|
--provider-icon-datadog: url(https://cdn.workos.com/provider-icons/light/datadog.svg);
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
--provider-icon-google-cloud: url(https://cdn.workos.com/provider-icons/light/google-cloud.svg);
|
|
30
31
|
--provider-icon-google-drive: url(https://images.workoscdn.com/images/55956988-24d8-4733-acb0-dc19949ebff7.svg);
|
|
31
32
|
--provider-icon-google-mail: url(https://images.workoscdn.com/images/5735eb12-b0e4-4127-87be-f541a9b282fc.svg);
|
|
32
|
-
--provider-icon-google: url(https://
|
|
33
|
+
--provider-icon-google: url(https://images.workoscdn.com/images/b6d63052-83dc-4c75-beda-8121ea8bc483.svg);
|
|
33
34
|
--provider-icon-hibob: url(https://cdn.workos.com/provider-icons/light/hibob.svg);
|
|
34
35
|
--provider-icon-hubspot: url(https://images.workoscdn.com/images/ec2d62d0-64a7-4910-a437-782eaeeba7e5.svg);
|
|
35
36
|
--provider-icon-intercom: url(https://images.workoscdn.com/images/0afe7826-72a8-4673-9c95-7122ab12d011.svg);
|
|
@@ -40,11 +41,11 @@
|
|
|
40
41
|
--provider-icon-linear: url(https://images.workoscdn.com/images/ea736232-215d-4925-8bf3-c3d7a4b24078.svg);
|
|
41
42
|
--provider-icon-linkedin: url(https://cdn.workos.com/provider-icons/light/linkedin.svg);
|
|
42
43
|
--provider-icon-login-gov: url(https://cdn.workos.com/provider-icons/light/login-gov.svg);
|
|
43
|
-
--provider-icon-microsoft: url(https://
|
|
44
|
+
--provider-icon-microsoft: url(https://images.workoscdn.com/images/03c465e5-a6d8-47e2-ab15-1b5f0081fd88.svg);
|
|
44
45
|
--provider-icon-miniorange: url(https://cdn.workos.com/provider-icons/light/miniorange.svg);
|
|
45
46
|
--provider-icon-net-iq: url(https://cdn.workos.com/provider-icons/light/net-iq.svg);
|
|
46
47
|
--provider-icon-next-auth: url(https://cdn.workos.com/provider-icons/light/next-auth.svg);
|
|
47
|
-
--provider-icon-notion: url(https://
|
|
48
|
+
--provider-icon-notion: url(https://images.workoscdn.com/images/755707ef-6562-4a0f-902d-9675b9a5bb8a.svg);
|
|
48
49
|
--provider-icon-okta: url(https://cdn.workos.com/provider-icons/light/okta.svg);
|
|
49
50
|
--provider-icon-onelogin: url(https://cdn.workos.com/provider-icons/light/onelogin.svg);
|
|
50
51
|
--provider-icon-oracle: url(https://cdn.workos.com/provider-icons/light/oracle.svg);
|
|
@@ -52,11 +53,11 @@
|
|
|
52
53
|
--provider-icon-ping-identity: url(https://cdn.workos.com/provider-icons/light/ping-identity.svg);
|
|
53
54
|
--provider-icon-react-native-expo: url(https://cdn.workos.com/provider-icons/light/react-native-expo.svg);
|
|
54
55
|
--provider-icon-rippling: url(https://cdn.workos.com/provider-icons/light/rippling.svg);
|
|
55
|
-
--provider-icon-salesforce: url(https://
|
|
56
|
+
--provider-icon-salesforce: url(https://images.workoscdn.com/images/4f1247e1-982f-43d1-80f6-8a8ef0e26d08.svg);
|
|
56
57
|
--provider-icon-segment: url(https://images.workoscdn.com/images/76d2470d-af92-4a56-96f2-5167c7ab4317.svg?auto=format&fit=clip&q=80);
|
|
57
58
|
--provider-icon-shibboleth: url(https://cdn.workos.com/provider-icons/light/shibboleth.svg);
|
|
58
59
|
--provider-icon-simple-saml-php: url(https://cdn.workos.com/provider-icons/light/simple-saml-php.svg);
|
|
59
|
-
--provider-icon-slack: url(https://
|
|
60
|
+
--provider-icon-slack: url(https://images.workoscdn.com/images/4caca96c-9b83-49dc-9fd8-017a22725168.svg);
|
|
60
61
|
--provider-icon-splunk: url(https://cdn.workos.com/provider-icons/light/splunk.svg);
|
|
61
62
|
--provider-icon-stripe: url(https://images.workoscdn.com/images/44a8c194-4e70-4a6a-9bf5-72a055a4c967.svg);
|
|
62
63
|
--provider-icon-supabase: url(https://cdn.workos.com/provider-icons/light/supabase.svg);
|
|
@@ -104,7 +105,7 @@
|
|
|
104
105
|
--provider-icon-google-cloud: url(https://cdn.workos.com/provider-icons/dark/google-cloud.svg);
|
|
105
106
|
--provider-icon-google-drive: url(https://images.workoscdn.com/images/d65df86d-d61d-414b-aafc-5dc7fd661fac.svg);
|
|
106
107
|
--provider-icon-google-mail: url(https://images.workoscdn.com/images/5735eb12-b0e4-4127-87be-f541a9b282fc.svg);
|
|
107
|
-
--provider-icon-google: url(https://
|
|
108
|
+
--provider-icon-google: url(https://images.workoscdn.com/images/ca224b0c-2732-4210-beb1-738a080b4358.svg);
|
|
108
109
|
--provider-icon-hibob: url(https://cdn.workos.com/provider-icons/dark/hibob.svg);
|
|
109
110
|
--provider-icon-hubspot: url(https://images.workoscdn.com/images/e002a40c-6971-42a5-ae6e-9b2c19018394.svg);
|
|
110
111
|
--provider-icon-intercom: url(https://images.workoscdn.com/images/16d6f1eb-ac8f-41d4-99ea-af4b4613b38d.svg);
|
|
@@ -115,11 +116,11 @@
|
|
|
115
116
|
--provider-icon-linear: url(https://images.workoscdn.com/images/4ffb242f-6ca9-4409-88b8-0249654ae6e4.svg);
|
|
116
117
|
--provider-icon-linkedin: url(https://cdn.workos.com/provider-icons/dark/linkedin.svg);
|
|
117
118
|
--provider-icon-login-gov: url(https://cdn.workos.com/provider-icons/dark/login-gov.svg);
|
|
118
|
-
--provider-icon-microsoft: url(https://
|
|
119
|
+
--provider-icon-microsoft: url(https://images.workoscdn.com/images/86c3df5e-bb56-4bf5-a39e-442c394af17b.svg);
|
|
119
120
|
--provider-icon-miniorange: url(https://cdn.workos.com/provider-icons/dark/miniorange.svg);
|
|
120
121
|
--provider-icon-net-iq: url(https://cdn.workos.com/provider-icons/dark/net-iq.svg);
|
|
121
122
|
--provider-icon-next-auth: url(https://cdn.workos.com/provider-icons/dark/next-auth.svg);
|
|
122
|
-
--provider-icon-notion: url(https://images.workoscdn.com/images/
|
|
123
|
+
--provider-icon-notion: url(https://images.workoscdn.com/images/290aa0fc-0fd4-46a2-a428-97b16b111d7c.svg);
|
|
123
124
|
--provider-icon-okta: url(https://cdn.workos.com/provider-icons/dark/okta.svg);
|
|
124
125
|
--provider-icon-onelogin: url(https://cdn.workos.com/provider-icons/dark/onelogin.svg);
|
|
125
126
|
--provider-icon-oracle: url(https://cdn.workos.com/provider-icons/dark/oracle.svg);
|
|
@@ -127,11 +128,11 @@
|
|
|
127
128
|
--provider-icon-ping-identity: url(https://cdn.workos.com/provider-icons/dark/ping-identity.svg);
|
|
128
129
|
--provider-icon-react-native-expo: url(https://cdn.workos.com/provider-icons/dark/react-native-expo.svg);
|
|
129
130
|
--provider-icon-rippling: url(https://cdn.workos.com/provider-icons/dark/rippling.svg);
|
|
130
|
-
--provider-icon-salesforce: url(https://
|
|
131
|
+
--provider-icon-salesforce: url(https://images.workoscdn.com/images/d71af54e-3c97-48ce-9b26-c16430aba2ae.svg);
|
|
131
132
|
--provider-icon-segment: url(https://images.workoscdn.com/images/ed5680a5-5b78-417b-96d4-e03ee8a39160.svg?auto=format&fit=clip&q=80);
|
|
132
133
|
--provider-icon-shibboleth: url(https://cdn.workos.com/provider-icons/dark/shibboleth.svg);
|
|
133
134
|
--provider-icon-simple-saml-php: url(https://cdn.workos.com/provider-icons/dark/simple-saml-php.svg);
|
|
134
|
-
--provider-icon-slack: url(https://
|
|
135
|
+
--provider-icon-slack: url(https://images.workoscdn.com/images/de6b0a48-f241-4b85-8cb4-c04650f8d3f4.svg);
|
|
135
136
|
--provider-icon-splunk: url(https://cdn.workos.com/provider-icons/dark/splunk.svg);
|
|
136
137
|
--provider-icon-stripe: url(https://images.workoscdn.com/images/eb696a2b-ed4e-497a-a1ce-3c6c08dfde09.svg);
|
|
137
138
|
--provider-icon-supabase: url(https://cdn.workos.com/provider-icons/dark/supabase.svg);
|
|
@@ -222,6 +223,9 @@
|
|
|
222
223
|
.woswidgets-provider-icon[data-provider="classlink"] {
|
|
223
224
|
background-image: var(--provider-icon-classlink);
|
|
224
225
|
}
|
|
226
|
+
.woswidgets-provider-icon[data-provider="clever"] {
|
|
227
|
+
background-image: var(--provider-icon-clever);
|
|
228
|
+
}
|
|
225
229
|
.woswidgets-provider-icon[data-provider="clerk"] {
|
|
226
230
|
background-image: var(--provider-icon-clerk);
|
|
227
231
|
}
|
|
@@ -270,7 +274,8 @@
|
|
|
270
274
|
.woswidgets-provider-icon[data-provider="google-drive"] {
|
|
271
275
|
background-image: var(--provider-icon-google-drive);
|
|
272
276
|
}
|
|
273
|
-
.woswidgets-provider-icon[data-provider="google-mail"]
|
|
277
|
+
.woswidgets-provider-icon[data-provider="google-mail"],
|
|
278
|
+
.woswidgets-provider-icon[data-provider="gmail"] {
|
|
274
279
|
background-image: var(--provider-icon-google-mail);
|
|
275
280
|
}
|
|
276
281
|
.woswidgets-provider-icon[data-provider="google"] {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
export { AdminPortalDomainVerificationLoading } from './lib/admin-portal-domain-verification.js';
|
|
2
|
+
export { AdminPortalDomainVerificationError, AdminPortalDomainVerificationErrorProps, AdminPortalDomainVerificationLoading, AdminPortalDomainVerificationLoadingProps } from './lib/admin-portal-domain-verification.js';
|
|
3
3
|
import { AuthToken } from './api/api-provider.js';
|
|
4
|
+
import { WidgetRootDomProps } from './lib/utils.js';
|
|
4
5
|
import 'react/jsx-runtime';
|
|
5
6
|
import './api/endpoint.js';
|
|
6
7
|
import '@tanstack/react-query';
|
|
7
8
|
import './api/widgets-api-client.js';
|
|
8
9
|
|
|
9
|
-
interface AdminPortalDomainVerificationProps {
|
|
10
|
+
interface AdminPortalDomainVerificationProps extends WidgetRootDomProps {
|
|
10
11
|
authToken: AuthToken;
|
|
11
12
|
}
|
|
12
13
|
declare const AdminPortalDomainVerification: React.FC<AdminPortalDomainVerificationProps>;
|
|
@@ -5,8 +5,7 @@ import {
|
|
|
5
5
|
AdminPortalDomainVerificationLoading,
|
|
6
6
|
AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational
|
|
7
7
|
} from "./lib/admin-portal-domain-verification.js";
|
|
8
|
-
import {
|
|
9
|
-
import { ApiProvider } from "./api/api-provider.js";
|
|
8
|
+
import { ApiProvider, useApiReady } from "./api/api-provider.js";
|
|
10
9
|
import {
|
|
11
10
|
useGenerateAdminPortalLink,
|
|
12
11
|
useListOrganizationDomains,
|
|
@@ -17,20 +16,26 @@ import {
|
|
|
17
16
|
import { useWorkOsApiUrl } from "./lib/widgets-context.js";
|
|
18
17
|
import { ErrorBoundary } from "./lib/error-boundary.js";
|
|
19
18
|
import { useQueryClient } from "@tanstack/react-query";
|
|
20
|
-
const AdminPortalDomainVerification = ({ authToken }) => {
|
|
19
|
+
const AdminPortalDomainVerification = ({ authToken, ...domProps }) => {
|
|
21
20
|
const baseUrl = useWorkOsApiUrl();
|
|
22
21
|
return /* @__PURE__ */ jsx(
|
|
23
|
-
|
|
22
|
+
ErrorBoundary,
|
|
24
23
|
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error, ...domProps }),
|
|
25
|
+
children: /* @__PURE__ */ jsx(
|
|
26
|
+
ApiProvider,
|
|
27
|
+
{
|
|
28
|
+
widgetType: "admin-portal-domain-verification",
|
|
29
|
+
authToken,
|
|
30
|
+
baseUrl,
|
|
31
|
+
children: /* @__PURE__ */ jsx(AdminPortalDomainVerificationImpl, { ...domProps })
|
|
32
|
+
}
|
|
33
|
+
)
|
|
29
34
|
}
|
|
30
35
|
);
|
|
31
36
|
};
|
|
32
|
-
const
|
|
33
|
-
const
|
|
37
|
+
const AdminPortalDomainVerificationImpl = (props) => {
|
|
38
|
+
const isApiReady = useApiReady();
|
|
34
39
|
const queryClient = useQueryClient();
|
|
35
40
|
const {
|
|
36
41
|
data: organizationDomains,
|
|
@@ -75,26 +80,34 @@ const AdminPortalDomainVerificationContent = () => {
|
|
|
75
80
|
const handleReverifyDomain = (domainId) => {
|
|
76
81
|
reverifyDomain({ domainId });
|
|
77
82
|
};
|
|
78
|
-
if (!
|
|
79
|
-
return /* @__PURE__ */ jsx(AdminPortalDomainVerificationLoading, {});
|
|
83
|
+
if (!isApiReady || isLoading) {
|
|
84
|
+
return /* @__PURE__ */ jsx(AdminPortalDomainVerificationLoading, { ...props });
|
|
80
85
|
}
|
|
81
86
|
if (error) {
|
|
82
|
-
return /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error });
|
|
87
|
+
return /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error, ...props });
|
|
83
88
|
}
|
|
84
89
|
const domains = organizationDomains?.data || [];
|
|
85
|
-
return /* @__PURE__ */ jsx(
|
|
86
|
-
|
|
90
|
+
return /* @__PURE__ */ jsx(
|
|
91
|
+
ErrorBoundary,
|
|
87
92
|
{
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
fallbackRender: ({ error: error2 }) => /* @__PURE__ */ jsx(AdminPortalDomainVerificationError, { error: error2, ...props }),
|
|
94
|
+
children: /* @__PURE__ */ jsx(
|
|
95
|
+
AdminPortalDomainVerificationPresentational,
|
|
96
|
+
{
|
|
97
|
+
organizationDomains: domains,
|
|
98
|
+
onAddDomain: handleAddDomain,
|
|
99
|
+
onDeleteDomain: handleDeleteDomain,
|
|
100
|
+
onReverifyDomain: handleReverifyDomain,
|
|
101
|
+
isPending,
|
|
102
|
+
...props
|
|
103
|
+
}
|
|
104
|
+
)
|
|
93
105
|
}
|
|
94
|
-
)
|
|
106
|
+
);
|
|
95
107
|
};
|
|
96
108
|
export {
|
|
97
109
|
AdminPortalDomainVerification,
|
|
110
|
+
AdminPortalDomainVerificationError,
|
|
98
111
|
AdminPortalDomainVerificationLoading
|
|
99
112
|
};
|
|
100
113
|
//# sourceMappingURL=admin-portal-domain-verification.client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/admin-portal-domain-verification.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalDomainVerificationError,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerification as AdminPortalDomainVerificationPresentational,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport type {\n AdminPortalDomainVerificationErrorProps,\n AdminPortalDomainVerificationLoadingProps,\n} from \"./lib/admin-portal-domain-verification.js\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport {\n useGenerateAdminPortalLink,\n useListOrganizationDomains,\n getListOrganizationDomainsQueryKey,\n useDeleteOrganizationDomain,\n useReverifyOrganizationDomain,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { WidgetRootDomProps } from \"./lib/utils.js\";\n\ninterface AdminPortalDomainVerificationProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalDomainVerification: React.FC<\n AdminPortalDomainVerificationProps\n> = ({ authToken, ...domProps }) => {\n const baseUrl = useWorkOsApiUrl();\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalDomainVerificationError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-domain-verification\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalDomainVerificationImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst AdminPortalDomainVerificationImpl = (\n props: Omit<AdminPortalDomainVerificationProps, \"authToken\">,\n) => {\n const isApiReady = useApiReady();\n const queryClient = useQueryClient();\n const {\n data: organizationDomains,\n isLoading,\n error,\n } = useListOrganizationDomains();\n\n const { mutate: generateAdminPortalLink, isPending } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const { mutate: deleteDomain } = useDeleteOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const { mutate: reverifyDomain } = useReverifyOrganizationDomain({\n mutation: {\n onSuccess: () => {\n queryClient.invalidateQueries({\n queryKey: getListOrganizationDomainsQueryKey(),\n });\n },\n },\n });\n\n const handleAddDomain = () => {\n generateAdminPortalLink({\n params: {\n intent: \"domain_verification\",\n },\n });\n };\n\n const handleDeleteDomain = (domainId: string) => {\n deleteDomain({ domainId });\n };\n\n const handleReverifyDomain = (domainId: string) => {\n reverifyDomain({ domainId });\n };\n\n if (!isApiReady || isLoading) {\n return <AdminPortalDomainVerificationLoading {...props} />;\n }\n\n if (error) {\n return <AdminPortalDomainVerificationError error={error} {...props} />;\n }\n\n const domains = organizationDomains?.data || [];\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalDomainVerificationError error={error} {...props} />\n )}\n >\n <AdminPortalDomainVerificationPresentational\n organizationDomains={domains}\n onAddDomain={handleAddDomain}\n onDeleteDomain={handleDeleteDomain}\n onReverifyDomain={handleReverifyDomain}\n isPending={isPending}\n {...props}\n />\n </ErrorBoundary>\n );\n};\n\nexport type {\n AdminPortalDomainVerificationProps,\n AdminPortalDomainVerificationLoadingProps,\n AdminPortalDomainVerificationErrorProps,\n};\nexport {\n AdminPortalDomainVerification,\n AdminPortalDomainVerificationLoading,\n AdminPortalDomainVerificationError,\n};\n"],"mappings":";AAqCQ;AAlCR;AAAA,EACE;AAAA,EACA;AAAA,EACA,iCAAiC;AAAA,OAC5B;AAKP,SAAS,aAAwB,mBAAmB;AACpD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAO/B,MAAM,gCAEF,CAAC,EAAE,WAAW,GAAG,SAAS,MAAM;AAClC,QAAM,UAAU,gBAAgB;AAEhC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,MAAM,MACvB,oBAAC,sCAAmC,OAAe,GAAG,UAAU;AAAA,MAGlE;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX;AAAA,UACA;AAAA,UAEA,8BAAC,qCAAmC,GAAG,UAAU;AAAA;AAAA,MACnD;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,oCAAoC,CACxC,UACG;AACH,QAAM,aAAa,YAAY;AAC/B,QAAM,cAAc,eAAe;AACnC,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,IAAI,2BAA2B;AAE/B,QAAM,EAAE,QAAQ,yBAAyB,UAAU,IACjD,2BAA2B;AAAA,IACzB,UAAU;AAAA,MACR,WAAW,CAAC,SAAS;AACnB,eAAO,KAAK,KAAK,MAAM,UAAU,qBAAqB;AAAA,MACxD;AAAA,IACF;AAAA,EACF,CAAC;AAEH,QAAM,EAAE,QAAQ,aAAa,IAAI,4BAA4B;AAAA,IAC3D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,mCAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,EAAE,QAAQ,eAAe,IAAI,8BAA8B;AAAA,IAC/D,UAAU;AAAA,MACR,WAAW,MAAM;AACf,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,mCAAmC;AAAA,QAC/C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,MAAM;AAC5B,4BAAwB;AAAA,MACtB,QAAQ;AAAA,QACN,QAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,CAAC,aAAqB;AAC/C,iBAAa,EAAE,SAAS,CAAC;AAAA,EAC3B;AAEA,QAAM,uBAAuB,CAAC,aAAqB;AACjD,mBAAe,EAAE,SAAS,CAAC;AAAA,EAC7B;AAEA,MAAI,CAAC,cAAc,WAAW;AAC5B,WAAO,oBAAC,wCAAsC,GAAG,OAAO;AAAA,EAC1D;AAEA,MAAI,OAAO;AACT,WAAO,oBAAC,sCAAmC,OAAe,GAAG,OAAO;AAAA,EACtE;AAEA,QAAM,UAAU,qBAAqB,QAAQ,CAAC;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,gBAAgB,CAAC,EAAE,OAAAA,OAAM,MACvB,oBAAC,sCAAmC,OAAOA,QAAQ,GAAG,OAAO;AAAA,MAG/D;AAAA,QAAC;AAAA;AAAA,UACC,qBAAqB;AAAA,UACrB,aAAa;AAAA,UACb,gBAAgB;AAAA,UAChB,kBAAkB;AAAA,UAClB;AAAA,UACC,GAAG;AAAA;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;","names":["error"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export { AdminPortalSsoConnectionError, AdminPortalSsoConnectionErrorProps, AdminPortalSsoConnectionLoading, AdminPortalSsoConnectionLoadingProps } from './lib/admin-portal-sso-connection.js';
|
|
3
|
+
import { AuthToken } from './api/api-provider.js';
|
|
4
|
+
import { WidgetRootDomProps } from './lib/utils.js';
|
|
5
|
+
import 'react/jsx-runtime';
|
|
6
|
+
import './lib/identity-providers.js';
|
|
7
|
+
import './api/endpoint.js';
|
|
8
|
+
import '@tanstack/react-query';
|
|
9
|
+
import './api/widgets-api-client.js';
|
|
10
|
+
|
|
11
|
+
interface AdminPortalSsoConnectionProps extends WidgetRootDomProps {
|
|
12
|
+
authToken: AuthToken;
|
|
13
|
+
}
|
|
14
|
+
declare const AdminPortalSsoConnection: React.FC<AdminPortalSsoConnectionProps>;
|
|
15
|
+
|
|
16
|
+
export { AdminPortalSsoConnection, type AdminPortalSsoConnectionProps };
|
package/dist/esm/{admin-portal-sso-connection-client.js → admin-portal-sso-connection.client.js}
RENAMED
|
@@ -7,8 +7,7 @@ import {
|
|
|
7
7
|
AdminPortalSsoConnectionLoading,
|
|
8
8
|
AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational
|
|
9
9
|
} from "./lib/admin-portal-sso-connection.js";
|
|
10
|
-
import {
|
|
11
|
-
import { ApiProvider } from "./api/api-provider.js";
|
|
10
|
+
import { ApiProvider, useApiReady } from "./api/api-provider.js";
|
|
12
11
|
import {
|
|
13
12
|
useGenerateAdminPortalLink,
|
|
14
13
|
useListSsoConnections
|
|
@@ -16,24 +15,33 @@ import {
|
|
|
16
15
|
import { useWorkOsApiUrl } from "./lib/widgets-context.js";
|
|
17
16
|
import { ErrorBoundary } from "./lib/error-boundary.js";
|
|
18
17
|
import { unreachable } from "./lib/utils.js";
|
|
19
|
-
const AdminPortalSsoConnection = ({
|
|
18
|
+
const AdminPortalSsoConnection = ({
|
|
19
|
+
authToken,
|
|
20
|
+
...domProps
|
|
21
|
+
}) => {
|
|
20
22
|
const baseUrl = useWorkOsApiUrl();
|
|
21
23
|
return /* @__PURE__ */ jsx(
|
|
22
|
-
|
|
24
|
+
ErrorBoundary,
|
|
23
25
|
{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error, ...domProps }),
|
|
27
|
+
children: /* @__PURE__ */ jsx(
|
|
28
|
+
ApiProvider,
|
|
29
|
+
{
|
|
30
|
+
widgetType: "admin-portal-sso-connection",
|
|
31
|
+
authToken,
|
|
32
|
+
baseUrl,
|
|
33
|
+
children: /* @__PURE__ */ jsx(AdminPortalSsoConnectionImpl, { ...domProps })
|
|
34
|
+
}
|
|
35
|
+
)
|
|
28
36
|
}
|
|
29
37
|
);
|
|
30
38
|
};
|
|
31
|
-
const
|
|
32
|
-
const
|
|
39
|
+
const AdminPortalSsoConnectionImpl = (props) => {
|
|
40
|
+
const isApiReady = useApiReady();
|
|
33
41
|
const [currentDate, setCurrentDate] = React.useState(
|
|
34
|
-
() =>
|
|
42
|
+
() => isApiReady ? /* @__PURE__ */ new Date() : null
|
|
35
43
|
);
|
|
36
|
-
if (
|
|
44
|
+
if (isApiReady && currentDate === null) {
|
|
37
45
|
setCurrentDate(/* @__PURE__ */ new Date());
|
|
38
46
|
}
|
|
39
47
|
const { mutate: generateAdminPortalLink, ...mutation } = useGenerateAdminPortalLink({
|
|
@@ -53,33 +61,40 @@ const SingleSignOnContent = () => {
|
|
|
53
61
|
});
|
|
54
62
|
};
|
|
55
63
|
if (query.isLoading) {
|
|
56
|
-
return /* @__PURE__ */ jsx(AdminPortalSsoConnectionLoading, {});
|
|
64
|
+
return /* @__PURE__ */ jsx(AdminPortalSsoConnectionLoading, { ...props });
|
|
57
65
|
}
|
|
58
66
|
if (query.isError) {
|
|
59
|
-
return /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error: query.error });
|
|
67
|
+
return /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error: query.error, ...props });
|
|
60
68
|
}
|
|
61
69
|
if (query.data) {
|
|
62
70
|
const connection = query.data[0];
|
|
63
71
|
if (!connection) {
|
|
64
72
|
return /* @__PURE__ */ jsx(
|
|
65
|
-
|
|
73
|
+
ErrorBoundary,
|
|
66
74
|
{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
adminPortalOpenButton: /* @__PURE__ */ jsx(
|
|
71
|
-
AdminPortalOpenButton,
|
|
75
|
+
fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error, ...props }),
|
|
76
|
+
children: /* @__PURE__ */ jsx(
|
|
77
|
+
AdminPortalSsoConnectionPresentational,
|
|
72
78
|
{
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
...props,
|
|
80
|
+
connectionStatus: "NotConfigured",
|
|
81
|
+
currentDate,
|
|
82
|
+
lastSession: null,
|
|
83
|
+
adminPortalOpenButton: /* @__PURE__ */ jsx(
|
|
84
|
+
AdminPortalOpenButton,
|
|
85
|
+
{
|
|
86
|
+
isPending: mutation.isPending,
|
|
87
|
+
href: adminPortalLink,
|
|
88
|
+
initConfig
|
|
89
|
+
}
|
|
90
|
+
)
|
|
76
91
|
}
|
|
77
92
|
)
|
|
78
93
|
}
|
|
79
94
|
);
|
|
80
95
|
}
|
|
81
96
|
const connectionState = getConnectionState(connection, currentDate);
|
|
82
|
-
const
|
|
97
|
+
const statusProps = (() => {
|
|
83
98
|
const connectionStatus = connectionState.status;
|
|
84
99
|
if (!connection || connectionStatus === "NotConfigured") {
|
|
85
100
|
return {
|
|
@@ -110,22 +125,29 @@ const SingleSignOnContent = () => {
|
|
|
110
125
|
}
|
|
111
126
|
})();
|
|
112
127
|
const lastSession = connection.lastSession ? new Date(connection.lastSession.createdAt) : null;
|
|
113
|
-
return /* @__PURE__ */ jsx(
|
|
114
|
-
|
|
128
|
+
return /* @__PURE__ */ jsx(
|
|
129
|
+
ErrorBoundary,
|
|
115
130
|
{
|
|
116
|
-
...props,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
adminPortalOpenButton: /* @__PURE__ */ jsx(
|
|
120
|
-
AdminPortalOpenButton,
|
|
131
|
+
fallbackRender: ({ error }) => /* @__PURE__ */ jsx(AdminPortalSsoConnectionError, { error, ...props }),
|
|
132
|
+
children: /* @__PURE__ */ jsx(
|
|
133
|
+
AdminPortalSsoConnectionPresentational,
|
|
121
134
|
{
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
135
|
+
...props,
|
|
136
|
+
...statusProps,
|
|
137
|
+
currentDate,
|
|
138
|
+
lastSession,
|
|
139
|
+
adminPortalOpenButton: /* @__PURE__ */ jsx(
|
|
140
|
+
AdminPortalOpenButton,
|
|
141
|
+
{
|
|
142
|
+
isPending: mutation.isPending,
|
|
143
|
+
href: adminPortalLink,
|
|
144
|
+
initConfig
|
|
145
|
+
}
|
|
146
|
+
)
|
|
125
147
|
}
|
|
126
148
|
)
|
|
127
149
|
}
|
|
128
|
-
)
|
|
150
|
+
);
|
|
129
151
|
}
|
|
130
152
|
};
|
|
131
153
|
function getConnectionState(connection, currentDate) {
|
|
@@ -231,12 +253,15 @@ function getIdentityProvider(connection) {
|
|
|
231
253
|
return "generic-oidc";
|
|
232
254
|
case "LoginGovOidc":
|
|
233
255
|
return "login-gov";
|
|
256
|
+
case "CleverOidc":
|
|
257
|
+
return "clever";
|
|
234
258
|
default:
|
|
235
259
|
return unreachable(connection);
|
|
236
260
|
}
|
|
237
261
|
}
|
|
238
262
|
export {
|
|
239
263
|
AdminPortalSsoConnection,
|
|
264
|
+
AdminPortalSsoConnectionError,
|
|
240
265
|
AdminPortalSsoConnectionLoading
|
|
241
266
|
};
|
|
242
|
-
//# sourceMappingURL=admin-portal-sso-connection
|
|
267
|
+
//# sourceMappingURL=admin-portal-sso-connection.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/admin-portal-sso-connection.client.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n AdminPortalOpenButton,\n AdminPortalSsoConnectionError,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnection as AdminPortalSsoConnectionPresentational,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport type {\n AdminPortalSsoConnectionErrorProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionStatusProps,\n} from \"./lib/admin-portal-sso-connection.js\";\nimport { ApiProvider, AuthToken, useApiReady } from \"./api/api-provider.js\";\nimport {\n type SsoConnection,\n useGenerateAdminPortalLink,\n useListSsoConnections,\n} from \"./api/endpoint.js\";\nimport { useWorkOsApiUrl } from \"./lib/widgets-context.js\";\nimport { ErrorBoundary } from \"./lib/error-boundary.js\";\nimport { unreachable, WidgetRootDomProps } from \"./lib/utils.js\";\nimport { IdentityProvider } from \"./lib/identity-providers.js\";\n\ninterface AdminPortalSsoConnectionProps extends WidgetRootDomProps {\n authToken: AuthToken;\n}\n\nconst AdminPortalSsoConnection: React.FC<AdminPortalSsoConnectionProps> = ({\n authToken,\n ...domProps\n}) => {\n const baseUrl = useWorkOsApiUrl();\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...domProps} />\n )}\n >\n <ApiProvider\n widgetType=\"admin-portal-sso-connection\"\n authToken={authToken}\n baseUrl={baseUrl}\n >\n <AdminPortalSsoConnectionImpl {...domProps} />\n </ApiProvider>\n </ErrorBoundary>\n );\n};\n\nconst AdminPortalSsoConnectionImpl = (props: WidgetRootDomProps) => {\n const isApiReady = useApiReady();\n const [currentDate, setCurrentDate] = React.useState<Date | null>(() =>\n isApiReady ? new Date() : null,\n );\n if (isApiReady && currentDate === null) {\n setCurrentDate(new Date());\n }\n\n const { mutate: generateAdminPortalLink, ...mutation } =\n useGenerateAdminPortalLink({\n mutation: {\n onSuccess: (data) => {\n window.open(data.link, \"_blank\", \"noopener,noreferrer\");\n },\n },\n });\n\n const adminPortalLink = mutation.data?.link ?? null;\n\n const query = useListSsoConnections();\n\n const initConfig = () => {\n generateAdminPortalLink({\n params: {\n intent: \"sso\",\n },\n });\n };\n\n if (query.isLoading) {\n return <AdminPortalSsoConnectionLoading {...props} />;\n }\n\n if (query.isError) {\n return <AdminPortalSsoConnectionError error={query.error} {...props} />;\n }\n\n if (query.data) {\n const connection = query.data[0];\n if (!connection) {\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n connectionStatus=\"NotConfigured\"\n currentDate={currentDate}\n lastSession={null}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n\n const connectionState = getConnectionState(connection, currentDate);\n const statusProps: AdminPortalSsoConnectionStatusProps = (() => {\n const connectionStatus = connectionState.status;\n if (!connection || connectionStatus === \"NotConfigured\") {\n return {\n connectionStatus: \"NotConfigured\",\n } satisfies AdminPortalSsoConnectionStatusProps;\n }\n\n const identityProvider = getIdentityProvider(connection);\n switch (connectionStatus) {\n case \"Active\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Inactive\":\n return {\n connectionStatus,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n case \"Expired\":\n case \"Expiring\":\n return {\n connectionStatus,\n expiryDate: connectionState.expiryDate,\n identityProvider,\n } satisfies AdminPortalSsoConnectionStatusProps;\n default:\n return unreachable(connectionState);\n }\n })();\n\n const lastSession = connection.lastSession\n ? new Date(connection.lastSession.createdAt)\n : null;\n\n return (\n <ErrorBoundary\n fallbackRender={({ error }) => (\n <AdminPortalSsoConnectionError error={error} {...props} />\n )}\n >\n <AdminPortalSsoConnectionPresentational\n {...props}\n {...statusProps}\n currentDate={currentDate}\n lastSession={lastSession}\n adminPortalOpenButton={\n <AdminPortalOpenButton\n isPending={mutation.isPending}\n href={adminPortalLink}\n initConfig={initConfig}\n />\n }\n />\n </ErrorBoundary>\n );\n }\n};\n\ntype ConnectionState =\n | { status: \"NotConfigured\" }\n | { status: \"Active\" }\n | { status: \"Inactive\" }\n | {\n status: \"Expiring\";\n daysUntilExpiry: number | null;\n expiryDate: Date | null;\n }\n | { status: \"Expired\"; expiryDate: Date | null };\n\nfunction getConnectionState(\n connection: SsoConnection,\n currentDate: Date | null,\n): ConnectionState {\n switch (connection.state) {\n case \"Active\":\n case \"Validating\":\n case \"Deleting\": {\n const activeStatus = { status: \"Active\" } satisfies ConnectionState;\n if (connection.providerTag !== \"Saml\") {\n return activeStatus;\n }\n\n if (connection.latestExpiredCertificate) {\n return {\n status: \"Expired\",\n expiryDate: connection.latestExpiredCertificate.notAfter\n ? new Date(connection.latestExpiredCertificate.notAfter)\n : null,\n };\n }\n\n const expiryTime = connection.latestExpiringCertificate?.notAfter;\n if (currentDate == null || expiryTime == null) {\n return activeStatus;\n }\n\n const expiryDate = new Date(expiryTime);\n const daysUntilExpiry = (() => {\n const diff = expiryDate.getTime() - currentDate.getTime();\n if (diff < 0) {\n return -1;\n }\n\n return diff / (1000 * 60 * 60 * 24);\n })();\n\n if (daysUntilExpiry !== -1 && daysUntilExpiry <= 30) {\n return { status: \"Expiring\", daysUntilExpiry, expiryDate };\n }\n\n return activeStatus;\n }\n case \"Inactive\": {\n return { status: \"Inactive\" };\n }\n default:\n return unreachable(connection);\n }\n}\n\nfunction getIdentityProvider(connection: SsoConnection): IdentityProvider {\n switch (connection.type) {\n case \"AdfsSaml\":\n case \"EntraIdOidc\":\n return \"microsoft\";\n case \"Auth0Migration\":\n case \"Auth0Saml\":\n return \"auth0\";\n case \"AzureSaml\":\n return \"azure\";\n case \"CasSaml\":\n return \"cas\";\n case \"ClassLinkSaml\":\n return \"classlink\";\n case \"CloudflareSaml\":\n return \"cloudflare\";\n case \"CyberArkSaml\":\n return \"cyberark\";\n case \"DuoSaml\":\n return \"duo\";\n case \"GenericSaml\":\n return \"generic-saml\";\n case \"GoogleSaml\":\n case \"GoogleOidc\":\n return \"google\";\n case \"JumpCloudSaml\":\n return \"jumpcloud\";\n case \"KeycloakSaml\":\n return \"keycloak\";\n case \"LastPassSaml\":\n return \"lastpass\";\n case \"MiniOrangeSaml\":\n return \"miniorange\";\n case \"NetIqSaml\":\n return \"net-iq\";\n case \"OktaOidc\":\n case \"OktaSaml\":\n return \"okta\";\n case \"OneLoginSaml\":\n return \"onelogin\";\n case \"OracleSaml\":\n return \"oracle\";\n case \"PingFederateSaml\":\n case \"PingOneSaml\":\n return \"ping-identity\";\n case \"RipplingSaml\":\n return \"rippling\";\n case \"SalesforceSaml\":\n return \"salesforce\";\n case \"ShibbolethGenericSaml\":\n case \"ShibbolethSaml\":\n return \"shibboleth\";\n case \"SimpleSamlPhpSaml\":\n return \"simple-saml-php\";\n case \"TestIdp\":\n return \"test-idp\";\n case \"VmWareSaml\":\n return \"vmware\";\n case \"AdpOidc\":\n return \"adp\";\n case \"GenericOidc\":\n return \"generic-oidc\";\n case \"LoginGovOidc\":\n return \"login-gov\";\n case \"CleverOidc\":\n return \"clever\";\n default:\n return unreachable(connection);\n }\n}\n\nexport type {\n AdminPortalSsoConnectionProps,\n AdminPortalSsoConnectionLoadingProps,\n AdminPortalSsoConnectionErrorProps,\n};\nexport {\n AdminPortalSsoConnection,\n AdminPortalSsoConnectionLoading,\n AdminPortalSsoConnectionError,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
|
|
4
|
-
type WidgetType = "admin-portal-domain-verification" | "user-management" | "organization-switcher" | "user-sessions" | "user-security" | "user-profile" | "admin-portal-sso-connection" | "api-keys";
|
|
4
|
+
type WidgetType = "admin-portal-domain-verification" | "user-management" | "organization-switcher" | "user-sessions" | "user-security" | "user-profile" | "admin-portal-sso-connection" | "api-keys" | "pipes";
|
|
5
5
|
type AuthToken = string | (() => Promise<string>);
|
|
6
6
|
interface ElevatedAccess {
|
|
7
7
|
token: string;
|
|
8
8
|
expiresAt: string;
|
|
9
9
|
}
|
|
10
10
|
interface ApiConfig {
|
|
11
|
-
authToken:
|
|
12
|
-
|
|
11
|
+
authToken: string | undefined;
|
|
12
|
+
permissions: string[] | undefined;
|
|
13
13
|
baseUrl: string;
|
|
14
14
|
widgetType: WidgetType;
|
|
15
15
|
elevatedAccess?: ElevatedAccess;
|
|
@@ -27,5 +27,6 @@ declare const useElevatedAccessToken: () => {
|
|
|
27
27
|
elevatedAccess: ElevatedAccess | undefined;
|
|
28
28
|
setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;
|
|
29
29
|
};
|
|
30
|
+
declare const useApiReady: () => boolean;
|
|
30
31
|
|
|
31
|
-
export { ApiProvider, type AuthToken, type WidgetType, useApi, useElevatedAccessToken };
|
|
32
|
+
export { ApiProvider, type AuthToken, type WidgetType, useApi, useApiReady, useElevatedAccessToken };
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useQuery } from "@tanstack/react-query";
|
|
2
3
|
import * as React from "react";
|
|
4
|
+
import { useIsHydrated } from "../lib/use-is-hydrated.js";
|
|
5
|
+
import { getClaims } from "./utils.js";
|
|
3
6
|
const ApiContext = React.createContext(void 0);
|
|
4
7
|
const ApiProvider = ({
|
|
5
8
|
authToken,
|
|
@@ -7,7 +10,20 @@ const ApiProvider = ({
|
|
|
7
10
|
children,
|
|
8
11
|
widgetType
|
|
9
12
|
}) => {
|
|
10
|
-
const
|
|
13
|
+
const authTokenQuery = useQuery({
|
|
14
|
+
initialData: typeof authToken === "string" ? {
|
|
15
|
+
authToken,
|
|
16
|
+
permissions: getClaims(authToken).permissions
|
|
17
|
+
} : void 0,
|
|
18
|
+
queryFn: async () => {
|
|
19
|
+
const resolvedToken = typeof authToken === "string" ? authToken : await authToken();
|
|
20
|
+
return {
|
|
21
|
+
authToken: resolvedToken,
|
|
22
|
+
permissions: getClaims(resolvedToken).permissions
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
queryKey: ["authToken", widgetType]
|
|
26
|
+
});
|
|
11
27
|
const [elevatedAccess, setElevatedAccess] = React.useState();
|
|
12
28
|
const elevatedAccessTimeout = React.useRef(void 0);
|
|
13
29
|
React.useEffect(() => {
|
|
@@ -31,15 +47,15 @@ const ApiProvider = ({
|
|
|
31
47
|
}, [elevatedAccess]);
|
|
32
48
|
const value = React.useMemo(
|
|
33
49
|
() => ({
|
|
34
|
-
authToken:
|
|
35
|
-
|
|
50
|
+
authToken: authTokenQuery.data?.authToken,
|
|
51
|
+
permissions: authTokenQuery.data?.permissions,
|
|
36
52
|
baseUrl,
|
|
37
53
|
elevatedAccess,
|
|
38
54
|
setElevatedAccess,
|
|
39
55
|
widgetType
|
|
40
56
|
}),
|
|
41
57
|
[
|
|
42
|
-
|
|
58
|
+
authTokenQuery.data,
|
|
43
59
|
baseUrl,
|
|
44
60
|
elevatedAccess,
|
|
45
61
|
setElevatedAccess,
|
|
@@ -59,24 +75,15 @@ const useElevatedAccessToken = () => {
|
|
|
59
75
|
const { elevatedAccess, setElevatedAccess } = useApi();
|
|
60
76
|
return { elevatedAccess, setElevatedAccess };
|
|
61
77
|
};
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const authTokenPromise = authTokenPromiseOrString;
|
|
68
|
-
const promiseKey = PromiseKey.get(authTokenPromise);
|
|
69
|
-
if (!promiseKey) {
|
|
70
|
-
const newPromiseKey = `${Math.random()}`;
|
|
71
|
-
PromiseKey.set(authTokenPromise, newPromiseKey);
|
|
72
|
-
return newPromiseKey;
|
|
73
|
-
} else {
|
|
74
|
-
return promiseKey;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
78
|
+
const useApiReady = () => {
|
|
79
|
+
const { authToken } = useApi();
|
|
80
|
+
const isHydrated = useIsHydrated();
|
|
81
|
+
return isHydrated && authToken !== void 0;
|
|
82
|
+
};
|
|
77
83
|
export {
|
|
78
84
|
ApiProvider,
|
|
79
85
|
useApi,
|
|
86
|
+
useApiReady,
|
|
80
87
|
useElevatedAccessToken
|
|
81
88
|
};
|
|
82
89
|
//# sourceMappingURL=api-provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import * as React from \"react\";\n\nexport type WidgetType =\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\";\n\nexport type AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiConfig {\n authToken:
|
|
1
|
+
{"version":3,"sources":["../../../src/api/api-provider.tsx"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport { useIsHydrated } from \"../lib/use-is-hydrated.js\";\nimport { getClaims } from \"./utils.js\";\n\nexport type WidgetType =\n | \"admin-portal-domain-verification\"\n | \"user-management\"\n | \"organization-switcher\"\n | \"user-sessions\"\n | \"user-security\"\n | \"user-profile\"\n | \"admin-portal-sso-connection\"\n | \"api-keys\"\n | \"pipes\";\n\nexport type AuthToken = string | (() => Promise<string>);\n\ninterface ElevatedAccess {\n token: string;\n expiresAt: string;\n}\n\ninterface ApiConfig {\n authToken: string | undefined;\n permissions: string[] | undefined;\n baseUrl: string;\n widgetType: WidgetType;\n elevatedAccess?: ElevatedAccess;\n setElevatedAccess: (elevatedAccess?: ElevatedAccess) => void;\n}\n\nconst ApiContext = React.createContext<ApiConfig | undefined>(undefined);\n\ninterface ApiProviderProps {\n authToken: AuthToken;\n baseUrl: string;\n children: React.ReactNode;\n widgetType: WidgetType;\n}\n\nexport const ApiProvider = ({\n authToken,\n baseUrl,\n children,\n widgetType,\n}: ApiProviderProps) => {\n const authTokenQuery = useQuery({\n initialData:\n typeof authToken === \"string\"\n ? {\n authToken,\n permissions: getClaims(authToken).permissions,\n }\n : undefined,\n queryFn: async () => {\n const resolvedToken =\n typeof authToken === \"string\" ? authToken : await authToken();\n\n return {\n authToken: resolvedToken,\n permissions: getClaims(resolvedToken).permissions,\n };\n },\n queryKey: [\"authToken\", widgetType],\n });\n\n const [elevatedAccess, setElevatedAccess] = React.useState<ElevatedAccess>();\n const elevatedAccessTimeout = React.useRef<number | undefined>(undefined);\n\n // This effect manages the expiration of elevated access tokens\n // When an elevated access token is present, it checks every 30 seconds if the token has expired\n // If the token has expired (current time > expiration time), it clears the elevated access\n React.useEffect(() => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n\n if (elevatedAccess) {\n elevatedAccessTimeout.current = window.setInterval(() => {\n const now = new Date();\n const expiresAtDate = new Date(elevatedAccess.expiresAt);\n\n // Reset the elevated access if it has expired\n if (now > expiresAtDate) {\n setElevatedAccess(undefined);\n }\n }, 30_000); // every 30 seconds\n }\n\n return () => {\n if (elevatedAccessTimeout.current) {\n window.clearInterval(elevatedAccessTimeout.current);\n }\n };\n }, [elevatedAccess]);\n\n const value = React.useMemo(\n () => ({\n authToken: authTokenQuery.data?.authToken,\n permissions: authTokenQuery.data?.permissions,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n }),\n [\n authTokenQuery.data,\n baseUrl,\n elevatedAccess,\n setElevatedAccess,\n widgetType,\n ],\n );\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n};\n\nexport const useApi = () => {\n const context = React.useContext(ApiContext);\n\n if (context === undefined) {\n throw new Error(\"useApi must be used within an ApiProvider\");\n }\n\n return context;\n};\n\nexport const useElevatedAccessToken = () => {\n const { elevatedAccess, setElevatedAccess } = useApi();\n\n return { elevatedAccess, setElevatedAccess };\n};\n\nexport const useApiReady = () => {\n const { authToken } = useApi();\n const isHydrated = useIsHydrated();\n\n return isHydrated && authToken !== undefined;\n};\n"],"mappings":"AAmHS;AAnHT,SAAS,gBAAgB;AACzB,YAAY,WAAW;AACvB,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AA6B1B,MAAM,aAAa,MAAM,cAAqC,MAAS;AAShE,MAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AACtB,QAAM,iBAAiB,SAAS;AAAA,IAC9B,aACE,OAAO,cAAc,WACjB;AAAA,MACE;AAAA,MACA,aAAa,UAAU,SAAS,EAAE;AAAA,IACpC,IACA;AAAA,IACN,SAAS,YAAY;AACnB,YAAM,gBACJ,OAAO,cAAc,WAAW,YAAY,MAAM,UAAU;AAE9D,aAAO;AAAA,QACL,WAAW;AAAA,QACX,aAAa,UAAU,aAAa,EAAE;AAAA,MACxC;AAAA,IACF;AAAA,IACA,UAAU,CAAC,aAAa,UAAU;AAAA,EACpC,CAAC;AAED,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,MAAM,SAAyB;AAC3E,QAAM,wBAAwB,MAAM,OAA2B,MAAS;AAKxE,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,SAAS;AACjC,aAAO,cAAc,sBAAsB,OAAO;AAAA,IACpD;AAEA,QAAI,gBAAgB;AAClB,4BAAsB,UAAU,OAAO,YAAY,MAAM;AACvD,cAAM,MAAM,oBAAI,KAAK;AACrB,cAAM,gBAAgB,IAAI,KAAK,eAAe,SAAS;AAGvD,YAAI,MAAM,eAAe;AACvB,4BAAkB,MAAS;AAAA,QAC7B;AAAA,MACF,GAAG,GAAM;AAAA,IACX;AAEA,WAAO,MAAM;AACX,UAAI,sBAAsB,SAAS;AACjC,eAAO,cAAc,sBAAsB,OAAO;AAAA,MACpD;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,CAAC;AAEnB,QAAM,QAAQ,MAAM;AAAA,IAClB,OAAO;AAAA,MACL,WAAW,eAAe,MAAM;AAAA,MAChC,aAAa,eAAe,MAAM;AAAA,MAClC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,oBAAC,WAAW,UAAX,EAAoB,OAAe,UAAS;AACtD;AAEO,MAAM,SAAS,MAAM;AAC1B,QAAM,UAAU,MAAM,WAAW,UAAU;AAE3C,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAEA,SAAO;AACT;AAEO,MAAM,yBAAyB,MAAM;AAC1C,QAAM,EAAE,gBAAgB,kBAAkB,IAAI,OAAO;AAErD,SAAO,EAAE,gBAAgB,kBAAkB;AAC7C;AAEO,MAAM,cAAc,MAAM;AAC/B,QAAM,EAAE,UAAU,IAAI,OAAO;AAC7B,QAAM,aAAa,cAAc;AAEjC,SAAO,cAAc,cAAc;AACrC;","names":[]}
|