@microsoft/teamsfx-core 2.0.8-rc-hotfix.0 → 2.0.8-rc-hotfix.2

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 (383) hide show
  1. package/build/common/constants.d.ts +5 -17
  2. package/build/common/constants.d.ts.map +1 -1
  3. package/build/common/constants.js +5 -18
  4. package/build/common/constants.js.map +1 -1
  5. package/build/common/deps-checker/constant/message.d.ts +1 -1
  6. package/build/common/deps-checker/constant/message.d.ts.map +1 -1
  7. package/build/common/deps-checker/constant/message.js +1 -1
  8. package/build/common/deps-checker/constant/message.js.map +1 -1
  9. package/build/common/deps-checker/util/fileHelper.js +1 -1
  10. package/build/common/deps-checker/util/fileHelper.js.map +1 -1
  11. package/build/common/featureFlags.d.ts +69 -6
  12. package/build/common/featureFlags.d.ts.map +1 -1
  13. package/build/common/featureFlags.js +65 -88
  14. package/build/common/featureFlags.js.map +1 -1
  15. package/build/common/m365/launchHelper.d.ts +1 -1
  16. package/build/common/m365/launchHelper.d.ts.map +1 -1
  17. package/build/common/m365/launchHelper.js +5 -6
  18. package/build/common/m365/launchHelper.js.map +1 -1
  19. package/build/common/m365/packageService.d.ts +1 -1
  20. package/build/common/m365/packageService.d.ts.map +1 -1
  21. package/build/common/m365/packageService.js +22 -40
  22. package/build/common/m365/packageService.js.map +1 -1
  23. package/build/common/projectTypeChecker.d.ts.map +1 -1
  24. package/build/common/projectTypeChecker.js +8 -0
  25. package/build/common/projectTypeChecker.js.map +1 -1
  26. package/build/common/samples.d.ts +1 -1
  27. package/build/common/samples.js +1 -1
  28. package/build/common/stringUtils.d.ts +10 -0
  29. package/build/common/stringUtils.d.ts.map +1 -0
  30. package/build/common/stringUtils.js +121 -0
  31. package/build/common/stringUtils.js.map +1 -0
  32. package/build/common/telemetry.d.ts +18 -1
  33. package/build/common/telemetry.d.ts.map +1 -1
  34. package/build/common/telemetry.js +41 -6
  35. package/build/common/telemetry.js.map +1 -1
  36. package/build/common/templates-config.json +1 -1
  37. package/build/common/wrappedAxiosClient.d.ts.map +1 -1
  38. package/build/common/wrappedAxiosClient.js +7 -5
  39. package/build/common/wrappedAxiosClient.js.map +1 -1
  40. package/build/component/configManager/actionInjector.d.ts +8 -0
  41. package/build/component/configManager/actionInjector.d.ts.map +1 -0
  42. package/build/component/configManager/actionInjector.js +102 -0
  43. package/build/component/configManager/actionInjector.js.map +1 -0
  44. package/build/component/configManager/constant.d.ts +2 -1
  45. package/build/component/configManager/constant.d.ts.map +1 -1
  46. package/build/component/configManager/constant.js +1 -0
  47. package/build/component/configManager/constant.js.map +1 -1
  48. package/build/component/configManager/validator.js +1 -1
  49. package/build/component/configManager/validator.js.map +1 -1
  50. package/build/component/constants.js +2 -2
  51. package/build/component/constants.js.map +1 -1
  52. package/build/component/coordinator/index.d.ts +0 -38
  53. package/build/component/coordinator/index.d.ts.map +1 -1
  54. package/build/component/coordinator/index.js +126 -178
  55. package/build/component/coordinator/index.js.map +1 -1
  56. package/build/component/driver/aad/create.d.ts +1 -0
  57. package/build/component/driver/aad/create.d.ts.map +1 -1
  58. package/build/component/driver/aad/create.js +22 -11
  59. package/build/component/driver/aad/create.js.map +1 -1
  60. package/build/component/driver/aad/error/aadManifestError.d.ts +6 -0
  61. package/build/component/driver/aad/error/aadManifestError.d.ts.map +1 -1
  62. package/build/component/driver/aad/error/aadManifestError.js +25 -1
  63. package/build/component/driver/aad/error/aadManifestError.js.map +1 -1
  64. package/build/component/driver/aad/error/clientSecretNotAllowedError.d.ts +5 -0
  65. package/build/component/driver/aad/error/clientSecretNotAllowedError.d.ts.map +1 -0
  66. package/build/component/driver/aad/error/clientSecretNotAllowedError.js +23 -0
  67. package/build/component/driver/aad/error/clientSecretNotAllowedError.js.map +1 -0
  68. package/build/component/driver/aad/error/credentialInvalidLifetimeError.d.ts +5 -0
  69. package/build/component/driver/aad/error/credentialInvalidLifetimeError.d.ts.map +1 -0
  70. package/build/component/driver/aad/error/credentialInvalidLifetimeError.js +23 -0
  71. package/build/component/driver/aad/error/credentialInvalidLifetimeError.js.map +1 -0
  72. package/build/component/driver/aad/interface/IAADDefinition.d.ts +1 -0
  73. package/build/component/driver/aad/interface/IAADDefinition.d.ts.map +1 -1
  74. package/build/component/driver/aad/interface/createAadAppArgs.d.ts +3 -0
  75. package/build/component/driver/aad/interface/createAadAppArgs.d.ts.map +1 -1
  76. package/build/component/driver/aad/permissions/index.d.ts.map +1 -1
  77. package/build/component/driver/aad/permissions/index.js +9 -0
  78. package/build/component/driver/aad/permissions/index.js.map +1 -1
  79. package/build/component/driver/aad/utility/aadAppClient.d.ts +3 -2
  80. package/build/component/driver/aad/utility/aadAppClient.d.ts.map +1 -1
  81. package/build/component/driver/aad/utility/aadAppClient.js +35 -17
  82. package/build/component/driver/aad/utility/aadAppClient.js.map +1 -1
  83. package/build/component/driver/aad/utility/aadManifestHelper.d.ts.map +1 -1
  84. package/build/component/driver/aad/utility/aadManifestHelper.js +9 -1
  85. package/build/component/driver/aad/utility/aadManifestHelper.js.map +1 -1
  86. package/build/component/driver/aad/utility/constants.d.ts +6 -0
  87. package/build/component/driver/aad/utility/constants.d.ts.map +1 -1
  88. package/build/component/driver/aad/utility/constants.js +8 -2
  89. package/build/component/driver/aad/utility/constants.js.map +1 -1
  90. package/build/component/driver/apiKey/create.d.ts +0 -3
  91. package/build/component/driver/apiKey/create.d.ts.map +1 -1
  92. package/build/component/driver/apiKey/create.js +23 -48
  93. package/build/component/driver/apiKey/create.js.map +1 -1
  94. package/build/component/driver/apiKey/interface/createApiKeyArgs.d.ts +2 -0
  95. package/build/component/driver/apiKey/interface/createApiKeyArgs.d.ts.map +1 -1
  96. package/build/component/driver/apiKey/interface/updateApiKeyArgs.d.ts +9 -0
  97. package/build/component/driver/apiKey/interface/updateApiKeyArgs.d.ts.map +1 -0
  98. package/build/component/driver/apiKey/interface/updateApiKeyArgs.js +5 -0
  99. package/build/component/driver/apiKey/interface/updateApiKeyArgs.js.map +1 -0
  100. package/build/component/driver/apiKey/update.d.ts +13 -0
  101. package/build/component/driver/apiKey/update.d.ts.map +1 -0
  102. package/build/component/driver/apiKey/update.js +182 -0
  103. package/build/component/driver/apiKey/update.js.map +1 -0
  104. package/build/component/driver/apiKey/utility/constants.d.ts +2 -0
  105. package/build/component/driver/apiKey/utility/constants.d.ts.map +1 -1
  106. package/build/component/driver/apiKey/utility/constants.js +2 -0
  107. package/build/component/driver/apiKey/utility/constants.js.map +1 -1
  108. package/build/component/driver/apiKey/utility/utility.d.ts +7 -0
  109. package/build/component/driver/apiKey/utility/utility.d.ts.map +1 -0
  110. package/build/component/driver/apiKey/utility/utility.js +55 -0
  111. package/build/component/driver/apiKey/utility/utility.js.map +1 -0
  112. package/build/component/driver/deploy/spfx/utility/spoClient.d.ts.map +1 -1
  113. package/build/component/driver/deploy/spfx/utility/spoClient.js +3 -1
  114. package/build/component/driver/deploy/spfx/utility/spoClient.js.map +1 -1
  115. package/build/component/driver/index.d.ts +3 -0
  116. package/build/component/driver/index.d.ts.map +1 -1
  117. package/build/component/driver/index.js +3 -0
  118. package/build/component/driver/index.js.map +1 -1
  119. package/build/component/driver/middleware/addSWADeployTelemetry.js +2 -2
  120. package/build/component/driver/middleware/addSWADeployTelemetry.js.map +1 -1
  121. package/build/component/driver/oauth/create.d.ts +12 -0
  122. package/build/component/driver/oauth/create.d.ts.map +1 -0
  123. package/build/component/driver/oauth/create.js +193 -0
  124. package/build/component/driver/oauth/create.js.map +1 -0
  125. package/build/component/driver/oauth/error/oauthAuthInfoInvalid.d.ts +5 -0
  126. package/build/component/driver/oauth/error/oauthAuthInfoInvalid.d.ts.map +1 -0
  127. package/build/component/driver/oauth/error/oauthAuthInfoInvalid.js +21 -0
  128. package/build/component/driver/oauth/error/oauthAuthInfoInvalid.js.map +1 -0
  129. package/build/component/driver/oauth/error/oauthDomainInvalid.d.ts +5 -0
  130. package/build/component/driver/oauth/error/oauthDomainInvalid.d.ts.map +1 -0
  131. package/build/component/driver/oauth/error/oauthDomainInvalid.js +22 -0
  132. package/build/component/driver/oauth/error/oauthDomainInvalid.js.map +1 -0
  133. package/build/component/driver/oauth/error/oauthFailedToGetDomain.d.ts +5 -0
  134. package/build/component/driver/oauth/error/oauthFailedToGetDomain.d.ts.map +1 -0
  135. package/build/component/driver/oauth/error/oauthFailedToGetDomain.js +21 -0
  136. package/build/component/driver/oauth/error/oauthFailedToGetDomain.js.map +1 -0
  137. package/build/component/driver/oauth/error/oauthNameTooLong.d.ts +5 -0
  138. package/build/component/driver/oauth/error/oauthNameTooLong.d.ts.map +1 -0
  139. package/build/component/driver/oauth/error/oauthNameTooLong.js +21 -0
  140. package/build/component/driver/oauth/error/oauthNameTooLong.js.map +1 -0
  141. package/build/component/driver/oauth/interface/createOauthArgs.d.ts +12 -0
  142. package/build/component/driver/oauth/interface/createOauthArgs.d.ts.map +1 -0
  143. package/build/component/driver/oauth/interface/createOauthArgs.js +5 -0
  144. package/build/component/driver/oauth/interface/createOauthArgs.js.map +1 -0
  145. package/build/component/driver/oauth/interface/createOauthOutputs.d.ts +7 -0
  146. package/build/component/driver/oauth/interface/createOauthOutputs.d.ts.map +1 -0
  147. package/build/component/driver/oauth/interface/createOauthOutputs.js +10 -0
  148. package/build/component/driver/oauth/interface/createOauthOutputs.js.map +1 -0
  149. package/build/component/driver/oauth/interface/updateOauthArgs.d.ts +9 -0
  150. package/build/component/driver/oauth/interface/updateOauthArgs.d.ts.map +1 -0
  151. package/build/component/driver/oauth/interface/updateOauthArgs.js +5 -0
  152. package/build/component/driver/oauth/interface/updateOauthArgs.js.map +1 -0
  153. package/build/component/driver/oauth/update.d.ts +13 -0
  154. package/build/component/driver/oauth/update.d.ts.map +1 -0
  155. package/build/component/driver/oauth/update.js +181 -0
  156. package/build/component/driver/oauth/update.js.map +1 -0
  157. package/build/component/driver/oauth/utility/constants.d.ts +13 -0
  158. package/build/component/driver/oauth/utility/constants.d.ts.map +1 -0
  159. package/build/component/driver/oauth/utility/constants.js +18 -0
  160. package/build/component/driver/oauth/utility/constants.js.map +1 -0
  161. package/build/component/driver/oauth/utility/utility.d.ts +12 -0
  162. package/build/component/driver/oauth/utility/utility.d.ts.map +1 -0
  163. package/build/component/driver/oauth/utility/utility.js +90 -0
  164. package/build/component/driver/oauth/utility/utility.js.map +1 -0
  165. package/build/component/driver/script/scriptDriver.d.ts.map +1 -1
  166. package/build/component/driver/script/scriptDriver.js +8 -8
  167. package/build/component/driver/script/scriptDriver.js.map +1 -1
  168. package/build/component/driver/teamsApp/clients/appStudioClient.d.ts +11 -3
  169. package/build/component/driver/teamsApp/clients/appStudioClient.d.ts.map +1 -1
  170. package/build/component/driver/teamsApp/clients/appStudioClient.js +54 -2
  171. package/build/component/driver/teamsApp/clients/appStudioClient.js.map +1 -1
  172. package/build/component/driver/teamsApp/constants.d.ts +4 -0
  173. package/build/component/driver/teamsApp/constants.d.ts.map +1 -1
  174. package/build/component/driver/teamsApp/constants.js +4 -0
  175. package/build/component/driver/teamsApp/constants.js.map +1 -1
  176. package/build/component/driver/teamsApp/createAppPackage.d.ts +19 -1
  177. package/build/component/driver/teamsApp/createAppPackage.d.ts.map +1 -1
  178. package/build/component/driver/teamsApp/createAppPackage.js +100 -26
  179. package/build/component/driver/teamsApp/createAppPackage.js.map +1 -1
  180. package/build/component/driver/teamsApp/interfaces/ApiSecretRegistration.d.ts +20 -0
  181. package/build/component/driver/teamsApp/interfaces/ApiSecretRegistration.d.ts.map +1 -1
  182. package/build/component/driver/teamsApp/interfaces/ApiSecretRegistration.js.map +1 -1
  183. package/build/component/driver/teamsApp/interfaces/OauthConfigurationId.d.ts +7 -0
  184. package/build/component/driver/teamsApp/interfaces/OauthConfigurationId.d.ts.map +1 -0
  185. package/build/component/driver/teamsApp/interfaces/OauthConfigurationId.js +5 -0
  186. package/build/component/driver/teamsApp/interfaces/OauthConfigurationId.js.map +1 -0
  187. package/build/component/driver/teamsApp/interfaces/OauthRegistration.d.ts +44 -0
  188. package/build/component/driver/teamsApp/interfaces/OauthRegistration.d.ts.map +1 -0
  189. package/build/component/driver/teamsApp/interfaces/OauthRegistration.js +21 -0
  190. package/build/component/driver/teamsApp/interfaces/OauthRegistration.js.map +1 -0
  191. package/build/component/driver/teamsApp/teamsappMgr.d.ts.map +1 -1
  192. package/build/component/driver/teamsApp/teamsappMgr.js +22 -8
  193. package/build/component/driver/teamsApp/teamsappMgr.js.map +1 -1
  194. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.d.ts +8 -0
  195. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.d.ts.map +1 -0
  196. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js +65 -0
  197. package/build/component/driver/teamsApp/utils/CopilotGptManifestUtils.js.map +1 -0
  198. package/build/component/driver/teamsApp/utils/ManifestUtils.d.ts.map +1 -1
  199. package/build/component/driver/teamsApp/utils/ManifestUtils.js +4 -16
  200. package/build/component/driver/teamsApp/utils/ManifestUtils.js.map +1 -1
  201. package/build/component/driver/teamsApp/utils/telemetry.d.ts +2 -0
  202. package/build/component/driver/teamsApp/utils/telemetry.d.ts.map +1 -1
  203. package/build/component/driver/teamsApp/utils/telemetry.js +2 -0
  204. package/build/component/driver/teamsApp/utils/telemetry.js.map +1 -1
  205. package/build/component/driver/teamsApp/utils/utils.d.ts +1 -0
  206. package/build/component/driver/teamsApp/utils/utils.d.ts.map +1 -1
  207. package/build/component/driver/teamsApp/utils/utils.js +5 -1
  208. package/build/component/driver/teamsApp/utils/utils.js.map +1 -1
  209. package/build/component/driver/teamsApp/validateTestCases.d.ts +18 -0
  210. package/build/component/driver/teamsApp/validateTestCases.d.ts.map +1 -1
  211. package/build/component/driver/teamsApp/validateTestCases.js +132 -50
  212. package/build/component/driver/teamsApp/validateTestCases.js.map +1 -1
  213. package/build/component/generator/copilotPlugin/generator.d.ts.map +1 -1
  214. package/build/component/generator/copilotPlugin/generator.js +20 -26
  215. package/build/component/generator/copilotPlugin/generator.js.map +1 -1
  216. package/build/component/generator/copilotPlugin/helper.d.ts +7 -2
  217. package/build/component/generator/copilotPlugin/helper.d.ts.map +1 -1
  218. package/build/component/generator/copilotPlugin/helper.js +159 -51
  219. package/build/component/generator/copilotPlugin/helper.js.map +1 -1
  220. package/build/component/generator/generator.d.ts +4 -2
  221. package/build/component/generator/generator.d.ts.map +1 -1
  222. package/build/component/generator/generator.js +11 -7
  223. package/build/component/generator/generator.js.map +1 -1
  224. package/build/component/generator/generatorProvider.d.ts +3 -0
  225. package/build/component/generator/generatorProvider.d.ts.map +1 -0
  226. package/build/component/generator/generatorProvider.js +18 -0
  227. package/build/component/generator/generatorProvider.js.map +1 -0
  228. package/build/component/generator/officeAddin/generator.d.ts +12 -0
  229. package/build/component/generator/officeAddin/generator.d.ts.map +1 -1
  230. package/build/component/generator/officeAddin/generator.js +63 -14
  231. package/build/component/generator/officeAddin/generator.js.map +1 -1
  232. package/build/component/generator/officeAddin/helperMethods.d.ts +0 -3
  233. package/build/component/generator/officeAddin/helperMethods.d.ts.map +1 -1
  234. package/build/component/generator/officeAddin/helperMethods.js +1 -67
  235. package/build/component/generator/officeAddin/helperMethods.js.map +1 -1
  236. package/build/component/generator/officeXMLAddin/generator.d.ts.map +1 -1
  237. package/build/component/generator/officeXMLAddin/generator.js +5 -2
  238. package/build/component/generator/officeXMLAddin/generator.js.map +1 -1
  239. package/build/component/generator/officeXMLAddin/projectConfig.d.ts.map +1 -1
  240. package/build/component/generator/officeXMLAddin/projectConfig.js +12 -0
  241. package/build/component/generator/officeXMLAddin/projectConfig.js.map +1 -1
  242. package/build/component/generator/spfx/spfxGenerator.d.ts +18 -5
  243. package/build/component/generator/spfx/spfxGenerator.d.ts.map +1 -1
  244. package/build/component/generator/spfx/spfxGenerator.js +123 -20
  245. package/build/component/generator/spfx/spfxGenerator.js.map +1 -1
  246. package/build/component/generator/templates/ssrTabGenerator.d.ts +12 -0
  247. package/build/component/generator/templates/ssrTabGenerator.d.ts.map +1 -0
  248. package/build/component/generator/templates/ssrTabGenerator.js +36 -0
  249. package/build/component/generator/templates/ssrTabGenerator.js.map +1 -0
  250. package/build/component/generator/templates/templateGenerator.d.ts +12 -0
  251. package/build/component/generator/templates/templateGenerator.d.ts.map +1 -0
  252. package/build/component/generator/templates/templateGenerator.js +99 -0
  253. package/build/component/generator/templates/templateGenerator.js.map +1 -0
  254. package/build/component/generator/templates/templateInfo.d.ts +10 -0
  255. package/build/component/generator/templates/templateInfo.d.ts.map +1 -0
  256. package/build/component/generator/templates/templateInfo.js +3 -0
  257. package/build/component/generator/templates/templateInfo.js.map +1 -0
  258. package/build/component/generator/templates/templateNames.d.ts +52 -0
  259. package/build/component/generator/templates/templateNames.d.ts.map +1 -0
  260. package/build/component/generator/templates/templateNames.js +304 -0
  261. package/build/component/generator/templates/templateNames.js.map +1 -0
  262. package/build/component/generator/templates/templateReplaceMap.d.ts +5 -0
  263. package/build/component/generator/templates/templateReplaceMap.d.ts.map +1 -0
  264. package/build/component/generator/templates/templateReplaceMap.js +39 -0
  265. package/build/component/generator/templates/templateReplaceMap.js.map +1 -0
  266. package/build/component/generator/utils.d.ts +1 -0
  267. package/build/component/generator/utils.d.ts.map +1 -1
  268. package/build/component/generator/utils.js +2 -1
  269. package/build/component/generator/utils.js.map +1 -1
  270. package/build/component/middleware/actionExecutionMW.d.ts.map +1 -1
  271. package/build/component/middleware/actionExecutionMW.js +5 -4
  272. package/build/component/middleware/actionExecutionMW.js.map +1 -1
  273. package/build/component/middleware/questionMW.d.ts.map +1 -1
  274. package/build/component/middleware/questionMW.js +9 -1
  275. package/build/component/middleware/questionMW.js.map +1 -1
  276. package/build/component/utils/envUtil.d.ts +0 -1
  277. package/build/component/utils/envUtil.d.ts.map +1 -1
  278. package/build/component/utils/envUtil.js +1 -13
  279. package/build/component/utils/envUtil.js.map +1 -1
  280. package/build/component/utils/metadataGraphPermssion.d.ts +8 -6
  281. package/build/component/utils/metadataGraphPermssion.d.ts.map +1 -1
  282. package/build/component/utils/metadataGraphPermssion.js +10 -2
  283. package/build/component/utils/metadataGraphPermssion.js.map +1 -1
  284. package/build/component/utils/metadataRscPermission.d.ts +17 -0
  285. package/build/component/utils/metadataRscPermission.d.ts.map +1 -0
  286. package/build/component/utils/metadataRscPermission.js +81 -0
  287. package/build/component/utils/metadataRscPermission.js.map +1 -0
  288. package/build/component/utils/metadataUtil.d.ts.map +1 -1
  289. package/build/component/utils/metadataUtil.js +2 -0
  290. package/build/component/utils/metadataUtil.js.map +1 -1
  291. package/build/component/utils.d.ts +2 -1
  292. package/build/component/utils.d.ts.map +1 -1
  293. package/build/component/utils.js +43 -1
  294. package/build/component/utils.js.map +1 -1
  295. package/build/core/FxCore.d.ts +10 -6
  296. package/build/core/FxCore.d.ts.map +1 -1
  297. package/build/core/FxCore.js +307 -82
  298. package/build/core/FxCore.js.map +1 -1
  299. package/build/error/common.d.ts +3 -0
  300. package/build/error/common.d.ts.map +1 -1
  301. package/build/error/common.js +13 -2
  302. package/build/error/common.js.map +1 -1
  303. package/build/error/index.d.ts +1 -0
  304. package/build/error/index.d.ts.map +1 -1
  305. package/build/error/index.js +1 -0
  306. package/build/error/index.js.map +1 -1
  307. package/build/error/script.d.ts +2 -2
  308. package/build/error/script.d.ts.map +1 -1
  309. package/build/error/script.js +6 -6
  310. package/build/error/script.js.map +1 -1
  311. package/build/index.d.ts +4 -0
  312. package/build/index.d.ts.map +1 -1
  313. package/build/index.js +7 -1
  314. package/build/index.js.map +1 -1
  315. package/build/question/constants.d.ts.map +1 -1
  316. package/build/question/constants.js +6 -1
  317. package/build/question/constants.js.map +1 -1
  318. package/build/question/create.d.ts +12 -2
  319. package/build/question/create.d.ts.map +1 -1
  320. package/build/question/create.js +211 -74
  321. package/build/question/create.js.map +1 -1
  322. package/build/question/generator.js +2 -0
  323. package/build/question/generator.js.map +1 -1
  324. package/build/question/index.d.ts +2 -0
  325. package/build/question/index.d.ts.map +1 -1
  326. package/build/question/index.js +6 -0
  327. package/build/question/index.js.map +1 -1
  328. package/build/question/inputs/AddPluginInputs.d.ts +18 -0
  329. package/build/question/inputs/AddPluginInputs.d.ts.map +1 -0
  330. package/build/question/inputs/AddPluginInputs.js +5 -0
  331. package/build/question/inputs/AddPluginInputs.js.map +1 -0
  332. package/build/question/inputs/CreateProjectInputs.d.ts +7 -3
  333. package/build/question/inputs/CreateProjectInputs.d.ts.map +1 -1
  334. package/build/question/inputs/PermissionGrantInputs.d.ts +1 -1
  335. package/build/question/inputs/PermissionListInputs.d.ts +1 -1
  336. package/build/question/inputs/PreviewTeamsAppInputs.d.ts +1 -1
  337. package/build/question/inputs/SPFxAddWebpartInputs.d.ts +1 -1
  338. package/build/question/inputs/SelectTeamsManifestInputs.d.ts +1 -1
  339. package/build/question/inputs/ValidateTeamsAppInputs.d.ts +2 -2
  340. package/build/question/inputs/index.d.ts +1 -0
  341. package/build/question/inputs/index.d.ts.map +1 -1
  342. package/build/question/inputs/index.js +1 -0
  343. package/build/question/inputs/index.js.map +1 -1
  344. package/build/question/options/AddPluginOptions.d.ts +10 -0
  345. package/build/question/options/AddPluginOptions.d.ts.map +1 -0
  346. package/build/question/options/AddPluginOptions.js +39 -0
  347. package/build/question/options/AddPluginOptions.js.map +1 -0
  348. package/build/question/options/CreateProjectOptions.d.ts.map +1 -1
  349. package/build/question/options/CreateProjectOptions.js +23 -3
  350. package/build/question/options/CreateProjectOptions.js.map +1 -1
  351. package/build/question/options/PermissionGrantOptions.js +1 -1
  352. package/build/question/options/PermissionGrantOptions.js.map +1 -1
  353. package/build/question/options/PermissionListOptions.js +1 -1
  354. package/build/question/options/PermissionListOptions.js.map +1 -1
  355. package/build/question/options/PreviewTeamsAppOptions.js +1 -1
  356. package/build/question/options/PreviewTeamsAppOptions.js.map +1 -1
  357. package/build/question/options/SPFxAddWebpartOptions.js +1 -1
  358. package/build/question/options/SPFxAddWebpartOptions.js.map +1 -1
  359. package/build/question/options/SelectTeamsManifestOptions.js +1 -1
  360. package/build/question/options/SelectTeamsManifestOptions.js.map +1 -1
  361. package/build/question/options/ValidateTeamsAppOptions.js +1 -1
  362. package/build/question/options/ValidateTeamsAppOptions.js.map +1 -1
  363. package/build/question/options/index.d.ts +1 -0
  364. package/build/question/options/index.d.ts.map +1 -1
  365. package/build/question/options/index.js +1 -0
  366. package/build/question/options/index.js.map +1 -1
  367. package/build/question/other.d.ts +9 -0
  368. package/build/question/other.d.ts.map +1 -1
  369. package/build/question/other.js +168 -8
  370. package/build/question/other.js.map +1 -1
  371. package/build/question/questionNames.d.ts +6 -1
  372. package/build/question/questionNames.d.ts.map +1 -1
  373. package/build/question/questionNames.js +5 -0
  374. package/build/question/questionNames.js.map +1 -1
  375. package/package.json +15 -11
  376. package/resource/package.nls.json +146 -71
  377. package/resource/yaml-schema/v1.5/yaml.schema.json +1784 -0
  378. package/resource/yaml-schema/yaml.schema.json +198 -2
  379. package/templates/fallback/common.zip +0 -0
  380. package/templates/fallback/csharp.zip +0 -0
  381. package/templates/fallback/js.zip +0 -0
  382. package/templates/fallback/python.zip +0 -0
  383. package/templates/fallback/ts.zip +0 -0
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
5
5
  exports.FxCore = void 0;
