@microsoft/teamsfx-core 1.6.1 → 1.6.2-alpha.6399c5efb.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (472) hide show
  1. package/build/common/constants.d.ts +3 -0
  2. package/build/common/constants.d.ts.map +1 -1
  3. package/build/common/constants.js +3 -0
  4. package/build/common/constants.js.map +1 -1
  5. package/build/common/local/localEnvManager.d.ts +5 -2
  6. package/build/common/local/localEnvManager.d.ts.map +1 -1
  7. package/build/common/local/localEnvManager.js +16 -2
  8. package/build/common/local/localEnvManager.js.map +1 -1
  9. package/build/common/local/localStateHelper.d.ts +3 -0
  10. package/build/common/local/localStateHelper.d.ts.map +1 -0
  11. package/build/common/local/localStateHelper.js +133 -0
  12. package/build/common/local/localStateHelper.js.map +1 -0
  13. package/build/common/local/taskDefinition.d.ts +3 -0
  14. package/build/common/local/taskDefinition.d.ts.map +1 -1
  15. package/build/common/local/taskDefinition.js +36 -0
  16. package/build/common/local/taskDefinition.js.map +1 -1
  17. package/build/common/localStateConstants.d.ts +39 -0
  18. package/build/common/localStateConstants.d.ts.map +1 -0
  19. package/build/common/localStateConstants.js +44 -0
  20. package/build/common/localStateConstants.js.map +1 -0
  21. package/build/common/localStateProvider.d.ts +7 -0
  22. package/build/common/localStateProvider.d.ts.map +1 -0
  23. package/build/common/localStateProvider.js +28 -0
  24. package/build/common/localStateProvider.js.map +1 -0
  25. package/build/common/projectSettingsHelper.d.ts.map +1 -1
  26. package/build/common/projectSettingsHelper.js +2 -0
  27. package/build/common/projectSettingsHelper.js.map +1 -1
  28. package/build/common/samples-config.json +2 -2
  29. package/build/common/telemetry.d.ts +26 -0
  30. package/build/common/telemetry.d.ts.map +1 -1
  31. package/build/common/telemetry.js +26 -0
  32. package/build/common/telemetry.js.map +1 -1
  33. package/build/common/template-utils/templatesActions.d.ts +2 -2
  34. package/build/common/template-utils/templatesActions.d.ts.map +1 -1
  35. package/build/common/template-utils/templatesActions.js +6 -6
  36. package/build/common/template-utils/templatesActions.js.map +1 -1
  37. package/build/common/templates-config.json +4 -3
  38. package/build/common/tools.d.ts +4 -0
  39. package/build/common/tools.d.ts.map +1 -1
  40. package/build/common/tools.js +27 -1
  41. package/build/common/tools.js.map +1 -1
  42. package/build/core/FxCore.d.ts +2 -0
  43. package/build/core/FxCore.d.ts.map +1 -1
  44. package/build/core/FxCore.js +122 -6
  45. package/build/core/FxCore.js.map +1 -1
  46. package/build/core/environment.d.ts +1 -0
  47. package/build/core/environment.d.ts.map +1 -1
  48. package/build/core/environment.js +9 -2
  49. package/build/core/environment.js.map +1 -1
  50. package/build/core/error.d.ts +5 -0
  51. package/build/core/error.d.ts.map +1 -1
  52. package/build/core/error.js +21 -1
  53. package/build/core/error.js.map +1 -1
  54. package/build/core/globalVars.d.ts +4 -0
  55. package/build/core/globalVars.d.ts.map +1 -1
  56. package/build/core/globalVars.js +5 -1
  57. package/build/core/globalVars.js.map +1 -1
  58. package/build/core/middleware/aadManifestMigration.d.ts +3 -0
  59. package/build/core/middleware/aadManifestMigration.d.ts.map +1 -0
  60. package/build/core/middleware/aadManifestMigration.js +186 -0
  61. package/build/core/middleware/aadManifestMigration.js.map +1 -0
  62. package/build/core/middleware/consolidateLocalRemote.d.ts +5 -0
  63. package/build/core/middleware/consolidateLocalRemote.d.ts.map +1 -0
  64. package/build/core/middleware/consolidateLocalRemote.js +204 -0
  65. package/build/core/middleware/consolidateLocalRemote.js.map +1 -0
  66. package/build/core/middleware/envInfoLoader.d.ts.map +1 -1
  67. package/build/core/middleware/envInfoLoader.js +6 -14
  68. package/build/core/middleware/envInfoLoader.js.map +1 -1
  69. package/build/core/middleware/envInfoWriter.d.ts.map +1 -1
  70. package/build/core/middleware/envInfoWriter.js +6 -0
  71. package/build/core/middleware/envInfoWriter.js.map +1 -1
  72. package/build/core/middleware/projectMigrator.d.ts +3 -0
  73. package/build/core/middleware/projectMigrator.d.ts.map +1 -1
  74. package/build/core/middleware/projectMigrator.js +3 -1
  75. package/build/core/middleware/projectMigrator.js.map +1 -1
  76. package/build/core/middleware/questionModel.d.ts.map +1 -1
  77. package/build/core/middleware/questionModel.js +55 -1
  78. package/build/core/middleware/questionModel.js.map +1 -1
  79. package/build/core/question.d.ts +13 -2
  80. package/build/core/question.d.ts.map +1 -1
  81. package/build/core/question.js +153 -61
  82. package/build/core/question.js.map +1 -1
  83. package/build/plugins/resource/aad/aadAppClient.d.ts +4 -0
  84. package/build/plugins/resource/aad/aadAppClient.d.ts.map +1 -1
  85. package/build/plugins/resource/aad/aadAppClient.js +52 -0
  86. package/build/plugins/resource/aad/aadAppClient.js.map +1 -1
  87. package/build/plugins/resource/aad/aadAppManifestManager.d.ts +11 -0
  88. package/build/plugins/resource/aad/aadAppManifestManager.d.ts.map +1 -0
  89. package/build/plugins/resource/aad/aadAppManifestManager.js +117 -0
  90. package/build/plugins/resource/aad/aadAppManifestManager.js.map +1 -0
  91. package/build/plugins/resource/aad/constants.d.ts +13 -0
  92. package/build/plugins/resource/aad/constants.d.ts.map +1 -1
  93. package/build/plugins/resource/aad/constants.js +25 -0
  94. package/build/plugins/resource/aad/constants.js.map +1 -1
  95. package/build/plugins/resource/aad/errors.d.ts +21 -0
  96. package/build/plugins/resource/aad/errors.d.ts.map +1 -1
  97. package/build/plugins/resource/aad/errors.js +65 -1
  98. package/build/plugins/resource/aad/errors.js.map +1 -1
  99. package/build/plugins/resource/aad/index.d.ts +3 -0
  100. package/build/plugins/resource/aad/index.d.ts.map +1 -1
  101. package/build/plugins/resource/aad/index.js +9 -1
  102. package/build/plugins/resource/aad/index.js.map +1 -1
  103. package/build/plugins/resource/aad/interfaces/AADApplication.d.ts +2 -3
  104. package/build/plugins/resource/aad/interfaces/AADApplication.d.ts.map +1 -1
  105. package/build/plugins/resource/aad/interfaces/AADManifest.d.ts +2 -3
  106. package/build/plugins/resource/aad/interfaces/AADManifest.d.ts.map +1 -1
  107. package/build/plugins/resource/aad/permissions/index.d.ts +1 -0
  108. package/build/plugins/resource/aad/permissions/index.d.ts.map +1 -1
  109. package/build/plugins/resource/aad/permissions/index.js +27 -1
  110. package/build/plugins/resource/aad/permissions/index.js.map +1 -1
  111. package/build/plugins/resource/aad/permissions/permissions.json +1084 -204
  112. package/build/plugins/resource/aad/plugin.d.ts +6 -1
  113. package/build/plugins/resource/aad/plugin.d.ts.map +1 -1
  114. package/build/plugins/resource/aad/plugin.js +117 -20
  115. package/build/plugins/resource/aad/plugin.js.map +1 -1
  116. package/build/plugins/resource/aad/utils/aadManifestHelper.d.ts +2 -0
  117. package/build/plugins/resource/aad/utils/aadManifestHelper.d.ts.map +1 -1
  118. package/build/plugins/resource/aad/utils/aadManifestHelper.js +84 -8
  119. package/build/plugins/resource/aad/utils/aadManifestHelper.js.map +1 -1
  120. package/build/plugins/resource/aad/utils/configs.d.ts +3 -1
  121. package/build/plugins/resource/aad/utils/configs.d.ts.map +1 -1
  122. package/build/plugins/resource/aad/utils/configs.js +6 -3
  123. package/build/plugins/resource/aad/utils/configs.js.map +1 -1
  124. package/build/plugins/resource/aad/v2/index.d.ts +3 -1
  125. package/build/plugins/resource/aad/v2/index.d.ts.map +1 -1
  126. package/build/plugins/resource/aad/v2/index.js +6 -0
  127. package/build/plugins/resource/aad/v2/index.js.map +1 -1
  128. package/build/plugins/resource/apiconnector/constants.d.ts +28 -0
  129. package/build/plugins/resource/apiconnector/constants.d.ts.map +1 -0
  130. package/build/plugins/resource/apiconnector/constants.js +37 -0
  131. package/build/plugins/resource/apiconnector/constants.js.map +1 -0
  132. package/build/plugins/resource/apiconnector/envHandler.d.ts +18 -0
  133. package/build/plugins/resource/apiconnector/envHandler.d.ts.map +1 -0
  134. package/build/plugins/resource/apiconnector/envHandler.js +88 -0
  135. package/build/plugins/resource/apiconnector/envHandler.js.map +1 -0
  136. package/build/plugins/resource/apiconnector/errors.d.ts +39 -0
  137. package/build/plugins/resource/apiconnector/errors.d.ts.map +1 -0
  138. package/build/plugins/resource/apiconnector/errors.js +46 -0
  139. package/build/plugins/resource/apiconnector/errors.js.map +1 -0
  140. package/build/plugins/resource/apiconnector/index.d.ts +14 -0
  141. package/build/plugins/resource/apiconnector/index.d.ts.map +1 -0
  142. package/build/plugins/resource/apiconnector/index.js +43 -0
  143. package/build/plugins/resource/apiconnector/index.js.map +1 -0
  144. package/build/plugins/resource/apiconnector/plugin.d.ts +14 -0
  145. package/build/plugins/resource/apiconnector/plugin.d.ts.map +1 -0
  146. package/build/plugins/resource/apiconnector/plugin.js +138 -0
  147. package/build/plugins/resource/apiconnector/plugin.js.map +1 -0
  148. package/build/plugins/resource/apiconnector/questions.d.ts +13 -0
  149. package/build/plugins/resource/apiconnector/questions.d.ts.map +1 -0
  150. package/build/plugins/resource/apiconnector/questions.js +63 -0
  151. package/build/plugins/resource/apiconnector/questions.js.map +1 -0
  152. package/build/plugins/resource/apiconnector/result.d.ts +9 -0
  153. package/build/plugins/resource/apiconnector/result.d.ts.map +1 -0
  154. package/build/plugins/resource/apiconnector/result.js +21 -0
  155. package/build/plugins/resource/apiconnector/result.js.map +1 -0
  156. package/build/plugins/resource/apiconnector/sampleHandler.d.ts +10 -0
  157. package/build/plugins/resource/apiconnector/sampleHandler.d.ts.map +1 -0
  158. package/build/plugins/resource/apiconnector/sampleHandler.js +47 -0
  159. package/build/plugins/resource/apiconnector/sampleHandler.js.map +1 -0
  160. package/build/plugins/resource/apiconnector/utils.d.ts +26 -0
  161. package/build/plugins/resource/apiconnector/utils.d.ts.map +1 -0
  162. package/build/plugins/resource/apiconnector/utils.js +47 -0
  163. package/build/plugins/resource/apiconnector/utils.js.map +1 -0
  164. package/build/plugins/resource/appstudio/constants.d.ts +4 -0
  165. package/build/plugins/resource/appstudio/constants.d.ts.map +1 -1
  166. package/build/plugins/resource/appstudio/constants.js +30 -1
  167. package/build/plugins/resource/appstudio/constants.js.map +1 -1
  168. package/build/plugins/resource/appstudio/manifestTemplate.d.ts.map +1 -1
  169. package/build/plugins/resource/appstudio/manifestTemplate.js +6 -0
  170. package/build/plugins/resource/appstudio/manifestTemplate.js.map +1 -1
  171. package/build/plugins/resource/appstudio/plugin.d.ts +2 -2
  172. package/build/plugins/resource/appstudio/plugin.d.ts.map +1 -1
  173. package/build/plugins/resource/appstudio/plugin.js +70 -16
  174. package/build/plugins/resource/appstudio/plugin.js.map +1 -1
  175. package/build/plugins/resource/appstudio/v3/index.d.ts +5 -1
  176. package/build/plugins/resource/appstudio/v3/index.d.ts.map +1 -1
  177. package/build/plugins/resource/appstudio/v3/index.js +24 -2
  178. package/build/plugins/resource/appstudio/v3/index.js.map +1 -1
  179. package/build/plugins/resource/bot/azureOps.d.ts +1 -1
  180. package/build/plugins/resource/bot/azureOps.d.ts.map +1 -1
  181. package/build/plugins/resource/bot/azureOps.js +12 -28
  182. package/build/plugins/resource/bot/azureOps.js.map +1 -1
  183. package/build/plugins/resource/bot/clientFactory.d.ts +0 -5
  184. package/build/plugins/resource/bot/clientFactory.d.ts.map +1 -1
  185. package/build/plugins/resource/bot/clientFactory.js +1 -29
  186. package/build/plugins/resource/bot/clientFactory.js.map +1 -1
  187. package/build/plugins/resource/bot/configs/scaffoldConfig.d.ts +8 -4
  188. package/build/plugins/resource/bot/configs/scaffoldConfig.d.ts.map +1 -1
  189. package/build/plugins/resource/bot/configs/scaffoldConfig.js +40 -8
  190. package/build/plugins/resource/bot/configs/scaffoldConfig.js.map +1 -1
  191. package/build/plugins/resource/bot/configs/teamsBotConfig.d.ts +1 -1
  192. package/build/plugins/resource/bot/configs/teamsBotConfig.d.ts.map +1 -1
  193. package/build/plugins/resource/bot/configs/teamsBotConfig.js +15 -9
  194. package/build/plugins/resource/bot/configs/teamsBotConfig.js.map +1 -1
  195. package/build/plugins/resource/bot/constants.d.ts +6 -12
  196. package/build/plugins/resource/bot/constants.d.ts.map +1 -1
  197. package/build/plugins/resource/bot/constants.js +5 -11
  198. package/build/plugins/resource/bot/constants.js.map +1 -1
  199. package/build/plugins/resource/bot/enums/pluginActRoles.d.ts +2 -1
  200. package/build/plugins/resource/bot/enums/pluginActRoles.d.ts.map +1 -1
  201. package/build/plugins/resource/bot/enums/pluginActRoles.js +1 -0
  202. package/build/plugins/resource/bot/enums/pluginActRoles.js.map +1 -1
  203. package/build/plugins/resource/bot/errors.d.ts +3 -18
  204. package/build/plugins/resource/bot/errors.d.ts.map +1 -1
  205. package/build/plugins/resource/bot/errors.js +8 -38
  206. package/build/plugins/resource/bot/errors.js.map +1 -1
  207. package/build/plugins/resource/bot/functionsHostedBot/constants.d.ts +13 -0
  208. package/build/plugins/resource/bot/functionsHostedBot/constants.d.ts.map +1 -0
  209. package/build/plugins/resource/bot/functionsHostedBot/constants.js +20 -0
  210. package/build/plugins/resource/bot/functionsHostedBot/constants.js.map +1 -0
  211. package/build/plugins/resource/bot/functionsHostedBot/deployMgr.d.ts +18 -0
  212. package/build/plugins/resource/bot/functionsHostedBot/deployMgr.d.ts.map +1 -0
  213. package/build/plugins/resource/bot/functionsHostedBot/deployMgr.js +160 -0
  214. package/build/plugins/resource/bot/functionsHostedBot/deployMgr.js.map +1 -0
  215. package/build/plugins/resource/bot/functionsHostedBot/plugin.d.ts +2 -0
  216. package/build/plugins/resource/bot/functionsHostedBot/plugin.d.ts.map +1 -1
  217. package/build/plugins/resource/bot/functionsHostedBot/plugin.js +104 -2
  218. package/build/plugins/resource/bot/functionsHostedBot/plugin.js.map +1 -1
  219. package/build/plugins/resource/bot/index.d.ts +5 -2
  220. package/build/plugins/resource/bot/index.d.ts.map +1 -1
  221. package/build/plugins/resource/bot/index.js +10 -5
  222. package/build/plugins/resource/bot/index.js.map +1 -1
  223. package/build/plugins/resource/bot/languageStrategy.d.ts.map +1 -1
  224. package/build/plugins/resource/bot/languageStrategy.js +4 -2
  225. package/build/plugins/resource/bot/languageStrategy.js.map +1 -1
  226. package/build/plugins/resource/bot/plugin.d.ts +2 -1
  227. package/build/plugins/resource/bot/plugin.d.ts.map +1 -1
  228. package/build/plugins/resource/bot/plugin.js +1 -1
  229. package/build/plugins/resource/bot/plugin.js.map +1 -1
  230. package/build/plugins/resource/bot/question.d.ts +4 -1
  231. package/build/plugins/resource/bot/question.d.ts.map +1 -1
  232. package/build/plugins/resource/bot/question.js +24 -7
  233. package/build/plugins/resource/bot/question.js.map +1 -1
  234. package/build/plugins/resource/bot/resources/messages.d.ts +1 -0
  235. package/build/plugins/resource/bot/resources/messages.d.ts.map +1 -1
  236. package/build/plugins/resource/bot/resources/messages.js +5 -1
  237. package/build/plugins/resource/bot/resources/messages.js.map +1 -1
  238. package/build/plugins/resource/bot/resources/strings.d.ts +10 -0
  239. package/build/plugins/resource/bot/resources/strings.d.ts.map +1 -1
  240. package/build/plugins/resource/bot/resources/strings.js +18 -1
  241. package/build/plugins/resource/bot/resources/strings.js.map +1 -1
  242. package/build/plugins/resource/bot/utils/telemetry-helper.d.ts.map +1 -1
  243. package/build/plugins/resource/bot/utils/telemetry-helper.js +4 -1
  244. package/build/plugins/resource/bot/utils/telemetry-helper.js.map +1 -1
  245. package/build/plugins/resource/bot/v3/index.d.ts.map +1 -1
  246. package/build/plugins/resource/bot/v3/index.js +0 -1
  247. package/build/plugins/resource/bot/v3/index.js.map +1 -1
  248. package/build/plugins/resource/cicd/constants.d.ts +3 -3
  249. package/build/plugins/resource/cicd/constants.d.ts.map +1 -1
  250. package/build/plugins/resource/cicd/constants.js +4 -3
  251. package/build/plugins/resource/cicd/constants.js.map +1 -1
  252. package/build/plugins/resource/cicd/errors.d.ts.map +1 -1
  253. package/build/plugins/resource/cicd/errors.js.map +1 -1
  254. package/build/plugins/resource/cicd/index.d.ts.map +1 -1
  255. package/build/plugins/resource/cicd/index.js +10 -3
  256. package/build/plugins/resource/cicd/index.js.map +1 -1
  257. package/build/plugins/resource/cicd/plugin.d.ts.map +1 -1
  258. package/build/plugins/resource/cicd/plugin.js +14 -12
  259. package/build/plugins/resource/cicd/plugin.js.map +1 -1
  260. package/build/plugins/resource/cicd/questions.d.ts +2 -0
  261. package/build/plugins/resource/cicd/questions.d.ts.map +1 -1
  262. package/build/plugins/resource/cicd/questions.js +28 -6
  263. package/build/plugins/resource/cicd/questions.js.map +1 -1
  264. package/build/plugins/resource/frontend/constants.d.ts +0 -1
  265. package/build/plugins/resource/frontend/constants.d.ts.map +1 -1
  266. package/build/plugins/resource/frontend/constants.js +0 -1
  267. package/build/plugins/resource/frontend/constants.js.map +1 -1
  268. package/build/plugins/resource/frontend/dotnet/constants.d.ts +0 -1
  269. package/build/plugins/resource/frontend/dotnet/constants.d.ts.map +1 -1
  270. package/build/plugins/resource/frontend/dotnet/constants.js +0 -1
  271. package/build/plugins/resource/frontend/dotnet/constants.js.map +1 -1
  272. package/build/plugins/resource/frontend/dotnet/ops/scaffold.d.ts.map +1 -1
  273. package/build/plugins/resource/frontend/dotnet/ops/scaffold.js +0 -1
  274. package/build/plugins/resource/frontend/dotnet/ops/scaffold.js.map +1 -1
  275. package/build/plugins/resource/frontend/ops/scaffold.d.ts.map +1 -1
  276. package/build/plugins/resource/frontend/ops/scaffold.js +0 -1
  277. package/build/plugins/resource/frontend/ops/scaffold.js.map +1 -1
  278. package/build/plugins/resource/frontend/resources/templateInfo.d.ts +1 -0
  279. package/build/plugins/resource/frontend/resources/templateInfo.d.ts.map +1 -1
  280. package/build/plugins/resource/frontend/resources/templateInfo.js +9 -2
  281. package/build/plugins/resource/frontend/resources/templateInfo.js.map +1 -1
  282. package/build/plugins/resource/frontend/v3/index.d.ts.map +1 -1
  283. package/build/plugins/resource/frontend/v3/index.js +0 -1
  284. package/build/plugins/resource/frontend/v3/index.js.map +1 -1
  285. package/build/plugins/resource/function/constants.d.ts +0 -1
  286. package/build/plugins/resource/function/constants.d.ts.map +1 -1
  287. package/build/plugins/resource/function/constants.js +0 -1
  288. package/build/plugins/resource/function/constants.js.map +1 -1
  289. package/build/plugins/resource/function/ops/scaffold.d.ts.map +1 -1
  290. package/build/plugins/resource/function/ops/scaffold.js +0 -1
  291. package/build/plugins/resource/function/ops/scaffold.js.map +1 -1
  292. package/build/plugins/resource/index.d.ts +1 -0
  293. package/build/plugins/resource/index.d.ts.map +1 -1
  294. package/build/plugins/resource/index.js +1 -0
  295. package/build/plugins/resource/index.js.map +1 -1
  296. package/build/plugins/resource/localdebug/v2/index.d.ts.map +1 -1
  297. package/build/plugins/resource/localdebug/v2/index.js +1 -1
  298. package/build/plugins/resource/localdebug/v2/index.js.map +1 -1
  299. package/build/plugins/resource/simpleauth/plugin.d.ts.map +1 -1
  300. package/build/plugins/resource/simpleauth/plugin.js +24 -5
  301. package/build/plugins/resource/simpleauth/plugin.js.map +1 -1
  302. package/build/plugins/resource/simpleauth/v2/index.d.ts +2 -2
  303. package/build/plugins/resource/simpleauth/v2/index.d.ts.map +1 -1
  304. package/build/plugins/resource/simpleauth/v2/index.js +4 -4
  305. package/build/plugins/resource/simpleauth/v2/index.js.map +1 -1
  306. package/build/plugins/resource/spfx/depsChecker/dependencyChecker.d.ts +11 -0
  307. package/build/plugins/resource/spfx/depsChecker/dependencyChecker.d.ts.map +1 -0
  308. package/build/plugins/resource/spfx/depsChecker/dependencyChecker.js +5 -0
  309. package/build/plugins/resource/spfx/depsChecker/dependencyChecker.js.map +1 -0
  310. package/build/plugins/resource/spfx/depsChecker/generatorChecker.d.ts +21 -0
  311. package/build/plugins/resource/spfx/depsChecker/generatorChecker.d.ts.map +1 -0
  312. package/build/plugins/resource/spfx/depsChecker/generatorChecker.js +131 -0
  313. package/build/plugins/resource/spfx/depsChecker/generatorChecker.js.map +1 -0
  314. package/build/plugins/resource/spfx/depsChecker/yoChecker.d.ts +21 -0
  315. package/build/plugins/resource/spfx/depsChecker/yoChecker.d.ts.map +1 -0
  316. package/build/plugins/resource/spfx/depsChecker/yoChecker.js +128 -0
  317. package/build/plugins/resource/spfx/depsChecker/yoChecker.js.map +1 -0
  318. package/build/plugins/resource/spfx/error.d.ts +4 -0
  319. package/build/plugins/resource/spfx/error.d.ts.map +1 -1
  320. package/build/plugins/resource/spfx/error.js +17 -1
  321. package/build/plugins/resource/spfx/error.js.map +1 -1
  322. package/build/plugins/resource/spfx/index.d.ts.map +1 -1
  323. package/build/plugins/resource/spfx/index.js +5 -2
  324. package/build/plugins/resource/spfx/index.js.map +1 -1
  325. package/build/plugins/resource/spfx/plugin.d.ts.map +1 -1
  326. package/build/plugins/resource/spfx/plugin.js +62 -13
  327. package/build/plugins/resource/spfx/plugin.js.map +1 -1
  328. package/build/plugins/resource/spfx/utils/constants.d.ts +5 -2
  329. package/build/plugins/resource/spfx/utils/constants.d.ts.map +1 -1
  330. package/build/plugins/resource/spfx/utils/constants.js +5 -2
  331. package/build/plugins/resource/spfx/utils/constants.js.map +1 -1
  332. package/build/plugins/resource/spfx/utils/questions.js +1 -1
  333. package/build/plugins/resource/spfx/utils/questions.js.map +1 -1
  334. package/build/plugins/resource/spfx/utils/telemetry-helper.d.ts.map +1 -1
  335. package/build/plugins/resource/spfx/utils/telemetry-helper.js +1 -0
  336. package/build/plugins/resource/spfx/utils/telemetry-helper.js.map +1 -1
  337. package/build/plugins/resource/spfx/utils/telemetryEvents.d.ts +11 -0
  338. package/build/plugins/resource/spfx/utils/telemetryEvents.d.ts.map +1 -0
  339. package/build/plugins/resource/spfx/utils/telemetryEvents.js +18 -0
  340. package/build/plugins/resource/spfx/utils/telemetryEvents.js.map +1 -0
  341. package/build/plugins/resource/spfx/utils/utils.d.ts +1 -0
  342. package/build/plugins/resource/spfx/utils/utils.d.ts.map +1 -1
  343. package/build/plugins/resource/spfx/utils/utils.js +16 -0
  344. package/build/plugins/resource/spfx/utils/utils.js.map +1 -1
  345. package/build/plugins/resource/sql/errors.d.ts.map +1 -1
  346. package/build/plugins/resource/sql/errors.js +29 -29
  347. package/build/plugins/resource/sql/errors.js.map +1 -1
  348. package/build/plugins/resource/sql/sqlClient.d.ts.map +1 -1
  349. package/build/plugins/resource/sql/sqlClient.js +2 -8
  350. package/build/plugins/resource/sql/sqlClient.js.map +1 -1
  351. package/build/plugins/solution/fx-solution/ResourcePluginContainer.d.ts +1 -0
  352. package/build/plugins/solution/fx-solution/ResourcePluginContainer.d.ts.map +1 -1
  353. package/build/plugins/solution/fx-solution/ResourcePluginContainer.js +1 -0
  354. package/build/plugins/solution/fx-solution/ResourcePluginContainer.js.map +1 -1
  355. package/build/plugins/solution/fx-solution/constants.d.ts +24 -3
  356. package/build/plugins/solution/fx-solution/constants.d.ts.map +1 -1
  357. package/build/plugins/solution/fx-solution/constants.js +26 -1
  358. package/build/plugins/solution/fx-solution/constants.js.map +1 -1
  359. package/build/plugins/solution/fx-solution/debug/constants.d.ts +15 -0
  360. package/build/plugins/solution/fx-solution/debug/constants.d.ts.map +1 -1
  361. package/build/plugins/solution/fx-solution/debug/constants.js +18 -1
  362. package/build/plugins/solution/fx-solution/debug/constants.js.map +1 -1
  363. package/build/plugins/solution/fx-solution/debug/provisionLocal.d.ts +2 -3
  364. package/build/plugins/solution/fx-solution/debug/provisionLocal.d.ts.map +1 -1
  365. package/build/plugins/solution/fx-solution/debug/provisionLocal.js +40 -12
  366. package/build/plugins/solution/fx-solution/debug/provisionLocal.js.map +1 -1
  367. package/build/plugins/solution/fx-solution/debug/scaffolding.d.ts.map +1 -1
  368. package/build/plugins/solution/fx-solution/debug/scaffolding.js +17 -10
  369. package/build/plugins/solution/fx-solution/debug/scaffolding.js.map +1 -1
  370. package/build/plugins/solution/fx-solution/debug/util/launch.d.ts.map +1 -1
  371. package/build/plugins/solution/fx-solution/debug/util/launch.js +19 -6
  372. package/build/plugins/solution/fx-solution/debug/util/launch.js.map +1 -1
  373. package/build/plugins/solution/fx-solution/debug/util/launchNext.d.ts +2 -0
  374. package/build/plugins/solution/fx-solution/debug/util/launchNext.d.ts.map +1 -1
  375. package/build/plugins/solution/fx-solution/debug/util/launchNext.js +179 -10
  376. package/build/plugins/solution/fx-solution/debug/util/launchNext.js.map +1 -1
  377. package/build/plugins/solution/fx-solution/debug/util/settings.d.ts +1 -1
  378. package/build/plugins/solution/fx-solution/debug/util/settings.d.ts.map +1 -1
  379. package/build/plugins/solution/fx-solution/debug/util/settings.js +2 -2
  380. package/build/plugins/solution/fx-solution/debug/util/settings.js.map +1 -1
  381. package/build/plugins/solution/fx-solution/debug/util/tasksNext.d.ts +1 -0
  382. package/build/plugins/solution/fx-solution/debug/util/tasksNext.d.ts.map +1 -1
  383. package/build/plugins/solution/fx-solution/debug/util/tasksNext.js +74 -1
  384. package/build/plugins/solution/fx-solution/debug/util/tasksNext.js.map +1 -1
  385. package/build/plugins/solution/fx-solution/question.d.ts +6 -2
  386. package/build/plugins/solution/fx-solution/question.d.ts.map +1 -1
  387. package/build/plugins/solution/fx-solution/question.js +33 -4
  388. package/build/plugins/solution/fx-solution/question.js.map +1 -1
  389. package/build/plugins/solution/fx-solution/v2/executeUserTask.d.ts +5 -1
  390. package/build/plugins/solution/fx-solution/v2/executeUserTask.d.ts.map +1 -1
  391. package/build/plugins/solution/fx-solution/v2/executeUserTask.js +432 -135
  392. package/build/plugins/solution/fx-solution/v2/executeUserTask.js.map +1 -1
  393. package/build/plugins/solution/fx-solution/v2/executor.d.ts +1 -1
  394. package/build/plugins/solution/fx-solution/v2/executor.d.ts.map +1 -1
  395. package/build/plugins/solution/fx-solution/v2/executor.js +33 -13
  396. package/build/plugins/solution/fx-solution/v2/executor.js.map +1 -1
  397. package/build/plugins/solution/fx-solution/v2/getQuestions.d.ts +1 -1
  398. package/build/plugins/solution/fx-solution/v2/getQuestions.d.ts.map +1 -1
  399. package/build/plugins/solution/fx-solution/v2/getQuestions.js +102 -37
  400. package/build/plugins/solution/fx-solution/v2/getQuestions.js.map +1 -1
  401. package/build/plugins/solution/fx-solution/v2/provisionLocal.d.ts +1 -2
  402. package/build/plugins/solution/fx-solution/v2/provisionLocal.d.ts.map +1 -1
  403. package/build/plugins/solution/fx-solution/v2/provisionLocal.js.map +1 -1
  404. package/build/plugins/solution/fx-solution/v2/scaffolding.d.ts +1 -1
  405. package/build/plugins/solution/fx-solution/v2/scaffolding.d.ts.map +1 -1
  406. package/build/plugins/solution/fx-solution/v2/scaffolding.js +25 -13
  407. package/build/plugins/solution/fx-solution/v2/scaffolding.js.map +1 -1
  408. package/build/plugins/solution/fx-solution/v2/utils.d.ts +1 -2
  409. package/build/plugins/solution/fx-solution/v2/utils.d.ts.map +1 -1
  410. package/build/plugins/solution/fx-solution/v2/utils.js +28 -8
  411. package/build/plugins/solution/fx-solution/v2/utils.js.map +1 -1
  412. package/build/plugins/solution/fx-solution/v3/provision.js +1 -1
  413. package/build/plugins/solution/fx-solution/v3/provision.js.map +1 -1
  414. package/build/plugins/solution/fx-solution/v3/userTask.js +1 -1
  415. package/build/plugins/solution/fx-solution/v3/userTask.js.map +1 -1
  416. package/package.json +4 -3
  417. package/resource/package.nls.json +160 -36
  418. package/templates/core/README-auto-generated.md +31 -0
  419. package/templates/{plugins/resource/dotnet → fallback}/blazor-base.csharp.default.zip +0 -0
  420. package/templates/{plugins/resource/bot → fallback}/bot.csharp.default.zip +0 -0
  421. package/templates/fallback/bot.js.command-and-response.zip +0 -0
  422. package/templates/{plugins/resource/bot → fallback}/bot.js.default.zip +0 -0
  423. package/templates/fallback/bot.js.notification-function-base.zip +0 -0
  424. package/templates/fallback/bot.js.notification-restify.zip +0 -0
  425. package/templates/fallback/bot.js.notification-trigger-http.zip +0 -0
  426. package/templates/fallback/bot.js.notification-trigger-timer.zip +0 -0
  427. package/templates/fallback/bot.ts.command-and-response.zip +0 -0
  428. package/templates/{plugins/resource/bot → fallback}/bot.ts.default.zip +0 -0
  429. package/templates/fallback/bot.ts.notification-function-base.zip +0 -0
  430. package/templates/fallback/bot.ts.notification-restify.zip +0 -0
  431. package/templates/fallback/bot.ts.notification-trigger-http.zip +0 -0
  432. package/templates/fallback/bot.ts.notification-trigger-timer.zip +0 -0
  433. package/templates/fallback/bot.ts.notification.zip +0 -0
  434. package/templates/{plugins/resource/function → fallback}/function-base.js.default.zip +0 -0
  435. package/templates/{plugins/resource/function → fallback}/function-base.ts.default.zip +0 -0
  436. package/templates/{plugins/resource/function → fallback}/function-triggers.js.HTTPTrigger.zip +0 -0
  437. package/templates/{plugins/resource/function → fallback}/function-triggers.ts.HTTPTrigger.zip +0 -0
  438. package/templates/{plugins/resource/frontend → fallback}/tab.csharp.default.zip +0 -0
  439. package/templates/fallback/tab.js.default.zip +0 -0
  440. package/templates/{plugins/resource/frontend/tab.js.default.zip → fallback/tab.js.m365.zip} +0 -0
  441. package/templates/fallback/tab.js.non-sso.zip +0 -0
  442. package/templates/fallback/tab.ts.default.zip +0 -0
  443. package/templates/{plugins/resource/frontend/tab.ts.default.zip → fallback/tab.ts.m365.zip} +0 -0
  444. package/templates/fallback/tab.ts.non-sso.zip +0 -0
  445. package/templates/plugins/resource/aad/auth/bot/README.md +63 -0
  446. package/templates/plugins/resource/aad/auth/bot/js/public/auth-end.html +65 -0
  447. package/templates/plugins/resource/aad/auth/bot/js/public/auth-start.html +177 -0
  448. package/templates/plugins/resource/aad/auth/bot/js/sso/showUserInfo.js +19 -0
  449. package/templates/plugins/resource/aad/auth/bot/js/sso/ssoDialog.js +173 -0
  450. package/templates/plugins/resource/aad/auth/bot/js/sso/teamsSsoBot.js +55 -0
  451. package/templates/plugins/resource/aad/auth/bot/ts/public/auth-end.html +65 -0
  452. package/templates/plugins/resource/aad/auth/bot/ts/public/auth-start.html +177 -0
  453. package/templates/plugins/resource/aad/auth/bot/ts/sso/showUserInfo.ts +24 -0
  454. package/templates/plugins/resource/aad/auth/bot/ts/sso/ssoDialog.ts +182 -0
  455. package/templates/plugins/resource/aad/auth/bot/ts/sso/teamsSsoBot.ts +69 -0
  456. package/templates/plugins/resource/aad/auth/tab/README.md +49 -0
  457. package/templates/plugins/resource/aad/auth/tab/js/public/auth-end.html +58 -0
  458. package/templates/plugins/resource/aad/auth/tab/js/public/auth-start.html +57 -0
  459. package/templates/plugins/resource/aad/auth/tab/js/sso/GetUserProfile.jsx +34 -0
  460. package/templates/plugins/resource/aad/auth/tab/ts/public/auth-end.html +58 -0
  461. package/templates/plugins/resource/aad/auth/tab/ts/public/auth-start.html +57 -0
  462. package/templates/plugins/resource/aad/auth/tab/ts/sso/GetUserProfile.tsx +34 -0
  463. package/templates/plugins/resource/aad/manifest/aad.template.json +7 -14
  464. package/templates/plugins/resource/apiconnector/sample/js/api-connector.template +30 -0
  465. package/templates/plugins/resource/apiconnector/sample/ts/api-connector.template +30 -0
  466. package/templates/plugins/resource/bot/bicep/botProvision.template.bicep +6 -0
  467. package/templates/plugins/resource/bot/bicep/funcHostedBotProvision.template.bicep +127 -0
  468. package/templates/plugins/resource/function/bicep/functionProvision.template.bicep +2 -0
  469. package/templates/plugins/resource/simpleauth/bicep/simpleAuthProvision.template.bicep +4 -0
  470. package/templates/plugins/resource/spfx/solution/README.md +2 -2
  471. package/templates/plugins/resource/sql/bicep/sqlProvision.template.bicep +1 -0
  472. package/templates/plugins/resource/webapp/bicep/webappProvision.template.bicep +2 -0
