avvir 7.1.5 → 7.1.7

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 (172) hide show
  1. package/dist/avvir_api.node.js +818 -593
  2. package/dist/esm/api/comment_api.d.ts +2 -2
  3. package/dist/esm/api/comment_api.js.map +1 -1
  4. package/dist/esm/api/element_api.d.ts +3 -3
  5. package/dist/esm/api/element_api.js.map +1 -1
  6. package/dist/esm/api/file_information_api.d.ts +3 -2
  7. package/dist/esm/api/file_information_api.js +4 -5
  8. package/dist/esm/api/file_information_api.js.map +1 -1
  9. package/dist/esm/api/floor_api.d.ts +3 -5
  10. package/dist/esm/api/floor_api.js +2 -1
  11. package/dist/esm/api/floor_api.js.map +1 -1
  12. package/dist/esm/api/group_api.d.ts +3 -3
  13. package/dist/esm/api/group_api.js.map +1 -1
  14. package/dist/esm/api/integrations_api.d.ts +8 -2
  15. package/dist/esm/api/integrations_api.js +21 -0
  16. package/dist/esm/api/integrations_api.js.map +1 -1
  17. package/dist/esm/api/photo_area_api.d.ts +2 -2
  18. package/dist/esm/api/photo_area_api.js +1 -1
  19. package/dist/esm/api/photo_area_api.js.map +1 -1
  20. package/dist/esm/api/pipeline_api.d.ts +2 -3
  21. package/dist/esm/api/pipeline_api.js.map +1 -1
  22. package/dist/esm/api/project_api.d.ts +3 -4
  23. package/dist/esm/api/project_api.js +6 -3
  24. package/dist/esm/api/project_api.js.map +1 -1
  25. package/dist/esm/api/recipe_api.d.ts +2 -3
  26. package/dist/esm/api/recipe_api.js.map +1 -1
  27. package/dist/esm/api/report_api.d.ts +2 -3
  28. package/dist/esm/api/report_api.js +1 -1
  29. package/dist/esm/api/report_api.js.map +1 -1
  30. package/dist/esm/api/scan_dataset_api.d.ts +4 -3
  31. package/dist/esm/api/scan_dataset_api.js +11 -3
  32. package/dist/esm/api/scan_dataset_api.js.map +1 -1
  33. package/dist/esm/api/trade_api.d.ts +2 -5
  34. package/dist/esm/api/trade_api.js.map +1 -1
  35. package/dist/esm/api/web_gateway_api.d.ts +2 -6
  36. package/dist/esm/api/web_gateway_api.js +9 -4
  37. package/dist/esm/api/web_gateway_api.js.map +1 -1
  38. package/dist/esm/api/work_package_api.d.ts +2 -2
  39. package/dist/esm/api/work_package_api.js.map +1 -1
  40. package/dist/esm/converters/date_converter.d.ts +2 -1
  41. package/dist/esm/converters/date_converter.js +14 -0
  42. package/dist/esm/converters/date_converter.js.map +1 -1
  43. package/dist/esm/index.d.ts +1 -0
  44. package/dist/esm/index.js +1 -0
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/mixins/add_date_getter_and_setter_to_domain_model.d.ts +1 -1
  47. package/dist/esm/mixins/add_date_getter_and_setter_to_domain_model.js.map +1 -1
  48. package/dist/esm/mixins/add_instant_getter_and_setter_to_api_model.d.ts +1 -1
  49. package/dist/esm/mixins/add_instant_getter_and_setter_to_api_model.js.map +1 -1
  50. package/dist/esm/models/api/api_action_payload.d.ts +1 -1
  51. package/dist/esm/models/api/api_cloud_file.d.ts +2 -5
  52. package/dist/esm/models/api/api_cloud_file.js +1 -1
  53. package/dist/esm/models/api/api_cloud_file.js.map +1 -1
  54. package/dist/esm/models/api/api_cloud_file_location_3d.d.ts +1 -1
  55. package/dist/esm/models/api/api_cloud_file_location_3d.js.map +1 -1
  56. package/dist/esm/models/api/api_integration_credentials.d.ts +1 -1
  57. package/dist/esm/models/api/api_integration_project.d.ts +1 -1
  58. package/dist/esm/models/api/api_masterformat_progress.d.ts +1 -1
  59. package/dist/esm/models/api/api_pipeline.d.ts +1 -1
  60. package/dist/esm/models/api/api_project.d.ts +1 -1
  61. package/dist/esm/models/api/api_project_cost_analysis_progress.d.ts +1 -1
  62. package/dist/esm/models/api/api_project_masterformat_progress.d.ts +1 -1
  63. package/dist/esm/models/api/api_running_process.d.ts +1 -1
  64. package/dist/esm/models/api/api_view.d.ts +1 -1
  65. package/dist/esm/models/api/index.d.ts +64 -66
  66. package/dist/esm/models/api/index.js +63 -65
  67. package/dist/esm/models/api/index.js.map +1 -1
  68. package/dist/esm/models/api/integrations/autodesk/api_access_token.d.ts +8 -0
  69. package/dist/esm/models/api/integrations/autodesk/api_access_token.js +10 -0
  70. package/dist/esm/models/api/integrations/autodesk/api_access_token.js.map +1 -0
  71. package/dist/esm/models/api/integrations/autodesk/api_autodesk_attriibutes.d.ts +3 -0
  72. package/dist/esm/models/api/integrations/autodesk/api_autodesk_attriibutes.js +3 -0
  73. package/dist/esm/models/api/integrations/autodesk/api_autodesk_attriibutes.js.map +1 -0
  74. package/dist/esm/models/api/integrations/autodesk/api_hubs.d.ts +7 -0
  75. package/dist/esm/models/api/integrations/autodesk/api_hubs.js +8 -0
  76. package/dist/esm/models/api/integrations/autodesk/api_hubs.js.map +1 -0
  77. package/dist/esm/models/api/integrations/autodesk/api_projects.d.ts +7 -0
  78. package/dist/esm/models/api/integrations/autodesk/api_projects.js +8 -0
  79. package/dist/esm/models/api/integrations/autodesk/api_projects.js.map +1 -0
  80. package/dist/esm/models/api/integrations/autodesk/index.d.ts +4 -0
  81. package/dist/esm/models/api/integrations/autodesk/index.js +5 -0
  82. package/dist/esm/models/api/integrations/autodesk/index.js.map +1 -0
  83. package/dist/esm/models/api/integrations/index.d.ts +2 -0
  84. package/dist/esm/models/api/integrations/index.js +3 -0
  85. package/dist/esm/models/api/integrations/index.js.map +1 -0
  86. package/dist/esm/models/api/{PbeTsvType.js → pbe_tsv_type.js} +1 -1
  87. package/dist/esm/models/api/pbe_tsv_type.js.map +1 -0
  88. package/dist/esm/models/api/{api_photo_area.js → photos/api_photo_area.js} +1 -1
  89. package/dist/esm/models/api/photos/api_photo_area.js.map +1 -0
  90. package/dist/esm/models/api/{api_photo_location.d.ts → photos/api_photo_location.d.ts} +4 -4
  91. package/dist/esm/models/api/{api_photo_location.js → photos/api_photo_location.js} +1 -1
  92. package/dist/esm/models/api/photos/api_photo_location.js.map +1 -0
  93. package/dist/esm/models/api/{api_photo_location_3d.d.ts → photos/api_photo_location_3d.d.ts} +2 -2
  94. package/dist/esm/models/api/{api_photo_location_3d.js → photos/api_photo_location_3d.js} +2 -2
  95. package/dist/esm/models/api/photos/api_photo_location_3d.js.map +1 -0
  96. package/dist/esm/models/api/{api_photo_session.d.ts → photos/api_photo_session.d.ts} +1 -1
  97. package/dist/esm/models/api/{api_photo_session.js → photos/api_photo_session.js} +2 -2
  98. package/dist/esm/models/api/photos/api_photo_session.js.map +1 -0
  99. package/dist/esm/models/api/photos/index.d.ts +4 -0
  100. package/dist/esm/models/api/photos/index.js +5 -0
  101. package/dist/esm/models/api/photos/index.js.map +1 -0
  102. package/dist/esm/models/enums/api_purpose_type.js.map +1 -0
  103. package/dist/esm/{models/api/type_aliases.d.ts → typings/type_aliases/index.d.ts} +31 -25
  104. package/dist/esm/typings/type_aliases/index.js +2 -0
  105. package/dist/esm/typings/type_aliases/index.js.map +1 -0
  106. package/dist/esm/utilities/{pollPipeline.js → poll_pipeline.js} +1 -1
  107. package/dist/esm/utilities/poll_pipeline.js.map +1 -0
  108. package/package.json +1 -1
  109. package/source/api/comment_api.ts +9 -6
  110. package/source/api/element_api.ts +7 -5
  111. package/source/api/file_information_api.ts +8 -8
  112. package/source/api/floor_api.ts +6 -7
  113. package/source/api/group_api.ts +5 -4
  114. package/source/api/integrations_api.ts +166 -127
  115. package/source/api/photo_area_api.ts +5 -3
  116. package/source/api/pipeline_api.ts +6 -6
  117. package/source/api/project_api.ts +21 -15
  118. package/source/api/recipe_api.ts +3 -3
  119. package/source/api/report_api.ts +52 -37
  120. package/source/api/scan_dataset_api.ts +24 -10
  121. package/source/api/trade_api.ts +7 -7
  122. package/source/api/web_gateway_api.ts +57 -27
  123. package/source/api/work_package_api.ts +4 -2
  124. package/source/converters/date_converter.ts +14 -1
  125. package/source/index.ts +1 -0
  126. package/source/mixins/add_date_getter_and_setter_to_domain_model.ts +3 -1
  127. package/source/mixins/add_instant_getter_and_setter_to_api_model.ts +2 -1
  128. package/source/models/api/api_action_payload.ts +1 -1
  129. package/source/models/api/api_cloud_file.ts +2 -3
  130. package/source/models/api/api_cloud_file_location_3d.ts +3 -2
  131. package/source/models/api/api_integration_credentials.ts +1 -1
  132. package/source/models/api/api_integration_project.ts +1 -1
  133. package/source/models/api/api_masterformat_progress.ts +1 -1
  134. package/source/models/api/api_pipeline.ts +1 -1
  135. package/source/models/api/api_project.ts +1 -1
  136. package/source/models/api/api_project_cost_analysis_progress.ts +1 -1
  137. package/source/models/api/api_project_masterformat_progress.ts +1 -1
  138. package/source/models/api/api_running_process.ts +1 -1
  139. package/source/models/api/api_view.ts +1 -1
  140. package/source/models/api/index.ts +64 -66
  141. package/source/models/api/integrations/autodesk/api_access_token.ts +16 -0
  142. package/source/models/api/integrations/autodesk/api_autodesk_attriibutes.ts +3 -0
  143. package/source/models/api/integrations/autodesk/api_hubs.ts +13 -0
  144. package/source/models/api/integrations/autodesk/api_projects.ts +13 -0
  145. package/source/models/api/integrations/autodesk/index.ts +4 -0
  146. package/source/models/api/integrations/index.ts +2 -0
  147. package/source/models/api/{api_photo_area.ts → photos/api_photo_area.ts} +10 -2
  148. package/source/models/api/{api_photo_location.ts → photos/api_photo_location.ts} +5 -5
  149. package/source/models/api/{api_photo_location_3d.ts → photos/api_photo_location_3d.ts} +3 -3
  150. package/source/models/api/{api_photo_session.ts → photos/api_photo_session.ts} +3 -3
  151. package/source/models/api/photos/index.ts +4 -0
  152. package/source/typings/modules.d.ts +0 -16
  153. package/source/{models/api/type_aliases.ts → typings/type_aliases/index.ts} +32 -22
  154. package/source/utilities/poll_pipeline.ts +19 -0
  155. package/dist/esm/models/api/PbeTsvType.js.map +0 -1
  156. package/dist/esm/models/api/api_photo_area.js.map +0 -1
  157. package/dist/esm/models/api/api_photo_location.js.map +0 -1
  158. package/dist/esm/models/api/api_photo_location_3d.js.map +0 -1
  159. package/dist/esm/models/api/api_photo_session.js.map +0 -1
  160. package/dist/esm/models/api/api_purpose_type.js.map +0 -1
  161. package/dist/esm/models/api/type_aliases.js +0 -2
  162. package/dist/esm/models/api/type_aliases.js.map +0 -1
  163. package/dist/esm/utilities/pollPipeline.js.map +0 -1
  164. package/source/typings/type_aliases/index.d.ts +0 -65
  165. package/source/utilities/pollPipeline.ts +0 -19
  166. /package/dist/esm/models/api/{PbeTsvType.d.ts → pbe_tsv_type.d.ts} +0 -0
  167. /package/dist/esm/models/api/{api_photo_area.d.ts → photos/api_photo_area.d.ts} +0 -0
  168. /package/dist/esm/models/{api → enums}/api_purpose_type.d.ts +0 -0
  169. /package/dist/esm/models/{api → enums}/api_purpose_type.js +0 -0
  170. /package/dist/esm/utilities/{pollPipeline.d.ts → poll_pipeline.d.ts} +0 -0
  171. /package/source/models/api/{PbeTsvType.ts → pbe_tsv_type.ts} +0 -0
  172. /package/source/models/{api → enums}/api_purpose_type.ts +0 -0
