@loxtep/sdk 0.3.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.
Files changed (156) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/README.md +178 -82
  3. package/dist/authoring/compiler.d.ts +5 -0
  4. package/dist/authoring/compiler.d.ts.map +1 -1
  5. package/dist/authoring/compiler.js +149 -0
  6. package/dist/authoring/compiler.js.map +1 -1
  7. package/dist/authoring/index.d.ts +1 -1
  8. package/dist/authoring/index.d.ts.map +1 -1
  9. package/dist/authoring/index.js.map +1 -1
  10. package/dist/authoring/toolbox.d.ts +7 -7
  11. package/dist/authoring/toolbox.d.ts.map +1 -1
  12. package/dist/authoring/toolbox.js +5 -5
  13. package/dist/authoring/toolbox.js.map +1 -1
  14. package/dist/authoring/types.d.ts +47 -0
  15. package/dist/authoring/types.d.ts.map +1 -1
  16. package/dist/cli/commands/data-contracts-cmd.d.ts +8 -0
  17. package/dist/cli/commands/data-contracts-cmd.d.ts.map +1 -1
  18. package/dist/cli/commands/data-contracts-cmd.js +11 -0
  19. package/dist/cli/commands/data-contracts-cmd.js.map +1 -1
  20. package/dist/cli/commands/data-products-cmd.d.ts +2 -0
  21. package/dist/cli/commands/data-products-cmd.d.ts.map +1 -1
  22. package/dist/cli/commands/data-products-cmd.js +35 -0
  23. package/dist/cli/commands/data-products-cmd.js.map +1 -1
  24. package/dist/cli/commands/deploy-cmd.js +1 -1
  25. package/dist/cli/commands/deploy-cmd.js.map +1 -1
  26. package/dist/cli/commands/instances-cmd.d.ts +37 -0
  27. package/dist/cli/commands/instances-cmd.d.ts.map +1 -0
  28. package/dist/cli/commands/instances-cmd.js +150 -0
  29. package/dist/cli/commands/instances-cmd.js.map +1 -0
  30. package/dist/cli/commands/triggers-cmd.d.ts +19 -0
  31. package/dist/cli/commands/triggers-cmd.d.ts.map +1 -0
  32. package/dist/cli/commands/{connections-cmd.js → triggers-cmd.js} +12 -12
  33. package/dist/cli/commands/triggers-cmd.js.map +1 -0
  34. package/dist/cli/commands/workflows-cmd.d.ts +8 -1
  35. package/dist/cli/commands/workflows-cmd.d.ts.map +1 -1
  36. package/dist/cli/commands/workflows-cmd.js +23 -2
  37. package/dist/cli/commands/workflows-cmd.js.map +1 -1
  38. package/dist/cli/index.d.ts +5 -2
  39. package/dist/cli/index.d.ts.map +1 -1
  40. package/dist/cli/index.js +121 -40
  41. package/dist/cli/index.js.map +1 -1
  42. package/dist/client/connectors.d.ts +1 -1
  43. package/dist/client/connectors.d.ts.map +1 -1
  44. package/dist/client/connectors.js +1 -1
  45. package/dist/client/connectors.js.map +1 -1
  46. package/dist/client/data-products-types.d.ts +24 -1
  47. package/dist/client/data-products-types.d.ts.map +1 -1
  48. package/dist/client/data-products.d.ts +4 -2
  49. package/dist/client/data-products.d.ts.map +1 -1
  50. package/dist/client/data-products.js +17 -1
  51. package/dist/client/data-products.js.map +1 -1
  52. package/dist/client/discovery.d.ts +4 -4
  53. package/dist/client/discovery.d.ts.map +1 -1
  54. package/dist/client/discovery.js +4 -4
  55. package/dist/client/discovery.js.map +1 -1
  56. package/dist/client/index.d.ts +4 -2
  57. package/dist/client/index.d.ts.map +1 -1
  58. package/dist/client/index.js +1 -0
  59. package/dist/client/index.js.map +1 -1
  60. package/dist/client/instances-types.d.ts +92 -0
  61. package/dist/client/instances-types.d.ts.map +1 -1
  62. package/dist/client/instances.d.ts +26 -4
  63. package/dist/client/instances.d.ts.map +1 -1
  64. package/dist/client/instances.js +94 -3
  65. package/dist/client/instances.js.map +1 -1
  66. package/dist/client/loxtep-client.d.ts +32 -21
  67. package/dist/client/loxtep-client.d.ts.map +1 -1
  68. package/dist/client/loxtep-client.js +36 -26
  69. package/dist/client/loxtep-client.js.map +1 -1
  70. package/dist/client/projects.d.ts +1 -1
  71. package/dist/client/projects.d.ts.map +1 -1
  72. package/dist/client/projects.js +1 -1
  73. package/dist/client/projects.js.map +1 -1
  74. package/dist/client/promises.d.ts +11 -0
  75. package/dist/client/promises.d.ts.map +1 -1
  76. package/dist/client/promises.js +11 -0
  77. package/dist/client/promises.js.map +1 -1
  78. package/dist/client/schemas.d.ts +1 -0
  79. package/dist/client/schemas.d.ts.map +1 -1
  80. package/dist/client/schemas.js +4 -0
  81. package/dist/client/schemas.js.map +1 -1
  82. package/dist/client/{consumptions-types.d.ts → target-types.d.ts} +25 -8
  83. package/dist/client/target-types.d.ts.map +1 -0
  84. package/dist/client/target-types.js +10 -0
  85. package/dist/client/target-types.js.map +1 -0
  86. package/dist/client/targets.d.ts +21 -0
  87. package/dist/client/targets.d.ts.map +1 -0
  88. package/dist/client/targets.js +103 -0
  89. package/dist/client/targets.js.map +1 -0
  90. package/dist/client/thesaurus.d.ts +7 -2
  91. package/dist/client/thesaurus.d.ts.map +1 -1
  92. package/dist/client/thesaurus.js +16 -4
  93. package/dist/client/thesaurus.js.map +1 -1
  94. package/dist/client/{connection-types.d.ts → trigger-types.d.ts} +22 -21
  95. package/dist/client/trigger-types.d.ts.map +1 -0
  96. package/dist/client/trigger-types.js +19 -0
  97. package/dist/client/trigger-types.js.map +1 -0
  98. package/dist/client/triggers.d.ts +19 -0
  99. package/dist/client/triggers.d.ts.map +1 -0
  100. package/dist/client/{connections.js → triggers.js} +12 -11
  101. package/dist/client/triggers.js.map +1 -0
  102. package/dist/client/workflows.d.ts +38 -6
  103. package/dist/client/workflows.d.ts.map +1 -1
  104. package/dist/client/workflows.js +192 -8
  105. package/dist/client/workflows.js.map +1 -1
  106. package/dist/codegen/load-workspace-context.d.ts.map +1 -1
  107. package/dist/codegen/load-workspace-context.js +6 -4
  108. package/dist/codegen/load-workspace-context.js.map +1 -1
  109. package/docs/getting-started.md +7 -12
  110. package/docs/quick-reference.md +6 -19
  111. package/docs/sdk-mcp-mapping.md +3 -3
  112. package/package.json +3 -3
  113. package/dist/cli/commands/connections-cmd.d.ts +0 -19
  114. package/dist/cli/commands/connections-cmd.d.ts.map +0 -1
  115. package/dist/cli/commands/connections-cmd.js.map +0 -1
  116. package/dist/cli/commands/data-assets-cmd.d.ts +0 -12
  117. package/dist/cli/commands/data-assets-cmd.d.ts.map +0 -1
  118. package/dist/cli/commands/data-assets-cmd.js +0 -75
  119. package/dist/cli/commands/data-assets-cmd.js.map +0 -1
  120. package/dist/cli/commands/flows-cmd.d.ts +0 -19
  121. package/dist/cli/commands/flows-cmd.d.ts.map +0 -1
  122. package/dist/cli/commands/flows-cmd.js +0 -37
  123. package/dist/cli/commands/flows-cmd.js.map +0 -1
  124. package/dist/cli/commands/pipelines-cmd.d.ts +0 -17
  125. package/dist/cli/commands/pipelines-cmd.d.ts.map +0 -1
  126. package/dist/cli/commands/pipelines-cmd.js +0 -52
  127. package/dist/cli/commands/pipelines-cmd.js.map +0 -1
  128. package/dist/cli/commands/promises-cmd.d.ts +0 -11
  129. package/dist/cli/commands/promises-cmd.d.ts.map +0 -1
  130. package/dist/cli/commands/promises-cmd.js +0 -53
  131. package/dist/cli/commands/promises-cmd.js.map +0 -1
  132. package/dist/client/connection-types.d.ts.map +0 -1
  133. package/dist/client/connection-types.js +0 -18
  134. package/dist/client/connection-types.js.map +0 -1
  135. package/dist/client/connections.d.ts +0 -18
  136. package/dist/client/connections.d.ts.map +0 -1
  137. package/dist/client/connections.js.map +0 -1
  138. package/dist/client/consumptions-types.d.ts.map +0 -1
  139. package/dist/client/consumptions-types.js +0 -5
  140. package/dist/client/consumptions-types.js.map +0 -1
  141. package/dist/client/consumptions.d.ts +0 -14
  142. package/dist/client/consumptions.d.ts.map +0 -1
  143. package/dist/client/consumptions.js +0 -47
  144. package/dist/client/consumptions.js.map +0 -1
  145. package/dist/client/data-assets-types.d.ts +0 -150
  146. package/dist/client/data-assets-types.d.ts.map +0 -1
  147. package/dist/client/data-assets-types.js +0 -5
  148. package/dist/client/data-assets-types.js.map +0 -1
  149. package/dist/client/data-assets.d.ts +0 -31
  150. package/dist/client/data-assets.d.ts.map +0 -1
  151. package/dist/client/data-assets.js +0 -182
  152. package/dist/client/data-assets.js.map +0 -1
  153. package/dist/client/flows.d.ts +0 -33
  154. package/dist/client/flows.d.ts.map +0 -1
  155. package/dist/client/flows.js +0 -218
  156. package/dist/client/flows.js.map +0 -1
