@sap/cds 5.9.6 → 6.0.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 (381) hide show
  1. package/CHANGELOG.md +266 -20
  2. package/apis/services.d.ts +1 -1
  3. package/app/fiori/preview.js +2 -6
  4. package/app/index.js +3 -3
  5. package/bin/build/buildTaskEngine.js +17 -15
  6. package/bin/build/buildTaskFactory.js +29 -19
  7. package/bin/build/buildTaskHandler.js +27 -11
  8. package/bin/build/buildTaskProvider.js +2 -4
  9. package/bin/build/buildTaskProviderFactory.js +11 -16
  10. package/bin/build/constants.js +14 -6
  11. package/bin/build/csv-reader.js +2 -1
  12. package/bin/build/index.js +12 -18
  13. package/bin/build/provider/buildTaskHandlerEdmx.js +3 -39
  14. package/bin/build/provider/buildTaskHandlerFeatureToggles.js +149 -0
  15. package/bin/build/provider/buildTaskHandlerInternal.js +2 -3
  16. package/bin/build/provider/buildTaskProviderInternal.js +108 -239
  17. package/bin/build/provider/fiori/index.js +2 -2
  18. package/bin/build/provider/hana/2migration.js +11 -11
  19. package/bin/build/provider/hana/2tabledata.js +3 -3
  20. package/bin/build/provider/hana/index.js +89 -99
  21. package/bin/build/provider/hana/migrationtable.js +4 -3
  22. package/bin/build/provider/java/index.js +101 -0
  23. package/bin/build/provider/java-cf/index.js +1 -101
  24. package/bin/build/provider/mtx/index.js +90 -53
  25. package/bin/build/provider/mtx/resourcesTarBuilder.js +68 -0
  26. package/bin/build/provider/mtx-sidecar/index.js +80 -0
  27. package/bin/build/provider/node-cf/index.js +1 -308
  28. package/bin/build/provider/nodejs/index.js +189 -0
  29. package/bin/build/util.js +19 -31
  30. package/bin/cds.js +5 -3
  31. package/bin/deploy/to-hana/cfUtil.js +31 -6
  32. package/bin/deploy/to-hana/gitUtil.js +5 -3
  33. package/bin/deploy/to-hana/hana.js +9 -10
  34. package/bin/{build → deploy/to-hana}/mtaUtil.js +10 -9
  35. package/bin/mtx/in-cds.js +19 -7
  36. package/bin/serve.js +56 -21
  37. package/bin/utils/log.js +13 -30
  38. package/bin/version.js +5 -4
  39. package/common.cds +61 -16
  40. package/lib/compile/cdsc.js +3 -2
  41. package/lib/compile/etc/_localized.js +15 -14
  42. package/lib/compile/for/drafts.js +3 -4
  43. package/lib/compile/for/java.js +13 -10
  44. package/lib/compile/for/nodejs.js +8 -8
  45. package/lib/compile/for/odata.js +7 -12
  46. package/lib/compile/for/sql.js +5 -6
  47. package/lib/compile/index.js +5 -4
  48. package/lib/compile/load.js +9 -11
  49. package/lib/compile/minify.js +8 -5
  50. package/lib/compile/parse.js +4 -2
  51. package/lib/compile/resolve.js +18 -15
  52. package/lib/compile/to/edm.js +0 -1
  53. package/lib/compile/to/gql.js +3 -2
  54. package/lib/compile/to/json.js +24 -17
  55. package/lib/connect/bindings.js +3 -2
  56. package/lib/connect/index.js +5 -5
  57. package/lib/core/classes.js +74 -2
  58. package/lib/core/entities.js +52 -3
  59. package/lib/core/reflect.js +2 -1
  60. package/lib/deploy.js +11 -8
  61. package/lib/env/defaults.js +4 -3
  62. package/lib/env/index.js +71 -31
  63. package/lib/env/presets.js +1 -14
  64. package/lib/env/requires.js +70 -20
  65. package/lib/env/serviceBindings.js +147 -0
  66. package/lib/i18n/localize.js +22 -23
  67. package/lib/index.js +148 -144
  68. package/lib/log/errors.js +55 -12
  69. package/lib/log/format/kibana.js +1 -1
  70. package/lib/log/index.js +4 -0
  71. package/lib/ql/SELECT.js +7 -2
  72. package/lib/ql/Whereable.js +8 -2
  73. package/lib/ql/index.js +2 -2
  74. package/lib/req/assert.js +71 -0
  75. package/lib/req/cds-context.js +38 -70
  76. package/lib/req/context.js +34 -21
  77. package/lib/req/request.js +12 -18
  78. package/lib/req/response.js +6 -2
  79. package/lib/req/user.js +30 -22
  80. package/lib/serve/Service-api.js +17 -12
  81. package/lib/serve/Service-dispatch.js +5 -9
  82. package/lib/serve/Service-methods.js +4 -3
  83. package/lib/serve/Transaction.js +24 -21
  84. package/lib/serve/adapters.js +15 -5
  85. package/lib/serve/factory.js +23 -20
  86. package/lib/serve/index.js +51 -54
  87. package/lib/utils/axios.js +8 -12
  88. package/lib/utils/index.js +3 -3
  89. package/lib/utils/resources/index.js +1 -44
  90. package/lib/utils/resources/tar.js +2 -1
  91. package/lib/utils/tests.js +13 -15
  92. package/libx/_runtime/.eslintrc +1 -1
  93. package/libx/_runtime/audit/Service.js +6 -4
  94. package/libx/_runtime/audit/generic/personal/access.js +19 -43
  95. package/libx/_runtime/audit/generic/personal/index.js +40 -34
  96. package/libx/_runtime/audit/generic/personal/modification.js +11 -9
  97. package/libx/_runtime/audit/generic/personal/utils.js +13 -6
  98. package/libx/_runtime/audit/utils/v2.js +6 -3
  99. package/libx/_runtime/auth/index.js +71 -66
  100. package/libx/_runtime/auth/strategies/JWT.js +3 -2
  101. package/libx/_runtime/auth/strategies/mock.js +54 -53
  102. package/libx/_runtime/auth/strategies/xssecUtils.js +3 -4
  103. package/libx/_runtime/auth/strategies/xsuaa.js +3 -2
  104. package/libx/_runtime/auth/utils.js +2 -15
  105. package/libx/_runtime/cds-services/adapter/odata-v4/Dispatcher.js +128 -42
  106. package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +6 -3
  107. package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +93 -73
  108. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +10 -45
  109. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +5 -9
  110. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +9 -5
  111. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +4 -2
  112. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +60 -53
  113. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +1 -1
  114. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +15 -21
  115. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +8 -15
  116. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +29 -41
  117. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +1 -4
  118. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +13 -13
  119. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -7
  120. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +24 -1
  121. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +1 -1
  122. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +4 -3
  123. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +4 -5
  124. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +4 -3
  125. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +5 -3
  126. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +2 -0
  127. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +1 -1
  128. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +1 -1
  129. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +1 -1
  130. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +1 -1
  131. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +3 -2
  132. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +3 -1
  133. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +1 -0
  134. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +3 -3
  135. package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +36 -25
  136. package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +100 -91
  137. package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +382 -0
  138. package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +1 -4
  139. package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +5 -6
  140. package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +77 -21
  141. package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +3 -11
  142. package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +91 -69
  143. package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +27 -6
  144. package/libx/_runtime/cds-services/adapter/rest/utils/validation-checks.js +7 -17
  145. package/libx/_runtime/cds-services/services/Service.js +17 -76
  146. package/libx/_runtime/cds-services/services/utils/columns.js +6 -4
  147. package/libx/_runtime/cds-services/services/utils/compareJson.js +1 -53
  148. package/libx/_runtime/cds-services/services/utils/differ.js +15 -19
  149. package/libx/_runtime/cds-services/util/assert.js +107 -34
  150. package/libx/_runtime/cds.js +1 -31
  151. package/libx/_runtime/common/aspects/Association.js +40 -54
  152. package/libx/_runtime/common/aspects/any.js +61 -6
  153. package/libx/_runtime/common/aspects/entity.js +19 -79
  154. package/libx/_runtime/common/composition/data.js +2 -2
  155. package/libx/_runtime/common/composition/delete.js +16 -18
  156. package/libx/_runtime/common/composition/tree.js +10 -10
  157. package/libx/_runtime/common/composition/update.js +3 -2
  158. package/libx/_runtime/common/constants/events.js +15 -0
  159. package/libx/_runtime/common/error/entry.js +9 -3
  160. package/libx/_runtime/common/error/frontend.js +13 -19
  161. package/libx/_runtime/common/error/index.js +8 -3
  162. package/libx/_runtime/common/generic/auth/capabilities.js +2 -1
  163. package/libx/_runtime/common/generic/auth/constants.js +1 -4
  164. package/libx/_runtime/common/generic/auth/requires.js +1 -1
  165. package/libx/_runtime/common/generic/auth/restrict.js +12 -28
  166. package/libx/_runtime/common/generic/auth/restrictions.js +12 -4
  167. package/libx/_runtime/common/generic/auth/utils.js +2 -1
  168. package/libx/_runtime/common/generic/crud.js +9 -60
  169. package/libx/_runtime/common/generic/etag.js +41 -7
  170. package/libx/_runtime/common/generic/input.js +128 -66
  171. package/libx/_runtime/common/generic/paging.js +9 -3
  172. package/libx/_runtime/common/generic/put.js +2 -2
  173. package/libx/_runtime/common/generic/sorting.js +11 -4
  174. package/libx/_runtime/common/generic/temporal.js +0 -5
  175. package/libx/_runtime/common/i18n/messages.properties +2 -1
  176. package/libx/_runtime/common/utils/binary.js +69 -0
  177. package/libx/_runtime/common/utils/cqn.js +39 -14
  178. package/libx/_runtime/common/utils/cqn2cqn4sql.js +93 -59
  179. package/libx/_runtime/common/utils/csn.js +87 -85
  180. package/libx/_runtime/common/utils/dollar.js +8 -7
  181. package/libx/_runtime/common/utils/draft.js +1 -1
  182. package/libx/_runtime/common/utils/foreignKeyPropagations.js +23 -7
  183. package/libx/_runtime/common/utils/generateOnCond.js +2 -1
  184. package/libx/_runtime/common/utils/keys.js +30 -13
  185. package/libx/_runtime/common/utils/postProcessing.js +6 -1
  186. package/libx/_runtime/common/utils/quotingStyles.js +0 -23
  187. package/libx/_runtime/common/utils/resolveStructured.js +23 -26
  188. package/libx/_runtime/common/utils/resolveView.js +4 -1
  189. package/libx/_runtime/common/utils/rewriteAsterisks.js +3 -0
  190. package/libx/_runtime/common/utils/search2cqn4sql.js +4 -13
  191. package/libx/_runtime/common/utils/searchToLike.js +9 -13
  192. package/libx/_runtime/common/utils/streamProp.js +35 -0
  193. package/libx/_runtime/common/utils/structured.js +12 -18
  194. package/libx/_runtime/common/utils/template.js +3 -5
  195. package/libx/_runtime/common/utils/templateProcessor.js +22 -14
  196. package/libx/_runtime/common/utils/unionCqnTemplate.js +4 -14
  197. package/libx/_runtime/db/Service.js +2 -1
  198. package/libx/_runtime/db/expand/expand-v2.js +2 -2
  199. package/libx/_runtime/db/expand/expandCQNToJoin.js +7 -6
  200. package/libx/_runtime/db/generic/input.js +14 -17
  201. package/libx/_runtime/db/generic/integrity.js +1 -2
  202. package/libx/_runtime/db/generic/update.js +14 -1
  203. package/libx/_runtime/db/query/read.js +0 -1
  204. package/libx/_runtime/db/query/update.js +1 -1
  205. package/libx/_runtime/db/sql-builder/BaseBuilder.js +1 -1
  206. package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +5 -31
  207. package/libx/_runtime/db/sql-builder/InsertBuilder.js +1 -1
  208. package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -9
  209. package/libx/_runtime/db/sql-builder/SelectBuilder.js +11 -10
  210. package/libx/_runtime/db/sql-builder/UpdateBuilder.js +2 -2
  211. package/libx/_runtime/db/sql-builder/annotations.js +1 -2
  212. package/libx/_runtime/db/utils/coloredTxCommands.js +5 -0
  213. package/libx/_runtime/db/utils/columns.js +1 -1
  214. package/libx/_runtime/db/utils/propagateForeignKeys.js +10 -2
  215. package/libx/_runtime/extensibility/activate.js +69 -0
  216. package/libx/_runtime/extensibility/add.js +41 -0
  217. package/libx/_runtime/extensibility/addExtension.js +68 -0
  218. package/libx/_runtime/extensibility/defaults.js +39 -0
  219. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformREAD.js +0 -0
  220. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformRESULT.js +2 -2
  221. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformWRITE.js +2 -2
  222. package/libx/_runtime/extensibility/push.js +61 -0
  223. package/libx/_runtime/extensibility/service.js +21 -0
  224. package/libx/_runtime/extensibility/{uiflex/utils.js → utils.js} +39 -3
  225. package/libx/_runtime/extensibility/validation.js +53 -0
  226. package/libx/_runtime/extensibility/views.js +12 -0
  227. package/libx/_runtime/fiori/generic/activate.js +6 -4
  228. package/libx/_runtime/fiori/generic/before.js +17 -29
  229. package/libx/_runtime/fiori/generic/cancel.js +2 -4
  230. package/libx/_runtime/fiori/generic/delete.js +2 -4
  231. package/libx/_runtime/fiori/generic/edit.js +3 -7
  232. package/libx/_runtime/fiori/generic/index.js +31 -0
  233. package/libx/_runtime/fiori/generic/new.js +2 -4
  234. package/libx/_runtime/fiori/generic/patch.js +4 -8
  235. package/libx/_runtime/fiori/generic/prepare.js +2 -4
  236. package/libx/_runtime/fiori/generic/read.js +137 -162
  237. package/libx/_runtime/fiori/generic/readOverDraft.js +10 -4
  238. package/libx/_runtime/fiori/utils/handler.js +10 -5
  239. package/libx/_runtime/fiori/utils/where.js +1 -4
  240. package/libx/_runtime/hana/Service.js +14 -7
  241. package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +1 -1
  242. package/libx/_runtime/hana/dynatrace.js +2 -2
  243. package/libx/_runtime/hana/localized.js +7 -6
  244. package/libx/_runtime/hana/pool.js +9 -6
  245. package/libx/_runtime/hana/search.js +2 -3
  246. package/libx/_runtime/hana/{searchToContains.js → search2Contains.js} +5 -2
  247. package/libx/_runtime/hana/search2cqn4sql.js +20 -17
  248. package/libx/_runtime/index.js +2 -6
  249. package/libx/_runtime/messaging/AMQPWebhookMessaging.js +11 -2
  250. package/libx/_runtime/messaging/common-utils/AMQPClient.js +4 -3
  251. package/libx/_runtime/messaging/common-utils/appId.js +9 -0
  252. package/libx/_runtime/messaging/common-utils/authorizedRequest.js +2 -18
  253. package/libx/_runtime/messaging/common-utils/connections.js +1 -1
  254. package/libx/_runtime/messaging/enterprise-messaging-shared.js +2 -2
  255. package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +305 -231
  256. package/libx/_runtime/messaging/enterprise-messaging-utils/cloudEvents.js +2 -2
  257. package/libx/_runtime/messaging/enterprise-messaging-utils/options-management.js +15 -8
  258. package/libx/_runtime/messaging/enterprise-messaging-utils/options-messaging.js +57 -14
  259. package/libx/_runtime/messaging/enterprise-messaging.js +14 -19
  260. package/libx/_runtime/messaging/file-based.js +2 -1
  261. package/libx/_runtime/messaging/http-utils/token.js +18 -6
  262. package/libx/_runtime/messaging/message-queuing-utils/options-management.js +22 -12
  263. package/libx/_runtime/messaging/message-queuing-utils/options-messaging.js +27 -14
  264. package/libx/_runtime/messaging/message-queuing.js +138 -85
  265. package/libx/_runtime/messaging/outbox/utils.js +13 -7
  266. package/libx/_runtime/messaging/redis-messaging.js +0 -1
  267. package/libx/_runtime/messaging/service.js +4 -1
  268. package/libx/_runtime/remote/Service.js +24 -18
  269. package/libx/_runtime/remote/utils/client.js +84 -46
  270. package/libx/_runtime/remote/utils/data.js +23 -6
  271. package/libx/_runtime/sqlite/Service.js +14 -13
  272. package/libx/_runtime/sqlite/convertAssocToOneManaged.js +2 -0
  273. package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +1 -0
  274. package/libx/_runtime/sqlite/execute.js +3 -9
  275. package/libx/_runtime/types/api.js +23 -11
  276. package/libx/common/utils/ucsn.js +15 -9
  277. package/libx/odata/afterburner.js +109 -29
  278. package/libx/odata/cqn2odata.js +48 -9
  279. package/libx/odata/grammar.pegjs +261 -157
  280. package/libx/odata/index.js +21 -9
  281. package/libx/odata/parseToCqn.js +8 -5
  282. package/libx/odata/parser.js +1 -1
  283. package/libx/odata/utils.js +13 -3
  284. package/libx/rest/RestAdapter.js +173 -113
  285. package/libx/rest/RestRequest.js +3 -2
  286. package/libx/rest/middleware/create.js +8 -6
  287. package/libx/rest/middleware/delete.js +6 -13
  288. package/libx/rest/middleware/error.js +1 -1
  289. package/libx/rest/middleware/input.js +6 -6
  290. package/libx/rest/middleware/operation.js +8 -3
  291. package/libx/rest/middleware/parse.js +3 -3
  292. package/libx/rest/middleware/payload.js +12 -0
  293. package/libx/rest/middleware/read.js +12 -2
  294. package/libx/rest/middleware/update.js +3 -3
  295. package/package.json +4 -6
  296. package/server.js +3 -44
  297. package/srv/extensibility-service.cds +56 -0
  298. package/srv/extensibility-service.js +1 -0
  299. package/srv/extensions.cds +8 -0
  300. package/srv/model-provider.cds +59 -0
  301. package/srv/model-provider.js +163 -0
  302. package/srv/mtx.cds +2 -0
  303. package/srv/mtx.js +22 -0
  304. package/srv/outbox.cds +2 -0
  305. package/tasks/enterprise-messaging-deploy.js +19 -12
  306. package/lib/serve/Service-compat.js +0 -36
  307. package/libx/_runtime/audit/generic/personal/constants.js +0 -4
  308. package/libx/_runtime/auth/strategies/dwc.js +0 -45
  309. package/libx/_runtime/cds-services/adapter/odata-v4/utils/dispatcherUtils.js +0 -56
  310. package/libx/_runtime/cds-services/adapter/rest/Rest.js +0 -183
  311. package/libx/_runtime/cds-services/adapter/rest/RestRequest.js +0 -67
  312. package/libx/_runtime/cds-services/adapter/rest/handlers/create.js +0 -82
  313. package/libx/_runtime/cds-services/adapter/rest/handlers/delete.js +0 -39
  314. package/libx/_runtime/cds-services/adapter/rest/handlers/operation.js +0 -63
  315. package/libx/_runtime/cds-services/adapter/rest/handlers/read.js +0 -52
  316. package/libx/_runtime/cds-services/adapter/rest/handlers/update.js +0 -81
  317. package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/index.js +0 -56
  318. package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/utils.js +0 -33
  319. package/libx/_runtime/cds-services/adapter/rest/to.js +0 -8
  320. package/libx/_runtime/cds-services/adapter/rest/utils/binary.js +0 -50
  321. package/libx/_runtime/cds-services/adapter/rest/utils/data.js +0 -117
  322. package/libx/_runtime/cds-services/adapter/rest/utils/header-checks.js +0 -14
  323. package/libx/_runtime/cds-services/adapter/rest/utils/key-value-utils.js +0 -30
  324. package/libx/_runtime/cds-services/adapter/rest/utils/parse-url.js +0 -250
  325. package/libx/_runtime/cds-services/adapter/rest/utils/result.js +0 -26
  326. package/libx/_runtime/cds-services/services/utils/handlerUtils.js +0 -200
  327. package/libx/_runtime/common/aspects/utils.js +0 -152
  328. package/libx/_runtime/common/toggles/handler.js +0 -21
  329. package/libx/_runtime/common/utils/extensibilityUtils.js +0 -18
  330. package/libx/_runtime/extensibility/mps/index.js +0 -5
  331. package/libx/_runtime/extensibility/mps/service.js +0 -111
  332. package/libx/_runtime/extensibility/mps/tar.js +0 -42
  333. package/libx/_runtime/extensibility/mps/utils.js +0 -11
  334. package/libx/_runtime/extensibility/uiflex/index.js +0 -54
  335. package/libx/_runtime/extensibility/uiflex/service.js +0 -276
  336. package/libx/_runtime/messaging/common-utils/naming-conventions.js +0 -20
  337. package/libx/_runtime/remote/utils/client-types.d.ts +0 -7
  338. package/libx/gql/GraphQLAdapter.js +0 -33
  339. package/libx/gql/constants/adapter.js +0 -69
  340. package/libx/gql/constants/cds.js +0 -18
  341. package/libx/gql/constants/graphql.js +0 -33
  342. package/libx/gql/readme.md +0 -1
  343. package/libx/gql/resolvers/crud/create.js +0 -20
  344. package/libx/gql/resolvers/crud/delete.js +0 -29
  345. package/libx/gql/resolvers/crud/index.js +0 -6
  346. package/libx/gql/resolvers/crud/read.js +0 -30
  347. package/libx/gql/resolvers/crud/update.js +0 -42
  348. package/libx/gql/resolvers/crud/utils/index.js +0 -36
  349. package/libx/gql/resolvers/field.js +0 -5
  350. package/libx/gql/resolvers/index.js +0 -7
  351. package/libx/gql/resolvers/mutation.js +0 -23
  352. package/libx/gql/resolvers/parse/ast/enrich.js +0 -52
  353. package/libx/gql/resolvers/parse/ast/fragment.js +0 -11
  354. package/libx/gql/resolvers/parse/ast/fromObject.js +0 -39
  355. package/libx/gql/resolvers/parse/ast/index.js +0 -3
  356. package/libx/gql/resolvers/parse/ast/meta.js +0 -4
  357. package/libx/gql/resolvers/parse/ast/variable.js +0 -7
  358. package/libx/gql/resolvers/parse/ast2cqn/columns.js +0 -44
  359. package/libx/gql/resolvers/parse/ast2cqn/entries.js +0 -31
  360. package/libx/gql/resolvers/parse/ast2cqn/index.js +0 -8
  361. package/libx/gql/resolvers/parse/ast2cqn/limit.js +0 -6
  362. package/libx/gql/resolvers/parse/ast2cqn/orderBy.js +0 -24
  363. package/libx/gql/resolvers/parse/ast2cqn/utils/index.js +0 -3
  364. package/libx/gql/resolvers/parse/ast2cqn/where.js +0 -70
  365. package/libx/gql/resolvers/parse/utils/index.js +0 -8
  366. package/libx/gql/resolvers/query.js +0 -13
  367. package/libx/gql/resolvers/root.js +0 -34
  368. package/libx/gql/schema/generate.js +0 -18
  369. package/libx/gql/schema/index.js +0 -5
  370. package/libx/gql/schema/mutation.js +0 -76
  371. package/libx/gql/schema/query.js +0 -108
  372. package/libx/gql/schema/typeDefMap.js +0 -45
  373. package/libx/gql/schema/utils/index.js +0 -54
  374. package/libx/gql/utils/index.js +0 -12
  375. package/libx/rest/middleware/auth.js +0 -20
  376. package/libx/rest/middleware/content.js +0 -19
  377. package/srv/flex.cds +0 -21
  378. package/srv/flex.js +0 -1
  379. package/srv/mps.cds +0 -23
  380. package/srv/mps.js +0 -1
  381. package/srv/outbox.js +0 -0
