@rxap/config 19.2.0-dev.1 → 19.2.0-dev.3

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 (103) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/compodoc/changelog.html +11 -0
  3. package/compodoc/dependencies.html +1 -1
  4. package/compodoc/injectables/ConfigService.html +151 -69
  5. package/compodoc/interfaces/ConfigLoadOptions.html +251 -34
  6. package/compodoc/js/menu-wc.js +3 -0
  7. package/compodoc/js/menu-wc_es5.js +1 -1
  8. package/compodoc/js/search/search_index.js +2 -2
  9. package/compodoc/miscellaneous/enumerations.html +231 -0
  10. package/compodoc/properties.html +1 -1
  11. package/docs/documentation.json +813 -648
  12. package/docs/html/assets/hierarchy.js +1 -1
  13. package/docs/html/assets/navigation.js +1 -1
  14. package/docs/html/assets/search.js +1 -1
  15. package/docs/html/classes/ConfigLoaderService.html +2 -2
  16. package/docs/html/classes/ConfigService.html +6 -6
  17. package/docs/html/classes/ConfigTestingService.html +2 -2
  18. package/docs/html/enums/ConfigLoadingStrategy.html +3 -0
  19. package/docs/html/functions/ProvideConfig.html +1 -1
  20. package/docs/html/functions/dnsLookup.html +1 -1
  21. package/docs/html/functions/dnsResolver.html +1 -1
  22. package/docs/html/functions/fetchCidContent.html +1 -1
  23. package/docs/html/functions/fetchCidContentAsJson.html +1 -1
  24. package/docs/html/functions/fetchCidContentViaHttp.html +1 -1
  25. package/docs/html/functions/fetchContentViaHttp.html +1 -1
  26. package/docs/html/functions/raceSuccess.html +2 -2
  27. package/docs/html/hierarchy.html +1 -1
  28. package/docs/html/index.html +2 -2
  29. package/docs/html/interfaces/AppsNavigationConfig.html +2 -2
  30. package/docs/html/interfaces/Config.html +2 -2
  31. package/docs/html/interfaces/ConfigLoadOptions.html +8 -5
  32. package/docs/html/interfaces/LogoConfig.html +2 -2
  33. package/docs/html/interfaces/NavigationConfig.html +2 -2
  34. package/docs/html/interfaces/Oauth2Config.html +2 -2
  35. package/docs/html/interfaces/i18nConfig.html +2 -2
  36. package/docs/html/modules.html +1 -1
  37. package/docs/html/types/AnySchema.html +1 -1
  38. package/docs/html/types/Join.html +1 -1
  39. package/docs/html/types/LanguagesConfig.html +1 -1
  40. package/docs/html/types/Leaves.html +1 -1
  41. package/docs/html/types/NoInferType.html +1 -1
  42. package/docs/html/types/Paths.html +1 -1
  43. package/docs/html/variables/RXAP_CONFIG.html +1 -1
  44. package/docs/markdown/README.md +1 -1
  45. package/docs/markdown/classes/ConfigLoaderService.md +7 -7
  46. package/docs/markdown/classes/ConfigService.md +22 -22
  47. package/docs/markdown/classes/ConfigTestingService.md +8 -8
  48. package/docs/markdown/enumerations/ConfigLoadingStrategy.md +25 -0
  49. package/docs/markdown/functions/ProvideConfig.md +2 -2
  50. package/docs/markdown/functions/dnsLookup.md +2 -2
  51. package/docs/markdown/functions/dnsResolver.md +2 -2
  52. package/docs/markdown/functions/fetchCidContent.md +2 -2
  53. package/docs/markdown/functions/fetchCidContentAsJson.md +2 -2
  54. package/docs/markdown/functions/fetchCidContentViaHttp.md +2 -2
  55. package/docs/markdown/functions/fetchContentViaHttp.md +2 -2
  56. package/docs/markdown/functions/raceSuccess.md +2 -2
  57. package/docs/markdown/globals.md +6 -2
  58. package/docs/markdown/interfaces/AppsNavigationConfig.md +12 -12
  59. package/docs/markdown/interfaces/Config.md +6 -6
  60. package/docs/markdown/interfaces/ConfigLoadOptions.md +34 -10
  61. package/docs/markdown/interfaces/LogoConfig.md +5 -5
  62. package/docs/markdown/interfaces/NavigationConfig.md +9 -9
  63. package/docs/markdown/interfaces/Oauth2Config.md +3 -3
  64. package/docs/markdown/interfaces/i18nConfig.md +4 -4
  65. package/docs/markdown/type-aliases/AnySchema.md +2 -2
  66. package/docs/markdown/type-aliases/Join.md +2 -2
  67. package/docs/markdown/type-aliases/LanguagesConfig.md +2 -2
  68. package/docs/markdown/type-aliases/Leaves.md +2 -2
  69. package/docs/markdown/type-aliases/NoInferType.md +2 -2
  70. package/docs/markdown/type-aliases/Paths.md +2 -2
  71. package/docs/markdown/variables/RXAP_CONFIG.md +2 -2
  72. package/docs/wiki/Class.ConfigLoaderService.md +6 -6
  73. package/docs/wiki/Class.ConfigService.md +21 -21
  74. package/docs/wiki/Class.ConfigTestingService.md +7 -7
  75. package/docs/wiki/Enumeration.ConfigLoadingStrategy.md +21 -0
  76. package/docs/wiki/Function.ProvideConfig.md +1 -1
  77. package/docs/wiki/Function.dnsLookup.md +1 -1
  78. package/docs/wiki/Function.dnsResolver.md +1 -1
  79. package/docs/wiki/Function.fetchCidContent.md +1 -1
  80. package/docs/wiki/Function.fetchCidContentAsJson.md +1 -1
  81. package/docs/wiki/Function.fetchCidContentViaHttp.md +1 -1
  82. package/docs/wiki/Function.fetchContentViaHttp.md +1 -1
  83. package/docs/wiki/Function.raceSuccess.md +1 -1
  84. package/docs/wiki/Interface.AppsNavigationConfig.md +11 -11
  85. package/docs/wiki/Interface.Config.md +5 -5
  86. package/docs/wiki/Interface.ConfigLoadOptions.md +33 -9
  87. package/docs/wiki/Interface.LogoConfig.md +4 -4
  88. package/docs/wiki/Interface.NavigationConfig.md +8 -8
  89. package/docs/wiki/Interface.Oauth2Config.md +2 -2
  90. package/docs/wiki/Interface.i18nConfig.md +3 -3
  91. package/docs/wiki/TypeAlias.AnySchema.md +1 -1
  92. package/docs/wiki/TypeAlias.Join.md +1 -1
  93. package/docs/wiki/TypeAlias.LanguagesConfig.md +1 -1
  94. package/docs/wiki/TypeAlias.Leaves.md +1 -1
  95. package/docs/wiki/TypeAlias.NoInferType.md +1 -1
  96. package/docs/wiki/TypeAlias.Paths.md +1 -1
  97. package/docs/wiki/Variable.RXAP_CONFIG.md +1 -1
  98. package/docs/wiki/_Sidebar.md +4 -0
  99. package/docs/wiki/globals.md +5 -1
  100. package/fesm2022/rxap-config.mjs +118 -35
  101. package/fesm2022/rxap-config.mjs.map +1 -1
  102. package/lib/config.service.d.ts +10 -0
  103. package/package.json +6 -6