@@ -1,151 +1,190 @@
1
- import {
2
- ApiIntegrationCredentials,
3
- ApiIntegrationCredentialsType,
4
- ApiIntegrationProject,
5
- ApiRunningProcess,
6
- AssociationIds,
7
- User
8
- } from "../models";
9
1
  import Http from "../utilities/http";
10
2
  import makeErrorsPretty from "../utilities/make_errors_pretty";
11
- import {ApiObservationRequest} from "../models/api/integrations/procore/api_observation_request";
12
3
 
13
- export default class IntegrationsApi {
14
-
15
- static getIntegrationCredentials({
16
- organizationId,
17
- projectId
18
- }: AssociationIds, credentialType: ApiIntegrationCredentialsType, user: User): Promise<ApiIntegrationCredentials> {
19
- const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialType}`;
20
- return Http.get(url, user) as unknown as Promise<ApiIntegrationCredentials>;
21
- }
4
+ import type ApiAutodeskAccessToken from "../models/api/integrations/autodesk/api_access_token";
5
+ import type ApiHubs from "../models/api/integrations/autodesk/api_hubs";
6
+ import type ApiProjects from "../models/api/integrations/autodesk/api_projects";
7
+ import type { ApiIntegrationCredentials, ApiIntegrationCredentialsType, ApiIntegrationProject, ApiObservationRequest, ApiRunningProcess, User } from "../models";
8
+ import type { AssociationIds } from "type_aliases";
22
9
 
23
- static getIntegrationProjectsForCredentials({
24
- organizationId,
25
- projectId
26
- }: AssociationIds, credentialType: ApiIntegrationCredentialsType, user: User): Promise<ApiIntegrationProject[]> {
27
- const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialType}/projects`;
28
- return Http.get(url, user) as unknown as Promise<ApiIntegrationProject[]>;
29
- }
10
+ export default class IntegrationsApi {
30
11
 
31
- static getProjectIntegrationCredentials({
12
+ static getIntegrationCredentials({
13
+ organizationId,
14
+ projectId
15
+ }: AssociationIds,
16
+ credentialType: ApiIntegrationCredentialsType,
17
+ user: User): Promise<ApiIntegrationCredentials> {
18
+ const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialType}`;
19
+ return Http.get(url, user) as unknown as Promise<ApiIntegrationCredentials>;
20
+ }
21
+
22
+ static getIntegrationProjectsForCredentials({
32
23
  organizationId,
33
24
  projectId
34
- }: AssociationIds, user: User): Promise<ApiIntegrationCredentials[]> {
35
- const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials`;
36
- return Http.get(url, user) as unknown as Promise<ApiIntegrationCredentials[]>;
25
+ }: AssociationIds,
26
+ credentialType: ApiIntegrationCredentialsType,
27
+ user: User): Promise<ApiIntegrationProject[]> {
28
+ const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialType}/projects`;
29
+ return Http.get(url, user) as unknown as Promise<ApiIntegrationProject[]>;
30
+ }
31
+
32
+ static getProjectIntegrationCredentials({
33
+ organizationId,
34
+ projectId
35
+ }: AssociationIds, user: User): Promise<ApiIntegrationCredentials[]> {
36
+ const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials`;
37
+ return Http.get(url, user) as unknown as Promise<ApiIntegrationCredentials[]>;
38
+ }
39
+
40
+ static saveIntegrationCredentials({
41
+ organizationId,
42
+ projectId
43
+ }: AssociationIds,
44
+ credentials: ApiIntegrationCredentials,
45
+ user: User): Promise<ApiIntegrationCredentials> {
46
+ const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentials.credentialsType}`;
47
+ return Http.put(url, user, credentials) as unknown as Promise<ApiIntegrationCredentials>;
48
+ }
49
+
50
+ static syncIntegrationProjects({
51
+ organizationId,
52
+ projectId
53
+ }: AssociationIds,
54
+ credentialsType: ApiIntegrationCredentialsType,
55
+ user: User): Promise<ApiRunningProcess> {
56
+ const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialsType}/sync-projects`;
57
+ return Http.post(url, user) as unknown as Promise<ApiRunningProcess>;
58
+ }
59
+
60
+ static syncIntegrationPhotoAreas({
61
+ organizationId,
62
+ projectId
63
+ }: AssociationIds,
64
+ credentialsType: ApiIntegrationCredentialsType,
65
+ user: User): Promise<ApiRunningProcess> {
66
+ const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialsType}/sync-photo-areas`;
67
+ return Http.post(url, user) as unknown as Promise<ApiRunningProcess>;
68
+ }
69
+
70
+ static updateProjectIntegrationProject({
71
+ organizationId,
72
+ projectId
73
+ }: AssociationIds,
74
+ integrationProject: ApiIntegrationProject | null,
75
+ user: User): Promise<void> {
76
+ const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/set-integration-project`;
77
+ return Http.post(url, user, integrationProject) as unknown as Promise<void>;
78
+ }
79
+
80
+ static checkProcoreAccessToken(procoreAccessToken: string,
81
+ user: User): Promise<{ expiresInSeconds: number }> {
82
+ if (!procoreAccessToken) {
83
+ return Promise.reject(new Error("Procore access token not found"));
37
84
  }
38
-
39
- static saveIntegrationCredentials({
40
- organizationId,
41
- projectId
42
- }: AssociationIds, credentials: ApiIntegrationCredentials, user: User): Promise<ApiIntegrationCredentials> {
43
- const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentials.credentialsType}`;
44
- return Http.put(url, user, credentials) as unknown as Promise<ApiIntegrationCredentials>;
85
+ let url = `${Http.baseUrl()}/integrations/procore/access-token?procore-access-token=${procoreAccessToken}`;
86
+ return Http.get(url, user) as unknown as Promise<{ expiresInSeconds: number }>;
87
+ }
88
+
89
+ static pushPdfToProcore({
90
+ projectId,
91
+ floorId,
92
+ scanDatasetId
93
+ }: AssociationIds,
94
+ procoreProjectId: string,
95
+ procoreCompanyId: string,
96
+ procoreAccessToken: string,
97
+ pdfType: string,
98
+ user: User): Promise<{
99
+ id: number
100
+ }>
101
+ {
102
+ if (!projectId) {
103
+ return Promise.reject(new Error("Project not loaded yet"));
45
104
  }
46
-
47
- static syncIntegrationProjects({
48
- organizationId,
49
- projectId
50
- }: AssociationIds, credentialsType: ApiIntegrationCredentialsType, user: User): Promise<ApiRunningProcess> {
51
- const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialsType}/sync-projects`;
52
- return Http.post(url, user) as unknown as Promise<ApiRunningProcess>;
105
+ const url = `${Http.baseUrl()}/projects/${projectId}/push-report-to-procore/${pdfType}?procore-project-id=${procoreProjectId}&procore-company-id=${procoreCompanyId}&procore-access-token=${procoreAccessToken}`;
106
+ return Http.post(url, user, null) as unknown as Promise<{ id: number }>;
107
+ }
108
+
109
+ static getProcoreProjects(procoreAccessToken: string,
110
+ companyId: string,
111
+ user: User): Promise<{ lastUpdated: number, projectId: string | number }[]> {
112
+ if (!procoreAccessToken) {
113
+ return Promise.reject(new Error("Procore access token not found"));
53
114
  }
54
-
55
- static syncIntegrationPhotoAreas({
56
- organizationId,
57
- projectId
58
- }: AssociationIds, credentialsType: ApiIntegrationCredentialsType, user: User): Promise<ApiRunningProcess> {
59
- const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/credentials/${credentialsType}/sync-photo-areas`;
60
- return Http.post(url, user) as unknown as Promise<ApiRunningProcess>;
115
+ let url = `${Http.baseUrl()}/integrations/procore/projects`;
116
+ const params = [];
117
+ params.push(`procore-access-token=${procoreAccessToken}`);
118
+ if (companyId) {
119
+ params.push(`companyId=${companyId}`);
61
120
  }
62
-
63
- static updateProjectIntegrationProject({
64
- organizationId,
65
- projectId
66
- }: AssociationIds, integrationProject: ApiIntegrationProject | null, user: User): Promise<void> {
67
- const url = `${Http.baseUrl()}/integrations/organizations/${organizationId}/projects/${projectId}/set-integration-project`;
68
- return Http.post(url, user, integrationProject) as unknown as Promise<void>;
121
+ url += "?" + params.join("&");
122
+ return Http.get(url, user) as unknown as Promise<{ lastUpdated: number, projectId: string | number }[]>;
123
+ }
124
+
125
+ static getProcoreCompanies(procoreAccessToken: string,
126
+ user: User): Promise<{ name: string, id: string | number }[]> {
127
+ if (!procoreAccessToken) {
128
+ return Promise.reject(new Error("Procore access token not found"));
69
129
  }
70
-
71
- static checkProcoreAccessToken(procoreAccessToken: string,
72
- user: User): Promise<{ expiresInSeconds: number }> {
73
- if (!procoreAccessToken) {
74
- return Promise.reject(new Error("Procore access token not found"));
75
- }
76
- let url = `${Http.baseUrl()}/integrations/procore/access-token?procore-access-token=${procoreAccessToken}`;
77
- return Http.get(url, user) as unknown as Promise<{ expiresInSeconds: number }>;
130
+ let url = `${Http.baseUrl()}/integrations/procore/companies?procore-access-token=${procoreAccessToken}`;
131
+ return Http.get(url, user) as unknown as Promise<{ name: string, id: string | number }[]>;
132
+ }
133
+
134
+ static listProcoreObservationTypes(procoreAccessToken: string,
135
+ companyId: string,
136
+ user: User): Promise<{ name: string, id: string | number, category: string }[]> {
137
+ if (!procoreAccessToken) {
138
+ return Promise.reject(new Error("Procore access token not found"));
78
139
  }
79
-
80
- static pushPdfToProcore({
81
- projectId,
82
- floorId,
83
- scanDatasetId
84
- }: AssociationIds, procoreProjectId: string, procoreCompanyId: string, procoreAccessToken: string, pdfType: string, user: User): Promise<{
85
- id: number
86
- }> {
87
- if (!projectId) {
88
- return Promise.reject(new Error("Project not loaded yet"));
89
- }
90
- const url = `${Http.baseUrl()}/projects/${projectId}/push-report-to-procore/${pdfType}?procore-project-id=${procoreProjectId}&procore-company-id=${procoreCompanyId}&procore-access-token=${procoreAccessToken}`;
91
- return Http.post(url, user, null) as unknown as Promise<{ id: number }>;
140
+ if (!companyId) {
141
+ return Promise.reject(new Error("company id not found"));
92
142
  }
93
-
94
- static getProcoreProjects(procoreAccessToken: string,
95
- companyId: string,
96
- user: User): Promise<{ lastUpdated: number, projectId: string | number }[]> {
97
- if (!procoreAccessToken) {
98
- return Promise.reject(new Error("Procore access token not found"));
99
- }
100
- let url = `${Http.baseUrl()}/integrations/procore/projects`;
101
- const params = [];
102
- params.push(`procore-access-token=${procoreAccessToken}`)
103
- if (companyId) {
104
- params.push(`companyId=${companyId}`)
105
- }
106
- url += "?" + params.join("&");
107
- return Http.get(url, user) as unknown as Promise<{ lastUpdated: number, projectId: string | number }[]>;
143
+ let url = `${Http.baseUrl()}/integrations/procore/${companyId}/observation-types?procore-access-token=${procoreAccessToken}`;
144
+ return Http.get(url, user) as unknown as Promise<{ name: string, id: string | number, category: string }[]>;
145
+ }
146
+
147
+ static CreateProcoreObservation(procoreAccessToken: string,
148
+ companyId: string,
149
+ projectId: string,
150
+ observationRequest: ApiObservationRequest,
151
+ user: User): Promise<void> {
152
+ if (!procoreAccessToken) {
153
+ return Promise.reject(new Error("Procore access token not found"));
154
+ }
155
+ if (!projectId) {
156
+ return Promise.reject(new Error("project id not found"));
157
+ }
158
+ if (!companyId) {
159
+ return Promise.reject(new Error("company id not found"));
108
160
  }
161
+ let url = `${Http.baseUrl()}/integrations/procore/${companyId}/${projectId}/create-observation?procore-access-token=${procoreAccessToken}`;
162
+ return Http.post(url, user, observationRequest) as unknown as Promise<void>;
163
+ }
109
164
 
110
- static getProcoreCompanies(procoreAccessToken: string,
111
- user: User): Promise<{ name: string, id: string | number }[]> {
112
- if (!procoreAccessToken) {
113
- return Promise.reject(new Error("Procore access token not found"));
114
- }
115
- let url = `${Http.baseUrl()}/integrations/procore/companies?procore-access-token=${procoreAccessToken}`;
116
- return Http.get(url, user) as unknown as Promise<{ name: string, id: string | number }[]>;
165
+ static getAutodeskAccessToken(code: string, redirectUri: string, user: User): Promise<ApiAutodeskAccessToken> {
166
+ if (!code || !redirectUri) {
167
+ return Promise.reject(new Error("Invalid client secret or redirectUri"));
117
168
  }
169
+ const url = `${Http.baseUrl()}/integrations/autodesk/access-token?code=${code}&redirect-uri=${redirectUri}`;
170
+ return Http.get(url, user) as unknown as Promise<ApiAutodeskAccessToken>;
171
+ }
118
172
 
119
- static listProcoreObservationTypes(procoreAccessToken: string,
120
- companyId: string,
121
- user: User): Promise<{ name: string, id: string | number, category: string }[]> {
122
- if (!procoreAccessToken) {
123
- return Promise.reject(new Error("Procore access token not found"));
124
- }
125
- if (!companyId) {
126
- return Promise.reject(new Error("company id not found"));
127
- }
128
- let url = `${Http.baseUrl()}/integrations/procore/${companyId}/observation-types?procore-access-token=${procoreAccessToken}`;
129
- return Http.get(url, user) as unknown as Promise<{ name: string, id: string | number, category: string }[]>;
173
+ static getAutodeskHubs(access_token: string, user: User): Promise<ApiHubs> {
174
+ if (!access_token) {
175
+ return Promise.reject(new Error("Invalid access token"));
130
176
  }
177
+ const url = `${Http.baseUrl()}/integrations/autodesk/hubs?access-token=${access_token}`;
178
+ return Http.get(url, user) as unknown as Promise<ApiHubs>;
179
+ }
131
180
 
132
- static CreateProcoreObservation(procoreAccessToken: string,
133
- companyId: string,
134
- projectId: string,
135
- observationRequest: ApiObservationRequest,
136
- user: User): Promise<void> {
137
- if (!procoreAccessToken) {
138
- return Promise.reject(new Error("Procore access token not found"));
139
- }
140
- if (!projectId) {
141
- return Promise.reject(new Error("project id not found"));
142
- }
143
- if (!companyId) {
144
- return Promise.reject(new Error("company id not found"));
145
- }
146
- let url = `${Http.baseUrl()}/integrations/procore/${companyId}/${projectId}/create-observation?procore-access-token=${procoreAccessToken}`;
147
- return Http.post(url, user, observationRequest) as unknown as Promise<void>;
181
+ static getAutodeskProjects(access_token: string, hubId: string, user: User): Promise<ApiProjects> {
182
+ if (!access_token || !hubId) {
183
+ return Promise.reject(new Error("Invalid access token or hubId"));
148
184
  }
185
+ const url = `${Http.baseUrl()}/integrations/autodesk/projects?access-token=${access_token}&hubId=${hubId}`;
186
+ return Http.get(url, user) as unknown as Promise<ApiProjects>;
187
+ }
149
188
 
150
189
  }
151
190
 
@@ -1,8 +1,10 @@
1
1
  import { isArray } from "underscore";
2
- import { ApiPhotoArea, ApiPhotoLocation, ApiPhotoLocation3d, ApiPhotoSession, AssociationIds } from "../models";
3
- import { User } from "../utilities/get_authorization_headers";
4
- import makeErrorsPretty from "../utilities/make_errors_pretty";
2
+
5
3
  import Http from "../utilities/http";
4
+ import makeErrorsPretty from "../utilities/make_errors_pretty";
5
+
6
+ import type { ApiPhotoArea, ApiPhotoLocation, ApiPhotoLocation3d, ApiPhotoSession, User } from "../models";
7
+ import type { AssociationIds } from "type_aliases";
6
8
 
7
9
  export default class PhotoAreaApi {
8
10
 
@@ -1,8 +1,8 @@
1
- import { AssociationIds } from "../models";
2
1
  import Http from "../utilities/http";
3
2
  import makeErrorsPretty from "../utilities/make_errors_pretty";
4
- import { User } from "../utilities/get_authorization_headers";
5
- import ApiPipeline, { ApiPipelineArgument } from "../models/api/api_pipeline";
3
+
4
+ import type { ApiPipeline, ApiPipelineArgument, User } from "../models";
5
+ import type { AssociationIds } from "type_aliases";
6
6
 
7
7
  export default class PipelineApi {
8
8
  static triggerPipeline(body: ApiPipelineArgument = {}, user: User): Promise<ApiPipeline> {
@@ -10,16 +10,16 @@ export default class PipelineApi {
10
10
  return Http.post(url, user, body) as unknown as Promise<ApiPipeline>;
11
11
  }
12
12
 
13
- static checkPipelineStatus({projectId}: AssociationIds, pipelineId: number, user: User): Promise<ApiPipeline> {
13
+ static checkPipelineStatus({ projectId }: AssociationIds, pipelineId: number, user: User): Promise<ApiPipeline> {
14
14
  const url = `${Http.baseUrl()}/pipelines/${pipelineId}`;
15
15
  return Http.get(url, user) as unknown as Promise<ApiPipeline>;
16
16
  }
17
17
 
18
- static getFloorPipelines({projectId, floorId}: AssociationIds, user: User): Promise<ApiPipeline[]> {
18
+ static getFloorPipelines({ projectId, floorId }: AssociationIds, user: User): Promise<ApiPipeline[]> {
19
19
  const url = `${Http.baseUrl()}/projects/${projectId}/floors/${floorId}/pipelines`;
20
20
  console.log(url);
21
21
  return Http.get(url, user) as unknown as Promise<ApiPipeline[]>;
22
22
  }
23
23
  }
24
24
 
25
- makeErrorsPretty(PipelineApi)
25
+ makeErrorsPretty(PipelineApi);
@@ -1,11 +1,11 @@
1
- import getAuthorizationHeaders, { User } from "../utilities/get_authorization_headers";
1
+ import getAuthorizationHeaders from "../utilities/get_authorization_headers";
2
2
  import Http from "../utilities/http";
3
3
  import makeErrorsPretty from "../utilities/make_errors_pretty";
4
4
  import { DateConverter } from "../converters";
5
+ import { PbeTsvType } from "../models/api/pbe_tsv_type";
5
6
 
6
- import type { ApiClassificationCode, ApiCloudFile, ApiMasterformatProgress, ApiProject, ApiProjectCostAnalysisProgress, ApiProjectCostAnalysisProgressValidationResult, ApiProjectListing, ApiProjectWorkPackage, ApiProjectWorkPackageCost, ApiRunningProcess, AssociationIds, ProgressType, ProjectWorkPackageType } from "../models";
7
- import type { DateLike } from "type_aliases";
8
- import {PbeTsvType} from "../models/api/PbeTsvType";
7
+ import type { ApiClassificationCode, ApiCloudFile, ApiMasterformatProgress, ApiProject, ApiProjectCostAnalysisProgress, ApiProjectCostAnalysisProgressValidationResult, ApiProjectListing, ApiProjectWorkPackage, ApiProjectWorkPackageCost, ApiRunningProcess, ProgressType, ProjectWorkPackageType, User } from "../models";
8
+ import type { AssociationIds, DateLike } from "type_aliases";
9
9
 
10
10
  export default class ProjectApi {
11
11
  static listProjectsForOrganization(organizationId: string, user: User): Promise<ApiProject[]> {
@@ -155,34 +155,36 @@ export default class ProjectApi {
155
155
  static generateMasterformatProgress({ projectId }: AssociationIds,
156
156
  reportDate: DateLike,
157
157
  masterformatVersion: number,
158
- user: User) {
158
+ user: User)
159
+ {
159
160
  const formattedDate = DateConverter.dateToISO(reportDate);
160
161
  const url = `${Http.baseUrl()}/projects/${projectId}/masterformat-progress-report?masterformatVersion=${masterformatVersion}&reportDate=${formattedDate}`;
161
162
  return Http.post(url, user) as unknown as Promise<ApiRunningProcess>;
162
163
  }
163
164
 
164
- static getFiltered5dTsv({projectId}: AssociationIds, projectName: string, fileName: string, filter, user:User) {
165
+ static getFiltered5dTsv({ projectId }: AssociationIds, projectName: string, fileName: string, filter, user: User) {
165
166
  const url = `${Http.baseUrl()}/projects/${projectId}/cost-analysis-progress/line-items/${fileName}`;
166
167
  return Http.put(url, user, filter, "application/json", "text/tab-separated-values") as unknown as Promise<string>;
167
168
  }
168
169
 
169
- static getClassificationCodes({projectId}: AssociationIds, user:User) {
170
+ static getClassificationCodes({ projectId }: AssociationIds, user: User) {
170
171
  const url = `${Http.baseUrl()}/projects/${projectId}/classification-codes`;
171
172
  return Http.get(url, user) as unknown as Promise<ApiClassificationCode[]>;
172
173
  }
173
- static checkWbsStatus({projectId}: AssociationIds, user: User) {
174
- const url = `${Http.baseUrl()}/projects/${projectId}/cost-analysis-progress/validations`
175
- return Http.get(url, user) as unknown as Promise<ApiProjectCostAnalysisProgressValidationResult>
174
+
175
+ static checkWbsStatus({ projectId }: AssociationIds, user: User) {
176
+ const url = `${Http.baseUrl()}/projects/${projectId}/cost-analysis-progress/validations`;
177
+ return Http.get(url, user) as unknown as Promise<ApiProjectCostAnalysisProgressValidationResult>;
176
178
  };
177
179
 
178
- static updateMasterformatSelection({projectId, floorId}: AssociationIds, masterformatTree, user: User) {
180
+ static updateMasterformatSelection({ projectId, floorId }: AssociationIds, masterformatTree, user: User) {
179
181
  const url = `${Http.baseUrl()}/projects/${projectId}/floors/${floorId}/cost-analysis-progress-modeled-total-cost`;
180
182
  return Http.put(url, user, masterformatTree) as unknown as Promise<ApiProjectCostAnalysisProgress[]>;
181
183
  }
182
184
 
183
- static getWorkPackageCosts({projectId}: AssociationIds, workPackageType: ProjectWorkPackageType, user: User) {
185
+ static getWorkPackageCosts({ projectId }: AssociationIds, workPackageType: ProjectWorkPackageType, user: User) {
184
186
  const url = `${Http.baseUrl()}/projects/${projectId}/work-packages/${workPackageType}/costs`;
185
- return Http.get(url, user) as unknown as Promise<ApiProjectWorkPackageCost[]>
187
+ return Http.get(url, user) as unknown as Promise<ApiProjectWorkPackageCost[]>;
186
188
  }
187
189
 
188
190
  static generateAllMasterformatProgress({ projectId }: AssociationIds,
@@ -194,7 +196,7 @@ export default class ProjectApi {
194
196
  return Http.post(url, user) as unknown as Promise<ApiRunningProcess>;
195
197
  }
196
198
 
197
- static updateProjectExportTsv({ projectId }: AssociationIds, tsvContent: string, user: User, dispatch) {
199
+ static updateProjectExportTsv({ projectId }: AssociationIds, tsvContent: string, user: User) {
198
200
  let multipartFormData = new FormData();
199
201
  let file = new Blob([tsvContent], { type: "text/tab-separated-values" });
200
202
  multipartFormData.append("file", file, "file.tsv");
@@ -212,4 +214,8 @@ export default class ProjectApi {
212
214
  }
213
215
  }
214
216
 
215
- makeErrorsPretty(ProjectApi, { exclude: ["getProjectDeviationsReportTsvUrl", "getTradeBreakdownTsvUrl"], overrideErrorMessage:["getFiltered5dTsv", "saveTradeBreakdownTsv"] });
217
+ makeErrorsPretty(ProjectApi,
218
+ {
219
+ exclude: ["getProjectDeviationsReportTsvUrl", "getTradeBreakdownTsvUrl"],
220
+ overrideErrorMessage: ["getFiltered5dTsv", "saveTradeBreakdownTsv"]
221
+ });
@@ -1,8 +1,8 @@
1
- import { User } from "../utilities/get_authorization_headers";
2
1
  import Http from "../utilities/http";
3
- import { AssociationIds } from "../models";
4
2
  import makeErrorsPretty from "../utilities/make_errors_pretty";
5
- import ApiRecipe from "../models/api/api_recipe";
3
+
4
+ import type { ApiRecipe, User } from "../models";
5
+ import type { AssociationIds } from "type_aliases";
6
6
 
7
7
  export default class RecipeApi {
8
8
  static getGlobalRecipe({ recipeId }: AssociationIds, user: User, ): Promise<ApiRecipe|null> {
@@ -1,42 +1,57 @@
1
- import makeErrorsPretty from "../utilities/make_errors_pretty";
2
- import {AssociationIds} from "../models";
3
- import {User} from "../utilities/get_authorization_headers";
4
1
  import Http from "../utilities/http";
5
- import {ApiInspectReport, ApiInspectReportEntry} from "../models";
2
+ import makeErrorsPretty from "../utilities/make_errors_pretty";
3
+
4
+ import type { ApiInspectReport, ApiInspectReportEntry, User } from "../models";
5
+ import type { AssociationIds } from "type_aliases";
6
6
 
7
7
  export default class ReportApi {
8
- static createInspectReport({ projectId }: AssociationIds, report: ApiInspectReport, user: User): Promise<ApiInspectReport> {
9
- let url = `${Http.baseUrl()}/projects/${projectId}/reports`;
10
- return Http.post(url, user, report) as unknown as Promise<ApiInspectReport>;
11
- }
12
- static listInspectReports({projectId}: AssociationIds, user: User): Promise<ApiInspectReport[]> {
13
- let url = `${Http.baseUrl()}/projects/${projectId}/reports`;
14
- return Http.get(url, user) as unknown as Promise<ApiInspectReport[]>;
15
- }
16
- static listInspectReportEntries({projectId, inspectReportId}: AssociationIds, user: User): Promise<ApiInspectReportEntry[]> {
17
- let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries`;
18
- return Http.get(url, user) as unknown as Promise<ApiInspectReportEntry[]>;
19
- }
20
- static createInspectReportEntries({ projectId, inspectReportId }: AssociationIds, reportEntries: ApiInspectReportEntry[], user: User): Promise<ApiInspectReportEntry[]> {
21
- let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries`;
22
- return Http.post(url, user, reportEntries) as unknown as Promise<ApiInspectReportEntry[]>;
23
- }
24
- static updateInspectReportEntry({ projectId, inspectReportId, inspectReportEntryId }: AssociationIds, reportEntry, user): Promise<ApiInspectReportEntry> {
25
- let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries/${inspectReportEntryId}`;
26
- return Http.put(url, user, reportEntry) as unknown as Promise<ApiInspectReportEntry>;
27
- }
28
- static updateInspectReport({ projectId, inspectReportId }: AssociationIds, report, user): Promise<ApiInspectReport> {
29
- let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}`;
30
- return Http.put(url, user, report) as unknown as Promise<ApiInspectReport>;
31
- }
32
- static deleteInspectReport({ projectId, inspectReportId }: AssociationIds, user): Promise<void> {
33
- let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}`;
34
- return Http.delete(url, user) as unknown as Promise<void>;
35
- }
36
- static deleteInspectReportEntry({ projectId, inspectReportId, inspectReportEntryId}: AssociationIds, user: User): Promise<void> {
37
- let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries/${inspectReportEntryId}`;
38
- return Http.delete(url, user) as unknown as Promise<void>;
39
- }
8
+ static createInspectReport({ projectId }: AssociationIds,
9
+ report: ApiInspectReport,
10
+ user: User): Promise<ApiInspectReport> {
11
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports`;
12
+ return Http.post(url, user, report) as unknown as Promise<ApiInspectReport>;
13
+ }
14
+
15
+ static listInspectReports({ projectId }: AssociationIds, user: User): Promise<ApiInspectReport[]> {
16
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports`;
17
+ return Http.get(url, user) as unknown as Promise<ApiInspectReport[]>;
18
+ }
19
+
20
+ static listInspectReportEntries({ projectId, inspectReportId }: AssociationIds,
21
+ user: User): Promise<ApiInspectReportEntry[]> {
22
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries`;
23
+ return Http.get(url, user) as unknown as Promise<ApiInspectReportEntry[]>;
24
+ }
25
+
26
+ static createInspectReportEntries({ projectId, inspectReportId }: AssociationIds,
27
+ reportEntries: ApiInspectReportEntry[],
28
+ user: User): Promise<ApiInspectReportEntry[]> {
29
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries`;
30
+ return Http.post(url, user, reportEntries) as unknown as Promise<ApiInspectReportEntry[]>;
31
+ }
32
+
33
+ static updateInspectReportEntry({ projectId, inspectReportId, inspectReportEntryId }: AssociationIds,
34
+ reportEntry,
35
+ user): Promise<ApiInspectReportEntry> {
36
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries/${inspectReportEntryId}`;
37
+ return Http.put(url, user, reportEntry) as unknown as Promise<ApiInspectReportEntry>;
38
+ }
39
+
40
+ static updateInspectReport({ projectId, inspectReportId }: AssociationIds, report, user): Promise<ApiInspectReport> {
41
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}`;
42
+ return Http.put(url, user, report) as unknown as Promise<ApiInspectReport>;
43
+ }
44
+
45
+ static deleteInspectReport({ projectId, inspectReportId }: AssociationIds, user): Promise<void> {
46
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}`;
47
+ return Http.delete(url, user) as unknown as Promise<void>;
48
+ }
49
+
50
+ static deleteInspectReportEntry({ projectId, inspectReportId, inspectReportEntryId }: AssociationIds,
51
+ user: User): Promise<void> {
52
+ let url = `${Http.baseUrl()}/projects/${projectId}/reports/${inspectReportId}/inspect-entries/${inspectReportEntryId}`;
53
+ return Http.delete(url, user) as unknown as Promise<void>;
54
+ }
40
55
  }
