@spottoai/types-package 1.0.2-beta.359 → 1.0.2-beta.360

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -55,3 +55,4 @@ export * from './integrations/index.js';
55
55
  export * from './identity/index.js';
56
56
  export * from './features-and-permissions/index.js';
57
57
  export * from './tags/index.js';
58
+ export * from './portfolio/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './portfolioOperations.js';
2
+ export * from './portfolioProjections.js';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ export const PORTFOLIO_PROJECTION_PREVIOUS_SCHEMA_VERSION = '2026-07-26';
2
+ export const PORTFOLIO_PROJECTION_SCHEMA_VERSION = '2026-08-02';
3
+ export const PORTFOLIO_PROJECTION_COMPATIBLE_SCHEMA_VERSIONS = [
4
+ PORTFOLIO_PROJECTION_PREVIOUS_SCHEMA_VERSION,
5
+ PORTFOLIO_PROJECTION_SCHEMA_VERSION,
6
+ ];
7
+ export const PORTFOLIO_PROJECTION_DETAIL_LIMIT = 60;
8
+ /** Legacy fixed-shard count used to read compatible manifests published before byte-bounded packing. */
9
+ export const PORTFOLIO_PROJECTION_DETAIL_SHARD_COUNT = 16;
10
+ /** Publishers target small detail artifacts and start a new shard before either target is crossed. */
11
+ export const PORTFOLIO_PROJECTION_DETAIL_TARGET_COMPRESSED_BYTES = 1 * 1024 * 1024;
12
+ export const PORTFOLIO_PROJECTION_DETAIL_TARGET_DECODED_BYTES = 2 * 1024 * 1024;
13
+ /** Aggregate decoded payload budget for a single Worker projection read. */
14
+ export const PORTFOLIO_PROJECTION_MAX_REQUEST_DECODED_BYTES = 24 * 1024 * 1024;
15
+ export const PORTFOLIO_PROJECTION_MAX_COMPRESSED_BYTES = 8 * 1024 * 1024;
16
+ export const PORTFOLIO_PROJECTION_MAX_DECODED_BYTES = 32 * 1024 * 1024;
17
+ export const PORTFOLIO_CLOUD_ACCOUNT_SUMMARY_SCHEMA_VERSION = '2026-08-13';
package/dist/index.d.ts CHANGED
@@ -55,4 +55,5 @@ export * from './integrations';
55
55
  export * from './identity';
56
56
  export * from './features-and-permissions';
57
57
  export * from './tags';
58
+ export * from './portfolio';
58
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -71,4 +71,5 @@ __exportStar(require("./integrations"), exports);
71
71
  __exportStar(require("./identity"), exports);
72
72
  __exportStar(require("./features-and-permissions"), exports);
73
73
  __exportStar(require("./tags"), exports);
