@elisra-devops/docgen-data-provider 1.136.7 → 1.137.1

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.
@@ -8,4 +8,5 @@ export default class MangementDataProvider {
8
8
  GetProjectByID(projectID: string): Promise<any>;
9
9
  GetUserProfile(): Promise<any>;
10
10
  CheckOrgUrlValidity(token?: string): Promise<any>;
11
+ GetIdentityById(identityId: string): Promise<any>;
11
12
  }
@@ -58,6 +58,15 @@ class MangementDataProvider {
58
58
  // Use provided token or empty string for URL-only validation
59
59
  return tfs_1.TFSServices.getItemContent(url, token || '', 'get', null, null, false);
60
60
  }
61
+ // Resolves the AD domain/account for an on-prem, Windows-integrated-auth
62
+ // identity via the documented Identities REST API. Works with both PAT
63
+ // and bearer tokens — TFSServices.getItemContent/applyAuth already
64
+ // auto-detects which one it was given. printError=false: failure here is
65
+ // the EXPECTED, common case (any cloud/Entra-backed org), not a real error.
66
+ async GetIdentityById(identityId) {
67
+ const url = `${this.orgUrl}_apis/identities?identityIds=${encodeURIComponent(identityId)}&queryMembership=None&api-version=6.0`;
68
+ return tfs_1.TFSServices.getItemContent(url, this.token, 'get', null, null, false);
69
+ }
61
70
  }
62
71
  exports.default = MangementDataProvider;
63
72
  //# sourceMappingURL=MangementDataProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MangementDataProvider.js","sourceRoot":"","sources":["../../src/modules/MangementDataProvider.ts"],"names":[],"mappings":";;AAAA,wCAA6C;AAC7C,4CAAqC;AAErC,MAAqB,qBAAqB;IAIxC,YAAY,MAAc,EAAE,KAAa;QAHzC,WAAM,GAAW,EAAE,CAAC;QACpB,UAAK,GAAW,EAAE,CAAC;QAGjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,GAAG,GAAW,GAAG,IAAI,CAAC,MAAM,iCAAiC,CAAC;QAClE,IAAI,GAAG,GAAQ,MAAM,iBAAW,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,WAAW;QACf,IAAI,UAAU,GAAW,GAAG,IAAI,CAAC,MAAM,0BAA0B,CAAC;QAClE,IAAI,QAAQ,GAAQ,MAAM,iBAAW,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,6CAA6C;IAC7C,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACxC,IAAI,CAAC;YACH,IAAI,QAAQ,GAAQ,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7C,yEAAyE;YACzE,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChD,gBAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;gBACvE,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW;oBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gBAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClB,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,cAAc,CAAC,SAAiB;QACpC,IAAI,UAAU,GAAW,GAAG,IAAI,CAAC,MAAM,kBAAkB,SAAS,EAAE,CAAC;QACrE,IAAI,OAAO,GAAQ,MAAM,iBAAW,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,GAAG,GAAW,GAAG,IAAI,CAAC,MAAM,mCAAmC,CAAC;QACpE,OAAO,iBAAW,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACrD,CAAC;IAED,iEAAiE;IACjE,mDAAmD;IACnD,wDAAwD;IACxD,KAAK,CAAC,mBAAmB,CAAC,KAAc;QACtC,IAAI,GAAG,GAAW,GAAG,IAAI,CAAC,MAAM,sBAAsB,CAAC;QACvD,6DAA6D;QAC7D,OAAO,iBAAW,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;CACF;AA7DD,wCA6DC"}
