@finos/legend-application-data-cube 0.4.8 → 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 (78) hide show
  1. package/lib/application/LegendDataCube.d.ts.map +1 -1
  2. package/lib/application/LegendDataCube.js +1 -1
  3. package/lib/application/LegendDataCube.js.map +1 -1
  4. package/lib/application/LegendDataCubeApplicationConfig.d.ts +12 -0
  5. package/lib/application/LegendDataCubeApplicationConfig.d.ts.map +1 -1
  6. package/lib/application/LegendDataCubeApplicationConfig.js +7 -0
  7. package/lib/application/LegendDataCubeApplicationConfig.js.map +1 -1
  8. package/lib/application/__test-utils__/LegendDataCubeApplicationTestUtils.d.ts.map +1 -1
  9. package/lib/application/__test-utils__/LegendDataCubeApplicationTestUtils.js +12 -0
  10. package/lib/application/__test-utils__/LegendDataCubeApplicationTestUtils.js.map +1 -1
  11. package/lib/components/LegendDataCubeWebApplication.d.ts +2 -0
  12. package/lib/components/LegendDataCubeWebApplication.d.ts.map +1 -1
  13. package/lib/components/LegendDataCubeWebApplication.js +24 -2
  14. package/lib/components/LegendDataCubeWebApplication.js.map +1 -1
  15. package/lib/components/builder/LegendDataCubeCreator.d.ts.map +1 -1
  16. package/lib/components/builder/LegendDataCubeCreator.js +5 -1
  17. package/lib/components/builder/LegendDataCubeCreator.js.map +1 -1
  18. package/lib/components/builder/source/IngestDefinitionDataCubeSourceBuilder.d.ts +5 -0
  19. package/lib/components/builder/source/IngestDefinitionDataCubeSourceBuilder.d.ts.map +1 -0
  20. package/lib/components/builder/source/IngestDefinitionDataCubeSourceBuilder.js +70 -0
  21. package/lib/components/builder/source/IngestDefinitionDataCubeSourceBuilder.js.map +1 -0
  22. package/lib/components/builder/source/IngestDefinitionDataCubeSourceLoader.d.ts +22 -0
  23. package/lib/components/builder/source/IngestDefinitionDataCubeSourceLoader.d.ts.map +1 -0
  24. package/lib/components/builder/source/IngestDefinitionDataCubeSourceLoader.js +37 -0
  25. package/lib/components/builder/source/IngestDefinitionDataCubeSourceLoader.js.map +1 -0
  26. package/lib/components/builder/source/LegendDataCubeSourceLoader.d.ts.map +1 -1
  27. package/lib/components/builder/source/LegendDataCubeSourceLoader.js.map +1 -1
  28. package/lib/index.css +1 -1
  29. package/lib/package.json +3 -1
  30. package/lib/stores/LegendDataCubeBaseStore.d.ts +3 -0
  31. package/lib/stores/LegendDataCubeBaseStore.d.ts.map +1 -1
  32. package/lib/stores/LegendDataCubeBaseStore.js +7 -0
  33. package/lib/stores/LegendDataCubeBaseStore.js.map +1 -1
  34. package/lib/stores/LegendDataCubeDataCubeEngine.d.ts +3 -0
  35. package/lib/stores/LegendDataCubeDataCubeEngine.d.ts.map +1 -1
  36. package/lib/stores/LegendDataCubeDataCubeEngine.js +78 -1
  37. package/lib/stores/LegendDataCubeDataCubeEngine.js.map +1 -1
  38. package/lib/stores/builder/LegendDataCubeBuilderStore.d.ts +3 -0
  39. package/lib/stores/builder/LegendDataCubeBuilderStore.d.ts.map +1 -1
  40. package/lib/stores/builder/LegendDataCubeBuilderStore.js +8 -0
  41. package/lib/stores/builder/LegendDataCubeBuilderStore.js.map +1 -1
  42. package/lib/stores/builder/LegendDataCubeCreatorState.d.ts.map +1 -1
  43. package/lib/stores/builder/LegendDataCubeCreatorState.js +3 -0
  44. package/lib/stores/builder/LegendDataCubeCreatorState.js.map +1 -1
  45. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.d.ts +51 -0
  46. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.d.ts.map +1 -0
  47. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.js +142 -0
  48. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.js.map +1 -0
  49. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceLoaderState.d.ts +33 -0
  50. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceLoaderState.d.ts.map +1 -0
  51. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceLoaderState.js +46 -0
  52. package/lib/stores/builder/source/IngestDefinitionDataCubeSourceLoaderState.js.map +1 -0
  53. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.d.ts +2 -1
  54. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.d.ts.map +1 -1
  55. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.js +1 -0
  56. package/lib/stores/builder/source/LegendDataCubeSourceBuilderState.js.map +1 -1
  57. package/lib/stores/model/IngestDefinitionDataCubeSource.d.ts +31 -0
  58. package/lib/stores/model/IngestDefinitionDataCubeSource.d.ts.map +1 -0
  59. package/lib/stores/model/IngestDefinitionDataCubeSource.js +37 -0
  60. package/lib/stores/model/IngestDefinitionDataCubeSource.js.map +1 -0
  61. package/package.json +9 -7
  62. package/src/application/LegendDataCube.tsx +4 -1
  63. package/src/application/LegendDataCubeApplicationConfig.ts +27 -0
  64. package/src/application/__test-utils__/LegendDataCubeApplicationTestUtils.ts +12 -0
  65. package/src/components/LegendDataCubeWebApplication.tsx +62 -9
  66. package/src/components/builder/LegendDataCubeCreator.tsx +9 -0
  67. package/src/components/builder/source/IngestDefinitionDataCubeSourceBuilder.tsx +149 -0
  68. package/src/components/builder/source/IngestDefinitionDataCubeSourceLoader.tsx +51 -0
  69. package/src/components/builder/source/LegendDataCubeSourceLoader.tsx +5 -0
  70. package/src/stores/LegendDataCubeBaseStore.ts +20 -0
  71. package/src/stores/LegendDataCubeDataCubeEngine.ts +113 -0
  72. package/src/stores/builder/LegendDataCubeBuilderStore.tsx +20 -0
  73. package/src/stores/builder/LegendDataCubeCreatorState.tsx +9 -0
  74. package/src/stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.ts +217 -0
  75. package/src/stores/builder/source/IngestDefinitionDataCubeSourceLoaderState.ts +92 -0
  76. package/src/stores/builder/source/LegendDataCubeSourceBuilderState.ts +1 -0
  77. package/src/stores/model/IngestDefinitionDataCubeSource.ts +48 -0
  78. package/tsconfig.json +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngestDefinitionDataCubeSourceBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EACL,gCAAgC,EAChC,+BAA+B,EAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAE1F,OAAO,EAGL,KAAK,2BAA2B,EAChC,KAAK,6BAA6B,EACnC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,qBAAa,0CAA2C,SAAQ,gCAAgC;IAC9F,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,gBAAgB,EAAE,WAAW,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IAC/D,iBAAiB,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAM;IAEtB,QAAQ,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;IAC9D,QAAQ,CAAC,mBAAmB,EAAE,2BAA2B,CAAC;gBAGxD,WAAW,EAAE,8BAA8B,EAC3C,MAAM,EAAE,4BAA4B,EACpC,oBAAoB,EAAE,6BAA6B,EACnD,kBAAkB,EAAE,2BAA2B,EAC/C,YAAY,EAAE,oBAAoB;IA4BpC,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIvD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIjD,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,SAAS;IAI1D,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE;IAIlC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE;IAI1B,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS;IAI5C,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;IAkChD,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;IAwBpD,eAAe,CAAC,SAAS,EAAE,MAAM;IAIjC,UAAU;IASV,KAAK;IASL,IAAa,KAAK,IAAI,+BAA+B,CAEpD;IAED,IAAa,OAAO,IAAI,OAAO,CAO9B;IAEQ,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC;CAkBpD"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Copyright (c) 2025-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { action, makeObservable, observable } from 'mobx';
