@shapediver/viewer.session-engine.session-engine 3.14.6 → 3.14.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.
Files changed (44) hide show
  1. package/dist/implementation/SessionEngine.d.ts.map +1 -1
  2. package/dist/implementation/SessionEngine.js +5 -4
  3. package/dist/implementation/SessionEngine.js.map +1 -1
  4. package/dist/implementation/SessionEngineCore.d.ts +145 -0
  5. package/dist/implementation/SessionEngineCore.d.ts.map +1 -0
  6. package/dist/implementation/SessionEngineCore.js +544 -0
  7. package/dist/implementation/SessionEngineCore.js.map +1 -0
  8. package/dist/implementation/SessionEngineFacade.d.ts +101 -0
  9. package/dist/implementation/SessionEngineFacade.d.ts.map +1 -0
  10. package/dist/implementation/SessionEngineFacade.js +190 -0
  11. package/dist/implementation/SessionEngineFacade.js.map +1 -0
  12. package/dist/implementation/managers/CustomizationManager.d.ts +32 -0
  13. package/dist/implementation/managers/CustomizationManager.d.ts.map +1 -0
  14. package/dist/implementation/managers/CustomizationManager.js +266 -0
  15. package/dist/implementation/managers/CustomizationManager.js.map +1 -0
  16. package/dist/implementation/managers/ExportManager.d.ts +31 -0
  17. package/dist/implementation/managers/ExportManager.d.ts.map +1 -0
  18. package/dist/implementation/managers/ExportManager.js +150 -0
  19. package/dist/implementation/managers/ExportManager.js.map +1 -0
  20. package/dist/implementation/managers/FileUploadManager.d.ts +36 -0
  21. package/dist/implementation/managers/FileUploadManager.d.ts.map +1 -0
  22. package/dist/implementation/managers/FileUploadManager.js +178 -0
  23. package/dist/implementation/managers/FileUploadManager.js.map +1 -0
  24. package/dist/implementation/managers/ModelStateManager.d.ts +16 -0
  25. package/dist/implementation/managers/ModelStateManager.d.ts.map +1 -0
  26. package/dist/implementation/managers/ModelStateManager.js +130 -0
  27. package/dist/implementation/managers/ModelStateManager.js.map +1 -0
  28. package/dist/implementation/managers/OutputManager.d.ts +61 -0
  29. package/dist/implementation/managers/OutputManager.d.ts.map +1 -0
  30. package/dist/implementation/managers/OutputManager.js +358 -0
  31. package/dist/implementation/managers/OutputManager.js.map +1 -0
  32. package/dist/implementation/managers/ParameterManager.d.ts +28 -0
  33. package/dist/implementation/managers/ParameterManager.d.ts.map +1 -0
  34. package/dist/implementation/managers/ParameterManager.js +84 -0
  35. package/dist/implementation/managers/ParameterManager.js.map +1 -0
  36. package/dist/implementation/managers/SettingsManager.d.ts +55 -0
  37. package/dist/implementation/managers/SettingsManager.d.ts.map +1 -0
  38. package/dist/implementation/managers/SettingsManager.js +456 -0
  39. package/dist/implementation/managers/SettingsManager.js.map +1 -0
  40. package/dist/implementation/managers/UtilsManager.d.ts +65 -0
  41. package/dist/implementation/managers/UtilsManager.d.ts.map +1 -0
  42. package/dist/implementation/managers/UtilsManager.js +345 -0
  43. package/dist/implementation/managers/UtilsManager.js.map +1 -0
  44. package/package.json +8 -8