@@ -36,180 +36,241 @@ class EMManagement {
36
36
  }
37
37
 
38
38
  async getQueue(queueName = this.queueName) {
39
- const res = await authorizedRequest({
40
- method: 'GET',
41
- uri: this.options.uri,
42
- path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}`,
43
- oa2: this.options.oa2,
44
- attemptInfo: () =>
45
- this.LOG._info &&
46
- this.LOG.info(
47
- 'Get queue',
48
- this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
49
- ),
50
- errMsg: `Queue "${queueName}" could not be retrieved ${this.subdomainInfo}`,
51
- target: { kind: 'QUEUE', queue: queueName },
52
- tokenStore: this
53
- })
54
- return res.body
39
+ this.LOG._info &&
40
+ this.LOG.info(
41
+ 'Get queue',
42
+ this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
43
+ )
44
+ try {
45
+ const res = await authorizedRequest({
46
+ method: 'GET',
47
+ uri: this.options.uri,
48
+ path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}`,
49
+ oa2: this.options.oa2,
50
+ tokenStore: this
51
+ })
52
+ return res.body
53
+ } catch (e) {
54
+ const error = new Error(`Queue "${queueName}" could not be retrieved ${this.subdomainInfo}`)
55
+ error.code = 'GET_QUEUE_FAILED'
56
+ error.target = { kind: 'QUEUE', queue: queueName }
57
+ error.reason = e
58
+ this.LOG.error(error)
59
+ throw error
60
+ }
55
61
  }
