@shapediver/viewer.session-engine.session-engine 1.8.14 → 1.10.5
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/dist/implementation/OutputLoader.d.ts +5 -5
- package/dist/implementation/OutputLoader.d.ts.map +1 -1
- package/dist/implementation/OutputLoader.js +39 -38
- package/dist/implementation/OutputLoader.js.map +1 -1
- package/dist/implementation/Session.d.ts +27 -28
- package/dist/implementation/Session.d.ts.map +1 -1
- package/dist/implementation/Session.js +241 -261
- package/dist/implementation/Session.js.map +1 -1
- package/dist/implementation/SessionData.d.ts +4 -4
- package/dist/implementation/SessionData.d.ts.map +1 -1
- package/dist/implementation/SessionData.js +10 -10
- package/dist/implementation/SessionData.js.map +1 -1
- package/dist/implementation/SessionOutputData.d.ts +4 -4
- package/dist/implementation/SessionOutputData.d.ts.map +1 -1
- package/dist/implementation/SessionOutputData.js +10 -10
- package/dist/implementation/SessionOutputData.js.map +1 -1
- package/dist/interfaces/ISession.d.ts +17 -13
- package/dist/interfaces/ISession.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -12,19 +12,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.Session = void 0;
|
|
13
13
|
const tsyringe_1 = require("tsyringe");
|
|
14
14
|
const viewer_shared_services_1 = require("@shapediver/viewer.shared.services");
|
|
15
|
-
const api_geometry_api_dto_v1_1 = require("@shapediver/api.geometry-api-dto-v1");
|
|
16
15
|
const OutputDelayException_1 = require("./OutputDelayException");
|
|
17
16
|
const OutputLoader_1 = require("./OutputLoader");
|
|
18
17
|
const SessionTreeNode_1 = require("./SessionTreeNode");
|
|
19
18
|
const SessionData_1 = require("./SessionData");
|
|
19
|
+
const sdk_geometry_api_sdk_v2_1 = require("@shapediver/sdk.geometry-api-sdk-v2");
|
|
20
20
|
class Session {
|
|
21
21
|
constructor(properties) {
|
|
22
22
|
this._exports = {};
|
|
23
23
|
this._httpClient = tsyringe_1.container.resolve(viewer_shared_services_1.HttpClient);
|
|
24
24
|
this._logger = tsyringe_1.container.resolve(viewer_shared_services_1.Logger);
|
|
25
25
|
this._outputs = {};
|
|
26
|
-
this._parameters = {};
|
|
27
26
|
this._parameterValues = {};
|
|
27
|
+
this._parameters = {};
|
|
28
28
|
this._performanceEvaluator = tsyringe_1.container.resolve(viewer_shared_services_1.PerformanceEvaluator);
|
|
29
29
|
this._sessionEngineId = tsyringe_1.container.resolve(viewer_shared_services_1.UuidGenerator).create();
|
|
30
30
|
this._closed = false;
|
|
@@ -35,7 +35,6 @@ class Session {
|
|
|
35
35
|
"X-ShapeDiver-BuildDate": ''
|
|
36
36
|
};
|
|
37
37
|
this._initialized = false;
|
|
38
|
-
this._settingsConfig = {};
|
|
39
38
|
this._id = properties.id;
|
|
40
39
|
this._ticket = properties.ticket;
|
|
41
40
|
this._modelViewUrl = properties.modelViewUrl;
|
|
@@ -43,12 +42,8 @@ class Session {
|
|
|
43
42
|
this._headers['X-ShapeDiver-BuildDate'] = properties.buildDate;
|
|
44
43
|
this._headers['X-ShapeDiver-BuildVersion'] = properties.buildVersion;
|
|
45
44
|
this._outputLoader = new OutputLoader_1.OutputLoader();
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return this._authorTicket;
|
|
49
|
-
}
|
|
50
|
-
set authorTicket(value) {
|
|
51
|
-
this._authorTicket = value;
|
|
45
|
+
this._sdk = sdk_geometry_api_sdk_v2_1.create(this._modelViewUrl, this._bearerToken);
|
|
46
|
+
this._sdk.setConfigurationValue(sdk_geometry_api_sdk_v2_1.ShapeDiverSdkConfigType.REQUEST_HEADERS, this._headers);
|
|
52
47
|
}
|
|
53
48
|
get bearerToken() {
|
|
54
49
|
return this._bearerToken;
|
|
@@ -56,6 +51,15 @@ class Session {
|
|
|
56
51
|
set bearerToken(value) {
|
|
57
52
|
this._bearerToken = value;
|
|
58
53
|
}
|
|
54
|
+
get canUploadGLTF() {
|
|
55
|
+
try {
|
|
56
|
+
this.checkAvailability('gltf-upload');
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
59
63
|
get exports() {
|
|
60
64
|
return this._exports;
|
|
61
65
|
}
|
|
@@ -71,43 +75,54 @@ class Session {
|
|
|
71
75
|
get outputs() {
|
|
72
76
|
return this._outputs;
|
|
73
77
|
}
|
|
74
|
-
get parameters() {
|
|
75
|
-
return this._parameters;
|
|
76
|
-
}
|
|
77
78
|
get parameterValues() {
|
|
78
79
|
return this._parameterValues;
|
|
79
80
|
}
|
|
81
|
+
get parameters() {
|
|
82
|
+
return this._parameters;
|
|
83
|
+
}
|
|
80
84
|
set refreshBearerToken(value) {
|
|
81
85
|
this._refreshBearerToken = value;
|
|
82
86
|
}
|
|
83
|
-
get sessionResponse() {
|
|
84
|
-
return this._sessionResponse;
|
|
85
|
-
}
|
|
86
|
-
get settingsConfig() {
|
|
87
|
-
return this._settingsConfig;
|
|
88
|
-
}
|
|
89
87
|
get ticket() {
|
|
90
88
|
return this._ticket;
|
|
91
89
|
}
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
get viewerSettings() {
|
|
91
|
+
return this._viewerSettings;
|
|
92
|
+
}
|
|
93
|
+
handleError(topic, scope, e) {
|
|
94
94
|
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
if (e.status && e.status === 410) {
|
|
96
|
+
this._logger.warn(topic, `The session has been closed, trying to initialize.`);
|
|
97
97
|
try {
|
|
98
|
-
|
|
98
|
+
this._initialized = false;
|
|
99
|
+
yield this.init(this.parameterValues);
|
|
99
100
|
}
|
|
100
101
|
catch (e) {
|
|
101
|
-
if (e.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
else {
|
|
105
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.close: Session closing failed.`, false);
|
|
106
|
-
}
|
|
107
|
-
return false;
|
|
102
|
+
if (e instanceof viewer_shared_services_1.ShapeDiverViewerError || e instanceof sdk_geometry_api_sdk_v2_1.ShapeDiverError)
|
|
103
|
+
throw e;
|
|
104
|
+
throw this._logger.handleError(topic, scope, e);
|
|
108
105
|
}
|
|
109
106
|
}
|
|
110
|
-
|
|
107
|
+
else if (e.status && e.status === 403) {
|
|
108
|
+
throw this._logger.handleError(topic, scope, e);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw this._logger.handleError(topic, scope, e);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
close() {
|
|
116
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
117
|
+
this.checkAvailability('close');
|
|
118
|
+
try {
|
|
119
|
+
yield this._sdk.session.close(this._sessionId);
|
|
120
|
+
this._closed = true;
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.close', e);
|
|
125
|
+
}
|
|
111
126
|
});
|
|
112
127
|
}
|
|
113
128
|
customize(cancelRequest) {
|
|
@@ -119,313 +134,237 @@ class Session {
|
|
|
119
134
|
var _a, _b;
|
|
120
135
|
return __awaiter(this, void 0, void 0, function* () {
|
|
121
136
|
if (this._initialized === true) {
|
|
122
|
-
|
|
123
|
-
|
|
137
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError('Session.init: Session already initialized.');
|
|
138
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.init', error);
|
|
124
139
|
}
|
|
125
140
|
try {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
throw this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.init: Session init failed.`, true, false);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
this._settingsConfig = sessionResponse.config;
|
|
141
|
-
this._parameters = {};
|
|
142
|
-
this._outputs = {};
|
|
143
|
-
this._exports = {};
|
|
144
|
-
this._sessionResponse = this.mergeResponses(sessionResponse, sessionResponse, this._parameters, this._outputs, this._exports);
|
|
145
|
-
this._authorTicket = !!(((_a = this._sessionResponse.actions) === null || _a === void 0 ? void 0 : _a.filter(v => v.name === 'defaultparam')[0]) && ((_b = this._sessionResponse.actions) === null || _b === void 0 ? void 0 : _b.filter(v => v.name === 'configure')[0]));
|
|
141
|
+
this._performanceEvaluator.startSection('sessionResponse');
|
|
142
|
+
this._responseDto = yield this._sdk.session.init(this._ticket);
|
|
143
|
+
this._performanceEvaluator.endSection('sessionResponse');
|
|
144
|
+
this._viewerSettings = (_a = this._responseDto.viewer) === null || _a === void 0 ? void 0 : _a.config;
|
|
145
|
+
this._sessionId = this._responseDto.sessionId;
|
|
146
|
+
this._modelId = (_b = this._responseDto.model) === null || _b === void 0 ? void 0 : _b.id;
|
|
147
|
+
if (!this._sessionId)
|
|
148
|
+
throw new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.init: Initialization of session failed. ResponseDto did not have a sessionId.`);
|
|
149
|
+
if (!this._modelId)
|
|
150
|
+
throw new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.init: Initialization of session failed. ResponseDto did not have a model.id.`);
|
|
151
|
+
this.updateResponseDto(this._responseDto);
|
|
146
152
|
this._initialized = true;
|
|
153
|
+
if (parameterValues) {
|
|
154
|
+
const responseDto = yield this._sdk.utils.submitAndWaitForCustomization(this._sdk, this._sessionId, parameterValues);
|
|
155
|
+
this.updateResponseDto(responseDto);
|
|
156
|
+
}
|
|
147
157
|
}
|
|
148
158
|
catch (e) {
|
|
149
|
-
throw this.
|
|
159
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.init', e);
|
|
150
160
|
}
|
|
151
161
|
});
|
|
152
162
|
}
|
|
153
|
-
|
|
154
|
-
if (!r1)
|
|
155
|
-
r1 = { version: r2.version };
|
|
156
|
-
if (r2.version)
|
|
157
|
-
r1.version = r2.version;
|
|
158
|
-
if (r2.collection)
|
|
159
|
-
r1.collection = r2.collection;
|
|
160
|
-
if (r2.actions) {
|
|
161
|
-
for (let i = 0, len = r2.actions.length; i < len; i++) {
|
|
162
|
-
r1.actions = r1.actions || [];
|
|
163
|
-
if (r1.actions.findIndex((value) => value.name === r2.actions[i].name) === -1)
|
|
164
|
-
r1.actions.push(r2.actions[i]);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
if (r2.templates) {
|
|
168
|
-
for (let i = 0, len = r2.templates.length; i < len; i++) {
|
|
169
|
-
r1.templates = r1.templates || [];
|
|
170
|
-
if (r1.templates.findIndex((value) => value.name === r2.actions[i].name) === -1)
|
|
171
|
-
r1.templates.push(r2.templates[i]);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
if (r2.config && !r1.config)
|
|
175
|
-
r1.config = r2.config;
|
|
176
|
-
if (r2.name && !r1.name)
|
|
177
|
-
r1.name = r2.name;
|
|
178
|
-
if (r2.parameters) {
|
|
179
|
-
for (let parameterId in r2.parameters) {
|
|
180
|
-
r1.parameters = r1.parameters || {};
|
|
181
|
-
r1.parameters[parameterId] = r1.parameters[parameterId] || r2.parameters[parameterId];
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (r2.outputs) {
|
|
185
|
-
for (let outputId in r2.outputs) {
|
|
186
|
-
r1.outputs = r1.outputs || {};
|
|
187
|
-
if ('version' in r2.outputs[outputId] || !(r1.outputs[outputId] && 'version' in r1.outputs[outputId]))
|
|
188
|
-
r1.outputs[outputId] = r2.outputs[outputId];
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
if (r2.exports) {
|
|
192
|
-
for (let exportId in r2.exports) {
|
|
193
|
-
r1.exports = r1.exports || {};
|
|
194
|
-
if ('version' in r2.exports[exportId] || !(r1.exports[exportId] && 'version' in r1.exports[exportId]))
|
|
195
|
-
r1.exports[exportId] = r2.exports[exportId];
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
if (parameters) {
|
|
199
|
-
for (let parameterId in r1.parameters) {
|
|
200
|
-
if (parameters[parameterId])
|
|
201
|
-
continue;
|
|
202
|
-
parameters[parameterId] = r1.parameters[parameterId];
|
|
203
|
-
parameters[parameterId].id = parameterId;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
if (exports) {
|
|
207
|
-
for (let exportId in r1.exports)
|
|
208
|
-
if (r1.exports[exportId].type === api_geometry_api_dto_v1_1.ShapeDiverResponseExportDefinitionType.EMAIL || r1.exports[exportId].type === api_geometry_api_dto_v1_1.ShapeDiverResponseExportDefinitionType.DOWNLOAD) {
|
|
209
|
-
exports[exportId] = r1.exports[exportId];
|
|
210
|
-
exports[exportId].id = exportId;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
if (outputs) {
|
|
214
|
-
for (let outputId in r1.outputs) {
|
|
215
|
-
outputs[outputId] = r1.outputs[outputId];
|
|
216
|
-
outputs[outputId].id = outputId;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
return r1;
|
|
220
|
-
}
|
|
221
|
-
saveDefaultParameters() {
|
|
222
|
-
var _a, _b, _c;
|
|
163
|
+
loadOutputs(cancelRequest = () => false) {
|
|
223
164
|
return __awaiter(this, void 0, void 0, function* () {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
165
|
+
this.checkAvailability();
|
|
166
|
+
const o = Object.assign({}, this._outputs);
|
|
228
167
|
try {
|
|
229
|
-
|
|
230
|
-
|
|
168
|
+
const node = yield this._outputLoader.loadOutputs(this._responseDto, o, this.loadData.bind(this));
|
|
169
|
+
node.data.push(new SessionData_1.SessionData(this._responseDto));
|
|
170
|
+
return node;
|
|
231
171
|
}
|
|
232
172
|
catch (e) {
|
|
233
|
-
if (e
|
|
234
|
-
this.
|
|
173
|
+
if (e instanceof OutputDelayException_1.OutputDelayException) {
|
|
174
|
+
yield this.timeout(e.delay);
|
|
235
175
|
}
|
|
236
176
|
else {
|
|
237
|
-
this.
|
|
177
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.loadOutputs', e);
|
|
178
|
+
}
|
|
179
|
+
if (cancelRequest())
|
|
180
|
+
return new SessionTreeNode_1.SessionTreeNode();
|
|
181
|
+
let outputMapping = {};
|
|
182
|
+
for (let output in o)
|
|
183
|
+
outputMapping[output] = o[output].version;
|
|
184
|
+
try {
|
|
185
|
+
const responseDto = yield this._sdk.output.getCache(this._sessionId, outputMapping);
|
|
186
|
+
if (cancelRequest())
|
|
187
|
+
return new SessionTreeNode_1.SessionTreeNode();
|
|
188
|
+
this.updateResponseDto(responseDto);
|
|
189
|
+
return yield this.loadOutputs(cancelRequest);
|
|
190
|
+
}
|
|
191
|
+
catch (e) {
|
|
192
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.loadOutputs', e);
|
|
238
193
|
}
|
|
239
|
-
return false;
|
|
240
194
|
}
|
|
241
195
|
});
|
|
242
196
|
}
|
|
243
|
-
|
|
244
|
-
var _a, _b, _c;
|
|
197
|
+
requestExport(exportId, parameters) {
|
|
245
198
|
return __awaiter(this, void 0, void 0, function* () {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
199
|
+
this.checkAvailability('export');
|
|
200
|
+
try {
|
|
201
|
+
const responseDto = yield this._sdk.utils.submitAndWaitForExport(this._sdk, this._sessionId, { exports: { id: exportId }, parameters });
|
|
202
|
+
this.updateResponseDto(responseDto);
|
|
203
|
+
return this.exports[exportId];
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.requestExport', e);
|
|
249
207
|
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
saveDefaultParameters() {
|
|
211
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
212
|
+
this.checkAvailability('defaultparam', true);
|
|
250
213
|
try {
|
|
251
|
-
yield this.
|
|
214
|
+
yield this._sdk.model.setDefaultParams(this._modelId, this._parameterValues);
|
|
252
215
|
return true;
|
|
253
216
|
}
|
|
254
217
|
catch (e) {
|
|
255
|
-
|
|
256
|
-
this._logger.httpError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveParameterProperties: Saving of parameter properties failed.`, e.response.status, false);
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveParameterProperties: Saving of parameter properties failed.`, false);
|
|
260
|
-
}
|
|
261
|
-
return false;
|
|
218
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveDefaultParameters', e);
|
|
262
219
|
}
|
|
263
220
|
});
|
|
264
221
|
}
|
|
265
222
|
saveExportProperties(exports) {
|
|
266
|
-
var _a, _b, _c;
|
|
267
223
|
return __awaiter(this, void 0, void 0, function* () {
|
|
268
|
-
|
|
269
|
-
this._logger.warn(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveExportProperties: Session does not have the required action.');
|
|
270
|
-
return false;
|
|
271
|
-
}
|
|
224
|
+
this.checkAvailability('export-definition', true);
|
|
272
225
|
try {
|
|
273
|
-
yield this.
|
|
226
|
+
yield this._sdk.export.updateDefinitions(this._modelId, exports);
|
|
274
227
|
return true;
|
|
275
228
|
}
|
|
276
229
|
catch (e) {
|
|
277
|
-
|
|
278
|
-
this._logger.httpError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveExportProperties: Saving of export properties failed.`, e.response.status, false);
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveExportProperties: Saving of export properties failed.`, false);
|
|
282
|
-
}
|
|
283
|
-
return false;
|
|
230
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveExportProperties', e);
|
|
284
231
|
}
|
|
285
232
|
});
|
|
286
233
|
}
|
|
287
234
|
saveOutputProperties(outputs) {
|
|
288
|
-
var _a, _b, _c;
|
|
289
235
|
return __awaiter(this, void 0, void 0, function* () {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
236
|
+
this.checkAvailability('output-definition', true);
|
|
237
|
+
try {
|
|
238
|
+
yield this._sdk.output.updateDefinitions(this._modelId, outputs);
|
|
239
|
+
return true;
|
|
293
240
|
}
|
|
241
|
+
catch (e) {
|
|
242
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveOutputProperties', e);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
saveParameterProperties(parameters) {
|
|
247
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
248
|
+
this.checkAvailability('parameter-definition', true);
|
|
294
249
|
try {
|
|
295
|
-
yield this.
|
|
250
|
+
yield this._sdk.model.updateParameterDefinitions(this._modelId, parameters);
|
|
296
251
|
return true;
|
|
297
252
|
}
|
|
298
253
|
catch (e) {
|
|
299
|
-
|
|
300
|
-
this._logger.httpError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveOutputProperties: Saving of output properties failed.`, e.response.status, false);
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveOutputProperties: Saving of output properties failed.`, false);
|
|
304
|
-
}
|
|
305
|
-
return false;
|
|
254
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveParameterProperties', e);
|
|
306
255
|
}
|
|
307
256
|
});
|
|
308
257
|
}
|
|
309
258
|
saveSettings(json) {
|
|
310
|
-
var _a, _b, _c;
|
|
311
259
|
return __awaiter(this, void 0, void 0, function* () {
|
|
312
|
-
|
|
313
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, new viewer_shared_services_1.SDError('Session.saveSettings: Session has to be in edit mode to be able to save the settings.'));
|
|
314
|
-
return false;
|
|
315
|
-
}
|
|
260
|
+
this.checkAvailability('configure', true);
|
|
316
261
|
try {
|
|
317
|
-
yield this.
|
|
262
|
+
yield this._sdk.model.updateConfig(this._modelId, json);
|
|
318
263
|
return true;
|
|
319
264
|
}
|
|
320
265
|
catch (e) {
|
|
321
|
-
|
|
322
|
-
|
|
266
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveSettings', e);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
uploadFile(parameterId, data, type) {
|
|
271
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
272
|
+
this.checkAvailability('upload');
|
|
273
|
+
try {
|
|
274
|
+
const responseDto = yield this._sdk.file.requestUpload(this._sessionId, {
|
|
275
|
+
[parameterId]: { size: data.size, format: type }
|
|
276
|
+
});
|
|
277
|
+
if (responseDto && responseDto.asset && responseDto.asset.file && responseDto.asset.file[parameterId]) {
|
|
278
|
+
const fileAsset = responseDto.asset.file[parameterId];
|
|
279
|
+
yield this._sdk.utils.upload(fileAsset.href, yield data.arrayBuffer(), type);
|
|
280
|
+
return fileAsset.id;
|
|
323
281
|
}
|
|
324
282
|
else {
|
|
325
|
-
|
|
283
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.uploadFile: Upload reply has not the required format.`);
|
|
284
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadFile', error);
|
|
326
285
|
}
|
|
327
|
-
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadFile', e);
|
|
328
289
|
}
|
|
329
290
|
});
|
|
330
291
|
}
|
|
331
|
-
|
|
292
|
+
uploadGLTF(blob, conversion = sdk_geometry_api_sdk_v2_1.ShapeDiverRequestGltfUploadQueryConversion.NONE) {
|
|
332
293
|
return __awaiter(this, void 0, void 0, function* () {
|
|
333
|
-
|
|
334
|
-
if (contentType)
|
|
335
|
-
headers = Object.assign({ "Content-Type": contentType }, this._headers);
|
|
336
|
-
method = method.toLowerCase();
|
|
337
|
-
if (method !== 'post' && method !== 'get' && method !== 'patch')
|
|
338
|
-
throw this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, new viewer_shared_services_1.SDError('Session: Method ' + method + ' not recognized.'));
|
|
294
|
+
this.checkAvailability('gltf-upload');
|
|
339
295
|
try {
|
|
340
|
-
|
|
296
|
+
const responseDto = yield this._sdk.gltf.upload(this._sessionId, yield blob.arrayBuffer(), 'model/gltf-binary', conversion);
|
|
297
|
+
if (!responseDto || !responseDto.gltf || !responseDto.gltf.href) {
|
|
298
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.uploadGLTF: Upload reply has not the required format.`);
|
|
299
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadGLTF', error);
|
|
300
|
+
}
|
|
301
|
+
return responseDto.gltf.href;
|
|
341
302
|
}
|
|
342
303
|
catch (e) {
|
|
343
|
-
|
|
344
|
-
if (!this._refreshBearerToken) {
|
|
345
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, new viewer_shared_services_1.SDError('Session.sessionCommunication: Session request failed. Bearer Token invalid, please try to supply a valid token or assign the "refreshBearerToken" callback.'));
|
|
346
|
-
throw e;
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
const bearerToken = this.bearerToken;
|
|
350
|
-
const newToken = this._refreshBearerToken();
|
|
351
|
-
if (bearerToken === newToken) {
|
|
352
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, new viewer_shared_services_1.SDError('Session.sessionCommunication: Session request failed. Bearer Token invalid, callback "refreshBearerToken" supplied the same token.'));
|
|
353
|
-
throw e;
|
|
354
|
-
}
|
|
355
|
-
else {
|
|
356
|
-
this.bearerToken = newToken;
|
|
357
|
-
return this.sessionCommunication(href, method, data, contentType);
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
throw e;
|
|
304
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadGLTF', e);
|
|
362
305
|
}
|
|
363
306
|
});
|
|
364
307
|
}
|
|
365
|
-
|
|
308
|
+
checkAvailability(action, checkForModelId = false) {
|
|
366
309
|
var _a;
|
|
310
|
+
if (!this._responseDto) {
|
|
311
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: responseDto not available.`);
|
|
312
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
313
|
+
}
|
|
314
|
+
if (!this._sessionId) {
|
|
315
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: sessionId not available.`);
|
|
316
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
317
|
+
}
|
|
318
|
+
if (checkForModelId && !this._modelId) {
|
|
319
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: modelId not available.`);
|
|
320
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
321
|
+
}
|
|
322
|
+
if (action && !this._responseDto.actions) {
|
|
323
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: actions not available.`);
|
|
324
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
325
|
+
}
|
|
326
|
+
const responseDtoAction = (_a = this._responseDto.actions) === null || _a === void 0 ? void 0 : _a.find(a => a.name === action);
|
|
327
|
+
if (action && !responseDtoAction) {
|
|
328
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: action ${action} not available.`);
|
|
329
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
customizeSession(parameters, cancelRequest) {
|
|
367
333
|
return __awaiter(this, void 0, void 0, function* () {
|
|
368
|
-
|
|
369
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, new viewer_shared_services_1.SDError('Session.customizeSession: Session not initialized.'));
|
|
370
|
-
return new SessionTreeNode_1.SessionTreeNode();
|
|
371
|
-
}
|
|
334
|
+
this.checkAvailability('customize');
|
|
372
335
|
try {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
}
|
|
381
|
-
catch (e) {
|
|
382
|
-
if (e.response && e.response.status) {
|
|
383
|
-
if (e.response && e.response.status && e.response.status === 410 && !this._closed) {
|
|
384
|
-
this._logger.info(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.customizeSession: Session customization failed. Session expired. Re-initializing session.');
|
|
385
|
-
this._initialized = false;
|
|
386
|
-
yield this.init(parameters);
|
|
387
|
-
if (cancelRequest())
|
|
388
|
-
return new SessionTreeNode_1.SessionTreeNode();
|
|
389
|
-
return this.loadOutputs(parameters, cancelRequest);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
if (e.response && e.response.status) {
|
|
393
|
-
throw this._logger.httpError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.customizeSession: Session customization failed.`, e.response.status, true);
|
|
394
|
-
}
|
|
395
|
-
else {
|
|
396
|
-
throw this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.customizeSession: Session customization failed.`, true, false);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
this._sessionResponse = this.mergeResponses(this._sessionResponse, responseCustomize, this._parameters, this._outputs, this._exports);
|
|
400
|
-
return this.loadOutputs(parameters, cancelRequest);
|
|
336
|
+
this._performanceEvaluator.startSection('sessionResponse');
|
|
337
|
+
const responseDto = yield this._sdk.utils.submitAndWaitForCustomization(this._sdk, this._sessionId, parameters);
|
|
338
|
+
this._performanceEvaluator.endSection('sessionResponse');
|
|
339
|
+
if (cancelRequest())
|
|
340
|
+
return new SessionTreeNode_1.SessionTreeNode();
|
|
341
|
+
this.updateResponseDto(responseDto);
|
|
342
|
+
return this.loadOutputs(cancelRequest);
|
|
401
343
|
}
|
|
402
344
|
catch (e) {
|
|
403
|
-
|
|
345
|
+
if (e.response && e.response.status) {
|
|
346
|
+
if (e.response && e.response.status && e.response.status === 410 && !this._closed) {
|
|
347
|
+
this._logger.info(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.customizeSession: Session customization failed. Session expired. Re-initializing session.');
|
|
348
|
+
this._initialized = false;
|
|
349
|
+
yield this.init(parameters);
|
|
350
|
+
if (cancelRequest())
|
|
351
|
+
return new SessionTreeNode_1.SessionTreeNode();
|
|
352
|
+
return this.loadOutputs(cancelRequest);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.customizeSession', e);
|
|
404
356
|
}
|
|
405
357
|
});
|
|
406
358
|
}
|
|
407
|
-
|
|
408
|
-
var _a, _b;
|
|
359
|
+
loadData(href, config = { responseType: 'blob' }) {
|
|
409
360
|
return __awaiter(this, void 0, void 0, function* () {
|
|
410
|
-
|
|
361
|
+
this.checkAvailability();
|
|
411
362
|
try {
|
|
412
|
-
const
|
|
413
|
-
|
|
414
|
-
return node;
|
|
363
|
+
const response = yield this._httpClient.get(`${this.modelViewUrl}/api/v2/session/${this._sessionId}/image?url=${btoa(href)}`, config);
|
|
364
|
+
return response.data;
|
|
415
365
|
}
|
|
416
366
|
catch (e) {
|
|
417
|
-
|
|
418
|
-
yield this.timeout(e.delay);
|
|
419
|
-
if (cancelRequest())
|
|
420
|
-
return new SessionTreeNode_1.SessionTreeNode();
|
|
421
|
-
let outputMapping = {};
|
|
422
|
-
for (let output in o)
|
|
423
|
-
outputMapping[output] = o[output].version;
|
|
424
|
-
let responseCache = (yield this.sessionCommunication((_a = this._sessionResponse.actions) === null || _a === void 0 ? void 0 : _a.filter(v => v.name === 'cache')[0].href, (_b = this._sessionResponse.actions) === null || _b === void 0 ? void 0 : _b.filter(v => v.name === 'cache')[0].method.toLowerCase(), outputMapping, 'application/json')).data;
|
|
425
|
-
if (cancelRequest())
|
|
426
|
-
return new SessionTreeNode_1.SessionTreeNode();
|
|
427
|
-
this._sessionResponse = this.mergeResponses(this._sessionResponse, responseCache, this._parameters, this._outputs, this._exports);
|
|
428
|
-
return yield this.loadOutputs(parameters, cancelRequest);
|
|
367
|
+
throw yield this.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.loadData', e);
|
|
429
368
|
}
|
|
430
369
|
});
|
|
431
370
|
}
|
|
@@ -434,6 +373,47 @@ class Session {
|
|
|
434
373
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
435
374
|
});
|
|
436
375
|
}
|
|
376
|
+
updateResponseDto(responseDto) {
|
|
377
|
+
if (!this._responseDto) {
|
|
378
|
+
this._responseDto = responseDto;
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (responseDto.parameters) {
|
|
382
|
+
for (let parameterId in responseDto.parameters) {
|
|
383
|
+
this._responseDto.parameters = this._responseDto.parameters || {};
|
|
384
|
+
this._responseDto.parameters[parameterId] = this._responseDto.parameters[parameterId] || responseDto.parameters[parameterId];
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (responseDto.outputs) {
|
|
388
|
+
for (let outputId in responseDto.outputs) {
|
|
389
|
+
this._responseDto.outputs = this._responseDto.outputs || {};
|
|
390
|
+
if ('version' in responseDto.outputs[outputId] || !(this._responseDto.outputs[outputId] && 'version' in this._responseDto.outputs[outputId]))
|
|
391
|
+
this._responseDto.outputs[outputId] = responseDto.outputs[outputId];
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
if (responseDto.exports) {
|
|
395
|
+
for (let exportId in responseDto.exports) {
|
|
396
|
+
this._responseDto.exports = this._responseDto.exports || {};
|
|
397
|
+
if ('version' in responseDto.exports[exportId] || !(this._responseDto.exports[exportId] && 'version' in this._responseDto.exports[exportId]))
|
|
398
|
+
this._responseDto.exports[exportId] = responseDto.exports[exportId];
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
for (let parameterId in this._responseDto.parameters) {
|
|
402
|
+
if (this.parameters[parameterId])
|
|
403
|
+
continue;
|
|
404
|
+
this.parameters[parameterId] = this._responseDto.parameters[parameterId];
|
|
405
|
+
this.parameters[parameterId].id = parameterId;
|
|
406
|
+
}
|
|
407
|
+
for (let exportId in this._responseDto.exports)
|
|
408
|
+
if (this._responseDto.exports[exportId].type === sdk_geometry_api_sdk_v2_1.ShapeDiverResponseExportDefinitionType.EMAIL || this._responseDto.exports[exportId].type === sdk_geometry_api_sdk_v2_1.ShapeDiverResponseExportDefinitionType.DOWNLOAD) {
|
|
409
|
+
this.exports[exportId] = this._responseDto.exports[exportId];
|
|
410
|
+
this.exports[exportId].id = exportId;
|
|
411
|
+
}
|
|
412
|
+
for (let outputId in this._responseDto.outputs) {
|
|
413
|
+
this.outputs[outputId] = this._responseDto.outputs[outputId];
|
|
414
|
+
this.outputs[outputId].id = outputId;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
437
417
|
}
|
|
438
418
|
exports.Session = Session;
|
|
439
419
|
//# sourceMappingURL=Session.js.map
|