@@ -40,6 +40,16 @@
40
40
  "core.migrationToArmAndMultiEnv.SuccessMessage": "Upgrade succeeded. Your project is upgraded to new configuration files.",
41
41
  "core.migrationToArmAndMultiEnv.ErrorMessage": "Upgrade Failed. Please check the error message in Output window to troubleshoot and fix. You can also click Learn More for the FAQ and how to upgrade manually.",
42
42
  "core.migrationToArmAndMultiEnv.PreCheckErrorMessage": "Upgrade Failed. '%s' doesn't exist or is not in json format. Please fix it and try again by running command (Teams: Upgrade project).\nYou can also click Learn More for the FAQ.",
43
+ "core.consolidateLocalRemote.Message": "Teams Toolkit will upgrade your project's local config and manifest template to support the latest features. The upgrade process will not change your custom code and create the backup files in case revert is needed.\nNotice this upgrade is a must-have to continue to use current version Teams Toolkit. If you are not ready to upgrade and want to continue to use the old version, please find Teams Toolkit in Extension and install the version <= ????",
44
+ "core.consolidateLocalRemote.SuccessMessage": "Upgrade succeeded. Your project is upgraded to new configuration files.",
45
+ "core.consolidateLocalRemote.outputMsg": "Congratulations! You have successfully upgraded your Teams App project structure. We have added config.local.json for local debug and manifest.template.json for both Teams app running locally and remotely. And we have backed up localSettings.json, manifest.local.template.json and manifest.remote.template.json to .backup folder.",
46
+ "core.aadManifestMigration.Canceled": "[core] Upgrade cancelled.",
47
+ "core.aadManifestMigration.VSCodeCanceledNotice": "[core] Notice upgrade to new configuration files is a must-have to continue to use current version Teams Toolkit. If you are not ready to upgrade and want to continue to use the old version Teams Toolkit, please find Teams Toolkit in Extension and install the version <= ????",
48
+ "core.aadManifestMigration.CLICanceledNotice": "[core] Notice upgrade to new configuration files is a must-have to continue to use current version Teams Toolkit CLI. If you want to upgrade, please trigger this command again.",
49
+ "core.aadManifestMigration.CLINotReadyInstallLatestVersionNotice": "[core] If you are not ready to upgrade and want to continue to use the old version Teams Toolkit CLI, please install the version <= ????",
50
+ "core.aadManifestMigration.Message": "Teams Toolkit will upgrade your project's to support the latest features. The upgrade process will not change your custom code and create the backup files in case revert is needed.\nNotice this upgrade is a must-have to continue to use current version Teams Toolkit. If you are not ready to upgrade and want to continue to use the old version, please find Teams Toolkit in Extension and install the version <= ????",
51
+ "core.aadManifestMigration.outputMsg": "Congratulations! You have successfully upgraded your Teams App project structure. We have added aad.template.json for AAD app configuration. And we have backed up projectSettings.json, permissions.json to .backup folder.",
52
+ "core.aadManifestMigration.SuccessMessage": "Upgrade succeeded. Your project is upgraded to new configuration files.",
43
53
  "core.deployArmTemplates.StartNotice": "[%s] Start deploying ARM templates.",
