@opensumi/ide-core-browser 2.21.8-rc-1670567192.0 → 2.21.8

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 (317) hide show
  1. package/lib/components/actions/index.d.ts.map +1 -1
  2. package/lib/components/actions/index.js +22 -2
  3. package/lib/components/actions/index.js.map +1 -1
  4. package/lib/components/tree/tree.module.less +0 -1
  5. package/lib/contextkey/testing.d.ts +0 -1
  6. package/lib/contextkey/testing.d.ts.map +1 -1
  7. package/lib/contextkey/testing.js +1 -2
  8. package/lib/contextkey/testing.js.map +1 -1
  9. package/lib/menu/next/menu.contrib.interface.d.ts +2 -3
  10. package/lib/menu/next/menu.contrib.interface.d.ts.map +1 -1
  11. package/lib/menu/next/menu.contrib.interface.js.map +1 -1
  12. package/lib/preferences/preference-configurations.js +1 -1
  13. package/lib/preferences/preference-configurations.js.map +1 -1
  14. package/lib/react-providers/config-provider.d.ts +0 -4
  15. package/lib/react-providers/config-provider.d.ts.map +1 -1
  16. package/lib/react-providers/config-provider.js.map +1 -1
  17. package/lib/services/storage-service.d.ts.map +1 -1
  18. package/lib/services/storage-service.js +1 -7
  19. package/lib/services/storage-service.js.map +1 -1
  20. package/lib/utils/label.d.ts.map +1 -1
  21. package/lib/utils/label.js +9 -16
  22. package/lib/utils/label.js.map +1 -1
  23. package/package.json +6 -7
  24. package/src/application/application-state-service.ts +0 -54
  25. package/src/application/application.service.ts +0 -51
  26. package/src/application/index.ts +0 -2
  27. package/src/authentication/authentication.contribution.ts +0 -35
  28. package/src/authentication/authentication.service.ts +0 -517
  29. package/src/bootstrap/app.ts +0 -745
  30. package/src/bootstrap/app.view.tsx +0 -88
  31. package/src/bootstrap/connection.ts +0 -116
  32. package/src/bootstrap/index.ts +0 -3
  33. package/src/bootstrap/inner-providers.ts +0 -297
  34. package/src/bootstrap/lifecycle.service.ts +0 -19
  35. package/src/browser-module.ts +0 -24
  36. package/src/common/common.command.ts +0 -977
  37. package/src/common/common.contribution.ts +0 -343
  38. package/src/common/common.define.ts +0 -55
  39. package/src/common/common.module.ts +0 -33
  40. package/src/common/common.storage.ts +0 -22
  41. package/src/common/container-id.ts +0 -12
  42. package/src/common/index.ts +0 -4
  43. package/src/components/actions/index.tsx +0 -486
  44. package/src/components/actions/placements.ts +0 -47
  45. package/src/components/actions/styles.module.less +0 -144
  46. package/src/components/badge/index.tsx +0 -1
  47. package/src/components/index.ts +0 -26
  48. package/src/components/layout/box-panel.tsx +0 -88
  49. package/src/components/layout/default-layout.tsx +0 -61
  50. package/src/components/layout/index.ts +0 -4
  51. package/src/components/layout/layout.ts +0 -80
  52. package/src/components/layout/split-panel.service.ts +0 -56
  53. package/src/components/layout/split-panel.tsx +0 -296
  54. package/src/components/layout/styles.module.less +0 -21
  55. package/src/components/loading/index.ts +0 -1
  56. package/src/components/loading/loading.less +0 -14
  57. package/src/components/loading/loading.view.tsx +0 -7
  58. package/src/components/loading/media/loading-dark.svg +0 -52
  59. package/src/components/loading/media/loading-hc.svg +0 -52
  60. package/src/components/loading/media/loading.svg +0 -52
  61. package/src/components/popover/styles.module.less +0 -81
  62. package/src/components/portal/index.tsx +0 -13
  63. package/src/components/progressbar/index.tsx +0 -16
  64. package/src/components/progressbar/styles.module.less +0 -31
  65. package/src/components/recycle-tree/index.ts +0 -1
  66. package/src/components/recycle-tree/recycle-tree.view.tsx +0 -368
  67. package/src/components/resize/resize.module.less +0 -78
  68. package/src/components/resize/resize.tsx +0 -663
  69. package/src/components/scroll/index.tsx +0 -386
  70. package/src/components/scroll/scroll.module.less +0 -108
  71. package/src/components/scrollbar/index.ts +0 -1
  72. package/src/components/scrollbar/scrollbar.less +0 -36
  73. package/src/components/scrollbar/scrollbar.view.ts +0 -8
  74. package/src/components/select/index.tsx +0 -12
  75. package/src/components/select/styles.less +0 -6
  76. package/src/components/tree/index.ts +0 -3
  77. package/src/components/tree/tree-node.view.tsx +0 -546
  78. package/src/components/tree/tree.module.less +0 -297
  79. package/src/components/tree/tree.view.tsx +0 -486
  80. package/src/context-key.ts +0 -48
  81. package/src/contextkey/dialog.ts +0 -3
  82. package/src/contextkey/explorer.ts +0 -26
  83. package/src/contextkey/index.ts +0 -6
  84. package/src/contextkey/outline.ts +0 -4
  85. package/src/contextkey/resource.ts +0 -61
  86. package/src/contextkey/terminal.ts +0 -7
  87. package/src/contextkey/testing.ts +0 -9
  88. package/src/contextkey/workspace.ts +0 -7
  89. package/src/core-preferences.ts +0 -318
  90. package/src/dom/index.ts +0 -176
  91. package/src/encoding-registry.ts +0 -83
  92. package/src/extensions/extensions-point.service.ts +0 -78
  93. package/src/extensions/index.ts +0 -3
  94. package/src/extensions/schema/browserViews.ts +0 -96
  95. package/src/extensions/schema/menu.ts +0 -245
  96. package/src/extensions/schema/opensumiExtensionPackageSchema.ts +0 -12
  97. package/src/extensions/schema/toolbar.ts +0 -338
  98. package/src/extensions/schema/vscodeExtensionPackageSchema.ts +0 -330
  99. package/src/fs/index.ts +0 -12
  100. package/src/hash-calculate/hash-calculate.contribution.ts +0 -19
  101. package/src/index.ts +0 -42
  102. package/src/keybinding/index.ts +0 -1
  103. package/src/keybinding/keybinding.ts +0 -908
  104. package/src/keyboard/index.ts +0 -3
  105. package/src/keyboard/keyboard-layout-provider.ts +0 -412
  106. package/src/keyboard/keyboard-layout-service.ts +0 -449
  107. package/src/keyboard/keys.ts +0 -748
  108. package/src/keyboard/layouts/_.contribution.ts +0 -24
  109. package/src/keyboard/layouts/cz.win.ts +0 -168
  110. package/src/keyboard/layouts/de-swiss.win.ts +0 -168
  111. package/src/keyboard/layouts/de.darwin.ts +0 -131
  112. package/src/keyboard/layouts/de.linux.ts +0 -186
  113. package/src/keyboard/layouts/de.win.ts +0 -168
  114. package/src/keyboard/layouts/dk.win.ts +0 -168
  115. package/src/keyboard/layouts/dvorak.darwin.ts +0 -131
  116. package/src/keyboard/layouts/en-belgian.win.ts +0 -168
  117. package/src/keyboard/layouts/en-ext.darwin.ts +0 -131
  118. package/src/keyboard/layouts/en-in.win.ts +0 -168
  119. package/src/keyboard/layouts/en-intl.darwin.ts +0 -131
  120. package/src/keyboard/layouts/en-intl.win.ts +0 -168
  121. package/src/keyboard/layouts/en-uk.darwin.ts +0 -131
  122. package/src/keyboard/layouts/en-uk.win.ts +0 -168
  123. package/src/keyboard/layouts/en.darwin.ts +0 -139
  124. package/src/keyboard/layouts/en.linux.ts +0 -186
  125. package/src/keyboard/layouts/en.win.ts +0 -173
  126. package/src/keyboard/layouts/es-latin.win.ts +0 -168
  127. package/src/keyboard/layouts/es.darwin.ts +0 -131
  128. package/src/keyboard/layouts/es.linux.ts +0 -186
  129. package/src/keyboard/layouts/es.win.ts +0 -168
  130. package/src/keyboard/layouts/fr.darwin.ts +0 -131
  131. package/src/keyboard/layouts/fr.linux.ts +0 -186
  132. package/src/keyboard/layouts/fr.win.ts +0 -168
  133. package/src/keyboard/layouts/hu.win.ts +0 -168
  134. package/src/keyboard/layouts/it.darwin.ts +0 -131
  135. package/src/keyboard/layouts/it.win.ts +0 -168
  136. package/src/keyboard/layouts/jp-roman.darwin.ts +0 -131
  137. package/src/keyboard/layouts/jp.darwin.ts +0 -131
  138. package/src/keyboard/layouts/ko.darwin.ts +0 -131
  139. package/src/keyboard/layouts/layout.contribution.darwin.ts +0 -23
  140. package/src/keyboard/layouts/layout.contribution.linux.ts +0 -12
  141. package/src/keyboard/layouts/layout.contribution.ts +0 -9
  142. package/src/keyboard/layouts/layout.contribution.win.ts +0 -29
  143. package/src/keyboard/layouts/no.win.ts +0 -168
  144. package/src/keyboard/layouts/pl.darwin.ts +0 -131
  145. package/src/keyboard/layouts/pl.win.ts +0 -168
  146. package/src/keyboard/layouts/pt-br.win.ts +0 -169
  147. package/src/keyboard/layouts/pt.darwin.ts +0 -131
  148. package/src/keyboard/layouts/pt.win.ts +0 -168
  149. package/src/keyboard/layouts/ru.darwin.ts +0 -131
  150. package/src/keyboard/layouts/ru.linux.ts +0 -186
  151. package/src/keyboard/layouts/ru.win.ts +0 -168
  152. package/src/keyboard/layouts/sv.darwin.ts +0 -131
  153. package/src/keyboard/layouts/sv.win.ts +0 -168
  154. package/src/keyboard/layouts/thai.win.ts +0 -168
  155. package/src/keyboard/layouts/tr.win.ts +0 -168
  156. package/src/keyboard/layouts/zh-hans.darwin.ts +0 -131
  157. package/src/layout/accordion/tab-bar-toolbar.tsx +0 -59
  158. package/src/layout/accordion/view-context-key.registry.ts +0 -34
  159. package/src/layout/constants.ts +0 -7
  160. package/src/layout/index.ts +0 -5
  161. package/src/layout/layout-hooks.ts +0 -68
  162. package/src/layout/layout-state.ts +0 -107
  163. package/src/layout/layout.interface.ts +0 -101
  164. package/src/layout/layout.ts +0 -80
  165. package/src/layout/view-id.ts +0 -18
  166. package/src/logger/browser-logger.ts +0 -51
  167. package/src/logger/index.ts +0 -1
  168. package/src/markdown/index.tsx +0 -62
  169. package/src/menu/next/base.ts +0 -513
  170. package/src/menu/next/ctxmenu-service.ts +0 -188
  171. package/src/menu/next/index.ts +0 -10
  172. package/src/menu/next/menu-id.ts +0 -86
  173. package/src/menu/next/menu-service.ts +0 -252
  174. package/src/menu/next/menu-util.ts +0 -77
  175. package/src/menu/next/menu.contrib.interface.ts +0 -79
  176. package/src/menu/next/menu.interface.ts +0 -253
  177. package/src/menu/next/menubar-service.ts +0 -211
  178. package/src/menu/next/renderer/ctxmenu/base.ts +0 -18
  179. package/src/menu/next/renderer/ctxmenu/browser.ts +0 -45
  180. package/src/menu/next/renderer/ctxmenu/electron.ts +0 -207
  181. package/src/menu/next/toolbar-action.service.ts +0 -132
  182. package/src/monaco/index.ts +0 -128
  183. package/src/opener/command-opener.ts +0 -42
  184. package/src/opener/default-opener.ts +0 -31
  185. package/src/opener/http-opener.ts +0 -25
  186. package/src/opener/index.ts +0 -19
  187. package/src/opener/opener.contribution.ts +0 -57
  188. package/src/opener/opener.service.ts +0 -66
  189. package/src/preferences/early-preferences.ts +0 -117
  190. package/src/preferences/index.ts +0 -9
  191. package/src/preferences/preference-configurations.ts +0 -77
  192. package/src/preferences/preference-contribution.ts +0 -401
  193. package/src/preferences/preference-provider.ts +0 -414
  194. package/src/preferences/preference-proxy.ts +0 -292
  195. package/src/preferences/preference-scope.ts +0 -3
  196. package/src/preferences/preference-service.ts +0 -571
  197. package/src/preferences/settings.ts +0 -53
  198. package/src/preferences/types.ts +0 -111
  199. package/src/progress/index.ts +0 -58
  200. package/src/progress/progress-bar.tsx +0 -22
  201. package/src/progress/progress-indicator.ts +0 -90
  202. package/src/progress/progress.module.less +0 -46
  203. package/src/progress/progress.service.tsx +0 -429
  204. package/src/quick-open/index.ts +0 -655
  205. package/src/quick-open/recent-files.ts +0 -68
  206. package/src/raw-context-key.ts +0 -116
  207. package/src/react-hooks/event.tsx +0 -80
  208. package/src/react-hooks/hot-key.tsx +0 -58
  209. package/src/react-hooks/index.ts +0 -3
  210. package/src/react-hooks/injectable-hooks.tsx +0 -35
  211. package/src/react-hooks/portal-hooks.tsx +0 -38
  212. package/src/react-providers/config-provider.tsx +0 -263
  213. package/src/react-providers/index.tsx +0 -2
  214. package/src/react-providers/slot.module.less +0 -19
  215. package/src/react-providers/slot.tsx +0 -242
  216. package/src/services/clipboard.service.ts +0 -97
  217. package/src/services/credentials-service.ts +0 -91
  218. package/src/services/crypto-service.ts +0 -23
  219. package/src/services/external-uri.service.ts +0 -68
  220. package/src/services/index.ts +0 -7
  221. package/src/services/label-service.ts +0 -386
  222. package/src/services/status-bar-service.ts +0 -108
  223. package/src/services/storage-service.ts +0 -197
  224. package/src/style/codicons/README.md +0 -22
  225. package/src/style/codicons/codicon-animations.css +0 -15
  226. package/src/style/codicons/generator.js +0 -15
  227. package/src/style/entry.less +0 -25
  228. package/src/style/icon/fileicons/file-default.svg +0 -1
  229. package/src/style/icon/fileicons/folder-default.svg +0 -1
  230. package/src/style/icon/fileicons.less +0 -20
  231. package/src/style/icon/icon.ts +0 -543
  232. package/src/style/icon/ide-iconfont.ts +0 -13
  233. package/src/style/icon/index.less +0 -54
  234. package/src/style/icon/seti.woff +0 -0
  235. package/src/style/icon/symbol-icons/boolean-dark.svg +0 -3
  236. package/src/style/icon/symbol-icons/boolean-light.svg +0 -3
  237. package/src/style/icon/symbol-icons/class-dark.svg +0 -3
  238. package/src/style/icon/symbol-icons/class-light.svg +0 -3
  239. package/src/style/icon/symbol-icons/constant-dark.svg +0 -4
  240. package/src/style/icon/symbol-icons/constant-light.svg +0 -4
  241. package/src/style/icon/symbol-icons/enumerator-dark.svg +0 -3
  242. package/src/style/icon/symbol-icons/enumerator-item-dark.svg +0 -3
  243. package/src/style/icon/symbol-icons/enumerator-item-light.svg +0 -3
  244. package/src/style/icon/symbol-icons/enumerator-light.svg +0 -3
  245. package/src/style/icon/symbol-icons/event-dark.svg +0 -3
  246. package/src/style/icon/symbol-icons/event-light.svg +0 -3
  247. package/src/style/icon/symbol-icons/field-dark.svg +0 -3
  248. package/src/style/icon/symbol-icons/field-light.svg +0 -3
  249. package/src/style/icon/symbol-icons/file-dark.svg +0 -3
  250. package/src/style/icon/symbol-icons/file-light.svg +0 -3
  251. package/src/style/icon/symbol-icons/indexer-dark.svg +0 -3
  252. package/src/style/icon/symbol-icons/indexer-light.svg +0 -3
  253. package/src/style/icon/symbol-icons/interface-dark.svg +0 -3
  254. package/src/style/icon/symbol-icons/interface-light.svg +0 -3
  255. package/src/style/icon/symbol-icons/keyword-dark.svg +0 -3
  256. package/src/style/icon/symbol-icons/keyword-light.svg +0 -3
  257. package/src/style/icon/symbol-icons/method-dark.svg +0 -3
  258. package/src/style/icon/symbol-icons/method-light.svg +0 -3
  259. package/src/style/icon/symbol-icons/namespace-dark.svg +0 -3
  260. package/src/style/icon/symbol-icons/namespace-light.svg +0 -3
  261. package/src/style/icon/symbol-icons/numeric-dark.svg +0 -3
  262. package/src/style/icon/symbol-icons/numeric-light.svg +0 -3
  263. package/src/style/icon/symbol-icons/operator-dark.svg +0 -3
  264. package/src/style/icon/symbol-icons/operator-light.svg +0 -3
  265. package/src/style/icon/symbol-icons/property-dark.svg +0 -3
  266. package/src/style/icon/symbol-icons/property-light.svg +0 -3
  267. package/src/style/icon/symbol-icons/snippet-dark.svg +0 -3
  268. package/src/style/icon/symbol-icons/snippet-light.svg +0 -3
  269. package/src/style/icon/symbol-icons/string-dark.svg +0 -3
  270. package/src/style/icon/symbol-icons/string-light.svg +0 -3
  271. package/src/style/icon/symbol-icons/structure-dark.svg +0 -3
  272. package/src/style/icon/symbol-icons/structure-light.svg +0 -3
  273. package/src/style/icon/symbol-icons/symbol-icons.css +0 -284
  274. package/src/style/icon/symbol-icons/template-dark.svg +0 -3
  275. package/src/style/icon/symbol-icons/template-light.svg +0 -3
  276. package/src/style/icon/symbol-icons/variable-dark.svg +0 -3
  277. package/src/style/icon/symbol-icons/variable-light.svg +0 -3
  278. package/src/style/icon.less +0 -8
  279. package/src/style/index.less +0 -14
  280. package/src/style/monaco-override.less +0 -116
  281. package/src/style/normalize.less +0 -92
  282. package/src/style/octicons/octicons-cdn.css +0 -720
  283. package/src/style/octicons/octicons.css +0 -714
  284. package/src/style/octicons/octicons.html +0 -1882
  285. package/src/style/octicons/octicons.svg +0 -582
  286. package/src/style/octicons/octicons.ttf +0 -0
  287. package/src/style/override.less +0 -97
  288. package/src/style/toolbar.less +0 -199
  289. package/src/style/utilities.less +0 -8
  290. package/src/style/variable.less +0 -8
  291. package/src/terminal/index.ts +0 -7
  292. package/src/toolbar/components/auto-complete.tsx +0 -0
  293. package/src/toolbar/components/button.tsx +0 -440
  294. package/src/toolbar/components/index.ts +0 -2
  295. package/src/toolbar/components/select.tsx +0 -189
  296. package/src/toolbar/index.ts +0 -3
  297. package/src/toolbar/toolbar.popover.registry.ts +0 -32
  298. package/src/toolbar/toolbar.registry.ts +0 -352
  299. package/src/toolbar/toolbar.tsx +0 -710
  300. package/src/toolbar/types.ts +0 -383
  301. package/src/tree/index.ts +0 -3
  302. package/src/tree/tree-expansion.ts +0 -25
  303. package/src/tree/tree-selection.ts +0 -89
  304. package/src/tree/tree.ts +0 -294
  305. package/src/utils/create-overlay.tsx +0 -53
  306. package/src/utils/electron.ts +0 -92
  307. package/src/utils/env.ts +0 -26
  308. package/src/utils/icon.ts +0 -13
  309. package/src/utils/index.ts +0 -7
  310. package/src/utils/json.ts +0 -251
  311. package/src/utils/label.tsx +0 -36
  312. package/src/utils/parse.ts +0 -72
  313. package/src/utils/react-hooks.ts +0 -118
  314. package/src/variable/index.ts +0 -1
  315. package/src/variable/variable.ts +0 -84
  316. package/src/window/index.ts +0 -34
  317. package/src/window/window.service.ts +0 -100
