ADempiere gRPC-API library to Node.js
ADempiere node.js write in JavaScript for gRPC service, currently is used as library of proxy ADempiere service and is published as NPM
See also:
Using it
# installing via NPM
npm install @adempiere/grpc-api --save
# installing via Yarn
yarn add @adempiere/grpc-api
A Example
Here a example for it using from Proxy of ADempiere API: https://github.com/adempiere/proxy-adempiere-api/blob/master/src/modules/adempiere-api/index.ts#L17
Recreate proto stub class (only for contribute to project)
For recreate stub class you must have follow:
Install prerequisites for proto stub generation
Install Proto C
# Get the latest version number of protoc
LATEST_VERSION=$(curl --silent "https://api.github.com/repos/protocolbuffers/protobuf/releases/latest" |
grep -Po '"tag_name": "\K.*?(?=")' |
sed -E 's|v||g')
ARCHITECTURE=$(arch)
ZIP_FILE=protoc-$1-linux-$ARCHITECTURE.zip
# Download latest version
URL="https://github.com/protocolbuffers/protobuf/releases/download/v$LATEST_VERSION/$ZIP_FILE"
curl -OL $URL
# Extract and overwrite into dir
sudo unzip -o $ZIP_FILE -d /usr/local bin/protoc
sudo unzip -o $ZIP_FILE -d /usr/local 'include/*'
# Delete donwloaded file
rm -f -v $ZIP_FILE
# Assign read and execute permissions
sudo chmod 755 /usr/local/bin/protoc
sudo chmod 755 -R /usr/local/include/google/
When installation is complete, check the version with
protoc --version
Install Proto C Gen gRPC Web
This is only used to generate the stub if gRPC is handled on the client side.
# Get the latest version number of protoc-gen-grpc-web
LATEST_VERSION=$(curl --silent "https://api.github.com/repos/grpc/grpc-web/releases/latest" |
grep -Po '"tag_name": "\K.*?(?=")' |
sed -E 's|v||g')
FILE=protoc-gen-grpc-web
# Download
URL=https://github.com/grpc/grpc-web/releases/download/$LATEST_VERSION/$FILE-$1-linux-x86_64
curl -L $URL -o $FILE
# Extract and overwrite into dir
sudo mv -f -v $FILE /usr/local/bin/
# Assign read and execute permissions
sudo chmod 755 /usr/local/bin/$FILE
Install gRPC Tools (Node Proto C)
It can be installed as a global dependency although it is already managed as a project dependency.
Via npm:
sudo npm install -g grpc-tools
Via yarn:
yarn global add grpc-tools
Generate Proto Stub:
Generate with npm (Recommended):
# install dependecies and dev dependencies
npm i
# generate all stub
npm run stub
Note to generate specific proto definition:
- To access:
npm run stub:access
- To base data type:
npm run stub:base_data_type
- To business:
npm run stub:business
- To client:
npm run stub:client
- To core functionality:
npm run stub:core_functionality
- To dictionary:
npm run stub:dictionary
- To enrollment:
npm run stub:enrollment
- To point of sales:
npm run stub:point_of_sales
Generate directly with grpc_tools_node_protoc:
Generate all stub:
grpc_tools_node_protoc \
--js_out=import_style=commonjs,binary:src/grpc \
--grpc_out=src/grpc \
proto/access.proto proto/base_data_type.proto proto/business.proto proto/client.proto proto/core_functionality.proto proto/dictionary.proto proto/enrollment.proto proto/point_of_sales.proto
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to access.proto file
grpc_tools_node_protoc \
proto/access.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to base_data_type.proto file
grpc_tools_node_protoc \
proto/base_data_type.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to business.proto file
grpc_tools_node_protoc \
proto/business.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to client.proto file
grpc_tools_node_protoc \
proto/access.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to access.proto file
grpc_tools_node_protoc \
proto/core_functionality.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to access.proto file
grpc_tools_node_protoc \
proto/dictionary.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to access.proto file
grpc_tools_node_protoc \
proto/enrollment.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
# Generate stub to access.proto file
grpc_tools_node_protoc \
proto/point_of_sales.proto \
--js_out=import_style=commonjs,binary:$OUT_DIR \
--grpc_out=grpc_js:$OUT_DIR
# --grpc-web_out=import_style=commonjs,mode=grpcwebtext:$OUT_DIR
Output proto stub
The result is generated on: src/grpc/proto/
folder
access_grpc_pb.js
access_pb.js
base_data_type_grpc_pb.js
base_data_type_pb.js
business_grpc_pb.js
business_pb.js
client_grpc_pb.js
client_pb.js
core_functionality_grpc_pb.js
core_functionality_pb.js
dictionary_grpc_pb.js
dictionary_pb.js
enrollment_grpc_pb.js
enrollment_pb.js
point_of_sales_grpc_pb.js
point_of_sales_pb.js
Become a sponsor and get your logo on our README on GitHub with a link to your site. Become a sponsor