44
54
  "core.deployArmTemplates.CompileBicepSuccessNotice": "[%s] Successfully compile bicep files to JSON.",
45
55
  "core.deployArmTemplates.SuccessNotice": "[%s] Successfully deploy ARM templates. Resource group name: %s. Deployment name: %s",
@@ -111,6 +121,14 @@
111
121
  "plugins.spfx.deploy.createAppcatalog": "Create Sharepoint app catalog",
112
122
  "plugins.spfx.deploy.uploadAddDeploy": "Upload and deploy SPFx package to your tenant app catalog",
113
123
  "plugins.spfx.scaffold.title": "Scaffolding project",
124
+ "plugins.spfx.error.npmNotFound": "Npm not found on your machine!",
125
+ "plugins.spfx.error.npmInstallFailed": "Failed to run 'npm install' due to %s",
126
+ "plugins.spfx.error.invalidDependency": "Failed to validate package %s",
127
+ "plugins.spfx.error.installDependency": "Failed to install package %s. Learn how to remediate in the [output](command:fx-extension.showOutputChannel).",
128
+ "plugins.spfx.scaffold.dependencyCheck": "Checking dependencies...",
129
+ "plugins.spfx.scaffold.dependencyInstall": "Installing dependencies ([details](command:fx-extension.showOutputChannel)). This may take more than 5 minutes to finish.",
130
+ "plugins.spfx.scaffold.scaffoldProject": "Generate SPFx project using Yeoman CLI",
131
+ "plugins.spfx.scaffold.updateManifest": "Update webpart manifest",
114
132
  "plugins.spfx.GetTenantFailedError": "Cannot get tenant %s %s",
