@microsoft/power-apps 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (291) hide show
  1. package/LICENSE +153 -0
  2. package/README.md +63 -0
  3. package/lib/__tests__/connectorDataOperationExecutor.spec.d.ts +5 -0
  4. package/lib/__tests__/connectorDataOperationExecutor.spec.d.ts.map +1 -0
  5. package/lib/__tests__/connectorDataOperationExecutor.spec.js +509 -0
  6. package/lib/__tests__/connectorDataOperationExecutor.spec.js.map +1 -0
  7. package/lib/__tests__/dataverseDataOperationExecutor.spec.d.ts +5 -0
  8. package/lib/__tests__/dataverseDataOperationExecutor.spec.d.ts.map +1 -0
  9. package/lib/__tests__/dataverseDataOperationExecutor.spec.js +349 -0
  10. package/lib/__tests__/dataverseDataOperationExecutor.spec.js.map +1 -0
  11. package/lib/__tests__/helpers/testHelpers.d.ts +27 -0
  12. package/lib/__tests__/helpers/testHelpers.d.ts.map +1 -0
  13. package/lib/__tests__/helpers/testHelpers.js +67 -0
  14. package/lib/__tests__/helpers/testHelpers.js.map +1 -0
  15. package/lib/__tests__/index.spec.d.ts +5 -0
  16. package/lib/__tests__/index.spec.d.ts.map +1 -0
  17. package/lib/__tests__/index.spec.js +10 -0
  18. package/lib/__tests__/index.spec.js.map +1 -0
  19. package/lib/__tests__/mockDataOperationExecutor.spec.d.ts +5 -0
  20. package/lib/__tests__/mockDataOperationExecutor.spec.d.ts.map +1 -0
  21. package/lib/__tests__/mockDataOperationExecutor.spec.js +51 -0
  22. package/lib/__tests__/mockDataOperationExecutor.spec.js.map +1 -0
  23. package/lib/__tests__/mocks/mockDataverseRetrieveMultipleResponse.d.ts +17 -0
  24. package/lib/__tests__/mocks/mockDataverseRetrieveMultipleResponse.d.ts.map +1 -0
  25. package/lib/__tests__/mocks/mockDataverseRetrieveMultipleResponse.js +35 -0
  26. package/lib/__tests__/mocks/mockDataverseRetrieveMultipleResponse.js.map +1 -0
  27. package/lib/__tests__/mocks/mockLog.d.ts +31 -0
  28. package/lib/__tests__/mocks/mockLog.d.ts.map +1 -0
  29. package/lib/__tests__/mocks/mockLog.js +53 -0
  30. package/lib/__tests__/mocks/mockLog.js.map +1 -0
  31. package/lib/__tests__/mocks/mockTeamsConnectorResponse.d.ts +76 -0
  32. package/lib/__tests__/mocks/mockTeamsConnectorResponse.d.ts.map +1 -0
  33. package/lib/__tests__/mocks/mockTeamsConnectorResponse.js +81 -0
  34. package/lib/__tests__/mocks/mockTeamsConnectorResponse.js.map +1 -0
  35. package/lib/__tests__/mocks/silenceConsole.d.ts +37 -0
  36. package/lib/__tests__/mocks/silenceConsole.d.ts.map +1 -0
  37. package/lib/__tests__/mocks/silenceConsole.js +58 -0
  38. package/lib/__tests__/mocks/silenceConsole.js.map +1 -0
  39. package/lib/__tests__/powerDataRuntimeInstance.test.d.ts +5 -0
  40. package/lib/__tests__/powerDataRuntimeInstance.test.d.ts.map +1 -0
  41. package/lib/__tests__/powerDataRuntimeInstance.test.js +179 -0
  42. package/lib/__tests__/powerDataRuntimeInstance.test.js.map +1 -0
  43. package/lib/__tests__/powerDataSourcesInfoProvider.test.d.ts +5 -0
  44. package/lib/__tests__/powerDataSourcesInfoProvider.test.d.ts.map +1 -0
  45. package/lib/__tests__/powerDataSourcesInfoProvider.test.js +153 -0
  46. package/lib/__tests__/powerDataSourcesInfoProvider.test.js.map +1 -0
  47. package/lib/__tests__/runtimeClientProvider.test.d.ts +5 -0
  48. package/lib/__tests__/runtimeClientProvider.test.d.ts.map +1 -0
  49. package/lib/__tests__/runtimeClientProvider.test.js +248 -0
  50. package/lib/__tests__/runtimeClientProvider.test.js.map +1 -0
  51. package/lib/__tests__/runtimeDataClient.spec.d.ts +2 -0
  52. package/lib/__tests__/runtimeDataClient.spec.d.ts.map +1 -0
  53. package/lib/__tests__/runtimeDataClient.spec.js +351 -0
  54. package/lib/__tests__/runtimeDataClient.spec.js.map +1 -0
  55. package/lib/__tests__/runtimeDataClient.test.d.ts +2 -0
  56. package/lib/__tests__/runtimeDataClient.test.d.ts.map +1 -0
  57. package/lib/__tests__/runtimeDataClient.test.js +351 -0
  58. package/lib/__tests__/runtimeDataClient.test.js.map +1 -0
  59. package/lib/__tests__/runtimeDataOperation.test.d.ts +5 -0
  60. package/lib/__tests__/runtimeDataOperation.test.d.ts.map +1 -0
  61. package/lib/__tests__/runtimeDataOperation.test.js +234 -0
  62. package/lib/__tests__/runtimeDataOperation.test.js.map +1 -0
  63. package/lib/__tests__/runtimeMetadataClient.test.d.ts +5 -0
  64. package/lib/__tests__/runtimeMetadataClient.test.d.ts.map +1 -0
  65. package/lib/__tests__/runtimeMetadataClient.test.js +271 -0
  66. package/lib/__tests__/runtimeMetadataClient.test.js.map +1 -0
  67. package/lib/__tests__/runtimeMetadataOperations.test.d.ts +5 -0
  68. package/lib/__tests__/runtimeMetadataOperations.test.d.ts.map +1 -0
  69. package/lib/__tests__/runtimeMetadataOperations.test.js +286 -0
  70. package/lib/__tests__/runtimeMetadataOperations.test.js.map +1 -0
  71. package/lib/__tests__/serviceSchemaModelSnapshot.test.d.ts +2 -0
  72. package/lib/__tests__/serviceSchemaModelSnapshot.test.d.ts.map +1 -0
  73. package/lib/__tests__/serviceSchemaModelSnapshot.test.js +98 -0
  74. package/lib/__tests__/serviceSchemaModelSnapshot.test.js.map +1 -0
  75. package/lib/__tests__/types.spec.d.ts +5 -0
  76. package/lib/__tests__/types.spec.d.ts.map +1 -0
  77. package/lib/__tests__/types.spec.js +104 -0
  78. package/lib/__tests__/types.spec.js.map +1 -0
  79. package/lib/__tests__/utils.test.d.ts +5 -0
  80. package/lib/__tests__/utils.test.d.ts.map +1 -0
  81. package/lib/__tests__/utils.test.js +33 -0
  82. package/lib/__tests__/utils.test.js.map +1 -0
  83. package/lib/app/Lifecycle.d.ts +14 -0
  84. package/lib/app/Lifecycle.d.ts.map +1 -0
  85. package/lib/app/Lifecycle.js +37 -0
  86. package/lib/app/Lifecycle.js.map +1 -0
  87. package/lib/app/index.d.ts +5 -0
  88. package/lib/app/index.d.ts.map +1 -0
  89. package/lib/app/index.js +5 -0
  90. package/lib/app/index.js.map +1 -0
  91. package/lib/data/Data.types.d.ts +20 -0
  92. package/lib/data/Data.types.d.ts.map +1 -0
  93. package/lib/data/Data.types.js +5 -0
  94. package/lib/data/Data.types.js.map +1 -0
  95. package/lib/data/executors/index.d.ts +6 -0
  96. package/lib/data/executors/index.d.ts.map +1 -0
  97. package/lib/data/executors/index.js +5 -0
  98. package/lib/data/executors/index.js.map +1 -0
  99. package/lib/data/index.d.ts +7 -0
  100. package/lib/data/index.d.ts.map +1 -0
  101. package/lib/data/index.js +5 -0
  102. package/lib/data/index.js.map +1 -0
  103. package/lib/data/powerAppsData.d.ts +10 -0
  104. package/lib/data/powerAppsData.d.ts.map +1 -0
  105. package/lib/data/powerAppsData.js +43 -0
  106. package/lib/data/powerAppsData.js.map +1 -0
  107. package/lib/index.d.ts +8 -0
  108. package/lib/index.d.ts.map +1 -0
  109. package/lib/index.js +8 -0
  110. package/lib/index.js.map +1 -0
  111. package/lib/internal/communication/CompatibleMessageReceiver.d.ts +12 -0
  112. package/lib/internal/communication/CompatibleMessageReceiver.d.ts.map +1 -0
  113. package/lib/internal/communication/CompatibleMessageReceiver.js +92 -0
  114. package/lib/internal/communication/CompatibleMessageReceiver.js.map +1 -0
  115. package/lib/internal/communication/IncompatibleMessageReceiver.d.ts +10 -0
  116. package/lib/internal/communication/IncompatibleMessageReceiver.d.ts.map +1 -0
  117. package/lib/internal/communication/IncompatibleMessageReceiver.js +13 -0
  118. package/lib/internal/communication/IncompatibleMessageReceiver.js.map +1 -0
  119. package/lib/internal/communication/MessageReceiver.Types.d.ts +18 -0
  120. package/lib/internal/communication/MessageReceiver.Types.d.ts.map +1 -0
  121. package/lib/internal/communication/MessageReceiver.Types.js +5 -0
  122. package/lib/internal/communication/MessageReceiver.Types.js.map +1 -0
  123. package/lib/internal/communication/SendMessage.d.ts +11 -0
  124. package/lib/internal/communication/SendMessage.d.ts.map +1 -0
  125. package/lib/internal/communication/SendMessage.js +32 -0
  126. package/lib/internal/communication/SendMessage.js.map +1 -0
  127. package/lib/internal/communication/SendMessageOperation.d.ts +15 -0
  128. package/lib/internal/communication/SendMessageOperation.d.ts.map +1 -0
  129. package/lib/internal/communication/SendMessageOperation.js +18 -0
  130. package/lib/internal/communication/SendMessageOperation.js.map +1 -0
  131. package/lib/internal/data/ConnectionUtils.d.ts +5 -0
  132. package/lib/internal/data/ConnectionUtils.d.ts.map +1 -0
  133. package/lib/internal/data/ConnectionUtils.js +20 -0
  134. package/lib/internal/data/ConnectionUtils.js.map +1 -0
  135. package/lib/internal/data/OperationExecutor.d.ts +18 -0
  136. package/lib/internal/data/OperationExecutor.d.ts.map +1 -0
  137. package/lib/internal/data/OperationExecutor.js +35 -0
  138. package/lib/internal/data/OperationExecutor.js.map +1 -0
  139. package/lib/internal/data/core/api/createRecord.d.ts +13 -0
  140. package/lib/internal/data/core/api/createRecord.d.ts.map +1 -0
  141. package/lib/internal/data/core/api/createRecord.js +15 -0
  142. package/lib/internal/data/core/api/createRecord.js.map +1 -0
  143. package/lib/internal/data/core/api/deleteRecord.d.ts +13 -0
  144. package/lib/internal/data/core/api/deleteRecord.d.ts.map +1 -0
  145. package/lib/internal/data/core/api/deleteRecord.js +15 -0
  146. package/lib/internal/data/core/api/deleteRecord.js.map +1 -0
  147. package/lib/internal/data/core/api/execute.d.ts +11 -0
  148. package/lib/internal/data/core/api/execute.d.ts.map +1 -0
  149. package/lib/internal/data/core/api/execute.js +13 -0
  150. package/lib/internal/data/core/api/execute.js.map +1 -0
  151. package/lib/internal/data/core/api/retrieveMultipleRecords.d.ts +13 -0
  152. package/lib/internal/data/core/api/retrieveMultipleRecords.d.ts.map +1 -0
  153. package/lib/internal/data/core/api/retrieveMultipleRecords.js +15 -0
  154. package/lib/internal/data/core/api/retrieveMultipleRecords.js.map +1 -0
  155. package/lib/internal/data/core/api/retrieveRecord.d.ts +13 -0
  156. package/lib/internal/data/core/api/retrieveRecord.d.ts.map +1 -0
  157. package/lib/internal/data/core/api/retrieveRecord.js +15 -0
  158. package/lib/internal/data/core/api/retrieveRecord.js.map +1 -0
  159. package/lib/internal/data/core/api/updateRecord.d.ts +14 -0
  160. package/lib/internal/data/core/api/updateRecord.d.ts.map +1 -0
  161. package/lib/internal/data/core/api/updateRecord.js +16 -0
  162. package/lib/internal/data/core/api/updateRecord.js.map +1 -0
  163. package/lib/internal/data/core/common/types.d.ts +230 -0
  164. package/lib/internal/data/core/common/types.d.ts.map +1 -0
  165. package/lib/internal/data/core/common/types.js +25 -0
  166. package/lib/internal/data/core/common/types.js.map +1 -0
  167. package/lib/internal/data/core/common/utils.d.ts +19 -0
  168. package/lib/internal/data/core/common/utils.d.ts.map +1 -0
  169. package/lib/internal/data/core/common/utils.js +47 -0
  170. package/lib/internal/data/core/common/utils.js.map +1 -0
  171. package/lib/internal/data/core/data/defaultOperationOrchestrator.d.ts +93 -0
  172. package/lib/internal/data/core/data/defaultOperationOrchestrator.d.ts.map +1 -0
  173. package/lib/internal/data/core/data/defaultOperationOrchestrator.js +249 -0
  174. package/lib/internal/data/core/data/defaultOperationOrchestrator.js.map +1 -0
  175. package/lib/internal/data/core/data/executors/connectorDataOperationExecutor.d.ts +160 -0
  176. package/lib/internal/data/core/data/executors/connectorDataOperationExecutor.d.ts.map +1 -0
  177. package/lib/internal/data/core/data/executors/connectorDataOperationExecutor.js +500 -0
  178. package/lib/internal/data/core/data/executors/connectorDataOperationExecutor.js.map +1 -0
  179. package/lib/internal/data/core/data/executors/dataverseDataOperationExecutor.d.ts +164 -0
  180. package/lib/internal/data/core/data/executors/dataverseDataOperationExecutor.d.ts.map +1 -0
  181. package/lib/internal/data/core/data/executors/dataverseDataOperationExecutor.js +508 -0
  182. package/lib/internal/data/core/data/executors/dataverseDataOperationExecutor.js.map +1 -0
  183. package/lib/internal/data/core/data/executors/index.d.ts +5 -0
  184. package/lib/internal/data/core/data/executors/index.d.ts.map +1 -0
  185. package/lib/internal/data/core/data/executors/index.js +5 -0
  186. package/lib/internal/data/core/data/executors/index.js.map +1 -0
  187. package/lib/internal/data/core/data/executors/mockDataOperationExecutor.d.ts +21 -0
  188. package/lib/internal/data/core/data/executors/mockDataOperationExecutor.d.ts.map +1 -0
  189. package/lib/internal/data/core/data/executors/mockDataOperationExecutor.js +75 -0
  190. package/lib/internal/data/core/data/executors/mockDataOperationExecutor.js.map +1 -0
  191. package/lib/internal/data/core/error/codes.d.ts +31 -0
  192. package/lib/internal/data/core/error/codes.d.ts.map +1 -0
  193. package/lib/internal/data/core/error/codes.js +39 -0
  194. package/lib/internal/data/core/error/codes.js.map +1 -0
  195. package/lib/internal/data/core/error/constants.d.ts +30 -0
  196. package/lib/internal/data/core/error/constants.d.ts.map +1 -0
  197. package/lib/internal/data/core/error/constants.js +33 -0
  198. package/lib/internal/data/core/error/constants.js.map +1 -0
  199. package/lib/internal/data/core/error/error.d.ts +8 -0
  200. package/lib/internal/data/core/error/error.d.ts.map +1 -0
  201. package/lib/internal/data/core/error/error.js +8 -0
  202. package/lib/internal/data/core/error/error.js.map +1 -0
  203. package/lib/internal/data/core/error/messages.d.ts +24 -0
  204. package/lib/internal/data/core/error/messages.d.ts.map +1 -0
  205. package/lib/internal/data/core/error/messages.js +55 -0
  206. package/lib/internal/data/core/error/messages.js.map +1 -0
  207. package/lib/internal/data/core/error/types.d.ts +30 -0
  208. package/lib/internal/data/core/error/types.d.ts.map +1 -0
  209. package/lib/internal/data/core/error/types.js +28 -0
  210. package/lib/internal/data/core/error/types.js.map +1 -0
  211. package/lib/internal/data/core/error/util.d.ts +24 -0
  212. package/lib/internal/data/core/error/util.d.ts.map +1 -0
  213. package/lib/internal/data/core/error/util.js +71 -0
  214. package/lib/internal/data/core/error/util.js.map +1 -0
  215. package/lib/internal/data/core/metadata/runtimeDataSourceService.d.ts +65 -0
  216. package/lib/internal/data/core/metadata/runtimeDataSourceService.d.ts.map +1 -0
  217. package/lib/internal/data/core/metadata/runtimeDataSourceService.js +101 -0
  218. package/lib/internal/data/core/metadata/runtimeDataSourceService.js.map +1 -0
  219. package/lib/internal/data/core/metadata/runtimeMetadataOperations.d.ts +17 -0
  220. package/lib/internal/data/core/metadata/runtimeMetadataOperations.d.ts.map +1 -0
  221. package/lib/internal/data/core/metadata/runtimeMetadataOperations.js +34 -0
  222. package/lib/internal/data/core/metadata/runtimeMetadataOperations.js.map +1 -0
  223. package/lib/internal/data/core/runtime/getRuntimeContext.d.ts +11 -0
  224. package/lib/internal/data/core/runtime/getRuntimeContext.d.ts.map +1 -0
  225. package/lib/internal/data/core/runtime/getRuntimeContext.js +16 -0
  226. package/lib/internal/data/core/runtime/getRuntimeContext.js.map +1 -0
  227. package/lib/internal/data/core/runtime/initializeRuntime.d.ts +13 -0
  228. package/lib/internal/data/core/runtime/initializeRuntime.d.ts.map +1 -0
  229. package/lib/internal/data/core/runtime/initializeRuntime.js +38 -0
  230. package/lib/internal/data/core/runtime/initializeRuntime.js.map +1 -0
  231. package/lib/internal/data/core/runtime/powerDataRuntime.d.ts +68 -0
  232. package/lib/internal/data/core/runtime/powerDataRuntime.d.ts.map +1 -0
  233. package/lib/internal/data/core/runtime/powerDataRuntime.js +116 -0
  234. package/lib/internal/data/core/runtime/powerDataRuntime.js.map +1 -0
  235. package/lib/internal/data/core/runtime/powerDataRuntimeInstance.d.ts +20 -0
  236. package/lib/internal/data/core/runtime/powerDataRuntimeInstance.d.ts.map +1 -0
  237. package/lib/internal/data/core/runtime/powerDataRuntimeInstance.js +36 -0
  238. package/lib/internal/data/core/runtime/powerDataRuntimeInstance.js.map +1 -0
  239. package/lib/internal/data/core/runtime/powerDataSourcesInfoProvider.d.ts +34 -0
  240. package/lib/internal/data/core/runtime/powerDataSourcesInfoProvider.d.ts.map +1 -0
  241. package/lib/internal/data/core/runtime/powerDataSourcesInfoProvider.js +45 -0
  242. package/lib/internal/data/core/runtime/powerDataSourcesInfoProvider.js.map +1 -0
  243. package/lib/internal/data/core/runtimeClient/runtimeClientProvider.d.ts +43 -0
  244. package/lib/internal/data/core/runtimeClient/runtimeClientProvider.d.ts.map +1 -0
  245. package/lib/internal/data/core/runtimeClient/runtimeClientProvider.js +87 -0
  246. package/lib/internal/data/core/runtimeClient/runtimeClientProvider.js.map +1 -0
  247. package/lib/internal/data/core/runtimeClient/runtimeDataClient.d.ts +112 -0
  248. package/lib/internal/data/core/runtimeClient/runtimeDataClient.d.ts.map +1 -0
  249. package/lib/internal/data/core/runtimeClient/runtimeDataClient.js +457 -0
  250. package/lib/internal/data/core/runtimeClient/runtimeDataClient.js.map +1 -0
  251. package/lib/internal/data/core/runtimeClient/runtimeMetadataClient.d.ts +40 -0
  252. package/lib/internal/data/core/runtimeClient/runtimeMetadataClient.d.ts.map +1 -0
  253. package/lib/internal/data/core/runtimeClient/runtimeMetadataClient.js +94 -0
  254. package/lib/internal/data/core/runtimeClient/runtimeMetadataClient.js.map +1 -0
  255. package/lib/internal/data/core/telemetry/log.d.ts +20 -0
  256. package/lib/internal/data/core/telemetry/log.d.ts.map +1 -0
  257. package/lib/internal/data/core/telemetry/log.js +85 -0
  258. package/lib/internal/data/core/telemetry/log.js.map +1 -0
  259. package/lib/internal/data/core/types/index.d.ts +164 -0
  260. package/lib/internal/data/core/types/index.d.ts.map +1 -0
  261. package/lib/internal/data/core/types/index.js +7 -0
  262. package/lib/internal/data/core/types/index.js.map +1 -0
  263. package/lib/internal/plugin/PluginCommon.d.ts +16 -0
  264. package/lib/internal/plugin/PluginCommon.d.ts.map +1 -0
  265. package/lib/internal/plugin/PluginCommon.js +116 -0
  266. package/lib/internal/plugin/PluginCommon.js.map +1 -0
  267. package/lib/internal/plugin/PluginMobile.d.ts +13 -0
  268. package/lib/internal/plugin/PluginMobile.d.ts.map +1 -0
  269. package/lib/internal/plugin/PluginMobile.js +109 -0
  270. package/lib/internal/plugin/PluginMobile.js.map +1 -0
  271. package/lib/telemetry/Logger.types.d.ts +8 -0
  272. package/lib/telemetry/Logger.types.d.ts.map +1 -0
  273. package/lib/telemetry/Logger.types.js +5 -0
  274. package/lib/telemetry/Logger.types.js.map +1 -0
  275. package/lib/telemetry/LoggerManager.d.ts +6 -0
  276. package/lib/telemetry/LoggerManager.d.ts.map +1 -0
  277. package/lib/telemetry/LoggerManager.js +28 -0
  278. package/lib/telemetry/LoggerManager.js.map +1 -0
  279. package/lib/telemetry/Metrics.types.d.ts +53 -0
  280. package/lib/telemetry/Metrics.types.d.ts.map +1 -0
  281. package/lib/telemetry/Metrics.types.js +5 -0
  282. package/lib/telemetry/Metrics.types.js.map +1 -0
  283. package/lib/telemetry/Performance.d.ts +5 -0
  284. package/lib/telemetry/Performance.d.ts.map +1 -0
  285. package/lib/telemetry/Performance.js +47 -0
  286. package/lib/telemetry/Performance.js.map +1 -0
  287. package/lib/telemetry/index.d.ts +5 -0
  288. package/lib/telemetry/index.d.ts.map +1 -0
  289. package/lib/telemetry/index.js +5 -0
  290. package/lib/telemetry/index.js.map +1 -0
  291. package/package.json +44 -0