6
6
  const tslib_1 = require("tslib");
7
7
  const hooks_1 = require("@feathersjs/hooks");
8
+ const m365_spec_parser_1 = require("@microsoft/m365-spec-parser");
8
9
  const teamsfx_api_1 = require("@microsoft/teamsfx-api");
9
10
  const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
11
+ const jsonschema = tslib_1.__importStar(require("jsonschema"));
10
12
  const os = tslib_1.__importStar(require("os"));
11
13
  const path = tslib_1.__importStar(require("path"));
12
14
  require("reflect-metadata");
@@ -14,12 +16,10 @@ const typedi_1 = require("typedi");
14
16
  const url_1 = require("url");
15
17
  const yaml_1 = require("yaml");
16
18
  const constants_1 = require("../common/constants");
17
- const featureFlags_1 = require("../common/featureFlags");
18
19
  const localizeUtils_1 = require("../common/localizeUtils");
19
20
  const launchHelper_1 = require("../common/m365/launchHelper");
20
21
  const projectSettingsHelper_1 = require("../common/projectSettingsHelper");
21
22
  const projectTypeChecker_1 = require("../common/projectTypeChecker");
22
- const m365_spec_parser_1 = require("@microsoft/m365-spec-parser");
23
23
  const telemetry_1 = require("../common/telemetry");