115
133
  "plugins.spfx.SPFxAlreadyExistError": "Add capability/resource is not supported for SPFx projects",
116
134
  "plugins.spfx.LoadManifestError": "Failed to load manifest!",
@@ -132,6 +150,7 @@
132
150
  "plugins.frontend.checkSystemTimeTip": "You may get expired credentials, check if your system time is correct.",
133
151
  "plugins.frontend.restoreEnvironmentTip": "If you manually updated configuration files (under directory .%s), recover them.",
134
152
  "plugins.baseErrorMessage": "%s Suggestions: %s",
153
+ "suggestions.retryTheCurrentStep": "Please retry the current step.",
135
154
  "plugins.appstudio.publishTip": "Teams: Publish to Teams",
136
155
  "plugins.appstudio.validationFailedNotice": "Manifest Validation failed!",
137
156
  "plugins.appstudio.validationSucceedNotice": "Manifest Validation succeed!",
@@ -147,6 +166,9 @@
147
166
  "plugins.appstudio.updateManifestTip": "The manifest file configurations has been modified already. Do you want to continue to regenerate the manifest file and update to Teams platform?",
148
167
  "plugins.appstudio.updateOverwriteTip": "The manifest file on Teams platform has been changed since your last update. Do you want to continue to update and overwrite the manifest file on Teams platform?",
