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+
  • protoc 25+
  • 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 — preferer Subscribe pour la plupart des cas.