> Index de la documentation : https://stilldeeppos.com/fr/llms.txt

# SDK StillDeep — Client TypeScript / Node.js

## Prerequis

- Node.js 22 LTS+
- `protoc` 25+
- Plugin `protoc-gen-ts` (`npm i -D ts-proto`)

## Setup

```bash
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

```ts
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

```ts
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.

Source: https://stilldeeppos.com/fr/docs/reference/sdk/typescript