149
168
  "plugins.appstudio.provisionTip": "You must run 'Provision in the cloud' first to fill out certain fields in manifest. Click Get Help to learn more about why you need to provision.",
169
+ "plugins.appstudio.provisionTitle": "Provision Teams app",
170
+ "plugins.appstudio.provisionProgress": "Registering Teams app %s...",
171
+ "plugins.appstudio.postProvisionProgress": "Updating Teams app %s...",
150
172
  "plugins.appstudio.publishProgressValidate": "Validating manifest file",
151
173
  "plugins.appstudio.publishProgressUpdate": "Updating app definition for app %s in app studio",
152
174
  "plugins.appstudio.publishProgressBuild": "Building Teams app package in %s.",
@@ -160,18 +182,18 @@
160
182
  "plugins.bot.questionHostTypeTrigger.placeholder": "Choose triggers",
161
183
  "plugins.bot.questionHostTypeTrigger.error.emptySelection": "You have to select at least one trigger.",
162
184
  "plugins.bot.questionHostTypeTrigger.error.hostTypeConflict": "Azure Functions and Azure App Service host types are in conflict.",
163
- "plugins.bot.triggers.functionsTimer.label": "Timer Trigger",
164
- "plugins.bot.triggers.functionsTimer.cliName": "timer",
165
- "plugins.bot.triggers.functionsTimer.description": "A function that will be run on a specific schedule.",
166
- "plugins.bot.triggers.functionsTimer.detail": "A function hosted on Azure Functions that will be run on a specific schedule.",
167
- "plugins.bot.triggers.functionsHttp.label": "HTTP Trigger",
168
- "plugins.bot.triggers.functionsHttp.cliName": "http",
169
- "plugins.bot.triggers.functionsHttp.description": "A function that will be run whenever it receives an HTTP request.",
170
- "plugins.bot.triggers.functionsHttp.detail": "A function hosted on Azure Functions that will be run whenever it receives an HTTP request.",
171
- "plugins.bot.triggers.appService.label": "HTTP Trigger (Restify)",
172
- "plugins.bot.triggers.appService.cliName": "http-restify",
173
- "plugins.bot.triggers.appService.description": "A restify server that will be run whenever it receives an HTTP request.",
174
- "plugins.bot.triggers.appService.detail": "A restify server hosted on Azure App Service that will be run whenever it receives an HTTP request.",
185
+ "plugins.bot.triggers.http-functions.cliName": "http-functions",
186
+ "plugins.bot.triggers.http-functions.description": "A function that will be run whenever it receives an HTTP request.",
187
+ "plugins.bot.triggers.http-functions.detail": "A function hosted on Azure Functions that will be run whenever it receives an HTTP request.",
188
+ "plugins.bot.triggers.http-functions.label": "HTTP Trigger (Azure Functions)",
189
+ "plugins.bot.triggers.http-restify.cliName": "http-restify",
190
+ "plugins.bot.triggers.http-restify.description": "A restify server that will be run whenever it receives an HTTP request.",
191
+ "plugins.bot.triggers.http-restify.detail": "A restify server hosted on Azure App Service that will be run whenever it receives an HTTP request.",
192
+ "plugins.bot.triggers.http-restify.label": "HTTP Trigger (Restify)",
193
+ "plugins.bot.triggers.timer-functions.cliName": "timer-functions",
194
+ "plugins.bot.triggers.timer-functions.description": "A function that will be run on a specific schedule.",
195
+ "plugins.bot.triggers.timer-functions.detail": "A function hosted on Azure Functions that will be run on a specific schedule.",
196
+ "plugins.bot.triggers.timer-functions.label": "Timer Trigger (Azure Functions)",
175
197
  "plugins.function.recoverTeamsFxConfigFilesTip": "If you manually updated configuration files (under directory .%s), recover them.",
176
198
  "plugins.function.recreateProject": "If you can not recover configuration files, create a new project.",
177
199
  "plugins.function.checkNetwork": "Check your network connection.",
@@ -209,34 +231,49 @@
209
231
  "plugins.sql.getQuestionAdminPassword.validation.sqlPasswordCannotContainUserName": "Your password cannot contain part or all of the user name",
210
232
  "plugins.sql.getQuestionConfirmPassword.title": "Confirm admin password of SQL",
211
233
  "plugins.sql.getQuestionConfirmPassword.validation.sqlPasswordMustMatch": "Password and password confirmation must match",