56
62
 
57
63
  async getQueues() {
58
- const res = await authorizedRequest({
59
- method: 'GET',
60
- uri: this.options.uri,
61
- path: `/hub/rest/api/v1/management/messaging/queues`,
62
- oa2: this.options.oa2,
63
- attemptInfo: () =>
64
- this.LOG._info && this.LOG.info('Get queues', this.subdomain ? { subdomain: this.subdomain } : {}),
65
- errMsg: `Queues could not be retrieved ${this.subdomainInfo}`,
66
- target: { kind: 'QUEUE' },
67
- tokenStore: this
68
- })
69
- return res.body
64
+ this.LOG._info && this.LOG.info('Get queues', this.subdomain ? { subdomain: this.subdomain } : {})
65
+ try {
66
+ const res = await authorizedRequest({
67
+ method: 'GET',
68
+ uri: this.options.uri,
69
+ path: `/hub/rest/api/v1/management/messaging/queues`,
70
+ oa2: this.options.oa2,
71
+ tokenStore: this
72
+ })
73
+ return res.body
74
+ } catch (e) {
75
+ const error = new Error(`Queues could not be retrieved ${this.subdomainInfo}`)
76
+ error.code = 'GET_QUEUES_FAILED'
77
+ error.target = { kind: 'QUEUE' }
78
+ error.reason = e
79
+ this.LOG.error(error)
80
+ throw error
81
+ }
70
82
  }
