@shapediver/sdk.geometry-api-sdk-v2 1.12.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/README.md +133 -58
  2. package/dist/UtilsApi.d.ts +20 -0
  3. package/dist/UtilsApi.d.ts.map +1 -0
  4. package/dist/UtilsApi.js +185 -0
  5. package/dist/UtilsApi.js.map +1 -0
  6. package/dist/client/api.d.ts +2117 -0
  7. package/dist/client/api.d.ts.map +1 -0
  8. package/dist/client/api.js +3473 -0
  9. package/dist/client/api.js.map +1 -0
  10. package/dist/client/base.d.ts +32 -0
  11. package/dist/client/base.d.ts.map +1 -0
  12. package/dist/client/base.js +37 -0
  13. package/dist/client/base.js.map +1 -0
  14. package/dist/client/common.d.ts +14 -0
  15. package/dist/client/common.d.ts.map +1 -0
  16. package/dist/client/common.js +108 -0
  17. package/dist/client/common.js.map +1 -0
  18. package/dist/client/configuration.d.ts +23 -0
  19. package/dist/client/configuration.d.ts.map +1 -0
  20. package/dist/client/configuration.js +21 -0
  21. package/dist/client/configuration.js.map +1 -0
  22. package/dist/client/index.d.ts +3 -0
  23. package/dist/client/index.d.ts.map +1 -0
  24. package/dist/client/index.js +19 -0
  25. package/dist/client/index.js.map +1 -0
  26. package/dist/configuration.d.ts +8 -0
  27. package/dist/configuration.d.ts.map +1 -0
  28. package/dist/configuration.js +22 -0
  29. package/dist/configuration.js.map +1 -0
  30. package/dist/error.d.ts +22 -0
  31. package/dist/error.d.ts.map +1 -0
  32. package/dist/error.js +48 -0
  33. package/dist/error.js.map +1 -0
  34. package/dist/index.d.ts +5 -6
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +5 -17
  37. package/dist/index.js.map +1 -1
  38. package/dist/utils.d.ts +12 -0
  39. package/dist/utils.d.ts.map +1 -0
  40. package/dist/utils.js +93 -0
  41. package/dist/utils.js.map +1 -0
  42. package/package.json +55 -57
  43. package/src/UtilsApi.ts +393 -0
  44. package/src/client/api.ts +14084 -0
  45. package/src/client/base.ts +86 -0
  46. package/src/client/common.ts +150 -0
  47. package/src/client/configuration.ts +110 -0
  48. package/src/client/index.ts +18 -0
  49. package/src/configuration.ts +27 -0
  50. package/src/error.ts +92 -0
  51. package/src/index.ts +5 -17
  52. package/src/utils.ts +126 -0
  53. package/dist/ShapeDiverErrors.d.ts +0 -10
  54. package/dist/ShapeDiverErrors.d.ts.map +0 -1
  55. package/dist/ShapeDiverErrors.js +0 -18
  56. package/dist/ShapeDiverErrors.js.map +0 -1
  57. package/dist/ShapeDiverSdk.d.ts +0 -48
  58. package/dist/ShapeDiverSdk.d.ts.map +0 -1
  59. package/dist/ShapeDiverSdk.js +0 -87
  60. package/dist/ShapeDiverSdk.js.map +0 -1
  61. package/dist/resources/ShapeDiverAnalyticsApi.d.ts +0 -12
  62. package/dist/resources/ShapeDiverAnalyticsApi.d.ts.map +0 -1
  63. package/dist/resources/ShapeDiverAnalyticsApi.js +0 -63
  64. package/dist/resources/ShapeDiverAnalyticsApi.js.map +0 -1
  65. package/dist/resources/ShapeDiverArSceneApi.d.ts +0 -8
  66. package/dist/resources/ShapeDiverArSceneApi.d.ts.map +0 -1
  67. package/dist/resources/ShapeDiverArSceneApi.js +0 -63
  68. package/dist/resources/ShapeDiverArSceneApi.js.map +0 -1
  69. package/dist/resources/ShapeDiverAssetApi.d.ts +0 -13
  70. package/dist/resources/ShapeDiverAssetApi.d.ts.map +0 -1
  71. package/dist/resources/ShapeDiverAssetApi.js +0 -131
  72. package/dist/resources/ShapeDiverAssetApi.js.map +0 -1
  73. package/dist/resources/ShapeDiverExportApi.d.ts +0 -10
  74. package/dist/resources/ShapeDiverExportApi.d.ts.map +0 -1
  75. package/dist/resources/ShapeDiverExportApi.js +0 -49
  76. package/dist/resources/ShapeDiverExportApi.js.map +0 -1
  77. package/dist/resources/ShapeDiverFileApi.d.ts +0 -15
  78. package/dist/resources/ShapeDiverFileApi.d.ts.map +0 -1
  79. package/dist/resources/ShapeDiverFileApi.js +0 -67
  80. package/dist/resources/ShapeDiverFileApi.js.map +0 -1
  81. package/dist/resources/ShapeDiverGltfApi.d.ts +0 -7
  82. package/dist/resources/ShapeDiverGltfApi.d.ts.map +0 -1
  83. package/dist/resources/ShapeDiverGltfApi.js +0 -32
  84. package/dist/resources/ShapeDiverGltfApi.js.map +0 -1
  85. package/dist/resources/ShapeDiverModelApi.d.ts +0 -22
  86. package/dist/resources/ShapeDiverModelApi.d.ts.map +0 -1
  87. package/dist/resources/ShapeDiverModelApi.js +0 -156
  88. package/dist/resources/ShapeDiverModelApi.js.map +0 -1
  89. package/dist/resources/ShapeDiverModelStateApi.d.ts +0 -14
  90. package/dist/resources/ShapeDiverModelStateApi.d.ts.map +0 -1
  91. package/dist/resources/ShapeDiverModelStateApi.js +0 -104
  92. package/dist/resources/ShapeDiverModelStateApi.js.map +0 -1
  93. package/dist/resources/ShapeDiverOutputApi.d.ts +0 -10
  94. package/dist/resources/ShapeDiverOutputApi.d.ts.map +0 -1
  95. package/dist/resources/ShapeDiverOutputApi.js +0 -52
  96. package/dist/resources/ShapeDiverOutputApi.js.map +0 -1
  97. package/dist/resources/ShapeDiverSdtfApi.d.ts +0 -10
  98. package/dist/resources/ShapeDiverSdtfApi.d.ts.map +0 -1
  99. package/dist/resources/ShapeDiverSdtfApi.js +0 -52
  100. package/dist/resources/ShapeDiverSdtfApi.js.map +0 -1
  101. package/dist/resources/ShapeDiverSessionApi.d.ts +0 -11
  102. package/dist/resources/ShapeDiverSessionApi.d.ts.map +0 -1
  103. package/dist/resources/ShapeDiverSessionApi.js +0 -66
  104. package/dist/resources/ShapeDiverSessionApi.js.map +0 -1
  105. package/dist/resources/ShapeDiverSystemApi.d.ts +0 -12
  106. package/dist/resources/ShapeDiverSystemApi.d.ts.map +0 -1
  107. package/dist/resources/ShapeDiverSystemApi.js +0 -63
  108. package/dist/resources/ShapeDiverSystemApi.js.map +0 -1
  109. package/dist/resources/ShapeDiverTextureApi.d.ts +0 -7
  110. package/dist/resources/ShapeDiverTextureApi.d.ts.map +0 -1
  111. package/dist/resources/ShapeDiverTextureApi.js +0 -31
  112. package/dist/resources/ShapeDiverTextureApi.js.map +0 -1
  113. package/dist/resources/ShapeDiverUtilsApi.d.ts +0 -18
  114. package/dist/resources/ShapeDiverUtilsApi.d.ts.map +0 -1
  115. package/dist/resources/ShapeDiverUtilsApi.js +0 -146
  116. package/dist/resources/ShapeDiverUtilsApi.js.map +0 -1
  117. package/dist/utils/utils.d.ts +0 -12
  118. package/dist/utils/utils.d.ts.map +0 -1
  119. package/dist/utils/utils.js +0 -109
  120. package/dist/utils/utils.js.map +0 -1
  121. package/src/ShapeDiverErrors.ts +0 -34
  122. package/src/ShapeDiverSdk.ts +0 -121
  123. package/src/resources/ShapeDiverAnalyticsApi.ts +0 -108
  124. package/src/resources/ShapeDiverArSceneApi.ts +0 -77
  125. package/src/resources/ShapeDiverAssetApi.ts +0 -241
  126. package/src/resources/ShapeDiverExportApi.ts +0 -103
  127. package/src/resources/ShapeDiverFileApi.ts +0 -150
  128. package/src/resources/ShapeDiverGltfApi.ts +0 -46
  129. package/src/resources/ShapeDiverModelApi.ts +0 -374
  130. package/src/resources/ShapeDiverModelStateApi.ts +0 -163
  131. package/src/resources/ShapeDiverOutputApi.ts +0 -109
  132. package/src/resources/ShapeDiverSdtfApi.ts +0 -103
  133. package/src/resources/ShapeDiverSessionApi.ts +0 -142
  134. package/src/resources/ShapeDiverSystemApi.ts +0 -118
  135. package/src/resources/ShapeDiverTextureApi.ts +0 -36
  136. package/src/resources/ShapeDiverUtilsApi.ts +0 -318
  137. package/src/utils/utils.ts +0 -135
