@shapediver/viewer.shared.services 2.0.4 → 2.0.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.
@@ -4,11 +4,9 @@ export declare class HttpClient {
4
4
  private _dataCache;
5
5
  private _sessionLoading;
6
6
  constructor();
7
- private loadingCriterion;
7
+ private getSessionId;
8
8
  addDataLoading(sessionId: string, callbacks: {
9
- getOutput: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>;
10
- getTexture: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>;
11
- getExport: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>;
9
+ getAsset: (url: string) => Promise<[ArrayBuffer, string, string]>;
12
10
  downloadTexture: (sessionId: string, url: string) => Promise<[ArrayBuffer, string]>;
13
11
  }): void;
14
12
  get(href: string, config?: AxiosRequestConfig, textureLoading?: boolean): Promise<HttpResponse<any>>;
@@ -1 +1 @@
1
- {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../src/http-client/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBACa,UAAU;IAGnB,OAAO,CAAC,UAAU,CAEX;IAEP,OAAO,CAAC,eAAe,CAOhB;;IA2BP,OAAO,CAAC,gBAAgB;IAuBjB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QAChD,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACrF,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;KACvF;IAIY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAoD,EAAE,cAAc,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAwF5I,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAInE,iBAAiB,CAAC,SAAS,EAAE,MAAM;CAK7C"}
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../src/http-client/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAA;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBACa,UAAU;IAGnB,OAAO,CAAC,UAAU,CAEX;IAEP,OAAO,CAAC,eAAe,CAKhB;;IA2BP,OAAO,CAAC,YAAY;IAeb,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;QAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;KACvF;IAIY,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAoD,EAAE,cAAc,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAiE5I,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAInE,iBAAiB,CAAC,SAAS,EAAE,MAAM;CAK7C"}
@@ -45,7 +45,7 @@ let HttpClient = class HttpClient {
45
45
  }
46
46
  // #endregion Constructors (1)
47
47
  // #region Public Methods (7)
48
- loadingCriterion(href) {
48
+ getSessionId(href) {
49
49
  // searching for "/session/SESSION_ID/{'output' | 'export' | 'texture'}/ASSET_DATA"
50
50
  const parts = href.split('/');
51
51
  const sessionPartIndex = parts.indexOf('session');
@@ -55,12 +55,7 @@ let HttpClient = class HttpClient {
55
55
  // no such session has been registered, should never happen
56
56
  if (!this._sessionLoading[sessionId])
57
57
  return;
58
- const type = parts[sessionPartIndex + 2];
59
- // the type is not supported
60
- if (type !== 'output' && type !== 'export' && type !== 'texture')
61
- return;
62
- const assetData = parts[sessionPartIndex + 3];
63
- return { sessionId, assetData, type };
58
+ return sessionId;
64
59
  }
65
60
  return;
66
61
  }
@@ -72,79 +67,57 @@ let HttpClient = class HttpClient {
72
67
  const dataKey = btoa(href);
73
68
  if (dataKey in this._dataCache)
74
69
  return yield this._dataCache[dataKey];
75
- const loadingInfo = this.loadingCriterion(href);
76
- if (loadingInfo) {
77
- switch (loadingInfo.type) {
78
- case 'output':
79
- this._dataCache[dataKey] = new Promise(resolve => {
80
- this._sessionLoading[loadingInfo.sessionId]
81
- .getOutput(loadingInfo.sessionId, loadingInfo.assetData)
82
- .then(result => {
83
- resolve({
84
- data: result[0],
85
- headers: {
86
- 'content-type': result[1]
87
- }
88
- });
89
- });
90
- });
91
- break;
92
- case 'export':
93
- this._dataCache[dataKey] = new Promise(resolve => {
94
- this._sessionLoading[loadingInfo.sessionId]
95
- .getExport(loadingInfo.sessionId, loadingInfo.assetData)
96
- .then(result => {
97
- resolve({
98
- data: result[0],
99
- headers: {
100
- 'content-type': result[1]
101
- }
102
- });
70
+ // try to get sessionId from href
71
+ let sessionId = this.getSessionId(href);
72
+ // if href does not have sessionId, use the first sesison, if available
73
+ if (!sessionId && Object.keys(this._sessionLoading).length > 0)
74
+ sessionId = Object.keys(this._sessionLoading)[0];
75
+ // get the session loading functions, if available
76
+ let sessionLoading;
77
+ if (sessionId)
78
+ sessionLoading = this._sessionLoading[sessionId];
79
+ // separation texture vs everything else
80
+ if (textureLoading) {
81
+ // if we have a sessionId and the sessionLoading functions and the image is not a blob or data, we load it via the sdk
82
+ if (sessionLoading !== undefined && sessionId !== undefined && !href.startsWith('blob:') && !href.startsWith('data:')) {
83
+ // take first session to load a texture that is not session related
84
+ this._dataCache[dataKey] = new Promise(resolve => {
85
+ sessionLoading.downloadTexture(sessionId, href).then((result) => {
86
+ resolve({
87
+ data: result[0],
88
+ headers: {
89
+ 'content-type': result[1]
90
+ }
103
91
  });
104
92
  });
105
- break;
106
- case 'texture':
107
- this._dataCache[dataKey] = new Promise(resolve => {
108
- this._sessionLoading[loadingInfo.sessionId]
109
- .getTexture(loadingInfo.sessionId, loadingInfo.assetData)
110
- .then(result => {
111
- resolve({
112
- data: result[0],
113
- headers: {
114
- 'content-type': result[1]
115
- }
116
- });
117
- });
118
- });
119
- break;
120
- default:
121
- this._dataCache[dataKey] = (0, axios_1.default)(href, Object.assign({ method: 'get' }, config));
93
+ });
94
+ }
95
+ else {
96
+ // we can load blobs and data urls directly
97
+ // or load it directly if we don't have a session
98
+ this._dataCache[dataKey] = (0, axios_1.default)(href, Object.assign({ method: 'get' }, config));
122
99
  }
123
100
  }
124
101
  else {
125
- // separation texture vs something else...
126
- if (textureLoading) {
127
- // we can load blobs and data urls directly
128
- // if no session is registered, we have to load the texture directly
129
- if (href.startsWith('blob:') || href.startsWith('data:') || Object.values(this._sessionLoading).length === 0) {
130
- this._dataCache[dataKey] = (0, axios_1.default)(href, Object.assign({ method: 'get' }, config));
131
- }
132
- else {
133
- // take first session to load a texture that is not session related
134
- const sessionId = Object.keys(this._sessionLoading)[0];
135
- this._dataCache[dataKey] = new Promise(resolve => {
136
- this._sessionLoading[sessionId].downloadTexture(sessionId, href).then((result) => {
137
- resolve({
138
- data: result[0],
139
- headers: {
140
- 'content-type': result[1]
141
- }
142
- });
102
+ try {
103
+ // if there is no session to load from, we use the fallback option
104
+ if (!sessionLoading)
105
+ throw new Error();
106
+ // all data links where we could somehow find a session to load it with
107
+ this._dataCache[dataKey] = new Promise(resolve => {
108
+ sessionLoading.getAsset(href)
109
+ .then((result) => {
110
+ resolve({
111
+ data: result[0],
112
+ headers: {
113
+ 'content-type': result[1]
114
+ }
143
115
  });
144
116
  });
145
- }
117
+ });
146
118
  }
147
- else {
119
+ catch (e) {
120
+ // if this fails, we just load it directly
148
121
  this._dataCache[dataKey] = (0, axios_1.default)(href, Object.assign({ method: 'get' }, config));
149
122
  }
150
123
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/http-client/HttpClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/http-client/HttpClient.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shapediver/viewer.shared.services",
3
- "version": "2.0.4",
3
+ "version": "2.0.5",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "Michael Oppitz <michael@shapediver.com>",
@@ -42,9 +42,9 @@
42
42
  "@ctrl/tinycolor": "^3.4.0",
43
43
  "@sentry/browser": "^6.7.2",
44
44
  "@sentry/tracing": "^6.7.2",
45
- "@shapediver/sdk.geometry-api-sdk-v2": "^1.0.24",
45
+ "@shapediver/sdk.geometry-api-sdk-v2": "^1.0.25",
46
46
  "@shapediver/viewer.settings": "0.1.36",
47
- "@shapediver/viewer.shared.build-data": "2.0.4",
47
+ "@shapediver/viewer.shared.build-data": "2.0.5",
48
48
  "@types/dompurify": "^2.3.1",
49
49
  "@types/ua-parser-js": "^0.7.36",
50
50
  "@types/uuid": "^8.3.0",
@@ -55,5 +55,5 @@
55
55
  "ua-parser-js": "^0.7.28",
56
56
  "uuid": "^8.3.2"
57
57
  },
58
- "gitHead": "dad664eb2739bd688a887067e3300bcdb6c61f6c"
58
+ "gitHead": "35de65c2189ae1c5b797e0a0d255ef2db32d2fb1"
59
59
  }
@@ -13,9 +13,7 @@ export class HttpClient {
13
13
 
14
14
  private _sessionLoading: {
15
15
  [key: string]: {
16
- getOutput: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>,
17
- getTexture: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>,
18
- getExport: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>,
16
+ getAsset: (url: string) => Promise<[ArrayBuffer, string, string]>,
19
17
  downloadTexture: (sessionId: string, url: string) => Promise<[ArrayBuffer, string]>,
20
18
  }
21
19
  } = {};
@@ -45,7 +43,7 @@ export class HttpClient {
45
43
 
46
44
  // #region Public Methods (7)
47
45
 
48
- private loadingCriterion(href: string): { sessionId: string, assetData: string, type: 'output' | 'export' | 'texture' } | undefined {
46
+ private getSessionId(href: string): string | undefined {
49
47
  // searching for "/session/SESSION_ID/{'output' | 'export' | 'texture'}/ASSET_DATA"
50
48
  const parts = href.split('/');
51
49
  const sessionPartIndex = parts.indexOf('session');
@@ -55,23 +53,13 @@ export class HttpClient {
55
53
  const sessionId = parts[sessionPartIndex + 1];
56
54
  // no such session has been registered, should never happen
57
55
  if (!this._sessionLoading[sessionId]) return;
58
-
59
- const type = parts[sessionPartIndex + 2];
60
- // the type is not supported
61
- if (type !== 'output' && type !== 'export' && type !== 'texture') return;
62
-
63
- const assetData = parts[sessionPartIndex + 3];
64
-
65
- return { sessionId, assetData, type };
56
+ return sessionId;
66
57
  }
67
-
68
58
  return;
69
59
  }
70
60
 
71
61
  public addDataLoading(sessionId: string, callbacks: {
72
- getOutput: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>,
73
- getTexture: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>,
74
- getExport: (sessionId: string, assetData: string) => Promise<[ArrayBuffer, string]>,
62
+ getAsset: (url: string) => Promise<[ArrayBuffer, string, string]>,
75
63
  downloadTexture: (sessionId: string, url: string) => Promise<[ArrayBuffer, string]>,
76
64
  }) {
77
65
  this._sessionLoading[sessionId] = callbacks;
@@ -80,88 +68,65 @@ export class HttpClient {
80
68
  public async get(href: string, config: AxiosRequestConfig = { responseType: 'arraybuffer' }, textureLoading: boolean = false): Promise<HttpResponse<any>> {
81
69
  const dataKey = btoa(href);
82
70
  if (dataKey in this._dataCache) return await this._dataCache[dataKey];
83
-
84
- const loadingInfo = this.loadingCriterion(href);
85
- if (loadingInfo) {
86
- switch (loadingInfo.type) {
87
- case 'output':
88
- this._dataCache[dataKey] = new Promise<HttpResponse<ArrayBuffer>>(resolve => {
89
- this._sessionLoading[loadingInfo.sessionId]
90
- .getOutput(loadingInfo.sessionId, loadingInfo.assetData)
91
- .then(result => {
92
- resolve({
93
- data: result[0],
94
- headers: {
95
- 'content-type': result[1]
96
- }
97
- })
98
- })
99
-
100
- });
101
- break;
102
-
103
- case 'export':
104
- this._dataCache[dataKey] = new Promise<HttpResponse<ArrayBuffer>>(resolve => {
105
- this._sessionLoading[loadingInfo.sessionId]
106
- .getExport(loadingInfo.sessionId, loadingInfo.assetData)
107
- .then(result => {
108
- resolve({
109
- data: result[0],
110
- headers: {
111
- 'content-type': result[1]
112
- }
113
- })
114
- })
115
-
116
- });
117
- break;
118
-
119
- case 'texture':
120
- this._dataCache[dataKey] = new Promise<HttpResponse<ArrayBuffer>>(resolve => {
121
- this._sessionLoading[loadingInfo.sessionId]
122
- .getTexture(loadingInfo.sessionId, loadingInfo.assetData)
123
- .then(result => {
124
- resolve({
125
- data: result[0],
126
- headers: {
127
- 'content-type': result[1]
128
- }
129
- })
130
- })
131
-
71
+
72
+ // try to get sessionId from href
73
+ let sessionId = this.getSessionId(href);
74
+
75
+ // if href does not have sessionId, use the first sesison, if available
76
+ if(!sessionId && Object.keys(this._sessionLoading).length > 0)
77
+ sessionId = Object.keys(this._sessionLoading)[0];
78
+
79
+ // get the session loading functions, if available
80
+ let sessionLoading: {
81
+ getAsset: (url: string) => Promise<[ArrayBuffer, string, string]>,
82
+ downloadTexture: (sessionId: string, url: string) => Promise<[ArrayBuffer, string]>,
83
+ } | undefined;
84
+ if(sessionId)
85
+ sessionLoading = this._sessionLoading[sessionId];
86
+
87
+ // separation texture vs everything else
88
+ if(textureLoading) {
89
+ // if we have a sessionId and the sessionLoading functions and the image is not a blob or data, we load it via the sdk
90
+ if(sessionLoading !== undefined && sessionId !== undefined && !href.startsWith('blob:') && !href.startsWith('data:')) {
91
+ // take first session to load a texture that is not session related
92
+ this._dataCache[dataKey] = new Promise<HttpResponse<any>>(resolve => {
93
+ sessionLoading!.downloadTexture(sessionId!, href).then((result) => {
94
+ resolve({
95
+ data: result[0],
96
+ headers: {
97
+ 'content-type': result[1]
98
+ }
99
+ })
132
100
  });
133
- break;
134
-
135
- default:
136
- this._dataCache[dataKey] = axios(href, Object.assign({ method: 'get' }, config));
101
+ });
102
+ } else {
103
+ // we can load blobs and data urls directly
104
+ // or load it directly if we don't have a session
105
+ this._dataCache[dataKey] = axios(href, Object.assign({ method: 'get' }, config));
137
106
  }
138
107
  } else {
139
- // separation texture vs something else...
140
- if(textureLoading) {
141
- // we can load blobs and data urls directly
142
- // if no session is registered, we have to load the texture directly
143
- if(href.startsWith('blob:') || href.startsWith('data:') || Object.values(this._sessionLoading).length === 0) {
144
- this._dataCache[dataKey] = axios(href, Object.assign({ method: 'get' }, config));
145
- } else {
146
- // take first session to load a texture that is not session related
147
- const sessionId = Object.keys(this._sessionLoading)[0];
148
-
149
- this._dataCache[dataKey] = new Promise<HttpResponse<any>>(resolve => {
150
- this._sessionLoading[sessionId].downloadTexture(sessionId, href).then((result) => {
108
+ try{
109
+ // if there is no session to load from, we use the fallback option
110
+ if(!sessionLoading) throw new Error();
111
+
112
+ // all data links where we could somehow find a session to load it with
113
+ this._dataCache[dataKey] = new Promise<HttpResponse<ArrayBuffer>>(resolve => {
114
+ sessionLoading!.getAsset(href)
115
+ .then((result) => {
151
116
  resolve({
152
117
  data: result[0],
153
118
  headers: {
154
119
  'content-type': result[1]
155
120
  }
156
121
  })
157
- });
158
- });
159
- }
160
- } else {
122
+ })
123
+ });
124
+ } catch(e) {
125
+ // if this fails, we just load it directly
161
126
  this._dataCache[dataKey] = axios(href, Object.assign({ method: 'get' }, config));
162
127
  }
163
128
  }
164
-
129
+
165
130
  return this._dataCache[dataKey];
166
131
  }
167
132