ingestron 0.17.7 → 0.17.8

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 CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.17.8
4
+
5
+ - Pin core 0.12.14. Bridge routes: a connection with `route: bridge` lands a
6
+ source on one platform (such as ADF) for a flow on another (such as
7
+ Databricks); `check` shows it as one route and suggests it when the native
8
+ route is billed separately. `check` now works on projects combining ADF and
9
+ Databricks flows.
10
+ - `ingestron discover` drafts data contracts from what a source offers, before
11
+ you write them: through the portable connector (also for native and bridge
12
+ connections that name a package), or from a platform metadata export with
13
+ `--from`.
14
+ - Official short names `stripe`, `sharepoint`, `onedrive`, `s3`, `gcs`, `sftp`,
15
+ `salesforce`, `hubspot` and `jira`.
16
+
3
17
  ## 0.17.7
4
18
 
5
19
  - Pin core 0.12.13. Connections can name a source `kind` and a `route`
@@ -75,7 +75,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
75
75
  SOFTWARE.
76
76
  ```
77
77
 
78
- ### @ingestron/core@0.12.13
78
+ ### @ingestron/core@0.12.14
79
79
 
80
80
  Declared licence: Apache-2.0
81
81
 
@@ -71,7 +71,9 @@ function routeLabel(route) {
71
71
  const r = route?.reference;
72
72
  const via = route?.route === "native"
73
73
  ? `native on ${clean(route.configuration)} via ${(route.standards ?? []).map(clean).join(", ")}`
74
- : `portable ${clean(route?.package ?? "connector")} on ${clean(route?.configuration)}`;
74
+ : route?.route === "bridge"
75
+ ? `bridge: lands on ${clean(route.via)}, ingests on ${clean(route.configuration)} via ${(route.standards ?? []).map(clean).join(" → ")}`
76
+ : `portable ${clean(route?.package ?? "connector")} on ${clean(route?.configuration)}`;
75
77
  if (!r)
76
78
  return `${via} [no reference record]`;
77
79
  const stale = Date.now() - new Date(`${r.verified}T00:00:00Z`).getTime() >
@@ -181,6 +183,24 @@ export function terminal(result, verbose = false, args = {}) {
181
183
  .map((f) => `\n ${clean(f.flow)}: Python ${clean(f.pythonVersion ?? "3.12")} (${f.reused ? "reused" : "prepared"})`)
182
184
  .join("") +
183
185
  `\nUse ingestron run status ${clean(value.id)} --verbose for environment paths and details.`);
186
+ case "discover":
187
+ return (`Discovered ${clean(value.flow)} (${clean(value.route)}):` +
188
+ (value.tables ?? [])
189
+ .map((t) => `\n ${clean(t.table)}: ${Number(t.fields)} fields → ${clean(t.file)}` +
190
+ (t.keys?.length
191
+ ? ` (source keys: ${t.keys.map(clean).join(", ")})`
192
+ : "") +
193
+ (t.skipped ?? [])
194
+ .slice(0, 10)
195
+ .map((s) => `\n skipped ${clean(s.name)}: ${clean(s.reason)}`)
196
+ .join(""))
197
+ .join("") +
198
+ (value.files ?? []).map((f) => `\n wrote ${clean(f)}`).join("") +
199
+ (value.review ?? [])
200
+ .slice(0, 10)
201
+ .map((r) => `\n review: ${clean(r)}`)
202
+ .join("") +
203
+ `\nNext: ${clean(value.next)}`);
184
204
  case "run":
185
205
  case "run_status":
186
206
  return `Run ${clean(value.id)}: ${clean(value.status)} (${clean(value.action)}).\nTarget: ${clean(value.configuration)}; flows: ${value.flows.map(clean).join(", ")}.${runQualityLine(value.result?.flows)}\nUse ingestron run status ${clean(value.id)} to inspect the receipt.`;
@@ -25,12 +25,30 @@ export declare const officialPlugins: {
25
25
  readonly path: "connectors/files/connector.yaml";
26
26
  readonly tagPrefix: "files-";
27
27
  };
28
+ readonly gcs: {
29
+ readonly kind: "connector";
30
+ readonly repository: "ingestron/connectors";
31
+ readonly path: "connectors/gcs/connector.yaml";
32
+ readonly tagPrefix: "gcs-";
33
+ };
28
34
  readonly github: {
29
35
  readonly kind: "connector";
30
36
  readonly repository: "ingestron/connectors";
31
37
  readonly path: "connectors/github/connector.yaml";
32
38
  readonly tagPrefix: "github-";
33
39
  };
40
+ readonly hubspot: {
41
+ readonly kind: "connector";
42
+ readonly repository: "ingestron/connectors";
43
+ readonly path: "connectors/hubspot/connector.yaml";
44
+ readonly tagPrefix: "hubspot-";
45
+ };
46
+ readonly jira: {
47
+ readonly kind: "connector";
48
+ readonly repository: "ingestron/connectors";
49
+ readonly path: "connectors/jira/connector.yaml";
50
+ readonly tagPrefix: "jira-";
51
+ };
34
52
  readonly local: {
35
53
  readonly kind: "provider";
36
54
  readonly repository: "ingestron/provider-local";
@@ -43,6 +61,12 @@ export declare const officialPlugins: {
43
61
  readonly path: "connectors/mysql/connector.yaml";
44
62
  readonly tagPrefix: "mysql-";
45
63
  };
64
+ readonly onedrive: {
65
+ readonly kind: "connector";
66
+ readonly repository: "ingestron/connectors";
67
+ readonly path: "connectors/onedrive/connector.yaml";
68
+ readonly tagPrefix: "onedrive-";
69
+ };
46
70
  readonly oracle: {
47
71
  readonly kind: "connector";
48
72
  readonly repository: "ingestron/connectors";
@@ -55,12 +79,42 @@ export declare const officialPlugins: {
55
79
  readonly path: "connectors/postgresql/connector.yaml";
56
80
  readonly tagPrefix: "postgresql-";
57
81
  };
82
+ readonly s3: {
83
+ readonly kind: "connector";
84
+ readonly repository: "ingestron/connectors";
85
+ readonly path: "connectors/s3/connector.yaml";
86
+ readonly tagPrefix: "s3-";
87
+ };
88
+ readonly salesforce: {
89
+ readonly kind: "connector";
90
+ readonly repository: "ingestron/connectors";
91
+ readonly path: "connectors/salesforce/connector.yaml";
92
+ readonly tagPrefix: "salesforce-";
93
+ };
94
+ readonly sftp: {
95
+ readonly kind: "connector";
96
+ readonly repository: "ingestron/connectors";
97
+ readonly path: "connectors/sftp/connector.yaml";
98
+ readonly tagPrefix: "sftp-";
99
+ };
100
+ readonly sharepoint: {
101
+ readonly kind: "connector";
102
+ readonly repository: "ingestron/connectors";
103
+ readonly path: "connectors/sharepoint/connector.yaml";
104
+ readonly tagPrefix: "sharepoint-";
105
+ };
58
106
  readonly "sql-server": {
59
107
  readonly kind: "connector";
60
108
  readonly repository: "ingestron/connectors";
61
109
  readonly path: "connectors/sql-server/connector.yaml";
62
110
  readonly tagPrefix: "sql-server-";
63
111
  };
112
+ readonly stripe: {
113
+ readonly kind: "connector";
114
+ readonly repository: "ingestron/connectors";
115
+ readonly path: "connectors/stripe/connector.yaml";
116
+ readonly tagPrefix: "stripe-";
117
+ };
64
118
  };
65
119
  export declare function officialName(reference: string): {
66
120
  name: keyof typeof officialPlugins;
@@ -27,12 +27,30 @@ export const officialPlugins = {
27
27
  path: "connectors/files/connector.yaml",
28
28
  tagPrefix: "files-",
29
29
  },
30
+ gcs: {
31
+ kind: "connector",
32
+ repository: "ingestron/connectors",
33
+ path: "connectors/gcs/connector.yaml",
34
+ tagPrefix: "gcs-",
35
+ },
30
36
  github: {
31
37
  kind: "connector",
32
38
  repository: "ingestron/connectors",
33
39
  path: "connectors/github/connector.yaml",
34
40
  tagPrefix: "github-",
35
41
  },
42
+ hubspot: {
43
+ kind: "connector",
44
+ repository: "ingestron/connectors",
45
+ path: "connectors/hubspot/connector.yaml",
46
+ tagPrefix: "hubspot-",
47
+ },
48
+ jira: {
49
+ kind: "connector",
50
+ repository: "ingestron/connectors",
51
+ path: "connectors/jira/connector.yaml",
52
+ tagPrefix: "jira-",
53
+ },
36
54
  local: {
37
55
  kind: "provider",
38
56
  repository: "ingestron/provider-local",
@@ -45,6 +63,12 @@ export const officialPlugins = {
45
63
  path: "connectors/mysql/connector.yaml",
46
64
  tagPrefix: "mysql-",
47
65
  },
66
+ onedrive: {
67
+ kind: "connector",
68
+ repository: "ingestron/connectors",
69
+ path: "connectors/onedrive/connector.yaml",
70
+ tagPrefix: "onedrive-",
71
+ },
48
72
  oracle: {
49
73
  kind: "connector",
50
74
  repository: "ingestron/connectors",
@@ -57,12 +81,42 @@ export const officialPlugins = {
57
81
  path: "connectors/postgresql/connector.yaml",
58
82
  tagPrefix: "postgresql-",
59
83
  },
84
+ s3: {
85
+ kind: "connector",
86
+ repository: "ingestron/connectors",
87
+ path: "connectors/s3/connector.yaml",
88
+ tagPrefix: "s3-",
89
+ },
90
+ salesforce: {
91
+ kind: "connector",
92
+ repository: "ingestron/connectors",
93
+ path: "connectors/salesforce/connector.yaml",
94
+ tagPrefix: "salesforce-",
95
+ },
96
+ sftp: {
97
+ kind: "connector",
98
+ repository: "ingestron/connectors",
99
+ path: "connectors/sftp/connector.yaml",
100
+ tagPrefix: "sftp-",
101
+ },
102
+ sharepoint: {
103
+ kind: "connector",
104
+ repository: "ingestron/connectors",
105
+ path: "connectors/sharepoint/connector.yaml",
106
+ tagPrefix: "sharepoint-",
107
+ },
60
108
  "sql-server": {
61
109
  kind: "connector",
62
110
  repository: "ingestron/connectors",
63
111
  path: "connectors/sql-server/connector.yaml",
64
112
  tagPrefix: "sql-server-",
65
113
  },
114
+ stripe: {
115
+ kind: "connector",
116
+ repository: "ingestron/connectors",
117
+ path: "connectors/stripe/connector.yaml",
118
+ tagPrefix: "stripe-",
119
+ },
66
120
  };
67
121
  const catalogueUrl = "https://raw.githubusercontent.com/ingestron/connectors/main/catalogue.json";
68
122
  const stable = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
@@ -185,6 +185,21 @@ export function workflowCommands(app, host) {
185
185
  ...options,
186
186
  ...(secretsFile ? { envFile: secretsFile } : {}),
187
187
  }));
188
+ app
189
+ .command("discover")
190
+ .description("List every field a flow's source offers and write draft contracts for review")
191
+ .requiredOption("--flow <id>", "Ingestion flow to discover")
192
+ .option("--from <file>", "Use a source catalogue or exported metadata rows instead of reading the source")
193
+ .option("--out <directory>", "Directory for draft contracts", "contracts")
194
+ .option("--local <configuration>", "Local provider configuration used for native or bridge connections")
195
+ .option("--accept-keys", "Mark the source's primary keys in the drafts")
196
+ .option("--python <path>", "Optional Python 3.12 bootstrap override")
197
+ .option("--secrets-file <file>", "Project-relative dotenv file; only declared secret names are passed")
198
+ .action(({ secretsFile, acceptKeys, ...options }) => run("discover", {
199
+ ...options,
200
+ acceptKeys: !!acceptKeys,
201
+ ...(secretsFile ? { envFile: secretsFile } : {}),
202
+ }));
188
203
  execution
189
204
  .command("status <id>")
190
205
  .description("Read the durable local run receipt")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ingestron",
3
- "version": "0.17.7",
3
+ "version": "0.17.8",
4
4
  "type": "module",
5
5
  "description": "Build repeatable data pipelines from reviewed contracts and versioned standards.",
6
6
  "license": "Apache-2.0",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "dependencies": {
42
42
  "@clack/prompts": "1.7.0",
43
- "@ingestron/core": "0.12.13",
43
+ "@ingestron/core": "0.12.14",
44
44
  "@modelcontextprotocol/sdk": "1.30.0",
45
45
  "commander": "15.0.0",
46
46
  "yaml": "2.9.0"