@lowdefy/server-dev 6.1.0 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/App.jsx +52 -24
- package/client/Inspector.jsx +73 -30
- package/client/JourneyObserver.jsx +47 -0
- package/client/Page.jsx +54 -22
- package/client/Recorder.jsx +73 -0
- package/client/Routing.jsx +37 -13
- package/client/clientBuildImports.test.mjs +2 -0
- package/client/devStreamConnections.test.mjs +40 -0
- package/client/feedback/FeedbackMount.jsx +2 -2
- package/client/feedback/FeedbackOverlay.jsx +7 -4
- package/client/feedback/feedbackStyles.js +3 -0
- package/client/journeyObserver/startJourneyObserver.js +101 -0
- package/client/journeyObserver/startJourneyObserver.test.mjs +149 -0
- package/client/openInEditor/OpenInEditorListener.jsx +2 -0
- package/client/recorder/buildEngineRecord.js +37 -0
- package/client/recorder/buildInteractionRecord.js +64 -0
- package/client/recorder/buildTraceEvent.js +57 -0
- package/client/recorder/buildTraceEvent.test.mjs +81 -0
- package/client/recorder/chunkRecords.js +69 -0
- package/client/recorder/chunkRecords.test.mjs +59 -0
- package/client/recorder/collectEventActions.js +30 -0
- package/client/recorder/collectEventEndpoints.js +40 -0
- package/client/recorder/collectEventRequests.js +39 -0
- package/client/recorder/createPairingBuffer.js +187 -0
- package/client/recorder/createPairingBuffer.test.mjs +405 -0
- package/client/recorder/createPasswordRedactor.js +84 -0
- package/client/recorder/createRecordBatcher.js +54 -0
- package/client/recorder/createRecordBatcher.test.mjs +76 -0
- package/client/recorder/createRecorder.js +216 -0
- package/client/recorder/createRecorder.test.mjs +318 -0
- package/client/recorder/createRecordingSession.js +61 -0
- package/client/recorder/createRecordingSession.test.mjs +72 -0
- package/client/recorder/diffStateWrites.js +77 -0
- package/client/recorder/diffStateWrites.test.mjs +66 -0
- package/client/recorder/isEventCall.js +30 -0
- package/client/recorder/jsonType.js +39 -0
- package/client/recorder/keyChord.js +47 -0
- package/client/recorder/keyChord.test.mjs +50 -0
- package/client/recorder/sendRecords.js +40 -0
- package/client/recorder/toJsonSafe.js +29 -0
- package/lib/client/BuildingPage.jsx +3 -1
- package/lib/client/ErrorBar.jsx +17 -13
- package/lib/client/RedirectingPage.jsx +56 -0
- package/lib/client/auth/Auth.jsx +11 -6
- package/lib/client/auth/AuthConfigured.jsx +222 -36
- package/lib/client/auth/AuthNotConfigured.js +45 -4
- package/lib/client/auth/authNotConfiguredParity.test.mjs +61 -0
- package/lib/client/auth/authTemplateSync.test.mjs +40 -0
- package/lib/client/auth/betterAuthSessionContract.test.mjs +181 -0
- package/lib/client/auth/createFetchCheckingBuild.js +45 -0
- package/lib/client/bundleBuildId.js +25 -0
- package/lib/client/collectVisibleBlockIds.js +51 -0
- package/lib/client/getCspNonce.js +25 -0
- package/lib/client/getPagePath.js +36 -0
- package/lib/client/getPagePath.test.mjs +51 -0
- package/lib/client/utils/formatErrorsForCopy.js +30 -0
- package/lib/client/utils/formatErrorsForCopy.test.mjs +39 -0
- package/lib/client/utils/getErrorBarColor.js +25 -0
- package/lib/client/utils/getErrorBarColor.test.mjs +34 -0
- package/lib/client/utils/request.js +8 -1
- package/lib/client/utils/usePageConfig.js +89 -25
- package/lib/client/utils/usePageConfig.test.mjs +198 -13
- package/lib/configTree/buildConfigTree.mjs +58 -0
- package/lib/configTree/buildConfigTree.test.mjs +77 -0
- package/lib/configTree/collectConfigText.mjs +101 -0
- package/lib/configTree/collectConfigText.test.mjs +116 -0
- package/lib/configTree/prepareScratchServer.mjs +46 -0
- package/lib/configTree/runConfigTreeBuild.mjs +88 -0
- package/lib/configTree/runConfigTreeBuild.skipPluginChecks.test.mjs +74 -0
- package/lib/configTree/runConfigTreeBuild.test.mjs +202 -0
- package/lib/docs/JourneyStepError.js +30 -0
- package/lib/docs/acquireBrowserSlot.js +30 -0
- package/lib/docs/addNestedEndpoints.js +54 -0
- package/lib/docs/addNestedEndpoints.test.mjs +185 -0
- package/lib/docs/addWriteFlags.js +77 -0
- package/lib/docs/buildEditedPages.js +50 -0
- package/lib/docs/buildWaitHeader.js +21 -0
- package/lib/docs/captureAnnotatedScreenshot.js +23 -12
- package/lib/docs/checkAgentFiles.js +148 -0
- package/lib/docs/checkAgentFiles.test.mjs +225 -0
- package/lib/docs/checkStepReferences.js +239 -0
- package/lib/docs/checkStepReferences.test.mjs +173 -0
- package/lib/docs/checkpointStore.js +3 -0
- package/lib/docs/clientErrorStore.js +18 -1
- package/lib/docs/clientErrorStore.test.mjs +46 -0
- package/lib/docs/collectExercised.js +52 -0
- package/lib/docs/createBrowserLifecycle.js +102 -0
- package/lib/docs/createBrowserLifecycle.test.mjs +212 -0
- package/lib/docs/createDocsMcpServer.js +345 -388
- package/lib/docs/createDocsMcpServer.test.mjs +644 -4
- package/lib/docs/createDocsMcpServerRunJourney.test.mjs +148 -0
- package/lib/docs/createJourneyActors.chromium.test.mjs +227 -0
- package/lib/docs/createJourneyActors.js +213 -0
- package/lib/docs/createJourneyActors.test.mjs +79 -0
- package/lib/docs/createJourneyObservations.js +80 -0
- package/lib/docs/createLeftOriginError.js +26 -0
- package/lib/docs/createNetworkCounter.js +101 -0
- package/lib/docs/dataSets/checkSharedCollectionIds.js +78 -0
- package/lib/docs/dataSets/dataSessionRegistry.js +25 -0
- package/lib/docs/dataSets/dataSetJourneys.chromium.mongodb.test.mjs +727 -0
- package/lib/docs/dataSets/describeDataSetResult.js +25 -0
- package/lib/docs/dataSets/describeDatabaseTarget.js +46 -0
- package/lib/docs/dataSets/describeTargetKey.js +29 -0
- package/lib/docs/dataSets/deserializeFixture.js +34 -0
- package/lib/docs/dataSets/drainSessionWork.js +37 -0
- package/lib/docs/dataSets/drainSessionWork.test.mjs +64 -0
- package/lib/docs/dataSets/duplicateIndexName.js +24 -0
- package/lib/docs/dataSets/getDataStore.js +106 -0
- package/lib/docs/dataSets/getDataStore.mongodb.test.mjs +63 -0
- package/lib/docs/dataSets/getDataStore.test.mjs +195 -0
- package/lib/docs/dataSets/groupDataSetByCollection.js +52 -0
- package/lib/docs/dataSets/insertFixture.js +57 -0
- package/lib/docs/dataSets/insertGeneratedDocuments.js +41 -0
- package/lib/docs/dataSets/isDataStoreGone.js +29 -0
- package/lib/docs/dataSets/loadDataSetCollection.js +42 -0
- package/lib/docs/dataSets/mergeCollectionIndexes.js +52 -0
- package/lib/docs/dataSets/mergeCollectionIndexes.test.mjs +59 -0
- package/lib/docs/dataSets/openDataSession.js +133 -0
- package/lib/docs/dataSets/openDataSession.mongodb.test.mjs +493 -0
- package/lib/docs/dataSets/pickDataStorePort.js +58 -0
- package/lib/docs/dataSets/pickDataStorePort.test.mjs +63 -0
- package/lib/docs/dataSets/readConnectionArtifacts.js +46 -0
- package/lib/docs/dataSets/readDataSession.js +41 -0
- package/lib/docs/dataSets/readDataSession.test.mjs +57 -0
- package/lib/docs/dataSets/readDataSet.js +83 -0
- package/lib/docs/dataSets/readDataSet.test.mjs +251 -0
- package/lib/docs/dataSets/registerDataStoreShutdown.js +47 -0
- package/lib/docs/dataSets/removeDataStoreFiles.js +32 -0
- package/lib/docs/dataSets/resolveDataSetCollection.js +46 -0
- package/lib/docs/dataSets/resolveJourneyDataSet.js +106 -0
- package/lib/docs/dataSets/resolveJourneyDataSet.test.mjs +130 -0
- package/lib/docs/dataSets/sessionDatabaseName.js +32 -0
- package/lib/docs/dataSets/sweepOrphanDatabases.js +36 -0
- package/lib/docs/dataSets/test/app/lowdefy.yaml +225 -0
- package/lib/docs/dataSets/test/app/modules/archive/module.lowdefy.yaml +30 -0
- package/lib/docs/dataSets/test/app/tests/data/shop.yaml +12 -0
- package/lib/docs/dataSets/test/buildTestApp.mjs +43 -0
- package/lib/docs/devEventBus.js +136 -0
- package/lib/docs/devEventBus.test.mjs +269 -0
- package/lib/docs/devToolDefinitions.js +529 -0
- package/lib/docs/docSources.js +21 -0
- package/lib/docs/docs.test.mjs +171 -15
- package/lib/docs/docsIndex.test.mjs +377 -0
- package/lib/docs/evalOperator.js +5 -3
- package/lib/docs/evalOperatorHeadless.js +84 -12
- package/lib/docs/evalOperatorHeadless.test.mjs +7 -1
- package/lib/docs/evalOperatorInTab.js +2 -1
- package/lib/docs/findConfig.js +95 -49
- package/lib/docs/fitResponse.js +81 -0
- package/lib/docs/fitResponse.test.mjs +128 -0
- package/lib/docs/formatFeedback.js +26 -5
- package/lib/docs/formatFeedback.test.mjs +48 -0
- package/lib/docs/getAppMap.js +7 -1
- package/lib/docs/getBrowser.js +150 -80
- package/lib/docs/getBrowser.test.mjs +407 -16
- package/lib/docs/getBuildId.js +61 -0
- package/lib/docs/getBuildId.test.mjs +84 -0
- package/lib/docs/getBuildStatus.js +81 -7
- package/lib/docs/getBuildStatus.test.mjs +229 -0
- package/lib/docs/getBuildStatusAfterEdits.js +35 -0
- package/lib/docs/getBuildStatusAfterEdits.test.mjs +76 -0
- package/lib/docs/getCoreDoc.js +9 -1
- package/lib/docs/getDoc.js +100 -0
- package/lib/docs/getDocsIndex.js +152 -0
- package/lib/docs/getHazards.js +115 -0
- package/lib/docs/getHazards.test.mjs +175 -0
- package/lib/docs/getMailOutboxDirectory.js +26 -0
- package/lib/docs/getOverview.js +79 -13
- package/lib/docs/getOverviewBasePath.test.mjs +37 -0
- package/lib/docs/getPageBuildStatus.js +46 -0
- package/lib/docs/getPluginDoc.js +21 -23
- package/lib/docs/getSchema.js +33 -1
- package/lib/docs/getStaleStatus.js +36 -0
- package/lib/docs/getStaleStatus.test.mjs +74 -0
- package/lib/docs/guardJourneyOrigin.js +39 -0
- package/lib/docs/inspectState.js +5 -3
- package/lib/docs/inspectStateFromTab.js +2 -2
- package/lib/docs/inspectStateHeadless.js +89 -27
- package/lib/docs/inspectStateHeadless.test.mjs +20 -1
- package/lib/docs/installHeadlessShell.failure.test.mjs +45 -0
- package/lib/docs/installHeadlessShell.js +123 -0
- package/lib/docs/installHeadlessShell.test.mjs +70 -0
- package/lib/docs/installHeadlessShell.timeout.test.mjs +72 -0
- package/lib/docs/isHeadlessShellIncomplete.js +34 -0
- package/lib/docs/isHeadlessShellIncomplete.test.mjs +63 -0
- package/lib/docs/isPageReady.js +77 -0
- package/lib/docs/isPageReady.test.mjs +235 -0
- package/lib/docs/isRunErrorEntry.js +25 -0
- package/lib/docs/journeyMutantCookie.chromium.test.mjs +150 -0
- package/lib/docs/journeyRunRecording.js +35 -0
- package/lib/docs/journeyRunRecording.test.mjs +39 -0
- package/lib/docs/keepEventStreamAlive.js +68 -0
- package/lib/docs/keepEventStreamAlive.test.mjs +77 -0
- package/lib/docs/launchBrowser.js +83 -0
- package/lib/docs/launchBrowser.test.mjs +175 -0
- package/lib/docs/listModuleDocEntries.js +69 -0
- package/lib/docs/listPackageDocFiles.js +67 -0
- package/lib/docs/listPluginDocEntries.js +111 -0
- package/lib/docs/listPlugins.js +9 -58
- package/lib/docs/listTypes.js +14 -6
- package/lib/docs/loadFrameworkHazards.js +40 -0
- package/lib/docs/loadFrameworkHazards.test.mjs +43 -0
- package/lib/docs/loadState.js +103 -35
- package/lib/docs/makeModuleManifestDoc.js +174 -0
- package/lib/docs/matchExercisedPages.js +35 -0
- package/lib/docs/matchJourneyRoute.js +69 -0
- package/lib/docs/matchJourneyRoute.test.mjs +178 -0
- package/lib/docs/mergeNetworkSnapshots.js +49 -0
- package/lib/docs/nextJourneySequence.js +30 -0
- package/lib/docs/noBrowserError.js +22 -0
- package/lib/docs/observe/TRANSIENT_SELECTOR.js +21 -0
- package/lib/docs/observe/claimExpectedErrors.js +67 -0
- package/lib/docs/observe/createJourneyAppErrors.js +236 -0
- package/lib/docs/observe/createJourneyAppErrors.test.mjs +385 -0
- package/lib/docs/observe/evaluateInvariants.js +183 -0
- package/lib/docs/observe/evaluateInvariants.test.mjs +299 -0
- package/lib/docs/observe/findingKey.js +29 -0
- package/lib/docs/observe/hasNoEffect.js +31 -0
- package/lib/docs/observe/hasNoEffect.test.mjs +37 -0
- package/lib/docs/observe/installStepObserver.js +72 -0
- package/lib/docs/observe/isAppApiUrl.js +33 -0
- package/lib/docs/observe/parseAppApiUrl.js +37 -0
- package/lib/docs/observe/readStepObserver.js +42 -0
- package/lib/docs/observe/relativeSource.js +29 -0
- package/lib/docs/observe/resolveConfigKeySource.js +33 -0
- package/lib/docs/observe/takeJourneyEvents.js +36 -0
- package/lib/docs/observe/toAppErrorFailure.js +61 -0
- package/lib/docs/observe/usesSearchStage.js +45 -0
- package/lib/docs/observe/waitForClientErrorReports.js +31 -0
- package/lib/docs/observe/watchJourneyContext.js +75 -0
- package/lib/docs/observe/withAppErrors.js +31 -0
- package/lib/docs/observe/withAppErrors.test.mjs +101 -0
- package/lib/docs/openJourney.js +94 -0
- package/lib/docs/openJourneyEmail.js +41 -0
- package/lib/docs/openJourneyEmail.test.mjs +187 -0
- package/lib/docs/pageBlocks.js +47 -0
- package/lib/docs/pageBuildStatus.test.mjs +103 -0
- package/lib/{client/setPageId.js → docs/parseModuleSource.js} +11 -12
- package/lib/docs/rails/authEngineActions.js +53 -0
- package/lib/docs/rails/authEngineActions.test.mjs +69 -0
- package/lib/docs/rails/authEngineMethods.js +52 -0
- package/lib/docs/rails/authEngineMethods.test.mjs +36 -0
- package/lib/docs/rails/checkAuthActionsRan.js +66 -0
- package/lib/docs/rails/checkAuthActionsRan.test.mjs +149 -0
- package/lib/docs/rails/checkClickRails.js +56 -0
- package/lib/docs/rails/createDataSetRails.js +82 -0
- package/lib/docs/rails/createDataSetRails.test.mjs +172 -0
- package/lib/docs/rails/findExternalBlocks.js +147 -0
- package/lib/docs/rails/findExternalBlocks.test.mjs +254 -0
- package/lib/docs/rails/installAuthActionRecorder.js +56 -0
- package/lib/docs/rails/readAuthActionRecorder.js +32 -0
- package/lib/docs/rails/readBuiltArtifact.js +30 -0
- package/lib/docs/readConnectionPlugins.js +26 -0
- package/lib/docs/readDevAuthMode.js +32 -0
- package/lib/docs/readDocEntry.js +40 -0
- package/lib/docs/readDocTitle.js +26 -0
- package/lib/docs/readJourneyEmailMatch.js +57 -0
- package/lib/docs/readJourneyEmailMatch.test.mjs +110 -0
- package/lib/docs/readJourneySession.js +56 -0
- package/lib/docs/readMailOutbox.js +37 -0
- package/lib/docs/readPagePath.js +27 -0
- package/lib/docs/readPluginPackages.js +99 -0
- package/lib/docs/readProxyBuildWait.js +38 -0
- package/lib/docs/readRoutineSteps.js +45 -0
- package/lib/docs/registerShownTextEngine.js +118 -0
- package/lib/docs/requestRestart.js +30 -0
- package/lib/docs/requestRestart.test.mjs +49 -0
- package/lib/docs/resolvePageInstance.js +46 -0
- package/lib/docs/resolvePageInstance.test.mjs +81 -0
- package/lib/docs/resolveSource.js +11 -7
- package/lib/docs/resolveSource.test.mjs +1 -1
- package/lib/docs/resolveToolCaller.js +62 -0
- package/lib/docs/reviewPage.js +51 -0
- package/lib/docs/reviewPageBuilds.js +56 -0
- package/lib/docs/reviewPageBuilds.test.mjs +207 -0
- package/lib/docs/runCheck.js +75 -0
- package/lib/docs/runCheck.test.mjs +91 -0
- package/lib/docs/runCheckChild.js +49 -0
- package/lib/docs/runEndpoint.js +185 -0
- package/lib/docs/runEndpoint.test.mjs +509 -0
- package/lib/docs/runErrorBuffers.js +99 -0
- package/lib/docs/runErrorBuffers.test.mjs +95 -0
- package/lib/docs/runJourney.js +347 -0
- package/lib/docs/runJourney.test.mjs +2383 -0
- package/lib/docs/runJourneyAsUsers.js +44 -0
- package/lib/docs/runJourneyDataSet.test.mjs +274 -0
- package/lib/docs/runJourneySteps.js +1320 -0
- package/lib/docs/runRequest.js +100 -59
- package/lib/docs/runRequest.test.mjs +190 -0
- package/lib/docs/saveAnnotatedScreenshot.js +1 -1
- package/lib/docs/scaffoldPage.js +3 -1
- package/lib/docs/screenshotPage.js +163 -11
- package/lib/docs/screenshotPage.test.mjs +263 -1
- package/lib/docs/screenshotPageClip.test.mjs +4 -0
- package/lib/docs/searchDocs.js +82 -30
- package/lib/docs/searchDocs.test.mjs +100 -0
- package/lib/docs/searchIcons.js +90 -0
- package/lib/docs/searchIcons.test.mjs +127 -0
- package/lib/docs/selectExercised.js +39 -0
- package/lib/docs/selectFinalState.js +66 -0
- package/lib/docs/selectFinalState.test.mjs +51 -0
- package/lib/docs/serverErrorStore.js +54 -0
- package/lib/docs/serverErrorStore.test.mjs +50 -0
- package/lib/docs/setupTestFixtures.mjs +133 -39
- package/lib/docs/shownTextSelector.js +28 -0
- package/lib/docs/snapshotState.js +13 -5
- package/lib/docs/splitSearchTerms.js +62 -0
- package/lib/docs/splitSearchTerms.test.mjs +50 -0
- package/lib/docs/stateCheckpoints.test.mjs +77 -0
- package/lib/docs/tabAvailable.js +6 -5
- package/lib/docs/tabChannel.js +127 -21
- package/lib/docs/tabChannel.test.mjs +187 -29
- package/lib/docs/unsettledPageNote.js +24 -0
- package/lib/docs/validateJourneyMail.js +36 -0
- package/lib/docs/validateJourneyTimeout.js +38 -0
- package/lib/docs/validateJourneyTimeout.test.mjs +29 -0
- package/lib/docs/validateRecordingParam.js +42 -0
- package/lib/docs/validateStateSelection.js +33 -0
- package/lib/docs/validateStateSelection.test.mjs +33 -0
- package/lib/docs/validateViewport.js +51 -0
- package/lib/docs/validateViewport.test.mjs +54 -0
- package/lib/docs/waitForBuild.js +50 -0
- package/lib/docs/waitForBuild.test.mjs +75 -0
- package/lib/docs/waitForJourneyEmail.js +77 -0
- package/lib/docs/withBrowserSlot.js +45 -0
- package/lib/docs/withBrowserSlot.test.mjs +75 -0
- package/lib/docs/withDataSession.js +53 -0
- package/lib/server/applyDataSetRedirect.js +92 -0
- package/lib/server/applyDataSetRedirect.test.mjs +446 -0
- package/lib/server/applyDataSetRedirectTenantReach.test.mjs +207 -0
- package/lib/server/applyDataSetRedirectWalled.test.mjs +134 -0
- package/lib/server/auth/createSystemContext.js +73 -0
- package/lib/server/auth/{getAuthConfig.js → getAuth.js} +15 -9
- package/lib/server/auth/getHeadlessUser.js +9 -8
- package/lib/server/auth/getHeadlessUser.test.mjs +41 -0
- package/lib/server/auth/getMockUser.js +18 -14
- package/lib/server/auth/{session.js → getStrategies.js} +17 -16
- package/lib/server/auth/headlessUser.js +3 -2
- package/lib/server/auth/journeyActor.js +35 -0
- package/lib/server/auth/resolveHeadlessUser.test.mjs +0 -4
- package/lib/server/checkPageRecord.js +44 -0
- package/lib/server/contextMapBudget.js +24 -0
- package/lib/server/contextMapBudget.test.mjs +98 -0
- package/lib/server/continueJitKeys.js +28 -0
- package/lib/server/continueJitKeys.test.mjs +43 -0
- package/lib/server/createDataSessionEndedError.js +33 -0
- package/lib/server/createDataSetRefusal.js +26 -0
- package/lib/server/createLowdefyContext.js +168 -41
- package/lib/server/createLowdefyContext.test.mjs +331 -8
- package/lib/server/getClientAddress.js +51 -0
- package/lib/server/getClientAddress.test.mjs +56 -0
- package/lib/server/getPageJitEnrichment.test.mjs +29 -11
- package/lib/server/hashConfigContent.js +26 -0
- package/lib/server/importAppCode.test.mjs +57 -0
- package/lib/server/isRoutineStep.js +27 -0
- package/lib/server/jitPageBuilder.js +309 -126
- package/lib/server/jitPageBuilder.skipPluginChecks.test.mjs +78 -0
- package/lib/server/jitPageBuilder.test.mjs +218 -0
- package/lib/server/journeyCookies/JOURNEY_COOKIES.js +37 -0
- package/lib/server/journeyCookies/forwardJourneyCookies.js +46 -0
- package/lib/server/journeyCookies/readJourneyCookie.js +52 -0
- package/lib/server/journeyCookies/writeJourneyCookie.js +46 -0
- package/lib/server/journeyCookies.js +22 -0
- package/lib/server/journeyCookies.test.mjs +145 -0
- package/lib/server/loadDynamicJsMap.js +47 -0
- package/lib/server/log/createHandleError.js +38 -2
- package/lib/server/log/createHandleError.test.mjs +125 -2
- package/lib/server/log/createLogger.js +3 -0
- package/lib/server/log/createLogger.test.mjs +15 -0
- package/lib/server/log/logRequest.js +2 -3
- package/lib/server/mutantDataSetWrappers.test.mjs +115 -0
- package/lib/server/mutants/applyMutant.js +39 -0
- package/lib/server/mutants/artifactPatterns.js +25 -0
- package/lib/server/mutants/buildAnchor.js +45 -0
- package/lib/server/mutants/collectSharedIds.js +41 -0
- package/lib/server/mutants/configPathSegments.js +38 -0
- package/lib/server/mutants/createMutantReadConfigFile.js +42 -0
- package/lib/server/mutants/describeEvent.js +22 -0
- package/lib/server/mutants/enumerateArtifact.js +56 -0
- package/lib/server/mutants/findNodeByKey.js +45 -0
- package/lib/server/mutants/findNodeByPointer.js +49 -0
- package/lib/server/mutants/getArtifactKind.js +32 -0
- package/lib/server/mutants/groupMutantCopies.js +56 -0
- package/lib/server/mutants/hashArtifact.js +25 -0
- package/lib/server/mutants/hashMutantTarget.js +34 -0
- package/lib/server/mutants/listMutants.js +122 -0
- package/lib/server/mutants/listMutants.test.mjs +502 -0
- package/lib/server/mutants/mutantId.js +30 -0
- package/lib/server/mutants/mutantRuns.js +57 -0
- package/lib/server/mutants/mutantRuns.test.mjs +136 -0
- package/lib/server/mutants/operators/dropAction.js +47 -0
- package/lib/server/mutants/operators/dropBlock.js +44 -0
- package/lib/server/mutants/operators/dropPayload.js +52 -0
- package/lib/server/mutants/operators/dropStep.js +44 -0
- package/lib/server/mutants/operators/flipVisible.js +53 -0
- package/lib/server/mutants/operators/index.js +37 -0
- package/lib/server/mutants/operators/retargetLink.js +72 -0
- package/lib/server/mutants/operators/skipValidate.js +77 -0
- package/lib/server/mutants/operators/swapIf.js +112 -0
- package/lib/server/mutants/operators.test.mjs +396 -0
- package/lib/server/mutants/positionFreePath.js +38 -0
- package/lib/server/mutants/removeFromParent.js +28 -0
- package/lib/server/mutants/test/fixtures.mjs +173 -0
- package/lib/server/mutants/test/keyArtifact.mjs +63 -0
- package/lib/server/mutants/validateMutantParam.js +69 -0
- package/lib/server/mutants/validateMutantsBody.js +88 -0
- package/lib/server/mutants/walkArtifact.js +179 -0
- package/lib/server/pageBuildRecords.js +131 -0
- package/lib/server/pageBuildRecords.test.mjs +258 -0
- package/lib/server/pageCache.mjs +22 -7
- package/lib/server/pageCache.test.mjs +22 -7
- package/lib/server/pageRebuilds.test.mjs +543 -0
- package/lib/server/pruneJitMaps.js +36 -0
- package/lib/server/pruneJitMaps.test.mjs +55 -0
- package/lib/server/readInstanceRecord.js +33 -0
- package/lib/server/readInstanceRecord.test.mjs +99 -0
- package/lib/server/readMergedMaps.js +86 -0
- package/lib/server/readMergedMaps.test.mjs +79 -0
- package/lib/server/recording/appendRecords.js +33 -0
- package/lib/server/recording/errorRecordingStamp.js +34 -0
- package/lib/server/recording/errorRecordingStamp.test.mjs +31 -0
- package/lib/server/recording/isRecordingEnabled.js +31 -0
- package/lib/server/recording/readRecordingCookie.js +71 -0
- package/lib/server/recording/readRecordingCookie.test.mjs +73 -0
- package/lib/server/recording/recordingCookiePayload.js +33 -0
- package/lib/server/recording/servedBuilds.js +46 -0
- package/lib/server/recording/servedBuilds.test.mjs +42 -0
- package/lib/server/sinkExternalConnections.js +95 -0
- package/lib/server/sinkExternalConnections.test.mjs +135 -0
- package/lib/server/skipStaleMapWrites.js +62 -0
- package/lib/server/skipStaleMapWrites.test.mjs +113 -0
- package/lib/server/startIdleGc.js +67 -0
- package/lib/server/startIdleGc.test.mjs +138 -0
- package/lib/server/testFixtures/importAppCodeTwice.mjs +70 -0
- package/lib/server/trackSessionWork.js +30 -0
- package/lib/vite/createDevServerExclude.js +40 -0
- package/lib/vite/createDevServerExclude.test.mjs +79 -0
- package/manager/getContext.mjs +25 -3
- package/manager/processes/initialBuild.mjs +17 -1
- package/manager/processes/initialBuild.test.mjs +104 -0
- package/manager/processes/lowdefyBuild.mjs +31 -7
- package/manager/processes/lowdefyBuild.skipPluginChecks.test.mjs +72 -0
- package/manager/processes/lowdefyBuild.test.mjs +136 -1
- package/manager/processes/optimizeDependencies.mjs +59 -0
- package/manager/processes/restartServer.mjs +34 -6
- package/manager/processes/restartServer.test.mjs +162 -0
- package/manager/processes/shutdownServer.mjs +11 -0
- package/manager/processes/shutdownServer.test.mjs +45 -0
- package/manager/processes/startFirstServer.mjs +46 -0
- package/manager/processes/startFirstServer.test.mjs +326 -0
- package/manager/processes/startMailSink.mjs +135 -0
- package/manager/processes/startMailSink.test.mjs +146 -0
- package/manager/processes/startProxy.mjs +129 -12
- package/manager/processes/startProxy.test.mjs +366 -0
- package/manager/processes/startServer.mjs +47 -6
- package/manager/processes/startServer.test.mjs +155 -0
- package/manager/processes/startWatchers.mjs +6 -4
- package/manager/processes/syncServer.mjs +69 -0
- package/manager/processes/syncServer.test.mjs +141 -0
- package/manager/processes/waitForDevServer.mjs +48 -0
- package/manager/processes/waitForDevServer.test.mjs +112 -0
- package/manager/run.mjs +128 -43
- package/manager/utils/BatchChanges.mjs +21 -5
- package/manager/utils/BatchChanges.test.mjs +77 -0
- package/manager/utils/acquireDevInstance.mjs +99 -0
- package/manager/utils/acquireDevInstance.test.mjs +160 -0
- package/manager/utils/createBuildActivity.mjs +67 -0
- package/manager/utils/createBuildActivity.test.mjs +58 -0
- package/manager/utils/createChangeSignal.mjs +39 -0
- package/manager/utils/createChangeSignal.test.mjs +62 -0
- package/manager/utils/createCustomPluginMessagesMap.mjs +23 -33
- package/manager/utils/createCustomPluginTypesMap.mjs +24 -30
- package/manager/utils/createCustomPluginTypesMap.test.mjs +94 -0
- package/manager/utils/createDotPathIgnore.mjs +44 -0
- package/manager/utils/createDotPathIgnore.test.mjs +65 -0
- package/manager/utils/createIdleGc.mjs +51 -0
- package/manager/utils/createIdleGc.test.mjs +77 -0
- package/manager/utils/createRequestActivity.mjs +100 -0
- package/manager/utils/createRequestActivity.test.mjs +121 -0
- package/manager/utils/createServerArtifactTracker.mjs +83 -0
- package/manager/utils/createServerArtifactTracker.test.mjs +78 -0
- package/manager/utils/createServerEnv.mjs +39 -0
- package/manager/utils/filesHaveSameBytes.mjs +41 -0
- package/manager/utils/findBuildFilesOutsideWatch.mjs +59 -0
- package/manager/utils/findBuildFilesOutsideWatch.test.mjs +111 -0
- package/manager/utils/importFresh.mjs +46 -0
- package/manager/utils/importFresh.test.mjs +72 -0
- package/manager/utils/importFreshWorker.mjs +20 -0
- package/manager/utils/killTaggedBrowser.mjs +35 -0
- package/manager/utils/pagePathChanged.mjs +56 -0
- package/manager/utils/pruneRecordings.mjs +85 -0
- package/manager/utils/pruneRecordings.test.mjs +117 -0
- package/manager/utils/publishBuildDirectory.mjs +121 -0
- package/manager/utils/publishBuildDirectory.order.test.mjs +74 -0
- package/manager/utils/publishBuildDirectory.test.mjs +262 -0
- package/manager/utils/readBasePath.mjs +27 -0
- package/manager/utils/readBasePath.test.mjs +43 -0
- package/manager/utils/readBuildStatusWait.mjs +67 -0
- package/manager/utils/readManagerVersion.mjs +30 -0
- package/manager/utils/readManagerVersion.test.mjs +35 -0
- package/manager/utils/readPluginDefinitions.mjs +36 -0
- package/manager/utils/resolveDevAuthUrl.mjs +58 -0
- package/manager/utils/resolveDevAuthUrl.test.mjs +107 -0
- package/manager/utils/resolvePorts.mjs +49 -0
- package/manager/utils/setupWatcher.mjs +19 -11
- package/manager/utils/startRecordingPruner.mjs +45 -0
- package/manager/utils/startRecordingPruner.test.mjs +66 -0
- package/manager/utils/waitForChildExit.mjs +53 -0
- package/manager/utils/waitForChildExit.test.mjs +70 -0
- package/manager/utils/waitForServer.mjs +44 -0
- package/manager/utils/writeBuildStatus.mjs +1 -1
- package/manager/watchers/createPluginSourceIgnore.mjs +77 -0
- package/manager/watchers/envWatcher.mjs +9 -2
- package/manager/watchers/envWatcher.test.mjs +87 -0
- package/manager/watchers/listServerSidePackages.mjs +47 -0
- package/manager/watchers/listServerSidePackages.test.mjs +38 -0
- package/manager/watchers/lowdefyBuildWatcher.mjs +106 -22
- package/manager/watchers/lowdefyBuildWatcher.test.mjs +309 -0
- package/manager/watchers/pluginSourceWatcher.mjs +79 -0
- package/manager/watchers/pluginSourceWatcher.test.mjs +222 -0
- package/manager/watchers/restartRequestWatcher.mjs +71 -0
- package/manager/watchers/restartRequestWatcher.test.mjs +111 -0
- package/manager/watchers/selectLocalPluginPackages.mjs +48 -0
- package/manager/watchers/selectLocalPluginPackages.test.mjs +73 -0
- package/manager/watchers/serverPackageWatcher.mjs +38 -0
- package/package.json +60 -47
- package/package.original.json +60 -47
- package/src/app.js +131 -20
- package/src/html/renderDevPage.js +63 -11
- package/src/html/renderDevPage.test.mjs +138 -0
- package/src/lib/getRequestPath.js +29 -0
- package/src/middleware/createSameOriginGuard.js +37 -0
- package/src/middleware/createSameOriginGuard.test.mjs +102 -0
- package/src/middleware/errorHandler.js +51 -1
- package/src/middleware/errorHandler.test.mjs +173 -3
- package/src/middleware/isRebindingSafeHost.js +44 -0
- package/src/middleware/isRebindingSafeHost.test.mjs +32 -0
- package/src/middleware/localDevToolsOnly.js +38 -0
- package/src/middleware/localDevToolsOnly.test.mjs +61 -0
- package/src/middleware/noStore.js +27 -0
- package/src/middleware/noStore.test.mjs +48 -0
- package/src/middleware/requestTimeout.js +38 -0
- package/src/middleware/staleFlag.js +76 -0
- package/src/middleware/staleFlag.test.mjs +127 -0
- package/src/middleware/stampCaller.js +38 -0
- package/src/middleware/stampCaller.test.mjs +64 -0
- package/src/routes/agent.js +15 -3
- package/src/routes/auth.js +29 -20
- package/src/routes/auth.test.mjs +30 -56
- package/src/routes/clientError.js +13 -13
- package/src/routes/cron.js +3 -1
- package/src/routes/cronForward.js +3 -1
- package/src/routes/detached.js +22 -9
- package/src/routes/devInspect.js +17 -8
- package/src/routes/devInspect.test.mjs +44 -7
- package/src/routes/devRecording.js +113 -0
- package/src/routes/devRecording.test.mjs +253 -0
- package/src/routes/docs/buildStatus.js +10 -2
- package/src/routes/docs/buildStatus.test.mjs +46 -0
- package/src/routes/docs/content.js +5 -3
- package/src/routes/docs/evalOperator.js +15 -1
- package/src/routes/docs/events.js +50 -0
- package/src/routes/docs/events.test.mjs +117 -0
- package/src/routes/docs/find.js +9 -1
- package/src/routes/docs/icons.js +30 -0
- package/src/routes/docs/inspectState.js +16 -1
- package/src/routes/docs/journey.js +194 -0
- package/src/routes/docs/journey.test.mjs +401 -0
- package/src/routes/docs/journeyRefusals.test.mjs +71 -0
- package/src/routes/docs/loadState.js +4 -2
- package/src/routes/docs/mcp.js +34 -3
- package/src/routes/docs/mcp.test.mjs +130 -0
- package/src/routes/docs/mutants.js +78 -0
- package/src/routes/docs/mutants.test.mjs +180 -0
- package/src/routes/docs/parsePathParamsParam.js +41 -0
- package/src/routes/docs/parsePathParamsParam.test.mjs +42 -0
- package/src/routes/docs/parseUserParam.js +27 -21
- package/src/routes/docs/parseUserParam.test.mjs +17 -5
- package/src/routes/docs/restart.js +35 -0
- package/src/routes/docs/restart.test.mjs +64 -0
- package/src/routes/docs/runEndpoint.js +54 -0
- package/src/routes/docs/runEndpoint.test.mjs +165 -0
- package/src/routes/docs/runRequest.js +25 -8
- package/src/routes/docs/runRequest.test.mjs +92 -0
- package/src/routes/docs/screenshot.js +50 -2
- package/src/routes/docs/screenshot.test.mjs +117 -0
- package/src/routes/docs/search.js +15 -2
- package/src/routes/docs/snapshotState.js +17 -3
- package/src/routes/endpoints.js +27 -26
- package/src/routes/endpointsTextAnswer.test.mjs +77 -0
- package/src/routes/feedback.js +10 -13
- package/src/routes/jitPage.js +99 -35
- package/src/routes/jitPage.test.mjs +248 -0
- package/src/routes/mcp.js +82 -5
- package/src/routes/mcp.test.mjs +215 -0
- package/src/routes/mcpMemberToken.test.mjs +125 -0
- package/src/routes/mcpProtectedResourceMetadata.js +34 -0
- package/src/routes/mcpProtectedResourceMetadata.test.mjs +65 -0
- package/src/routes/mountDevPageRoutes.js +25 -0
- package/src/routes/mountDevPageRoutes.test.mjs +30 -0
- package/src/routes/mountOauthDiscovery.js +44 -0
- package/src/routes/mountOauthDiscovery.test.mjs +79 -0
- package/src/routes/normalizeMcpProtocolVersionHeader.js +46 -0
- package/src/routes/normalizeMcpProtocolVersionHeader.test.mjs +62 -0
- package/src/routes/reload.js +16 -0
- package/src/routes/request.js +6 -4
- package/src/routes/request.test.mjs +9 -5
- package/src/routes/requestBody.test.mjs +159 -0
- package/src/routes/usage.js +6 -2
- package/src/routes/user.js +27 -0
- package/src/routes/websocket.js +29 -8
- package/src/routes/websocket.test.mjs +65 -0
- package/src/routes/wellKnownFallback.js +30 -0
- package/src/routes/wellKnownFallback.test.mjs +32 -0
- package/src/websocket/devWebSocket.js +41 -26
- package/src/websocket/devWebSocket.test.mjs +157 -0
- package/vite.config.js +53 -23
- package/lib/server/auth/getDevSession.js +0 -70
- package/lib/server/auth/getDevSession.test.mjs +0 -138
- package/manager/processes/warnAuthUrlPortMismatch.mjs +0 -47
- package/manager/processes/warnAuthUrlPortMismatch.test.mjs +0 -93
- package/manager/watchers/moduleBuildWatcher.mjs +0 -79
- package/manager/watchers/serverArtifactWatcher.mjs +0 -120
- package/src/routes/apiPage.js +0 -37
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lowdefy/server-dev",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"homepage": "https://lowdefy.com",
|
|
@@ -39,62 +39,69 @@
|
|
|
39
39
|
],
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@ant-design/cssinjs": "2.1.2",
|
|
42
|
-
"@ant-design/x": "2.
|
|
43
|
-
"@auth/
|
|
44
|
-
"@
|
|
45
|
-
"@hono/mcp": "0.3.
|
|
42
|
+
"@ant-design/x": "2.9.0",
|
|
43
|
+
"@better-auth/oauth-provider": "1.7.7",
|
|
44
|
+
"@better-auth/passkey": "1.7.7",
|
|
45
|
+
"@hono/mcp": "0.3.2",
|
|
46
46
|
"@hono/node-server": "2.0.10",
|
|
47
47
|
"@hono/vite-dev-server": "0.26.0",
|
|
48
|
-
"@lowdefy/actions-core": "
|
|
49
|
-
"@lowdefy/api": "
|
|
50
|
-
"@lowdefy/block-utils": "
|
|
51
|
-
"@lowdefy/blocks-aggrid": "
|
|
52
|
-
"@lowdefy/blocks-antd": "
|
|
53
|
-
"@lowdefy/blocks-antd-x": "
|
|
54
|
-
"@lowdefy/blocks-basic": "
|
|
55
|
-
"@lowdefy/blocks-
|
|
56
|
-
"@lowdefy/blocks-
|
|
57
|
-
"@lowdefy/blocks-
|
|
58
|
-
"@lowdefy/blocks-
|
|
59
|
-
"@lowdefy/
|
|
60
|
-
"@lowdefy/
|
|
61
|
-
"@lowdefy/
|
|
62
|
-
"@lowdefy/
|
|
63
|
-
"@lowdefy/
|
|
64
|
-
"@lowdefy/
|
|
65
|
-
"@lowdefy/
|
|
66
|
-
"@lowdefy/
|
|
67
|
-
"@lowdefy/
|
|
68
|
-
"@lowdefy/
|
|
69
|
-
"@lowdefy/
|
|
70
|
-
"@lowdefy/
|
|
71
|
-
"@lowdefy/
|
|
72
|
-
"@lowdefy/
|
|
73
|
-
"@lowdefy/operators-
|
|
74
|
-
"@lowdefy/operators-
|
|
75
|
-
"@lowdefy/operators-
|
|
76
|
-
"@lowdefy/operators-
|
|
77
|
-
"@lowdefy/
|
|
78
|
-
"@lowdefy/
|
|
79
|
-
"@
|
|
80
|
-
"@
|
|
48
|
+
"@lowdefy/actions-core": "7.1.0",
|
|
49
|
+
"@lowdefy/api": "7.1.0",
|
|
50
|
+
"@lowdefy/block-utils": "7.1.0",
|
|
51
|
+
"@lowdefy/blocks-aggrid": "7.1.0",
|
|
52
|
+
"@lowdefy/blocks-antd": "7.1.0",
|
|
53
|
+
"@lowdefy/blocks-antd-x": "7.1.0",
|
|
54
|
+
"@lowdefy/blocks-basic": "7.1.0",
|
|
55
|
+
"@lowdefy/blocks-captcha": "7.1.0",
|
|
56
|
+
"@lowdefy/blocks-echarts": "7.1.0",
|
|
57
|
+
"@lowdefy/blocks-loaders": "7.1.0",
|
|
58
|
+
"@lowdefy/blocks-markdown": "7.1.0",
|
|
59
|
+
"@lowdefy/blocks-table": "7.1.0",
|
|
60
|
+
"@lowdefy/blocks-tiptap": "7.1.0",
|
|
61
|
+
"@lowdefy/build": "7.1.0",
|
|
62
|
+
"@lowdefy/client": "7.1.0",
|
|
63
|
+
"@lowdefy/connection-axios-http": "7.1.0",
|
|
64
|
+
"@lowdefy/connection-mongodb": "7.1.0",
|
|
65
|
+
"@lowdefy/docs-content": "7.1.0",
|
|
66
|
+
"@lowdefy/e2e-utils": "7.1.0",
|
|
67
|
+
"@lowdefy/engine": "7.1.0",
|
|
68
|
+
"@lowdefy/errors": "7.1.0",
|
|
69
|
+
"@lowdefy/helpers": "7.1.0",
|
|
70
|
+
"@lowdefy/layout": "7.1.0",
|
|
71
|
+
"@lowdefy/logger": "7.1.0",
|
|
72
|
+
"@lowdefy/node-utils": "7.1.0",
|
|
73
|
+
"@lowdefy/operators-change-case": "7.1.0",
|
|
74
|
+
"@lowdefy/operators-cron": "7.1.0",
|
|
75
|
+
"@lowdefy/operators-dayjs": "7.1.0",
|
|
76
|
+
"@lowdefy/operators-diff": "7.1.0",
|
|
77
|
+
"@lowdefy/operators-js": "7.1.0",
|
|
78
|
+
"@lowdefy/operators-mql": "7.1.0",
|
|
79
|
+
"@lowdefy/operators-nunjucks": "7.1.0",
|
|
80
|
+
"@lowdefy/operators-uuid": "7.1.0",
|
|
81
|
+
"@lowdefy/operators-yaml": "7.1.0",
|
|
82
|
+
"@lowdefy/plugin-better-auth": "7.1.0",
|
|
83
|
+
"@lowdefy/websockets-core": "7.1.0",
|
|
84
|
+
"@modelcontextprotocol/sdk": "1.31.0",
|
|
85
|
+
"@tailwindcss/postcss": "4.3.3",
|
|
81
86
|
"@vitejs/plugin-react": "6.0.2",
|
|
82
|
-
"antd": "6.
|
|
87
|
+
"antd": "6.6.5",
|
|
88
|
+
"better-auth": "1.7.7",
|
|
83
89
|
"chokidar": "3.5.3",
|
|
84
90
|
"dayjs": "1.11.20",
|
|
85
91
|
"dotenv": "16.3.1",
|
|
86
|
-
"hono": "4.13.
|
|
92
|
+
"hono": "4.13.7",
|
|
87
93
|
"html-to-image": "1.11.13",
|
|
94
|
+
"mongodb": "7.2.0",
|
|
95
|
+
"mongodb-memory-server-core": "9.2.0",
|
|
88
96
|
"opener": "1.5.2",
|
|
89
97
|
"pino": "10.3.1",
|
|
90
98
|
"playwright-core": "1.59.1",
|
|
91
|
-
"
|
|
92
|
-
"process": "0.11.10",
|
|
99
|
+
"postal-mime": "3.0.0",
|
|
93
100
|
"react": "18.2.0",
|
|
94
101
|
"react-dom": "18.2.0",
|
|
95
|
-
"
|
|
102
|
+
"smtp-server": "3.19.13",
|
|
96
103
|
"swr": "2.2.4",
|
|
97
|
-
"tailwindcss": "4.3.
|
|
104
|
+
"tailwindcss": "4.3.3",
|
|
98
105
|
"tinykeys": "3.0.0",
|
|
99
106
|
"uuid": "14.0.0",
|
|
100
107
|
"vite": "8.0.16",
|
|
@@ -104,10 +111,14 @@
|
|
|
104
111
|
"zod": "3.25.76"
|
|
105
112
|
},
|
|
106
113
|
"devDependencies": {
|
|
107
|
-
"jest": "28.1.3"
|
|
114
|
+
"@jest/globals": "28.1.3",
|
|
115
|
+
"@shelf/jest-mongodb": "4.3.2",
|
|
116
|
+
"jest": "28.1.3",
|
|
117
|
+
"jest-environment-jsdom": "28.1.3",
|
|
118
|
+
"nodemailer": "10.0.13"
|
|
108
119
|
},
|
|
109
120
|
"engines": {
|
|
110
|
-
"node": ">=
|
|
121
|
+
"node": ">=24"
|
|
111
122
|
},
|
|
112
123
|
"publishConfig": {
|
|
113
124
|
"access": "public"
|
|
@@ -116,6 +127,8 @@
|
|
|
116
127
|
"scripts": {
|
|
117
128
|
"build": "cp package.json package.original.json || copy package.json package.original.json",
|
|
118
129
|
"start": "node manager/run.mjs",
|
|
119
|
-
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
|
|
130
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
|
131
|
+
"test:fixture": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.fixture.config.mjs",
|
|
132
|
+
"test:mongodb": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.mongodb.config.mjs"
|
|
120
133
|
}
|
|
121
134
|
}
|
package/package.original.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lowdefy/server-dev",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"homepage": "https://lowdefy.com",
|
|
@@ -41,66 +41,75 @@
|
|
|
41
41
|
"build": "cp package.json package.original.json || copy package.json package.original.json",
|
|
42
42
|
"prepublishOnly": "pnpm build",
|
|
43
43
|
"start": "node manager/run.mjs",
|
|
44
|
-
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
|
|
44
|
+
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js",
|
|
45
|
+
"test:fixture": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.fixture.config.mjs",
|
|
46
|
+
"test:mongodb": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.mongodb.config.mjs"
|
|
45
47
|
},
|
|
46
48
|
"dependencies": {
|
|
47
49
|
"@ant-design/cssinjs": "2.1.2",
|
|
48
|
-
"@ant-design/x": "2.
|
|
49
|
-
"@auth/
|
|
50
|
-
"@
|
|
51
|
-
"@hono/mcp": "0.3.
|
|
50
|
+
"@ant-design/x": "2.9.0",
|
|
51
|
+
"@better-auth/oauth-provider": "1.7.7",
|
|
52
|
+
"@better-auth/passkey": "1.7.7",
|
|
53
|
+
"@hono/mcp": "0.3.2",
|
|
52
54
|
"@hono/node-server": "2.0.10",
|
|
53
55
|
"@hono/vite-dev-server": "0.26.0",
|
|
54
|
-
"@lowdefy/actions-core": "
|
|
55
|
-
"@lowdefy/api": "
|
|
56
|
-
"@lowdefy/block-utils": "
|
|
57
|
-
"@lowdefy/blocks-aggrid": "
|
|
58
|
-
"@lowdefy/blocks-antd": "
|
|
59
|
-
"@lowdefy/blocks-antd-x": "
|
|
60
|
-
"@lowdefy/blocks-basic": "
|
|
61
|
-
"@lowdefy/blocks-
|
|
62
|
-
"@lowdefy/blocks-
|
|
63
|
-
"@lowdefy/blocks-
|
|
64
|
-
"@lowdefy/blocks-
|
|
65
|
-
"@lowdefy/
|
|
66
|
-
"@lowdefy/
|
|
67
|
-
"@lowdefy/
|
|
68
|
-
"@lowdefy/
|
|
69
|
-
"@lowdefy/
|
|
70
|
-
"@lowdefy/
|
|
71
|
-
"@lowdefy/
|
|
72
|
-
"@lowdefy/
|
|
73
|
-
"@lowdefy/
|
|
74
|
-
"@lowdefy/
|
|
75
|
-
"@lowdefy/
|
|
76
|
-
"@lowdefy/
|
|
77
|
-
"@lowdefy/
|
|
78
|
-
"@lowdefy/
|
|
79
|
-
"@lowdefy/operators-
|
|
80
|
-
"@lowdefy/operators-
|
|
81
|
-
"@lowdefy/operators-
|
|
82
|
-
"@lowdefy/operators-
|
|
83
|
-
"@lowdefy/
|
|
84
|
-
"@lowdefy/
|
|
85
|
-
"@
|
|
86
|
-
"@
|
|
56
|
+
"@lowdefy/actions-core": "7.1.0",
|
|
57
|
+
"@lowdefy/api": "7.1.0",
|
|
58
|
+
"@lowdefy/block-utils": "7.1.0",
|
|
59
|
+
"@lowdefy/blocks-aggrid": "7.1.0",
|
|
60
|
+
"@lowdefy/blocks-antd": "7.1.0",
|
|
61
|
+
"@lowdefy/blocks-antd-x": "7.1.0",
|
|
62
|
+
"@lowdefy/blocks-basic": "7.1.0",
|
|
63
|
+
"@lowdefy/blocks-captcha": "7.1.0",
|
|
64
|
+
"@lowdefy/blocks-echarts": "7.1.0",
|
|
65
|
+
"@lowdefy/blocks-loaders": "7.1.0",
|
|
66
|
+
"@lowdefy/blocks-markdown": "7.1.0",
|
|
67
|
+
"@lowdefy/blocks-table": "7.1.0",
|
|
68
|
+
"@lowdefy/blocks-tiptap": "7.1.0",
|
|
69
|
+
"@lowdefy/build": "7.1.0",
|
|
70
|
+
"@lowdefy/client": "7.1.0",
|
|
71
|
+
"@lowdefy/connection-axios-http": "7.1.0",
|
|
72
|
+
"@lowdefy/connection-mongodb": "7.1.0",
|
|
73
|
+
"@lowdefy/docs-content": "7.1.0",
|
|
74
|
+
"@lowdefy/e2e-utils": "7.1.0",
|
|
75
|
+
"@lowdefy/engine": "7.1.0",
|
|
76
|
+
"@lowdefy/errors": "7.1.0",
|
|
77
|
+
"@lowdefy/helpers": "7.1.0",
|
|
78
|
+
"@lowdefy/layout": "7.1.0",
|
|
79
|
+
"@lowdefy/logger": "7.1.0",
|
|
80
|
+
"@lowdefy/node-utils": "7.1.0",
|
|
81
|
+
"@lowdefy/operators-change-case": "7.1.0",
|
|
82
|
+
"@lowdefy/operators-cron": "7.1.0",
|
|
83
|
+
"@lowdefy/operators-dayjs": "7.1.0",
|
|
84
|
+
"@lowdefy/operators-diff": "7.1.0",
|
|
85
|
+
"@lowdefy/operators-js": "7.1.0",
|
|
86
|
+
"@lowdefy/operators-mql": "7.1.0",
|
|
87
|
+
"@lowdefy/operators-nunjucks": "7.1.0",
|
|
88
|
+
"@lowdefy/operators-uuid": "7.1.0",
|
|
89
|
+
"@lowdefy/operators-yaml": "7.1.0",
|
|
90
|
+
"@lowdefy/plugin-better-auth": "7.1.0",
|
|
91
|
+
"@lowdefy/websockets-core": "7.1.0",
|
|
92
|
+
"@modelcontextprotocol/sdk": "1.31.0",
|
|
93
|
+
"@tailwindcss/postcss": "4.3.3",
|
|
87
94
|
"@vitejs/plugin-react": "6.0.2",
|
|
88
|
-
"antd": "6.
|
|
95
|
+
"antd": "6.6.5",
|
|
96
|
+
"better-auth": "1.7.7",
|
|
89
97
|
"chokidar": "3.5.3",
|
|
90
98
|
"dayjs": "1.11.20",
|
|
91
99
|
"dotenv": "16.3.1",
|
|
92
|
-
"hono": "4.13.
|
|
100
|
+
"hono": "4.13.7",
|
|
93
101
|
"html-to-image": "1.11.13",
|
|
102
|
+
"mongodb": "7.2.0",
|
|
103
|
+
"mongodb-memory-server-core": "9.2.0",
|
|
94
104
|
"opener": "1.5.2",
|
|
95
105
|
"pino": "10.3.1",
|
|
96
106
|
"playwright-core": "1.59.1",
|
|
97
|
-
"
|
|
98
|
-
"process": "0.11.10",
|
|
107
|
+
"postal-mime": "3.0.0",
|
|
99
108
|
"react": "18.2.0",
|
|
100
109
|
"react-dom": "18.2.0",
|
|
101
|
-
"
|
|
110
|
+
"smtp-server": "3.19.13",
|
|
102
111
|
"swr": "2.2.4",
|
|
103
|
-
"tailwindcss": "4.3.
|
|
112
|
+
"tailwindcss": "4.3.3",
|
|
104
113
|
"tinykeys": "3.0.0",
|
|
105
114
|
"uuid": "14.0.0",
|
|
106
115
|
"vite": "8.0.16",
|
|
@@ -110,10 +119,14 @@
|
|
|
110
119
|
"zod": "3.25.76"
|
|
111
120
|
},
|
|
112
121
|
"devDependencies": {
|
|
113
|
-
"jest": "28.1.3"
|
|
122
|
+
"@jest/globals": "28.1.3",
|
|
123
|
+
"@shelf/jest-mongodb": "4.3.2",
|
|
124
|
+
"jest": "28.1.3",
|
|
125
|
+
"jest-environment-jsdom": "28.1.3",
|
|
126
|
+
"nodemailer": "10.0.13"
|
|
114
127
|
},
|
|
115
128
|
"engines": {
|
|
116
|
-
"node": ">=
|
|
129
|
+
"node": ">=24"
|
|
117
130
|
},
|
|
118
131
|
"publishConfig": {
|
|
119
132
|
"access": "public"
|
package/src/app.js
CHANGED
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
|
|
17
17
|
import { Hono } from 'hono';
|
|
18
18
|
import { bodyLimit } from 'hono/body-limit';
|
|
19
|
-
import { initAuthConfig } from '@hono/auth-js';
|
|
20
19
|
import { serveStatic } from '@hono/node-server/serve-static';
|
|
20
|
+
import { runInCredentialScope } from '@lowdefy/node-utils';
|
|
21
21
|
|
|
22
22
|
import agentHandler from './routes/agent.js';
|
|
23
23
|
import apiContext from './middleware/apiContext.js';
|
|
@@ -30,6 +30,7 @@ import cronForwardHandler from './routes/cronForward.js';
|
|
|
30
30
|
import cronHandler from './routes/cron.js';
|
|
31
31
|
import detachedHandler from './routes/detached.js';
|
|
32
32
|
import devInspectHandler from './routes/devInspect.js';
|
|
33
|
+
import devRecordingHandler from './routes/devRecording.js';
|
|
33
34
|
import devToolsHandler from './routes/devTools.js';
|
|
34
35
|
import feedbackHandler from './routes/feedback.js';
|
|
35
36
|
import docsAppMapHandler from './routes/docs/appMap.js';
|
|
@@ -39,13 +40,18 @@ import docsCheckpointsListHandler from './routes/docs/checkpointsList.js';
|
|
|
39
40
|
import docsCheckpointsRevertHandler from './routes/docs/checkpointsRevert.js';
|
|
40
41
|
import docsContentHandler from './routes/docs/content.js';
|
|
41
42
|
import docsEvalOperatorHandler from './routes/docs/evalOperator.js';
|
|
43
|
+
import docsEventsHandler from './routes/docs/events.js';
|
|
42
44
|
import docsExamplesHandler from './routes/docs/examples.js';
|
|
43
45
|
import docsFindHandler from './routes/docs/find.js';
|
|
44
46
|
import docsIndexHandler from './routes/docs/index.js';
|
|
45
47
|
import docsInspectStateHandler from './routes/docs/inspectState.js';
|
|
48
|
+
import docsJourneyHandler from './routes/docs/journey.js';
|
|
49
|
+
import docsMutantsHandler from './routes/docs/mutants.js';
|
|
46
50
|
import docsLoadStateHandler from './routes/docs/loadState.js';
|
|
47
51
|
import docsMcpHandler from './routes/docs/mcp.js';
|
|
48
52
|
import docsPageConfigHandler from './routes/docs/pageConfig.js';
|
|
53
|
+
import docsRestartHandler from './routes/docs/restart.js';
|
|
54
|
+
import docsRunEndpointHandler from './routes/docs/runEndpoint.js';
|
|
49
55
|
import docsRunRequestHandler from './routes/docs/runRequest.js';
|
|
50
56
|
import docsSnapshotStateHandler from './routes/docs/snapshotState.js';
|
|
51
57
|
import docsStateCheckpointsListHandler from './routes/docs/stateCheckpointsList.js';
|
|
@@ -53,23 +59,41 @@ import docsPluginDocHandler from './routes/docs/pluginDoc.js';
|
|
|
53
59
|
import docsPluginsHandler from './routes/docs/plugins.js';
|
|
54
60
|
import docsSchemaHandler from './routes/docs/schema.js';
|
|
55
61
|
import docsScreenshotHandler from './routes/docs/screenshot.js';
|
|
62
|
+
import docsIconsHandler from './routes/docs/icons.js';
|
|
56
63
|
import docsSearchHandler from './routes/docs/search.js';
|
|
57
64
|
import docsTypesHandler from './routes/docs/types.js';
|
|
58
65
|
import endpointsHandler from './routes/endpoints.js';
|
|
59
|
-
import
|
|
66
|
+
import getAuth from '../lib/server/auth/getAuth.js';
|
|
67
|
+
import getStrategies from '../lib/server/auth/getStrategies.js';
|
|
68
|
+
import getMockUser from '../lib/server/auth/getMockUser.js';
|
|
60
69
|
import jitPageHandler from './routes/jitPage.js';
|
|
70
|
+
import localDevToolsOnly from './middleware/localDevToolsOnly.js';
|
|
61
71
|
import lowdefyConfig from '../lib/build/config.js';
|
|
62
72
|
import mcpHandler from './routes/mcp.js';
|
|
73
|
+
import mountDevPageRoutes from './routes/mountDevPageRoutes.js';
|
|
74
|
+
import mountOauthDiscovery from './routes/mountOauthDiscovery.js';
|
|
75
|
+
import noStore from './middleware/noStore.js';
|
|
76
|
+
import wellKnownFallbackHandler from './routes/wellKnownFallback.js';
|
|
63
77
|
import pingHandler from './routes/ping.js';
|
|
64
78
|
import reloadHandler from './routes/reload.js';
|
|
65
79
|
import renderDevPage from './html/renderDevPage.js';
|
|
66
80
|
import requestHandler from './routes/request.js';
|
|
81
|
+
import requestTimeout from './middleware/requestTimeout.js';
|
|
67
82
|
import rootHandler from './routes/root.js';
|
|
83
|
+
import staleFlag from './middleware/staleFlag.js';
|
|
84
|
+
import stampCaller from './middleware/stampCaller.js';
|
|
85
|
+
import startIdleGc from '../lib/server/startIdleGc.js';
|
|
86
|
+
import getDocsIndex from '../lib/docs/getDocsIndex.js';
|
|
68
87
|
import usageHandler from './routes/usage.js';
|
|
88
|
+
import userHandler from './routes/user.js';
|
|
69
89
|
import websocketHandler from './routes/websocket.js';
|
|
70
90
|
|
|
71
91
|
const basePath = lowdefyConfig.basePath ?? '';
|
|
72
92
|
|
|
93
|
+
// Same default as the production server, so a request that would time out in production (a 504
|
|
94
|
+
// the page shows as a generic error, beside the other requests' results) also times out in dev.
|
|
95
|
+
const requestTimeoutMs = lowdefyConfig.requestTimeout ?? 30000;
|
|
96
|
+
|
|
73
97
|
// Dev Hono app — mounted into Vite via @hono/vite-dev-server (Vite owns HTTP
|
|
74
98
|
// and serves /client/* modules with HMR; everything else lands here).
|
|
75
99
|
// No compression in dev (parity with the old next.config compress: false,
|
|
@@ -78,6 +102,10 @@ function createApp() {
|
|
|
78
102
|
const app = basePath ? new Hono().basePath(basePath) : new Hono();
|
|
79
103
|
const logger = createLogger({ server: 'lowdefy-dev' });
|
|
80
104
|
|
|
105
|
+
// Each request runs in its own credential scope: what it marks with _credential is scrubbed
|
|
106
|
+
// from every log line written while it is handled.
|
|
107
|
+
app.use('*', (c, next) => runInCredentialScope(next));
|
|
108
|
+
|
|
81
109
|
// No api context: SSE/health routes had no apiWrapper before.
|
|
82
110
|
app.get('/api/reload', reloadHandler);
|
|
83
111
|
app.get('/api/ping', pingHandler);
|
|
@@ -88,34 +116,59 @@ function createApp() {
|
|
|
88
116
|
// /lowdefy-feedback is a reserved page-path prefix in dev, like /lowdefy-docs.
|
|
89
117
|
app.post('/lowdefy-feedback', feedbackHandler);
|
|
90
118
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
initAuthConfig(() => getAuthConfig({ logger }))
|
|
100
|
-
);
|
|
119
|
+
const mockUser = getMockUser();
|
|
120
|
+
if (authJson.configured === true && !mockUser) {
|
|
121
|
+
// Construct the BetterAuth instance and strategy verifiers at startup so
|
|
122
|
+
// config errors fail boot instead of the first request, and so the
|
|
123
|
+
// process-memoized singletons capture the base logger rather than the
|
|
124
|
+
// first request's rid-scoped child.
|
|
125
|
+
getAuth({ logger });
|
|
126
|
+
getStrategies({ logger });
|
|
101
127
|
}
|
|
102
128
|
|
|
129
|
+
mountOauthDiscovery({
|
|
130
|
+
app,
|
|
131
|
+
auth: authJson.configured === true && !mockUser ? getAuth({ logger }) : null,
|
|
132
|
+
});
|
|
133
|
+
app.all('/.well-known/*', wellKnownFallbackHandler);
|
|
134
|
+
|
|
103
135
|
// Docs and MCP endpoint for AI coding agents — always on in dev. Serves
|
|
104
136
|
// schemas/examples/docs for every installed plugin (core and local) plus
|
|
105
137
|
// the extracted core docs (@lowdefy/docs-content). Mounted outside /api/*
|
|
106
138
|
// so it can't clash with user API endpoints; /lowdefy-docs is a reserved page
|
|
107
139
|
// prefix in dev. The handlers need no auth protection or api context —
|
|
108
|
-
// they read build artifacts and node_modules directly — but run-request
|
|
109
|
-
// and eval-operator
|
|
140
|
+
// they read build artifacts and node_modules directly — but run-request,
|
|
141
|
+
// run-endpoint and eval-operator build a full Lowdefy context (createLowdefyContext),
|
|
142
|
+
// which resolves the caller from the request headers via resolveAuthentication.
|
|
143
|
+
// The MCP transport is registered before staleFlag on purpose: hono
|
|
144
|
+
// dispatches in registration order, so the stale middleware never sees a
|
|
145
|
+
// JSON-RPC envelope. MCP carries its own stale notice, prepended to each
|
|
146
|
+
// tool result in createDocsMcpServer — merging fields into the envelope
|
|
147
|
+
// instead would put unknown members on a strictly-validated message.
|
|
148
|
+
// localDevToolsOnly comes first of all: it refuses requests a browser sends
|
|
149
|
+
// on behalf of another site. Registered twice because hono's `/*` pattern
|
|
150
|
+
// does not match the bare path.
|
|
151
|
+
app.use('/lowdefy-docs', localDevToolsOnly());
|
|
152
|
+
app.use('/lowdefy-docs/*', localDevToolsOnly());
|
|
110
153
|
app.all('/lowdefy-docs/mcp', docsMcpHandler);
|
|
154
|
+
// Flags every other docs response while the last build failed. Registered
|
|
155
|
+
// twice: hono's `/*` pattern does not match the bare path.
|
|
156
|
+
app.use('/lowdefy-docs', staleFlag());
|
|
157
|
+
app.use('/lowdefy-docs/*', staleFlag());
|
|
111
158
|
app.get('/lowdefy-docs', docsIndexHandler);
|
|
112
159
|
app.get('/lowdefy-docs/build-status', docsBuildStatusHandler);
|
|
113
|
-
|
|
160
|
+
// Push channel for non-MCP clients. Must sit above the `/lowdefy-docs/:kind`
|
|
161
|
+
// catch-all, which would otherwise treat "events" as a type kind.
|
|
162
|
+
app.get('/lowdefy-docs/events', docsEventsHandler);
|
|
163
|
+
app.get('/lowdefy-docs/page-config/:pageId{.+}', docsPageConfigHandler);
|
|
114
164
|
app.get('/lowdefy-docs/find/:id', docsFindHandler);
|
|
115
|
-
app.get('/lowdefy-docs/screenshot/:pageId', docsScreenshotHandler);
|
|
116
|
-
app.
|
|
165
|
+
app.get('/lowdefy-docs/screenshot/:pageId{.+}', docsScreenshotHandler);
|
|
166
|
+
app.post('/lowdefy-docs/journey', docsJourneyHandler);
|
|
167
|
+
app.post('/lowdefy-docs/mutants', docsMutantsHandler);
|
|
168
|
+
app.get('/lowdefy-docs/inspect-state/:pageId{.+}', docsInspectStateHandler);
|
|
117
169
|
app.post('/lowdefy-docs/eval-operator', docsEvalOperatorHandler);
|
|
118
170
|
app.post('/lowdefy-docs/run-request', docsRunRequestHandler);
|
|
171
|
+
app.post('/lowdefy-docs/run-endpoint', docsRunEndpointHandler);
|
|
119
172
|
app.get('/lowdefy-docs/app-map', docsAppMapHandler);
|
|
120
173
|
app.get('/lowdefy-docs/checkpoints', docsCheckpointsListHandler);
|
|
121
174
|
app.post('/lowdefy-docs/checkpoints', docsCheckpointsCreateHandler);
|
|
@@ -123,21 +176,71 @@ function createApp() {
|
|
|
123
176
|
app.get('/lowdefy-docs/state-checkpoints', docsStateCheckpointsListHandler);
|
|
124
177
|
app.post('/lowdefy-docs/state-checkpoints/snapshot', docsSnapshotStateHandler);
|
|
125
178
|
app.post('/lowdefy-docs/state-checkpoints/load', docsLoadStateHandler);
|
|
179
|
+
app.post('/lowdefy-docs/restart', docsRestartHandler);
|
|
126
180
|
// Live-tab inspection channel: dev tabs (client/Inspector.jsx) answer
|
|
127
181
|
// targeted SSE events by posting results here; GET lists connected tabs
|
|
128
182
|
// and serves checkpoint parts for the ?_checkpoint bootstrap.
|
|
183
|
+
// The live-tab channel acts on the developer's open tabs and loads recorded
|
|
184
|
+
// request mocks - the same cross-site guard as the docs tools.
|
|
185
|
+
app.use('/api/dev-inspect', localDevToolsOnly());
|
|
186
|
+
app.use('/api/dev-inspect/*', localDevToolsOnly());
|
|
129
187
|
app.all('/api/dev-inspect', devInspectHandler);
|
|
130
188
|
app.all('/api/dev-inspect/*', devInspectHandler);
|
|
189
|
+
// The dev recorder (client/Recorder.jsx) posts interaction records here.
|
|
190
|
+
// It needs no Lowdefy context, and registering it before apiContext keeps
|
|
191
|
+
// it out of the request timeout list.
|
|
192
|
+
app.use('/api/dev-recording', localDevToolsOnly());
|
|
193
|
+
app.post('/api/dev-recording', bodyLimit({ maxSize: 1024 * 1024 }), devRecordingHandler);
|
|
194
|
+
// Built now so the first doc search does not pay for reading every plugin
|
|
195
|
+
// and module's docs.
|
|
196
|
+
getDocsIndex();
|
|
131
197
|
app.get('/lowdefy-docs/plugins', docsPluginsHandler);
|
|
132
198
|
app.get('/lowdefy-docs/schema/:kind/:type', docsSchemaHandler);
|
|
133
199
|
app.get('/lowdefy-docs/examples/:type', docsExamplesHandler);
|
|
134
200
|
app.get('/lowdefy-docs/search', docsSearchHandler);
|
|
201
|
+
app.get('/lowdefy-docs/icons', docsIconsHandler);
|
|
135
202
|
app.get('/lowdefy-docs/plugin-doc/:package{.+}', docsPluginDocHandler);
|
|
136
203
|
app.get('/lowdefy-docs/content/:slug{.+}', docsContentHandler);
|
|
137
204
|
app.get('/lowdefy-docs/:kind', docsTypesHandler);
|
|
138
205
|
|
|
206
|
+
// Only the routes that run app logic: JIT page builds, the docs/MCP routes and the SSE streams
|
|
207
|
+
// are dev-only and can legitimately run longer than any production request.
|
|
208
|
+
if (requestTimeoutMs > 0) {
|
|
209
|
+
const timeoutMiddleware = requestTimeout({ timeoutMs: requestTimeoutMs });
|
|
210
|
+
[
|
|
211
|
+
'/api/request/*',
|
|
212
|
+
'/api/endpoints/*',
|
|
213
|
+
'/api/cron/*',
|
|
214
|
+
'/api/cron-forward/*',
|
|
215
|
+
'/api/detached/*',
|
|
216
|
+
].forEach((route) => app.use(route, timeoutMiddleware));
|
|
217
|
+
}
|
|
218
|
+
|
|
139
219
|
app.use('/api/*', apiContext());
|
|
140
|
-
|
|
220
|
+
// Responses that carry the caller's data are never stored by a browser or proxy cache,
|
|
221
|
+
// as in the production server. /api/root is the dev form of the root config the
|
|
222
|
+
// production page embeds. The page routes use the same middleware.
|
|
223
|
+
const noStoreMiddleware = noStore();
|
|
224
|
+
['/api/root', '/api/page/*', '/api/user', '/api/request/*', '/api/endpoints/*'].forEach((route) =>
|
|
225
|
+
app.use(route, noStoreMiddleware)
|
|
226
|
+
);
|
|
227
|
+
// Unified dev get-session: createLowdefyContext resolves the mock or headless
|
|
228
|
+
// caller into context.user on every path, so read it here rather than
|
|
229
|
+
// re-deriving the precedence. context.user is only absent in the real-engine
|
|
230
|
+
// case (the developer's own browser), which must fall through to BetterAuth.
|
|
231
|
+
// Registered before the /api/auth/* mount so this exact path wins while every
|
|
232
|
+
// other auth route still reaches the engine.
|
|
233
|
+
app.get('/api/auth/get-session', async (c, next) => {
|
|
234
|
+
const context = c.get('lowdefyContext');
|
|
235
|
+
if (context.user) return c.json({ session: { id: 'dev' }, user: context.user });
|
|
236
|
+
return next();
|
|
237
|
+
});
|
|
238
|
+
app.use('/api/auth/*', authMiddleware({ logger }));
|
|
239
|
+
// The caller each page, request and endpoint response was answered as: the
|
|
240
|
+
// client reloads when it differs from the caller it renders (stampCaller).
|
|
241
|
+
app.use('/api/request/*', stampCaller());
|
|
242
|
+
app.use('/api/endpoints/*', stampCaller());
|
|
243
|
+
app.use('/api/page/*', stampCaller());
|
|
141
244
|
app.get('/api/root', rootHandler);
|
|
142
245
|
app.get('/api/page/*', jitPageHandler);
|
|
143
246
|
app.all('/api/request/*', requestHandler);
|
|
@@ -152,6 +255,7 @@ function createApp() {
|
|
|
152
255
|
app.all('/api/agent/*', bodyLimit({ maxSize: 10 * 1024 * 1024 }), agentHandler);
|
|
153
256
|
app.all('/api/mcp', bodyLimit({ maxSize: 10 * 1024 * 1024 }), mcpHandler);
|
|
154
257
|
app.get('/api/websocket', websocketHandler);
|
|
258
|
+
app.get('/api/user', userHandler);
|
|
155
259
|
|
|
156
260
|
// User public assets (icons, images). Vite serves /client modules itself.
|
|
157
261
|
app.use(
|
|
@@ -164,12 +268,19 @@ function createApp() {
|
|
|
164
268
|
|
|
165
269
|
// Every page path renders the same shell — the client fetches config and
|
|
166
270
|
// handles home/404 routing, exactly like the old dev pages router did.
|
|
167
|
-
|
|
168
|
-
|
|
271
|
+
// The context middleware runs here too (mirroring the production server)
|
|
272
|
+
// so the shell can inject the resolved caller — without it the client's
|
|
273
|
+
// _user never carries roles/organization_id under `lowdefy dev`.
|
|
274
|
+
app.use('/*', apiContext());
|
|
275
|
+
// Registered after the static middleware, which answers a file without calling next().
|
|
276
|
+
app.use('/*', noStoreMiddleware);
|
|
277
|
+
mountDevPageRoutes({ app, renderPage: (c) => renderDevPage(c, { basePath }) });
|
|
169
278
|
|
|
170
279
|
app.onError(createErrorHandler({ basePath, logger }));
|
|
171
280
|
|
|
172
281
|
return app;
|
|
173
282
|
}
|
|
174
283
|
|
|
284
|
+
startIdleGc({ configDirectory: process.env.LOWDEFY_DIRECTORY_CONFIG });
|
|
285
|
+
|
|
175
286
|
export default createApp();
|