71
83
 
72
- createQueue(queueName = this.queueName) {
73
- return authorizedRequest({
74
- method: 'PUT',
75
- uri: this.options.uri,
76
- path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}`,
77
- oa2: this.options.oa2,
78
- dataObj: this.queueConfig,
79
- attemptInfo: () =>
80
- this.LOG._info &&
81
- this.LOG.info(
82
- 'Create queue',
83
- this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
84
- ),
85
- errMsg: `Queue "${queueName}" could not be created ${this.subdomainInfo}`,
86
- target: { kind: 'QUEUE', queue: queueName },
87
- tokenStore: this
88
- })
84
+ async createQueue(queueName = this.queueName) {
85
+ this.LOG._info &&
86
+ this.LOG.info(
87
+ 'Create queue',
88
+ this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
89
+ )
90
+ try {
91
+ const res = await authorizedRequest({
92
+ method: 'PUT',
93
+ uri: this.options.uri,
94
+ path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}`,
95
+ oa2: this.options.oa2,
96
+ dataObj: this.queueConfig,
97
+ tokenStore: this
98
+ })
99
+ if (res.statusCode === 201) return true
100
+ } catch (e) {
101
+ const error = new Error(`Queue "${queueName}" could not be created ${this.subdomainInfo}`)
102
+ error.code = 'CREATE_QUEUE_FAILED'
103
+ error.target = { kind: 'QUEUE', queue: queueName }
104
+ error.reason = e
105
+ this.LOG.error(error)
106
+ throw error
107
+ }
89
108
  }