@@ -0,0 +1,500 @@
1
+ /*!
2
+ * Copyright (C) Microsoft Corporation. All rights reserved.
3
+ */
4
+ import { HttpMethod, } from '../../common/types';
5
+ import { createErrorResponse, DataOperationErrorMessages, ErrorCodes, PowerDataRuntimeError, } from '../../error/error';
6
+ import { ConnectorOperationName } from '../../error/constants';
7
+ // =====================================
8
+ // Main Class Implementation
9
+ // =====================================
10
+ /**
11
+ * ConnectorDataOperation provides functionality for performing CRUD operations
12
+ * against connector data sources using the Runtime Data Client.
13
+ */
14
+ export class ConnectorDataOperationExecutor {
15
+ // =====================================
16
+ // Private Members
17
+ // =====================================
18
+ _clientProvider;
19
+ _connectionsService;
20
+ _databaseReferences;
21
+ _connectionReferences;
22
+ // =====================================
23
+ // Constructor
24
+ // =====================================
25
+ constructor(clientProvider, connectionsService) {
26
+ this._validateConstructorParams(clientProvider, connectionsService);
27
+ this._clientProvider = clientProvider;
28
+ this._connectionsService = connectionsService;
29
+ }
30
+ // =====================================
31
+ // Public Methods
32
+ // =====================================
33
+ /**
34
+ * Creates a new record in the specified table
35
+ */
36
+ async createRecordAsync(tableName, data) {
37
+ try {
38
+ const { dataClient, connectionReference } = await this._getClientsAndConnection(tableName);
39
+ const requestUrl = await this._buildTableUrl(tableName, connectionReference);
40
+ const result = await dataClient.createDataAsync(requestUrl, connectionReference.apiId, tableName, data, { operationName: ConnectorOperationName.CreateRecord });
41
+ return result;
42
+ }
43
+ catch (error) {
44
+ return createErrorResponse(error, DataOperationErrorMessages.CreateFailed);
45
+ }
46
+ }
47
+ /**
48
+ * Updates an existing record in the specified table
49
+ */
50
+ async updateRecordAsync(tableName, id, data) {
51
+ try {
52
+ const { dataClient, connectionReference } = await this._getClientsAndConnection(tableName);
53
+ const requestUrl = await this._buildTableUrl(tableName, connectionReference, `/${id}`);
54
+ const result = await dataClient.updateDataAsync(requestUrl, connectionReference.apiId, tableName, data, { operationName: ConnectorOperationName.UpdateRecord });
55
+ return result;
56
+ }
57
+ catch (error) {
58
+ return createErrorResponse(error, DataOperationErrorMessages.UpdateFailed);
59
+ }
60
+ }
61
+ /**
62
+ * Deletes a record from the specified table
63
+ */
64
+ async deleteRecordAsync(tableName, id) {
65
+ try {
66
+ const { dataClient, connectionReference } = await this._getClientsAndConnection(tableName);
67
+ const requestUrl = await this._buildTableUrl(tableName, connectionReference, `/${id}`);
68
+ const result = await dataClient.deleteDataAsync(requestUrl, connectionReference.apiId, tableName, { operationName: ConnectorOperationName.DeleteRecord });
69
+ return result;
70
+ }
71
+ catch (error) {
72
+ return createErrorResponse(error, DataOperationErrorMessages.DeleteFailed);
73
+ }
74
+ }
75
+ /**
76
+ * Retrieves a single record from the specified table
77
+ */
78
+ async retrieveRecordAsync(tableName, id, options) {
79
+ try {
80
+ const { dataClient, connectionReference } = await this._getClientsAndConnection(tableName);
81
+ const requestUrl = await this._buildTableUrl(tableName, connectionReference, `/${id}${options}`);
82
+ const result = await dataClient.retrieveDataAsync(requestUrl, connectionReference.apiId, tableName, HttpMethod.GET, undefined, // body
83
+ { operationName: ConnectorOperationName.RetrieveRecord });
84
+ return result;
85
+ }
86
+ catch (error) {
87
+ return createErrorResponse(error, DataOperationErrorMessages.RetrieveFailed);
88
+ }
89
+ }
90
+ /**
91
+ * Retrieves multiple records from the specified table
92
+ */
93
+ async retrieveMultipleRecordsAsync(tableName, options) {
94
+ try {
95
+ const { dataClient, connectionReference } = await this._getClientsAndConnection(tableName);
96
+ const requestUrl = await this._buildTableUrl(tableName, connectionReference, options, false);
97
+ const result = await dataClient.retrieveDataAsync(requestUrl, connectionReference.apiId, tableName, HttpMethod.GET, undefined, // body
98
+ { operationName: ConnectorOperationName.RetrieveMultipleRecords });
99
+ return result;
100
+ }
101
+ catch (error) {
102
+ return createErrorResponse(error, DataOperationErrorMessages.RetrieveMultipleFailed);
103
+ }
104
+ }
105
+ /**
106
+ * Executes a custom operation on the data source
107
+ */
108
+ async executeAsync(operation) {
109
+ try {
110
+ if (!operation?.connectorOperation) {
111
+ throw new Error(`${DataOperationErrorMessages.InvalidRequest}: ${DataOperationErrorMessages.MissingConnectorOperation}`);
112
+ }
113
+ const tableName = operation.connectorOperation.tableName;
114
+ const dataSourceInfo = await this._connectionsService.getDataSource(tableName);
115
+ const { dataClient, connectionReference } = await this._getClientsAndConnection(tableName);
116
+ const config = await this._getOperationConfig(operation, connectionReference, tableName);
117
+ const requestUrl = await this._buildOperationUrl(operation, config);
118
+ const bodyParam = await this._buildOperationBody(operation, tableName);
119
+ const headers = await this._buildOperationHeader(operation, tableName);
120
+ const httpMethod = this._getHttpMethod(requestUrl, dataSourceInfo, operation.connectorOperation.operationName);
121
+ const responseInfo = dataSourceInfo.apis[operation.connectorOperation.operationName]?.responseInfo;
122
+ const result = await dataClient.retrieveDataAsync(requestUrl, config.apiId, tableName, httpMethod, headers, bodyParam, {
123
+ isExecuteAsync: true,
124
+ // Use the connector operation name for telemetry, may be a better idea to use executeAsync
125
+ // here and just log the connector operation name in the custom dimensions leaving comment for PR.
126
+ operationName: `connectorDataOperation.${operation.connectorOperation.operationName}`,
127
+ responseInfo,
128
+ });
129
+ return result;
130
+ }
131
+ catch (error) {
132
+ return createErrorResponse(error, DataOperationErrorMessages.ExecuteFailed);
133
+ }
134
+ }
135
+ // =====================================
136
+ // Private Methods
137
+ // =====================================
138
+ /**
139
+ * Determines the appropriate HTTP method for a request
140
+ * @param requestUrl - The URL for the request
141
+ * @param dataSourceInfo - The data source information
142
+ * @param operation - The operation name
143
+ * @returns The HTTP method to use
144
+ */
145
+ _getHttpMethod(requestUrl, dataSourceInfo, operation) {
146
+ // Check if it's a SQL stored procedure (which requires POST)
147
+ const isSqlStoredProcedure = requestUrl.indexOf('apim/sql') > -1;
148
+ // Default to POST for SQL procedures, GET otherwise
149
+ if (isSqlStoredProcedure) {
150
+ return HttpMethod.POST;
151
+ }
152
+ const method = dataSourceInfo.apis[operation]?.method;
153
+ if (method) {
154
+ return method;
155
+ }
156
+ return HttpMethod.GET;
157
+ }
158
+ /**
159
+ * Builds the operation body parameters
160
+ */
161
+ async _buildOperationBody(operation, tableName) {
162
+ const operationName = operation?.connectorOperation?.operationName;
163
+ if (operationName) {
164
+ const dataSourceInfo = await this._connectionsService.getDataSource(tableName);
165
+ const hasBodyParameter = dataSourceInfo?.apis?.[operationName]?.parameters?.some((param) => param.in === 'body');
166
+ if (hasBodyParameter) {
167
+ return await this._buildOperationBodyParam(operation, tableName);
168
+ }
169
+ }
170
+ return undefined;
171
+ }
172
+ /**
173
+ * Builds operation body parameters from the operation and data source info
174
+ */
175
+ async _buildOperationBodyParam(operation, tableName) {
176
+ const operationName = operation.connectorOperation?.operationName;
177
+ if (!operationName) {
178
+ return '{}';
179
+ }
180
+ const dataSourceInfo = await this._connectionsService.getDataSource(tableName);
181
+ const apiParams = dataSourceInfo?.apis?.[operationName]?.parameters || [];
182
+ const rawParams = operation.connectorOperation?.parameters || [];
183
+ let bodyValue = {};
184
+ apiParams.forEach((param, index) => {
185
+ if (typeof rawParams === 'object' && rawParams !== null) {
186
+ if (apiParams[index].in === 'body') {
187
+ const value = rawParams[param.name];
188
+ if (param.name === 'body') {
189
+ bodyValue = value;
190
+ return;
191
+ }
192
+ if (value !== undefined && value !== null) {
193
+ bodyValue[param.name] = value;
194
+ }
195
+ }
196
+ }
197
+ });
198
+ return JSON.stringify(bodyValue);
199
+ }
200
+ /**
201
+ * Builds the operation header for a given data operation if required.
202
+ *
203
+ * @template TRequest - The type of the request payload for the data operation.
204
+ * @param dataOperationRequest - The data operation containing details about the connector operation.
205
+ * @param tableName - The name of the table associated with the data operation.
206
+ * @returns A promise that resolves to the operation header as a string if a header parameter is required,
207
+ * or `undefined` if no header parameter is needed.
208
+ */
209
+ async _buildOperationHeader(dataOperationRequest, tableName) {
210
+ const operationName = dataOperationRequest.connectorOperation?.operationName;
211
+ if (operationName) {
212
+ const dataSourceInfo = await this._connectionsService.getDataSource(tableName);
213
+ const hasHeaderParameter = dataSourceInfo?.apis?.[operationName]?.parameters?.some((param) => param.in === 'header');
214
+ if (hasHeaderParameter) {
215
+ return await this._buildOperationHeaderParam(dataOperationRequest, tableName);
216
+ }
217
+ }
218
+ return undefined;
219
+ }
220
+ /**
221
+ * Builds the operation header parameters as a JSON string for a given data operation.
222
+ *
223
+ * @template TRequest - The type of the request object for the data operation.
224
+ * @param dataOperationRequest - The data operation containing connector operation details and parameters.
225
+ * @param tableName - The name of the table associated with the data operation.
226
+ * @returns A promise that resolves to a JSON string representing the header parameters,
227
+ * or `undefined` if no `header` parameters are available.
228
+ */
229
+ async _buildOperationHeaderParam(dataOperationRequest, tableName) {
230
+ const operationName = dataOperationRequest.connectorOperation?.operationName;
231
+ if (!operationName) {
232
+ return {};
233
+ }
234
+ const dataSourceInfo = await this._connectionsService.getDataSource(tableName);
235
+ const apiParamSpec = dataSourceInfo?.apis?.[operationName]?.parameters || [];
236
+ const inputParams = dataOperationRequest.connectorOperation?.parameters;
237
+ const headers = {};
238
+ // This method does not check for required header parameters
239
+ // If the header parameter is required & is not provided, the connector will throw an error
240
+ // when the operation is executed.
241
+ if (!inputParams) {
242
+ return undefined;
243
+ }
244
+ if (typeof inputParams === 'string') {
245
+ // Handle string parameter - often used for single parameter operations
246
+ if (apiParamSpec.length === 1 && apiParamSpec[0].in === 'header') {
247
+ headers[apiParamSpec[0].name] = inputParams;
248
+ }
249
+ }
250
+ if (typeof inputParams === 'object' && !Array.isArray(inputParams)) {
251
+ // Handle object parameters - match by parameter name
252
+ apiParamSpec.forEach((param) => {
253
+ if (param.in === 'header' && param.name in inputParams) {
254
+ headers[param.name] = inputParams[param.name];
255
+ }
256
+ });
257
+ }
258
+ if (Array.isArray(inputParams)) {
259
+ // Handle array parameters - match by index
260
+ apiParamSpec.forEach((param, index) => {
261
+ if (param.in === 'header' && inputParams[index] !== undefined) {
262
+ headers[param.name] = inputParams[index];
263
+ }
264
+ });
265
+ }
266
+ return headers;
267
+ }
268
+ /**
269
+ * Constructs the request URL for table operations
270
+ * @param tableName - The name of the table
271
+ * @param connectionReference - The connection reference
272
+ * @param options - Optional URL parameters
273
+ * @param encodeOptions - Whether to encode the options
274
+ * @returns The constructed URL
275
+ */
276
+ async _buildTableUrl(tableName, connectionReference, options = '', encodeOptions = true) {
277
+ const dataSourceInfo = await this._connectionsService.getDataSource(tableName);
278
+ const isSharedSql = (connectionReference.apiId ?? '').indexOf('shared_sql') > -1;
279
+ const isSharePoint = (connectionReference.apiId ?? '').indexOf('shared_sharepointonline') > -1;
280
+ const urlBuilder = {
281
+ runtimeUrl: connectionReference.runtimeUrl ?? '',
282
+ connectionName: connectionReference.connectionName ?? '',
283
+ datasetName: connectionReference.datasetName
284
+ ? isSharedSql
285
+ ? connectionReference.datasetNameOverride
286
+ : isSharePoint
287
+ ? encodeURIComponent(encodeURIComponent(connectionReference.datasetName))
288
+ : encodeURIComponent(connectionReference.datasetName)
289
+ : '',
290
+ tableId: isSharedSql
291
+ ? encodeURIComponent(encodeURIComponent(dataSourceInfo.tableId))
292
+ : dataSourceInfo.tableId,
293
+ version: dataSourceInfo.version,
294
+ isSharedSql,
295
+ };
296
+ return this._constructUrl(urlBuilder, options, encodeOptions);
297
+ }
298
+ /**
299
+ * Builds the operation URL
300
+ */
301
+ async _buildOperationUrl(operation, config) {
302
+ const operationName = operation.connectorOperation?.operationName;
303
+ if (!operationName) {
304
+ throw new Error(`${DataOperationErrorMessages.InvalidOperationParameters}: ${DataOperationErrorMessages.MissingOperationName}`);
305
+ }
306
+ const dataSourceInfo = await this._connectionsService.getDataSource(config.tableName);
307
+ const isSharedSql = (config.apiId ?? '').indexOf('shared_sql') > -1;
308
+ const path = dataSourceInfo.apis[operationName].path;
309
+ if (isSharedSql) {
310
+ return this._buildSharedSqlOperationUrl(config, path);
311
+ }
312
+ return this._buildStandardOperationUrl(operation, config, operationName, path);
313
+ }
314
+ /**
315
+ * Gets the connection references
316
+ */
317
+ async _getConnectionReferencesAsync() {
318
+ if (this._connectionReferences) {
319
+ return this._connectionReferences;
320
+ }
321
+ const metadataClient = await this._getMetadataClient();
322
+ const response = await metadataClient.getAppConnectionConfigsAsync();
323
+ this._connectionReferences = response.data;
324
+ return this._connectionReferences;
325
+ }
326
+ /**
327
+ * Gets the database references
328
+ */
329
+ async _getDatabaseReferencesAsync() {
330
+ if (this._databaseReferences) {
331
+ return this._databaseReferences;
332
+ }
333
+ const metadataClient = await this._getMetadataClient();
334
+ const response = await metadataClient.getAppDataSourceConfigsAsync();
335
+ this._databaseReferences = response.data;
336
+ return this._databaseReferences;
337
+ }
338
+ /**
339
+ * Gets the metadata client instance
340
+ */
341
+ async _getMetadataClient() {
342
+ const metadataClient = await this._clientProvider.getMetadataClientAsync();
343
+ if (!metadataClient) {
344
+ throw new PowerDataRuntimeError(ErrorCodes.MetadataClientNotAvailable);
345
+ }
346
+ return metadataClient;
347
+ }
348
+ /**
349
+ * Gets the connection reference for a table
350
+ */
351
+ _getConnectionReference(tableName) {
352
+ const connectionReference = this._connectionReferences?.[tableName];
353
+ if (!connectionReference) {
354
+ throw new PowerDataRuntimeError(ErrorCodes.ConnectionReferenceNotFound, tableName);
355
+ }
356
+ return connectionReference;
357
+ }
358
+ /**
359
+ * Gets both the data client and connection reference
360
+ */
361
+ async _getClientsAndConnection(tableName) {
362
+ await this._getReferences();
363
+ const dataClient = await this._clientProvider.getDataClientAsync();
364
+ if (!dataClient) {
365
+ throw new PowerDataRuntimeError(ErrorCodes.DataClientNotAvailable);
366
+ }
367
+ const connectionReference = this._getConnectionReference(tableName);
368
+ return { dataClient, connectionReference };
369
+ }
370
+ /**
371
+ * Builds the URL for shared SQL operations
372
+ */
373
+ _buildSharedSqlOperationUrl(config, path) {
374
+ const version = config.version ? `/${config.version}/` : '/';
375
+ return `${config.runtimeUrl}/${config.connectionName}${version}datasets/${config.datasetName}/procedures${path}`;
376
+ }
377
+ /**
378
+ * Builds the URL for standard operations
379
+ */
380
+ async _buildStandardOperationUrl(operation, config, operationName, path) {
381
+ const dataSourceInfo = await this._connectionsService.getDataSource(config.tableName);
382
+ const apiParams = dataSourceInfo.apis[operationName]?.parameters || [];
383
+ // Handle parameters that could be an object, array, or string
384
+ const operationParams = operation.connectorOperation?.parameters;
385
+ let rawParams = [config.connectionName];
386
+ // Handle different parameter types
387
+ if (operationParams !== undefined) {
388
+ if (typeof operationParams === 'string') {
389
+ // Handle string parameter - often used for single parameter operations
390
+ if (apiParams.length > 0) {
391
+ rawParams.push(operationParams);
392
+ }
393
+ }
394
+ else if (typeof operationParams === 'object' && !Array.isArray(operationParams)) {
395
+ // Handle object parameters - match by parameter name (normalized)
396
+ apiParams.forEach((param) => {
397
+ if (operationParams) {
398
+ const value = this._getNormalizedParamValue(operationParams, param.name);
399
+ if (value !== undefined) {
400
+ rawParams.push(value);
401
+ }
402
+ }
403
+ });
404
+ }
405
+ else if (Array.isArray(operationParams)) {
406
+ // Handle array parameters - match by index
407
+ rawParams = [config.connectionName, ...operationParams];
408
+ }
409
+ }
410
+ const { processedPath, queryParams } = this._processParameters(apiParams, rawParams, path);
411
+ const separator = queryParams ? (processedPath.includes('?') ? '&' : '?') : '';
412
+ return `${config.runtimeUrl}${processedPath}${separator}${queryParams}`;
413
+ }
414
+ /**
415
+ * Normalizes the parameter name by replacing hyphens with underscores and performs case-insensitive matching
416
+ */
417
+ _getNormalizedParamValue(obj, paramName) {
418
+ const normalizedParamName = paramName.replace(/-/g, '_').toLowerCase();
419
+ const foundKey = Object.keys(obj).find((key) => key.replace(/-/g, '_').toLowerCase() === normalizedParamName);
420
+ return foundKey !== undefined ? obj[foundKey] : undefined;
421
+ }
422
+ /**
423
+ * Processes operation parameters into path and query parameters
424
+ */
425
+ _processParameters(apiParams, rawParams, path) {
426
+ const usedParams = new Set();
427
+ let processedPath = path;
428
+ const queryParams = [];
429
+ apiParams.forEach((param, index) => {
430
+ const paramValue = rawParams[index];
431
+ if (paramValue === undefined) {
432
+ return;
433
+ }
434
+ if (param.in === 'path') {
435
+ const placeholder = `{${param.name}}`;
436
+ if (processedPath.includes(placeholder)) {
437
+ processedPath = processedPath.replace(placeholder, encodeURIComponent(String(paramValue)));
438
+ usedParams.add(param.name);
439
+ }
440
+ }
441
+ else if (param.in === 'query') {
442
+ queryParams.push(`${encodeURIComponent(param.name)}=${encodeURIComponent(String(paramValue))}`);
443
+ usedParams.add(param.name);
444
+ }
445
+ });
446
+ return {
447
+ processedPath,
448
+ queryParams: queryParams.join('&'),
449
+ };
450
+ }
451
+ /**
452
+ * Gets the operation configuration
453
+ */
454
+ async _getOperationConfig(operation, connectionReference, tableName) {
455
+ if (!operation.connectorOperation) {
456
+ throw new Error(`${DataOperationErrorMessages.InvalidRequest}: ${DataOperationErrorMessages.MissingConnectorOperation}`);
457
+ }
458
+ const dataSourceInfo = await this._connectionsService.getDataSource(tableName);
459
+ const config = {
460
+ tableName,
461
+ apiId: connectionReference.apiId ?? '',
462
+ runtimeUrl: connectionReference.runtimeUrl ?? '',
463
+ connectionName: connectionReference.connectionName ?? '',
464
+ datasetName: connectionReference.datasetName ?? '',
465
+ tableId: dataSourceInfo.tableId,
466
+ version: dataSourceInfo.version,
467
+ };
468
+ return config;
469
+ }
470
+ /**
471
+ * Initializes the clients
472
+ */
473
+ async _getReferences() {
474
+ await this._getConnectionReferencesAsync();
475
+ await this._getDatabaseReferencesAsync();
476
+ }
477
+ /**
478
+ * Validates constructor parameters
479
+ */
480
+ _validateConstructorParams(clientProvider, connectionsService) {
481
+ if (!clientProvider) {
482
+ throw new PowerDataRuntimeError(ErrorCodes.ClientProviderNotAvailable);
483
+ }
484
+ if (!connectionsService) {
485
+ throw new PowerDataRuntimeError(ErrorCodes.DataSourceServiceNotAvailable);
486
+ }
487
+ }
488
+ /**
489
+ * Constructs the final URL
490
+ */
491
+ _constructUrl(urlBuilder, options = '', encodeOptions = true) {
492
+ const apiVersion = urlBuilder.version ? `/${urlBuilder.version}/` : '/';
493
+ const encodedOptions = encodeOptions && options ? options.charAt(0) + encodeURIComponent(options.slice(1)) : options;
494
+ if (urlBuilder.datasetName) {
495
+ return `${urlBuilder.runtimeUrl}/${urlBuilder.connectionName}${apiVersion}datasets/${urlBuilder.datasetName}/tables/${urlBuilder.tableId}/items${encodedOptions}`;
496
+ }
497
+ return `${urlBuilder.runtimeUrl}/${urlBuilder.connectionName}/tables/${urlBuilder.tableId}/items${encodedOptions}`;
498
+ }
499
+ }
500
+ //# sourceMappingURL=connectorDataOperationExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectorDataOperationExecutor.js","sourceRoot":"","sources":["../../../../../../src/internal/data/core/data/executors/connectorDataOperationExecutor.ts"],"names":[],"mappings":"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"}