1
+ {"version":3,"file":"MangementDataProvider.js","sourceRoot":"","sources":["../../src/modules/MangementDataProvider.ts"],"names":[],"mappings":"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"}
@@ -1575,15 +1575,52 @@ class TicketsDataProvider {
1575
1575
  const workItemsBatchUrl = this.appendApiVersion(`${this.orgUrl}${project}/_apis/wit/workitemsbatch`, apiVersion);
1576
1576
  const idChunks = this.chunkHistoricalWorkItemIds(ids);
1577
1577
  try {
1578
- const batchResponses = await Promise.all(idChunks.map((idChunk) => this.limit(() => tfs_1.TFSServices.getItemContent(workItemsBatchUrl, this.token, 'post', {
1579
- ids: idChunk,
1580
- asOf,
1581
- $expand: 'Relations',
1582
- fields: HISTORICAL_WORK_ITEM_FIELDS,
1583
- }))));
1578
+ const chunkResults = await Promise.all(idChunks.map((idChunk) =>
1579
+ // ADO rejects a workitemsbatch request that combines `fields` with
1580
+ // `$expand` in the same call ("the expand parameter can not be used
1581
+ // with the fields parameter"), so fields and relations are fetched
1582
+ // in two separate batched passes and merged by id below.
1583
+ // errorPolicy: 'Omit' keeps one inaccessible/deleted work item from
1584
+ // failing the whole chunk (ADO's default is 'Fail'), matching the
1585
+ // per-item fallback's tolerance for missing items.
1586
+ // Each pass gets its own this.limit(...) slot (rather than wrapping
1587
+ // both in one) so the two concurrent calls per chunk still count as
1588
+ // two units against the shared concurrency cap, not one — otherwise
1589
+ // the real ceiling on simultaneous ADO calls would silently double.
1590
+ Promise.all([
1591
+ this.limit(() => tfs_1.TFSServices.getItemContent(workItemsBatchUrl, this.token, 'post', {
1592
+ ids: idChunk,
1593
+ asOf,
1594
+ fields: HISTORICAL_WORK_ITEM_FIELDS,
1595
+ errorPolicy: 'Omit',
1596
+ })),
1597
+ this.limit(() => tfs_1.TFSServices.getItemContent(workItemsBatchUrl, this.token, 'post', {
1598
+ ids: idChunk,
1599
+ asOf,
1600
+ $expand: 'Relations',
1601
+ errorPolicy: 'Omit',
1602
+ })),
1603
+ ]).then(([fieldsBatch, relationsBatch]) => {
1604
+ const relationsById = new Map();
1605
+ (Array.isArray(relationsBatch === null || relationsBatch === void 0 ? void 0 : relationsBatch.value) ? relationsBatch.value : []).forEach((item) => {
1606
+ const relId = Number(item === null || item === void 0 ? void 0 : item.id);
1607
+ if (Number.isFinite(relId)) {
1608
+ relationsById.set(relId, Array.isArray(item === null || item === void 0 ? void 0 : item.relations) ? item.relations : []);
1609
+ }
1610
+ });
1611
+ const fieldsValue = Array.isArray(fieldsBatch === null || fieldsBatch === void 0 ? void 0 : fieldsBatch.value) ? fieldsBatch.value : [];
1612
+ const returnedIds = new Set(fieldsValue.map((item) => Number(item === null || item === void 0 ? void 0 : item.id)));
1613
+ const items = fieldsValue.map((item) => (Object.assign(Object.assign({}, item), { relations: relationsById.get(Number(item === null || item === void 0 ? void 0 : item.id)) || [] })));
1614
+ const skippedWorkItemIds = idChunk.filter((id) => !returnedIds.has(id));
1615
+ if (skippedWorkItemIds.length > 0) {
1616
+ logger_1.default.warn(`[historical-workitems] workitemsbatch omitted ${skippedWorkItemIds.length} ` +
1617
+ `inaccessible/missing work item(s) for asOf ${asOf}: ${skippedWorkItemIds.join(', ')}`);
1618
+ }
1619
+ return { items, skippedWorkItemIds };
1620
+ })));
1584
1621
  return {
1585
- items: batchResponses.flatMap((batch) => (Array.isArray(batch === null || batch === void 0 ? void 0 : batch.value) ? batch.value : [])),
1586
- skippedWorkItemIds: [],
1622
+ items: chunkResults.flatMap((chunk) => chunk.items),
1623
+ skippedWorkItemIds: chunkResults.flatMap((chunk) => chunk.skippedWorkItemIds),
1587
1624
  };
1588
1625
  }
1589
1626
  catch (error) {