@tiducto/spider-sdk-typescript 0.1.1 → 1.0.0

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.
Files changed (109) hide show
  1. package/README.md +1 -1
  2. package/dist/client.d.ts +14 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +19 -0
  5. package/dist/client.js.map +1 -1
  6. package/dist/contract/routing/Leg.d.ts +1 -0
  7. package/dist/contract/routing/Leg.d.ts.map +1 -1
  8. package/dist/contract/routing/PlanConnectionStreamData.d.ts +5 -0
  9. package/dist/contract/routing/PlanConnectionStreamData.d.ts.map +1 -0
  10. package/dist/contract/routing/PlanConnectionStreamData.js +2 -0
  11. package/dist/contract/routing/PlanConnectionStreamData.js.map +1 -0
  12. package/dist/contract/routing/PlanConnectionStreamResponse.d.ts +7 -0
  13. package/dist/contract/routing/PlanConnectionStreamResponse.d.ts.map +1 -0
  14. package/dist/contract/routing/PlanConnectionStreamResponse.js +2 -0
  15. package/dist/contract/routing/PlanConnectionStreamResponse.js.map +1 -0
  16. package/dist/contract/routing/PlanConnectionStreamVariables.d.ts +18 -0
  17. package/dist/contract/routing/PlanConnectionStreamVariables.d.ts.map +1 -0
  18. package/dist/contract/routing/PlanConnectionStreamVariables.js +2 -0
  19. package/dist/contract/routing/PlanConnectionStreamVariables.js.map +1 -0
  20. package/dist/contract/routing/Route.d.ts +3 -0
  21. package/dist/contract/routing/Route.d.ts.map +1 -1
  22. package/dist/contract/routing/Stop.d.ts +2 -0
  23. package/dist/contract/routing/Stop.d.ts.map +1 -1
  24. package/dist/contract/routing/StopDeparturesData.d.ts +3 -3
  25. package/dist/contract/routing/StopDeparturesData.d.ts.map +1 -1
  26. package/dist/contract/routing/StopDeparturesRoute.d.ts +3 -0
  27. package/dist/contract/routing/StopDeparturesRoute.d.ts.map +1 -1
  28. package/dist/contract/routing/StopDeparturesStop.d.ts +1 -5
  29. package/dist/contract/routing/StopDeparturesStop.d.ts.map +1 -1
  30. package/dist/contract/routing/StopDeparturesStop2.d.ts +9 -0
  31. package/dist/contract/routing/StopDeparturesStop2.d.ts.map +1 -0
  32. package/dist/contract/routing/StopDeparturesStop2.js +2 -0
  33. package/dist/contract/routing/StopDeparturesStop2.js.map +1 -0
  34. package/dist/contract/routing/StopDeparturesStoptime.d.ts +14 -0
  35. package/dist/contract/routing/StopDeparturesStoptime.d.ts.map +1 -0
  36. package/dist/contract/routing/StopDeparturesStoptime.js +2 -0
  37. package/dist/contract/routing/StopDeparturesStoptime.js.map +1 -0
  38. package/dist/contract/routing/StopDeparturesTrip.d.ts +2 -0
  39. package/dist/contract/routing/StopDeparturesTrip.d.ts.map +1 -1
  40. package/dist/contract/routing/StopDeparturesVariables.d.ts +2 -2
  41. package/dist/contract/routing/StopDeparturesVariables.d.ts.map +1 -1
  42. package/dist/contract/routing/Stoptime.d.ts +4 -3
  43. package/dist/contract/routing/Stoptime.d.ts.map +1 -1
  44. package/dist/contract/routing/TripRoute.d.ts +3 -0
  45. package/dist/contract/routing/TripRoute.d.ts.map +1 -1
  46. package/dist/contract/routing/TripStop.d.ts +2 -0
  47. package/dist/contract/routing/TripStop.d.ts.map +1 -1
  48. package/dist/contract/routing/TripTrip.d.ts +4 -2
  49. package/dist/contract/routing/TripTrip.d.ts.map +1 -1
  50. package/dist/contract/routing/index.d.ts +5 -1
  51. package/dist/contract/routing/index.d.ts.map +1 -1
  52. package/dist/contract.d.ts +0 -1
  53. package/dist/contract.d.ts.map +1 -1
  54. package/dist/contract.js +0 -12
  55. package/dist/contract.js.map +1 -1
  56. package/dist/contractVersion.d.ts +1 -1
  57. package/dist/contractVersion.js +1 -1
  58. package/dist/enums.d.ts +11 -4
  59. package/dist/enums.d.ts.map +1 -1
  60. package/dist/enums.js +43 -24
  61. package/dist/enums.js.map +1 -1
  62. package/dist/errors.d.ts +30 -10
  63. package/dist/errors.d.ts.map +1 -1
  64. package/dist/errors.js +55 -18
  65. package/dist/errors.js.map +1 -1
  66. package/dist/http.d.ts +39 -1
  67. package/dist/http.d.ts.map +1 -1
  68. package/dist/http.js +78 -32
  69. package/dist/http.js.map +1 -1
  70. package/dist/index.d.ts +4 -5
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +1 -2
  73. package/dist/index.js.map +1 -1
  74. package/dist/location.d.ts +4 -0
  75. package/dist/location.d.ts.map +1 -1
  76. package/dist/location.js +4 -0
  77. package/dist/location.js.map +1 -1
  78. package/dist/persistedQueries.d.ts +1 -0
  79. package/dist/persistedQueries.d.ts.map +1 -1
  80. package/dist/persistedQueries.js +4 -3
  81. package/dist/persistedQueries.js.map +1 -1
  82. package/dist/polling.d.ts +2 -1
  83. package/dist/polling.d.ts.map +1 -1
  84. package/dist/polling.js +5 -2
  85. package/dist/polling.js.map +1 -1
  86. package/dist/realtime.d.ts +23 -2
  87. package/dist/realtime.d.ts.map +1 -1
  88. package/dist/realtime.js +42 -21
  89. package/dist/realtime.js.map +1 -1
  90. package/dist/routing.d.ts +133 -32
  91. package/dist/routing.d.ts.map +1 -1
  92. package/dist/routing.js +309 -86
  93. package/dist/routing.js.map +1 -1
  94. package/dist/sdk.d.ts +1 -1
  95. package/dist/sdkVersion.d.ts +1 -1
  96. package/dist/sdkVersion.js +1 -1
  97. package/dist/serviceDate.d.ts +6 -0
  98. package/dist/serviceDate.d.ts.map +1 -0
  99. package/dist/serviceDate.js +17 -0
  100. package/dist/serviceDate.js.map +1 -0
  101. package/dist/stops.d.ts +12 -1
  102. package/dist/stops.d.ts.map +1 -1
  103. package/dist/stops.js +15 -6
  104. package/dist/stops.js.map +1 -1
  105. package/package.json +1 -1
  106. package/dist/contract/routing/TripStoptime.d.ts +0 -13
  107. package/dist/contract/routing/TripStoptime.d.ts.map +0 -1
  108. package/dist/contract/routing/TripStoptime.js +0 -2
  109. package/dist/contract/routing/TripStoptime.js.map +0 -1
