Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit3385d27

Browse files
authored
Merge branch 'dev' into feature-boomi-datasource
2 parentsd205a54 +75fc901 commit3385d27

File tree

8 files changed

+77
-39
lines changed

8 files changed

+77
-39
lines changed

‎client/packages/lowcoder/src/comps/comps/remoteComp/loaders.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,16 @@ import {
88
}from"types/remoteComp";
99

1010
asyncfunctionnpmLoader(
11-
remoteInfo:RemoteCompInfo
11+
{
12+
appId,
13+
...remoteInfo
14+
}:RemoteCompInfo&{appId?:string}
1215
):Promise<CompConstructor|null>{
1316

1417
// Falk: removed "packageVersion = "latest" as default value fir packageVersion - to ensure no automatic version jumping.
1518
constlocalPackageVersion=remoteInfo.packageVersion||"latest";
1619
const{ packageName, packageVersion, compName}=remoteInfo;
17-
constentry=`${NPM_PLUGIN_ASSETS_BASE_URL}/${packageName}@${localPackageVersion}/index.js`;
20+
constentry=`${NPM_PLUGIN_ASSETS_BASE_URL}/${appId}/${packageName}@${localPackageVersion}/index.js`;
1821

1922
try{
2023
constmodule=awaitimport(
@@ -51,7 +54,7 @@ async function bundleLoader(
5154
returncomp;
5255
}
5356

54-
exportconstloaders:Record<RemoteCompSource,RemoteCompLoader>={
57+
exportconstloaders:Record<RemoteCompSource,RemoteCompLoader<RemoteCompInfo&{appId?:string}>>={
5558
npm:npmLoader,
5659
bundle:bundleLoader,
5760
};

‎client/packages/lowcoder/src/comps/comps/remoteComp/remoteComp.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { CompContext } from "@lowcoder-ee/comps/utils/compContext";
1616
importReactfrom"react";
1717
importtype{AppState}from"@lowcoder-ee/redux/reducers";
1818
import{useSelector}from"react-redux";
19+
import{useApplicationId}from"@lowcoder-ee/util/hooks";
1920

2021
constViewError=styled.div`
2122
display: flex;
@@ -51,7 +52,7 @@ interface RemoteCompReadyAction {
5152

5253
interfaceRemoteCompViewProps{
5354
isLowcoderComp?:boolean;
54-
loadComp:(packageVersion?:string)=>Promise<void>;
55+
loadComp:(packageVersion?:string,appId?:string)=>Promise<void>;
5556
loadingElement?:()=>React.ReactNode;
5657
errorElement?:(error:any)=>React.ReactNode;
5758
source?:RemoteCompSource;
@@ -62,6 +63,7 @@ const RemoteCompView = React.memo((props: React.PropsWithChildren<RemoteCompView
6263
const[error,setError]=useState<any>("");
6364
consteditorState=useContext(EditorContext);
6465
constcompState=useContext(CompContext);
66+
constappId=useApplicationId();
6567
constlowcoderCompPackageVersion=editorState?.getAppSettings().lowcoderCompVersion||'latest';
6668
constlatestLowcoderCompsVersion=useSelector((state:AppState)=>state.npmPlugin.packageVersion['lowcoder-comps']);
6769

@@ -79,7 +81,7 @@ const RemoteCompView = React.memo((props: React.PropsWithChildren<RemoteCompView
7981

8082
useMount(()=>{
8183
setError("");
82-
loadComp(packageVersion).catch((e)=>{
84+
loadComp(packageVersion,appId).catch((e)=>{
8385
setError(String(e));
8486
});
8587
});
@@ -117,7 +119,7 @@ export function remoteComp<T extends RemoteCompInfo = RemoteCompInfo>(
117119
this.compValue=params.value;
118120
}
119121

120-
privateasyncload(packageVersion='latest'){
122+
privateasyncload(packageVersion='latest',appId='none'){
121123
if(!remoteInfo){
122124
return;
123125
}
@@ -129,7 +131,7 @@ export function remoteComp<T extends RemoteCompInfo = RemoteCompInfo>(
129131
log.error("loader not found, remote info:",remoteInfo);
130132
return;
131133
}
132-
constRemoteExportedComp=awaitfinalLoader({...remoteInfo, packageVersion});
134+
constRemoteExportedComp=awaitfinalLoader({...remoteInfo, packageVersion, appId});
133135
if(!RemoteExportedComp){
134136
return;
135137
}
@@ -159,7 +161,7 @@ export function remoteComp<T extends RemoteCompInfo = RemoteCompInfo>(
159161
<RemoteCompView
160162
key={key}
161163
isLowcoderComp={remoteInfo?.packageName==='lowcoder-comps'}
162-
loadComp={(packageVersion?:string)=>this.load(packageVersion)}
164+
loadComp={(packageVersion?:string,appId?:string)=>this.load(packageVersion,appId)}
163165
loadingElement={loadingElement}
164166
source={remoteInfo?.source}
165167
/>

‎client/packages/lowcoder/src/comps/utils/remote.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function parseCompType(compType: string) {
3939
}
4040

4141
exportasyncfunctiongetNpmPackageMeta(packageName:string){
42-
constres=awaitaxios.get<NpmPackageMeta>(`${NPM_REGISTRY_URL}/${packageName}`);
42+
constres=awaitaxios.get<NpmPackageMeta>(`${NPM_REGISTRY_URL}/none/${packageName}`);
4343
if(res.status>=400){
4444
returnnull;
4545
}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1-
exportconstSERVER_HOST=`${REACT_APP_NODE_SERVICE_URL??""}`;
2-
exportconstNPM_REGISTRY_URL=`${SERVER_HOST}/node-service/api/npm/registry`;
3-
exportconstNPM_PLUGIN_ASSETS_BASE_URL=`${SERVER_HOST}/node-service/api/npm/package`;
1+
// export const SERVER_HOST = `${REACT_APP_NODE_SERVICE_URL ?? ""}`;
2+
// export const NPM_REGISTRY_URL = `${SERVER_HOST}/node-service/api/npm/registry`;
3+
// export const NPM_PLUGIN_ASSETS_BASE_URL = `${SERVER_HOST}/node-service/api/npm/package`;
4+
5+
exportconstSERVER_HOST=`${REACT_APP_API_SERVICE_URL??""}`;
6+
exportconstNPM_REGISTRY_URL=`${SERVER_HOST}/api/npm/registry`;
7+
exportconstNPM_PLUGIN_ASSETS_BASE_URL=`${SERVER_HOST}/api/npm/package`;

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/security/SecurityConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
145145
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.ORGANIZATION_URL +"/*/datasourceTypes"),// datasource types
146146
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.ORGANIZATION_URL +"/byuser/*"),
147147
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.DATASOURCE_URL +"/jsDatasourcePlugins"),
148+
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,NewUrl.NPM_REGISTRY +"/**"),
148149
ServerWebExchangeMatchers.pathMatchers(HttpMethod.GET,"/api/docs/**")
149150
)
150151
.permitAll()

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/npm/PrivateNpmRegistryController.java

Lines changed: 48 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
importlombok.RequiredArgsConstructor;
44
importorg.jetbrains.annotations.NotNull;
55
importorg.lowcoder.api.home.SessionUserService;
6+
importorg.lowcoder.domain.application.service.ApplicationServiceImpl;
7+
importorg.lowcoder.domain.organization.service.OrgMemberServiceImpl;
68
importorg.lowcoder.domain.organization.service.OrganizationService;
79
importorg.lowcoder.infra.constant.NewUrl;
810
importorg.lowcoder.infra.js.NodeServerHelper;
@@ -27,33 +29,59 @@ public class PrivateNpmRegistryController implements PrivateNpmRegistryEndpoint{
2729

2830
privatestaticfinalStringNPM_REGISTRY_METADATA ="npm/registry";
2931
privatestaticfinalStringNPM_REGISTRY_ASSET ="npm/package";
32+
privatefinalOrgMemberServiceImplorgMemberServiceImpl;
33+
privatefinalApplicationServiceImplapplicationServiceImpl;
3034

3135
@Override
32-
publicMono<ResponseEntity<Resource>>getNpmPackageMeta(Stringname) {
33-
returnforwardToNodeService(name,NPM_REGISTRY_METADATA);
36+
publicMono<ResponseEntity<Resource>>getNpmPackageMeta(StringapplicationId,Stringname) {
37+
returnforwardToNodeService(applicationId,name,NPM_REGISTRY_METADATA);
3438
}
3539

3640
@Override
37-
publicMono<ResponseEntity<Resource>>getNpmPackageAsset(Stringpath) {
38-
returnforwardToNodeService(path,NPM_REGISTRY_ASSET);
41+
publicMono<ResponseEntity<Resource>>getNpmPackageAsset(StringapplicationId,Stringpath) {
42+
returnforwardToNodeService(applicationId,path,NPM_REGISTRY_ASSET);
3943
}
4044

4145
@NotNull
42-
privateMono<ResponseEntity<Resource>>forwardToNodeService(Stringpath,Stringprefix) {
43-
returnsessionUserService.getVisitorOrgMemberCache().flatMap(orgMember ->organizationService.getOrgCommonSettings(orgMember.getOrgId()).flatMap(organizationCommonSettings -> {
44-
Map<String,Object>config =Map.of("npmRegistries",organizationCommonSettings.get("npmRegistries"),"workspaceId",orgMember.getOrgId());
45-
returnWebClientBuildHelper.builder()
46-
.systemProxy()
47-
.build()
48-
.post()
49-
.uri(nodeServerHelper.createUri(prefix +"/" +path))
50-
.contentType(MediaType.APPLICATION_JSON)
51-
.body(BodyInserters.fromValue(config))
52-
.retrieve().toEntity(Resource.class)
53-
.map(response ->ResponseEntity
54-
.status(response.getStatusCode())
55-
.headers(response.getHeaders())
56-
.body(response.getBody()));
57-
}));
46+
privateMono<ResponseEntity<Resource>>forwardToNodeService(StringapplicationId,Stringpath,Stringprefix) {
47+
48+
StringwithoutLeadingSlash =path.startsWith("/") ?path.substring(1) :path;
49+
if(applicationId.equals("none")) {
50+
returnsessionUserService.getVisitorOrgMemberCache().flatMap(orgMember ->organizationService.getOrgCommonSettings(orgMember.getOrgId()).flatMap(organizationCommonSettings -> {
51+
Map<String,Object>config =Map.of("npmRegistries",organizationCommonSettings.get("npmRegistries"),"workspaceId",orgMember.getOrgId());
52+
returnWebClientBuildHelper.builder()
53+
.systemProxy()
54+
.build()
55+
.post()
56+
.uri(nodeServerHelper.createUri(prefix +"/" +withoutLeadingSlash))
57+
.contentType(MediaType.APPLICATION_JSON)
58+
.body(BodyInserters.fromValue(config))
59+
.retrieve().toEntity(Resource.class)
60+
.map(response -> {
61+
returnResponseEntity
62+
.status(response.getStatusCode())
63+
.headers(response.getHeaders())
64+
.body(response.getBody());
65+
});
66+
}));
67+
}else{
68+
returnapplicationServiceImpl.findById(applicationId).flatMap(application ->organizationService.getById(application.getOrganizationId())).flatMap(orgMember ->organizationService.getOrgCommonSettings(orgMember.getId()).flatMap(organizationCommonSettings -> {
69+
Map<String,Object>config =Map.of("npmRegistries",organizationCommonSettings.get("npmRegistries"),"workspaceId",orgMember.getId());
70+
returnWebClientBuildHelper.builder()
71+
.systemProxy()
72+
.build()
73+
.post()
74+
.uri(nodeServerHelper.createUri(prefix +"/" +withoutLeadingSlash))
75+
.contentType(MediaType.APPLICATION_JSON)
76+
.body(BodyInserters.fromValue(config))
77+
.retrieve().toEntity(Resource.class)
78+
.map(response -> {
79+
returnResponseEntity
80+
.status(response.getStatusCode())
81+
.headers(response.getHeaders())
82+
.body(response.getBody());
83+
});
84+
}));
85+
}
5886
}
5987
}

‎server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/npm/PrivateNpmRegistryEndpoint.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ public interface PrivateNpmRegistryEndpoint {
2121
summary ="Get NPM registry Metadata",
2222
description ="Retrieve the metadata of private NPM registry package."
2323
)
24-
// @GetMapping("/registry/{name}")
25-
publicMono<ResponseEntity<Resource>>getNpmPackageMeta(@PathVariableStringname);
24+
@GetMapping("/registry/{applicationId}/{name}")
25+
publicMono<ResponseEntity<Resource>>getNpmPackageMeta(@PathVariableStringapplicationId,@PathVariableStringname);
2626

2727
@Operation(
2828
tags =TAG_NPM_REGISTRY_MANAGEMENT,
2929
operationId ="getNpmPackageAsset",
3030
summary ="Get NPM registry asset",
3131
description ="Retrieve the asset of private NPM registry package."
3232
)
33-
// @GetMapping("/package/{path}")
34-
publicMono<ResponseEntity<Resource>>getNpmPackageAsset(@PathVariableStringpath);
33+
@GetMapping("/package/{applicationId}/{*path}")
34+
publicMono<ResponseEntity<Resource>>getNpmPackageAsset(@PathVariableStringapplicationId,@PathVariableStringpath);
3535
}

‎server/node-service/src/controllers/npm.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import fs from "fs/promises";
33
import{spawn}from"child_process";
44
import{RequestasServerRequest,ResponseasServerResponse}from"express";
55
import{NpmRegistryService,NpmRegistryConfigEntry,NpmRegistryConfig}from"../services/npmRegistry";
6-
6+
import{defaultaspathlib}from'path';
77

88
typeRequestConfig={
99
workspaceId:string;
@@ -217,7 +217,7 @@ async function fetchPackageFileInner(request: ServerRequest, response: ServerRes
217217
logger.info(`Fetching tarball:${tarball}`);
218218
awaitfetchAndUnpackTarball(tarball,packageId,packageVersion,registry,baseDir);
219219
}catch(error){
220-
logger.error(`Error fetching package:${error}${(erroras{stack:string}).stack}`);
220+
logger.error(`Error fetching package:${error}${(errorasany)?.stack}`);
221221
returnresponse.status(500).send("Internal server error");
222222
}finally{
223223
PackageProcessingQueue.resolve(packageId);
@@ -232,7 +232,7 @@ async function fetchPackageFileInner(request: ServerRequest, response: ServerRes
232232
returnresponse.sendFile(`${packageBaseDir}/index.mjs`);
233233
}
234234

235-
returnresponse.sendFile(`${packageBaseDir}/${file}`);
235+
returnresponse.sendFile(pathlib.resolve(`${packageBaseDir}/${file}`));
236236
}catch(error){
237237
logger.error(`Error fetching package file:${error}${(erroras{stack:string})?.stack?.toString()}`);
238238
response.status(500).send("Internal server error");

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp