@de./sdk 2.3.2 → 2.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -71,7 +71,7 @@ class AccessManager {
71
71
  *
72
72
  * Requiring them of every access type meant `OTPAuth` threw in its own
73
73
  * constructor and could never be used for the one thing it exists to do.
74
- * That is why de.simulation's bootstrap and Hot's `getUser` both talk to
74
+ * That is why de.simulation's bootstrap and Buffé's `getUser` both talk to
75
75
  * de.auth over raw fetch, and why nothing ever caught that this client
76
76
  * addressed `/v1/auth/otp` — a route de.auth has never served.
77
77
  */
@@ -7,6 +7,8 @@ export default class Handles extends EventEmitter {
7
7
  private chn;
8
8
  private controls;
9
9
  private options;
10
+ /** The last navigation's teardown — the map has one navigator, and the next waits for it */
11
+ private navigated;
10
12
  constructor(chn: Channel, controls: Controls, options: MapOptions);
11
13
  /**
12
14
  * Listen when user manually picked a location
@@ -8,6 +8,8 @@ const stream_1 = __importDefault(require("../../utils/stream"));
8
8
  class Handles extends events_1.EventEmitter {
9
9
  constructor(chn, controls, options) {
10
10
  super();
11
+ /** The last navigation's teardown — the map has one navigator, and the next waits for it */
12
+ this.navigated = Promise.resolve();
11
13
  this.chn = chn;
12
14
  this.options = options;
13
15
  this.controls = controls;
@@ -323,9 +325,8 @@ class Handles extends events_1.EventEmitter {
323
325
  */
324
326
  navigation(journey) {
325
327
  return new Promise((resolve, reject) => {
326
- var _a;
327
328
  if (!this.chn)
328
- return;
329
+ return reject('Map is not connected');
329
330
  const initialize = () => {
330
331
  var _a;
331
332
  const stream = new stream_1.default;
@@ -362,23 +363,45 @@ class Handles extends events_1.EventEmitter {
362
363
  })
363
364
  .onerror(error => console.error('[Stream Error] ', error))
364
365
  .onclose(() => {
365
- var _a, _b;
366
+ var _a, _b, _c;
366
367
  (_a = this.chn) === null || _a === void 0 ? void 0 : _a.off('navigation:direction');
367
- (_b = this.controls) === null || _b === void 0 ? void 0 : _b.unmountNavigation();
368
+ this.navigated = (_c = (_b = this.controls) === null || _b === void 0 ? void 0 : _b.unmountNavigation().then(() => { var _a; return (_a = this.controls) === null || _a === void 0 ? void 0 : _a.removeRoute(String(journey.routeId)); }).catch(() => { })) !== null && _c !== void 0 ? _c : Promise.resolve();
368
369
  });
369
- resolve(stream);
370
+ return stream;
370
371
  };
371
- // Set route
372
- (_a = this.controls) === null || _a === void 0 ? void 0 : _a.setRoute(journey).then(async () => {
373
- var _a, _b, _c;
374
- // Initialize navigation point to current location
375
- const position = journey.origin || await ((_a = this.controls) === null || _a === void 0 ? void 0 : _a.getCurrentLocation());
372
+ // Set route, once the last navigation is gone. Its teardown is async,
373
+ // and a stop that follows another (kitchen, then door) used to start
374
+ // first: the old unmount and route removal then landed on the new one,
375
+ // and the rider rode on with no route and no marker
376
+ this.navigated.then(() => { var _a; return (_a = this.controls) === null || _a === void 0 ? void 0 : _a.setRoute(journey); })
377
+ .then(async () => {
378
+ var _a, _b, _c, _d, _e;
379
+ // Initialize navigation point to current location.
380
+ // The origin is a waypoint — `{ coords, caption }` — and the
381
+ // navigator places its marker at a bare `{ lat, lng }`: handing
382
+ // it the waypoint itself put the rider nowhere
383
+ const position = ((_a = journey.origin) === null || _a === void 0 ? void 0 : _a.coords) || await ((_b = this.controls) === null || _b === void 0 ? void 0 : _b.getCurrentLocation());
376
384
  if (!position)
377
385
  return reject('Unable to get current location');
378
- initialize();
379
- await ((_b = this.controls) === null || _b === void 0 ? void 0 : _b.mountNavigation(journey.routeId));
380
- await ((_c = this.controls) === null || _c === void 0 ? void 0 : _c.setInitialNavigationPosition(position));
381
- }).catch(reject);
386
+ // Listening before the navigator starts, so its STARTED is heard
387
+ const stream = initialize();
388
+ try {
389
+ await ((_c = this.controls) === null || _c === void 0 ? void 0 : _c.mountNavigation(journey.routeId));
390
+ // The navigator takes its direction from the mounted route
391
+ // in load(); without it every position it is given fails
392
+ await ((_d = this.controls) === null || _d === void 0 ? void 0 : _d.loadNavigation());
393
+ await ((_e = this.controls) === null || _e === void 0 ? void 0 : _e.setInitialNavigationPosition(position));
394
+ }
395
+ catch (error) {
396
+ stream.close();
397
+ throw error;
398
+ }
399
+ // Handed over once the navigator is live: a position synced the
400
+ // moment this resolves used to reach a navigator not yet started,
401
+ // and was dropped — as was any failure above, after the resolve
402
+ resolve(stream);
403
+ })
404
+ .catch(reject);
382
405
  });
383
406
  }
384
407
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Handles.js","sourceRoot":"","sources":["../../../src/allend/MSI/Handles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Handles.js","sourceRoot":"","sources":["../../../src/allend/MSI/Handles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { OrderTrackingEvent, RallyEvent } from '@de./types';
2
+ import RealtimeSocket, { type RealtimeConnectOptions } from '../realtime-socket';
3
+ export default class ServiceRealtime extends RealtimeSocket {
4
+ protected get utype(): string;
5
+ /**
6
+ * A server keeps this connection for its whole life, so it reconnects for
7
+ * ever with backoff, and over WebSocket alone: long-polling buys nothing
8
+ * between two servers.
9
+ */
10
+ protected socketOptions(): Record<string, unknown>;
11
+ /**
12
+ * @param serviceId The name the platform is known by to De. — sent as the
13
+ * connection id and as the `de-api-service` header.
14
+ * @param options `getToken` should return the platform's current access
15
+ * token: a service rotates its token, and a reconnect
16
+ * after an expiry is refused without a fresh one.
17
+ */
18
+ connect(serviceId: string, options?: RealtimeConnectOptions): Promise<void>;
19
+ /** Rally: offers, assignments, expiries, releases, relays, zone changes. */
20
+ onRallyEvent(fn: (event: RallyEvent) => void): this;
21
+ /**
22
+ * Every order in the workspace as it changes: what riders reported, what
23
+ * De. decided — collected, delivered, cancelled, failed.
24
+ */
25
+ onOrderUpdate(fn: (event: OrderTrackingEvent) => void): this;
26
+ onConnect(fn: () => void): this;
27
+ onDisconnect(fn: (reason: string) => void): this;
28
+ /** A refused or failed attempt. Reconnection carries on regardless. */
29
+ onConnectError(fn: (error: Error) => void): this;
30
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const realtime_socket_1 = __importDefault(require("../realtime-socket"));
7
+ // ─── ServiceRealtime ──────────────────────────────────────────────────────────
8
+ //
9
+ // A platform's own server, connected to its workspace as a service: Buffé, or
10
+ // any platform built on De. It is not in an order room and joins nothing. De.
11
+ // puts a service connection straight into the workspace's Rally room and its
12
+ // services room, so it hears every dispatch event and every order update the
13
+ // workspace produces. That is the only way Rally events leave De.: riders'
14
+ // devices hear about offers from their platform, which relays them.
15
+ //
16
+ // Platforms used to open this socket by hand with socket.io-client, so each
17
+ // had to rediscover the handshake: `utype: 'service'`, the `de-api-service`
18
+ // header De. checks against its allow-list, a token read per attempt, and
19
+ // WebSocket only. Server-side only, because a browser cannot send the header.
20
+ //
21
+ // ─────────────────────────────────────────────────────────────────────────────
22
+ class ServiceRealtime extends realtime_socket_1.default {
23
+ get utype() { return 'service'; }
24
+ /**
25
+ * A server keeps this connection for its whole life, so it reconnects for
26
+ * ever with backoff, and over WebSocket alone: long-polling buys nothing
27
+ * between two servers.
28
+ */
29
+ socketOptions() {
30
+ return {
31
+ transports: ['websocket'],
32
+ reconnection: true,
33
+ reconnectionDelay: 1000,
34
+ reconnectionDelayMax: 60000,
35
+ reconnectionAttempts: Infinity
36
+ };
37
+ }
38
+ /**
39
+ * @param serviceId The name the platform is known by to De. — sent as the
40
+ * connection id and as the `de-api-service` header.
41
+ * @param options `getToken` should return the platform's current access
42
+ * token: a service rotates its token, and a reconnect
43
+ * after an expiry is refused without a fresh one.
44
+ */
45
+ connect(serviceId, options = {}) {
46
+ return this.open(serviceId, {
47
+ ...options,
48
+ headers: { ...options.headers, 'de-api-service': serviceId }
49
+ });
50
+ }
51
+ /** Rally: offers, assignments, expiries, releases, relays, zone changes. */
52
+ onRallyEvent(fn) {
53
+ var _a;
54
+ (_a = this.nsp) === null || _a === void 0 ? void 0 : _a.on('RALLY_EVENT', fn);
55
+ return this;
56
+ }
57
+ /**
58
+ * Every order in the workspace as it changes: what riders reported, what
59
+ * De. decided — collected, delivered, cancelled, failed.
60
+ */
61
+ onOrderUpdate(fn) {
62
+ var _a;
63
+ (_a = this.nsp) === null || _a === void 0 ? void 0 : _a.on('ORDER_UPDATE', fn);
64
+ return this;
65
+ }
66
+ onConnect(fn) {
67
+ var _a;
68
+ (_a = this.nsp) === null || _a === void 0 ? void 0 : _a.on('connect', fn);
69
+ return this;
70
+ }
71
+ onDisconnect(fn) {
72
+ var _a;
73
+ (_a = this.nsp) === null || _a === void 0 ? void 0 : _a.on('disconnect', fn);
74
+ return this;
75
+ }
76
+ /** A refused or failed attempt. Reconnection carries on regardless. */
77
+ onConnectError(fn) {
78
+ var _a;
79
+ (_a = this.nsp) === null || _a === void 0 ? void 0 : _a.on('connect_error', fn);
80
+ return this;
81
+ }
82
+ }
83
+ exports.default = ServiceRealtime;
84
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/allend/Realtime/service.ts"],"names":[],"mappings":";;;;;AAEA,yEAAgF;AAEhF,iFAAiF;AACjF,EAAE;AACF,8EAA8E;AAC9E,8EAA8E;AAC9E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,oEAAoE;AACpE,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,EAAE;AACF,gFAAgF;AAEhF,MAAqB,eAAgB,SAAQ,yBAAc;IACzD,IAAc,KAAK,KAAa,OAAO,SAAS,CAAA,CAAC,CAAC;IAElD;;;;OAIG;IACO,aAAa;QACrB,OAAO;YACL,UAAU,EAAY,CAAC,WAAW,CAAC;YACnC,YAAY,EAAU,IAAI;YAC1B,iBAAiB,EAAK,IAAK;YAC3B,oBAAoB,EAAE,KAAM;YAC5B,oBAAoB,EAAE,QAAQ;SAC/B,CAAA;IACH,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAE,SAAiB,EAAE,UAAkC,EAAE;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAE,SAAS,EAAE;YAC3B,GAAG,OAAO;YACV,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE;SAC7D,CAAC,CAAA;IACJ,CAAC;IAED,4EAA4E;IAC5E,YAAY,CAAE,EAAiC;;QAC7C,MAAA,IAAI,CAAC,GAAG,0CAAE,EAAE,CAAC,aAAa,EAAE,EAAE,CAAE,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,aAAa,CAAE,EAAyC;;QACtD,MAAA,IAAI,CAAC,GAAG,0CAAE,EAAE,CAAC,cAAc,EAAE,EAAE,CAAE,CAAA;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,SAAS,CAAE,EAAc;;QACvB,MAAA,IAAI,CAAC,GAAG,0CAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAE,CAAA;QAC5B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,YAAY,CAAE,EAA8B;;QAC1C,MAAA,IAAI,CAAC,GAAG,0CAAE,EAAE,CAAC,YAAY,EAAE,EAAE,CAAE,CAAA;QAC/B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uEAAuE;IACvE,cAAc,CAAE,EAA4B;;QAC1C,MAAA,IAAI,CAAC,GAAG,0CAAE,EAAE,CAAC,eAAe,EAAE,EAAE,CAAE,CAAA;QAClC,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AA9DD,kCA8DC"}
@@ -11,6 +11,12 @@ export type RealtimeConnectOptions = {
11
11
  * correct only for a process that rotates it in place.
12
12
  */
13
13
  getToken?: () => string | Promise<string>;
14
+ /**
15
+ * Handshake headers. Honoured by server-side runtimes only: a browser cannot
16
+ * set headers on a WebSocket upgrade. A service connection names itself
17
+ * with `de-api-service` this way.
18
+ */
19
+ headers?: Record<string, string>;
14
20
  };
15
21
  export default abstract class RealtimeSocket extends AccessManager {
16
22
  protected nsp?: Socket;
@@ -29,6 +35,8 @@ export default abstract class RealtimeSocket extends AccessManager {
29
35
  constructor(access: AccessOptions);
30
36
  /** The `utype` this client connects as. Must match the JRT's `role`. */
31
37
  protected abstract get utype(): string;
38
+ /** Transport settings a kind of connection needs; none by default. */
39
+ protected socketOptions(): Record<string, unknown>;
32
40
  protected open(id: string, options?: RealtimeConnectOptions): Promise<void>;
33
41
  /** Re-enter every room this socket was in before the connection dropped. */
34
42
  private restore;
@@ -24,6 +24,8 @@ class RealtimeSocket extends Access_1.default {
24
24
  this.iosHost = ((_a = access.baseUrl) === null || _a === void 0 ? void 0 : _a.replace(/\/+$/, ''))
25
25
  || (0, baseUrl_1.baseURL)('API', access.env || 'dev', access.devHostname);
26
26
  }
27
+ /** Transport settings a kind of connection needs; none by default. */
28
+ socketOptions() { return {}; }
27
29
  open(id, options = {}) {
28
30
  this.id = id;
29
31
  return new Promise((resolve, reject) => {
@@ -61,7 +63,9 @@ class RealtimeSocket extends Access_1.default {
61
63
  // A token the app could not fetch is still an attempt: let De.
62
64
  // refuse it and surface a connect_error, rather than hanging.
63
65
  .catch(() => cb({ utype: this.utype, id }));
64
- }
66
+ },
67
+ ...(options.headers ? { extraHeaders: options.headers } : {}),
68
+ ...this.socketOptions()
65
69
  });
66
70
  this.nsp.on('connect', () => {
67
71
  this.restore();
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-socket.js","sourceRoot":"","sources":["../../src/allend/realtime-socket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realtime-socket.js","sourceRoot":"","sources":["../../src/allend/realtime-socket.ts"],"names":[],"mappings":"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"}
package/dist/core.d.ts CHANGED
@@ -18,6 +18,7 @@ export type { IoTSPConfig } from './allend/IoTSP';
18
18
  export { default as Workspace } from './allend/Workspace';
19
19
  export type { WorkspaceConfig } from './allend/Workspace';
20
20
  export { default as Realtime } from './allend/Realtime';
21
+ export { default as ServiceRealtime } from './allend/Realtime/service';
21
22
  export { default as Workflows } from './allend/Workflows';
22
23
  export type { WorkflowsConfig } from './allend/Workflows';
23
24
  export { default as Utils } from './utils';
@@ -44,6 +45,7 @@ import Auth from './backend/Auth';
44
45
  import OTPAuth from './allend/OTPAuth';
45
46
  import Pipelines from './allend/Pipelines';
46
47
  import Realtime from './allend/Realtime';
48
+ import ServiceRealtime from './allend/Realtime/service';
47
49
  import IoT from './allend/IoTSP/backend';
48
50
  import LSP from './allend/LSP';
49
51
  import CSP from './allend/CSP';
@@ -68,6 +70,7 @@ export declare const core: {
68
70
  OTPAuth: typeof OTPAuth;
69
71
  Pipelines: typeof Pipelines;
70
72
  Realtime: typeof Realtime;
73
+ ServiceRealtime: typeof ServiceRealtime;
71
74
  IoT: typeof IoT;
72
75
  LSP: typeof LSP;
73
76
  CSP: typeof CSP;
package/dist/core.js CHANGED
@@ -20,7 +20,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
20
20
  return (mod && mod.__esModule) ? mod : { "default": mod };
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.core = exports.DClient = exports.Utilities = exports.Queries = exports.Agent = exports.Customer = exports.IoTClient = exports.statusOf = exports.APIError = exports.Utils = exports.Workflows = exports.Realtime = exports.Workspace = exports.IoTBackendRecords = exports.IoTSP = exports.DEV = exports.CSP = exports.LSP = exports.Pipelines = exports.Tracking = exports.OTPAuth = exports.Auth = void 0;
23
+ exports.core = exports.DClient = exports.Utilities = exports.Queries = exports.Agent = exports.Customer = exports.IoTClient = exports.statusOf = exports.APIError = exports.Utils = exports.Workflows = exports.ServiceRealtime = exports.Realtime = exports.Workspace = exports.IoTBackendRecords = exports.IoTSP = exports.DEV = exports.CSP = exports.LSP = exports.Pipelines = exports.Tracking = exports.OTPAuth = exports.Auth = void 0;
24
24
  // ── Named exports (preferred — tree-shakeable) ────────────────────────────────
25
25
  // Connector credentials → access token: the secret on a server, the publishable key in an app
26
26
  var Auth_1 = require("./backend/Auth");
@@ -48,6 +48,9 @@ Object.defineProperty(exports, "Workspace", { enumerable: true, get: function ()
48
48
  // Realtime socket client (de.arch / Socket)
49
49
  var Realtime_1 = require("./allend/Realtime");
50
50
  Object.defineProperty(exports, "Realtime", { enumerable: true, get: function () { return __importDefault(Realtime_1).default; } });
51
+ // A platform server's own connection: Rally events and every order update
52
+ var service_1 = require("./allend/Realtime/service");
53
+ Object.defineProperty(exports, "ServiceRealtime", { enumerable: true, get: function () { return __importDefault(service_1).default; } });
51
54
  // Layer 2 — Workflows
52
55
  var Workflows_1 = require("./allend/Workflows");
53
56
  Object.defineProperty(exports, "Workflows", { enumerable: true, get: function () { return __importDefault(Workflows_1).default; } });
@@ -80,6 +83,7 @@ const Auth_2 = __importDefault(require("./backend/Auth"));
80
83
  const OTPAuth_2 = __importDefault(require("./allend/OTPAuth"));
81
84
  const Pipelines_2 = __importDefault(require("./allend/Pipelines"));
82
85
  const Realtime_2 = __importDefault(require("./allend/Realtime"));
86
+ const service_2 = __importDefault(require("./allend/Realtime/service"));
83
87
  const backend_1 = __importDefault(require("./allend/IoTSP/backend"));
84
88
  const LSP_2 = __importDefault(require("./allend/LSP"));
85
89
  const CSP_2 = __importDefault(require("./allend/CSP"));
@@ -104,6 +108,7 @@ exports.core = {
104
108
  OTPAuth: OTPAuth_2.default,
105
109
  Pipelines: Pipelines_2.default,
106
110
  Realtime: Realtime_2.default,
111
+ ServiceRealtime: service_2.default,
107
112
  IoT: backend_1.default,
108
113
  LSP: LSP_2.default,
109
114
  CSP: CSP_2.default,
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,WAAW;AACX,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,mEAAmE;AACnE,sEAAsE;AACtE,EAAE;AACF,gFAAgF;;;;;;AAEhF,iFAAiF;AAEjF,8FAA8F;AAC9F,uCAAgD;AAAvC,6GAAA,OAAO,OAAQ;AAOxB,yCAAyC;AACzC,4CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAE3B,0CAA0C;AAC1C,8CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAG5B,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,oCAA6C;AAApC,2GAAA,OAAO,OAAO;AAGvB,oCAA6C;AAApC,2GAAA,OAAO,OAAO;AAGvB,oCAA6C;AAApC,2GAAA,OAAO,OAAO;AAGvB,qEAAqE;AACrE,wCAA+E;AAAtE,+GAAA,OAAO,OAAS;AAAE,0GAAA,OAAO,OAAqB;AAGvD,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,4CAA4C;AAC5C,8CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAE5B,sBAAsB;AACtB,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,YAAY;AACZ,iCAA0C;AAAjC,+GAAA,OAAO,OAAS;AAEzB,iCAA6C;AAApC,kHAAA,OAAO,OAAY;AAC5B,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA;AAEjB,iFAAiF;AACjF,8EAA8E;AAC9E,kBAAkB;AAClB,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,sDAAsD;AACtD,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,8CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAG5B,wCAAiD;AAAxC,+GAAA,OAAO,OAAS;AAIzB,4CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAG3B,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAe7B,iFAAiF;AAEjF,0DAAsC;AACtC,+DAAwC;AACxC,mEAA0C;AAC1C,iEAAyC;AACzC,qEAA8C;AAC9C,uDAAoC;AACpC,uDAAoC;AACpC,uDAAoC;AACpC,2DAAsC;AACtC,mEAA0C;AAC1C,mEAA0C;AAC1C,iEAAyC;AACzC,oDAA+B;AAC/B,mEAA0C;AAC1C,iEAAyC;AACzC,2DAAsC;AACtC,+DAAwC;AACxC,mEAA0C;AAC1C,uEAAiD;AACjD,iEAAyC;AAEzC,qEAAqE;AACrE,MAAM,OAAO,GAAG,EAAE,MAAM,EAAN,gBAAM,EAAE,KAAK,EAAL,kBAAK,EAAE,CAAA;AACxB,0BAAO;AAEH,QAAA,IAAI,GAAG;IACnB,IAAI,EAAJ,cAAI;IACJ,OAAO,EAAP,iBAAO;IACP,SAAS,EAAT,mBAAS;IACT,QAAQ,EAAR,kBAAQ;IACR,GAAG,EAAH,iBAAG;IACH,GAAG,EAAH,aAAG;IACH,GAAG,EAAH,aAAG;IACH,GAAG,EAAH,aAAG;IACH,KAAK,EAAL,eAAK;IACL,SAAS,EAAT,mBAAS;IACT,SAAS,EAAT,mBAAS;IACT,QAAQ,EAAR,kBAAQ;IACR,KAAK,EAAL,eAAK;IACL,OAAO;IACP,SAAS,EAAT,mBAAS;IACT,QAAQ,EAAR,kBAAQ;IACR,KAAK,EAAL,eAAK;IACL,OAAO,EAAP,iBAAO;IACP,SAAS,EAAT,mBAAS;CACT,CAAA"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,EAAE;AACF,4EAA4E;AAC5E,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,0EAA0E;AAC1E,WAAW;AACX,EAAE;AACF,0BAA0B;AAC1B,EAAE;AACF,mEAAmE;AACnE,sEAAsE;AACtE,EAAE;AACF,gFAAgF;;;;;;AAEhF,iFAAiF;AAEjF,8FAA8F;AAC9F,uCAAgD;AAAvC,6GAAA,OAAO,OAAQ;AAOxB,yCAAyC;AACzC,4CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAE3B,0CAA0C;AAC1C,8CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAG5B,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,oCAA6C;AAApC,2GAAA,OAAO,OAAO;AAGvB,oCAA6C;AAApC,2GAAA,OAAO,OAAO;AAGvB,oCAA6C;AAApC,2GAAA,OAAO,OAAO;AAGvB,qEAAqE;AACrE,wCAA+E;AAAtE,+GAAA,OAAO,OAAS;AAAE,0GAAA,OAAO,OAAqB;AAGvD,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,4CAA4C;AAC5C,8CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAC5B,0EAA0E;AAC1E,qDAAsE;AAA7D,2HAAA,OAAO,OAAmB;AAEnC,sBAAsB;AACtB,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,YAAY;AACZ,iCAA0C;AAAjC,+GAAA,OAAO,OAAS;AAEzB,iCAA6C;AAApC,kHAAA,OAAO,OAAY;AAC5B,uCAAqC;AAA5B,oGAAA,QAAQ,OAAA;AAEjB,iFAAiF;AACjF,8EAA8E;AAC9E,kBAAkB;AAClB,EAAE;AACF,0EAA0E;AAC1E,+EAA+E;AAC/E,sDAAsD;AACtD,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAG7B,8CAAuD;AAA9C,qHAAA,OAAO,OAAY;AAG5B,wCAAiD;AAAxC,+GAAA,OAAO,OAAS;AAIzB,4CAAqD;AAA5C,mHAAA,OAAO,OAAW;AAG3B,gDAAyD;AAAhD,uHAAA,OAAO,OAAa;AAe7B,iFAAiF;AAEjF,0DAAsC;AACtC,+DAAwC;AACxC,mEAA0C;AAC1C,iEAAyC;AACzC,wEAAuD;AACvD,qEAA8C;AAC9C,uDAAoC;AACpC,uDAAoC;AACpC,uDAAoC;AACpC,2DAAsC;AACtC,mEAA0C;AAC1C,mEAA0C;AAC1C,iEAAyC;AACzC,oDAA+B;AAC/B,mEAA0C;AAC1C,iEAAyC;AACzC,2DAAsC;AACtC,+DAAwC;AACxC,mEAA0C;AAC1C,uEAAiD;AACjD,iEAAyC;AAEzC,qEAAqE;AACrE,MAAM,OAAO,GAAG,EAAE,MAAM,EAAN,gBAAM,EAAE,KAAK,EAAL,kBAAK,EAAE,CAAA;AACxB,0BAAO;AAEH,QAAA,IAAI,GAAG;IACnB,IAAI,EAAJ,cAAI;IACJ,OAAO,EAAP,iBAAO;IACP,SAAS,EAAT,mBAAS;IACT,QAAQ,EAAR,kBAAQ;IACR,eAAe,EAAf,iBAAe;IACf,GAAG,EAAH,iBAAG;IACH,GAAG,EAAH,aAAG;IACH,GAAG,EAAH,aAAG;IACH,GAAG,EAAH,aAAG;IACH,KAAK,EAAL,eAAK;IACL,SAAS,EAAT,mBAAS;IACT,SAAS,EAAT,mBAAS;IACT,QAAQ,EAAR,kBAAQ;IACR,KAAK,EAAL,eAAK;IACL,OAAO;IACP,SAAS,EAAT,mBAAS;IACT,QAAQ,EAAR,kBAAQ;IACR,KAAK,EAAL,eAAK;IACL,OAAO,EAAP,iBAAO;IACP,SAAS,EAAT,mBAAS;CACT,CAAA"}
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ declare const De: {
7
7
  OTPAuth: typeof import("./core").OTPAuth;
8
8
  Pipelines: typeof import("./core").Pipelines;
9
9
  Realtime: typeof import("./core").Realtime;
10
+ ServiceRealtime: typeof import("./core").ServiceRealtime;
10
11
  IoT: typeof import("./allend/IoTSP/backend").default;
11
12
  LSP: typeof import("./core").LSP;
12
13
  CSP: typeof import("./core").CSP;
@@ -6,6 +6,7 @@ declare const De: {
6
6
  OTPAuth: typeof import("./core").OTPAuth;
7
7
  Pipelines: typeof import("./core").Pipelines;
8
8
  Realtime: typeof import("./core").Realtime;
9
+ ServiceRealtime: typeof import("./core").ServiceRealtime;
9
10
  IoT: typeof import("./allend/IoTSP/backend").default;
10
11
  LSP: typeof import("./core").LSP;
11
12
  CSP: typeof import("./core").CSP;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@de./sdk",
3
- "version": "2.3.2",
3
+ "version": "2.3.4",
4
4
  "description": "Complete SDK pack for MSI (Map Service Interface), IoTClient and DClient services — web, server and React Native",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -66,7 +66,7 @@ export default class AccessManager {
66
66
  *
67
67
  * Requiring them of every access type meant `OTPAuth` threw in its own
68
68
  * constructor and could never be used for the one thing it exists to do.
69
- * That is why de.simulation's bootstrap and Hot's `getUser` both talk to
69
+ * That is why de.simulation's bootstrap and Buffé's `getUser` both talk to
70
70
  * de.auth over raw fetch, and why nothing ever caught that this client
71
71
  * addressed `/v1/auth/otp` — a route de.auth has never served.
72
72
  */
@@ -23,6 +23,8 @@ export default class Handles extends EventEmitter {
23
23
  private chn: Channel
24
24
  private controls: Controls
25
25
  private options: MapOptions
26
+ /** The last navigation's teardown — the map has one navigator, and the next waits for it */
27
+ private navigated: Promise<unknown> = Promise.resolve()
26
28
 
27
29
  constructor( chn: Channel, controls: Controls, options: MapOptions ){
28
30
  super()
@@ -374,7 +376,7 @@ export default class Handles extends EventEmitter {
374
376
  */
375
377
  navigation( journey: Journey ): Promise<Stream> {
376
378
  return new Promise( ( resolve, reject ) => {
377
- if( !this.chn ) return
379
+ if( !this.chn ) return reject('Map is not connected')
378
380
 
379
381
  const initialize = () => {
380
382
  const stream = new Stream
@@ -411,23 +413,49 @@ export default class Handles extends EventEmitter {
411
413
  .onerror( error => console.error('[Stream Error] ', error ) )
412
414
  .onclose( () => {
413
415
  this.chn?.off('navigation:direction')
414
- this.controls?.unmountNavigation()
416
+ this.navigated = this.controls?.unmountNavigation()
417
+ // The route was made for this navigation (setRoute below), so it
418
+ // goes with it. Left behind, the finished trip stayed drawn on the
419
+ // map until the next one replaced it.
420
+ .then( () => this.controls?.removeRoute( String( journey.routeId ) ) )
421
+ .catch( () => {} ) ?? Promise.resolve()
415
422
  })
416
423
 
417
- resolve( stream )
424
+ return stream
418
425
  }
419
426
 
420
- // Set route
421
- this.controls?.setRoute( journey )
427
+ // Set route, once the last navigation is gone. Its teardown is async,
428
+ // and a stop that follows another (kitchen, then door) used to start
429
+ // first: the old unmount and route removal then landed on the new one,
430
+ // and the rider rode on with no route and no marker
431
+ this.navigated.then( () => this.controls?.setRoute( journey ) )
422
432
  .then( async () => {
423
- // Initialize navigation point to current location
424
- const position = journey.origin || await this.controls?.getCurrentLocation()
433
+ // Initialize navigation point to current location.
434
+ // The origin is a waypoint — `{ coords, caption }` — and the
435
+ // navigator places its marker at a bare `{ lat, lng }`: handing
436
+ // it the waypoint itself put the rider nowhere
437
+ const position = journey.origin?.coords || await this.controls?.getCurrentLocation()
425
438
  if( !position ) return reject('Unable to get current location')
426
439
 
427
- initialize()
428
-
429
- await this.controls?.mountNavigation( journey.routeId )
430
- await this.controls?.setInitialNavigationPosition( position as RTLocation )
440
+ // Listening before the navigator starts, so its STARTED is heard
441
+ const stream = initialize()
442
+
443
+ try {
444
+ await this.controls?.mountNavigation( journey.routeId )
445
+ // The navigator takes its direction from the mounted route
446
+ // in load(); without it every position it is given fails
447
+ await this.controls?.loadNavigation()
448
+ await this.controls?.setInitialNavigationPosition( position as RTLocation )
449
+ }
450
+ catch( error ){
451
+ stream.close()
452
+ throw error
453
+ }
454
+
455
+ // Handed over once the navigator is live: a position synced the
456
+ // moment this resolves used to reach a navigator not yet started,
457
+ // and was dropped — as was any failure above, after the resolve
458
+ resolve( stream )
431
459
  } )
432
460
  .catch( reject )
433
461
  } )
@@ -0,0 +1,83 @@
1
+ import type { OrderTrackingEvent, RallyEvent } from '@de./types'
2
+
3
+ import RealtimeSocket, { type RealtimeConnectOptions } from '../realtime-socket'
4
+
5
+ // ─── ServiceRealtime ──────────────────────────────────────────────────────────
6
+ //
7
+ // A platform's own server, connected to its workspace as a service: Buffé, or
8
+ // any platform built on De. It is not in an order room and joins nothing. De.
9
+ // puts a service connection straight into the workspace's Rally room and its
10
+ // services room, so it hears every dispatch event and every order update the
11
+ // workspace produces. That is the only way Rally events leave De.: riders'
12
+ // devices hear about offers from their platform, which relays them.
13
+ //
14
+ // Platforms used to open this socket by hand with socket.io-client, so each
15
+ // had to rediscover the handshake: `utype: 'service'`, the `de-api-service`
16
+ // header De. checks against its allow-list, a token read per attempt, and
17
+ // WebSocket only. Server-side only, because a browser cannot send the header.
18
+ //
19
+ // ─────────────────────────────────────────────────────────────────────────────
20
+
21
+ export default class ServiceRealtime extends RealtimeSocket {
22
+ protected get utype(): string { return 'service' }
23
+
24
+ /**
25
+ * A server keeps this connection for its whole life, so it reconnects for
26
+ * ever with backoff, and over WebSocket alone: long-polling buys nothing
27
+ * between two servers.
28
+ */
29
+ protected socketOptions(): Record<string, unknown> {
30
+ return {
31
+ transports: ['websocket'],
32
+ reconnection: true,
33
+ reconnectionDelay: 1_000,
34
+ reconnectionDelayMax: 60_000,
35
+ reconnectionAttempts: Infinity
36
+ }
37
+ }
38
+
39
+ /**
40
+ * @param serviceId The name the platform is known by to De. — sent as the
41
+ * connection id and as the `de-api-service` header.
42
+ * @param options `getToken` should return the platform's current access
43
+ * token: a service rotates its token, and a reconnect
44
+ * after an expiry is refused without a fresh one.
45
+ */
46
+ connect( serviceId: string, options: RealtimeConnectOptions = {} ): Promise<void> {
47
+ return this.open( serviceId, {
48
+ ...options,
49
+ headers: { ...options.headers, 'de-api-service': serviceId }
50
+ })
51
+ }
52
+
53
+ /** Rally: offers, assignments, expiries, releases, relays, zone changes. */
54
+ onRallyEvent( fn: ( event: RallyEvent ) => void ){
55
+ this.nsp?.on('RALLY_EVENT', fn )
56
+ return this
57
+ }
58
+
59
+ /**
60
+ * Every order in the workspace as it changes: what riders reported, what
61
+ * De. decided — collected, delivered, cancelled, failed.
62
+ */
63
+ onOrderUpdate( fn: ( event: OrderTrackingEvent ) => void ){
64
+ this.nsp?.on('ORDER_UPDATE', fn )
65
+ return this
66
+ }
67
+
68
+ onConnect( fn: () => void ){
69
+ this.nsp?.on('connect', fn )
70
+ return this
71
+ }
72
+
73
+ onDisconnect( fn: ( reason: string ) => void ){
74
+ this.nsp?.on('disconnect', fn )
75
+ return this
76
+ }
77
+
78
+ /** A refused or failed attempt. Reconnection carries on regardless. */
79
+ onConnectError( fn: ( error: Error ) => void ){
80
+ this.nsp?.on('connect_error', fn )
81
+ return this
82
+ }
83
+ }
@@ -41,6 +41,12 @@ export type RealtimeConnectOptions = {
41
41
  * correct only for a process that rotates it in place.
42
42
  */
43
43
  getToken?: () => string | Promise<string>
44
+ /**
45
+ * Handshake headers. Honoured by server-side runtimes only: a browser cannot
46
+ * set headers on a WebSocket upgrade. A service connection names itself
47
+ * with `de-api-service` this way.
48
+ */
49
+ headers?: Record<string, string>
44
50
  }
45
51
 
46
52
  export default abstract class RealtimeSocket extends AccessManager {
@@ -71,6 +77,9 @@ export default abstract class RealtimeSocket extends AccessManager {
71
77
  /** The `utype` this client connects as. Must match the JRT's `role`. */
72
78
  protected abstract get utype(): string
73
79
 
80
+ /** Transport settings a kind of connection needs; none by default. */
81
+ protected socketOptions(): Record<string, unknown> { return {} }
82
+
74
83
  protected open( id: string, options: RealtimeConnectOptions = {} ): Promise<void> {
75
84
  this.id = id
76
85
 
@@ -111,7 +120,9 @@ export default abstract class RealtimeSocket extends AccessManager {
111
120
  // A token the app could not fetch is still an attempt: let De.
112
121
  // refuse it and surface a connect_error, rather than hanging.
113
122
  .catch( () => cb({ utype: this.utype, id }) )
114
- }
123
+ },
124
+ ...( options.headers ? { extraHeaders: options.headers } : {} ),
125
+ ...this.socketOptions()
115
126
  })
116
127
 
117
128
  this.nsp.on('connect', () => {
package/src/core.ts CHANGED
@@ -54,6 +54,8 @@ export type { WorkspaceConfig } from './allend/Workspace'
54
54
 
55
55
  // Realtime socket client (de.arch / Socket)
56
56
  export { default as Realtime } from './allend/Realtime'
57
+ // A platform server's own connection: Rally events and every order update
58
+ export { default as ServiceRealtime } from './allend/Realtime/service'
57
59
 
58
60
  // Layer 2 — Workflows
59
61
  export { default as Workflows } from './allend/Workflows'
@@ -106,6 +108,7 @@ import Auth from './backend/Auth'
106
108
  import OTPAuth from './allend/OTPAuth'
107
109
  import Pipelines from './allend/Pipelines'
108
110
  import Realtime from './allend/Realtime'
111
+ import ServiceRealtime from './allend/Realtime/service'
109
112
  import IoT from './allend/IoTSP/backend'
110
113
  import LSP from './allend/LSP'
111
114
  import CSP from './allend/CSP'
@@ -132,6 +135,7 @@ export const core = {
132
135
  OTPAuth,
133
136
  Pipelines,
134
137
  Realtime,
138
+ ServiceRealtime,
135
139
  IoT,
136
140
  LSP,
137
141
  CSP,