212
- "plugins.sql.errorMessage.GetDetail": "Get the detailed error message in output.",
213
- "plugins.sql.errorMessage.LinkHelpMessage": "You can follow %s to handle it.",
214
- "plugins.sql.errorMessage.SqlInputError": "SQL admin name or password is empty",
215
- "plugins.sql.errorMessage.SqlAskInputError": "Failed to get answer for SQL questions",
216
- "plugins.sql.errorMessage.SqlEndpointError": "SQL Server %s is invalid.",
217
- "plugins.sql.errorMessage.DatabaseUserCreateError": "Failed to create user '%s' in database %s",
218
- "plugins.sql.errorMessage.SqlAddAdminError": "Failed to add AAD admin '%s'. %s",
219
- "plugins.sql.errorMessage.SqlLocalFirwallError": "Failed to add local firewall for '%s'. %s",
220
- "plugins.sql.errorMessage.SqlDeleteLocalFirwallError": "Failed to delete local firewall for '%s'. Delete '%s' manually. %s",
221
- "plugins.sql.errorMessage.SqlUserInfoError": "Failed to get login user info.",
222
- "plugins.sql.errorMessage.SqlGetConfigError": "Failed to get config value of '%s' from '%s'.",
223
- "plugins.sql.errorMessage.SqlInvalidConfigError": "The config value of '%s' is invalid for %s.",
224
- "plugins.sql.errorMessage.SqlCheckError": "Failed to check SQL Server '%s'. %s",
225
- "plugins.sql.errorMessage.SqlCheckAdminError": "Failed to check AAD admin '%s'. %s",
226
- "plugins.sql.errorMessage.IdentityCredentialUndefine": "Cannot access database to add managed identity user %s. Please add the user for database %s manually",
227
- "plugins.sql.errorMessage.ServicePrincipalWarning": "service principal admin in azure sql can't add database user <%s>. You can add the user for %s manually",
228
- "plugins.sql.errorMessage.DomainError": "Conditional Access policy requires a compliant device, and the device is not compliant. %s",
229
- "plugins.sql.errorMessage.GuestAdminError": "SQL admin does not have enough permission to add database user. %s",
234
+ "plugins.cicd.ciOption.detail": "Help checkout code, build and run test.",
235
+ "plugins.cicd.cdOption.detail": "Help checkout code, build, test and deploy to cloud.",
236
+ "plugins.cicd.provisionOption.detail": "Help create/update resources in cloud and Teams app registration.",
237
+ "plugins.cicd.publishOption.detail": "Help publish Teams app to tenants.",
238
+ "plugins.cicd.whichProvider.title": "Select a CI/CD Provider",
239
+ "plugins.cicd.whichTemplate.title": "Select template(s)",
240
+ "plugins.cicd.whichEnvironment.title": "Select an environment",
241
+ "plugins.cicd.ProgressBar.scaffold.title": "Scaffolding workflow automation files",
242
+ "plugins.cicd.ProgressBar.scaffold.detail": "Scaffolding workflow file for %s.",
243
+ "plugins.cicd.result.scaffold.created": "Workflow automation - including %s using %s for %s environment - has been successfully added to your project. Follow the instructions in README file to configure your workflow(s).",
244
+ "plugins.cicd.result.scaffold.skipped": "You have already created template(s) of %s using %s for %s environment, please customize it or remove it to create a new one.",
245
+ "plugins.cicd.suggestions.checkPermission": "Please check if you got sufficient permission.",
246
+ "plugins.cicd.suggestions.createProjectOrOpenExisting": "You can create a new project or open an existing one.",
247
+ "error.cicd.FailedToListMultiEnv": "Failed to list multi env.",
248
+ "error.cicd.PreconditionNotMet": "Some preconditions of inputs are not met.",
249
+ "error.cicd.NoProjectOpened.details": "No project opened.",
250
+ "plugins.apiConnector.getQuestionApiName.title": "Please input the API name",
251
+ "plugins.apiConnector.getQuestionEndpoint.title": "Please input the API endpoint",
252
+ "plugins.apiConnector.getQuestionApiType.title": "Please select the authentication type to connect API",
253
+ "plugins.apiConnector.getQuestionApiUserName.title": "Please input the user name:",
254
+ "plugins.apiConnector.whichService.title": "Please select which component to connect existing API",
255
+ "plugins.apiConnector.botOption.title": "Select the bot component to connect the existing API",
256
+ "plugins.apiConnector.functionOption.title": "Select the function component to connect the existing API",
257
+ "plugins.apiConnector.BasicAuthOption.detail": "Take username and password to authentication",
258
+ "plugins.apiConnector.CertAuthOption.detail": "Take Certification as the way to authentication",
259
+ "plugins.apiConnector.AADAuthOption.detail": "Take Azure active directory as the way to authentication",
260
+ "plugins.apiConnector.APIKeyOption.detail": "Take API Key as the way to authentication",
261
+ "plugins.apiConnector.ImplementMyselfOption.detail": "Define the authentication by yourself",
262
+ "plugins.apiConnector.questionComponentSelect.emptySelection": "You have to select at least one component.",
230
263
  "error.ProjectFolderExistError": "Path %s already exists. Select a different folder.",
231
264
  "error.PathNotExistError": "Path does not exist: %s",
232
265
  "error.ProjectFolderInvalidError": "Path %s is invalid, please set valid root folder in user settings(Use absolute directory or relative directory start with \\${homeDir} ).",
233
266
  "error.NoProjectOpenedError": "No project opened, you can create a new project or open an existing one.",
267
+ "error.InitializedFileExistError": "Initialized file(s) %s already exist, please clean up and try again.",
234
268
  "error.InvalidProjectError": "The command only works for project created by Teams Toolkit. %s",
235
269
  "error.InvalidProjectSettingsFileError": "The projectSettings.json file is invalid: %s.",
236
270
  "error.FetchSampleError": "Failed to get data from remote repository for %s.",
237
271
  "error.ProjectEnvNotExistError": "Environment %s not found. Make sure the config.%s.json file exist.",
238
272
  "error.InvalidEnvNameError": "Environment name can only contain letters, digits, _ and -.",
239
273
  "error.UpgradeCanceledError": "If you don't want to upgrade your project, please install another version of Teams Toolkit (version <= 2.10.0).",
274
+ "error.ConsolidateCanceledError": "If you don't want to upgrade your project, please install another version of Teams Toolkit (version <= ????).",
275
+ "error.AadManifestMigrationCanceledError": "If you don't want to upgrade your project, please install another version of Teams Toolkit (version <= ????).",
276
+ "error.OperationNotSupportedForExistingAppError": "Operation is not supported for existing app: %s.",
240
277
  "error.OperationNotPermittedError": "Operation is not permitted: %s",
241
278
  "error.InvalidInputError": "Failed to update context: %s",
242
279
  "error.ContextUpgradeError": "Invalid inputs: %s",
@@ -343,6 +380,24 @@
343
380
  "error.function.FindAppError": "Failed to find the function app.",
344
381
  "error.function.UploadZipError": "Failed to upload zip package.",
345
382
  "error.function.UnknownFallbackError": "Trigger fallback caused by unknown reason.",
383
+ "error.sql.GetDetail": "Get the detailed error message in output.",
384
+ "error.sql.LinkHelpMessage": "You can follow %s to handle it.",
385
+ "error.sql.SqlInputError": "SQL admin name or password is empty",
386
+ "error.sql.SqlAskInputError": "Failed to get answer for SQL questions",
387
+ "error.sql.SqlEndpointError": "SQL Server %s is invalid.",
388
+ "error.sql.DatabaseUserCreateError": "Failed to create user '%s' in database %s",
389
+ "error.sql.SqlAddAdminError": "Failed to add AAD admin '%s'. %s",
390
+ "error.sql.SqlLocalFirwallError": "Failed to add local firewall for '%s'. %s",
391
+ "error.sql.SqlDeleteLocalFirwallError": "Failed to delete local firewall for '%s'. Delete '%s' manually. %s",
392
+ "error.sql.SqlUserInfoError": "Failed to get login user info.",
393
+ "error.sql.SqlGetConfigError": "Failed to get config value of '%s' from '%s'.",
394
+ "error.sql.SqlInvalidConfigError": "The config value of '%s' is invalid for %s.",
395
+ "error.sql.SqlCheckError": "Failed to check SQL Server '%s'. %s",
396
+ "error.sql.SqlCheckAdminError": "Failed to check AAD admin '%s'. %s",
397
+ "error.sql.IdentityCredentialUndefine": "Cannot access database to add managed identity user %s. Please add the user for database %s manually",
398
+ "error.sql.ServicePrincipalWarning": "service principal admin in azure sql can't add database user <%s>. You can add the user for %s manually",
399
+ "error.sql.DomainError": "Conditional Access policy requires a compliant device, and the device is not compliant. %s",
400
+ "error.sql.GuestAdminError": "SQL admin does not have enough permission to add database user. %s",
346
401
  "error.dotnet.FileIOError": "Failed to read/write %s.",
347
402
  "error.dotnet.UploadZipError": "Failed to upload zip package.",
348
403
  "error.dotnet.PublishCredentialError": "Failed to retrieve publish credential.",
@@ -352,6 +407,15 @@
352
407
  "error.dotnet.FetchConfigError": "Failed to find %s from configuration",
353
408
  "error.dotnet.NoProjectSettingError": "Failed to load project setting",
354
409
  "error.dotnet.UnhandledError": "Unhandled error.",
410
+ "error.apiConnector.SampleCodeCreateFailError": "Failed to scaffold API connection samples. Reason: %s",
411
+ "error.apiConnector.ScaffoldApiFilesError": "Failed to scaffold connect API files %s, Reason: %s",
412
+ "error.apiConnector.ApiConnectorInputError": "Api connector input empty",
413
+ "error.apiConnector.ApiConnectorPathNotExistError": "Path %s not exists. Select a valid folder.",
414
+ "error.apiConnector.ApiConnectorCreateFileFail": "Failed to create %s",
415
+ "error.apiConnector.NoActivePluginsExistError": "Please create active resource first.",
416
+ "error.apiConnector.NoBotOrFunctionExistError": "Please create bot or function resource first.",
417
+ "error.apiConnector.InvalidProjectError": "Please select a valid TeamsFx project",
418
+ "error.apiConnector.ApiConnectorFunctionRouteError": "Failed to route function call: %s",
355
419
  "core.QuestionAppName.validation.pattern": "Application name must start with a letter and can only contain letters and digits.",
356
420
  "core.QuestionAppName.validation.pathExist": "Path exists: %s. Select a different application name.",
357
421
  "core.ProgrammingLanguageQuestion.title": "Programming Language",
@@ -365,15 +429,25 @@
365
429
  "core.MessageExtensionOption.detail": "Inserting app content or acting on a message without leaving the conversation",
366
430
  "core.NotificationOption.description": "Notification",
367
431
  "core.NotificationOption.detail": "Sending a message in response to stimulus not originating from the user",
368
- "core.TabSPFxOption.description": "UI-base app with SPFx framework",
369
- "core.TabSPFxOption.detail": "Teams-aware webpages with SPFx framework embedded in Microsoft Teams",
432
+ "core.CommandAndResponseOption.description": "Conversational Agent",
433
+ "core.CommandAndResponseOption.detail": "Running simple and repetitive automated tasks through conversations",
434
+ "core.TabSPFxOption.description": "Client-side app with Sharepoint Framework",
435
+ "core.TabSPFxOption.detail": "Auto-hosted SPFx web part tightly integrated with Microsoft Teams",
370
436
  "core.Sso.description": "Single Sign On",
371
437
  "core.Sso.detail": "Enable Single Sign On in your Teams app",
438
+ "core.TabNonSso.description": "UI-based app without SSO",
439
+ "core.TabNonSso.detail": "Teams-aware webpages embedded in Microsoft Teams without Single Sign On",
440
+ "core.addCapabilityQuestion.notificationCommandAndResponseConflict": "Notification and Command and Response capabilities are in conflict",
372
441
  "core.createCapabilityQuestion.title": "Select capabilities",
