@corva/ui 3.78.0-17 → 3.78.0-19
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/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js +1 -1
- package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js.map +1 -1
- package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.d.ts.map +1 -1
- package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js +1 -1
- package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js.map +1 -1
- package/mcp-server/server.mjs +102 -71
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/cjs-bundle/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),s=require("@babel/runtime/helpers/objectWithoutProperties"),o=require("@material-ui/core"),i=require("classnames"),n=require("moment-timezone"),r=require("prop-types"),c=require("react"),t=require("react-router-dom"),u=require("./constants.js"),a=require("./effects/useXProps.js"),l=require("./utils/dashboardCapturing.js"),m=require("./utils/replaceUndefinedValuesWithNull.js"),p=require("../../../CLI/hocs/constants.js"),j=require("../../../CLI/hocs/utils.js");require("@babel/runtime/helpers/toConsumableArray"),require("lodash/set"),require("lodash/get"),require("lodash/unset"),require("moment"),require("../../../clients/jsonApi/index.js"),require("../../../clients/subscriptions/subscriptions-client.factory.js"),require("../../../clients/api/apiCore.js"),require("../../../clients/constants.js"),require("../../../clients/sso/auth0.js"),require("../../../clients/sso/oauth2.js");var q=require("../../../clients/api/rateLimiter.js"),d=require("../AppContext.js"),I=require("../DevCenterAppContainer/DevCenterAppContainer.js"),f=require("../DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js"),C=require("../../../constants/theme.js"),h=require("../../../hocs/withMUIProvidersHOC.js");require("../../../hocs/withAssetEditorLockHOC.js"),require("@icon-park/react/es/all");var b=require("react/jsx-runtime"),g=require("../../../icons/IconParkProvider.js");require("../../../icons/customIcons/icons/AddMessage.js"),require("../../../icons/customIcons/icons/DragOne.js"),require("../../../icons/customIcons/icons/Attention.js"),require("../../../icons/customIcons/icons/Collapse.js"),require("../../../icons/customIcons/icons/Dashboard.js"),require("../../../icons/customIcons/icons/Expand.js"),require("../../../icons/customIcons/icons/FolderClosed.js"),require("../../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../../icons/customIcons/icons/FolderOpened.js"),require("../../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../../icons/customIcons/icons/LessOrEqual.js"),require("../../../icons/customIcons/icons/Search.js"),require("../../../icons/customIcons/icons/SearchOne.js"),require("../../../icons/customIcons/icons/Wellhub.js"),require("../../../icons/customIcons/icons/MultiRuler.js"),require("../../../icons/customIcons/icons/Checkbox.js"),require("../../../icons/customIcons/icons/CheckboxChecked.js"),require("../../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../../icons/customIcons/icons/Radio.js"),require("../../../icons/customIcons/icons/RadioChecked.js"),require("../../../icons/customIcons/icons/SimulFrac.js"),require("../../../icons/customIcons/icons/ZipperFrac.js"),require("../../../icons/customIcons/icons/CautionFilled.js"),require("../../../icons/customIcons/icons/InfoRounded.js"),require("../../../icons/customIcons/icons/FlameFilled.js"),require("../../../icons/customIcons/icons/MoreApp.js"),require("../../../icons/customIcons/icons/Pad.js"),require("../../../icons/customIcons/icons/DrilloutUnit.js"),require("../../../icons/customIcons/icons/FracFleet.js"),require("../../../icons/customIcons/icons/Global.js"),require("../../../icons/customIcons/icons/Program.js"),require("../../../icons/customIcons/icons/Rig.js"),require("../../../icons/customIcons/icons/Well.js"),require("../../../icons/customIcons/icons/Gap.js"),require("../../../icons/customIcons/icons/Pin.js"),require("../../../icons/customIcons/icons/PinOne.js"),require("../../../icons/customIcons/icons/PinOneCrossed.js"),require("../../../icons/customIcons/icons/CloseOneFilled.js"),require("../../../icons/customIcons/icons/AttentionFilled.js"),require("../../../icons/customIcons/icons/CheckOneFilled.js"),require("../../../icons/customIcons/icons/Archive.js"),require("../../../icons/customIcons/icons/ArchiveCancel.js"),require("../../../icons/customIcons/icons/Unarchive.js"),require("../../../icons/customIcons/icons/Archived.js"),require("../../../icons/customIcons/icons/InterventionUnit.js"),require("../../../icons/customIcons/icons/CloudDelete.js"),require("../../../icons/customIcons/icons/Lasso.js"),require("../../../icons/customIcons/icons/Radius.js"),require("../../../icons/customIcons/icons/ErrorOps.js"),require("../../../icons/customIcons/icons/DataTypeOps.js"),require("../../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../../icons/customIcons/icons/CalibrationOps.js"),require("../../../icons/customIcons/icons/CriticalOps.js"),require("../../../icons/customIcons/icons/Company.js"),require("../../../icons/customIcons/icons/ArchiveOne.js"),require("../../../icons/customIcons/icons/ParseBotFusion.js"),require("../../../icons/customIcons/icons/Connect.js"),require("../../../icons/customIcons/icons/PuzzleOne.js"),require("../../../icons/customIcons/icons/Feed.js"),require("../../../icons/customIcons/icons/Prompt.js"),require("../../../icons/customIcons/icons/Companies.js"),require("../../../icons/customIcons/icons/ClipboardAi.js"),require("../../../icons/customIcons/icons/Key.js"),require("../../../icons/customIcons/icons/AtSignCrossed.js"),require("../../../icons/customIcons/icons/MappingManual.js"),require("../../../icons/customIcons/icons/Mapping.js"),require("../../../icons/customIcons/icons/Metrics.js"),require("../../../icons/customIcons/icons/Drops.js"),require("../../../icons/customIcons/icons/ClipboardSearch.js"),require("../../../icons/customIcons/icons/Template.js"),require("../../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../../icons/customIcons/icons/UnitConversion.js"),require("../../../icons/customIcons/icons/NPT.js"),require("../../../icons/customIcons/icons/GuidedFrac.js");var v=require("../../../permissions/PermissionsContext.js");require("../../../styles/iconPark.global.css.js"),require("../../../styles/index.global.css.js"),require("../../../styles/reactVirtualized.global.css.js"),require("../../../styles/emojiMart.global.css.js"),require("../../../styles/mapbox.global.css.js"),require("../../../styles/lightbox.global.css.js"),require("../../../styles/generatedThemesVariables.global.css.js"),require("../../../styles/customScrollbars.global.css.js");var P=require("../../../utils/index.js"),A=require("../../../utils/themeVariables.js");function O(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=O(e),E=O(s),x=O(i),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),s=require("@babel/runtime/helpers/objectWithoutProperties"),o=require("@material-ui/core"),i=require("classnames"),n=require("moment-timezone"),r=require("prop-types"),c=require("react"),t=require("react-router-dom"),u=require("./constants.js"),a=require("./effects/useXProps.js"),l=require("./utils/dashboardCapturing.js"),m=require("./utils/replaceUndefinedValuesWithNull.js"),p=require("../../../CLI/hocs/constants.js"),j=require("../../../CLI/hocs/utils.js");require("@babel/runtime/helpers/toConsumableArray"),require("lodash/set"),require("lodash/get"),require("lodash/unset"),require("moment"),require("../../../clients/jsonApi/index.js"),require("../../../clients/subscriptions/subscriptions-client.factory.js"),require("../../../clients/api/apiCore.js"),require("../../../clients/constants.js"),require("../../../clients/sso/auth0.js"),require("../../../clients/sso/oauth2.js");var q=require("../../../clients/api/rateLimiter.js"),d=require("../AppContext.js"),I=require("../DevCenterAppContainer/DevCenterAppContainer.js"),f=require("../DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js"),C=require("../../../constants/theme.js"),h=require("../../../hocs/withMUIProvidersHOC.js");require("../../../hocs/withAssetEditorLockHOC.js"),require("@icon-park/react/es/all");var b=require("react/jsx-runtime"),g=require("../../../icons/IconParkProvider.js");require("../../../icons/customIcons/icons/AddMessage.js"),require("../../../icons/customIcons/icons/DragOne.js"),require("../../../icons/customIcons/icons/Attention.js"),require("../../../icons/customIcons/icons/Collapse.js"),require("../../../icons/customIcons/icons/Dashboard.js"),require("../../../icons/customIcons/icons/Expand.js"),require("../../../icons/customIcons/icons/FolderClosed.js"),require("../../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../../icons/customIcons/icons/FolderOpened.js"),require("../../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../../icons/customIcons/icons/LessOrEqual.js"),require("../../../icons/customIcons/icons/Search.js"),require("../../../icons/customIcons/icons/SearchOne.js"),require("../../../icons/customIcons/icons/Wellhub.js"),require("../../../icons/customIcons/icons/MultiRuler.js"),require("../../../icons/customIcons/icons/Checkbox.js"),require("../../../icons/customIcons/icons/CheckboxChecked.js"),require("../../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../../icons/customIcons/icons/Radio.js"),require("../../../icons/customIcons/icons/RadioChecked.js"),require("../../../icons/customIcons/icons/SimulFrac.js"),require("../../../icons/customIcons/icons/ZipperFrac.js"),require("../../../icons/customIcons/icons/CautionFilled.js"),require("../../../icons/customIcons/icons/InfoRounded.js"),require("../../../icons/customIcons/icons/FlameFilled.js"),require("../../../icons/customIcons/icons/MoreApp.js"),require("../../../icons/customIcons/icons/Pad.js"),require("../../../icons/customIcons/icons/DrilloutUnit.js"),require("../../../icons/customIcons/icons/FracFleet.js"),require("../../../icons/customIcons/icons/Global.js"),require("../../../icons/customIcons/icons/Program.js"),require("../../../icons/customIcons/icons/Rig.js"),require("../../../icons/customIcons/icons/Well.js"),require("../../../icons/customIcons/icons/Gap.js"),require("../../../icons/customIcons/icons/Pin.js"),require("../../../icons/customIcons/icons/PinOne.js"),require("../../../icons/customIcons/icons/PinOneCrossed.js"),require("../../../icons/customIcons/icons/CloseOneFilled.js"),require("../../../icons/customIcons/icons/AttentionFilled.js"),require("../../../icons/customIcons/icons/CheckOneFilled.js"),require("../../../icons/customIcons/icons/Archive.js"),require("../../../icons/customIcons/icons/ArchiveCancel.js"),require("../../../icons/customIcons/icons/Unarchive.js"),require("../../../icons/customIcons/icons/Archived.js"),require("../../../icons/customIcons/icons/InterventionUnit.js"),require("../../../icons/customIcons/icons/CloudDelete.js"),require("../../../icons/customIcons/icons/Lasso.js"),require("../../../icons/customIcons/icons/Radius.js"),require("../../../icons/customIcons/icons/ErrorOps.js"),require("../../../icons/customIcons/icons/DataTypeOps.js"),require("../../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../../icons/customIcons/icons/CalibrationOps.js"),require("../../../icons/customIcons/icons/CriticalOps.js"),require("../../../icons/customIcons/icons/Company.js"),require("../../../icons/customIcons/icons/ArchiveOne.js"),require("../../../icons/customIcons/icons/ParseBotFusion.js"),require("../../../icons/customIcons/icons/Connect.js"),require("../../../icons/customIcons/icons/PuzzleOne.js"),require("../../../icons/customIcons/icons/Feed.js"),require("../../../icons/customIcons/icons/Prompt.js"),require("../../../icons/customIcons/icons/Companies.js"),require("../../../icons/customIcons/icons/ClipboardAi.js"),require("../../../icons/customIcons/icons/Key.js"),require("../../../icons/customIcons/icons/AtSignCrossed.js"),require("../../../icons/customIcons/icons/MappingManual.js"),require("../../../icons/customIcons/icons/Mapping.js"),require("../../../icons/customIcons/icons/Metrics.js"),require("../../../icons/customIcons/icons/Drops.js"),require("../../../icons/customIcons/icons/ClipboardSearch.js"),require("../../../icons/customIcons/icons/Template.js"),require("../../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../../icons/customIcons/icons/UnitConversion.js"),require("../../../icons/customIcons/icons/NPT.js"),require("../../../icons/customIcons/icons/GuidedFrac.js");var v=require("../../../permissions/PermissionsContext.js");require("../../../styles/iconPark.global.css.js"),require("../../../styles/index.global.css.js"),require("../../../styles/reactVirtualized.global.css.js"),require("../../../styles/emojiMart.global.css.js"),require("../../../styles/mapbox.global.css.js"),require("../../../styles/lightbox.global.css.js"),require("../../../styles/generatedThemesVariables.global.css.js"),require("../../../styles/customScrollbars.global.css.js");var P=require("../../../utils/index.js"),A=require("../../../utils/themeVariables.js");function O(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=O(e),E=O(s),x=O(i),S=O(n),L=O(r),D=["appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException"];function R(e,s){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);s&&(i=i.filter((function(s){return Object.getOwnPropertyDescriptor(e,s).enumerable}))),o.push.apply(o,i)}return o}function T(e){for(var s=1;s<arguments.length;s++){var o=null!=arguments[s]?arguments[s]:{};s%2?R(Object(o),!0).forEach((function(s){y.default(e,s,o[s])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):R(Object(o)).forEach((function(s){Object.defineProperty(e,s,Object.getOwnPropertyDescriptor(o,s))}))}return e}var w=h(I),M=o.makeStyles((function(){return{"@global":{body:{backgroundColor:"transparent",overflow:"hidden"}}}}));function k(e){var s,o,i,n,r,I,h=e.CLIAppComponent,O=void 0===h?null:h,y=e.CLIAppSettings,L=void 0===y?null:y,R=e.containerReportClassName,k=void 0===R?null:R;M();var F=a.useXProps(),U=F.appContextValue,V=F.globalMixpanelEventTracker,H=F.globalNotificationToastsAPI,N=F.onSettingChange,_=F.onSettingsChange,z=F.permissionsContextValue,G=F.timezone,W=F.userUnits,K=F.trackApiRateLimiterException,B=E.default(F,D),X=B.location.pathname.startsWith("/reports/")||j.isPDFReportView,Y=new URLSearchParams(B.location.search).get("printTheme"),Z=null==B||null===(s=B.app)||void 0===s?void 0:s.id,J=localStorage.getItem(p.LOCAL_STORAGE_APP_THEME_KEY)||(null===(o=B.currentUser)||void 0===o||null===(i=o.settings)||void 0===i||null===(n=i.uiSettings)||void 0===n?void 0:n.theme)||C.THEMES.DARK,Q=X?Y===C.THEMES.DARK:J!==C.THEMES.LIGHT;return c.useLayoutEffect((function(){A.setThemeVariables(Q)}),[Q]),c.useLayoutEffect((function(){W&&P.updateUserUnits({userUnits:W})}),[W]),c.useLayoutEffect((function(){return G&&S.default.tz.setDefault(G),function(){return S.default.tz.setDefault(null)}}),[G]),c.useEffect((function(){window[Symbol.for("notificationToasts")]=H,window[Symbol.for("logToMixpanel")]=V,window[Symbol.for("corvaAPI.rateLimiterReport")]=K}),[H,V,K]),c.useEffect((function(){q.apiRequestsRateLimiter.updateConfig(B.apiRateLimiterConfig)}),[B.apiRateLimiterConfig]),c.useEffect((function(){var e=l.getDashboardCapturingHandler(Z);return window.addEventListener("message",e),function(){return window.removeEventListener("message",e)}}),[Z]),b.jsx(t.MemoryRouter,{initialEntries:[((null===(r=B.location)||void 0===r?void 0:r.pathname)||"/")+((null===(I=B.location)||void 0===I?void 0:I.search)||"")],children:b.jsx(v.PermissionsContext.Provider,{value:z,children:b.jsx(d.Provider,{value:U,children:b.jsx(f.IsInsideIsolatedDcAppProvider,{value:!0,children:b.jsx(g.IconParkProvider,{children:b.jsx("div",{id:u.ISOLATED_PAGE_APP_CONTAINER_ID,className:x.default(X&&k),children:b.jsx(w,T(T({},B),{},{theme:Q?C.THEMES.DARK:C.THEMES.LIGHT,onSettingsChange:function(e){return _(m.replaceUndefinedValuesWithNull(e))},onSettingChange:function(e,s){return N(e,m.replaceUndefinedValuesWithNull(s))},CLIAppComponent:O,CLIAppSettings:L,trackApiRateLimiterException:K}))})})})})})})}k.propTypes={CLIAppComponent:L.default.func,CLIAppSettings:L.default.func,containerReportClassName:L.default.string},exports.DevCenterIsolatedAppPage=k;
|
|
2
2
|
//# sourceMappingURL=DevCenterIsolatedAppPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevCenterIsolatedAppPage.js","sources":["../../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"sourcesContent":["import { makeStyles } from '@material-ui/core';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport PropTypes from 'prop-types';\nimport { useEffect, useLayoutEffect } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\nimport { useXProps } from './effects/useXProps';\nimport { getDashboardCapturingHandler } from './utils/dashboardCapturing';\nimport { replaceUndefinedValuesWithNull } from './utils/replaceUndefinedValuesWithNull';\n\nimport { LOCAL_STORAGE_APP_THEME_KEY } from '~/CLI/hocs/constants';\nimport { isPDFReportView } from '~/CLI/hocs/utils';\nimport { apiRequestsRateLimiter } from '~/clients';\nimport AppContext from '~/components/DevCenter/AppContext';\nimport DevCenterAppContainer from '~/components/DevCenter/DevCenterAppContainer';\nimport { IsInsideIsolatedDcAppProvider } from '~/components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { THEMES } from '~/constants/theme';\nimport { withMUIProvidersHOC } from '~/hocs';\nimport { IconParkProvider } from '~/icons';\nimport { PermissionsContext } from '~/permissions/PermissionsContext';\nimport '~/styles/globalStyles';\nimport { updateUserUnits } from '~/utils';\nimport { setThemeVariables } from '~/utils/themeVariables';\n\nconst DevCenterAppContainerWithMUI = withMUIProvidersHOC(DevCenterAppContainer);\n\n/**\n * It's important to keep these global styles in js, to apply only\n * when the component is actually used, if moved to CSS - they'll be\n * applied to whatever somehow imports the code\n */\nconst useStyles = makeStyles(() => ({\n '@global': {\n body: {\n backgroundColor: 'transparent',\n overflow: 'hidden',\n },\n },\n}));\n\n/**\n * Root component that is rendered inside of app's iframe.\n * Receives CLIAppComponent, CLIAppSettings when used\n * in local development\n */\nexport function DevCenterIsolatedAppPage({\n CLIAppComponent = null,\n CLIAppSettings = null,\n containerReportClassName = null,\n}) {\n useStyles();\n\n const {\n appContextValue,\n globalMixpanelEventTracker,\n globalNotificationToastsAPI,\n onSettingChange,\n onSettingsChange,\n permissionsContextValue,\n timezone,\n userUnits,\n trackApiRateLimiterException,\n ...xProps\n } = useXProps();\n const isReportsPage = xProps.location.pathname.startsWith('/reports/') || isPDFReportView;\n const appId = xProps?.app?.id;\n\n // Force light theme for PDF reports view\n const selectedTheme =\n localStorage.getItem(LOCAL_STORAGE_APP_THEME_KEY) ||\n xProps.currentUser?.settings?.uiSettings?.theme ||\n THEMES.DARK;\n const isDarkTheme = !isReportsPage && selectedTheme !== THEMES.LIGHT;\n\n useLayoutEffect(() => {\n setThemeVariables(isDarkTheme);\n }, [isDarkTheme]);\n\n // Apply userUnits and/or timezone before paint so that the first render\n // (including PDF reports) uses the correct unit system.\n // useLayoutEffect runs synchronously after DOM mutations but before the browser paints,\n // and re-runs whenever userUnits changes — fixing the production race where the iframe mounts\n // before the parent has finished loading the dashboard's unit_system.\n useLayoutEffect(() => {\n if (userUnits) {\n updateUserUnits({ userUnits });\n }\n }, [userUnits]);\n\n useLayoutEffect(() => {\n if (timezone) {\n moment.tz.setDefault(timezone);\n }\n return () => moment.tz.setDefault(null);\n }, [timezone]);\n\n useEffect(() => {\n window[Symbol.for('notificationToasts')] = globalNotificationToastsAPI;\n window[Symbol.for('logToMixpanel')] = globalMixpanelEventTracker;\n window[Symbol.for('corvaAPI.rateLimiterReport')] = trackApiRateLimiterException;\n }, [globalNotificationToastsAPI, globalMixpanelEventTracker, trackApiRateLimiterException]);\n\n useEffect(() => {\n apiRequestsRateLimiter.updateConfig(xProps.apiRateLimiterConfig);\n }, [xProps.apiRateLimiterConfig]);\n\n useEffect(() => {\n const dashboardCapturingHandler = getDashboardCapturingHandler(appId);\n window.addEventListener('message', dashboardCapturingHandler);\n return () => window.removeEventListener('message', dashboardCapturingHandler);\n }, [appId]);\n\n return (\n <MemoryRouter\n initialEntries={[(xProps.location?.pathname || '/') + (xProps.location?.search || '')]}\n >\n <PermissionsContext.Provider value={permissionsContextValue}>\n <AppContext.Provider value={appContextValue}>\n <IsInsideIsolatedDcAppProvider value>\n <IconParkProvider>\n <div\n id={ISOLATED_PAGE_APP_CONTAINER_ID}\n className={classNames(isReportsPage && containerReportClassName)}\n >\n <DevCenterAppContainerWithMUI\n {...xProps}\n theme={isDarkTheme ? THEMES.DARK : THEMES.LIGHT}\n // zoid serializes passed arguments using JSON.stringify.\n // All undefined values are removed as they are not valid JSON values\n // so we replace undefined values with null to not drop them\n // Any future cb function that passes arbitrary objects as args\n // also should be wrapped in this mapper\n // ⚠️⚠️⚠️ When refactoring this to referentially stable callbacks, remove `useStableCallback` from\n // /src/componentsV2/AppCommonsProvider/AppCommonsProvider.tsx\n onSettingsChange={nextSettings =>\n onSettingsChange(replaceUndefinedValuesWithNull(nextSettings))\n }\n onSettingChange={(key, value) =>\n onSettingChange(key, replaceUndefinedValuesWithNull(value))\n }\n CLIAppComponent={CLIAppComponent}\n CLIAppSettings={CLIAppSettings}\n trackApiRateLimiterException={trackApiRateLimiterException}\n />\n </div>\n </IconParkProvider>\n </IsInsideIsolatedDcAppProvider>\n </AppContext.Provider>\n </PermissionsContext.Provider>\n </MemoryRouter>\n );\n}\n\nDevCenterIsolatedAppPage.propTypes = {\n CLIAppComponent: PropTypes.func,\n CLIAppSettings: PropTypes.func,\n containerReportClassName: PropTypes.string,\n};\n"],"names":["DevCenterAppContainerWithMUI","withMUIProvidersHOC","DevCenterAppContainer","useStyles","makeStyles","body","backgroundColor","overflow","DevCenterIsolatedAppPage","_ref","_xProps$app","_xProps$currentUser","_xProps$currentUser$s","_xProps$currentUser$s2","_xProps$location","_xProps$location2","_ref$CLIAppComponent","CLIAppComponent","_ref$CLIAppSettings","CLIAppSettings","_ref$containerReportC","containerReportClassName","_useXProps","useXProps","appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException","xProps","_objectWithoutProperties","_excluded","isReportsPage","location","pathname","startsWith","isPDFReportView","appId","app","id","selectedTheme","localStorage","getItem","LOCAL_STORAGE_APP_THEME_KEY","currentUser","settings","uiSettings","theme","THEMES","DARK","isDarkTheme","LIGHT","useLayoutEffect","setThemeVariables","updateUserUnits","moment","tz","setDefault","useEffect","window","Symbol","for","apiRequestsRateLimiter","updateConfig","apiRateLimiterConfig","dashboardCapturingHandler","getDashboardCapturingHandler","addEventListener","removeEventListener","_jsx","MemoryRouter","initialEntries","search","children","PermissionsContext","Provider","value","AppContext","IsInsideIsolatedDcAppProvider","IconParkProvider","jsx","ISOLATED_PAGE_APP_CONTAINER_ID","className","classNames","_objectSpread","nextSettings","replaceUndefinedValuesWithNull","key","propTypes","PropTypes","func","string"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DevCenterIsolatedAppPage.js","sources":["../../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"sourcesContent":["import { makeStyles } from '@material-ui/core';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport PropTypes from 'prop-types';\nimport { useEffect, useLayoutEffect } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\nimport { useXProps } from './effects/useXProps';\nimport { getDashboardCapturingHandler } from './utils/dashboardCapturing';\nimport { replaceUndefinedValuesWithNull } from './utils/replaceUndefinedValuesWithNull';\n\nimport { LOCAL_STORAGE_APP_THEME_KEY } from '~/CLI/hocs/constants';\nimport { isPDFReportView } from '~/CLI/hocs/utils';\nimport { apiRequestsRateLimiter } from '~/clients';\nimport AppContext from '~/components/DevCenter/AppContext';\nimport DevCenterAppContainer from '~/components/DevCenter/DevCenterAppContainer';\nimport { IsInsideIsolatedDcAppProvider } from '~/components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { THEMES } from '~/constants/theme';\nimport { withMUIProvidersHOC } from '~/hocs';\nimport { IconParkProvider } from '~/icons';\nimport { PermissionsContext } from '~/permissions/PermissionsContext';\nimport '~/styles/globalStyles';\nimport { updateUserUnits } from '~/utils';\nimport { setThemeVariables } from '~/utils/themeVariables';\n\nconst DevCenterAppContainerWithMUI = withMUIProvidersHOC(DevCenterAppContainer);\n\n/**\n * It's important to keep these global styles in js, to apply only\n * when the component is actually used, if moved to CSS - they'll be\n * applied to whatever somehow imports the code\n */\nconst useStyles = makeStyles(() => ({\n '@global': {\n body: {\n backgroundColor: 'transparent',\n overflow: 'hidden',\n },\n },\n}));\n\n/**\n * Root component that is rendered inside of app's iframe.\n * Receives CLIAppComponent, CLIAppSettings when used\n * in local development\n */\nexport function DevCenterIsolatedAppPage({\n CLIAppComponent = null,\n CLIAppSettings = null,\n containerReportClassName = null,\n}) {\n useStyles();\n\n const {\n appContextValue,\n globalMixpanelEventTracker,\n globalNotificationToastsAPI,\n onSettingChange,\n onSettingsChange,\n permissionsContextValue,\n timezone,\n userUnits,\n trackApiRateLimiterException,\n ...xProps\n } = useXProps();\n const isReportsPage = xProps.location.pathname.startsWith('/reports/') || isPDFReportView;\n const printTheme = new URLSearchParams(xProps.location.search).get('printTheme');\n const appId = xProps?.app?.id;\n\n // Reports use light theme by default unless dark mode is explicitly requested.\n const selectedTheme =\n localStorage.getItem(LOCAL_STORAGE_APP_THEME_KEY) ||\n xProps.currentUser?.settings?.uiSettings?.theme ||\n THEMES.DARK;\n const isDarkTheme = isReportsPage ? printTheme === THEMES.DARK : selectedTheme !== THEMES.LIGHT;\n\n useLayoutEffect(() => {\n setThemeVariables(isDarkTheme);\n }, [isDarkTheme]);\n\n // Apply userUnits and/or timezone before paint so that the first render\n // (including PDF reports) uses the correct unit system.\n // useLayoutEffect runs synchronously after DOM mutations but before the browser paints,\n // and re-runs whenever userUnits changes — fixing the production race where the iframe mounts\n // before the parent has finished loading the dashboard's unit_system.\n useLayoutEffect(() => {\n if (userUnits) {\n updateUserUnits({ userUnits });\n }\n }, [userUnits]);\n\n useLayoutEffect(() => {\n if (timezone) {\n moment.tz.setDefault(timezone);\n }\n return () => moment.tz.setDefault(null);\n }, [timezone]);\n\n useEffect(() => {\n window[Symbol.for('notificationToasts')] = globalNotificationToastsAPI;\n window[Symbol.for('logToMixpanel')] = globalMixpanelEventTracker;\n window[Symbol.for('corvaAPI.rateLimiterReport')] = trackApiRateLimiterException;\n }, [globalNotificationToastsAPI, globalMixpanelEventTracker, trackApiRateLimiterException]);\n\n useEffect(() => {\n apiRequestsRateLimiter.updateConfig(xProps.apiRateLimiterConfig);\n }, [xProps.apiRateLimiterConfig]);\n\n useEffect(() => {\n const dashboardCapturingHandler = getDashboardCapturingHandler(appId);\n window.addEventListener('message', dashboardCapturingHandler);\n return () => window.removeEventListener('message', dashboardCapturingHandler);\n }, [appId]);\n\n return (\n <MemoryRouter\n initialEntries={[(xProps.location?.pathname || '/') + (xProps.location?.search || '')]}\n >\n <PermissionsContext.Provider value={permissionsContextValue}>\n <AppContext.Provider value={appContextValue}>\n <IsInsideIsolatedDcAppProvider value>\n <IconParkProvider>\n <div\n id={ISOLATED_PAGE_APP_CONTAINER_ID}\n className={classNames(isReportsPage && containerReportClassName)}\n >\n <DevCenterAppContainerWithMUI\n {...xProps}\n theme={isDarkTheme ? THEMES.DARK : THEMES.LIGHT}\n // zoid serializes passed arguments using JSON.stringify.\n // All undefined values are removed as they are not valid JSON values\n // so we replace undefined values with null to not drop them\n // Any future cb function that passes arbitrary objects as args\n // also should be wrapped in this mapper\n // ⚠️⚠️⚠️ When refactoring this to referentially stable callbacks, remove `useStableCallback` from\n // /src/componentsV2/AppCommonsProvider/AppCommonsProvider.tsx\n onSettingsChange={nextSettings =>\n onSettingsChange(replaceUndefinedValuesWithNull(nextSettings))\n }\n onSettingChange={(key, value) =>\n onSettingChange(key, replaceUndefinedValuesWithNull(value))\n }\n CLIAppComponent={CLIAppComponent}\n CLIAppSettings={CLIAppSettings}\n trackApiRateLimiterException={trackApiRateLimiterException}\n />\n </div>\n </IconParkProvider>\n </IsInsideIsolatedDcAppProvider>\n </AppContext.Provider>\n </PermissionsContext.Provider>\n </MemoryRouter>\n );\n}\n\nDevCenterIsolatedAppPage.propTypes = {\n CLIAppComponent: PropTypes.func,\n CLIAppSettings: PropTypes.func,\n containerReportClassName: PropTypes.string,\n};\n"],"names":["DevCenterAppContainerWithMUI","withMUIProvidersHOC","DevCenterAppContainer","useStyles","makeStyles","body","backgroundColor","overflow","DevCenterIsolatedAppPage","_ref","_xProps$app","_xProps$currentUser","_xProps$currentUser$s","_xProps$currentUser$s2","_xProps$location","_xProps$location2","_ref$CLIAppComponent","CLIAppComponent","_ref$CLIAppSettings","CLIAppSettings","_ref$containerReportC","containerReportClassName","_useXProps","useXProps","appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException","xProps","_objectWithoutProperties","_excluded","isReportsPage","location","pathname","startsWith","isPDFReportView","printTheme","URLSearchParams","search","get","appId","app","id","selectedTheme","localStorage","getItem","LOCAL_STORAGE_APP_THEME_KEY","currentUser","settings","uiSettings","theme","THEMES","DARK","isDarkTheme","LIGHT","useLayoutEffect","setThemeVariables","updateUserUnits","moment","tz","setDefault","useEffect","window","Symbol","for","apiRequestsRateLimiter","updateConfig","apiRateLimiterConfig","dashboardCapturingHandler","getDashboardCapturingHandler","addEventListener","removeEventListener","_jsx","MemoryRouter","initialEntries","children","PermissionsContext","Provider","value","AppContext","IsInsideIsolatedDcAppProvider","IconParkProvider","jsx","ISOLATED_PAGE_APP_CONTAINER_ID","className","classNames","_objectSpread","nextSettings","replaceUndefinedValuesWithNull","key","propTypes","PropTypes","func","string"],"mappings":"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"}
|
package/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevCenterIsolatedAppPage.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,YAAY,CAAC;AAmBnC,OAAO,uBAAuB,CAAC;AAoB/B;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,eAAsB,EACtB,cAAqB,EACrB,wBAA+B,GAChC;;;;CAAA,+
|
|
1
|
+
{"version":3,"file":"DevCenterIsolatedAppPage.d.ts","sourceRoot":"","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"names":[],"mappings":"AAGA,OAAO,SAAS,MAAM,YAAY,CAAC;AAmBnC,OAAO,uBAAuB,CAAC;AAoB/B;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,eAAsB,EACtB,cAAqB,EACrB,wBAA+B,GAChC;;;;CAAA,+BAuGA;yBA3Ge,wBAAwB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/objectWithoutProperties";import{makeStyles as i}from"@material-ui/core";import n from"classnames";import t from"moment-timezone";import c from"prop-types";import{useLayoutEffect as r,useEffect as e}from"react";import{MemoryRouter as m}from"react-router-dom";import{ISOLATED_PAGE_APP_CONTAINER_ID as p}from"./constants.js";import{useXProps as a}from"./effects/useXProps.js";import{getDashboardCapturingHandler as l}from"./utils/dashboardCapturing.js";import{replaceUndefinedValuesWithNull as u}from"./utils/replaceUndefinedValuesWithNull.js";import{LOCAL_STORAGE_APP_THEME_KEY as j}from"../../../CLI/hocs/constants.js";import{isPDFReportView as I}from"../../../CLI/hocs/utils.js";import"@babel/runtime/helpers/toConsumableArray";import"lodash/set";import"lodash/get";import"lodash/unset";import"moment";import"../../../clients/jsonApi/index.js";import"../../../clients/subscriptions/subscriptions-client.factory.js";import"../../../clients/api/apiCore.js";import"../../../clients/constants.js";import"../../../clients/sso/auth0.js";import"../../../clients/sso/oauth2.js";import{apiRequestsRateLimiter as d}from"../../../clients/api/rateLimiter.js";import f from"../AppContext.js";import C from"../DevCenterAppContainer/DevCenterAppContainer.js";import{IsInsideIsolatedDcAppProvider as h}from"../DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js";import{THEMES as b}from"../../../constants/theme.js";import g from"../../../hocs/withMUIProvidersHOC.js";import"../../../hocs/withAssetEditorLockHOC.js";import"@icon-park/react/es/all";import{jsx as v}from"react/jsx-runtime";import{IconParkProvider as O}from"../../../icons/IconParkProvider.js";import"../../../icons/customIcons/icons/AddMessage.js";import"../../../icons/customIcons/icons/DragOne.js";import"../../../icons/customIcons/icons/Attention.js";import"../../../icons/customIcons/icons/Collapse.js";import"../../../icons/customIcons/icons/Dashboard.js";import"../../../icons/customIcons/icons/Expand.js";import"../../../icons/customIcons/icons/FolderClosed.js";import"../../../icons/customIcons/icons/FolderClosedFilled.js";import"../../../icons/customIcons/icons/FolderOpened.js";import"../../../icons/customIcons/icons/GreaterOrEqual.js";import"../../../icons/customIcons/icons/LessOrEqual.js";import"../../../icons/customIcons/icons/Search.js";import"../../../icons/customIcons/icons/SearchOne.js";import"../../../icons/customIcons/icons/Wellhub.js";import"../../../icons/customIcons/icons/MultiRuler.js";import"../../../icons/customIcons/icons/Checkbox.js";import"../../../icons/customIcons/icons/CheckboxChecked.js";import"../../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../../icons/customIcons/icons/Radio.js";import"../../../icons/customIcons/icons/RadioChecked.js";import"../../../icons/customIcons/icons/SimulFrac.js";import"../../../icons/customIcons/icons/ZipperFrac.js";import"../../../icons/customIcons/icons/CautionFilled.js";import"../../../icons/customIcons/icons/InfoRounded.js";import"../../../icons/customIcons/icons/FlameFilled.js";import"../../../icons/customIcons/icons/MoreApp.js";import"../../../icons/customIcons/icons/Pad.js";import"../../../icons/customIcons/icons/DrilloutUnit.js";import"../../../icons/customIcons/icons/FracFleet.js";import"../../../icons/customIcons/icons/Global.js";import"../../../icons/customIcons/icons/Program.js";import"../../../icons/customIcons/icons/Rig.js";import"../../../icons/customIcons/icons/Well.js";import"../../../icons/customIcons/icons/Gap.js";import"../../../icons/customIcons/icons/Pin.js";import"../../../icons/customIcons/icons/PinOne.js";import"../../../icons/customIcons/icons/PinOneCrossed.js";import"../../../icons/customIcons/icons/CloseOneFilled.js";import"../../../icons/customIcons/icons/AttentionFilled.js";import"../../../icons/customIcons/icons/CheckOneFilled.js";import"../../../icons/customIcons/icons/Archive.js";import"../../../icons/customIcons/icons/ArchiveCancel.js";import"../../../icons/customIcons/icons/Unarchive.js";import"../../../icons/customIcons/icons/Archived.js";import"../../../icons/customIcons/icons/InterventionUnit.js";import"../../../icons/customIcons/icons/CloudDelete.js";import"../../../icons/customIcons/icons/Lasso.js";import"../../../icons/customIcons/icons/Radius.js";import"../../../icons/customIcons/icons/ErrorOps.js";import"../../../icons/customIcons/icons/DataTypeOps.js";import"../../../icons/customIcons/icons/FalsePositiveOps.js";import"../../../icons/customIcons/icons/CalibrationOps.js";import"../../../icons/customIcons/icons/CriticalOps.js";import"../../../icons/customIcons/icons/Company.js";import"../../../icons/customIcons/icons/ArchiveOne.js";import"../../../icons/customIcons/icons/ParseBotFusion.js";import"../../../icons/customIcons/icons/Connect.js";import"../../../icons/customIcons/icons/PuzzleOne.js";import"../../../icons/customIcons/icons/Feed.js";import"../../../icons/customIcons/icons/Prompt.js";import"../../../icons/customIcons/icons/Companies.js";import"../../../icons/customIcons/icons/ClipboardAi.js";import"../../../icons/customIcons/icons/Key.js";import"../../../icons/customIcons/icons/AtSignCrossed.js";import"../../../icons/customIcons/icons/MappingManual.js";import"../../../icons/customIcons/icons/Mapping.js";import"../../../icons/customIcons/icons/Metrics.js";import"../../../icons/customIcons/icons/Drops.js";import"../../../icons/customIcons/icons/ClipboardSearch.js";import"../../../icons/customIcons/icons/Template.js";import"../../../icons/customIcons/icons/ClipboardMetrics.js";import"../../../icons/customIcons/icons/ClipboardBuilder.js";import"../../../icons/customIcons/icons/UnitConversion.js";import"../../../icons/customIcons/icons/NPT.js";import"../../../icons/customIcons/icons/GuidedFrac.js";import{PermissionsContext as A}from"../../../permissions/PermissionsContext.js";import"../../../styles/iconPark.global.css.js";import"../../../styles/index.global.css.js";import"../../../styles/reactVirtualized.global.css.js";import"../../../styles/emojiMart.global.css.js";import"../../../styles/mapbox.global.css.js";import"../../../styles/lightbox.global.css.js";import"../../../styles/generatedThemesVariables.global.css.js";import"../../../styles/customScrollbars.global.css.js";import{updateUserUnits as P}from"../../../utils/index.js";import{setThemeVariables as y}from"../../../utils/themeVariables.js";var x=["appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException"];function L(o,s){var i=Object.keys(o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(o);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),i.push.apply(i,n)}return i}function S(s){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?L(Object(n),!0).forEach((function(i){o(s,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(n)):L(Object(n)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(n,o))}))}return s}var w=g(C),D=i((function(){return{"@global":{body:{backgroundColor:"transparent",overflow:"hidden"}}}}));function F(o){var i,c,C,g,L,F,
|
|
1
|
+
import o from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/objectWithoutProperties";import{makeStyles as i}from"@material-ui/core";import n from"classnames";import t from"moment-timezone";import c from"prop-types";import{useLayoutEffect as r,useEffect as e}from"react";import{MemoryRouter as m}from"react-router-dom";import{ISOLATED_PAGE_APP_CONTAINER_ID as p}from"./constants.js";import{useXProps as a}from"./effects/useXProps.js";import{getDashboardCapturingHandler as l}from"./utils/dashboardCapturing.js";import{replaceUndefinedValuesWithNull as u}from"./utils/replaceUndefinedValuesWithNull.js";import{LOCAL_STORAGE_APP_THEME_KEY as j}from"../../../CLI/hocs/constants.js";import{isPDFReportView as I}from"../../../CLI/hocs/utils.js";import"@babel/runtime/helpers/toConsumableArray";import"lodash/set";import"lodash/get";import"lodash/unset";import"moment";import"../../../clients/jsonApi/index.js";import"../../../clients/subscriptions/subscriptions-client.factory.js";import"../../../clients/api/apiCore.js";import"../../../clients/constants.js";import"../../../clients/sso/auth0.js";import"../../../clients/sso/oauth2.js";import{apiRequestsRateLimiter as d}from"../../../clients/api/rateLimiter.js";import f from"../AppContext.js";import C from"../DevCenterAppContainer/DevCenterAppContainer.js";import{IsInsideIsolatedDcAppProvider as h}from"../DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider.js";import{THEMES as b}from"../../../constants/theme.js";import g from"../../../hocs/withMUIProvidersHOC.js";import"../../../hocs/withAssetEditorLockHOC.js";import"@icon-park/react/es/all";import{jsx as v}from"react/jsx-runtime";import{IconParkProvider as O}from"../../../icons/IconParkProvider.js";import"../../../icons/customIcons/icons/AddMessage.js";import"../../../icons/customIcons/icons/DragOne.js";import"../../../icons/customIcons/icons/Attention.js";import"../../../icons/customIcons/icons/Collapse.js";import"../../../icons/customIcons/icons/Dashboard.js";import"../../../icons/customIcons/icons/Expand.js";import"../../../icons/customIcons/icons/FolderClosed.js";import"../../../icons/customIcons/icons/FolderClosedFilled.js";import"../../../icons/customIcons/icons/FolderOpened.js";import"../../../icons/customIcons/icons/GreaterOrEqual.js";import"../../../icons/customIcons/icons/LessOrEqual.js";import"../../../icons/customIcons/icons/Search.js";import"../../../icons/customIcons/icons/SearchOne.js";import"../../../icons/customIcons/icons/Wellhub.js";import"../../../icons/customIcons/icons/MultiRuler.js";import"../../../icons/customIcons/icons/Checkbox.js";import"../../../icons/customIcons/icons/CheckboxChecked.js";import"../../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../../icons/customIcons/icons/Radio.js";import"../../../icons/customIcons/icons/RadioChecked.js";import"../../../icons/customIcons/icons/SimulFrac.js";import"../../../icons/customIcons/icons/ZipperFrac.js";import"../../../icons/customIcons/icons/CautionFilled.js";import"../../../icons/customIcons/icons/InfoRounded.js";import"../../../icons/customIcons/icons/FlameFilled.js";import"../../../icons/customIcons/icons/MoreApp.js";import"../../../icons/customIcons/icons/Pad.js";import"../../../icons/customIcons/icons/DrilloutUnit.js";import"../../../icons/customIcons/icons/FracFleet.js";import"../../../icons/customIcons/icons/Global.js";import"../../../icons/customIcons/icons/Program.js";import"../../../icons/customIcons/icons/Rig.js";import"../../../icons/customIcons/icons/Well.js";import"../../../icons/customIcons/icons/Gap.js";import"../../../icons/customIcons/icons/Pin.js";import"../../../icons/customIcons/icons/PinOne.js";import"../../../icons/customIcons/icons/PinOneCrossed.js";import"../../../icons/customIcons/icons/CloseOneFilled.js";import"../../../icons/customIcons/icons/AttentionFilled.js";import"../../../icons/customIcons/icons/CheckOneFilled.js";import"../../../icons/customIcons/icons/Archive.js";import"../../../icons/customIcons/icons/ArchiveCancel.js";import"../../../icons/customIcons/icons/Unarchive.js";import"../../../icons/customIcons/icons/Archived.js";import"../../../icons/customIcons/icons/InterventionUnit.js";import"../../../icons/customIcons/icons/CloudDelete.js";import"../../../icons/customIcons/icons/Lasso.js";import"../../../icons/customIcons/icons/Radius.js";import"../../../icons/customIcons/icons/ErrorOps.js";import"../../../icons/customIcons/icons/DataTypeOps.js";import"../../../icons/customIcons/icons/FalsePositiveOps.js";import"../../../icons/customIcons/icons/CalibrationOps.js";import"../../../icons/customIcons/icons/CriticalOps.js";import"../../../icons/customIcons/icons/Company.js";import"../../../icons/customIcons/icons/ArchiveOne.js";import"../../../icons/customIcons/icons/ParseBotFusion.js";import"../../../icons/customIcons/icons/Connect.js";import"../../../icons/customIcons/icons/PuzzleOne.js";import"../../../icons/customIcons/icons/Feed.js";import"../../../icons/customIcons/icons/Prompt.js";import"../../../icons/customIcons/icons/Companies.js";import"../../../icons/customIcons/icons/ClipboardAi.js";import"../../../icons/customIcons/icons/Key.js";import"../../../icons/customIcons/icons/AtSignCrossed.js";import"../../../icons/customIcons/icons/MappingManual.js";import"../../../icons/customIcons/icons/Mapping.js";import"../../../icons/customIcons/icons/Metrics.js";import"../../../icons/customIcons/icons/Drops.js";import"../../../icons/customIcons/icons/ClipboardSearch.js";import"../../../icons/customIcons/icons/Template.js";import"../../../icons/customIcons/icons/ClipboardMetrics.js";import"../../../icons/customIcons/icons/ClipboardBuilder.js";import"../../../icons/customIcons/icons/UnitConversion.js";import"../../../icons/customIcons/icons/NPT.js";import"../../../icons/customIcons/icons/GuidedFrac.js";import{PermissionsContext as A}from"../../../permissions/PermissionsContext.js";import"../../../styles/iconPark.global.css.js";import"../../../styles/index.global.css.js";import"../../../styles/reactVirtualized.global.css.js";import"../../../styles/emojiMart.global.css.js";import"../../../styles/mapbox.global.css.js";import"../../../styles/lightbox.global.css.js";import"../../../styles/generatedThemesVariables.global.css.js";import"../../../styles/customScrollbars.global.css.js";import{updateUserUnits as P}from"../../../utils/index.js";import{setThemeVariables as y}from"../../../utils/themeVariables.js";var x=["appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException"];function L(o,s){var i=Object.keys(o);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(o);s&&(n=n.filter((function(s){return Object.getOwnPropertyDescriptor(o,s).enumerable}))),i.push.apply(i,n)}return i}function S(s){for(var i=1;i<arguments.length;i++){var n=null!=arguments[i]?arguments[i]:{};i%2?L(Object(n),!0).forEach((function(i){o(s,i,n[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(s,Object.getOwnPropertyDescriptors(n)):L(Object(n)).forEach((function(o){Object.defineProperty(s,o,Object.getOwnPropertyDescriptor(n,o))}))}return s}var w=g(C),D=i((function(){return{"@global":{body:{backgroundColor:"transparent",overflow:"hidden"}}}}));function F(o){var i,c,C,g,L,F,R=o.CLIAppComponent,k=void 0===R?null:R,E=o.CLIAppSettings,T=void 0===E?null:E,M=o.containerReportClassName,U=void 0===M?null:M;D();var z=a(),V=z.appContextValue,N=z.globalMixpanelEventTracker,G=z.globalNotificationToastsAPI,W=z.onSettingChange,H=z.onSettingsChange,K=z.permissionsContextValue,q=z.timezone,B=z.userUnits,X=z.trackApiRateLimiterException,Z=s(z,x),J=Z.location.pathname.startsWith("/reports/")||I,Q=new URLSearchParams(Z.location.search).get("printTheme"),Y=null==Z||null===(i=Z.app)||void 0===i?void 0:i.id,$=localStorage.getItem(j)||(null===(c=Z.currentUser)||void 0===c||null===(C=c.settings)||void 0===C||null===(g=C.uiSettings)||void 0===g?void 0:g.theme)||b.DARK,_=J?Q===b.DARK:$!==b.LIGHT;return r((function(){y(_)}),[_]),r((function(){B&&P({userUnits:B})}),[B]),r((function(){return q&&t.tz.setDefault(q),function(){return t.tz.setDefault(null)}}),[q]),e((function(){window[Symbol.for("notificationToasts")]=G,window[Symbol.for("logToMixpanel")]=N,window[Symbol.for("corvaAPI.rateLimiterReport")]=X}),[G,N,X]),e((function(){d.updateConfig(Z.apiRateLimiterConfig)}),[Z.apiRateLimiterConfig]),e((function(){var o=l(Y);return window.addEventListener("message",o),function(){return window.removeEventListener("message",o)}}),[Y]),v(m,{initialEntries:[((null===(L=Z.location)||void 0===L?void 0:L.pathname)||"/")+((null===(F=Z.location)||void 0===F?void 0:F.search)||"")],children:v(A.Provider,{value:K,children:v(f.Provider,{value:V,children:v(h,{value:!0,children:v(O,{children:v("div",{id:p,className:n(J&&U),children:v(w,S(S({},Z),{},{theme:_?b.DARK:b.LIGHT,onSettingsChange:function(o){return H(u(o))},onSettingChange:function(o,s){return W(o,u(s))},CLIAppComponent:k,CLIAppSettings:T,trackApiRateLimiterException:X}))})})})})})})}F.propTypes={CLIAppComponent:c.func,CLIAppSettings:c.func,containerReportClassName:c.string};export{F as DevCenterIsolatedAppPage};
|
|
2
2
|
//# sourceMappingURL=DevCenterIsolatedAppPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevCenterIsolatedAppPage.js","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"sourcesContent":["import { makeStyles } from '@material-ui/core';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport PropTypes from 'prop-types';\nimport { useEffect, useLayoutEffect } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\nimport { useXProps } from './effects/useXProps';\nimport { getDashboardCapturingHandler } from './utils/dashboardCapturing';\nimport { replaceUndefinedValuesWithNull } from './utils/replaceUndefinedValuesWithNull';\n\nimport { LOCAL_STORAGE_APP_THEME_KEY } from '~/CLI/hocs/constants';\nimport { isPDFReportView } from '~/CLI/hocs/utils';\nimport { apiRequestsRateLimiter } from '~/clients';\nimport AppContext from '~/components/DevCenter/AppContext';\nimport DevCenterAppContainer from '~/components/DevCenter/DevCenterAppContainer';\nimport { IsInsideIsolatedDcAppProvider } from '~/components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { THEMES } from '~/constants/theme';\nimport { withMUIProvidersHOC } from '~/hocs';\nimport { IconParkProvider } from '~/icons';\nimport { PermissionsContext } from '~/permissions/PermissionsContext';\nimport '~/styles/globalStyles';\nimport { updateUserUnits } from '~/utils';\nimport { setThemeVariables } from '~/utils/themeVariables';\n\nconst DevCenterAppContainerWithMUI = withMUIProvidersHOC(DevCenterAppContainer);\n\n/**\n * It's important to keep these global styles in js, to apply only\n * when the component is actually used, if moved to CSS - they'll be\n * applied to whatever somehow imports the code\n */\nconst useStyles = makeStyles(() => ({\n '@global': {\n body: {\n backgroundColor: 'transparent',\n overflow: 'hidden',\n },\n },\n}));\n\n/**\n * Root component that is rendered inside of app's iframe.\n * Receives CLIAppComponent, CLIAppSettings when used\n * in local development\n */\nexport function DevCenterIsolatedAppPage({\n CLIAppComponent = null,\n CLIAppSettings = null,\n containerReportClassName = null,\n}) {\n useStyles();\n\n const {\n appContextValue,\n globalMixpanelEventTracker,\n globalNotificationToastsAPI,\n onSettingChange,\n onSettingsChange,\n permissionsContextValue,\n timezone,\n userUnits,\n trackApiRateLimiterException,\n ...xProps\n } = useXProps();\n const isReportsPage = xProps.location.pathname.startsWith('/reports/') || isPDFReportView;\n const appId = xProps?.app?.id;\n\n // Force light theme for PDF reports view\n const selectedTheme =\n localStorage.getItem(LOCAL_STORAGE_APP_THEME_KEY) ||\n xProps.currentUser?.settings?.uiSettings?.theme ||\n THEMES.DARK;\n const isDarkTheme = !isReportsPage && selectedTheme !== THEMES.LIGHT;\n\n useLayoutEffect(() => {\n setThemeVariables(isDarkTheme);\n }, [isDarkTheme]);\n\n // Apply userUnits and/or timezone before paint so that the first render\n // (including PDF reports) uses the correct unit system.\n // useLayoutEffect runs synchronously after DOM mutations but before the browser paints,\n // and re-runs whenever userUnits changes — fixing the production race where the iframe mounts\n // before the parent has finished loading the dashboard's unit_system.\n useLayoutEffect(() => {\n if (userUnits) {\n updateUserUnits({ userUnits });\n }\n }, [userUnits]);\n\n useLayoutEffect(() => {\n if (timezone) {\n moment.tz.setDefault(timezone);\n }\n return () => moment.tz.setDefault(null);\n }, [timezone]);\n\n useEffect(() => {\n window[Symbol.for('notificationToasts')] = globalNotificationToastsAPI;\n window[Symbol.for('logToMixpanel')] = globalMixpanelEventTracker;\n window[Symbol.for('corvaAPI.rateLimiterReport')] = trackApiRateLimiterException;\n }, [globalNotificationToastsAPI, globalMixpanelEventTracker, trackApiRateLimiterException]);\n\n useEffect(() => {\n apiRequestsRateLimiter.updateConfig(xProps.apiRateLimiterConfig);\n }, [xProps.apiRateLimiterConfig]);\n\n useEffect(() => {\n const dashboardCapturingHandler = getDashboardCapturingHandler(appId);\n window.addEventListener('message', dashboardCapturingHandler);\n return () => window.removeEventListener('message', dashboardCapturingHandler);\n }, [appId]);\n\n return (\n <MemoryRouter\n initialEntries={[(xProps.location?.pathname || '/') + (xProps.location?.search || '')]}\n >\n <PermissionsContext.Provider value={permissionsContextValue}>\n <AppContext.Provider value={appContextValue}>\n <IsInsideIsolatedDcAppProvider value>\n <IconParkProvider>\n <div\n id={ISOLATED_PAGE_APP_CONTAINER_ID}\n className={classNames(isReportsPage && containerReportClassName)}\n >\n <DevCenterAppContainerWithMUI\n {...xProps}\n theme={isDarkTheme ? THEMES.DARK : THEMES.LIGHT}\n // zoid serializes passed arguments using JSON.stringify.\n // All undefined values are removed as they are not valid JSON values\n // so we replace undefined values with null to not drop them\n // Any future cb function that passes arbitrary objects as args\n // also should be wrapped in this mapper\n // ⚠️⚠️⚠️ When refactoring this to referentially stable callbacks, remove `useStableCallback` from\n // /src/componentsV2/AppCommonsProvider/AppCommonsProvider.tsx\n onSettingsChange={nextSettings =>\n onSettingsChange(replaceUndefinedValuesWithNull(nextSettings))\n }\n onSettingChange={(key, value) =>\n onSettingChange(key, replaceUndefinedValuesWithNull(value))\n }\n CLIAppComponent={CLIAppComponent}\n CLIAppSettings={CLIAppSettings}\n trackApiRateLimiterException={trackApiRateLimiterException}\n />\n </div>\n </IconParkProvider>\n </IsInsideIsolatedDcAppProvider>\n </AppContext.Provider>\n </PermissionsContext.Provider>\n </MemoryRouter>\n );\n}\n\nDevCenterIsolatedAppPage.propTypes = {\n CLIAppComponent: PropTypes.func,\n CLIAppSettings: PropTypes.func,\n containerReportClassName: PropTypes.string,\n};\n"],"names":["DevCenterAppContainerWithMUI","withMUIProvidersHOC","DevCenterAppContainer","useStyles","makeStyles","body","backgroundColor","overflow","DevCenterIsolatedAppPage","_ref","_xProps$app","_xProps$currentUser","_xProps$currentUser$s","_xProps$currentUser$s2","_xProps$location","_xProps$location2","_ref$CLIAppComponent","CLIAppComponent","_ref$CLIAppSettings","CLIAppSettings","_ref$containerReportC","containerReportClassName","_useXProps","useXProps","appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException","xProps","_objectWithoutProperties","_excluded","isReportsPage","location","pathname","startsWith","isPDFReportView","appId","app","id","selectedTheme","localStorage","getItem","LOCAL_STORAGE_APP_THEME_KEY","currentUser","settings","uiSettings","theme","THEMES","DARK","isDarkTheme","LIGHT","useLayoutEffect","setThemeVariables","updateUserUnits","moment","tz","setDefault","useEffect","window","Symbol","for","apiRequestsRateLimiter","updateConfig","apiRateLimiterConfig","dashboardCapturingHandler","getDashboardCapturingHandler","addEventListener","removeEventListener","_jsx","MemoryRouter","initialEntries","search","children","PermissionsContext","Provider","value","AppContext","IsInsideIsolatedDcAppProvider","IconParkProvider","ISOLATED_PAGE_APP_CONTAINER_ID","className","classNames","_objectSpread","nextSettings","replaceUndefinedValuesWithNull","key","propTypes","PropTypes","func","string"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DevCenterIsolatedAppPage.js","sources":["../../../../src/components/DevCenter/IsolatedDevCenterAppContainer/DevCenterIsolatedAppPage.js"],"sourcesContent":["import { makeStyles } from '@material-ui/core';\nimport classNames from 'classnames';\nimport moment from 'moment-timezone';\nimport PropTypes from 'prop-types';\nimport { useEffect, useLayoutEffect } from 'react';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { ISOLATED_PAGE_APP_CONTAINER_ID } from './constants';\nimport { useXProps } from './effects/useXProps';\nimport { getDashboardCapturingHandler } from './utils/dashboardCapturing';\nimport { replaceUndefinedValuesWithNull } from './utils/replaceUndefinedValuesWithNull';\n\nimport { LOCAL_STORAGE_APP_THEME_KEY } from '~/CLI/hocs/constants';\nimport { isPDFReportView } from '~/CLI/hocs/utils';\nimport { apiRequestsRateLimiter } from '~/clients';\nimport AppContext from '~/components/DevCenter/AppContext';\nimport DevCenterAppContainer from '~/components/DevCenter/DevCenterAppContainer';\nimport { IsInsideIsolatedDcAppProvider } from '~/components/DevCenter/DevCenterAppContainer/components/IsInsideIsolatedDcAppProvider';\nimport { THEMES } from '~/constants/theme';\nimport { withMUIProvidersHOC } from '~/hocs';\nimport { IconParkProvider } from '~/icons';\nimport { PermissionsContext } from '~/permissions/PermissionsContext';\nimport '~/styles/globalStyles';\nimport { updateUserUnits } from '~/utils';\nimport { setThemeVariables } from '~/utils/themeVariables';\n\nconst DevCenterAppContainerWithMUI = withMUIProvidersHOC(DevCenterAppContainer);\n\n/**\n * It's important to keep these global styles in js, to apply only\n * when the component is actually used, if moved to CSS - they'll be\n * applied to whatever somehow imports the code\n */\nconst useStyles = makeStyles(() => ({\n '@global': {\n body: {\n backgroundColor: 'transparent',\n overflow: 'hidden',\n },\n },\n}));\n\n/**\n * Root component that is rendered inside of app's iframe.\n * Receives CLIAppComponent, CLIAppSettings when used\n * in local development\n */\nexport function DevCenterIsolatedAppPage({\n CLIAppComponent = null,\n CLIAppSettings = null,\n containerReportClassName = null,\n}) {\n useStyles();\n\n const {\n appContextValue,\n globalMixpanelEventTracker,\n globalNotificationToastsAPI,\n onSettingChange,\n onSettingsChange,\n permissionsContextValue,\n timezone,\n userUnits,\n trackApiRateLimiterException,\n ...xProps\n } = useXProps();\n const isReportsPage = xProps.location.pathname.startsWith('/reports/') || isPDFReportView;\n const printTheme = new URLSearchParams(xProps.location.search).get('printTheme');\n const appId = xProps?.app?.id;\n\n // Reports use light theme by default unless dark mode is explicitly requested.\n const selectedTheme =\n localStorage.getItem(LOCAL_STORAGE_APP_THEME_KEY) ||\n xProps.currentUser?.settings?.uiSettings?.theme ||\n THEMES.DARK;\n const isDarkTheme = isReportsPage ? printTheme === THEMES.DARK : selectedTheme !== THEMES.LIGHT;\n\n useLayoutEffect(() => {\n setThemeVariables(isDarkTheme);\n }, [isDarkTheme]);\n\n // Apply userUnits and/or timezone before paint so that the first render\n // (including PDF reports) uses the correct unit system.\n // useLayoutEffect runs synchronously after DOM mutations but before the browser paints,\n // and re-runs whenever userUnits changes — fixing the production race where the iframe mounts\n // before the parent has finished loading the dashboard's unit_system.\n useLayoutEffect(() => {\n if (userUnits) {\n updateUserUnits({ userUnits });\n }\n }, [userUnits]);\n\n useLayoutEffect(() => {\n if (timezone) {\n moment.tz.setDefault(timezone);\n }\n return () => moment.tz.setDefault(null);\n }, [timezone]);\n\n useEffect(() => {\n window[Symbol.for('notificationToasts')] = globalNotificationToastsAPI;\n window[Symbol.for('logToMixpanel')] = globalMixpanelEventTracker;\n window[Symbol.for('corvaAPI.rateLimiterReport')] = trackApiRateLimiterException;\n }, [globalNotificationToastsAPI, globalMixpanelEventTracker, trackApiRateLimiterException]);\n\n useEffect(() => {\n apiRequestsRateLimiter.updateConfig(xProps.apiRateLimiterConfig);\n }, [xProps.apiRateLimiterConfig]);\n\n useEffect(() => {\n const dashboardCapturingHandler = getDashboardCapturingHandler(appId);\n window.addEventListener('message', dashboardCapturingHandler);\n return () => window.removeEventListener('message', dashboardCapturingHandler);\n }, [appId]);\n\n return (\n <MemoryRouter\n initialEntries={[(xProps.location?.pathname || '/') + (xProps.location?.search || '')]}\n >\n <PermissionsContext.Provider value={permissionsContextValue}>\n <AppContext.Provider value={appContextValue}>\n <IsInsideIsolatedDcAppProvider value>\n <IconParkProvider>\n <div\n id={ISOLATED_PAGE_APP_CONTAINER_ID}\n className={classNames(isReportsPage && containerReportClassName)}\n >\n <DevCenterAppContainerWithMUI\n {...xProps}\n theme={isDarkTheme ? THEMES.DARK : THEMES.LIGHT}\n // zoid serializes passed arguments using JSON.stringify.\n // All undefined values are removed as they are not valid JSON values\n // so we replace undefined values with null to not drop them\n // Any future cb function that passes arbitrary objects as args\n // also should be wrapped in this mapper\n // ⚠️⚠️⚠️ When refactoring this to referentially stable callbacks, remove `useStableCallback` from\n // /src/componentsV2/AppCommonsProvider/AppCommonsProvider.tsx\n onSettingsChange={nextSettings =>\n onSettingsChange(replaceUndefinedValuesWithNull(nextSettings))\n }\n onSettingChange={(key, value) =>\n onSettingChange(key, replaceUndefinedValuesWithNull(value))\n }\n CLIAppComponent={CLIAppComponent}\n CLIAppSettings={CLIAppSettings}\n trackApiRateLimiterException={trackApiRateLimiterException}\n />\n </div>\n </IconParkProvider>\n </IsInsideIsolatedDcAppProvider>\n </AppContext.Provider>\n </PermissionsContext.Provider>\n </MemoryRouter>\n );\n}\n\nDevCenterIsolatedAppPage.propTypes = {\n CLIAppComponent: PropTypes.func,\n CLIAppSettings: PropTypes.func,\n containerReportClassName: PropTypes.string,\n};\n"],"names":["DevCenterAppContainerWithMUI","withMUIProvidersHOC","DevCenterAppContainer","useStyles","makeStyles","body","backgroundColor","overflow","DevCenterIsolatedAppPage","_ref","_xProps$app","_xProps$currentUser","_xProps$currentUser$s","_xProps$currentUser$s2","_xProps$location","_xProps$location2","_ref$CLIAppComponent","CLIAppComponent","_ref$CLIAppSettings","CLIAppSettings","_ref$containerReportC","containerReportClassName","_useXProps","useXProps","appContextValue","globalMixpanelEventTracker","globalNotificationToastsAPI","onSettingChange","onSettingsChange","permissionsContextValue","timezone","userUnits","trackApiRateLimiterException","xProps","_objectWithoutProperties","_excluded","isReportsPage","location","pathname","startsWith","isPDFReportView","printTheme","URLSearchParams","search","get","appId","app","id","selectedTheme","localStorage","getItem","LOCAL_STORAGE_APP_THEME_KEY","currentUser","settings","uiSettings","theme","THEMES","DARK","isDarkTheme","LIGHT","useLayoutEffect","setThemeVariables","updateUserUnits","moment","tz","setDefault","useEffect","window","Symbol","for","apiRequestsRateLimiter","updateConfig","apiRateLimiterConfig","dashboardCapturingHandler","getDashboardCapturingHandler","addEventListener","removeEventListener","_jsx","MemoryRouter","initialEntries","children","PermissionsContext","Provider","value","AppContext","IsInsideIsolatedDcAppProvider","IconParkProvider","ISOLATED_PAGE_APP_CONTAINER_ID","className","classNames","_objectSpread","nextSettings","replaceUndefinedValuesWithNull","key","propTypes","PropTypes","func","string"],"mappings":"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"}
|
package/mcp-server/server.mjs
CHANGED
|
@@ -246,9 +246,9 @@ const validateDsn = dsn => {
|
|
|
246
246
|
return url.href;
|
|
247
247
|
};
|
|
248
248
|
|
|
249
|
-
const MCP_SERVER_VERSION = '1.9.
|
|
249
|
+
const MCP_SERVER_VERSION = '1.9.1';
|
|
250
250
|
|
|
251
|
-
var version = "3.78.0-
|
|
251
|
+
var version = "3.78.0-19";
|
|
252
252
|
|
|
253
253
|
const CORVA_UI_VERSION = version;
|
|
254
254
|
|
|
@@ -1010,6 +1010,77 @@ const resolveProjectIdentity = async (server, logger) => {
|
|
|
1010
1010
|
}
|
|
1011
1011
|
};
|
|
1012
1012
|
|
|
1013
|
+
const createToolResponse = text => ({
|
|
1014
|
+
content: [{
|
|
1015
|
+
type: 'text',
|
|
1016
|
+
text
|
|
1017
|
+
}]
|
|
1018
|
+
});
|
|
1019
|
+
|
|
1020
|
+
const createErrorResponse = message => ({
|
|
1021
|
+
content: [{
|
|
1022
|
+
type: 'text',
|
|
1023
|
+
text: message
|
|
1024
|
+
}],
|
|
1025
|
+
isError: true
|
|
1026
|
+
});
|
|
1027
|
+
|
|
1028
|
+
const withTimeout = async (promise, ms) => {
|
|
1029
|
+
let timeoutId;
|
|
1030
|
+
const timeout = new Promise(resolve => {
|
|
1031
|
+
timeoutId = setTimeout(() => resolve(undefined), ms);
|
|
1032
|
+
});
|
|
1033
|
+
try {
|
|
1034
|
+
return await Promise.race([promise, timeout]);
|
|
1035
|
+
} finally {
|
|
1036
|
+
clearTimeout(timeoutId);
|
|
1037
|
+
}
|
|
1038
|
+
};
|
|
1039
|
+
|
|
1040
|
+
/**
|
|
1041
|
+
* A field of a listing is ONE line: every whitespace run becomes a space, the ends are trimmed,
|
|
1042
|
+
* every other character survives. Not the first paragraph (drops words) and not indentation
|
|
1043
|
+
* (CommonMark honours up to three spaces, so a fence, heading or blank line inside a description
|
|
1044
|
+
* would still open a block of its own).
|
|
1045
|
+
*/
|
|
1046
|
+
const singleLine = text => text.replace(/\s+/g, ' ').trim();
|
|
1047
|
+
|
|
1048
|
+
// The SDK gives roots/list 60 s, and a session that ends inside the wait would never be counted.
|
|
1049
|
+
const IDENTITY_FLUSH_TIMEOUT_MS = 2000;
|
|
1050
|
+
/**
|
|
1051
|
+
* Records the session counter and the initialize span exactly once, with the project identity when
|
|
1052
|
+
* it resolves within IDENTITY_FLUSH_TIMEOUT_MS. The deadline starts at the call, so call it only
|
|
1053
|
+
* once telemetry has settled; an identity that resolves later is ignored here.
|
|
1054
|
+
*/
|
|
1055
|
+
const recordSessionStart = async ({
|
|
1056
|
+
telemetry,
|
|
1057
|
+
initData,
|
|
1058
|
+
identity
|
|
1059
|
+
}) => {
|
|
1060
|
+
if (!telemetry.isEnabled()) {
|
|
1061
|
+
return;
|
|
1062
|
+
}
|
|
1063
|
+
const projectIdentity = await withTimeout(identity.catch(() => null), IDENTITY_FLUSH_TIMEOUT_MS);
|
|
1064
|
+
const {
|
|
1065
|
+
timestamp,
|
|
1066
|
+
clientName,
|
|
1067
|
+
clientVersion,
|
|
1068
|
+
clientCapabilities
|
|
1069
|
+
} = initData;
|
|
1070
|
+
telemetry.metrics.recordSession(clientName, clientVersion, projectIdentity);
|
|
1071
|
+
telemetry.recordInitialize({
|
|
1072
|
+
timestamp,
|
|
1073
|
+
clientName,
|
|
1074
|
+
clientVersion,
|
|
1075
|
+
clientCapabilities,
|
|
1076
|
+
sessionId: telemetry.sessionId,
|
|
1077
|
+
protocolVersion: MCP_PROTOCOL_VERSION,
|
|
1078
|
+
networkTransport: MCP_NETWORK_TRANSPORT,
|
|
1079
|
+
appKey: projectIdentity?.appKey ?? undefined,
|
|
1080
|
+
packageName: projectIdentity?.packageName ?? undefined
|
|
1081
|
+
});
|
|
1082
|
+
};
|
|
1083
|
+
|
|
1013
1084
|
// This file is auto-generated by `yarn mcp:generate-prompts`. Do not edit by hand.
|
|
1014
1085
|
// Source: ./figma-to-code.prompt.md
|
|
1015
1086
|
|
|
@@ -21548,41 +21619,6 @@ const formatZIndex = zIndex => {
|
|
|
21548
21619
|
return table(['Name', 'CSS Variable', 'Value'], rows);
|
|
21549
21620
|
};
|
|
21550
21621
|
|
|
21551
|
-
const createToolResponse = text => ({
|
|
21552
|
-
content: [{
|
|
21553
|
-
type: 'text',
|
|
21554
|
-
text
|
|
21555
|
-
}]
|
|
21556
|
-
});
|
|
21557
|
-
|
|
21558
|
-
const createErrorResponse = message => ({
|
|
21559
|
-
content: [{
|
|
21560
|
-
type: 'text',
|
|
21561
|
-
text: message
|
|
21562
|
-
}],
|
|
21563
|
-
isError: true
|
|
21564
|
-
});
|
|
21565
|
-
|
|
21566
|
-
const withTimeout = async (promise, ms) => {
|
|
21567
|
-
let timeoutId;
|
|
21568
|
-
const timeout = new Promise(resolve => {
|
|
21569
|
-
timeoutId = setTimeout(() => resolve(undefined), ms);
|
|
21570
|
-
});
|
|
21571
|
-
try {
|
|
21572
|
-
return await Promise.race([promise, timeout]);
|
|
21573
|
-
} finally {
|
|
21574
|
-
clearTimeout(timeoutId);
|
|
21575
|
-
}
|
|
21576
|
-
};
|
|
21577
|
-
|
|
21578
|
-
/**
|
|
21579
|
-
* A field of a listing is ONE line: every whitespace run becomes a space, the ends are trimmed,
|
|
21580
|
-
* every other character survives. Not the first paragraph (drops words) and not indentation
|
|
21581
|
-
* (CommonMark honours up to three spaces, so a fence, heading or blank line inside a description
|
|
21582
|
-
* would still open a block of its own).
|
|
21583
|
-
*/
|
|
21584
|
-
const singleLine = text => text.replace(/\s+/g, ' ').trim();
|
|
21585
|
-
|
|
21586
21622
|
const parseQuery = queryLower => {
|
|
21587
21623
|
const rawWords = queryLower.trim().split(/\s+/);
|
|
21588
21624
|
const queryWords = rawWords.filter(w => w.length > 1);
|
|
@@ -23385,9 +23421,9 @@ class CorvaUiMcpServer {
|
|
|
23385
23421
|
telemetryDisabledReason = null;
|
|
23386
23422
|
telemetryInitPromise = null;
|
|
23387
23423
|
shutdownRequested = false;
|
|
23388
|
-
pendingInitData = null;
|
|
23389
23424
|
projectIdentity = null;
|
|
23390
23425
|
identityPromise = null;
|
|
23426
|
+
sessionStartPromise = null;
|
|
23391
23427
|
constructor() {
|
|
23392
23428
|
const baseLogger = createLogger({
|
|
23393
23429
|
prefix: '[CorvaUI MCP]'
|
|
@@ -23411,50 +23447,42 @@ class CorvaUiMcpServer {
|
|
|
23411
23447
|
}
|
|
23412
23448
|
setupInitializedHandler() {
|
|
23413
23449
|
this.server.server.oninitialized = () => {
|
|
23450
|
+
// The SDK calls this for every notifications/initialized, and a repeat must not count a
|
|
23451
|
+
// second session.
|
|
23452
|
+
if (this.sessionStartPromise) {
|
|
23453
|
+
return;
|
|
23454
|
+
}
|
|
23414
23455
|
const timestamp = Date.now();
|
|
23415
23456
|
const clientInfo = this.server.server.getClientVersion();
|
|
23416
23457
|
const clientCapabilities = this.server.server.getClientCapabilities();
|
|
23417
|
-
this.pendingInitData = {
|
|
23418
|
-
timestamp,
|
|
23419
|
-
clientName: clientInfo?.name,
|
|
23420
|
-
clientVersion: clientInfo?.version,
|
|
23421
|
-
clientCapabilities: clientCapabilities ? JSON.stringify(clientCapabilities) : undefined
|
|
23422
|
-
};
|
|
23423
23458
|
if (clientInfo?.name) {
|
|
23424
23459
|
this.mcpLogger.info(`Client connected: ${clientInfo.name}${clientInfo.version ? ` v${clientInfo.version}` : ''}`);
|
|
23425
23460
|
}
|
|
23426
|
-
|
|
23427
|
-
this.projectIdentity =
|
|
23461
|
+
const identity = resolveProjectIdentity(this.server.server, this.mcpLogger).then(resolved => {
|
|
23462
|
+
this.projectIdentity = resolved;
|
|
23463
|
+
return resolved;
|
|
23428
23464
|
}).catch(error => {
|
|
23429
23465
|
this.mcpLogger.error('Failed to resolve project identity', error);
|
|
23430
|
-
|
|
23431
|
-
|
|
23466
|
+
return null;
|
|
23467
|
+
});
|
|
23468
|
+
this.identityPromise = identity.then(() => undefined);
|
|
23469
|
+
|
|
23470
|
+
// run() connects only after telemetry has settled, so initialized is the later of the two
|
|
23471
|
+
// and the identity deadline starts here.
|
|
23472
|
+
this.sessionStartPromise = recordSessionStart({
|
|
23473
|
+
telemetry: this.telemetry,
|
|
23474
|
+
initData: {
|
|
23475
|
+
timestamp,
|
|
23476
|
+
clientName: clientInfo?.name,
|
|
23477
|
+
clientVersion: clientInfo?.version,
|
|
23478
|
+
clientCapabilities: clientCapabilities ? JSON.stringify(clientCapabilities) : undefined
|
|
23479
|
+
},
|
|
23480
|
+
identity
|
|
23481
|
+
}).catch(error => {
|
|
23482
|
+
this.mcpLogger.error('Failed to record session start', error);
|
|
23432
23483
|
});
|
|
23433
23484
|
};
|
|
23434
23485
|
}
|
|
23435
|
-
flushPendingInitData() {
|
|
23436
|
-
if (!this.pendingInitData || !this.telemetry.isEnabled()) {
|
|
23437
|
-
return;
|
|
23438
|
-
}
|
|
23439
|
-
const {
|
|
23440
|
-
timestamp,
|
|
23441
|
-
clientName,
|
|
23442
|
-
clientVersion,
|
|
23443
|
-
clientCapabilities
|
|
23444
|
-
} = this.pendingInitData;
|
|
23445
|
-
this.telemetry.metrics.recordSession(clientName, clientVersion);
|
|
23446
|
-
const attrs = {
|
|
23447
|
-
timestamp,
|
|
23448
|
-
clientName,
|
|
23449
|
-
clientVersion,
|
|
23450
|
-
clientCapabilities,
|
|
23451
|
-
sessionId: this.telemetry.sessionId,
|
|
23452
|
-
protocolVersion: MCP_PROTOCOL_VERSION,
|
|
23453
|
-
networkTransport: MCP_NETWORK_TRANSPORT
|
|
23454
|
-
};
|
|
23455
|
-
this.telemetry.recordInitialize(attrs);
|
|
23456
|
-
this.pendingInitData = null;
|
|
23457
|
-
}
|
|
23458
23486
|
executeToolWithObservability(toolName, args, handler, formatResult, options) {
|
|
23459
23487
|
this.requestCount += 1;
|
|
23460
23488
|
const startTime = Date.now();
|
|
@@ -23663,6 +23691,9 @@ class CorvaUiMcpServer {
|
|
|
23663
23691
|
if (this.identityPromise) {
|
|
23664
23692
|
await withTimeout(this.identityPromise, TELEMETRY_INIT_TIMEOUT_MS);
|
|
23665
23693
|
}
|
|
23694
|
+
if (this.sessionStartPromise) {
|
|
23695
|
+
await withTimeout(this.sessionStartPromise, IDENTITY_FLUSH_TIMEOUT_MS);
|
|
23696
|
+
}
|
|
23666
23697
|
|
|
23667
23698
|
// No transport means shutdown came during the telemetry wait: the client never connected, so
|
|
23668
23699
|
// there is no session to end.
|