90
109
 
91
- deleteQueue(queueName = this.queueName) {
92
- return authorizedRequest({
93
- method: 'DELETE',
94
- uri: this.options.uri,
95
- path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}`,
96
- oa2: this.options.oa2,
97
- attemptInfo: () =>
98
- this.LOG._info &&
99
- this.LOG.info(
100
- 'Delete queue',
101
- this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
102
- ),
103
- errMsg: `Queue "${queueName}" could not be deleted ${this.subdomainInfo}`,
104
- target: { kind: 'QUEUE', queue: queueName },
105
- tokenStore: this
106
- })
110
+ async deleteQueue(queueName = this.queueName) {
111
+ this.LOG._info &&
112
+ this.LOG.info(
113
+ 'Delete queue',
114
+ this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
115
+ )
116
+ try {
117
+ await authorizedRequest({
118
+ method: 'DELETE',
119
+ uri: this.options.uri,
120
+ path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}`,
121
+ oa2: this.options.oa2,
122
+ tokenStore: this
123
+ })
124
+ } catch (e) {
125
+ const error = new Error(`Queue "${queueName}" could not be deleted ${this.subdomainInfo}`)
126
+ error.code = 'DELETE_QUEUE_FAILED'
127
+ error.target = { kind: 'QUEUE', queue: queueName }
128
+ error.reason = e
129
+ this.LOG.error(error)
130
+ throw error
131
+ }
107
132
  }
108
133
 
109
134
  async getSubscriptions(queueName = this.queueName) {
110
- const res = await authorizedRequest({
111
- method: 'GET',
112
- uri: this.options.uri,
113
- path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}/subscriptions`,
114
- oa2: this.options.oa2,
115
- attemptInfo: () =>
116
- this.LOG._info &&
117
- this.LOG.info(
118
- 'Get subscriptions',
119
- this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
120
- ),
121
- errMsg: `Subscriptions for "${queueName}" could not be retrieved ${this.subdomainInfo}`,
122
- target: { kind: 'SUBSCRIPTION', queue: queueName },
123
- tokenStore: this
124
- })
125
- return res.body
135
+ this.LOG._info &&
136
+ this.LOG.info(
137
+ 'Get subscriptions',
138
+ this.subdomain ? { queue: queueName, subdomain: this.subdomain } : { queue: queueName }
139
+ )
140
+ try {
141
+ const res = await authorizedRequest({
142
+ method: 'GET',
143
+ uri: this.options.uri,
144
+ path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(queueName)}/subscriptions`,
145
+ oa2: this.options.oa2,
146
+ target: { kind: 'SUBSCRIPTION', queue: queueName },
147
+ tokenStore: this
148
+ })
149
+ return res.body
150
+ } catch (e) {
151
+ const error = new Error(`Subscriptions for "${queueName}" could not be retrieved ${this.subdomainInfo}`)
152
+ error.code = 'GET_SUBSCRIPTIONS_FAILED'
153
+ error.target = { kind: 'SUBSCRIPTION', queue: queueName }
154
+ error.reason = e
155
+ this.LOG.error(error)
156
+ throw error
157
+ }
126
158
  }
127
159
 