package/dist/enums.js CHANGED
@@ -1,34 +1,53 @@
1
- const TRANSIT_MODES = new Set([
2
- 'AIRPLANE', 'BICYCLE', 'BUS', 'CABLE_CAR', 'CAR', 'CARPOOL', 'COACH', 'FERRY',
3
- 'FLEX', 'FLEXIBLE', 'FUNICULAR', 'GONDOLA', 'LEG_SWITCH', 'MONORAIL', 'RAIL',
4
- 'SCOOTER', 'SNOW_AND_ICE', 'SUBWAY', 'TAXI', 'TRAM', 'TRANSIT', 'TROLLEYBUS', 'WALK',
5
- ]);
1
+ // Every decoded enum is a closed union: a wire value this SDK version doesn't know decodes to 'UNKNOWN', so
2
+ // a newer server can add values without breaking older apps.
3
+ const TRANSIT_MODES = {
4
+ AIRPLANE: true, BICYCLE: true, BUS: true, CABLE_CAR: true, CAR: true, CARPOOL: true, COACH: true, FERRY: true,
5
+ FLEX: true, FLEXIBLE: true, FUNICULAR: true, GONDOLA: true, LEG_SWITCH: true, MONORAIL: true, RAIL: true,
6
+ SCOOTER: true, SNOW_AND_ICE: true, SUBWAY: true, TAXI: true, TRAM: true, TRANSIT: true, TROLLEYBUS: true, WALK: true,
7
+ };
8
+ const OCCUPANCY_STATUSES = {
9
+ EMPTY: true, MANY_SEATS_AVAILABLE: true, FEW_SEATS_AVAILABLE: true, STANDING_ROOM_ONLY: true,
10
+ CRUSHED_STANDING_ROOM_ONLY: true, FULL: true, NOT_ACCEPTING_PASSENGERS: true, NOT_BOARDABLE: true,
11
+ };
12
+ const WHEELCHAIR_BOARDING = { POSSIBLE: true, NOT_POSSIBLE: true };
13
+ const BIKES_ALLOWED = { ALLOWED: true, NOT_ALLOWED: true };
14
+ const REALTIME_STATES = { ADDED: true, CANCELED: true, MODIFIED: true, SCHEDULED: true, UPDATED: true };
15
+ const ROUTING_ERROR_CODES = {
16
+ LOCATION_NOT_FOUND: true, NO_STOPS_IN_RANGE: true, NO_TRANSIT_CONNECTION: true,
17
+ NO_TRANSIT_CONNECTION_IN_SEARCH_WINDOW: true, OUTSIDE_BOUNDS: true, OUTSIDE_SERVICE_PERIOD: true,
18
+ WALKING_BETTER_THAN_TRANSIT: true,
19
+ };
20
+ const INPUT_FIELDS = { DATE_TIME: true, FROM: true, TO: true, VIA: true };
21
+ function decode(known, raw) {
22
+ return (Object.hasOwn(known, raw) ? raw : 'UNKNOWN');
23
+ }
6
24
  export function transitModeFromWire(raw) {
7
- if (raw == null)
8
- return null;
9
- return TRANSIT_MODES.has(raw) ? raw : 'UNKNOWN';
25
+ return raw == null ? null : decode(TRANSIT_MODES, raw);
26
+ }
27
+ export function realtimeStateFromWire(raw) {
28
+ return raw == null ? null : decode(REALTIME_STATES, raw);
29
+ }
30
+ export function routingErrorCodeFromWire(raw) {
31
+ return raw == null ? 'UNKNOWN' : decode(ROUTING_ERROR_CODES, raw);
32
+ }
33
+ export function inputFieldFromWire(raw) {
34
+ return raw == null ? null : decode(INPUT_FIELDS, raw);
10
35
  }
