@loxtep/sdk 0.4.0 → 0.5.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/CHANGELOG.md +37 -0
- package/README.md +77 -91
- package/dist/authoring/toolbox.d.ts +7 -7
- package/dist/authoring/toolbox.d.ts.map +1 -1
- package/dist/authoring/toolbox.js +5 -5
- package/dist/authoring/toolbox.js.map +1 -1
- package/dist/cli/commands/deploy-cmd.js +1 -1
- package/dist/cli/commands/deploy-cmd.js.map +1 -1
- package/dist/cli/commands/triggers-cmd.d.ts +19 -0
- package/dist/cli/commands/triggers-cmd.d.ts.map +1 -0
- package/dist/cli/commands/{connections-cmd.js → triggers-cmd.js} +12 -12
- package/dist/cli/commands/triggers-cmd.js.map +1 -0
- package/dist/cli/commands/workflows-cmd.d.ts +8 -1
- package/dist/cli/commands/workflows-cmd.d.ts.map +1 -1
- package/dist/cli/commands/workflows-cmd.js +23 -2
- package/dist/cli/commands/workflows-cmd.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +27 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/client/connectors.d.ts +1 -1
- package/dist/client/connectors.d.ts.map +1 -1
- package/dist/client/connectors.js +1 -1
- package/dist/client/connectors.js.map +1 -1
- package/dist/client/data-products-types.d.ts +1 -1
- package/dist/client/data-products-types.d.ts.map +1 -1
- package/dist/client/data-products.d.ts +1 -1
- package/dist/client/data-products.d.ts.map +1 -1
- package/dist/client/data-products.js +1 -1
- package/dist/client/data-products.js.map +1 -1
- package/dist/client/discovery.d.ts +4 -4
- package/dist/client/discovery.d.ts.map +1 -1
- package/dist/client/discovery.js +4 -4
- package/dist/client/discovery.js.map +1 -1
- package/dist/client/index.d.ts +4 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/loxtep-client.d.ts +32 -21
- package/dist/client/loxtep-client.d.ts.map +1 -1
- package/dist/client/loxtep-client.js +35 -25
- package/dist/client/loxtep-client.js.map +1 -1
- package/dist/client/projects.d.ts +1 -1
- package/dist/client/projects.d.ts.map +1 -1
- package/dist/client/projects.js +1 -1
- package/dist/client/projects.js.map +1 -1
- package/dist/client/{delivery-types.d.ts → target-types.d.ts} +18 -18
- package/dist/client/target-types.d.ts.map +1 -0
- package/dist/client/target-types.js +10 -0
- package/dist/client/target-types.js.map +1 -0
- package/dist/client/targets.d.ts +21 -0
- package/dist/client/targets.d.ts.map +1 -0
- package/dist/client/{delivery.js → targets.js} +31 -33
- package/dist/client/targets.js.map +1 -0
- package/dist/client/thesaurus.d.ts +2 -2
- package/dist/client/thesaurus.d.ts.map +1 -1
- package/dist/client/thesaurus.js +4 -4
- package/dist/client/thesaurus.js.map +1 -1
- package/dist/client/{connection-types.d.ts → trigger-types.d.ts} +22 -21
- package/dist/client/trigger-types.d.ts.map +1 -0
- package/dist/client/trigger-types.js +19 -0
- package/dist/client/trigger-types.js.map +1 -0
- package/dist/client/triggers.d.ts +19 -0
- package/dist/client/triggers.d.ts.map +1 -0
- package/dist/client/{connections.js → triggers.js} +12 -11
- package/dist/client/triggers.js.map +1 -0
- package/dist/client/workflows.d.ts +38 -6
- package/dist/client/workflows.d.ts.map +1 -1
- package/dist/client/workflows.js +192 -8
- package/dist/client/workflows.js.map +1 -1
- package/dist/codegen/load-workspace-context.d.ts.map +1 -1
- package/dist/codegen/load-workspace-context.js +6 -4
- package/dist/codegen/load-workspace-context.js.map +1 -1
- package/docs/getting-started.md +0 -12
- package/docs/quick-reference.md +6 -19
- package/docs/sdk-mcp-mapping.md +3 -3
- package/package.json +2 -2
- package/dist/cli/commands/connections-cmd.d.ts +0 -19
- package/dist/cli/commands/connections-cmd.d.ts.map +0 -1
- package/dist/cli/commands/connections-cmd.js.map +0 -1
- package/dist/cli/commands/flows-cmd.d.ts +0 -19
- package/dist/cli/commands/flows-cmd.d.ts.map +0 -1
- package/dist/cli/commands/flows-cmd.js +0 -37
- package/dist/cli/commands/flows-cmd.js.map +0 -1
- package/dist/client/connection-types.d.ts.map +0 -1
- package/dist/client/connection-types.js +0 -18
- package/dist/client/connection-types.js.map +0 -1
- package/dist/client/connections.d.ts +0 -18
- package/dist/client/connections.d.ts.map +0 -1
- package/dist/client/connections.js.map +0 -1
- package/dist/client/delivery-types.d.ts.map +0 -1
- package/dist/client/delivery-types.js +0 -10
- package/dist/client/delivery-types.js.map +0 -1
- package/dist/client/delivery.d.ts +0 -23
- package/dist/client/delivery.d.ts.map +0 -1
- package/dist/client/delivery.js.map +0 -1
- package/dist/client/flows.d.ts +0 -33
- package/dist/client/flows.d.ts.map +0 -1
- package/dist/client/flows.js +0 -218
- package/dist/client/flows.js.map +0 -1
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
import type { LoxtepHttpClient } from '../http/client.js';
|
|
6
6
|
import type { ThesaurusTerm } from './thesaurus-types.js';
|
|
7
7
|
export declare function createThesaurusApi(http: LoxtepHttpClient, organization_id?: string): {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
list_terms: (orgId?: string) => Promise<ThesaurusTerm[]>;
|
|
9
|
+
resolve_canonical_key: (key_or_alias: string, orgId?: string) => Promise<string | null>;
|
|
10
10
|
append_synonym: (canonical_key: string, alias_path: string, options?: {
|
|
11
11
|
system?: string;
|
|
12
12
|
precedence?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thesaurus.d.ts","sourceRoot":"","sources":["../../src/client/thesaurus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,sBAAsB,CAAC;AAYjF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,gBAAgB,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB;IACD,
|
|
1
|
+
{"version":3,"file":"thesaurus.d.ts","sourceRoot":"","sources":["../../src/client/thesaurus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAyB,MAAM,sBAAsB,CAAC;AAYjF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,gBAAgB,EACtB,eAAe,CAAC,EAAE,MAAM,GACvB;IACD,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACzD,qBAAqB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxF,cAAc,EAAE,CACd,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAC/D,OAAO,CAAC,aAAa,CAAC,CAAC;CAC7B,CA0CA"}
|
package/dist/client/thesaurus.js
CHANGED
|
@@ -9,16 +9,16 @@ async function fetchTerms(http, organization_id) {
|
|
|
9
9
|
export function createThesaurusApi(http, organization_id) {
|
|
10
10
|
const resolveOrg = (orgId) => orgId ?? organization_id;
|
|
11
11
|
return {
|
|
12
|
-
async
|
|
12
|
+
async list_terms(orgId) {
|
|
13
13
|
const org = resolveOrg(orgId);
|
|
14
14
|
if (!org)
|
|
15
|
-
throw new Error('organization_id required (pass to
|
|
15
|
+
throw new Error('organization_id required (pass to list_terms or set on client)');
|
|
16
16
|
return fetchTerms(http, org);
|
|
17
17
|
},
|
|
18
|
-
async
|
|
18
|
+
async resolve_canonical_key(key_or_alias, orgId) {
|
|
19
19
|
const org = resolveOrg(orgId);
|
|
20
20
|
if (!org)
|
|
21
|
-
throw new Error('organization_id required (pass to
|
|
21
|
+
throw new Error('organization_id required (pass to resolve_canonical_key or set on client)');
|
|
22
22
|
const terms = await fetchTerms(http, org);
|
|
23
23
|
const k = key_or_alias.toLowerCase();
|
|
24
24
|
for (const term of terms) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thesaurus.js","sourceRoot":"","sources":["../../src/client/thesaurus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,KAAK,UAAU,UAAU,CACvB,IAAsB,EACtB,eAAuB;IAEvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CACxB,wBAAwB,kBAAkB,CAAC,eAAe,CAAC,YAAY,CACxE,CAAC;IACF,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAsB,EACtB,eAAwB;IAUxB,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,IAAI,eAAe,CAAC;IAChE,OAAO;QACL,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"thesaurus.js","sourceRoot":"","sources":["../../src/client/thesaurus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,KAAK,UAAU,UAAU,CACvB,IAAsB,EACtB,eAAuB;IAEvB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CACxB,wBAAwB,kBAAkB,CAAC,eAAe,CAAC,YAAY,CACxE,CAAC;IACF,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAsB,EACtB,eAAwB;IAUxB,MAAM,UAAU,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,IAAI,eAAe,CAAC;IAChE,OAAO;QACL,KAAK,CAAC,UAAU,CAAC,KAAc;YAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;YAC5F,OAAO,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,qBAAqB,CAAC,YAAoB,EAAE,KAAc;YAC9D,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG;gBACN,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,aAAa,CAAC;gBACtE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,aAAa,CAAC;YACnD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,cAAc,CAClB,aAAqB,EACrB,UAAkB,EAClB,OAAkE;YAElE,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;YAC5F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,wBAAwB,kBAAkB,CAAC,GAAG,CAAC,qBAAqB,EACpE;gBACE,aAAa;gBACb,UAAU;gBACV,MAAM,EAAE,OAAO,EAAE,MAAM;gBACvB,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,GAAG;aACvC,CACF,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Trigger API types (ingest-side source bindings). snake_case per backend conventions.
|
|
3
3
|
* Backend: workflows microservice GET/POST /workflows/connections, etc.
|
|
4
|
+
* ("connections" is the backend term; the SDK surface names these `triggers`.)
|
|
4
5
|
*/
|
|
5
6
|
/** Pagination metadata from list APIs. */
|
|
6
|
-
export interface
|
|
7
|
+
export interface TriggerPaginationMeta {
|
|
7
8
|
page: number;
|
|
8
9
|
page_size: number;
|
|
9
10
|
total: number;
|
|
@@ -11,21 +12,21 @@ export interface ConnectionPaginationMeta {
|
|
|
11
12
|
has_next: boolean;
|
|
12
13
|
has_prev: boolean;
|
|
13
14
|
}
|
|
14
|
-
/**
|
|
15
|
-
export declare const
|
|
15
|
+
/** Trigger type enum (backend ConnectionTypes). */
|
|
16
|
+
export declare const TRIGGER_TYPES: {
|
|
16
17
|
readonly DATABASE: "database";
|
|
17
18
|
readonly API: "api";
|
|
18
19
|
readonly WEBHOOK: "webhook";
|
|
19
20
|
readonly FILE: "file";
|
|
20
21
|
};
|
|
21
|
-
/**
|
|
22
|
-
export declare const
|
|
22
|
+
/** Trigger status enum (backend ConnectionStatuses). */
|
|
23
|
+
export declare const TRIGGER_STATUSES: {
|
|
23
24
|
readonly ACTIVE: "active";
|
|
24
25
|
readonly INACTIVE: "inactive";
|
|
25
26
|
readonly ERROR: "error";
|
|
26
27
|
};
|
|
27
|
-
/** Single
|
|
28
|
-
export interface
|
|
28
|
+
/** Single trigger (ingest source binding). */
|
|
29
|
+
export interface Trigger {
|
|
29
30
|
connection_id: string;
|
|
30
31
|
organization_id?: string | null;
|
|
31
32
|
key: string;
|
|
@@ -45,8 +46,8 @@ export interface Connection {
|
|
|
45
46
|
deleted_at?: string | null;
|
|
46
47
|
[key: string]: unknown;
|
|
47
48
|
}
|
|
48
|
-
/** Input for
|
|
49
|
-
export interface
|
|
49
|
+
/** Input for triggers.create(). */
|
|
50
|
+
export interface TriggerCreateInput {
|
|
50
51
|
key: string;
|
|
51
52
|
name: string;
|
|
52
53
|
type: string;
|
|
@@ -57,8 +58,8 @@ export interface ConnectionCreateInput {
|
|
|
57
58
|
verified?: boolean;
|
|
58
59
|
draft?: boolean;
|
|
59
60
|
}
|
|
60
|
-
/** Input for
|
|
61
|
-
export interface
|
|
61
|
+
/** Input for triggers.update(). */
|
|
62
|
+
export interface TriggerUpdateInput {
|
|
62
63
|
key?: string;
|
|
63
64
|
name?: string;
|
|
64
65
|
type?: string;
|
|
@@ -69,8 +70,8 @@ export interface ConnectionUpdateInput {
|
|
|
69
70
|
verified?: boolean;
|
|
70
71
|
draft?: boolean;
|
|
71
72
|
}
|
|
72
|
-
/** Filters for
|
|
73
|
-
export interface
|
|
73
|
+
/** Filters for triggers.list(). */
|
|
74
|
+
export interface TriggersListFilters {
|
|
74
75
|
page?: number;
|
|
75
76
|
page_size?: number;
|
|
76
77
|
search?: string;
|
|
@@ -79,20 +80,20 @@ export interface ConnectionsListFilters {
|
|
|
79
80
|
verified?: boolean;
|
|
80
81
|
draft?: boolean;
|
|
81
82
|
}
|
|
82
|
-
/** Response from
|
|
83
|
-
export interface
|
|
83
|
+
/** Response from triggers.list() — API returns { success, data: { items, pagination } }. */
|
|
84
|
+
export interface TriggersListResponse {
|
|
84
85
|
success: true;
|
|
85
86
|
data: {
|
|
86
|
-
items:
|
|
87
|
-
pagination:
|
|
87
|
+
items: Trigger[];
|
|
88
|
+
pagination: TriggerPaginationMeta;
|
|
88
89
|
};
|
|
89
90
|
}
|
|
90
|
-
/** Result from
|
|
91
|
-
export interface
|
|
91
|
+
/** Result from triggers.test(). */
|
|
92
|
+
export interface TriggerTestResult {
|
|
92
93
|
success: boolean;
|
|
93
94
|
message: string;
|
|
94
95
|
details?: Record<string, unknown>;
|
|
95
96
|
tested_at?: string;
|
|
96
97
|
[key: string]: unknown;
|
|
97
98
|
}
|
|
98
|
-
//# sourceMappingURL=
|
|
99
|
+
//# sourceMappingURL=trigger-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger-types.d.ts","sourceRoot":"","sources":["../../src/client/trigger-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger API types (ingest-side source bindings). snake_case per backend conventions.
|
|
3
|
+
* Backend: workflows microservice GET/POST /workflows/connections, etc.
|
|
4
|
+
* ("connections" is the backend term; the SDK surface names these `triggers`.)
|
|
5
|
+
*/
|
|
6
|
+
/** Trigger type enum (backend ConnectionTypes). */
|
|
7
|
+
export const TRIGGER_TYPES = {
|
|
8
|
+
DATABASE: 'database',
|
|
9
|
+
API: 'api',
|
|
10
|
+
WEBHOOK: 'webhook',
|
|
11
|
+
FILE: 'file',
|
|
12
|
+
};
|
|
13
|
+
/** Trigger status enum (backend ConnectionStatuses). */
|
|
14
|
+
export const TRIGGER_STATUSES = {
|
|
15
|
+
ACTIVE: 'active',
|
|
16
|
+
INACTIVE: 'inactive',
|
|
17
|
+
ERROR: 'error',
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=trigger-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger-types.js","sourceRoot":"","sources":["../../src/client/trigger-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,mDAAmD;AACnD,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,QAAQ,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,wDAAwD;AACxD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;CACN,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Triggers API — ingest-side source bindings. create, update, test, list, get.
|
|
3
|
+
* Backend: workflows microservice /workflows/connections.
|
|
4
|
+
* ("connections" is the backend term; the SDK surface names these `triggers`.)
|
|
5
|
+
*/
|
|
6
|
+
import type { LoxtepHttpClient } from '../http/client.js';
|
|
7
|
+
import type { Trigger, TriggerCreateInput, TriggerUpdateInput, TriggersListFilters, TriggersListResponse, TriggerTestResult } from './trigger-types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create the triggers API surface (get, list, create, update, delete, test).
|
|
10
|
+
*/
|
|
11
|
+
export declare function createTriggersApi(http: LoxtepHttpClient): {
|
|
12
|
+
get: (id: string) => Promise<Trigger>;
|
|
13
|
+
list: (filters?: TriggersListFilters) => Promise<TriggersListResponse['data']>;
|
|
14
|
+
create: (config: TriggerCreateInput) => Promise<Trigger>;
|
|
15
|
+
update: (id: string, config: TriggerUpdateInput) => Promise<Trigger>;
|
|
16
|
+
delete: (id: string) => Promise<void>;
|
|
17
|
+
test: (id: string) => Promise<TriggerTestResult>;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=triggers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../src/client/triggers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAoB5B;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG;IACzD,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/E,MAAM,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAClD,CAkDA"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Triggers API — ingest-side source bindings. create, update, test, list, get.
|
|
3
3
|
* Backend: workflows microservice /workflows/connections.
|
|
4
|
+
* ("connections" is the backend term; the SDK surface names these `triggers`.)
|
|
4
5
|
*/
|
|
5
|
-
const
|
|
6
|
+
const TRIGGERS_BASE = '/workflows/connections';
|
|
6
7
|
function buildQueryString(params) {
|
|
7
8
|
const search = new URLSearchParams();
|
|
8
9
|
for (const [k, v] of Object.entries(params)) {
|
|
@@ -19,12 +20,12 @@ function buildQueryString(params) {
|
|
|
19
20
|
return qs ? `?${qs}` : '';
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
|
-
* Create the
|
|
23
|
+
* Create the triggers API surface (get, list, create, update, delete, test).
|
|
23
24
|
*/
|
|
24
|
-
export function
|
|
25
|
+
export function createTriggersApi(http) {
|
|
25
26
|
return {
|
|
26
27
|
async get(id) {
|
|
27
|
-
const res = await http.get(`${
|
|
28
|
+
const res = await http.get(`${TRIGGERS_BASE}/${encodeURIComponent(id)}`);
|
|
28
29
|
return res.data;
|
|
29
30
|
},
|
|
30
31
|
async list(filters) {
|
|
@@ -43,24 +44,24 @@ export function createConnectionsApi(http) {
|
|
|
43
44
|
if (filters?.draft !== undefined)
|
|
44
45
|
params.draft = filters.draft;
|
|
45
46
|
const qs = buildQueryString(params);
|
|
46
|
-
const res = await http.get(`${
|
|
47
|
+
const res = await http.get(`${TRIGGERS_BASE}${qs}`);
|
|
47
48
|
return res.data;
|
|
48
49
|
},
|
|
49
50
|
async create(config) {
|
|
50
|
-
const res = await http.post(
|
|
51
|
+
const res = await http.post(TRIGGERS_BASE, config);
|
|
51
52
|
return res.data;
|
|
52
53
|
},
|
|
53
54
|
async update(id, config) {
|
|
54
|
-
const res = await http.put(`${
|
|
55
|
+
const res = await http.put(`${TRIGGERS_BASE}/${encodeURIComponent(id)}`, config);
|
|
55
56
|
return res.data;
|
|
56
57
|
},
|
|
57
58
|
async delete(id) {
|
|
58
|
-
await http.delete(`${
|
|
59
|
+
await http.delete(`${TRIGGERS_BASE}/${encodeURIComponent(id)}`);
|
|
59
60
|
},
|
|
60
61
|
async test(id) {
|
|
61
|
-
const res = await http.post(`${
|
|
62
|
+
const res = await http.post(`${TRIGGERS_BASE}/${encodeURIComponent(id)}/test`, {});
|
|
62
63
|
return res.data;
|
|
63
64
|
},
|
|
64
65
|
};
|
|
65
66
|
}
|
|
66
|
-
//# sourceMappingURL=
|
|
67
|
+
//# sourceMappingURL=triggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triggers.js","sourceRoot":"","sources":["../../src/client/triggers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,aAAa,GAAG,wBAAwB,CAAC;AAE/C,SAAS,gBAAgB,CACvB,MAAwE;IAExE,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAsB;IAQtD,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,EAAU;YAClB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CACxB,GAAG,aAAa,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAC7C,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAA6B;YACtC,MAAM,MAAM,GAAqE;gBAC/E,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;gBACxB,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;aACpC,CAAC;YACF,IAAI,OAAO,EAAE,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACpD,IAAI,OAAO,EAAE,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7F,IAAI,OAAO,EAAE,MAAM;gBACjB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACpF,IAAI,OAAO,EAAE,QAAQ,KAAK,SAAS;gBAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;YACxE,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC/D,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAuB,GAAG,aAAa,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1E,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,MAA0B;YACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAmC,aAAa,EAAE,MAAM,CAAC,CAAC;YACrF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,MAA0B;YACjD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CACxB,GAAG,aAAa,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAC5C,MAAM,CACP,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,EAAU;YACrB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,aAAa,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAU;YACnB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,GAAG,aAAa,IAAI,kBAAkB,CAAC,EAAE,CAAC,OAAO,EACjD,EAAE,CACH,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,15 +1,47 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Workflows API:
|
|
2
|
+
* Workflows API: list, get (with nodes), create, get_graph, deploy, get_writer.
|
|
3
3
|
* Backend: workflows microservice (/workflows/workflows, graph, projects/:id/deploy).
|
|
4
|
+
*
|
|
5
|
+
* A workflow is a DAG of nodes (ingestion → transformation → export). This
|
|
6
|
+
* namespace is the single surface for the workflow entity and its lifecycle;
|
|
7
|
+
* the former `flows` namespace has been folded in here.
|
|
8
|
+
*
|
|
9
|
+
* `get_writer` is a low-level stream-writer escape hatch — see `@internal` note.
|
|
10
|
+
* Live event writes use the Loxtep stream data plane, not HTTP POST.
|
|
4
11
|
*/
|
|
12
|
+
import type { RStreamsSdk } from '../rstreams/leo-runtime.js';
|
|
5
13
|
import type { LoxtepHttpClient } from '../http/client.js';
|
|
6
14
|
import type { WorkflowsListFilters, WorkflowsListResponse, GetWorkflowGraphResponse, DeployInput, DeployResponse, CreateWorkflowInput } from './workflows-types.js';
|
|
7
|
-
import type { Flow } from './flow-types.js';
|
|
15
|
+
import type { Flow, FlowWithNodes, FlowWriter, GetWriterOptions } from './flow-types.js';
|
|
16
|
+
export interface WorkflowsApiDeps {
|
|
17
|
+
/** Stream runtime; required for get_writer().close() */
|
|
18
|
+
rsdk?: RStreamsSdk;
|
|
19
|
+
/** Lazy stream runtime resolver (attempts observe.stream_config() when rsdk is not set). */
|
|
20
|
+
get_rsdk?: () => Promise<RStreamsSdk | undefined>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Determine whether an error is transient and should be retried.
|
|
24
|
+
* Transient: network errors, timeouts, throttling (429), 5xx responses.
|
|
25
|
+
* Non-transient: 4xx (except 429), auth failures — fail immediately.
|
|
26
|
+
*/
|
|
27
|
+
export declare function isTransientError(err: unknown): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Sleep for the given number of milliseconds. Extracted for testability.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
8
32
|
export type WorkflowsApi = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
33
|
+
list: (filters: WorkflowsListFilters) => Promise<WorkflowsListResponse['data']>;
|
|
34
|
+
get: (id: string) => Promise<FlowWithNodes>;
|
|
35
|
+
create: (input: CreateWorkflowInput) => Promise<Flow>;
|
|
36
|
+
get_graph: (workflow_id: string, project_id: string) => Promise<GetWorkflowGraphResponse['data']>;
|
|
12
37
|
deploy: (input: DeployInput) => Promise<DeployResponse['data']>;
|
|
38
|
+
/**
|
|
39
|
+
* @internal
|
|
40
|
+
* Low-level stream-writer escape hatch. Requires explicit `bot_id` and an
|
|
41
|
+
* output queue (or `environment_prefix` + `project_id` to resolve it).
|
|
42
|
+
* Undocumented for customers — use `data_products.get_writer(name)` instead.
|
|
43
|
+
*/
|
|
44
|
+
get_writer: (workflow_id: string, options?: GetWriterOptions) => Promise<FlowWriter>;
|
|
13
45
|
};
|
|
14
|
-
export declare function createWorkflowsApi(http: LoxtepHttpClient): WorkflowsApi;
|
|
46
|
+
export declare function createWorkflowsApi(http: LoxtepHttpClient, deps?: WorkflowsApiDeps): WorkflowsApi;
|
|
15
47
|
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/client/workflows.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/client/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,cAAc,EACd,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EAEb,UAAU,EACV,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAWzB,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;CACnD;AAkCD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAwEtD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/C;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;IAChF,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,SAAS,EAAE,CACT,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE;;;;;OAKG;IACH,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACtF,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,gBAAgB,EACtB,IAAI,CAAC,EAAE,gBAAgB,GACtB,YAAY,CAwJd"}
|
package/dist/client/workflows.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Workflows API:
|
|
2
|
+
* Workflows API: list, get (with nodes), create, get_graph, deploy, get_writer.
|
|
3
3
|
* Backend: workflows microservice (/workflows/workflows, graph, projects/:id/deploy).
|
|
4
|
+
*
|
|
5
|
+
* A workflow is a DAG of nodes (ingestion → transformation → export). This
|
|
6
|
+
* namespace is the single surface for the workflow entity and its lifecycle;
|
|
7
|
+
* the former `flows` namespace has been folded in here.
|
|
8
|
+
*
|
|
9
|
+
* `get_writer` is a low-level stream-writer escape hatch — see `@internal` note.
|
|
10
|
+
* Live event writes use the Loxtep stream data plane, not HTTP POST.
|
|
4
11
|
*/
|
|
12
|
+
import { DefinitionValidationError } from '../errors/validation.js';
|
|
13
|
+
import { StreamingError } from '../errors/streaming.js';
|
|
14
|
+
import { createQueueWriter } from '../rstreams/event-bridge.js';
|
|
15
|
+
import { resolveIngestionQueueName } from './flow-queue-resolve.js';
|
|
5
16
|
const WORKFLOWS_BASE = '/workflows/workflows';
|
|
6
17
|
const PROJECTS_BASE = '/workflows/projects';
|
|
7
18
|
function buildQueryString(params) {
|
|
@@ -14,9 +25,104 @@ function buildQueryString(params) {
|
|
|
14
25
|
const qs = search.toString();
|
|
15
26
|
return qs ? `?${qs}` : '';
|
|
16
27
|
}
|
|
17
|
-
|
|
28
|
+
function validateEventAgainstDefinition(event, definition) {
|
|
29
|
+
const errors = [];
|
|
30
|
+
const required = definition.required;
|
|
31
|
+
if (Array.isArray(required) &&
|
|
32
|
+
required.length > 0 &&
|
|
33
|
+
event !== null &&
|
|
34
|
+
typeof event === 'object') {
|
|
35
|
+
const obj = event;
|
|
36
|
+
for (const key of required) {
|
|
37
|
+
if (!(key in obj) || obj[key] === undefined) {
|
|
38
|
+
errors.push({ path: key, message: `Missing required field: ${key}` });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return errors;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Determine whether an error is transient and should be retried.
|
|
46
|
+
* Transient: network errors, timeouts, throttling (429), 5xx responses.
|
|
47
|
+
* Non-transient: 4xx (except 429), auth failures — fail immediately.
|
|
48
|
+
*/
|
|
49
|
+
export function isTransientError(err) {
|
|
50
|
+
if (err === null || err === undefined)
|
|
51
|
+
return false;
|
|
52
|
+
// Check for status code on the error object (HTTP response errors)
|
|
53
|
+
const statusCode = typeof err.status_code === 'number'
|
|
54
|
+
? err.status_code
|
|
55
|
+
: typeof err.statusCode === 'number'
|
|
56
|
+
? err.statusCode
|
|
57
|
+
: typeof err.status === 'number'
|
|
58
|
+
? err.status
|
|
59
|
+
: undefined;
|
|
60
|
+
if (statusCode !== undefined) {
|
|
61
|
+
// 429 (throttling) is transient
|
|
62
|
+
if (statusCode === 429)
|
|
63
|
+
return true;
|
|
64
|
+
// 5xx responses are transient
|
|
65
|
+
if (statusCode >= 500 && statusCode < 600)
|
|
66
|
+
return true;
|
|
67
|
+
// Other 4xx are non-transient (auth failures, validation errors, etc.)
|
|
68
|
+
if (statusCode >= 400 && statusCode < 500)
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
// Check error code strings
|
|
72
|
+
const code = typeof err.code === 'string'
|
|
73
|
+
? err.code
|
|
74
|
+
: undefined;
|
|
75
|
+
if (code) {
|
|
76
|
+
const transientCodes = new Set([
|
|
77
|
+
'ECONNRESET',
|
|
78
|
+
'ECONNREFUSED',
|
|
79
|
+
'ENOTFOUND',
|
|
80
|
+
'ETIMEDOUT',
|
|
81
|
+
'EPIPE',
|
|
82
|
+
'EAI_AGAIN',
|
|
83
|
+
'RATE_LIMIT_EXCEEDED',
|
|
84
|
+
'RATE_LIMIT_ERROR',
|
|
85
|
+
'SERVICE_UNAVAILABLE',
|
|
86
|
+
'GATEWAY_TIMEOUT',
|
|
87
|
+
'INTERNAL_SERVER_ERROR',
|
|
88
|
+
]);
|
|
89
|
+
if (transientCodes.has(code))
|
|
90
|
+
return true;
|
|
91
|
+
// Auth-related codes are non-transient
|
|
92
|
+
const nonTransientCodes = new Set([
|
|
93
|
+
'AUTHENTICATION_ERROR',
|
|
94
|
+
'AUTHORIZATION_ERROR',
|
|
95
|
+
'VALIDATION_ERROR',
|
|
96
|
+
'NOT_FOUND',
|
|
97
|
+
]);
|
|
98
|
+
if (nonTransientCodes.has(code))
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
// Check error message for network-related keywords
|
|
102
|
+
const message = typeof err.message === 'string'
|
|
103
|
+
? err.message.toLowerCase()
|
|
104
|
+
: '';
|
|
105
|
+
if (message.includes('timeout') ||
|
|
106
|
+
message.includes('econnreset') ||
|
|
107
|
+
message.includes('econnrefused') ||
|
|
108
|
+
message.includes('network') ||
|
|
109
|
+
message.includes('socket hang up')) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
// Default: treat unknown errors as transient to allow retry
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Sleep for the given number of milliseconds. Extracted for testability.
|
|
117
|
+
*/
|
|
118
|
+
export function sleep(ms) {
|
|
119
|
+
if (ms <= 0)
|
|
120
|
+
return Promise.resolve();
|
|
121
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
122
|
+
}
|
|
123
|
+
export function createWorkflowsApi(http, deps) {
|
|
18
124
|
const api = {
|
|
19
|
-
async
|
|
125
|
+
async list(filters) {
|
|
20
126
|
const params = {
|
|
21
127
|
project_id: filters.project_id,
|
|
22
128
|
page: filters.page ?? 1,
|
|
@@ -30,20 +136,98 @@ export function createWorkflowsApi(http) {
|
|
|
30
136
|
const res = await http.get(`${WORKFLOWS_BASE}${qs}`);
|
|
31
137
|
return res.data;
|
|
32
138
|
},
|
|
33
|
-
async
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
139
|
+
async get(id) {
|
|
140
|
+
const flowRes = await http.get(`${WORKFLOWS_BASE}/${encodeURIComponent(id)}`);
|
|
141
|
+
const flow = flowRes.data;
|
|
142
|
+
let nodes = [];
|
|
143
|
+
try {
|
|
144
|
+
const nodesRes = await http.get(`${WORKFLOWS_BASE}/${encodeURIComponent(id)}/nodes`);
|
|
145
|
+
const payload = nodesRes.data ?? nodesRes;
|
|
146
|
+
nodes = payload.items ?? [];
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Nodes endpoint may not exist or may 404; workflow still has node_count
|
|
150
|
+
}
|
|
151
|
+
return { ...flow, nodes };
|
|
37
152
|
},
|
|
38
|
-
async
|
|
153
|
+
async create(input) {
|
|
39
154
|
const res = await http.post(WORKFLOWS_BASE, input);
|
|
40
155
|
return res.data;
|
|
41
156
|
},
|
|
157
|
+
async get_graph(workflow_id, project_id) {
|
|
158
|
+
const qs = buildQueryString({ project_id });
|
|
159
|
+
const res = await http.get(`${WORKFLOWS_BASE}/${encodeURIComponent(workflow_id)}/graph${qs}`);
|
|
160
|
+
return res.data;
|
|
161
|
+
},
|
|
42
162
|
async deploy(input) {
|
|
43
163
|
const { project_id, instance_id, version_id, force_redeploy } = input;
|
|
44
164
|
const res = await http.post(`${PROJECTS_BASE}/${encodeURIComponent(project_id)}/deploy`, { instance_id, version_id, force_redeploy: force_redeploy ?? false });
|
|
45
165
|
return res.data;
|
|
46
166
|
},
|
|
167
|
+
async get_writer(workflow_id, options) {
|
|
168
|
+
// Resolve the stream runtime, source bot, and destination queue up front; the rstreams `load`
|
|
169
|
+
// stream (created inside createQueueWriter) owns buffering, batching, backoff, and checkpointing.
|
|
170
|
+
const rsdk = deps?.rsdk ?? (await deps?.get_rsdk?.());
|
|
171
|
+
if (!rsdk) {
|
|
172
|
+
throw new StreamingError('Stream bus configuration missing. Set LEO_* environment variables or add `streams` to ~/.loxtep/config.json. ' +
|
|
173
|
+
'Pass `streams` in LoxtepClientOptions, or ensure your instance stream environment is configured.', {
|
|
174
|
+
details: {
|
|
175
|
+
workflow_id,
|
|
176
|
+
hint: 'Run `loxtep init` to configure stream bus, or set LEO_* env vars from your instance.',
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const botId = options?.bot_id;
|
|
181
|
+
if (!botId) {
|
|
182
|
+
throw new StreamingError('workflows.get_writer requires bot_id in options (stream writer identity on the bus).', { details: { workflow_id } });
|
|
183
|
+
}
|
|
184
|
+
let queueName = options?.output_queue_name;
|
|
185
|
+
if (!queueName && options?.environment_prefix && options?.project_id) {
|
|
186
|
+
const flowRes = await http.get(`${WORKFLOWS_BASE}/${encodeURIComponent(workflow_id)}`);
|
|
187
|
+
const flowData = flowRes && typeof flowRes === 'object' && 'data' in flowRes
|
|
188
|
+
? flowRes.data
|
|
189
|
+
: flowRes;
|
|
190
|
+
let nodes = [];
|
|
191
|
+
try {
|
|
192
|
+
const nodesRes = await http.get(`${WORKFLOWS_BASE}/${encodeURIComponent(workflow_id)}/nodes`);
|
|
193
|
+
const payload = nodesRes.data ?? nodesRes;
|
|
194
|
+
nodes = payload.items ?? [];
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
/* ignore */
|
|
198
|
+
}
|
|
199
|
+
const flowWithNodes = { ...flowData, nodes };
|
|
200
|
+
queueName = resolveIngestionQueueName(flowWithNodes, options.environment_prefix);
|
|
201
|
+
}
|
|
202
|
+
if (!queueName) {
|
|
203
|
+
throw new StreamingError('workflows.get_writer requires output_queue_name, or environment_prefix + project_id so the SDK can resolve the ingestion queue from the workflow.', { details: { workflow_id } });
|
|
204
|
+
}
|
|
205
|
+
const writer = createQueueWriter(rsdk, botId, queueName, () => new StreamingError('Cannot write to a closed writer. Create a new writer via workflows.get_writer().', { details: { workflow_id } }));
|
|
206
|
+
// Optional per-event definition validation wraps the passthrough writer.
|
|
207
|
+
const validate = options?.validate_definition === true && !!options?.definition;
|
|
208
|
+
if (!validate)
|
|
209
|
+
return writer;
|
|
210
|
+
const onError = options?.on_validation_error ?? 'reject';
|
|
211
|
+
return {
|
|
212
|
+
write(event, writeOptions) {
|
|
213
|
+
if (options?.definition) {
|
|
214
|
+
const errors = validateEventAgainstDefinition(event, options.definition);
|
|
215
|
+
if (errors.length > 0) {
|
|
216
|
+
if (onError === 'reject') {
|
|
217
|
+
throw new DefinitionValidationError('Event failed definition validation', options.definition_version ?? '', errors);
|
|
218
|
+
}
|
|
219
|
+
if (onError === 'warn') {
|
|
220
|
+
console.warn('[workflows writer] Definition validation failed:', errors);
|
|
221
|
+
}
|
|
222
|
+
if (onError === 'skip')
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
writer.write(event, writeOptions);
|
|
227
|
+
},
|
|
228
|
+
close: () => writer.close(),
|
|
229
|
+
};
|
|
230
|
+
},
|
|
47
231
|
};
|
|
48
232
|
return api;
|
|
49
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/client/workflows.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/client/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAoBH,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAC9C,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAS5C,SAAS,gBAAgB,CAAC,MAA6D;IACrF,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAc,EACd,UAAmC;IAEnC,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAgC,CAAC;IAC7D,IACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvB,QAAQ,CAAC,MAAM,GAAG,CAAC;QACnB,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;QACD,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,2BAA2B,GAAG,EAAE,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAEpD,mEAAmE;IACnE,MAAM,UAAU,GACd,OAAQ,GAAiC,CAAC,WAAW,KAAK,QAAQ;QAChE,CAAC,CAAE,GAA+B,CAAC,WAAW;QAC9C,CAAC,CAAC,OAAQ,GAAgC,CAAC,UAAU,KAAK,QAAQ;YAChE,CAAC,CAAE,GAA8B,CAAC,UAAU;YAC5C,CAAC,CAAC,OAAQ,GAA4B,CAAC,MAAM,KAAK,QAAQ;gBACxD,CAAC,CAAE,GAA0B,CAAC,MAAM;gBACpC,CAAC,CAAC,SAAS,CAAC;IAEpB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,gCAAgC;QAChC,IAAI,UAAU,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACpC,8BAA8B;QAC9B,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,IAAI,CAAC;QACvD,uEAAuE;QACvE,IAAI,UAAU,IAAI,GAAG,IAAI,UAAU,GAAG,GAAG;YAAE,OAAO,KAAK,CAAC;IAC1D,CAAC;IAED,2BAA2B;IAC3B,MAAM,IAAI,GACR,OAAQ,GAA0B,CAAC,IAAI,KAAK,QAAQ;QAClD,CAAC,CAAE,GAAwB,CAAC,IAAI;QAChC,CAAC,CAAC,SAAS,CAAC;IAEhB,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;YAC7B,YAAY;YACZ,cAAc;YACd,WAAW;YACX,WAAW;YACX,OAAO;YACP,WAAW;YACX,qBAAqB;YACrB,kBAAkB;YAClB,qBAAqB;YACrB,iBAAiB;YACjB,uBAAuB;SACxB,CAAC,CAAC;QACH,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,uCAAuC;QACvC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;YAChC,sBAAsB;YACtB,qBAAqB;YACrB,kBAAkB;YAClB,WAAW;SACZ,CAAC,CAAC;QACH,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IAChD,CAAC;IAED,mDAAmD;IACnD,MAAM,OAAO,GACX,OAAQ,GAA6B,CAAC,OAAO,KAAK,QAAQ;QACxD,CAAC,CAAE,GAA2B,CAAC,OAAO,CAAC,WAAW,EAAE;QACpD,CAAC,CAAC,EAAE,CAAC;IAET,IACE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;QAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4DAA4D;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAoBD,MAAM,UAAU,kBAAkB,CAChC,IAAsB,EACtB,IAAuB;IAEvB,MAAM,GAAG,GAAiB;QACxB,KAAK,CAAC,IAAI,CAAC,OAA6B;YACtC,MAAM,MAAM,GAAgD;gBAC1D,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC;gBACvB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,GAAG;aACpC,CAAC;YACF,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACnD,IAAI,OAAO,CAAC,MAAM;gBAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YACnD,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAwB,GAAG,cAAc,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5E,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,EAAU;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAC5B,GAAG,cAAc,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAC9C,CAAC;YACF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC1B,IAAI,KAAK,GAAe,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC7B,GAAG,cAAc,IAAI,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CACpD,CAAC;gBACF,MAAM,OAAO,GAAI,QAA8C,CAAC,IAAI,IAAI,QAAQ,CAAC;gBACjF,KAAK,GAAI,OAAkC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,CAAC;YAAC,MAAM,CAAC;gBACP,yEAAyE;YAC3E,CAAC;YACD,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAA0B;YACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAgC,cAAc,EAAE,KAAK,CAAC,CAAC;YAClF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,SAAS,CACb,WAAmB,EACnB,UAAkB;YAElB,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CACxB,GAAG,cAAc,IAAI,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAClE,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAkB;YAC7B,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;YACtE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CACzB,GAAG,aAAa,IAAI,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAC3D,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,IAAI,KAAK,EAAE,CACrE,CAAC;YACF,OAAO,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,WAAmB,EAAE,OAA0B;YAC9D,8FAA8F;YAC9F,kGAAkG;YAClG,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,cAAc,CACtB,+GAA+G;oBAC7G,kGAAkG,EACpG;oBACE,OAAO,EAAE;wBACP,WAAW;wBACX,IAAI,EAAE,sFAAsF;qBAC7F;iBACF,CACF,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,EAAE,MAAM,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,cAAc,CACtB,sFAAsF,EACtF,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAC7B,CAAC;YACJ,CAAC;YAED,IAAI,SAAS,GAAG,OAAO,EAAE,iBAAiB,CAAC;YAC3C,IAAI,CAAC,SAAS,IAAI,OAAO,EAAE,kBAAkB,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;gBACrE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAC5B,GAAG,cAAc,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CACvD,CAAC;gBACF,MAAM,QAAQ,GACZ,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAI,OAAO;oBACzD,CAAC,CAAE,OAA0B,CAAC,IAAI;oBAClC,CAAC,CAAE,OAAgB,CAAC;gBACxB,IAAI,KAAK,GAAe,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAC7B,GAAG,cAAc,IAAI,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAC7D,CAAC;oBACF,MAAM,OAAO,GAAI,QAA8C,CAAC,IAAI,IAAI,QAAQ,CAAC;oBACjF,KAAK,GAAI,OAAkC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC1D,CAAC;gBAAC,MAAM,CAAC;oBACP,YAAY;gBACd,CAAC;gBACD,MAAM,aAAa,GAAkB,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,CAAC;gBAC5D,SAAS,GAAG,yBAAyB,CAAC,aAAa,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACnF,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,cAAc,CACtB,mJAAmJ,EACnJ,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAC7B,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,iBAAiB,CAC9B,IAAI,EACJ,KAAK,EACL,SAAS,EACT,GAAG,EAAE,CACH,IAAI,cAAc,CAChB,kFAAkF,EAClF,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAC7B,CACJ,CAAC;YAEF,yEAAyE;YACzE,MAAM,QAAQ,GAAG,OAAO,EAAE,mBAAmB,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC;YAChF,IAAI,CAAC,QAAQ;gBAAE,OAAO,MAAM,CAAC;YAC7B,MAAM,OAAO,GAAG,OAAO,EAAE,mBAAmB,IAAI,QAAQ,CAAC;YACzD,OAAO;gBACL,KAAK,CAAC,KAAc,EAAE,YAA2B;oBAC/C,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;wBACxB,MAAM,MAAM,GAAG,8BAA8B,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;wBACzE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACtB,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gCACzB,MAAM,IAAI,yBAAyB,CACjC,oCAAoC,EACpC,OAAO,CAAC,kBAAkB,IAAI,EAAE,EAChC,MAAM,CACP,CAAC;4BACJ,CAAC;4BACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gCACvB,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,MAAM,CAAC,CAAC;4BAC3E,CAAC;4BACD,IAAI,OAAO,KAAK,MAAM;gCAAE,OAAO;wBACjC,CAAC;oBACH,CAAC;oBACD,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBACpC,CAAC;gBACD,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;aAC5B,CAAC;QACJ,CAAC;KACF,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-workspace-context.d.ts","sourceRoot":"","sources":["../../src/codegen/load-workspace-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"load-workspace-context.d.ts","sourceRoot":"","sources":["../../src/codegen/load-workspace-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAoF3B"}
|
|
@@ -26,15 +26,17 @@
|
|
|
26
26
|
*/
|
|
27
27
|
export async function loadWorkspaceContext(client, projectId) {
|
|
28
28
|
// Fetch all resource types concurrently for performance.
|
|
29
|
-
// Project-scoped resources (
|
|
29
|
+
// Project-scoped resources (workflows) use projectId directly.
|
|
30
30
|
// Org-scoped resources (data products, connectors, domains) fetch all available.
|
|
31
|
-
const [dataProductsResult, connectorsResult, domainsResult,
|
|
31
|
+
const [dataProductsResult, connectorsResult, domainsResult, workflowsResult,] = await Promise.all([
|
|
32
32
|
client.data_products.list({ page: 1, page_size: 1000 }),
|
|
33
33
|
client.connectors.list({ page: 1, page_size: 1000 }),
|
|
34
34
|
client.domains.list({ page: 1, page_size: 1000 }),
|
|
35
|
-
client.
|
|
36
|
-
client.workflows.listWorkflows({ project_id: projectId, page: 1, page_size: 1000 }),
|
|
35
|
+
client.workflows.list({ project_id: projectId, page: 1, page_size: 1000 }),
|
|
37
36
|
]);
|
|
37
|
+
// `flows` and `workflows` are the same backend entity; the WorkspaceContext
|
|
38
|
+
// keeps both collections for the generated artifact, sourced from one fetch.
|
|
39
|
+
const flowsResult = workflowsResult;
|
|
38
40
|
// Fetch queues from the observe endpoint (instance-level).
|
|
39
41
|
// The observe.status() returns bot/queue info for the configured instance.
|
|
40
42
|
let queuesRaw = [];
|