@oxy-hq/sdk 2.8.0 → 2.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -1
- package/dist/email.cjs.map +1 -1
- package/dist/index.cjs +65 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +317 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +317 -5
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +65 -3
- package/dist/index.mjs.map +1 -1
- package/dist/{react-BFFCK4VM.cjs → react-CDYGAfGA.cjs} +15 -14
- package/dist/react-CDYGAfGA.cjs.map +1 -0
- package/dist/{react-kHG5gkd-.d.mts → react-DBG6Pfp_.d.cts} +48 -1
- package/dist/react-DBG6Pfp_.d.cts.map +1 -0
- package/dist/{react-kHG5gkd-.d.cts → react-DBG6Pfp_.d.mts} +48 -1
- package/dist/react-DBG6Pfp_.d.mts.map +1 -0
- package/dist/{react-sT7E4CbA.mjs → react-sACIu6Ea.mjs} +14 -13
- package/dist/react-sACIu6Ea.mjs.map +1 -0
- package/dist/shell.cjs +22 -24
- package/dist/shell.cjs.map +1 -1
- package/dist/shell.d.cts +1 -1
- package/dist/shell.d.mts +1 -1
- package/dist/shell.mjs +22 -24
- package/dist/shell.mjs.map +1 -1
- package/package.json +7 -7
- package/dist/react-BFFCK4VM.cjs.map +0 -1
- package/dist/react-kHG5gkd-.d.cts.map +0 -1
- package/dist/react-kHG5gkd-.d.mts.map +0 -1
- package/dist/react-sT7E4CbA.mjs.map +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { A as UseSemanticQueryOpts, B as CustomAppErrorReport, C as UseProcedureRunInput, D as UseQueryOpts, E as UseQueryInput, F as useProcedureRun, G as OxyAppFunctionManifest, H as apiErrorFromResponse, I as useQuery, J as _resetCustomAppManifestCacheForTest, K as OxyAppManifest, L as useResolvedManifest, M as useAgentRun, N as useFunction, O as UseQueryResult, P as useOxyApp, R as useSemanticQuery, S as UseFunctionResult, T as UseProcedureRunResult, U as interpretCustomAppError, V as OxyApiError, W as LoadManifestOptions, Y as loadCustomAppManifest, _ as SemanticFilter, a as AppFetcher, b as UseAgentRunInput, c as OxyAppProvider, d as OxyChatProps, f as ProcedureProgress, g as SemanticDateRangeOp, h as SemanticArrayOp, i as AgentSqlArtifact, j as UseSemanticQueryResult, k as UseSemanticQueryInput, l as OxyAppProviderProps, m as ProcedureRunState, n as AgentRunEvent, o as OxyAnswer, p as ProcedureResult, q as ResolvedCustomAppManifest, r as AgentRunState, s as OxyAnswerProps, t as AgentArtifact, u as OxyChat, v as SemanticScalarOp, w as UseProcedureRunOpts, x as UseAgentRunResult, y as SemanticTimeDimension, z as useTrackEvent } from "./react-
|
|
2
|
+
import { A as UseSemanticQueryOpts, B as CustomAppErrorReport, C as UseProcedureRunInput, D as UseQueryOpts, E as UseQueryInput, F as useProcedureRun, G as OxyAppFunctionManifest, H as apiErrorFromResponse, I as useQuery, J as _resetCustomAppManifestCacheForTest, K as OxyAppManifest, L as useResolvedManifest, M as useAgentRun, N as useFunction, O as UseQueryResult, P as useOxyApp, R as useSemanticQuery, S as UseFunctionResult, T as UseProcedureRunResult, U as interpretCustomAppError, V as OxyApiError, W as LoadManifestOptions, Y as loadCustomAppManifest, _ as SemanticFilter, a as AppFetcher, b as UseAgentRunInput, c as OxyAppProvider, d as OxyChatProps, f as ProcedureProgress, g as SemanticDateRangeOp, h as SemanticArrayOp, i as AgentSqlArtifact, j as UseSemanticQueryResult, k as UseSemanticQueryInput, l as OxyAppProviderProps, m as ProcedureRunState, n as AgentRunEvent, o as OxyAnswer, p as ProcedureResult, q as ResolvedCustomAppManifest, r as AgentRunState, s as OxyAnswerProps, t as AgentArtifact, u as OxyChat, v as SemanticScalarOp, w as UseProcedureRunOpts, x as UseAgentRunResult, y as SemanticTimeDimension, z as useTrackEvent } from "./react-DBG6Pfp_.cjs";
|
|
3
3
|
//#region src/config.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Configuration for the Oxy SDK
|
|
@@ -416,6 +416,14 @@ interface Anomaly {
|
|
|
416
416
|
* {@link ScanFailure.filters}.
|
|
417
417
|
*/
|
|
418
418
|
filters: AnomalyFilter[] | null;
|
|
419
|
+
/**
|
|
420
|
+
* Groups consecutive flagged buckets of one segment into a single event, so a
|
|
421
|
+
* surge spanning Mon/Wed/Thu reads as one problem rather than three. `null`
|
|
422
|
+
* for rows detected before events existed. This is what
|
|
423
|
+
* {@link AnomaliesClient.updateStatusBulk} wants as `eventIds` — a status
|
|
424
|
+
* action applies to the whole event.
|
|
425
|
+
*/
|
|
426
|
+
event_id?: string | null;
|
|
419
427
|
/** Cached ExplainResult — populated by `POST /anomalies/:id/explain`. */
|
|
420
428
|
explain_cache?: ExplainResult | null;
|
|
421
429
|
explain_cached_at?: string | null;
|
|
@@ -424,11 +432,98 @@ interface Anomaly {
|
|
|
424
432
|
}
|
|
425
433
|
interface ListAnomaliesOptions {
|
|
426
434
|
status?: AnomalyStatus | string;
|
|
427
|
-
/**
|
|
435
|
+
/**
|
|
436
|
+
* Max **events** (server caps at 500, defaults to 100). Every bucket of a
|
|
437
|
+
* returned event comes back, so the row count is `limit × buckets-per-event`.
|
|
438
|
+
* With `order: "recent"` it is a plain row limit instead.
|
|
439
|
+
*/
|
|
428
440
|
limit?: number;
|
|
441
|
+
/**
|
|
442
|
+
* How many **events** to skip (rows, with `order: "recent"`) — same unit as
|
|
443
|
+
* `limit`, so page `n` is `offset: (n - 1) * limit`. Defaults to 0.
|
|
444
|
+
*
|
|
445
|
+
* Bounded: past the server's maximum depth the request is refused with a 400
|
|
446
|
+
* rather than served a repeat of the last reachable page, so a runaway
|
|
447
|
+
* `offset += limit` loop ends loudly instead of spinning. Every response
|
|
448
|
+
* echoes that depth as `max_offset`, so a loop can stop before reaching it.
|
|
449
|
+
*/
|
|
450
|
+
offset?: number;
|
|
451
|
+
/**
|
|
452
|
+
* `"recent"` returns latest-first (`detected_at DESC`). Omit for the default
|
|
453
|
+
* worst-first ranking by event severity (active events before dismissed).
|
|
454
|
+
*/
|
|
455
|
+
order?: "recent";
|
|
429
456
|
}
|
|
430
457
|
interface ListAnomaliesResponse {
|
|
431
458
|
anomalies: Anomaly[];
|
|
459
|
+
/**
|
|
460
|
+
* Total matching the filter across every page — **events** under the default
|
|
461
|
+
* ranking, rows under `order: "recent"`. Same unit as `limit`/`offset`, so
|
|
462
|
+
* `Math.ceil(total / limit)` is the page count. Note it will not equal
|
|
463
|
+
* `anomalies.length` under the default ranking even on a single page: each
|
|
464
|
+
* event returns all of its buckets.
|
|
465
|
+
*
|
|
466
|
+
* **Absent** in two cases, and a client that pages has to handle both. Send
|
|
467
|
+
* neither `limit` nor `offset` and you have asked for "the top N", so there
|
|
468
|
+
* is no total behind the answer — the field is omitted rather than filled
|
|
469
|
+
* with the page's own length. Pass a `limit` (with `offset: 0` for the first
|
|
470
|
+
* page) to get a real total to loop against.
|
|
471
|
+
*
|
|
472
|
+
* It is also dropped when the count query itself fails: the page rows are
|
|
473
|
+
* already in hand, and the server serves them without their denominator
|
|
474
|
+
* rather than failing a request it could answer. So a page you asked for
|
|
475
|
+
* with `limit` can still come back untotalled — page off `anomalies.length`
|
|
476
|
+
* and `max_offset` in that case rather than treating it as zero.
|
|
477
|
+
*/
|
|
478
|
+
total?: number;
|
|
479
|
+
/**
|
|
480
|
+
* The page actually served. `limit` is clamped to 1..=500, so it can come
|
|
481
|
+
* back smaller than you asked for and every page number you compute must
|
|
482
|
+
* divide by this rather than by what you sent. `offset` is *not* clamped —
|
|
483
|
+
* too deep a request is refused with a 400 (see `max_offset`), so this echoes
|
|
484
|
+
* the offset you sent whenever there is a response at all.
|
|
485
|
+
*
|
|
486
|
+
* Optional because a replica still running a pre-paging build emits neither,
|
|
487
|
+
* which is a live shape during a rolling deploy. Fall back to what you asked
|
|
488
|
+
* for rather than doing arithmetic on `undefined`.
|
|
489
|
+
*/
|
|
490
|
+
limit?: number;
|
|
491
|
+
offset?: number;
|
|
492
|
+
/**
|
|
493
|
+
* The deepest `offset` the server will serve — past it a request is refused
|
|
494
|
+
* with a 400. Read it rather than hardcoding a copy: a paging loop bounded by
|
|
495
|
+
* this stops cleanly instead of ending on an error.
|
|
496
|
+
*/
|
|
497
|
+
max_offset?: number;
|
|
498
|
+
/**
|
|
499
|
+
* Event keys whose buckets were trimmed to the server's per-event cap (50) —
|
|
500
|
+
* an `event_id`, or `ungrouped:<row id>` for a row detected before events
|
|
501
|
+
* existed. For those events `anomalies` holds the worst buckets, not all of
|
|
502
|
+
* them, so a status write should name the event through `updateStatusBulk`'s
|
|
503
|
+
* `eventIds` rather than enumerating the buckets you received.
|
|
504
|
+
*
|
|
505
|
+
* Only meaningful under the default ranking, which pages *events* and
|
|
506
|
+
* returns each whole — there, an absence means complete. With
|
|
507
|
+
* `order: "recent"` the page is row-limited, so an event can straddle its
|
|
508
|
+
* boundary instead; this list stays empty and every event should be treated
|
|
509
|
+
* as possibly partial.
|
|
510
|
+
*/
|
|
511
|
+
truncated_events?: string[];
|
|
512
|
+
}
|
|
513
|
+
interface BulkUpdateStatusResponse {
|
|
514
|
+
/** Buckets actually written. Lower than what you sent when a row was
|
|
515
|
+
* deleted, moved out of `onlyStatus`, or belongs to another workspace. */
|
|
516
|
+
updated: number;
|
|
517
|
+
/** Distinct anomalies behind those buckets — events, plus standalone
|
|
518
|
+
* pre-event rows. The unit a UI counts in, and one only the server can
|
|
519
|
+
* compute: naming an event never told you how many buckets it held.
|
|
520
|
+
*
|
|
521
|
+
* An anomaly counts as updated once *any* of its buckets is written. Name
|
|
522
|
+
* events through `eventIds` and that is the whole anomaly; name one bucket
|
|
523
|
+
* of a long chain through `ids` and this still reports `1` while the rest
|
|
524
|
+
* keep their old status. `ids` is for pre-event rows, which hold one bucket
|
|
525
|
+
* each — using it for anything else buys a partial write. */
|
|
526
|
+
events_updated: number;
|
|
432
527
|
}
|
|
433
528
|
interface ScanOptions {
|
|
434
529
|
/** Override the reference "now" date (YYYY-MM-DD) — useful for demos. */
|
|
@@ -488,12 +583,17 @@ declare class AnomaliesClient {
|
|
|
488
583
|
private path;
|
|
489
584
|
private buildQuery;
|
|
490
585
|
/**
|
|
491
|
-
* List anomalies in the inbox,
|
|
586
|
+
* List anomalies in the inbox, ranked worst-first by event severity (active
|
|
587
|
+
* events before dismissed). Pass `order: "recent"` for latest-first.
|
|
492
588
|
*
|
|
493
589
|
* @example
|
|
494
590
|
* ```typescript
|
|
495
591
|
* // Open / unresolved anomalies only
|
|
496
592
|
* const { anomalies } = await client.anomalies.list({ status: "new" });
|
|
593
|
+
*
|
|
594
|
+
* // Second page of 25 events
|
|
595
|
+
* const page2 = await client.anomalies.list({ limit: 25, offset: 25 });
|
|
596
|
+
* console.log(`${(page2.offset ?? 25) + 1}+ of ${page2.total ?? "?"}`);
|
|
497
597
|
* ```
|
|
498
598
|
*/
|
|
499
599
|
list(options?: ListAnomaliesOptions): Promise<ListAnomaliesResponse>;
|
|
@@ -523,6 +623,45 @@ declare class AnomaliesClient {
|
|
|
523
623
|
* Update an anomaly's status (acknowledge / dismiss / re-open).
|
|
524
624
|
*/
|
|
525
625
|
updateStatus(anomalyId: string, status: AnomalyStatus): Promise<Anomaly>;
|
|
626
|
+
/**
|
|
627
|
+
* Update many anomalies in one request — the batch form of
|
|
628
|
+
* {@link updateStatus}. Identifiers outside the workspace are skipped rather
|
|
629
|
+
* than erroring, so `updated` (rows written) can be lower than what you sent.
|
|
630
|
+
* At most 2000 identifiers across both lists.
|
|
631
|
+
*
|
|
632
|
+
* **Prefer `eventIds`.** Inbox actions are per *event*, and a list response
|
|
633
|
+
* caps how many buckets it returns per event — so acking the bucket ids you
|
|
634
|
+
* received can leave the tail of a long chain behind, `new`, under a clean
|
|
635
|
+
* success. Naming the event lets the server write all of it. `ids` is for
|
|
636
|
+
* rows with no `event_id` (detected before events existed), which can only
|
|
637
|
+
* be named individually.
|
|
638
|
+
*
|
|
639
|
+
* `onlyStatuses` says which of an event's buckets may move. An event can span
|
|
640
|
+
* statuses, so an unbounded write resurrects buckets that were dismissed on
|
|
641
|
+
* purpose — which is why omitting it takes a scope rather than no bound at
|
|
642
|
+
* all: the live statuses (`["new", "acknowledged"]`) for an ack or dismiss,
|
|
643
|
+
* and all three for `status: "new"`, since reopening is how a dismissed
|
|
644
|
+
* anomaly comes back. The server applies that same default, so the safe
|
|
645
|
+
* behaviour does not depend on going through this client. Pass `[]` to opt
|
|
646
|
+
* out of the bound entirely.
|
|
647
|
+
*
|
|
648
|
+
* @example
|
|
649
|
+
* ```typescript
|
|
650
|
+
* const { anomalies } = await client.anomalies.list({ status: "new", limit: 50, offset: 0 });
|
|
651
|
+
* // Both lists: events by id, and pre-event rows (no `event_id`) by their own.
|
|
652
|
+
* const eventIds = [...new Set(anomalies.flatMap((a) => (a.event_id ? [a.event_id] : [])))];
|
|
653
|
+
* const ids = anomalies.filter((a) => !a.event_id).map((a) => a.id);
|
|
654
|
+
* const { updated } = await client.anomalies.updateStatusBulk(
|
|
655
|
+
* { ids, eventIds, onlyStatuses: ["new", "acknowledged"] },
|
|
656
|
+
* "acknowledged"
|
|
657
|
+
* );
|
|
658
|
+
* ```
|
|
659
|
+
*/
|
|
660
|
+
updateStatusBulk(target: {
|
|
661
|
+
ids?: string[];
|
|
662
|
+
eventIds?: string[];
|
|
663
|
+
onlyStatuses?: AnomalyStatus[];
|
|
664
|
+
}, status: AnomalyStatus): Promise<BulkUpdateStatusResponse>;
|
|
526
665
|
/**
|
|
527
666
|
* Run the metric-tree `explain` for an anomaly and cache the result on
|
|
528
667
|
* the row. Subsequent calls return the cached `ExplainResult` instantly;
|
|
@@ -611,11 +750,60 @@ interface OxyFunctionRequest {
|
|
|
611
750
|
}
|
|
612
751
|
/** A single row from a `ctx.query` / `ctx.queryStream` result. */
|
|
613
752
|
type OxyFunctionRow = Record<string, unknown>;
|
|
614
|
-
/**
|
|
753
|
+
/** One org team the caller belongs to, as reported by {@link OxyFunctionUser.teams}. */
|
|
754
|
+
interface OxyOrgTeam {
|
|
755
|
+
id: string;
|
|
756
|
+
name: string;
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Who — or what — invoked this function.
|
|
760
|
+
*
|
|
761
|
+
* `"system"` means **no caller to attribute this to** — not necessarily "no
|
|
762
|
+
* human caused it". A schedule tick, an Airway transform step, and an operator's
|
|
763
|
+
* manual *Run now* all take this path: they run under the org owner's `id` (the
|
|
764
|
+
* invocation record needs a real user FK) with every caller field absent. So on
|
|
765
|
+
* a manual run a person really did click, and there is still no way to reach
|
|
766
|
+
* them; the platform does not carry the triggering operator through the job
|
|
767
|
+
* queue.
|
|
768
|
+
*
|
|
769
|
+
* Any branch that emails "the person who clicked" or renders a personal view
|
|
770
|
+
* must check this rather than sniff the synthetic `email` — and must have a
|
|
771
|
+
* sensible answer for the case where there is nobody to send to.
|
|
772
|
+
*/
|
|
773
|
+
type OxyIdentityKind = "user" | "system";
|
|
774
|
+
/**
|
|
775
|
+
* Identity of the invoking user (route) or the system identity (schedule,
|
|
776
|
+
* Airway step, or a manual job run).
|
|
777
|
+
*
|
|
778
|
+
* Assembled server-side on every invocation from the authenticated session —
|
|
779
|
+
* **nothing on it is client-supplied**, which is the entire reason to read
|
|
780
|
+
* identity here instead of from the request body. See
|
|
781
|
+
* `internal-docs/custom-apps-user-identity.md` for the full contract, including
|
|
782
|
+
* what the client-side `useShellContext()` can and cannot be trusted for.
|
|
783
|
+
*/
|
|
615
784
|
interface OxyFunctionUser {
|
|
785
|
+
/**
|
|
786
|
+
* `users.id`. On a `"system"` invocation this is the org owner's id and not a
|
|
787
|
+
* caller — check {@link kind} before attributing anything to it.
|
|
788
|
+
*/
|
|
616
789
|
id: string;
|
|
790
|
+
/** Their email, or `schedule+<fn>@system.oxy` when {@link kind} is `"system"`. */
|
|
617
791
|
email: string;
|
|
792
|
+
/**
|
|
793
|
+
* The org that owns this app — the tenant boundary for anything the function
|
|
794
|
+
* reads or writes.
|
|
795
|
+
*
|
|
796
|
+
* Servers before 2026-08-21 mistakenly sent this as `org_id`, so `orgId` read
|
|
797
|
+
* `undefined` there; both keys are populated now. If your function filters SQL
|
|
798
|
+
* on it, that is exactly the bug to re-check.
|
|
799
|
+
*/
|
|
618
800
|
orgId: string;
|
|
801
|
+
/** Display name. Absent on a `"system"` invocation. User-controlled free text —
|
|
802
|
+
* fine for a greeting or an audit row, never a key, and escape it before it
|
|
803
|
+
* reaches HTML or SQL. */
|
|
804
|
+
name?: string;
|
|
805
|
+
/** Avatar URL. Absent when unset or on a `"system"` invocation. */
|
|
806
|
+
picture?: string;
|
|
619
807
|
/**
|
|
620
808
|
* The caller's role **within this app**, derived server-side from app
|
|
621
809
|
* membership (with org-owner / Oxy-staff break-glass). Absent when they hold
|
|
@@ -632,8 +820,58 @@ interface OxyFunctionUser {
|
|
|
632
820
|
*
|
|
633
821
|
* Note it is deliberately NOT the org role: an app admin administers one app
|
|
634
822
|
* without holding org-Admin (which also carries billing and member management).
|
|
823
|
+
*
|
|
824
|
+
* A `"system"` invocation runs under the org owner, so this reads `"admin"`
|
|
825
|
+
* there — a schedule carries owner authority by construction. Add a
|
|
826
|
+
* {@link kind} check when a surface must be human-only.
|
|
635
827
|
*/
|
|
636
828
|
appRole?: "admin" | "member";
|
|
829
|
+
/**
|
|
830
|
+
* The caller's role in the owning **org**. Absent when they reach the app
|
|
831
|
+
* without an org membership (Oxy staff on break-glass) or on a `"system"`
|
|
832
|
+
* invocation.
|
|
833
|
+
*
|
|
834
|
+
* Informational, not a gate — org standing and app standing are separate
|
|
835
|
+
* rings. Use it to explain ("ask your org admin to connect a warehouse"), to
|
|
836
|
+
* label, or to route; gate on {@link appRole}.
|
|
837
|
+
*/
|
|
838
|
+
orgRole?: "owner" | "admin" | "member";
|
|
839
|
+
/**
|
|
840
|
+
* The org teams the caller belongs to, name-sorted, and scoped to this app's
|
|
841
|
+
* org — teams they hold in other orgs are never reported. Empty when they
|
|
842
|
+
* belong to none.
|
|
843
|
+
*
|
|
844
|
+
* Optional because a server older than 2026-08-21 does not send it: use
|
|
845
|
+
* `ctx.user.teams?.some(...)`, never `ctx.user.teams.some(...)`, or the
|
|
846
|
+
* function throws on that server rather than degrading.
|
|
847
|
+
*
|
|
848
|
+
* Useful for *shaping* a view (default the Finance team to the finance tab).
|
|
849
|
+
* Not a permission: a team only grants anything on an app through an app team
|
|
850
|
+
* grant, which is already folded into {@link appRole}. Gating on a team name
|
|
851
|
+
* invents a permission the platform cannot revoke.
|
|
852
|
+
*/
|
|
853
|
+
teams?: OxyOrgTeam[];
|
|
854
|
+
/**
|
|
855
|
+
* Whether there is a caller to attribute this invocation to.
|
|
856
|
+
*
|
|
857
|
+
* On a current server this is exact — `ctx.user.kind === "system"` is the
|
|
858
|
+
* check.
|
|
859
|
+
*
|
|
860
|
+
* Optional for the same reason as {@link teams}: a server older than
|
|
861
|
+
* 2026-08-21 does not send it. Note there is no safe *inference* to fall back
|
|
862
|
+
* on, in either direction — `=== "system"` reads `false` for a cron tick, and
|
|
863
|
+
* `!== "user"` reads `true` for a real person. An older server genuinely
|
|
864
|
+
* cannot tell you.
|
|
865
|
+
*
|
|
866
|
+
* So if you must support one, don't infer: a schedule invokes the function
|
|
867
|
+
* with the `input` you configured on it, which is yours to mark.
|
|
868
|
+
*
|
|
869
|
+
* ```ts
|
|
870
|
+
* const body = JSON.parse(req.body || "{}");
|
|
871
|
+
* const isSystem = ctx.user.kind ? ctx.user.kind === "system" : body._trigger === "schedule";
|
|
872
|
+
* ```
|
|
873
|
+
*/
|
|
874
|
+
kind?: OxyIdentityKind;
|
|
637
875
|
}
|
|
638
876
|
/** Result of a `ctx.fetch` call. */
|
|
639
877
|
interface OxyFetchResult {
|
|
@@ -662,6 +900,24 @@ interface OxyWarehouseApi {
|
|
|
662
900
|
exec(database: string, sql: string): Promise<unknown>;
|
|
663
901
|
upsert(database: string, table: string, rows: OxyFunctionRow[], conflictColumns: string[]): Promise<unknown>;
|
|
664
902
|
}
|
|
903
|
+
/**
|
|
904
|
+
* The handle `ctx.tx` passes to your callback — a pinned connection with an
|
|
905
|
+
* open transaction.
|
|
906
|
+
*
|
|
907
|
+
* Both methods take **bound parameters** (`$1`, `$2`, …). Never build SQL by
|
|
908
|
+
* concatenating request data: `ctx.warehouse.exec` takes a bare string, but a
|
|
909
|
+
* transaction exists for surfaces that accept end-user input, and placeholders
|
|
910
|
+
* are the only thing that makes that safe.
|
|
911
|
+
*
|
|
912
|
+
* The handle is live only for the duration of the callback. Using it after the
|
|
913
|
+
* callback returns throws — it is not a connection you can stash.
|
|
914
|
+
*/
|
|
915
|
+
interface OxyTransaction {
|
|
916
|
+
/** Run a row-returning statement (including `INSERT … RETURNING`). */
|
|
917
|
+
query(sql: string, params?: unknown[]): Promise<OxyFunctionRow[]>;
|
|
918
|
+
/** Run a statement for its effect; resolves to the number of rows affected. */
|
|
919
|
+
exec(sql: string, params?: unknown[]): Promise<number>;
|
|
920
|
+
}
|
|
665
921
|
/** `ctx.secrets` — write app-scoped secrets (gated by the `secrets.write` capability). */
|
|
666
922
|
interface OxySecretsApi {
|
|
667
923
|
set(key: string, value: string): Promise<void>;
|
|
@@ -783,6 +1039,30 @@ interface StorageUploadUrl {
|
|
|
783
1039
|
key: string;
|
|
784
1040
|
/** ISO-8601 expiry of the presigned URL. */
|
|
785
1041
|
expiresAt: string;
|
|
1042
|
+
/**
|
|
1043
|
+
* Retention tag for this key, present only when your app declares a matching
|
|
1044
|
+
* `storage.retention` rule in `oxy-app.json` (e.g. `"oxy-ttl=30d"`).
|
|
1045
|
+
*
|
|
1046
|
+
* **When present, the upload MUST send it as the `x-amz-tagging` header** — it
|
|
1047
|
+
* is bound into the signature, so omitting it fails the PUT with a signature
|
|
1048
|
+
* mismatch rather than storing an untagged object:
|
|
1049
|
+
*
|
|
1050
|
+
* ```ts
|
|
1051
|
+
* const { url, tagging } = await ctx.storage.getUploadUrl({ ... });
|
|
1052
|
+
* await fetch(url, {
|
|
1053
|
+
* method: "PUT",
|
|
1054
|
+
* body: file,
|
|
1055
|
+
* headers: {
|
|
1056
|
+
* "Content-Type": file.type,
|
|
1057
|
+
* ...(tagging ? { "x-amz-tagging": tagging } : {}),
|
|
1058
|
+
* },
|
|
1059
|
+
* });
|
|
1060
|
+
* ```
|
|
1061
|
+
*
|
|
1062
|
+
* Signing it is deliberate: a browser that could drop the header could opt any
|
|
1063
|
+
* upload out of the app's own retention policy.
|
|
1064
|
+
*/
|
|
1065
|
+
tagging?: string;
|
|
786
1066
|
}
|
|
787
1067
|
/** A minted presigned download. */
|
|
788
1068
|
interface StorageDownloadUrl {
|
|
@@ -933,6 +1213,38 @@ interface OxyFunctionContext {
|
|
|
933
1213
|
*/
|
|
934
1214
|
fetch(url: string, init?: OxyFetchInit): Promise<OxyFetchResult>;
|
|
935
1215
|
warehouse: OxyWarehouseApi;
|
|
1216
|
+
/**
|
|
1217
|
+
* Run several statements atomically on one connection: commits when your
|
|
1218
|
+
* callback resolves, rolls back when it throws, and rethrows your error
|
|
1219
|
+
* either way. Resolves to whatever the callback returns.
|
|
1220
|
+
*
|
|
1221
|
+
* `database` must be in this function's manifest `destinations` — a
|
|
1222
|
+
* transaction is a write, and the same fail-closed allowlist applies. Postgres
|
|
1223
|
+
* only; other backends reject `ctx.tx` rather than faking it.
|
|
1224
|
+
*
|
|
1225
|
+
* **Do not catch a failed statement and return normally.** A statement the
|
|
1226
|
+
* server rejects aborts the whole transaction, and `COMMIT` on an aborted
|
|
1227
|
+
* transaction does not fail — Postgres applies nothing and reports success —
|
|
1228
|
+
* so `ctx.tx` refuses to commit and throws instead, naming the statement that
|
|
1229
|
+
* poisoned it. Let the error propagate.
|
|
1230
|
+
*
|
|
1231
|
+
* ```ts
|
|
1232
|
+
* const orderId = await ctx.tx("appdb", async (tx) => {
|
|
1233
|
+
* const [{ id }] = await tx.query(
|
|
1234
|
+
* "INSERT INTO orders (table_no) VALUES ($1) RETURNING id",
|
|
1235
|
+
* [tableNo],
|
|
1236
|
+
* );
|
|
1237
|
+
* for (const it of items) {
|
|
1238
|
+
* await tx.exec(
|
|
1239
|
+
* "INSERT INTO order_items (order_id, sku, qty) VALUES ($1, $2, $3)",
|
|
1240
|
+
* [id, it.sku, it.qty],
|
|
1241
|
+
* );
|
|
1242
|
+
* }
|
|
1243
|
+
* return id;
|
|
1244
|
+
* });
|
|
1245
|
+
* ```
|
|
1246
|
+
*/
|
|
1247
|
+
tx<T>(database: string, fn: (tx: OxyTransaction) => Promise<T> | T): Promise<T>;
|
|
936
1248
|
secrets: OxySecretsApi;
|
|
937
1249
|
semantic: OxySemanticApi;
|
|
938
1250
|
airway: OxyAirwayApi;
|
|
@@ -1309,5 +1621,5 @@ declare function createWorldModel(projectId: string | null, fetcher: AppFetcher)
|
|
|
1309
1621
|
*/
|
|
1310
1622
|
declare function useWorldModel(): WorldModelApi;
|
|
1311
1623
|
//#endregion
|
|
1312
|
-
export { type AdditivityClass, type AgentArtifact, type AgentRunEvent, type AgentRunState, type AgentSqlArtifact, AnomaliesClient, type Anomaly, type AnomalyFilter, type AnomalySeverity, type AnomalyStatus, type AppFetcher, type CustomAppDebugSnapshot, type CustomAppErrorReport, type DimensionOpportunity, type DistributionRequest, type DriverAttribution, type DriverConfidence, type DriverDirection, type DriverForm, type DriverStrength, type EdgeKind, type EmailAttachment, type EmailSendInput, type EmailSendResult, type ExpandedNode, type ExplainConfigOverride, type ExplainNode, type ExplainOptions, type ExplainOpts, type ExplainRequest, type ExplainResult, type ExplainSibling, type ExplainWarning, type ListAnomaliesOptions, type ListAnomaliesResponse, type LoadManifestOptions, type MetricEdge, type MetricHandle, type MetricNode, type MetricScope, type MetricTree, MetricTreeClient, type MetricTreeHookResult, type OpportunityRequest, type OpportunityResult, type OxyAirwayApi, OxyAnswer, type OxyAnswerProps, OxyApiError, type OxyAppFunctionManifest, type OxyAppLogLevel, type OxyAppLogger, type OxyAppManifest, OxyAppProvider, type OxyAppProviderProps, OxyChat, type OxyChatProps, type OxyEmailApi, type OxyFetchResult, type OxyFunctionContext, type OxyFunctionHandler, type OxyFunctionRequest, type OxyFunctionRow, type OxyFunctionUser, type OxyInjectedAppConfig, type OxySecretsApi, type OxySemanticApi, type OxyStorageApi, type OxyWarehouseApi, type PredictChange, type PredictImpact, type PredictResult, type ProcedureProgress, type ProcedureResult, type ProcedureRunState, type ResolvedCustomAppManifest, type ScanFailure, type ScanOptions, type ScanResponse, type SegmentOpportunity, type SemanticArrayOp, type SemanticDateRangeOp, type SemanticFilter, type SemanticScalarOp, type SemanticTimeDimension, type SensitivityDriver, type SensitivityResult, type SizeOpts, type SkippedDimension, type SplitKind, type StorageDownloadUrl, type StorageListPage, type StorageObject, type StoragePutOptions, type StoragePutResult, type StorageUploadUrl, type StorageUploadUrlInput, type TimeDimensionsResponse, type UseAgentRunInput, type UseAgentRunResult, type UseFunctionResult, type UseMeasureBreakdownResult, type UseMetricTreeOpts, type UseProcedureRunInput, type UseProcedureRunOpts, type UseProcedureRunResult, type UseQueryInput, type UseQueryOpts, type UseQueryResult, type UseSemanticQueryInput, type UseSemanticQueryOpts, type UseSemanticQueryResult, type UseWorldModelGraphResult, type UseWorldModelInstancesOpts, type UseWorldModelInstancesResult, type WmBreakdownEdge, type WmBreakdownNode, type WmEntityCount, type WmFilterCountsResponse, type WmInstance, type WmInstancesResponse, type WmMeasureBreakdown, type WmMeasureBreakdownEvent, type WorldModel, type WorldModelApi, type WorldModelDimension, type WorldModelEdge, type WorldModelEntity, type WorldModelInducedMeasure, type WorldModelMeasure, WorldModelScopeUnsupportedError, _resetCustomAppManifestCacheForTest, apiErrorFromResponse, base64ToBytes, bytesToBase64, createWorldModel, getCustomAppDebug, getOxyAppLogger, interpretCustomAppError, loadCustomAppManifest, readInjectedAppConfig, readJsonSseStream, setOxyAppLogger, useAgentRun, useDistribution, useExplain, useFunction, useMeasureBreakdown, useMetricTree, useOpportunity, useOxyApp, usePredict, useProcedureRun, useQuery, useResolvedManifest, useSemanticQuery, useSensitivity, useTimeDimensions, useTrackEvent, useWorldModel, useWorldModelGraph, useWorldModelInstances };
|
|
1624
|
+
export { type AdditivityClass, type AgentArtifact, type AgentRunEvent, type AgentRunState, type AgentSqlArtifact, AnomaliesClient, type Anomaly, type AnomalyFilter, type AnomalySeverity, type AnomalyStatus, type AppFetcher, type BulkUpdateStatusResponse, type CustomAppDebugSnapshot, type CustomAppErrorReport, type DimensionOpportunity, type DistributionRequest, type DriverAttribution, type DriverConfidence, type DriverDirection, type DriverForm, type DriverStrength, type EdgeKind, type EmailAttachment, type EmailSendInput, type EmailSendResult, type ExpandedNode, type ExplainConfigOverride, type ExplainNode, type ExplainOptions, type ExplainOpts, type ExplainRequest, type ExplainResult, type ExplainSibling, type ExplainWarning, type ListAnomaliesOptions, type ListAnomaliesResponse, type LoadManifestOptions, type MetricEdge, type MetricHandle, type MetricNode, type MetricScope, type MetricTree, MetricTreeClient, type MetricTreeHookResult, type OpportunityRequest, type OpportunityResult, type OxyAirwayApi, OxyAnswer, type OxyAnswerProps, OxyApiError, type OxyAppFunctionManifest, type OxyAppLogLevel, type OxyAppLogger, type OxyAppManifest, OxyAppProvider, type OxyAppProviderProps, OxyChat, type OxyChatProps, type OxyEmailApi, type OxyFetchResult, type OxyFunctionContext, type OxyFunctionHandler, type OxyFunctionRequest, type OxyFunctionRow, type OxyFunctionUser, type OxyIdentityKind, type OxyInjectedAppConfig, type OxyOrgTeam, type OxySecretsApi, type OxySemanticApi, type OxyStorageApi, type OxyTransaction, type OxyWarehouseApi, type PredictChange, type PredictImpact, type PredictResult, type ProcedureProgress, type ProcedureResult, type ProcedureRunState, type ResolvedCustomAppManifest, type ScanFailure, type ScanOptions, type ScanResponse, type SegmentOpportunity, type SemanticArrayOp, type SemanticDateRangeOp, type SemanticFilter, type SemanticScalarOp, type SemanticTimeDimension, type SensitivityDriver, type SensitivityResult, type SizeOpts, type SkippedDimension, type SplitKind, type StorageDownloadUrl, type StorageListPage, type StorageObject, type StoragePutOptions, type StoragePutResult, type StorageUploadUrl, type StorageUploadUrlInput, type TimeDimensionsResponse, type UseAgentRunInput, type UseAgentRunResult, type UseFunctionResult, type UseMeasureBreakdownResult, type UseMetricTreeOpts, type UseProcedureRunInput, type UseProcedureRunOpts, type UseProcedureRunResult, type UseQueryInput, type UseQueryOpts, type UseQueryResult, type UseSemanticQueryInput, type UseSemanticQueryOpts, type UseSemanticQueryResult, type UseWorldModelGraphResult, type UseWorldModelInstancesOpts, type UseWorldModelInstancesResult, type WmBreakdownEdge, type WmBreakdownNode, type WmEntityCount, type WmFilterCountsResponse, type WmInstance, type WmInstancesResponse, type WmMeasureBreakdown, type WmMeasureBreakdownEvent, type WorldModel, type WorldModelApi, type WorldModelDimension, type WorldModelEdge, type WorldModelEntity, type WorldModelInducedMeasure, type WorldModelMeasure, WorldModelScopeUnsupportedError, _resetCustomAppManifestCacheForTest, apiErrorFromResponse, base64ToBytes, bytesToBase64, createWorldModel, getCustomAppDebug, getOxyAppLogger, interpretCustomAppError, loadCustomAppManifest, readInjectedAppConfig, readJsonSseStream, setOxyAppLogger, useAgentRun, useDistribution, useExplain, useFunction, useMeasureBreakdown, useMetricTree, useOpportunity, useOxyApp, usePredict, useProcedureRun, useQuery, useResolvedManifest, useSemanticQuery, useSensitivity, useTimeDimensions, useTrackEvent, useWorldModel, useWorldModelGraph, useWorldModelInstances };
|
|
1313
1625
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/config.ts","../src/metricTree.ts","../src/anomalies.ts","../src/custom-app/base64.ts","../src/custom-app/debug.ts","../src/custom-app/function-context.ts","../src/custom-app/inject.ts","../src/custom-app/logger.ts","../src/custom-app/metric-tree-hooks.tsx","../src/custom-app/sse.ts","../src/worldModel.ts","../src/custom-app/world-model-hooks.tsx","../src/custom-app/world-node.tsx"],"mappings":";;;;;;UAGiB;;;;EAIf;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;;;EAQA;;;;;EAMA;;;;KCjCU;KACA;KACA;KACA;KACA;UAEK;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA,MAAM;;EAEN;EACA,WAAW;EACX,UAAU;EACV,YAAY;EACZ;EACA,MAAM;EACN;EACA;EACA;EACA;;UAGe;EACf,OAAO;EACP,OAAO;EACP;;UAKe;EACf;EACA;EACA;EACA;EACA,OAAO;EACP,WAAW;EACX,UAAU;EACV;EACA;;UAGe;EACf;EACA,SAAS;;UAKM;EACf;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA,MAAM;EACN;;UAGe;EACf,QAAQ;EACR,SAAS;;KAKC;EACN;EAAmB;;EACnB;EAAmB;EAAmB;;EACtC;EAA6B;EAAmB;;EAChD;EAAuB;EAAmB;EAAe;;UAE9C;EACf,OAAO;EACP;EACA;EACA;;UAGe;EACf,OAAO;EACP;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA,WAAW;;;;;;;KAQD;;;;;UAMK;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;;;EAGA,YAAY;EACZ,eAAe;EACf;EACA,MAAM;;EAEN;EACA;EACA,cAAc;;KAGJ;EAEN;EACA;EACA;EACA;;EAGA;EACA;EACA;EACA;EACA;;EAGA;EACA;EACA;EACA;;UAGW;EACf;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA,SAAS;;UAGM;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO;EACP;EACA,qBAAqB;EACrB;EACA,WAAW;;UAKI;EACf;EACA;EACA;EACA;EACA;;EAEA;;UAGe;EACf;EACA;;EAEA;EACA;EACA,UAAU;EACV;;UAGe;EACf;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf;EACA;EACA;;;;;EAKA;EACA,YAAY;EACZ,oBAAoB;EACpB,YAAY;;;;;;;;UAWG;EACf;EACA;;EAEA;;UAKe;;EAEf,SAAS;;;;;;;KAUC,eAAa,GAAG,kBAAkB,UAAU,gBAAgB,QAAQ;;;;;;;;;;;;;;;;cAiBnE;mBACM;mBACA;EAEjB,YAAY,QAAQ,WAAW,SAAS;UAKhC;UAIA;;;;;;;;;;;;;EAmBF,QAAQ,gBAAgB,QAAQ;;;;;;;;;;;;;;EAkBhC,eAAe,oBAAoB,QAAQ;;;;;;;;;;;;EAkB3C,QAAQ,SAAS,kBAAkB,QAAQ;;;;;;;;;;;;;;;EAsB3C,QAAQ,SAAS,iBAAiB,QAAQ;;;;;;;;;;;;;;;;;EAwB1C,kBAAkB,SAAS,qBAAqB,QAAQ;;;;KC/YpD;KACA;;UAGK;;EAEf;;EAEA;;;;;;;UAQe;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;EACV,QAAQ;EACR;;;;;EAKA;;;;;;;EAOA,SAAS;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/config.ts","../src/metricTree.ts","../src/anomalies.ts","../src/custom-app/base64.ts","../src/custom-app/debug.ts","../src/custom-app/function-context.ts","../src/custom-app/inject.ts","../src/custom-app/logger.ts","../src/custom-app/metric-tree-hooks.tsx","../src/custom-app/sse.ts","../src/worldModel.ts","../src/custom-app/world-model-hooks.tsx","../src/custom-app/world-node.tsx"],"mappings":";;;;;;UAGiB;;;;EAIf;;;;EAKA;;;;EAKA;;;;EAKA;;;;EAKA;;;;;;;EAQA;;;;;EAMA;;;;KCjCU;KACA;KACA;KACA;KACA;UAEK;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA,MAAM;;EAEN;EACA,WAAW;EACX,UAAU;EACV,YAAY;EACZ;EACA,MAAM;EACN;EACA;EACA;EACA;;UAGe;EACf,OAAO;EACP,OAAO;EACP;;UAKe;EACf;EACA;EACA;EACA;EACA,OAAO;EACP,WAAW;EACX,UAAU;EACV;EACA;;UAGe;EACf;EACA,SAAS;;UAKM;EACf;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA,MAAM;EACN;;UAGe;EACf,QAAQ;EACR,SAAS;;KAKC;EACN;EAAmB;;EACnB;EAAmB;EAAmB;;EACtC;EAA6B;EAAmB;;EAChD;EAAuB;EAAmB;EAAe;;UAE9C;EACf,OAAO;EACP;EACA;EACA;;UAGe;EACf,OAAO;EACP;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA,WAAW;;;;;;;KAQD;;;;;UAMK;EACf;EACA;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;;;EAGA,YAAY;EACZ,eAAe;EACf;EACA,MAAM;;EAEN;EACA;EACA,cAAc;;KAGJ;EAEN;EACA;EACA;EACA;;EAGA;EACA;EACA;EACA;EACA;;EAGA;EACA;EACA;EACA;;UAGW;EACf;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;EACA,SAAS;;UAGM;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO;EACP;EACA,qBAAqB;EACrB;EACA,WAAW;;UAKI;EACf;EACA;EACA;EACA;EACA;;EAEA;;UAGe;EACf;EACA;;EAEA;EACA;EACA,UAAU;EACV;;UAGe;EACf;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf;EACA;EACA;;;;;EAKA;EACA,YAAY;EACZ,oBAAoB;EACpB,YAAY;;;;;;;;UAWG;EACf;EACA;;EAEA;;UAKe;;EAEf,SAAS;;;;;;;KAUC,e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"}
|