17
+ import { LegendDataCubeSourceBuilderState, LegendDataCubeSourceBuilderType, } from './LegendDataCubeSourceBuilderState.js';
18
+ import { guaranteeNonNullable } from '@finos/legend-shared';
19
+ import { RawIngestDefinitionDataCubeSource } from '../../model/IngestDefinitionDataCubeSource.js';
20
+ import { IngestDeploymentServerConfig, ProducerEnvironment, } from '@finos/legend-server-lakehouse';
21
+ export class IngestDefinitionDataCubeSourceBuilderState extends LegendDataCubeSourceBuilderState {
22
+ deploymentId;
23
+ warehouse;
24
+ ingestDefinition;
25
+ selectedIngestUrn;
26
+ ingestionServerUrl;
27
+ selectedTable;
28
+ paths;
29
+ ingestUrns = [];
30
+ tables = [];
31
+ _platformServerClient;
32
+ _ingestServerClient;
33
+ constructor(application, engine, platformServerClient, ingestServerClient, alertService) {
34
+ super(application, engine, alertService);
35
+ this._platformServerClient = platformServerClient;
36
+ this._ingestServerClient = ingestServerClient;
37
+ makeObservable(this, {
38
+ deploymentId: observable,
39
+ warehouse: observable,
40
+ ingestUrns: observable,
41
+ selectedIngestUrn: observable,
42
+ tables: observable,
43
+ selectedTable: observable,
44
+ setDeploymentId: action,
45
+ setSelectedIngestUrn: action,
46
+ setWarehouse: action,
47
+ setIngestUrns: action,
48
+ setTables: action,
49
+ setSelectedTable: action,
50
+ });
51
+ this.selectedIngestUrn = '';
52
+ this.selectedTable = '';
53
+ this.warehouse = undefined;
54
+ this.paths = [];
55
+ }
56
+ setDeploymentId(deploymentId) {
57
+ this.deploymentId = deploymentId;
58
+ }
59
+ setWarehouse(warehouse) {
60
+ this.warehouse = warehouse;
61
+ }
62
+ setSelectedIngestUrn(selectedIngestUrn) {
63
+ this.selectedIngestUrn = selectedIngestUrn;
64
+ }
65
+ setIngestUrns(ingestUrns) {
66
+ this.ingestUrns = ingestUrns;
67
+ }
68
+ setTables(tables) {
69
+ this.tables = tables;
70
+ }
71
+ setSelectedTable(selectedTable) {
72
+ this.selectedTable = selectedTable;
73
+ }
74
+ async fetchIngestUrns(access_token) {
75
+ //TODO: we should retry this method if access token is invalid
76
+ try {
77
+ const producerServer = await this._platformServerClient.findProducerServer(guaranteeNonNullable(this.deploymentId), 'DEPLOYMENT', access_token);
78
+ const ingestServerUrl = IngestDeploymentServerConfig.serialization.fromJson(producerServer).ingestServerUrl;
79
+ this.ingestionServerUrl = ingestServerUrl;
80
+ const producerUrn = await this._ingestServerClient.getProducerEnvironment(guaranteeNonNullable(this.deploymentId), ingestServerUrl, access_token);
81
+ const producer = ProducerEnvironment.serialization.fromJson(producerUrn);
82
+ const ingestDefinitions = await this._ingestServerClient.getIngestDefinitions(producer.producerEnvironmentUrn, ingestServerUrl, access_token);
83
+ this.setIngestUrns(ingestDefinitions);
84
+ return;
85
+ }
86
+ catch (error) {
87
+ throw error;
88
+ }
89
+ }
90
+ async fetchDatasets(access_token) {
91
+ this.setTables([]);
92
+ this.setSelectedTable(undefined);
93
+ try {
94
+ const plainObjectDef = await this._ingestServerClient.getIngestDefinitionDetail(guaranteeNonNullable(this.selectedIngestUrn), this.ingestionServerUrl, access_token);
95
+ this.ingestDefinition = Object.values(plainObjectDef)[0];
96
+ this.setTables(
97
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
98
+ this.ingestDefinition.datasets.map(
99
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
100
+ (dataset) => dataset.name));
101
+ }
102
+ catch (error) {
103
+ throw error;
104
+ }
105
+ }
106
+ decoratedIngest(ingestUrn) {
107
+ return ingestUrn.split('~').pop();
108
+ }
109
+ createPath() {
110
+ this.paths.push(guaranteeNonNullable(this.decoratedIngest(guaranteeNonNullable(this.selectedIngestUrn))), guaranteeNonNullable(this.selectedTable));
111
+ }
112
+ reset() {
113
+ this.setDeploymentId(undefined);
114
+ this.setIngestUrns([]);
115
+ this.setSelectedIngestUrn(undefined);
116
+ this.setTables([]);
117
+ this.setSelectedTable(undefined);
118
+ this.setWarehouse(undefined);
119
+ }
120
+ get label() {
121
+ return LegendDataCubeSourceBuilderType.INGEST_DEFINTION;
122
+ }
123
+ get isValid() {
124
+ return (Boolean(this.warehouse) &&
125
+ Boolean(this.selectedIngestUrn) &&
126
+ Boolean(this.selectedTable) &&
127
+ Boolean(this.deploymentId));
128
+ }
129
+ generateSourceData() {
130
+ // register ingest definition
131
+ this._engine.registerIngestDefinition(this.ingestDefinition);
132
+ // build data cube source
133
+ this.createPath();
134
+ const rawSource = new RawIngestDefinitionDataCubeSource();
135
+ rawSource.ingestDefinitionUrn = guaranteeNonNullable(this.selectedIngestUrn);
136
+ rawSource.ingestServerUrl = guaranteeNonNullable(this.ingestionServerUrl);
137
+ rawSource.paths = this.paths;
138
+ rawSource.warehouse = guaranteeNonNullable(this.warehouse);
139
+ return Promise.resolve(RawIngestDefinitionDataCubeSource.serialization.toJson(rawSource));
140
+ }
141
+ }
142
+ //# sourceMappingURL=IngestDefinitionDataCubeSourceBuilderState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngestDefinitionDataCubeSourceBuilderState.js","sourceRoot":"","sources":["../../../../src/stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright (c) 2025-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ActionState, type PlainObject } from '@finos/legend-shared';
17
+ import type { LegendDataCubeApplicationStore } from '../../LegendDataCubeBaseStore.js';
18
+ import type { LegendDataCubeDataCubeEngine } from '../../LegendDataCubeDataCubeEngine.js';
19
+ import { LegendDataCubeSourceLoaderState } from './LegendDataCubeSourceLoaderState.js';
20
+ import { LegendDataCubeSourceBuilderType } from './LegendDataCubeSourceBuilderState.js';
21
+ import type { DataCubeAlertService } from '@finos/legend-data-cube';
22
+ import type { PersistentDataCube } from '@finos/legend-graph';
23
+ export declare class IngestDefinitionDataCubeSourceLoaderState extends LegendDataCubeSourceLoaderState {
24
+ readonly processState: ActionState;
25
+ private ingestDefinition;
26
+ private lakehouseIngestServerClient;
27
+ constructor(application: LegendDataCubeApplicationStore, engine: LegendDataCubeDataCubeEngine, alertService: DataCubeAlertService, sourceData: PlainObject, persistentDataCube: PersistentDataCube, onSuccess: () => Promise<void>, onError: (error: unknown) => Promise<void>);
28
+ get isValid(): boolean;
29
+ get label(): LegendDataCubeSourceBuilderType;
30
+ loadIngestDefinition(access_token: string | undefined): Promise<void>;
31
+ load(source: PlainObject | undefined): Promise<PlainObject<T>>;
32
+ }
33
+ //# sourceMappingURL=IngestDefinitionDataCubeSourceLoaderState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngestDefinitionDataCubeSourceLoaderState.d.ts","sourceRoot":"","sources":["../../../../src/stores/builder/source/IngestDefinitionDataCubeSourceLoaderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,WAAW,EAEX,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AACxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAI9D,qBAAa,yCAA0C,SAAQ,+BAA+B;IAC5F,QAAQ,CAAC,YAAY,cAAwB;IAE7C,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,2BAA2B,CAA8B;gBAG/D,WAAW,EAAE,8BAA8B,EAC3C,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,oBAAoB,EAClC,UAAU,EAAE,WAAW,EACvB,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC;IAgB5C,IAAa,OAAO,IAAI,OAAO,CAE9B;IAED,IAAa,KAAK,oCAEjB;IAEK,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;IAY5C,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS;CAYpD"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Copyright (c) 2025-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ActionState, guaranteeNonNullable, } from '@finos/legend-shared';
17
+ import { LegendDataCubeSourceLoaderState } from './LegendDataCubeSourceLoaderState.js';
18
+ import { LegendDataCubeSourceBuilderType } from './LegendDataCubeSourceBuilderState.js';
19
+ import { RawIngestDefinitionDataCubeSource } from '../../model/IngestDefinitionDataCubeSource.js';
20
+ import { LakehouseIngestServerClient } from '@finos/legend-server-lakehouse';
21
+ export class IngestDefinitionDataCubeSourceLoaderState extends LegendDataCubeSourceLoaderState {
22
+ processState = ActionState.create();
23
+ ingestDefinition;
24
+ lakehouseIngestServerClient;
25
+ constructor(application, engine, alertService, sourceData, persistentDataCube, onSuccess, onError) {
26
+ super(application, engine, alertService, sourceData, persistentDataCube, onSuccess, onError);
27
+ this.lakehouseIngestServerClient = new LakehouseIngestServerClient(undefined);
28
+ }
29
+ get isValid() {
30
+ return Boolean(this.ingestDefinition);
31
+ }
32
+ get label() {
33
+ return LegendDataCubeSourceBuilderType.INGEST_DEFINTION;
34
+ }
35
+ async loadIngestDefinition(access_token) {
36
+ const rawSource = RawIngestDefinitionDataCubeSource.serialization.fromJson(this.sourceData);
37
+ this.ingestDefinition =
38
+ await this.lakehouseIngestServerClient.getIngestDefinitionDetail(rawSource.ingestDefinitionUrn, rawSource.ingestServerUrl, access_token);
39
+ }
40
+ async load(source) {
41
+ const deserializedSource = RawIngestDefinitionDataCubeSource.serialization.fromJson(guaranteeNonNullable(source));
42
+ this._engine.registerIngestDefinition(this.ingestDefinition);
43
+ return RawIngestDefinitionDataCubeSource.serialization.toJson(deserializedSource);
44
+ }
45
+ }
46
+ //# sourceMappingURL=IngestDefinitionDataCubeSourceLoaderState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngestDefinitionDataCubeSourceLoaderState.js","sourceRoot":"","sources":["../../../../src/stores/builder/source/IngestDefinitionDataCubeSourceLoaderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,WAAW,EACX,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AACvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,uCAAuC,CAAC;AAGxF,OAAO,EAAE,iCAAiC,EAAE,MAAM,+CAA+C,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE7E,MAAM,OAAO,yCAA0C,SAAQ,+BAA+B;IACnF,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;IAErC,gBAAgB,CAA0B;IAC1C,2BAA2B,CAA8B;IAEjE,YACE,WAA2C,EAC3C,MAAoC,EACpC,YAAkC,EAClC,UAAuB,EACvB,kBAAsC,EACtC,SAA8B,EAC9B,OAA0C;QAE1C,KAAK,CACH,WAAW,EACX,MAAM,EACN,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,SAAS,EACT,OAAO,CACR,CAAC;QACF,IAAI,CAAC,2BAA2B,GAAG,IAAI,2BAA2B,CAChE,SAAS,CACV,CAAC;IACJ,CAAC;IAED,IAAa,OAAO;QAClB,OAAO,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxC,CAAC;IAED,IAAa,KAAK;QAChB,OAAO,+BAA+B,CAAC,gBAAgB,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,YAAgC;QACzD,MAAM,SAAS,GAAG,iCAAiC,CAAC,aAAa,CAAC,QAAQ,CACxE,IAAI,CAAC,UAAU,CAChB,CAAC;QACF,IAAI,CAAC,gBAAgB;YACnB,MAAM,IAAI,CAAC,2BAA2B,CAAC,yBAAyB,CAC9D,SAAS,CAAC,mBAAmB,EAC7B,SAAS,CAAC,eAAe,EACzB,YAAY,CACb,CAAC;IACN,CAAC;IAEQ,KAAK,CAAC,IAAI,CAAC,MAA+B;QACjD,MAAM,kBAAkB,GACtB,iCAAiC,CAAC,aAAa,CAAC,QAAQ,CACtD,oBAAoB,CAAC,MAAM,CAAC,CAC7B,CAAC;QAEJ,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE7D,OAAO,iCAAiC,CAAC,aAAa,CAAC,MAAM,CAC3D,kBAAkB,CACnB,CAAC;IACJ,CAAC;CACF"}
@@ -21,7 +21,8 @@ export declare enum LegendDataCubeSourceBuilderType {
21
21
  LEGEND_QUERY = "Legend Query",
22
22
  FREEFORM_TDS_EXPRESSION = "Freeform TDS Expression",
23
23
  LOCAL_FILE = "Local File",
24
- USER_DEFINED_FUNCTION = "User Defined Function"
24
+ USER_DEFINED_FUNCTION = "User Defined Function",
25
+ INGEST_DEFINTION = "Ingest Definition"
25
26
  }
