@loxtep/sdk 0.7.22 → 0.7.24
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 +30 -0
- package/README.md +6 -1
- package/dist/cli/commands/connectors-cmd.d.ts +23 -0
- package/dist/cli/commands/connectors-cmd.d.ts.map +1 -0
- package/dist/cli/commands/connectors-cmd.js +32 -0
- package/dist/cli/commands/connectors-cmd.js.map +1 -0
- package/dist/cli/commands/deploy-cmd.d.ts +5 -1
- package/dist/cli/commands/deploy-cmd.d.ts.map +1 -1
- package/dist/cli/commands/deploy-cmd.js +25 -2
- package/dist/cli/commands/deploy-cmd.js.map +1 -1
- package/dist/cli/commands/ingest-cmd.d.ts +7 -2
- package/dist/cli/commands/ingest-cmd.d.ts.map +1 -1
- package/dist/cli/commands/ingest-cmd.js +119 -29
- package/dist/cli/commands/ingest-cmd.js.map +1 -1
- package/dist/cli/commands/lint-cmd.d.ts +17 -0
- package/dist/cli/commands/lint-cmd.d.ts.map +1 -0
- package/dist/cli/commands/lint-cmd.js +61 -0
- package/dist/cli/commands/lint-cmd.js.map +1 -0
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +11 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/index.js +24 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/client/connectors.d.ts.map +1 -1
- package/dist/client/connectors.js +7 -1
- package/dist/client/connectors.js.map +1 -1
- package/dist/errors/parse-http.d.ts.map +1 -1
- package/dist/errors/parse-http.js +33 -10
- package/dist/errors/parse-http.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/entity-json-schemas/ajv-loader.cjs +17 -0
- package/dist/lib/entity-json-schemas/index.d.ts +5 -0
- package/dist/lib/entity-json-schemas/index.d.ts.map +1 -0
- package/dist/lib/entity-json-schemas/index.js +3 -0
- package/dist/lib/entity-json-schemas/index.js.map +1 -0
- package/dist/lib/entity-json-schemas/types.d.ts +21 -0
- package/dist/lib/entity-json-schemas/types.d.ts.map +1 -0
- package/dist/lib/entity-json-schemas/types.js +32 -0
- package/dist/lib/entity-json-schemas/types.js.map +1 -0
- package/dist/lib/entity-json-schemas/validate-entity.d.ts +39 -0
- package/dist/lib/entity-json-schemas/validate-entity.d.ts.map +1 -0
- package/dist/lib/entity-json-schemas/validate-entity.js +143 -0
- package/dist/lib/entity-json-schemas/validate-entity.js.map +1 -0
- package/dist/lib/sdk-ingest-bundle.d.ts +60 -4
- package/dist/lib/sdk-ingest-bundle.d.ts.map +1 -1
- package/dist/lib/sdk-ingest-bundle.js +144 -51
- package/dist/lib/sdk-ingest-bundle.js.map +1 -1
- package/dist/lib/workspace-lint.d.ts +28 -0
- package/dist/lib/workspace-lint.d.ts.map +1 -0
- package/dist/lib/workspace-lint.js +199 -0
- package/dist/lib/workspace-lint.js.map +1 -0
- package/docs/getting-started.md +2 -0
- package/docs/quick-reference.md +1 -0
- package/docs/sdk-first-ingest.md +19 -3
- package/package.json +6 -2
- package/schemas/entity-json-schemas/SCHEMA_SYNC.md +18 -0
- package/schemas/entity-json-schemas/connection.json +310 -0
- package/schemas/entity-json-schemas/connector.json +188 -0
- package/schemas/entity-json-schemas/container.json +71 -0
- package/schemas/entity-json-schemas/contract.json +228 -0
- package/schemas/entity-json-schemas/data-product.json +163 -0
- package/schemas/entity-json-schemas/domain.json +74 -0
- package/schemas/entity-json-schemas/export.json +126 -0
- package/schemas/entity-json-schemas/odps-product.json +150 -0
- package/schemas/entity-json-schemas/quality-rule.json +115 -0
- package/schemas/entity-json-schemas/schema.json +206 -0
- package/schemas/entity-json-schemas/transformation.json +166 -0
- package/schemas/entity-json-schemas/validation.json +152 -0
- package/schemas/entity-json-schemas/workflow-graph.json +116 -0
- package/schemas/entity-json-schemas/workflow.json +193 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline entity validation against vendored JSON Schemas (Ajv).
|
|
3
|
+
* Schemas live in `nodejs/schemas/entity-json-schemas/` (shipped with the npm package).
|
|
4
|
+
*
|
|
5
|
+
* Ajv is loaded via `ajv-loader.cjs` so Jest (CJS) does not need `import.meta` or ESM ajv.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
8
|
+
import { createRequire } from 'node:module';
|
|
9
|
+
import { dirname, join } from 'node:path';
|
|
10
|
+
import { ENTITY_SCHEMA_FILES } from './types.js';
|
|
11
|
+
function findPackageRootCandidates() {
|
|
12
|
+
const roots = [process.cwd()];
|
|
13
|
+
const entry = process.argv[1];
|
|
14
|
+
if (entry) {
|
|
15
|
+
let dir = dirname(entry);
|
|
16
|
+
for (let i = 0; i < 8; i++) {
|
|
17
|
+
roots.push(dir);
|
|
18
|
+
const parent = dirname(dir);
|
|
19
|
+
if (parent === dir)
|
|
20
|
+
break;
|
|
21
|
+
dir = parent;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return roots;
|
|
25
|
+
}
|
|
26
|
+
function loadAjv() {
|
|
27
|
+
for (const root of findPackageRootCandidates()) {
|
|
28
|
+
for (const rel of [
|
|
29
|
+
'src/lib/entity-json-schemas/ajv-loader.cjs',
|
|
30
|
+
'dist/lib/entity-json-schemas/ajv-loader.cjs',
|
|
31
|
+
]) {
|
|
32
|
+
const loaderPath = join(root, rel);
|
|
33
|
+
if (!existsSync(loaderPath))
|
|
34
|
+
continue;
|
|
35
|
+
const req = createRequire(loaderPath);
|
|
36
|
+
return req(loaderPath);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Last resort: resolve ajv from cwd package.json (dev / monorepo).
|
|
40
|
+
const req = createRequire(join(process.cwd(), 'package.json'));
|
|
41
|
+
const ajvMod = req('ajv');
|
|
42
|
+
const formatsMod = req('ajv-formats');
|
|
43
|
+
return {
|
|
44
|
+
Ajv: ajvMod.Ajv ?? ajvMod.default ?? ajvMod,
|
|
45
|
+
addFormats: typeof formatsMod === 'function' ? formatsMod : formatsMod.default,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const { Ajv: AjvCtor, addFormats } = loadAjv();
|
|
49
|
+
let ajvInstance = null;
|
|
50
|
+
const validatorCache = new Map();
|
|
51
|
+
function resolveSchemasDir() {
|
|
52
|
+
const candidates = findPackageRootCandidates().map(root => join(root, 'schemas', 'entity-json-schemas'));
|
|
53
|
+
candidates.push(join(process.cwd(), 'nodejs', 'schemas', 'entity-json-schemas'));
|
|
54
|
+
for (const dir of candidates) {
|
|
55
|
+
if (existsSync(join(dir, 'workflow.json'))) {
|
|
56
|
+
return dir;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`Entity JSON schemas not found. Expected schemas/entity-json-schemas (tried: ${candidates.join(', ')})`);
|
|
60
|
+
}
|
|
61
|
+
function getAjv() {
|
|
62
|
+
if (!ajvInstance) {
|
|
63
|
+
ajvInstance = new AjvCtor({
|
|
64
|
+
allErrors: true,
|
|
65
|
+
strict: false,
|
|
66
|
+
validateFormats: true,
|
|
67
|
+
});
|
|
68
|
+
addFormats(ajvInstance);
|
|
69
|
+
// Register all shipped schemas so $ref (e.g. odps-product) resolves.
|
|
70
|
+
const schemasDir = resolveSchemasDir();
|
|
71
|
+
for (const file of readdirSync(schemasDir)) {
|
|
72
|
+
if (!file.endsWith('.json'))
|
|
73
|
+
continue;
|
|
74
|
+
const schema = JSON.parse(readFileSync(join(schemasDir, file), 'utf8'));
|
|
75
|
+
if (!schema.$id)
|
|
76
|
+
continue;
|
|
77
|
+
if (!ajvInstance.getSchema(schema.$id)) {
|
|
78
|
+
ajvInstance.addSchema(schema);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return ajvInstance;
|
|
83
|
+
}
|
|
84
|
+
export function loadSchema(entityType) {
|
|
85
|
+
const file = ENTITY_SCHEMA_FILES[entityType];
|
|
86
|
+
if (!file) {
|
|
87
|
+
throw new Error(`No schema defined for entity type: ${entityType}`);
|
|
88
|
+
}
|
|
89
|
+
const path = join(resolveSchemasDir(), file);
|
|
90
|
+
return JSON.parse(readFileSync(path, 'utf8'));
|
|
91
|
+
}
|
|
92
|
+
export function getValidator(entityType) {
|
|
93
|
+
const cached = validatorCache.get(entityType);
|
|
94
|
+
if (cached)
|
|
95
|
+
return cached;
|
|
96
|
+
const schema = loadSchema(entityType);
|
|
97
|
+
const ajv = getAjv();
|
|
98
|
+
let validator;
|
|
99
|
+
if (schema.$id) {
|
|
100
|
+
validator = ajv.getSchema(schema.$id);
|
|
101
|
+
}
|
|
102
|
+
if (!validator) {
|
|
103
|
+
validator = ajv.compile(schema);
|
|
104
|
+
}
|
|
105
|
+
validatorCache.set(entityType, validator);
|
|
106
|
+
return validator;
|
|
107
|
+
}
|
|
108
|
+
function mapAjvErrors(errors) {
|
|
109
|
+
if (!errors?.length)
|
|
110
|
+
return [];
|
|
111
|
+
return errors.map(err => ({
|
|
112
|
+
path: err.instancePath || err.schemaPath || '',
|
|
113
|
+
message: err.message || 'Validation error',
|
|
114
|
+
params: err.params,
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Validate an entity object against its shipped JSON Schema.
|
|
119
|
+
*/
|
|
120
|
+
export function validateEntity(entityType, entity) {
|
|
121
|
+
const validator = getValidator(entityType);
|
|
122
|
+
const valid = validator(entity);
|
|
123
|
+
if (!valid) {
|
|
124
|
+
return { valid: false, errors: mapAjvErrors(validator.errors) };
|
|
125
|
+
}
|
|
126
|
+
return { valid: true };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validate and throw if invalid.
|
|
130
|
+
*/
|
|
131
|
+
export function validateEntityOrThrow(entityType, entity) {
|
|
132
|
+
const result = validateEntity(entityType, entity);
|
|
133
|
+
if (!result.valid) {
|
|
134
|
+
const msg = result.errors?.map(e => `${e.path}: ${e.message}`).join(', ');
|
|
135
|
+
throw new Error(`Entity validation failed for ${entityType}: ${msg || 'Unknown error'}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Reset Ajv cache (tests). */
|
|
139
|
+
export function resetEntityValidatorsForTests() {
|
|
140
|
+
ajvInstance = null;
|
|
141
|
+
validatorCache.clear();
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=validate-entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-entity.js","sourceRoot":"","sources":["../../../src/lib/entity-json-schemas/validate-entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build SDK ingest workflow
|
|
2
|
+
* Build local-first SDK ingest workflow package files
|
|
3
|
+
* (connector + workflow + connection + source data product).
|
|
3
4
|
*/
|
|
4
|
-
|
|
5
|
+
import type { Connector } from '../client/connectors-types.js';
|
|
6
|
+
/** Placeholder starter template id for SDK-provisioned ingestion flows. */
|
|
7
|
+
export declare const SDK_INGEST_TEMPLATE_ID = "00000000-0000-4000-8000-0000000000a1";
|
|
8
|
+
export interface SdkIngestPackageParams {
|
|
5
9
|
organization_id: string;
|
|
6
10
|
project_id: string;
|
|
7
11
|
domain_id: string;
|
|
@@ -12,13 +16,65 @@ export interface SdkIngestBundleParams {
|
|
|
12
16
|
workflow_id?: string;
|
|
13
17
|
connection_id?: string;
|
|
14
18
|
data_product_id?: string;
|
|
19
|
+
/** When set, include a schema-valid local connector file. */
|
|
20
|
+
connector?: Connector | LocalConnectorStub;
|
|
21
|
+
include_connector_file?: boolean;
|
|
15
22
|
}
|
|
16
|
-
export interface
|
|
23
|
+
export interface LocalConnectorStub {
|
|
24
|
+
connector_id: string;
|
|
25
|
+
organization_id: string;
|
|
26
|
+
connector_type: string;
|
|
27
|
+
metadata?: Record<string, unknown>;
|
|
28
|
+
created_at?: string;
|
|
29
|
+
updated_at?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface SdkIngestPackageResult {
|
|
17
32
|
workflow_id: string;
|
|
18
33
|
connection_id: string;
|
|
19
34
|
data_product_id: string;
|
|
20
35
|
data_product_name: string;
|
|
36
|
+
connector_id: string;
|
|
37
|
+
/** Project-relative path → entity JSON */
|
|
21
38
|
files: Record<string, Record<string, unknown>>;
|
|
22
39
|
}
|
|
23
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Map an API connector (or stub) into a schema-valid local connector entity.
|
|
42
|
+
* Entity schema uses catalog-style fields (name, category, auth_type) that differ
|
|
43
|
+
* from the connectors API shape.
|
|
44
|
+
*/
|
|
45
|
+
export declare function toLocalConnectorEntity(connector: Connector | LocalConnectorStub, now?: string): Record<string, unknown>;
|
|
46
|
+
/**
|
|
47
|
+
* Build project-local JSON files for an SDK ingest topology.
|
|
48
|
+
* Paths match the customer workspace layout (not the flat save_workflow_bundle map).
|
|
49
|
+
*/
|
|
50
|
+
export declare function buildSdkIngestLocalPackage(params: SdkIngestPackageParams): SdkIngestPackageResult;
|
|
51
|
+
/**
|
|
52
|
+
* Flat bundle map for `save_workflow_bundle` / `bundle save` (workflow-relative keys).
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildSdkIngestBundle(params: {
|
|
55
|
+
organization_id: string;
|
|
56
|
+
project_id: string;
|
|
57
|
+
domain_id: string;
|
|
58
|
+
connector_id: string;
|
|
59
|
+
data_product_name: string;
|
|
60
|
+
workflow_name?: string;
|
|
61
|
+
user_id?: string;
|
|
62
|
+
workflow_id?: string;
|
|
63
|
+
connection_id?: string;
|
|
64
|
+
data_product_id?: string;
|
|
65
|
+
}): {
|
|
66
|
+
workflow_id: string;
|
|
67
|
+
connection_id: string;
|
|
68
|
+
data_product_id: string;
|
|
69
|
+
data_product_name: string;
|
|
70
|
+
files: Record<string, Record<string, unknown>>;
|
|
71
|
+
};
|
|
72
|
+
export type SdkIngestBundleParams = Parameters<typeof buildSdkIngestBundle>[0];
|
|
73
|
+
export type SdkIngestBundleResult = ReturnType<typeof buildSdkIngestBundle>;
|
|
74
|
+
/** Validate every entity in a local package map; returns field-level errors. */
|
|
75
|
+
export declare function validateSdkIngestPackageFiles(files: Record<string, Record<string, unknown>>): Array<{
|
|
76
|
+
path: string;
|
|
77
|
+
entity_type: string;
|
|
78
|
+
message: string;
|
|
79
|
+
}>;
|
|
24
80
|
//# sourceMappingURL=sdk-ingest-bundle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-ingest-bundle.d.ts","sourceRoot":"","sources":["../../src/lib/sdk-ingest-bundle.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sdk-ingest-bundle.d.ts","sourceRoot":"","sources":["../../src/lib/sdk-ingest-bundle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,73 +1,166 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Build SDK ingest workflow
|
|
2
|
+
* Build local-first SDK ingest workflow package files
|
|
3
|
+
* (connector + workflow + connection + source data product).
|
|
3
4
|
*/
|
|
4
5
|
import { randomUUID } from 'node:crypto';
|
|
5
|
-
|
|
6
|
+
import { EntityType, validateEntity } from './entity-json-schemas/index.js';
|
|
7
|
+
/** Placeholder starter template id for SDK-provisioned ingestion flows. */
|
|
8
|
+
export const SDK_INGEST_TEMPLATE_ID = '00000000-0000-4000-8000-0000000000a1';
|
|
9
|
+
/**
|
|
10
|
+
* Map an API connector (or stub) into a schema-valid local connector entity.
|
|
11
|
+
* Entity schema uses catalog-style fields (name, category, auth_type) that differ
|
|
12
|
+
* from the connectors API shape.
|
|
13
|
+
*/
|
|
14
|
+
export function toLocalConnectorEntity(connector, now = new Date().toISOString()) {
|
|
15
|
+
const meta = connector.metadata ?? {};
|
|
16
|
+
const name = (typeof meta.name === 'string' && meta.name.trim()) ||
|
|
17
|
+
`${connector.connector_type} connector`;
|
|
18
|
+
const description = (typeof meta.description === 'string' && meta.description.trim()) ||
|
|
19
|
+
`Local stub for ${connector.connector_type} connector`;
|
|
20
|
+
return {
|
|
21
|
+
connector_id: connector.connector_id,
|
|
22
|
+
organization_id: connector.organization_id,
|
|
23
|
+
connector_type: connector.connector_type,
|
|
24
|
+
name,
|
|
25
|
+
description,
|
|
26
|
+
category: 'custom',
|
|
27
|
+
// Entity schema enum has no "jwt"; use custom and keep API auth in metadata.
|
|
28
|
+
auth_type: 'custom',
|
|
29
|
+
version: '1.0.0',
|
|
30
|
+
metadata: { ...meta, sdk_auth_type: 'jwt' },
|
|
31
|
+
created_at: connector.created_at ?? now,
|
|
32
|
+
updated_at: connector.updated_at ?? now,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build project-local JSON files for an SDK ingest topology.
|
|
37
|
+
* Paths match the customer workspace layout (not the flat save_workflow_bundle map).
|
|
38
|
+
*/
|
|
39
|
+
export function buildSdkIngestLocalPackage(params) {
|
|
6
40
|
const workflowId = params.workflow_id ?? randomUUID();
|
|
7
41
|
const connectionId = params.connection_id ?? randomUUID();
|
|
8
42
|
const dataProductId = params.data_product_id ?? randomUUID();
|
|
9
43
|
const now = new Date().toISOString();
|
|
10
44
|
const workflowName = params.workflow_name ?? 'SDK App Events Ingest';
|
|
11
|
-
const files = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
45
|
+
const files = {};
|
|
46
|
+
if (params.include_connector_file !== false && params.connector) {
|
|
47
|
+
files[`connectors/${params.connector_id}.json`] = toLocalConnectorEntity(params.connector, now);
|
|
48
|
+
}
|
|
49
|
+
files[`workflows/${workflowId}/workflow.json`] = {
|
|
50
|
+
workflow_id: workflowId,
|
|
51
|
+
organization_id: params.organization_id,
|
|
52
|
+
project_id: params.project_id,
|
|
53
|
+
name: workflowName,
|
|
54
|
+
template_id: SDK_INGEST_TEMPLATE_ID,
|
|
55
|
+
workflow_type: 'ingestion',
|
|
56
|
+
domain_id: params.domain_id,
|
|
57
|
+
status: 'active',
|
|
58
|
+
configuration: {},
|
|
59
|
+
metadata: { ingestion_method: 'sdk' },
|
|
60
|
+
created_at: now,
|
|
61
|
+
updated_at: now,
|
|
62
|
+
};
|
|
63
|
+
files[`workflows/${workflowId}/connections/${connectionId}.json`] = {
|
|
64
|
+
connection_id: connectionId,
|
|
65
|
+
organization_id: params.organization_id,
|
|
66
|
+
project_id: params.project_id,
|
|
67
|
+
workflow_id: workflowId,
|
|
68
|
+
connector_id: params.connector_id,
|
|
69
|
+
key: 'sdk-input',
|
|
70
|
+
name: 'SDK Input',
|
|
71
|
+
type: 'sdk',
|
|
72
|
+
status: 'active',
|
|
73
|
+
configuration: {
|
|
74
|
+
sdk_type: 'nodejs',
|
|
75
|
+
event_type: params.data_product_name,
|
|
24
76
|
},
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
77
|
+
created_at: now,
|
|
78
|
+
updated_at: now,
|
|
79
|
+
};
|
|
80
|
+
const dataProduct = {
|
|
81
|
+
data_product_id: dataProductId,
|
|
82
|
+
organization_id: params.organization_id,
|
|
83
|
+
workflow_id: workflowId,
|
|
84
|
+
upstream_entity_id: connectionId,
|
|
85
|
+
upstream_entity_type: 'connections',
|
|
86
|
+
domain_id: params.domain_id,
|
|
87
|
+
name: params.data_product_name,
|
|
88
|
+
status: 'draft',
|
|
89
|
+
governance: {
|
|
90
|
+
classification: 'internal',
|
|
91
|
+
pii_fields: [],
|
|
92
|
+
compliance_requirements: [],
|
|
93
|
+
tags: [],
|
|
41
94
|
},
|
|
42
|
-
|
|
43
|
-
data_product_id: dataProductId,
|
|
44
|
-
organization_id: params.organization_id,
|
|
45
|
-
project_id: params.project_id,
|
|
46
|
-
workflow_id: workflowId,
|
|
47
|
-
upstream_entity_id: connectionId,
|
|
48
|
-
upstream_entity_type: 'connections',
|
|
49
|
-
domain_id: params.domain_id,
|
|
50
|
-
name: params.data_product_name,
|
|
95
|
+
metadata: {
|
|
51
96
|
kind: 'source',
|
|
52
|
-
|
|
53
|
-
owner: params.user_id ? { user_id: params.user_id } : {},
|
|
54
|
-
governance: {
|
|
55
|
-
classification: 'internal',
|
|
56
|
-
pii_fields: [],
|
|
57
|
-
compliance_requirements: [],
|
|
58
|
-
tags: [],
|
|
59
|
-
},
|
|
60
|
-
metadata: {},
|
|
61
|
-
created_at: now,
|
|
62
|
-
updated_at: now,
|
|
97
|
+
project_id: params.project_id,
|
|
63
98
|
},
|
|
99
|
+
created_at: now,
|
|
100
|
+
updated_at: now,
|
|
64
101
|
};
|
|
102
|
+
if (params.user_id) {
|
|
103
|
+
dataProduct.owner = { user_id: params.user_id };
|
|
104
|
+
}
|
|
105
|
+
files[`workflows/${workflowId}/data-products/${dataProductId}.json`] = dataProduct;
|
|
65
106
|
return {
|
|
66
107
|
workflow_id: workflowId,
|
|
67
108
|
connection_id: connectionId,
|
|
68
109
|
data_product_id: dataProductId,
|
|
69
110
|
data_product_name: params.data_product_name,
|
|
111
|
+
connector_id: params.connector_id,
|
|
70
112
|
files,
|
|
71
113
|
};
|
|
72
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* Flat bundle map for `save_workflow_bundle` / `bundle save` (workflow-relative keys).
|
|
117
|
+
*/
|
|
118
|
+
export function buildSdkIngestBundle(params) {
|
|
119
|
+
const local = buildSdkIngestLocalPackage({ ...params, include_connector_file: false });
|
|
120
|
+
const wf = local.workflow_id;
|
|
121
|
+
const files = {
|
|
122
|
+
'workflow.json': local.files[`workflows/${wf}/workflow.json`],
|
|
123
|
+
[`connections/${local.connection_id}.json`]: local.files[`workflows/${wf}/connections/${local.connection_id}.json`],
|
|
124
|
+
[`data-products/${local.data_product_id}.json`]: local.files[`workflows/${wf}/data-products/${local.data_product_id}.json`],
|
|
125
|
+
};
|
|
126
|
+
return {
|
|
127
|
+
workflow_id: local.workflow_id,
|
|
128
|
+
connection_id: local.connection_id,
|
|
129
|
+
data_product_id: local.data_product_id,
|
|
130
|
+
data_product_name: local.data_product_name,
|
|
131
|
+
files,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/** Validate every entity in a local package map; returns field-level errors. */
|
|
135
|
+
export function validateSdkIngestPackageFiles(files) {
|
|
136
|
+
const errors = [];
|
|
137
|
+
for (const [path, entity] of Object.entries(files)) {
|
|
138
|
+
let entityType = null;
|
|
139
|
+
if (path.startsWith('connectors/') && path.endsWith('.json')) {
|
|
140
|
+
entityType = EntityType.CONNECTOR;
|
|
141
|
+
}
|
|
142
|
+
else if (path.endsWith('/workflow.json') || path === 'workflow.json') {
|
|
143
|
+
entityType = EntityType.WORKFLOW;
|
|
144
|
+
}
|
|
145
|
+
else if (path.includes('/connections/') || path.startsWith('connections/')) {
|
|
146
|
+
entityType = EntityType.CONNECTION;
|
|
147
|
+
}
|
|
148
|
+
else if (path.includes('/data-products/') || path.startsWith('data-products/')) {
|
|
149
|
+
entityType = EntityType.DATA_PRODUCT;
|
|
150
|
+
}
|
|
151
|
+
if (!entityType)
|
|
152
|
+
continue;
|
|
153
|
+
const result = validateEntity(entityType, entity);
|
|
154
|
+
if (!result.valid && result.errors) {
|
|
155
|
+
for (const err of result.errors) {
|
|
156
|
+
errors.push({
|
|
157
|
+
path: `${path}${err.path}`,
|
|
158
|
+
entity_type: entityType,
|
|
159
|
+
message: err.message,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return errors;
|
|
165
|
+
}
|
|
73
166
|
//# sourceMappingURL=sdk-ingest-bundle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-ingest-bundle.js","sourceRoot":"","sources":["../../src/lib/sdk-ingest-bundle.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sdk-ingest-bundle.js","sourceRoot":"","sources":["../../src/lib/sdk-ingest-bundle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAE5E,2EAA2E;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,sCAAsC,CAAC;AAqC7E;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAyC,EACzC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IAE9B,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GACR,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACnD,GAAG,SAAS,CAAC,cAAc,YAAY,CAAC;IAC1C,MAAM,WAAW,GACf,CAAC,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACjE,kBAAkB,SAAS,CAAC,cAAc,YAAY,CAAC;IAEzD,OAAO;QACL,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,eAAe,EAAE,SAAS,CAAC,eAAe;QAC1C,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,IAAI;QACJ,WAAW;QACX,QAAQ,EAAE,QAAQ;QAClB,6EAA6E;QAC7E,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;QAC3C,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,GAAG;QACvC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,GAAG;KACxC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,MAA8B;IAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,IAAI,UAAU,EAAE,CAAC;IACtD,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,IAAI,UAAU,EAAE,CAAC;IAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,IAAI,UAAU,EAAE,CAAC;IAC7D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,MAAM,CAAC,aAAa,IAAI,uBAAuB,CAAC;IAErE,MAAM,KAAK,GAA4C,EAAE,CAAC;IAE1D,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QAChE,KAAK,CAAC,cAAc,MAAM,CAAC,YAAY,OAAO,CAAC,GAAG,sBAAsB,CACtE,MAAM,CAAC,SAAS,EAChB,GAAG,CACJ,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,UAAU,gBAAgB,CAAC,GAAG;QAC/C,WAAW,EAAE,UAAU;QACvB,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,sBAAsB;QACnC,aAAa,EAAE,WAAW;QAC1B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,QAAQ;QAChB,aAAa,EAAE,EAAE;QACjB,QAAQ,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE;QACrC,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC;IAEF,KAAK,CAAC,aAAa,UAAU,gBAAgB,YAAY,OAAO,CAAC,GAAG;QAClE,aAAa,EAAE,YAAY;QAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,UAAU;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,QAAQ;QAChB,aAAa,EAAE;YACb,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,MAAM,CAAC,iBAAiB;SACrC;QACD,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC;IAEF,MAAM,WAAW,GAA4B;QAC3C,eAAe,EAAE,aAAa;QAC9B,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,WAAW,EAAE,UAAU;QACvB,kBAAkB,EAAE,YAAY;QAChC,oBAAoB,EAAE,aAAa;QACnC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,MAAM,CAAC,iBAAiB;QAC9B,MAAM,EAAE,OAAO;QACf,UAAU,EAAE;YACV,cAAc,EAAE,UAAU;YAC1B,UAAU,EAAE,EAAE;YACd,uBAAuB,EAAE,EAAE;YAC3B,IAAI,EAAE,EAAE;SACT;QACD,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B;QACD,UAAU,EAAE,GAAG;QACf,UAAU,EAAE,GAAG;KAChB,CAAC;IACF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,WAAW,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC;IACD,KAAK,CAAC,aAAa,UAAU,kBAAkB,aAAa,OAAO,CAAC,GAAG,WAAW,CAAC;IAEnF,OAAO;QACL,WAAW,EAAE,UAAU;QACvB,aAAa,EAAE,YAAY;QAC3B,eAAe,EAAE,aAAa;QAC9B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAWpC;IAOC,MAAM,KAAK,GAAG,0BAA0B,CAAC,EAAE,GAAG,MAAM,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC;IACvF,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC;IAC7B,MAAM,KAAK,GAA4C;QACrD,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,gBAAgB,CAAC;QAC7D,CAAC,eAAe,KAAK,CAAC,aAAa,OAAO,CAAC,EACzC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,gBAAgB,KAAK,CAAC,aAAa,OAAO,CAAC;QACxE,CAAC,iBAAiB,KAAK,CAAC,eAAe,OAAO,CAAC,EAC7C,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,kBAAkB,KAAK,CAAC,eAAe,OAAO,CAAC;KAC7E,CAAC;IACF,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;QAC1C,KAAK;KACN,CAAC;AACJ,CAAC;AAKD,gFAAgF;AAChF,MAAM,UAAU,6BAA6B,CAC3C,KAA8C;IAE9C,MAAM,MAAM,GAAkE,EAAE,CAAC;IAEjF,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,IAAI,UAAU,GAAwD,IAAI,CAAC;QAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC;QACpC,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YACvE,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC;QACnC,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7E,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjF,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE;oBAC1B,WAAW,EAAE,UAAU;oBACvB,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Offline lint of a local Loxtep project package (entity schemas + relationships).
|
|
3
|
+
*/
|
|
4
|
+
export interface LintIssue {
|
|
5
|
+
path: string;
|
|
6
|
+
severity: 'error';
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
export interface LintResult {
|
|
10
|
+
ok: boolean;
|
|
11
|
+
issues: LintIssue[];
|
|
12
|
+
files_checked: number;
|
|
13
|
+
}
|
|
14
|
+
export interface LintOptions {
|
|
15
|
+
/** Project root (contains workflows/, connectors/). */
|
|
16
|
+
projectDir: string;
|
|
17
|
+
/** When set, only lint this workflow directory under workflows/<id>/. */
|
|
18
|
+
workflow_id?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Lint local entity JSON against shipped schemas and basic relationship checks.
|
|
22
|
+
*/
|
|
23
|
+
export declare function lintLocalPackage(options: LintOptions): LintResult;
|
|
24
|
+
/**
|
|
25
|
+
* True when the project has at least one entity JSON package file to lint.
|
|
26
|
+
*/
|
|
27
|
+
export declare function hasLocalEntityPackage(projectDir: string): boolean;
|
|
28
|
+
//# sourceMappingURL=workspace-lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-lint.d.ts","sourceRoot":"","sources":["../../src/lib/workspace-lint.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqGD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAkGjE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAQjE"}
|