iobroker.javascript 10.0.0 → 10.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +48 -12
  2. package/admin/assets/AiChatPanel-C_WbKMGX.js +242 -0
  3. package/admin/assets/AiDiffView-BtXbDWZ8.js +1 -0
  4. package/admin/assets/Debugger-DAdJnEhw.js +15 -0
  5. package/admin/assets/Error-DQ1pzKcf.js +1 -0
  6. package/admin/assets/Import-BjMtH6Gk.js +1 -0
  7. package/admin/assets/RulesEditor-dDRPHw4X.js +1 -0
  8. package/admin/assets/RulesEditor-k-DMHotH.css +1 -0
  9. package/admin/assets/{ScriptEditor-BGIuoNei.js → ScriptEditor-CZSc7rwE.js} +2 -2
  10. package/admin/assets/ScriptEditorVanillaMonaco-DEKg14_A.js +3 -0
  11. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-DPmwd_G2.js +1 -0
  12. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-C8inUeKt.js +1243 -0
  13. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-VcQjt7_9.js +9 -0
  14. package/admin/assets/aiPromptBuilder-D5FDo74i.js +1 -0
  15. package/admin/assets/blockly-DBw-ytY1.js +1047 -0
  16. package/admin/assets/blocks_action-BqfWEwpf.js +1 -0
  17. package/admin/assets/blocks_convert-CX0i-JfS.js +3 -0
  18. package/admin/assets/blocks_logic-D-QSzw95.js +1 -0
  19. package/admin/assets/blocks_number-D7JuNYsw.js +1 -0
  20. package/admin/assets/blocks_object-C9DzAlc7.js +1 -0
  21. package/admin/assets/blocks_procedures-BJMz6HWW.js +3 -0
  22. package/admin/assets/blocks_sendto-DRh7lk9o.js +5 -0
  23. package/admin/assets/blocks_switch-BfmboMex.js +2 -0
  24. package/admin/assets/blocks_system-B-78JfAc.js +1 -0
  25. package/admin/assets/blocks_text-CGbR0Ozw.js +1 -0
  26. package/admin/assets/blocks_time-5vS2geJg.js +1 -0
  27. package/admin/assets/blocks_timeout-BdaTywfN.js +1 -0
  28. package/admin/assets/blocks_trigger-D8kgHKbg.js +2 -0
  29. package/admin/assets/blocks_words-BhHIf_1o.js +1 -0
  30. package/admin/assets/{cronHoverProvider-pKJkSevo.js → cronHoverProvider-DpgESCox.js} +1 -1
  31. package/admin/assets/dist-CaOsN0XW.js +4 -0
  32. package/admin/assets/field_cron-B40zwSfJ.js +1 -0
  33. package/admin/assets/field_oid-KfoBnEM9.js +1 -0
  34. package/admin/assets/field_script-yXhe1iCp.js +1 -0
  35. package/admin/assets/helpers-B0ByElPJ.js +1 -0
  36. package/admin/assets/hostInit-9REPDUe7.js +1 -0
  37. package/admin/assets/index-07o_WKsX.js +726 -0
  38. package/admin/assets/index-Z8Hkv58g.css +1 -0
  39. package/admin/assets/{inlineChatWidget-ZaisTOLh.js → inlineChatWidget-B9y_gQcH.js} +2 -2
  40. package/admin/assets/{inlineDiffController-hTwHHqcc.js → inlineDiffController-C07CdIFo.js} +2 -2
  41. package/admin/assets/{mf-entry-bootstrap-0-d6052b31.js → mf-entry-bootstrap-0-efcb49d3.js} +7 -2
  42. package/admin/assets/stateHoverProvider-CqeoOjXs.js +9 -0
  43. package/admin/assets/{virtualExposes-Ed0lGq7k.js → virtualExposes-DgGB-18P.js} +1 -1
  44. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-BwSvIKEV.js +1 -0
  45. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-ChiJXsfH.js +1 -0
  46. package/admin/custom/assets/Components-BCQTjBgm.js +1 -0
  47. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-BuAc8OyX.js +1 -0
  48. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BGJv4zZP.js +1 -0
  49. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-CGb5Cofy.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-B4E6MFJ4.js} +1 -1
  50. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BVCIAgbo.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-aRlxyEhq.js} +78 -78
  51. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-DQwzYx75.js +1494 -0
  52. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__leaflet__loadShare__.js-h-rCw3iz.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__leaflet__loadShare__.js-n2zIPi0L.js} +1 -1
  53. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-xxszBNje.js +9 -0
  54. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__date_mf_2_fns__prebuild__-Cb5TR7FB.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__date_mf_2_fns__prebuild__-Tq7tesSS.js} +1 -1
  55. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__leaflet__prebuild__-DARUoA03.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__prebuild__leaflet__prebuild__-BeF0jEWM.js} +1 -1
  56. package/admin/custom/assets/hostInit-CHwrowP4.js +1 -0
  57. package/admin/custom/assets/{index-uEKAoVT7.js → index-Cm6xl9K4.js} +1 -1
  58. package/admin/custom/assets/{lib-Yj8cfN0A.js → lib-bhrFL6jR.js} +1 -1
  59. package/admin/custom/assets/{mf-entry-bootstrap-0-77793feb.js → mf-entry-bootstrap-0-f08941e2.js} +7 -2
  60. package/admin/custom/assets/{setYear-DJ9FbdkO.js → setYear-DzTZ2h9A.js} +1 -1
  61. package/admin/custom/assets/virtualExposes-B5LJmnfO.js +1 -0
  62. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-ML-chjs6.js +1 -0
  63. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-C3ImybiM.js +2 -0
  64. package/admin/custom/customComponents.js +12 -1
  65. package/admin/custom/i18n/de.json +11 -1
  66. package/admin/custom/i18n/en.json +11 -1
  67. package/admin/custom/i18n/es.json +11 -1
  68. package/admin/custom/i18n/fr.json +11 -1
  69. package/admin/custom/i18n/it.json +11 -1
  70. package/admin/custom/i18n/nl.json +11 -1
  71. package/admin/custom/i18n/pl.json +11 -1
  72. package/admin/custom/i18n/pt.json +11 -1
  73. package/admin/custom/i18n/ru.json +11 -1
  74. package/admin/custom/i18n/uk.json +11 -1
  75. package/admin/custom/i18n/zh-cn.json +11 -1
  76. package/admin/google-blockly/VERSION +1 -0
  77. package/admin/google-blockly/media/drop.mp3 +0 -0
  78. package/admin/google-blockly/msg/js/de.js +332 -56
  79. package/admin/google-blockly/msg/js/en.js +319 -43
  80. package/admin/google-blockly/msg/js/es.js +319 -42
  81. package/admin/google-blockly/msg/js/fr.js +315 -39
  82. package/admin/google-blockly/msg/js/it.js +327 -51
  83. package/admin/google-blockly/msg/js/nl.js +376 -100
  84. package/admin/google-blockly/msg/js/pl.js +318 -42
  85. package/admin/google-blockly/msg/js/pt.js +318 -42
  86. package/admin/google-blockly/msg/js/ru.js +320 -44
  87. package/admin/google-blockly/msg/js/uk.js +326 -50
  88. package/admin/google-blockly/msg/js/zh-cn.js +322 -46
  89. package/admin/i18n/de.json +51 -26
  90. package/admin/i18n/en.json +50 -25
  91. package/admin/i18n/es.json +51 -18
  92. package/admin/i18n/fr.json +50 -17
  93. package/admin/i18n/it.json +50 -17
  94. package/admin/i18n/nl.json +50 -17
  95. package/admin/i18n/pl.json +51 -18
  96. package/admin/i18n/pt.json +50 -17
  97. package/admin/i18n/ru.json +50 -17
  98. package/admin/i18n/uk.json +50 -17
  99. package/admin/i18n/zh-cn.json +50 -17
  100. package/admin/jsonConfig.json +398 -0
  101. package/admin/mf-manifest.json +1 -1
  102. package/admin/mf-stats.json +1 -1
  103. package/admin/remoteEntry.js +12 -1
  104. package/admin/tab.html +6 -98
  105. package/build/lib/javascript.d.ts +48 -0
  106. package/build/lib/mirror.js +9 -0
  107. package/build/lib/mirror.js.map +1 -1
  108. package/build/lib/sandbox.js +37 -0
  109. package/build/lib/sandbox.js.map +1 -1
  110. package/build/lib/secrets.js +220 -0
  111. package/build/lib/secrets.js.map +1 -0
  112. package/build/lib/typescriptSettings.js +112 -2
  113. package/build/lib/typescriptSettings.js.map +1 -1
  114. package/build/lib/typescriptTools.js +168 -43
  115. package/build/lib/typescriptTools.js.map +1 -1
  116. package/build/main.js +61 -5
  117. package/build/main.js.map +1 -1
  118. package/build/types.d.ts +48 -0
  119. package/docs/en/blockly.md +29 -0
  120. package/docs/en/javascript.md +72 -0
  121. package/docs/en/upgrade-guide.md +3 -0
  122. package/io-package.json +59 -28
  123. package/package.json +8 -3
  124. package/admin/assets/AiChatPanel-p0KAg6Cs.js +0 -237
  125. package/admin/assets/AiDiffView-BPTLnNx1.js +0 -1
  126. package/admin/assets/AiScriptAnalyzer--BHML2rN.js +0 -9
  127. package/admin/assets/BlocklyEditor-CAjVMhYT.js +0 -81
  128. package/admin/assets/ContextWrapper-BVc8wTK_.css +0 -1
  129. package/admin/assets/ContextWrapper-D9CrnNKs.js +0 -127
  130. package/admin/assets/Debugger-SjROokFI.js +0 -15
  131. package/admin/assets/Error-DDfrxAt2.js +0 -1
  132. package/admin/assets/Import-DpTg1Jow.js +0 -1
  133. package/admin/assets/RulesEditor-BSRFWpEm.css +0 -1
  134. package/admin/assets/RulesEditor-D0hgrcBc.js +0 -1
  135. package/admin/assets/ScriptEditorVanillaMonaco-DyMQtoTQ.js +0 -3
  136. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-DWJotR1B.js +0 -1
  137. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-CxICLr5Z.js +0 -1243
  138. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BBAXJaqI.js +0 -9
  139. package/admin/assets/aiCodeLensProvider-hyAmut0e.js +0 -4
  140. package/admin/assets/aiPromptBuilder-Bs27qOHT.js +0 -7
  141. package/admin/assets/blocklyDarkTheme-DEiAX5DT.js +0 -1
  142. package/admin/assets/dist-uw5orDgd.js +0 -4
  143. package/admin/assets/hostInit-BFg5u9hY.js +0 -1
  144. package/admin/assets/index-B1gICjdq.js +0 -192
  145. package/admin/assets/index-BHhhebRG.css +0 -1
  146. package/admin/assets/mjs-DWqivHEk.js +0 -90
  147. package/admin/assets/stateHoverProvider-C7DawIs-.js +0 -9
  148. package/admin/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__iobroker_javascript__remoteEntry_js-BYs71IQF.js +0 -1
  149. package/admin/assets/virtual_mf-exposes___mfe_internal__iobroker_javascript__remoteEntry_js-DnnXQRkG.js +0 -1
  150. package/admin/custom/assets/Components-BrDyDHXh.js +0 -1
  151. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-CyYJM2-v.js +0 -1
  152. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-BdzCssLn.js +0 -1
  153. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-BkB0anQX.js +0 -1494
  154. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-BotqDuw-.js +0 -9
  155. package/admin/custom/assets/hostInit-DJx2uXXy.js +0 -1
  156. package/admin/custom/assets/virtualExposes-CxDjLoYu.js +0 -1
  157. package/admin/custom/assets/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BU-ugy_7.js +0 -1
  158. package/admin/custom/assets/virtual_mf-exposes-ssr___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-BEfZbrf7.js +0 -2
  159. package/admin/custom/assets/virtual_mf-exposes___mfe_internal__ConfigCustomJavascriptSet__customComponents_js-CTeZ0Jpm.js +0 -2
  160. package/admin/google-blockly/blockly_compressed.js +0 -1679
  161. package/admin/google-blockly/blocks_compressed.js +0 -193
  162. package/admin/google-blockly/javascript_compressed.js +0 -264
  163. package/admin/google-blockly/msg/messages.js +0 -1630
  164. package/admin/google-blockly/own/blocks_action.js +0 -765
  165. package/admin/google-blockly/own/blocks_convert.js +0 -480
  166. package/admin/google-blockly/own/blocks_logic.js +0 -459
  167. package/admin/google-blockly/own/blocks_number.js +0 -30
  168. package/admin/google-blockly/own/blocks_object.js +0 -402
  169. package/admin/google-blockly/own/blocks_procedures.js +0 -688
  170. package/admin/google-blockly/own/blocks_sendto.js +0 -702
  171. package/admin/google-blockly/own/blocks_switch.js +0 -257
  172. package/admin/google-blockly/own/blocks_system.js +0 -1409
  173. package/admin/google-blockly/own/blocks_text.js +0 -104
  174. package/admin/google-blockly/own/blocks_time.js +0 -639
  175. package/admin/google-blockly/own/blocks_timeout.js +0 -551
  176. package/admin/google-blockly/own/blocks_trigger.js +0 -1791
  177. package/admin/google-blockly/own/blocks_words.js +0 -708
  178. package/admin/google-blockly/own/field_cron.js +0 -158
  179. package/admin/google-blockly/own/field_oid.js +0 -642
  180. package/admin/google-blockly/own/field_script.js +0 -159
