@shapediver/viewer.session-engine.session-engine 1.8.12 → 1.10.1
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 +4 -4
- package/dist/implementation/OutputLoader.d.ts.map +1 -1
- package/dist/implementation/OutputLoader.js +38 -37
- package/dist/implementation/OutputLoader.js.map +1 -1
- package/dist/implementation/Session.d.ts +27 -29
- package/dist/implementation/Session.d.ts.map +1 -1
- package/dist/implementation/Session.js +209 -267
- 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 +19 -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,32 @@ 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
|
}
|
|
90
|
+
get viewerSettings() {
|
|
91
|
+
return this._viewerSettings;
|
|
92
|
+
}
|
|
92
93
|
close() {
|
|
93
|
-
var _a, _b;
|
|
94
94
|
return __awaiter(this, void 0, void 0, function* () {
|
|
95
|
-
this.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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;
|
|
108
|
-
}
|
|
95
|
+
this.checkAvailability('close');
|
|
96
|
+
try {
|
|
97
|
+
yield this._sdk.session.close(this._sessionId);
|
|
98
|
+
this._closed = true;
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
catch (e) {
|
|
102
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.close', e);
|
|
109
103
|
}
|
|
110
|
-
return true;
|
|
111
104
|
});
|
|
112
105
|
}
|
|
113
106
|
customize(cancelRequest) {
|
|
@@ -115,317 +108,225 @@ class Session {
|
|
|
115
108
|
return this.customizeSession(this._parameterValues, cancelRequest);
|
|
116
109
|
});
|
|
117
110
|
}
|
|
118
|
-
init() {
|
|
111
|
+
init(parameterValues) {
|
|
119
112
|
var _a, _b;
|
|
120
113
|
return __awaiter(this, void 0, void 0, function* () {
|
|
121
114
|
if (this._initialized === true) {
|
|
122
|
-
|
|
123
|
-
|
|
115
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError('Session.init: Session already initialized.');
|
|
116
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.init', error);
|
|
124
117
|
}
|
|
125
118
|
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]));
|
|
119
|
+
this._performanceEvaluator.startSection('sessionResponse');
|
|
120
|
+
this._responseDto = yield this._sdk.session.init(this._ticket);
|
|
121
|
+
this._performanceEvaluator.endSection('sessionResponse');
|
|
122
|
+
this._viewerSettings = (_a = this._responseDto.viewer) === null || _a === void 0 ? void 0 : _a.config;
|
|
123
|
+
this._sessionId = this._responseDto.sessionId;
|
|
124
|
+
this._modelId = (_b = this._responseDto.model) === null || _b === void 0 ? void 0 : _b.id;
|
|
125
|
+
if (!this._sessionId)
|
|
126
|
+
throw new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.init: Initialization of session failed. ResponseDto did not have a sessionId.`);
|
|
127
|
+
if (!this._modelId)
|
|
128
|
+
throw new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.init: Initialization of session failed. ResponseDto did not have a model.id.`);
|
|
129
|
+
this.updateResponseDto(this._responseDto);
|
|
146
130
|
this._initialized = true;
|
|
131
|
+
if (parameterValues) {
|
|
132
|
+
const responseDto = yield this._sdk.utils.submitAndWaitForCustomization(this._sdk, this._sessionId, parameterValues);
|
|
133
|
+
this.updateResponseDto(responseDto);
|
|
134
|
+
}
|
|
147
135
|
}
|
|
148
136
|
catch (e) {
|
|
149
|
-
throw this._logger.
|
|
137
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.init', e);
|
|
150
138
|
}
|
|
151
139
|
});
|
|
152
140
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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;
|
|
141
|
+
loadOutputs(cancelRequest = () => false) {
|
|
142
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
143
|
+
this.checkAvailability();
|
|
144
|
+
const o = Object.assign({}, this._outputs);
|
|
145
|
+
try {
|
|
146
|
+
const node = yield this._outputLoader.loadOutputs(this._responseDto, o);
|
|
147
|
+
node.data.push(new SessionData_1.SessionData(this._responseDto));
|
|
148
|
+
return node;
|
|
204
149
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
if (
|
|
209
|
-
|
|
210
|
-
|
|
150
|
+
catch (e) {
|
|
151
|
+
if (e instanceof OutputDelayException_1.OutputDelayException)
|
|
152
|
+
yield this.timeout(e.delay);
|
|
153
|
+
if (cancelRequest())
|
|
154
|
+
return new SessionTreeNode_1.SessionTreeNode();
|
|
155
|
+
let outputMapping = {};
|
|
156
|
+
for (let output in o)
|
|
157
|
+
outputMapping[output] = o[output].version;
|
|
158
|
+
try {
|
|
159
|
+
const responseDto = yield this._sdk.output.getCache(this._sessionId, outputMapping);
|
|
160
|
+
if (cancelRequest())
|
|
161
|
+
return new SessionTreeNode_1.SessionTreeNode();
|
|
162
|
+
this.updateResponseDto(responseDto);
|
|
163
|
+
return yield this.loadOutputs(cancelRequest);
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.loadOutputs', e);
|
|
211
167
|
}
|
|
212
|
-
}
|
|
213
|
-
if (outputs) {
|
|
214
|
-
for (let outputId in r1.outputs) {
|
|
215
|
-
outputs[outputId] = r1.outputs[outputId];
|
|
216
|
-
outputs[outputId].id = outputId;
|
|
217
168
|
}
|
|
218
|
-
}
|
|
219
|
-
return r1;
|
|
169
|
+
});
|
|
220
170
|
}
|
|
221
|
-
|
|
222
|
-
var _a, _b, _c;
|
|
171
|
+
requestExport(exportId, parameters) {
|
|
223
172
|
return __awaiter(this, void 0, void 0, function* () {
|
|
224
|
-
|
|
225
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, new viewer_shared_services_1.SDError('Session.saveDefaultParameters: Session has to be in edit mode to be able to save the settings.'));
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
173
|
+
this.checkAvailability('export');
|
|
228
174
|
try {
|
|
229
|
-
|
|
230
|
-
|
|
175
|
+
const responseDto = yield this._sdk.utils.submitAndWaitForExport(this._sdk, this._sessionId, { exports: { id: exportId }, parameters });
|
|
176
|
+
this.updateResponseDto(responseDto);
|
|
177
|
+
return this.exports[exportId];
|
|
231
178
|
}
|
|
232
179
|
catch (e) {
|
|
233
|
-
|
|
234
|
-
this._logger.httpError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveDefaultParameters: Saving of default parameters failed.`, e.response.status, false);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveDefaultParameters: Saving of default parameters failed.`, false);
|
|
238
|
-
}
|
|
239
|
-
return false;
|
|
180
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.requestExport', e);
|
|
240
181
|
}
|
|
241
182
|
});
|
|
242
183
|
}
|
|
243
|
-
|
|
244
|
-
var _a, _b, _c;
|
|
184
|
+
saveDefaultParameters() {
|
|
245
185
|
return __awaiter(this, void 0, void 0, function* () {
|
|
246
|
-
|
|
247
|
-
this._logger.warn(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveParameterProperties: Session does not have the required action.');
|
|
248
|
-
return false;
|
|
249
|
-
}
|
|
186
|
+
this.checkAvailability('defaultparam', true);
|
|
250
187
|
try {
|
|
251
|
-
yield this.
|
|
188
|
+
yield this._sdk.model.setDefaultParams(this._modelId, this._parameterValues);
|
|
252
189
|
return true;
|
|
253
190
|
}
|
|
254
191
|
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;
|
|
192
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveDefaultParameters', e);
|
|
262
193
|
}
|
|
263
194
|
});
|
|
264
195
|
}
|
|
265
196
|
saveExportProperties(exports) {
|
|
266
|
-
var _a, _b, _c;
|
|
267
197
|
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
|
-
}
|
|
198
|
+
this.checkAvailability('export-definition', true);
|
|
272
199
|
try {
|
|
273
|
-
yield this.
|
|
200
|
+
yield this._sdk.export.updateDefinitions(this._modelId, exports);
|
|
274
201
|
return true;
|
|
275
202
|
}
|
|
276
203
|
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;
|
|
204
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveExportProperties', e);
|
|
284
205
|
}
|
|
285
206
|
});
|
|
286
207
|
}
|
|
287
208
|
saveOutputProperties(outputs) {
|
|
288
|
-
var _a, _b, _c;
|
|
289
209
|
return __awaiter(this, void 0, void 0, function* () {
|
|
290
|
-
|
|
291
|
-
this._logger.warn(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveOutputProperties: Session does not have the required action.');
|
|
292
|
-
return false;
|
|
293
|
-
}
|
|
210
|
+
this.checkAvailability('output-definition', true);
|
|
294
211
|
try {
|
|
295
|
-
yield this.
|
|
212
|
+
yield this._sdk.output.updateDefinitions(this._modelId, outputs);
|
|
296
213
|
return true;
|
|
297
214
|
}
|
|
298
215
|
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;
|
|
216
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveOutputProperties', e);
|
|
306
217
|
}
|
|
307
218
|
});
|
|
308
219
|
}
|
|
309
|
-
|
|
310
|
-
var _a, _b, _c;
|
|
220
|
+
saveParameterProperties(parameters) {
|
|
311
221
|
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
|
-
}
|
|
222
|
+
this.checkAvailability('parameter-definition', true);
|
|
316
223
|
try {
|
|
317
|
-
yield this.
|
|
224
|
+
yield this._sdk.model.updateParameterDefinitions(this._modelId, parameters);
|
|
318
225
|
return true;
|
|
319
226
|
}
|
|
320
227
|
catch (e) {
|
|
321
|
-
|
|
322
|
-
this._logger.httpError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveSettings: Saving of settings failed.`, e.response.status, false);
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
this._logger.error(viewer_shared_services_1.LOGGINGTOPIC.SESSION, e, `Session.saveSettings: Saving of settings failed.`, false);
|
|
326
|
-
}
|
|
327
|
-
return false;
|
|
228
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveParameterProperties', e);
|
|
328
229
|
}
|
|
329
230
|
});
|
|
330
231
|
}
|
|
331
|
-
|
|
232
|
+
saveSettings(json) {
|
|
332
233
|
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.'));
|
|
234
|
+
this.checkAvailability('configure', true);
|
|
339
235
|
try {
|
|
340
|
-
|
|
236
|
+
yield this._sdk.model.updateConfig(this._modelId, json);
|
|
237
|
+
return true;
|
|
341
238
|
}
|
|
342
239
|
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;
|
|
240
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.saveSettings', e);
|
|
362
241
|
}
|
|
363
242
|
});
|
|
364
243
|
}
|
|
365
|
-
|
|
366
|
-
var _a;
|
|
244
|
+
uploadFile(parameterId, data, type) {
|
|
367
245
|
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
|
-
}
|
|
246
|
+
this.checkAvailability('upload');
|
|
372
247
|
try {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
248
|
+
const responseDto = yield this._sdk.file.requestUpload(this._sessionId, {
|
|
249
|
+
[parameterId]: { size: data.size, format: type }
|
|
250
|
+
});
|
|
251
|
+
if (responseDto && responseDto.asset && responseDto.asset.file && responseDto.asset.file[parameterId]) {
|
|
252
|
+
const fileAsset = responseDto.asset.file[parameterId];
|
|
253
|
+
yield this._sdk.utils.upload(fileAsset.href, yield data.arrayBuffer(), type);
|
|
254
|
+
return fileAsset.id;
|
|
380
255
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
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();
|
|
387
|
-
if (cancelRequest())
|
|
388
|
-
return new SessionTreeNode_1.SessionTreeNode();
|
|
389
|
-
return this.customizeSession(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
|
-
}
|
|
256
|
+
else {
|
|
257
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.uploadFile: Upload reply has not the required format.`);
|
|
258
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadFile', error);
|
|
398
259
|
}
|
|
399
|
-
this._sessionResponse = this.mergeResponses(this._sessionResponse, responseCustomize, this._parameters, this._outputs, this._exports);
|
|
400
|
-
return this.loadOutputs(parameters, cancelRequest);
|
|
401
260
|
}
|
|
402
261
|
catch (e) {
|
|
403
|
-
throw this._logger.
|
|
262
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadFile', e);
|
|
404
263
|
}
|
|
405
264
|
});
|
|
406
265
|
}
|
|
407
|
-
|
|
408
|
-
var _a, _b;
|
|
266
|
+
uploadGLTF(blob, conversion = sdk_geometry_api_sdk_v2_1.ShapeDiverRequestGltfUploadQueryConversion.NONE) {
|
|
409
267
|
return __awaiter(this, void 0, void 0, function* () {
|
|
410
|
-
|
|
268
|
+
this.checkAvailability('gltf-upload');
|
|
411
269
|
try {
|
|
412
|
-
const
|
|
413
|
-
|
|
414
|
-
|
|
270
|
+
const responseDto = yield this._sdk.gltf.upload(this._sessionId, yield blob.arrayBuffer(), 'model/gltf-binary', conversion);
|
|
271
|
+
if (!responseDto || !responseDto.gltf || !responseDto.gltf.href) {
|
|
272
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.uploadGLTF: Upload reply has not the required format.`);
|
|
273
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadGLTF', error);
|
|
274
|
+
}
|
|
275
|
+
return responseDto.gltf.href;
|
|
415
276
|
}
|
|
416
277
|
catch (e) {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
278
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.uploadGLTF', e);
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
checkAvailability(action, checkForModelId = false) {
|
|
283
|
+
var _a;
|
|
284
|
+
if (!this._responseDto) {
|
|
285
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: responseDto not available.`);
|
|
286
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
287
|
+
}
|
|
288
|
+
if (!this._sessionId) {
|
|
289
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: sessionId not available.`);
|
|
290
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
291
|
+
}
|
|
292
|
+
if (checkForModelId && !this._modelId) {
|
|
293
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: modelId not available.`);
|
|
294
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
295
|
+
}
|
|
296
|
+
if (action && !this._responseDto.actions) {
|
|
297
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: actions not available.`);
|
|
298
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
299
|
+
}
|
|
300
|
+
const responseDtoAction = (_a = this._responseDto.actions) === null || _a === void 0 ? void 0 : _a.find(a => a.name === action);
|
|
301
|
+
if (action && !responseDtoAction) {
|
|
302
|
+
const error = new viewer_shared_services_1.ShapeDiverViewerSessionError(`Session.checkAvailability: action ${action} not available.`);
|
|
303
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.checkAvailability', error);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
customizeSession(parameters, cancelRequest) {
|
|
307
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
308
|
+
this.checkAvailability('customize');
|
|
309
|
+
try {
|
|
310
|
+
this._performanceEvaluator.startSection('sessionResponse');
|
|
311
|
+
const responseDto = yield this._sdk.utils.submitAndWaitForCustomization(this._sdk, this._sessionId, parameters);
|
|
312
|
+
this._performanceEvaluator.endSection('sessionResponse');
|
|
425
313
|
if (cancelRequest())
|
|
426
314
|
return new SessionTreeNode_1.SessionTreeNode();
|
|
427
|
-
this.
|
|
428
|
-
return
|
|
315
|
+
this.updateResponseDto(responseDto);
|
|
316
|
+
return this.loadOutputs(cancelRequest);
|
|
317
|
+
}
|
|
318
|
+
catch (e) {
|
|
319
|
+
if (e.response && e.response.status) {
|
|
320
|
+
if (e.response && e.response.status && e.response.status === 410 && !this._closed) {
|
|
321
|
+
this._logger.info(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.customizeSession: Session customization failed. Session expired. Re-initializing session.');
|
|
322
|
+
this._initialized = false;
|
|
323
|
+
yield this.init(parameters);
|
|
324
|
+
if (cancelRequest())
|
|
325
|
+
return new SessionTreeNode_1.SessionTreeNode();
|
|
326
|
+
return this.loadOutputs(cancelRequest);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
throw this._logger.handleError(viewer_shared_services_1.LOGGINGTOPIC.SESSION, 'Session.customizeSession', e);
|
|
429
330
|
}
|
|
430
331
|
});
|
|
431
332
|
}
|
|
@@ -434,6 +335,47 @@ class Session {
|
|
|
434
335
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
435
336
|
});
|
|
436
337
|
}
|
|
338
|
+
updateResponseDto(responseDto) {
|
|
339
|
+
if (!this._responseDto) {
|
|
340
|
+
this._responseDto = responseDto;
|
|
341
|
+
return;
|
|
342
|
+
}
|
|
343
|
+
if (responseDto.parameters) {
|
|
344
|
+
for (let parameterId in responseDto.parameters) {
|
|
345
|
+
this._responseDto.parameters = this._responseDto.parameters || {};
|
|
346
|
+
this._responseDto.parameters[parameterId] = this._responseDto.parameters[parameterId] || responseDto.parameters[parameterId];
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (responseDto.outputs) {
|
|
350
|
+
for (let outputId in responseDto.outputs) {
|
|
351
|
+
this._responseDto.outputs = this._responseDto.outputs || {};
|
|
352
|
+
if ('version' in responseDto.outputs[outputId] || !(this._responseDto.outputs[outputId] && 'version' in this._responseDto.outputs[outputId]))
|
|
353
|
+
this._responseDto.outputs[outputId] = responseDto.outputs[outputId];
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (responseDto.exports) {
|
|
357
|
+
for (let exportId in responseDto.exports) {
|
|
358
|
+
this._responseDto.exports = this._responseDto.exports || {};
|
|
359
|
+
if ('version' in responseDto.exports[exportId] || !(this._responseDto.exports[exportId] && 'version' in this._responseDto.exports[exportId]))
|
|
360
|
+
this._responseDto.exports[exportId] = responseDto.exports[exportId];
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
for (let parameterId in this._responseDto.parameters) {
|
|
364
|
+
if (this.parameters[parameterId])
|
|
365
|
+
continue;
|
|
366
|
+
this.parameters[parameterId] = this._responseDto.parameters[parameterId];
|
|
367
|
+
this.parameters[parameterId].id = parameterId;
|
|
368
|
+
}
|
|
369
|
+
for (let exportId in this._responseDto.exports)
|
|
370
|
+
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) {
|
|
371
|
+
this.exports[exportId] = this._responseDto.exports[exportId];
|
|
372
|
+
this.exports[exportId].id = exportId;
|
|
373
|
+
}
|
|
374
|
+
for (let outputId in this._responseDto.outputs) {
|
|
375
|
+
this.outputs[outputId] = this._responseDto.outputs[outputId];
|
|
376
|
+
this.outputs[outputId].id = outputId;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
437
379
|
}
|
|
438
380
|
exports.Session = Session;
|
|
439
381
|
//# sourceMappingURL=Session.js.map
|