@@ -1,182 +0,0 @@
1
- /**
2
- * Data assets API (backend: data products). get, list, search, get_queue_info, get_reader_checkpoint.
3
- * Customer-facing surface: data_assets.
4
- */
5
- function buildQueryString(params) {
6
- const search = new URLSearchParams();
7
- for (const [k, v] of Object.entries(params)) {
8
- if (v === undefined || v === null)
9
- continue;
10
- if (Array.isArray(v)) {
11
- search.set(k, v.join(','));
12
- }
13
- else {
14
- search.set(k, String(v));
15
- }
16
- }
17
- const qs = search.toString();
18
- return qs ? `?${qs}` : '';
19
- }
20
- /**
21
- * Create the data_assets API surface (get, list, search, query, list_tables, get_queue_info, get_reader_checkpoint, stream, replay).
22
- */
23
- export function createDataAssetsApi(http, deps) {
24
- return {
25
- async get(id, options) {
26
- const qs = options
27
- ? buildQueryString({
28
- include_schema: options.include_schema,
29
- include_quality: options.include_quality,
30
- include_lineage: options.include_lineage,
31
- include_contracts: options.include_contracts,
32
- })
33
- : '';
34
- const res = await http.get(`/dataproducts/${encodeURIComponent(id)}${qs}`);
35
- return res.data;
36
- },
37
- /**
38
- * Get the glossary/lexicon (definitions) for a data asset.
39
- * Returns glossary_terms (term -> { definition, alt_labels?, broader?, narrower?, related? }) and field_glossary_map.
40
- */
41
- async get_lexicon(id) {
42
- const asset = await this.get(id);
43
- const glossary_terms = asset
44
- .glossary_terms ??
45
- asset.metadata?.business_glossary ??
46
- {};
47
- const field_glossary_map = asset.metadata?.field_glossary_map ?? undefined;
48
- return { glossary_terms, field_glossary_map };
49
- },
50
- async list(filters) {
51
- const params = {
52
- page: filters?.page ?? 1,
53
- page_size: filters?.page_size ?? 100,
54
- sort_by: filters?.sort_by ?? 'created_at',
55
- sort_order: filters?.sort_order ?? 'desc',
56
- };
57
- if (filters?.domain_id)
58
- params.domain_id = filters.domain_id;
59
- if (filters?.status)
60
- params.status = filters.status;
61
- if (filters?.classification)
62
- params.classification = filters.classification;
63
- if (filters?.owner_user_id)
64
- params.owner_user_id = filters.owner_user_id;
65
- if (filters?.search)
66
- params.search = filters.search;
67
- if (filters?.tags?.length)
68
- params.tags = filters.tags.join(',');
69
- const qs = buildQueryString(params);
70
- const res = await http.get(`/dataproducts${qs}`);
71
- return res.data;
72
- },
73
- async search(query, filters) {
74
- const params = {
75
- q: query,
76
- type: filters?.type ?? 'data_product',
77
- limit: filters?.limit ?? 20,
78
- offset: filters?.offset ?? 0,
79
- };
80
- const qs = buildQueryString(params);
81
- return http.get(`/search${qs}`);
82
- },
83
- async query(id, sql) {
84
- const res = await http.post('/dataproducts/query', { data_product_id: id, sql });
85
- const payload = res.data;
86
- if (!payload) {
87
- return { items: [], metadata: { data_product_id: id } };
88
- }
89
- return payload;
90
- },
91
- async list_tables(id) {
92
- const res = await http.get(`/dataproducts/${encodeURIComponent(id)}/tables`);
93
- const payload = res.data;
94
- if (!payload) {
95
- return { items: [] };
96
- }
97
- return payload;
98
- },
99
- async get_queue_info(id) {
100
- if (!deps) {
101
- throw new Error('data_assets.get_queue_info requires queues API; use LoxtepClient which wires it');
102
- }
103
- const asset = await this.get(id);
104
- const queue_name = asset.storage?.rstreams_queue;
105
- if (!queue_name) {
106
- return {
107
- queue_name: '',
108
- checkpoints: [],
109
- readers: [],
110
- writers: [],
111
- stats: {},
112
- };
113
- }
114
- return deps.get_queue_metadata(queue_name);
115
- },
116
- async get_reader_checkpoint(id, bot_id) {
117
- if (!deps) {
118
- throw new Error('data_assets.get_reader_checkpoint requires queues API; use LoxtepClient which wires it');
119
- }
120
- const asset = await this.get(id);
121
- const queue_name = asset.storage?.rstreams_queue;
122
- if (!queue_name) {
123
- throw new Error(`Data asset ${id} has no rstreams_queue (storage not configured)`);
124
- }
125
- return deps.get_reader_checkpoint(queue_name, bot_id);
126
- },
127
- async *stream(id, options) {
128
- const asset = await this.get(id);
129
- const queue_name = asset.storage?.rstreams_queue;
130
- if (!queue_name) {
131
- throw new Error(`Data asset ${id} has no rstreams_queue (storage not configured)`);
132
- }
133
- const batch_size = options?.batch_size ?? 100;
134
- let start = options?.from ?? options?.checkpoint ?? undefined;
135
- const path = `/observe/trace/${encodeURIComponent(queue_name)}/events`;
136
- while (true) {
137
- const qs = buildQueryString({ start, limit: batch_size });
138
- const res = await http.get(`${path}${qs}`);
139
- const payload = res.data ?? res;
140
- const events = payload.events ??
141
- res.events ??
142
- [];
143
- for (const event of events) {
144
- yield event;
145
- }
146
- if (events.length < batch_size)
147
- break;
148
- const last = events[events.length - 1];
149
- start = last.event_id ?? last.id;
150
- if (!start)
151
- break;
152
- }
153
- },
154
- async *replay(id, options) {
155
- const asset = await this.get(id);
156
- const queue_name = asset.storage?.rstreams_queue;
157
- if (!queue_name) {
158
- throw new Error(`Data asset ${id} has no rstreams_queue (storage not configured)`);
159
- }
160
- const limit = options?.limit ?? 1000;
161
- const start = options?.from_beginning
162
- ? '0'
163
- : (options?.from_eid ?? options?.from_timestamp ?? options?.checkpoint_id ?? undefined);
164
- const end = options?.to_eid ?? options?.to_timestamp ?? undefined;
165
- const path = `/observe/trace/${encodeURIComponent(queue_name)}/events`;
166
- const qs = buildQueryString({
167
- start: start ?? undefined,
168
- end: end ?? undefined,
169
- limit,
170
- });
171
- const res = await http.get(`${path}${qs}`);
172
- const payload = res.data ?? res;
173
- const events = payload.events ??
174
- res.events ??
175
- [];
176
- for (const event of events) {
177
- yield event;
178
- }
179
- },
180
- };
181
- }
182
- //# sourceMappingURL=data-assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-assets.js","sourceRoot":"","sources":["../../src/client/data-assets.ts"],"names":[],"mappings":"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"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Flows API (backend: workflows). list, get (with nodes), create, get_writer.
3
- * Flow writes for live events use the Loxtep stream data plane — not HTTP POST to /workflows/.../events.
4
- */
5
- import type { RStreamsSdk } from '../rstreams/leo-runtime.js';
6
- import type { LoxtepHttpClient } from '../http/client.js';
7
- import type { Flow, FlowWithNodes, FlowsListFilters, FlowsListResponse, FlowCreateInput, FlowWriter, GetWriterOptions } from './flow-types.js';
8
- export interface FlowsApiDeps {
9
- /** Stream runtime; required for get_writer().close() */
10
- rsdk?: RStreamsSdk;
11
- /** Lazy stream runtime resolver (attempts observe.stream_config() when rsdk is not set). */
12
- get_rsdk?: () => Promise<RStreamsSdk | undefined>;
13
- }
14
- /**
15
- * Determine whether an error is transient and should be retried.
16
- * Transient: network errors, timeouts, throttling (429), 5xx responses.
17
- * Non-transient: 4xx (except 429), auth failures — fail immediately.
18
- */
19
- export declare function isTransientError(err: unknown): boolean;
20
- /**
21
- * Sleep for the given number of milliseconds. Extracted for testability.
22
- */
23
- export declare function sleep(ms: number): Promise<void>;
24
- /**
25
- * Create the flows API surface (list, get with nodes, create, get_writer).
26
- */
27
- export declare function createFlowsApi(http: LoxtepHttpClient, deps?: FlowsApiDeps): {
28
- list: (filters: FlowsListFilters) => Promise<FlowsListResponse['data']>;
29
- get: (id: string) => Promise<FlowWithNodes>;
30
- create: (input: FlowCreateInput) => Promise<Flow>;
31
- get_writer: (flow_id: string, options?: GetWriterOptions) => Promise<FlowWriter>;
32
- };
33
- //# sourceMappingURL=flows.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flows.d.ts","sourceRoot":"","sources":["../../src/client/flows.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EAEb,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAUzB,MAAM,WAAW,YAAY;IAC3B,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;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,gBAAgB,EACtB,IAAI,CAAC,EAAE,YAAY,GAClB;IACD,IAAI,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAClF,CAmIA"}
@@ -1,218 +0,0 @@
1
- /**
2
- * Flows API (backend: workflows). list, get (with nodes), create, get_writer.
3
- * Flow writes for live events use the Loxtep stream data plane — not HTTP POST to /workflows/.../events.
4
- */
5
- import { DefinitionValidationError } from '../errors/validation.js';
6
- import { StreamingError } from '../errors/streaming.js';
7
- import { createQueueWriter } from '../rstreams/event-bridge.js';
8
- import { resolveIngestionQueueName } from './flow-queue-resolve.js';
9
- const WORKFLOWS_API_BASE = '/workflows/workflows';
10
- function buildQueryString(params) {
11
- const search = new URLSearchParams();
12
- for (const [k, v] of Object.entries(params)) {
13
- if (v === undefined || v === null)
14
- continue;
15
- search.set(k, String(v));
16
- }
17
- const qs = search.toString();
18
- return qs ? `?${qs}` : '';
19
- }
20
- function validateEventAgainstDefinition(event, definition) {
21
- const errors = [];
22
- const required = definition.required;
23
- if (Array.isArray(required) &&
24
- required.length > 0 &&
25
- event !== null &&
26
- typeof event === 'object') {
27
- const obj = event;
28
- for (const key of required) {
29
- if (!(key in obj) || obj[key] === undefined) {
30
- errors.push({ path: key, message: `Missing required field: ${key}` });
31
- }
32
- }
33
- }
34
- return errors;
35
- }
36
- /**
37
- * Determine whether an error is transient and should be retried.
38
- * Transient: network errors, timeouts, throttling (429), 5xx responses.
39
- * Non-transient: 4xx (except 429), auth failures — fail immediately.
40
- */
41
- export function isTransientError(err) {
42
- if (err === null || err === undefined)
43
- return false;
44
- // Check for status code on the error object (HTTP response errors)
45
- const statusCode = typeof err.status_code === 'number'
46
- ? err.status_code
47
- : typeof err.statusCode === 'number'
48
- ? err.statusCode
49
- : typeof err.status === 'number'
50
- ? err.status
51
- : undefined;
52
- if (statusCode !== undefined) {
53
- // 429 (throttling) is transient
54
- if (statusCode === 429)
55
- return true;
56
- // 5xx responses are transient
57
- if (statusCode >= 500 && statusCode < 600)
58
- return true;
59
- // Other 4xx are non-transient (auth failures, validation errors, etc.)
60
- if (statusCode >= 400 && statusCode < 500)
61
- return false;
62
- }
63
- // Check error code strings
64
- const code = typeof err.code === 'string'
65
- ? err.code
66
- : undefined;
67
- if (code) {
68
- const transientCodes = new Set([
69
- 'ECONNRESET',
70
- 'ECONNREFUSED',
71
- 'ENOTFOUND',
72
- 'ETIMEDOUT',
73
- 'EPIPE',
74
- 'EAI_AGAIN',
75
- 'RATE_LIMIT_EXCEEDED',
76
- 'RATE_LIMIT_ERROR',
77
- 'SERVICE_UNAVAILABLE',
78
- 'GATEWAY_TIMEOUT',
79
- 'INTERNAL_SERVER_ERROR',
80
- ]);
81
- if (transientCodes.has(code))
82
- return true;
83
- // Auth-related codes are non-transient
84
- const nonTransientCodes = new Set([
85
- 'AUTHENTICATION_ERROR',
86
- 'AUTHORIZATION_ERROR',
87
- 'VALIDATION_ERROR',
88
- 'NOT_FOUND',
89
- ]);
90
- if (nonTransientCodes.has(code))
91
- return false;
92
- }
93
- // Check error message for network-related keywords
94
- const message = typeof err.message === 'string'
95
- ? err.message.toLowerCase()
96
- : '';
97
- if (message.includes('timeout') ||
98
- message.includes('econnreset') ||
99
- message.includes('econnrefused') ||
100
- message.includes('network') ||
101
- message.includes('socket hang up')) {
102
- return true;
103
- }
104
- // Default: treat unknown errors as transient to allow retry
105
- return true;
106
- }
107
- /**
108
- * Sleep for the given number of milliseconds. Extracted for testability.
109
- */
110
- export function sleep(ms) {
111
- if (ms <= 0)
112
- return Promise.resolve();
113
- return new Promise((resolve) => setTimeout(resolve, ms));
114
- }
115
- /**
116
- * Create the flows API surface (list, get with nodes, create, get_writer).
117
- */
118
- export function createFlowsApi(http, deps) {
119
- return {
120
- async list(filters) {
121
- const params = {
122
- project_id: filters.project_id,
123
- page: filters.page ?? 1,
124
- page_size: filters.page_size ?? 100,
125
- };
126
- if (filters.status)
127
- params.status = filters.status;
128
- if (filters.search)
129
- params.search = filters.search;
130
- const qs = buildQueryString(params);
131
- const res = await http.get(`${WORKFLOWS_API_BASE}${qs}`);
132
- return res.data;
133
- },
134
- async get(id) {
135
- const flowRes = await http.get(`${WORKFLOWS_API_BASE}/${encodeURIComponent(id)}`);
136
- const flow = flowRes.data;
137
- let nodes = [];
138
- try {
139
- const nodesRes = await http.get(`${WORKFLOWS_API_BASE}/${encodeURIComponent(id)}/nodes`);
140
- const payload = nodesRes.data ?? nodesRes;
141
- nodes = payload.items ?? [];
142
- }
143
- catch {
144
- // Nodes endpoint may not exist or may 404; flow still has node_count
145
- }
146
- return { ...flow, nodes };
147
- },
148
- async create(input) {
149
- const res = await http.post(WORKFLOWS_API_BASE, input);
150
- return res.data;
151
- },
152
- async get_writer(flow_id, options) {
153
- // Resolve the stream runtime, source bot, and destination queue up front; the rstreams `load`
154
- // stream (created inside createQueueWriter) owns buffering, batching, backoff, and checkpointing.
155
- const rsdk = deps?.rsdk ?? (await deps?.get_rsdk?.());
156
- if (!rsdk) {
157
- throw new StreamingError('Stream bus configuration missing. Set LEO_* environment variables or add `streams` to ~/.loxtep/config.json. ' +
158
- 'Pass `streams` in LoxtepClientOptions, or ensure your instance stream environment is configured.', {
159
- details: {
160
- flow_id,
161
- hint: 'Run `loxtep init` to configure stream bus, or set LEO_* env vars from your instance.',
162
- },
163
- });
164
- }
165
- const botId = options?.bot_id;
166
- if (!botId) {
167
- throw new StreamingError('flows.get_writer requires bot_id in options (stream writer identity on the bus).', { details: { flow_id } });
168
- }
169
- let queueName = options?.output_queue_name;
170
- if (!queueName && options?.environment_prefix && options?.project_id) {
171
- const flowRes = await http.get(`${WORKFLOWS_API_BASE}/${encodeURIComponent(flow_id)}`);
172
- const flowData = flowRes && typeof flowRes === 'object' && 'data' in flowRes
173
- ? flowRes.data
174
- : flowRes;
175
- let nodes = [];
176
- try {
177
- const nodesRes = await http.get(`${WORKFLOWS_API_BASE}/${encodeURIComponent(flow_id)}/nodes`);
178
- const payload = nodesRes.data ?? nodesRes;
179
- nodes = payload.items ?? [];
180
- }
181
- catch {
182
- /* ignore */
183
- }
184
- const flowWithNodes = { ...flowData, nodes };
185
- queueName = resolveIngestionQueueName(flowWithNodes, options.environment_prefix);
186
- }
187
- if (!queueName) {
188
- throw new StreamingError('flows.get_writer requires output_queue_name, or environment_prefix + project_id so the SDK can resolve the ingestion queue from the flow.', { details: { flow_id } });
189
- }
190
- const writer = createQueueWriter(rsdk, botId, queueName, () => new StreamingError('Cannot write to a closed FlowWriter. Create a new writer via flows.get_writer().', { details: { flow_id } }));
191
- // Optional per-event definition validation wraps the passthrough writer.
192
- const validate = options?.validate_definition === true && !!options?.definition;
193
- if (!validate)
194
- return writer;
195
- const onError = options?.on_validation_error ?? 'reject';
196
- return {
197
- write(event, writeOptions) {
198
- if (options?.definition) {
199
- const errors = validateEventAgainstDefinition(event, options.definition);
200
- if (errors.length > 0) {
201
- if (onError === 'reject') {
202
- throw new DefinitionValidationError('Event failed definition validation', options.definition_version ?? '', errors);
203
- }
204
- if (onError === 'warn') {
205
- console.warn('[FlowWriter] Definition validation failed:', errors);
206
- }
207
- if (onError === 'skip')
208
- return;
209
- }
210
- }
211
- writer.write(event, writeOptions);
212
- },
213
- close: () => writer.close(),
214
- };
215
- },
216
- };
217
- }
218
- //# sourceMappingURL=flows.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flows.js","sourceRoot":"","sources":["../../src/client/flows.ts"],"names":[],"mappings":"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"}