373
442
  "core.createCapabilityQuestion.placeholder": "Select at least 1 capability",
443
+ "core.capability.validation": "Invalid capability combinations: %s, option sets: %s are mutually exclusive",
444
+ "core.capability.validation.spfx": "Add SPFx Tab is only permitted for minimal app",
374
445
  "core.createCapabilityQuestion.validation1": "Teams Toolkit offers only the Tab capability in a Teams app with Visual Studio Code and SharePoint Framework. The Bot and Messaging extension capabilities are not available",
375
- "core.createCapabilityQuestion.validation2": "Bot and Notification capability are in conflict",
376
- "core.createCapabilityQuestion.validation3": "Messaging extension and Notification capability are in conflict",
446
+ "core.createCapabilityQuestion.botNotificationConflict": "Bot and Notification capabilities are in conflict",
447
+ "core.createCapabilityQuestion.botCommandAndResponseConflict": "Bot and Command and Response capabilities are in conflict",
448
+ "core.createCapabilityQuestion.notificationCommandAndResponseConflict": "Notification and Command and Response capabilities are in conflict",
449
+ "core.createCapabilityQuestion.meNotificationConflict": "Messaging Extension and Notification capabilities are in conflict",
450
+ "core.createCapabilityQuestion.meCommandAndResponseConflict": "Messaging Extension and Command and Response capabilities are in conflict",
377
451
  "core.QuestionSelectTargetEnvironment.title": "Select an environment",
378
452
  "core.getQuestionNewTargetEnvironmentName.title": "New environment name",
379
453
  "core.getQuestionNewTargetEnvironmentName.placeholder": "New environment name",
@@ -389,9 +463,13 @@
389
463
  "core.QuestionNewResourceGroupName.validation": "The name can only contain alphanumeric characters or the symbols ._-()",
390
464
  "core.QuestionNewResourceGroupLocation.title": "Location for the new resource group",
391
465
  "core.ScratchOptionYesVSC.label": "Create a new Teams app",
392
- "core.ScratchOptionYesVSC.detail": "Use the Teams Toolkit to create a new application.",
466
+ "core.ScratchOptionYesVSC.detail": "Use the Teams Toolkit to create a new Teams application.",
467
+ "core.ScratchOptionYesM365VSC.label": "Create a new Microsoft 365 app",
468
+ "core.ScratchOptionYesM365VSC.detail": "Use the Teams Toolkit to create a new Microsoft 365 application.",
393
469
  "core.ScratchOptionYes.label": "Create a new Teams app",
394
- "core.ScratchOptionYes.detail": "Use the Teams Toolkit to create a new application.",
470
+ "core.ScratchOptionYes.detail": "Use the Teams Toolkit to create a new Teams application.",
471
+ "core.ScratchOptionYesM365.label": "Create a new Microsoft 365 app",
472
+ "core.ScratchOptionYesM365.detail": "Use the Teams Toolkit to create a new Microsoft 365 application.",
395
473
  "core.ScratchOptionNoVSC.label": "Start from a sample",
396
474
  "core.ScratchOptionNoVSC.detail": "Use an existing sample as a starting point for your new application.",
397
475
  "core.ScratchOptionNo.label": "Start from a sample",
@@ -412,6 +490,19 @@
412
490
  "core.getUserEmailQuestion.title": "Add owner to Teams/AAD app for the account under the same M365 tenant (email)",
413
491
  "core.getUserEmailQuestion.validation1": "Email address cannot be null or empty",
414
492
  "core.getUserEmailQuestion.validation2": "Please change [UserName] to the real user name",
493
+ "core.M365AppTypeSelectQuestion.title": "Select an app type",
494
+ "core.M365AppTypeSelectQuestion.placeholder": "Select a type of application to jumpstart your project.",
495
+ "core.M365LaunchPageOptionItem.description": "Web pages embedded in Teams, Outlook and Office.com",
496
+ "core.M365MessagingExtensionOptionItem.description": "Custom UI when user composes messages in Teams or emails in Outlook",
497
+ "core.M365MessagingExtensionOptionItem.detail": "Insert app content in conversations or emails.",
498
+ "core.common.TeamsMobileDesktopClientName": "Teams desktop, mobile client id",
499
+ "core.common.TeamsWebClientName": "Teams web client id",
500
+ "core.common.OfficeDesktopClientName": "Office desktop client id",
501
+ "core.common.OfficeWebClientName1": "Office.com client id 1",
502
+ "core.common.OfficeWebClientName2": "Office.com client id 2",
503
+ "core.common.OutlookDesktopClientName": "Outlook desktop client id",
504
+ "core.common.OutlookWebClientName1": "Outlook web access client id 1",
505
+ "core.common.OutlookWebClientName2": "Outlook web access client id 2",
415
506
  "error.aad.GetAppError": "Failed to get AAD app with Object Id \"%s\" in tenant \"%s\". Please make sure the object id is valid, or delete 'objectId' under %s in %s and try again.",
416
507
  "error.aad.GetAppConfigError": "Failed to get %s from Azure AD app settings. Please make sure Azure AD app is correctly configured, or delete 'objectId' under %s in %s and try again.",
417
508
  "error.aad.GetSkipAppConfigError": "Failed to get all necessary info. You need to set %s, %s, %s, %s under%s in %s.",
@@ -433,6 +524,13 @@
433
524
  "error.aad.CheckPermissionError": "Failed to check permission.",
434
525
  "error.aad.GrantPermissionError": "%s: %s. Failed to grant permission.",
435
526
  "error.aad.ListCollaboratorError": "Failed to list collaborator.",
527
+ "error.aad.AadManifestLoadError": "Failed to load manifest file from %s, due to %s",
528
+ "error.aad.AadManifestMissingName": "name property is empty or invalid in AAD manifest file",
529
+ "error.aad.AadManifestMissingObjectId": "id property is missing or invalid in AAD manifest file, please re-provision and try again",
530
+ "error.aad.AadManifestMissingReplyUrlsWithType": "replyUrlsWithType property is missing or invalid in AAD manifest file, please re-provision and try again",
531
+ "error.aad.AadManifestMissingIdentifierUris": "identifierUris property is missing or invalid in AAD manifest file, please re-provision and try again",
532
+ "error.aad.UpdateAadAppError": "Failed to update application in Azure Active Directory: %s",
533
+ "error.aad.AadManifestNotFoundError": "Aad manifest file not found",
436
534
  "error.aad.GetDisplayNameError": "Failed to get display name.",
437
535
  "error.aad.GetConfigError": "Failed to get configuration value \"%s\" for %s.",
438
536
  "error.aad.FormatError": "Invalid format for %s. Value: %s.",
@@ -446,6 +544,18 @@
446
544
  "error.aad.client.AppObjectIdIsNull": "Missing Object ID.",
447
545
  "error.aad.client.EmptyResponse": "Missing response.",
448
546
  "error.aad.client.ReachRetryLimit": "Exceeded retry limit.",
547
+ "error.aad.manifest.NameIsMissing": "name is missing\n",
548
+ "error.aad.manifest.SignInAudienceIsMissing": "signInAudience is missing\n",
549
+ "error.aad.manifest.RequiredResourceAccessIsMissing": "requiredResourceAccess is missing\n",
550
+ "error.aad.manifest.Oauth2PermissionsIsMissing": "oauth2Permissions is missing\n",
551
+ "error.aad.manifest.PreAuthorizedApplicationsIsMissing": "preAuthorizedApplications is missing\n",
552
+ "error.aad.manifest.AccessTokenAcceptedVersionIs1": "accessTokenAcceptedVersion is 1\n",
553
+ "error.aad.manifest.OptionalClaimsIsMissing": "optionalClaims is missing\n",
554
+ "error.aad.manifest.OptionalClaimsMissingIdtypClaim":"optionalClaims access token doesn't contain idtyp claim\n",
555
+ "error.aad.manifest.AADManifestIssues": "AAD manifest has following issues that may potentially break the Teams App:\n",
556
+ "error.aad.manifest.UnknownResourceAppId":"Unknown resourceAppId %s",
557
+ "error.aad.manifest.UnknownResourceAccessType": "Unknown resourceAccess: %s",
558
+ "error.aad.manifest.UnknownResourceAccessId": "Unknown resourceAccess id: %s",
449
559
  "plugins.aad.NoSelection": "No Azure AD app found. Will not update permissions. You need to run provision or local debug first.",
450
560
  "plugins.aad.UserCancelled": "Selection is cancelled by user.",
451
561
  "plugins.aad.UpdatePermissionSuccessMessage": "Successfully updated permission for Azure AD app. You can go to Azure Portal to check the permission or grant admin consent.",
@@ -455,6 +565,7 @@
455
565
  "plugins.aad.UpdatePermissionHelpMessage": "update the permission under \"API permissions\"",
456
566
  "plugins.aad.UpdateAppIdUriHelpMessage": "set \"%s\" as \"Application ID URI\" under \"Expose an API\"",
457
567
  "plugins.aad.UpdateRedirectUriHelpMessage": "set \"%s\" as \"Redirect URIs\" under \"Authentication\"",
568
+ "plugins.aad.UpdateAadHelpMessage": "update Azure AD app manifest",
458
569
  "plugins.apim.QuestionConstants.VSCode.OpenApiDocument.description": "Select Open API document.",
459
570
  "plugins.apim.QuestionConstants.VSCode.ApiPrefix.description": "Input the API name prefix.",
460
571
  "plugins.apim.QuestionConstants.VSCode.ApiPrefix.prompt": "The unique name of the API will be '{api-prefix}-{resource-suffix}-{api-version}'.",
@@ -514,6 +625,18 @@
514
625
  "error.sa.VersionFileNotExist": "`Failed to load version file from %s",
515
626
  "plugins.sa.RegisterRersourceProviderFailed": "Failed to register required resource provider for Simple Auth. Reason: %s. Register required resource provider %s manually.",
516
627
  "plugins.sa.FreeServerFarmsQuotaErrorToUser": "The maximum number of Free App Service Plan allowed in a Subscription is 10. Delete a free App Service plan and try again.",