package/build/main.js CHANGED
@@ -78,6 +78,7 @@ const protectFs_1 = __importDefault(require("./lib/protectFs"));
78
78
  const words_1 = require("./lib/words");
79
79
  const sandbox_1 = require("./lib/sandbox");
80
80
  const nodeModulesManagement_1 = require("./lib/nodeModulesManagement");
81
+ const secrets_1 = require("./lib/secrets");
81
82
  const aiProviderResolver_1 = require("./lib/aiProviderResolver");
82
83
  const anthropicAdapter_1 = require("./lib/anthropicAdapter");
83
84
  const eventObj_1 = require("./lib/eventObj");
@@ -89,7 +90,11 @@ const crypto_1 = require("./lib/crypto");
89
90
  /**
90
91
  * List of forbidden Locations for a mirror directory
91
92
  * relative to the default data directory
92
- * ATTENTION: the same list is also located in index_m.html!!
93
+ *
94
+ * ATTENTION: the same list is also in the `validator` of `mirrorPath` in `admin/jsonConfig.json`,
95
+ * which rejects such a path before it is saved. That one has to assume the default installation
96
+ * directory, because the browser cannot know where the data directory of the host is - so this check
97
+ * here is the authoritative one and stays.
93
98
  */
94
99
  const forbiddenMirrorLocations = [
95
100
  'backup-objects',
@@ -324,6 +329,11 @@ class JavaScript extends adapter_core_1.Adapter {
324
329
  aiCredentialCache = new Map();
325
330
  /** Unsubscribe callbacks for the AI credential subscriptions (manager mode). */
326
331
  aiCredentialUnsubscribers = [];
332
+ /**
333
+ * Decrypted credentials of the central ioBroker credential store (`system.credentials.*`),
334
+ * exposed to the scripts as the global `SECRETS` object. Kept up to date by `onObjectChange`.
335
+ */
336
+ secretsManager = new secrets_1.SecretsManager(this);
327
337
  globalScript = '';
328
338
  /** Generated declarations for global TypeScripts */
329
339
  globalDeclarations = '';
@@ -475,6 +485,7 @@ class JavaScript extends adapter_core_1.Adapter {
475
485
  adapter: this,
476
486
  logError: this.logError.bind(this),
477
487
  allowSelfSignedCerts: false,
488
+ secrets: this.secretsManager.secrets,
478
489
  };
479
490
  this.tsServer = new virtual_tsc_1.Server(typescriptSettings_1.tsCompilerOptions, this.tsLog);
480
491
  }
@@ -505,6 +516,16 @@ class JavaScript extends adapter_core_1.Adapter {
505
516
  this._enums.delete(id);
506
517
  }
507
518
  }