11
36
  export function wheelchairFromWire(raw) {
12
- if (raw === 'POSSIBLE')
13
- return 'Possible';
14
- if (raw === 'NOT_POSSIBLE')
15
- return 'NotPossible';
16
- return null;
37
+ return raw == null || raw === 'NO_INFORMATION' ? null : decode(WHEELCHAIR_BOARDING, raw);
38
+ }
39
+ /** GTFS `wheelchair_boarding` as the stop-search index carries it: 1 possible, 2 not possible, 0 no information. */
40
+ export function wheelchairFromGtfs(raw) {
41
+ if (raw == null || raw === 0)
42
+ return null;
43
+ return raw === 1 ? 'POSSIBLE' : raw === 2 ? 'NOT_POSSIBLE' : 'UNKNOWN';
17
44
  }
18
45
  export function bikesAllowedFromWire(raw) {
19
- if (raw === 'ALLOWED')
20
- return 'Allowed';
21
- if (raw === 'NOT_ALLOWED')
22
- return 'NotAllowed';
23
- return null;
24
- }
25
- const OCCUPANCY_STATUSES = new Set([
26
- 'EMPTY', 'MANY_SEATS_AVAILABLE', 'FEW_SEATS_AVAILABLE', 'STANDING_ROOM_ONLY',
27
- 'CRUSHED_STANDING_ROOM_ONLY', 'FULL', 'NOT_ACCEPTING_PASSENGERS', 'NOT_BOARDABLE',
28
- ]);
46
+ return raw == null || raw === 'NO_INFORMATION' ? null : decode(BIKES_ALLOWED, raw);
47
+ }
29
48
  export function occupancyFromWire(raw) {
30
49
  if (raw == null || raw === 'NO_DATA_AVAILABLE')
31
50
  return null;
32
- return OCCUPANCY_STATUSES.has(raw) ? raw : 'UNKNOWN';
51
+ return decode(OCCUPANCY_STATUSES, raw);
33
52
  }
34
53
  //# sourceMappingURL=enums.js.map
package/dist/enums.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"enums.js","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"AAmBA,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC;IACjD,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;IAC7E,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM;IAC5E,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM;CACrF,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,GAA8B;IAChE,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAmB,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAA8B;IAC/D,IAAI,GAAG,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IAC1C,IAAI,GAAG,KAAK,cAAc;QAAE,OAAO,aAAa,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAA8B;IACjE,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,GAAG,KAAK,aAAa;QAAE,OAAO,YAAY,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IACtD,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,oBAAoB;IAC5E,4BAA4B,EAAE,MAAM,EAAE,0BAA0B,EAAE,eAAe;CAClF,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,GAA8B;IAC9D,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC"}
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../src/enums.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -1,33 +1,53 @@
1
- export type SpiderErrorCode = 'network' | 'timeout' | 'unauthorized' | 'bad_request' | 'not_found' | 'server' | 'rate_limited' | 'decoding' | 'unknown';
1
+ /**
2
+ * What went wrong. `bad_request` is an invalid or missing input, caught by the SDK before sending or
3
+ * rejected by the server; `field` names it. `query_retired` means the API no longer serves the persisted
4
+ * query behind the call (HTTP 410 Gone). `planning_limit_reached` means the project has reached the trip
5
+ * planning limit its plan includes; it applies to trip planning only. `agreement_inactive` means the project has
6
+ * no active agreement; it applies to every call made with a client key.
7
+ */
8
+ export type SpiderErrorCode = 'network' | 'timeout' | 'unauthorized' | 'bad_request' | 'not_found' | 'query_retired' | 'planning_limit_reached' | 'agreement_inactive' | 'server' | 'rate_limited' | 'decoding' | 'unknown';
2
9
  export interface SpiderError {
3
10
  readonly code: SpiderErrorCode;
4
11
  readonly message: string;
5
12
  readonly httpStatus?: number;
6
- readonly serverCode?: string;
7
13
  /**
8
- * For a `bad_request` (a server validation failure — over-cap `searchWindow`, malformed `via`, or a
9
- * missing required field), the offending input field when the server names one. Undefined otherwise.
14
+ * The server's machine-readable error code, when it sends one: e.g. `persisted_query_rejected` on an
15
+ * `unauthorized` when the environment doesn't recognise the query id, or `query_retired`.
10
16
  */
17
+ readonly serverCode?: string;
18
+ /** For a `bad_request`, the input field it names (e.g. `searchWindow`, `maxWindow`, `via`, `limit`). */
11
19
  readonly field?: string;
12
20
  readonly cause?: unknown;
13
21
  }