24
24
  const versionMetadata_1 = require("../common/versionMetadata");
25
25
  const parser_1 = require("../component/configManager/parser");
@@ -31,7 +31,9 @@ require("../component/driver/script/scriptDriver");
31
31
  const appStudio_1 = require("../component/driver/teamsApp/appStudio");
32
32
  const teamsappMgr_1 = require("../component/driver/teamsApp/teamsappMgr");
33
33
  const ManifestUtils_1 = require("../component/driver/teamsApp/utils/ManifestUtils");
34
+ const PluginManifestUtils_1 = require("../component/driver/teamsApp/utils/PluginManifestUtils");
34
35
  const utils_1 = require("../component/driver/teamsApp/utils/utils");
36
+ require("../component/feature/sso");
35
37
  const helper_1 = require("../component/generator/copilotPlugin/helper");
36
38
  const envMW_1 = require("../component/middleware/envMW");
37
39
  const questionMW_1 = require("../component/middleware/questionMW");
@@ -44,10 +46,11 @@ const settingsUtil_1 = require("../component/utils/settingsUtil");
44
46
  const common_2 = require("../error/common");
45
47
  const upgrade_1 = require("../error/upgrade");
46
48
  const yml_1 = require("../error/yml");
49
+ const question_1 = require("../question");
50
+ const constants_3 = require("../question/constants");
47
51
  const create_1 = require("../question/create");
