@xemahq/backlog-api-client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -0
- package/dist/custom-fetch.d.ts +52 -0
- package/dist/custom-fetch.js +152 -0
- package/dist/endpoints/backlog/backlog.d.ts +113 -0
- package/dist/endpoints/backlog/backlog.js +424 -0
- package/dist/endpoints/delivery-phases/delivery-phases.d.ts +58 -0
- package/dist/endpoints/delivery-phases/delivery-phases.js +171 -0
- package/dist/endpoints/health/health.d.ts +15 -0
- package/dist/endpoints/health/health.js +53 -0
- package/dist/endpoints/mcp/mcp.d.ts +6 -0
- package/dist/endpoints/mcp/mcp.js +44 -0
- package/dist/endpoints/webhook-ingestion/webhook-ingestion.d.ts +13 -0
- package/dist/endpoints/webhook-ingestion/webhook-ingestion.js +20 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +26 -0
- package/dist/models/addCommentDto.d.ts +10 -0
- package/dist/models/addCommentDto.js +9 -0
- package/dist/models/affectedPhaseDto.d.ts +14 -0
- package/dist/models/affectedPhaseDto.js +2 -0
- package/dist/models/affectedPhaseDtoSeverity.d.ts +12 -0
- package/dist/models/affectedPhaseDtoSeverity.js +14 -0
- package/dist/models/archiveProposalDto.d.ts +11 -0
- package/dist/models/archiveProposalDto.js +9 -0
- package/dist/models/backlogCommentResponseDto.d.ts +15 -0
- package/dist/models/backlogCommentResponseDto.js +9 -0
- package/dist/models/backlogCommentResponseDtoDataArrayEnvelope.d.ts +11 -0
- package/dist/models/backlogCommentResponseDtoDataArrayEnvelope.js +2 -0
- package/dist/models/backlogCommentResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/backlogCommentResponseDtoDataEnvelope.js +2 -0
- package/dist/models/backlogControllerCleanupByPipelineRunParams.d.ts +13 -0
- package/dist/models/backlogControllerCleanupByPipelineRunParams.js +9 -0
- package/dist/models/backlogControllerGetBoardParams.d.ts +13 -0
- package/dist/models/backlogControllerGetBoardParams.js +9 -0
- package/dist/models/backlogControllerGetItemTreeParams.d.ts +13 -0
- package/dist/models/backlogControllerGetItemTreeParams.js +9 -0
- package/dist/models/backlogControllerListItemsParams.d.ts +28 -0
- package/dist/models/backlogControllerListItemsParams.js +2 -0
- package/dist/models/backlogControllerListItemsStatus.d.ts +17 -0
- package/dist/models/backlogControllerListItemsStatus.js +19 -0
- package/dist/models/backlogControllerListItemsTagMode.d.ts +12 -0
- package/dist/models/backlogControllerListItemsTagMode.js +14 -0
- package/dist/models/backlogControllerListItemsType.d.ts +14 -0
- package/dist/models/backlogControllerListItemsType.js +16 -0
- package/dist/models/backlogControllerSearchItemsParams.d.ts +17 -0
- package/dist/models/backlogControllerSearchItemsParams.js +9 -0
- package/dist/models/backlogControllerTagUsageParams.d.ts +13 -0
- package/dist/models/backlogControllerTagUsageParams.js +9 -0
- package/dist/models/backlogDependencyResponseDto.d.ts +14 -0
- package/dist/models/backlogDependencyResponseDto.js +2 -0
- package/dist/models/backlogDependencyResponseDtoDataArrayEnvelope.d.ts +11 -0
- package/dist/models/backlogDependencyResponseDtoDataArrayEnvelope.js +2 -0
- package/dist/models/backlogDependencyResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/backlogDependencyResponseDtoDataEnvelope.js +2 -0
- package/dist/models/backlogItemResponseDto.d.ts +37 -0
- package/dist/models/backlogItemResponseDto.js +9 -0
- package/dist/models/backlogItemResponseDtoDataArrayEnvelope.d.ts +11 -0
- package/dist/models/backlogItemResponseDtoDataArrayEnvelope.js +2 -0
- package/dist/models/backlogItemResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/backlogItemResponseDtoDataEnvelope.js +2 -0
- package/dist/models/backlogItemTreeNodeResponseDto.d.ts +17 -0
- package/dist/models/backlogItemTreeNodeResponseDto.js +9 -0
- package/dist/models/backlogItemTreeNodeResponseDtoDataArrayEnvelope.d.ts +11 -0
- package/dist/models/backlogItemTreeNodeResponseDtoDataArrayEnvelope.js +2 -0
- package/dist/models/backlogReadyResponseDto.d.ts +16 -0
- package/dist/models/backlogReadyResponseDto.js +9 -0
- package/dist/models/backlogReadyResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/backlogReadyResponseDtoDataEnvelope.js +2 -0
- package/dist/models/boardColumnResponseDto.d.ts +14 -0
- package/dist/models/boardColumnResponseDto.js +2 -0
- package/dist/models/boardColumnResponseDtoDataArrayEnvelope.d.ts +11 -0
- package/dist/models/boardColumnResponseDtoDataArrayEnvelope.js +2 -0
- package/dist/models/bulkUpsertBacklogDto.d.ts +12 -0
- package/dist/models/bulkUpsertBacklogDto.js +2 -0
- package/dist/models/bulkUpsertBacklogItemDto.d.ts +29 -0
- package/dist/models/bulkUpsertBacklogItemDto.js +9 -0
- package/dist/models/bulkUpsertBacklogResponseDto.d.ts +14 -0
- package/dist/models/bulkUpsertBacklogResponseDto.js +2 -0
- package/dist/models/bulkUpsertBacklogResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/bulkUpsertBacklogResponseDtoDataEnvelope.js +2 -0
- package/dist/models/bulkUpsertBacklogResultDto.d.ts +14 -0
- package/dist/models/bulkUpsertBacklogResultDto.js +2 -0
- package/dist/models/bulkUpsertBacklogResultDtoAction.d.ts +13 -0
- package/dist/models/bulkUpsertBacklogResultDtoAction.js +15 -0
- package/dist/models/changeImpactReportResponseDto.d.ts +16 -0
- package/dist/models/changeImpactReportResponseDto.js +2 -0
- package/dist/models/changeImpactReportResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/changeImpactReportResponseDtoDataEnvelope.js +2 -0
- package/dist/models/confirmDeliveryPhasesDto.d.ts +14 -0
- package/dist/models/confirmDeliveryPhasesDto.js +2 -0
- package/dist/models/confirmedPhaseDto.d.ts +15 -0
- package/dist/models/confirmedPhaseDto.js +9 -0
- package/dist/models/connectorKind.d.ts +36 -0
- package/dist/models/connectorKind.js +35 -0
- package/dist/models/contentChangeDto.d.ts +14 -0
- package/dist/models/contentChangeDto.js +9 -0
- package/dist/models/contentChangeSetResponseDto.d.ts +14 -0
- package/dist/models/contentChangeSetResponseDto.js +2 -0
- package/dist/models/contentChangeSetResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/contentChangeSetResponseDtoDataEnvelope.js +2 -0
- package/dist/models/createBacklogItemDto.d.ts +22 -0
- package/dist/models/createBacklogItemDto.js +9 -0
- package/dist/models/createDeliveryPhaseDto.d.ts +23 -0
- package/dist/models/createDeliveryPhaseDto.js +9 -0
- package/dist/models/deliveryPhaseProposalPhaseDto.d.ts +19 -0
- package/dist/models/deliveryPhaseProposalPhaseDto.js +9 -0
- package/dist/models/deliveryPhaseProposalResponseDto.d.ts +15 -0
- package/dist/models/deliveryPhaseProposalResponseDto.js +2 -0
- package/dist/models/deliveryPhaseProposalResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/deliveryPhaseProposalResponseDtoDataEnvelope.js +2 -0
- package/dist/models/deliveryPhaseResponseDto.d.ts +26 -0
- package/dist/models/deliveryPhaseResponseDto.js +9 -0
- package/dist/models/deliveryPhaseResponseDtoDataArrayEnvelope.d.ts +11 -0
- package/dist/models/deliveryPhaseResponseDtoDataArrayEnvelope.js +2 -0
- package/dist/models/deliveryPhaseResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/deliveryPhaseResponseDtoDataEnvelope.js +2 -0
- package/dist/models/deliveryPhasesControllerListPhasesParams.d.ts +17 -0
- package/dist/models/deliveryPhasesControllerListPhasesParams.js +9 -0
- package/dist/models/dependsOnItemSummaryDto.d.ts +13 -0
- package/dist/models/dependsOnItemSummaryDto.js +9 -0
- package/dist/models/errorDetailsDto.d.ts +12 -0
- package/dist/models/errorDetailsDto.js +2 -0
- package/dist/models/errorDetailsDtoDetails.d.ts +13 -0
- package/dist/models/errorDetailsDtoDetails.js +9 -0
- package/dist/models/errorPayloadDto.d.ts +13 -0
- package/dist/models/errorPayloadDto.js +2 -0
- package/dist/models/errorResponseDto.d.ts +11 -0
- package/dist/models/errorResponseDto.js +2 -0
- package/dist/models/index.d.ts +73 -0
- package/dist/models/index.js +90 -0
- package/dist/models/integrationFreshnessResponseDto.d.ts +27 -0
- package/dist/models/integrationFreshnessResponseDto.js +9 -0
- package/dist/models/integrationFreshnessResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/integrationFreshnessResponseDtoDataEnvelope.js +2 -0
- package/dist/models/newPhaseProposalDto.d.ts +13 -0
- package/dist/models/newPhaseProposalDto.js +9 -0
- package/dist/models/reconcileArchiveDto.d.ts +11 -0
- package/dist/models/reconcileArchiveDto.js +9 -0
- package/dist/models/reconcileDto.d.ts +17 -0
- package/dist/models/reconcileDto.js +2 -0
- package/dist/models/reconcileNewPhaseDto.d.ts +13 -0
- package/dist/models/reconcileNewPhaseDto.js +9 -0
- package/dist/models/reconcileResultResponseDto.d.ts +13 -0
- package/dist/models/reconcileResultResponseDto.js +9 -0
- package/dist/models/reconcileResultResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/reconcileResultResponseDtoDataEnvelope.js +2 -0
- package/dist/models/setBacklogReadyDto.d.ts +11 -0
- package/dist/models/setBacklogReadyDto.js +9 -0
- package/dist/models/setStatusDto.d.ts +11 -0
- package/dist/models/setStatusDto.js +9 -0
- package/dist/models/supportingDocDto.d.ts +13 -0
- package/dist/models/supportingDocDto.js +9 -0
- package/dist/models/syncResponseDto.d.ts +13 -0
- package/dist/models/syncResponseDto.js +9 -0
- package/dist/models/syncResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/syncResponseDtoDataEnvelope.js +2 -0
- package/dist/models/tagUsageDto.d.ts +13 -0
- package/dist/models/tagUsageDto.js +9 -0
- package/dist/models/tagUsageResponseDto.d.ts +12 -0
- package/dist/models/tagUsageResponseDto.js +2 -0
- package/dist/models/tagUsageResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/tagUsageResponseDtoDataEnvelope.js +2 -0
- package/dist/models/trackerCommentPayloadDto.d.ts +17 -0
- package/dist/models/trackerCommentPayloadDto.js +9 -0
- package/dist/models/trackerCommentWebhookEnvelopeDto.d.ts +33 -0
- package/dist/models/trackerCommentWebhookEnvelopeDto.js +2 -0
- package/dist/models/trackerCommentWebhookEnvelopeDtoAdapterKey.d.ts +14 -0
- package/dist/models/trackerCommentWebhookEnvelopeDtoAdapterKey.js +13 -0
- package/dist/models/trackerCommentWebhookEnvelopeDtoEntityKind.d.ts +14 -0
- package/dist/models/trackerCommentWebhookEnvelopeDtoEntityKind.js +13 -0
- package/dist/models/trackerItemPayloadDto.d.ts +26 -0
- package/dist/models/trackerItemPayloadDto.js +2 -0
- package/dist/models/trackerItemPriority.d.ts +17 -0
- package/dist/models/trackerItemPriority.js +16 -0
- package/dist/models/trackerItemStatus.d.ts +19 -0
- package/dist/models/trackerItemStatus.js +18 -0
- package/dist/models/trackerItemType.d.ts +17 -0
- package/dist/models/trackerItemType.js +16 -0
- package/dist/models/trackerItemWebhookEnvelopeDto.d.ts +33 -0
- package/dist/models/trackerItemWebhookEnvelopeDto.js +2 -0
- package/dist/models/trackerItemWebhookEnvelopeDtoAdapterKey.d.ts +14 -0
- package/dist/models/trackerItemWebhookEnvelopeDtoAdapterKey.js +13 -0
- package/dist/models/trackerItemWebhookEnvelopeDtoEntityKind.d.ts +14 -0
- package/dist/models/trackerItemWebhookEnvelopeDtoEntityKind.js +13 -0
- package/dist/models/updateBacklogItemDto.d.ts +15 -0
- package/dist/models/updateBacklogItemDto.js +9 -0
- package/dist/models/updateDeliveryPhaseDto.d.ts +16 -0
- package/dist/models/updateDeliveryPhaseDto.js +9 -0
- package/dist/models/webhookIngestionResponseDto.d.ts +19 -0
- package/dist/models/webhookIngestionResponseDto.js +9 -0
- package/dist/models/webhookIngestionResponseDtoDataEnvelope.d.ts +11 -0
- package/dist/models/webhookIngestionResponseDtoDataEnvelope.js +2 -0
- package/package.json +27 -0
package/LICENSE
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Copyright (c) 2026 Xema. All rights reserved.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configurable fetch wrapper for Orval-generated clients.
|
|
3
|
+
*
|
|
4
|
+
* Consumers must call `configureClient()` before using any endpoint function.
|
|
5
|
+
* The baseUrl is prepended to the relative paths generated by Orval.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Automatic bearer-token injection via `getAuthToken` callback
|
|
9
|
+
* - Per-request header injection via `getHeaders` callback
|
|
10
|
+
* - Automatic 401 handling via `onUnauthorized` callback (single retry)
|
|
11
|
+
* - Exponential-backoff retry for transient failures (429, 502, 503, 504)
|
|
12
|
+
* - Typed `ClientError` for non-2xx responses
|
|
13
|
+
* - Per-call header overrides (take precedence over global headers)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* configureClient({
|
|
17
|
+
* baseUrl: 'http://governance-api:3400',
|
|
18
|
+
* getAuthToken: () => identityBootstrapService.getAccessToken(),
|
|
19
|
+
* getHeaders: () => ({ 'X-Org-Id': orgId, 'X-Correlation-Id': crypto.randomUUID() }),
|
|
20
|
+
* });
|
|
21
|
+
*/
|
|
22
|
+
export interface ClientConfig {
|
|
23
|
+
/**
|
|
24
|
+
* Static base URL (e.g. 'http://localhost:3140') — no trailing slash.
|
|
25
|
+
* Mutually exclusive with `baseUrlResolver`; exactly one MUST be set.
|
|
26
|
+
*/
|
|
27
|
+
baseUrl?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Per-request base-URL resolver. When set, the peer URL is resolved from
|
|
30
|
+
* the service registry on EVERY request (boot-order-safe). Wired by
|
|
31
|
+
* `configureOrvalClientResolved` from `@xemahq/platform-common`.
|
|
32
|
+
*/
|
|
33
|
+
baseUrlResolver?: () => string | Promise<string>;
|
|
34
|
+
/** Optional async callback to get an auth token. Auto-sets Authorization header on every request. */
|
|
35
|
+
getAuthToken?: () => Promise<string>;
|
|
36
|
+
/** Optional callback returning headers to inject on every request. Per-call headers take precedence. */
|
|
37
|
+
getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
|
|
38
|
+
/** Optional callback invoked on 401 before a single retry (e.g. force-refresh auth token). */
|
|
39
|
+
onUnauthorized?: () => Promise<void>;
|
|
40
|
+
/** Maximum retry attempts for transient failures (default: 3). Set to 0 to disable retries. */
|
|
41
|
+
maxRetries?: number;
|
|
42
|
+
}
|
|
43
|
+
export declare class ClientError extends Error {
|
|
44
|
+
readonly status: number;
|
|
45
|
+
readonly url: string;
|
|
46
|
+
readonly body: unknown;
|
|
47
|
+
constructor(status: number, url: string, body: unknown);
|
|
48
|
+
}
|
|
49
|
+
export declare function configureClient(config: ClientConfig): void;
|
|
50
|
+
export declare function getClientConfig(): ClientConfig;
|
|
51
|
+
export declare const customFetch: <T>(url: string, options: RequestInit) => Promise<T>;
|
|
52
|
+
export default customFetch;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Configurable fetch wrapper for Orval-generated clients.
|
|
4
|
+
*
|
|
5
|
+
* Consumers must call `configureClient()` before using any endpoint function.
|
|
6
|
+
* The baseUrl is prepended to the relative paths generated by Orval.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Automatic bearer-token injection via `getAuthToken` callback
|
|
10
|
+
* - Per-request header injection via `getHeaders` callback
|
|
11
|
+
* - Automatic 401 handling via `onUnauthorized` callback (single retry)
|
|
12
|
+
* - Exponential-backoff retry for transient failures (429, 502, 503, 504)
|
|
13
|
+
* - Typed `ClientError` for non-2xx responses
|
|
14
|
+
* - Per-call header overrides (take precedence over global headers)
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* configureClient({
|
|
18
|
+
* baseUrl: 'http://governance-api:3400',
|
|
19
|
+
* getAuthToken: () => identityBootstrapService.getAccessToken(),
|
|
20
|
+
* getHeaders: () => ({ 'X-Org-Id': orgId, 'X-Correlation-Id': crypto.randomUUID() }),
|
|
21
|
+
* });
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.customFetch = exports.ClientError = void 0;
|
|
25
|
+
exports.configureClient = configureClient;
|
|
26
|
+
exports.getClientConfig = getClientConfig;
|
|
27
|
+
class ClientError extends Error {
|
|
28
|
+
status;
|
|
29
|
+
url;
|
|
30
|
+
body;
|
|
31
|
+
constructor(status, url, body) {
|
|
32
|
+
super(`HTTP ${status} from ${url}`);
|
|
33
|
+
this.status = status;
|
|
34
|
+
this.url = url;
|
|
35
|
+
this.body = body;
|
|
36
|
+
this.name = 'ClientError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.ClientError = ClientError;
|
|
40
|
+
let clientConfig = null;
|
|
41
|
+
function configureClient(config) {
|
|
42
|
+
clientConfig = config;
|
|
43
|
+
}
|
|
44
|
+
function getClientConfig() {
|
|
45
|
+
if (!clientConfig) {
|
|
46
|
+
throw new Error('Client not configured. Call configureClient({ baseUrl }) before using endpoint functions.');
|
|
47
|
+
}
|
|
48
|
+
return clientConfig;
|
|
49
|
+
}
|
|
50
|
+
const RETRYABLE_STATUSES = [429, 502, 503, 504];
|
|
51
|
+
async function buildHeaders(config, callerHeaders) {
|
|
52
|
+
const headers = new Headers(callerHeaders);
|
|
53
|
+
// Global headers from config (caller-provided headers take precedence)
|
|
54
|
+
if (config.getHeaders) {
|
|
55
|
+
const globalHeaders = await Promise.resolve(config.getHeaders());
|
|
56
|
+
for (const [key, value] of Object.entries(globalHeaders)) {
|
|
57
|
+
if (!headers.has(key)) {
|
|
58
|
+
headers.set(key, value);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Auth token (caller or global headers take precedence)
|
|
63
|
+
if (config.getAuthToken && !headers.has('Authorization')) {
|
|
64
|
+
const token = await config.getAuthToken();
|
|
65
|
+
headers.set('Authorization', `Bearer ${token}`);
|
|
66
|
+
}
|
|
67
|
+
return headers;
|
|
68
|
+
}
|
|
69
|
+
const customFetch = async (url, options) => {
|
|
70
|
+
const config = getClientConfig();
|
|
71
|
+
const base = config.baseUrlResolver
|
|
72
|
+
? await config.baseUrlResolver()
|
|
73
|
+
: config.baseUrl;
|
|
74
|
+
if (base === undefined) {
|
|
75
|
+
throw new Error('Client not configured: set baseUrl or baseUrlResolver via configureClient().');
|
|
76
|
+
}
|
|
77
|
+
const fullUrl = `${base}${url}`;
|
|
78
|
+
const maxRetries = config.maxRetries ?? 3;
|
|
79
|
+
const headers = await buildHeaders(config, options.headers);
|
|
80
|
+
const requestInit = { ...options, headers };
|
|
81
|
+
let delay = 1000;
|
|
82
|
+
let lastError;
|
|
83
|
+
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
84
|
+
try {
|
|
85
|
+
const response = await fetch(fullUrl, requestInit);
|
|
86
|
+
// 401 — invoke onUnauthorized and retry once (outside the transient retry loop)
|
|
87
|
+
if (response.status === 401 && config.onUnauthorized && attempt === 0) {
|
|
88
|
+
await config.onUnauthorized();
|
|
89
|
+
const refreshedHeaders = await buildHeaders(config, options.headers);
|
|
90
|
+
const retryResponse = await fetch(fullUrl, { ...options, headers: refreshedHeaders });
|
|
91
|
+
const retryBody = await parseBody(retryResponse);
|
|
92
|
+
if (retryResponse.status >= 400) {
|
|
93
|
+
throw new ClientError(retryResponse.status, fullUrl, retryBody);
|
|
94
|
+
}
|
|
95
|
+
return retryBody;
|
|
96
|
+
}
|
|
97
|
+
// Non-retryable status — return or throw
|
|
98
|
+
if (!RETRYABLE_STATUSES.includes(response.status) || attempt >= maxRetries) {
|
|
99
|
+
const body = await parseBody(response);
|
|
100
|
+
if (response.status >= 400) {
|
|
101
|
+
throw new ClientError(response.status, fullUrl, body);
|
|
102
|
+
}
|
|
103
|
+
return body;
|
|
104
|
+
}
|
|
105
|
+
// Retryable — wait and retry
|
|
106
|
+
const retryAfter = parseRetryAfter(response.headers.get('Retry-After'));
|
|
107
|
+
const waitMs = retryAfter ?? addJitter(delay);
|
|
108
|
+
await sleep(waitMs);
|
|
109
|
+
delay = Math.min(delay * 2, 30_000);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (error instanceof ClientError)
|
|
113
|
+
throw error; // Don't retry client errors
|
|
114
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
115
|
+
if (attempt >= maxRetries)
|
|
116
|
+
throw lastError;
|
|
117
|
+
const waitMs = addJitter(delay);
|
|
118
|
+
await sleep(waitMs);
|
|
119
|
+
delay = Math.min(delay * 2, 30_000);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
throw lastError ?? new Error(`All retries exhausted for ${fullUrl}`);
|
|
123
|
+
};
|
|
124
|
+
exports.customFetch = customFetch;
|
|
125
|
+
async function parseBody(response) {
|
|
126
|
+
const contentType = response.headers.get('content-type');
|
|
127
|
+
if (contentType?.includes('application/json')) {
|
|
128
|
+
return response.json();
|
|
129
|
+
}
|
|
130
|
+
if (response.status === 204) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
return response.text();
|
|
134
|
+
}
|
|
135
|
+
function parseRetryAfter(value) {
|
|
136
|
+
if (!value)
|
|
137
|
+
return undefined;
|
|
138
|
+
const seconds = Number(value);
|
|
139
|
+
if (!isNaN(seconds) && seconds >= 0)
|
|
140
|
+
return seconds * 1000;
|
|
141
|
+
const date = new Date(value);
|
|
142
|
+
if (!isNaN(date.getTime()))
|
|
143
|
+
return Math.max(0, date.getTime() - Date.now());
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
function addJitter(delay) {
|
|
147
|
+
return delay + (Math.random() * 2 - 1) * delay * 0.25;
|
|
148
|
+
}
|
|
149
|
+
function sleep(ms) {
|
|
150
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
151
|
+
}
|
|
152
|
+
exports.default = exports.customFetch;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by orval v8.6.2 🍺
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Backlog API
|
|
5
|
+
* Canonical backlog items, readiness, dependencies and sync operations
|
|
6
|
+
* OpenAPI spec version: 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import type { AddCommentDto, BacklogCommentResponseDtoDataArrayEnvelope, BacklogCommentResponseDtoDataEnvelope, BacklogControllerCleanupByPipelineRunParams, BacklogControllerGetBoardParams, BacklogControllerGetItemTreeParams, BacklogControllerListItemsParams, BacklogControllerSearchItemsParams, BacklogControllerTagUsageParams, BacklogDependencyResponseDtoDataArrayEnvelope, BacklogDependencyResponseDtoDataEnvelope, BacklogItemResponseDtoDataArrayEnvelope, BacklogItemResponseDtoDataEnvelope, BacklogItemTreeNodeResponseDtoDataArrayEnvelope, BacklogReadyResponseDtoDataEnvelope, BoardColumnResponseDtoDataArrayEnvelope, BulkUpsertBacklogDto, BulkUpsertBacklogResponseDtoDataEnvelope, CreateBacklogItemDto, IntegrationFreshnessResponseDtoDataEnvelope, SetBacklogReadyDto, SetStatusDto, SyncResponseDtoDataEnvelope, TagUsageResponseDtoDataEnvelope, UpdateBacklogItemDto } from '../../models';
|
|
9
|
+
/**
|
|
10
|
+
* @summary Get tracker integration freshness metadata
|
|
11
|
+
*/
|
|
12
|
+
export declare const getBacklogControllerGetIntegrationFreshnessUrl: () => string;
|
|
13
|
+
export declare const backlogControllerGetIntegrationFreshness: (options?: RequestInit) => Promise<IntegrationFreshnessResponseDtoDataEnvelope>;
|
|
14
|
+
/**
|
|
15
|
+
* @summary Get tag usage counts for this project
|
|
16
|
+
*/
|
|
17
|
+
export declare const getBacklogControllerTagUsageUrl: (params?: BacklogControllerTagUsageParams) => string;
|
|
18
|
+
export declare const backlogControllerTagUsage: (params?: BacklogControllerTagUsageParams, options?: RequestInit) => Promise<TagUsageResponseDtoDataEnvelope>;
|
|
19
|
+
/**
|
|
20
|
+
* @summary List backlog items for project
|
|
21
|
+
*/
|
|
22
|
+
export declare const getBacklogControllerListItemsUrl: (params?: BacklogControllerListItemsParams) => string;
|
|
23
|
+
export declare const backlogControllerListItems: (params?: BacklogControllerListItemsParams, options?: RequestInit) => Promise<BacklogItemResponseDtoDataArrayEnvelope>;
|
|
24
|
+
/**
|
|
25
|
+
* @summary Create backlog item
|
|
26
|
+
*/
|
|
27
|
+
export declare const getBacklogControllerCreateItemUrl: () => string;
|
|
28
|
+
export declare const backlogControllerCreateItem: (createBacklogItemDto: CreateBacklogItemDto, options?: RequestInit) => Promise<BacklogItemResponseDtoDataEnvelope>;
|
|
29
|
+
/**
|
|
30
|
+
* @summary Get hierarchical item tree (epic → stories → tasks)
|
|
31
|
+
*/
|
|
32
|
+
export declare const getBacklogControllerGetItemTreeUrl: (params?: BacklogControllerGetItemTreeParams) => string;
|
|
33
|
+
export declare const backlogControllerGetItemTree: (params?: BacklogControllerGetItemTreeParams, options?: RequestInit) => Promise<BacklogItemTreeNodeResponseDtoDataArrayEnvelope>;
|
|
34
|
+
/**
|
|
35
|
+
* @summary Search backlog items by text
|
|
36
|
+
*/
|
|
37
|
+
export declare const getBacklogControllerSearchItemsUrl: (params?: BacklogControllerSearchItemsParams) => string;
|
|
38
|
+
export declare const backlogControllerSearchItems: (params?: BacklogControllerSearchItemsParams, options?: RequestInit) => Promise<BacklogItemResponseDtoDataArrayEnvelope>;
|
|
39
|
+
/**
|
|
40
|
+
* @summary Get a single backlog item by ID
|
|
41
|
+
*/
|
|
42
|
+
export declare const getBacklogControllerGetItemUrl: (id: string) => string;
|
|
43
|
+
export declare const backlogControllerGetItem: (id: string, options?: RequestInit) => Promise<BacklogItemResponseDtoDataEnvelope>;
|
|
44
|
+
/**
|
|
45
|
+
* @summary Update backlog item
|
|
46
|
+
*/
|
|
47
|
+
export declare const getBacklogControllerUpdateItemUrl: (id: string) => string;
|
|
48
|
+
export declare const backlogControllerUpdateItem: (id: string, updateBacklogItemDto: UpdateBacklogItemDto, options?: RequestInit) => Promise<BacklogItemResponseDtoDataEnvelope>;
|
|
49
|
+
/**
|
|
50
|
+
* @summary Delete a single backlog item
|
|
51
|
+
*/
|
|
52
|
+
export declare const getBacklogControllerDeleteItemUrl: (id: string) => string;
|
|
53
|
+
export declare const backlogControllerDeleteItem: (id: string, options?: RequestInit) => Promise<unknown>;
|
|
54
|
+
/**
|
|
55
|
+
* @summary Bulk upsert backlog items — create or update by externalId
|
|
56
|
+
*/
|
|
57
|
+
export declare const getBacklogControllerBulkUpsertUrl: () => string;
|
|
58
|
+
export declare const backlogControllerBulkUpsert: (bulkUpsertBacklogDto: BulkUpsertBacklogDto, options?: RequestInit) => Promise<BulkUpsertBacklogResponseDtoDataEnvelope>;
|
|
59
|
+
/**
|
|
60
|
+
* @summary Set item status (kanban column move)
|
|
61
|
+
*/
|
|
62
|
+
export declare const getBacklogControllerSetItemStatusUrl: (id: string) => string;
|
|
63
|
+
export declare const backlogControllerSetItemStatus: (id: string, setStatusDto: SetStatusDto, options?: RequestInit) => Promise<BacklogItemResponseDtoDataEnvelope>;
|
|
64
|
+
/**
|
|
65
|
+
* @summary Set backlog ready state
|
|
66
|
+
*/
|
|
67
|
+
export declare const getBacklogControllerSetReadyUrl: (id: string) => string;
|
|
68
|
+
export declare const backlogControllerSetReady: (id: string, setBacklogReadyDto: SetBacklogReadyDto, options?: RequestInit) => Promise<BacklogReadyResponseDtoDataEnvelope>;
|
|
69
|
+
/**
|
|
70
|
+
* @summary List comments for a backlog item
|
|
71
|
+
*/
|
|
72
|
+
export declare const getBacklogControllerListCommentsUrl: (id: string) => string;
|
|
73
|
+
export declare const backlogControllerListComments: (id: string, options?: RequestInit) => Promise<BacklogCommentResponseDtoDataArrayEnvelope>;
|
|
74
|
+
/**
|
|
75
|
+
* @summary Add a comment to a backlog item
|
|
76
|
+
*/
|
|
77
|
+
export declare const getBacklogControllerAddCommentUrl: (id: string) => string;
|
|
78
|
+
export declare const backlogControllerAddComment: (id: string, addCommentDto: AddCommentDto, options?: RequestInit) => Promise<BacklogCommentResponseDtoDataEnvelope>;
|
|
79
|
+
/**
|
|
80
|
+
* @summary List dependencies for a backlog item
|
|
81
|
+
*/
|
|
82
|
+
export declare const getBacklogControllerListDependenciesUrl: (id: string) => string;
|
|
83
|
+
export declare const backlogControllerListDependencies: (id: string, options?: RequestInit) => Promise<BacklogDependencyResponseDtoDataArrayEnvelope>;
|
|
84
|
+
/**
|
|
85
|
+
* @summary Add a dependency to a backlog item
|
|
86
|
+
*/
|
|
87
|
+
export declare const getBacklogControllerAddDependencyUrl: (id: string) => string;
|
|
88
|
+
export declare const backlogControllerAddDependency: (id: string, options?: RequestInit) => Promise<BacklogDependencyResponseDtoDataEnvelope>;
|
|
89
|
+
/**
|
|
90
|
+
* @summary Remove a dependency from a backlog item
|
|
91
|
+
*/
|
|
92
|
+
export declare const getBacklogControllerRemoveDependencyUrl: (id: string, depId: string) => string;
|
|
93
|
+
export declare const backlogControllerRemoveDependency: (id: string, depId: string, options?: RequestInit) => Promise<unknown>;
|
|
94
|
+
/**
|
|
95
|
+
* @summary Get kanban board — items grouped by status columns
|
|
96
|
+
*/
|
|
97
|
+
export declare const getBacklogControllerGetBoardUrl: (params?: BacklogControllerGetBoardParams) => string;
|
|
98
|
+
export declare const backlogControllerGetBoard: (params?: BacklogControllerGetBoardParams, options?: RequestInit) => Promise<BoardColumnResponseDtoDataArrayEnvelope>;
|
|
99
|
+
/**
|
|
100
|
+
* @summary Pull backlog sync from Jira
|
|
101
|
+
*/
|
|
102
|
+
export declare const getBacklogControllerSyncPullUrl: () => string;
|
|
103
|
+
export declare const backlogControllerSyncPull: (options?: RequestInit) => Promise<SyncResponseDtoDataEnvelope>;
|
|
104
|
+
/**
|
|
105
|
+
* @summary Push backlog sync to Jira
|
|
106
|
+
*/
|
|
107
|
+
export declare const getBacklogControllerSyncPushUrl: () => string;
|
|
108
|
+
export declare const backlogControllerSyncPush: (options?: RequestInit) => Promise<SyncResponseDtoDataEnvelope>;
|
|
109
|
+
/**
|
|
110
|
+
* @summary Delete backlog items created during a specific pipeline run (pipeline stop cleanup)
|
|
111
|
+
*/
|
|
112
|
+
export declare const getBacklogControllerCleanupByPipelineRunUrl: (params: BacklogControllerCleanupByPipelineRunParams) => string;
|
|
113
|
+
export declare const backlogControllerCleanupByPipelineRun: (params: BacklogControllerCleanupByPipelineRunParams, options?: RequestInit) => Promise<unknown>;
|