14
- export declare class SpiderContractMismatchError extends Error {
15
- readonly expected: string;
16
- readonly actual: string;
17
- constructor(expected: string, actual: string);
18
- }
22
+ /** A `bad_request` that names only the field, like the server's own validation errors. */
23
+ export declare function badRequest(field: string, problem?: 'is required' | 'is out of range' | 'is invalid'): SpiderError;
19
24
  export type TransportErrorKind = 'http' | 'no_data' | 'upstream' | 'bad_request';
20
25
  export declare class TransportError extends Error {
21
26
  readonly kind: TransportErrorKind;
22
27
  readonly httpStatus: number | undefined;
23
28
  readonly serverCode: string | undefined;
24
29
  readonly field: string | undefined;
25
- constructor(kind: TransportErrorKind, message: string, httpStatus?: number, serverCode?: string, field?: string);
30
+ /** The response body's own `message`, when it has one. */
31
+ readonly serverMessage: string | undefined;
32
+ /** The code-shaped `error` field of the response body, where the gateway puts its own refusal codes. */
33
+ readonly gatewayCode: string | undefined;
34
+ constructor(kind: TransportErrorKind, message: string, httpStatus?: number, serverCode?: string, field?: string, body?: {
35
+ readonly message?: string;
36
+ readonly gatewayCode?: string;
37
+ });
26
38
  }
27
39
  export declare function parseErrorEnvelope(text: string): {
28
40
  code?: string;
29
41
  message?: string;
42
+ gatewayCode?: string;
30
43
  };