@@ -0,0 +1,31 @@
1
+ import { ReqCustomization, ReqExport, ResBase, ResExport } from "@shapediver/sdk.geometry-api-sdk-v2";
2
+ import { SessionEngineCore } from "../SessionEngineCore";
3
+ export declare class ExportManager {
4
+ private readonly _sessionEngineCore;
5
+ private readonly _utilsManager;
6
+ private readonly _uuidGenerator;
7
+ private readonly _eventEngine;
8
+ constructor(sessionEngineCore: SessionEngineCore);
9
+ requestExport(exportId: string, parameters: {
10
+ [key: string]: unknown;
11
+ }, maxWaitTime: number, retry?: boolean): Promise<ResExport>;
12
+ requestExports(body: ReqExport, loadOutputs?: boolean, maxWaitMsec?: number, retry?: boolean): Promise<ResBase>;
13
+ cleanExportParameters(parameters: {
14
+ [key: string]: unknown;
15
+ }): ReqCustomization;
16
+ /**
17
+ * Save the export properties for displayname, order, tooltip and hidden
18
+ *
19
+ * @param exports
20
+ * @returns
21
+ */
22
+ saveExportProperties(exports: {
23
+ [key: string]: {
24
+ displayname: string;
25
+ hidden: boolean;
26
+ order: number;
27
+ tooltip: string;
28
+ };
29
+ }, retry?: boolean): Promise<boolean>;
30
+ }
31
+ //# sourceMappingURL=ExportManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportManager.d.ts","sourceRoot":"","sources":["../../../src/implementation/managers/ExportManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,gBAAgB,EAChB,SAAS,EACT,OAAO,EACP,SAAS,EAET,MAAM,qCAAqC,CAAC;AAO7C,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAGvD,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAE7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;gBAEzC,iBAAiB,EAAE,iBAAiB;IAKnC,aAAa,CACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,EACpC,WAAW,EAAE,MAAM,EACnB,KAAK,UAAQ,GACX,OAAO,CAAC,SAAS,CAAC;IA4BR,cAAc,CAC1B,IAAI,EAAE,SAAS,EACf,WAAW,GAAE,OAAe,EAC5B,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,UAAQ,GACX,OAAO,CAAC,OAAO,CAAC;IAoHZ,qBAAqB,CAAC,UAAU,EAAE;QACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,GAAG,gBAAgB;IAwCpB;;;;;OAKG;IACU,oBAAoB,CAChC,OAAO,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG;YACd,WAAW,EAAE,MAAM,CAAC;YACpB,MAAM,EAAE,OAAO,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,OAAO,EAAE,MAAM,CAAC;SAChB,CAAC;KACF,EACD,KAAK,UAAQ,GACX,OAAO,CAAC,OAAO,CAAC;CAenB"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ExportManager = void 0;
13
+ const sdk_geometry_api_sdk_v2_1 = require("@shapediver/sdk.geometry-api-sdk-v2");
14
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
15
+ const viewer_shared_types_1 = require("@shapediver/viewer.shared.types");
16
+ class ExportManager {
17
+ constructor(sessionEngineCore) {
18
+ this._uuidGenerator = viewer_shared_services_1.UuidGenerator.instance;
19
+ this._eventEngine = viewer_shared_services_1.EventEngine.instance;
20
+ this._sessionEngineCore = sessionEngineCore;
21
+ this._utilsManager = this._sessionEngineCore.utilsManager;
22
+ }
23
+ requestExport(exportId, parameters, maxWaitTime, retry = false) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ this._utilsManager.checkAvailability("export");
26
+ try {
27
+ yield this._sessionEngineCore.fileUploadManager.uploadFileParameters(parameters);
28
+ const requestParameterSet = this.cleanExportParameters(parameters);
29
+ const responseDto = yield new sdk_geometry_api_sdk_v2_1.UtilsApi(this._sessionEngineCore.sdkConfig).submitAndWaitForExport(this._sessionEngineCore.sessionId, { exports: [exportId], parameters: requestParameterSet }, maxWaitTime, this._sessionEngineCore.ignoreUnknownParams);
30
+ this._sessionEngineCore.updateResponseDto(responseDto);
31
+ return this._sessionEngineCore.exports[exportId];
32
+ }
33
+ catch (e) {
34
+ yield this._utilsManager.handleError(e, retry);
35
+ return yield this.requestExport(exportId, parameters, maxWaitTime, true);
36
+ }
37
+ });
38
+ }
39
+ requestExports(body, loadOutputs = false, maxWaitMsec, retry = false) {
40
+ return __awaiter(this, void 0, void 0, function* () {
41
+ let processId;
42
+ const eventId = this._uuidGenerator.create();
43
+ // if the outputs are loaded, we treat this as a customization by sending the same events
44
+ const treatInternallyAsCustomization = loadOutputs === true &&
45
+ this._sessionEngineCore.allowOutputLoading === true;
46
+ const eventInfo = {
47
+ type: viewer_shared_types_1.TASK_TYPE.SESSION_CUSTOMIZATION,
48
+ category: viewer_shared_types_1.TASK_CATEGORY.SESSION_CUSTOMIZATION.CUSTOMIZE_VIA_EXPORTS,
49
+ id: eventId,
50
+ data: { sessionId: this._sessionEngineCore.id },
51
+ };
52
+ this._utilsManager.checkAvailability("export");
53
+ try {
54
+ if (treatInternallyAsCustomization) {
55
+ this._eventEngine.emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_START, Object.assign(Object.assign({}, eventInfo), { progress: 0, status: "Customizing session" }));
56
+ }
57
+ // activate the busy mode if outputs are loaded
58
+ if (loadOutputs === true &&
59
+ this._sessionEngineCore.allowOutputLoading === true &&
60
+ body.outputs &&
61
+ Object.keys(body.outputs).length > 0) {
62
+ processId = this._uuidGenerator.create();
63
+ this._utilsManager.addBusyMode(processId);
64
+ }
65
+ if (treatInternallyAsCustomization) {
66
+ this._eventEngine.emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_PROCESS, Object.assign(Object.assign({}, eventInfo), { progress: 0.1, status: "Uploading file parameters" }));
67
+ }
68
+ yield this._sessionEngineCore.fileUploadManager.uploadFileParameters(body.parameters);
69
+ const requestParameterSet = this.cleanExportParameters(body.parameters);
70
+ if (treatInternallyAsCustomization) {
71
+ this._eventEngine.emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_PROCESS, Object.assign(Object.assign({}, eventInfo), { progress: 0.1, status: "Sending customization request" }));
72
+ }
73
+ const responseDto = yield new sdk_geometry_api_sdk_v2_1.UtilsApi(this._sessionEngineCore.sdkConfig).submitAndWaitForExport(this._sessionEngineCore.sessionId, {
74
+ exports: body.exports,
75
+ parameters: requestParameterSet,
76
+ outputs: body.outputs,
77
+ max_wait_time: body.max_wait_time,
78
+ }, maxWaitMsec, this._sessionEngineCore.ignoreUnknownParams);
79
+ this._sessionEngineCore.updateResponseDto(responseDto);
80
+ if (treatInternallyAsCustomization) {
81
+ yield this._sessionEngineCore.outputManager.updateOutputs(Object.assign(Object.assign({}, eventInfo), { progressRange: {
82
+ min: 0.1,
83
+ max: 0.9,
84
+ } }));
85
+ this._eventEngine.emitEvent(viewer_shared_services_1.EVENTTYPE.SESSION.SESSION_CUSTOMIZED, { sessionId: this._sessionEngineCore.id });
86
+ this._eventEngine.emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_END, Object.assign(Object.assign({}, eventInfo), { progress: 1, status: "Session customized" }));
87
+ }
88
+ if (processId)
89
+ this._utilsManager.removeBusyMode(processId);
90
+ return responseDto;
91
+ }
92
+ catch (e) {
93
+ if (treatInternallyAsCustomization) {
94
+ this._eventEngine.emitEvent(viewer_shared_services_1.EVENTTYPE.TASK.TASK_CANCEL, Object.assign(Object.assign({}, eventInfo), { progress: 1, status: "Session customization failed" }));
95
+ }
96
+ if (processId)
97
+ this._utilsManager.removeBusyMode(processId);
98
+ yield this._utilsManager.handleError(e, retry);
99
+ return yield this.requestExports(body, loadOutputs, maxWaitMsec, true);
100
+ }
101
+ });
102
+ }
103
+ cleanExportParameters(parameters) {
104
+ const requestParameterSet = {};
105
+ // first step, we convert all our names and displaynames to ids
106
+ for (const parameterIdOrName in parameters) {
107
+ // we prioritize id, then name and then displayname
108
+ // if there are two parameters with the same name or displayname, we take the one that is found first (no way for us to evaluate which one the user meant)
109
+ const parameterObject = Object.values(this._sessionEngineCore.parameters).find((p) => p.id === parameterIdOrName ||
110
+ p.name === parameterIdOrName ||
111
+ p.displayname === parameterIdOrName);
112
+ // in case the key of the key value pair was neither the id, name or displayname, skip
113
+ if (!parameterObject)
114
+ continue;
115
+ // copy into new dictionary
116
+ requestParameterSet[parameterObject.id] = (" " + parameterObject.stringify(parameters[parameterIdOrName])).slice(1);
117
+ }
118
+ // seconds step, fill all other parameter values that are currently not set
119
+ const currentParameters = this._sessionEngineCore.parameterValues;
120
+ for (const parameterId in currentParameters) {
121
+ // if already set by input values, skip
122
+ if (requestParameterSet[parameterId] !== undefined)
123
+ continue;
124
+ // deep copy into new dictionary
125
+ requestParameterSet[parameterId] = (" " + currentParameters[parameterId]).slice(1);
126
+ }
127
+ return requestParameterSet;
128
+ }
129
+ /**
130
+ * Save the export properties for displayname, order, tooltip and hidden
131
+ *
132
+ * @param exports
133
+ * @returns
134
+ */
135
+ saveExportProperties(exports, retry = false) {
136
+ return __awaiter(this, void 0, void 0, function* () {
137
+ this._utilsManager.checkAvailability("export-definition", true);
138
+ try {
139
+ yield new sdk_geometry_api_sdk_v2_1.ExportApi(this._sessionEngineCore.sdkConfig).updateExportDefinitions(this._sessionEngineCore.modelId, exports);
140
+ return true;
141
+ }
142
+ catch (e) {
143
+ yield this._utilsManager.handleError(e, retry);
144
+ return yield this.saveExportProperties(exports, true);
145
+ }
146
+ });
147
+ }
148
+ }
149
+ exports.ExportManager = ExportManager;
150
+ //# sourceMappingURL=ExportManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportManager.js","sourceRoot":"","sources":["../../../src/implementation/managers/ExportManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iFAO6C;AAC7C,+EAI4C;AAC5C,yEAAyE;AAIzE,MAAa,aAAa;IAOzB,YAAY,iBAAoC;QAH/B,mBAAc,GAAG,sCAAa,CAAC,QAAQ,CAAC;QACxC,iBAAY,GAAG,oCAAW,CAAC,QAAQ,CAAC;QAGpD,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;IAC3D,CAAC;IAEY,aAAa,CACzB,QAAgB,EAChB,UAAoC,EACpC,WAAmB,EACnB,KAAK,GAAG,KAAK;;YAEb,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI;gBACH,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,oBAAoB,CACnE,UAAU,CACV,CAAC;gBACF,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;gBACnE,MAAM,WAAW,GAAG,MAAM,IAAI,kCAAQ,CACrC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CACjC,CAAC,sBAAsB,CACvB,IAAI,CAAC,kBAAkB,CAAC,SAAU,EAClC,EAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAC,EACtD,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAC3C,CAAC;gBACF,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aACjD;YAAC,OAAO,CAAC,EAAE;gBACX,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/C,OAAO,MAAM,IAAI,CAAC,aAAa,CAC9B,QAAQ,EACR,UAAU,EACV,WAAW,EACX,IAAI,CACJ,CAAC;aACF;QACF,CAAC;KAAA;IAEY,cAAc,CAC1B,IAAe,EACf,cAAuB,KAAK,EAC5B,WAAoB,EACpB,KAAK,GAAG,KAAK;;YAEb,IAAI,SAAS,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YAC7C,yFAAyF;YACzF,MAAM,8BAA8B,GACnC,WAAW,KAAK,IAAI;gBACpB,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,KAAK,IAAI,CAAC;YAErD,MAAM,SAAS,GAAG;gBACjB,IAAI,EAAE,+BAAS,CAAC,qBAAqB;gBACrC,QAAQ,EAAE,mCAAa,CAAC,qBAAqB,CAAC,qBAAqB;gBACnE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,EAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAC;aAC7C,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI;gBACH,IAAI,8BAA8B,EAAE;oBACnC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,kCAAS,CAAC,IAAI,CAAC,UAAU,kCACjD,SAAS,KACZ,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,qBAAqB,IAC5B,CAAC;iBACH;gBAED,+CAA+C;gBAC/C,IACC,WAAW,KAAK,IAAI;oBACpB,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,KAAK,IAAI;oBACnD,IAAI,CAAC,OAAO;oBACZ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EACnC;oBACD,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;oBACzC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;iBAC1C;gBAED,IAAI,8BAA8B,EAAE;oBACnC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,kCAAS,CAAC,IAAI,CAAC,YAAY,kCACnD,SAAS,KACZ,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,2BAA2B,IAClC,CAAC;iBACH;gBAED,MAAM,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,oBAAoB,CACnE,IAAI,CAAC,UAAmD,CACxD,CAAC;gBACF,MAAM,mBAAmB,GAAG,IAAI,CAAC,qBAAqB,CACrD,IAAI,CAAC,UAAU,CACf,CAAC;gBAEF,IAAI,8BAA8B,EAAE;oBACnC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,kCAAS,CAAC,IAAI,CAAC,YAAY,kCACnD,SAAS,KACZ,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,+BAA+B,IACtC,CAAC;iBACH;gBAED,MAAM,WAAW,GAAG,MAAM,IAAI,kCAAQ,CACrC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CACjC,CAAC,sBAAsB,CACvB,IAAI,CAAC,kBAAkB,CAAC,SAAU,EAClC;oBACC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,UAAU,EAAE,mBAAmB;oBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;iBACjC,EACD,WAAW,EACX,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAC3C,CAAC;gBACF,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;gBAEvD,IAAI,8BAA8B,EAAE;oBACnC,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,aAAa,iCACrD,SAAS,KACZ,aAAa,EAAE;4BACd,GAAG,EAAE,GAAG;4BACR,GAAG,EAAE,GAAG;yBACR,IACA,CAAC;oBACH,IAAI,CAAC,YAAY,CAAC,SAAS,CAC1B,kCAAS,CAAC,OAAO,CAAC,kBAAkB,EACpC,EAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAC,CACvC,CAAC;oBAEF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,kCAAS,CAAC,IAAI,CAAC,QAAQ,kCAC/C,SAAS,KACZ,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,oBAAoB,IAC3B,CAAC;iBACH;gBAED,IAAI,SAAS;oBAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC5D,OAAO,WAAW,CAAC;aACnB;YAAC,OAAO,CAAC,EAAE;gBACX,IAAI,8BAA8B,EAAE;oBACnC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,kCAAS,CAAC,IAAI,CAAC,WAAW,kCAClD,SAAS,KACZ,QAAQ,EAAE,CAAC,EACX,MAAM,EAAE,8BAA8B,IACrC,CAAC;iBACH;gBAED,IAAI,SAAS;oBAAE,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAC5D,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/C,OAAO,MAAM,IAAI,CAAC,cAAc,CAC/B,IAAI,EACJ,WAAW,EACX,WAAW,EACX,IAAI,CACJ,CAAC;aACF;QACF,CAAC;KAAA;IAEM,qBAAqB,CAAC,UAE5B;QACA,MAAM,mBAAmB,GAAqB,EAAE,CAAC;QAEjD,+DAA+D;QAC/D,KAAK,MAAM,iBAAiB,IAAI,UAAU,EAAE;YAC3C,mDAAmD;YACnD,0JAA0J;YAC1J,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CACpC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAClC,CAAC,IAAI,CACL,CAAC,CAAC,EAAE,EAAE,CACL,CAAC,CAAC,EAAE,KAAK,iBAAiB;gBAC1B,CAAC,CAAC,IAAI,KAAK,iBAAiB;gBAC5B,CAAC,CAAC,WAAW,KAAK,iBAAiB,CACpC,CAAC;YAEF,sFAAsF;YACtF,IAAI,CAAC,eAAe;gBAAE,SAAS;YAE/B,2BAA2B;YAC3B,mBAAmB,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,CACzC,GAAG,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAC9D,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACX;QAED,2EAA2E;QAC3E,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC;QAClE,KAAK,MAAM,WAAW,IAAI,iBAAiB,EAAE;YAC5C,uCAAuC;YACvC,IAAI,mBAAmB,CAAC,WAAW,CAAC,KAAK,SAAS;gBAAE,SAAS;YAE7D,gCAAgC;YAChC,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAClC,GAAG,GAAG,iBAAiB,CAAC,WAAW,CAAC,CACpC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACX;QAED,OAAO,mBAAmB,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACU,oBAAoB,CAChC,OAOC,EACD,KAAK,GAAG,KAAK;;YAEb,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;YAChE,IAAI;gBACH,MAAM,IAAI,mCAAS,CAClB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CACjC,CAAC,uBAAuB,CACxB,IAAI,CAAC,kBAAkB,CAAC,OAAQ,EAChC,OAAO,CACP,CAAC;gBACF,OAAO,IAAI,CAAC;aACZ;YAAC,OAAO,CAAC,EAAE;gBACX,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/C,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACtD;QACF,CAAC;KAAA;CACD;AA/OD,sCA+OC"}
@@ -0,0 +1,36 @@
1
+ import { QueryGltfConversion, ResAssetDefinition, ResBase, ResFileInfo } from "@shapediver/sdk.geometry-api-sdk-v2";
2
+ import { SessionEngineCore } from "../SessionEngineCore";
3
+ export declare class FileUploadManager {
4
+ private readonly _sessionEngineCore;
5
+ private readonly _utilsManager;
6
+ constructor(sessionEngineCore: SessionEngineCore);
7
+ getFileInfo(parameterId: string, fileId: string, retry?: boolean): Promise<ResFileInfo>;
8
+ uploadGLTF(blob: Blob, conversion?: QueryGltfConversion, retry?: boolean): Promise<ResBase>;
9
+ /**
10
+ * Get all file parameters from the parameter set.
11
+ * If the parameter is not set in the parameter set, the value from the parameter object is used.
12
+ *
13
+ * @param parameters
14
+ * @returns
15
+ */
16
+ getFileParameterSet(parameters: {
17
+ [key: string]: unknown;
18
+ }): {
19
+ [key: string]: string | File | Blob;
20
+ };
21
+ uploadSDTF(arrayBuffers: ArrayBuffer[], retry?: boolean): Promise<ResAssetDefinition[]>;
22
+ uploadFile(parameterId: string, data: File, type: string, retry?: boolean): Promise<string>;
23
+ /**
24
+ * Uploads all file parameters and returns the file parameter values.
25
+ * If parameterValues is provided, the file parameter values are added to it.
26
+ *
27
+ * @param parameterValues
28
+ * @returns
29
+ */
30
+ uploadFileParameters(parameterValues?: {
31
+ [key: string]: unknown;
32
+ }): Promise<{
33
+ [key: string]: string;
34
+ }>;
35
+ }
36
+ //# sourceMappingURL=FileUploadManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadManager.d.ts","sourceRoot":"","sources":["../../../src/implementation/managers/FileUploadManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,mBAAmB,EAEnB,kBAAkB,EAClB,OAAO,EACP,WAAW,EAGX,MAAM,qCAAqC,CAAC;AAI7C,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAGvD,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;gBAEjC,iBAAiB,EAAE,iBAAiB;IAKnC,WAAW,CACvB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,KAAK,UAAQ,GACX,OAAO,CAAC,WAAW,CAAC;IAwBV,UAAU,CACtB,IAAI,EAAE,IAAI,EACV,UAAU,GAAE,mBAA8C,EAC1D,KAAK,UAAQ,GACX,OAAO,CAAC,OAAO,CAAC;IAuBnB;;;;;;OAMG;IACI,mBAAmB,CAAC,UAAU,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,GAAG;QACjE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;KACpC;IAoBY,UAAU,CACtB,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,UAAQ,GACX,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA0CnB,UAAU,CACtB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,UAAQ,GACX,OAAO,CAAC,MAAM,CAAC;IAyClB;;;;;;OAMG;IACU,oBAAoB,CAAC,eAAe,CAAC,EAAE;QACnD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,GAAG,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAC;CA+CpC"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.FileUploadManager = void 0;
13
+ const sdk_geometry_api_sdk_v2_1 = require("@shapediver/sdk.geometry-api-sdk-v2");
14
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
15
+ const FileParameter_1 = require("../dto/FileParameter");
16
+ class FileUploadManager {
17
+ constructor(sessionEngineCore) {
18
+ this._sessionEngineCore = sessionEngineCore;
19
+ this._utilsManager = this._sessionEngineCore.utilsManager;
20
+ }
21
+ getFileInfo(parameterId, fileId, retry = false) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ this._utilsManager.checkAvailability();
24
+ try {
25
+ const response = yield new sdk_geometry_api_sdk_v2_1.FileApi(this._sessionEngineCore.sdkConfig).getFileMetadata(this._sessionEngineCore.sessionId, parameterId, fileId);
26
+ const { size, filename } = (0, sdk_geometry_api_sdk_v2_1.extractFileInfo)(response.headers);
27
+ return {
28
+ parameterId: parameterId,
29
+ id: fileId,
30
+ size: size,
31
+ filename: filename,
32
+ };
33
+ }
34
+ catch (e) {
35
+ yield this._utilsManager.handleError(e, retry);
36
+ return yield this.getFileInfo(parameterId, fileId, true);
37
+ }
38
+ });
39
+ }
40
+ uploadGLTF(blob, conversion = sdk_geometry_api_sdk_v2_1.QueryGltfConversion.NONE, retry = false) {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ this._utilsManager.checkAvailability("gltf-upload");
43
+ try {
44
+ const responseDto = (yield new sdk_geometry_api_sdk_v2_1.GltfApi(this._sessionEngineCore.sdkConfig).uploadGltf(this._sessionEngineCore.sessionId, new File([blob], "model.gltf", {
45
+ type: "model/gltf-binary",
46
+ }), conversion)).data;
47
+ if (!responseDto || !responseDto.gltf || !responseDto.gltf.href)
48
+ throw new viewer_shared_services_1.ShapeDiverViewerSessionError("Session.uploadGLTF: Upload reply has not the required format.");
49
+ return responseDto;
50
+ }
51
+ catch (e) {
52
+ yield this._utilsManager.handleError(e, retry);
53
+ return yield this.uploadGLTF(blob, conversion, true);
54
+ }
55
+ });
56
+ }
57
+ /**
58
+ * Get all file parameters from the parameter set.
59
+ * If the parameter is not set in the parameter set, the value from the parameter object is used.
60
+ *
61
+ * @param parameters
62
+ * @returns
63
+ */
64
+ getFileParameterSet(parameters) {
65
+ const fileParameterSet = {};
66
+ for (const parameterId in this._sessionEngineCore.parameters) {
67
+ if (this._sessionEngineCore.parameters[parameterId] instanceof
68
+ FileParameter_1.FileParameter) {
69
+ fileParameterSet[parameterId] =
70
+ parameters[parameterId] !== undefined
71
+ ? parameters[parameterId]
72
+ : this._sessionEngineCore.parameters[parameterId].value;
73
+ }
74
+ }
75
+ return fileParameterSet;
76
+ }
77
+ uploadSDTF(arrayBuffers, retry = false) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ this._utilsManager.checkAvailability("file-upload");
80
+ try {
81
+ const responseDto = (yield new sdk_geometry_api_sdk_v2_1.SdtfApi(this._sessionEngineCore.sdkConfig).uploadSdtf(this._sessionEngineCore.sessionId, arrayBuffers.map((arrayBuffer) => {
82
+ return {
83
+ namespace: "pub",
84
+ content_length: arrayBuffer.byteLength,
85
+ content_type: sdk_geometry_api_sdk_v2_1.ReqSdtfType.MODEL_SDTF,
86
+ };
87
+ }))).data;
88
+ if (!responseDto ||
89
+ !responseDto.asset ||
90
+ !responseDto.asset.sdtf ||
91
+ responseDto.asset.sdtf.length !== arrayBuffers.length)
92
+ throw new viewer_shared_services_1.ShapeDiverViewerSessionError("Session.uploadSDTF: Upload reply has not the required format.");
93
+ const promises = arrayBuffers.map((buffer, index) => {
94
+ const url = responseDto.asset.sdtf[index].href;
95
+ return new sdk_geometry_api_sdk_v2_1.UtilsApi(this._sessionEngineCore.sdkConfig).upload(url, buffer, sdk_geometry_api_sdk_v2_1.ReqSdtfType.MODEL_SDTF);
96
+ });
97
+ yield Promise.all(promises);
98
+ return responseDto.asset.sdtf;
99
+ }
100
+ catch (e) {
101
+ yield this._utilsManager.handleError(e, retry);
102
+ return yield this.uploadSDTF(arrayBuffers, true);
103
+ }
104
+ });
105
+ }
106
+ uploadFile(parameterId, data, type, retry = false) {
107
+ return __awaiter(this, void 0, void 0, function* () {
108
+ this._utilsManager.checkAvailability("file-upload");
109
+ try {
110
+ const result = (yield new sdk_geometry_api_sdk_v2_1.FileApi(this._sessionEngineCore.sdkConfig).uploadFile(this._sessionEngineCore.sessionId, {
111
+ [parameterId]: {
112
+ size: data.size,
113
+ format: type,
114
+ filename: data.name === "" ? undefined : data.name,
115
+ },
116
+ })).data;
117
+ if (result &&
118
+ result.asset &&
119
+ result.asset.file &&
120
+ result.asset.file[parameterId]) {
121
+ const fileAsset = result.asset.file[parameterId];
122
+ yield new sdk_geometry_api_sdk_v2_1.UtilsApi(this._sessionEngineCore.sdkConfig).uploadAsset(fileAsset.href, yield data.arrayBuffer(), fileAsset.headers);
123
+ return fileAsset.id;
124
+ }
125
+ else {
126
+ throw new viewer_shared_services_1.ShapeDiverViewerSessionError("Session.uploadFile: Upload reply has not the required format.");
127
+ }
128
+ }
129
+ catch (e) {
130
+ yield this._utilsManager.handleError(e, retry);
131
+ return yield this.uploadFile(parameterId, data, type, true);
132
+ }
133
+ });
134
+ }
135
+ /**
136
+ * Uploads all file parameters and returns the file parameter values.
137
+ * If parameterValues is provided, the file parameter values are added to it.
138
+ *
139
+ * @param parameterValues
140
+ * @returns
141
+ */
142
+ uploadFileParameters(parameterValues) {
143
+ return __awaiter(this, void 0, void 0, function* () {
144
+ const parameterValueSet = parameterValues !== undefined
145
+ ? this.getFileParameterSet(parameterValues)
146
+ : undefined;
147
+ const fileParameterValues = {};
148
+ // load file parameter first
149
+ for (const parameterId in this._sessionEngineCore.parameters) {
150
+ if (this._sessionEngineCore.parameters[parameterId] instanceof
151
+ FileParameter_1.FileParameter) {
152
+ fileParameterValues[parameterId] = yield (this._sessionEngineCore.parameters[parameterId]).upload(parameterValueSet
153
+ ? parameterValueSet[parameterId]
154
+ : undefined);
155
+ if (parameterValues &&
156
+ parameterValues[parameterId] !== undefined) {
157
+ // if a value was provided, we replace it with the returned id
158
+ parameterValues[parameterId] =
159
+ fileParameterValues[parameterId];
160
+ // if the parameter value of the file parameter was used, set the value to the parameter
161
+ if (this._sessionEngineCore.parameters[parameterId]
162
+ .value !== fileParameterValues[parameterId])
163
+ this._sessionEngineCore.parameters[parameterId].value =
164
+ fileParameterValues[parameterId];
165
+ }
166
+ else if (this._sessionEngineCore.parameters[parameterId].value !==
167
+ fileParameterValues[parameterId]) {
168
+ this._sessionEngineCore.parameters[parameterId].value =
169
+ fileParameterValues[parameterId];
170
+ }
171
+ }
172
+ }
173
+ return fileParameterValues;
174
+ });
175
+ }
176
+ }
177
+ exports.FileUploadManager = FileUploadManager;
178
+ //# sourceMappingURL=FileUploadManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileUploadManager.js","sourceRoot":"","sources":["../../../src/implementation/managers/FileUploadManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ResGetModelState } from "@shapediver/sdk.geometry-api-sdk-v2";
2
+ import { ITreeNode } from "@shapediver/viewer.shared.node-tree";
3
+ import { SessionEngineCore } from "../SessionEngineCore";
4
+ export declare class ModelStateManager {
5
+ private readonly _sessionEngineCore;
6
+ private readonly _utilsManager;
7
+ private readonly _converter;
8
+ private readonly _httpClient;
9
+ constructor(sessionEngineCore: SessionEngineCore);
10
+ getModelState(modelStateId?: string): Promise<ResGetModelState>;
11
+ createModelState(parameterValues?: {
12
+ [key: string]: unknown;
13
+ }, omitSessionParameterValues?: boolean, image?: (() => string) | (() => Promise<string>) | string | Promise<string> | Blob | File, data?: Record<string, any>, arScene?: (() => Promise<ArrayBuffer>) | ArrayBuffer | (() => Promise<Blob>) | Blob | File, retry?: boolean): Promise<string>;
14
+ customizeWithModelState(modelState: string | ResGetModelState, retry?: boolean): Promise<ITreeNode>;
15
+ }
16
+ //# sourceMappingURL=ModelStateManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelStateManager.d.ts","sourceRoot":"","sources":["../../../src/implementation/managers/ModelStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAKN,gBAAgB,EAEhB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAC,SAAS,EAAW,MAAM,qCAAqC,CAAC;AAMxE,OAAO,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAGvD,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;gBAEvC,iBAAiB,EAAE,iBAAiB;IAKnC,aAAa,CACzB,YAAY,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,gBAAgB,CAAC;IAoBf,gBAAgB,CAC5B,eAAe,GAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAM,EAC9C,0BAA0B,GAAE,OAAe,EAC3C,KAAK,CAAC,EACH,CAAC,MAAM,MAAM,CAAC,GACd,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GACvB,MAAM,GACN,OAAO,CAAC,MAAM,CAAC,GACf,IAAI,GACJ,IAAI,EACP,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,OAAO,CAAC,EACL,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC,GAC5B,WAAW,GACX,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GACrB,IAAI,GACJ,IAAI,EACP,KAAK,UAAQ,GACX,OAAO,CAAC,MAAM,CAAC;IA8GL,uBAAuB,CACnC,UAAU,EAAE,MAAM,GAAG,gBAAgB,EACrC,KAAK,UAAQ,GACX,OAAO,CAAC,SAAS,CAAC;CA6BrB"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ModelStateManager = void 0;
13
+ const sdk_geometry_api_sdk_v2_1 = require("@shapediver/sdk.geometry-api-sdk-v2");
14
+ const viewer_shared_node_tree_1 = require("@shapediver/viewer.shared.node-tree");
15
+ const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
16
+ class ModelStateManager {
17
+ constructor(sessionEngineCore) {
18
+ this._converter = viewer_shared_services_1.Converter.instance;
19
+ this._httpClient = viewer_shared_services_1.HttpClient.instance;
20
+ this._sessionEngineCore = sessionEngineCore;
21
+ this._utilsManager = sessionEngineCore.utilsManager;
22
+ }
23
+ getModelState(modelStateId) {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ this._utilsManager.checkAvailability();
26
+ try {
27
+ const id = modelStateId || this._sessionEngineCore.modelStateId;
28
+ if (!id)
29
+ throw new viewer_shared_services_1.ShapeDiverViewerSessionError("Session.getModelState: No model state id available.");
30
+ const response = (yield new sdk_geometry_api_sdk_v2_1.ModelStateApi(this._sessionEngineCore.sdkConfig).getModelState(id)).data;
31
+ return response;
32
+ }
33
+ catch (e) {
34
+ throw this._httpClient.convertError(e);
35
+ }
36
+ });
37
+ }
38
+ createModelState(parameterValues = {}, omitSessionParameterValues = false, image, data, arScene, retry = false) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ this._utilsManager.checkAvailability();
41
+ try {
42
+ const promises = [];
43
+ // process the parameters
44
+ const parameterSet = {};
45
+ promises.push(this._sessionEngineCore.fileUploadManager
46
+ .uploadFileParameters(parameterValues)
47
+ .then(() => {
48
+ // create a set of the current validated parameter values
49
+ for (const parameterId in this._sessionEngineCore
50
+ .parameters) {
51
+ // if the parameter has not been set, we do not include it in the parameter set if the omitSessionParameterValues flag is set
52
+ if (!(omitSessionParameterValues === true &&
53
+ parameterValues[parameterId] === undefined)) {
54
+ parameterSet[parameterId] = (" " +
55
+ this._sessionEngineCore.parameters[parameterId].stringify(parameterValues[parameterId])).slice(1);
56
+ }
57
+ }
58
+ }));
59
+ // process the image input
60
+ let imageData;
61
+ let imageArrayBuffer;
62
+ if (image) {
63
+ promises.push(this._utilsManager
64
+ .processImageInput(image)
65
+ .then((result) => {
66
+ imageData = result === null || result === void 0 ? void 0 : result.imageData;
67
+ imageArrayBuffer = result === null || result === void 0 ? void 0 : result.arrayBuffer;
68
+ }));
69
+ }
70
+ // process the arScene input
71
+ let arSceneId;
72
+ if (arScene) {
73
+ promises.push(this._converter
74
+ .convertToBlob(arScene)
75
+ .then((arSceneBlob) => new sdk_geometry_api_sdk_v2_1.GltfApi(this._sessionEngineCore.sdkConfig).uploadGltf(this._sessionEngineCore.sessionId, new File([arSceneBlob], "arScene.gltf", {
76
+ type: "model/gltf-binary",
77
+ }), sdk_geometry_api_sdk_v2_1.QueryGltfConversion.SCENE))
78
+ .then((arSceneResponseDto) => {
79
+ var _a;
80
+ arSceneId = (_a = arSceneResponseDto.data.gltf) === null || _a === void 0 ? void 0 : _a.sceneId;
81
+ }));
82
+ }
83
+ // wait for all promises to resolve
84
+ yield Promise.all(promises);
85
+ // create the model state
86
+ const response = (yield new sdk_geometry_api_sdk_v2_1.ModelStateApi(this._sessionEngineCore.sdkConfig).createModelState(this._sessionEngineCore.sessionId, {
87
+ parameters: parameterSet,
88
+ data: data,
89
+ image: imageData,
90
+ arSceneId: arSceneId,
91
+ })).data;
92
+ if (imageData && imageArrayBuffer)
93
+ yield new sdk_geometry_api_sdk_v2_1.UtilsApi(this._sessionEngineCore.sdkConfig).uploadAsset(response.asset.modelState.href, imageArrayBuffer, response.asset.modelState.headers);
94
+ return response.modelState.id;
95
+ }
96
+ catch (e) {
97
+ yield this._utilsManager.handleError(e, retry);
98
+ return yield this.createModelState(parameterValues, omitSessionParameterValues, image, data, arScene, true);
99
+ }
100
+ });
101
+ }
102
+ customizeWithModelState(modelState, retry = false) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ this._utilsManager.checkAvailability();
105
+ try {
106
+ // get the model state if it is not already a response
107
+ let response;
108
+ if (typeof modelState === "string") {
109
+ response = (yield new sdk_geometry_api_sdk_v2_1.ModelStateApi(this._sessionEngineCore.sdkConfig).getModelState(modelState)).data;
110
+ }
111
+ else {
112
+ response = modelState;
113
+ }
114
+ if (!response.modelState)
115
+ return new viewer_shared_node_tree_1.TreeNode();
116
+ // read out the parameter values from the model state
117
+ for (const parameterId in response.modelState.parameters)
118
+ this._sessionEngineCore.parameters[parameterId].value =
119
+ response.modelState.parameters[parameterId];
120
+ return this._sessionEngineCore.customizationManager.customize();
121
+ }
122
+ catch (e) {
123
+ yield this._utilsManager.handleError(e, retry);
124
+ return yield this.customizeWithModelState(modelState, true);
125
+ }
126
+ });
127
+ }
128
+ }
129
+ exports.ModelStateManager = ModelStateManager;
130
+ //# sourceMappingURL=ModelStateManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelStateManager.js","sourceRoot":"","sources":["../../../src/implementation/managers/ModelStateManager.ts"],"names":[],"mappings":"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"}