@takaro/apiclient 0.0.0-dev.ec6d0e0 → 0.0.0-dev.ecb54e3
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 +27 -0
- package/dist/generated/api.d.ts +2628 -1052
- package/dist/generated/api.d.ts.map +1 -1
- package/dist/generated/api.js +7594 -6548
- package/dist/generated/api.js.map +1 -1
- package/dist/generated-management/api.d.ts +14494 -0
- package/dist/generated-management/api.d.ts.map +1 -0
- package/dist/generated-management/api.js +3413 -0
- package/dist/generated-management/api.js.map +1 -0
- package/dist/generated-management/base.d.ts +67 -0
- package/dist/generated-management/base.d.ts.map +1 -0
- package/dist/generated-management/base.js +59 -0
- package/dist/generated-management/base.js.map +1 -0
- package/dist/generated-management/common.d.ts +66 -0
- package/dist/generated-management/common.d.ts.map +1 -0
- package/dist/generated-management/common.js +135 -0
- package/dist/generated-management/common.js.map +1 -0
- package/dist/generated-management/configuration.d.ts +92 -0
- package/dist/generated-management/configuration.d.ts.map +1 -0
- package/dist/generated-management/configuration.js +46 -0
- package/dist/generated-management/configuration.js.map +1 -0
- package/dist/generated-management/index.d.ts +14 -0
- package/dist/generated-management/index.d.ts.map +1 -0
- package/{src/generated/index.ts → dist/generated-management/index.js} +1 -1
- package/dist/generated-management/index.js.map +1 -0
- package/dist/lib/adminClient.d.ts +3 -2
- package/dist/lib/adminClient.d.ts.map +1 -1
- package/dist/lib/adminClient.js +8 -2
- package/dist/lib/adminClient.js.map +1 -1
- package/dist/lib/apiKey.d.ts +18 -0
- package/dist/lib/apiKey.d.ts.map +1 -0
- package/dist/lib/apiKey.js +71 -0
- package/dist/lib/apiKey.js.map +1 -0
- package/dist/lib/baseClient.d.ts +15 -1
- package/dist/lib/baseClient.d.ts.map +1 -1
- package/dist/lib/baseClient.js +17 -3
- package/dist/lib/baseClient.js.map +1 -1
- package/dist/lib/client.d.ts +32 -2
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +56 -5
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/distributorClient.d.ts +18 -0
- package/dist/lib/distributorClient.d.ts.map +1 -0
- package/dist/lib/distributorClient.js +21 -0
- package/dist/lib/distributorClient.js.map +1 -0
- package/dist/main.d.ts +5 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +7 -0
- package/dist/main.js.map +1 -1
- package/package.json +13 -5
- package/src/__tests__/main.integration.test.ts +0 -39
- package/src/generated/.openapi-generator-ignore +0 -23
- package/src/generated/api.ts +0 -43315
- package/src/generated/base.ts +0 -91
- package/src/generated/common.ts +0 -164
- package/src/generated/configuration.ts +0 -123
- package/src/generated/git_push.sh +0 -57
- package/src/lib/adminClient.ts +0 -37
- package/src/lib/baseClient.ts +0 -159
- package/src/lib/client.ts +0 -319
- package/src/main.ts +0 -9
- package/tsconfig.build.json +0 -10
- package/tsconfig.json +0 -8
- package/typedoc.json +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.d.ts","sourceRoot":"","sources":["../../src/generated-management/configuration.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EACR,MAAM,GACN,OAAO,CAAC,MAAM,CAAC,GACf,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,GAC9C,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,YAAY,CAAC,EAAE,UAAU,GAAG,CAAC;CAC9B;AAED,qBAAa,aAAa;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACrG;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EACR,MAAM,GACN,OAAO,CAAC,MAAM,CAAC,GACf,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,GAC9C,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,UAAU,GAAG,CAAC;gBAEjB,KAAK,GAAE,uBAA4B;IAiB/C;;;;;;;;;OASG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAIzC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* tslint:disable */
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
/**
|
|
4
|
+
* Takaro API
|
|
5
|
+
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
6
|
+
*
|
|
7
|
+
* The version of the OpenAPI document: 0.0.0
|
|
8
|
+
* Contact: support@takaro.io
|
|
9
|
+
*
|
|
10
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
11
|
+
* https://openapi-generator.tech
|
|
12
|
+
* Do not edit the class manually.
|
|
13
|
+
*/
|
|
14
|
+
export class Configuration {
|
|
15
|
+
constructor(param = {}) {
|
|
16
|
+
this.apiKey = param.apiKey;
|
|
17
|
+
this.username = param.username;
|
|
18
|
+
this.password = param.password;
|
|
19
|
+
this.accessToken = param.accessToken;
|
|
20
|
+
this.basePath = param.basePath;
|
|
21
|
+
this.serverIndex = param.serverIndex;
|
|
22
|
+
this.baseOptions = {
|
|
23
|
+
headers: {
|
|
24
|
+
...param.baseOptions?.headers,
|
|
25
|
+
'User-Agent': 'OpenAPI-Generator/typescript-axios',
|
|
26
|
+
},
|
|
27
|
+
...param.baseOptions,
|
|
28
|
+
};
|
|
29
|
+
this.formDataCtor = param.formDataCtor;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if the given MIME is a JSON MIME.
|
|
33
|
+
* JSON MIME examples:
|
|
34
|
+
* application/json
|
|
35
|
+
* application/json; charset=UTF8
|
|
36
|
+
* APPLICATION/JSON
|
|
37
|
+
* application/vnd.company+json
|
|
38
|
+
* @param mime - MIME (Multipurpose Internet Mail Extensions)
|
|
39
|
+
* @return True if the given MIME is JSON, false otherwise.
|
|
40
|
+
*/
|
|
41
|
+
isJsonMime(mime) {
|
|
42
|
+
const jsonMime = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
|
|
43
|
+
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=configuration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../../src/generated-management/configuration.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,oBAAoB;AACpB;;;;;;;;;;GAUG;AAiBH,MAAM,OAAO,aAAa;IA8DxB,YAAY,QAAiC,EAAE;QAC7C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG;YACjB,OAAO,EAAE;gBACP,GAAG,KAAK,CAAC,WAAW,EAAE,OAAO;gBAC7B,YAAY,EAAE,oCAAoC;aACnD;YACD,GAAG,KAAK,CAAC,WAAW;SACrB,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IACzC,CAAC;IAED;;;;;;;;;OASG;IACI,UAAU,CAAC,IAAY;QAC5B,MAAM,QAAQ,GAAW,IAAI,MAAM,CAAC,+DAA+D,EAAE,GAAG,CAAC,CAAC;QAC1G,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,6BAA6B,CAAC,CAAC;IACxG,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Takaro API
|
|
3
|
+
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
|
4
|
+
*
|
|
5
|
+
* The version of the OpenAPI document: 0.0.0
|
|
6
|
+
* Contact: support@takaro.io
|
|
7
|
+
*
|
|
8
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
9
|
+
* https://openapi-generator.tech
|
|
10
|
+
* Do not edit the class manually.
|
|
11
|
+
*/
|
|
12
|
+
export * from './api.js';
|
|
13
|
+
export * from './configuration.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generated-management/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generated-management/index.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,oBAAoB;AACpB;;;;;;;;;;GAUG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DomainApi } from '../generated/index.js';
|
|
2
|
-
import { BaseApiClient, IBaseApiClientConfig } from './baseClient.js';
|
|
1
|
+
import { DistributorApi, DomainApi } from '../generated-management/index.js';
|
|
2
|
+
import { BaseApiClient, type IBaseApiClientConfig } from './baseClient.js';
|
|
3
3
|
export interface IAdminApiClientConfig extends IBaseApiClientConfig {
|
|
4
4
|
auth: {
|
|
5
5
|
clientSecret: string;
|
|
@@ -9,5 +9,6 @@ export declare class AdminClient extends BaseApiClient<IAdminApiClientConfig> {
|
|
|
9
9
|
constructor(config: IAdminApiClientConfig);
|
|
10
10
|
private addAuthInterceptor;
|
|
11
11
|
get domain(): DomainApi;
|
|
12
|
+
get distributor(): DistributorApi;
|
|
12
13
|
}
|
|
13
14
|
//# sourceMappingURL=adminClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adminClient.d.ts","sourceRoot":"","sources":["../../src/lib/adminClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"adminClient.d.ts","sourceRoot":"","sources":["../../src/lib/adminClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG3E,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,IAAI,EAAE;QACJ,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,qBAAa,WAAY,SAAQ,aAAa,CAAC,qBAAqB,CAAC;gBACvD,MAAM,EAAE,qBAAqB;IAKzC,OAAO,CAAC,kBAAkB;IAa1B,IAAI,MAAM,cAQT;IAED,IAAI,WAAW,mBAQd;CACF"}
|
package/dist/lib/adminClient.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DomainApi } from '../generated/index.js';
|
|
1
|
+
import { DistributorApi, DomainApi } from '../generated-management/index.js';
|
|
2
2
|
import { BaseApiClient } from './baseClient.js';
|
|
3
3
|
export class AdminClient extends BaseApiClient {
|
|
4
4
|
constructor(config) {
|
|
@@ -7,8 +7,9 @@ export class AdminClient extends BaseApiClient {
|
|
|
7
7
|
}
|
|
8
8
|
addAuthInterceptor(token, axios) {
|
|
9
9
|
axios.interceptors.request.use(async (request) => {
|
|
10
|
-
if (request.url?.includes('health'))
|
|
10
|
+
if (request.url?.includes('health')) {
|
|
11
11
|
return request;
|
|
12
|
+
}
|
|
12
13
|
request.headers['X-Takaro-Admin-Token'] = token;
|
|
13
14
|
return request;
|
|
14
15
|
});
|
|
@@ -19,5 +20,10 @@ export class AdminClient extends BaseApiClient {
|
|
|
19
20
|
isJsonMime: this.isJsonMime,
|
|
20
21
|
}, '', this.axios);
|
|
21
22
|
}
|
|
23
|
+
get distributor() {
|
|
24
|
+
return new DistributorApi({
|
|
25
|
+
isJsonMime: this.isJsonMime,
|
|
26
|
+
}, '', this.axios);
|
|
27
|
+
}
|
|
22
28
|
}
|
|
23
29
|
//# sourceMappingURL=adminClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adminClient.js","sourceRoot":"","sources":["../../src/lib/adminClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"adminClient.js","sourceRoot":"","sources":["../../src/lib/adminClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAA6B,MAAM,iBAAiB,CAAC;AAS3E,MAAM,OAAO,WAAY,SAAQ,aAAoC;IACnE,YAAY,MAA6B;QACvC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;IAEO,kBAAkB,CAAC,KAAa,EAAE,KAAoB;QAC5D,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YAC/C,IAAI,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpC,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;YAChD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,SAAS,CAClB;YACE,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,EACD,EAAE,EACF,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,cAAc,CACvB;YACE,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,EACD,EAAE,EACF,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A local, dependency-free copy of the Takaro API key checksum, so a mistyped or truncated key is
|
|
3
|
+
* rejected before a request is ever made.
|
|
4
|
+
*
|
|
5
|
+
* This is deliberately a SECOND implementation of the base62 CRC32 in `@takaro/util`. This package
|
|
6
|
+
* is published with axios as its only runtime dependency and runs in the browser, so it cannot
|
|
7
|
+
* import `@takaro/util` or reach for `node:zlib`/`node:crypto`. The alphabet, the checksum length
|
|
8
|
+
* and the padding below must therefore match `packages/lib-util/src/copyOnceToken.ts`
|
|
9
|
+
* character-for-character; the unit test cross-checks the two against a real generated key.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* True when `key` looks like a Takaro API key and its trailing checksum matches its body.
|
|
13
|
+
* Never throws — any input at all is a legitimate question to ask of this function.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isValidApiKeyFormat(key: string): boolean;
|
|
16
|
+
/** Throws with a message that says what is wrong with the key. */
|
|
17
|
+
export declare function assertValidApiKey(key: string): void;
|
|
18
|
+
//# sourceMappingURL=apiKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiKey.d.ts","sourceRoot":"","sources":["../../src/lib/apiKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA2CH;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAWxD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAOnD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A local, dependency-free copy of the Takaro API key checksum, so a mistyped or truncated key is
|
|
3
|
+
* rejected before a request is ever made.
|
|
4
|
+
*
|
|
5
|
+
* This is deliberately a SECOND implementation of the base62 CRC32 in `@takaro/util`. This package
|
|
6
|
+
* is published with axios as its only runtime dependency and runs in the browser, so it cannot
|
|
7
|
+
* import `@takaro/util` or reach for `node:zlib`/`node:crypto`. The alphabet, the checksum length
|
|
8
|
+
* and the padding below must therefore match `packages/lib-util/src/copyOnceToken.ts`
|
|
9
|
+
* character-for-character; the unit test cross-checks the two against a real generated key.
|
|
10
|
+
*/
|
|
11
|
+
const TAKARO_KEY_PREFIX = 'takaro_';
|
|
12
|
+
// Must stay byte-identical to BASE62_ALPHABET in @takaro/util's copyOnceToken.ts.
|
|
13
|
+
const BASE62_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
14
|
+
const CHECKSUM_LENGTH = 6;
|
|
15
|
+
// The shortest key Takaro issues is `takaro_pat_` + 40 random + 6 checksum. Anything under the
|
|
16
|
+
// prefix plus a checksum cannot be a key at all.
|
|
17
|
+
const MIN_KEY_LENGTH = TAKARO_KEY_PREFIX.length + CHECKSUM_LENGTH + 1;
|
|
18
|
+
const CRC32_TABLE = (() => {
|
|
19
|
+
const table = new Int32Array(256);
|
|
20
|
+
for (let i = 0; i < 256; i++) {
|
|
21
|
+
let value = i;
|
|
22
|
+
for (let bit = 0; bit < 8; bit++) {
|
|
23
|
+
value = value & 1 ? (value >>> 1) ^ 0xedb88320 : value >>> 1;
|
|
24
|
+
}
|
|
25
|
+
table[i] = value;
|
|
26
|
+
}
|
|
27
|
+
return table;
|
|
28
|
+
})();
|
|
29
|
+
function crc32(input) {
|
|
30
|
+
let crc = -1;
|
|
31
|
+
for (let i = 0; i < input.length; i++) {
|
|
32
|
+
// The token alphabet is ASCII-only, so a charCodeAt is the byte.
|
|
33
|
+
crc = (crc >>> 8) ^ CRC32_TABLE[(crc ^ input.charCodeAt(i)) & 0xff];
|
|
34
|
+
}
|
|
35
|
+
return (crc ^ -1) >>> 0;
|
|
36
|
+
}
|
|
37
|
+
function crc32Base62(input) {
|
|
38
|
+
let remaining = crc32(input);
|
|
39
|
+
let encoded = '';
|
|
40
|
+
do {
|
|
41
|
+
encoded = BASE62_ALPHABET[remaining % 62] + encoded;
|
|
42
|
+
remaining = Math.floor(remaining / 62);
|
|
43
|
+
} while (remaining > 0);
|
|
44
|
+
return encoded.padStart(CHECKSUM_LENGTH, '0');
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* True when `key` looks like a Takaro API key and its trailing checksum matches its body.
|
|
48
|
+
* Never throws — any input at all is a legitimate question to ask of this function.
|
|
49
|
+
*/
|
|
50
|
+
export function isValidApiKeyFormat(key) {
|
|
51
|
+
if (typeof key !== 'string' || key.length < MIN_KEY_LENGTH || !key.startsWith(TAKARO_KEY_PREFIX)) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
for (const character of key.slice(TAKARO_KEY_PREFIX.length)) {
|
|
55
|
+
if (!BASE62_ALPHABET.includes(character) && character !== '_') {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const body = key.slice(0, -CHECKSUM_LENGTH);
|
|
60
|
+
return crc32Base62(body) === key.slice(-CHECKSUM_LENGTH);
|
|
61
|
+
}
|
|
62
|
+
/** Throws with a message that says what is wrong with the key. */
|
|
63
|
+
export function assertValidApiKey(key) {
|
|
64
|
+
if (typeof key !== 'string' || !key.startsWith(TAKARO_KEY_PREFIX)) {
|
|
65
|
+
throw new Error(`Invalid Takaro API key: it does not start with '${TAKARO_KEY_PREFIX}'`);
|
|
66
|
+
}
|
|
67
|
+
if (!isValidApiKeyFormat(key)) {
|
|
68
|
+
throw new Error('Invalid Takaro API key: the checksum does not match, the key is likely mistyped or truncated');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=apiKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiKey.js","sourceRoot":"","sources":["../../src/lib/apiKey.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/baseClient.d.ts
CHANGED
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { MetaApi } from '../generated/api.js';
|
|
2
|
-
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { type AxiosInstance } from 'axios';
|
|
3
|
+
/**
|
|
4
|
+
* Axios defaults to NO timeout, so a request whose TCP connection stalls blocks its
|
|
5
|
+
* await forever. During incident run-29688761260 a single POST hung for ~80 minutes
|
|
6
|
+
* (Tempo trace 15f5708701c38676355a0e42cb9f7ffe: a client span with no server span),
|
|
7
|
+
* freezing 3 of 4 CI shards until the 53-minute job timeout.
|
|
8
|
+
*
|
|
9
|
+
* 120s is deliberately generous — the goal is "not infinite", not "tight". The slowest
|
|
10
|
+
* legitimate single call is a domain create under full 4-shard CI load at roughly 30s.
|
|
11
|
+
* Individual long-running calls should pass a per-request `{ timeout }` override rather
|
|
12
|
+
* than raising this.
|
|
13
|
+
*/
|
|
14
|
+
export declare const DEFAULT_REQUEST_TIMEOUT_MS = 120000;
|
|
3
15
|
export interface IBaseApiClientConfig {
|
|
4
16
|
url: string;
|
|
5
17
|
log?: Logger | false;
|
|
18
|
+
/** Per-request timeout in ms. Defaults to DEFAULT_REQUEST_TIMEOUT_MS. */
|
|
19
|
+
timeoutMs?: number;
|
|
6
20
|
}
|
|
7
21
|
interface Logger {
|
|
8
22
|
info: (msg: string, meta?: unknown) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseClient.d.ts","sourceRoot":"","sources":["../../src/lib/baseClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAc,
|
|
1
|
+
{"version":3,"file":"baseClient.d.ts","sourceRoot":"","sources":["../../src/lib/baseClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAc,EAAmB,KAAK,aAAa,EAA2B,MAAM,OAAO,CAAC;AAE5F;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,SAAU,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,MAAM;IACd,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,oBAAoB;IAS3C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IARxC,SAAS,CAAC,KAAK,EAAE,aAAa,CAAC;IAC/B,SAAS,CAAC,GAAG,EAAE,MAAM,CAKnB;gBAE6B,MAAM,EAAE,CAAC;IAuBxC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAIpC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAI1B,IAAI,aAAa,kBAEhB;IAED,UAAU,CAAC,IAAI,EAAE,MAAM;IAIvB,OAAO,CAAC,UAAU;IAgElB;;;OAGG;IACG,gBAAgB,CAAC,OAAO,SAAS;IAqBvC,IAAI,IAAI,YAQP;CACF"}
|
package/dist/lib/baseClient.js
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import { MetaApi } from '../generated/api.js';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
+
/**
|
|
4
|
+
* Axios defaults to NO timeout, so a request whose TCP connection stalls blocks its
|
|
5
|
+
* await forever. During incident run-29688761260 a single POST hung for ~80 minutes
|
|
6
|
+
* (Tempo trace 15f5708701c38676355a0e42cb9f7ffe: a client span with no server span),
|
|
7
|
+
* freezing 3 of 4 CI shards until the 53-minute job timeout.
|
|
8
|
+
*
|
|
9
|
+
* 120s is deliberately generous — the goal is "not infinite", not "tight". The slowest
|
|
10
|
+
* legitimate single call is a domain create under full 4-shard CI load at roughly 30s.
|
|
11
|
+
* Individual long-running calls should pass a per-request `{ timeout }` override rather
|
|
12
|
+
* than raising this.
|
|
13
|
+
*/
|
|
14
|
+
export const DEFAULT_REQUEST_TIMEOUT_MS = 120_000;
|
|
3
15
|
export class BaseApiClient {
|
|
4
16
|
constructor(config) {
|
|
5
17
|
this.config = config;
|
|
@@ -12,8 +24,8 @@ export class BaseApiClient {
|
|
|
12
24
|
// Browsers refuse to let JS set the User-Agent header (it's a "forbidden header").
|
|
13
25
|
// Only include it when running outside a browser context (Node.js / server-side).
|
|
14
26
|
// Use globalThis so this compiles under both DOM and non-DOM TypeScript lib targets.
|
|
15
|
-
const isBrowser =
|
|
16
|
-
|
|
27
|
+
const isBrowser = globalThis.window !== undefined &&
|
|
28
|
+
globalThis.document !== undefined;
|
|
17
29
|
const axiosConfig = {
|
|
18
30
|
baseURL: this.config.url,
|
|
19
31
|
headers: {
|
|
@@ -21,10 +33,12 @@ export class BaseApiClient {
|
|
|
21
33
|
...(!isBrowser && { 'User-Agent': 'Takaro-API-Client' }),
|
|
22
34
|
},
|
|
23
35
|
withCredentials: true,
|
|
36
|
+
timeout: this.config.timeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS,
|
|
24
37
|
};
|
|
25
38
|
this.axios = this.addLoggers(axios.create(axiosConfig));
|
|
26
|
-
if (this.config.log)
|
|
39
|
+
if (this.config.log) {
|
|
27
40
|
this.log = this.config.log;
|
|
41
|
+
}
|
|
28
42
|
}
|
|
29
43
|
setHeader(key, value) {
|
|
30
44
|
this.axios.defaults.headers.common[key] = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseClient.js","sourceRoot":"","sources":["../../src/lib/baseClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"baseClient.js","sourceRoot":"","sources":["../../src/lib/baseClient.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/client.d.ts
CHANGED
|
@@ -1,10 +1,31 @@
|
|
|
1
|
-
import { CronJobApi, FunctionApi, GameServerApi, RoleApi, UserApi, ModuleApi, HookApi, PlayerApi, SettingsApi, CommandApi, VariableApi, DiscordApi, EventApi, PlayerOnGameServerApi, ItemApi, ShopOrderApi, ShopListingApi, ShopCategoryApi, ShopActionApi, TrackingApi, EntityApi, AnalyticsApi, InviteLinkApi } from '../generated/api.js';
|
|
2
|
-
import { BaseApiClient, IBaseApiClientConfig } from './baseClient.js';
|
|
1
|
+
import { CronJobApi, FunctionApi, GameServerApi, RoleApi, UserApi, ModuleApi, HookApi, PlayerApi, SettingsApi, CommandApi, VariableApi, DiscordApi, EventApi, PlayerOnGameServerApi, ItemApi, ShopOrderApi, ShopListingApi, ShopCategoryApi, ShopActionApi, StorefrontConfigApi, TrackingApi, EntityApi, AnalyticsApi, InviteLinkApi, ApiKeyApi } from '../generated/api.js';
|
|
2
|
+
import { BaseApiClient, type IBaseApiClientConfig } from './baseClient.js';
|
|
3
3
|
export interface IApiClientConfig extends IBaseApiClientConfig {
|
|
4
4
|
auth: {
|
|
5
|
+
/**
|
|
6
|
+
* @deprecated Keycloak's password grant is for the browser login page only. Scripted callers
|
|
7
|
+
* authenticate with `apiKey` (a Takaro API Key) — see `docs/api/authentication.md`. Still
|
|
8
|
+
* supported; nothing breaks today.
|
|
9
|
+
*/
|
|
5
10
|
username?: string;
|
|
11
|
+
/**
|
|
12
|
+
* @deprecated Keycloak's password grant is for the browser login page only. Scripted callers
|
|
13
|
+
* authenticate with `apiKey` (a Takaro API Key) — see `docs/api/authentication.md`. Still
|
|
14
|
+
* supported; nothing breaks today.
|
|
15
|
+
*/
|
|
6
16
|
password?: string;
|
|
17
|
+
/** A Takaro-minted internal token (`POST /token`), sent as `Authorization: Bearer <jwt>`. */
|
|
7
18
|
token?: string;
|
|
19
|
+
/** A Takaro API key secret (`takaro_pat_…`), sent as `Authorization: Bearer <key>`. */
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
/**
|
|
22
|
+
* A Distributor Key secret (`takaro_dist_…`) for a white-label call, sent as
|
|
23
|
+
* `Authorization: Bearer <key>`. Requires `domainId`: a Distributor Key names the Domain it acts in
|
|
24
|
+
* on every request, and Takaro refuses it without the header.
|
|
25
|
+
*/
|
|
26
|
+
distributorKey?: string;
|
|
27
|
+
/** The Domain a `distributorKey` acts in, sent as `X-Takaro-Domain`. Required with it. */
|
|
28
|
+
domainId?: string;
|
|
8
29
|
};
|
|
9
30
|
}
|
|
10
31
|
export declare class Client extends BaseApiClient<IApiClientConfig> {
|
|
@@ -12,6 +33,13 @@ export declare class Client extends BaseApiClient<IApiClientConfig> {
|
|
|
12
33
|
constructor(config: IApiClientConfig);
|
|
13
34
|
set username(username: string);
|
|
14
35
|
set password(password: string);
|
|
36
|
+
/**
|
|
37
|
+
* @deprecated Exchanges `auth.username` / `auth.password` for a token through Keycloak's
|
|
38
|
+
* resource-owner password grant, which exists for the hosted browser login page. Scripted
|
|
39
|
+
* callers should pass `auth.apiKey` (a Takaro API Key) to the constructor instead — no `login()`
|
|
40
|
+
* round trip, no user credential to store. See `docs/api/authentication.md`. This method is not
|
|
41
|
+
* being removed and existing callers keep working unchanged.
|
|
42
|
+
*/
|
|
15
43
|
login(): Promise<string>;
|
|
16
44
|
logout(): void;
|
|
17
45
|
permissionCodesToInputs(permissions: string[]): Promise<{
|
|
@@ -36,9 +64,11 @@ export declare class Client extends BaseApiClient<IApiClientConfig> {
|
|
|
36
64
|
get shopCategory(): ShopCategoryApi;
|
|
37
65
|
get shopAction(): ShopActionApi;
|
|
38
66
|
get shopOrder(): ShopOrderApi;
|
|
67
|
+
get storefrontConfig(): StorefrontConfigApi;
|
|
39
68
|
get tracking(): TrackingApi;
|
|
40
69
|
get entity(): EntityApi;
|
|
41
70
|
get analytics(): AnalyticsApi;
|
|
42
71
|
get inviteLink(): InviteLinkApi;
|
|
72
|
+
get apiKey(): ApiKeyApi;
|
|
43
73
|
}
|
|
44
74
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,EACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG3E,MAAM,WAAW,gBAAiB,SAAQ,oBAAoB;IAC5D,IAAI,EAAE;QACJ;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;WAIG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,6FAA6F;QAC7F,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,uFAAuF;QACvF,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;;WAIG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,0FAA0F;QAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,qBAAa,MAAO,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAClD,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;gBAChB,MAAM,EAAE,gBAAgB;IAyCpC,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAE5B;IAED,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAE5B;IAED;;;;;;OAMG;IACU,KAAK;IAmBX,MAAM;IAIA,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE;;;IAe1D,IAAI,IAAI,YAQP;IAED,IAAI,IAAI,YAQP;IAED,IAAI,IAAI,YAQP;IAED,IAAI,UAAU,kBAQb;IAED,IAAI,OAAO,eAQV;IAED,IAAI,QAAQ,gBAQX;IAED,IAAI,MAAM,cAQT;IAED,IAAI,IAAI,YAQP;IAED,IAAI,OAAO,eAQV;IAED,IAAI,MAAM,cAQT;IAED,IAAI,QAAQ,gBAQX;IAED,IAAI,QAAQ,gBAQX;IAED,IAAI,OAAO,eAQV;IAED,IAAI,KAAK,aAQR;IAED,IAAI,kBAAkB,0BAQrB;IAED,IAAI,WAAW,mBAQd;IAED,IAAI,YAAY,oBAQf;IAED,IAAI,UAAU,kBAQb;IAED,IAAI,SAAS,iBAQZ;IAED,IAAI,gBAAgB,wBAQnB;IAED,IAAI,QAAQ,gBAQX;IAED,IAAI,MAAM,cAQT;IAED,IAAI,SAAS,iBAQZ;IAED,IAAI,UAAU,kBAQb;IAED,IAAI,MAAM,cAQT;CACF"}
|
package/dist/lib/client.js
CHANGED
|
@@ -1,18 +1,57 @@
|
|
|
1
|
-
import { CronJobApi, FunctionApi, GameServerApi, RoleApi, UserApi, ModuleApi, HookApi, PlayerApi, SettingsApi, CommandApi, VariableApi, DiscordApi, EventApi, PlayerOnGameServerApi, ItemApi, ShopOrderApi, ShopListingApi, ShopCategoryApi, ShopActionApi, TrackingApi, EntityApi, AnalyticsApi, InviteLinkApi, } from '../generated/api.js';
|
|
1
|
+
import { CronJobApi, FunctionApi, GameServerApi, RoleApi, UserApi, ModuleApi, HookApi, PlayerApi, SettingsApi, CommandApi, VariableApi, DiscordApi, EventApi, PlayerOnGameServerApi, ItemApi, ShopOrderApi, ShopListingApi, ShopCategoryApi, ShopActionApi, StorefrontConfigApi, TrackingApi, EntityApi, AnalyticsApi, InviteLinkApi, ApiKeyApi, } from '../generated/api.js';
|
|
2
2
|
import { BaseApiClient } from './baseClient.js';
|
|
3
|
+
import { assertValidApiKey } from './apiKey.js';
|
|
3
4
|
export class Client extends BaseApiClient {
|
|
4
5
|
constructor(config) {
|
|
5
6
|
super(config);
|
|
7
|
+
// `token` and `apiKey` are mutually exclusive — both write the same Authorization header, so
|
|
8
|
+
// setting both means `apiKey` wins. Nothing passes both, and a caller that did would see an
|
|
9
|
+
// obvious 401 on its first call. `distributorKey` writes the same header again, but it is
|
|
10
|
+
// rejected outright rather than allowed to win silently: it is the newest of the three, so a
|
|
11
|
+
// caller combining them has a bug, and the symptom would otherwise be an opaque 401 much later.
|
|
6
12
|
if (this.config.auth.token) {
|
|
7
|
-
this.axios.defaults.headers.common
|
|
13
|
+
this.axios.defaults.headers.common.Authorization = `Bearer ${this.config.auth.token}`;
|
|
14
|
+
}
|
|
15
|
+
// Validated here rather than on first use: a mistyped key should fail where it was typed,
|
|
16
|
+
// not as an opaque 401 from some later call. The test is `!== undefined`, not truthiness: the
|
|
17
|
+
// commonest mistake of all is an unset `process.env.TAKARO_API_KEY`, and `''` or `null` must
|
|
18
|
+
// throw here rather than construct a client that quietly attaches no credential.
|
|
19
|
+
if (this.config.auth.apiKey !== undefined) {
|
|
20
|
+
assertValidApiKey(this.config.auth.apiKey);
|
|
21
|
+
this.axios.defaults.headers.common.Authorization = `Bearer ${this.config.auth.apiKey}`;
|
|
22
|
+
}
|
|
23
|
+
// White-label (GH #3839). `!== undefined` for the same reason the `apiKey` block gives: an unset
|
|
24
|
+
// env var must throw where it was typed, not construct a credential-less client.
|
|
25
|
+
if (this.config.auth.distributorKey !== undefined) {
|
|
26
|
+
if (this.config.auth.token !== undefined || this.config.auth.apiKey !== undefined) {
|
|
27
|
+
throw new Error('auth.distributorKey cannot be combined with auth.token or auth.apiKey');
|
|
28
|
+
}
|
|
29
|
+
if (!this.config.auth.domainId) {
|
|
30
|
+
throw new Error('auth.distributorKey requires auth.domainId: a Distributor key names the Domain it acts in');
|
|
31
|
+
}
|
|
32
|
+
// isValidApiKeyFormat matches the bare `takaro_` prefix plus the checksum, so a Distributor Key
|
|
33
|
+
// passes unchanged.
|
|
34
|
+
assertValidApiKey(this.config.auth.distributorKey);
|
|
35
|
+
this.axios.defaults.headers.common.Authorization = `Bearer ${this.config.auth.distributorKey}`;
|
|
36
|
+
this.setDomain(this.config.auth.domainId);
|
|
8
37
|
}
|
|
9
38
|
}
|
|
39
|
+
// The setters and login() below ARE the deprecated password mode's implementation, so they read
|
|
40
|
+
// the deprecated fields by construction; the rule would otherwise flag the feature for existing.
|
|
41
|
+
/* eslint-disable @typescript-eslint/no-deprecated */
|
|
10
42
|
set username(username) {
|
|
11
43
|
this.config.auth.username = username;
|
|
12
44
|
}
|
|
13
45
|
set password(password) {
|
|
14
46
|
this.config.auth.password = password;
|
|
15
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* @deprecated Exchanges `auth.username` / `auth.password` for a token through Keycloak's
|
|
50
|
+
* resource-owner password grant, which exists for the hosted browser login page. Scripted
|
|
51
|
+
* callers should pass `auth.apiKey` (a Takaro API Key) to the constructor instead — no `login()`
|
|
52
|
+
* round trip, no user credential to store. See `docs/api/authentication.md`. This method is not
|
|
53
|
+
* being removed and existing callers keep working unchanged.
|
|
54
|
+
*/
|
|
16
55
|
async login() {
|
|
17
56
|
if (!this.config.auth.username || !this.config.auth.password) {
|
|
18
57
|
throw new Error('No username or password provided');
|
|
@@ -23,11 +62,12 @@ export class Client extends BaseApiClient {
|
|
|
23
62
|
});
|
|
24
63
|
this.config.auth.token = loginRes.data.data.token;
|
|
25
64
|
this.token = loginRes.data.data.token;
|
|
26
|
-
this.axios.defaults.headers.common
|
|
65
|
+
this.axios.defaults.headers.common.Authorization = `Bearer ${loginRes.data.data.token}`;
|
|
27
66
|
return loginRes.data.data.token;
|
|
28
67
|
}
|
|
68
|
+
/* eslint-enable @typescript-eslint/no-deprecated */
|
|
29
69
|
logout() {
|
|
30
|
-
delete this.axios.defaults.headers.common
|
|
70
|
+
delete this.axios.defaults.headers.common.Authorization;
|
|
31
71
|
}
|
|
32
72
|
async permissionCodesToInputs(permissions) {
|
|
33
73
|
const permissionsRes = await this.role.roleControllerGetPermissions();
|
|
@@ -36,8 +76,9 @@ export class Client extends BaseApiClient {
|
|
|
36
76
|
.map((p) => ({
|
|
37
77
|
permissionId: p.id,
|
|
38
78
|
}));
|
|
39
|
-
if (records.length !== permissions.length)
|
|
79
|
+
if (records.length !== permissions.length) {
|
|
40
80
|
throw new Error(`Not all permissions were found: ${permissions.join(', ')}`);
|
|
81
|
+
}
|
|
41
82
|
return records;
|
|
42
83
|
}
|
|
43
84
|
get item() {
|
|
@@ -135,6 +176,11 @@ export class Client extends BaseApiClient {
|
|
|
135
176
|
isJsonMime: this.isJsonMime,
|
|
136
177
|
}, '', this.axios);
|
|
137
178
|
}
|
|
179
|
+
get storefrontConfig() {
|
|
180
|
+
return new StorefrontConfigApi({
|
|
181
|
+
isJsonMime: this.isJsonMime,
|
|
182
|
+
}, '', this.axios);
|
|
183
|
+
}
|
|
138
184
|
get tracking() {
|
|
139
185
|
return new TrackingApi({
|
|
140
186
|
isJsonMime: this.isJsonMime,
|
|
@@ -155,5 +201,10 @@ export class Client extends BaseApiClient {
|
|
|
155
201
|
isJsonMime: this.isJsonMime,
|
|
156
202
|
}, '', this.axios);
|
|
157
203
|
}
|
|
204
|
+
get apiKey() {
|
|
205
|
+
return new ApiKeyApi({
|
|
206
|
+
isJsonMime: this.isJsonMime,
|
|
207
|
+
}, '', this.axios);
|
|
208
|
+
}
|
|
158
209
|
}
|
|
159
210
|
//# sourceMappingURL=client.js.map
|
package/dist/lib/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,aAAa,EACb,OAAO,EACP,OAAO,EACP,SAAS,EACT,OAAO,EACP,SAAS,EACT,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,qBAAqB,EACrB,OAAO,EACP,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DistributorSelfServiceApi } from '../generated-management/api.js';
|
|
2
|
+
import { BaseApiClient, type IBaseApiClientConfig } from './baseClient.js';
|
|
3
|
+
export interface IDistributorApiClientConfig extends IBaseApiClientConfig {
|
|
4
|
+
auth: {
|
|
5
|
+
/** A Distributor Key secret (`takaro_dist_…`), sent as `Authorization: Bearer <key>`. */
|
|
6
|
+
distributorKey: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The client an integrating Distributor uses against the Management API (ADR 0023). Authenticated
|
|
11
|
+
* by a Distributor Key, never by the admin secret — those are two separate doors.
|
|
12
|
+
*/
|
|
13
|
+
export declare class DistributorClient extends BaseApiClient<IDistributorApiClientConfig> {
|
|
14
|
+
constructor(config: IDistributorApiClientConfig);
|
|
15
|
+
/** The Distributor's own self-service routes: who am I, and its key lifecycle. */
|
|
16
|
+
get self(): DistributorSelfServiceApi;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=distributorClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributorClient.d.ts","sourceRoot":"","sources":["../../src/lib/distributorClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG3E,MAAM,WAAW,2BAA4B,SAAQ,oBAAoB;IACvE,IAAI,EAAE;QACJ,yFAAyF;QACzF,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,2BAA2B,CAAC;gBACnE,MAAM,EAAE,2BAA2B;IAS/C,kFAAkF;IAClF,IAAI,IAAI,8BAEP;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DistributorSelfServiceApi } from '../generated-management/api.js';
|
|
2
|
+
import { BaseApiClient } from './baseClient.js';
|
|
3
|
+
import { assertValidApiKey } from './apiKey.js';
|
|
4
|
+
/**
|
|
5
|
+
* The client an integrating Distributor uses against the Management API (ADR 0023). Authenticated
|
|
6
|
+
* by a Distributor Key, never by the admin secret — those are two separate doors.
|
|
7
|
+
*/
|
|
8
|
+
export class DistributorClient extends BaseApiClient {
|
|
9
|
+
constructor(config) {
|
|
10
|
+
super(config);
|
|
11
|
+
// Validated where it was typed, not as an opaque 401 later. isValidApiKeyFormat matches the
|
|
12
|
+
// bare `takaro_` prefix plus the checksum, so a Distributor Key passes unchanged.
|
|
13
|
+
assertValidApiKey(config.auth.distributorKey);
|
|
14
|
+
this.axios.defaults.headers.common.Authorization = `Bearer ${config.auth.distributorKey}`;
|
|
15
|
+
}
|
|
16
|
+
/** The Distributor's own self-service routes: who am I, and its key lifecycle. */
|
|
17
|
+
get self() {
|
|
18
|
+
return new DistributorSelfServiceApi({ isJsonMime: this.isJsonMime }, '', this.axios);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=distributorClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distributorClient.js","sourceRoot":"","sources":["../../src/lib/distributorClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAA6B,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAShD;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAA0C;IAC/E,YAAY,MAAmC;QAC7C,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,4FAA4F;QAC5F,kFAAkF;QAClF,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,GAAG,UAAU,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;IAC5F,CAAC;IAED,kFAAkF;IAClF,IAAI,IAAI;QACN,OAAO,IAAI,yBAAyB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxF,CAAC;CACF"}
|
package/dist/main.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import { AxiosResponse } from 'axios';
|
|
1
|
+
import { type AxiosResponse } from 'axios';
|
|
2
2
|
export { AxiosResponse } from 'axios';
|
|
3
3
|
export { isAxiosError } from 'axios';
|
|
4
4
|
export { AdminClient } from './lib/adminClient.js';
|
|
5
5
|
export { Client } from './lib/client.js';
|
|
6
|
+
export { DistributorClient } from './lib/distributorClient.js';
|
|
7
|
+
export type { IDistributorApiClientConfig } from './lib/distributorClient.js';
|
|
8
|
+
export { isValidApiKeyFormat, assertValidApiKey } from './lib/apiKey.js';
|
|
6
9
|
export type ITakaroAPIAxiosResponse<T> = AxiosResponse<T>;
|
|
7
10
|
export * from './generated/api.js';
|
|
11
|
+
export { DistributorApi, DistributorSelfServiceApi, DomainApi } from './generated-management/api.js';
|
|
8
12
|
//# sourceMappingURL=main.d.ts.map
|