26
27
  export declare abstract class LegendDataCubeSourceBuilderState {
27
28
  protected readonly _application: LegendDataCubeApplicationStore;
@@ -1 +1 @@
1
- {"version":3,"file":"LegendDataCubeSourceBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/stores/builder/source/LegendDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,oBAAY,+BAA+B;IACzC,YAAY,iBAAiB;IAC7B,uBAAuB,4BAA4B;IACnD,UAAU,eAAe;IACzB,qBAAqB,0BAA0B;CAChD;AAED,8BAAsB,gCAAgC;IACpD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,8BAA8B,CAAC;IAChE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;gBAGrD,WAAW,EAAE,8BAA8B,EAC3C,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,oBAAoB;IAOpC,QAAQ,KAAK,KAAK,IAAI,+BAA+B,CAAC;IACtD,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC;IAChC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC;IAEnD;;OAEG;IACH,qBAAqB,CAAC,aAAa,EAAE,qBAAqB;CAG3D"}
1
+ {"version":3,"file":"LegendDataCubeSourceBuilderState.d.ts","sourceRoot":"","sources":["../../../../src/stores/builder/source/LegendDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AAC1F,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,oBAAY,+BAA+B;IACzC,YAAY,iBAAiB;IAC7B,uBAAuB,4BAA4B;IACnD,UAAU,eAAe;IACzB,qBAAqB,0BAA0B;IAC/C,gBAAgB,sBAAsB;CACvC;AAED,8BAAsB,gCAAgC;IACpD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,8BAA8B,CAAC;IAChE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;gBAGrD,WAAW,EAAE,8BAA8B,EAC3C,MAAM,EAAE,4BAA4B,EACpC,YAAY,EAAE,oBAAoB;IAOpC,QAAQ,KAAK,KAAK,IAAI,+BAA+B,CAAC;IACtD,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC;IAChC,QAAQ,CAAC,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC;IAEnD;;OAEG;IACH,qBAAqB,CAAC,aAAa,EAAE,qBAAqB;CAG3D"}
@@ -20,6 +20,7 @@ export var LegendDataCubeSourceBuilderType;
20
20
  LegendDataCubeSourceBuilderType["FREEFORM_TDS_EXPRESSION"] = "Freeform TDS Expression";
21
21
  LegendDataCubeSourceBuilderType["LOCAL_FILE"] = "Local File";
22
22
  LegendDataCubeSourceBuilderType["USER_DEFINED_FUNCTION"] = "User Defined Function";
23
+ LegendDataCubeSourceBuilderType["INGEST_DEFINTION"] = "Ingest Definition";
23
24
  })(LegendDataCubeSourceBuilderType || (LegendDataCubeSourceBuilderType = {}));
