xytara 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,449 @@
1
+ "use strict";
2
+
3
+ function normalizeString(value, fallback = null) {
4
+ const trimmed = typeof value === "string" ? value.trim() : "";
5
+ return trimmed || fallback;
6
+ }
7
+
8
+ function ensureArray(value) {
9
+ return Array.isArray(value) ? value : [];
10
+ }
11
+
12
+ function nowIso() {
13
+ return new Date().toISOString();
14
+ }
15
+
16
+ function listMapValuesByAccount(map, accountId) {
17
+ return Array.from(map.values()).filter((item) => item && item.account_id === accountId);
18
+ }
19
+
20
+ function listExternalCreditGrantsForAccount(state, accountId) {
21
+ return Array.from(state.externalCreditGrants.values()).filter((item) => item && item.account_id === accountId);
22
+ }
23
+
24
+ function listSpendCredentialsForAccount(state, accountId) {
25
+ return Array.from(state.accountSpendCredentials.values()).filter((item) => item && item.account_id === accountId);
26
+ }
27
+
28
+ function listAuthorityBindingsForAccount(state, accountId) {
29
+ return Array.from(state.accountAuthorityBindings.values()).filter((item) => item && item.account_id === accountId);
30
+ }
31
+
32
+ function listDelegatedTransactionsForCredential(state, credentialId) {
33
+ return Array.from(state.transactions.values())
34
+ .map((entry) => entry && entry.transaction)
35
+ .filter((transaction) =>
36
+ transaction &&
37
+ transaction.payment &&
38
+ transaction.payment.verification_mode === "delegated_spend_credential" &&
39
+ transaction.payment.wallet_id === credentialId
40
+ );
41
+ }
42
+
43
+ function buildAuthoritySummary(state, accountId) {
44
+ const bindings = listAuthorityBindingsForAccount(state, accountId);
45
+ const credentials = listSpendCredentialsForAccount(state, accountId);
46
+ const grants = listExternalCreditGrantsForAccount(state, accountId);
47
+ const entitlements = listMapValuesByAccount(state.economicsEntitlements, accountId);
48
+ const agents = listMapValuesByAccount(state.economicsAgents, accountId);
49
+ const budgets = listMapValuesByAccount(state.economicsBudgets, accountId);
50
+
51
+ const activeCredentials = credentials.filter((entry) => entry.status === "active");
52
+ const activeBindings = bindings.filter((entry) => entry.status === "active");
53
+ const revokedCredentials = credentials.filter((entry) => entry.status === "revoked");
54
+ const boundedCredentials = activeCredentials.filter((entry) => entry.spend_posture === "bounded_spend");
55
+ const openCredentials = activeCredentials.filter((entry) => entry.spend_posture === "open_spend");
56
+ const entitlementBoundCredentials = activeCredentials.filter((entry) => entry.entitlement_id);
57
+ const packBoundCredentials = activeCredentials.filter((entry) => !entry.entitlement_id && entry.pack_id);
58
+ const activeEntitlements = entitlements.filter((entry) => entry.status === "active" && Number(entry.remaining_units || 0) > 0);
59
+ const activeAgents = agents.filter((entry) => entry.status === "active");
60
+ const activeBudgets = budgets.filter((entry) => entry.status === "active");
61
+
62
+ let delegatedSpendState = "no_delegated_spend";
63
+ if (activeBindings.length > 0 || activeCredentials.length > 0) {
64
+ delegatedSpendState = boundedCredentials.length > 0 ? "bounded_delegated_spend_available" : "open_delegated_spend_available";
65
+ }
66
+
67
+ let authorityState = "unbound";
68
+ if (activeEntitlements.length > 0 || grants.length > 0) authorityState = "funded";
69
+ if (activeAgents.length > 0 || activeBudgets.length > 0 || activeBindings.length > 0 || activeCredentials.length > 0) authorityState = "governed";
70
+
71
+ return {
72
+ summary_version: "xytara-authority-summary-v1",
73
+ account_id: accountId,
74
+ authority_state: authorityState,
75
+ delegated_spend_state: delegatedSpendState,
76
+ entitlement_binding_state: entitlementBoundCredentials.length > 0
77
+ ? "entitlement_bound_delegation_present"
78
+ : packBoundCredentials.length > 0
79
+ ? "pack_bound_delegation_present"
80
+ : activeEntitlements.length > 0
81
+ ? "funded_without_bound_delegation"
82
+ : "no_entitlement_binding",
83
+ bounded_policy_state: activeAgents.length > 0 || activeBudgets.length > 0
84
+ ? "bounded_policy_present"
85
+ : "no_bounded_policy",
86
+ external_funding_state: grants.length > 0 ? "external_funding_present" : "no_external_funding_recorded",
87
+ counts: {
88
+ spend_credential_count: credentials.length,
89
+ authority_binding_count: bindings.length,
90
+ active_authority_binding_count: activeBindings.length,
91
+ active_spend_credential_count: activeCredentials.length,
92
+ revoked_spend_credential_count: revokedCredentials.length,
93
+ bounded_spend_credential_count: boundedCredentials.length,
94
+ open_spend_credential_count: openCredentials.length,
95
+ external_credit_grant_count: grants.length,
96
+ entitlement_count: entitlements.length,
97
+ active_entitlement_count: activeEntitlements.length,
98
+ economics_agent_count: agents.length,
99
+ active_economics_agent_count: activeAgents.length,
100
+ economics_budget_count: budgets.length,
101
+ active_economics_budget_count: activeBudgets.length
102
+ },
103
+ authority_units: {
104
+ granted_units: grants.reduce((sum, entry) => sum + Number(entry.units || 0), 0),
105
+ entitled_remaining_units: entitlements.reduce((sum, entry) => sum + Number(entry.remaining_units || 0), 0)
106
+ },
107
+ linked_surfaces: {
108
+ spend_credentials_ref: `/v1/spend-credentials?account_id=${encodeURIComponent(accountId)}`,
109
+ external_credit_grants_ref: `/v1/credit-bridge/grants?account_id=${encodeURIComponent(accountId)}`,
110
+ entitlements_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/entitlements`,
111
+ policy_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/policy-summary`,
112
+ authority_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-bundle`
113
+ },
114
+ generated_at_iso: nowIso()
115
+ };
116
+ }
117
+
118
+ function buildAuthorityBundle(state, accountId) {
119
+ const summary = buildAuthoritySummary(state, accountId);
120
+ const bindings = listAuthorityBindingsForAccount(state, accountId).map((entry) => ({
121
+ binding_id: entry.binding_id,
122
+ status: entry.status,
123
+ authority_kind: entry.authority_kind,
124
+ spend_posture: entry.spend_posture,
125
+ scope: entry.scope,
126
+ authority_scope: ensureArray(entry.authority_scope),
127
+ allowed_consequence_families: ensureArray(entry.allowed_consequence_families),
128
+ consequence_bounds: entry.consequence_bounds || {
129
+ max_commit_units: null,
130
+ max_reserve_units: null,
131
+ max_reversal_units: null
132
+ },
133
+ credential_id: entry.credential_id || null,
134
+ agent_id: entry.agent_id || null,
135
+ budget_id: entry.budget_id || null,
136
+ pack_id: entry.pack_id || null,
137
+ entitlement_id: entry.entitlement_id || null,
138
+ issued_by: entry.issued_by || null,
139
+ expires_at_iso: entry.expires_at_iso || null
140
+ }));
141
+ const credentials = listSpendCredentialsForAccount(state, accountId).map((entry) => ({
142
+ credential_id: entry.credential_id,
143
+ status: entry.status,
144
+ spend_posture: entry.spend_posture,
145
+ scope: entry.scope,
146
+ agent_id: entry.agent_id || null,
147
+ budget_id: entry.budget_id || null,
148
+ pack_id: entry.pack_id || null,
149
+ entitlement_id: entry.entitlement_id || null,
150
+ issued_by: entry.issued_by || null,
151
+ expires_at_iso: entry.expires_at_iso || null,
152
+ labels: ensureArray(entry.labels)
153
+ }));
154
+ const grants = listExternalCreditGrantsForAccount(state, accountId).map((entry) => ({
155
+ grant_id: entry.grant_id,
156
+ status: entry.status,
157
+ source: entry.source || null,
158
+ pack_id: entry.pack_id || null,
159
+ entitlement_id: entry.entitlement_id || null,
160
+ units: Number(entry.units || 0),
161
+ provider_reference: entry.provider_reference || null,
162
+ created_at_iso: entry.created_at_iso || null
163
+ }));
164
+ const entitlements = listMapValuesByAccount(state.economicsEntitlements, accountId).map((entry) => ({
165
+ entitlement_id: entry.entitlement_id,
166
+ status: entry.status,
167
+ pack_id: entry.pack_id || null,
168
+ issued_units: Number(entry.issued_units || 0),
169
+ consumed_units: Number(entry.consumed_units || 0),
170
+ remaining_units: Number(entry.remaining_units || 0),
171
+ preferred_replacement_pack_id: entry.preferred_replacement_pack_id || null
172
+ }));
173
+ const agents = listMapValuesByAccount(state.economicsAgents, accountId).map((entry) => ({
174
+ agent_id: entry.agent_id,
175
+ status: entry.status,
176
+ default_budget_id: entry.default_budget_id || null,
177
+ allowed_job_domains: ensureArray(entry.allowed_job_domains)
178
+ }));
179
+ const budgets = listMapValuesByAccount(state.economicsBudgets, accountId).map((entry) => ({
180
+ budget_id: entry.budget_id,
181
+ status: entry.status,
182
+ max_reserve_units: entry.max_reserve_units,
183
+ policy_ref: entry.policy_ref || null,
184
+ allowed_job_domains: ensureArray(entry.allowed_job_domains)
185
+ }));
186
+
187
+ return {
188
+ bundle_version: "xytara-authority-bundle-v1",
189
+ account_id: accountId,
190
+ authority_summary: summary,
191
+ authority_bindings: bindings,
192
+ delegated_spend_credentials: credentials,
193
+ external_credit_grants: grants,
194
+ entitlements,
195
+ economics_agents: agents,
196
+ economics_budgets: budgets,
197
+ authority_tracks: {
198
+ funding_track: grants.length > 0 ? "external_grant_backed" : "direct_credit_only",
199
+ delegation_track: bindings.length > 0 ? "authority_binding_available" : credentials.length > 0 ? "delegated_spend_available" : "operator_only_spend",
200
+ governance_track: agents.length > 0 || budgets.length > 0 ? "policy_bounded" : "unbounded"
201
+ },
202
+ linked_surfaces: {
203
+ authority_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-summary`,
204
+ operator_shell_summary_ref: "/v1/operator-shell/summary"
205
+ },
206
+ generated_at_iso: nowIso()
207
+ };
208
+ }
209
+
210
+ function buildAuthorityUsageSummary(state, accountId) {
211
+ const bindings = listAuthorityBindingsForAccount(state, accountId);
212
+ const bindingUsage = bindings.map((binding) => {
213
+ const delegatedTransactions = listDelegatedTransactionsForCredential(state, binding.credential_id);
214
+ const usageCount = delegatedTransactions.length;
215
+ const latestUsedAtIso = delegatedTransactions
216
+ .map((entry) => entry.created_at_iso || null)
217
+ .filter(Boolean)
218
+ .sort()
219
+ .slice(-1)[0] || null;
220
+ return {
221
+ binding_id: binding.binding_id,
222
+ credential_id: binding.credential_id || null,
223
+ status: binding.status,
224
+ authority_scope: ensureArray(binding.authority_scope),
225
+ delegated_transaction_count: usageCount,
226
+ latest_used_at_iso: latestUsedAtIso
227
+ };
228
+ });
229
+
230
+ return {
231
+ summary_version: "xytara-authority-usage-summary-v1",
232
+ account_id: accountId,
233
+ authority_binding_count: bindings.length,
234
+ active_authority_binding_count: bindings.filter((entry) => entry.status === "active").length,
235
+ used_authority_binding_count: bindingUsage.filter((entry) => entry.delegated_transaction_count > 0).length,
236
+ total_delegated_transaction_count: bindingUsage.reduce((sum, entry) => sum + entry.delegated_transaction_count, 0),
237
+ bindings: bindingUsage,
238
+ linked_surfaces: {
239
+ authority_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-summary`,
240
+ authority_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-bundle`,
241
+ authority_review_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-review-bundle`
242
+ },
243
+ generated_at_iso: nowIso()
244
+ };
245
+ }
246
+
247
+ function buildAuthorityReviewBundle(state, accountId) {
248
+ const summary = buildAuthoritySummary(state, accountId);
249
+ const usage = buildAuthorityUsageSummary(state, accountId);
250
+ const reviewRows = usage.bindings.map((bindingUsage) => {
251
+ const matchingBinding = listAuthorityBindingsForAccount(state, accountId).find((entry) => entry.binding_id === bindingUsage.binding_id) || null;
252
+ const scopeCount = bindingUsage.authority_scope.length;
253
+ const consequenceBounds = matchingBinding && matchingBinding.consequence_bounds ? matchingBinding.consequence_bounds : {};
254
+ const broadOpenSpend = matchingBinding && matchingBinding.spend_posture === "open_spend" && scopeCount > 1;
255
+ const quietBinding = bindingUsage.delegated_transaction_count === 0;
256
+ const missingBounds = !Number.isFinite(Number(consequenceBounds.max_commit_units));
257
+ const reviewState = broadOpenSpend || missingBounds ? "tighten_candidate" : quietBinding ? "rotate_or_revoke_candidate" : "healthy";
258
+ return {
259
+ binding_id: bindingUsage.binding_id,
260
+ credential_id: bindingUsage.credential_id,
261
+ review_state: reviewState,
262
+ delegated_transaction_count: bindingUsage.delegated_transaction_count,
263
+ authority_scope_count: scopeCount,
264
+ latest_used_at_iso: bindingUsage.latest_used_at_iso,
265
+ recommended_action: reviewState === "tighten_candidate"
266
+ ? "tighten_scope_or_bounds"
267
+ : reviewState === "rotate_or_revoke_candidate"
268
+ ? "review_for_rotation_or_revocation"
269
+ : "keep_active"
270
+ };
271
+ });
272
+
273
+ return {
274
+ bundle_version: "xytara-authority-review-bundle-v1",
275
+ account_id: accountId,
276
+ authority_summary: summary,
277
+ authority_usage_summary: usage,
278
+ review_rows: reviewRows,
279
+ review_counts: {
280
+ tighten_candidate_count: reviewRows.filter((entry) => entry.review_state === "tighten_candidate").length,
281
+ rotate_or_revoke_candidate_count: reviewRows.filter((entry) => entry.review_state === "rotate_or_revoke_candidate").length,
282
+ healthy_count: reviewRows.filter((entry) => entry.review_state === "healthy").length
283
+ },
284
+ linked_surfaces: {
285
+ authority_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-summary`,
286
+ authority_usage_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-usage-summary`
287
+ },
288
+ generated_at_iso: nowIso()
289
+ };
290
+ }
291
+
292
+ function buildAuthorityAttentionSummary(state, accountId) {
293
+ const reviewBundle = buildAuthorityReviewBundle(state, accountId);
294
+ const attentionRows = reviewBundle.review_rows
295
+ .filter((entry) => entry.review_state !== "healthy")
296
+ .map((entry) => ({
297
+ binding_id: entry.binding_id,
298
+ credential_id: entry.credential_id,
299
+ review_state: entry.review_state,
300
+ delegated_transaction_count: entry.delegated_transaction_count,
301
+ latest_used_at_iso: entry.latest_used_at_iso,
302
+ recommended_action: entry.recommended_action
303
+ }));
304
+
305
+ return {
306
+ summary_version: "xytara-authority-attention-summary-v1",
307
+ account_id: accountId,
308
+ overall_attention_state: attentionRows.length > 0 ? "attention_required" : "healthy",
309
+ attention_binding_count: attentionRows.length,
310
+ review_counts: reviewBundle.review_counts,
311
+ attention_rows: attentionRows,
312
+ linked_surfaces: {
313
+ authority_review_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-review-bundle`,
314
+ authority_usage_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-usage-summary`
315
+ },
316
+ generated_at_iso: nowIso()
317
+ };
318
+ }
319
+
320
+ function buildAuthorityLineageSummary(state, accountId) {
321
+ const bindings = listAuthorityBindingsForAccount(state, accountId);
322
+ const bindingIds = new Set(bindings.map((entry) => entry.binding_id));
323
+ const lineageRows = bindings.map((entry) => {
324
+ const predecessorId = normalizeString(entry.rotated_from_binding_id, null);
325
+ const successorId = normalizeString(entry.replaced_by_binding_id, null);
326
+ return {
327
+ binding_id: entry.binding_id,
328
+ status: entry.status,
329
+ credential_id: entry.credential_id || null,
330
+ predecessor_binding_id: predecessorId,
331
+ successor_binding_id: successorId,
332
+ lineage_position: predecessorId ? successorId ? "middle" : "leaf" : successorId ? "root" : "standalone",
333
+ predecessor_known: predecessorId ? bindingIds.has(predecessorId) : false,
334
+ successor_known: successorId ? bindingIds.has(successorId) : false,
335
+ rotated_at_iso: entry.revoked_at_iso || null,
336
+ created_at_iso: entry.created_at_iso || null,
337
+ updated_at_iso: entry.updated_at_iso || null
338
+ };
339
+ });
340
+
341
+ const roots = lineageRows.filter((entry) => entry.lineage_position === "root" || entry.lineage_position === "standalone");
342
+ const leaves = lineageRows.filter((entry) => entry.lineage_position === "leaf" || entry.lineage_position === "standalone");
343
+
344
+ return {
345
+ summary_version: "xytara-authority-lineage-summary-v1",
346
+ account_id: accountId,
347
+ authority_binding_count: bindings.length,
348
+ rotated_binding_count: lineageRows.filter((entry) => entry.predecessor_binding_id || entry.successor_binding_id).length,
349
+ root_binding_count: roots.length,
350
+ leaf_binding_count: leaves.length,
351
+ lineage_rows: lineageRows,
352
+ linked_surfaces: {
353
+ authority_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-bundle`,
354
+ authority_review_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-review-bundle`,
355
+ authority_attention_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-attention-summary`
356
+ },
357
+ generated_at_iso: nowIso()
358
+ };
359
+ }
360
+
361
+ function buildAuthorityPolicyPack(state, accountId) {
362
+ const summary = buildAuthoritySummary(state, accountId);
363
+ const review = buildAuthorityReviewBundle(state, accountId);
364
+ const attention = buildAuthorityAttentionSummary(state, accountId);
365
+ const lineage = buildAuthorityLineageSummary(state, accountId);
366
+ const templates = [
367
+ {
368
+ template_id: "runtime_builder_default",
369
+ authority_scope: ["runtime.execute", "economics.consume"],
370
+ allowed_consequence_families: ["commit", "meter"],
371
+ consequence_bounds: {
372
+ max_commit_units: 25,
373
+ max_reserve_units: null,
374
+ max_reversal_units: 0
375
+ },
376
+ recommended_for: "runtime-first delegated execution"
377
+ },
378
+ {
379
+ template_id: "reserve_operator_bounded",
380
+ authority_scope: ["economics.reserve", "economics.release"],
381
+ allowed_consequence_families: ["reserve", "release"],
382
+ consequence_bounds: {
383
+ max_commit_units: 0,
384
+ max_reserve_units: 40,
385
+ max_reversal_units: 0
386
+ },
387
+ recommended_for: "bounded treasury-hold operations"
388
+ },
389
+ {
390
+ template_id: "reversal_operator_limited",
391
+ authority_scope: ["economics.reverse"],
392
+ allowed_consequence_families: ["reverse"],
393
+ consequence_bounds: {
394
+ max_commit_units: 0,
395
+ max_reserve_units: 0,
396
+ max_reversal_units: 5
397
+ },
398
+ recommended_for: "corrective operator handling"
399
+ }
400
+ ];
401
+
402
+ return {
403
+ pack_version: "xytara-authority-policy-pack-v1",
404
+ account_id: accountId,
405
+ authority_summary: summary,
406
+ review_counts: review.review_counts,
407
+ overall_attention_state: attention.overall_attention_state,
408
+ lineage_overview: {
409
+ authority_binding_count: lineage.authority_binding_count,
410
+ rotated_binding_count: lineage.rotated_binding_count,
411
+ root_binding_count: lineage.root_binding_count,
412
+ leaf_binding_count: lineage.leaf_binding_count
413
+ },
414
+ recommended_policy_motion: attention.attention_binding_count > 0 ? "tighten_or_rotate_existing_bindings" : "issue_from_template",
415
+ policy_templates: templates,
416
+ linked_surfaces: {
417
+ authority_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-bundle`,
418
+ authority_review_bundle_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-review-bundle`,
419
+ authority_attention_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-attention-summary`,
420
+ authority_lineage_summary_ref: `/v1/economics/accounts/${encodeURIComponent(accountId)}/authority-lineage-summary`
421
+ },
422
+ generated_at_iso: nowIso()
423
+ };
424
+ }
425
+
426
+ function buildAuthorityPolicyPackSummary(state, accountId) {
427
+ const pack = buildAuthorityPolicyPack(state, accountId);
428
+ return {
429
+ summary_version: "xytara-authority-policy-pack-summary-v1",
430
+ account_id: accountId,
431
+ recommended_policy_motion: pack.recommended_policy_motion,
432
+ template_count: Array.isArray(pack.policy_templates) ? pack.policy_templates.length : 0,
433
+ overall_attention_state: pack.overall_attention_state,
434
+ rotated_binding_count: pack.lineage_overview.rotated_binding_count,
435
+ linked_surfaces: pack.linked_surfaces,
436
+ generated_at_iso: pack.generated_at_iso
437
+ };
438
+ }
439
+
440
+ module.exports = {
441
+ buildAuthoritySummary,
442
+ buildAuthorityBundle,
443
+ buildAuthorityUsageSummary,
444
+ buildAuthorityReviewBundle,
445
+ buildAuthorityAttentionSummary,
446
+ buildAuthorityLineageSummary,
447
+ buildAuthorityPolicyPack,
448
+ buildAuthorityPolicyPackSummary
449
+ };
@@ -3776,6 +3776,30 @@ class CommerceClient {
3776
3776
  return result && result.data ? result.data : null;
3777
3777
  }
3778
3778
 
3779
+ async getPartnerIntelligenceSummary() {
3780
+ const result = await this.getJson("/v1/partner-intelligence/summary");
3781
+ return result && result.data ? result.data : null;
3782
+ }
3783
+
3784
+ async getPartnerIntelligencePack() {
3785
+ const result = await this.getJson("/v1/partner-intelligence");
3786
+ return result && result.data ? result.data : null;
3787
+ }
3788
+
3789
+ async getOperatorIntelligenceSummary(accountId) {
3790
+ const resolvedAccountId = String(accountId || this.accountId || "").trim();
3791
+ const suffix = resolvedAccountId ? `?account_id=${encodeURIComponent(resolvedAccountId)}` : "";
3792
+ const result = await this.getJson(`/v1/operator-intelligence/summary${suffix}`);
3793
+ return result && result.data ? result.data : null;
3794
+ }
3795
+
3796
+ async getOperatorIntelligencePack(accountId) {
3797
+ const resolvedAccountId = String(accountId || this.accountId || "").trim();
3798
+ const suffix = resolvedAccountId ? `?account_id=${encodeURIComponent(resolvedAccountId)}` : "";
3799
+ const result = await this.getJson(`/v1/operator-intelligence${suffix}`);
3800
+ return result && result.data ? result.data : null;
3801
+ }
3802
+
3779
3803
  async getCreditBalance(accountId) {
3780
3804
  const resolvedAccountId = String(accountId || this.accountId || "").trim();
3781
3805
  if (!resolvedAccountId) throw new Error("getCreditBalance requires accountId");
@@ -3783,6 +3807,20 @@ class CommerceClient {
3783
3807
  return result && result.data ? result.data : null;
3784
3808
  }
3785
3809
 
3810
+ async getEconomicsIntelligenceSummary(accountId) {
3811
+ const resolvedAccountId = String(accountId || this.accountId || "").trim();
3812
+ if (!resolvedAccountId) throw new Error("getEconomicsIntelligenceSummary requires accountId");
3813
+ const result = await this.getJson(`/v1/economics/accounts/${encodeURIComponent(resolvedAccountId)}/intelligence-summary`);
3814
+ return result && result.data ? result.data : null;
3815
+ }
3816
+
3817
+ async getTreasuryIntelligenceSummary(accountId) {
3818
+ const resolvedAccountId = String(accountId || this.accountId || "").trim();
3819
+ if (!resolvedAccountId) throw new Error("getTreasuryIntelligenceSummary requires accountId");
3820
+ const result = await this.getJson(`/v1/economics/accounts/${encodeURIComponent(resolvedAccountId)}/treasury-intelligence-summary`);
3821
+ return result && result.data ? result.data : null;
3822
+ }
3823
+
3786
3824
  async getUsageMeteringSummary(accountId) {
3787
3825
  const resolvedAccountId = String(accountId || this.accountId || "").trim();
3788
3826
  if (!resolvedAccountId) throw new Error("getUsageMeteringSummary requires accountId");