@@ -1,517 +0,0 @@
1
- import { Autowired, Injectable } from '@opensumi/di';
2
- import {
3
- AllowedExtension,
4
- IAuthenticationService,
5
- IAuthenticationProvider,
6
- AuthenticationSessionsChangeEvent,
7
- AuthenticationSession,
8
- IAccountUsage,
9
- StorageProvider,
10
- IStorage,
11
- URI,
12
- STORAGE_SCHEMA,
13
- ILogger,
14
- IEventBus,
15
- ExtensionActivateEvent,
16
- Event,
17
- Emitter,
18
- AuthenticationProviderInformation,
19
- Disposable,
20
- SessionRequestInfo,
21
- formatLocalize,
22
- CommandRegistry,
23
- IDisposable,
24
- noAccountsId,
25
- DisposableCollection,
26
- } from '@opensumi/ide-core-common';
27
-
28
- import { IMenuRegistry, MenuId } from '../menu/next';
29
-
30
- @Injectable()
31
- export class AuthenticationService extends Disposable implements IAuthenticationService {
32
- @Autowired(ILogger)
33
- protected readonly logger: ILogger;
34
-
35
- @Autowired(StorageProvider)
36
- protected readonly getStorage: StorageProvider;
37
-
38
- @Autowired(IEventBus)
39
- protected readonly eventBus: IEventBus;
40
-
41
- @Autowired(IMenuRegistry)
42
- protected readonly menus: IMenuRegistry;
43
-
44
- @Autowired(CommandRegistry)
45
- protected readonly commands: CommandRegistry;
46
-
47
- private _onDidRegisterAuthenticationProvider: Emitter<AuthenticationProviderInformation> = this.registerDispose(
48
- new Emitter<AuthenticationProviderInformation>(),
49
- );
50
- public readonly onDidRegisterAuthenticationProvider: Event<AuthenticationProviderInformation> =
51
- this._onDidRegisterAuthenticationProvider.event;
52
-
53
- private _onDidUnregisterAuthenticationProvider: Emitter<AuthenticationProviderInformation> = this.registerDispose(
54
- new Emitter<AuthenticationProviderInformation>(),
55
- );
56
- readonly onDidUnregisterAuthenticationProvider: Event<AuthenticationProviderInformation> =
57
- this._onDidUnregisterAuthenticationProvider.event;
58
-
59
- private _onDidChangeSessions: Emitter<{
60
- providerId: string;
61
- label: string;
62
- event: AuthenticationSessionsChangeEvent;
63
- }> = this.registerDispose(
64
- new Emitter<{ providerId: string; label: string; event: AuthenticationSessionsChangeEvent }>(),
65
- );
66
- readonly onDidChangeSessions: Event<{ providerId: string; label: string; event: AuthenticationSessionsChangeEvent }> =
67
- this._onDidChangeSessions.event;
68
-
69
- private _storage: IStorage;
70
-
71
- private _authenticationProviders: Map<string, IAuthenticationProvider> = new Map<string, IAuthenticationProvider>();
72
-
73
- private _signInRequestItems = new Map<string, SessionRequestInfo>();
74
-
75
- private _noAccountsMenuItem: IDisposable | undefined;
76
-
77
- async initialize() {
78
- this._storage = await this.getStorage(new URI('authentication').withScheme(STORAGE_SCHEMA.GLOBAL));
79
- const disposableMap = new Map<string, DisposableCollection>();
80
- this.onDidChangeSessions(async (e) => {
81
- if (e.event.added.length > 0) {
82
- const sessions = await this.getSessions(e.providerId);
83
- sessions.forEach((session) => {
84
- if (sessions.find((s) => disposableMap.get(s.id))) {
85
- return;
86
- }
87
- const disposables = new DisposableCollection();
88
- const signOutCommandId = `account-sign-out-${e.providerId}-${session.id}`;
89
- const signOutCommand = this.commands.registerCommand(
90
- {
91
- id: signOutCommandId,
92
- label: formatLocalize('authentication.signOut', e.label),
93
- },
94
- {
95
- execute: async () => {
96
- await this.signOutOfAccount(e.providerId, session.account.label);
97
- },
98
- },
99
- );
100
- const manageTrustedCommandId = `manage-trusted-${e.providerId}-${session.id}`;
101
- const manageTrustedCommand = this.commands.registerCommand(
102
- {
103
- id: manageTrustedCommandId,
104
- label: '%authentication.manageTrustedExtensions%',
105
- },
106
- {
107
- execute: async () => {
108
- await this.manageTrustedExtensionsForAccount(e.providerId, session.account.label);
109
- },
110
- },
111
- );
112
-
113
- const accountMenuId = `${e.providerId}${session.account.label}`;
114
- const accountMenu = this.menus.registerMenuItem(MenuId.AccountsContext, {
115
- submenu: accountMenuId,
116
- label: `${session.account.label} (${e.label})`,
117
- });
118
- const menuAction = this.menus.registerMenuItems(accountMenuId, [
119
- {
120
- command: manageTrustedCommandId,
121
- },
122
- {
123
- command: signOutCommandId,
124
- },
125
- ]);
126
- disposables.push(accountMenu);
127
- disposables.push(menuAction);
128
- disposables.push(signOutCommand);
129
- disposables.push(manageTrustedCommand);
130
- disposableMap.set(session.id, disposables);
131
- });
132
- }
133
- if (e.event.removed.length > 0) {
134
- e.event.removed.forEach((removed) => {
135
- const toDispose = disposableMap.get(removed.id);
136
- if (toDispose) {
137
- toDispose.dispose();
138
- disposableMap.delete(removed.id);
139
- }
140
- });
141
- }
142
- });
143
- }
144
-
145
- get storage() {
146
- return this._storage;
147
- }
148
-
149
- registerAuthenticationProvider(id: string, provider: IAuthenticationProvider) {
150
- this._authenticationProviders.set(id, provider);
151
- this._onDidRegisterAuthenticationProvider.fire({ id, label: provider.label });
152
-
153
- this.updateAccountsMenuItem();
154
- }
155
-
156
- async sessionsUpdate(providerId: string, event: AuthenticationSessionsChangeEvent) {
157
- const provider = this._authenticationProviders.get(providerId);
158
- if (provider) {
159
- this._onDidChangeSessions.fire({ providerId, label: provider.label, event });
160
- await provider.updateSessionItems(event);
161
- this.updateAccountsMenuItem();
162
-
163
- if (event.added) {
164
- await this.updateNewSessionRequests(provider);
165
- }
166
- }
167
- }
168
-
169
- private async updateNewSessionRequests(provider: IAuthenticationProvider): Promise<void> {
170
- const existingRequestsForProvider = this._signInRequestItems.get(provider.id);
171
- if (!existingRequestsForProvider) {
172
- return;
173
- }
174
-
175
- const sessions = await provider.getSessions();
176
- Object.keys(existingRequestsForProvider).forEach((requestedScopes) => {
177
- if (sessions.some((session) => session.scopes.slice().sort().join('') === requestedScopes)) {
178
- const sessionRequest = existingRequestsForProvider[requestedScopes];
179
- if (sessionRequest) {
180
- sessionRequest.disposables.forEach((item) => item.dispose());
181
- }
182
-
183
- delete existingRequestsForProvider[requestedScopes];
184
- if (Object.keys(existingRequestsForProvider).length === 0) {
185
- this._signInRequestItems.delete(provider.id);
186
- } else {
187
- this._signInRequestItems.set(provider.id, existingRequestsForProvider);
188
- }
189
- }
190
- });
191
- }
192
-
193
- private getTrustedKey(providerId: string, accountName: string) {
194
- return `trusted-${providerId}-${accountName}`;
195
- }
196
-
197
- async getAllowedExtensions(providerId: string, accountName: string) {
198
- const storageKey = this.getTrustedKey(providerId, accountName);
199
- let trustedExtensions: AllowedExtension[] = [];
200
- try {
201
- const trustedExtensionSrc = await this.storage.get<string>(storageKey);
202
- if (trustedExtensionSrc) {
203
- trustedExtensions = JSON.parse(trustedExtensionSrc);
204
- }
205
- } catch (err) {
206
- this.logger.warn('read allow extensions error: ' + err);
207
- }
208
-
209
- return trustedExtensions;
210
- }
211
-
212
- async setAllowedExtensions(providerId: string, accountName: string, allowList: AllowedExtension[]) {
213
- const storageKey = this.getTrustedKey(providerId, accountName);
214
- await this.storage.set(storageKey, JSON.stringify(allowList));
215
- }
216
-
217
- async removeAllowedExtensions(providerId: string, accountName: string) {
218
- const storageKey = this.getTrustedKey(providerId, accountName);
219
- await this.storage.delete(storageKey);
220
- }
221
-
222
- async updatedAllowedExtension(
223
- providerId: string,
224
- accountName: string,
225
- extensionId: string,
226
- extensionName: string,
227
- isAllowed: boolean,
228
- ) {
229
- const allowList = await this.getAllowedExtensions(providerId, accountName);
230
- const index = allowList.findIndex((extension) => extension.id === extensionId);
231
- if (index === -1) {
232
- allowList.push({ id: extensionId, name: extensionName, allowed: isAllowed });
233
- } else {
234
- allowList[index].allowed = isAllowed;
235
- }
236
- await this.setAllowedExtensions(providerId, accountName, allowList);
237
- }
238
-
239
- async isAccessAllowed(providerId: string, accountName: string, extensionId: string) {
240
- const allowList = await this.getAllowedExtensions(providerId, accountName);
241
- const extensionData = allowList.find((extension) => extension.id === extensionId);
242
- if (extensionData) {
243
- // This property didn't exist on this data previously, inclusion in the list at all indicates allowance
244
- return extensionData.allowed !== undefined ? extensionData.allowed : true;
245
- }
246
- // TODO: Need to allow access to whitelist extension
247
- return false;
248
- }
249
-
250
- private async tryActivateProvider(providerId: string): Promise<IAuthenticationProvider> {
251
- await this.eventBus.fireAndAwait(new ExtensionActivateEvent({ topic: 'onView', data: providerId }));
252
- let provider = this._authenticationProviders.get(providerId);
253
- if (provider) {
254
- return provider;
255
- }
256
-
257
- // When activate has completed, the extension has made the call to `registerAuthenticationProvider`.
258
- // However, activate cannot block on this, so the renderer may not have gotten the event yet.
259
- const didRegister: Promise<IAuthenticationProvider> = new Promise((resolve, _) => {
260
- this.onDidRegisterAuthenticationProvider((e) => {
261
- if (e.id === providerId) {
262
- provider = this._authenticationProviders.get(providerId);
263
- if (provider) {
264
- resolve(provider);
265
- } else {
266
- throw new Error(`No authentication provider '${providerId}' is currently registered.`);
267
- }
268
- }
269
- });
270
- });
271
-
272
- const didTimeout: Promise<IAuthenticationProvider> = new Promise((_, reject) => {
273
- setTimeout(() => {
274
- reject(new Error(`didRegister ${providerId} timeout`));
275
- }, 5000);
276
- });
277
-
278
- return Promise.race([didRegister, didTimeout]);
279
- }
280
-
281
- async getSessions(providerId: string): Promise<ReadonlyArray<AuthenticationSession>> {
282
- try {
283
- const authProvider =
284
- this._authenticationProviders.get(providerId) || (await this.tryActivateProvider(providerId));
285
- return await authProvider.getSessions();
286
- } catch (_) {
287
- throw new Error(`No authentication provider '${providerId}' is currently registered.`);
288
- }
289
- }
290
-
291
- isAuthenticationProviderRegistered(id: string): boolean {
292
- return this._authenticationProviders.has(id);
293
- }
294
- getProviderIds(): string[] {
295
- const providerIds: string[] = [];
296
- this._authenticationProviders.forEach((provider) => {
297
- providerIds.push(provider.id);
298
- });
299
- return providerIds;
300
- }
301
- unregisterAuthenticationProvider(id: string): void {
302
- const provider = this._authenticationProviders.get(id);
303
- if (provider) {
304
- provider.dispose();
305
- this._authenticationProviders.delete(id);
306
- this._onDidUnregisterAuthenticationProvider.fire({ id, label: provider.label });
307
- this.updateAccountsMenuItem();
308
- }
309
- }
310
-
311
- private updateAccountsMenuItem(): void {
312
- let hasSession = false;
313
- this._authenticationProviders.forEach((provider) => {
314
- hasSession = hasSession || provider.hasSessions();
315
- });
316
-
317
- if (hasSession && this._noAccountsMenuItem) {
318
- this._noAccountsMenuItem.dispose();
319
- this._noAccountsMenuItem = undefined;
320
- }
321
-
322
- if (!hasSession && !this._noAccountsMenuItem) {
323
- this._noAccountsMenuItem = this.menus.registerMenuItem(MenuId.AccountsContext, {
324
- group: '0_accounts',
325
- command: noAccountsId,
326
- });
327
- }
328
- }
329
-
330
- async requestNewSession(providerId: string, scopes: string[], extensionId: string, extensionName: string) {
331
- let provider = this._authenticationProviders.get(providerId);
332
- if (!provider) {
333
- // Activate has already been called for the authentication provider, but it cannot block on registering itself
334
- // since this is sync and returns a disposable. So, wait for registration event to fire that indicates the
335
- // provider is now in the map.
336
- await new Promise<void>((resolve, _) => {
337
- this.onDidRegisterAuthenticationProvider((e) => {
338
- if (e.id === providerId) {
339
- provider = this._authenticationProviders.get(providerId);
340
- resolve();
341
- }
342
- });
343
- });
344
- }
345
-
346
- if (provider) {
347
- const providerRequests = this._signInRequestItems.get(providerId);
348
- const scopesList = scopes.sort().join('');
349
- const extensionHasExistingRequest =
350
- providerRequests &&
351
- providerRequests[scopesList] &&
352
- providerRequests[scopesList].requestingExtensionIds.includes(extensionId);
353
-
354
- if (extensionHasExistingRequest) {
355
- return;
356
- }
357
-
358
- const signInCommand = this.commands.registerCommand(
359
- {
360
- id: `${extensionId}signIn`,
361
- label: formatLocalize('authentication.signInRequests', extensionName),
362
- },
363
- {
364
- execute: async () => {
365
- const session = await this.login(providerId, scopes);
366
- const accountName = session.account.label;
367
- // Add extension to allow list since user explicitly signed in on behalf of it
368
- const allowList = await this.getAllowedExtensions(providerId, accountName);
369
- if (!allowList.find((allowed) => allowed.id === extensionId)) {
370
- allowList.push({ id: extensionId, name: extensionName });
371
- await this.setAllowedExtensions(providerId, accountName, allowList);
372
- }
373
-
374
- // And also set it as the preferred account for the extension
375
- await this.setExtensionSessionId(extensionName, providerId, session.id);
376
- },
377
- },
378
- );
379
-
380
- const menuItem = this.menus.registerMenuItem(MenuId.AccountsContext, {
381
- group: '2_signInRequests',
382
- command: `${extensionId}signIn`,
383
- });
384
-
385
- if (providerRequests) {
386
- const existingRequest = providerRequests[scopesList] || { disposables: [], requestingExtensionIds: [] };
387
-
388
- providerRequests[scopesList] = {
389
- disposables: [...existingRequest.disposables, menuItem, signInCommand],
390
- requestingExtensionIds: [...existingRequest.requestingExtensionIds, extensionId],
391
- };
392
- this._signInRequestItems.set(providerId, providerRequests);
393
- } else {
394
- this._signInRequestItems.set(providerId, {
395
- [scopesList]: {
396
- disposables: [menuItem, signInCommand],
397
- requestingExtensionIds: [extensionId],
398
- },
399
- });
400
- }
401
- }
402
- }
403
- getLabel(providerId: string): string {
404
- const authProvider = this._authenticationProviders.get(providerId);
405
- if (authProvider) {
406
- return authProvider.label;
407
- } else {
408
- throw new Error(`No authentication provider '${providerId}' has been declared.`);
409
- }
410
- }
411
- supportsMultipleAccounts(providerId: string): boolean {
412
- const authProvider = this._authenticationProviders.get(providerId);
413
- if (authProvider) {
414
- return authProvider.supportsMultipleAccounts;
415
- } else {
416
- throw new Error(`No authentication provider '${providerId}' is currently registered.`);
417
- }
418
- }
419
- async login(providerId: string, scopes: string[]): Promise<AuthenticationSession> {
420
- try {
421
- const authProvider =
422
- this._authenticationProviders.get(providerId) || (await this.tryActivateProvider(providerId));
423
- return await authProvider.login(scopes);
424
- } catch (err) {
425
- throw new Error(
426
- `No authentication provider '${providerId}' is currently registered, error messge: ${err.message}`,
427
- );
428
- }
429
- }
430
- logout(providerId: string, sessionId: string): Promise<void> {
431
- const authProvider = this._authenticationProviders.get(providerId);
432
- if (authProvider) {
433
- return authProvider.logout(sessionId);
434
- } else {
435
- throw new Error(`No authentication provider '${providerId}' is currently registered.`);
436
- }
437
- }
438
- manageTrustedExtensionsForAccount(providerId: string, accountName: string): Promise<void> {
439
- const authProvider = this._authenticationProviders.get(providerId);
440
- if (authProvider) {
441
- return authProvider.manageTrustedExtensions(accountName);
442
- } else {
443
- throw new Error(`No authentication provider '${providerId}' is currently registered.`);
444
- }
445
- }
446
- signOutOfAccount(providerId: string, accountName: string): Promise<void> {
447
- const authProvider = this._authenticationProviders.get(providerId);
448
- if (authProvider) {
449
- return authProvider.signOut(accountName);
450
- } else {
451
- throw new Error(`No authentication provider '${providerId}' is currently registered.`);
452
- }
453
- }
454
-
455
- private getUsagesKey(providerId: string, accountName: string) {
456
- return `usages-${providerId}-${accountName}`;
457
- }
458
-
459
- async getAccountUsages(providerId: string, accountName: string) {
460
- const accountKey = this.getUsagesKey(providerId, accountName);
461
- const storedUsages = await this.storage.get<string>(accountKey);
462
- let usages: IAccountUsage[] = [];
463
- if (storedUsages) {
464
- try {
465
- usages = JSON.parse(storedUsages);
466
- } catch (err) {
467
- this.logger.warn('parse account usages error: ' + err);
468
- }
469
- }
470
-
471
- return usages;
472
- }
473
-
474
- async addAccountUsage(providerId: string, accountName: string, extensionId: string, extensionName: string) {
475
- const accountKey = this.getUsagesKey(providerId, accountName);
476
- const usages = await this.getAccountUsages(providerId, accountName);
477
-
478
- const existingUsageIndex = usages.findIndex((usage) => usage.extensionId === extensionId);
479
- if (existingUsageIndex > -1) {
480
- usages.splice(existingUsageIndex, 1, {
481
- extensionId,
482
- extensionName,
483
- lastUsed: Date.now(),
484
- });
485
- } else {
486
- usages.push({
487
- extensionId,
488
- extensionName,
489
- lastUsed: Date.now(),
490
- });
491
- }
492
-
493
- await this.storage.set(accountKey, JSON.stringify(usages));
494
- }
495
-
496
- async removeAccountUsage(providerId: string, accountName: string) {
497
- const accountKey = this.getUsagesKey(providerId, accountName);
498
- await this.storage.delete(accountKey);
499
- }
500
-
501
- private getExtensionSessionIdKey(providerId: string, accountName: string) {
502
- return `session-${providerId}-${accountName}`;
503
- }
504
-
505
- async getExtensionSessionId(extensionName: string, providerId: string): Promise<string | undefined> {
506
- const accountKey = this.getExtensionSessionIdKey(extensionName, providerId);
507
- return await this.storage.get(accountKey);
508
- }
509
- async setExtensionSessionId(extensionName: string, providerId: string, sessionId: string): Promise<void> {
510
- const accountKey = this.getExtensionSessionIdKey(extensionName, providerId);
511
- await this.storage.set(accountKey, sessionId);
512
- }
513
- async removeExtensionSessionId(extensionName: string, providerId: string): Promise<void> {
514
- const accountKey = this.getExtensionSessionIdKey(extensionName, providerId);
515
- await this.storage.delete(accountKey);
516
- }
517
- }