Skip to content

Commit 30f246e

Browse files
authored
feat: Adding support for profile tokens (#462)
* feat: Adding support for Request Profiling * feat: Adding CLI support for Request Tokens
1 parent 68c4f19 commit 30f246e

File tree

4 files changed

+28
-13
lines changed

4 files changed

+28
-13
lines changed

README.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,20 @@ const api = new Gitlab({
6464

6565
Available instantiating options:
6666

67-
| Name | Optional | Default | Description |
68-
| -------------------- | -------- | ----------------------------------------------------- | --------------------------------------------------------------- |
69-
| `host` | Yes | `https://gitlab.com` | Gitlab Instance Host URL |
70-
| `token` | No\* | N/A | Personal Token. Required (one of the three tokens are required) |
71-
| `oauthToken` | No\* | N/A | OAuth Token. Required (one of the three tokens are required) |
72-
| `jobToken` | No\* | N/A | CI Job Token. Required (one of the three tokens are required) |
73-
| `rejectUnauthorized` | Yes | `false` | Http Certificate setting |
74-
| `sudo` | Yes | `false` | Sudo query parameter |
75-
| `version` | Yes | `v4` | API Version ID |
76-
| `camelize` | Yes | `false` | Response Key Camelize. Camelizes all response body keys |
77-
| `requester` | Yes | [KyRequester.ts](./src/infrastructure/KyRequester.ts) | Request Library Wrapper. Currently wraps Ky. |
78-
| `requestTimeout` | Yes | `300000` | Request Library Timeout in ms |
67+
| Name | Optional | Default | Description |
68+
| -------------------- | -------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
69+
| `host` | Yes | `https://gitlab.com` | Gitlab Instance Host URL |
70+
| `token` | No\* | N/A | Personal Token. Required (one of the three tokens are required) |
71+
| `oauthToken` | No\* | N/A | OAuth Token. Required (one of the three tokens are required) |
72+
| `jobToken` | No\* | N/A | CI Job Token. Required (one of the three tokens are required) |
73+
| `rejectUnauthorized` | Yes | `false` | Http Certificate setting |
74+
| `sudo` | Yes | `false` | Sudo query parameter |
75+
| `version` | Yes | `v4` | API Version ID |
76+
| `camelize` | Yes | `false` | Response Key Camelize. Camelizes all response body keys |
77+
| `requester` | Yes | [KyRequester.ts](./src/infrastructure/KyRequester.ts) | Request Library Wrapper. Currently wraps Ky. |
78+
| `requestTimeout` | Yes | `300000` | Request Library Timeout in ms |
79+
| `profileToken` | Yes | N/A | [Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html) |
80+
| `profileMode` | Yes | `execution` | [Requests Profiles Token](https://docs.gitlab.com/ee/administration/monitoring/performance/request_profiling.html) |
7981

8082
### CLI Support
8183

src/bin/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ Object.entries(map).forEach(([name, methods]: [string, { name: string; args: str
3535
type: 'number',
3636
})
3737
.option('gl-sudo', { type: 'string' })
38-
.option('gl-camelize', { type: 'boolean' });
38+
.option('gl-camelize', { type: 'boolean' })
39+
.option('gl-profile-token', { type: 'string' })
40+
.option('gl-profile-mode', { type: 'string' });
3941

4042
for (let i = 1; i < methods.length; i += 1) {
4143
const m = methods[i];

src/core/infrastructure/BaseService.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export class BaseService {
1414
jobToken,
1515
oauthToken,
1616
sudo,
17+
profileToken,
18+
profileMode = 'execution',
1719
host = 'https://gitlab.com',
1820
url = '',
1921
version = 'v4',
@@ -34,6 +36,13 @@ export class BaseService {
3436
else if (jobToken) this.headers['job-token'] = jobToken;
3537
else if (token) this.headers['private-token'] = token;
3638

39+
// Profiling
40+
if (profileToken) {
41+
this.headers['X-Profile-Token'] = profileToken;
42+
43+
if (profileMode) this.headers['X-Profile-Mode'] = profileMode;
44+
}
45+
3746
// Set sudo
3847
if (sudo) this.headers['Sudo'] = `${sudo}`;
3948
}

src/core/infrastructure/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ export interface BaseServiceOptions extends Sudo {
4343
camelize?: boolean;
4444
requester?: Requester;
4545
requestTimeout?: number;
46+
profileToken?: string;
47+
profileMode?: 'execution' | 'memory';
4648
}
4749

4850
// RequestHelper

0 commit comments

Comments
 (0)