@camunda/ccma-api 0.0.2 → 0.0.3
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/dist/index.d.ts +95 -0
- package/dist/index.js +151 -0
- package/dist/index.js.map +7 -0
- package/dist/services/accounts/accounts.data-export.service.d.ts +13 -0
- package/dist/services/accounts/accounts.data-export.service.js +41 -0
- package/dist/services/accounts/accounts.data-export.service.js.map +7 -0
- package/dist/services/accounts/accounts.valuemetrics.service.d.ts +8 -0
- package/dist/services/accounts/accounts.valuemetrics.service.js +1 -0
- package/dist/services/accounts/accounts.valuemetrics.service.js.map +7 -0
- package/dist/services/accounts/bot.service.d.ts +21 -0
- package/dist/services/accounts/bot.service.js +74 -0
- package/dist/services/accounts/bot.service.js.map +7 -0
- package/dist/services/accounts/challenge.service.d.ts +296 -0
- package/dist/services/accounts/challenge.service.js +475 -0
- package/dist/services/accounts/challenge.service.js.map +7 -0
- package/dist/services/accounts/connections.service.d.ts +27 -0
- package/dist/services/accounts/connections.service.js +41 -0
- package/dist/services/accounts/connections.service.js.map +7 -0
- package/dist/services/accounts/dashboards.service.d.ts +8 -0
- package/dist/services/accounts/dashboards.service.js +42 -0
- package/dist/services/accounts/dashboards.service.js.map +7 -0
- package/dist/services/accounts/early-access-features.service.d.ts +34 -0
- package/dist/services/accounts/early-access-features.service.js +67 -0
- package/dist/services/accounts/early-access-features.service.js.map +7 -0
- package/dist/services/accounts/genericCache.service.d.ts +13 -0
- package/dist/services/accounts/genericCache.service.js +80 -0
- package/dist/services/accounts/genericCache.service.js.map +7 -0
- package/dist/services/accounts/hdp.service.d.ts +52 -0
- package/dist/services/accounts/hdp.service.js +180 -0
- package/dist/services/accounts/hdp.service.js.map +7 -0
- package/dist/services/accounts/offboarding.service.d.ts +18 -0
- package/dist/services/accounts/offboarding.service.js +48 -0
- package/dist/services/accounts/offboarding.service.js.map +7 -0
- package/dist/services/accounts/organization-members.service.d.ts +68 -0
- package/dist/services/accounts/organization-members.service.js +216 -0
- package/dist/services/accounts/organization-members.service.js.map +7 -0
- package/dist/services/accounts/orgs.service.d.ts +273 -0
- package/dist/services/accounts/orgs.service.js +978 -0
- package/dist/services/accounts/orgs.service.js.map +7 -0
- package/dist/services/accounts/salesplan.service.d.ts +7 -0
- package/dist/services/accounts/salesplan.service.js +40 -0
- package/dist/services/accounts/salesplan.service.js.map +7 -0
- package/dist/services/accounts/spam-detection.service.d.ts +8 -0
- package/dist/services/accounts/spam-detection.service.js +72 -0
- package/dist/services/accounts/spam-detection.service.js.map +7 -0
- package/dist/services/accounts/stats.service.d.ts +7 -0
- package/dist/services/accounts/stats.service.js +40 -0
- package/dist/services/accounts/stats.service.js.map +7 -0
- package/dist/services/accounts/usage-alerts.service.d.ts +34 -0
- package/dist/services/accounts/usage-alerts.service.js +112 -0
- package/dist/services/accounts/usage-alerts.service.js.map +7 -0
- package/dist/services/accounts/users.service.d.ts +101 -0
- package/dist/services/accounts/users.service.js +444 -0
- package/dist/services/accounts/users.service.js.map +7 -0
- package/dist/services/alerts/alerts.service.d.ts +59 -0
- package/dist/services/alerts/alerts.service.js +234 -0
- package/dist/services/alerts/alerts.service.js.map +7 -0
- package/dist/services/analytic-bridge/analytic-bridge.service.d.ts +23 -0
- package/dist/services/analytic-bridge/analytic-bridge.service.js +86 -0
- package/dist/services/analytic-bridge/analytic-bridge.service.js.map +7 -0
- package/dist/services/audit-logger/audit-logger.service.d.ts +27 -0
- package/dist/services/audit-logger/audit-logger.service.js +108 -0
- package/dist/services/audit-logger/audit-logger.service.js.map +7 -0
- package/dist/services/auth0/auth0.service.d.ts +15 -0
- package/dist/services/auth0/auth0.service.js +40 -0
- package/dist/services/auth0/auth0.service.js.map +7 -0
- package/dist/services/comm-bridge/comm-bridge.service.d.ts +33 -0
- package/dist/services/comm-bridge/comm-bridge.service.js +40 -0
- package/dist/services/comm-bridge/comm-bridge.service.js.map +7 -0
- package/dist/services/console/console.admin.service.d.ts +328 -0
- package/dist/services/console/console.admin.service.js +1526 -0
- package/dist/services/console/console.admin.service.js.map +7 -0
- package/dist/services/console/console.alerts.service.d.ts +69 -0
- package/dist/services/console/console.alerts.service.js +160 -0
- package/dist/services/console/console.alerts.service.js.map +7 -0
- package/dist/services/console/console.api-clients.service.d.ts +48 -0
- package/dist/services/console/console.api-clients.service.js +123 -0
- package/dist/services/console/console.api-clients.service.js.map +7 -0
- package/dist/services/console/console.backup-schedule.service.d.ts +21 -0
- package/dist/services/console/console.backup-schedule.service.js +67 -0
- package/dist/services/console/console.backup-schedule.service.js.map +7 -0
- package/dist/services/console/console.byok-scripts.service.d.ts +12 -0
- package/dist/services/console/console.byok-scripts.service.js +92 -0
- package/dist/services/console/console.byok-scripts.service.js.map +7 -0
- package/dist/services/console/console.byom-monitoring.service.d.ts +58 -0
- package/dist/services/console/console.byom-monitoring.service.js +177 -0
- package/dist/services/console/console.byom-monitoring.service.js.map +7 -0
- package/dist/services/console/console.cluster-clients.service.d.ts +55 -0
- package/dist/services/console/console.cluster-clients.service.js +123 -0
- package/dist/services/console/console.cluster-clients.service.js.map +7 -0
- package/dist/services/console/console.cluster-parameters.service.d.ts +64 -0
- package/dist/services/console/console.cluster-parameters.service.js +39 -0
- package/dist/services/console/console.cluster-parameters.service.js.map +7 -0
- package/dist/services/console/console.cluster.service.d.ts +114 -0
- package/dist/services/console/console.cluster.service.js +271 -0
- package/dist/services/console/console.cluster.service.js.map +7 -0
- package/dist/services/console/console.clusterBulkOperation.service.d.ts +20 -0
- package/dist/services/console/console.clusterBulkOperation.service.js +199 -0
- package/dist/services/console/console.clusterBulkOperation.service.js.map +7 -0
- package/dist/services/console/console.clusterplan.modification.service.d.ts +33 -0
- package/dist/services/console/console.clusterplan.modification.service.js +231 -0
- package/dist/services/console/console.clusterplan.modification.service.js.map +7 -0
- package/dist/services/console/console.clusterplan.service.d.ts +21 -0
- package/dist/services/console/console.clusterplan.service.js +64 -0
- package/dist/services/console/console.clusterplan.service.js.map +7 -0
- package/dist/services/console/console.connector-secrets.service.d.ts +30 -0
- package/dist/services/console/console.connector-secrets.service.js +125 -0
- package/dist/services/console/console.connector-secrets.service.js.map +7 -0
- package/dist/services/console/console.custommetrics.service.d.ts +10 -0
- package/dist/services/console/console.custommetrics.service.js +43 -0
- package/dist/services/console/console.custommetrics.service.js.map +7 -0
- package/dist/services/console/console.hotbackups.service.d.ts +34 -0
- package/dist/services/console/console.hotbackups.service.js +120 -0
- package/dist/services/console/console.hotbackups.service.js.map +7 -0
- package/dist/services/console/console.ip-whitelist.service.d.ts +15 -0
- package/dist/services/console/console.ip-whitelist.service.js +36 -0
- package/dist/services/console/console.ip-whitelist.service.js.map +7 -0
- package/dist/services/console/console.jobs.saas.service.d.ts +70 -0
- package/dist/services/console/console.jobs.saas.service.js +139 -0
- package/dist/services/console/console.jobs.saas.service.js.map +7 -0
- package/dist/services/console/console.m2m.service.d.ts +23 -0
- package/dist/services/console/console.m2m.service.js +94 -0
- package/dist/services/console/console.m2m.service.js.map +7 -0
- package/dist/services/console/console.secure-connectivity.service.d.ts +41 -0
- package/dist/services/console/console.secure-connectivity.service.js +129 -0
- package/dist/services/console/console.secure-connectivity.service.js.map +7 -0
- package/dist/services/console/console.valuemetrics.service.d.ts +17 -0
- package/dist/services/console/console.valuemetrics.service.js +110 -0
- package/dist/services/console/console.valuemetrics.service.js.map +7 -0
- package/dist/services/console/generation.service.d.ts +29 -0
- package/dist/services/console/generation.service.js +166 -0
- package/dist/services/console/generation.service.js.map +7 -0
- package/dist/services/github/github.service.d.ts +73 -0
- package/dist/services/github/github.service.js +272 -0
- package/dist/services/github/github.service.js.map +7 -0
- package/dist/services/hibob/hibob.service.d.ts +74 -0
- package/dist/services/hibob/hibob.service.js +125 -0
- package/dist/services/hibob/hibob.service.js.map +7 -0
- package/dist/services/hubspot/hubspot.service.d.ts +50 -0
- package/dist/services/hubspot/hubspot.service.js +119 -0
- package/dist/services/hubspot/hubspot.service.js.map +7 -0
- package/dist/services/litellm/litellm.service.d.ts +290 -0
- package/dist/services/litellm/litellm.service.js +392 -0
- package/dist/services/litellm/litellm.service.js.map +7 -0
- package/dist/services/login/login.service.d.ts +15 -0
- package/dist/services/login/login.service.js +66 -0
- package/dist/services/login/login.service.js.map +7 -0
- package/dist/services/mixpanel/mixpanel.service.d.ts +16 -0
- package/dist/services/mixpanel/mixpanel.service.js +86 -0
- package/dist/services/mixpanel/mixpanel.service.js.map +7 -0
- package/dist/services/notifications/notifications.service.d.ts +7 -0
- package/dist/services/notifications/notifications.service.js +38 -0
- package/dist/services/notifications/notifications.service.js.map +7 -0
- package/dist/services/slack/slack-blockkit.service.d.ts +28 -0
- package/dist/services/slack/slack-blockkit.service.js +45 -0
- package/dist/services/slack/slack-blockkit.service.js.map +7 -0
- package/dist/services/slack/slack.service.d.ts +31 -0
- package/dist/services/slack/slack.service.js +118 -0
- package/dist/services/slack/slack.service.js.map +7 -0
- package/dist/services/telemetry/telemetry.service.d.ts +16 -0
- package/dist/services/telemetry/telemetry.service.js +85 -0
- package/dist/services/telemetry/telemetry.service.js.map +7 -0
- package/dist/services/token-issuer/token-issuer.jwks.service.d.ts +13 -0
- package/dist/services/token-issuer/token-issuer.jwks.service.js +76 -0
- package/dist/services/token-issuer/token-issuer.jwks.service.js.map +7 -0
- package/dist/services/wordpress/wordpress.service.d.ts +15 -0
- package/dist/services/wordpress/wordpress.service.js +111 -0
- package/dist/services/wordpress/wordpress.service.js.map +7 -0
- package/dist/types/general.types.d.ts +61 -0
- package/dist/types/general.types.js +1 -0
- package/dist/types/general.types.js.map +7 -0
- package/dist/utils/api.d.ts +31 -0
- package/dist/utils/api.js +400 -0
- package/dist/utils/api.js.map +7 -0
- package/dist/utils/cache.d.ts +7 -0
- package/dist/utils/cache.js +25 -0
- package/dist/utils/cache.js.map +7 -0
- package/dist/utils/ccma-metrics.d.ts +18 -0
- package/dist/utils/ccma-metrics.js +37 -0
- package/dist/utils/ccma-metrics.js.map +7 -0
- package/dist/utils/environments.d.ts +11 -0
- package/dist/utils/environments.js +148 -0
- package/dist/utils/environments.js.map +7 -0
- package/dist/utils/errors.d.ts +5 -0
- package/dist/utils/errors.js +11 -0
- package/dist/utils/errors.js.map +7 -0
- package/dist/utils/frontendCache.d.ts +26 -0
- package/dist/utils/frontendCache.js +121 -0
- package/dist/utils/frontendCache.js.map +7 -0
- package/dist/utils/token-issuer.utils.d.ts +8 -0
- package/dist/utils/token-issuer.utils.js +19 -0
- package/dist/utils/token-issuer.utils.js.map +7 -0
- package/package.json +2 -2
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { HOUR } from "@camunda/ccma-shared-types";
|
|
2
|
+
import { request } from "../../utils/api.js";
|
|
3
|
+
import { Cache } from "../../utils/cache.js";
|
|
4
|
+
import { HttpError } from "../../utils/errors.js";
|
|
5
|
+
const releaseCache = new Cache(HOUR);
|
|
6
|
+
class GithubService {
|
|
7
|
+
static async getNextBugfixReleaseVersion(params) {
|
|
8
|
+
const releases = await GithubService.listMajorMinorReleases({
|
|
9
|
+
config: params.config,
|
|
10
|
+
options: {
|
|
11
|
+
owner: params.options.owner,
|
|
12
|
+
repo: params.options.repo,
|
|
13
|
+
apiToken: params.options.apiToken,
|
|
14
|
+
onlyLatest: true,
|
|
15
|
+
iterations: params.options.iterations
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
if (releases.length === 0) {
|
|
19
|
+
throw new Error(
|
|
20
|
+
`No releases found for ${params.options.owner}/${params.options.repo}`
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
const latestRelease = releases[0];
|
|
24
|
+
if (latestRelease.tag_name.startsWith(params.options.majorMinor)) {
|
|
25
|
+
throw new Error(
|
|
26
|
+
`Not allowed to create a new bugfix release for ${latestRelease.tag_name}`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
for (const release of releases) {
|
|
30
|
+
if (release.tag_name.startsWith(params.options.majorMinor)) {
|
|
31
|
+
const versionSplitted = release.tag_name.split(".");
|
|
32
|
+
if (versionSplitted.length !== 3) {
|
|
33
|
+
throw new Error(`Invalid version format: ${release.tag_name}`);
|
|
34
|
+
}
|
|
35
|
+
const majorVersion = Number(versionSplitted[0]);
|
|
36
|
+
const minorVersion = Number(versionSplitted[1]);
|
|
37
|
+
const patchVersion = Number(versionSplitted[2]) + 1;
|
|
38
|
+
return `${majorVersion}.${minorVersion}.${patchVersion}`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`No bugfix release found for ${params.options.majorMinor}`);
|
|
42
|
+
}
|
|
43
|
+
static async listMajorMinorReleases(params) {
|
|
44
|
+
const cacheKey = `major-minor-${params.options.owner}-${params.options.repo}-${params.options.onlyLatest ?? false}-${params.options.includeAlphas ?? false}-${params.options.onlyPrerelease ?? false}`;
|
|
45
|
+
if (!params.cacheControl?.ignoreCache) {
|
|
46
|
+
const cached = releaseCache.get(cacheKey);
|
|
47
|
+
if (cached) {
|
|
48
|
+
return cached;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
const pageSize = 100;
|
|
52
|
+
const ITERATIONS = params.options.iterations || 15;
|
|
53
|
+
const pagePromises = Array.from({ length: ITERATIONS }, (_, index) => {
|
|
54
|
+
const currentPage = index + 1;
|
|
55
|
+
return GithubService.getReleases({
|
|
56
|
+
config: params.config,
|
|
57
|
+
options: {
|
|
58
|
+
owner: params.options.owner,
|
|
59
|
+
repo: params.options.repo,
|
|
60
|
+
apiToken: params.options.apiToken,
|
|
61
|
+
pageSize,
|
|
62
|
+
currentPage
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
const allPageResults = await Promise.all(pagePromises);
|
|
67
|
+
const stableReleases = [];
|
|
68
|
+
for (const releases of allPageResults) {
|
|
69
|
+
if (params.options.replaceBugfixSuffix === true) {
|
|
70
|
+
releases.forEach((release) => {
|
|
71
|
+
if (release.tag_name.endsWith("_bugfix")) {
|
|
72
|
+
release.tag_name = release.tag_name.replace(/_bugfix.*/u, "");
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
const filtered = releases.filter((release) => {
|
|
77
|
+
let includeRelease = !release.prerelease;
|
|
78
|
+
if (params.options.onlyPrerelease) {
|
|
79
|
+
includeRelease = release.prerelease;
|
|
80
|
+
}
|
|
81
|
+
if (includeRelease && params.options.includeAlphas) {
|
|
82
|
+
includeRelease = release.tag_name.includes("-alpha") && !release.tag_name.includes("-alphatest");
|
|
83
|
+
}
|
|
84
|
+
return includeRelease;
|
|
85
|
+
});
|
|
86
|
+
stableReleases.push(...filtered);
|
|
87
|
+
}
|
|
88
|
+
let releasesToRespond = [];
|
|
89
|
+
stableReleases.sort((a, b) => {
|
|
90
|
+
return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();
|
|
91
|
+
});
|
|
92
|
+
if (params.options.onlyLatest) {
|
|
93
|
+
const onlyLatest = {};
|
|
94
|
+
for (const release of stableReleases) {
|
|
95
|
+
const splitted = release.tag_name.split(".");
|
|
96
|
+
const majorMinor = `${splitted[0]}.${splitted[1]}`;
|
|
97
|
+
const patchVersion = Number(splitted[2]);
|
|
98
|
+
if (!onlyLatest[majorMinor]) {
|
|
99
|
+
onlyLatest[majorMinor] = patchVersion;
|
|
100
|
+
} else if (patchVersion > onlyLatest[majorMinor]) {
|
|
101
|
+
onlyLatest[majorMinor] = patchVersion;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const releaseStrings = Object.keys(onlyLatest).map((key) => {
|
|
105
|
+
return `${key}.${onlyLatest[key]}`;
|
|
106
|
+
});
|
|
107
|
+
const foundReleases = stableReleases.filter((release) => {
|
|
108
|
+
return releaseStrings.includes(release.tag_name);
|
|
109
|
+
});
|
|
110
|
+
releasesToRespond = foundReleases;
|
|
111
|
+
} else {
|
|
112
|
+
releasesToRespond = stableReleases;
|
|
113
|
+
}
|
|
114
|
+
releaseCache.set(cacheKey, releasesToRespond);
|
|
115
|
+
return releasesToRespond;
|
|
116
|
+
}
|
|
117
|
+
static async getReleases(params) {
|
|
118
|
+
const pageSize = params.options.pageSize || 100;
|
|
119
|
+
const currentPage = params.options.currentPage || 1;
|
|
120
|
+
const queryParams = new URLSearchParams();
|
|
121
|
+
queryParams.append("per_page", pageSize.toString());
|
|
122
|
+
queryParams.append("page", currentPage.toString());
|
|
123
|
+
const serviceContext = {
|
|
124
|
+
method: {
|
|
125
|
+
name: `GithubService.getReleases`,
|
|
126
|
+
url: `https://api.github.com/repos/${params.options.owner}/${params.options.repo}/releases?${queryParams.toString()}`,
|
|
127
|
+
normalizedUrl: `https://api.github.com/repos/:owner/:repo`,
|
|
128
|
+
type: "get"
|
|
129
|
+
},
|
|
130
|
+
source: params.config.metrics?.source || "unset",
|
|
131
|
+
target: {
|
|
132
|
+
name: "github",
|
|
133
|
+
type: "external"
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
const response = await request({
|
|
137
|
+
config: params.config,
|
|
138
|
+
url: serviceContext.method.url,
|
|
139
|
+
method: serviceContext.method.type,
|
|
140
|
+
metricsDetails: serviceContext,
|
|
141
|
+
type: "json",
|
|
142
|
+
headers: {
|
|
143
|
+
Accept: "application/vnd.github+json",
|
|
144
|
+
Authorization: `Bearer ${params.options.apiToken}`
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
if (!response.ok) {
|
|
148
|
+
throw new HttpError(
|
|
149
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
150
|
+
response.status,
|
|
151
|
+
response.statusText
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
let releases = [];
|
|
155
|
+
if (response.body) {
|
|
156
|
+
releases = response.body.map((release) => {
|
|
157
|
+
return {
|
|
158
|
+
url: release.url,
|
|
159
|
+
tag_name: release.tag_name,
|
|
160
|
+
body: release.body,
|
|
161
|
+
created_at: release.created_at,
|
|
162
|
+
prerelease: release.prerelease
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return releases;
|
|
167
|
+
}
|
|
168
|
+
static async listDirectoryContent(params) {
|
|
169
|
+
const queryParams = new URLSearchParams();
|
|
170
|
+
if (params.options.ref) {
|
|
171
|
+
queryParams.append("ref", params.options.ref);
|
|
172
|
+
}
|
|
173
|
+
const encodedPath = encodeURIComponent(params.options.path).replace(
|
|
174
|
+
/%2F/gu,
|
|
175
|
+
"/"
|
|
176
|
+
);
|
|
177
|
+
const serviceContext = {
|
|
178
|
+
method: {
|
|
179
|
+
name: `GithubService.listDirectoryContent`,
|
|
180
|
+
url: `https://api.github.com/repos/${params.options.owner}/${params.options.repo}/contents/${encodedPath}${queryParams.size ? `?${queryParams.toString()}` : ""}`,
|
|
181
|
+
normalizedUrl: `https://api.github.com/repos/:owner/:repo/contents/:path`,
|
|
182
|
+
type: "get"
|
|
183
|
+
},
|
|
184
|
+
source: params.config.metrics?.source || "unset",
|
|
185
|
+
target: {
|
|
186
|
+
name: "github",
|
|
187
|
+
type: "external"
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
const response = await request({
|
|
191
|
+
config: params.config,
|
|
192
|
+
url: serviceContext.method.url,
|
|
193
|
+
method: serviceContext.method.type,
|
|
194
|
+
metricsDetails: serviceContext,
|
|
195
|
+
type: "json",
|
|
196
|
+
headers: {
|
|
197
|
+
Accept: "application/vnd.github+json",
|
|
198
|
+
Authorization: `Bearer ${params.options.apiToken}`
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
if (!response.ok) {
|
|
202
|
+
throw new HttpError(
|
|
203
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
204
|
+
response.status,
|
|
205
|
+
response.statusText
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
let items = [];
|
|
209
|
+
if (Array.isArray(response.body)) {
|
|
210
|
+
items = response.body.map((item) => {
|
|
211
|
+
return {
|
|
212
|
+
name: item.name,
|
|
213
|
+
path: item.path,
|
|
214
|
+
sha: item.sha,
|
|
215
|
+
size: item.size,
|
|
216
|
+
url: item.url,
|
|
217
|
+
download_url: item.download_url,
|
|
218
|
+
type: item.type
|
|
219
|
+
};
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return items;
|
|
223
|
+
}
|
|
224
|
+
static async getRawFile(params) {
|
|
225
|
+
const queryParams = new URLSearchParams();
|
|
226
|
+
if (params.options.ref) {
|
|
227
|
+
queryParams.append("ref", params.options.ref);
|
|
228
|
+
}
|
|
229
|
+
const encodedPath = encodeURIComponent(params.options.path).replace(
|
|
230
|
+
/%2F/gu,
|
|
231
|
+
"/"
|
|
232
|
+
);
|
|
233
|
+
const serviceContext = {
|
|
234
|
+
method: {
|
|
235
|
+
name: `GithubService.getRawFile`,
|
|
236
|
+
url: `https://api.github.com/repos/${params.options.owner}/${params.options.repo}/contents/${encodedPath}${queryParams.size ? `?${queryParams.toString()}` : ""}`,
|
|
237
|
+
normalizedUrl: `https://api.github.com/repos/:owner/:repo/contents/:path`,
|
|
238
|
+
type: "get"
|
|
239
|
+
},
|
|
240
|
+
source: params.config.metrics?.source || "unset",
|
|
241
|
+
target: {
|
|
242
|
+
name: "github",
|
|
243
|
+
type: "external"
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
const response = await request({
|
|
247
|
+
config: params.config,
|
|
248
|
+
url: serviceContext.method.url,
|
|
249
|
+
method: serviceContext.method.type,
|
|
250
|
+
metricsDetails: serviceContext,
|
|
251
|
+
// do not set a Content-Type for GET, but expect text back
|
|
252
|
+
type: "none",
|
|
253
|
+
responseType: "text",
|
|
254
|
+
headers: {
|
|
255
|
+
Accept: "application/vnd.github.raw",
|
|
256
|
+
Authorization: `Bearer ${params.options.apiToken}`
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
if (!response.ok) {
|
|
260
|
+
throw new HttpError(
|
|
261
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
262
|
+
response.status,
|
|
263
|
+
response.statusText
|
|
264
|
+
);
|
|
265
|
+
}
|
|
266
|
+
return response.body ?? "";
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
export {
|
|
270
|
+
GithubService
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=github.service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/services/github/github.service.ts"],
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport { HOUR } from '@camunda/ccma-shared-types'\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { Cache } from '../../utils/cache.js'\nimport { HttpError } from '../../utils/errors.js'\n\nconst releaseCache = new Cache<string, GithubRelease[]>(HOUR)\n\nexport interface GithubListMajorMinorReleasesRequest extends RequestBaseParams {\n options: {\n owner: string\n repo: string\n apiToken: string\n iterations?: number\n onlyLatest?: boolean\n includeAlphas?: boolean\n onlyPrerelease?: boolean\n replaceBugfixSuffix?: boolean\n }\n}\n\nexport interface GithubListReleasesRequest extends RequestBaseParams {\n options: {\n owner: string\n repo: string\n apiToken: string\n pageSize?: number\n currentPage?: number\n }\n}\n\nexport interface GithubGetNextBugfixReleaseVersionRequest\n extends RequestBaseParams {\n options: {\n owner: string\n repo: string\n apiToken: string\n iterations?: number\n onlyLatest?: boolean\n majorMinor: string\n }\n}\n\nexport interface GithubRelease {\n url: string\n tag_name: string\n body: string\n created_at: string\n prerelease: boolean\n}\n\nexport interface GithubListDirectoryContentRequest extends RequestBaseParams {\n options: {\n owner: string\n repo: string\n apiToken: string\n path: string\n ref?: string\n }\n}\n\nexport interface GithubGetRawFileRequest extends RequestBaseParams {\n options: {\n owner: string\n repo: string\n apiToken: string\n path: string\n ref?: string\n }\n}\n\nexport interface GithubContentItem {\n name: string\n path: string\n sha: string\n size: number\n url: string\n download_url: string | undefined\n type: string\n}\n\nexport class GithubService {\n public static async getNextBugfixReleaseVersion(\n params: GithubGetNextBugfixReleaseVersionRequest,\n ): Promise<string> {\n const releases = await GithubService.listMajorMinorReleases({\n config: params.config,\n options: {\n owner: params.options.owner,\n repo: params.options.repo,\n apiToken: params.options.apiToken,\n onlyLatest: true,\n iterations: params.options.iterations,\n },\n })\n if (releases.length === 0) {\n throw new Error(\n `No releases found for ${params.options.owner}/${params.options.repo}`,\n )\n }\n const latestRelease = releases[0]\n if (latestRelease.tag_name.startsWith(params.options.majorMinor)) {\n throw new Error(\n `Not allowed to create a new bugfix release for ${latestRelease.tag_name}`,\n )\n }\n for (const release of releases) {\n if (release.tag_name.startsWith(params.options.majorMinor)) {\n const versionSplitted = release.tag_name.split('.')\n if (versionSplitted.length !== 3) {\n throw new Error(`Invalid version format: ${release.tag_name}`)\n }\n const majorVersion = Number(versionSplitted[0])\n const minorVersion = Number(versionSplitted[1])\n const patchVersion = Number(versionSplitted[2]) + 1\n return `${majorVersion}.${minorVersion}.${patchVersion}`\n }\n }\n throw new Error(`No bugfix release found for ${params.options.majorMinor}`)\n }\n\n public static async listMajorMinorReleases(\n params: GithubListMajorMinorReleasesRequest,\n ): Promise<GithubRelease[]> {\n const cacheKey = `major-minor-${params.options.owner}-${\n params.options.repo\n }-${params.options.onlyLatest ?? false}-${\n params.options.includeAlphas ?? false\n }-${params.options.onlyPrerelease ?? false}`\n if (!params.cacheControl?.ignoreCache) {\n const cached = releaseCache.get(cacheKey)\n if (cached) {\n return cached\n }\n }\n const pageSize = 100\n const ITERATIONS = params.options.iterations || 15\n\n // Fetch all pages in parallel for improved performance\n const pagePromises = Array.from({ length: ITERATIONS }, (_, index) => {\n const currentPage = index + 1\n return GithubService.getReleases({\n config: params.config,\n options: {\n owner: params.options.owner,\n repo: params.options.repo,\n apiToken: params.options.apiToken,\n pageSize,\n currentPage,\n },\n })\n })\n\n const allPageResults = await Promise.all(pagePromises)\n\n const stableReleases: GithubRelease[] = []\n for (const releases of allPageResults) {\n // replace bugfix suffix\n if (params.options.replaceBugfixSuffix === true) {\n releases.forEach((release) => {\n if (release.tag_name.endsWith('_bugfix')) {\n release.tag_name = release.tag_name.replace(/_bugfix.*/u, '')\n }\n })\n }\n\n const filtered = releases.filter((release) => {\n let includeRelease = !release.prerelease\n if (params.options.onlyPrerelease) {\n includeRelease = release.prerelease\n }\n if (includeRelease && params.options.includeAlphas) {\n includeRelease =\n release.tag_name.includes('-alpha') &&\n !release.tag_name.includes('-alphatest')\n }\n return includeRelease\n })\n stableReleases.push(...filtered)\n }\n\n let releasesToRespond: GithubRelease[] = []\n\n stableReleases.sort((a, b) => {\n return new Date(b.created_at).getTime() - new Date(a.created_at).getTime()\n })\n\n if (params.options.onlyLatest) {\n const onlyLatest: Record<string, number> = {}\n for (const release of stableReleases) {\n const splitted = release.tag_name.split('.')\n const majorMinor = `${splitted[0]}.${splitted[1]}`\n const patchVersion = Number(splitted[2])\n if (!onlyLatest[majorMinor]) {\n onlyLatest[majorMinor] = patchVersion\n } else if (patchVersion > onlyLatest[majorMinor]) {\n onlyLatest[majorMinor] = patchVersion\n }\n }\n const releaseStrings = Object.keys(onlyLatest).map((key) => {\n return `${key}.${onlyLatest[key]}`\n })\n const foundReleases = stableReleases.filter((release) => {\n return releaseStrings.includes(release.tag_name)\n })\n releasesToRespond = foundReleases\n } else {\n releasesToRespond = stableReleases\n }\n releaseCache.set(cacheKey, releasesToRespond)\n return releasesToRespond\n }\n\n public static async getReleases(\n params: GithubListReleasesRequest,\n ): Promise<GithubRelease[]> {\n const pageSize = params.options.pageSize || 100\n const currentPage = params.options.currentPage || 1\n const queryParams = new URLSearchParams()\n queryParams.append('per_page', pageSize.toString())\n queryParams.append('page', currentPage.toString())\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `GithubService.getReleases`,\n url: `https://api.github.com/repos/${params.options.owner}/${\n params.options.repo\n }/releases?${queryParams.toString()}`,\n normalizedUrl: `https://api.github.com/repos/:owner/:repo`,\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'github',\n type: 'external',\n },\n }\n\n const response = await request<GithubRelease[]>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n let releases: GithubRelease[] = []\n if (response.body) {\n releases = response.body.map((release) => {\n return {\n url: release.url,\n tag_name: release.tag_name,\n body: release.body,\n created_at: release.created_at,\n prerelease: release.prerelease,\n }\n })\n }\n return releases\n }\n\n public static async listDirectoryContent(\n params: GithubListDirectoryContentRequest,\n ): Promise<GithubContentItem[]> {\n const queryParams = new URLSearchParams()\n if (params.options.ref) {\n queryParams.append('ref', params.options.ref)\n }\n const encodedPath = encodeURIComponent(params.options.path).replace(\n /%2F/gu,\n '/',\n )\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `GithubService.listDirectoryContent`,\n url: `https://api.github.com/repos/${params.options.owner}/${\n params.options.repo\n }/contents/${encodedPath}${queryParams.size ? `?${queryParams.toString()}` : ''}`,\n normalizedUrl: `https://api.github.com/repos/:owner/:repo/contents/:path`,\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'github',\n type: 'external',\n },\n }\n\n const response = await request<any[]>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Accept: 'application/vnd.github+json',\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n let items: GithubContentItem[] = []\n if (Array.isArray(response.body)) {\n items = response.body.map((item: any) => {\n return {\n name: item.name,\n path: item.path,\n sha: item.sha,\n size: item.size,\n url: item.url,\n download_url: item.download_url,\n type: item.type,\n } as GithubContentItem\n })\n }\n return items\n }\n\n public static async getRawFile(\n params: GithubGetRawFileRequest,\n ): Promise<string> {\n const queryParams = new URLSearchParams()\n if (params.options.ref) {\n queryParams.append('ref', params.options.ref)\n }\n const encodedPath = encodeURIComponent(params.options.path).replace(\n /%2F/gu,\n '/',\n )\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: `GithubService.getRawFile`,\n url: `https://api.github.com/repos/${params.options.owner}/${\n params.options.repo\n }/contents/${encodedPath}${queryParams.size ? `?${queryParams.toString()}` : ''}`,\n normalizedUrl: `https://api.github.com/repos/:owner/:repo/contents/:path`,\n type: 'get',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'github',\n type: 'external',\n },\n }\n\n const response = await request<string>({\n config: params.config,\n url: serviceContext.method.url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n // do not set a Content-Type for GET, but expect text back\n type: 'none',\n responseType: 'text',\n headers: {\n Accept: 'application/vnd.github.raw',\n Authorization: `Bearer ${params.options.apiToken}`,\n },\n })\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n return response.body ?? ''\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
2
|
+
export interface HibobSearchRequest extends RequestBaseParams {
|
|
3
|
+
options: {
|
|
4
|
+
hibobApiUrl: string;
|
|
5
|
+
username: string;
|
|
6
|
+
password: string;
|
|
7
|
+
email: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface HibobGetAllUsersRequest extends RequestBaseParams {
|
|
11
|
+
options: {
|
|
12
|
+
hibobApiUrl: string;
|
|
13
|
+
username: string;
|
|
14
|
+
password: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface HibobReportsTo {
|
|
18
|
+
id: string;
|
|
19
|
+
firstName: string;
|
|
20
|
+
surname: string;
|
|
21
|
+
email: string;
|
|
22
|
+
displayName: string;
|
|
23
|
+
}
|
|
24
|
+
export declare const DIVISION_ID = "column_1629151319875";
|
|
25
|
+
export declare const SUB_DIVISION_ID = "column_1642024758438";
|
|
26
|
+
export declare const DEPARTMENT = "/work/department";
|
|
27
|
+
export declare const DIVISION = "/work/customColumns/column_1629151319875";
|
|
28
|
+
export declare const SUB_DIVISION = "/work/customColumns/column_1642024758438";
|
|
29
|
+
export interface HibobEmployee {
|
|
30
|
+
id: string;
|
|
31
|
+
email: string;
|
|
32
|
+
work?: {
|
|
33
|
+
reportsTo?: HibobReportsTo;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Hibob API returns field paths as property names in the response.
|
|
37
|
+
* These are alternative representations of the employee data.
|
|
38
|
+
*/
|
|
39
|
+
'/root/email'?: {
|
|
40
|
+
value: string;
|
|
41
|
+
};
|
|
42
|
+
'/work/reportsTo'?: {
|
|
43
|
+
value: HibobReportsTo;
|
|
44
|
+
};
|
|
45
|
+
[DIVISION]?: {
|
|
46
|
+
value: string;
|
|
47
|
+
};
|
|
48
|
+
[SUB_DIVISION]?: {
|
|
49
|
+
value: string;
|
|
50
|
+
};
|
|
51
|
+
[DEPARTMENT]?: {
|
|
52
|
+
value: string;
|
|
53
|
+
};
|
|
54
|
+
humanReadable?: {
|
|
55
|
+
work: {
|
|
56
|
+
department?: string;
|
|
57
|
+
customColumns?: {
|
|
58
|
+
[DIVISION_ID]?: string;
|
|
59
|
+
[SUB_DIVISION_ID]?: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export interface HibobSearchResponse {
|
|
65
|
+
employees: HibobEmployee[];
|
|
66
|
+
}
|
|
67
|
+
export declare class HibobService {
|
|
68
|
+
/**
|
|
69
|
+
* Creates a Basic auth token from username and password.
|
|
70
|
+
*/
|
|
71
|
+
private static createBasicToken;
|
|
72
|
+
static getUserByEmail(params: HibobSearchRequest): Promise<HibobSearchResponse>;
|
|
73
|
+
static getAllUsers(params: HibobGetAllUsersRequest): Promise<HibobSearchResponse>;
|
|
74
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { request } from "../../utils/api.js";
|
|
2
|
+
import { HttpError } from "../../utils/errors.js";
|
|
3
|
+
const DIVISION_ID = "column_1629151319875";
|
|
4
|
+
const SUB_DIVISION_ID = "column_1642024758438";
|
|
5
|
+
const DEPARTMENT = "/work/department";
|
|
6
|
+
const DIVISION = `/work/customColumns/${DIVISION_ID}`;
|
|
7
|
+
const SUB_DIVISION = `/work/customColumns/${SUB_DIVISION_ID}`;
|
|
8
|
+
const HIBOB_SEARCH_FIELDS = [
|
|
9
|
+
"root.email",
|
|
10
|
+
"work.reportsTo",
|
|
11
|
+
"work.department",
|
|
12
|
+
"work.customColumns.column_1629151319875",
|
|
13
|
+
"work.customColumns.column_1642024758438"
|
|
14
|
+
];
|
|
15
|
+
class HibobService {
|
|
16
|
+
/**
|
|
17
|
+
* Creates a Basic auth token from username and password.
|
|
18
|
+
*/
|
|
19
|
+
static createBasicToken(username, password) {
|
|
20
|
+
return Buffer.from(`${username}:${password}`).toString("base64");
|
|
21
|
+
}
|
|
22
|
+
static async getUserByEmail(params) {
|
|
23
|
+
const url = `${params.options.hibobApiUrl}v1/people/search`;
|
|
24
|
+
const serviceContext = {
|
|
25
|
+
method: {
|
|
26
|
+
name: "HibobService.getUserByEmail",
|
|
27
|
+
url,
|
|
28
|
+
normalizedUrl: `${params.options.hibobApiUrl}v1/people/search`,
|
|
29
|
+
type: "post"
|
|
30
|
+
},
|
|
31
|
+
source: params.config.metrics?.source || "unset",
|
|
32
|
+
target: {
|
|
33
|
+
name: "hibob",
|
|
34
|
+
type: "external"
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const basicToken = HibobService.createBasicToken(
|
|
38
|
+
params.options.username,
|
|
39
|
+
params.options.password
|
|
40
|
+
);
|
|
41
|
+
const body = {
|
|
42
|
+
fields: HIBOB_SEARCH_FIELDS,
|
|
43
|
+
filters: [
|
|
44
|
+
{
|
|
45
|
+
values: [params.options.email],
|
|
46
|
+
fieldPath: "root.email",
|
|
47
|
+
operator: "equals"
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
showInactive: false
|
|
51
|
+
};
|
|
52
|
+
const response = await request({
|
|
53
|
+
config: params.config,
|
|
54
|
+
url,
|
|
55
|
+
method: serviceContext.method.type,
|
|
56
|
+
metricsDetails: serviceContext,
|
|
57
|
+
type: "json",
|
|
58
|
+
headers: {
|
|
59
|
+
Authorization: `Basic ${basicToken}`
|
|
60
|
+
},
|
|
61
|
+
body
|
|
62
|
+
});
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
throw new HttpError(
|
|
65
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
66
|
+
response.status,
|
|
67
|
+
response.statusText
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
return response.body;
|
|
71
|
+
}
|
|
72
|
+
static async getAllUsers(params) {
|
|
73
|
+
const url = `${params.options.hibobApiUrl}v1/people/search`;
|
|
74
|
+
const serviceContext = {
|
|
75
|
+
method: {
|
|
76
|
+
name: "HibobService.getAllUsers",
|
|
77
|
+
url,
|
|
78
|
+
normalizedUrl: `${params.options.hibobApiUrl}v1/people/search`,
|
|
79
|
+
type: "post"
|
|
80
|
+
},
|
|
81
|
+
source: params.config.metrics?.source || "unset",
|
|
82
|
+
target: {
|
|
83
|
+
name: "hibob",
|
|
84
|
+
type: "external"
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const basicToken = HibobService.createBasicToken(
|
|
88
|
+
params.options.username,
|
|
89
|
+
params.options.password
|
|
90
|
+
);
|
|
91
|
+
const body = {
|
|
92
|
+
fields: HIBOB_SEARCH_FIELDS,
|
|
93
|
+
showInactive: false,
|
|
94
|
+
humanReadable: "APPEND"
|
|
95
|
+
};
|
|
96
|
+
const response = await request({
|
|
97
|
+
config: params.config,
|
|
98
|
+
url,
|
|
99
|
+
method: serviceContext.method.type,
|
|
100
|
+
metricsDetails: serviceContext,
|
|
101
|
+
type: "json",
|
|
102
|
+
headers: {
|
|
103
|
+
Authorization: `Basic ${basicToken}`
|
|
104
|
+
},
|
|
105
|
+
body
|
|
106
|
+
});
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
throw new HttpError(
|
|
109
|
+
`${serviceContext.method.name}: ${response.status} ${response.statusText}`,
|
|
110
|
+
response.status,
|
|
111
|
+
response.statusText
|
|
112
|
+
);
|
|
113
|
+
}
|
|
114
|
+
return response.body;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export {
|
|
118
|
+
DEPARTMENT,
|
|
119
|
+
DIVISION,
|
|
120
|
+
DIVISION_ID,
|
|
121
|
+
HibobService,
|
|
122
|
+
SUB_DIVISION,
|
|
123
|
+
SUB_DIVISION_ID
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=hibob.service.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/services/hibob/hibob.service.ts"],
|
|
4
|
+
"sourcesContent": ["/*\n * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH\n * under one or more contributor license agreements. Licensed under a commercial license.\n * You may not use this file except in compliance with the commercial license.\n */\n\nimport type {\n RequestBaseParams,\n RequestBaseServiceContext,\n} from '../../types/general.types.js'\nimport { request } from '../../utils/api.js'\nimport { HttpError } from '../../utils/errors.js'\n\nexport interface HibobSearchRequest extends RequestBaseParams {\n options: {\n hibobApiUrl: string\n username: string\n password: string\n email: string\n }\n}\n\nexport interface HibobGetAllUsersRequest extends RequestBaseParams {\n options: {\n hibobApiUrl: string\n username: string\n password: string\n }\n}\n\nexport interface HibobReportsTo {\n id: string\n firstName: string\n surname: string\n email: string\n displayName: string\n}\n\nexport const DIVISION_ID = 'column_1629151319875'\nexport const SUB_DIVISION_ID = 'column_1642024758438'\n\nexport const DEPARTMENT = '/work/department'\nexport const DIVISION = `/work/customColumns/${DIVISION_ID}`\nexport const SUB_DIVISION = `/work/customColumns/${SUB_DIVISION_ID}`\n\nexport interface HibobEmployee {\n id: string\n email: string\n work?: {\n reportsTo?: HibobReportsTo\n }\n /**\n * Hibob API returns field paths as property names in the response.\n * These are alternative representations of the employee data.\n */\n '/root/email'?: {\n value: string\n }\n '/work/reportsTo'?: {\n value: HibobReportsTo\n }\n [DIVISION]?: {\n value: string\n }\n [SUB_DIVISION]?: {\n value: string\n }\n [DEPARTMENT]?: {\n value: string\n }\n humanReadable?: {\n work: {\n department?: string\n customColumns?: {\n [DIVISION_ID]?: string\n [SUB_DIVISION_ID]?: string\n }\n }\n }\n}\n\nexport interface HibobSearchResponse {\n employees: HibobEmployee[]\n}\n\n// Common fields configuration for Hibob API requests\nconst HIBOB_SEARCH_FIELDS = [\n 'root.email',\n 'work.reportsTo',\n 'work.department',\n 'work.customColumns.column_1629151319875',\n 'work.customColumns.column_1642024758438',\n]\n\nexport class HibobService {\n /**\n * Creates a Basic auth token from username and password.\n */\n private static createBasicToken(username: string, password: string): string {\n return Buffer.from(`${username}:${password}`).toString('base64')\n }\n\n public static async getUserByEmail(\n params: HibobSearchRequest,\n ): Promise<HibobSearchResponse> {\n const url = `${params.options.hibobApiUrl}v1/people/search`\n\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'HibobService.getUserByEmail',\n url,\n normalizedUrl: `${params.options.hibobApiUrl}v1/people/search`,\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'hibob',\n type: 'external',\n },\n }\n\n const basicToken = HibobService.createBasicToken(\n params.options.username,\n params.options.password,\n )\n\n const body = {\n fields: HIBOB_SEARCH_FIELDS,\n filters: [\n {\n values: [params.options.email],\n fieldPath: 'root.email',\n operator: 'equals',\n },\n ],\n showInactive: false,\n }\n\n const response = await request<HibobSearchResponse>({\n config: params.config,\n url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Basic ${basicToken}`,\n },\n body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n return response.body!\n }\n\n public static async getAllUsers(\n params: HibobGetAllUsersRequest,\n ): Promise<HibobSearchResponse> {\n const url = `${params.options.hibobApiUrl}v1/people/search`\n\n const serviceContext: RequestBaseServiceContext = {\n method: {\n name: 'HibobService.getAllUsers',\n url,\n normalizedUrl: `${params.options.hibobApiUrl}v1/people/search`,\n type: 'post',\n },\n source: params.config.metrics?.source || 'unset',\n target: {\n name: 'hibob',\n type: 'external',\n },\n }\n\n const basicToken = HibobService.createBasicToken(\n params.options.username,\n params.options.password,\n )\n\n const body = {\n fields: HIBOB_SEARCH_FIELDS,\n showInactive: false,\n humanReadable: 'APPEND',\n }\n\n const response = await request<HibobSearchResponse>({\n config: params.config,\n url,\n method: serviceContext.method.type,\n metricsDetails: serviceContext,\n type: 'json',\n headers: {\n Authorization: `Basic ${basicToken}`,\n },\n body,\n })\n\n if (!response.ok) {\n throw new HttpError(\n `${serviceContext.method.name}: ${response.status} ${response.statusText}`,\n response.status,\n response.statusText,\n )\n }\n\n return response.body!\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { RequestBaseParams } from '../../types/general.types.js';
|
|
2
|
+
export interface HubspotTokenRequest extends RequestBaseParams {
|
|
3
|
+
options: {
|
|
4
|
+
clientId: string;
|
|
5
|
+
clientSecret: string;
|
|
6
|
+
refreshToken: string;
|
|
7
|
+
hubspotApiBaseUrl: string;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export interface HubspotSubmission {
|
|
11
|
+
submittedAt: string;
|
|
12
|
+
fields: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
value?: string;
|
|
15
|
+
}>;
|
|
16
|
+
context?: {
|
|
17
|
+
hutk?: string;
|
|
18
|
+
pageUri?: string;
|
|
19
|
+
pageName?: string;
|
|
20
|
+
ipAddress?: string;
|
|
21
|
+
};
|
|
22
|
+
legalConsentOptions?: any;
|
|
23
|
+
}
|
|
24
|
+
export interface HubspotSubmitRequest extends RequestBaseParams {
|
|
25
|
+
options: {
|
|
26
|
+
token: string;
|
|
27
|
+
submission: HubspotSubmission;
|
|
28
|
+
portalId?: number;
|
|
29
|
+
formId: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface HubspotChangeContactPropertiesRequest extends RequestBaseParams {
|
|
33
|
+
options: {
|
|
34
|
+
token: string;
|
|
35
|
+
email: string;
|
|
36
|
+
properties: Array<{
|
|
37
|
+
property: string;
|
|
38
|
+
value: string | boolean;
|
|
39
|
+
}>;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export interface HubspotTokenResponse {
|
|
43
|
+
access_token: string;
|
|
44
|
+
expires_in: number;
|
|
45
|
+
}
|
|
46
|
+
export declare class HubspotService {
|
|
47
|
+
static getAccessToken(params: HubspotTokenRequest): Promise<HubspotTokenResponse>;
|
|
48
|
+
static submit(params: HubspotSubmitRequest): Promise<void>;
|
|
49
|
+
static changeContactProperties(params: HubspotChangeContactPropertiesRequest): Promise<void>;
|
|
50
|
+
}
|