package/README.md CHANGED
@@ -4,121 +4,195 @@
4
4
  </a>
5
5
  </p>
6
6
 
7
- # ShapeDiver Geometry Backend API - SDK v2
7
+ # GeometryBackendSdkTypeScript
8
8
 
9
- > :warning: **Version 1 is deprecated. Please upgrade to [v2](https://github.com/shapediver/GeometryBackendSdkTypeScript/tree/master/packages/sdk.geometry-api-sdk-v2) to receive the newest features - [Migration Guide](<https://help.shapediver.com/doc/geometry-backend-sdk-typescript-migration-guide#GeometryBackendSDKTypeScript-MigrationGuide-MigratingfromVersion1.x.xto2.x.x(03/11/2024)>).**
9
+ > :warning: **You might be looking for the [v1 docs](https://github.com/shapediver/GeometryBackendSdkTypeScript/tree/legacy/v1) - [Migration Guide](https://help.shapediver.com/doc/geometry-backend-sdk-typescript-migration-guide#GeometryBackendSDKTypeScript-MigrationGuide-MigratingfromVersion1.x.xto2.x.x(03/11/2024)).**
10
10
 
11
- [ShapeDiver](https://www.shapediver.com/) is a cloud platform for building online applications based on parametric 3D files made with Rhinoceros 3D and Grasshopper.
11
+ [ShapeDiver](https://www.shapediver.com/) is a cloud platform for building online applications
12
+ based on parametric 3D files made with [Rhinoceros 3D](https://www.rhino3d.com/) and
13
+ [Grasshopper](https://www.grasshopper3d.com/).
12
14
 
13
- Using the **ShapeDiver Geometry Backend API** allows accessing ShapeDiver models without using the **ShapeDiver Viewer**.
14
- The SDKs provide the functionality to communicate with a specific version of our Geometry Backend API, and they expose all TypeScript-types describing request and response objects.
15
-
16
- This SDK provides functionality to communicate with the **ShapeDiver Geometry Backend API v2** and exposes all TypeScript-types describing request and response objects.
17
- See the [API documentation](https://sdeuc1.eu-central-1.shapediver.com/api/v2/docs/) for more details.
15
+ Using the **ShapeDiver Geometry Backend API** allows access to ShapeDiver models without using the
16
+ **ShapeDiver Viewer**. This SDK provides functionality to communicate with the Geometry Backend API
17
+ **version 2**, and includes type hints describing request and response data objects. See the
18
+ [API documentation](https://sdeuc1.eu-central-1.shapediver.com/api/v2/docs/) for more details.
18
19
 
19
20
  ## Authentication
20
21
 
21
- The authentication system for the Geometry Backend API is based on **ticket objects** and **JWT tokens**, which are handled by the [ShapeDiver Platform](https://www.shapediver.com/app/).
22
- You can obtain **tickets** and **JWT tokens** by
22
+ The authentication system for the Geometry Backend API is based on **ticket objects** and **JWT
23
+ tokens**, which are handled by the [ShapeDiver Platform](https://www.shapediver.com/app/). You can
24
+ obtain **tickets** and **JWT tokens** by:
23
25
 
24
- - using your account on the [ShapeDiver Platform](https://www.shapediver.com/app/) (tickets only), or
25
- - you can obtain them programmatically using the [ShapeDiver Platform API](https://app.shapediver.com/api/documentation) (both tickets and JWT tokens).
26
+ - using your account on the [ShapeDiver Platform](https://www.shapediver.com/app/) (tickets only),
27
+ or
26
28
 
27
- An SDK for the [ShapeDiver Platform API](https://app.shapediver.com/api/documentation) will be released soon.
29
+ - you can obtain them programmatically using the [ShapeDiver Platform API](https://app.shapediver.com/api/documentation) (both tickets and JWT tokens).
28
30
 
29
- When obtaining a ticket for your model from the ShapeDiver Platform, please be aware that you will need a
31
+ An SDK for the [ShapeDiver Platform API](https://app.shapediver.com/api/documentation) will be
32
+ released soon.
30
33
 
31
- - _ticket for direct embedding_ in case you are accessing the Geometry Backend API from a web browser, or a
32
- - _ticket for backend access_ in case you are accessing the Geometry Backend API from an arbitrary client application that is not a web browser.
34
+ When obtaining a ticket for your model from the ShapeDiver Platform, please be aware that you will
35
+ need a _ticket for backend access_, since you are accessing the Geometry Backend API from an
36
+ arbitrary client application that is not a web browser. For more details see the [ShapeDiver
37
+ Help Center developer settings](https://help.shapediver.com/doc/developers-settings).
33
38
 
34
39
  ## Base URL
35
40
 
36
41
  The base URL to use depends on which ShapeDiver Geometry Backend System your model was uploaded to.
37
- You can find the base URL in your model's dashboard on the ShapeDiver Platform, it is also called the _model view url_.
42
+ You can find the base URL in your model's dashboard on the ShapeDiver Platform, it is also called
43
+ the _model view url_.
38
44
 
39
45
  ## Usage - Ticket only
40
46
 
41
- ```
42
- import { create } from "@shapediver/sdk.geometry-api-sdk-v2"
47
+ ```typescript
48
+ import { Configuration, SessionApi } from '@shapediver/sdk.geometry-api-sdk-v2';
43
49
 
44
50
  (async function () {
45
- # Please see above on how to obtain a ticket
46
- const ticket = "8b23fae66cf535719a9ec797e390208b2003e3cfc894b7624ada2f6894515f8836a4-66303337623538322d34386"
51
+ // Please see above on how to obtain a ticket
52
+ const ticket = '8b23fae66cf535719a9ec797e390208b2003e3cfc894b7624ada2f6894515f8836a4-66303337623538322d34386';
47
53
 
48
- # Initialize the SDK by providing the base URL
49
- const sdk = create("https://sdeuc1.eu-central-1.shapediver.com")
54
+ // Initialize the SDK configuration instance by providing the base URL
55
+ const config = new Configuration({ basePath: 'https://sdeuc1.eu-central-1.shapediver.com' });
50
56
 
51
- # This initializes a new session and returns your ShapeDiver Model and your session
52
- const res = await sdk.session.init(ticket)
53
- console.log(res)
54
- })()
57
+ // Initialize a new session using the ticket.
58
+ const res = (await new SessionApi(config).createSessionByTicket(ticket)).data;
59
+
60
+ console.log(res);
61
+ })();
55
62
  ```
56
63
 
57
64
  ## Usage - Ticket and JWT
58
65
 
59
- It is possible to configure your ShapeDiver models such that JWT tokens are required to communicate with them, which provides a strong authorisation mechanism.
60
- In this case you will need to use the [ShapeDiver Platform API](https://app.shapediver.com/api/documentation) to obtain a JWT token for your model on demand.
66
+ It is possible to configure your ShapeDiver models such that JWT tokens are required to communicate
67
+ with them, which provides a strong authorisation mechanism. In this case you will need to use the
68
+ [ShapeDiver Platform API](https://app.shapediver.com/api/documentation) to obtain a JWT token for
69
+ your model on demand:
61
70
 
62
- ```
63
- import { create } from "@shapediver/sdk.geometry-api-sdk-v2"
71
+ ```typescript
72
+ import { Configuration, SessionApi } from '@shapediver/sdk.geometry-api-sdk-v2';
64
73
 
65
74
  (async function () {
66
- # Please see above on how to obtain a ticket and a JWT
67
- const jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp1c3QgYSB0ZXN0IiwiaWF0IjoxNjE4OTExMjcxLCJleHAiOjE2MTg5MTQ4OTcsImp0aSI6IjYzMjA3ODE3LWJiNWQtNDY3Zi04NzRkLWM4N2EyYzAxYmZlZCJ9.S5Ps_Fx5p6aJxdBOJMBKgpf2SIlp--6kkIZU55tiqEg"
68
- const ticket = "8b23fae66cf535719a9ec797e390208b2003e3cfc894b7624ada2f6894515f8836a4-66303337623538322d34386"
75
+ // Please see above on how to obtain a ticket and a JWT.
76
+ const jwt = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikp1c3QgYSB0ZXN0IiwiaWF0IjoxNjE4OTExMjcxLCJleHAiOjE2MTg5MTQ4OTcsImp0aSI6IjYzMjA3ODE3LWJiNWQtNDY3Zi04NzRkLWM4N2EyYzAxYmZlZCJ9.S5Ps_Fx5p6aJxdBOJMBKgpf2SIlp--6kkIZU55tiqEg';
77
+ const ticket = '8b23fae66cf535719a9ec797e390208b2003e3cfc894b7624ada2f6894515f8836a4-66303337623538322d34386';
69
78
 
70
- # Initialize the SDK by providing the base URL and your JWT
71
- const sdk = create("https://sdeuc1.eu-central-1.shapediver.com", jwt)
79
+ // Initialize the SDK client instance by providing the base URL
80
+ const config = new Configuration({
81
+ basePath: 'https://sdeuc1.eu-central-1.shapediver.com',
82
+ accessToken: jwt,
83
+ });
72
84
 
73
- # This initializes a new session and returns your ShapeDiver Model and your session
74
- const res = await sdk.session.init(ticket)
75
- console.log(res)
76
- })()
85
+ // Initialize a new session using the ticket.
86
+ const res = (await new SessionApi(config).createSessionByTicket(ticket)).data;
87
+
88
+ console.log(res);
89
+ })();
77
90
  ```
78
91
 
79
92
  ## Handling Errors
80
93
 
81
- The SDK provides type guards to distinguish between error types.
94
+ The SDK provides a helper function to extract ShapeDiver error information from an `AxiosError`:
82
95
 
83
- ```
96
+ ```typescript
84
97
  import {
85
- isGBError,
86
- isGBGenericError,
87
- isGBRequestError,
88
- isGBResponseError,
98
+ processError,
99
+ SdError,
100
+ SdRequestError,
101
+ SdResponseError,
89
102
  } from "@shapediver/sdk.geometry-api-sdk-v2"
90
103
 
91
104
  try {
92
105
  sdk.model.get("be5d4ce5-f76d-417d-8496-1f038e6f0cab")
93
- catch (e: any) {
94
- if (isGBRequestError(e)) {
106
+ catch (err) {
107
+ const e = processError(err);
108
+
109
+ if (e instanceof SdRequestError) {
95
110
  // e is a request error.
96
111
  // In this case, the request was made but no response was received.
97
112
  }
98
113
 
99
- if (isGBResponseError(e)) {
114
+ if (e instanceof SdResponseError) {
100
115
  // e is a response error.
101
116
  // In this case, the request was made and the server responded with a status code that falls
102
117
  // out of the range of 2xx.
103
118
  }
104
119
 
105
- if (isGBGenericError(e)) {
120
+ if (e instanceof SdError) {
106
121
  // e is a generic error.
107
122
  // Generic errors are used for everything that is neither a request error nor a response error.
108
123
  }
109
-
110
- if (isGBError(e)) {
111
- // e is either a generic error, request error or response error.
112
- }
113
124
  }
114
125
  ```
115
126
 
116
127
  ## Examples
117
128
 
118
- Some practical use cases, we will regularly extend the list:
129
+ Examples on how to interact with available endpoints are given in the
130
+ [tests](https://github.com/shapediver/GeometryBackendSdkTypeScript/tree/master/packages/sdk.geometry-api-sdk-v2/__tests__) folder.
131
+
132
+ ## Making Changes & Contributing
133
+
134
+ Most of the code in this repository has been generated via the
135
+ [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator). The specification of the
136
+ Geometry Backend API version 2 can be found in the
137
+ [ShapeDiver
138
+ OAS](https://github.com/shapediver/OpenApiSpecifications/blob/main/geometry_backend_v2.yaml)
139
+ repository. Additionally, we have added wrappers and utility functions to improve overall
140
+ usability.
141
+
142
+ ### Setup
143
+
144
+ This project is written in _TypeScript_ and uses [PNPM](https://pnpm.io/) as a dependency manager.
145
+ Project-specific commands are handled either via [NPM](https://docs.npmjs.com/cli/v8) or
146
+ [just](https://github.com/casey/just), so make sure that both tools are installed. To get an
147
+ overview of all available commands run `npm run -l` and `just --list`.
148
+
149
+ Run the following commands to install all dependencies:
150
+
151
+ ```bash
152
+ npm run init
153
+ ```
154
+
155
+ ## Generate Code
156
+
157
+ To re-generate the code from the
158
+ [ShapeDiver
159
+ OAS](https://github.com/shapediver/OpenApiSpecifications/blob/main/geometry_backend_v2.yaml)
160
+ file, you need to install version 7 of the
161
+ [OpenAPI
162
+ Generator](https://github.com/OpenAPITools/openapi-generator?tab=readme-ov-file#1---installation).
163
+ We recommend installing it as a global NPM package:
164
+
165
+ ```bash
166
+ npm i -g openapi-generator
167
+ ```
168
+
169
+ Afterwards, update the local file `./oas_spec.yaml` and generate the new code via
170
+ `just generate <version>`. The _version_ argument represents the respective Git tag from
171
+ [ShapeDiver OAS](https://github.com/shapediver/OpenApiSpecifications/tags). For instance, use
172
+ version "1.0.0" when targeting the Git tag "gb_v2@1.0.0".
173
+
174
+ Alternatively, the client can be generated from a local file. Check out the [ShapeDiver OAS
175
+ repository](https://github.com/shapediver/OpenApiSpecifications) and run `just generate local`.
176
+
177
+ ## Release
178
+
179
+ Before releasing a new versions of this package ensure that you have configured everything in your
180
+ `~/.npmrc` file. Afterwards, run `npm run publish` and follow the CLI to build, publish, and commit
181
+ a new version of the TypeScript package.
182
+ Before releasing a new version of this package, ensure that your `~/.npmrc` file is fully
183
+ configured. Then, run `npm run publish` and follow the CLI instructions to build, publish, and
184
+ commit the new version of the TypeScript package.
185
+
186
+ ## Test
187
+
188
+ Unit and integration tests can be executed via `npm run test`. However, should you want to run only
189
+ a single test file then run `npx jest -i --forceExit <path>` within the package instead.
190
+
191
+ ## Versioning
119
192
 
120
- - [A Twitter Bot calling a ShapeDiver Model](https://github.com/shapediver/ServerlessExample-TwitterBot):
121
- This example shows how to run computations using a ShapeDiver Model which has image and data inputs and outputs.
193
+ We take care to provide backwards compatibility for all older versions.
194
+ However, new features might be limited to newer API versions.
195
+ Therefore, we recommend always using the newest API version out there.
122
196
 
123
197
  ## Support
124
198
 
@@ -128,4 +202,5 @@ You can find out more about ShapeDiver [right here](https://www.shapediver.com/)
128
202
 
129
203
  ## Licensing
130
204
 
131
- This project is released under the [MIT License](https://github.com/shapediver/GeometryBackendSdkTypeScript/blob/master/packages/sdk.geometry-api-sdk-v2/LICENSE).
205
+ This project is released under the [MIT
206
+ License](https://github.com/shapediver/GeometryBackendSdkTypeScript/blob/master/LICENSE).
@@ -0,0 +1,20 @@
1
+ import { AxiosInstance, AxiosPromise, RawAxiosRequestConfig } from 'axios';
2
+ import { Configuration, ReqCustomization, ReqExport, ResAssetUploadHeaders, ResComputeExports, ResComputeOutputs } from './client';
3
+ import { BaseAPI } from './client/base';
4
+ export declare class UtilsApi extends BaseAPI {
5
+ constructor(configuration?: Configuration, basePath?: string, axios?: AxiosInstance);
6
+ upload(url: string, data: string | Record<string, any> | ArrayBuffer | File, contentType: string, filename?: string, options?: RawAxiosRequestConfig): AxiosPromise<unknown>;
7
+ uploadAsset(url: string, data: string | Record<string, any> | ArrayBuffer | File, headers: ResAssetUploadHeaders, options?: RawAxiosRequestConfig): AxiosPromise<unknown>;
8
+ download(url: string, options?: RawAxiosRequestConfig): AxiosPromise<File>;
9
+ downloadAsset(url: string, options?: RawAxiosRequestConfig): [AxiosPromise<File>, 'export' | 'output' | 'texture'];
10
+ downloadImage(sessionId: string, url: string, options?: RawAxiosRequestConfig): AxiosPromise<File>;
11
+ submitAndWaitForOutput(sessionId: string, body: ReqCustomization, maxWaitMsec?: number, options?: RawAxiosRequestConfig): Promise<ResComputeOutputs>;
12
+ submitAndWaitForExport(sessionId: string, body: ReqExport, maxWaitMsec?: number, options?: RawAxiosRequestConfig): Promise<ResComputeExports>;
13
+ private waitForOutputResult;
14
+ private waitForExportResult;
15
+ private getMaxOutputDelay;
16
+ private getMaxExportDelay;
17
+ private buildRequest;
18
+ private disableAuthHeaderForShapeDiverUris;
19
+ }
20
+ //# sourceMappingURL=UtilsApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UtilsApi.d.ts","sourceRoot":"","sources":["../src/UtilsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,qBAAqB,EAA0B,MAAM,OAAO,CAAC;AAEnG,OAAO,EAEH,aAAa,EAIb,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EAKpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,OAAO,EAAe,MAAM,eAAe,CAAC;AAkBrD,qBAAa,QAAS,SAAQ,OAAO;gBACrB,aAAa,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa;IAY5E,MAAM,CACT,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,GAAG,IAAI,EACvD,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAChC,YAAY,CAAC,OAAO,CAAC;IAsBjB,WAAW,CACd,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,GAAG,IAAI,EACvD,OAAO,EAAE,qBAAqB,EAC9B,OAAO,CAAC,EAAE,qBAAqB,GAChC,YAAY,CAAC,OAAO,CAAC;IAqBjB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,YAAY,CAAC,IAAI,CAAC;IAY1E,aAAa,CAChB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,qBAAqB,GAChC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAwBjD,aAAa,CAChB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,qBAAqB,GAChC,YAAY,CAAC,IAAI,CAAC;IAwBR,sBAAsB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,gBAAgB,EACtB,WAAW,SAAK,EAChB,OAAO,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,iBAAiB,CAAC;IAqBhB,sBAAsB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,EACf,WAAW,SAAK,EAChB,OAAO,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,iBAAiB,CAAC;YAqBf,mBAAmB;YAsDnB,mBAAmB;IAuCjC,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,iBAAiB;IA0BzB,OAAO,CAAC,YAAY;IA2BpB,OAAO,CAAC,kCAAkC;CAW7C"}
@@ -0,0 +1,185 @@
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.UtilsApi = void 0;
13
+ const common_1 = require("./client/common");
14
+ const client_1 = require("./client");
15
+ const base_1 = require("./client/base");
16
+ const utils_1 = require("./utils");
17
+ const error_1 = require("./error");
18
+ const apiAssetExportUri = /.+\/session\/.+\/export\/.+/;
19
+ const apiAssetOutputUri = /.+\/session\/.+\/output\/.+/;
20
+ const apiAssetTextureUri = /.+\/session\/.+\/texture\/.+/;
21
+ const cdnAssetUri = /.+\/cdn-asset-(exports|outputs|textures)\/.+/;
22
+ const cdnAssetExportUri = /.+\/cdn-asset-exports\/.+/;
23
+ const cdnAssetOutputUri = /.+\/cdn-asset-outputs\/.+/;
24
+ const cdnAssetTextureUri = /.+\/cdn-asset-textures\/.+/;
25
+ const directDownloadUri = /^(http[s]?:\/\/)?(viewer|textures|downloads)\.shapediver\.com(\/.*)?$/;
26
+ class UtilsApi extends base_1.BaseAPI {
27
+ constructor(configuration, basePath, axios) {
28
+ super(configuration, basePath, axios);
29
+ }
30
+ upload(url, data, contentType, filename, options) {
31
+ const reqHeaders = {
32
+ Authorization: undefined,
33
+ 'Content-Type': contentType,
34
+ };
35
+ if (filename)
36
+ reqHeaders['Content-Disposition'] = (0, utils_1.contentDispositionFromFilename)(filename);
37
+ const reqOptions = Object.assign({}, options);
38
+ reqOptions.headers = Object.assign(Object.assign({}, reqHeaders), options === null || options === void 0 ? void 0 : options.headers);
39
+ const request = this.buildRequest('PUT', url, data, reqOptions)();
40
+ return request();
41
+ }
42
+ uploadAsset(url, data, headers, options) {
43
+ const reqHeaders = {
44
+ Authorization: undefined,
45
+ 'Content-Type': headers.contentType,
46
+ };
47
+ if (headers.contentDisposition)
48
+ reqHeaders['Content-Disposition'] = headers.contentDisposition;
49
+ const reqOptions = Object.assign({}, options);
50
+ reqOptions.headers = Object.assign(Object.assign({}, reqHeaders), options === null || options === void 0 ? void 0 : options.headers);
51
+ const request = this.buildRequest('PUT', url, data, reqOptions)();
52
+ return request();
53
+ }
54
+ download(url, options) {
55
+ const request = this.buildRequest('GET', url, options)();
56
+ return request();
57
+ }
58
+ downloadAsset(url, options) {
59
+ let type;
60
+ this.disableAuthHeaderForShapeDiverUris(url, options);
61
+ if (apiAssetExportUri.test(url) || cdnAssetExportUri.test(url))
62
+ type = 'export';
63
+ else if (apiAssetOutputUri.test(url) || cdnAssetOutputUri.test(url))
64
+ type = 'output';
65
+ else if (apiAssetTextureUri.test(url) || cdnAssetTextureUri.test(url))
66
+ type = 'texture';
67
+ else {
68
+ throw new error_1.IllegalArgumentError(`Cannot fetch asset: Invalid URL '${url}' - Only ShapeDiver asset URLs are allowed.`);
69
+ }
70
+ return [this.download(url, options), type];
71
+ }
72
+ downloadImage(sessionId, url, options) {
73
+ this.disableAuthHeaderForShapeDiverUris(url, options);
74
+ if (apiAssetTextureUri.test(url) ||
75
+ cdnAssetTextureUri.test(url) ||
76
+ directDownloadUri.test(url)) {
77
+ return this.download(url, options);
78
+ }
79
+ else {
80
+ return new client_1.AssetsApi(this.configuration).downloadImage(sessionId, url, options);
81
+ }
82
+ }
83
+ submitAndWaitForOutput(sessionId_1, body_1) {
84
+ return __awaiter(this, arguments, void 0, function* (sessionId, body, maxWaitMsec = -1, options) {
85
+ const startMsec = Date.now();
86
+ const dto = (yield new client_1.OutputApi(this.configuration).computeOutputs(sessionId, body, options)).data;
87
+ const waitMsec = Date.now() - startMsec;
88
+ maxWaitMsec = maxWaitMsec < 0 ? maxWaitMsec : Math.max(0, maxWaitMsec - waitMsec);
89
+ return this.waitForOutputResult(sessionId, dto, maxWaitMsec, options);
90
+ });
91
+ }
92
+ submitAndWaitForExport(sessionId_1, body_1) {
93
+ return __awaiter(this, arguments, void 0, function* (sessionId, body, maxWaitMsec = -1, options) {
94
+ const startMsec = Date.now();
95
+ const dto = (yield new client_1.ExportApi(this.configuration).computeExports(sessionId, body, options)).data;
96
+ const waitMsec = Date.now() - startMsec;
97
+ maxWaitMsec = maxWaitMsec < 0 ? maxWaitMsec : Math.max(0, maxWaitMsec - waitMsec);
98
+ return this.waitForExportResult(sessionId, body, dto, maxWaitMsec, options);
99
+ });
100
+ }
101
+ waitForOutputResult(sessionId, dto, maxWaitMsec, options) {
102
+ return __awaiter(this, void 0, void 0, function* () {
103
+ if (!dto.outputs)
104
+ return dto;
105
+ const outputVersions = {};
106
+ Object.keys(dto.outputs).forEach((id) => (outputVersions[id] = dto.outputs[id].version));
107
+ let delay = this.getMaxOutputDelay(dto);
108
+ const startMsec = Date.now();
109
+ while (delay > 0) {
110
+ if (maxWaitMsec >= 0) {
111
+ const waitMsec = Date.now() - startMsec;
112
+ if (waitMsec >= maxWaitMsec) {
113
+ throw new error_1.TimeoutError(`Maximum wait time of ${maxWaitMsec} ms reached`);
114
+ }
115
+ if (waitMsec + delay > maxWaitMsec) {
116
+ delay = maxWaitMsec - waitMsec;
117
+ }
118
+ }
119
+ yield (0, utils_1.sleep)(delay);
120
+ dto = (yield new client_1.OutputApi(this.configuration).getCachedOutputs(sessionId, outputVersions, options)).data;
121
+ delay = this.getMaxOutputDelay(dto);
122
+ }
123
+ return dto;
124
+ });
125
+ }
126
+ waitForExportResult(sessionId, body, dto, maxWaitMsec, options) {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ let delay = this.getMaxExportDelay(body, dto);
129
+ const startMsec = Date.now();
130
+ while (delay > 0) {
131
+ if (maxWaitMsec >= 0) {
132
+ const waitMsec = Date.now() - startMsec;
133
+ if (waitMsec >= maxWaitMsec) {
134
+ throw new error_1.TimeoutError(`Maximum wait time of ${maxWaitMsec} ms reached`);
135
+ }
136
+ if (waitMsec + delay > maxWaitMsec) {
137
+ delay = maxWaitMsec - waitMsec;
138
+ }
139
+ }
140
+ yield (0, utils_1.sleep)(delay);
141
+ dto = (yield new client_1.ExportApi(this.configuration).getCachedExports(sessionId, body, options)).data;
142
+ delay = this.getMaxExportDelay(body, dto);
143
+ }
144
+ return dto;
145
+ });
146
+ }
147
+ getMaxOutputDelay(dto) {
148
+ var _a;
149
+ return Math.max(...Object.values((_a = dto.outputs) !== null && _a !== void 0 ? _a : {}).map((output) => { var _a; return (_a = output.delay) !== null && _a !== void 0 ? _a : -1; }), -1);
150
+ }
151
+ getMaxExportDelay(body, dto) {
152
+ var _a, _b, _c, _d;
153
+ const exports = (_a = body.exports) !== null && _a !== void 0 ? _a : [];
154
+ const outputs = (_b = body.outputs) !== null && _b !== void 0 ? _b : [];
155
+ return Math.max(...Object.values((_c = dto.exports) !== null && _c !== void 0 ? _c : {})
156
+ .filter((e) => exports.includes(e.id))
157
+ .map((e) => { var _a; return (_a = e.delay) !== null && _a !== void 0 ? _a : -1; }), ...Object.values((_d = dto.outputs) !== null && _d !== void 0 ? _d : {})
158
+ .filter((o) => outputs.includes(o.id))
159
+ .map((o) => { var _a; return (_a = o.delay) !== null && _a !== void 0 ? _a : -1; }), -1);
160
+ }
161
+ buildRequest(method, url, data, options = {}) {
162
+ return (basePath = '') => {
163
+ var _a, _b, _c;
164
+ const baseOptions = (_b = (_a = this.configuration) === null || _a === void 0 ? void 0 : _a.baseOptions) !== null && _b !== void 0 ? _b : {};
165
+ const baseHeaders = baseOptions && baseOptions.headers ? baseOptions.headers : {};
166
+ const reqOptions = Object.assign(Object.assign({ method }, baseOptions), options);
167
+ reqOptions.headers = Object.assign(Object.assign({}, baseHeaders), options.headers);
168
+ if (!reqOptions.data && data) {
169
+ const configuration = (_c = this.configuration) !== null && _c !== void 0 ? _c : new client_1.Configuration();
170
+ reqOptions.data = (0, common_1.serializeDataIfNeeded)(data, reqOptions, configuration);
171
+ }
172
+ const axiosArgs = { url, options: reqOptions };
173
+ return (0, common_1.createRequestFunction)(axiosArgs, this.axios, basePath, this.configuration).bind(this.axios);
174
+ };
175
+ }
176
+ disableAuthHeaderForShapeDiverUris(url, options) {
177
+ var _a;
178
+ options = Object.assign({}, options);
179
+ if (!((_a = options.headers) === null || _a === void 0 ? void 0 : _a.Authorization) &&
180
+ (cdnAssetUri.test(url) || directDownloadUri.test(url)))
181
+ options.headers = Object.assign({ Authorization: undefined }, options.headers);
182
+ }
183
+ }
184
+ exports.UtilsApi = UtilsApi;
185
+ //# sourceMappingURL=UtilsApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UtilsApi.js","sourceRoot":"","sources":["../src/UtilsApi.ts"],"names":[],"mappings":"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"}