74
+ __exportStar(require("./portfolio"), exports);
74
75
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAAiE;AACjE,iDAA+B;AAC/B,0DAAwC;AACxC,uDAAqC;AACrC,kDAAgC;AAChC,4DAA0C;AAC1C,oEAAkD;AAClD,0EAAwD;AACxD,uDAAqC;AACrC,mDAAiC;AACjC,8DAA4C;AAC5C,oDAAkC;AAClC,kDAAgC;AAChC,kDAAgC;AAChC,mDAAiC;AACjC,0DAAwC;AACxC,yDAAuC;AACvC,iDAA+B;AAC/B,wDAAsC;AACtC,0DAAwC;AACxC,+DAA6C;AAC7C,8DAA4C;AAC5C,iEAA+C;AAC/C,8DAA4C;AAC5C,+DAA6C;AAC7C,oDAAkC;AAClC,kDAAgC;AAChC,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,4DAA0C;AAC1C,iEAA+C;AAC/C,0EAAwD;AACxD,+DAA6C;AAC7C,4DAA0C;AAC1C,qDAAmC;AACnC,4DAA0C;AAC1C,yDAAuC;AACvC,wCAAsB;AACtB,6CAA2B;AAC3B,gDAA8B;AAC9B,0CAAwB;AACxB,2CAAyB;AACzB,4DAA0C;AAC1C,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,uCAAqB;AACrB,2CAAyB;AACzB,iDAA+B;AAC/B,6CAA2B;AAC3B,6DAA2C;AAC3C,yCAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAAiE;AACjE,iDAA+B;AAC/B,0DAAwC;AACxC,uDAAqC;AACrC,kDAAgC;AAChC,4DAA0C;AAC1C,oEAAkD;AAClD,0EAAwD;AACxD,uDAAqC;AACrC,mDAAiC;AACjC,8DAA4C;AAC5C,oDAAkC;AAClC,kDAAgC;AAChC,kDAAgC;AAChC,mDAAiC;AACjC,0DAAwC;AACxC,yDAAuC;AACvC,iDAA+B;AAC/B,wDAAsC;AACtC,0DAAwC;AACxC,+DAA6C;AAC7C,8DAA4C;AAC5C,iEAA+C;AAC/C,8DAA4C;AAC5C,+DAA6C;AAC7C,oDAAkC;AAClC,kDAAgC;AAChC,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,4DAA0C;AAC1C,iEAA+C;AAC/C,0EAAwD;AACxD,+DAA6C;AAC7C,4DAA0C;AAC1C,qDAAmC;AACnC,4DAA0C;AAC1C,yDAAuC;AACvC,wCAAsB;AACtB,6CAA2B;AAC3B,gDAA8B;AAC9B,0CAAwB;AACxB,2CAAyB;AACzB,4DAA0C;AAC1C,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,uCAAqB;AACrB,2CAAyB;AACzB,iDAA+B;AAC/B,6CAA2B;AAC3B,6DAA2C;AAC3C,yCAAuB;AACvB,8CAA4B"}
@@ -0,0 +1,3 @@
1
+ export * from './portfolioOperations';
2
+ export * from './portfolioProjections';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/portfolio/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./portfolioOperations"), exports);
18
+ __exportStar(require("./portfolioProjections"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/portfolio/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,yDAAuC"}
@@ -0,0 +1,174 @@
1
+ export type PortfolioDataStatus = 'complete' | 'partial' | 'unavailable';
2
+ export type PortfolioSortDirection = 'asc' | 'desc';
3
+ export interface PortfolioCustomerReference {
4
+ companyId: string;
5
+ companyName: string;
6
+ }
7
+ export interface PortfolioDataFailure {
8
+ companyId: string;
9
+ cloudAccountId?: string;
10
+ subscriptionId?: string;
11
+ source: 'accounts' | 'budgets' | 'commitments' | 'cost' | 'credentials' | 'data-protection' | 'governance' | 'hierarchy' | 'recommendations' | 'reporting' | 'resource-health' | 'perimeter' | 'security' | 'service-retirements' | 'subscriptions';
12
+ code: string;
13
+ }
14
+ export interface PortfolioDataCoverage {
15
+ status: PortfolioDataStatus;
16
+ requestedCustomers: number;
17
+ loadedCustomers: number;
18
+ requestedSubscriptions: number;
19
+ loadedSubscriptions: number;
20
+ observedAt?: string;
21
+ failures: PortfolioDataFailure[];
22
+ }
23
+ export interface PortfolioPageResponse<TItem, TSummary> {
24
+ items: TItem[];
25
+ summary: TSummary;
26
+ coverage: PortfolioDataCoverage;
27
+ page: number;
28
+ pageSize: number;
29
+ totalRows: number;
30
+ totalPages: number;
31
+ /** Rows retained by the bounded projection and available to page through. */
32
+ retainedRows?: number;
33
+ /** True when totalRows is larger than the retained result set. */
34
+ truncated?: boolean;
35
+ }
36
+ export type PortfolioCustomerSortField = 'customerName' | 'subscriptionCount' | 'readySubscriptionCount' | 'cloudAccountCount' | 'averageSecureScore' | 'averageAdvisorScore' | 'lastUpdated';
37
+ export interface PortfolioCustomerRow extends PortfolioCustomerReference {
38
+ subscriptionDataAvailable: boolean;
39
+ subscriptionCount: number;
40
+ readySubscriptionCount: number;
41
+ notReadySubscriptionCount: number;
42
+ cloudAccountCount: number;
43
+ averageSecureScore?: number;
44
+ averageAdvisorScore?: number;
45
+ lastUpdated?: string;
46
+ }
47
+ export interface PortfolioCustomerSummary {
48
+ availableCompanies: number;
49
+ subscriptions: number;
50
+ readySubscriptions: number;
51
+ cloudAccounts: number;
52
+ }
53
+ export type PortfolioBudgetStatus = 'healthy' | 'at-risk' | 'over-budget';
54
+ export type PortfolioBudgetSortField = 'customerName' | 'subscriptionName' | 'budgetName' | 'status' | 'actualPercent' | 'forecastPercent' | 'endDate';
55
+ export interface PortfolioBudgetRow {
56
+ id: string;
57
+ companyId: string;
58
+ customerName: string;
59
+ subscriptionId: string;
60
+ subscriptionName: string;
61
+ budgetName: string;
62
+ currency: string;
63
+ currencySymbol?: string;
64
+ amount: number;
65
+ currentSpend: number;
66
+ forecastedSpend: number;
67
+ actualPercent: number;
68
+ forecastPercent: number;
69
+ status: PortfolioBudgetStatus;
70
+ startDate: string;
71
+ endDate: string;
72
+ }
73
+ export interface PortfolioBudgetSummary {
74
+ totalBudgets: number;
75
+ overBudget: number;
76
+ atRisk: number;
77
+ forecastOverBudget: number;
78
+ }
79
+ export type PortfolioSowApprovalStatus = 'approved' | 'unapproved';
80
+ export type PortfolioSowSortField = 'customerName' | 'fileName' | 'issuedAt' | 'approvalStatus' | 'approvedAt';
81
+ export interface PortfolioSowRow {
82
+ id: string;
83
+ companyId: string;
84
+ customerName: string;
85
+ fileName: string;
86
+ issuedAt: string;
87
+ issuedBy?: string;
88
+ reportPeriod?: string;
89
+ approvalStatus: PortfolioSowApprovalStatus;
90
+ approvedAt?: string;
91
+ approvedBy?: string;
92
+ }
93
+ export interface PortfolioSowSummary {
94
+ totalIssued: number;
95
+ approved: number;
96
+ unapproved: number;
97
+ issuedThisMonth: number;
98
+ }
99
+ export type PortfolioReportType = 'sdm' | 'sow';
100
+ export type PortfolioReportSortField = 'companyName' | 'fileName' | 'reportType' | 'createdAt' | 'reportPeriod';
101
+ export interface PortfolioReportRow {
102
+ id: string;
103
+ companyId: string;
104
+ companyName: string;
105
+ reportType: PortfolioReportType;
106
+ fileName: string;
107
+ createdAt: string;
108
+ createdBy?: string;
109
+ templateId?: string;
110
+ templateRevision?: number;
111
+ schemaVersion: number;
112
+ sourceDataTimestamp?: string;
113
+ reportPeriod?: string;
114
+ }
115
+ export interface PortfolioReportSummary {
116
+ totalReports: number;
117
+ statementsOfWork: number;
118
+ sdmReports: number;
119
+ companiesWithReports: number;
120
+ }
121
+ export interface UpdatePortfolioSowApprovalRequest {
122
+ approvalStatus: PortfolioSowApprovalStatus;
123
+ }
124
+ export type PortfolioMonthEndStatus = 'complete' | 'incomplete' | 'unavailable';
125
+ export type PortfolioMonthEndSortField = 'customerName' | 'status' | 'issuedAt' | 'reportPeriod';
126
+ export interface PortfolioMonthEndRow {
127
+ id: string;
128
+ companyId: string;
129
+ customerName: string;
130
+ reportPeriod: string;
131
+ status: PortfolioMonthEndStatus;
132
+ draftId?: string;
133
+ issuedReportId?: string;
134
+ issuedAt?: string;
135
+ updatedAt?: string;
136
+ }
137
+ export interface PortfolioMonthEndSummary {
138
+ totalCustomers: number;
139
+ complete: number;
140
+ incomplete: number;
141
+ unavailable: number;
142
+ }
143
+ export type PortfolioExpiryKind = 'service-principal' | 'cloud-account-credential' | 'application-secret' | 'application-certificate' | 'reservation' | 'savings-plan' | 'service-retirement' | 'service-expiry';
144
+ export type PortfolioExpiryStatus = 'expired' | 'expiring' | 'active';
145
+ export type PortfolioExpirySortField = 'customerName' | 'kind' | 'name' | 'expiryDate' | 'daysToExpiry';
146
+ export interface PortfolioExpiryRow {
147
+ id: string;
148
+ companyId: string;
149
+ customerName: string;
150
+ subscriptionId?: string;
151
+ subscriptionName?: string;
152
+ kind: PortfolioExpiryKind;
153
+ name: string;
154
+ expiryDate: string;
155
+ daysToExpiry: number;
156
+ status: PortfolioExpiryStatus;
157
+ sourceUrl?: string;
158
+ }
159
+ export interface PortfolioExpirySummary {
160
+ total: number;
161
+ expired: number;
162
+ expiringWithin30Days: number;
163
+ expiringWithin90Days: number;
164
+ }
165
+ export type PortfolioExceptionKind = 'attention' | 'risk' | 'service-opportunity';
166
+ export type PortfolioAttentionSortField = 'companyName' | 'severity' | 'title' | 'dueAt';
167
+ export interface PortfolioAttentionSummary {
168
+ total: number;
169
+ critical: number;
170
+ high: number;
171
+ medium: number;
172
+ low: number;
173
+ }
174
+ //# sourceMappingURL=portfolioOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolioOperations.d.ts","sourceRoot":"","sources":["../../src/portfolio/portfolioOperations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=portfolioOperations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolioOperations.js","sourceRoot":"","sources":["../../src/portfolio/portfolioOperations.ts"],"names":[],"mappings":""}
@@ -0,0 +1,460 @@
1
+ import type { PortfolioBudgetRow, PortfolioDataCoverage, PortfolioDataStatus, PortfolioAttentionSummary, PortfolioExpiryRow, PortfolioMonthEndRow, PortfolioReportSummary, PortfolioReportRow, PortfolioSowRow } from './portfolioOperations';
2
+ export declare const PORTFOLIO_PROJECTION_PREVIOUS_SCHEMA_VERSION: "2026-07-26";
3
+ export declare const PORTFOLIO_PROJECTION_SCHEMA_VERSION: "2026-08-02";
4
+ export declare const PORTFOLIO_PROJECTION_COMPATIBLE_SCHEMA_VERSIONS: readonly ["2026-07-26", "2026-08-02"];
5
+ export declare const PORTFOLIO_PROJECTION_DETAIL_LIMIT = 60;
6
+ /** Legacy fixed-shard count used to read compatible manifests published before byte-bounded packing. */
7
+ export declare const PORTFOLIO_PROJECTION_DETAIL_SHARD_COUNT = 16;
8
+ /** Publishers target small detail artifacts and start a new shard before either target is crossed. */
9
+ export declare const PORTFOLIO_PROJECTION_DETAIL_TARGET_COMPRESSED_BYTES: number;
10
+ export declare const PORTFOLIO_PROJECTION_DETAIL_TARGET_DECODED_BYTES: number;
11
+ /** Aggregate decoded payload budget for a single Worker projection read. */
12
+ export declare const PORTFOLIO_PROJECTION_MAX_REQUEST_DECODED_BYTES: number;
13
+ export declare const PORTFOLIO_PROJECTION_MAX_COMPRESSED_BYTES: number;
14
+ export declare const PORTFOLIO_PROJECTION_MAX_DECODED_BYTES: number;
15
+ export declare const PORTFOLIO_CLOUD_ACCOUNT_SUMMARY_SCHEMA_VERSION: "2026-08-13";
16
+ export type PortfolioProjectionSchemaVersion = (typeof PORTFOLIO_PROJECTION_COMPATIBLE_SCHEMA_VERSIONS)[number];
17
+ export type PortfolioProjectionScopeType = 'company-self' | 'company-hierarchy';
18
+ export type PortfolioProjectionGroup = 'cloud' | 'delivery';
19
+ export type PortfolioProjectionPrimaryArtifactKind = 'estate' | 'insights' | 'operations' | 'delivery';
20
+ export type PortfolioProjectionArtifactKind = PortfolioProjectionPrimaryArtifactKind | 'details';
21
+ export type PortfolioProjectionBuildStatus = 'complete' | 'partial';
22
+ export type PortfolioProjectionFreshnessStatus = 'current' | 'stale' | 'expired' | 'unavailable';
23
+ export type PortfolioCurrencyStatus = 'single' | 'mixed' | 'unavailable';
24
+ export type PortfolioCloudProvider = 'azure' | 'aws' | 'gcp' | 'other' | 'unknown';
25
+ export type PortfolioEnvironment = 'Production' | 'Non-Production' | 'Mixed' | 'Unknown';
26
+ export type PortfolioOperationalStatus = 'healthy' | 'needs-attention' | 'critical' | 'not-assessed';
27
+ export type PortfolioAttentionSeverity = 'critical' | 'high' | 'medium' | 'low';
28
+ export type PortfolioAttentionDomain = 'security' | 'reliability' | 'finops' | 'expiry' | 'reporting' | 'service-opportunity' | 'sync';
29
+ export interface PortfolioCurrencyAmount {
30
+ currency: string;
31
+ amount: number;
32
+ }
33
+ export interface PortfolioCurrencyCoverage {
34
+ status: PortfolioCurrencyStatus;
35
+ currencies: string[];
36
+ missingValueCount: number;
37
+ }
38
+ export interface PortfolioProjectionFailure {
39
+ source: 'accounts' | 'budgets' | 'commitments' | 'cost' | 'credentials' | 'data-protection' | 'governance' | 'hierarchy' | 'recommendations' | 'reporting' | 'resource-health' | 'perimeter' | 'security' | 'service-retirements' | 'subscriptions';
40
+ code: string;
41
+ companyId?: string;
42
+ cloudAccountId?: string;
43
+ subscriptionId?: string;
44
+ retryable?: boolean;
45
+ }
46
+ export interface PortfolioProjectionCounts {
47
+ descendantCompanies: number;
48
+ contributingCompanies: number;
49
+ cloudAccounts: number;
50
+ subscriptions: number;
51
+ readySubscriptions: number;
52
+ }
53
+ export interface PortfolioProjectionCoverage {
54
+ status: PortfolioProjectionBuildStatus;
55
+ expectedCompanies: number;
56
+ loadedCompanies: number;
57
+ expectedCloudAccounts: number;
58
+ loadedCloudAccounts: number;
59
+ expectedSubscriptions: number;
60
+ loadedSubscriptions: number;
61
+ failures: PortfolioProjectionFailure[];
62
+ }
63
+ export interface PortfolioProjectionMetadata {
64
+ schemaVersion: PortfolioProjectionSchemaVersion;
65
+ scopeCompanyId: string;
66
+ scopeType: PortfolioProjectionScopeType;
67
+ generationId: string;
68
+ generatedAt: string;
69
+ sourceObservedAt?: string;
70
+ freshness: PortfolioProjectionFreshnessStatus;
71
+ hierarchyRootCompanyId: string;
72
+ hierarchyVersion?: string;
73
+ inputDigest: string;
74
+ counts: PortfolioProjectionCounts;
75
+ coverage: PortfolioProjectionCoverage;
76
+ currencyCoverage: PortfolioCurrencyCoverage;
77
+ }
78
+ export interface PortfolioProjectionArtifactDescriptor {
79
+ kind: PortfolioProjectionArtifactKind;
80
+ /** Present only when kind is `details`; zero-based within that manifest's packed shard set. */
81
+ shardIndex?: number;
82
+ /** Present only when kind is `details`; total packed shards in the manifest. */
83
+ shardCount?: number;
84
+ /** Company contributions present in this detail shard. Used for authorization-relevant reads. */
85
+ companyIds?: string[];
86
+ path: string;
87
+ contentHash: string;
88
+ byteSize: number;
89
+ compressedByteSize?: number;
90
+ rowCount: number;
91
+ }
92
+ export interface PortfolioProjectionManifest {
93
+ schemaVersion: PortfolioProjectionSchemaVersion;
94
+ group: PortfolioProjectionGroup;
95
+ scopeCompanyId: string;
96
+ scopeType: PortfolioProjectionScopeType;
97
+ generationId: string;
98
+ generatedAt: string;
99
+ sourceObservedAt?: string;
100
+ hierarchyRootCompanyId: string;
101
+ hierarchyVersion?: string;
102
+ /** Digest of canonical account membership for bounded reconciliation without reading every account summary. */
103
+ sourceMembershipDigest?: string;
104
+ inputGenerationIds: string[];
105
+ inputDigest: string;
106
+ buildStatus: PortfolioProjectionBuildStatus;
107
+ artifacts: PortfolioProjectionArtifactDescriptor[];
108
+ coverage: PortfolioProjectionCoverage;
109
+ freshness: PortfolioProjectionFreshnessStatus;
110
+ warnings: string[];
111
+ }
112
+ export interface PortfolioBoundedSection<TItem> {
113
+ items: TItem[];
114
+ totalCount: number;
115
+ limit: number;
116
+ truncated: boolean;
117
+ }
118
+ export interface PortfolioRetainedSectionMetadata {
119
+ totalCount: number;
120
+ retainedCount: number;
121
+ limit: number;
122
+ truncated: boolean;
123
+ }
124
+ export interface PortfolioCloudAccountRow {
125
+ id: string;
126
+ companyId: string;
127
+ companyName: string;
128
+ cloudAccountId: string;
129
+ cloudAccountName: string;
130
+ provider: PortfolioCloudProvider;
131
+ providerAccountId?: string;
132
+ environment: PortfolioEnvironment;
133
+ subscriptionCount: number;
134
+ loadedSubscriptionCount?: number;
135
+ readySubscriptionCount: number;
136
+ notReadySubscriptionCount: number;
137
+ subscriptionCoverage: 'complete' | 'partial' | 'unavailable';
138
+ currency?: string;
139
+ currencies?: string[];
140
+ currencyStatus: PortfolioCurrencyStatus;
141
+ syncStatus: PortfolioOperationalStatus;
142
+ latestCompletedAt?: string;
143
+ sourceObservedAt?: string;
144
+ secureScore?: number;
145
+ advisorScore?: number;
146
+ recommendationCount: number;
147
+ mustDoCount: number;
148
+ budgetStatus?: 'healthy' | 'at-risk' | 'over-budget' | 'unavailable';
149
+ commitmentCoveragePercent?: number;
150
+ spend: PortfolioCurrencyAmount[];
151
+ savingsOpportunity: PortfolioCurrencyAmount[];
152
+ navigationCompanyId: string;
153
+ }
154
+ export interface PortfolioEstateCompanyContribution {
155
+ companyId: string;
156
+ companyName: string;
157
+ parentCompanyId?: string;
158
+ rootCompanyId: string;
159
+ accounts: PortfolioCloudAccountRow[];
160
+ /** Full account count and retained-detail metadata for compact hierarchy artifacts. */
161
+ accountRetention?: PortfolioRetainedSectionMetadata;
162
+ expectedCloudAccounts: number;
163
+ expectedSubscriptions: number;
164
+ /** Loaded totals remain available when detailed account rows are compacted. */
165
+ loadedCloudAccounts?: number;
166
+ loadedSubscriptions?: number;
167
+ readySubscriptions?: number;
168
+ failures: PortfolioProjectionFailure[];
169
+ }
170
+ export interface PortfolioEstateProjection {
171
+ metadata: PortfolioProjectionMetadata;
172
+ accounts: PortfolioCloudAccountRow[];
173
+ /** Full account count and retained-detail metadata for the top-level account list. */
174
+ accountRetention?: PortfolioRetainedSectionMetadata;
175
+ companyContributions: PortfolioEstateCompanyContribution[];
176
+ }
177
+ export interface PortfolioInsightEvidence {
178
+ source: string;
179
+ sourceId?: string;
180
+ observedAt?: string;
181
+ value?: number;
182
+ unit?: string;
183
+ currency?: string;
184
+ }
185
+ export interface PortfolioAttentionItem {
186
+ id: string;
187
+ companyId: string;
188
+ companyName: string;
189
+ cloudAccountId?: string;
190
+ subscriptionId?: string;
191
+ domain: PortfolioAttentionDomain;
192
+ severity: PortfolioAttentionSeverity;
193
+ title: string;
194
+ description: string;
195
+ dueAt?: string;
196
+ observedAt?: string;
197
+ navigationPath?: string;
198
+ evidence: PortfolioInsightEvidence[];
199
+ }
200
+ export interface PortfolioRecommendationSummary {
201
+ total: number;
202
+ mustDo: number;
203
+ highImpact: number;
204
+ affectedResources: number;
205
+ affectedSubscriptions: number;
206
+ savingsOpportunity: PortfolioCurrencyAmount[];
207
+ }
208
+ export interface PortfolioOperationalPostureSummary {
209
+ activeServiceHealthEvents: number;
210
+ unavailableResources: number;
211
+ degradedResources: number;
212
+ failedBackups: number;
213
+ staleBackups: number;
214
+ highRiskGovernanceFindings: number;
215
+ perimeterExposureFindings: number;
216
+ /** Optional only while the immediately preceding projection schema remains readable. */
217
+ coverage?: {
218
+ serviceHealth: PortfolioDataStatus;
219
+ resourceHealth: PortfolioDataStatus;
220
+ dataProtection: PortfolioDataStatus;
221
+ governance: PortfolioDataStatus;
222
+ perimeter: PortfolioDataStatus;
223
+ };
224
+ }
225
+ export interface PortfolioInsightsCompanyContribution {
226
+ companyId: string;
227
+ companyName: string;
228
+ status: PortfolioOperationalStatus;
229
+ recommendationSummary: PortfolioRecommendationSummary;
230
+ operationalPosture: PortfolioOperationalPostureSummary;
231
+ secureScoreWeightedTotal: number;
232
+ secureScoreWeight: number;
233
+ advisorScoreWeightedTotal: number;
234
+ advisorScoreWeight: number;
235
+ attention: PortfolioAttentionItem[];
236
+ risks: PortfolioAttentionItem[];
237
+ serviceOpportunities: PortfolioAttentionItem[];
238
+ /** Optional only for compatibility with the immediately preceding projection schema. */
239
+ attentionRetention?: PortfolioRetainedSectionMetadata;
240
+ riskRetention?: PortfolioRetainedSectionMetadata;
241
+ serviceOpportunityRetention?: PortfolioRetainedSectionMetadata;
242
+ attentionSummary?: PortfolioAttentionSummary;
243
+ riskSummary?: PortfolioAttentionSummary;
244
+ serviceOpportunitySummary?: PortfolioAttentionSummary;
245
+ failures: PortfolioProjectionFailure[];
246
+ }
247
+ export interface PortfolioInsightsProjection {
248
+ metadata: PortfolioProjectionMetadata;
249
+ recommendationSummary: PortfolioRecommendationSummary;
250
+ operationalPosture: PortfolioOperationalPostureSummary;
251
+ attention: PortfolioBoundedSection<PortfolioAttentionItem>;
252
+ risks: PortfolioBoundedSection<PortfolioAttentionItem>;
253
+ serviceOpportunities: PortfolioBoundedSection<PortfolioAttentionItem>;
254
+ companyContributions: PortfolioInsightsCompanyContribution[];
255
+ }
256
+ export interface PortfolioFinopsSummary {
257
+ spendActual: PortfolioCurrencyAmount[];
258
+ spendPreviousPeriod: PortfolioCurrencyAmount[];
259
+ savingsOpportunity: PortfolioCurrencyAmount[];
260
+ totalBudgets: number;
261
+ overBudget: number;
262
+ forecastOverBudget: number;
263
+ atRisk: number;
264
+ costAnomalies: number;
265
+ /** Optional only while the immediately preceding projection schema remains readable. */
266
+ coverage?: {
267
+ spend: PortfolioDataStatus;
268
+ budgets: PortfolioDataStatus;
269
+ costAnomalies: PortfolioDataStatus;
270
+ commitments: PortfolioDataStatus;
271
+ };
272
+ }
273
+ export interface PortfolioExpiryTotals {
274
+ total: number;
275
+ expired: number;
276
+ expiringWithin30Days: number;
277
+ expiringWithin90Days: number;
278
+ }
279
+ export interface PortfolioOperationsCompanyContribution {
280
+ companyId: string;
281
+ companyName: string;
282
+ finops: PortfolioFinopsSummary;
283
+ expiryTotals: PortfolioExpiryTotals;
284
+ budgets: PortfolioBudgetRow[];
285
+ expiries: PortfolioExpiryRow[];
286
+ attention: PortfolioAttentionItem[];
287
+ budgetRetention?: PortfolioRetainedSectionMetadata;
288
+ expiryRetention?: PortfolioRetainedSectionMetadata;
289
+ attentionRetention?: PortfolioRetainedSectionMetadata;
290
+ attentionSummary?: PortfolioAttentionSummary;
291
+ failures: PortfolioProjectionFailure[];
292
+ }
293
+ export interface PortfolioOperationsProjection {
294
+ metadata: PortfolioProjectionMetadata;
295
+ finops: PortfolioFinopsSummary;
296
+ expiryTotals: PortfolioExpiryTotals;
297
+ budgets: PortfolioBoundedSection<PortfolioBudgetRow>;
298
+ expiries: PortfolioBoundedSection<PortfolioExpiryRow>;
299
+ attention: PortfolioBoundedSection<PortfolioAttentionItem>;
300
+ companyContributions: PortfolioOperationsCompanyContribution[];
301
+ }
302
+ export interface PortfolioCloudAccountSummaryMetadata {
303
+ schemaVersion: typeof PORTFOLIO_CLOUD_ACCOUNT_SUMMARY_SCHEMA_VERSION;
304
+ companyId: string;
305
+ cloudAccountId: string;
306
+ provider: PortfolioCloudProvider;
307
+ providerAccountId?: string;
308
+ tenantRunId: string;
309
+ sourceRunStartedAt?: string;
310
+ generationId: string;
311
+ generatedAt: string;
312
+ sourceObservedAt?: string;
313
+ inputDigest: string;
314
+ inputSubscriptionIds: string[];
315
+ inputGenerationIds?: string[];
316
+ expectedSubscriptions: number;
317
+ loadedSubscriptions: number;
318
+ coverage: PortfolioProjectionBuildStatus;
319
+ freshness: PortfolioProjectionFreshnessStatus;
320
+ failures: PortfolioProjectionFailure[];
321
+ currencyCoverage: PortfolioCurrencyCoverage;
322
+ }
323
+ export interface PortfolioCloudAccountSummary {
324
+ metadata: PortfolioCloudAccountSummaryMetadata;
325
+ estate: PortfolioEstateCompanyContribution;
326
+ insights: PortfolioInsightsCompanyContribution;
327
+ operations: PortfolioOperationsCompanyContribution;
328
+ }
329
+ export interface PortfolioCloudAccountSummaryArtifactDescriptor {
330
+ kind: 'summary';
331
+ path: string;
332
+ contentHash: string;
333
+ byteSize: number;
334
+ compressedByteSize?: number;
335
+ rowCount: number;
336
+ }
337
+ export interface PortfolioCloudAccountSummaryManifest {
338
+ schemaVersion: typeof PORTFOLIO_CLOUD_ACCOUNT_SUMMARY_SCHEMA_VERSION;
339
+ group: 'cloud-account';
340
+ companyId: string;
341
+ cloudAccountId: string;
342
+ provider: PortfolioCloudProvider;
343
+ providerAccountId?: string;
344
+ tenantRunId: string;
345
+ sourceRunStartedAt?: string;
346
+ generationId: string;
347
+ generatedAt: string;
348
+ sourceObservedAt?: string;
349
+ inputDigest: string;
350
+ inputSubscriptionIds: string[];
351
+ inputGenerationIds?: string[];
352
+ buildStatus: PortfolioProjectionBuildStatus;
353
+ freshness: PortfolioProjectionFreshnessStatus;
354
+ failures: PortfolioProjectionFailure[];
355
+ artifact: PortfolioCloudAccountSummaryArtifactDescriptor;
356
+ warnings: string[];
357
+ }
358
+ export interface PortfolioDeliverySummary {
359
+ totalIssuedSows: number;
360
+ approvedSows: number;
361
+ unapprovedSows: number;
362
+ issuedThisMonth: number;
363
+ monthEndComplete: number;
364
+ monthEndIncomplete: number;
365
+ monthEndUnavailable: number;
366
+ }
367
+ export interface PortfolioDeliveryCompanyContribution {
368
+ companyId: string;
369
+ companyName: string;
370
+ summary: PortfolioDeliverySummary;
371
+ reports: PortfolioReportRow[];
372
+ sows: PortfolioSowRow[];
373
+ monthEnd: PortfolioMonthEndRow[];
374
+ attention: PortfolioAttentionItem[];
375
+ reportRetention?: PortfolioRetainedSectionMetadata;
376
+ sowRetention?: PortfolioRetainedSectionMetadata;
377
+ monthEndRetention?: PortfolioRetainedSectionMetadata;
378
+ attentionRetention?: PortfolioRetainedSectionMetadata;
379
+ reportSummary?: PortfolioReportSummary;
380
+ attentionSummary?: PortfolioAttentionSummary;
381
+ failures: PortfolioProjectionFailure[];
382
+ }
383
+ export interface PortfolioDeliveryProjection {
384
+ metadata: PortfolioProjectionMetadata;
385
+ summary: PortfolioDeliverySummary;
386
+ reports: PortfolioBoundedSection<PortfolioReportRow>;
387
+ sows: PortfolioBoundedSection<PortfolioSowRow>;
388
+ monthEnd: PortfolioBoundedSection<PortfolioMonthEndRow>;
389
+ attention: PortfolioBoundedSection<PortfolioAttentionItem>;
390
+ companyContributions: PortfolioDeliveryCompanyContribution[];
391
+ }
392
+ export interface PortfolioCloudProjectionDetailShard {
393
+ schemaVersion: PortfolioProjectionSchemaVersion;
394
+ group: 'cloud';
395
+ scopeCompanyId: string;
396
+ generationId: string;
397
+ shardIndex: number;
398
+ shardCount: number;
399
+ companyIds: string[];
400
+ estate: PortfolioEstateCompanyContribution[];
401
+ insights: PortfolioInsightsCompanyContribution[];
402
+ operations: PortfolioOperationsCompanyContribution[];
403
+ }
404
+ export interface PortfolioDeliveryProjectionDetailShard {
405
+ schemaVersion: PortfolioProjectionSchemaVersion;
406
+ group: 'delivery';
407
+ scopeCompanyId: string;
408
+ generationId: string;
409
+ shardIndex: number;
410
+ shardCount: number;
411
+ companyIds: string[];
412
+ delivery: PortfolioDeliveryCompanyContribution[];
413
+ }
414
+ export type PortfolioProjectionDetailShard = PortfolioCloudProjectionDetailShard | PortfolioDeliveryProjectionDetailShard;
415
+ export interface PortfolioManagementSummary {
416
+ companiesHealthy: number;
417
+ companiesNeedingAttention: number;
418
+ companiesCritical: number;
419
+ companiesNotAssessed: number;
420
+ budgetsOver: number;
421
+ budgetsForecastOver: number;
422
+ risks: number;
423
+ /** Full-scope count of companies with at least one active recommendation risk. */
424
+ companiesWithRisks?: number;
425
+ /** Full-scope count of companies with at least one active Critical or High recommendation risk. */
426
+ companiesWithHighRisks?: number;
427
+ actionsDueWithin30Days: number;
428
+ reportingDue: number;
429
+ }
430
+ export interface PortfolioCompanyHealthRow {
431
+ companyId: string;
432
+ companyName: string;
433
+ status: PortfolioOperationalStatus;
434
+ coverage: PortfolioDataStatus;
435
+ primaryAttention?: PortfolioAttentionItem;
436
+ }
437
+ export interface PortfolioOverviewResponse {
438
+ scopeCompanyId: string;
439
+ generatedAt: string;
440
+ management: PortfolioManagementSummary;
441
+ /** Optional only while clients may receive the immediately preceding projection schema. */
442
+ companies?: PortfolioBoundedSection<PortfolioCompanyHealthRow>;
443
+ accounts: PortfolioBoundedSection<PortfolioCloudAccountRow>;
444
+ attention: PortfolioBoundedSection<PortfolioAttentionItem>;
445
+ risks: PortfolioBoundedSection<PortfolioAttentionItem>;
446
+ serviceOpportunities: PortfolioBoundedSection<PortfolioAttentionItem>;
447
+ recommendations: PortfolioRecommendationSummary;
448
+ operationalPosture: PortfolioOperationalPostureSummary;
449
+ finops: PortfolioFinopsSummary;
450
+ delivery: PortfolioDeliverySummary;
451
+ coverage: PortfolioDataCoverage;
452
+ sourceFreshness: Array<{
453
+ source: PortfolioProjectionPrimaryArtifactKind;
454
+ status: PortfolioProjectionFreshnessStatus;
455
+ generatedAt?: string;
456
+ sourceObservedAt?: string;
457
+ }>;
458
+ currencyCoverage: PortfolioCurrencyCoverage;
459
+ }
460
+ //# sourceMappingURL=portfolioProjections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolioProjections.d.ts","sourceRoot":"","sources":["../../src/portfolio/portfolioProjections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PORTFOLIO_CLOUD_ACCOUNT_SUMMARY_SCHEMA_VERSION = exports.PORTFOLIO_PROJECTION_MAX_DECODED_BYTES = exports.PORTFOLIO_PROJECTION_MAX_COMPRESSED_BYTES = exports.PORTFOLIO_PROJECTION_MAX_REQUEST_DECODED_BYTES = exports.PORTFOLIO_PROJECTION_DETAIL_TARGET_DECODED_BYTES = exports.PORTFOLIO_PROJECTION_DETAIL_TARGET_COMPRESSED_BYTES = exports.PORTFOLIO_PROJECTION_DETAIL_SHARD_COUNT = exports.PORTFOLIO_PROJECTION_DETAIL_LIMIT = exports.PORTFOLIO_PROJECTION_COMPATIBLE_SCHEMA_VERSIONS = exports.PORTFOLIO_PROJECTION_SCHEMA_VERSION = exports.PORTFOLIO_PROJECTION_PREVIOUS_SCHEMA_VERSION = void 0;
4
+ exports.PORTFOLIO_PROJECTION_PREVIOUS_SCHEMA_VERSION = '2026-07-26';
5
+ exports.PORTFOLIO_PROJECTION_SCHEMA_VERSION = '2026-08-02';
6
+ exports.PORTFOLIO_PROJECTION_COMPATIBLE_SCHEMA_VERSIONS = [
7
+ exports.PORTFOLIO_PROJECTION_PREVIOUS_SCHEMA_VERSION,
8
+ exports.PORTFOLIO_PROJECTION_SCHEMA_VERSION,
9
+ ];
10
+ exports.PORTFOLIO_PROJECTION_DETAIL_LIMIT = 60;
11
+ /** Legacy fixed-shard count used to read compatible manifests published before byte-bounded packing. */
12
+ exports.PORTFOLIO_PROJECTION_DETAIL_SHARD_COUNT = 16;
13
+ /** Publishers target small detail artifacts and start a new shard before either target is crossed. */
14
+ exports.PORTFOLIO_PROJECTION_DETAIL_TARGET_COMPRESSED_BYTES = 1 * 1024 * 1024;
15
+ exports.PORTFOLIO_PROJECTION_DETAIL_TARGET_DECODED_BYTES = 2 * 1024 * 1024;
16
+ /** Aggregate decoded payload budget for a single Worker projection read. */
17
+ exports.PORTFOLIO_PROJECTION_MAX_REQUEST_DECODED_BYTES = 24 * 1024 * 1024;
18
+ exports.PORTFOLIO_PROJECTION_MAX_COMPRESSED_BYTES = 8 * 1024 * 1024;
19
+ exports.PORTFOLIO_PROJECTION_MAX_DECODED_BYTES = 32 * 1024 * 1024;
20
+ exports.PORTFOLIO_CLOUD_ACCOUNT_SUMMARY_SCHEMA_VERSION = '2026-08-13';
21
+ //# sourceMappingURL=portfolioProjections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolioProjections.js","sourceRoot":"","sources":["../../src/portfolio/portfolioProjections.ts"],"names":[],"mappings":";;;AAYa,QAAA,4CAA4C,GAAG,YAAqB,CAAC;AACrE,QAAA,mCAAmC,GAAG,YAAqB,CAAC;AAC5D,QAAA,+CAA+C,GAAG;IAC7D,oDAA4C;IAC5C,2CAAmC;CAC3B,CAAC;AACE,QAAA,iCAAiC,GAAG,EAAE,CAAC;AACpD,wGAAwG;AAC3F,QAAA,uCAAuC,GAAG,EAAE,CAAC;AAC1D,sGAAsG;AACzF,QAAA,mDAAmD,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACtE,QAAA,gDAAgD,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAChF,4EAA4E;AAC/D,QAAA,8CAA8C,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAClE,QAAA,yCAAyC,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5D,QAAA,sCAAsC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,QAAA,8CAA8C,GAAG,YAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spottoai/types-package",
3
- "version": "1.0.2-beta.359",
3
+ "version": "1.0.2-beta.360",
4
4
  "description": "Shared TypeScript interfaces for SpottoAI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",