628
+ "core.addSso.onlySupportAzure": "Add SSO is only supported for project hosted in Azure",
629
+ "core.addSso.needCapability": "Add SSO is only supported for project with Tab, Bot and/or Messaging Extension. You need to run 'add component' first",
630
+ "core.addSso.functionNotSupport": "Add SSO is not supported for Bot hosted on Azure Function",
631
+ "core.addSso.needEnableFeatureFlag": "Need to set 'TEAMSFX_AAD_MANIFEST' in env to use add SSO feature",
632
+ "core.addSso.ssoEnabled": "SSO is already enabled",
633
+ "core.addSso.invalidSsoProject": "Invalid project. You may have modified '.fx/projectSettings.json' file.",
634
+ "core.addSsoFiles.emptyProjectPath": "Project path is empty",
635
+ "core.addSsoFiles.projectPathNotExists": "Project path does not exist",
636
+ "core.addSsoFiles.canNotAddNonSsoTabWhenSsoEnabled": "Failed to add non SSO Tab. SSO is enabled in this project",
637
+ "core.addSsoFiles.canNotAddTabWhenSsoNotEnabled": "Failed to add Tab. You need to run 'add SSO' first",
638
+ "core.addSsoFiles.FailedToCreateAuthFiles": "Failed to create files for add sso. Detail error: %s.",
639
+ "core.addSsoFiles.invalidLanguage": "Invalid language. Please make sure '.fx/projectSettings.json' is not modified and try again.",
517
640
  "core.getUserEmailQuestion.validation3": "Email address is not valid",
518
641
  "plugins.bot.DetailedError": "Detailed error: %s.",
519
642
  "plugins.bot.DetailedErrorReason": "Reason: %s",
@@ -532,6 +655,7 @@
532
655
  "plugins.bot.FailedToUpdateConfigs": "Failed to update configs for %s",
533
656
  "plugins.bot.FailedListPublishingCredentials": "Failed to list publishing credentials.",
534
657
  "plugins.bot.FailedDeployZipFile": "Failed to deploy zip file.",
658
+ "plugins.bot.FailedRestartWebApp": "Failed to restart web app.",
535
659
  "plugins.bot.FailedUpdateMessageEndpoint": "Failed to update message endpoint with %s",
536
660
  "plugins.bot.DownloadFail": "Failed to download from %s",
537
661
  "plugins.bot.ClickGetHelp": "Please click 'Get Help' button for more details.",
@@ -0,0 +1,31 @@
1
+ # TeamsFx Project
2
+
3
+ ## Take a tour of your app source code
4
+
5
+ After initializing the project, you can view the project folders and files in the Explorer area of Visual Studio Code after the Teams Toolkit registers and configures your app. The following table lists all the scaffolded folder and files by Teams Toolkit:
6
+
7
+ | File name | Contents |
8
+ |- | -|
9
+ |`.fx/configs/config.local.json`| Configuration file for local environment |
10
+ |`.fx/configs/config.dev.json`| Configuration file for dev environment |
11
+ |`.fx/configs/projectSettings.json`| Global project settings, which apply to all environments |
12
+ |`templates/appPackage/manifest.template.json`|Teams app manifest template|
13
+ |`templates/appPackage/resources`|Teams app's icon referenced by manifest template|
14
+
15
+
16
+ ## Add components
17
+
18
+ Now you're able to add components with Teams Toolkit to build Teams app for below scenarios.
19
+
20
+ ### Scenario 1: Send Notification to Teams
21
+
22
+ Sending a message in response to stimulus tasks through conversations. Please refer to [our wiki](https://github.com/OfficeDev/TeamsFx/wiki/Incremental-Build#scenario-1-send-notification-to-teams) for instructions.
23
+
24
+ ### Scenario 2: Build Command And Response
25
+
26
+ Running simple and repetitive automated tasks through conversations. Please refer to [our wiki](https://github.com/OfficeDev/TeamsFx/wiki/Incremental-Build#scenario-2-build-command-and-response) for instructions.
27
+
28
+
29
+ ### Scenario 3: Embed your existing web pages in Teams
30
+
31
+ Integrate with your existing web page application to build a Teams app. Please refer to [our wiki](https://github.com/OfficeDev/TeamsFx/wiki/Incremental-Build#scenario-3-embed-your-existing-web-pages-in-teams) for instructions.
@@ -0,0 +1,63 @@
1
+ ## How to enable SSO in TeamsFx Bot projects
2
+
3
+ This doc will show you how to add Single Sign On feature to TeamsFx Bot projects. Note that this article is only for Teams Toolkit Visual Studio Code Extension version after x.x.x or TeamsFx CLI version after x.x.x.
4
+
5
+ *Note: This article is only for bot hosted on Azure App Service. Bot that hosted on Azure Function is not supported now.*
6
+
7
+ *Note: This article is only for TeamsFx projects by Javascript and Typescript. For Dotnet, please refer to ${help link}.*
8
+
9
+ ### Step 1: Enable Single Sign On with TeamsFx commands
10
+
11
+ You can follow the following steps to add SSO feature to your TeamsFx projects.
12
+ - From Visual Studio Code: open the command palette and select: `Teams: Add SSO`.
13
+ - From TeamsFx CLI: run command `teamsfx add sso` in your project directory.
14
+
15
+ What TeamsFx will do when trigger this command:
16
+
17
+ 1. Create Azure AD app template under `template\appPackage\aad.template.json`
18
+
19
+ 1. Add `webApplicationInfo` object in Teams App manifest
20
+
21
+ 1. Create `README.md` and sample code under `auth/bot/`
22
+
23
+ ### Step 2: Update your source code
24
+
25
+ There are two folders under `auth/bot`: `public` and `sso`.
26
+
27
+ 1. In `public`, there are two html files which is used for authentication. You can simply copy the folder and place it under `bot/src`. Note that you need to modify `bot/src/index` file to add routing to these pages.
28
+
29
+ 1. In `sso`, there are three files. You can simply copy the folder and place it under `bot/src`.
30
+ - `showUserInfo`: This file implement a function to get user info with SSO token. You can follow this method and create your own method that requires SSO token.
31
+ - `ssoDialog`: Create a [ComponentDialog](https://docs.microsoft.com/en-us/javascript/api/botbuilder-dialogs/componentdialog?view=botbuilder-ts-latest) that used for Single Sign On.
32
+ - `teamsSsoBot`: Create a [TeamsActivityHandler](https://docs.microsoft.com/en-us/dotnet/api/microsoft.bot.builder.teams.teamsactivityhandler?view=botbuilder-dotnet-stable) with `ssoDialog` and add `showUserInfo` as a command that can be triggered. You need to register your own command with `addCommand` in this file.
33
+
34
+ 1. After adding the following files, you need to new a `teamsSsoBot` instance in `bot/src/index` file with:
35
+
36
+ ```
37
+ const handler = new TeamsSsoBot();
38
+ server.post("/api/messages", async (req, res) => {
39
+ await adapter.processActivity(req, res, async (context) => {
40
+ await handler.run(context);
41
+ }).catch((err) => {
42
+ // Error message including "412" means it is waiting for user's consent, which is a normal process of SSO, sholdn't throw this error.
43
+ if (!err.message.includes("412")) {
44
+ throw err;
45
+ }
46
+ });
47
+ });
48
+ ```
49
+
50
+ 1. As mentioned above, you also need to add routing in `bot/src/index` file as below:
51
+
52
+ ```
53
+ server.get(
54
+ "/auth-*.html",
55
+ restify.plugins.serveStatic({
56
+ directory: path.join(__dirname, "public"),
57
+ })
58
+ );
59
+ ```
60
+
61
+ ### Step 3: Provision Azure AD app and deploy latest code
62
+
63
+ After running `add sso` command and updating source code, you need to run `Provision` + `Deploy` or `Local Debug` again to provision an Azure AD app for Single Sign On. After the above steps, Single Sign On is successfully added in your Teams App.
@@ -0,0 +1,65 @@
1
+ <html>
2
+ <head>
3
+ <title>Login End Page</title>
4
+ <meta charset="utf-8" />
5
+ </head>
6
+
7
+ <body>
8
+ <script
9
+ src="https://statics.teams.cdn.office.net/sdk/v1.6.0/js/MicrosoftTeams.min.js"
10
+ integrity="sha384-mhp2E+BLMiZLe7rDIzj19WjgXJeI32NkPvrvvZBrMi5IvWup/1NUfS5xuYN5S3VT"
11
+ crossorigin="anonymous"
12
+ ></script>
13
+ <div id="divError"></div>
14
+ <script type="text/javascript">
15
+ microsoftTeams.initialize();
16
+ let hashParams = getHashParameters();
17
+
18
+ if (hashParams["error"]) {
19
+ // Authentication failed
20
+ handleAuthError(hashParams["error"], hashParams);
21
+ } else if (hashParams["code"]) {
22
+ // Get the stored state parameter and compare with incoming state
23
+ let expectedState = localStorage.getItem("state");
24
+ if (expectedState !== hashParams["state"]) {
25
+ // State does not match, report error
26
+ handleAuthError("StateDoesNotMatch", hashParams);
27
+ } else {
28
+ microsoftTeams.authentication.notifySuccess();
29
+ }
30
+ } else {
31
+ // Unexpected condition: hash does not contain error or access_token parameter
32
+ handleAuthError("UnexpectedFailure", hashParams);
33
+ }
34
+
35
+ // Parse hash parameters into key-value pairs
36
+ function getHashParameters() {
37
+ let hashParams = {};
38
+ location.hash
39
+ .substr(1)
40
+ .split("&")
41
+ .forEach(function (item) {
42
+ let s = item.split("="),
43
+ k = s[0],
44
+ v = s[1] && decodeURIComponent(s[1]);
45
+ hashParams[k] = v;
46
+ });
47
+ return hashParams;
48
+ }
49
+
50
+ // Show error information
51
+ function handleAuthError(errorType, errorMessage) {
52
+ const err = JSON.stringify({
53
+ error: errorType,
54
+ message: JSON.stringify(errorMessage),
55
+ });
56
+ let para = document.createElement("p");
57
+ let node = document.createTextNode(err);
58
+ para.appendChild(node);
59
+
60
+ let element = document.getElementById("divError");
61
+ element.appendChild(para);
62
+ }
63
+ </script>
64
+ </body>
65
+ </html>