48
52
  const other_1 = require("../question/other");
49
53
  const questionNames_1 = require("../question/questionNames");
50
- const constants_3 = require("../question/constants");
51
54
  const callback_1 = require("./callback");
52
55
  const collaborator_1 = require("./collaborator");
53
56
  const crypto_1 = require("./crypto");
@@ -60,7 +63,10 @@ const errorHandler_1 = require("./middleware/errorHandler");
60
63
  const projectMigratorV3_1 = require("./middleware/projectMigratorV3");
61
64
  const v3MigrationUtils_1 = require("./middleware/utils/v3MigrationUtils");
62
65
  const telemetry_2 = require("./telemetry");
63
- require("../component/feature/sso");
66
+ const results_1 = require("../component/driver/teamsApp/results");
67
+ const errors_1 = require("../component/driver/teamsApp/errors");
68
+ const CopilotGptManifestUtils_1 = require("../component/driver/teamsApp/utils/CopilotGptManifestUtils");
69
+ const actionInjector_1 = require("../component/configManager/actionInjector");
64
70
  class FxCore {
65
71
  constructor(tools) {
66
72
  globalVars_1.setTools(tools);
@@ -74,6 +80,9 @@ class FxCore {
74
80
  }
75
81
  async createProject(inputs) {
76
82
  const context = utils_2.createContextV3();
83
+ if (inputs[questionNames_1.QuestionNames.ProjectType] === question_1.ProjectTypeOptions.startWithGithubCopilot().id) {
84
+ return teamsfx_api_1.ok({ projectPath: "", shouldInvokeTeamsAgent: true });
85
+ }
77
86
  inputs[questionNames_1.QuestionNames.Scratch] = create_1.ScratchOptions.yes().id;
78
87
  if (inputs.teamsAppFromTdp) {
79
88
  // should never happen as we do same check on Developer Portal.
@@ -91,6 +100,39 @@ class FxCore {
91
100
  inputs.projectPath = context.projectPath;
92
101
  return res;
93
102
  }
103
+ async createProjectByCustomizedGenerator(inputs, generator) {
104
+ //1. input validation
105
+ let folder = inputs["folder"];
106
+ if (!folder) {
107
+ return teamsfx_api_1.err(new common_2.MissingRequiredInputError("folder"));
108
+ }
109
+ folder = path.resolve(folder);
110
+ const appName = inputs["app-name"];
111
+ if (undefined === appName)
112
+ return teamsfx_api_1.err(new common_2.MissingRequiredInputError(questionNames_1.QuestionNames.AppName));
113
+ const validateResult = jsonschema.validate(appName, {
114
+ pattern: question_1.AppNamePattern,
115
+ });
116
+ if (validateResult.errors && validateResult.errors.length > 0) {
117
+ return teamsfx_api_1.err(new common_2.InputValidationError(questionNames_1.QuestionNames.AppName, validateResult.errors[0].message));
118
+ }
119
+ const projectPath = path.join(folder, appName);
120
+ //2. run generator
121
+ const context = utils_2.createContextV3();
122
+ const genRes = await generator.run(context, inputs, projectPath);
123
+ if (genRes.isErr())
124
+ return teamsfx_api_1.err(genRes.error);
125
+ //3. ensure unique projectId in teamsapp.yaml (optional)
126
+ const ymlPath = path.join(projectPath, versionMetadata_1.MetadataV3.configFile);
127
+ const result = { projectPath: projectPath };
128
+ if (await fs_extra_1.default.pathExists(ymlPath)) {
129
+ const ensureRes = await coordinator_1.coordinator.ensureTrackingId(projectPath, inputs.projectId);
130
+ if (ensureRes.isErr())
131
+ return teamsfx_api_1.err(ensureRes.error);
132
+ result.projectId = ensureRes.value;
133
+ }
134
+ return teamsfx_api_1.ok(result);
135
+ }
94
136
  /**
95
137
  * lifecycle command: create new sample project
96
138
  */
@@ -414,7 +456,7 @@ class FxCore {
414
456
  const teamsAppId = manifestRes.value.id;
415
457
  const properties = teamsfx_api_1.ManifestUtil.parseCommonProperties(manifestRes.value);
416
458
  const launchHelper = new launchHelper_1.LaunchHelper(globalVars_1.TOOLS.tokenProvider.m365TokenProvider, globalVars_1.TOOLS.logProvider);
417
- const result = await launchHelper.getLaunchUrl(hub, teamsAppId, properties.capabilities, true, properties.isApiME);
459
+ const result = await launchHelper.getLaunchUrl(hub, teamsAppId, properties.capabilities, true);
418
460
  return result;
419
461
  }
420
462
  /**
@@ -791,74 +833,42 @@ class FxCore {
791
833
  const context = utils_2.createContextV3();
792
834
  return await coordinator_1.coordinator.publishInDeveloperPortal(context, inputs);
793
835
  }
794
- async injectCreateAPIKeyAction(ymlPath, authName, specRelativePath) {
795
- var _a;
796
- const ymlContent = await fs_extra_1.default.readFile(ymlPath, "utf-8");
797
- const document = yaml_1.parseDocument(ymlContent);
798
- const provisionNode = document.get("provision");
799
- if (provisionNode) {
800
- const hasApiKeyAction = provisionNode.items.some((item) => { var _a; return item.get("uses") === "apiKey/register" && ((_a = item.get("with")) === null || _a === void 0 ? void 0 : _a.get("name")) === authName; });
801
- if (!hasApiKeyAction) {
802
- provisionNode.items = provisionNode.items.filter((item) => item.get("uses") !== "apiKey/register");
803
- let added = false;
804
- for (let i = 0; i < provisionNode.items.length; i++) {
805
- const item = provisionNode.items[i];
806
- if (item.get("uses") === "teamsApp/create") {
807
- const teamsAppId = (_a = item.get("writeToEnvironmentFile")) === null || _a === void 0 ? void 0 : _a.get("teamsAppId");
808
- if (teamsAppId) {
809
- provisionNode.items.splice(i + 1, 0, {
810
- uses: "apiKey/register",
811
- with: {
812
- name: `${authName}`,
813
- appId: `\${{${teamsAppId}}}`,
814
- apiSpecPath: specRelativePath,
815
- },
816
- writeToEnvironmentFile: {
817
- registrationId: `${authName.toUpperCase()}_REGISTRATION_ID`,
818
- },
819
- });
820
- added = true;
821
- break;
822
- }
823
- }
824
- }
825
- if (!added) {
826
- throw new common_2.InjectAPIKeyActionFailedError();
827
- }
828
- await fs_extra_1.default.writeFile(ymlPath, document.toString(), "utf8");
829
- }
830
- }
831
- else {
832
- throw new common_2.InjectAPIKeyActionFailedError();
833
- }
834
- }
835
836
  async copilotPluginAddAPI(inputs) {
836
837
  var _a, _b;
837
838
  const newOperations = inputs[questionNames_1.QuestionNames.ApiOperation];
838
839
  const url = (_a = inputs[questionNames_1.QuestionNames.ApiSpecLocation]) !== null && _a !== void 0 ? _a : (_b = inputs.openAIPluginManifest) === null || _b === void 0 ? void 0 : _b.api.url;
839
840
  const manifestPath = inputs[questionNames_1.QuestionNames.ManifestPath];
840
841
  const isPlugin = inputs[questionNames_1.QuestionNames.Capabilities] === constants_3.copilotPluginApiSpecOptionId;
842
+ const context = utils_2.createContextV3();
841
843
  // Get API spec file path from manifest
842
844
  const manifestRes = await ManifestUtils_1.manifestUtils._readAppManifest(manifestPath);
843
845
  if (manifestRes.isErr()) {
844
846
  return teamsfx_api_1.err(manifestRes.error);
845
847
  }
848
+ const confirmRes = await context.userInteraction.showMessage("warn", localizeUtils_1.getLocalizedString("core.addApi.confirm", teamsfx_api_1.AppPackageFolderName), true, localizeUtils_1.getLocalizedString("core.addApi.continue"));
849
+ if (confirmRes.isErr()) {
850
+ return teamsfx_api_1.err(confirmRes.error);
851
+ }
852
+ else if (confirmRes.value !== localizeUtils_1.getLocalizedString("core.addApi.continue")) {
853
+ return teamsfx_api_1.err(new common_2.UserCancelError());
854
+ }
846
855
  // Merge existing operations in manifest.json
847
856
  const specParser = new m365_spec_parser_1.SpecParser(url, isPlugin
848
857
  ? helper_1.copilotPluginParserOptions
849
858
  : {
850
- allowAPIKeyAuth: featureFlags_1.isApiKeyEnabled(),
851
- allowMultipleParameters: featureFlags_1.isMultipleParametersEnabled(),
859
+ allowBearerTokenAuth: true,
860
+ allowMultipleParameters: true,
852
861
  });
853
- const apiResultList = await specParser.list();
862
+ const listResult = await specParser.list();
863
+ const apiResultList = listResult.APIs.filter((value) => value.isValid);
854
864
  let existingOperations;
855
- let outputAPISpecPath;
865
+ let outputApiSpecPath;
856
866
  if (isPlugin) {
857
- existingOperations = await helper_1.listPluginExistingOperations(manifestRes.value, manifestPath, inputs[questionNames_1.QuestionNames.DestinationApiSpecFilePath]);
858
867
  if (!inputs[questionNames_1.QuestionNames.DestinationApiSpecFilePath]) {
859
868
  return teamsfx_api_1.err(new common_2.MissingRequiredInputError(questionNames_1.QuestionNames.DestinationApiSpecFilePath));
860
869
  }
861
- outputAPISpecPath = inputs[questionNames_1.QuestionNames.DestinationApiSpecFilePath];
870
+ outputApiSpecPath = inputs[questionNames_1.QuestionNames.DestinationApiSpecFilePath];
871
+ existingOperations = await helper_1.listPluginExistingOperations(manifestRes.value, manifestPath, inputs[questionNames_1.QuestionNames.DestinationApiSpecFilePath]);
862
872
  }
863
873
  else {
864
874
  const existingOperationIds = ManifestUtils_1.manifestUtils.getOperationIds(manifestRes.value);
@@ -866,42 +876,60 @@ class FxCore {
866
876
  .filter((operation) => existingOperationIds.includes(operation.operationId))
867
877
  .map((operation) => operation.api);
868
878
  const apiSpecificationFile = manifestRes.value.composeExtensions[0].apiSpecificationFile;
869
- outputAPISpecPath = path.join(path.dirname(manifestPath), apiSpecificationFile);
879
+ outputApiSpecPath = path.join(path.dirname(manifestPath), apiSpecificationFile);
870
880
  }
871
881
  const operations = [...existingOperations, ...newOperations];
872
882
  const adaptiveCardFolder = path.join(inputs.projectPath, teamsfx_api_1.AppPackageFolderName, teamsfx_api_1.ResponseTemplatesFolderName);
873
- const context = utils_2.createContextV3();
874
883
  try {
875
- if (featureFlags_1.isApiKeyEnabled()) {
876
- const authNames = new Set();
877
- const serverUrls = new Set();
878
- for (const api of operations) {
879
- const operation = apiResultList.find((op) => op.api === api);
880
- if (operation) {
881
- if (operation.auth && operation.auth.type === "apiKey") {
882
- authNames.add(operation.auth.name);
883
- serverUrls.add(operation.server);
884
- }
885
- }
886
- }
887
- if (authNames.size > 1) {
888
- throw new common_2.MultipleAuthError(authNames);
884
+ const authNames = new Set();
885
+ const serverUrls = new Set();
886
+ let authScheme = undefined;
887
+ for (const api of operations) {
888
+ const operation = apiResultList.find((op) => op.api === api);
889
+ if (operation &&
890
+ operation.auth &&
891
+ (m365_spec_parser_1.Utils.isBearerTokenAuth(operation.auth.authScheme) ||
892
+ m365_spec_parser_1.Utils.isOAuthWithAuthCodeFlow(operation.auth.authScheme))) {
893
+ authNames.add(operation.auth.name);
894
+ serverUrls.add(operation.server);
895
+ authScheme = operation.auth.authScheme;
889
896
  }
890
- if (serverUrls.size > 1) {
891
- throw new common_2.MultipleServerError(serverUrls);
897
+ }
898
+ if (authNames.size > 1) {
899
+ throw new common_2.MultipleAuthError(authNames);
900
+ }
901
+ if (serverUrls.size > 1) {
902
+ throw new common_2.MultipleServerError(serverUrls);
903
+ }
904
+ if (authNames.size === 1 && authScheme) {
905
+ const ymlPath = path.join(inputs.projectPath, versionMetadata_1.MetadataV3.configFile);
906
+ const localYamlPath = path.join(inputs.projectPath, versionMetadata_1.MetadataV3.localConfigFile);
907
+ const authName = [...authNames][0];
908
+ const relativeSpecPath = "./" + path.relative(inputs.projectPath, outputApiSpecPath).replace(/\\/g, "/");
909
+ if (m365_spec_parser_1.Utils.isBearerTokenAuth(authScheme)) {
910
+ await actionInjector_1.ActionInjector.injectCreateAPIKeyAction(ymlPath, authName, relativeSpecPath);
911
+ if (await fs_extra_1.default.pathExists(localYamlPath)) {
912
+ await actionInjector_1.ActionInjector.injectCreateAPIKeyAction(localYamlPath, authName, relativeSpecPath);
913
+ }
892
914
  }
893
- if (authNames.size === 1) {
894
- const ymlPath = path.join(inputs.projectPath, versionMetadata_1.MetadataV3.configFile);
895
- const localYamlPath = path.join(inputs.projectPath, versionMetadata_1.MetadataV3.localConfigFile);
896
- const authName = [...authNames][0];
897
- const relativeSpecPath = "./" + path.relative(inputs.projectPath, outputAPISpecPath).replace(/\\/g, "/");
898
- await this.injectCreateAPIKeyAction(ymlPath, authName, relativeSpecPath);
915
+ else if (m365_spec_parser_1.Utils.isOAuthWithAuthCodeFlow(authScheme)) {
916
+ await actionInjector_1.ActionInjector.injectCreateOAuthAction(ymlPath, authName, relativeSpecPath);
899
917
  if (await fs_extra_1.default.pathExists(localYamlPath)) {
900
- await this.injectCreateAPIKeyAction(localYamlPath, authName, relativeSpecPath);
918
+ await actionInjector_1.ActionInjector.injectCreateOAuthAction(localYamlPath, authName, relativeSpecPath);
901
919
  }
902
920
  }
903
921
  }
904
- const generateResult = await specParser.generate(manifestPath, operations, outputAPISpecPath, adaptiveCardFolder);
922
+ let generateResult;
923
+ if (!isPlugin) {
924
+ generateResult = await specParser.generate(manifestPath, operations, outputApiSpecPath, adaptiveCardFolder);
925
+ }
926
+ else {
927
+ const pluginPathRes = await ManifestUtils_1.manifestUtils.getPluginFilePath(manifestRes.value, manifestPath);
928
+ if (pluginPathRes.isErr()) {
929
+ return teamsfx_api_1.err(pluginPathRes.error);
930
+ }
931
+ generateResult = await specParser.generateForCopilot(manifestPath, operations, outputApiSpecPath, pluginPathRes.value);
932
+ }
905
933
  // Send SpecParser.generate() warnings
906
934
  context.telemetryReporter.sendTelemetryEvent(helper_1.specParserGenerateResultTelemetryEvent, {
907
935
  [helper_1.specParserGenerateResultAllSuccessTelemetryProperty]: generateResult.allSuccess.toString(),
@@ -911,7 +939,7 @@ class FxCore {
911
939
  [telemetry_2.CoreTelemetryProperty.Component]: telemetry_2.CoreTelemetryComponentName,
912
940
  });
913
941
  if (generateResult.warnings && generateResult.warnings.length > 0) {
914
- const warnSummary = helper_1.generateScaffoldingSummary(generateResult.warnings, manifestRes.value, inputs.projectPath);
942
+ const warnSummary = helper_1.generateScaffoldingSummary(generateResult.warnings, manifestRes.value, path.relative(inputs.projectPath, outputApiSpecPath));
915
943
  context.logProvider.info(warnSummary);
916
944
  }
917
945
  }
@@ -926,8 +954,29 @@ class FxCore {
926
954
  return teamsfx_api_1.err(error);
927
955
  }
928
956
  const message = localizeUtils_1.getLocalizedString("core.copilot.addAPI.success", newOperations, inputs.projectPath);
929
- void context.userInteraction.showMessage("info", message, false);
930
- return teamsfx_api_1.ok(undefined);
957
+ if (inputs.platform !== teamsfx_api_1.Platform.VS) {
958
+ void context.userInteraction.showMessage("info", message, false);
959
+ }
960
+ return teamsfx_api_1.ok(message);
961
+ }
962
+ async listPluginApiSpecs(inputs) {
963
+ try {
964
+ const manifestPath = inputs[questionNames_1.QuestionNames.ManifestPath];
965
+ const manifestRes = await ManifestUtils_1.manifestUtils._readAppManifest(manifestPath);
966
+ if (manifestRes.isErr()) {
967
+ return teamsfx_api_1.err(manifestRes.error);
968
+ }
969
+ const res = await PluginManifestUtils_1.pluginManifestUtils.getApiSpecFilePathFromTeamsManifest(manifestRes.value, manifestPath);
970
+ if (res.isOk()) {
971
+ return teamsfx_api_1.ok(res.value);
972
+ }
973
+ else {
974
+ return teamsfx_api_1.err(res.error);
975
+ }
976
+ }
977
+ catch (error) {
978
+ return teamsfx_api_1.err(error);
979
+ }
931
980
  }
932
981
  async copilotPluginLoadOpenAIManifest(inputs) {
933
982
  try {
@@ -938,7 +987,14 @@ class FxCore {
938
987
  }
939
988
  }
940
989
  async copilotPluginListOperations(inputs) {
941
- return await helper_1.listOperations(utils_2.createContextV3(), inputs.manifest, inputs.apiSpecUrl, inputs, inputs.includeExistingAPIs, inputs.shouldLogWarning);
990
+ const res = await helper_1.listOperations(utils_2.createContextV3(), inputs.manifest, inputs.apiSpecUrl, inputs, inputs.includeExistingAPIs, inputs.shouldLogWarning);
991
+ if (res.isErr()) {
992
+ const msg = res.error.map((e) => e.content).join("\n");
993
+ return teamsfx_api_1.err(new teamsfx_api_1.UserError("FxCore", "ListOpenAPISpecOperationsError", msg, msg));
994
+ }
995
+ else {
996
+ return teamsfx_api_1.ok(res.value);
997
+ }
942
998
  }
943
999
  /**
944
1000
  * check project type info
@@ -951,6 +1007,142 @@ class FxCore {
951
1007
  (_a = globalVars_1.TOOLS.telemetryReporter) === null || _a === void 0 ? void 0 : _a.sendTelemetryEvent(telemetry_1.TelemetryEvent.ProjectType, props);
952
1008
  return teamsfx_api_1.ok(projectTypeRes);
953
1009
  }
1010
+ /**
1011
+ * Add plugin
1012
+ */
1013
+ async addPlugin(inputs) {
1014
+ var _a, _b, _c, _d;
1015
+ if (!inputs.projectPath) {
1016
+ throw new Error("projectPath is undefined"); // should never happen
1017
+ }
1018
+ const operations = inputs[questionNames_1.QuestionNames.ApiOperation];
1019
+ const url = inputs[questionNames_1.QuestionNames.ApiSpecLocation];
1020
+ const manifestPath = inputs[questionNames_1.QuestionNames.ManifestPath];
1021
+ const appPackageFolder = path.dirname(manifestPath);
1022
+ const apiSpecFolder = path.join(appPackageFolder, helper_1.defaultApiSpecFolderName);
1023
+ const needAddAction = inputs[questionNames_1.QuestionNames.PluginAvailability] === other_1.PluginAvailabilityOptions.action().id ||
1024
+ inputs[questionNames_1.QuestionNames.PluginAvailability] ===
1025
+ other_1.PluginAvailabilityOptions.copilotPluginAndAction().id;
1026
+ const needAddCopilotPlugin = inputs[questionNames_1.QuestionNames.PluginAvailability] === other_1.PluginAvailabilityOptions.copilotPlugin().id ||
1027
+ inputs[questionNames_1.QuestionNames.PluginAvailability] ===
1028
+ other_1.PluginAvailabilityOptions.copilotPluginAndAction().id;
1029
+ // validate the project is valid for adding plugin
1030
+ const manifestRes = await ManifestUtils_1.manifestUtils._readAppManifest(manifestPath);
1031
+ if (manifestRes.isErr()) {
1032
+ return teamsfx_api_1.err(manifestRes.error);
1033
+ }
1034
+ const teamsManifest = manifestRes.value;
1035
+ const declarativeGpt = (_b = (_a = teamsManifest.copilotExtensions) === null || _a === void 0 ? void 0 : _a.declarativeCopilots) === null || _b === void 0 ? void 0 : _b[0];
1036
+ if (!(declarativeGpt === null || declarativeGpt === void 0 ? void 0 : declarativeGpt.file)) {
1037
+ return teamsfx_api_1.err(results_1.AppStudioResultFactory.UserError(errors_1.AppStudioError.TeamsAppRequiredPropertyMissingError.name, errors_1.AppStudioError.TeamsAppRequiredPropertyMissingError.message("declarativeCopilots", manifestPath)));
1038
+ }
1039
+ const gptManifestFilePath = path.join(appPackageFolder, declarativeGpt.file);
1040
+ const gptManifestRes = await CopilotGptManifestUtils_1.copilotGptManifestUtils.readCopilotGptManifestFile(gptManifestFilePath);
1041
+ if (gptManifestRes.isErr()) {
1042
+ return teamsfx_api_1.err(gptManifestRes.error);
1043
+ }
1044
+ const gptManifest = gptManifestRes.value;
1045
+ const context = utils_2.createContextV3();
1046
+ // confirm
1047
+ const confirmRes = await context.userInteraction.showMessage("warn", localizeUtils_1.getLocalizedString("core.addApi.confirm", path.relative(inputs.projectPath, appPackageFolder)), true, localizeUtils_1.getLocalizedString("core.addApi.continue"));
1048
+ if (confirmRes.isErr()) {
1049
+ return teamsfx_api_1.err(confirmRes.error);
1050
+ }
1051
+ else if (confirmRes.value !== localizeUtils_1.getLocalizedString("core.addApi.continue")) {
1052
+ return teamsfx_api_1.err(new common_2.UserCancelError());
1053
+ }
1054
+ // generate file path
1055
+ let isYaml;
1056
+ try {
1057
+ isYaml = await helper_1.isYamlSpecFile(url);
1058
+ }
1059
+ catch (e) {
1060
+ isYaml = false;
1061
+ }
1062
+ await fs_extra_1.default.ensureDir(apiSpecFolder);
1063
+ let openApiSpecFileName = isYaml ? helper_1.defaultApiSpecYamlFileName : helper_1.defaultApiSpecJsonFileName;
1064
+ const openApiSpecFileNamePrefix = openApiSpecFileName.split(".")[0];
1065
+ const openApiSpecFileType = openApiSpecFileName.split(".")[1];
1066
+ let apiSpecFileNameSuffix = 1;
1067
+ while (await fs_extra_1.default.pathExists(path.join(apiSpecFolder, openApiSpecFileName))) {
1068
+ openApiSpecFileName = `${openApiSpecFileNamePrefix}_${apiSpecFileNameSuffix++}.${openApiSpecFileType}`;
1069
+ }
1070
+ const openApiSpecFilePath = path.join(apiSpecFolder, openApiSpecFileName);
1071
+ let pluginManifestName = helper_1.defaultPluginManifestFileName;
1072
+ const pluginManifestNamePrefix = helper_1.defaultPluginManifestFileName.split(".")[0];
1073
+ let pluginFileNameSuffix = 1;
1074
+ while (await fs_extra_1.default.pathExists(path.join(appPackageFolder, pluginManifestName))) {
1075
+ pluginManifestName = `${pluginManifestNamePrefix}_${pluginFileNameSuffix++}.json`;
1076
+ }
1077
+ const pluginManifestFilePath = path.join(appPackageFolder, pluginManifestName);
1078
+ // generate plugin related files
1079
+ const specParser = new m365_spec_parser_1.SpecParser(url, Object.assign(Object.assign({}, helper_1.copilotPluginParserOptions), { isGptPlugin: true }));
1080
+ try {
1081
+ const generateResult = await specParser.generateForCopilot(manifestPath, operations, openApiSpecFilePath, pluginManifestFilePath);
1082
+ // Send SpecParser.generate() warnings
1083
+ context.telemetryReporter.sendTelemetryEvent(helper_1.specParserGenerateResultTelemetryEvent, {
1084
+ [helper_1.specParserGenerateResultAllSuccessTelemetryProperty]: generateResult.allSuccess.toString(),
1085
+ [helper_1.specParserGenerateResultWarningsTelemetryProperty]: generateResult.warnings
1086
+ .map((w) => w.type.toString() + ": " + w.content)
1087
+ .join(";"),
1088
+ [telemetry_2.CoreTelemetryProperty.Component]: telemetry_2.CoreTelemetryComponentName,
1089
+ });
1090
+ if (generateResult.warnings && generateResult.warnings.length > 0) {
1091
+ const warnSummary = helper_1.generateScaffoldingSummary(generateResult.warnings, manifestRes.value, path.relative(inputs.projectPath, openApiSpecFilePath));
1092
+ context.logProvider.info(warnSummary);
1093
+ }
1094
+ }
1095
+ catch (e) {
1096
+ let error;
1097
+ if (e instanceof m365_spec_parser_1.SpecParserError) {
1098
+ error = helper_1.convertSpecParserErrorToFxError(e);
1099
+ }
1100
+ else {
1101
+ error = common_2.assembleError(e);
1102
+ }
1103
+ return teamsfx_api_1.err(error);
1104
+ }
1105
+ // update Teams manifest
1106
+ if (needAddCopilotPlugin) {
1107
+ const plugins = ((_c = teamsManifest.copilotExtensions) === null || _c === void 0 ? void 0 : _c.plugins) || [];
1108
+ plugins.push({
1109
+ id: "plugin_1",
1110
+ file: pluginManifestName,
1111
+ });
1112
+ teamsManifest.copilotExtensions = Object.assign(Object.assign({}, teamsManifest.copilotExtensions), { plugins });
1113
+ const updateManifestRes = await ManifestUtils_1.manifestUtils._writeAppManifest(teamsManifest, manifestPath);
1114
+ if (updateManifestRes.isErr()) {
1115
+ return teamsfx_api_1.err(updateManifestRes.error);
1116
+ }
1117
+ }
1118
+ // update GPT manifest
1119
+ let actionId = "";
1120
+ if (needAddAction) {
1121
+ let suffix = 1;
1122
+ actionId = `action_${suffix}`;
1123
+ const existingActionIds = (_d = gptManifest.actions) === null || _d === void 0 ? void 0 : _d.map((action) => action.id);
1124
+ while (existingActionIds === null || existingActionIds === void 0 ? void 0 : existingActionIds.includes(actionId)) {
1125
+ suffix += 1;
1126
+ actionId = `action_${suffix}`;
1127
+ }
1128
+ const addActionRes = await CopilotGptManifestUtils_1.copilotGptManifestUtils.addAction(gptManifestFilePath, actionId, pluginManifestName);
1129
+ if (addActionRes.isErr()) {
1130
+ return teamsfx_api_1.err(addActionRes.error);
1131
+ }
1132
+ }
1133
+ let successMessage = "";
1134
+ if (needAddAction && needAddCopilotPlugin) {
1135
+ successMessage = localizeUtils_1.getLocalizedString("core.addActionAndPlugin.success", actionId, "plugin_1");
1136
+ }
1137
+ else if (needAddAction) {
1138
+ successMessage = localizeUtils_1.getLocalizedString("core.addAction.success", actionId);
1139
+ }
1140
+ else if (needAddCopilotPlugin) {
1141
+ successMessage = localizeUtils_1.getLocalizedString("core.addPlugin.success", "plugin_1");
1142
+ }
1143
+ void context.userInteraction.showMessage("info", successMessage, false);
1144
+ return teamsfx_api_1.ok(undefined);
1145
+ }
954
1146
  }
955
1147
  tslib_1.__decorate([
956
1148
  hooks_1.hooks([
@@ -962,6 +1154,19 @@ tslib_1.__decorate([
962
1154
  tslib_1.__metadata("design:paramtypes", [Object]),
963
1155
  tslib_1.__metadata("design:returntype", Promise)
964
1156
  ], FxCore.prototype, "createProject", null);
1157
+ tslib_1.__decorate([
1158
+ hooks_1.hooks([
1159
+ globalVars_1.ErrorContextMW({
1160
+ component: "FxCore",
1161
+ stage: "createProjectByCustomizedGenerator",
1162
+ reset: true,
1163
+ }),
1164
+ errorHandler_1.ErrorHandlerMW,
1165
+ ]),
1166
+ tslib_1.__metadata("design:type", Function),
1167
+ tslib_1.__metadata("design:paramtypes", [Object, Object]),
1168
+ tslib_1.__metadata("design:returntype", Promise)
1169
+ ], FxCore.prototype, "createProjectByCustomizedGenerator", null);
965
1170
  tslib_1.__decorate([
966
1171
  hooks_1.hooks([
967
1172
  globalVars_1.ErrorContextMW({ component: "FxCore", stage: "createSampleProject", reset: true }),
@@ -1374,6 +1579,15 @@ tslib_1.__decorate([
1374
1579
  tslib_1.__metadata("design:paramtypes", [Object]),
1375
1580
  tslib_1.__metadata("design:returntype", Promise)
1376
1581
  ], FxCore.prototype, "copilotPluginAddAPI", null);
1582
+ tslib_1.__decorate([
1583
+ hooks_1.hooks([
1584
+ globalVars_1.ErrorContextMW({ component: "FxCore", stage: "copilotPluginListApiSpecs" }),
1585
+ errorHandler_1.ErrorHandlerMW,
1586
+ ]),
1587
+ tslib_1.__metadata("design:type", Function),
1588
+ tslib_1.__metadata("design:paramtypes", [Object]),
1589
+ tslib_1.__metadata("design:returntype", Promise)
1590
+ ], FxCore.prototype, "listPluginApiSpecs", null);
1377
1591
  tslib_1.__decorate([
1378
1592
  hooks_1.hooks([
1379
1593
  globalVars_1.ErrorContextMW({ component: "FxCore", stage: "copilotPluginLoadOpenAIManifest" }),
@@ -1398,5 +1612,16 @@ tslib_1.__decorate([
1398
1612
  tslib_1.__metadata("design:paramtypes", [String]),
1399
1613
  tslib_1.__metadata("design:returntype", Promise)
1400
1614
  ], FxCore.prototype, "checkProjectType", null);
1615
+ tslib_1.__decorate([
1616
+ hooks_1.hooks([
1617
+ globalVars_1.ErrorContextMW({ component: "FxCore", stage: "addPlugin" }),
1618
+ errorHandler_1.ErrorHandlerMW,
1619
+ questionMW_1.QuestionMW("addPlugin"),
1620
+ concurrentLocker_1.ConcurrentLockerMW,
1621
+ ]),
1622
+ tslib_1.__metadata("design:type", Function),
1623
+ tslib_1.__metadata("design:paramtypes", [Object]),
1624
+ tslib_1.__metadata("design:returntype", Promise)
1625
+ ], FxCore.prototype, "addPlugin", null);
1401
1626
  exports.FxCore = FxCore;
1402
1627
  //# sourceMappingURL=FxCore.js.map