128
- createSubscription(topicPattern, queueName = this.queueName) {
129
- return authorizedRequest({
130
- method: 'PUT',
131
- uri: this.options.uri,
132
- path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(
133
- queueName
134
- )}/subscriptions/${encodeURIComponent(topicPattern)}`,
135
- oa2: this.options.oa2,
136
- attemptInfo: () =>
137
- this.LOG._info &&
138
- this.LOG.info(
139
- 'Create subscription',
140
- this.subdomain
141
- ? { topic: topicPattern, queue: queueName, subdomain: this.subdomain }
142
- : { topic: topicPattern, queue: queueName }
143
- ),
144
- errMsg: `Subscription "${topicPattern}" could not be added to queue "${queueName}" ${this.subdomainInfo}`,
145
- target: { kind: 'SUBSCRIPTION', queue: queueName, topic: topicPattern },
146
- tokenStore: this
147
- })
160
+ async createSubscription(topicPattern, queueName = this.queueName) {
161
+ this.LOG._info &&
162
+ this.LOG.info(
163
+ 'Create subscription',
164
+ this.subdomain
165
+ ? { topic: topicPattern, queue: queueName, subdomain: this.subdomain }
166
+ : { topic: topicPattern, queue: queueName }
167
+ )
168
+ try {
169
+ const res = await authorizedRequest({
170
+ method: 'PUT',
171
+ uri: this.options.uri,
172
+ path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(
173
+ queueName
174
+ )}/subscriptions/${encodeURIComponent(topicPattern)}`,
175
+ oa2: this.options.oa2,
176
+ tokenStore: this
177
+ })
178
+ if (res.statusCode === 201) return true
179
+ } catch (e) {
180
+ const error = new Error(
181
+ `Subscription "${topicPattern}" could not be added to queue "${queueName}" ${this.subdomainInfo}`
182
+ )
183
+ error.code = 'CREATE_SUBSCRIPTION_FAILED'
184
+ error.target = { kind: 'SUBSCRIPTION', queue: queueName, topic: topicPattern }
185
+ error.reason = e
186
+ this.LOG.error(error)
187
+ throw error
188
+ }
148
189
  }
149
190
 
