@deephaven/auth-plugins 1.4.1-beta.0 → 1.4.1-react19.43
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/AuthHandlerTypes.js.map +1 -1
- package/dist/AuthPlugin.js.map +1 -1
- package/dist/AuthPluginAnonymous.js.map +1 -1
- package/dist/AuthPluginBase.js +1 -2
- package/dist/AuthPluginBase.js.map +1 -1
- package/dist/AuthPluginParent.js.map +1 -1
- package/dist/AuthPluginPsk.js +3 -5
- package/dist/AuthPluginPsk.js.map +1 -1
- package/dist/AuthenticationError.js.map +1 -1
- package/dist/Login.js +1 -2
- package/dist/Login.js.map +1 -1
- package/dist/LoginForm.js +2 -3
- package/dist/LoginForm.js.map +1 -1
- package/dist/UserContexts.d.ts.map +1 -1
- package/dist/UserContexts.js +2 -0
- package/dist/UserContexts.js.map +1 -1
- package/dist/UserUtils.js.map +1 -1
- package/dist/declarations.d.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +10 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthHandlerTypes.js","names":["AUTH_HANDLER_TYPE_ANONYMOUS","AUTH_HANDLER_TYPE_PSK"],"sources":["../src/AuthHandlerTypes.ts"],"sourcesContent":["export const AUTH_HANDLER_TYPE_ANONYMOUS =\n 'io.deephaven.auth.AnonymousAuthenticationHandler';\n\nexport const AUTH_HANDLER_TYPE_PSK =\n 'io.deephaven.authentication.psk.PskAuthenticationHandler';\n"],"mappings":"AAAA,OAAO,IAAMA,2BAA2B,GACtC,kDAAkD;AAEpD,OAAO,IAAMC,qBAAqB,GAChC,0DAA0D"}
|
|
1
|
+
{"version":3,"file":"AuthHandlerTypes.js","names":["AUTH_HANDLER_TYPE_ANONYMOUS","AUTH_HANDLER_TYPE_PSK"],"sources":["../src/AuthHandlerTypes.ts"],"sourcesContent":["export const AUTH_HANDLER_TYPE_ANONYMOUS =\n 'io.deephaven.auth.AnonymousAuthenticationHandler';\n\nexport const AUTH_HANDLER_TYPE_PSK =\n 'io.deephaven.authentication.psk.PskAuthenticationHandler';\n"],"mappings":"AAAA,OAAO,IAAMA,2BAA2B,GACtC,kDAAkD;AAEpD,OAAO,IAAMC,qBAAqB,GAChC,0DAA0D","ignoreList":[]}
|
package/dist/AuthPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthPlugin.js","names":["isAuthPlugin","plugin","authPlugin","Component","undefined","isAvailable"],"sources":["../src/AuthPlugin.ts"],"sourcesContent":["import type React from 'react';\n\n/**\n * Map from auth config keys to their values\n * E.g. Map { AuthHandlers → \"io.deephaven.auth.AnonymousAuthenticationHandler\" }\n */\nexport type AuthConfigMap = Map<string, string>;\n\n/**\n * Props for the auth plugin component to render\n */\nexport type AuthPluginProps = {\n /** Map from config keys to their values */\n authConfigValues: AuthConfigMap;\n\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\nexport type AuthPluginComponent = React.FunctionComponent<AuthPluginProps>;\n\n/**\n * Whether the auth plugin is available given the current configuration\n */\nexport type AuthPluginIsAvailableFunction = (\n authHandlers: string[],\n authConfig: AuthConfigMap\n) => boolean;\n\nexport type AuthPlugin = {\n Component: AuthPluginComponent;\n isAvailable: AuthPluginIsAvailableFunction;\n};\n\nexport function isAuthPlugin(plugin?: unknown): plugin is AuthPlugin {\n if (plugin == null) return false;\n const authPlugin = plugin as AuthPlugin;\n return (\n authPlugin.Component !== undefined &&\n typeof authPlugin.isAvailable === 'function'\n );\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAaA;AACA;AACA;;AAWA,OAAO,SAASA,YAAYA,CAACC,MAAgB,EAAwB;EACnE,IAAIA,MAAM,IAAI,IAAI,EAAE,OAAO,KAAK;EAChC,IAAMC,UAAU,GAAGD,MAAoB;EACvC,OACEC,UAAU,CAACC,SAAS,KAAKC,SAAS,IAClC,OAAOF,UAAU,CAACG,WAAW,KAAK,UAAU;AAEhD"}
|
|
1
|
+
{"version":3,"file":"AuthPlugin.js","names":["isAuthPlugin","plugin","authPlugin","Component","undefined","isAvailable"],"sources":["../src/AuthPlugin.ts"],"sourcesContent":["import type React from 'react';\n\n/**\n * Map from auth config keys to their values\n * E.g. Map { AuthHandlers → \"io.deephaven.auth.AnonymousAuthenticationHandler\" }\n */\nexport type AuthConfigMap = Map<string, string>;\n\n/**\n * Props for the auth plugin component to render\n */\nexport type AuthPluginProps = {\n /** Map from config keys to their values */\n authConfigValues: AuthConfigMap;\n\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n};\n\nexport type AuthPluginComponent = React.FunctionComponent<AuthPluginProps>;\n\n/**\n * Whether the auth plugin is available given the current configuration\n */\nexport type AuthPluginIsAvailableFunction = (\n authHandlers: string[],\n authConfig: AuthConfigMap\n) => boolean;\n\nexport type AuthPlugin = {\n Component: AuthPluginComponent;\n isAvailable: AuthPluginIsAvailableFunction;\n};\n\nexport function isAuthPlugin(plugin?: unknown): plugin is AuthPlugin {\n if (plugin == null) return false;\n const authPlugin = plugin as AuthPlugin;\n return (\n authPlugin.Component !== undefined &&\n typeof authPlugin.isAvailable === 'function'\n );\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;;AAGA;AACA;AACA;;AAaA;AACA;AACA;;AAWA,OAAO,SAASA,YAAYA,CAACC,MAAgB,EAAwB;EACnE,IAAIA,MAAM,IAAI,IAAI,EAAE,OAAO,KAAK;EAChC,IAAMC,UAAU,GAAGD,MAAoB;EACvC,OACEC,UAAU,CAACC,SAAS,KAAKC,SAAS,IAClC,OAAOF,UAAU,CAACG,WAAW,KAAK,UAAU;AAEhD","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthPluginAnonymous.js","names":["React","useCallback","useApi","AUTH_HANDLER_TYPE_ANONYMOUS","AuthPluginBase","UserPermissionsOverrideContext","jsx","_jsx","permissionsOverrides","canLogout","Component","_ref","children","dh","getLoginOptions","type","CoreClient","LOGIN_TYPE_ANONYMOUS","Provider","value","AuthPluginAnonymous","isAvailable","authHandlers","includes"],"sources":["../src/AuthPluginAnonymous.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { AUTH_HANDLER_TYPE_ANONYMOUS } from './AuthHandlerTypes';\nimport { type AuthPlugin, type AuthPluginProps } from './AuthPlugin';\nimport AuthPluginBase from './AuthPluginBase';\nimport {\n type UserPermissionsOverride,\n UserPermissionsOverrideContext,\n} from './UserContexts';\n\nconst permissionsOverrides: UserPermissionsOverride = { canLogout: false };\n\n/**\n * AuthPlugin that tries to login anonymously. Fails if anonymous login fails\n */\nfunction Component({ children }: AuthPluginProps): JSX.Element {\n const dh = useApi();\n\n const getLoginOptions = useCallback(\n () => ({ type: dh.CoreClient.LOGIN_TYPE_ANONYMOUS }),\n [dh]\n );\n\n return (\n <AuthPluginBase getLoginOptions={getLoginOptions}>\n <UserPermissionsOverrideContext.Provider value={permissionsOverrides}>\n {children}\n </UserPermissionsOverrideContext.Provider>\n </AuthPluginBase>\n );\n}\n\nconst AuthPluginAnonymous: AuthPlugin = {\n Component,\n isAvailable: authHandlers =>\n authHandlers.includes(AUTH_HANDLER_TYPE_ANONYMOUS),\n};\n\nexport default AuthPluginAnonymous;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,MAAM,QAAQ,4BAA4B;AAAC,SAC3CC,2BAA2B;AAAA,OAE7BC,cAAc;AAAA,SAGnBC,8BAA8B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGhC,IAAMC,oBAA6C,GAAG;EAAEC,SAAS,EAAE;AAAM,CAAC;;AAE1E;AACA;AACA;AACA,SAASC,SAASA,CAAAC,IAAA,EAA6C;EAAA,IAA5C;IAAEC;EAA0B,CAAC,GAAAD,IAAA;EAC9C,IAAME,EAAE,GAAGX,MAAM,CAAC,CAAC;EAEnB,IAAMY,eAAe,GAAGb,WAAW,CACjC,OAAO;IAAEc,IAAI,EAAEF,EAAE,CAACG,UAAU,CAACC;EAAqB,CAAC,CAAC,EACpD,CAACJ,EAAE,CACL,CAAC;EAED,oBACEN,IAAA,CAACH,cAAc;IAACU,eAAe,EAAEA,eAAgB;IAAAF,QAAA,eAC/CL,IAAA,CAACF,8BAA8B,CAACa,QAAQ;MAACC,KAAK,EAAEX,oBAAqB;MAAAI,QAAA,EAClEA;IAAQ,CAC8B;EAAC,CAC5B,CAAC;AAErB;AAEA,IAAMQ,mBAA+B,GAAG;EACtCV,SAAS;EACTW,WAAW,EAAEC,YAAY,IACvBA,YAAY,CAACC,QAAQ,CAACpB,2BAA2B;AACrD,CAAC;AAED,eAAeiB,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"AuthPluginAnonymous.js","names":["React","useCallback","useApi","AUTH_HANDLER_TYPE_ANONYMOUS","AuthPluginBase","UserPermissionsOverrideContext","jsx","_jsx","permissionsOverrides","canLogout","Component","_ref","children","dh","getLoginOptions","type","CoreClient","LOGIN_TYPE_ANONYMOUS","Provider","value","AuthPluginAnonymous","isAvailable","authHandlers","includes"],"sources":["../src/AuthPluginAnonymous.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { useApi } from '@deephaven/jsapi-bootstrap';\nimport { AUTH_HANDLER_TYPE_ANONYMOUS } from './AuthHandlerTypes';\nimport { type AuthPlugin, type AuthPluginProps } from './AuthPlugin';\nimport AuthPluginBase from './AuthPluginBase';\nimport {\n type UserPermissionsOverride,\n UserPermissionsOverrideContext,\n} from './UserContexts';\n\nconst permissionsOverrides: UserPermissionsOverride = { canLogout: false };\n\n/**\n * AuthPlugin that tries to login anonymously. Fails if anonymous login fails\n */\nfunction Component({ children }: AuthPluginProps): JSX.Element {\n const dh = useApi();\n\n const getLoginOptions = useCallback(\n () => ({ type: dh.CoreClient.LOGIN_TYPE_ANONYMOUS }),\n [dh]\n );\n\n return (\n <AuthPluginBase getLoginOptions={getLoginOptions}>\n <UserPermissionsOverrideContext.Provider value={permissionsOverrides}>\n {children}\n </UserPermissionsOverrideContext.Provider>\n </AuthPluginBase>\n );\n}\n\nconst AuthPluginAnonymous: AuthPlugin = {\n Component,\n isAvailable: authHandlers =>\n authHandlers.includes(AUTH_HANDLER_TYPE_ANONYMOUS),\n};\n\nexport default AuthPluginAnonymous;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,WAAW,QAAQ,OAAO;AAC1C,SAASC,MAAM,QAAQ,4BAA4B;AAAC,SAC3CC,2BAA2B;AAAA,OAE7BC,cAAc;AAAA,SAGnBC,8BAA8B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGhC,IAAMC,oBAA6C,GAAG;EAAEC,SAAS,EAAE;AAAM,CAAC;;AAE1E;AACA;AACA;AACA,SAASC,SAASA,CAAAC,IAAA,EAA6C;EAAA,IAA5C;IAAEC;EAA0B,CAAC,GAAAD,IAAA;EAC9C,IAAME,EAAE,GAAGX,MAAM,CAAC,CAAC;EAEnB,IAAMY,eAAe,GAAGb,WAAW,CACjC,OAAO;IAAEc,IAAI,EAAEF,EAAE,CAACG,UAAU,CAACC;EAAqB,CAAC,CAAC,EACpD,CAACJ,EAAE,CACL,CAAC;EAED,oBACEN,IAAA,CAACH,cAAc;IAACU,eAAe,EAAEA,eAAgB;IAAAF,QAAA,eAC/CL,IAAA,CAACF,8BAA8B,CAACa,QAAQ;MAACC,KAAK,EAAEX,oBAAqB;MAAAI,QAAA,EAClEA;IAAQ,CAC8B;EAAC,CAC5B,CAAC;AAErB;AAEA,IAAMQ,mBAA+B,GAAG;EACtCV,SAAS;EACTW,WAAW,EAAEC,YAAY,IACvBA,YAAY,CAACC,QAAQ,CAACpB,2BAA2B;AACrD,CAAC;AAED,eAAeiB,mBAAmB","ignoreList":[]}
|
package/dist/AuthPluginBase.js
CHANGED
|
@@ -6,8 +6,7 @@ import { useClient } from '@deephaven/jsapi-bootstrap';
|
|
|
6
6
|
import Log from '@deephaven/log';
|
|
7
7
|
import { CanceledPromiseError, getErrorMessage } from '@deephaven/utils';
|
|
8
8
|
import AuthenticationError from "./AuthenticationError.js";
|
|
9
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
9
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
11
10
|
var log = Log.module('AuthPluginBase');
|
|
12
11
|
/**
|
|
13
12
|
* Base AuthPlugin that gets passed a function for retrieving the login options, and then attempting to login with them.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthPluginBase.js","names":["React","useEffect","useState","LoadingOverlay","useClient","Log","CanceledPromiseError","getErrorMessage","AuthenticationError","jsx","_jsx","Fragment","_Fragment","log","module","AuthPluginBase","_ref","children","getLoginOptions","client","error","setError","isLoggedIn","setIsLoggedIn","isCanceled","verifyNotCanceled","login","_login","apply","arguments","_asyncToGenerator","loginOptions","info","e","_getErrorMessage","message","isLoading","isLoaded","errorMessage"],"sources":["../src/AuthPluginBase.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { CanceledPromiseError, getErrorMessage } from '@deephaven/utils';\nimport AuthenticationError from './AuthenticationError';\n\nconst log = Log.module('AuthPluginBase');\n\nexport type AuthPluginBaseProps = {\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n\n /**\n * Retrieve the login options for logging in to the client\n * @returns A promise for the login options\n */\n getLoginOptions: () => dh.LoginCredentials | Promise<dh.LoginCredentials>;\n};\n\n/**\n * Base AuthPlugin that gets passed a function for retrieving the login options, and then attempting to login with them.\n * @param getLoginOptions Function that returns a promise for the login options\n */\nfunction AuthPluginBase({\n children,\n getLoginOptions,\n}: AuthPluginBaseProps): JSX.Element {\n const client = useClient();\n const [error, setError] = useState<unknown>();\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n\n useEffect(() => {\n let isCanceled = false;\n function verifyNotCanceled(): void {\n if (isCanceled) {\n throw new CanceledPromiseError('Login canceled.');\n }\n }\n async function login(): Promise<void> {\n try {\n const loginOptions = await getLoginOptions();\n verifyNotCanceled();\n\n log.info('Logging in...');\n await client.login(loginOptions);\n verifyNotCanceled();\n\n setIsLoggedIn(true);\n } catch (e) {\n if (!isCanceled) {\n log.error('Unable to login:', e);\n const message =\n getErrorMessage(e) ?? 'Unable to login. Verify credentials.';\n setError(new AuthenticationError(message));\n setIsLoggedIn(false);\n }\n }\n }\n login();\n return () => {\n isCanceled = true;\n };\n }, [client, getLoginOptions]);\n\n if (!isLoggedIn) {\n return (\n <LoadingOverlay\n data-testid=\"auth-base-loading\"\n isLoading={error == null}\n isLoaded={false}\n errorMessage={getErrorMessage(error)}\n />\n );\n }\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>{children}</>;\n}\n\nexport default AuthPluginBase;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,SAAS,QAAQ,4BAA4B;AACtD,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,SAASC,oBAAoB,EAAEC,eAAe,QAAQ,kBAAkB;AAAC,OAClEC,mBAAmB;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"AuthPluginBase.js","names":["React","useEffect","useState","LoadingOverlay","useClient","Log","CanceledPromiseError","getErrorMessage","AuthenticationError","jsx","_jsx","Fragment","_Fragment","log","module","AuthPluginBase","_ref","children","getLoginOptions","client","error","setError","isLoggedIn","setIsLoggedIn","isCanceled","verifyNotCanceled","login","_login","apply","arguments","_asyncToGenerator","loginOptions","info","e","_getErrorMessage","message","isLoading","isLoaded","errorMessage"],"sources":["../src/AuthPluginBase.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport Log from '@deephaven/log';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { CanceledPromiseError, getErrorMessage } from '@deephaven/utils';\nimport AuthenticationError from './AuthenticationError';\n\nconst log = Log.module('AuthPluginBase');\n\nexport type AuthPluginBaseProps = {\n /**\n * The children to render after authentication is completed.\n */\n children: React.ReactNode;\n\n /**\n * Retrieve the login options for logging in to the client\n * @returns A promise for the login options\n */\n getLoginOptions: () => dh.LoginCredentials | Promise<dh.LoginCredentials>;\n};\n\n/**\n * Base AuthPlugin that gets passed a function for retrieving the login options, and then attempting to login with them.\n * @param getLoginOptions Function that returns a promise for the login options\n */\nfunction AuthPluginBase({\n children,\n getLoginOptions,\n}: AuthPluginBaseProps): JSX.Element {\n const client = useClient();\n const [error, setError] = useState<unknown>();\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n\n useEffect(() => {\n let isCanceled = false;\n function verifyNotCanceled(): void {\n if (isCanceled) {\n throw new CanceledPromiseError('Login canceled.');\n }\n }\n async function login(): Promise<void> {\n try {\n const loginOptions = await getLoginOptions();\n verifyNotCanceled();\n\n log.info('Logging in...');\n await client.login(loginOptions);\n verifyNotCanceled();\n\n setIsLoggedIn(true);\n } catch (e) {\n if (!isCanceled) {\n log.error('Unable to login:', e);\n const message =\n getErrorMessage(e) ?? 'Unable to login. Verify credentials.';\n setError(new AuthenticationError(message));\n setIsLoggedIn(false);\n }\n }\n }\n login();\n return () => {\n isCanceled = true;\n };\n }, [client, getLoginOptions]);\n\n if (!isLoggedIn) {\n return (\n <LoadingOverlay\n data-testid=\"auth-base-loading\"\n isLoading={error == null}\n isLoaded={false}\n errorMessage={getErrorMessage(error)}\n />\n );\n }\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n return <>{children}</>;\n}\n\nexport default AuthPluginBase;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,cAAc,QAAQ,uBAAuB;AACtD,SAASC,SAAS,QAAQ,4BAA4B;AACtD,OAAOC,GAAG,MAAM,gBAAgB;AAEhC,SAASC,oBAAoB,EAAEC,eAAe,QAAQ,kBAAkB;AAAC,OAClEC,mBAAmB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA;AAE1B,IAAMC,GAAG,GAAGR,GAAG,CAACS,MAAM,CAAC,gBAAgB,CAAC;AAexC;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAAAC,IAAA,EAGc;EAAA,IAHb;IACtBC,QAAQ;IACRC;EACmB,CAAC,GAAAF,IAAA;EACpB,IAAMG,MAAM,GAAGf,SAAS,CAAC,CAAC;EAC1B,IAAM,CAACgB,KAAK,EAAEC,QAAQ,CAAC,GAAGnB,QAAQ,CAAU,CAAC;EAC7C,IAAM,CAACoB,UAAU,EAAEC,aAAa,CAAC,GAAGrB,QAAQ,CAAC,KAAK,CAAC;EAEnDD,SAAS,CAAC,MAAM;IACd,IAAIuB,UAAU,GAAG,KAAK;IACtB,SAASC,iBAAiBA,CAAA,EAAS;MACjC,IAAID,UAAU,EAAE;QACd,MAAM,IAAIlB,oBAAoB,CAAC,iBAAiB,CAAC;MACnD;IACF;IAAC,SACcoB,KAAKA,CAAA;MAAA,OAAAC,MAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IAAA,SAAAF,OAAA;MAAAA,MAAA,GAAAG,iBAAA,CAApB,aAAsC;QACpC,IAAI;UACF,IAAMC,YAAY,SAASb,eAAe,CAAC,CAAC;UAC5CO,iBAAiB,CAAC,CAAC;UAEnBZ,GAAG,CAACmB,IAAI,CAAC,eAAe,CAAC;UACzB,MAAMb,MAAM,CAACO,KAAK,CAACK,YAAY,CAAC;UAChCN,iBAAiB,CAAC,CAAC;UAEnBF,aAAa,CAAC,IAAI,CAAC;QACrB,CAAC,CAAC,OAAOU,CAAC,EAAE;UACV,IAAI,CAACT,UAAU,EAAE;YAAA,IAAAU,gBAAA;YACfrB,GAAG,CAACO,KAAK,CAAC,kBAAkB,EAAEa,CAAC,CAAC;YAChC,IAAME,OAAO,IAAAD,gBAAA,GACX3B,eAAe,CAAC0B,CAAC,CAAC,cAAAC,gBAAA,cAAAA,gBAAA,GAAI,sCAAsC;YAC9Db,QAAQ,CAAC,IAAIb,mBAAmB,CAAC2B,OAAO,CAAC,CAAC;YAC1CZ,aAAa,CAAC,KAAK,CAAC;UACtB;QACF;MACF,CAAC;MAAA,OAAAI,MAAA,CAAAC,KAAA,OAAAC,SAAA;IAAA;IACDH,KAAK,CAAC,CAAC;IACP,OAAO,MAAM;MACXF,UAAU,GAAG,IAAI;IACnB,CAAC;EACH,CAAC,EAAE,CAACL,MAAM,EAAED,eAAe,CAAC,CAAC;EAE7B,IAAI,CAACI,UAAU,EAAE;IACf,oBACEZ,IAAA,CAACP,cAAc;MACb,eAAY,mBAAmB;MAC/BiC,SAAS,EAAEhB,KAAK,IAAI,IAAK;MACzBiB,QAAQ,EAAE,KAAM;MAChBC,YAAY,EAAE/B,eAAe,CAACa,KAAK;IAAE,CACtC,CAAC;EAEN;;EAEA;EACA,oBAAOV,IAAA,CAAAE,SAAA;IAAAK,QAAA,EAAGA;EAAQ,CAAG,CAAC;AACxB;AAEA,eAAeF,cAAc","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthPluginParent.js","names":["React","LOGIN_OPTIONS_REQUEST","Log","getWindowParent","requestParentResponse","AuthPluginBase","UserPermissionsOverrideContext","jsx","_jsx","log","module","permissionsOverrides","canLogout","isLoginOptions","options","type","getLoginOptions","_getLoginOptions","apply","arguments","_asyncToGenerator","info","response","Error","concat","getWindowAuthProvider","_URLSearchParams$get","URLSearchParams","window","location","search","get","Component","_ref","children","Provider","value","AuthPluginParent","isAvailable"],"sources":["../src/AuthPluginParent.tsx"],"sourcesContent":["import React from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { LOGIN_OPTIONS_REQUEST } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getWindowParent, requestParentResponse } from '@deephaven/utils';\nimport { type AuthPlugin, type AuthPluginProps } from './AuthPlugin';\nimport AuthPluginBase from './AuthPluginBase';\nimport {\n type UserPermissionsOverride,\n UserPermissionsOverrideContext,\n} from './UserContexts';\n\nconst log = Log.module('AuthPluginParent');\n\nconst permissionsOverrides: UserPermissionsOverride = { canLogout: false };\n\nfunction isLoginOptions(options: unknown): options is dh.LoginCredentials {\n return (\n options != null && typeof (options as dh.LoginCredentials).type === 'string'\n );\n}\n\nasync function getLoginOptions(): Promise<dh.LoginCredentials> {\n log.info('Logging in by delegating to parent window...');\n const response = await requestParentResponse(LOGIN_OPTIONS_REQUEST);\n if (!isLoginOptions(response)) {\n throw new Error(`Unexpected login options response: ${response}`);\n }\n return response;\n}\n\nfunction getWindowAuthProvider(): string {\n return new URLSearchParams(window.location.search).get('authProvider') ?? '';\n}\n\n/**\n * AuthPlugin that tries to delegate to the parent window for authentication. Fails if there is no parent window.\n */\nfunction Component({ children }: AuthPluginProps): JSX.Element {\n return (\n <AuthPluginBase getLoginOptions={getLoginOptions}>\n <UserPermissionsOverrideContext.Provider value={permissionsOverrides}>\n {children}\n </UserPermissionsOverrideContext.Provider>\n </AuthPluginBase>\n );\n}\n\nconst AuthPluginParent: AuthPlugin = {\n Component,\n isAvailable: () =>\n getWindowParent() != null && getWindowAuthProvider() === 'parent',\n};\n\nexport default AuthPluginParent;\n"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,qBAAqB,QAAQ,wBAAwB;AAC9D,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,eAAe,EAAEC,qBAAqB,QAAQ,kBAAkB;AAAC,OAEnEC,cAAc;AAAA,SAGnBC,8BAA8B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGhC,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,kBAAkB,CAAC;AAE1C,IAAMC,oBAA6C,GAAG;EAAEC,SAAS,EAAE;AAAM,CAAC;AAE1E,SAASC,cAAcA,CAACC,OAAgB,EAAkC;EACxE,OACEA,OAAO,IAAI,IAAI,IAAI,OAAQA,OAAO,CAAyBC,IAAI,KAAK,QAAQ;AAEhF;AAAC,SAEcC,eAAeA,CAAA;EAAA,OAAAC,gBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAAA,SAAAF,iBAAA;EAAAA,gBAAA,GAAAG,iBAAA,CAA9B,aAA+D;IAC7DX,GAAG,CAACY,IAAI,CAAC,8CAA8C,CAAC;IACxD,IAAMC,QAAQ,SAASlB,qBAAqB,CAACH,qBAAqB,CAAC;IACnE,IAAI,CAACY,cAAc,CAACS,QAAQ,CAAC,EAAE;MAC7B,MAAM,IAAIC,KAAK,uCAAAC,MAAA,CAAuCF,QAAQ,CAAE,CAAC;IACnE;IACA,OAAOA,QAAQ;EACjB,CAAC;EAAA,OAAAL,gBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAED,SAASM,qBAAqBA,CAAA,EAAW;EAAA,IAAAC,oBAAA;EACvC,QAAAA,oBAAA,GAAO,IAAIC,eAAe,CAACC,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC,CAACC,GAAG,CAAC,cAAc,CAAC,cAAAL,oBAAA,cAAAA,oBAAA,GAAI,EAAE;AAC9E;;AAEA;AACA;AACA;AACA,SAASM,SAASA,CAAAC,IAAA,EAA6C;EAAA,IAA5C;IAAEC;EAA0B,CAAC,GAAAD,IAAA;EAC9C,oBACEzB,IAAA,CAACH,cAAc;IAACW,eAAe,EAAEA,eAAgB;IAAAkB,QAAA,eAC/C1B,IAAA,CAACF,8BAA8B,CAAC6B,QAAQ;MAACC,KAAK,EAAEzB,oBAAqB;MAAAuB,QAAA,EAClEA;IAAQ,CAC8B;EAAC,CAC5B,CAAC;AAErB;AAEA,IAAMG,gBAA4B,GAAG;EACnCL,SAAS;EACTM,WAAW,EAAEA,CAAA,KACXnC,eAAe,CAAC,CAAC,IAAI,IAAI,IAAIsB,qBAAqB,CAAC,CAAC,KAAK;AAC7D,CAAC;AAED,eAAeY,gBAAgB"}
|
|
1
|
+
{"version":3,"file":"AuthPluginParent.js","names":["React","LOGIN_OPTIONS_REQUEST","Log","getWindowParent","requestParentResponse","AuthPluginBase","UserPermissionsOverrideContext","jsx","_jsx","log","module","permissionsOverrides","canLogout","isLoginOptions","options","type","getLoginOptions","_getLoginOptions","apply","arguments","_asyncToGenerator","info","response","Error","concat","getWindowAuthProvider","_URLSearchParams$get","URLSearchParams","window","location","search","get","Component","_ref","children","Provider","value","AuthPluginParent","isAvailable"],"sources":["../src/AuthPluginParent.tsx"],"sourcesContent":["import React from 'react';\nimport type { dh } from '@deephaven/jsapi-types';\nimport { LOGIN_OPTIONS_REQUEST } from '@deephaven/jsapi-utils';\nimport Log from '@deephaven/log';\nimport { getWindowParent, requestParentResponse } from '@deephaven/utils';\nimport { type AuthPlugin, type AuthPluginProps } from './AuthPlugin';\nimport AuthPluginBase from './AuthPluginBase';\nimport {\n type UserPermissionsOverride,\n UserPermissionsOverrideContext,\n} from './UserContexts';\n\nconst log = Log.module('AuthPluginParent');\n\nconst permissionsOverrides: UserPermissionsOverride = { canLogout: false };\n\nfunction isLoginOptions(options: unknown): options is dh.LoginCredentials {\n return (\n options != null && typeof (options as dh.LoginCredentials).type === 'string'\n );\n}\n\nasync function getLoginOptions(): Promise<dh.LoginCredentials> {\n log.info('Logging in by delegating to parent window...');\n const response = await requestParentResponse(LOGIN_OPTIONS_REQUEST);\n if (!isLoginOptions(response)) {\n throw new Error(`Unexpected login options response: ${response}`);\n }\n return response;\n}\n\nfunction getWindowAuthProvider(): string {\n return new URLSearchParams(window.location.search).get('authProvider') ?? '';\n}\n\n/**\n * AuthPlugin that tries to delegate to the parent window for authentication. Fails if there is no parent window.\n */\nfunction Component({ children }: AuthPluginProps): JSX.Element {\n return (\n <AuthPluginBase getLoginOptions={getLoginOptions}>\n <UserPermissionsOverrideContext.Provider value={permissionsOverrides}>\n {children}\n </UserPermissionsOverrideContext.Provider>\n </AuthPluginBase>\n );\n}\n\nconst AuthPluginParent: AuthPlugin = {\n Component,\n isAvailable: () =>\n getWindowParent() != null && getWindowAuthProvider() === 'parent',\n};\n\nexport default AuthPluginParent;\n"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,qBAAqB,QAAQ,wBAAwB;AAC9D,OAAOC,GAAG,MAAM,gBAAgB;AAChC,SAASC,eAAe,EAAEC,qBAAqB,QAAQ,kBAAkB;AAAC,OAEnEC,cAAc;AAAA,SAGnBC,8BAA8B;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAGhC,IAAMC,GAAG,GAAGP,GAAG,CAACQ,MAAM,CAAC,kBAAkB,CAAC;AAE1C,IAAMC,oBAA6C,GAAG;EAAEC,SAAS,EAAE;AAAM,CAAC;AAE1E,SAASC,cAAcA,CAACC,OAAgB,EAAkC;EACxE,OACEA,OAAO,IAAI,IAAI,IAAI,OAAQA,OAAO,CAAyBC,IAAI,KAAK,QAAQ;AAEhF;AAAC,SAEcC,eAAeA,CAAA;EAAA,OAAAC,gBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAAA,SAAAF,iBAAA;EAAAA,gBAAA,GAAAG,iBAAA,CAA9B,aAA+D;IAC7DX,GAAG,CAACY,IAAI,CAAC,8CAA8C,CAAC;IACxD,IAAMC,QAAQ,SAASlB,qBAAqB,CAACH,qBAAqB,CAAC;IACnE,IAAI,CAACY,cAAc,CAACS,QAAQ,CAAC,EAAE;MAC7B,MAAM,IAAIC,KAAK,uCAAAC,MAAA,CAAuCF,QAAQ,CAAE,CAAC;IACnE;IACA,OAAOA,QAAQ;EACjB,CAAC;EAAA,OAAAL,gBAAA,CAAAC,KAAA,OAAAC,SAAA;AAAA;AAED,SAASM,qBAAqBA,CAAA,EAAW;EAAA,IAAAC,oBAAA;EACvC,QAAAA,oBAAA,GAAO,IAAIC,eAAe,CAACC,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC,CAACC,GAAG,CAAC,cAAc,CAAC,cAAAL,oBAAA,cAAAA,oBAAA,GAAI,EAAE;AAC9E;;AAEA;AACA;AACA;AACA,SAASM,SAASA,CAAAC,IAAA,EAA6C;EAAA,IAA5C;IAAEC;EAA0B,CAAC,GAAAD,IAAA;EAC9C,oBACEzB,IAAA,CAACH,cAAc;IAACW,eAAe,EAAEA,eAAgB;IAAAkB,QAAA,eAC/C1B,IAAA,CAACF,8BAA8B,CAAC6B,QAAQ;MAACC,KAAK,EAAEzB,oBAAqB;MAAAuB,QAAA,EAClEA;IAAQ,CAC8B;EAAC,CAC5B,CAAC;AAErB;AAEA,IAAMG,gBAA4B,GAAG;EACnCL,SAAS;EACTM,WAAW,EAAEA,CAAA,KACXnC,eAAe,CAAC,CAAC,IAAI,IAAI,IAAIsB,qBAAqB,CAAC,CAAC,KAAK;AAC7D,CAAC;AAED,eAAeY,gBAAgB","ignoreList":[]}
|
package/dist/AuthPluginPsk.js
CHANGED
|
@@ -10,9 +10,7 @@ import Cookies from 'js-cookie';
|
|
|
10
10
|
import LoginForm from "./LoginForm.js";
|
|
11
11
|
import Login from "./Login.js";
|
|
12
12
|
import AuthenticationError from "./AuthenticationError.js";
|
|
13
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
|
-
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
13
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
16
14
|
var AUTH_TYPE = 'io.deephaven.authentication.psk.PskAuthenticationHandler';
|
|
17
15
|
var PSK_QUERY_PARAM_KEY = 'psk';
|
|
18
16
|
var PSK_TOKEN_KEY = 'io.deephaven.web.client.auth.psk.token';
|
|
@@ -102,7 +100,7 @@ function Component(_ref) {
|
|
|
102
100
|
loginPromise.current = null;
|
|
103
101
|
setIsLoggingIn(false);
|
|
104
102
|
}, []);
|
|
105
|
-
var onLogin = useCallback(
|
|
103
|
+
var onLogin = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {
|
|
106
104
|
log.debug('onLogin');
|
|
107
105
|
|
|
108
106
|
// User logged in successfully in another tab, we should be able to read the token from the cookie and login
|
|
@@ -164,7 +162,7 @@ function Component(_ref) {
|
|
|
164
162
|
}, [cancelLogin, isLoggingIn, login, token]);
|
|
165
163
|
useEffect(function autoFocusInput() {
|
|
166
164
|
var _inputField$current;
|
|
167
|
-
(_inputField$current = inputField.current) === null || _inputField$current === void 0
|
|
165
|
+
(_inputField$current = inputField.current) === null || _inputField$current === void 0 || _inputField$current.focus();
|
|
168
166
|
}, [inputField, isInputRequired]);
|
|
169
167
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
170
168
|
children: [isLoggedIn && children, isInputRequired && /*#__PURE__*/_jsx(FadeTransition, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthPluginPsk.js","names":["React","useCallback","useEffect","useRef","useState","FadeTransition","LoadingOverlay","useClient","useBroadcastLoginListener","Log","getErrorMessage","Cookies","LoginForm","Login","AuthenticationError","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","AUTH_TYPE","PSK_QUERY_PARAM_KEY","PSK_TOKEN_KEY","log","module","getWindowToken","URLSearchParams","window","location","search","get","clearWindowToken","debug2","url","URL","href","searchParams","delete","history","replaceState","readCookieToken","_Cookies$get","storeCookieToken","token","set","secure","sameSite","remove","Component","_ref","children","logoPath","client","inputField","loginPromise","error","setError","isInputRequired","setIsInputRequired","isLoggedIn","setIsLoggedIn","isLoggingIn","setIsLoggingIn","setToken","login","_ref2","_asyncToGenerator","loginToken","showError","arguments","length","undefined","info","newLoginPromise","type","current","e","_getErrorMessage","message","_x","apply","cancelLogin","onLogin","debug","newToken","onLogout","isCanceled","initialLogin","_initialLogin","_getWindowToken","initialToken","handleSubmit","autoFocusInput","_inputField$current","focus","in","mountOnEnter","unmountOnExit","errorMessage","onSubmit","className","htmlFor","id","name","autoComplete","autoCapitalize","autoCorrect","spellCheck","ref","value","onChange","event","target","isLoaded","isLoading","AuthPluginPsk","isAvailable","authHandlers","includes"],"sources":["../src/AuthPluginPsk.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { FadeTransition, LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport Log from '@deephaven/log';\nimport { getErrorMessage } from '@deephaven/utils';\nimport Cookies from 'js-cookie';\nimport { type AuthPlugin, type AuthPluginProps } from './AuthPlugin';\nimport LoginForm from './LoginForm';\nimport Login from './Login';\nimport AuthenticationError from './AuthenticationError';\n\nconst AUTH_TYPE = 'io.deephaven.authentication.psk.PskAuthenticationHandler';\n\nconst PSK_QUERY_PARAM_KEY = 'psk';\n\nconst PSK_TOKEN_KEY = 'io.deephaven.web.client.auth.psk.token';\n\nconst log = Log.module('AuthPluginPsk');\n\nfunction getWindowToken(): string | null {\n return new URLSearchParams(window.location.search).get(PSK_QUERY_PARAM_KEY);\n}\n\nfunction clearWindowToken(): void {\n log.debug2('clearWindowToken');\n const url = new URL(window.location.href);\n url.searchParams.delete(PSK_QUERY_PARAM_KEY);\n\n window.history.replaceState(null, '', url.href);\n}\n\nfunction readCookieToken(): string | null {\n return Cookies.get(PSK_TOKEN_KEY) ?? null;\n}\n\nfunction storeCookieToken(token: string | null): void {\n log.debug2('Storing token in cookie', token);\n if (token != null) {\n Cookies.set(PSK_TOKEN_KEY, token, { secure: true, sameSite: 'strict' });\n } else {\n Cookies.remove(PSK_TOKEN_KEY);\n }\n}\n\nexport type AuthPluginPskProps = AuthPluginProps & {\n /** Custom path to a logo to display on the login screen */\n logoPath?: string;\n};\n\n/**\n * AuthPlugin that tries to login using a pre-shared key.\n * Add the `psk=<token>` parameter to your URL string to set the token.\n */\nfunction Component({ children, logoPath }: AuthPluginPskProps): JSX.Element {\n const client = useClient();\n const inputField = useRef<HTMLInputElement>(null);\n const loginPromise = useRef<Promise<void> | null>(null);\n const [error, setError] = useState<unknown>();\n const [isInputRequired, setIsInputRequired] = useState(false);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [token, setToken] = useState('');\n\n const login = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n async (loginToken: string, showError: boolean = true) => {\n log.info('Logging in...');\n setIsLoggingIn(true);\n let newLoginPromise: Promise<void> | null = null;\n try {\n newLoginPromise = client.login({ type: AUTH_TYPE, token: loginToken });\n loginPromise.current = newLoginPromise;\n await newLoginPromise;\n\n log.info('Logged in successfully');\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n storeCookieToken(loginToken);\n setIsLoggedIn(true);\n } catch (e) {\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n setIsInputRequired(true);\n if (showError) {\n log.error('Unable to login', e);\n const message =\n getErrorMessage(e) ?? 'Unable to login: Verify credentials.';\n setError(new AuthenticationError(message));\n }\n }\n setIsLoggingIn(false);\n },\n [client]\n );\n\n const cancelLogin = useCallback(() => {\n loginPromise.current = null;\n setIsLoggingIn(false);\n }, []);\n\n const onLogin = useCallback(async () => {\n log.debug('onLogin');\n\n // User logged in successfully in another tab, we should be able to read the token from the cookie and login\n const newToken = readCookieToken();\n if (isLoggedIn || isLoggingIn || newToken == null) {\n return;\n }\n\n login(newToken, false);\n }, [isLoggedIn, isLoggingIn, login]);\n const onLogout = useCallback(() => {\n storeCookieToken(null);\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n\n useEffect(() => {\n let isCanceled = false;\n async function initialLogin(): Promise<void> {\n const initialToken = getWindowToken() ?? readCookieToken();\n clearWindowToken();\n\n if (initialToken == null) {\n setIsInputRequired(true);\n return;\n }\n\n setIsLoggingIn(true);\n try {\n await client.login({ type: AUTH_TYPE, token: initialToken });\n if (!isCanceled) {\n storeCookieToken(initialToken);\n setIsLoggedIn(true);\n setIsLoggingIn(false);\n }\n } catch (e) {\n if (!isCanceled) {\n setIsInputRequired(true);\n setIsLoggingIn(false);\n }\n }\n }\n initialLogin();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n\n const handleSubmit = useCallback(() => {\n if (!isLoggingIn) {\n login(token);\n } else {\n cancelLogin();\n }\n }, [cancelLogin, isLoggingIn, login, token]);\n\n useEffect(\n function autoFocusInput() {\n inputField.current?.focus();\n },\n [inputField, isInputRequired]\n );\n\n return (\n <>\n {isLoggedIn && children}\n {isInputRequired && (\n <FadeTransition in={!isLoggedIn} mountOnEnter unmountOnExit>\n <Login logoPath={logoPath}>\n <LoginForm\n errorMessage={getErrorMessage(error)}\n isLoggingIn={isLoggingIn}\n onSubmit={handleSubmit}\n >\n <div className=\"form-group\">\n <label htmlFor=\"auth-psk-token-input\">Token</label>\n <input\n id=\"auth-psk-token-input\"\n name=\"token\"\n className=\"input-token form-control\"\n type=\"text\"\n autoComplete=\"username\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n ref={inputField}\n value={token}\n onChange={event => {\n setError(undefined);\n setToken(event.target.value);\n }}\n />\n </div>\n </LoginForm>\n </Login>\n </FadeTransition>\n )}\n <LoadingOverlay\n data-testid=\"auth-psk-loading\"\n isLoaded={isLoggedIn || isInputRequired}\n isLoading={!isLoggedIn && !isInputRequired}\n />\n </>\n );\n}\n\nconst AuthPluginPsk: AuthPlugin = {\n Component,\n isAvailable: authHandlers => authHandlers.includes(AUTH_TYPE),\n};\n\nexport default AuthPluginPsk;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthPluginPsk.js","names":["React","useCallback","useEffect","useRef","useState","FadeTransition","LoadingOverlay","useClient","useBroadcastLoginListener","Log","getErrorMessage","Cookies","LoginForm","Login","AuthenticationError","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","AUTH_TYPE","PSK_QUERY_PARAM_KEY","PSK_TOKEN_KEY","log","module","getWindowToken","URLSearchParams","window","location","search","get","clearWindowToken","debug2","url","URL","href","searchParams","delete","history","replaceState","readCookieToken","_Cookies$get","storeCookieToken","token","set","secure","sameSite","remove","Component","_ref","children","logoPath","client","inputField","loginPromise","error","setError","isInputRequired","setIsInputRequired","isLoggedIn","setIsLoggedIn","isLoggingIn","setIsLoggingIn","setToken","login","_ref2","_asyncToGenerator","loginToken","showError","arguments","length","undefined","info","newLoginPromise","type","current","e","_getErrorMessage","message","_x","apply","cancelLogin","onLogin","debug","newToken","onLogout","isCanceled","initialLogin","_initialLogin","_getWindowToken","initialToken","handleSubmit","autoFocusInput","_inputField$current","focus","in","mountOnEnter","unmountOnExit","errorMessage","onSubmit","className","htmlFor","id","name","autoComplete","autoCapitalize","autoCorrect","spellCheck","ref","value","onChange","event","target","isLoaded","isLoading","AuthPluginPsk","isAvailable","authHandlers","includes"],"sources":["../src/AuthPluginPsk.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { FadeTransition, LoadingOverlay } from '@deephaven/components';\nimport { useClient } from '@deephaven/jsapi-bootstrap';\nimport { useBroadcastLoginListener } from '@deephaven/jsapi-components';\nimport Log from '@deephaven/log';\nimport { getErrorMessage } from '@deephaven/utils';\nimport Cookies from 'js-cookie';\nimport { type AuthPlugin, type AuthPluginProps } from './AuthPlugin';\nimport LoginForm from './LoginForm';\nimport Login from './Login';\nimport AuthenticationError from './AuthenticationError';\n\nconst AUTH_TYPE = 'io.deephaven.authentication.psk.PskAuthenticationHandler';\n\nconst PSK_QUERY_PARAM_KEY = 'psk';\n\nconst PSK_TOKEN_KEY = 'io.deephaven.web.client.auth.psk.token';\n\nconst log = Log.module('AuthPluginPsk');\n\nfunction getWindowToken(): string | null {\n return new URLSearchParams(window.location.search).get(PSK_QUERY_PARAM_KEY);\n}\n\nfunction clearWindowToken(): void {\n log.debug2('clearWindowToken');\n const url = new URL(window.location.href);\n url.searchParams.delete(PSK_QUERY_PARAM_KEY);\n\n window.history.replaceState(null, '', url.href);\n}\n\nfunction readCookieToken(): string | null {\n return Cookies.get(PSK_TOKEN_KEY) ?? null;\n}\n\nfunction storeCookieToken(token: string | null): void {\n log.debug2('Storing token in cookie', token);\n if (token != null) {\n Cookies.set(PSK_TOKEN_KEY, token, { secure: true, sameSite: 'strict' });\n } else {\n Cookies.remove(PSK_TOKEN_KEY);\n }\n}\n\nexport type AuthPluginPskProps = AuthPluginProps & {\n /** Custom path to a logo to display on the login screen */\n logoPath?: string;\n};\n\n/**\n * AuthPlugin that tries to login using a pre-shared key.\n * Add the `psk=<token>` parameter to your URL string to set the token.\n */\nfunction Component({ children, logoPath }: AuthPluginPskProps): JSX.Element {\n const client = useClient();\n const inputField = useRef<HTMLInputElement>(null);\n const loginPromise = useRef<Promise<void> | null>(null);\n const [error, setError] = useState<unknown>();\n const [isInputRequired, setIsInputRequired] = useState(false);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [isLoggingIn, setIsLoggingIn] = useState(false);\n const [token, setToken] = useState('');\n\n const login = useCallback(\n // eslint-disable-next-line @typescript-eslint/no-inferrable-types\n async (loginToken: string, showError: boolean = true) => {\n log.info('Logging in...');\n setIsLoggingIn(true);\n let newLoginPromise: Promise<void> | null = null;\n try {\n newLoginPromise = client.login({ type: AUTH_TYPE, token: loginToken });\n loginPromise.current = newLoginPromise;\n await newLoginPromise;\n\n log.info('Logged in successfully');\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n storeCookieToken(loginToken);\n setIsLoggedIn(true);\n } catch (e) {\n if (loginPromise.current !== newLoginPromise) {\n return;\n }\n setIsInputRequired(true);\n if (showError) {\n log.error('Unable to login', e);\n const message =\n getErrorMessage(e) ?? 'Unable to login: Verify credentials.';\n setError(new AuthenticationError(message));\n }\n }\n setIsLoggingIn(false);\n },\n [client]\n );\n\n const cancelLogin = useCallback(() => {\n loginPromise.current = null;\n setIsLoggingIn(false);\n }, []);\n\n const onLogin = useCallback(async () => {\n log.debug('onLogin');\n\n // User logged in successfully in another tab, we should be able to read the token from the cookie and login\n const newToken = readCookieToken();\n if (isLoggedIn || isLoggingIn || newToken == null) {\n return;\n }\n\n login(newToken, false);\n }, [isLoggedIn, isLoggingIn, login]);\n const onLogout = useCallback(() => {\n storeCookieToken(null);\n }, []);\n useBroadcastLoginListener(onLogin, onLogout);\n\n useEffect(() => {\n let isCanceled = false;\n async function initialLogin(): Promise<void> {\n const initialToken = getWindowToken() ?? readCookieToken();\n clearWindowToken();\n\n if (initialToken == null) {\n setIsInputRequired(true);\n return;\n }\n\n setIsLoggingIn(true);\n try {\n await client.login({ type: AUTH_TYPE, token: initialToken });\n if (!isCanceled) {\n storeCookieToken(initialToken);\n setIsLoggedIn(true);\n setIsLoggingIn(false);\n }\n } catch (e) {\n if (!isCanceled) {\n setIsInputRequired(true);\n setIsLoggingIn(false);\n }\n }\n }\n initialLogin();\n return () => {\n isCanceled = true;\n };\n }, [client]);\n\n const handleSubmit = useCallback(() => {\n if (!isLoggingIn) {\n login(token);\n } else {\n cancelLogin();\n }\n }, [cancelLogin, isLoggingIn, login, token]);\n\n useEffect(\n function autoFocusInput() {\n inputField.current?.focus();\n },\n [inputField, isInputRequired]\n );\n\n return (\n <>\n {isLoggedIn && children}\n {isInputRequired && (\n <FadeTransition in={!isLoggedIn} mountOnEnter unmountOnExit>\n <Login logoPath={logoPath}>\n <LoginForm\n errorMessage={getErrorMessage(error)}\n isLoggingIn={isLoggingIn}\n onSubmit={handleSubmit}\n >\n <div className=\"form-group\">\n <label htmlFor=\"auth-psk-token-input\">Token</label>\n <input\n id=\"auth-psk-token-input\"\n name=\"token\"\n className=\"input-token form-control\"\n type=\"text\"\n autoComplete=\"username\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n ref={inputField}\n value={token}\n onChange={event => {\n setError(undefined);\n setToken(event.target.value);\n }}\n />\n </div>\n </LoginForm>\n </Login>\n </FadeTransition>\n )}\n <LoadingOverlay\n data-testid=\"auth-psk-loading\"\n isLoaded={isLoggedIn || isInputRequired}\n isLoading={!isLoggedIn && !isInputRequired}\n />\n </>\n );\n}\n\nconst AuthPluginPsk: AuthPlugin = {\n Component,\n isAvailable: authHandlers => authHandlers.includes(AUTH_TYPE),\n};\n\nexport default AuthPluginPsk;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthenticationError.js","names":["AuthenticationError","Error","constructor","arguments","_defineProperty"],"sources":["../src/AuthenticationError.ts"],"sourcesContent":["export class AuthenticationError extends Error {\n name = 'AuthenticationError';\n\n isAuthenticationError = true;\n}\n\nexport default AuthenticationError;\n"],"mappings":";;;AAAA,OAAO,MAAMA,mBAAmB,SAASC,KAAK,CAAC;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,eACtC,qBAAqB;IAAAA,eAAA,gCAEJ,IAAI;EAAA;AAC9B;AAEA,eAAeJ,mBAAmB"}
|
|
1
|
+
{"version":3,"file":"AuthenticationError.js","names":["AuthenticationError","Error","constructor","arguments","_defineProperty"],"sources":["../src/AuthenticationError.ts"],"sourcesContent":["export class AuthenticationError extends Error {\n name = 'AuthenticationError';\n\n isAuthenticationError = true;\n}\n\nexport default AuthenticationError;\n"],"mappings":";;;AAAA,OAAO,MAAMA,mBAAmB,SAASC,KAAK,CAAC;EAAAC,YAAA;IAAA,SAAAC,SAAA;IAAAC,eAAA,eACtC,qBAAqB;IAAAA,eAAA,gCAEJ,IAAI;EAAA;AAC9B;AAEA,eAAeJ,mBAAmB","ignoreList":[]}
|
package/dist/Login.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { RandomAreaPlotAnimation } from '@deephaven/components';
|
|
3
3
|
import "./Login.css";
|
|
4
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
5
|
export function Login(_ref) {
|
|
7
6
|
var {
|
|
8
7
|
children,
|
package/dist/Login.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Login.js","names":["React","RandomAreaPlotAnimation","jsx","_jsx","jsxs","_jsxs","Login","_ref","children","logoPath","className","src","alt","Date","getFullYear"],"sources":["../src/Login.tsx"],"sourcesContent":["import React from 'react';\nimport { RandomAreaPlotAnimation } from '@deephaven/components';\nimport './Login.scss';\n\ninterface LoginProps {\n /** What to show in the login input part of the login form. */\n children: React.ReactNode;\n\n /** Path to the custom logo, relative to document base */\n logoPath?: string;\n}\n\nexport function Login({\n children,\n logoPath = './logo.png',\n}: LoginProps): JSX.Element {\n return (\n <div className=\"login-container\">\n <RandomAreaPlotAnimation />\n <div className=\"login-box\">\n <div className=\"logo\">\n <img src={logoPath} alt=\"Deephaven Data Labs\" />\n </div>\n {children}\n <p className=\"footer\">\n © 2016-{new Date().getFullYear()} Deephaven Data Labs LLC. Patent\n Pending.\n </p>\n </div>\n </div>\n );\n}\n\nexport default Login;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,uBAAuB,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"Login.js","names":["React","RandomAreaPlotAnimation","jsx","_jsx","jsxs","_jsxs","Login","_ref","children","logoPath","className","src","alt","Date","getFullYear"],"sources":["../src/Login.tsx"],"sourcesContent":["import React from 'react';\nimport { RandomAreaPlotAnimation } from '@deephaven/components';\nimport './Login.scss';\n\ninterface LoginProps {\n /** What to show in the login input part of the login form. */\n children: React.ReactNode;\n\n /** Path to the custom logo, relative to document base */\n logoPath?: string;\n}\n\nexport function Login({\n children,\n logoPath = './logo.png',\n}: LoginProps): JSX.Element {\n return (\n <div className=\"login-container\">\n <RandomAreaPlotAnimation />\n <div className=\"login-box\">\n <div className=\"logo\">\n <img src={logoPath} alt=\"Deephaven Data Labs\" />\n </div>\n {children}\n <p className=\"footer\">\n © 2016-{new Date().getFullYear()} Deephaven Data Labs LLC. Patent\n Pending.\n </p>\n </div>\n </div>\n );\n}\n\nexport default Login;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,uBAAuB,QAAQ,uBAAuB;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAWhE,OAAO,SAASC,KAAKA,CAAAC,IAAA,EAGO;EAAA,IAHN;IACpBC,QAAQ;IACRC,QAAQ,GAAG;EACD,CAAC,GAAAF,IAAA;EACX,oBACEF,KAAA;IAAKK,SAAS,EAAC,iBAAiB;IAAAF,QAAA,gBAC9BL,IAAA,CAACF,uBAAuB,IAAE,CAAC,eAC3BI,KAAA;MAAKK,SAAS,EAAC,WAAW;MAAAF,QAAA,gBACxBL,IAAA;QAAKO,SAAS,EAAC,MAAM;QAAAF,QAAA,eACnBL,IAAA;UAAKQ,GAAG,EAAEF,QAAS;UAACG,GAAG,EAAC;QAAqB,CAAE;MAAC,CAC7C,CAAC,EACLJ,QAAQ,eACTH,KAAA;QAAGK,SAAS,EAAC,QAAQ;QAAAF,QAAA,GAAC,YACb,EAAC,IAAIK,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,EAAC,2CAEnC;MAAA,CAAG,CAAC;IAAA,CACD,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAeR,KAAK","ignoreList":[]}
|
package/dist/LoginForm.js
CHANGED
|
@@ -2,8 +2,7 @@ import { LoadingSpinner } from '@deephaven/components';
|
|
|
2
2
|
import classNames from 'classnames';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import "./LoginForm.css";
|
|
5
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
-
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
7
6
|
export function LoginForm(_ref) {
|
|
8
7
|
var {
|
|
9
8
|
children,
|
|
@@ -16,7 +15,7 @@ export function LoginForm(_ref) {
|
|
|
16
15
|
onSubmit: event => {
|
|
17
16
|
event.preventDefault();
|
|
18
17
|
event.stopPropagation();
|
|
19
|
-
_onSubmit === null || _onSubmit === void 0
|
|
18
|
+
_onSubmit === null || _onSubmit === void 0 || _onSubmit(event);
|
|
20
19
|
},
|
|
21
20
|
children: [/*#__PURE__*/_jsx("div", {
|
|
22
21
|
className: "flex-spacer"
|
package/dist/LoginForm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LoginForm.js","names":["LoadingSpinner","classNames","React","jsx","_jsx","jsxs","_jsxs","LoginForm","_ref","children","errorMessage","isLoggingIn","onSubmit","className","event","preventDefault","stopPropagation","disabled","type","role","concat"],"sources":["../src/LoginForm.tsx"],"sourcesContent":["import { LoadingSpinner } from '@deephaven/components';\nimport classNames from 'classnames';\nimport React, { type FormEventHandler } from 'react';\nimport './LoginForm.scss';\n\nexport interface LoginFormProps {\n /** What to display inside the form */\n children: React.ReactNode;\n\n /** Error message to display */\n errorMessage?: string;\n\n /** Whether currently logging in */\n isLoggingIn?: boolean;\n\n /** Triggered when the form is submitting */\n onSubmit?: FormEventHandler;\n}\n\nexport function LoginForm({\n children,\n errorMessage,\n isLoggingIn = false,\n onSubmit,\n}: LoginFormProps): JSX.Element {\n return (\n <form\n className=\"login-form\"\n onSubmit={event => {\n event.preventDefault();\n event.stopPropagation();\n onSubmit?.(event);\n }}\n >\n <div className=\"flex-spacer\" />\n <div className=\"flex-wrapper\">\n <fieldset disabled={isLoggingIn} className=\"container-fluid\">\n {children}\n </fieldset>\n <div className=\"form-group d-flex justify-content-end align-items-center mb-0\">\n <button\n type=\"submit\"\n className={classNames(\n 'btn btn-primary',\n { 'btn-spinner': isLoggingIn },\n { 'btn-cancelable': isLoggingIn }\n )}\n data-testid=\"btn-login\"\n >\n {isLoggingIn && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Logging in</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isLoggingIn && 'Login'}\n </button>\n </div>\n </div>\n <div className=\"flex-spacer\">\n {errorMessage != null && (\n <p className=\"error-message mb-0\" role=\"alert\">{`${errorMessage}`}</p>\n )}\n </div>\n </form>\n );\n}\n\nexport default LoginForm;\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,uBAAuB;AACtD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAiC,OAAO;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA
|
|
1
|
+
{"version":3,"file":"LoginForm.js","names":["LoadingSpinner","classNames","React","jsx","_jsx","jsxs","_jsxs","LoginForm","_ref","children","errorMessage","isLoggingIn","onSubmit","className","event","preventDefault","stopPropagation","disabled","type","role","concat"],"sources":["../src/LoginForm.tsx"],"sourcesContent":["import { LoadingSpinner } from '@deephaven/components';\nimport classNames from 'classnames';\nimport React, { type FormEventHandler } from 'react';\nimport './LoginForm.scss';\n\nexport interface LoginFormProps {\n /** What to display inside the form */\n children: React.ReactNode;\n\n /** Error message to display */\n errorMessage?: string;\n\n /** Whether currently logging in */\n isLoggingIn?: boolean;\n\n /** Triggered when the form is submitting */\n onSubmit?: FormEventHandler;\n}\n\nexport function LoginForm({\n children,\n errorMessage,\n isLoggingIn = false,\n onSubmit,\n}: LoginFormProps): JSX.Element {\n return (\n <form\n className=\"login-form\"\n onSubmit={event => {\n event.preventDefault();\n event.stopPropagation();\n onSubmit?.(event);\n }}\n >\n <div className=\"flex-spacer\" />\n <div className=\"flex-wrapper\">\n <fieldset disabled={isLoggingIn} className=\"container-fluid\">\n {children}\n </fieldset>\n <div className=\"form-group d-flex justify-content-end align-items-center mb-0\">\n <button\n type=\"submit\"\n className={classNames(\n 'btn btn-primary',\n { 'btn-spinner': isLoggingIn },\n { 'btn-cancelable': isLoggingIn }\n )}\n data-testid=\"btn-login\"\n >\n {isLoggingIn && (\n <span>\n <LoadingSpinner className=\"mr-2 loading-spinner-vertical-align\" />\n <span className=\"btn-normal-content\">Logging in</span>\n <span className=\"btn-hover-content\">Cancel</span>\n </span>\n )}\n {!isLoggingIn && 'Login'}\n </button>\n </div>\n </div>\n <div className=\"flex-spacer\">\n {errorMessage != null && (\n <p className=\"error-message mb-0\" role=\"alert\">{`${errorMessage}`}</p>\n )}\n </div>\n </form>\n );\n}\n\nexport default LoginForm;\n"],"mappings":"AAAA,SAASA,cAAc,QAAQ,uBAAuB;AACtD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAiC,OAAO;AAAC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBrD,OAAO,SAASC,SAASA,CAAAC,IAAA,EAKO;EAAA,IALN;IACxBC,QAAQ;IACRC,YAAY;IACZC,WAAW,GAAG,KAAK;IACnBC,QAAQ,EAARA;EACc,CAAC,GAAAJ,IAAA;EACf,oBACEF,KAAA;IACEO,SAAS,EAAC,YAAY;IACtBD,QAAQ,EAAEE,KAAK,IAAI;MACjBA,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBD,KAAK,CAACE,eAAe,CAAC,CAAC;MACvBJ,SAAQ,aAARA,SAAQ,eAARA,SAAQ,CAAGE,KAAK,CAAC;IACnB,CAAE;IAAAL,QAAA,gBAEFL,IAAA;MAAKS,SAAS,EAAC;IAAa,CAAE,CAAC,eAC/BP,KAAA;MAAKO,SAAS,EAAC,cAAc;MAAAJ,QAAA,gBAC3BL,IAAA;QAAUa,QAAQ,EAAEN,WAAY;QAACE,SAAS,EAAC,iBAAiB;QAAAJ,QAAA,EACzDA;MAAQ,CACD,CAAC,eACXL,IAAA;QAAKS,SAAS,EAAC,+DAA+D;QAAAJ,QAAA,eAC5EH,KAAA;UACEY,IAAI,EAAC,QAAQ;UACbL,SAAS,EAAEZ,UAAU,CACnB,iBAAiB,EACjB;YAAE,aAAa,EAAEU;UAAY,CAAC,EAC9B;YAAE,gBAAgB,EAAEA;UAAY,CAClC,CAAE;UACF,eAAY,WAAW;UAAAF,QAAA,GAEtBE,WAAW,iBACVL,KAAA;YAAAG,QAAA,gBACEL,IAAA,CAACJ,cAAc;cAACa,SAAS,EAAC;YAAqC,CAAE,CAAC,eAClET,IAAA;cAAMS,SAAS,EAAC,oBAAoB;cAAAJ,QAAA,EAAC;YAAU,CAAM,CAAC,eACtDL,IAAA;cAAMS,SAAS,EAAC,mBAAmB;cAAAJ,QAAA,EAAC;YAAM,CAAM,CAAC;UAAA,CAC7C,CACP,EACA,CAACE,WAAW,IAAI,OAAO;QAAA,CAClB;MAAC,CACN,CAAC;IAAA,CACH,CAAC,eACNP,IAAA;MAAKS,SAAS,EAAC,aAAa;MAAAJ,QAAA,EACzBC,YAAY,IAAI,IAAI,iBACnBN,IAAA;QAAGS,SAAS,EAAC,oBAAoB;QAACM,IAAI,EAAC,OAAO;QAAAV,QAAA,KAAAW,MAAA,CAAKV,YAAY;MAAA,CAAM;IACtE,CACE,CAAC;EAAA,CACF,CAAC;AAEX;AAEA,eAAeH,SAAS","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserContexts.d.ts","sourceRoot":"","sources":["../src/UserContexts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAE/D,eAAO,MAAM,mBAAmB,6DAAkC,CAAC;AAEnE,eAAO,MAAM,8BAA8B,mDACC,CAAC;
|
|
1
|
+
{"version":3,"file":"UserContexts.d.ts","sourceRoot":"","sources":["../src/UserContexts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAE/D,eAAO,MAAM,mBAAmB,6DAAkC,CAAC;AAEnE,eAAO,MAAM,8BAA8B,mDACC,CAAC;AAG7C,eAAO,MAAM,WAAW,sCAAmC,CAAC"}
|
package/dist/UserContexts.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createContext } from 'react';
|
|
2
2
|
export var UserOverrideContext = /*#__PURE__*/createContext({});
|
|
3
3
|
export var UserPermissionsOverrideContext = /*#__PURE__*/createContext({});
|
|
4
|
+
UserPermissionsOverrideContext.displayName = 'UserPermissionsOverrideContext';
|
|
4
5
|
export var UserContext = /*#__PURE__*/createContext(null);
|
|
6
|
+
UserContext.displayName = 'UserContext';
|
|
5
7
|
//# sourceMappingURL=UserContexts.js.map
|
package/dist/UserContexts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserContexts.js","names":["createContext","UserOverrideContext","UserPermissionsOverrideContext","UserContext"],"sources":["../src/UserContexts.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { type User, type UserPermissions } from '@deephaven/redux';\n\nexport type UserOverride = Partial<Omit<User, 'permissions'>>;\n\nexport type UserPermissionsOverride = Partial<UserPermissions>;\n\nexport const UserOverrideContext = createContext<UserOverride>({});\n\nexport const UserPermissionsOverrideContext =\n createContext<UserPermissionsOverride>({});\n\nexport const UserContext = createContext<User | null>(null);\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,OAAO;AAOrC,OAAO,IAAMC,mBAAmB,gBAAGD,aAAa,CAAe,CAAC,CAAC,CAAC;AAElE,OAAO,IAAME,8BAA8B,gBACzCF,aAAa,CAA0B,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"UserContexts.js","names":["createContext","UserOverrideContext","UserPermissionsOverrideContext","displayName","UserContext"],"sources":["../src/UserContexts.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { type User, type UserPermissions } from '@deephaven/redux';\n\nexport type UserOverride = Partial<Omit<User, 'permissions'>>;\n\nexport type UserPermissionsOverride = Partial<UserPermissions>;\n\nexport const UserOverrideContext = createContext<UserOverride>({});\n\nexport const UserPermissionsOverrideContext =\n createContext<UserPermissionsOverride>({});\nUserPermissionsOverrideContext.displayName = 'UserPermissionsOverrideContext';\n\nexport const UserContext = createContext<User | null>(null);\nUserContext.displayName = 'UserContext';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,OAAO;AAOrC,OAAO,IAAMC,mBAAmB,gBAAGD,aAAa,CAAe,CAAC,CAAC,CAAC;AAElE,OAAO,IAAME,8BAA8B,gBACzCF,aAAa,CAA0B,CAAC,CAAC,CAAC;AAC5CE,8BAA8B,CAACC,WAAW,GAAG,gCAAgC;AAE7E,OAAO,IAAMC,WAAW,gBAAGJ,aAAa,CAAc,IAAI,CAAC;AAC3DI,WAAW,CAACD,WAAW,GAAG,aAAa","ignoreList":[]}
|
package/dist/UserUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserUtils.js","names":["Log","log","module","getAppInitValue","serverConfig","key","get","concat","getUserFromConfig","_getValue","_getValue2","_getValue$split","_getValue3","overrides","arguments","length","undefined","permissionsOverrides","getValue","getBooleanValue","defaultValue","value","warn","name","operateAs","groups","split","canCopy","canDownloadCsv","canUsePanels","canLogout","_objectSpread","permissions","getUser"],"sources":["../src/UserUtils.ts"],"sourcesContent":["import { type User, type UserPermissions } from '@deephaven/redux';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('UserUtils');\n\n/**\n * Retrieve a value from the AppInit config\n * @param serverConfig Server config map\n * @param key The AppInit key to retrieve\n * @returns The value for the AppInit key\n */\nexport function getAppInitValue(\n serverConfig: Map<string, string>,\n key: string\n): string | undefined {\n return serverConfig.get(`internal.webClient.appInit.${key}`);\n}\n\n/**\n * Retrieve a user object provided the server config and overrides\n * @param serverConfig Server config map\n * @param overrides Override values for the user\n * @param permissionsOverrides Override specific permissions for the user\n * @returns The user object\n */\nexport function getUserFromConfig(\n serverConfig: Map<string, string>,\n overrides: Partial<Omit<User, 'permissions'>> = {},\n permissionsOverrides: Partial<UserPermissions> = {}\n): User {\n function getValue(key: string): string | undefined {\n return getAppInitValue(serverConfig, key);\n }\n function getBooleanValue(key: string, defaultValue: boolean): boolean {\n const value = getValue(key);\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value !== undefined) {\n log.warn(`Unexpected value for ${key}: ${value}`);\n }\n return defaultValue;\n }\n const name = getValue('name') ?? '';\n const operateAs = getValue('operateAs') ?? name;\n const groups = getValue('groups')?.split(',') ?? [];\n const canCopy = getBooleanValue('canCopy', true);\n const canDownloadCsv = getBooleanValue('canDownloadCsv', true);\n const canUsePanels = getBooleanValue('canUsePanels', true);\n const canLogout = getBooleanValue('canLogout', true);\n\n return {\n name,\n operateAs,\n groups,\n ...overrides,\n permissions: {\n canUsePanels,\n canCopy,\n canDownloadCsv,\n canLogout,\n ...permissionsOverrides,\n },\n };\n}\n\nexport default { getAppInitValue, getUser: getUserFromConfig };\n"],"mappings":";;;;;AACA,OAAOA,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,WAAW,CAAC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,YAAiC,EACjCC,GAAW,EACS;EACpB,OAAOD,YAAY,CAACE,GAAG,+BAAAC,MAAA,CAA+BF,GAAG,CAAE,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,iBAAiBA,CAC/BJ,YAAiC,EAG3B;EAAA,IAAAK,SAAA,EAAAC,UAAA,EAAAC,eAAA,EAAAC,UAAA;EAAA,IAFNC,SAA6C,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAAA,IAClDG,oBAA8C,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEnD,SAASI,QAAQA,CAACb,GAAW,EAAsB;IACjD,OAAOF,eAAe,CAACC,YAAY,EAAEC,GAAG,CAAC;EAC3C;EACA,SAASc,eAAeA,CAACd,GAAW,EAAEe,YAAqB,EAAW;IACpE,IAAMC,KAAK,GAAGH,QAAQ,CAACb,GAAG,CAAC;IAC3B,IAAIgB,KAAK,KAAK,MAAM,EAAE;MACpB,OAAO,IAAI;IACb;IACA,IAAIA,KAAK,KAAK,OAAO,EAAE;MACrB,OAAO,KAAK;IACd;IACA,IAAIA,KAAK,KAAKL,SAAS,EAAE;MACvBf,GAAG,CAACqB,IAAI,yBAAAf,MAAA,CAAyBF,GAAG,QAAAE,MAAA,CAAKc,KAAK,CAAE,CAAC;IACnD;IACA,OAAOD,YAAY;EACrB;EACA,IAAMG,IAAI,IAAAd,SAAA,GAAGS,QAAQ,CAAC,MAAM,CAAC,cAAAT,SAAA,cAAAA,SAAA,GAAI,EAAE;EACnC,IAAMe,SAAS,IAAAd,UAAA,GAAGQ,QAAQ,CAAC,WAAW,CAAC,cAAAR,UAAA,cAAAA,UAAA,GAAIa,IAAI;EAC/C,IAAME,MAAM,IAAAd,eAAA,IAAAC,UAAA,GAAGM,QAAQ,CAAC,QAAQ,CAAC,cAAAN,UAAA,uBAAlBA,UAAA,CAAoBc,KAAK,CAAC,GAAG,CAAC,cAAAf,eAAA,cAAAA,eAAA,GAAI,EAAE;EACnD,IAAMgB,OAAO,GAAGR,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC;EAChD,IAAMS,cAAc,GAAGT,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC;EAC9D,IAAMU,YAAY,GAAGV,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;EAC1D,IAAMW,SAAS,GAAGX,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;EAEpD,OAAAY,aAAA,CAAAA,aAAA;IACER,IAAI;IACJC,SAAS;IACTC;EAAM,GACHZ,SAAS;IACZmB,WAAW,EAAAD,aAAA;MACTF,YAAY;MACZF,OAAO;MACPC,cAAc;MACdE;IAAS,GACNb,oBAAoB;EACxB;AAEL;AAEA,eAAe;EAAEd,eAAe;EAAE8B,OAAO,EAAEzB;AAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"UserUtils.js","names":["Log","log","module","getAppInitValue","serverConfig","key","get","concat","getUserFromConfig","_getValue","_getValue2","_getValue$split","_getValue3","overrides","arguments","length","undefined","permissionsOverrides","getValue","getBooleanValue","defaultValue","value","warn","name","operateAs","groups","split","canCopy","canDownloadCsv","canUsePanels","canLogout","_objectSpread","permissions","getUser"],"sources":["../src/UserUtils.ts"],"sourcesContent":["import { type User, type UserPermissions } from '@deephaven/redux';\nimport Log from '@deephaven/log';\n\nconst log = Log.module('UserUtils');\n\n/**\n * Retrieve a value from the AppInit config\n * @param serverConfig Server config map\n * @param key The AppInit key to retrieve\n * @returns The value for the AppInit key\n */\nexport function getAppInitValue(\n serverConfig: Map<string, string>,\n key: string\n): string | undefined {\n return serverConfig.get(`internal.webClient.appInit.${key}`);\n}\n\n/**\n * Retrieve a user object provided the server config and overrides\n * @param serverConfig Server config map\n * @param overrides Override values for the user\n * @param permissionsOverrides Override specific permissions for the user\n * @returns The user object\n */\nexport function getUserFromConfig(\n serverConfig: Map<string, string>,\n overrides: Partial<Omit<User, 'permissions'>> = {},\n permissionsOverrides: Partial<UserPermissions> = {}\n): User {\n function getValue(key: string): string | undefined {\n return getAppInitValue(serverConfig, key);\n }\n function getBooleanValue(key: string, defaultValue: boolean): boolean {\n const value = getValue(key);\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value !== undefined) {\n log.warn(`Unexpected value for ${key}: ${value}`);\n }\n return defaultValue;\n }\n const name = getValue('name') ?? '';\n const operateAs = getValue('operateAs') ?? name;\n const groups = getValue('groups')?.split(',') ?? [];\n const canCopy = getBooleanValue('canCopy', true);\n const canDownloadCsv = getBooleanValue('canDownloadCsv', true);\n const canUsePanels = getBooleanValue('canUsePanels', true);\n const canLogout = getBooleanValue('canLogout', true);\n\n return {\n name,\n operateAs,\n groups,\n ...overrides,\n permissions: {\n canUsePanels,\n canCopy,\n canDownloadCsv,\n canLogout,\n ...permissionsOverrides,\n },\n };\n}\n\nexport default { getAppInitValue, getUser: getUserFromConfig };\n"],"mappings":";;;;;AACA,OAAOA,GAAG,MAAM,gBAAgB;AAEhC,IAAMC,GAAG,GAAGD,GAAG,CAACE,MAAM,CAAC,WAAW,CAAC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,YAAiC,EACjCC,GAAW,EACS;EACpB,OAAOD,YAAY,CAACE,GAAG,+BAAAC,MAAA,CAA+BF,GAAG,CAAE,CAAC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,iBAAiBA,CAC/BJ,YAAiC,EAG3B;EAAA,IAAAK,SAAA,EAAAC,UAAA,EAAAC,eAAA,EAAAC,UAAA;EAAA,IAFNC,SAA6C,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAAA,IAClDG,oBAA8C,GAAAH,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAEnD,SAASI,QAAQA,CAACb,GAAW,EAAsB;IACjD,OAAOF,eAAe,CAACC,YAAY,EAAEC,GAAG,CAAC;EAC3C;EACA,SAASc,eAAeA,CAACd,GAAW,EAAEe,YAAqB,EAAW;IACpE,IAAMC,KAAK,GAAGH,QAAQ,CAACb,GAAG,CAAC;IAC3B,IAAIgB,KAAK,KAAK,MAAM,EAAE;MACpB,OAAO,IAAI;IACb;IACA,IAAIA,KAAK,KAAK,OAAO,EAAE;MACrB,OAAO,KAAK;IACd;IACA,IAAIA,KAAK,KAAKL,SAAS,EAAE;MACvBf,GAAG,CAACqB,IAAI,yBAAAf,MAAA,CAAyBF,GAAG,QAAAE,MAAA,CAAKc,KAAK,CAAE,CAAC;IACnD;IACA,OAAOD,YAAY;EACrB;EACA,IAAMG,IAAI,IAAAd,SAAA,GAAGS,QAAQ,CAAC,MAAM,CAAC,cAAAT,SAAA,cAAAA,SAAA,GAAI,EAAE;EACnC,IAAMe,SAAS,IAAAd,UAAA,GAAGQ,QAAQ,CAAC,WAAW,CAAC,cAAAR,UAAA,cAAAA,UAAA,GAAIa,IAAI;EAC/C,IAAME,MAAM,IAAAd,eAAA,IAAAC,UAAA,GAAGM,QAAQ,CAAC,QAAQ,CAAC,cAAAN,UAAA,uBAAlBA,UAAA,CAAoBc,KAAK,CAAC,GAAG,CAAC,cAAAf,eAAA,cAAAA,eAAA,GAAI,EAAE;EACnD,IAAMgB,OAAO,GAAGR,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC;EAChD,IAAMS,cAAc,GAAGT,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC;EAC9D,IAAMU,YAAY,GAAGV,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC;EAC1D,IAAMW,SAAS,GAAGX,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;EAEpD,OAAAY,aAAA,CAAAA,aAAA;IACER,IAAI;IACJC,SAAS;IACTC;EAAM,GACHZ,SAAS;IACZmB,WAAW,EAAAD,aAAA;MACTF,YAAY;MACZF,OAAO;MACPC,cAAc;MACdE;IAAS,GACNb,oBAAoB;EACxB;AAEL;AAEA,eAAe;EAAEd,eAAe;EAAE8B,OAAO,EAAEzB;AAAkB,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declarations.d.js","names":[],"sources":["../src/declarations.d.ts"],"sourcesContent":["declare module '*.png';\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"declarations.d.js","names":[],"sources":["../src/declarations.d.ts"],"sourcesContent":["declare module '*.png';\n"],"mappings":"","ignoreList":[]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["default","AuthPluginAnonymous","AuthPluginBase","AuthPluginParent","AuthPluginPsk"],"sources":["../src/index.ts"],"sourcesContent":["export * from './AuthPlugin';\nexport * from './AuthHandlerTypes';\nexport { default as AuthPluginAnonymous } from './AuthPluginAnonymous';\nexport { default as AuthPluginBase } from './AuthPluginBase';\nexport { default as AuthPluginParent } from './AuthPluginParent';\nexport { default as AuthPluginPsk } from './AuthPluginPsk';\nexport * from './Login';\nexport * from './LoginForm';\nexport * from './UserUtils';\nexport * from './UserContexts';\n"],"mappings":";;SAESA,OAAO,IAAIC,mBAAmB;AAAA,SAC9BD,OAAO,IAAIE,cAAc;AAAA,SACzBF,OAAO,IAAIG,gBAAgB;AAAA,SAC3BH,OAAO,IAAII,aAAa;AAAA;AAAA;AAAA;AAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["default","AuthPluginAnonymous","AuthPluginBase","AuthPluginParent","AuthPluginPsk"],"sources":["../src/index.ts"],"sourcesContent":["export * from './AuthPlugin';\nexport * from './AuthHandlerTypes';\nexport { default as AuthPluginAnonymous } from './AuthPluginAnonymous';\nexport { default as AuthPluginBase } from './AuthPluginBase';\nexport { default as AuthPluginParent } from './AuthPluginParent';\nexport { default as AuthPluginPsk } from './AuthPluginPsk';\nexport * from './Login';\nexport * from './LoginForm';\nexport * from './UserUtils';\nexport * from './UserContexts';\n"],"mappings":";;SAESA,OAAO,IAAIC,mBAAmB;AAAA,SAC9BD,OAAO,IAAIE,cAAc;AAAA,SACzBF,OAAO,IAAIG,gBAAgB;AAAA,SAC3BH,OAAO,IAAII,aAAa;AAAA;AAAA;AAAA;AAAA","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deephaven/auth-plugins",
|
|
3
|
-
"version": "1.4.1-
|
|
3
|
+
"version": "1.4.1-react19.43+f9a21bd4",
|
|
4
4
|
"description": "Deephaven Auth Plugins",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Deephaven",
|
|
@@ -33,20 +33,19 @@
|
|
|
33
33
|
"build:sass": "sass --embed-sources --load-path=../../node_modules ./src:./dist"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@deephaven/components": "^1.4.1-
|
|
37
|
-
"@deephaven/jsapi-bootstrap": "^1.4.1-
|
|
38
|
-
"@deephaven/jsapi-components": "^1.4.1-
|
|
36
|
+
"@deephaven/components": "^1.4.1-react19.43+f9a21bd4",
|
|
37
|
+
"@deephaven/jsapi-bootstrap": "^1.4.1-react19.43+f9a21bd4",
|
|
38
|
+
"@deephaven/jsapi-components": "^1.4.1-react19.43+f9a21bd4",
|
|
39
39
|
"@deephaven/jsapi-types": "^1.0.0-dev0.39.4",
|
|
40
|
-
"@deephaven/jsapi-utils": "^1.4.1-
|
|
41
|
-
"@deephaven/log": "^1.4.1-
|
|
42
|
-
"@deephaven/redux": "^1.4.1-
|
|
43
|
-
"@deephaven/utils": "^1.4.1-
|
|
40
|
+
"@deephaven/jsapi-utils": "^1.4.1-react19.43+f9a21bd4",
|
|
41
|
+
"@deephaven/log": "^1.4.1-react19.43+f9a21bd4",
|
|
42
|
+
"@deephaven/redux": "^1.4.1-react19.43+f9a21bd4",
|
|
43
|
+
"@deephaven/utils": "^1.4.1-react19.43+f9a21bd4",
|
|
44
44
|
"classnames": "^2.3.1",
|
|
45
45
|
"js-cookie": "^3.0.5"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@deephaven/test-utils": "^1.4.1-
|
|
49
|
-
"@types/react": "^17.0.2"
|
|
48
|
+
"@deephaven/test-utils": "^1.4.1-react19.43+f9a21bd4"
|
|
50
49
|
},
|
|
51
50
|
"peerDependencies": {
|
|
52
51
|
"react": ">=16.8.0",
|
|
@@ -59,5 +58,5 @@
|
|
|
59
58
|
"publishConfig": {
|
|
60
59
|
"access": "public"
|
|
61
60
|
},
|
|
62
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "f9a21bd44f32c4357db62f2b9a8eaecedde0e446"
|
|
63
62
|
}
|