519
+ // Keep the decrypted credentials (global `SECRETS`) in sync with the central credential store
520
+ if ((0, secrets_1.isSecretId)(id)) {
521
+ if (obj) {
522
+ await this.secretsManager.update(id);
523
+ }
524
+ else {
525
+ this.secretsManager.remove(id);
526
+ }
527
+ this.updateSecretsDeclarations();
528
+ }
508
529
  // IO-9: Invalidate sendTo instance-cache when adapter instances change
509
530
  if (id.startsWith('system.adapter.')) {
510
531
  const parts = id.split('.');
@@ -773,6 +794,7 @@ class JavaScript extends adapter_core_1.Adapter {
773
794
  this.setStateCountCheckInterval = null;
774
795
  }
775
796
  await this.unsubscribeAiCredentials();
797
+ this.secretsManager.destroy();
776
798
  await this.stopAllScripts();
777
799
  }
778
800
  catch (err) {
@@ -982,7 +1004,7 @@ class JavaScript extends adapter_core_1.Adapter {
982
1004
  const typings = {};
983
1005
  // try to load TypeScript lib files from disk
984
1006
  try {
985
- const typescriptLibs = (0, typescriptTools_1.resolveTypescriptLibs)(typescriptSettings_1.targetTsLib);
1007
+ const typescriptLibs = (0, typescriptTools_1.resolveTypescriptLibs)((0, typescriptSettings_1.getTargetTsLib)(this.config));
986
1008
  Object.assign(typings, typescriptLibs);
987
1009
  }
988
1010
  catch {
@@ -1397,6 +1419,18 @@ class JavaScript extends adapter_core_1.Adapter {
1397
1419
  }
1398
1420
  break;
1399
1421
  }
1422
+ case 'getSecrets': {
1423
+ // Reports which credentials exist and which fields they have, so the instance
1424
+ // settings and the Blockly editor can show the available `SECRETS.<name>.<field>`
1425
+ // expressions. The decrypted values never leave the backend.
1426
+ if (obj.callback) {
1427
+ this.sendTo(obj.from, obj.command, {
1428
+ enabled: this.config.enableSecrets !== false,
1429
+ secrets: this.secretsManager.getStructure(),
1430
+ }, obj.callback);
1431
+ }
1432
+ break;
1433
+ }
1400
1434
  case 'prettier': {
1401
1435
  // Format the code with Prettier
1402
1436
  if (obj.message && typeof obj.message.code === 'string') {
@@ -1546,6 +1580,9 @@ class JavaScript extends adapter_core_1.Adapter {
1546
1580
  this.activeStr = `${this.namespace}.scriptEnabled.`;
1547
1581
  this.mods.fs = new protectFs_1.default(this.log, (0, adapter_core_1.getAbsoluteDefaultDataDir)());
1548
1582
  this.mods['fs/promises'] = this.mods.fs.promises; // to avoid require('fs/promises');
1583
+ // The instance configuration is only available now, so the compiler has to be created again
1584
+ // with the options the user has selected in the "TypeScript" tab
1585
+ this.tsServer = new virtual_tsc_1.Server((0, typescriptSettings_1.getTsCompilerOptions)(this.config), this.tsLog);
1549
1586
  // try to read TS declarations
1550
1587
  try {
1551
1588
  tsAmbient = {
@@ -1581,6 +1618,10 @@ class JavaScript extends adapter_core_1.Adapter {
1581
1618
  // In `manager` credential mode, subscribe to the configured AI credentials so changes in the
1582
1619
  // central credential store are picked up live (the keys are cached for the AI sendTo handlers).
1583
1620
  await this.subscribeAiCredentials();
1621
+ // Read the central credential store, so the scripts can use `SECRETS.<name>.<field>`.
1622
+ // Later changes are picked up in `onObjectChange`.
1623
+ await this.secretsManager.load(this.config.enableSecrets !== false);
1624
+ this.updateSecretsDeclarations();
1584
1625
  const doc = await this.getObjectViewAsync('script', 'javascript', {});
1585
1626
  if (doc?.rows?.length) {
1586
1627
  // sort global scripts if configured
@@ -1752,6 +1793,23 @@ class JavaScript extends adapter_core_1.Adapter {
1752
1793
  }
1753
1794
  }, 60_000).unref();
1754
1795
  }
1796
+ /**
1797
+ * Publishes the names of the existing credentials as ambient declarations, so the editor can
1798
+ * suggest them after typing `SECRETS.` and the TypeScript compiler knows them.
1799
+ */
1800
+ updateSecretsDeclarations() {
1801
+ if (!tsAmbient) {
1802
+ return;
1803
+ }
1804
+ const declarationPath = 'secrets.d.ts';
1805
+ const declarations = this.secretsManager.getDeclarations();
1806
+ if (tsAmbient[declarationPath] === declarations) {
1807
+ return;
1808
+ }
1809
+ tsAmbient[declarationPath] = declarations;
1810
+ this.tsServer.provideAmbientDeclarations({ [declarationPath]: declarations });
1811
+ jsDeclarationServer.provideAmbientDeclarations({ [declarationPath]: declarations });
1812
+ }
1755
1813
  loadTypeScriptDeclarations() {
1756
1814
  // try to load the typings on disk for all 3rd party modules
1757
1815
  const packages = [
@@ -1794,9 +1852,7 @@ class JavaScript extends adapter_core_1.Adapter {
1794
1852
  }
1795
1853
  }
1796
1854
  for (const pkg of packages) {
1797
- let pkgTypings = (0, typescriptTools_1.resolveTypings)(pkg, this.getAdapterScopedPackageIdentifier ? this.getAdapterScopedPackageIdentifier(pkg) : pkg,
1798
- // node needs ambient typings, so we don't wrap it in declare module
1799
- pkg !== 'node');
1855
+ let pkgTypings = (0, typescriptTools_1.resolveTypings)(pkg, this.getAdapterScopedPackageIdentifier ? this.getAdapterScopedPackageIdentifier(pkg) : pkg);
1800
1856
  if (!pkgTypings) {
1801
1857
  // Create the empty dummy declarations so users don't get the "not found" error
1802
1858
  // for installed packages