@opensumi/ide-core-browser 2.21.5-rc-1669016550.0 → 2.21.5

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 (310) hide show
  1. package/lib/common/common.command.d.ts +0 -1
  2. package/lib/common/common.command.d.ts.map +1 -1
  3. package/lib/common/common.command.js +0 -5
  4. package/lib/common/common.command.js.map +1 -1
  5. package/lib/components/actions/index.js +1 -1
  6. package/lib/components/actions/index.js.map +1 -1
  7. package/lib/contextkey/testing.d.ts +0 -1
  8. package/lib/contextkey/testing.d.ts.map +1 -1
  9. package/lib/contextkey/testing.js +1 -2
  10. package/lib/contextkey/testing.js.map +1 -1
  11. package/lib/keyboard/keyboard-layout-service.d.ts +1 -1
  12. package/lib/keyboard/keyboard-layout-service.js +1 -1
  13. package/lib/menu/next/renderer/ctxmenu/electron.d.ts.map +1 -1
  14. package/lib/menu/next/renderer/ctxmenu/electron.js +7 -1
  15. package/lib/menu/next/renderer/ctxmenu/electron.js.map +1 -1
  16. package/package.json +9 -9
  17. package/src/application/application-state-service.ts +0 -54
  18. package/src/application/application.service.ts +0 -51
  19. package/src/application/index.ts +0 -2
  20. package/src/authentication/authentication.contribution.ts +0 -35
  21. package/src/authentication/authentication.service.ts +0 -517
  22. package/src/bootstrap/app.ts +0 -745
  23. package/src/bootstrap/app.view.tsx +0 -88
  24. package/src/bootstrap/connection.ts +0 -116
  25. package/src/bootstrap/index.ts +0 -3
  26. package/src/bootstrap/inner-providers.ts +0 -297
  27. package/src/bootstrap/lifecycle.service.ts +0 -19
  28. package/src/browser-module.ts +0 -24
  29. package/src/common/common.command.ts +0 -983
  30. package/src/common/common.contribution.ts +0 -343
  31. package/src/common/common.define.ts +0 -55
  32. package/src/common/common.module.ts +0 -33
  33. package/src/common/common.storage.ts +0 -22
  34. package/src/common/container-id.ts +0 -12
  35. package/src/common/index.ts +0 -4
  36. package/src/components/actions/index.tsx +0 -502
  37. package/src/components/actions/placements.ts +0 -47
  38. package/src/components/actions/styles.module.less +0 -144
  39. package/src/components/badge/index.tsx +0 -1
  40. package/src/components/index.ts +0 -26
  41. package/src/components/layout/box-panel.tsx +0 -88
  42. package/src/components/layout/default-layout.tsx +0 -61
  43. package/src/components/layout/index.ts +0 -4
  44. package/src/components/layout/layout.ts +0 -80
  45. package/src/components/layout/split-panel.service.ts +0 -56
  46. package/src/components/layout/split-panel.tsx +0 -296
  47. package/src/components/layout/styles.module.less +0 -21
  48. package/src/components/loading/index.ts +0 -1
  49. package/src/components/loading/loading.less +0 -14
  50. package/src/components/loading/loading.view.tsx +0 -7
  51. package/src/components/loading/media/loading-dark.svg +0 -52
  52. package/src/components/loading/media/loading-hc.svg +0 -52
  53. package/src/components/loading/media/loading.svg +0 -52
  54. package/src/components/popover/styles.module.less +0 -81
  55. package/src/components/portal/index.tsx +0 -13
  56. package/src/components/progressbar/index.tsx +0 -16
  57. package/src/components/progressbar/styles.module.less +0 -31
  58. package/src/components/recycle-tree/index.ts +0 -1
  59. package/src/components/recycle-tree/recycle-tree.view.tsx +0 -368
  60. package/src/components/resize/resize.module.less +0 -78
  61. package/src/components/resize/resize.tsx +0 -663
  62. package/src/components/scroll/index.tsx +0 -386
  63. package/src/components/scroll/scroll.module.less +0 -108
  64. package/src/components/scrollbar/index.ts +0 -1
  65. package/src/components/scrollbar/scrollbar.less +0 -36
  66. package/src/components/scrollbar/scrollbar.view.ts +0 -8
  67. package/src/components/select/index.tsx +0 -12
  68. package/src/components/select/styles.less +0 -6
  69. package/src/components/tree/index.ts +0 -3
  70. package/src/components/tree/tree-node.view.tsx +0 -546
  71. package/src/components/tree/tree.module.less +0 -296
  72. package/src/components/tree/tree.view.tsx +0 -486
  73. package/src/context-key.ts +0 -48
  74. package/src/contextkey/dialog.ts +0 -3
  75. package/src/contextkey/explorer.ts +0 -26
  76. package/src/contextkey/index.ts +0 -6
  77. package/src/contextkey/outline.ts +0 -4
  78. package/src/contextkey/resource.ts +0 -61
  79. package/src/contextkey/terminal.ts +0 -7
  80. package/src/contextkey/testing.ts +0 -9
  81. package/src/contextkey/workspace.ts +0 -7
  82. package/src/core-preferences.ts +0 -318
  83. package/src/dom/index.ts +0 -176
  84. package/src/encoding-registry.ts +0 -83
  85. package/src/extensions/extensions-point.service.ts +0 -78
  86. package/src/extensions/index.ts +0 -3
  87. package/src/extensions/schema/browserViews.ts +0 -96
  88. package/src/extensions/schema/menu.ts +0 -245
  89. package/src/extensions/schema/opensumiExtensionPackageSchema.ts +0 -12
  90. package/src/extensions/schema/toolbar.ts +0 -338
  91. package/src/extensions/schema/vscodeExtensionPackageSchema.ts +0 -330
  92. package/src/fs/index.ts +0 -12
  93. package/src/hash-calculate/hash-calculate.contribution.ts +0 -19
  94. package/src/index.ts +0 -42
  95. package/src/keybinding/index.ts +0 -1
  96. package/src/keybinding/keybinding.ts +0 -908
  97. package/src/keyboard/index.ts +0 -3
  98. package/src/keyboard/keyboard-layout-provider.ts +0 -412
  99. package/src/keyboard/keyboard-layout-service.ts +0 -449
  100. package/src/keyboard/keys.ts +0 -748
  101. package/src/keyboard/layouts/_.contribution.ts +0 -24
  102. package/src/keyboard/layouts/cz.win.ts +0 -168
  103. package/src/keyboard/layouts/de-swiss.win.ts +0 -168
  104. package/src/keyboard/layouts/de.darwin.ts +0 -131
  105. package/src/keyboard/layouts/de.linux.ts +0 -186
  106. package/src/keyboard/layouts/de.win.ts +0 -168
  107. package/src/keyboard/layouts/dk.win.ts +0 -168
  108. package/src/keyboard/layouts/dvorak.darwin.ts +0 -131
  109. package/src/keyboard/layouts/en-belgian.win.ts +0 -168
  110. package/src/keyboard/layouts/en-ext.darwin.ts +0 -131
  111. package/src/keyboard/layouts/en-in.win.ts +0 -168
  112. package/src/keyboard/layouts/en-intl.darwin.ts +0 -131
  113. package/src/keyboard/layouts/en-intl.win.ts +0 -168
  114. package/src/keyboard/layouts/en-uk.darwin.ts +0 -131
  115. package/src/keyboard/layouts/en-uk.win.ts +0 -168
  116. package/src/keyboard/layouts/en.darwin.ts +0 -139
  117. package/src/keyboard/layouts/en.linux.ts +0 -186
  118. package/src/keyboard/layouts/en.win.ts +0 -173
  119. package/src/keyboard/layouts/es-latin.win.ts +0 -168
  120. package/src/keyboard/layouts/es.darwin.ts +0 -131
  121. package/src/keyboard/layouts/es.linux.ts +0 -186
  122. package/src/keyboard/layouts/es.win.ts +0 -168
  123. package/src/keyboard/layouts/fr.darwin.ts +0 -131
  124. package/src/keyboard/layouts/fr.linux.ts +0 -186
  125. package/src/keyboard/layouts/fr.win.ts +0 -168
  126. package/src/keyboard/layouts/hu.win.ts +0 -168
  127. package/src/keyboard/layouts/it.darwin.ts +0 -131
  128. package/src/keyboard/layouts/it.win.ts +0 -168
  129. package/src/keyboard/layouts/jp-roman.darwin.ts +0 -131
  130. package/src/keyboard/layouts/jp.darwin.ts +0 -131
  131. package/src/keyboard/layouts/ko.darwin.ts +0 -131
  132. package/src/keyboard/layouts/layout.contribution.darwin.ts +0 -23
  133. package/src/keyboard/layouts/layout.contribution.linux.ts +0 -12
  134. package/src/keyboard/layouts/layout.contribution.ts +0 -9
  135. package/src/keyboard/layouts/layout.contribution.win.ts +0 -29
  136. package/src/keyboard/layouts/no.win.ts +0 -168
  137. package/src/keyboard/layouts/pl.darwin.ts +0 -131
  138. package/src/keyboard/layouts/pl.win.ts +0 -168
  139. package/src/keyboard/layouts/pt-br.win.ts +0 -169
  140. package/src/keyboard/layouts/pt.darwin.ts +0 -131
  141. package/src/keyboard/layouts/pt.win.ts +0 -168
  142. package/src/keyboard/layouts/ru.darwin.ts +0 -131
  143. package/src/keyboard/layouts/ru.linux.ts +0 -186
  144. package/src/keyboard/layouts/ru.win.ts +0 -168
  145. package/src/keyboard/layouts/sv.darwin.ts +0 -131
  146. package/src/keyboard/layouts/sv.win.ts +0 -168
  147. package/src/keyboard/layouts/thai.win.ts +0 -168
  148. package/src/keyboard/layouts/tr.win.ts +0 -168
  149. package/src/keyboard/layouts/zh-hans.darwin.ts +0 -131
  150. package/src/layout/accordion/tab-bar-toolbar.tsx +0 -59
  151. package/src/layout/accordion/view-context-key.registry.ts +0 -34
  152. package/src/layout/constants.ts +0 -7
  153. package/src/layout/index.ts +0 -5
  154. package/src/layout/layout-hooks.ts +0 -68
  155. package/src/layout/layout-state.ts +0 -107
  156. package/src/layout/layout.interface.ts +0 -101
  157. package/src/layout/layout.ts +0 -80
  158. package/src/layout/view-id.ts +0 -18
  159. package/src/logger/browser-logger.ts +0 -51
  160. package/src/logger/index.ts +0 -1
  161. package/src/markdown/index.tsx +0 -62
  162. package/src/menu/next/base.ts +0 -513
  163. package/src/menu/next/ctxmenu-service.ts +0 -188
  164. package/src/menu/next/index.ts +0 -10
  165. package/src/menu/next/menu-id.ts +0 -86
  166. package/src/menu/next/menu-service.ts +0 -252
  167. package/src/menu/next/menu-util.ts +0 -77
  168. package/src/menu/next/menu.contrib.interface.ts +0 -78
  169. package/src/menu/next/menu.interface.ts +0 -253
  170. package/src/menu/next/menubar-service.ts +0 -211
  171. package/src/menu/next/renderer/ctxmenu/base.ts +0 -18
  172. package/src/menu/next/renderer/ctxmenu/browser.ts +0 -45
  173. package/src/menu/next/renderer/ctxmenu/electron.ts +0 -201
  174. package/src/menu/next/toolbar-action.service.ts +0 -132
  175. package/src/monaco/index.ts +0 -128
  176. package/src/opener/command-opener.ts +0 -42
  177. package/src/opener/default-opener.ts +0 -31
  178. package/src/opener/http-opener.ts +0 -25
  179. package/src/opener/index.ts +0 -19
  180. package/src/opener/opener.contribution.ts +0 -57
  181. package/src/opener/opener.service.ts +0 -66
  182. package/src/preferences/early-preferences.ts +0 -117
  183. package/src/preferences/index.ts +0 -9
  184. package/src/preferences/preference-configurations.ts +0 -77
  185. package/src/preferences/preference-contribution.ts +0 -401
  186. package/src/preferences/preference-provider.ts +0 -414
  187. package/src/preferences/preference-proxy.ts +0 -292
  188. package/src/preferences/preference-scope.ts +0 -3
  189. package/src/preferences/preference-service.ts +0 -571
  190. package/src/preferences/settings.ts +0 -53
  191. package/src/preferences/types.ts +0 -111
  192. package/src/progress/index.ts +0 -58
  193. package/src/progress/progress-bar.tsx +0 -22
  194. package/src/progress/progress-indicator.ts +0 -90
  195. package/src/progress/progress.module.less +0 -46
  196. package/src/progress/progress.service.tsx +0 -429
  197. package/src/quick-open/index.ts +0 -655
  198. package/src/quick-open/recent-files.ts +0 -68
  199. package/src/raw-context-key.ts +0 -116
  200. package/src/react-hooks/event.tsx +0 -80
  201. package/src/react-hooks/hot-key.tsx +0 -58
  202. package/src/react-hooks/index.ts +0 -3
  203. package/src/react-hooks/injectable-hooks.tsx +0 -35
  204. package/src/react-hooks/portal-hooks.tsx +0 -38
  205. package/src/react-providers/config-provider.tsx +0 -259
  206. package/src/react-providers/index.tsx +0 -2
  207. package/src/react-providers/slot.module.less +0 -19
  208. package/src/react-providers/slot.tsx +0 -242
  209. package/src/services/clipboard.service.ts +0 -97
  210. package/src/services/credentials-service.ts +0 -91
  211. package/src/services/crypto-service.ts +0 -23
  212. package/src/services/external-uri.service.ts +0 -68
  213. package/src/services/index.ts +0 -7
  214. package/src/services/label-service.ts +0 -386
  215. package/src/services/status-bar-service.ts +0 -108
  216. package/src/services/storage-service.ts +0 -192
  217. package/src/style/codicons/README.md +0 -22
  218. package/src/style/codicons/codicon-animations.css +0 -15
  219. package/src/style/codicons/generator.js +0 -15
  220. package/src/style/entry.less +0 -25
  221. package/src/style/icon/fileicons/file-default.svg +0 -1
  222. package/src/style/icon/fileicons/folder-default.svg +0 -1
  223. package/src/style/icon/fileicons.less +0 -20
  224. package/src/style/icon/icon.ts +0 -543
  225. package/src/style/icon/ide-iconfont.ts +0 -13
  226. package/src/style/icon/index.less +0 -54
  227. package/src/style/icon/seti.woff +0 -0
  228. package/src/style/icon/symbol-icons/boolean-dark.svg +0 -3
  229. package/src/style/icon/symbol-icons/boolean-light.svg +0 -3
  230. package/src/style/icon/symbol-icons/class-dark.svg +0 -3
  231. package/src/style/icon/symbol-icons/class-light.svg +0 -3
  232. package/src/style/icon/symbol-icons/constant-dark.svg +0 -4
  233. package/src/style/icon/symbol-icons/constant-light.svg +0 -4
  234. package/src/style/icon/symbol-icons/enumerator-dark.svg +0 -3
  235. package/src/style/icon/symbol-icons/enumerator-item-dark.svg +0 -3
  236. package/src/style/icon/symbol-icons/enumerator-item-light.svg +0 -3
  237. package/src/style/icon/symbol-icons/enumerator-light.svg +0 -3
  238. package/src/style/icon/symbol-icons/event-dark.svg +0 -3
  239. package/src/style/icon/symbol-icons/event-light.svg +0 -3
  240. package/src/style/icon/symbol-icons/field-dark.svg +0 -3
  241. package/src/style/icon/symbol-icons/field-light.svg +0 -3
  242. package/src/style/icon/symbol-icons/file-dark.svg +0 -3
  243. package/src/style/icon/symbol-icons/file-light.svg +0 -3
  244. package/src/style/icon/symbol-icons/indexer-dark.svg +0 -3
  245. package/src/style/icon/symbol-icons/indexer-light.svg +0 -3
  246. package/src/style/icon/symbol-icons/interface-dark.svg +0 -3
  247. package/src/style/icon/symbol-icons/interface-light.svg +0 -3
  248. package/src/style/icon/symbol-icons/keyword-dark.svg +0 -3
  249. package/src/style/icon/symbol-icons/keyword-light.svg +0 -3
  250. package/src/style/icon/symbol-icons/method-dark.svg +0 -3
  251. package/src/style/icon/symbol-icons/method-light.svg +0 -3
  252. package/src/style/icon/symbol-icons/namespace-dark.svg +0 -3
  253. package/src/style/icon/symbol-icons/namespace-light.svg +0 -3
  254. package/src/style/icon/symbol-icons/numeric-dark.svg +0 -3
  255. package/src/style/icon/symbol-icons/numeric-light.svg +0 -3
  256. package/src/style/icon/symbol-icons/operator-dark.svg +0 -3
  257. package/src/style/icon/symbol-icons/operator-light.svg +0 -3
  258. package/src/style/icon/symbol-icons/property-dark.svg +0 -3
  259. package/src/style/icon/symbol-icons/property-light.svg +0 -3
  260. package/src/style/icon/symbol-icons/snippet-dark.svg +0 -3
  261. package/src/style/icon/symbol-icons/snippet-light.svg +0 -3
  262. package/src/style/icon/symbol-icons/string-dark.svg +0 -3
  263. package/src/style/icon/symbol-icons/string-light.svg +0 -3
  264. package/src/style/icon/symbol-icons/structure-dark.svg +0 -3
  265. package/src/style/icon/symbol-icons/structure-light.svg +0 -3
  266. package/src/style/icon/symbol-icons/symbol-icons.css +0 -284
  267. package/src/style/icon/symbol-icons/template-dark.svg +0 -3
  268. package/src/style/icon/symbol-icons/template-light.svg +0 -3
  269. package/src/style/icon/symbol-icons/variable-dark.svg +0 -3
  270. package/src/style/icon/symbol-icons/variable-light.svg +0 -3
  271. package/src/style/icon.less +0 -8
  272. package/src/style/index.less +0 -14
  273. package/src/style/monaco-override.less +0 -116
  274. package/src/style/normalize.less +0 -92
  275. package/src/style/octicons/octicons-cdn.css +0 -720
  276. package/src/style/octicons/octicons.css +0 -714
  277. package/src/style/octicons/octicons.html +0 -1882
  278. package/src/style/octicons/octicons.svg +0 -582
  279. package/src/style/octicons/octicons.ttf +0 -0
  280. package/src/style/override.less +0 -97
  281. package/src/style/toolbar.less +0 -199
  282. package/src/style/utilities.less +0 -8
  283. package/src/style/variable.less +0 -8
  284. package/src/terminal/index.ts +0 -7
  285. package/src/toolbar/components/auto-complete.tsx +0 -0
  286. package/src/toolbar/components/button.tsx +0 -440
  287. package/src/toolbar/components/index.ts +0 -2
  288. package/src/toolbar/components/select.tsx +0 -189
  289. package/src/toolbar/index.ts +0 -3
  290. package/src/toolbar/toolbar.popover.registry.ts +0 -32
  291. package/src/toolbar/toolbar.registry.ts +0 -352
  292. package/src/toolbar/toolbar.tsx +0 -710
  293. package/src/toolbar/types.ts +0 -383
  294. package/src/tree/index.ts +0 -3
  295. package/src/tree/tree-expansion.ts +0 -25
  296. package/src/tree/tree-selection.ts +0 -89
  297. package/src/tree/tree.ts +0 -294
  298. package/src/utils/create-overlay.tsx +0 -53
  299. package/src/utils/electron.ts +0 -92
  300. package/src/utils/env.ts +0 -26
  301. package/src/utils/icon.ts +0 -13
  302. package/src/utils/index.ts +0 -7
  303. package/src/utils/json.ts +0 -251
  304. package/src/utils/label.tsx +0 -27
  305. package/src/utils/parse.ts +0 -72
  306. package/src/utils/react-hooks.ts +0 -118
  307. package/src/variable/index.ts +0 -1
  308. package/src/variable/variable.ts +0 -84
  309. package/src/window/index.ts +0 -34
  310. 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
- }