150
- deleteSubscription(topicPattern, queueName = this.queueName) {
151
- return authorizedRequest({
152
- method: 'DELETE',
153
- uri: this.options.uri,
154
- path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(
155
- queueName
156
- )}/subscriptions/${encodeURIComponent(topicPattern)}`,
157
- oa2: this.options.oa2,
158
- attemptInfo: () =>
159
- this.LOG._info &&
160
- this.LOG.info(
161
- 'Delete subscription',
162
- this.subdomain
163
- ? { topic: topicPattern, queue: queueName, subdomain: this.subdomain }
164
- : { topic: topicPattern, queue: queueName }
165
- ),
166
- errMsg: `Subscription "${topicPattern}" could not be deleted from queue "${queueName}" ${this.subdomainInfo}`,
167
- target: { kind: 'SUBSCRIPTION', queue: queueName, topic: topicPattern },
168
- tokenStore: this
169
- })
191
+ async deleteSubscription(topicPattern, queueName = this.queueName) {
192
+ this.LOG._info &&
193
+ this.LOG.info(
194
+ 'Delete subscription',
195
+ this.subdomain
196
+ ? { topic: topicPattern, queue: queueName, subdomain: this.subdomain }
197
+ : { topic: topicPattern, queue: queueName }
198
+ )
199
+ try {
200
+ await authorizedRequest({
201
+ method: 'DELETE',
202
+ uri: this.options.uri,
203
+ path: `/hub/rest/api/v1/management/messaging/queues/${encodeURIComponent(
204
+ queueName
205
+ )}/subscriptions/${encodeURIComponent(topicPattern)}`,
206
+ oa2: this.options.oa2,
207
+ tokenStore: this
208
+ })
209
+ } catch (e) {
210
+ const error = new Error(
211
+ `Subscription "${topicPattern}" could not be deleted from queue "${queueName}" ${this.subdomainInfo}`
212
+ )
213
+ error.code = 'DELETE_SUBSCRIPTION_FAILED'
214
+ error.target = { kind: 'SUBSCRIPTION', queue: queueName, topic: topicPattern }
215
+ error.reason = e
216
+ this.LOG.error(error)
217
+ throw error
218
+ }
170
219
  }
171
220
 
172
221
  async getWebhook(queueName = this.queueName) {
173
222
  const webhookName = _getWebhookName(queueName)
174
- const res = await authorizedRequest({
175
- method: 'GET',
176
- uri: this.optionsMessagingREST.uri,
177
- path: `/messagingrest/v1/subscriptions/${encodeURIComponent(webhookName)}`,
178
- oa2: this.optionsMessagingREST.oa2,
179
- attemptInfo: () =>
180
- this.LOG._info &&
181
- this.LOG.info(
182
- 'Get webhook',
183
- this.subdomain
184
- ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
185
- : { webhook: webhookName, queue: queueName }
186
- ),
187
- errMsg: `Webhook "${webhookName}" could not be retrieved ${this.subdomainInfo}`,
188
- target: { kind: 'WEBHOOK', queue: queueName, webhook: webhookName },
189
- tokenStore: this
190
- })
191
- return res.body
223
+ this.LOG._info &&
224
+ this.LOG.info(
225
+ 'Get webhook',
226
+ this.subdomain
227
+ ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
228
+ : { webhook: webhookName, queue: queueName }
229
+ )
230
+ try {
231
+ const res = await authorizedRequest({
232
+ method: 'GET',
233
+ uri: this.optionsMessagingREST.uri,
234
+ path: `/messagingrest/v1/subscriptions/${encodeURIComponent(webhookName)}`,
235
+ oa2: this.optionsMessagingREST.oa2,
236
+ tokenStore: this
237
+ })
238
+ return res.body
239
+ } catch (e) {
240
+ const error = new Error(`Webhook "${webhookName}" could not be retrieved ${this.subdomainInfo}`)
241
+ error.code = 'GET_WEBHOOK_FAILED'
242
+ error.target = { kind: 'WEBHOOK', queue: queueName, webhook: webhookName }
243
+ error.reason = e
244
+ this.LOG.error(error)
245
+ throw error
246
+ }
192
247
  }
193
248
 
194
249
  async createWebhook(queueName = this.queueName) {
195
250
  const webhookName = _getWebhookName(queueName)
196
- await authorizedRequest({
197
- method: 'DELETE',
198
- uri: this.optionsMessagingREST.uri,
199
- path: `/messagingrest/v1/subscriptions/${encodeURIComponent(webhookName)}`,
200
- oa2: this.optionsMessagingREST.oa2,
201
- attemptInfo: () =>
202
- this.LOG._info &&
203
- this.LOG.info(
204
- 'Delete webhook',
205
- this.subdomain
206
- ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
207
- : { webhook: webhookName, queue: queueName }
208
- ),
209
- errMsg: `Webhook "${webhookName}" could not be deleted ${this.subdomainInfo}`,
210
- target: { kind: 'WEBHOOK', queue: queueName, webhook: webhookName },
211
- tokenStore: this
212
- })
251
+ this.LOG._info &&
252
+ this.LOG.info(
253
+ 'Delete webhook',
254
+ this.subdomain
255
+ ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
256
+ : { webhook: webhookName, queue: queueName }
257
+ )
258
+ try {
259
+ await authorizedRequest({
260
+ method: 'DELETE',
261
+ uri: this.optionsMessagingREST.uri,
262
+ path: `/messagingrest/v1/subscriptions/${encodeURIComponent(webhookName)}`,
263
+ oa2: this.optionsMessagingREST.oa2,
264
+ tokenStore: this
265
+ })
266
+ } catch (e) {
267
+ const error = new Error(`Webhook "${webhookName}" could not be deleted ${this.subdomainInfo}`)
268
+ error.code = 'DELETE_WEBHOOK_FAILED'
269
+ error.target = { kind: 'WEBHOOK', queue: queueName, webhook: webhookName }
270
+ error.reason = e
271
+ this.LOG.error(error)
272
+ throw error
273
+ }
213
274
  const pushConfig = {
214
275
  type: 'webhook',
215
276
  endpoint: this.optionsApp.appURL + this.path,
@@ -226,12 +287,24 @@ class EMManagement {
226
287
  // "description": "EM Callback Access",
227
288
  // "grant-as-authority-to-apps": ["$XSSERVICENAME(messaging-name)"]
228
289
  // }]
229
- pushConfig.securitySchema = {
230
- type: 'oauth2',
231
- grantType: 'client_credentials',
232
- clientId: this.optionsMessagingREST.oa2.client,
233
- clientSecret: this.optionsMessagingREST.oa2.secret,
234
- tokenUrl: this.optionsMessagingREST.oa2.endpoint
290
+
291
+ if (this.optionsMessagingREST.oa2.mTLS) {
292
+ pushConfig.securitySchema = {
293
+ type: 'oauth2-x509',
294
+ grantType: 'client_credentials',
295
+ clientId: this.optionsMessagingREST.oa2.client,
296
+ certificate: this.optionsMessagingREST.oa2.mTLS.cert,
297
+ key: this.optionsMessagingREST.oa2.mTLS.key,
298
+ tokenUrl: this.optionsMessagingREST.oa2.endpoint
299
+ }
300
+ } else {
301
+ pushConfig.securitySchema = {
302
+ type: 'oauth2',
303
+ grantType: 'client_credentials',
304
+ clientId: this.optionsMessagingREST.oa2.client,
305
+ clientSecret: this.optionsMessagingREST.oa2.secret,
306
+ tokenUrl: this.optionsMessagingREST.oa2.endpoint
307
+ }
235
308
  }
236
309
 
237
310
  const dataObj = {
@@ -242,52 +315,65 @@ class EMManagement {
242
315
  pushConfig: { ...pushConfig, ...((this.optionsWebhook && this.optionsWebhook.pushConfig) || {}) }
243
316
  }
244
317
 
245
- return authorizedRequest({
246
- method: 'POST',
247
- uri: this.optionsMessagingREST.uri,
248
- path: '/messagingrest/v1/subscriptions',
249
- oa2: this.optionsMessagingREST.oa2,
250
- dataObj,
251
- attemptInfo: () =>
252
- this.LOG._info &&
253
- this.LOG.info(
254
- 'Create webhook',
255
- this.subdomain
256
- ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
257
- : { webhook: webhookName, queue: queueName }
258
- ),
259
- errMsg: `Webhook "${webhookName}" could not be created ${this.subdomainInfo}`,
260
- target: { kind: 'WEBHOOK', queue: queueName, webhook: webhookName },
261
- tokenStore: this
262
- })
318
+ this.LOG._info &&
319
+ this.LOG.info(
320
+ 'Create webhook',
321
+ this.subdomain
322
+ ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
323
+ : { webhook: webhookName, queue: queueName }
324
+ )
325
+ try {
326
+ const res = await authorizedRequest({
327
+ method: 'POST',
328
+ uri: this.optionsMessagingREST.uri,
329
+ path: '/messagingrest/v1/subscriptions',
330
+ oa2: this.optionsMessagingREST.oa2,
331
+ dataObj,
332
+ tokenStore: this
333
+ })
334
+ if (res.statusCode === 201) return true
335
+ } catch (e) {
336
+ const error = new Error(`Webhook "${webhookName}" could not be created ${this.subdomainInfo}`)
337
+ error.code = 'CREATE_WEBHOOK_FAILED'
338
+ error.target = { kind: 'WEBHOOK', queue: queueName, webhook: webhookName }
339
+ error.reason = e
340
+ this.LOG.error(error)
341
+ throw error
342
+ }
263
343
  }
264
344
 
265
- deleteWebhook(queueName = this.queueName) {
345
+ async deleteWebhook(queueName = this.queueName) {
266
346
  const webhookName = _getWebhookName(queueName)
267
- return authorizedRequest({
268
- method: 'DELETE',
269
- uri: this.optionsMessagingREST.uri,
270
- path: `/messagingrest/v1/subscriptions/${encodeURIComponent(webhookName)}`,
271
- oa2: this.optionsMessagingREST.oa2,
272
- attemptInfo: () =>
273
- this.LOG._info &&
274
- this.LOG.info(
275
- 'Delete webhook',
276
- this.subdomain
277
- ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
278
- : { webhook: webhookName, queue: queueName }
279
- ),
280
- errMsg: `Webhook "${webhookName}" could not be deleted ${this.subdomainInfo}`,
281
- target: { kind: 'WEBHOOK', queue: queueName, webhook: webhookName },
282
- tokenStore: this
283
- })
347
+ this.LOG._info &&
348
+ this.LOG.info(
349
+ 'Delete webhook',
350
+ this.subdomain
351
+ ? { webhook: webhookName, queue: queueName, subdomain: this.subdomain }
352
+ : { webhook: webhookName, queue: queueName }
353
+ )
354
+ try {
355
+ await authorizedRequest({
356
+ method: 'DELETE',
357
+ uri: this.optionsMessagingREST.uri,
358
+ path: `/messagingrest/v1/subscriptions/${encodeURIComponent(webhookName)}`,
359
+ oa2: this.optionsMessagingREST.oa2,
360
+ tokenStore: this
361
+ })
362
+ } catch (e) {
363
+ const error = new Error(`Webhook "${webhookName}" could not be deleted ${this.subdomainInfo}`)
364
+ error.code = 'DELETE_WEBHOOK_FAILED'
365
+ error.target = { kind: 'WEBHOOK', queue: queueName, webhook: webhookName }
366
+ error.reason = e
367
+ this.LOG.error(error)
368
+ throw error
369
+ }
284
370
  }
285
371
 
286
372
  async createQueueAndSubscriptions() {
287
373
  this.LOG._info && this.LOG.info(`Create messaging artifacts ${this.subdomainInfo}`)
288
374
 
289
375
  const created = await this.createQueue()
290
- if (created && created.statusCode === 200) {
376
+ if (!created) {
291
377
  // We need to make sure to only keep our own subscriptions
292
378
  const resGet = await this.getSubscriptions()
293
379
  if (Array.isArray(resGet)) {
@@ -304,29 +390,12 @@ class EMManagement {
304
390
  this.LOG._info && this.LOG.info('Unchanged subscriptions', unchangedSubs, ' ', this.subdomainInfo)
305
391
  await Promise.all([
306
392
  ...obsoleteSubs.map(s => this.deleteSubscription(s)),
307
- ...additionalSubs.map(async s => this._createSubscription(s))
393
+ ...additionalSubs.map(async s => this.createSubscription(s))
308
394
  ])
309
395
  return
310
396
  }
311
397
  }
312
- await Promise.all([...this.subscribedTopics].map(kv => kv[0]).map(t => this._createSubscription(t)))
313
- }
314
-
315
- _throwIfNotBadRequest(e) {
316
- // If it's not a bad request, immediately throw,
317
- // otherwise throw a better error message.
318
- if (!e.response || !e.response.statusCode >= 500 || e.response.statusCode < 400) throw e
319
- }
320
-
321
- async _createSubscription(sub) {
322
- try {
323
- await this.createSubscription(sub)
324
- } catch (e) {
325
- this._throwIfNotBadRequest(e)
326
- throw new Error(
327
- `Topic subscription "${sub}" cannot be created. Hint: Please check the topic rules of your SAP Event Mesh instance.`
328
- )
329
- }
398
+ await Promise.all([...this.subscribedTopics].map(kv => kv[0]).map(t => this.createSubscription(t)))
330
399
  }
331
400
 
332
401
  async deploy() {
@@ -340,17 +409,24 @@ class EMManagement {
340
409
  if (this.optionsMessagingREST) await this.deleteWebhook()
341
410
  }
342
411
 
343
- readinessCheck() {
344
- return authorizedRequest({
345
- method: 'GET',
346
- uri: this.options.uri,
347
- path: `/hub/rest/api/v1/management/messaging/readinessCheck`,
348
- oa2: this.options.oa2,
349
- attemptInfo: () => this.LOG._info && this.LOG.info(`Readiness Check ${this.subdomainInfo}`),
350
- errMsg: `Readiness Check failed ${this.subdomainInfo}`,
351
- target: { kind: 'READINESSCHECK' },
352
- tokenStore: this
353
- })
412
+ async readinessCheck() {
413
+ this.LOG._info && this.LOG.info(`Readiness Check ${this.subdomainInfo}`)
414
+ try {
415
+ await authorizedRequest({
416
+ method: 'GET',
417
+ uri: this.options.uri,
418
+ path: `/hub/rest/api/v1/management/messaging/readinessCheck`,
419
+ oa2: this.options.oa2,
420
+ tokenStore: this
421
+ })
422
+ } catch (e) {
423
+ const error = new Error(`Readiness Check failed ${this.subdomainInfo}`)
424
+ error.code = 'READINESS_CHECK_FAILED'
425
+ error.target = { kind: 'READINESSCHECK' }
426
+ error.reason = e
427
+ this.LOG.error(error)
428
+ throw error
429
+ }
354
430
  }
355
431
 
356
432
  async waitUntilReady({ maxRetries = this.maxRetries, waitingPeriod } = {}) {
@@ -361,13 +437,10 @@ class EMManagement {
361
437
  await this.readinessCheck()
362
438
  } catch (e) {
363
439
  if (tries <= maxRetries) {
364
- if (e.response.statusCode !== 503) {
365
- const errMsg = 'Readiness Check cannot be performed: ' + JSON.stringify(e.response)
366
- const errObj = new Error(errMsg)
367
- errObj.target = e.target
368
- throw errObj
440
+ if (e.reason.statusCode !== 503) {
441
+ throw e
369
442
  }
370
- const retryAfter = e.response && e.response.headers && e.response.headers['retry-after']
443
+ const retryAfter = e.reason && e.reason.headers && e.reason.headers['retry-after']
371
444
  const _waitingPeriod = waitingPeriod || (retryAfter && Number(retryAfter) * 1000) || 120 * 1000
372
445
  this.LOG._info &&
373
446
  this.LOG.info(
@@ -381,6 +454,7 @@ class EMManagement {
381
454
  uri: this.options.uri
382
455
  })
383
456
  errObj.target = e.target
457
+ errObj.code = e.code
384
458
  throw errObj
385
459
  }
386
460
  }
@@ -19,8 +19,8 @@ const prepareHeaders = (headers, event, options, superPrepareHeaders) => {
19
19
 
20
20
  const defaultOptions = options => {
21
21
  if (options.format === 'cloudevents') {
22
- if (!options.subscribePrefix) options.subscribePrefix = '+/+/+/ce/'
23
- if (!options.publishPrefix) options.publishPrefix = '$namespace/ce/'
22
+ if (typeof options.subscribePrefix !== 'string') options.subscribePrefix = '+/+/+/ce/'
23
+ if (typeof options.publishPrefix !== 'string') options.publishPrefix = '$namespace/ce/'
24
24
  }
25
25
  }
26
26