24
25
  export class LegendDataCubeSourceBuilderState {
25
26
  _application;
@@ -1 +1 @@
1
- {"version":3,"file":"LegendDataCubeSourceBuilderState.js","sourceRoot":"","sources":["../../../../src/stores/builder/source/LegendDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAoB,MAAM,sBAAsB,CAAC;AAQxD,MAAM,CAAN,IAAY,+BAKX;AALD,WAAY,+BAA+B;IACzC,gEAA6B,CAAA;IAC7B,sFAAmD,CAAA;IACnD,4DAAyB,CAAA;IACzB,kFAA+C,CAAA;AACjD,CAAC,EALW,+BAA+B,KAA/B,+BAA+B,QAK1C;AAED,MAAM,OAAgB,gCAAgC;IACjC,YAAY,CAAiC;IAC7C,OAAO,CAA+B;IACtC,aAAa,CAAuB;IAEvD,YACE,WAA2C,EAC3C,MAAoC,EACpC,YAAkC;QAElC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAMD;;OAEG;IACH,qBAAqB,CAAC,aAAoC;QACxD,aAAa;IACf,CAAC;CACF"}
1
+ {"version":3,"file":"LegendDataCubeSourceBuilderState.js","sourceRoot":"","sources":["../../../../src/stores/builder/source/LegendDataCubeSourceBuilderState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAoB,MAAM,sBAAsB,CAAC;AAQxD,MAAM,CAAN,IAAY,+BAMX;AAND,WAAY,+BAA+B;IACzC,gEAA6B,CAAA;IAC7B,sFAAmD,CAAA;IACnD,4DAAyB,CAAA;IACzB,kFAA+C,CAAA;IAC/C,yEAAsC,CAAA;AACxC,CAAC,EANW,+BAA+B,KAA/B,+BAA+B,QAM1C;AAED,MAAM,OAAgB,gCAAgC;IACjC,YAAY,CAAiC;IAC7C,OAAO,CAA+B;IACtC,aAAa,CAAuB;IAEvD,YACE,WAA2C,EAC3C,MAAoC,EACpC,YAAkC;QAElC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAMD;;OAEG;IACH,qBAAqB,CAAC,aAAoC;QACxD,aAAa;IACf,CAAC;CACF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Copyright (c) 2025-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { DataCubeSource } from '@finos/legend-data-cube';
17
+ import type { V1_PureModelContextData } from '@finos/legend-graph';
18
+ import { SerializationFactory, type PlainObject } from '@finos/legend-shared';
19
+ export declare const INGEST_DEFINITION_DATA_CUBE_SOURCE_TYPE = "ingestDefinition";
20
+ export declare class IngestDefinitionDataCubeSource extends DataCubeSource {
21
+ model: PlainObject<V1_PureModelContextData>;
22
+ runtime: string;
23
+ }
24
+ export declare class RawIngestDefinitionDataCubeSource {
25
+ ingestDefinitionUrn: string;
26
+ warehouse: string;
27
+ ingestServerUrl: string;
28
+ paths: string[];
29
+ static readonly serialization: SerializationFactory<RawIngestDefinitionDataCubeSource>;
30
+ }
31
+ //# sourceMappingURL=IngestDefinitionDataCubeSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngestDefinitionDataCubeSource.d.ts","sourceRoot":"","sources":["../../../src/stores/model/IngestDefinitionDataCubeSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,oBAAoB,EAEpB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAG9B,eAAO,MAAM,uCAAuC,qBAAqB,CAAC;AAE1E,qBAAa,8BAA+B,SAAQ,cAAc;IAChE,KAAK,EAAG,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAC7C,OAAO,EAAG,MAAM,CAAC;CAClB;AAED,qBAAa,iCAAiC;IAC5C,mBAAmB,EAAG,MAAM,CAAC;IAC7B,SAAS,EAAG,MAAM,CAAC;IACnB,eAAe,EAAG,MAAM,CAAC;IACzB,KAAK,EAAG,MAAM,EAAE,CAAC;IAEjB,MAAM,CAAC,QAAQ,CAAC,aAAa,0DAQ3B;CACH"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Copyright (c) 2025-present, Goldman Sachs
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { DataCubeSource } from '@finos/legend-data-cube';
17
+ import { SerializationFactory, usingConstantValueSchema, } from '@finos/legend-shared';
18
+ import { createModelSchema, list, primitive } from 'serializr';
19
+ export const INGEST_DEFINITION_DATA_CUBE_SOURCE_TYPE = 'ingestDefinition';
20
+ export class IngestDefinitionDataCubeSource extends DataCubeSource {
21
+ model;
22
+ runtime;
23
+ }
24
+ export class RawIngestDefinitionDataCubeSource {
25
+ ingestDefinitionUrn;
26
+ warehouse;
27
+ ingestServerUrl;
28
+ paths;
29
+ static serialization = new SerializationFactory(createModelSchema(RawIngestDefinitionDataCubeSource, {
30
+ _type: usingConstantValueSchema(INGEST_DEFINITION_DATA_CUBE_SOURCE_TYPE),
31
+ ingestDefinitionUrn: primitive(),
32
+ warehouse: primitive(),
33
+ ingestServerUrl: primitive(),
34
+ paths: list(primitive()),
35
+ }));
36
+ }
37
+ //# sourceMappingURL=IngestDefinitionDataCubeSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IngestDefinitionDataCubeSource.js","sourceRoot":"","sources":["../../../src/stores/model/IngestDefinitionDataCubeSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EACL,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE/D,MAAM,CAAC,MAAM,uCAAuC,GAAG,kBAAkB,CAAC;AAE1E,MAAM,OAAO,8BAA+B,SAAQ,cAAc;IAChE,KAAK,CAAwC;IAC7C,OAAO,CAAU;CAClB;AAED,MAAM,OAAO,iCAAiC;IAC5C,mBAAmB,CAAU;IAC7B,SAAS,CAAU;IACnB,eAAe,CAAU;IACzB,KAAK,CAAY;IAEjB,MAAM,CAAU,aAAa,GAAG,IAAI,oBAAoB,CACtD,iBAAiB,CAAC,iCAAiC,EAAE;QACnD,KAAK,EAAE,wBAAwB,CAAC,uCAAuC,CAAC;QACxE,mBAAmB,EAAE,SAAS,EAAE;QAChC,SAAS,EAAE,SAAS,EAAE;QACtB,eAAe,EAAE,SAAS,EAAE;QAC5B,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;KACzB,CAAC,CACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-application-data-cube",
3
- "version": "0.4.8",
3
+ "version": "0.5.0",
4
4
  "description": "Legend DataCube application core",
5
5
  "keywords": [
6
6
  "legend",
@@ -43,13 +43,14 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@duckdb/duckdb-wasm": "1.29.0",
46
- "@finos/legend-application": "16.0.60",
47
- "@finos/legend-art": "7.1.114",
48
- "@finos/legend-code-editor": "2.0.102",
49
- "@finos/legend-data-cube": "0.3.8",
50
- "@finos/legend-graph": "32.1.60",
51
- "@finos/legend-query-builder": "4.17.20",
46
+ "@finos/legend-application": "16.0.61",
47
+ "@finos/legend-art": "7.1.115",
48
+ "@finos/legend-code-editor": "2.0.103",
49
+ "@finos/legend-data-cube": "0.3.9",
50
+ "@finos/legend-graph": "32.1.61",
51
+ "@finos/legend-query-builder": "4.17.21",
52
52
  "@finos/legend-server-depot": "6.0.97",
53
+ "@finos/legend-server-lakehouse": "0.1.0",
53
54
  "@finos/legend-shared": "11.0.18",
54
55
  "@finos/legend-storage": "3.0.137",
55
56
  "@types/react": "19.0.10",
@@ -59,6 +60,7 @@
59
60
  "mobx-react-lite": "4.1.0",
60
61
  "react": "19.0.0",
61
62
  "react-dom": "19.0.0",
63
+ "react-oidc-context": "^3.3.0",
62
64
  "serializr": "3.0.3"
63
65
  },
64
66
  "devDependencies": {
@@ -66,7 +66,10 @@ export class LegendDataCube extends LegendApplication {
66
66
  ): Promise<void> {
67
67
  createRoot(getApplicationRootElement()).render(
68
68
  <ApplicationStoreProvider store={applicationStore}>
69
- <LegendDataCubeWebApplication baseUrl={this.baseAddress} />
69
+ <LegendDataCubeWebApplication
70
+ baseUrl={this.baseAddress}
71
+ oidcConfig={this.config.dataCubeOidcConfig}
72
+ />
70
73
  </ApplicationStoreProvider>,
71
74
  );
72
75
  }
@@ -23,6 +23,7 @@ import {
23
23
  assertNonNullable,
24
24
  guaranteeNonEmptyString,
25
25
  } from '@finos/legend-shared';
26
+ import { type AuthProviderProps } from 'react-oidc-context';
26
27
 
27
28
  export interface LegendDataCubeApplicationConfigurationData
28
29
  extends LegendApplicationConfigurationData {
@@ -36,14 +37,26 @@ export interface LegendDataCubeApplicationConfigurationData
36
37
  studio?: {
37
38
  url: string;
38
39
  };
40
+ lakehouse: {
41
+ platformUrl: string;
42
+ };
43
+ oidcConfig?: LegendDataCubeOidcConfig | undefined;
44
+ }
45
+
46
+ export interface LegendDataCubeOidcConfig {
47
+ redirectPath: string;
48
+ silentRedirectPath: string;
49
+ authProviderProps: AuthProviderProps;
39
50
  }
40
51
 
41
52
  export class LegendDataCubeApplicationConfig extends LegendApplicationConfig {
42
53
  readonly engineServerUrl: string;
43
54
  readonly depotServerUrl: string;
55
+ readonly lakehousePlatformUrl: string;
44
56
  readonly engineQueryServerUrl?: string | undefined;
45
57
  readonly queryApplicationUrl?: string | undefined;
46
58
  readonly studioApplicationUrl?: string | undefined;
59
+ readonly dataCubeOidcConfig?: LegendDataCubeOidcConfig | undefined;
47
60
 
48
61
  constructor(
49
62
  input: LegendApplicationConfigurationInput<LegendDataCubeApplicationConfigurationData>,
@@ -79,6 +92,18 @@ export class LegendDataCubeApplicationConfig extends LegendApplicationConfig {
79
92
  ),
80
93
  );
81
94
 
95
+ //lakehouse
96
+ assertNonNullable(
97
+ input.configData.lakehouse,
98
+ `Can't configure application: 'lakehouse' field is missing`,
99
+ );
100
+ this.lakehousePlatformUrl = LegendApplicationConfig.resolveAbsoluteUrl(
101
+ guaranteeNonEmptyString(
102
+ input.configData.lakehouse.platformUrl,
103
+ `Can't configure application: 'lakehouse.platformUrl' field is missing or empty`,
104
+ ),
105
+ );
106
+
82
107
  // query
83
108
  if (input.configData.query?.url) {
84
109
  this.queryApplicationUrl = LegendApplicationConfig.resolveAbsoluteUrl(
@@ -91,6 +116,8 @@ export class LegendDataCubeApplicationConfig extends LegendApplicationConfig {
91
116
  input.configData.studio.url,
92
117
  );
93
118
  }
119
+
120
+ this.dataCubeOidcConfig = input.configData.oidcConfig;
94
121
  }
95
122
  getDefaultApplicationStorageKey(): string {
96
123
  return 'legend-data-cube';
@@ -35,6 +35,18 @@ const TEST_DATA__appConfig = {
35
35
  url: 'https://testStudioUrl',
36
36
  instances: [],
37
37
  },
38
+ lakehouse: {
39
+ platformUrl: 'https://testLakehousePlatformUrl',
40
+ },
41
+ oidcConfig: {
42
+ redirectPath: '/callback',
43
+ silentRedirectPath: '/callback?silent=true',
44
+ authProviderProps: {
45
+ authority: 'http://localhost:8080/auth',
46
+ client_id: 'test-client-id',
47
+ redirect_uri: '/callback',
48
+ },
49
+ },
38
50
  };
39
51
 
40
52
  export const TEST__getTestLegendDataCubeApplicationConfig = (
@@ -24,6 +24,17 @@ import { observer } from 'mobx-react-lite';
24
24
  import { LegendDataCubeBuilder } from './builder/LegendDataCubeBuilder.js';
25
25
  import { LEGEND_DATA_CUBE_ROUTE_PATTERN } from '../__lib__/LegendDataCubeNavigation.js';
26
26
  import { useEffect } from 'react';
27
+ import {
28
+ CubesLoadingIndicator,
29
+ CubesLoadingIndicatorIcon,
30
+ } from '@finos/legend-art';
31
+ import type { LegendDataCubeOidcConfig } from '../application/LegendDataCubeApplicationConfig.js';
32
+ import {
33
+ type AuthProviderProps,
34
+ withAuthenticationRequired,
35
+ AuthProvider,
36
+ } from 'react-oidc-context';
37
+ import type { User } from 'oidc-client-ts';
27
38
 
28
39
  const LegendDataCubeWebApplicationRouter = observer(() => {
29
40
  const store = useLegendDataCubeBaseStore();
@@ -48,16 +59,58 @@ const LegendDataCubeWebApplicationRouter = observer(() => {
48
59
  );
49
60
  });
50
61
 
62
+ const LegendDataCubeWebProvider: React.FC<{
63
+ baseUrl: string;
64
+ }> = ({ baseUrl }) => {
65
+ return (
66
+ <BrowserEnvironmentProvider baseUrl={baseUrl}>
67
+ <LegendDataCubeFrameworkProvider>
68
+ <LegendDataCubeWebApplicationRouter />
69
+ </LegendDataCubeFrameworkProvider>
70
+ </BrowserEnvironmentProvider>
71
+ );
72
+ };
73
+
74
+ const AuthenticatedLegendDataCubeWebProvider = withAuthenticationRequired(
75
+ LegendDataCubeWebProvider,
76
+ {
77
+ OnRedirecting: () => (
78
+ <CubesLoadingIndicator isLoading={true}>
79
+ <CubesLoadingIndicatorIcon />
80
+ </CubesLoadingIndicator>
81
+ ),
82
+ signinRedirectArgs: {
83
+ state: `${window.location.pathname}${window.location.search}`,
84
+ },
85
+ },
86
+ );
87
+
51
88
  export const LegendDataCubeWebApplication = observer(
52
- (props: { baseUrl: string }) => {
53
- const { baseUrl } = props;
54
-
55
- return (
56
- <BrowserEnvironmentProvider baseUrl={baseUrl}>
57
- <LegendDataCubeFrameworkProvider>
58
- <LegendDataCubeWebApplicationRouter />
59
- </LegendDataCubeFrameworkProvider>
60
- </BrowserEnvironmentProvider>
89
+ (props: {
90
+ baseUrl: string;
91
+ oidcConfig: LegendDataCubeOidcConfig | undefined;
92
+ }) => {
93
+ const { baseUrl, oidcConfig } = props;
94
+
95
+ const onSigninCallback = (_user: User | undefined) => {
96
+ window.location.href = (_user?.state as string | undefined) ?? '/';
97
+ };
98
+
99
+ const mergedOIDCConfig: AuthProviderProps | undefined = oidcConfig
100
+ ? {
101
+ ...oidcConfig.authProviderProps,
102
+ redirect_uri: `${window.location.origin}${oidcConfig.redirectPath}`,
103
+ silent_redirect_uri: `${window.location.origin}${oidcConfig.silentRedirectPath}`,
104
+ onSigninCallback,
105
+ }
106
+ : undefined;
107
+
108
+ return mergedOIDCConfig ? (
109
+ <AuthProvider {...mergedOIDCConfig}>
110
+ <AuthenticatedLegendDataCubeWebProvider baseUrl={baseUrl} />
111
+ </AuthProvider>
112
+ ) : (
113
+ <LegendDataCubeWebProvider baseUrl={baseUrl} />
61
114
  );
62
115
  },
63
116
  );
@@ -33,6 +33,8 @@ import { LocalFileDataCubeSourceBuilderState } from '../../stores/builder/source
33
33
  import { LocalFileDataCubeSourceBuilder } from './source/LocalFileDataCubeSourceBuilder.js';
34
34
  import { UserDefinedFunctionDataCubeSourceBuilderState } from '../../stores/builder/source/UserDefinedFunctionDataCubeSourceBuilderState.js';
35
35
  import { UserDefinedFunctionDataCubeSourceBuilder } from './source/UserDefinedFunctionDataCubeSourceBuilder.js';
36
+ import { IngestDefinitionDataCubeSourceBuilderState } from '../../stores/builder/source/IngestDefinitionDataCubeSourceBuilderState.js';
37
+ import { IngestDefinitionDataCubeSourceBuilder } from './source/IngestDefinitionDataCubeSourceBuilder.js';
36
38
 
37
39
  export const LegendDataCubeCreator = observer(() => {
38
40
  const store = useLegendDataCubeBuilderStore();
@@ -74,6 +76,7 @@ export const LegendDataCubeCreator = observer(() => {
74
76
  LegendDataCubeSourceBuilderType.USER_DEFINED_FUNCTION,
75
77
  LegendDataCubeSourceBuilderType.FREEFORM_TDS_EXPRESSION,
76
78
  LegendDataCubeSourceBuilderType.LOCAL_FILE,
79
+ LegendDataCubeSourceBuilderType.INGEST_DEFINTION,
77
80
  ].map((type) => (
78
81
  <FormDropdownMenuItem
79
82
  key={type}
@@ -114,6 +117,12 @@ export const LegendDataCubeCreator = observer(() => {
114
117
  store={store}
115
118
  />
116
119
  )}
120
+ {sourceBuilder instanceof
121
+ IngestDefinitionDataCubeSourceBuilderState && (
122
+ <IngestDefinitionDataCubeSourceBuilder
123
+ sourceBuilder={sourceBuilder}
124
+ />
125
+ )}
117
126
  </div>
118
127
  </div>
119
128
  </div>