@oxy-hq/sdk 2.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/dist/index.cjs +749 -115
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +556 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +556 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +745 -115
- package/dist/index.mjs.map +1 -1
- package/package.json +20 -15
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,484 @@
|
|
|
1
1
|
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
|
|
4
|
+
//#region src/config.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* Configuration for the Oxy SDK
|
|
7
|
+
*/
|
|
8
|
+
interface OxyConfig {
|
|
9
|
+
/**
|
|
10
|
+
* Base URL of the Oxy API (e.g., 'https://api.oxy.tech' or 'http://localhost:3000')
|
|
11
|
+
*/
|
|
12
|
+
baseUrl: string;
|
|
13
|
+
/**
|
|
14
|
+
* API key for authentication (optional for local development)
|
|
15
|
+
*/
|
|
16
|
+
apiKey?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Project ID (UUID)
|
|
19
|
+
*/
|
|
20
|
+
projectId: string;
|
|
21
|
+
/**
|
|
22
|
+
* Optional branch name (defaults to current branch if not specified)
|
|
23
|
+
*/
|
|
24
|
+
branch?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Request timeout in milliseconds (default: 30000)
|
|
27
|
+
*/
|
|
28
|
+
timeout?: number;
|
|
29
|
+
/**
|
|
30
|
+
* Parent window origin for postMessage authentication (iframe scenarios)
|
|
31
|
+
* Required when using postMessage auth for security.
|
|
32
|
+
* Example: 'https://app.example.com'
|
|
33
|
+
* Use '*' only in development!
|
|
34
|
+
*/
|
|
35
|
+
parentOrigin?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Disable automatic postMessage authentication even if in iframe
|
|
38
|
+
* Set to true if you want to provide API key manually in iframe context
|
|
39
|
+
*/
|
|
40
|
+
disableAutoAuth?: boolean;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region src/metricTree.d.ts
|
|
44
|
+
type EdgeKind = "component" | "driver";
|
|
45
|
+
type DriverDirection = "positive" | "negative" | "unknown";
|
|
46
|
+
type DriverStrength = "strong" | "moderate" | "weak";
|
|
47
|
+
type DriverConfidence = "high" | "medium" | "low";
|
|
48
|
+
type DriverForm = "linear" | "log-log" | "log-linear" | "linear-log";
|
|
49
|
+
interface MetricNode {
|
|
50
|
+
id: string;
|
|
51
|
+
view: string;
|
|
52
|
+
measure: string;
|
|
53
|
+
label: string;
|
|
54
|
+
description?: string | null;
|
|
55
|
+
measure_type: string;
|
|
56
|
+
is_composite: boolean;
|
|
57
|
+
expr?: string | null;
|
|
58
|
+
}
|
|
59
|
+
interface MetricEdge {
|
|
60
|
+
from: string;
|
|
61
|
+
to: string;
|
|
62
|
+
kind: EdgeKind;
|
|
63
|
+
/** Sign of a component edge; omitted (defaults to +1) for most edges. */
|
|
64
|
+
sign?: number;
|
|
65
|
+
direction: DriverDirection;
|
|
66
|
+
strength: DriverStrength;
|
|
67
|
+
confidence: DriverConfidence;
|
|
68
|
+
coefficient?: number | null;
|
|
69
|
+
form: DriverForm;
|
|
70
|
+
intercept?: number | null;
|
|
71
|
+
lag?: number | null;
|
|
72
|
+
description?: string | null;
|
|
73
|
+
refs?: string[] | null;
|
|
74
|
+
}
|
|
75
|
+
interface MetricTree {
|
|
76
|
+
nodes: MetricNode[];
|
|
77
|
+
edges: MetricEdge[];
|
|
78
|
+
root?: string | null;
|
|
79
|
+
}
|
|
80
|
+
interface SensitivityDriver {
|
|
81
|
+
measure: string;
|
|
82
|
+
path: string[];
|
|
83
|
+
edge_kind: string;
|
|
84
|
+
effective_coefficient?: number | null;
|
|
85
|
+
form?: DriverForm | null;
|
|
86
|
+
direction: DriverDirection;
|
|
87
|
+
strength: DriverStrength;
|
|
88
|
+
lag?: number | null;
|
|
89
|
+
description?: string | null;
|
|
90
|
+
}
|
|
91
|
+
interface SensitivityResult {
|
|
92
|
+
target: string;
|
|
93
|
+
drivers: SensitivityDriver[];
|
|
94
|
+
}
|
|
95
|
+
interface PredictChange {
|
|
96
|
+
measure: string;
|
|
97
|
+
delta: number;
|
|
98
|
+
}
|
|
99
|
+
interface PredictImpact {
|
|
100
|
+
measure: string;
|
|
101
|
+
estimated_delta: number;
|
|
102
|
+
confidence: string;
|
|
103
|
+
path: string[];
|
|
104
|
+
form: DriverForm;
|
|
105
|
+
lag?: number | null;
|
|
106
|
+
}
|
|
107
|
+
interface PredictResult {
|
|
108
|
+
inputs: PredictChange[];
|
|
109
|
+
impacts: PredictImpact[];
|
|
110
|
+
}
|
|
111
|
+
type SplitKind = {
|
|
112
|
+
type: "component";
|
|
113
|
+
child_measure: string;
|
|
114
|
+
} | {
|
|
115
|
+
type: "dimension";
|
|
116
|
+
dimension: string;
|
|
117
|
+
value: string;
|
|
118
|
+
} | {
|
|
119
|
+
type: "uniform_degradation";
|
|
120
|
+
dimension: string;
|
|
121
|
+
num_elements: number;
|
|
122
|
+
} | {
|
|
123
|
+
type: "cross_cutting";
|
|
124
|
+
dimension: string;
|
|
125
|
+
value: string;
|
|
126
|
+
measures: string[];
|
|
127
|
+
};
|
|
128
|
+
interface ExplainSibling {
|
|
129
|
+
split: SplitKind;
|
|
130
|
+
measure: string;
|
|
131
|
+
delta: number;
|
|
132
|
+
root_fraction: number;
|
|
133
|
+
}
|
|
134
|
+
interface ExplainNode {
|
|
135
|
+
split: SplitKind;
|
|
136
|
+
measure: string;
|
|
137
|
+
filters: unknown[];
|
|
138
|
+
delta: number;
|
|
139
|
+
concentration: number;
|
|
140
|
+
root_fraction: number;
|
|
141
|
+
siblings?: ExplainSibling[];
|
|
142
|
+
dimension_count?: number;
|
|
143
|
+
children?: ExplainNode[];
|
|
144
|
+
}
|
|
145
|
+
interface DriverAttribution {
|
|
146
|
+
driver_measure: string;
|
|
147
|
+
driver_previous: number;
|
|
148
|
+
driver_current: number;
|
|
149
|
+
driver_delta: number;
|
|
150
|
+
coefficient?: number;
|
|
151
|
+
form: DriverForm;
|
|
152
|
+
estimated_target_impact?: number;
|
|
153
|
+
description?: string;
|
|
154
|
+
}
|
|
155
|
+
type ExplainWarning = {
|
|
156
|
+
type: "simpsons_paradox";
|
|
157
|
+
dimension: string;
|
|
158
|
+
aggregate_delta: number;
|
|
159
|
+
segment_directions: [string, number][];
|
|
160
|
+
} | {
|
|
161
|
+
type: "opposing_offset";
|
|
162
|
+
component_a: string;
|
|
163
|
+
component_b: string;
|
|
164
|
+
delta_a: number;
|
|
165
|
+
delta_b: number;
|
|
166
|
+
} | {
|
|
167
|
+
type: "non_additive_dimension_split";
|
|
168
|
+
measure: string;
|
|
169
|
+
measure_type: string;
|
|
170
|
+
dimension: string;
|
|
171
|
+
};
|
|
172
|
+
interface ExplainConfigOverride {
|
|
173
|
+
deep?: boolean;
|
|
174
|
+
max_depth?: number;
|
|
175
|
+
coverage_threshold?: number;
|
|
176
|
+
}
|
|
177
|
+
interface ExplainRequest {
|
|
178
|
+
target: string;
|
|
179
|
+
time_dimension: string;
|
|
180
|
+
current_period: [string, string];
|
|
181
|
+
previous_period: [string, string];
|
|
182
|
+
config?: ExplainConfigOverride;
|
|
183
|
+
}
|
|
184
|
+
interface ExplainResult {
|
|
185
|
+
target: string;
|
|
186
|
+
target_delta: number;
|
|
187
|
+
target_previous: number;
|
|
188
|
+
target_current: number;
|
|
189
|
+
time_dimension: string;
|
|
190
|
+
current_period: [string, string];
|
|
191
|
+
previous_period: [string, string];
|
|
192
|
+
nodes: ExplainNode[];
|
|
193
|
+
coverage: number;
|
|
194
|
+
driver_attribution?: DriverAttribution[];
|
|
195
|
+
alternatives?: unknown[];
|
|
196
|
+
warnings?: ExplainWarning[];
|
|
197
|
+
}
|
|
198
|
+
interface SegmentOpportunity {
|
|
199
|
+
segment: string;
|
|
200
|
+
current_value: number;
|
|
201
|
+
volume: number;
|
|
202
|
+
benchmark: number;
|
|
203
|
+
gap: number;
|
|
204
|
+
/** Match-the-best upside in measure units. */
|
|
205
|
+
upside: number;
|
|
206
|
+
}
|
|
207
|
+
interface DimensionOpportunity {
|
|
208
|
+
dimension: string;
|
|
209
|
+
cardinality: number;
|
|
210
|
+
/** "best_peer" or "p75". */
|
|
211
|
+
benchmark_basis: string;
|
|
212
|
+
total_upside: number;
|
|
213
|
+
segments: SegmentOpportunity[];
|
|
214
|
+
other_segments_skipped: number;
|
|
215
|
+
}
|
|
216
|
+
interface SkippedDimension {
|
|
217
|
+
dimension: string;
|
|
218
|
+
reason: string;
|
|
219
|
+
}
|
|
220
|
+
interface OpportunityRequest {
|
|
221
|
+
target: string;
|
|
222
|
+
time_dimension: string;
|
|
223
|
+
period: [string, string];
|
|
224
|
+
}
|
|
225
|
+
interface OpportunityResult {
|
|
226
|
+
target: string;
|
|
227
|
+
period: [string, string];
|
|
228
|
+
overall_value: number;
|
|
229
|
+
/** "value_share" (additive) or "equal" (ratios). */
|
|
230
|
+
weight_basis: string;
|
|
231
|
+
dimensions: DimensionOpportunity[];
|
|
232
|
+
skipped_dimensions: SkippedDimension[];
|
|
233
|
+
downstream: PredictImpact[];
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Shape of the inner request helper exposed by `OxyClient`. The metric-tree
|
|
237
|
+
* client reuses it to inherit auth headers, timeout, baseUrl, and project
|
|
238
|
+
* scoping rather than reimplementing fetch end-to-end.
|
|
239
|
+
*/
|
|
240
|
+
type RequestFn$1 = <T>(endpoint: string, options?: RequestInit) => Promise<T>;
|
|
241
|
+
/**
|
|
242
|
+
* Client for the `/semantic/metric-tree*` endpoints. Surfaces the four
|
|
243
|
+
* airlayer metric-tree analyses (tree introspection, sensitivity, predict,
|
|
244
|
+
* explain, opportunity) over typed methods.
|
|
245
|
+
*
|
|
246
|
+
* Construction is internal to {@link OxyClient} — call `client.metricTree`
|
|
247
|
+
* to access an instance rather than building one yourself.
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
* ```typescript
|
|
251
|
+
* const client = await OxyClient.create({ projectId: "...", apiKey: "..." });
|
|
252
|
+
* const tree = await client.metricTree.getTree();
|
|
253
|
+
* const drivers = await client.metricTree.getSensitivity("orders.net_revenue");
|
|
254
|
+
* ```
|
|
255
|
+
*/
|
|
256
|
+
declare class MetricTreeClient {
|
|
257
|
+
private readonly request;
|
|
258
|
+
private readonly config;
|
|
259
|
+
constructor(config: OxyConfig, request: RequestFn$1);
|
|
260
|
+
private path;
|
|
261
|
+
private buildQuery;
|
|
262
|
+
/**
|
|
263
|
+
* Fetch the full metric tree, or the subtree rooted at `root`.
|
|
264
|
+
*
|
|
265
|
+
* @param root - Optional fully-qualified measure id to root the tree at.
|
|
266
|
+
* @returns Nodes (measures) and edges (component / driver relationships).
|
|
267
|
+
*
|
|
268
|
+
* @example
|
|
269
|
+
* ```typescript
|
|
270
|
+
* const tree = await client.metricTree.getTree();
|
|
271
|
+
* const subtree = await client.metricTree.getTree("orders.net_revenue");
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
getTree(root?: string): Promise<MetricTree>;
|
|
275
|
+
/**
|
|
276
|
+
* Rank the declared drivers of a measure by influence.
|
|
277
|
+
*
|
|
278
|
+
* @param measureId - Fully-qualified measure id (`view.measure`).
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* ```typescript
|
|
282
|
+
* const sensitivity = await client.metricTree.getSensitivity("orders.net_revenue");
|
|
283
|
+
* for (const driver of sensitivity.drivers) {
|
|
284
|
+
* console.log(driver.measure, driver.direction, driver.strength);
|
|
285
|
+
* }
|
|
286
|
+
* ```
|
|
287
|
+
*/
|
|
288
|
+
getSensitivity(measureId: string): Promise<SensitivityResult>;
|
|
289
|
+
/**
|
|
290
|
+
* Propagate hypothetical `(measure, delta)` changes upward through the
|
|
291
|
+
* tree. Returns the estimated impact on every downstream measure.
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* ```typescript
|
|
295
|
+
* const result = await client.metricTree.predict([
|
|
296
|
+
* { measure: "marketing_spend.total_spend", delta: 10000 },
|
|
297
|
+
* ]);
|
|
298
|
+
* ```
|
|
299
|
+
*/
|
|
300
|
+
predict(changes: PredictChange[]): Promise<PredictResult>;
|
|
301
|
+
/**
|
|
302
|
+
* Period-over-period root-cause decomposition. Recursively splits the
|
|
303
|
+
* target measure by components and dimensions until the move concentrates.
|
|
304
|
+
*
|
|
305
|
+
* @example
|
|
306
|
+
* ```typescript
|
|
307
|
+
* const result = await client.metricTree.explain({
|
|
308
|
+
* target: "financials.operating_profit",
|
|
309
|
+
* time_dimension: "financials.month",
|
|
310
|
+
* current_period: ["2025-09-01", "2025-09-30"],
|
|
311
|
+
* previous_period: ["2025-08-01", "2025-08-31"],
|
|
312
|
+
* });
|
|
313
|
+
* ```
|
|
314
|
+
*/
|
|
315
|
+
explain(request: ExplainRequest): Promise<ExplainResult>;
|
|
316
|
+
/**
|
|
317
|
+
* Size the upside opportunity for a measure by finding underperforming
|
|
318
|
+
* segments. Skips high-cardinality dimensions and trims the long tail.
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```typescript
|
|
322
|
+
* const result = await client.metricTree.findOpportunities({
|
|
323
|
+
* target: "orders.net_revenue",
|
|
324
|
+
* time_dimension: "orders.order_date",
|
|
325
|
+
* period: ["2025-09-01", "2025-09-30"],
|
|
326
|
+
* });
|
|
327
|
+
* for (const dim of result.dimensions) {
|
|
328
|
+
* console.log(dim.dimension, "+", dim.total_upside);
|
|
329
|
+
* }
|
|
330
|
+
* ```
|
|
331
|
+
*/
|
|
332
|
+
findOpportunities(request: OpportunityRequest): Promise<OpportunityResult>;
|
|
333
|
+
}
|
|
334
|
+
//#endregion
|
|
335
|
+
//#region src/anomalies.d.ts
|
|
336
|
+
type AnomalyStatus = "new" | "acknowledged" | "dismissed";
|
|
337
|
+
type AnomalySeverity = "low" | "medium" | "high";
|
|
338
|
+
/**
|
|
339
|
+
* One row in the anomaly inbox. Detected by `oxy-metric-monitoring` per
|
|
340
|
+
* `.monitor.yml` entry; upserted by repeat scans so unresolved anomalies
|
|
341
|
+
* stay visible without piling up duplicates.
|
|
342
|
+
*/
|
|
343
|
+
interface Anomaly {
|
|
344
|
+
id: string;
|
|
345
|
+
workspace_id: string;
|
|
346
|
+
measure: string;
|
|
347
|
+
time_dimension: string;
|
|
348
|
+
granularity: string;
|
|
349
|
+
period_start: string;
|
|
350
|
+
period_end: string;
|
|
351
|
+
observed: number;
|
|
352
|
+
expected: number;
|
|
353
|
+
lower_bound: number;
|
|
354
|
+
upper_bound: number;
|
|
355
|
+
z_score: number;
|
|
356
|
+
severity: AnomalySeverity | string;
|
|
357
|
+
status: AnomalyStatus | string;
|
|
358
|
+
label?: string | null;
|
|
359
|
+
/** Cached ExplainResult — populated by `POST /anomalies/:id/explain`. */
|
|
360
|
+
explain_cache?: ExplainResult | null;
|
|
361
|
+
explain_cached_at?: string | null;
|
|
362
|
+
detected_at: string;
|
|
363
|
+
updated_at: string;
|
|
364
|
+
}
|
|
365
|
+
interface ListAnomaliesOptions {
|
|
366
|
+
status?: AnomalyStatus | string;
|
|
367
|
+
/** Max rows (server caps at 500, defaults to 100). */
|
|
368
|
+
limit?: number;
|
|
369
|
+
}
|
|
370
|
+
interface ListAnomaliesResponse {
|
|
371
|
+
anomalies: Anomaly[];
|
|
372
|
+
}
|
|
373
|
+
interface ScanOptions {
|
|
374
|
+
/** Override the reference "now" date (YYYY-MM-DD) — useful for demos. */
|
|
375
|
+
as_of?: string;
|
|
376
|
+
}
|
|
377
|
+
interface ScanResponse {
|
|
378
|
+
monitors_scanned: number;
|
|
379
|
+
monitors_failed: number;
|
|
380
|
+
anomalies_persisted: number;
|
|
381
|
+
}
|
|
382
|
+
type RequestFn = <T>(endpoint: string, options?: RequestInit) => Promise<T>;
|
|
383
|
+
/**
|
|
384
|
+
* Client for `/semantic/anomalies*`. Construct via `OxyClient.anomalies`
|
|
385
|
+
* rather than instantiating directly — the getter wires the request helper
|
|
386
|
+
* so auth, timeout, and branch propagation come along for free.
|
|
387
|
+
*
|
|
388
|
+
* @example
|
|
389
|
+
* ```typescript
|
|
390
|
+
* const { anomalies } = await client.anomalies.list({ status: "new" });
|
|
391
|
+
* for (const a of anomalies) {
|
|
392
|
+
* console.log(a.label ?? a.measure, a.severity, a.z_score.toFixed(2));
|
|
393
|
+
* }
|
|
394
|
+
* ```
|
|
395
|
+
*/
|
|
396
|
+
declare class AnomaliesClient {
|
|
397
|
+
private readonly request;
|
|
398
|
+
private readonly config;
|
|
399
|
+
constructor(config: OxyConfig, request: RequestFn);
|
|
400
|
+
private path;
|
|
401
|
+
private buildQuery;
|
|
402
|
+
/**
|
|
403
|
+
* List anomalies in the inbox, newest first.
|
|
404
|
+
*
|
|
405
|
+
* @example
|
|
406
|
+
* ```typescript
|
|
407
|
+
* // Open / unresolved anomalies only
|
|
408
|
+
* const { anomalies } = await client.anomalies.list({ status: "new" });
|
|
409
|
+
* ```
|
|
410
|
+
*/
|
|
411
|
+
list(options?: ListAnomaliesOptions): Promise<ListAnomaliesResponse>;
|
|
412
|
+
/**
|
|
413
|
+
* Trigger a full scan. Iterates every `.monitor.yml` entry in the
|
|
414
|
+
* workspace, runs the detector, and upserts matching rows into the
|
|
415
|
+
* inbox. Returns counts of scanned / failed / persisted.
|
|
416
|
+
*
|
|
417
|
+
* @example
|
|
418
|
+
* ```typescript
|
|
419
|
+
* // Scan against a known-good reference date (matches the seed dataset)
|
|
420
|
+
* const result = await client.anomalies.scan({ as_of: "2025-12-15" });
|
|
421
|
+
* console.log(`${result.anomalies_persisted} anomalies detected`);
|
|
422
|
+
* ```
|
|
423
|
+
*/
|
|
424
|
+
scan(options?: ScanOptions): Promise<ScanResponse>;
|
|
425
|
+
/**
|
|
426
|
+
* Update an anomaly's status (acknowledge / dismiss / re-open).
|
|
427
|
+
*/
|
|
428
|
+
updateStatus(anomalyId: string, status: AnomalyStatus): Promise<Anomaly>;
|
|
429
|
+
/**
|
|
430
|
+
* Run the metric-tree `explain` for an anomaly and cache the result on
|
|
431
|
+
* the row. Subsequent calls return the cached `ExplainResult` instantly.
|
|
432
|
+
*/
|
|
433
|
+
explain(anomalyId: string): Promise<ExplainResult>;
|
|
434
|
+
}
|
|
435
|
+
//#endregion
|
|
4
436
|
//#region src/customer-app/manifest.d.ts
|
|
437
|
+
/**
|
|
438
|
+
* Declaration of a single Oxy Function shipped in the bundle's
|
|
439
|
+
* `functions/` dir. See `internal-docs/2026-06-12-customer-apps-functions-design.md`.
|
|
440
|
+
*
|
|
441
|
+
* All fields optional except that at least one invocation surface
|
|
442
|
+
* (`route`, `schedule`, or `airwayStep`) must be active. Absent =
|
|
443
|
+
* `route: true` (HTTP-invocable via `useFunction`).
|
|
444
|
+
*/
|
|
445
|
+
interface OxyAppFunctionManifest {
|
|
446
|
+
/** Source entry, relative to the app dir. Default: `functions/<name>.ts`. */
|
|
447
|
+
entry?: string;
|
|
448
|
+
/** Cron expression. When set, the function fires on this schedule. */
|
|
449
|
+
schedule?: string;
|
|
450
|
+
/** IANA timezone for `schedule`. Default: `UTC`. */
|
|
451
|
+
timezone?: string;
|
|
452
|
+
/** Expose `POST .../fn/<name>` (called via `useFunction`). Default: true. */
|
|
453
|
+
route?: boolean;
|
|
454
|
+
/** Wire the function in as an Airway pipeline transform step. */
|
|
455
|
+
airwayStep?: {
|
|
456
|
+
pipeline: string;
|
|
457
|
+
resource: string;
|
|
458
|
+
};
|
|
459
|
+
/** Wall-clock timeout. Default 30, max 300. */
|
|
460
|
+
timeoutSeconds?: number;
|
|
461
|
+
/**
|
|
462
|
+
* Opt-in result caching for route invocations. Omit (the default) to never
|
|
463
|
+
* cache — the safe choice for a side-effectful function (writes, external
|
|
464
|
+
* POSTs, ELT). Set `ttlSeconds` ONLY for read-only / idempotent functions:
|
|
465
|
+
* results are then cached per (build, function, user, request body) for that
|
|
466
|
+
* window, and a repeat `useFunction().invoke(sameBody)` returns the cached
|
|
467
|
+
* result without re-running. A `?refresh` query bypasses it.
|
|
468
|
+
*/
|
|
469
|
+
cache?: {
|
|
470
|
+
ttlSeconds?: number;
|
|
471
|
+
};
|
|
472
|
+
/**
|
|
473
|
+
* Databases this function's `ctx.warehouse.*` writes may target. Omit (or
|
|
474
|
+
* leave empty) and the function may NOT write to any database — writes are
|
|
475
|
+
* fail-closed and rejected before any connection is opened. Declare a
|
|
476
|
+
* destination here ONLY for a function that legitimately writes to it; a
|
|
477
|
+
* read-only function omits it. This scopes writes away from the project's
|
|
478
|
+
* source warehouse.
|
|
479
|
+
*/
|
|
480
|
+
destinations?: string[];
|
|
481
|
+
}
|
|
5
482
|
/** Wire shape of `oxy-app.json` (v2 only). */
|
|
6
483
|
interface OxyAppManifest {
|
|
7
484
|
/** Must be 2. v1 manifests are no longer supported. */
|
|
@@ -31,6 +508,12 @@ interface OxyAppManifest {
|
|
|
31
508
|
* `/api/projects/:id/query` URL.
|
|
32
509
|
*/
|
|
33
510
|
projectId?: string;
|
|
511
|
+
/**
|
|
512
|
+
* Optional map of Oxy Functions (server-side handlers) shipped in the
|
|
513
|
+
* bundle's `functions/` dir, keyed by function name. Omit for a pure
|
|
514
|
+
* static bundle (today's default). See the functions design doc.
|
|
515
|
+
*/
|
|
516
|
+
functions?: Record<string, OxyAppFunctionManifest>;
|
|
34
517
|
}
|
|
35
518
|
/**
|
|
36
519
|
* Manifest + runtime-injected identity needed to call oxy. Callers
|
|
@@ -167,6 +650,13 @@ declare function setOxyAppLogger(logger: OxyAppLogger | null): void;
|
|
|
167
650
|
/** Used by the SDK internals; not part of the public surface. */
|
|
168
651
|
declare function getOxyAppLogger(): OxyAppLogger;
|
|
169
652
|
//#endregion
|
|
653
|
+
//#region src/customer-app/function-sse.d.ts
|
|
654
|
+
/** A captured `console.*` / `ctx.log` line from a function run. */
|
|
655
|
+
interface FunctionLog {
|
|
656
|
+
level: string;
|
|
657
|
+
message: string;
|
|
658
|
+
}
|
|
659
|
+
//#endregion
|
|
170
660
|
//#region src/customer-app/react.d.ts
|
|
171
661
|
/**
|
|
172
662
|
* Credentialed fetch wrapper stored in context so `useQuery` can share
|
|
@@ -261,6 +751,42 @@ interface UseQueryResult<Row = Record<string, unknown>> {
|
|
|
261
751
|
* available (e.g. a user-supplied filter value).
|
|
262
752
|
*/
|
|
263
753
|
declare function useQuery<Row = Record<string, unknown>>(input: UseQueryInput, opts?: UseQueryOpts): UseQueryResult<Row>;
|
|
754
|
+
interface UseFunctionResult<Data = unknown> {
|
|
755
|
+
/**
|
|
756
|
+
* Invoke the function with an optional JSON body. Resolves to the parsed
|
|
757
|
+
* result. Pass `{ idempotencyKey }` to make a side-effectful invocation
|
|
758
|
+
* exactly-once: a retry with the same key replays the stored result instead
|
|
759
|
+
* of re-executing. Send a fresh key per logical action (e.g. a UUID per
|
|
760
|
+
* journal entry).
|
|
761
|
+
*/
|
|
762
|
+
invoke: (body?: unknown, opts?: {
|
|
763
|
+
idempotencyKey?: string;
|
|
764
|
+
}) => Promise<Data>;
|
|
765
|
+
/** Last successful result, or null before the first invoke. */
|
|
766
|
+
data: Data | null;
|
|
767
|
+
/** True while an invocation is in flight. */
|
|
768
|
+
isLoading: boolean;
|
|
769
|
+
/** Last invocation error, or null. On error this carries `.logs` too. */
|
|
770
|
+
error: Error | null;
|
|
771
|
+
/**
|
|
772
|
+
* `console.*` / `ctx.log` output from the last invoke (success or error), so
|
|
773
|
+
* a developer can see what the function printed without opening the oxy
|
|
774
|
+
* server logs. Empty for a cache hit or idempotent replay — no run happened,
|
|
775
|
+
* so there is nothing to log.
|
|
776
|
+
*/
|
|
777
|
+
logs: FunctionLog[];
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Imperative hook for invoking an Oxy Function by name.
|
|
781
|
+
*
|
|
782
|
+
* ```tsx
|
|
783
|
+
* const refresh = useFunction("refresh-sales");
|
|
784
|
+
* <button disabled={refresh.isLoading} onClick={() => refresh.invoke({ full: true })}>
|
|
785
|
+
* Refresh
|
|
786
|
+
* </button>
|
|
787
|
+
* ```
|
|
788
|
+
*/
|
|
789
|
+
declare function useFunction<Data = unknown>(name: string): UseFunctionResult<Data>;
|
|
264
790
|
/** Scalar filter operators (compared against a single value). */
|
|
265
791
|
type SemanticScalarOp = "eq" | "neq" | "lt" | "lte" | "gt" | "gte";
|
|
266
792
|
/** Array filter operators (compared against a list). */
|
|
@@ -457,6 +983,35 @@ interface UseAgentRunResult {
|
|
|
457
983
|
error: Error | null;
|
|
458
984
|
}
|
|
459
985
|
declare function useAgentRun(input: UseAgentRunInput): UseAgentRunResult;
|
|
986
|
+
/**
|
|
987
|
+
* Engineer-tagged usage event. Free-form `event_name` (≤ 64 chars,
|
|
988
|
+
* `[a-z][a-z0-9-]*` validated server-side) + optional JSON `payload`
|
|
989
|
+
* (object, ≤ 4 KiB serialized). Surfaces in the admin Activity tab
|
|
990
|
+
* grouped by name, with drill-down into recent occurrences.
|
|
991
|
+
*
|
|
992
|
+
* The handler returned by [`useTrackEvent`] is **fire-and-forget**:
|
|
993
|
+
* it enqueues the event into an in-memory batch flushed every second
|
|
994
|
+
* (and on `pagehide` so a navigation away doesn't drop the tail).
|
|
995
|
+
* No await semantics — call it inline from a click handler without
|
|
996
|
+
* awaiting it. Server-side validation errors are logged to the
|
|
997
|
+
* console; the call site doesn't need to handle them.
|
|
998
|
+
*
|
|
999
|
+
* Example:
|
|
1000
|
+
* ```tsx
|
|
1001
|
+
* const track = useTrackEvent();
|
|
1002
|
+
* <button
|
|
1003
|
+
* onClick={() => {
|
|
1004
|
+
* track("export-clicked", { format: "csv", rowCount });
|
|
1005
|
+
* doExport();
|
|
1006
|
+
* }}
|
|
1007
|
+
* >Export</button>
|
|
1008
|
+
* ```
|
|
1009
|
+
*
|
|
1010
|
+
* Rate-limited at 60/min per (user, app) on the server. A burst that
|
|
1011
|
+
* trips the limit drops the excess events with a console warning;
|
|
1012
|
+
* within-limit events are unaffected.
|
|
1013
|
+
*/
|
|
1014
|
+
declare function useTrackEvent(): (name: string, payload?: Record<string, unknown>) => void;
|
|
460
1015
|
interface OxyAnswerProps {
|
|
461
1016
|
/** Markdown answer text from `useAgentRun().answer`. */
|
|
462
1017
|
answer: string | null;
|
|
@@ -530,5 +1085,5 @@ interface OxyChatProps {
|
|
|
530
1085
|
*/
|
|
531
1086
|
declare function OxyChat(props: OxyChatProps): React.JSX.Element;
|
|
532
1087
|
//#endregion
|
|
533
|
-
export { type AgentArtifact, type AgentRunEvent, type AgentRunState, type AgentSqlArtifact, type AppFetcher, type CustomerAppDebugSnapshot, type CustomerAppErrorReport, type LoadManifestOptions, OxyAnswer, type OxyAnswerProps, OxyApiError, type OxyAppLogLevel, type OxyAppLogger, type OxyAppManifest, OxyAppProvider, type OxyAppProviderProps, OxyChat, type OxyChatProps, type OxyInjectedAppConfig, type ProcedureProgress, type ProcedureResult, type ProcedureRunState, type ResolvedCustomerAppManifest, type SemanticArrayOp, type SemanticDateRangeOp, type SemanticFilter, type SemanticScalarOp, type SemanticTimeDimension, type UseAgentRunInput, type UseAgentRunResult, type UseProcedureRunInput, type UseProcedureRunOpts, type UseProcedureRunResult, type UseQueryInput, type UseQueryOpts, type UseQueryResult, type UseSemanticQueryInput, type UseSemanticQueryOpts, type UseSemanticQueryResult, _resetCustomerAppManifestCacheForTest, getCustomerAppDebug, getOxyAppLogger, interpretCustomerAppError, loadCustomerAppManifest, readInjectedAppConfig, setOxyAppLogger, useAgentRun, useProcedureRun, useQuery, useResolvedManifest, useSemanticQuery };
|
|
1088
|
+
export { type AgentArtifact, type AgentRunEvent, type AgentRunState, type AgentSqlArtifact, AnomaliesClient, type Anomaly, type AnomalySeverity, type AnomalyStatus, type AppFetcher, type CustomerAppDebugSnapshot, type CustomerAppErrorReport, type DimensionOpportunity, type DriverAttribution, type DriverConfidence, type DriverDirection, type DriverForm, type DriverStrength, type EdgeKind, type ExplainConfigOverride, type ExplainNode, type ExplainRequest, type ExplainResult, type ExplainSibling, type ExplainWarning, type ListAnomaliesOptions, type ListAnomaliesResponse, type LoadManifestOptions, type MetricEdge, type MetricNode, type MetricTree, MetricTreeClient, type OpportunityRequest, type OpportunityResult, OxyAnswer, type OxyAnswerProps, OxyApiError, type OxyAppFunctionManifest, type OxyAppLogLevel, type OxyAppLogger, type OxyAppManifest, OxyAppProvider, type OxyAppProviderProps, OxyChat, type OxyChatProps, type OxyInjectedAppConfig, type PredictChange, type PredictImpact, type PredictResult, type ProcedureProgress, type ProcedureResult, type ProcedureRunState, type ResolvedCustomerAppManifest, type ScanOptions, type ScanResponse, type SegmentOpportunity, type SemanticArrayOp, type SemanticDateRangeOp, type SemanticFilter, type SemanticScalarOp, type SemanticTimeDimension, type SensitivityDriver, type SensitivityResult, type SkippedDimension, type SplitKind, type UseAgentRunInput, type UseAgentRunResult, type UseFunctionResult, type UseProcedureRunInput, type UseProcedureRunOpts, type UseProcedureRunResult, type UseQueryInput, type UseQueryOpts, type UseQueryResult, type UseSemanticQueryInput, type UseSemanticQueryOpts, type UseSemanticQueryResult, _resetCustomerAppManifestCacheForTest, getCustomerAppDebug, getOxyAppLogger, interpretCustomerAppError, loadCustomerAppManifest, readInjectedAppConfig, setOxyAppLogger, useAgentRun, useFunction, useProcedureRun, useQuery, useResolvedManifest, useSemanticQuery, useTrackEvent };
|
|
534
1089
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/customer-app/manifest.ts","../src/customer-app/debug.ts","../src/customer-app/errors.ts","../src/customer-app/inject.ts","../src/customer-app/logger.ts","../src/customer-app/react.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/config.ts","../src/metricTree.ts","../src/anomalies.ts","../src/customer-app/manifest.ts","../src/customer-app/debug.ts","../src/customer-app/errors.ts","../src/customer-app/inject.ts","../src/customer-app/logger.ts","../src/customer-app/function-sse.ts","../src/customer-app/react.tsx"],"mappings":"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"}
|