41
56
 
42
- makeErrorsPretty(ReportApi);
57
+ makeErrorsPretty(ReportApi);
@@ -1,9 +1,13 @@
1
- import ApiView, { ApiViewArgument } from "../models/api/api_view";
2
1
  import Http from "../utilities/http";
3
2
  import makeErrorsPretty from "../utilities/make_errors_pretty";
4
- import { ApiBuiltStatus, ApiDetailedElement, ApiPhotoSession, ApiScanDataset, ApiScanDatasetQaState, ApiScannedElementType, AssociationIds, DateLike } from "../models";
3
+ import type { ApiBuiltStatus, ApiDetailedElement, ApiPhotoSession, ApiScanDatasetQaState, ApiScannedElementType, ApiView, ApiViewArgument, User } from "../models";
4
+ import { ApiScanDataset } from "../models";
5
+ import type { AssociationIds, DateLike } from "type_aliases";
5
6
  import { DateConverter } from "../converters";
6
- import { User } from "../utilities/get_authorization_headers";
7
+
8
+ function isApiScanDataset(obj: any): obj is Partial<ApiScanDataset> {
9
+ return obj.scanDate != null || obj.name != null
10
+ }
7
11
 
8
12
  export default class ScanDatasetApi {
9
13
  static listScanDatasetsForFloor({ projectId, floorId }: AssociationIds, user: User): Promise<ApiScanDataset[]> {
@@ -11,14 +15,24 @@ export default class ScanDatasetApi {
11
15
  return Http.get(url, user) as unknown as Promise<ApiScanDataset[]>;
12
16
  }
13
17
 
14
- static createScanDataset({
15
- projectId,
16
- floorId
17
- }: AssociationIds, scanDate: DateLike, user: User): Promise<ApiScanDataset> {
18
- const url = `${Http.baseUrl()}/projects/${projectId}/floors/${floorId}/scan-datasets?scanDate=${DateConverter.dateToISO(scanDate)}`;
19
- return Http.post(url, user, null) as unknown as Promise<ApiScanDataset>;
18
+ static createScanDataset({ projectId, floorId }: AssociationIds,
19
+ apiScanDataset: Partial<ApiScanDataset>,
20
+ user: User): Promise<ApiScanDataset>
21
+ static createScanDataset({ projectId, floorId }: AssociationIds,
22
+ scanDate: DateLike,
23
+ user: User): Promise<ApiScanDataset>
24
+ static createScanDataset({ projectId, floorId }: AssociationIds,
25
+ scan: Partial<ApiScanDataset> | DateLike,
26
+ user: User): Promise<ApiScanDataset> {
27
+ const url = `${Http.baseUrl()}/projects/${projectId}/floors/${floorId}/scan-datasets`;
28
+ if (isApiScanDataset(scan)) {
29
+ return Http.post(url, user, scan) as unknown as Promise<ApiScanDataset>;
30
+ } else {
31
+ return Http.post(url + `?scanDate=${DateConverter.dateLikeToDate(scan).valueOf()}`, user) as unknown as Promise<ApiScanDataset>;
32
+ }
20
33
  }
21
34
 
35
+
22
36
  static deleteScanDataset({ projectId, floorId, scanDatasetId }: AssociationIds, user: User): Promise<void> {
23
37
  let url = `${Http.baseUrl()}/projects/${projectId}/floors/${floorId}/scan-datasets/${scanDatasetId}`;
24
38
  return Http.delete(url, user) as unknown as Promise<void>;
@@ -156,7 +170,7 @@ export default class ScanDatasetApi {
156
170
  return Http.post(url, user, { sessionDate }) as unknown as Promise<ApiPhotoSession>;
157
171
  }
158
172
 
159
- static listScanDatasetsForProject({projectId}: AssociationIds, user: User): Promise<ApiScanDataset[]> {
173
+ static listScanDatasetsForProject({ projectId }: AssociationIds, user: User): Promise<ApiScanDataset[]> {
160
174
  const url = `${Http.baseUrl()}/projects/${projectId}/scan-datasets`;
161
175
  return Http.get(url, user) as unknown as Promise<ApiScanDataset[]>;
162
176
  }