package/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [19.2.0-dev.3](https://gitlab.com/rxap/packages/compare/@rxap/config@19.2.0-dev.2...@rxap/config@19.2.0-dev.3) (2026-01-19)
7
+
8
+ ### Features
9
+
10
+ - **config:** add `strategy` option and FIFO handling for dynamic config loading ([7534069](https://gitlab.com/rxap/packages/commit/7534069a897493c402d3164d6bb7df7b3f1dc9dd))
11
+
12
+ # [19.2.0-dev.2](https://gitlab.com/rxap/packages/compare/@rxap/config@19.2.0-dev.1...@rxap/config@19.2.0-dev.2) (2025-10-28)
13
+
14
+ ### Features
15
+
16
+ - **angular:** add DNS server handling for config loading ([d3fbae0](https://gitlab.com/rxap/packages/commit/d3fbae0258f2dfa6f5a0ab90b0c841d5e086d53c))
17
+ - **angular:** add storacha gateway for IPFS content fetching ([c9239be](https://gitlab.com/rxap/packages/commit/c9239be7bc1f223c6cc0815fe277d536d0219580))
18
+
6
19
  # [19.2.0-dev.1](https://gitlab.com/rxap/packages/compare/@rxap/config@19.2.0-dev.0...@rxap/config@19.2.0-dev.1) (2025-09-23)
7
20
 
8
21
  ### Bug Fixes
@@ -85,6 +85,17 @@
85
85
  <h1>Change Log</h1>
86
86
  <p>All notable changes to this project will be documented in this file.
87
87
  See <a href="https://conventionalcommits.org">Conventional Commits</a> for commit guidelines.</p>
88
+ <h1><a href="https://gitlab.com/rxap/packages/compare/@rxap/config@19.2.0-dev.2...@rxap/config@19.2.0-dev.3">19.2.0-dev.3</a> (2026-01-19)</h1>
89
+ <h3>Features</h3>
90
+ <ul>
91
+ <li><strong>config:</strong> add <code>strategy</code> option and FIFO handling for dynamic config loading (<a href="https://gitlab.com/rxap/packages/commit/7534069a897493c402d3164d6bb7df7b3f1dc9dd">7534069</a>)</li>
92
+ </ul>
93
+ <h1><a href="https://gitlab.com/rxap/packages/compare/@rxap/config@19.2.0-dev.1...@rxap/config@19.2.0-dev.2">19.2.0-dev.2</a> (2025-10-28)</h1>
94
+ <h3>Features</h3>
95
+ <ul>
96
+ <li><strong>angular:</strong> add DNS server handling for config loading (<a href="https://gitlab.com/rxap/packages/commit/d3fbae0258f2dfa6f5a0ab90b0c841d5e086d53c">d3fbae0</a>)</li>
97
+ <li><strong>angular:</strong> add storacha gateway for IPFS content fetching (<a href="https://gitlab.com/rxap/packages/commit/c9239be7bc1f223c6cc0815fe277d536d0219580">c9239be</a>)</li>
98
+ </ul>
88
99
  <h1><a href="https://gitlab.com/rxap/packages/compare/@rxap/config@19.2.0-dev.0...@rxap/config@19.2.0-dev.1">19.2.0-dev.1</a> (2025-09-23)</h1>
89
100
  <h3>Bug Fixes</h3>
90
101
  <ul>
@@ -119,7 +119,7 @@
119
119
  <li>
120
120
  <b>@rxap/environment</b> : ^19.0.4</li>
121
121
  <li>
122
- <b>@rxap/utilities</b> : ^16.5.0-dev.0</li>
122
+ <b>@rxap/utilities</b> : ^16.5.0-dev.1</li>
123
123
  <li>
124
124
  <b>rxjs</b> : ^7.8.1</li>
125
125
  </ul>
@@ -260,7 +260,7 @@
260
260
  </tr>
261
261
  <tr>
262
262
  <td class="col-md-4">
263
- <div class="io-line">Defined in <a href="" data-line="78" class="link-to-prism">src/lib/config.service.ts:78</a></div>
263
+ <div class="io-line">Defined in <a href="" data-line="86" class="link-to-prism">src/lib/config.service.ts:86</a></div>
264
264
  </td>
265
265
  </tr>
266
266
 
@@ -325,8 +325,8 @@
325
325
 
326
326
  <tr>
327
327
  <td class="col-md-4">
328
- <div class="io-line">Defined in <a href="" data-line="422"
329
- class="link-to-prism">src/lib/config.service.ts:422</a></div>
328
+ <div class="io-line">Defined in <a href="" data-line="504"
329
+ class="link-to-prism">src/lib/config.service.ts:504</a></div>
330
330
  </td>
331
331
  </tr>
332
332
 
@@ -364,8 +364,8 @@
364
364
 
365
365
  <tr>
366
366
  <td class="col-md-4">
367
- <div class="io-line">Defined in <a href="" data-line="426"
368
- class="link-to-prism">src/lib/config.service.ts:426</a></div>
367
+ <div class="io-line">Defined in <a href="" data-line="508"
368
+ class="link-to-prism">src/lib/config.service.ts:508</a></div>
369
369
  </td>
370
370
  </tr>
371
371
 
@@ -441,8 +441,8 @@
441
441
 
442
442
  <tr>
443
443
  <td class="col-md-4">
444
- <div class="io-line">Defined in <a href="" data-line="427"
445
- class="link-to-prism">src/lib/config.service.ts:427</a></div>
444
+ <div class="io-line">Defined in <a href="" data-line="509"
445
+ class="link-to-prism">src/lib/config.service.ts:509</a></div>
446
446
  </td>
447
447
  </tr>
448
448
 
@@ -530,8 +530,8 @@
530
530
 
531
531
  <tr>
532
532
  <td class="col-md-4">
533
- <div class="io-line">Defined in <a href="" data-line="428"
534
- class="link-to-prism">src/lib/config.service.ts:428</a></div>
533
+ <div class="io-line">Defined in <a href="" data-line="510"
534
+ class="link-to-prism">src/lib/config.service.ts:510</a></div>
535
535
  </td>
536
536
  </tr>
537
537
 
@@ -619,8 +619,8 @@
619
619
 
620
620
  <tr>
621
621
  <td class="col-md-4">
622
- <div class="io-line">Defined in <a href="" data-line="360"
623
- class="link-to-prism">src/lib/config.service.ts:360</a></div>
622
+ <div class="io-line">Defined in <a href="" data-line="442"
623
+ class="link-to-prism">src/lib/config.service.ts:442</a></div>
624
624
  </td>
625
625
  </tr>
626
626
 
@@ -721,8 +721,8 @@
721
721
 
722
722
  <tr>
723
723
  <td class="col-md-4">
724
- <div class="io-line">Defined in <a href="" data-line="366"
725
- class="link-to-prism">src/lib/config.service.ts:366</a></div>
724
+ <div class="io-line">Defined in <a href="" data-line="448"
725
+ class="link-to-prism">src/lib/config.service.ts:448</a></div>
726
726
  </td>
727
727
  </tr>
728
728
 
@@ -831,8 +831,8 @@
831
831
 
832
832
  <tr>
833
833
  <td class="col-md-4">
834
- <div class="io-line">Defined in <a href="" data-line="432"
835
- class="link-to-prism">src/lib/config.service.ts:432</a></div>
834
+ <div class="io-line">Defined in <a href="" data-line="514"
835
+ class="link-to-prism">src/lib/config.service.ts:514</a></div>
836
836
  </td>
837
837
  </tr>
838
838
 
@@ -908,8 +908,8 @@
908
908
 
909
909
  <tr>
910
910
  <td class="col-md-4">
911
- <div class="io-line">Defined in <a href="" data-line="433"
912
- class="link-to-prism">src/lib/config.service.ts:433</a></div>
911
+ <div class="io-line">Defined in <a href="" data-line="515"
912
+ class="link-to-prism">src/lib/config.service.ts:515</a></div>
913
913
  </td>
914
914
  </tr>
915
915
 
@@ -997,8 +997,8 @@
997
997
 
998
998
  <tr>
999
999
  <td class="col-md-4">
1000
- <div class="io-line">Defined in <a href="" data-line="434"
1001
- class="link-to-prism">src/lib/config.service.ts:434</a></div>
1000
+ <div class="io-line">Defined in <a href="" data-line="516"
1001
+ class="link-to-prism">src/lib/config.service.ts:516</a></div>
1002
1002
  </td>
1003
1003
  </tr>
1004
1004
 
@@ -1087,8 +1087,8 @@
1087
1087
 
1088
1088
  <tr>
1089
1089
  <td class="col-md-4">
1090
- <div class="io-line">Defined in <a href="" data-line="98"
1091
- class="link-to-prism">src/lib/config.service.ts:98</a></div>
1090
+ <div class="io-line">Defined in <a href="" data-line="106"
1091
+ class="link-to-prism">src/lib/config.service.ts:106</a></div>
1092
1092
  </td>
1093
1093
  </tr>
1094
1094
 
@@ -1173,8 +1173,8 @@
1173
1173
 
1174
1174
  <tr>
1175
1175
  <td class="col-md-4">
1176
- <div class="io-line">Defined in <a href="" data-line="418"
1177
- class="link-to-prism">src/lib/config.service.ts:418</a></div>
1176
+ <div class="io-line">Defined in <a href="" data-line="500"
1177
+ class="link-to-prism">src/lib/config.service.ts:500</a></div>
1178
1178
  </td>
1179
1179
  </tr>
1180
1180
 
@@ -1243,8 +1243,8 @@
1243
1243
 
1244
1244
  <tr>
1245
1245
  <td class="col-md-4">
1246
- <div class="io-line">Defined in <a href="" data-line="341"
1247
- class="link-to-prism">src/lib/config.service.ts:341</a></div>
1246
+ <div class="io-line">Defined in <a href="" data-line="423"
1247
+ class="link-to-prism">src/lib/config.service.ts:423</a></div>
1248
1248
  </td>
1249
1249
  </tr>
1250
1250
 
@@ -1353,7 +1353,7 @@
1353
1353
  </tr>
1354
1354
  <tr>
1355
1355
  <td class="col-md-4">
1356
- <div class="io-line">Defined in <a href="" data-line="78" class="link-to-prism">src/lib/config.service.ts:78</a></div>
1356
+ <div class="io-line">Defined in <a href="" data-line="86" class="link-to-prism">src/lib/config.service.ts:86</a></div>
1357
1357
  </td>
1358
1358
  </tr>
1359
1359
 
@@ -1385,7 +1385,7 @@
1385
1385
  </tr>
1386
1386
  <tr>
1387
1387
  <td class="col-md-4">
1388
- <div class="io-line">Defined in <a href="" data-line="57" class="link-to-prism">src/lib/config.service.ts:57</a></div>
1388
+ <div class="io-line">Defined in <a href="" data-line="65" class="link-to-prism">src/lib/config.service.ts:65</a></div>
1389
1389
  </td>
1390
1390
  </tr>
1391
1391
 
@@ -1417,7 +1417,7 @@
1417
1417
  </tr>
1418
1418
  <tr>
1419
1419
  <td class="col-md-4">
1420
- <div class="io-line">Defined in <a href="" data-line="64" class="link-to-prism">src/lib/config.service.ts:64</a></div>
1420
+ <div class="io-line">Defined in <a href="" data-line="72" class="link-to-prism">src/lib/config.service.ts:72</a></div>
1421
1421
  </td>
1422
1422
  </tr>
1423
1423
 
@@ -1457,7 +1457,7 @@ the Urls array.</p>
1457
1457
  </tr>
1458
1458
  <tr>
1459
1459
  <td class="col-md-4">
1460
- <div class="io-line">Defined in <a href="" data-line="72" class="link-to-prism">src/lib/config.service.ts:72</a></div>
1460
+ <div class="io-line">Defined in <a href="" data-line="80" class="link-to-prism">src/lib/config.service.ts:80</a></div>
1461
1461
  </td>
1462
1462
  </tr>
1463
1463
 
@@ -1483,7 +1483,7 @@ the Urls array.</p>
1483
1483
  </tr>
1484
1484
  <tr>
1485
1485
  <td class="col-md-4">
1486
- <div class="io-line">Defined in <a href="" data-line="51" class="link-to-prism">src/lib/config.service.ts:51</a></div>
1486
+ <div class="io-line">Defined in <a href="" data-line="59" class="link-to-prism">src/lib/config.service.ts:59</a></div>
1487
1487
  </td>
1488
1488
  </tr>
1489
1489
 
@@ -1515,7 +1515,7 @@ the Urls array.</p>
1515
1515
  </tr>
1516
1516
  <tr>
1517
1517
  <td class="col-md-4">
1518
- <div class="io-line">Defined in <a href="" data-line="54" class="link-to-prism">src/lib/config.service.ts:54</a></div>
1518
+ <div class="io-line">Defined in <a href="" data-line="62" class="link-to-prism">src/lib/config.service.ts:62</a></div>
1519
1519
  </td>
1520
1520
  </tr>
1521
1521
 
@@ -1541,7 +1541,7 @@ the Urls array.</p>
1541
1541
  </tr>
1542
1542
  <tr>
1543
1543
  <td class="col-md-4">
1544
- <div class="io-line">Defined in <a href="" data-line="52" class="link-to-prism">src/lib/config.service.ts:52</a></div>
1544
+ <div class="io-line">Defined in <a href="" data-line="60" class="link-to-prism">src/lib/config.service.ts:60</a></div>
1545
1545
  </td>
1546
1546
  </tr>
1547
1547
 
@@ -1573,7 +1573,7 @@ the Urls array.</p>
1573
1573
  </tr>
1574
1574
  <tr>
1575
1575
  <td class="col-md-4">
1576
- <div class="io-line">Defined in <a href="" data-line="55" class="link-to-prism">src/lib/config.service.ts:55</a></div>
1576
+ <div class="io-line">Defined in <a href="" data-line="63" class="link-to-prism">src/lib/config.service.ts:63</a></div>
1577
1577
  </td>
1578
1578
  </tr>
1579
1579
 
@@ -1605,7 +1605,7 @@ the Urls array.</p>
1605
1605
  </tr>
1606
1606
  <tr>
1607
1607
  <td class="col-md-4">
1608
- <div class="io-line">Defined in <a href="" data-line="70" class="link-to-prism">src/lib/config.service.ts:70</a></div>
1608
+ <div class="io-line">Defined in <a href="" data-line="78" class="link-to-prism">src/lib/config.service.ts:78</a></div>
1609
1609
  </td>
1610
1610
  </tr>
1611
1611
 
@@ -1649,7 +1649,7 @@ value form the Defaults values or dynamic config files</p>
1649
1649
  </tr>
1650
1650
  <tr>
1651
1651
  <td class="col-md-4">
1652
- <div class="io-line">Defined in <a href="" data-line="77" class="link-to-prism">src/lib/config.service.ts:77</a></div>
1652
+ <div class="io-line">Defined in <a href="" data-line="85" class="link-to-prism">src/lib/config.service.ts:85</a></div>
1653
1653
  </td>
1654
1654
  </tr>
1655
1655
 
@@ -1685,8 +1685,14 @@ import {
1685
1685
 
1686
1686
  export type AnySchema &#x3D; { validateAsync: (...args: any[]) &#x3D;&gt; any };
1687
1687
 
1688
+ export enum ConfigLoadingStrategy {
1689
+ DEFAULT &#x3D; &#x27;default&#x27;,
1690
+ FIFO &#x3D; &#x27;fifo&#x27;,
1691
+ }
1692
+
1688
1693
  export interface ConfigLoadOptions {
1689
1694
  fromUrlParam?: string | boolean;
1695
+ fromUrls?: boolean;
1690
1696
  fromLocalStorage?: boolean;
1691
1697
  schema?: AnySchema;
1692
1698
  url?: string | string[] | ((environment: Environment) &#x3D;&gt; string | string[]);
@@ -1705,6 +1711,8 @@ export interface ConfigLoadOptions {
1705
1711
  */
1706
1712
  fromCid?: string;
1707
1713
  fetchCidContent?: (cid: string, path?: string) &#x3D;&gt; Promise&lt;Blob | null&gt;;
1714
+ dnsServers?: string[];
1715
+ strategy?: ConfigLoadingStrategy;
1708
1716
  }
1709
1717
 
1710
1718
  @Injectable({
@@ -1773,65 +1781,132 @@ export class ConfigService&lt;Config extends Record&lt;string, any&gt; &#x3D; Re
1773
1781
  options.fromUrlParam &#x3D; environment.config.fromUrlParam;
1774
1782
  options.fromLocalStorage &#x3D; environment.config.fromLocalStorage;
1775
1783
  options.schema &#x3D; environment.config.schema;
1784
+ options.strategy &#x3D; environment.config.strategy as ConfigLoadingStrategy ?? options.strategy;
1776
1785
  }
1777
1786
  }
1778
1787
 
1779
1788
  config &#x3D; deepMerge(config, options?.static ?? {});
1789
+ let done &#x3D; false;
1780
1790
 
1781
- const urls &#x3D; (options?.url ? coerceArray(options.url) : ConfigService.Urls).map(url &#x3D;&gt; {
1782
- if (typeof url &#x3D;&#x3D;&#x3D; &#x27;function&#x27;) {
1783
- if (!environment) {
1784
- throw new Error(&#x27;environment is required when url is a function&#x27;);
1791
+ if (!done &amp;&amp; options?.fromUrls !&#x3D;&#x3D; false) {
1792
+ try {
1793
+ config &#x3D; deepMerge(config, await this.loadConfigFromUrls(options, environment));
1794
+ if (options.strategy &#x3D;&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1795
+ done &#x3D; true;
1796
+ }
1797
+ } catch (error: any) {
1798
+ if (options.strategy !&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1799
+ console.error(&#x27;Could not load config from urls&#x27;, error);
1800
+ throw error;
1801
+ } else {
1802
+ console.warn(&#x27;Could not load config from urls: &#x27; + error.message + &#x27;. Will try next strategy.&#x27;);
1785
1803
  }
1786
- return coerceArray(url(environment));
1787
1804
  }
1788
- return coerceArray(url);
1789
- }).flat();
1805
+ }
1790
1806
 
1791
- for (const url of urls) {
1792
- const loadedConfig &#x3D; await this.loadConfig(url, true, options?.schema);
1793
- const match &#x3D; url.match(/config\.([a-zA-Z0-9.\-_]+)\.json/);
1794
- if (match) {
1795
- SetToObject(config, match[1], loadedConfig);
1796
- } else {
1797
- config &#x3D; deepMerge(config, loadedConfig);
1807
+ if (!done &amp;&amp; options?.fromLocalStorage !&#x3D;&#x3D; false) {
1808
+ try {
1809
+ config &#x3D; deepMerge(config, this.loadConfigFromLocalStorage(options));
1810
+ if (options.strategy &#x3D;&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1811
+ done &#x3D; true;
1812
+ }
1813
+ } catch (error: any) {
1814
+ if (options.strategy !&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1815
+ console.error(&#x27;Could not load config from local storage&#x27;, error);
1816
+ throw error;
1817
+ } else {
1818
+ console.warn(&#x27;Could not load config from local storage: &#x27; + error.message + &#x27;. Will try next strategy.&#x27;);
1819
+ }
1798
1820
  }
1799
1821
  }
1800
1822
 
1801
- config &#x3D; deepMerge(config, this.Overwrites);
1802
-
1803
- if (options?.fromLocalStorage !&#x3D;&#x3D; false) {
1804
-
1805
- const localConfig &#x3D; localStorage.getItem(ConfigService.LocalStorageKey);
1806
-
1807
- if (localConfig) {
1808
- try {
1809
- config &#x3D; deepMerge(config, JSON.parse(localConfig));
1810
- } catch (e: any) {
1811
- console.error(&#x27;local config could not be parsed&#x27;);
1823
+ if (!done &amp;&amp; options?.fromUrlParam) {
1824
+ try {
1825
+ config &#x3D; deepMerge(config, this.loadConfigFromUrlParam(options as any));
1826
+ if (options.strategy &#x3D;&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1827
+ done &#x3D; true;
1828
+ }
1829
+ } catch (error: any) {
1830
+ if (options.strategy !&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1831
+ console.error(&#x27;Could not load config from url param&#x27;, error);
1832
+ throw error;
1833
+ } else {
1834
+ console.warn(&#x27;Could not load config from url param: &#x27; + error.message + &#x27;. Will try next strategy.&#x27;);
1812
1835
  }
1813
1836
  }
1814
-
1815
1837
  }
1816
1838
 
1817
- if (options?.fromUrlParam) {
1818
- const param &#x3D; typeof options.fromUrlParam &#x3D;&#x3D;&#x3D; &#x27;string&#x27; ? options.fromUrlParam : &#x27;config&#x27;;
1819
- config &#x3D; deepMerge(config, this.LoadConfigDefaultFromUrlParam(param));
1839
+ if (!done &amp;&amp; options?.fromDns) {
1840
+ await this.loadConfigFromDns(options as any);
1820
1841
  }
1821
1842
 
1822
- if (options?.fromDns) {
1823
- await this.loadConfigFromDns(options as any);
1843
+ if (!done &amp;&amp; options?.fromCid) {
1844
+ try {
1845
+ config &#x3D; deepMerge(config, await this.loadConfigFromCid(options as any));
1846
+ if (options.strategy &#x3D;&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1847
+ done &#x3D; true;
1848
+ }
1849
+ } catch (error: any) {
1850
+ if (options.strategy !&#x3D;&#x3D; ConfigLoadingStrategy.FIFO) {
1851
+ console.error(&#x27;Could not load config from cid&#x27;, error);
1852
+ throw error;
1853
+ } else {
1854
+ console.warn(&#x27;Could not load config from cid: &#x27; + error.message + &#x27;. Will try next strategy.&#x27;);
1855
+ }
1856
+ }
1824
1857
  }
1825
1858
 
1826
- if (options?.fromCid) {
1827
- config &#x3D; deepMerge(config, await this.loadConfigFromCid(options as any));
1859
+ if (!done) {
1860
+ console.warn(&#x27;No config loading strategy succeeded. Using default config.&#x27;);
1828
1861
  }
1829
1862
 
1863
+ config &#x3D; deepMerge(config, this.Overwrites);
1864
+
1830
1865
  console.debug(&#x27;app config&#x27;, config);
1831
1866
 
1832
1867
  this.Config &#x3D; config;
1833
1868
  }
1834
1869
 
1870
+ private static loadConfigFromUrlParam(options: ConfigLoadOptions &amp; { fromUrlParam: string | true }) {
1871
+ const param &#x3D; typeof options.fromUrlParam &#x3D;&#x3D;&#x3D; &#x27;string&#x27; ? options.fromUrlParam : &#x27;config&#x27;;
1872
+ return this.LoadConfigDefaultFromUrlParam(param);
1873
+ }
1874
+
1875
+ private static loadConfigFromLocalStorage(options: ConfigLoadOptions) {
1876
+ const localConfig &#x3D; localStorage.getItem(ConfigService.LocalStorageKey);
1877
+ if (localConfig) {
1878
+ return JSON.parse(localConfig);
1879
+ } else {
1880
+ return {};
1881
+ }
1882
+ }
1883
+
1884
+ private static async loadConfigFromUrls(options: ConfigLoadOptions, environment?: Environment) {
1885
+ let config: any &#x3D; {};
1886
+ const urls &#x3D; (
1887
+ options?.url ? coerceArray(options.url) : ConfigService.Urls
1888
+ ).map(url &#x3D;&gt; {
1889
+ if (typeof url &#x3D;&#x3D;&#x3D; &#x27;function&#x27;) {
1890
+ if (!environment) {
1891
+ throw new Error(&#x27;environment is required when url is a function&#x27;);
1892
+ }
1893
+ return coerceArray(url(environment));
1894
+ }
1895
+ return coerceArray(url);
1896
+ }).flat();
1897
+
1898
+ for (const url of urls) {
1899
+ const loadedConfig &#x3D; await this.loadConfig(url, true, options?.schema);
1900
+ const match &#x3D; url.match(/config\.([a-zA-Z0-9.\-_]+)\.json/);
1901
+ if (match) {
1902
+ SetToObject(config, match[1], loadedConfig);
1903
+ } else {
1904
+ config &#x3D; deepMerge(config, loadedConfig);
1905
+ }
1906
+ }
1907
+ return config;
1908
+ }
1909
+
1835
1910
  private static async loadConfigFromCid(options: ConfigLoadOptions &amp; { fromCid: string | boolean }) {
1836
1911
  console.debug(&#x27;Loading config from CID: &#x27;, options.fromCid);
1837
1912
  try {
@@ -1854,6 +1929,13 @@ export class ConfigService&lt;Config extends Record&lt;string, any&gt; &#x3D; Re
1854
1929
 
1855
1930
  private static async loadConfigFromDns(options: ConfigLoadOptions &amp; { fromDns: string | boolean }) {
1856
1931
  console.debug(&#x27;Loading config from DNS&#x27;);
1932
+ const dnsServers &#x3D; options.dnsServers ?? [];
1933
+ if (dnsServers.length &#x3D;&#x3D;&#x3D; 0) {
1934
+ dnsServers.push(
1935
+ &#x27;https://dns.google/resolve&#x27;,
1936
+ &#x27;https://cloudflare-dns.com/dns-query&#x27;
1937
+ );
1938
+ }
1857
1939
  let domain &#x3D; location.hostname;
1858
1940
  if (typeof options.fromDns &#x3D;&#x3D;&#x3D; &#x27;string&#x27;) {
1859
1941
  domain &#x3D; options.fromDns;
@@ -1861,7 +1943,7 @@ export class ConfigService&lt;Config extends Record&lt;string, any&gt; &#x3D; Re
1861
1943
  domain &#x3D; CoercePrefix(domain, &#x27;_config.&#x27;);
1862
1944
  try {
1863
1945
  console.log(&#x60;Attempting DNS lookup for domain: ${domain}&#x60;);
1864
- const txtData &#x3D; await dnsLookup(domain, &#x27;TXT&#x27;);
1946
+ const txtData &#x3D; await dnsLookup(domain, &#x27;TXT&#x27;, dnsServers);
1865
1947
  console.log(&#x60;DNS TXT record data found: ${txtData}&#x60;);
1866
1948
  // Example CID extraction logic (adapt to your TXT record format)
1867
1949
  // This looks for IPFS CIDs (v0 &#x27;Qm...&#x27; or v1 &#x27;b...&#x27;) potentially after &#x27;ipfs://&#x27; or &#x27;/&#x27;