SDK StillDeep — Client TypeScript / Node.js
Client TypeScript et Node.js : génération du code, panier, flux d'événements.
Prerequis
- Node.js 22 LTS+
protoc25+- Plugin
protoc-gen-ts(npm i -D ts-proto)
Setup
mkdir my-pos-client && cd my-pos-client
npm init -y
npm i @grpc/grpc-js @grpc/proto-loader
npm i -D typescript ts-proto @types/node
cp -r ../waxpos/src/public/StillDeep.Intelligence.Contracts/protos ./protos
mkdir -p src/generated
protoc \
--plugin=./node_modules/.bin/protoc-gen-ts_proto \
--ts_proto_out=./src/generated \
--ts_proto_opt=outputServices=grpc-js,esModuleInterop=true \
--proto_path=./protos \
protos/common.proto protos/sales.proto protos/catalog.proto \
protos/member.proto protos/device.proto protos/events.proto
Exemple : ouvrir un panier + ajouter un produit
import { credentials, ChannelCredentials } from '@grpc/grpc-js';
import { SalesServiceClient } from './generated/sales';
const client = new SalesServiceClient(
'localhost:50051',
credentials.createInsecure(),
);
const cart = await new Promise((resolve, reject) =>
client.createCart(
{ postId: 'post-1', cashierUserId: 'user-1', idempotencyKey: crypto.randomUUID() },
(err, res) => err ? reject(err) : resolve(res),
),
);
console.log('Cart:', cart);
Stream des events
import { EventServiceClient } from './generated/events';
const events = new EventServiceClient('localhost:50051', credentials.createInsecure());
const stream = events.subscribe({ subscriberId: 'tablet-1', kinds: [], postIdFilter: 'post-1' });
stream.on('data', (ev) => console.log('event', ev));
stream.on('error', (e) => console.error(e));
Limitations connues V1
- Pas de TLS par defaut (insecure local). Sur reseau, ajouter un cert.
- Pas de retry policy automatique cote client — au consommateur de l'implementer.
EventService.Heartbeat(bidi streaming) est supporte mais peu utilise — prefererSubscribepour la plupart des cas.