@compassdigital/sdk.typescript 3.0.0-beta.11 → 3.0.0-beta.12
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.
- package/README.md +108 -8
- package/lib/base.d.ts +22 -0
- package/lib/base.d.ts.map +1 -1
- package/lib/base.js +32 -0
- package/lib/base.js.map +1 -1
- package/package.json +1 -1
- package/src/base.ts +28 -0
- package/test/client.test.ts +22 -0
package/README.md
CHANGED
|
@@ -8,31 +8,131 @@ Compass Digital Labs TypeScript SDK
|
|
|
8
8
|
$ npm install --save @compassdigital/sdk.typescript@latest
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
+
## Example Server Usage
|
|
12
|
+
|
|
13
|
+
``` typescript
|
|
14
|
+
import Provider from "@compassdigital/provider";
|
|
15
|
+
import { GetTaskRequest, GetTaskResponse } from "@compassdigital/sdk.typescript/task";
|
|
16
|
+
|
|
17
|
+
const provider = new Provider({ type: "payment" });
|
|
18
|
+
|
|
19
|
+
provider.on<GetTaskRequest, GetTaskResponse>("get_task", function (req, next): void {
|
|
20
|
+
// ...
|
|
21
|
+
})
|
|
22
|
+
```
|
|
23
|
+
|
|
11
24
|
## Example Client Usage
|
|
12
25
|
|
|
26
|
+
**Instanciate Client:**
|
|
27
|
+
|
|
13
28
|
``` typescript
|
|
14
29
|
import { ServiceClient } from "@compassdigital/sdk.typescript";
|
|
15
30
|
|
|
16
31
|
const api = new ServiceClient({ stage: "dev" });
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Basic Request:**
|
|
35
|
+
|
|
36
|
+
``` typescript
|
|
37
|
+
const task = await api.get_task(id);
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Request Options:**
|
|
41
|
+
|
|
42
|
+
* These options may be passed to any request.
|
|
17
43
|
|
|
18
|
-
|
|
19
|
-
|
|
44
|
+
``` typescript
|
|
45
|
+
interface RequestOptions {
|
|
46
|
+
// environment to make requests to
|
|
47
|
+
stage?: string;
|
|
48
|
+
// authentication token
|
|
49
|
+
token?: string;
|
|
50
|
+
// additional headers
|
|
51
|
+
headers?: Record<string, string>;
|
|
52
|
+
// log all requests and responses
|
|
53
|
+
debug?: boolean;
|
|
54
|
+
// the number of times to retry a request
|
|
55
|
+
retry?: number;
|
|
56
|
+
// make requests against this base url
|
|
57
|
+
// note: the stage property is ignored if base_url is set
|
|
58
|
+
base_url?: string;
|
|
59
|
+
// intercept outgoing http requests
|
|
60
|
+
intercept?: InterceptFn;
|
|
20
61
|
}
|
|
21
62
|
```
|
|
22
63
|
|
|
23
|
-
|
|
64
|
+
* The `RequestOptions` can be provided to the `ServiceClient` constructor or at the request call site.
|
|
65
|
+
* The options provided at the call site will overide options passed to the constructor.
|
|
24
66
|
|
|
25
67
|
``` typescript
|
|
26
|
-
import Provider from "@compassdigital/provider";
|
|
27
|
-
import { GetTaskRequest, GetTaskResponse } from "@compassdigital/sdk.typescript/task";
|
|
28
68
|
|
|
29
|
-
const
|
|
69
|
+
const api = new ServiceClient({
|
|
70
|
+
token: "<token>",
|
|
71
|
+
retry: 2,
|
|
72
|
+
})
|
|
30
73
|
|
|
31
|
-
|
|
32
|
-
|
|
74
|
+
const location = await api.get_location(id, {
|
|
75
|
+
token: "<token>",
|
|
76
|
+
retry: 2,
|
|
33
77
|
})
|
|
34
78
|
```
|
|
35
79
|
|
|
80
|
+
**Error Handling:**
|
|
81
|
+
|
|
82
|
+
* non-200 responses are rejected with a `ServiceError`.
|
|
83
|
+
|
|
84
|
+
``` typescript
|
|
85
|
+
try {
|
|
86
|
+
const shoppingcart = await api.get_shoppingcart(id);
|
|
87
|
+
} catch (err) {
|
|
88
|
+
// Since the error type is `unknown` we must type assert before
|
|
89
|
+
// accessing the properties.
|
|
90
|
+
if (err instanceof ServiceError) {
|
|
91
|
+
console.log(err.status, err.code, err.message);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// There are helpers for accessing the status and code
|
|
95
|
+
if (ServiceError.code(err) === 400.31) {
|
|
96
|
+
console.log("Failed to get menu");
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
* There is a `ignore` convinience method for ignoring specific status & error codes.
|
|
102
|
+
|
|
103
|
+
``` typescript
|
|
104
|
+
const issue: OrderIssue = { items: [] };
|
|
105
|
+
await api.post_order_issue(id, issue).ignore(400.18, 400.21);
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
* There is a `combine` convinience method for returning an object which contains the response or error.
|
|
109
|
+
|
|
110
|
+
``` typescript
|
|
111
|
+
const res = await api.get_task(id).combine();
|
|
112
|
+
|
|
113
|
+
if (res.ok) {
|
|
114
|
+
console.log("task", res.body);
|
|
115
|
+
} else {
|
|
116
|
+
console.log("error", res.err);
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Testing:**
|
|
121
|
+
|
|
122
|
+
* You can register an `intercept` function which will recieve all request.
|
|
123
|
+
|
|
124
|
+
``` typescript
|
|
125
|
+
|
|
126
|
+
import { ServiceClient, RequestData, ResponseData, FetchFn } from "@compassdigital/sdk.typescript";
|
|
127
|
+
|
|
128
|
+
async function intercept(req: RequestData, fetch: FetchFn): Promise<ResponseData> {
|
|
129
|
+
expect(req.name).toBe("get_shoppingcart");
|
|
130
|
+
return { ok: true, status: 200, body: JSON.stringify({}) }
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const api = new ServiceClient({ intercept });
|
|
134
|
+
```
|
|
135
|
+
|
|
36
136
|
## Code Gen
|
|
37
137
|
|
|
38
138
|
1. Add new services to `manifest.json`.
|
package/lib/base.d.ts
CHANGED
|
@@ -65,7 +65,24 @@ export declare class ResponsePromise<T> implements Promise<T> {
|
|
|
65
65
|
* If no codes are specified, all codes are ignored.
|
|
66
66
|
*/
|
|
67
67
|
ignore(...codes: number[]): ResponsePromise<T | null>;
|
|
68
|
+
/**
|
|
69
|
+
* Returns a promise that resolves to either the response body
|
|
70
|
+
* or a ServiceError.
|
|
71
|
+
*/
|
|
72
|
+
combine(): Promise<EitherResponse<T>>;
|
|
68
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Either a response body or a service error.
|
|
76
|
+
*/
|
|
77
|
+
declare type EitherResponse<T> = {
|
|
78
|
+
ok: true;
|
|
79
|
+
body: T;
|
|
80
|
+
err?: ServiceError;
|
|
81
|
+
} | {
|
|
82
|
+
ok: false;
|
|
83
|
+
body?: T;
|
|
84
|
+
err: ServiceError;
|
|
85
|
+
};
|
|
69
86
|
/**
|
|
70
87
|
* An error returned from an api service.
|
|
71
88
|
*/
|
|
@@ -91,6 +108,10 @@ export declare class ServiceError extends Error {
|
|
|
91
108
|
* If no codes are specified, all codes are ignored.
|
|
92
109
|
*/
|
|
93
110
|
static ignore<T>(codes: number[], response: Promise<T>): Promise<T | null>;
|
|
111
|
+
/**
|
|
112
|
+
* Returns a promise that resolves to either T or a ServiceError.
|
|
113
|
+
*/
|
|
114
|
+
static combine<T>(response: Promise<T>): Promise<EitherResponse<T>>;
|
|
94
115
|
/**
|
|
95
116
|
* Constructs a ServiceError from the provided response data.
|
|
96
117
|
*/
|
|
@@ -132,4 +153,5 @@ export declare abstract class BaseServiceClient {
|
|
|
132
153
|
*/
|
|
133
154
|
private _request;
|
|
134
155
|
}
|
|
156
|
+
export {};
|
|
135
157
|
//# sourceMappingURL=base.d.ts.map
|
package/lib/base.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAE7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,oBAAY,OAAO,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAElE;;GAEG;AACH,oBAAY,WAAW,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;AAEtF;;;GAGG;AACH,qBAAa,eAAe,CAAC,CAAC,CAAE,YAAW,OAAO,CAAC,CAAC,CAAC;IAOvC,OAAO,CAAC,OAAO;IAL3B;;OAEG;IACH,CAAC,MAAM,CAAC,WAAW,CAAC,SAA8B;gBAE9B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvC;;OAEG;IACH,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,EACjC,WAAW,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,EACrE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,eAAe,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAIvC;;OAEG;IACH,KAAK,CAAC,OAAO,GAAG,KAAK,EACnB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,GACpE,eAAe,CAAC,CAAC,GAAG,OAAO,CAAC;IAI/B;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC;IAI5D;;;;OAIG;IACH,MAAM,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|
package/lib/base.js
CHANGED
|
@@ -110,6 +110,13 @@ var ResponsePromise = /** @class */ (function () {
|
|
|
110
110
|
}
|
|
111
111
|
return new ResponsePromise(ServiceError.ignore(codes, this.promise));
|
|
112
112
|
};
|
|
113
|
+
/**
|
|
114
|
+
* Returns a promise that resolves to either the response body
|
|
115
|
+
* or a ServiceError.
|
|
116
|
+
*/
|
|
117
|
+
ResponsePromise.prototype.combine = function () {
|
|
118
|
+
return new ResponsePromise(ServiceError.combine(this.promise));
|
|
119
|
+
};
|
|
113
120
|
return ResponsePromise;
|
|
114
121
|
}());
|
|
115
122
|
exports.ResponsePromise = ResponsePromise;
|
|
@@ -184,6 +191,31 @@ var ServiceError = /** @class */ (function (_super) {
|
|
|
184
191
|
});
|
|
185
192
|
});
|
|
186
193
|
};
|
|
194
|
+
/**
|
|
195
|
+
* Returns a promise that resolves to either T or a ServiceError.
|
|
196
|
+
*/
|
|
197
|
+
ServiceError.combine = function (response) {
|
|
198
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
199
|
+
var body, err_2;
|
|
200
|
+
return __generator(this, function (_b) {
|
|
201
|
+
switch (_b.label) {
|
|
202
|
+
case 0:
|
|
203
|
+
_b.trys.push([0, 2, , 3]);
|
|
204
|
+
return [4 /*yield*/, response];
|
|
205
|
+
case 1:
|
|
206
|
+
body = _b.sent();
|
|
207
|
+
return [2 /*return*/, { ok: true, body: body }];
|
|
208
|
+
case 2:
|
|
209
|
+
err_2 = _b.sent();
|
|
210
|
+
if (err_2 instanceof ServiceError) {
|
|
211
|
+
return [2 /*return*/, { ok: false, err: err_2 }];
|
|
212
|
+
}
|
|
213
|
+
throw err_2;
|
|
214
|
+
case 3: return [2 /*return*/];
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
};
|
|
187
219
|
/**
|
|
188
220
|
* Constructs a ServiceError from the provided response data.
|
|
189
221
|
*/
|
package/lib/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4DAAgC;AAqDhC;;;GAGG;AACH;IAOE,yBAAoB,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;QALvC;;WAEG;QACH,QAAoB,GAAG,0BAA0B,CAAC;IAER,CAAC;IAE3C;;OAEG;IACH,8BAAI,GAAJ,UACE,WAAqE,EACrE,UAAuE;QAEvE,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,+BAAK,GAAL,UACE,UAAqE;QAErE,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,iCAAO,GAAP,UAAQ,SAA+B;QACrC,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;;OAIG;IACH,gCAAM,GAAN;QAAO,eAAkB;aAAlB,UAAkB,EAAlB,qBAAkB,EAAlB,IAAkB;YAAlB,0BAAkB;;QACvB,OAAO,IAAI,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,CAAC;IACH,sBAAC;AAAD,CAAC,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/base.ts
CHANGED
|
@@ -99,8 +99,21 @@ export class ResponsePromise<T> implements Promise<T> {
|
|
|
99
99
|
ignore(...codes: number[]): ResponsePromise<T | null> {
|
|
100
100
|
return new ResponsePromise(ServiceError.ignore(codes, this.promise));
|
|
101
101
|
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Returns a promise that resolves to either the response body
|
|
105
|
+
* or a ServiceError.
|
|
106
|
+
*/
|
|
107
|
+
combine(): Promise<EitherResponse<T>> {
|
|
108
|
+
return new ResponsePromise(ServiceError.combine<T>(this.promise));
|
|
109
|
+
}
|
|
102
110
|
}
|
|
103
111
|
|
|
112
|
+
/**
|
|
113
|
+
* Either a response body or a service error.
|
|
114
|
+
*/
|
|
115
|
+
type EitherResponse<T> = { ok: true; body: T; err?: ServiceError } | { ok: false; body?: T, err: ServiceError; };
|
|
116
|
+
|
|
104
117
|
/**
|
|
105
118
|
* An error returned from an api service.
|
|
106
119
|
*/
|
|
@@ -162,6 +175,21 @@ export class ServiceError extends Error {
|
|
|
162
175
|
}
|
|
163
176
|
}
|
|
164
177
|
|
|
178
|
+
/**
|
|
179
|
+
* Returns a promise that resolves to either T or a ServiceError.
|
|
180
|
+
*/
|
|
181
|
+
static async combine<T>(response: Promise<T>): Promise<EitherResponse<T>> {
|
|
182
|
+
try {
|
|
183
|
+
const body = await response;
|
|
184
|
+
return { ok: true, body };
|
|
185
|
+
} catch (err) {
|
|
186
|
+
if (err instanceof ServiceError) {
|
|
187
|
+
return { ok: false, err }
|
|
188
|
+
}
|
|
189
|
+
throw err;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
165
193
|
/**
|
|
166
194
|
* Constructs a ServiceError from the provided response data.
|
|
167
195
|
*/
|
package/test/client.test.ts
CHANGED
|
@@ -131,5 +131,27 @@ describe("ServiceClient", () => {
|
|
|
131
131
|
expect(ServiceError.code(err)).toBe(500.4);
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
|
+
|
|
135
|
+
test("either should be true with 200 response", async () => {
|
|
136
|
+
const api = new ServiceClient({
|
|
137
|
+
intercept: async (req) => {
|
|
138
|
+
return { ok: true, status: 200, body: "{}" };
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const res = await api.get_task("{}").combine();
|
|
142
|
+
expect(res.ok).toBe(true);
|
|
143
|
+
expect(res.body).toBeTruthy();
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test("either should be false with non-200 response", async () => {
|
|
147
|
+
const api = new ServiceClient({
|
|
148
|
+
intercept: async (req) => {
|
|
149
|
+
return { ok: false, status: 400, body: "{}" };
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
const res = await api.get_task("{}").combine();
|
|
153
|
+
expect(res.ok).toBe(false);
|
|
154
|
+
expect(res.err).toBeInstanceOf(ServiceError);
|
|
155
|
+
});
|
|
134
156
|
});
|
|
135
157
|
});
|