44
+ /** A non-2xx response → an `http` TransportError carrying the body's error code, and for a 400 the field it names. */
45
+ export declare function httpFailure(where: string, status: number, text: string, detail?: string): TransportError;
46
+ /**
47
+ * The plan-limit error an `http` failure's body `error` field names (`planning_limit_reached`,
48
+ * `agreement_inactive`), whatever its status, or `undefined` when it names neither. A `code` field is not read.
49
+ */
50
+ export declare function limitRefusal(e: TransportError): SpiderError | undefined;
31
51
  export declare class DecodingError extends Error {
32
52
  readonly cause: unknown;
33
53
  constructor(message: string, cause?: unknown);
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,SAAS,GACT,cAAc,GACd,aAAa,GACb,WAAW,GACX,QAAQ,GACR,cAAc,GACd,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM7C;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAEjF,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEvB,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAQhH;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAepF;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAkB,KAAK,EAAE,OAAO,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAK7C;AAYD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,CAqBrD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,SAAS,GACT,cAAc,GACd,aAAa,GACb,WAAW,GACX,eAAe,GACf,wBAAwB,GACxB,oBAAoB,GACpB,QAAQ,GACR,cAAc,GACd,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,wGAAwG;IACxG,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAUD,0FAA0F;AAC1F,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAa,GAAG,iBAAiB,GAAG,YAAgC,GAC5E,WAAW,CAEb;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAEjF,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,wGAAwG;IACxG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGvC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;CAWtE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAmB1G;AAKD,sHAAsH;AACtH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAKxG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,GAAG,WAAW,GAAG,SAAS,CAIvE;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAkB,KAAK,EAAE,OAAO,CAAC;gBAErB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAK7C;AAYD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,CA4BrD"}
package/dist/errors.js CHANGED
@@ -1,25 +1,31 @@
1
- export class SpiderContractMismatchError extends Error {
2
- expected;
3
- actual;
4
- constructor(expected, actual) {
5
- super(`Spider contract mismatch: this SDK speaks ${expected} but the gateway declared ${actual}`);
6
- this.name = 'SpiderContractMismatchError';
7
- this.expected = expected;
8
- this.actual = actual;
9
- }
1
+ const QUERY_RETIRED = 'query_retired';
2
+ // Plan-limit refusals: the body code names the state, and the fixed wording stands in for a body without a message.
3
+ const LIMIT_MESSAGES = {
4
+ planning_limit_reached: 'trip planning limit reached',
5
+ agreement_inactive: 'agreement is not active',
6
+ };
7
+ /** A `bad_request` that names only the field, like the server's own validation errors. */
8
+ export function badRequest(field, problem = 'is out of range') {
9
+ return { code: 'bad_request', message: `${field} ${problem}`, field };
10
10
  }
11
11
  export class TransportError extends Error {
12
12
  kind;
13
13
  httpStatus;
14
14
  serverCode;
15
15
  field;
16
- constructor(kind, message, httpStatus, serverCode, field) {
16
+ /** The response body's own `message`, when it has one. */
17
+ serverMessage;
18
+ /** The code-shaped `error` field of the response body, where the gateway puts its own refusal codes. */
19
+ gatewayCode;
20
+ constructor(kind, message, httpStatus, serverCode, field, body) {
17
21
  super(message);
18
22
  this.name = 'TransportError';
19
23
  this.kind = kind;
20
24
  this.httpStatus = httpStatus;
21
25
  this.serverCode = serverCode;
22
26
  this.field = field;
27
+ this.serverMessage = body?.message;
28
+ this.gatewayCode = body?.gatewayCode;
23
29
  }
24
30
  }
25
31
  export function parseErrorEnvelope(text) {
@@ -32,13 +38,36 @@ export function parseErrorEnvelope(text) {
32
38
  }
33
39
  if (typeof body === 'object' && body !== null) {
34
40
  const b = body;
41
+ // The gateway's own rejections carry their code in `error` (e.g. "query_retired"); other
42
+ // services put a human sentence there, so only a code-shaped value counts.
43
+ const gatewayCode = typeof b.error === 'string' && /^[a-z][a-z0-9_]*$/.test(b.error) ? b.error : undefined;
35
44
  return {
36
- code: typeof b.code === 'string' ? b.code : undefined,
45
+ code: typeof b.code === 'string' ? b.code : gatewayCode,
37
46
  message: typeof b.message === 'string' ? b.message : undefined,
47
+ gatewayCode,
38
48
  };
39
49
  }
40
50
  return {};
41
51
  }
52
+ // The fixed wording of the gateway's and services' own 400s, e.g. "limit is out of range".
53
+ const FIELD_PROBLEM = /^([A-Za-z_]\w*) (?:is required|is out of range|is invalid)$/;
54
+ /** A non-2xx response → an `http` TransportError carrying the body's error code, and for a 400 the field it names. */
55
+ export function httpFailure(where, status, text, detail) {
56
+ const env = parseErrorEnvelope(text);
57
+ const message = (detail ?? env.message ?? text.slice(0, 300)).trim();
58
+ const field = status === 400 ? FIELD_PROBLEM.exec(message)?.[1] : undefined;
59
+ return new TransportError('http', `${where} -> ${status}: ${message}`, status, env.code, field, env);
60
+ }
61
+ /**
62
+ * The plan-limit error an `http` failure's body `error` field names (`planning_limit_reached`,
63
+ * `agreement_inactive`), whatever its status, or `undefined` when it names neither. A `code` field is not read.
64
+ */
65
+ export function limitRefusal(e) {
66
+ if (e.kind !== 'http' || e.gatewayCode == null || !Object.hasOwn(LIMIT_MESSAGES, e.gatewayCode))
67
+ return undefined;
68
+ const code = e.gatewayCode;
69
+ return { code, message: e.serverMessage?.trim() || LIMIT_MESSAGES[code], httpStatus: e.httpStatus, serverCode: code };
70
+ }
42
71
  export class DecodingError extends Error {
43
72
  cause;
44
73
  constructor(message, cause) {
@@ -59,14 +88,22 @@ function isAbort(e) {
59
88
  export function toSpiderError(e) {
60
89
  if (e instanceof TransportError) {
61
90
  if (e.kind === 'http') {
91
+ // The body code decides whatever the status, since a proxy may rewrite it; plan limits have no status fallback.
92
+ const refusal = limitRefusal(e);
93
+ if (refusal != null)
94
+ return refusal;
62
95
  const status = e.httpStatus ?? 0;
63
- const code = status === 401 || status === 403 ? 'unauthorized'
64
- : status === 404 ? 'not_found'
65
- : status === 408 || status === 504 ? 'timeout'
66
- : status === 429 ? 'rate_limited'
67
- : status >= 500 && status <= 599 ? 'server'
68
- : 'unknown';
69
- return { code, message: e.message, httpStatus: status, serverCode: e.serverCode };
96
+ if (e.serverCode === QUERY_RETIRED || status === 410) {
97
+ return { code: 'query_retired', message: 'persisted query is retired', httpStatus: status, serverCode: e.serverCode };
98
+ }
99
+ const code = status === 400 ? 'bad_request'
100
+ : status === 401 || status === 403 ? 'unauthorized'
101
+ : status === 404 ? 'not_found'
102
+ : status === 408 || status === 504 ? 'timeout'
103
+ : status === 429 ? 'rate_limited'
104
+ : status >= 500 && status <= 599 ? 'server'
105
+ : 'unknown';
106
+ return { code, message: e.message, httpStatus: status, serverCode: e.serverCode, field: e.field };
70
107
  }
71
108
  if (e.kind === 'no_data')
72
109
  return { code: 'not_found', message: e.message };
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAwBA,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAC3C,QAAQ,CAAS;IACjB,MAAM,CAAS;IAExB,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,6CAA6C,QAAQ,6BAA6B,MAAM,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAID,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAqB;IACzB,UAAU,CAAqB;IAC/B,UAAU,CAAqB;IAC/B,KAAK,CAAqB;IAEnC,YAAY,IAAwB,EAAE,OAAe,EAAE,UAAmB,EAAE,UAAmB,EAAE,KAAc;QAC7G,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,IAA+B,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACrD,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACpB,KAAK,CAAU;IAEjC,YAAY,OAAe,EAAE,KAAe;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,SAAS,SAAS,CAAC,CAAU;IAC3B,IAAI,CAAC,YAAY,KAAK;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACzC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,OAAO,CAAC,CAAU;IACzB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,MAAM,IAAI,CAAC;QACvD,CAAE,CAAuB,CAAC,IAAI,KAAK,YAAY,IAAK,CAAuB,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,IAAI,CAAC,YAAY,cAAc,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,GACR,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc;gBAC/C,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW;oBAC5B,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS;wBAC5C,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc;4BAC/B,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ;gCACzC,CAAC,CAAC,SAAS,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;QACpF,CAAC;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3E,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACjG,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,YAAY,aAAa;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAChG,IAAI,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC5E,IAAI,CAAC,YAAY,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACxF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { TransportError } from './errors.ts';
1
2
  export type FetchLike = typeof fetch;
2
3
  export interface AutoRetryOptions {
3
4
  readonly maxAttempts?: number;
@@ -24,6 +25,19 @@ export interface RawResponse {
24
25
  readonly status: number;
25
26
  readonly text: string;
26
27
  }
28
+ export interface GraphQLError {
29
+ message: string;
30
+ extensions?: {
31
+ code?: string;
32
+ field?: string;
33
+ } | null;
34
+ }
35
+ export interface GraphQLEnvelope<D> {
36
+ data?: D | null;
37
+ errors?: ReadonlyArray<GraphQLError> | null;
38
+ }
39
+ /** A GraphQL `errors` array → a typed bad_request for a BAD_REQUEST extension (with its field), else upstream. */
40
+ export declare function graphqlFailure(where: string, errors: ReadonlyArray<GraphQLError>): TransportError;
27
41
  export declare function parseJson<T>(text: string, where: string): T;
28
42
  export declare class Transport {
29
43
  private readonly baseUrl;
@@ -37,9 +51,33 @@ export declare class Transport {
37
51
  path: string;
38
52
  }, variables: unknown): Promise<D>;
39
53
  postJson<D>(path: string, body: unknown, errorMessage?: (raw: string) => string): Promise<D>;
54
+ /**
55
+ * Opens a Server-Sent Events stream: POSTs `{ id, variables }` to `/routing/{op.path}` and returns the raw
56
+ * streaming {@link Response} for the caller to read frame-by-frame. Unlike {@link send}, it does not
57
+ * auto-retry — a streamed response is consumed over time, so retrying (or aborting once the body is
58
+ * flowing) makes no sense; the connect timeout guards only the initial handshake and is cleared the moment
59
+ * the response headers arrive, leaving the body to stream uninterrupted.
60
+ */
61
+ stream(op: {
62
+ id: string;
63
+ path: string;
64
+ }, variables: unknown): Promise<Response>;
40
65
  getJson<D>(path: string, query?: Record<string, string>): Promise<D>;
41
66
  getRaw(path: string, query?: Record<string, string>): Promise<RawResponse>;
42
- private buildHeaders;
67
+ /**
68
+ * Best-effort connection warm-up. Issues one `GET {baseUrl}/ping`, authenticated with the
69
+ * client apikey, through this transport's own fetch, so the TLS handshake + connection it opens
70
+ * joins the per-origin pool and is reused by the first real call. Returns the measured
71
+ * round-trip in milliseconds.
72
+ *
73
+ * Never rejects: a network error, a timeout, or a non-2xx (e.g. a 401 against a keyless gateway,
74
+ * or a 404 before the `/ping` route is deployed) all still opened — or attempted to open — the
75
+ * connection, so the elapsed time is returned regardless. Only the apikey rides the request — it
76
+ * comes from the transport's shared request setup in `send()`; `/ping` is not contract-gated, so
77
+ * no contract/sdk headers are sent.
78
+ */
79
+ ping(): Promise<number>;
80
+ private contractHeaders;
43
81
  private send;
44
82
  }
45
83
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAYD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,CAM3D;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAmC;gBAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAWjE,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IA4B5E,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAgB5F,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAUpE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAYhF,OAAO,CAAC,YAAY;YAQN,IAAI;CA4BnB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/http.js CHANGED
@@ -1,6 +1,14 @@
1
- import { CONTRACT_HEADER, CONTRACT_VERSION, checkContract } from "./contract.js";
1
+ import { CONTRACT_HEADER, CONTRACT_VERSION } from "./contract.js";
2
2
  import { SDK_HEADER, SDK_IDENTITY } from "./sdk.js";
3
- import { DecodingError, TransportError, parseErrorEnvelope } from "./errors.js";
3
+ import { DecodingError, TransportError, httpFailure } from "./errors.js";
4
+ /** A GraphQL `errors` array → a typed bad_request for a BAD_REQUEST extension (with its field), else upstream. */
5
+ export function graphqlFailure(where, errors) {
6
+ const bad = errors.find((e) => e.extensions?.code === 'BAD_REQUEST');
7
+ if (bad != null) {
8
+ return new TransportError('bad_request', bad.message, undefined, undefined, bad.extensions?.field);
9
+ }
10
+ return new TransportError('upstream', `${where} errors: ${errors.map((e) => e.message).join(', ')}`);
11
+ }
4
12
  export function parseJson(text, where) {
5
13
  try {
6
14
  return JSON.parse(text);
@@ -28,24 +36,15 @@ export class Transport {
28
36
  async graphql(op, variables) {
29
37
  const res = await this.send(`${this.baseUrl}/routing/${op.path}`, {
30
38
  method: 'POST',
31
- headers: this.buildHeaders({ 'content-type': 'application/json' }),
39
+ headers: this.contractHeaders({ 'content-type': 'application/json' }),
32
40
  body: JSON.stringify({ id: op.id, variables }),
33
41
  });
34
- checkContract(res.headers.get(CONTRACT_HEADER));
35
42
  const text = await res.text();
36
- if (!res.ok) {
37
- const env = parseErrorEnvelope(text);
38
- const detail = env.message ?? text.slice(0, 300);
39
- throw new TransportError('http', `routing ${op.path} -> ${res.status}: ${detail}`, res.status, env.code);
40
- }
43
+ if (!res.ok)
44
+ throw httpFailure(`routing ${op.path}`, res.status, text);
41
45
  const envelope = parseJson(text, `routing ${op.path}`);
42
46
  if (envelope.errors != null && envelope.errors.length > 0) {
43
- // A BAD_REQUEST extension → typed bad_request; anything else stays a generic upstream (→ server).
44
- const bad = envelope.errors.find((e) => e.extensions?.code === 'BAD_REQUEST');
45
- if (bad != null) {
46
- throw new TransportError('bad_request', bad.message, undefined, undefined, bad.extensions?.field);
47
- }
48
- throw new TransportError('upstream', `routing ${op.path} errors: ${envelope.errors.map((e) => e.message).join(', ')}`);
47
+ throw graphqlFailure(`routing ${op.path}`, envelope.errors);
49
48
  }
50
49
  if (envelope.data == null) {
51
50
  throw new TransportError('no_data', `routing ${op.path} returned no data`);
@@ -55,25 +54,42 @@ export class Transport {
55
54
  async postJson(path, body, errorMessage) {
56
55
  const res = await this.send(`${this.baseUrl}${path}`, {
57
56
  method: 'POST',
58
- headers: this.buildHeaders({ 'content-type': 'application/json' }),
57
+ headers: this.contractHeaders({ 'content-type': 'application/json' }),
59
58
  body: JSON.stringify(body),
60
59
  });
61
- checkContract(res.headers.get(CONTRACT_HEADER));
62
60
  const text = await res.text();
63
- if (!res.ok) {
64
- const env = parseErrorEnvelope(text);
65
- const message = errorMessage ? errorMessage(text) : (env.message ?? text.slice(0, 300));
66
- throw new TransportError('http', `POST ${path} -> ${res.status}: ${message}`, res.status, env.code);
67
- }
61
+ if (!res.ok)
62
+ throw httpFailure(`POST ${path}`, res.status, text, errorMessage?.(text));
68
63
  return parseJson(text, `POST ${path}`);
69
64
  }
65
+ /**
66
+ * Opens a Server-Sent Events stream: POSTs `{ id, variables }` to `/routing/{op.path}` and returns the raw
67
+ * streaming {@link Response} for the caller to read frame-by-frame. Unlike {@link send}, it does not
68
+ * auto-retry — a streamed response is consumed over time, so retrying (or aborting once the body is
69
+ * flowing) makes no sense; the connect timeout guards only the initial handshake and is cleared the moment
70
+ * the response headers arrive, leaving the body to stream uninterrupted.
71
+ */
72
+ async stream(op, variables) {
73
+ const headers = this.contractHeaders({ 'content-type': 'application/json', accept: 'text/event-stream' });
74
+ headers.set('apikey', this.apiKey);
75
+ const controller = new AbortController();
76
+ const timer = setTimeout(() => controller.abort(), this.timeoutMs);
77
+ try {
78
+ return await this.doFetch(`${this.baseUrl}/routing/${op.path}`, {
79
+ method: 'POST',
80
+ headers,
81
+ body: JSON.stringify({ id: op.id, variables }),
82
+ signal: controller.signal,
83
+ });
84
+ }
85
+ finally {
86
+ clearTimeout(timer);
87
+ }
88
+ }
70
89
  async getJson(path, query) {
71
90
  const raw = await this.getRaw(path, query);
72
- if (!raw.ok) {
73
- const env = parseErrorEnvelope(raw.text);
74
- const detail = env.message ?? raw.text.slice(0, 300);
75
- throw new TransportError('http', `GET ${path} -> ${raw.status}: ${detail}`, raw.status, env.code);
76
- }
91
+ if (!raw.ok)
92
+ throw httpFailure(`GET ${path}`, raw.status, raw.text);
77
93
  return parseJson(raw.text, `GET ${path}`);
78
94
  }
79
95
  async getRaw(path, query) {
@@ -83,18 +99,48 @@ export class Transport {
83
99
  url.searchParams.set(key, value);
84
100
  }
85
101
  }
86
- const res = await this.send(url.toString(), { method: 'GET', headers: this.buildHeaders() });
87
- checkContract(res.headers.get(CONTRACT_HEADER));
102
+ const res = await this.send(url.toString(), { method: 'GET', headers: this.contractHeaders() });
88
103
  return { ok: res.ok, status: res.status, text: await res.text() };
89
104
  }
90
- buildHeaders(extra) {
105
+ /**
106
+ * Best-effort connection warm-up. Issues one `GET {baseUrl}/ping`, authenticated with the
107
+ * client apikey, through this transport's own fetch, so the TLS handshake + connection it opens
108
+ * joins the per-origin pool and is reused by the first real call. Returns the measured
109
+ * round-trip in milliseconds.
110
+ *
111
+ * Never rejects: a network error, a timeout, or a non-2xx (e.g. a 401 against a keyless gateway,
112
+ * or a 404 before the `/ping` route is deployed) all still opened — or attempted to open — the
113
+ * connection, so the elapsed time is returned regardless. Only the apikey rides the request — it
114
+ * comes from the transport's shared request setup in `send()`; `/ping` is not contract-gated, so
115
+ * no contract/sdk headers are sent.
116
+ */
117
+ async ping() {
118
+ const start = performance.now();
119
+ try {
120
+ const res = await this.send(`${this.baseUrl}/ping`, { method: 'GET' });
121
+ // Drain the body so the connection is released back to the pool for the first real call.
122
+ await res.text();
123
+ }
124
+ catch {
125
+ // Best-effort: the connection attempt itself is the warm-up — swallow every failure.
126
+ }
127
+ return performance.now() - start;
128
+ }
129
+ // Contract-gated calls carry the contract + sdk identity headers; the apikey is applied
130
+ // centrally in `send()`, so it's not set here.
131
+ contractHeaders(extra) {
91
132
  const headers = new Headers(extra);
92
- headers.set('apikey', this.apiKey);
93
133
  headers.set(CONTRACT_HEADER, CONTRACT_VERSION);
94
134
  headers.set(SDK_HEADER, SDK_IDENTITY);
95
135
  return headers;
96
136
  }
97
137
  async send(url, init) {
138
+ // The client apikey is invariant for the client's whole life, so it's applied here on the
139
+ // shared request path — carried by every request (real calls and the warm-up) rather than
140
+ // re-attached per call.
141
+ const headers = new Headers(init.headers);
142
+ headers.set('apikey', this.apiKey);
143
+ const request = { ...init, headers };
98
144
  const maxAttempts = this.retry?.maxAttempts ?? 1;
99
145
  for (let attempt = 1;; attempt++) {
100
146
  const controller = new AbortController();
@@ -102,7 +148,7 @@ export class Transport {
102
148
  let res;
103
149
  let err;
104
150
  try {
105
- res = await this.doFetch(url, { ...init, signal: controller.signal });
151
+ res = await this.doFetch(url, { ...request, signal: controller.signal });
106
152
  }
107
153
  catch (e) {
108
154
  err = e;
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,15 +2,14 @@ export { SpiderClient } from './client.ts';
2
2
  export type { SpiderClientOptions, FetchLike, FeatureOptions, AutoRetryOptions } from './http.ts';
3
3
  export type { SpiderResult } from './result.ts';
4
4
  export type { SpiderError, SpiderErrorCode } from './errors.ts';
5
- export { SpiderContractMismatchError } from './errors.ts';
6
5
  export { Location, ViaLocation } from './location.ts';
7
- export type { TransitMode, WheelchairBoarding, BikesAllowed, OccupancyStatus } from './enums.ts';
6
+ export type { TransitMode, WheelchairBoarding, BikesAllowed, OccupancyStatus, RealtimeState, RoutingErrorCode, InputField, } from './enums.ts';
8
7
  export { SpiderRouting } from './routing.ts';
9
- export type { Route, RouteEdge, Itinerary, Leg, LatLon, RoutePageInfo, RoutingError, Departure, TripDetails, TripStop, PlanOptions, PlanStreamOptions, PlanStreamPageOptions, DeparturesOptions, } from './routing.ts';
8
+ export type { Route, RouteEdge, Itinerary, Leg, LatLon, RoutePageInfo, RoutingError, Departure, TripDetails, TripStop, PlanOptions, PlanStreamRequestOptions, PlanStreamEvent, DeparturesOptions, } from './routing.ts';
10
9
  export { SpiderStops } from './stops.ts';
11
10
  export type { Stop, StopFilter, GeoPoint, GeoBoundingBox } from './stops.ts';
12
- export { SpiderRealtime } from './realtime.ts';
13
- export type { FeedFreshness, LiveVehicle, LiveVehicleUpdate, VehiclePositions, StopTimeUpdate, TripDelay, TripDelays, ServiceAlert, AlertActivePeriod, AlertInformedEntity, ServiceAlerts, } from './realtime.ts';
11
+ export { SpiderRealtime, delayFor } from './realtime.ts';
12
+ export type { FeedFreshness, LiveVehicle, LiveVehicleUpdate, VehiclePositions, StopTimeUpdate, TripDelay, ServiceDateDelays, TripDelays, ServiceAlert, AlertActivePeriod, AlertInformedEntity, ServiceAlerts, } from './realtime.ts';
14
13
  export { pollVehicles, pollVehicleForTrip, pollDelays, pollAlerts } from './polling.ts';
15
14
  export type { PollOptions } from './polling.ts';
16
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClG,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,GAAG,EACH,MAAM,EACN,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,mBAAmB,EAAE,SAAS,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAClG,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,GAAG,EACH,MAAM,EACN,aAAa,EACb,YAAY,EACZ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,WAAW,EACX,wBAAwB,EACxB,eAAe,EACf,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzD,YAAY,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACxF,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}