@acorex/connectivity 21.0.0-next.2 → 21.0.0-next.21

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.
Files changed (56) hide show
  1. package/api/index.d.ts +6 -65
  2. package/fesm2022/{acorex-connectivity-api-execute.command-CQt_HF1B.mjs → acorex-connectivity-api-execute.command-Di850KiF.mjs} +7 -7
  3. package/fesm2022/acorex-connectivity-api-execute.command-Di850KiF.mjs.map +1 -0
  4. package/fesm2022/acorex-connectivity-api.mjs +128 -206
  5. package/fesm2022/acorex-connectivity-api.mjs.map +1 -1
  6. package/fesm2022/acorex-connectivity-mock-assign-to-manager.command-T6-ao4e9.mjs +66 -0
  7. package/fesm2022/acorex-connectivity-mock-assign-to-manager.command-T6-ao4e9.mjs.map +1 -0
  8. package/fesm2022/{acorex-connectivity-mock-category-with-items.query-Dsxj98tX.mjs → acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs} +4 -4
  9. package/fesm2022/{acorex-connectivity-mock-category-with-items.query-Dsxj98tX.mjs.map → acorex-connectivity-mock-category-with-items.query-KB7GIYeb.mjs.map} +1 -1
  10. package/fesm2022/acorex-connectivity-mock-check-permission.command-C-AZTcHP.mjs +53 -0
  11. package/fesm2022/acorex-connectivity-mock-check-permission.command-C-AZTcHP.mjs.map +1 -0
  12. package/fesm2022/acorex-connectivity-mock-complete-signature-process.command-CHci1rOa.mjs +80 -0
  13. package/fesm2022/acorex-connectivity-mock-complete-signature-process.command-CHci1rOa.mjs.map +1 -0
  14. package/fesm2022/{acorex-connectivity-mock-distribution-record.command-DRiDwlqN.mjs → acorex-connectivity-mock-distribution-record.command-DMoZvago.mjs} +4 -4
  15. package/fesm2022/{acorex-connectivity-mock-distribution-record.command-DRiDwlqN.mjs.map → acorex-connectivity-mock-distribution-record.command-DMoZvago.mjs.map} +1 -1
  16. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-B1TrIBvU.mjs +115 -0
  17. package/fesm2022/acorex-connectivity-mock-get-application-versions-chart-data.query-B1TrIBvU.mjs.map +1 -0
  18. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs +163 -0
  19. package/fesm2022/acorex-connectivity-mock-get-application-versions-timeline.query-CvNjA4OH.mjs.map +1 -0
  20. package/fesm2022/acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs +213 -0
  21. package/fesm2022/acorex-connectivity-mock-get-employee-list.query--f2M5RgC.mjs.map +1 -0
  22. package/fesm2022/acorex-connectivity-mock-get-location-list.query-Cz55arFF.mjs +209 -0
  23. package/fesm2022/acorex-connectivity-mock-get-location-list.query-Cz55arFF.mjs.map +1 -0
  24. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-C7v7D4ep.mjs +186 -0
  25. package/fesm2022/acorex-connectivity-mock-get-product-chart-data.query-C7v7D4ep.mjs.map +1 -0
  26. package/fesm2022/acorex-connectivity-mock-get-product-list.query-DTj8RYwR.mjs +246 -0
  27. package/fesm2022/acorex-connectivity-mock-get-product-list.query-DTj8RYwR.mjs.map +1 -0
  28. package/fesm2022/acorex-connectivity-mock-get-product-pdf-data.query-DdLhRbP5.mjs +192 -0
  29. package/fesm2022/acorex-connectivity-mock-get-product-pdf-data.query-DdLhRbP5.mjs.map +1 -0
  30. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-ybmzmVl5.mjs +56 -0
  31. package/fesm2022/acorex-connectivity-mock-get-subscriptions-chart-data.query-ybmzmVl5.mjs.map +1 -0
  32. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-kciEUx7d.mjs +246 -0
  33. package/fesm2022/acorex-connectivity-mock-get-subscriptions-timeline.query-kciEUx7d.mjs.map +1 -0
  34. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-BDfrwf5Z.mjs +258 -0
  35. package/fesm2022/acorex-connectivity-mock-get-tenant-application-access.query-BDfrwf5Z.mjs.map +1 -0
  36. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-BD4T2loB.mjs +56 -0
  37. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-chart-data.query-BD4T2loB.mjs.map +1 -0
  38. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-CMJ8W3Ns.mjs +294 -0
  39. package/fesm2022/acorex-connectivity-mock-get-tenant-registration-timeline.query-CMJ8W3Ns.mjs.map +1 -0
  40. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-C-gCUjbX.mjs +212 -0
  41. package/fesm2022/acorex-connectivity-mock-get-tenant-user-distribution.query-C-gCUjbX.mjs.map +1 -0
  42. package/fesm2022/acorex-connectivity-mock-notify-signers.command-DLMsWjWQ.mjs +69 -0
  43. package/fesm2022/acorex-connectivity-mock-notify-signers.command-DLMsWjWQ.mjs.map +1 -0
  44. package/fesm2022/acorex-connectivity-mock-request-signature.command-JNkj9-Yz.mjs +72 -0
  45. package/fesm2022/acorex-connectivity-mock-request-signature.command-JNkj9-Yz.mjs.map +1 -0
  46. package/fesm2022/{acorex-connectivity-mock-sample.command-CkH5bmEs.mjs → acorex-connectivity-mock-sample.command-CyrjdvEA.mjs} +4 -4
  47. package/fesm2022/{acorex-connectivity-mock-sample.command-CkH5bmEs.mjs.map → acorex-connectivity-mock-sample.command-CyrjdvEA.mjs.map} +1 -1
  48. package/fesm2022/acorex-connectivity-mock-validate-all-signatures.command-xKr94NrA.mjs +81 -0
  49. package/fesm2022/acorex-connectivity-mock-validate-all-signatures.command-xKr94NrA.mjs.map +1 -0
  50. package/fesm2022/acorex-connectivity-mock.mjs +63874 -45210
  51. package/fesm2022/acorex-connectivity-mock.mjs.map +1 -1
  52. package/fesm2022/acorex-connectivity-utils.mjs +7 -7
  53. package/fesm2022/acorex-connectivity-utils.mjs.map +1 -1
  54. package/mock/index.d.ts +986 -1839
  55. package/package.json +6 -6
  56. package/fesm2022/acorex-connectivity-api-execute.command-CQt_HF1B.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-subscriptions-chart-data.query-ybmzmVl5.mjs","sources":["../tmp-esm2022/mock/lib/tenant-management/reports/get-subscriptions-chart-data.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { GetSubscriptionsTimelineQuery } from './get-subscriptions-timeline.query';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetSubscriptionsChartDataQuery {\n constructor() {\n this.subscriptionsTimelineQuery = inject(GetSubscriptionsTimelineQuery);\n }\n async fetch(input) {\n // Get all subscription timeline data (no pagination for charts)\n const timelineResult = await this.subscriptionsTimelineQuery.fetch({\n skip: 0,\n take: 10000,\n filters: input.filters,\n logic: input.logic,\n });\n // Group by month\n const monthGroups = new Map();\n for (const item of timelineResult.items) {\n const monthKey = `${item.year}-${String(item.monthNumber).padStart(2, '0')}`;\n if (!monthGroups.has(monthKey)) {\n monthGroups.set(monthKey, {\n month: item.month,\n year: item.year,\n quarter: item.quarter,\n subscriptionCount: 0,\n });\n }\n const group = monthGroups.get(monthKey);\n group.subscriptionCount++;\n }\n // Convert to array and sort by date\n const results = Array.from(monthGroups.values()).sort((a, b) => {\n if (a.year !== b.year)\n return a.year - b.year;\n const monthA = new Date(`${a.month} 1, ${a.year}`).getMonth();\n const monthB = new Date(`${b.month} 1, ${b.year}`).getMonth();\n return monthA - monthB;\n });\n return {\n items: results,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetSubscriptionsChartDataQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetSubscriptionsChartDataQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetSubscriptionsChartDataQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN1YnNjcmlwdGlvbnMtY2hhcnQtZGF0YS5xdWVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29ubmVjdGl2aXR5L21vY2svc3JjL2xpYi90ZW5hbnQtbWFuYWdlbWVudC9yZXBvcnRzL2dldC1zdWJzY3JpcHRpb25zLWNoYXJ0LWRhdGEucXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBd0JuRixZQUFZO0FBS1osTUFBTSxPQUFPLDhCQUE4QjtJQUgzQztRQU1tQiwrQkFBMEIsR0FBRyxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQTBDckY7SUF4Q0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFnRDtRQUMxRCxnRUFBZ0U7UUFDaEUsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDO1lBQ2pFLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLEtBQUs7WUFDWCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1NBQ25CLENBQUMsQ0FBQztRQUVILGlCQUFpQjtRQUNqQixNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBd0MsQ0FBQztRQUVwRSxLQUFLLE1BQU0sSUFBSSxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFFN0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7b0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztvQkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDckIsaUJBQWlCLEVBQUUsQ0FBQztpQkFDckIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7WUFDekMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUVELG9DQUFvQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3RCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUk7Z0JBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlELE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxPQUFPLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPO1lBQ0wsS0FBSyxFQUFFLE9BQU87U0FDZixDQUFDO0lBQ0osQ0FBQzsrR0E1Q1UsOEJBQThCO21IQUE5Qiw4QkFBOEIsY0FGN0IsTUFBTTs7NEZBRVAsOEJBQThCO2tCQUgxQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQUXVlcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnlJbnB1dCB9IGZyb20gJy4vZ2V0LXN1YnNjcmlwdGlvbnMtdGltZWxpbmUucXVlcnknO1xuaW1wb3J0IHsgR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnkgfSBmcm9tICcuL2dldC1zdWJzY3JpcHRpb25zLXRpbWVsaW5lLnF1ZXJ5JztcblxuLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBJbnB1dC9PdXRwdXQgVHlwZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U3Vic2NyaXB0aW9uc0NoYXJ0RGF0YVF1ZXJ5SW5wdXQge1xuICBmaWx0ZXJzPzogQXJyYXk8e1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgb3BlcmF0b3I6IHsgdHlwZTogc3RyaW5nIH07XG4gICAgdmFsdWU6IGFueTtcbiAgfT47XG4gIGxvZ2ljPzogJ2FuZCcgfCAnb3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbnNDaGFydERhdGFSZXN1bHQge1xuICBtb250aDogc3RyaW5nO1xuICB5ZWFyOiBudW1iZXI7XG4gIHF1YXJ0ZXI6IHN0cmluZztcbiAgc3Vic2NyaXB0aW9uQ291bnQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTdWJzY3JpcHRpb25zQ2hhcnREYXRhUXVlcnlSZXN1bHQge1xuICBpdGVtczogU3Vic2NyaXB0aW9uc0NoYXJ0RGF0YVJlc3VsdFtdO1xufVxuXG4vLyNlbmRyZWdpb25cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdldFN1YnNjcmlwdGlvbnNDaGFydERhdGFRdWVyeVxuICBpbXBsZW1lbnRzIEFYUFF1ZXJ5PEdldFN1YnNjcmlwdGlvbnNDaGFydERhdGFRdWVyeUlucHV0LCBHZXRTdWJzY3JpcHRpb25zQ2hhcnREYXRhUXVlcnlSZXN1bHQ+XG57XG4gIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnkgPSBpbmplY3QoR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnkpO1xuXG4gIGFzeW5jIGZldGNoKGlucHV0OiBHZXRTdWJzY3JpcHRpb25zQ2hhcnREYXRhUXVlcnlJbnB1dCB8IGFueSk6IFByb21pc2U8R2V0U3Vic2NyaXB0aW9uc0NoYXJ0RGF0YVF1ZXJ5UmVzdWx0PiB7XG4gICAgLy8gR2V0IGFsbCBzdWJzY3JpcHRpb24gdGltZWxpbmUgZGF0YSAobm8gcGFnaW5hdGlvbiBmb3IgY2hhcnRzKVxuICAgIGNvbnN0IHRpbWVsaW5lUmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeS5mZXRjaCh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsXG4gICAgICBmaWx0ZXJzOiBpbnB1dC5maWx0ZXJzLFxuICAgICAgbG9naWM6IGlucHV0LmxvZ2ljLFxuICAgIH0pO1xuXG4gICAgLy8gR3JvdXAgYnkgbW9udGhcbiAgICBjb25zdCBtb250aEdyb3VwcyA9IG5ldyBNYXA8c3RyaW5nLCBTdWJzY3JpcHRpb25zQ2hhcnREYXRhUmVzdWx0PigpO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRpbWVsaW5lUmVzdWx0Lml0ZW1zKSB7XG4gICAgICBjb25zdCBtb250aEtleSA9IGAke2l0ZW0ueWVhcn0tJHtTdHJpbmcoaXRlbS5tb250aE51bWJlcikucGFkU3RhcnQoMiwgJzAnKX1gO1xuXG4gICAgICBpZiAoIW1vbnRoR3JvdXBzLmhhcyhtb250aEtleSkpIHtcbiAgICAgICAgbW9udGhHcm91cHMuc2V0KG1vbnRoS2V5LCB7XG4gICAgICAgICAgbW9udGg6IGl0ZW0ubW9udGgsXG4gICAgICAgICAgeWVhcjogaXRlbS55ZWFyLFxuICAgICAgICAgIHF1YXJ0ZXI6IGl0ZW0ucXVhcnRlcixcbiAgICAgICAgICBzdWJzY3JpcHRpb25Db3VudDogMCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdyb3VwID0gbW9udGhHcm91cHMuZ2V0KG1vbnRoS2V5KSE7XG4gICAgICBncm91cC5zdWJzY3JpcHRpb25Db3VudCsrO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdG8gYXJyYXkgYW5kIHNvcnQgYnkgZGF0ZVxuICAgIGNvbnN0IHJlc3VsdHMgPSBBcnJheS5mcm9tKG1vbnRoR3JvdXBzLnZhbHVlcygpKS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBpZiAoYS55ZWFyICE9PSBiLnllYXIpIHJldHVybiBhLnllYXIgLSBiLnllYXI7XG4gICAgICBjb25zdCBtb250aEEgPSBuZXcgRGF0ZShgJHthLm1vbnRofSAxLCAke2EueWVhcn1gKS5nZXRNb250aCgpO1xuICAgICAgY29uc3QgbW9udGhCID0gbmV3IERhdGUoYCR7Yi5tb250aH0gMSwgJHtiLnllYXJ9YCkuZ2V0TW9udGgoKTtcbiAgICAgIHJldHVybiBtb250aEEgLSBtb250aEI7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3VsdHMsXG4gICAgfTtcbiAgfVxufVxuXG4iXX0="],"names":[],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
4
+ import { AXPSystemStatusType } from '@acorex/platform/common';
5
+ import { RootConfig } from '@acorex/modules/subscription-management';
6
+ import { RootConfig as RootConfig$1 } from '@acorex/modules/tenant-management';
7
+
8
+ //#endregion
9
+ class GetSubscriptionsTimelineQuery {
10
+ constructor() {
11
+ this.entityService = inject(AXPEntityService);
12
+ this.subscriptionService = this.entityService
13
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.subscription.name}`)
14
+ .data();
15
+ this.tenantService = this.entityService
16
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.tenant.name}`)
17
+ .data();
18
+ }
19
+ async fetch(input) {
20
+ // Extract filters from AXPFilterClause format
21
+ const extractedFilters = this.extractSubscriptionFilters(input.filters);
22
+ const filterLogic = input.filters?.logic || input.logic || 'and';
23
+ // Separate custom filters from entity filters
24
+ const entityFilters = [];
25
+ let dateRangeFilter;
26
+ if (extractedFilters && extractedFilters.length > 0) {
27
+ for (const filter of extractedFilters) {
28
+ if (filter.field === 'dateRange') {
29
+ dateRangeFilter = filter.value;
30
+ }
31
+ else {
32
+ entityFilters.push(filter);
33
+ }
34
+ }
35
+ }
36
+ // Get all subscriptions
37
+ const subscriptionsResult = await this.subscriptionService.query({
38
+ skip: 0,
39
+ take: 10000,
40
+ filter: entityFilters.length > 0
41
+ ? {
42
+ logic: filterLogic,
43
+ filters: entityFilters,
44
+ }
45
+ : undefined,
46
+ });
47
+ let subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');
48
+ // Get all tenants for lookup
49
+ const tenantsResult = await this.tenantService.query({
50
+ skip: 0,
51
+ take: 10000,
52
+ });
53
+ const tenants = tenantsResult.items;
54
+ const tenantMap = new Map(tenants.map((t) => [t.id, t]));
55
+ // Apply date range filter if provided
56
+ if (dateRangeFilter) {
57
+ subscriptions = this.applyDateRangeFilter(subscriptions, dateRangeFilter);
58
+ }
59
+ const now = new Date();
60
+ // Build results
61
+ const results = [];
62
+ for (const subscription of subscriptions) {
63
+ const startDate = new Date(subscription.startDate);
64
+ const endDate = subscription.endDate ? new Date(subscription.endDate) : undefined;
65
+ // Calculate duration in days
66
+ const durationDays = endDate
67
+ ? Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))
68
+ : Math.ceil((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));
69
+ // Extract time period info from start date
70
+ const year = startDate.getFullYear();
71
+ const month = startDate.getMonth() + 1;
72
+ const monthName = startDate.toLocaleString('en-US', { month: 'long' });
73
+ const quarter = Math.ceil(month / 3);
74
+ const quarterName = `Q${quarter}`;
75
+ // Check if subscription is currently active
76
+ const isActive = subscription.statusId === AXPSystemStatusType.Active &&
77
+ startDate <= now &&
78
+ (!endDate || endDate >= now);
79
+ // Get tenant name
80
+ const tenant = tenantMap.get(subscription.subscriberId);
81
+ results.push({
82
+ subscriptionId: subscription.id,
83
+ subscriptionTitle: subscription.title || `${tenant?.title || 'Unknown'} - ${subscription.plan?.title || 'Unknown Plan'}`,
84
+ tenantId: subscription.subscriberId,
85
+ tenantName: tenant?.title || 'Unknown',
86
+ planId: subscription.planId,
87
+ planName: subscription.plan?.title || 'Unknown',
88
+ status: subscription.statusId || 'Unknown',
89
+ startDate: startDate,
90
+ startDateStr: startDate.toISOString(),
91
+ endDate: endDate,
92
+ endDateStr: endDate?.toISOString(),
93
+ durationDays: durationDays,
94
+ month: monthName,
95
+ monthNumber: month,
96
+ quarter: quarterName,
97
+ year: year,
98
+ isActive: isActive,
99
+ });
100
+ }
101
+ // Apply sorting if provided
102
+ if (input.sort && input.sort.length > 0) {
103
+ results.sort((a, b) => {
104
+ for (const sortField of input.sort) {
105
+ const field = sortField.field;
106
+ const aValue = a[field];
107
+ const bValue = b[field];
108
+ const dir = sortField.dir === 'asc' ? 1 : -1;
109
+ if (aValue === undefined && bValue === undefined)
110
+ continue;
111
+ if (aValue === undefined)
112
+ return 1 * dir;
113
+ if (bValue === undefined)
114
+ return -1 * dir;
115
+ // Handle date comparison
116
+ if (field === 'startDate') {
117
+ const aDate = a.startDate.getTime();
118
+ const bDate = b.startDate.getTime();
119
+ if (aDate < bDate)
120
+ return -1 * dir;
121
+ if (aDate > bDate)
122
+ return 1 * dir;
123
+ continue;
124
+ }
125
+ if (aValue < bValue)
126
+ return -1 * dir;
127
+ if (aValue > bValue)
128
+ return 1 * dir;
129
+ }
130
+ return 0;
131
+ });
132
+ }
133
+ else {
134
+ // Default sort by start date descending (newest first)
135
+ results.sort((a, b) => {
136
+ return b.startDate.getTime() - a.startDate.getTime();
137
+ });
138
+ }
139
+ // Apply pagination
140
+ const skip = input.skip || 0;
141
+ const take = input.take || 10;
142
+ const total = results.length;
143
+ const items = results.slice(skip, skip + take);
144
+ return {
145
+ items,
146
+ total,
147
+ };
148
+ }
149
+ //#region ---- Filter Extraction ----
150
+ /**
151
+ * Extract subscription-specific filters from AXPFilterClause format
152
+ * Maps report parameter paths to subscription entity field names
153
+ */
154
+ extractSubscriptionFilters(parameters) {
155
+ const filters = [];
156
+ const paramsAny = parameters;
157
+ if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {
158
+ return filters;
159
+ }
160
+ for (const filter of paramsAny.filters) {
161
+ if (!filter?.field || filter?.value === undefined || filter?.value === null) {
162
+ continue;
163
+ }
164
+ const field = filter.field;
165
+ const value = filter.value;
166
+ const operator = filter.operator || { type: 'equal' };
167
+ // Handle subscription-specific field mappings
168
+ if (field === 'planId') {
169
+ // Plan ID filter - can be array of IDs or single ID
170
+ if (Array.isArray(value) && value.length > 0) {
171
+ filters.push({
172
+ field: 'planId',
173
+ operator: { type: 'in' },
174
+ value: value,
175
+ });
176
+ }
177
+ else if (value) {
178
+ filters.push({
179
+ field: 'planId',
180
+ operator: { type: 'equal' },
181
+ value: value,
182
+ });
183
+ }
184
+ }
185
+ else if (field === 'statusId') {
186
+ // Status filter - skip 'all' value
187
+ if (value && value !== 'all') {
188
+ filters.push({
189
+ field: 'statusId',
190
+ operator: { type: 'equal' },
191
+ value: value,
192
+ });
193
+ }
194
+ }
195
+ else if (field === 'dateRange') {
196
+ // Date range filter - custom logic handled in query
197
+ filters.push({
198
+ field: 'dateRange',
199
+ operator: { type: 'equal' },
200
+ value: value,
201
+ });
202
+ }
203
+ else {
204
+ // Direct field mapping
205
+ filters.push({
206
+ field: field,
207
+ operator: operator,
208
+ value: value,
209
+ });
210
+ }
211
+ }
212
+ return filters;
213
+ }
214
+ //#endregion
215
+ //#region ---- Custom Filter Handlers ----
216
+ /**
217
+ * Apply date range filter to subscriptions
218
+ */
219
+ applyDateRangeFilter(subscriptions, dateRange) {
220
+ if (!dateRange || !dateRange.start || !dateRange.end) {
221
+ return subscriptions;
222
+ }
223
+ const startDate = new Date(dateRange.start);
224
+ const endDate = new Date(dateRange.end);
225
+ endDate.setHours(23, 59, 59, 999);
226
+ return subscriptions.filter((subscription) => {
227
+ const subStartDate = new Date(subscription.startDate);
228
+ const subEndDate = subscription.endDate ? new Date(subscription.endDate) : null;
229
+ // Check if subscription overlaps with the date range
230
+ return ((subStartDate >= startDate && subStartDate <= endDate) ||
231
+ (subEndDate && subEndDate >= startDate && subEndDate <= endDate) ||
232
+ (subStartDate <= startDate && (!subEndDate || subEndDate >= endDate)));
233
+ });
234
+ }
235
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetSubscriptionsTimelineQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
236
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetSubscriptionsTimelineQuery, providedIn: 'root' }); }
237
+ }
238
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetSubscriptionsTimelineQuery, decorators: [{
239
+ type: Injectable,
240
+ args: [{
241
+ providedIn: 'root',
242
+ }]
243
+ }] });
244
+
245
+ export { GetSubscriptionsTimelineQuery };
246
+ //# sourceMappingURL=acorex-connectivity-mock-get-subscriptions-timeline.query-kciEUx7d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-connectivity-mock-get-subscriptions-timeline.query-kciEUx7d.mjs","sources":["../tmp-esm2022/mock/lib/tenant-management/reports/get-subscriptions-timeline.query.js"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPSystemStatusType } from '@acorex/platform/common';\nimport { RootConfig as SubscriptionRootConfig } from '@acorex/modules/subscription-management';\nimport { RootConfig as TenantRootConfig } from '@acorex/modules/tenant-management';\nimport * as i0 from \"@angular/core\";\n//#endregion\nexport class GetSubscriptionsTimelineQuery {\n constructor() {\n this.entityService = inject(AXPEntityService);\n this.subscriptionService = this.entityService\n .withEntity(`${SubscriptionRootConfig.module.name}.${SubscriptionRootConfig.entities.subscription.name}`)\n .data();\n this.tenantService = this.entityService\n .withEntity(`${TenantRootConfig.module.name}.${TenantRootConfig.entities.tenant.name}`)\n .data();\n }\n async fetch(input) {\n // Extract filters from AXPFilterClause format\n const extractedFilters = this.extractSubscriptionFilters(input.filters);\n const filterLogic = input.filters?.logic || input.logic || 'and';\n // Separate custom filters from entity filters\n const entityFilters = [];\n let dateRangeFilter;\n if (extractedFilters && extractedFilters.length > 0) {\n for (const filter of extractedFilters) {\n if (filter.field === 'dateRange') {\n dateRangeFilter = filter.value;\n }\n else {\n entityFilters.push(filter);\n }\n }\n }\n // Get all subscriptions\n const subscriptionsResult = await this.subscriptionService.query({\n skip: 0,\n take: 10000,\n filter: entityFilters.length > 0\n ? {\n logic: filterLogic,\n filters: entityFilters,\n }\n : undefined,\n });\n let subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');\n // Get all tenants for lookup\n const tenantsResult = await this.tenantService.query({\n skip: 0,\n take: 10000,\n });\n const tenants = tenantsResult.items;\n const tenantMap = new Map(tenants.map((t) => [t.id, t]));\n // Apply date range filter if provided\n if (dateRangeFilter) {\n subscriptions = this.applyDateRangeFilter(subscriptions, dateRangeFilter);\n }\n const now = new Date();\n // Build results\n const results = [];\n for (const subscription of subscriptions) {\n const startDate = new Date(subscription.startDate);\n const endDate = subscription.endDate ? new Date(subscription.endDate) : undefined;\n // Calculate duration in days\n const durationDays = endDate\n ? Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))\n : Math.ceil((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));\n // Extract time period info from start date\n const year = startDate.getFullYear();\n const month = startDate.getMonth() + 1;\n const monthName = startDate.toLocaleString('en-US', { month: 'long' });\n const quarter = Math.ceil(month / 3);\n const quarterName = `Q${quarter}`;\n // Check if subscription is currently active\n const isActive = subscription.statusId === AXPSystemStatusType.Active &&\n startDate <= now &&\n (!endDate || endDate >= now);\n // Get tenant name\n const tenant = tenantMap.get(subscription.subscriberId);\n results.push({\n subscriptionId: subscription.id,\n subscriptionTitle: subscription.title || `${tenant?.title || 'Unknown'} - ${subscription.plan?.title || 'Unknown Plan'}`,\n tenantId: subscription.subscriberId,\n tenantName: tenant?.title || 'Unknown',\n planId: subscription.planId,\n planName: subscription.plan?.title || 'Unknown',\n status: subscription.statusId || 'Unknown',\n startDate: startDate,\n startDateStr: startDate.toISOString(),\n endDate: endDate,\n endDateStr: endDate?.toISOString(),\n durationDays: durationDays,\n month: monthName,\n monthNumber: month,\n quarter: quarterName,\n year: year,\n isActive: isActive,\n });\n }\n // Apply sorting if provided\n if (input.sort && input.sort.length > 0) {\n results.sort((a, b) => {\n for (const sortField of input.sort) {\n const field = sortField.field;\n const aValue = a[field];\n const bValue = b[field];\n const dir = sortField.dir === 'asc' ? 1 : -1;\n if (aValue === undefined && bValue === undefined)\n continue;\n if (aValue === undefined)\n return 1 * dir;\n if (bValue === undefined)\n return -1 * dir;\n // Handle date comparison\n if (field === 'startDate') {\n const aDate = a.startDate.getTime();\n const bDate = b.startDate.getTime();\n if (aDate < bDate)\n return -1 * dir;\n if (aDate > bDate)\n return 1 * dir;\n continue;\n }\n if (aValue < bValue)\n return -1 * dir;\n if (aValue > bValue)\n return 1 * dir;\n }\n return 0;\n });\n }\n else {\n // Default sort by start date descending (newest first)\n results.sort((a, b) => {\n return b.startDate.getTime() - a.startDate.getTime();\n });\n }\n // Apply pagination\n const skip = input.skip || 0;\n const take = input.take || 10;\n const total = results.length;\n const items = results.slice(skip, skip + take);\n return {\n items,\n total,\n };\n }\n //#region ---- Filter Extraction ----\n /**\n * Extract subscription-specific filters from AXPFilterClause format\n * Maps report parameter paths to subscription entity field names\n */\n extractSubscriptionFilters(parameters) {\n const filters = [];\n const paramsAny = parameters;\n if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {\n return filters;\n }\n for (const filter of paramsAny.filters) {\n if (!filter?.field || filter?.value === undefined || filter?.value === null) {\n continue;\n }\n const field = filter.field;\n const value = filter.value;\n const operator = filter.operator || { type: 'equal' };\n // Handle subscription-specific field mappings\n if (field === 'planId') {\n // Plan ID filter - can be array of IDs or single ID\n if (Array.isArray(value) && value.length > 0) {\n filters.push({\n field: 'planId',\n operator: { type: 'in' },\n value: value,\n });\n }\n else if (value) {\n filters.push({\n field: 'planId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else if (field === 'statusId') {\n // Status filter - skip 'all' value\n if (value && value !== 'all') {\n filters.push({\n field: 'statusId',\n operator: { type: 'equal' },\n value: value,\n });\n }\n }\n else if (field === 'dateRange') {\n // Date range filter - custom logic handled in query\n filters.push({\n field: 'dateRange',\n operator: { type: 'equal' },\n value: value,\n });\n }\n else {\n // Direct field mapping\n filters.push({\n field: field,\n operator: operator,\n value: value,\n });\n }\n }\n return filters;\n }\n //#endregion\n //#region ---- Custom Filter Handlers ----\n /**\n * Apply date range filter to subscriptions\n */\n applyDateRangeFilter(subscriptions, dateRange) {\n if (!dateRange || !dateRange.start || !dateRange.end) {\n return subscriptions;\n }\n const startDate = new Date(dateRange.start);\n const endDate = new Date(dateRange.end);\n endDate.setHours(23, 59, 59, 999);\n return subscriptions.filter((subscription) => {\n const subStartDate = new Date(subscription.startDate);\n const subEndDate = subscription.endDate ? new Date(subscription.endDate) : null;\n // Check if subscription overlaps with the date range\n return ((subStartDate >= startDate && subStartDate <= endDate) ||\n (subEndDate && subEndDate >= startDate && subEndDate <= endDate) ||\n (subStartDate <= startDate && (!subEndDate || subEndDate >= endDate)));\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetSubscriptionsTimelineQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetSubscriptionsTimelineQuery, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.16\", ngImport: i0, type: GetSubscriptionsTimelineQuery, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXN1YnNjcmlwdGlvbnMtdGltZWxpbmUucXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nvbm5lY3Rpdml0eS9tb2NrL3NyYy9saWIvdGVuYW50LW1hbmFnZW1lbnQvcmVwb3J0cy9nZXQtc3Vic2NyaXB0aW9ucy10aW1lbGluZS5xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUdsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxJQUFJLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQXlDbkYsWUFBWTtBQUtaLE1BQU0sT0FBTyw2QkFBNkI7SUFIMUM7UUFNbUIsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCx3QkFBbUIsR0FBRyxJQUFJLENBQUMsYUFBYTthQUM3QyxVQUFVLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDeEcsSUFBSSxFQUE0RCxDQUFDO1FBQzVELGtCQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDdkMsVUFBVSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3RGLElBQUksRUFBZ0QsQ0FBQztLQXVQekQ7SUFyUEMsS0FBSyxDQUFDLEtBQUss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Y0FGNUIsTUFBTTs7NEZBRVAsNkJBQTZCO2tCQUh6QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQUXVlcnkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3J1bnRpbWUnO1xuaW1wb3J0IHsgQVhQRW50aXR5U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWE1TdWJzY3JpcHRpb25NYW5hZ2VtZW50U3Vic2NyaXB0aW9uRW50aXR5TW9kZWwgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvc3Vic2NyaXB0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhNVGVuYW50TWFuYWdlbWVudFRlbmFudEVudGl0eU1vZGVsIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3RlbmFudC1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUFN5c3RlbVN0YXR1c1R5cGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBSb290Q29uZmlnIGFzIFN1YnNjcmlwdGlvblJvb3RDb25maWcgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvc3Vic2NyaXB0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyBhcyBUZW5hbnRSb290Q29uZmlnIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3RlbmFudC1tYW5hZ2VtZW50JztcblxuLy8jcmVnaW9uIC0tLS0gICBRdWVyeSBJbnB1dC9PdXRwdXQgVHlwZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnlJbnB1dCB7XG4gIHNraXA/OiBudW1iZXI7XG4gIHRha2U/OiBudW1iZXI7XG4gIHNvcnQ/OiBBcnJheTx7IGZpZWxkOiBzdHJpbmc7IGRpcjogJ2FzYycgfCAnZGVzYycgfT47XG4gIGZpbHRlcnM/OiBBcnJheTx7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBvcGVyYXRvcjogeyB0eXBlOiBzdHJpbmcgfTtcbiAgICB2YWx1ZTogYW55O1xuICB9PjtcbiAgbG9naWM/OiAnYW5kJyB8ICdvcic7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3Vic2NyaXB0aW9uc1RpbWVsaW5lUmVzdWx0IHtcbiAgc3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcbiAgc3Vic2NyaXB0aW9uVGl0bGU6IHN0cmluZztcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgdGVuYW50TmFtZTogc3RyaW5nO1xuICBwbGFuSWQ/OiBzdHJpbmc7XG4gIHBsYW5OYW1lOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBzdGFydERhdGU6IERhdGU7XG4gIHN0YXJ0RGF0ZVN0cjogc3RyaW5nO1xuICBlbmREYXRlPzogRGF0ZTtcbiAgZW5kRGF0ZVN0cj86IHN0cmluZztcbiAgZHVyYXRpb25EYXlzOiBudW1iZXI7XG4gIG1vbnRoOiBzdHJpbmc7XG4gIG1vbnRoTnVtYmVyOiBudW1iZXI7XG4gIHF1YXJ0ZXI6IHN0cmluZztcbiAgeWVhcjogbnVtYmVyO1xuICBpc0FjdGl2ZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZXRTdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeVJlc3VsdCB7XG4gIGl0ZW1zOiBTdWJzY3JpcHRpb25zVGltZWxpbmVSZXN1bHRbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRTdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeVxuICBpbXBsZW1lbnRzIEFYUFF1ZXJ5PEdldFN1YnNjcmlwdGlvbnNUaW1lbGluZVF1ZXJ5SW5wdXQsIEdldFN1YnNjcmlwdGlvbnNUaW1lbGluZVF1ZXJ5UmVzdWx0Plxue1xuICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eVNlcnZpY2UgPSBpbmplY3QoQVhQRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uU2VydmljZSA9IHRoaXMuZW50aXR5U2VydmljZVxuICAgIC53aXRoRW50aXR5KGAke1N1YnNjcmlwdGlvblJvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7U3Vic2NyaXB0aW9uUm9vdENvbmZpZy5lbnRpdGllcy5zdWJzY3JpcHRpb24ubmFtZX1gKVxuICAgIC5kYXRhPHN0cmluZywgQVhNU3Vic2NyaXB0aW9uTWFuYWdlbWVudFN1YnNjcmlwdGlvbkVudGl0eU1vZGVsPigpO1xuICBwcml2YXRlIHRlbmFudFNlcnZpY2UgPSB0aGlzLmVudGl0eVNlcnZpY2VcbiAgICAud2l0aEVudGl0eShgJHtUZW5hbnRSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke1RlbmFudFJvb3RDb25maWcuZW50aXRpZXMudGVuYW50Lm5hbWV9YClcbiAgICAuZGF0YTxzdHJpbmcsIEFYTVRlbmFudE1hbmFnZW1lbnRUZW5hbnRFbnRpdHlNb2RlbD4oKTtcblxuICBhc3luYyBmZXRjaChpbnB1dDogR2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnlJbnB1dCB8IGFueSk6IFByb21pc2U8R2V0U3Vic2NyaXB0aW9uc1RpbWVsaW5lUXVlcnlSZXN1bHQ+IHtcbiAgICAvLyBFeHRyYWN0IGZpbHRlcnMgZnJvbSBBWFBGaWx0ZXJDbGF1c2UgZm9ybWF0XG4gICAgY29uc3QgZXh0cmFjdGVkRmlsdGVycyA9IHRoaXMuZXh0cmFjdFN1YnNjcmlwdGlvbkZpbHRlcnMoaW5wdXQuZmlsdGVycyk7XG4gICAgY29uc3QgZmlsdGVyTG9naWMgPSAoaW5wdXQuZmlsdGVycyBhcyBhbnkpPy5sb2dpYyB8fCBpbnB1dC5sb2dpYyB8fCAnYW5kJztcblxuICAgIC8vIFNlcGFyYXRlIGN1c3RvbSBmaWx0ZXJzIGZyb20gZW50aXR5IGZpbHRlcnNcbiAgICBjb25zdCBlbnRpdHlGaWx0ZXJzOiBHZXRTdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeUlucHV0WydmaWx0ZXJzJ10gPSBbXTtcbiAgICBsZXQgZGF0ZVJhbmdlRmlsdGVyOiBhbnk7XG5cbiAgICBpZiAoZXh0cmFjdGVkRmlsdGVycyAmJiBleHRyYWN0ZWRGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGV4dHJhY3RlZEZpbHRlcnMpIHtcbiAgICAgICAgaWYgKGZpbHRlci5maWVsZCA9PT0gJ2RhdGVSYW5nZScpIHtcbiAgICAgICAgICBkYXRlUmFuZ2VGaWx0ZXIgPSBmaWx0ZXIudmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50aXR5RmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgYWxsIHN1YnNjcmlwdGlvbnNcbiAgICBjb25zdCBzdWJzY3JpcHRpb25zUmVzdWx0ID0gYXdhaXQgdGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXA6IDAsXG4gICAgICB0YWtlOiAxMDAwMCxcbiAgICAgIGZpbHRlcjpcbiAgICAgICAgZW50aXR5RmlsdGVycy5sZW5ndGggPiAwXG4gICAgICAgICAgPyAoe1xuICAgICAgICAgICAgbG9naWM6IGZpbHRlckxvZ2ljLFxuICAgICAgICAgICAgZmlsdGVyczogZW50aXR5RmlsdGVycyxcbiAgICAgICAgICB9IGFzIGFueSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGxldCBzdWJzY3JpcHRpb25zID0gc3Vic2NyaXB0aW9uc1Jlc3VsdC5pdGVtcy5maWx0ZXIoKHMpID0+IHMuc3Vic2NyaWJlclR5cGUgPT09ICdUZW5hbnQnKTtcblxuICAgIC8vIEdldCBhbGwgdGVuYW50cyBmb3IgbG9va3VwXG4gICAgY29uc3QgdGVuYW50c1Jlc3VsdCA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMTAwMDAsXG4gICAgfSk7XG4gICAgY29uc3QgdGVuYW50cyA9IHRlbmFudHNSZXN1bHQuaXRlbXM7XG4gICAgY29uc3QgdGVuYW50TWFwID0gbmV3IE1hcCh0ZW5hbnRzLm1hcCgodCkgPT4gW3QuaWQsIHRdKSk7XG5cbiAgICAvLyBBcHBseSBkYXRlIHJhbmdlIGZpbHRlciBpZiBwcm92aWRlZFxuICAgIGlmIChkYXRlUmFuZ2VGaWx0ZXIpIHtcbiAgICAgIHN1YnNjcmlwdGlvbnMgPSB0aGlzLmFwcGx5RGF0ZVJhbmdlRmlsdGVyKHN1YnNjcmlwdGlvbnMsIGRhdGVSYW5nZUZpbHRlcik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgIC8vIEJ1aWxkIHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzOiBTdWJzY3JpcHRpb25zVGltZWxpbmVSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2Ygc3Vic2NyaXB0aW9ucykge1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3Vic2NyaXB0aW9uLnN0YXJ0RGF0ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gc3Vic2NyaXB0aW9uLmVuZERhdGUgPyBuZXcgRGF0ZShzdWJzY3JpcHRpb24uZW5kRGF0ZSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBkdXJhdGlvbiBpbiBkYXlzXG4gICAgICBjb25zdCBkdXJhdGlvbkRheXMgPSBlbmREYXRlXG4gICAgICAgID8gTWF0aC5jZWlsKChlbmREYXRlLmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKVxuICAgICAgICA6IE1hdGguY2VpbCgobm93LmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCkpIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcblxuICAgICAgLy8gRXh0cmFjdCB0aW1lIHBlcmlvZCBpbmZvIGZyb20gc3RhcnQgZGF0ZVxuICAgICAgY29uc3QgeWVhciA9IHN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbW9udGggPSBzdGFydERhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICBjb25zdCBtb250aE5hbWUgPSBzdGFydERhdGUudG9Mb2NhbGVTdHJpbmcoJ2VuLVVTJywgeyBtb250aDogJ2xvbmcnIH0pO1xuICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbChtb250aCAvIDMpO1xuICAgICAgY29uc3QgcXVhcnRlck5hbWUgPSBgUSR7cXVhcnRlcn1gO1xuXG4gICAgICAvLyBDaGVjayBpZiBzdWJzY3JpcHRpb24gaXMgY3VycmVudGx5IGFjdGl2ZVxuICAgICAgY29uc3QgaXNBY3RpdmUgPVxuICAgICAgICBzdWJzY3JpcHRpb24uc3RhdHVzSWQgPT09IEFYUFN5c3RlbVN0YXR1c1R5cGUuQWN0aXZlICYmXG4gICAgICAgIHN0YXJ0RGF0ZSA8PSBub3cgJiZcbiAgICAgICAgKCFlbmREYXRlIHx8IGVuZERhdGUgPj0gbm93KTtcblxuICAgICAgLy8gR2V0IHRlbmFudCBuYW1lXG4gICAgICBjb25zdCB0ZW5hbnQgPSB0ZW5hbnRNYXAuZ2V0KHN1YnNjcmlwdGlvbi5zdWJzY3JpYmVySWQpO1xuXG4gICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICBzdWJzY3JpcHRpb25JZDogc3Vic2NyaXB0aW9uLmlkLFxuICAgICAgICBzdWJzY3JpcHRpb25UaXRsZTogc3Vic2NyaXB0aW9uLnRpdGxlIHx8IGAke3RlbmFudD8udGl0bGUgfHwgJ1Vua25vd24nfSAtICR7c3Vic2NyaXB0aW9uLnBsYW4/LnRpdGxlIHx8ICdVbmtub3duIFBsYW4nfWAsXG4gICAgICAgIHRlbmFudElkOiBzdWJzY3JpcHRpb24uc3Vic2NyaWJlcklkLFxuICAgICAgICB0ZW5hbnROYW1lOiB0ZW5hbnQ/LnRpdGxlIHx8ICdVbmtub3duJyxcbiAgICAgICAgcGxhbklkOiBzdWJzY3JpcHRpb24ucGxhbklkLFxuICAgICAgICBwbGFuTmFtZTogc3Vic2NyaXB0aW9uLnBsYW4/LnRpdGxlIHx8ICdVbmtub3duJyxcbiAgICAgICAgc3RhdHVzOiBzdWJzY3JpcHRpb24uc3RhdHVzSWQgfHwgJ1Vua25vd24nLFxuICAgICAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZSxcbiAgICAgICAgc3RhcnREYXRlU3RyOiBzdGFydERhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZW5kRGF0ZTogZW5kRGF0ZSxcbiAgICAgICAgZW5kRGF0ZVN0cjogZW5kRGF0ZT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgZHVyYXRpb25EYXlzOiBkdXJhdGlvbkRheXMsXG4gICAgICAgIG1vbnRoOiBtb250aE5hbWUsXG4gICAgICAgIG1vbnRoTnVtYmVyOiBtb250aCxcbiAgICAgICAgcXVhcnRlcjogcXVhcnRlck5hbWUsXG4gICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgIGlzQWN0aXZlOiBpc0FjdGl2ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHNvcnRpbmcgaWYgcHJvdmlkZWRcbiAgICBpZiAoaW5wdXQuc29ydCAmJiBpbnB1dC5zb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHNvcnRGaWVsZCBvZiBpbnB1dC5zb3J0ISkge1xuICAgICAgICAgIGNvbnN0IGZpZWxkID0gc29ydEZpZWxkLmZpZWxkIGFzIGtleW9mIFN1YnNjcmlwdGlvbnNUaW1lbGluZVJlc3VsdDtcbiAgICAgICAgICBjb25zdCBhVmFsdWUgPSBhW2ZpZWxkXTtcbiAgICAgICAgICBjb25zdCBiVmFsdWUgPSBiW2ZpZWxkXTtcbiAgICAgICAgICBjb25zdCBkaXIgPSBzb3J0RmllbGQuZGlyID09PSAnYXNjJyA/IDEgOiAtMTtcblxuICAgICAgICAgIGlmIChhVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBiVmFsdWUgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG4gICAgICAgICAgaWYgKGFWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgICBpZiAoYlZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAtMSAqIGRpcjtcblxuICAgICAgICAgIC8vIEhhbmRsZSBkYXRlIGNvbXBhcmlzb25cbiAgICAgICAgICBpZiAoZmllbGQgPT09ICdzdGFydERhdGUnKSB7XG4gICAgICAgICAgICBjb25zdCBhRGF0ZSA9IGEuc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGJEYXRlID0gYi5zdGFydERhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgICAgaWYgKGFEYXRlIDwgYkRhdGUpIHJldHVybiAtMSAqIGRpcjtcbiAgICAgICAgICAgIGlmIChhRGF0ZSA+IGJEYXRlKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhVmFsdWUgPCBiVmFsdWUpIHJldHVybiAtMSAqIGRpcjtcbiAgICAgICAgICBpZiAoYVZhbHVlID4gYlZhbHVlKSByZXR1cm4gMSAqIGRpcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IHNvcnQgYnkgc3RhcnQgZGF0ZSBkZXNjZW5kaW5nIChuZXdlc3QgZmlyc3QpXG4gICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGIuc3RhcnREYXRlLmdldFRpbWUoKSAtIGEuc3RhcnREYXRlLmdldFRpbWUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBhZ2luYXRpb25cbiAgICBjb25zdCBza2lwID0gaW5wdXQuc2tpcCB8fCAwO1xuICAgIGNvbnN0IHRha2UgPSBpbnB1dC50YWtlIHx8IDEwO1xuICAgIGNvbnN0IHRvdGFsID0gcmVzdWx0cy5sZW5ndGg7XG4gICAgY29uc3QgaXRlbXMgPSByZXN1bHRzLnNsaWNlKHNraXAsIHNraXAgKyB0YWtlKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtcyxcbiAgICAgIHRvdGFsLFxuICAgIH07XG4gIH1cblxuICAvLyNyZWdpb24gLS0tLSAgIEZpbHRlciBFeHRyYWN0aW9uICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHN1YnNjcmlwdGlvbi1zcGVjaWZpYyBmaWx0ZXJzIGZyb20gQVhQRmlsdGVyQ2xhdXNlIGZvcm1hdFxuICAgKiBNYXBzIHJlcG9ydCBwYXJhbWV0ZXIgcGF0aHMgdG8gc3Vic2NyaXB0aW9uIGVudGl0eSBmaWVsZCBuYW1lc1xuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0U3Vic2NyaXB0aW9uRmlsdGVycyhwYXJhbWV0ZXJzOiBhbnkpOiBHZXRTdWJzY3JpcHRpb25zVGltZWxpbmVRdWVyeUlucHV0WydmaWx0ZXJzJ10ge1xuICAgIGNvbnN0IGZpbHRlcnM6IEdldFN1YnNjcmlwdGlvbnNUaW1lbGluZVF1ZXJ5SW5wdXRbJ2ZpbHRlcnMnXSA9IFtdO1xuICAgIGNvbnN0IHBhcmFtc0FueSA9IHBhcmFtZXRlcnMgYXMgYW55O1xuXG4gICAgaWYgKCFwYXJhbXNBbnk/LmZpbHRlcnMgfHwgIUFycmF5LmlzQXJyYXkocGFyYW1zQW55LmZpbHRlcnMpKSB7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBwYXJhbXNBbnkuZmlsdGVycykge1xuICAgICAgaWYgKCFmaWx0ZXI/LmZpZWxkIHx8IGZpbHRlcj8udmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXI/LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaWVsZCA9IGZpbHRlci5maWVsZDtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyLnZhbHVlO1xuICAgICAgY29uc3Qgb3BlcmF0b3IgPSBmaWx0ZXIub3BlcmF0b3IgfHwgeyB0eXBlOiAnZXF1YWwnIH07XG5cbiAgICAgIC8vIEhhbmRsZSBzdWJzY3JpcHRpb24tc3BlY2lmaWMgZmllbGQgbWFwcGluZ3NcbiAgICAgIGlmIChmaWVsZCA9PT0gJ3BsYW5JZCcpIHtcbiAgICAgICAgLy8gUGxhbiBJRCBmaWx0ZXIgLSBjYW4gYmUgYXJyYXkgb2YgSURzIG9yIHNpbmdsZSBJRFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogJ3BsYW5JZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnaW4nIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6ICdwbGFuSWQnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9LFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkID09PSAnc3RhdHVzSWQnKSB7XG4gICAgICAgIC8vIFN0YXR1cyBmaWx0ZXIgLSBza2lwICdhbGwnIHZhbHVlXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZSAhPT0gJ2FsbCcpIHtcbiAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6ICdzdGF0dXNJZCcsXG4gICAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICdkYXRlUmFuZ2UnKSB7XG4gICAgICAgIC8vIERhdGUgcmFuZ2UgZmlsdGVyIC0gY3VzdG9tIGxvZ2ljIGhhbmRsZWQgaW4gcXVlcnlcbiAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICBmaWVsZDogJ2RhdGVSYW5nZScsXG4gICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEaXJlY3QgZmllbGQgbWFwcGluZ1xuICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICBvcGVyYXRvcjogb3BlcmF0b3IsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ3VzdG9tIEZpbHRlciBIYW5kbGVycyAgIC0tLS1cblxuICAvKipcbiAgICogQXBwbHkgZGF0ZSByYW5nZSBmaWx0ZXIgdG8gc3Vic2NyaXB0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBhcHBseURhdGVSYW5nZUZpbHRlcihcbiAgICBzdWJzY3JpcHRpb25zOiBBWE1TdWJzY3JpcHRpb25NYW5hZ2VtZW50U3Vic2NyaXB0aW9uRW50aXR5TW9kZWxbXSxcbiAgICBkYXRlUmFuZ2U6IGFueVxuICApOiBBWE1TdWJzY3JpcHRpb25NYW5hZ2VtZW50U3Vic2NyaXB0aW9uRW50aXR5TW9kZWxbXSB7XG4gICAgaWYgKCFkYXRlUmFuZ2UgfHwgIWRhdGVSYW5nZS5zdGFydCB8fCAhZGF0ZVJhbmdlLmVuZCkge1xuICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbnM7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoZGF0ZVJhbmdlLmVuZCk7XG4gICAgZW5kRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbnMuZmlsdGVyKChzdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YlN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHN1YnNjcmlwdGlvbi5zdGFydERhdGUpO1xuICAgICAgY29uc3Qgc3ViRW5kRGF0ZSA9IHN1YnNjcmlwdGlvbi5lbmREYXRlID8gbmV3IERhdGUoc3Vic2NyaXB0aW9uLmVuZERhdGUpIDogbnVsbDtcblxuICAgICAgLy8gQ2hlY2sgaWYgc3Vic2NyaXB0aW9uIG92ZXJsYXBzIHdpdGggdGhlIGRhdGUgcmFuZ2VcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChzdWJTdGFydERhdGUgPj0gc3RhcnREYXRlICYmIHN1YlN0YXJ0RGF0ZSA8PSBlbmREYXRlKSB8fFxuICAgICAgICAoc3ViRW5kRGF0ZSAmJiBzdWJFbmREYXRlID49IHN0YXJ0RGF0ZSAmJiBzdWJFbmREYXRlIDw9IGVuZERhdGUpIHx8XG4gICAgICAgIChzdWJTdGFydERhdGUgPD0gc3RhcnREYXRlICYmICghc3ViRW5kRGF0ZSB8fCBzdWJFbmREYXRlID49IGVuZERhdGUpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4iXX0="],"names":["SubscriptionRootConfig","TenantRootConfig"],"mappings":"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"}
@@ -0,0 +1,258 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { AXPEntityService } from '@acorex/platform/layout/entity';
4
+ import { AXPSystemStatusType } from '@acorex/platform/common';
5
+ import { RootConfig } from '@acorex/modules/tenant-management';
6
+ import { RootConfig as RootConfig$1 } from '@acorex/modules/subscription-management';
7
+ import { RootConfig as RootConfig$2 } from '@acorex/modules/application-management';
8
+
9
+ //#endregion
10
+ class GetTenantApplicationAccessQuery {
11
+ constructor() {
12
+ this.entityService = inject(AXPEntityService);
13
+ this.tenantService = this.entityService
14
+ .withEntity(`${RootConfig.module.name}.${RootConfig.entities.tenant.name}`)
15
+ .data();
16
+ this.subscriptionService = this.entityService
17
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscription.name}`)
18
+ .data();
19
+ this.planService = this.entityService
20
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscriptionPlan.name}`)
21
+ .data();
22
+ this.planItemService = this.entityService
23
+ .withEntity(`${RootConfig$1.module.name}.${RootConfig$1.entities.subscriptionPlanItem.name}`)
24
+ .data();
25
+ this.applicationService = this.entityService
26
+ .withEntity(`${RootConfig$2.module.name}.${RootConfig$2.entities.application.name}`)
27
+ .data();
28
+ }
29
+ async fetch(input) {
30
+ // Extract filters from AXPFilterClause format
31
+ const extractedFilters = this.extractTenantFilters(input.filters);
32
+ const filterLogic = input.filters?.logic || input.logic || 'and';
33
+ // Separate custom filters from entity filters
34
+ const entityFilters = [];
35
+ let dateRangeFilter;
36
+ if (extractedFilters && extractedFilters.length > 0) {
37
+ for (const filter of extractedFilters) {
38
+ if (filter.field === 'dateRange') {
39
+ dateRangeFilter = filter.value;
40
+ }
41
+ else {
42
+ entityFilters.push(filter);
43
+ }
44
+ }
45
+ }
46
+ // Get all tenants
47
+ const tenantsResult = await this.tenantService.query({
48
+ skip: 0,
49
+ take: 10000,
50
+ filter: entityFilters.length > 0
51
+ ? {
52
+ logic: filterLogic,
53
+ filters: entityFilters,
54
+ }
55
+ : undefined,
56
+ });
57
+ let tenants = tenantsResult.items;
58
+ // Apply date range filter if provided
59
+ if (dateRangeFilter) {
60
+ tenants = this.applyDateRangeFilter(tenants, dateRangeFilter);
61
+ }
62
+ // Get all subscriptions
63
+ const subscriptionsResult = await this.subscriptionService.query({
64
+ skip: 0,
65
+ take: 10000,
66
+ });
67
+ const subscriptions = subscriptionsResult.items.filter((s) => s.subscriberType === 'Tenant');
68
+ // Get all plans
69
+ const plansResult = await this.planService.query({
70
+ skip: 0,
71
+ take: 10000,
72
+ });
73
+ const plans = plansResult.items;
74
+ // Get all plan items
75
+ const planItemsResult = await this.planItemService.query({
76
+ skip: 0,
77
+ take: 10000,
78
+ });
79
+ const planItems = planItemsResult.items;
80
+ // Get all applications
81
+ const applicationsResult = await this.applicationService.query({
82
+ skip: 0,
83
+ take: 10000,
84
+ });
85
+ const applications = applicationsResult.items;
86
+ // Build results for each tenant
87
+ const results = [];
88
+ for (const tenant of tenants) {
89
+ // Get tenant's subscriptions
90
+ const tenantSubscriptions = subscriptions.filter((s) => s.subscriberId === tenant.id);
91
+ // Get unique applications through subscriptions → plans → plan items → editions → applications
92
+ const applicationSet = new Set();
93
+ const applicationNames = [];
94
+ for (const subscription of tenantSubscriptions) {
95
+ if (!subscription.planId)
96
+ continue;
97
+ // Get plan items for this plan
98
+ const planPlanItems = planItems.filter((pi) => pi.planId === subscription.planId);
99
+ for (const planItem of planPlanItems) {
100
+ if (!planItem.editionId)
101
+ continue;
102
+ // Find applications that have this edition
103
+ for (const application of applications) {
104
+ if (application.editionIds && application.editionIds.includes(planItem.editionId)) {
105
+ if (!applicationSet.has(application.id)) {
106
+ applicationSet.add(application.id);
107
+ applicationNames.push(application.title);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
113
+ // Count active subscriptions
114
+ const activeSubscriptions = tenantSubscriptions.filter((s) => s.statusId === AXPSystemStatusType.Active);
115
+ results.push({
116
+ tenantId: tenant.id,
117
+ tenantName: tenant.title,
118
+ tenantStatus: tenant.statusId || 'Unknown',
119
+ subscriptionCount: tenantSubscriptions.length,
120
+ applicationsCount: applicationSet.size,
121
+ applicationsList: applicationNames.join(', '),
122
+ activeSubscriptionsCount: activeSubscriptions.length,
123
+ registrationDate: tenant.registrationDate,
124
+ registrationDateStr: tenant.registrationDate?.toISOString(),
125
+ });
126
+ }
127
+ // Apply sorting if provided
128
+ if (input.sort && input.sort.length > 0) {
129
+ results.sort((a, b) => {
130
+ for (const sortField of input.sort) {
131
+ const field = sortField.field;
132
+ const aValue = a[field];
133
+ const bValue = b[field];
134
+ const dir = sortField.dir === 'asc' ? 1 : -1;
135
+ if (aValue === undefined && bValue === undefined)
136
+ continue;
137
+ if (aValue === undefined)
138
+ return 1 * dir;
139
+ if (bValue === undefined)
140
+ return -1 * dir;
141
+ if (aValue < bValue)
142
+ return -1 * dir;
143
+ if (aValue > bValue)
144
+ return 1 * dir;
145
+ }
146
+ return 0;
147
+ });
148
+ }
149
+ else {
150
+ // Default sort by tenant name
151
+ results.sort((a, b) => a.tenantName.localeCompare(b.tenantName));
152
+ }
153
+ // Apply pagination
154
+ const skip = input.skip || 0;
155
+ const take = input.take || 10;
156
+ const total = results.length;
157
+ const items = results.slice(skip, skip + take);
158
+ return {
159
+ items,
160
+ total,
161
+ };
162
+ }
163
+ //#region ---- Filter Extraction ----
164
+ /**
165
+ * Extract tenant-specific filters from AXPFilterClause format
166
+ * Maps report parameter paths to tenant entity field names
167
+ */
168
+ extractTenantFilters(parameters) {
169
+ const filters = [];
170
+ const paramsAny = parameters;
171
+ if (!paramsAny?.filters || !Array.isArray(paramsAny.filters)) {
172
+ return filters;
173
+ }
174
+ for (const filter of paramsAny.filters) {
175
+ if (!filter?.field || filter?.value === undefined || filter?.value === null) {
176
+ continue;
177
+ }
178
+ const field = filter.field;
179
+ const value = filter.value;
180
+ const operator = filter.operator || { type: 'equal' };
181
+ // Handle tenant-specific field mappings
182
+ if (field === 'tenantId') {
183
+ // Tenant ID filter - can be array of IDs or single ID
184
+ if (Array.isArray(value) && value.length > 0) {
185
+ filters.push({
186
+ field: 'id',
187
+ operator: { type: 'in' },
188
+ value: value,
189
+ });
190
+ }
191
+ else if (value) {
192
+ filters.push({
193
+ field: 'id',
194
+ operator: { type: 'equal' },
195
+ value: value,
196
+ });
197
+ }
198
+ }
199
+ else if (field === 'statusId') {
200
+ // Status filter - skip 'all' value
201
+ if (value && value !== 'all') {
202
+ filters.push({
203
+ field: 'statusId',
204
+ operator: { type: 'equal' },
205
+ value: value,
206
+ });
207
+ }
208
+ }
209
+ else if (field === 'dateRange') {
210
+ // Date range filter - custom logic handled in query
211
+ filters.push({
212
+ field: 'dateRange',
213
+ operator: { type: 'equal' },
214
+ value: value,
215
+ });
216
+ }
217
+ else {
218
+ // Direct field mapping
219
+ filters.push({
220
+ field: field,
221
+ operator: operator,
222
+ value: value,
223
+ });
224
+ }
225
+ }
226
+ return filters;
227
+ }
228
+ //#endregion
229
+ //#region ---- Custom Filter Handlers ----
230
+ /**
231
+ * Apply date range filter to tenants
232
+ */
233
+ applyDateRangeFilter(tenants, dateRange) {
234
+ if (!dateRange || !dateRange.start || !dateRange.end) {
235
+ return tenants;
236
+ }
237
+ const startDate = new Date(dateRange.start);
238
+ const endDate = new Date(dateRange.end);
239
+ endDate.setHours(23, 59, 59, 999);
240
+ return tenants.filter((tenant) => {
241
+ if (!tenant.registrationDate)
242
+ return false;
243
+ const regDate = new Date(tenant.registrationDate);
244
+ return regDate >= startDate && regDate <= endDate;
245
+ });
246
+ }
247
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetTenantApplicationAccessQuery, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
248
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetTenantApplicationAccessQuery, providedIn: 'root' }); }
249
+ }
250
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: GetTenantApplicationAccessQuery, decorators: [{
251
+ type: Injectable,
252
+ args: [{
253
+ providedIn: 'root',
254
+ }]
255
+ }] });
256
+
257
+ export { GetTenantApplicationAccessQuery };
258
+ //# sourceMappingURL=acorex-connectivity-mock-get-tenant-application-access.query-BDfrwf5Z.mjs.map