@kya-os/create-mcpi-app 1.7.36 → 1.7.38-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/ARCHITECTURE_ANALYSIS.md +392 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/helpers/config-builder.d.ts +1 -1
  4. package/dist/helpers/config-builder.d.ts.map +1 -1
  5. package/dist/helpers/config-builder.js +1 -1
  6. package/dist/helpers/config-builder.js.map +1 -1
  7. package/dist/helpers/create.d.ts +1 -1
  8. package/dist/helpers/create.d.ts.map +1 -1
  9. package/dist/helpers/fetch-cloudflare-mcpi-template.d.ts.map +1 -1
  10. package/dist/helpers/fetch-cloudflare-mcpi-template.js +2 -1
  11. package/dist/helpers/fetch-cloudflare-mcpi-template.js.map +1 -1
  12. package/dist/helpers/generate-config.d.ts.map +1 -1
  13. package/dist/helpers/generate-config.js.map +1 -1
  14. package/dist/index.js +18 -12
  15. package/dist/index.js.map +1 -1
  16. package/dist/utils/fetch-remote-config.d.ts +74 -0
  17. package/dist/utils/fetch-remote-config.d.ts.map +1 -0
  18. package/dist/utils/fetch-remote-config.js +109 -0
  19. package/dist/utils/fetch-remote-config.js.map +1 -0
  20. package/package.json +7 -12
  21. package/src/helpers/config-builder.ts +1 -1
  22. package/src/helpers/create.ts +1 -1
  23. package/src/helpers/fetch-cloudflare-mcpi-template.ts +2 -1
  24. package/src/helpers/generate-config.ts +0 -1
  25. package/src/index.ts +66 -26
  26. package/src/utils/__tests__/fetch-remote-config.test.ts +271 -0
  27. package/src/utils/fetch-remote-config.ts +179 -0
  28. package/.turbo/turbo-build.log +0 -4
  29. package/.turbo/turbo-test$colon$coverage.log +0 -305
  30. package/.turbo/turbo-test.log +0 -483
  31. package/coverage/base.css +0 -224
  32. package/coverage/block-navigation.js +0 -87
  33. package/coverage/clover.xml +0 -268
  34. package/coverage/config-builder.ts.html +0 -580
  35. package/coverage/coverage-final.json +0 -7
  36. package/coverage/favicon.png +0 -0
  37. package/coverage/fetch-cloudflare-mcpi-template.ts.html +0 -7345
  38. package/coverage/generate-config.ts.html +0 -442
  39. package/coverage/generate-identity.ts.html +0 -574
  40. package/coverage/index.html +0 -191
  41. package/coverage/install.ts.html +0 -322
  42. package/coverage/prettify.css +0 -1
  43. package/coverage/prettify.js +0 -2
  44. package/coverage/sort-arrow-sprite.png +0 -0
  45. package/coverage/sorter.js +0 -210
  46. package/coverage/validate-project-structure.ts.html +0 -466
  47. package/dist/helpers/__tests__/config-builder.spec.d.ts +0 -8
  48. package/dist/helpers/__tests__/config-builder.spec.d.ts.map +0 -1
  49. package/dist/helpers/__tests__/config-builder.spec.js +0 -182
  50. package/dist/helpers/__tests__/config-builder.spec.js.map +0 -1
@@ -1,574 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for generate-identity.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="prettify.css" />
9
- <link rel="stylesheet" href="base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="index.html">All files</a> generate-identity.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>25/25</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">100% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>2/2</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>6/6</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>25/25</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line high'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
230
- <span class="cline-any cline-neutral">&nbsp;</span>
231
- <span class="cline-any cline-neutral">&nbsp;</span>
232
- <span class="cline-any cline-neutral">&nbsp;</span>
233
- <span class="cline-any cline-neutral">&nbsp;</span>
234
- <span class="cline-any cline-neutral">&nbsp;</span>
235
- <span class="cline-any cline-neutral">&nbsp;</span>
236
- <span class="cline-any cline-neutral">&nbsp;</span>
237
- <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-neutral">&nbsp;</span>
239
- <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-neutral">&nbsp;</span>
243
- <span class="cline-any cline-neutral">&nbsp;</span>
244
- <span class="cline-any cline-neutral">&nbsp;</span>
245
- <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-neutral">&nbsp;</span>
250
- <span class="cline-any cline-neutral">&nbsp;</span>
251
- <span class="cline-any cline-neutral">&nbsp;</span>
252
- <span class="cline-any cline-neutral">&nbsp;</span>
253
- <span class="cline-any cline-neutral">&nbsp;</span>
254
- <span class="cline-any cline-neutral">&nbsp;</span>
255
- <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-neutral">&nbsp;</span>
258
- <span class="cline-any cline-neutral">&nbsp;</span>
259
- <span class="cline-any cline-neutral">&nbsp;</span>
260
- <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-neutral">&nbsp;</span>
262
- <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-neutral">&nbsp;</span>
266
- <span class="cline-any cline-yes">72x</span>
267
- <span class="cline-any cline-neutral">&nbsp;</span>
268
- <span class="cline-any cline-neutral">&nbsp;</span>
269
- <span class="cline-any cline-neutral">&nbsp;</span>
270
- <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-neutral">&nbsp;</span>
273
- <span class="cline-any cline-neutral">&nbsp;</span>
274
- <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-yes">72x</span>
276
- <span class="cline-any cline-yes">72x</span>
277
- <span class="cline-any cline-neutral">&nbsp;</span>
278
- <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-yes">72x</span>
281
- <span class="cline-any cline-yes">72x</span>
282
- <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-yes">72x</span>
285
- <span class="cline-any cline-yes">72x</span>
286
- <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-yes">72x</span>
289
- <span class="cline-any cline-neutral">&nbsp;</span>
290
- <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-yes">72x</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-neutral">&nbsp;</span>
295
- <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-neutral">&nbsp;</span>
306
- <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-yes">72x</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-yes">72x</span>
318
- <span class="cline-any cline-yes">72x</span>
319
- <span class="cline-any cline-yes">72x</span>
320
- <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-yes">72x</span>
323
- <span class="cline-any cline-yes">72x</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-yes">72x</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-yes">72x</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-neutral">&nbsp;</span>
334
- <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-neutral">&nbsp;</span>
341
- <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-yes">72x</span>
345
- <span class="cline-any cline-neutral">&nbsp;</span>
346
- <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-neutral">&nbsp;</span>
348
- <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-neutral">&nbsp;</span>
350
- <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-neutral">&nbsp;</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-yes">72x</span>
359
- <span class="cline-any cline-neutral">&nbsp;</span>
360
- <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-yes">72x</span>
364
- <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-neutral">&nbsp;</span>
367
- <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-neutral">&nbsp;</span>
370
- <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-yes">16x</span>
375
- <span class="cline-any cline-yes">16x</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-neutral">&nbsp;</span>
378
- <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-neutral">&nbsp;</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-yes">5x</span>
386
- <span class="cline-any cline-yes">3x</span>
387
- <span class="cline-any cline-neutral">&nbsp;</span>
388
- <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-neutral">&nbsp;</span>
390
- <span class="cline-any cline-yes">2x</span>
391
- <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
393
- * Identity Generation for MCP-I Applications
394
- *
395
- * Generates Ed25519 keypairs and DID:key identifiers
396
- * for persistent agent identity across deployments.
397
- */
398
- &nbsp;
399
- import { webcrypto } from 'crypto';
400
- import baseX from 'base-x';
401
- &nbsp;
402
- /**
403
- * Type for Web Crypto API key pair
404
- */
405
- interface WebCryptoKeyPair {
406
- privateKey: webcrypto.CryptoKey;
407
- publicKey: webcrypto.CryptoKey;
408
- }
409
- &nbsp;
410
- /**
411
- * Generated identity structure
412
- */
413
- export interface GeneratedIdentity {
414
- did: string;
415
- kid: string;
416
- privateKey: string;
417
- publicKey: string;
418
- createdAt: string;
419
- type: 'development' | 'production';
420
- }
421
- &nbsp;
422
- /**
423
- * Generate a new Ed25519 identity with DID:key
424
- *
425
- * @returns Promise&lt;GeneratedIdentity&gt; - Complete identity with keys and DID
426
- */
427
- export async function generateIdentity(): Promise&lt;GeneratedIdentity&gt; {
428
- // 1. Generate Ed25519 keypair using Web Crypto API
429
- const keyPair = (await webcrypto.subtle.generateKey(
430
- {
431
- name: 'Ed25519',
432
- },
433
- true, // extractable
434
- ['sign', 'verify']
435
- )) as WebCryptoKeyPair;
436
- &nbsp;
437
- // 2. Export keys in PKCS#8 (private) and SPKI (public) formats
438
- const privateKeyPKCS8 = await webcrypto.subtle.exportKey('pkcs8', keyPair.privateKey);
439
- const publicKeySPKI = await webcrypto.subtle.exportKey('spki', keyPair.publicKey);
440
- &nbsp;
441
- // 3. Extract RAW keys from PKCS#8/SPKI wrappers
442
- // This matches WebCryptoProvider.generateKeyPair() behavior
443
- const privateKeyRaw = extractEd25519PrivateKey(new Uint8Array(privateKeyPKCS8 as ArrayBuffer));
444
- const publicKeyRaw = extractEd25519PublicKey(Buffer.from(publicKeySPKI as ArrayBuffer).toString('base64'));
445
- &nbsp;
446
- // 4. Convert to base64 strings for storage
447
- const privateKey = Buffer.from(privateKeyRaw).toString('base64');
448
- const publicKey = Buffer.from(publicKeyRaw).toString('base64');
449
- &nbsp;
450
- // 5. Generate DID:key from raw public key bytes
451
- const did = generateDIDFromPublicKeyBytes(publicKeyRaw);
452
- &nbsp;
453
- // 5. Return complete identity
454
- return {
455
- did,
456
- kid: `${did}#key-1`,
457
- privateKey,
458
- publicKey,
459
- createdAt: new Date().toISOString(),
460
- type: 'development'
461
- };
462
- }
463
- &nbsp;
464
- /**
465
- * Generate a DID:key identifier from raw Ed25519 public key bytes
466
- *
467
- * Following the DID:key specification:
468
- * https://w3c-ccg.github.io/did-method-key/
469
- *
470
- * Format: did:key:z&lt;multibase-base58btc(&lt;multicodec-ed25519-pub&gt;&lt;publicKey&gt;)&gt;
471
- *
472
- * @param publicKeyBytes - Raw 32-byte Ed25519 public key
473
- * @returns DID:key string (e.g., "did:key:z6Mk...")
474
- */
475
- function generateDIDFromPublicKeyBytes(publicKeyBytes: Uint8Array): string {
476
- // 1. Ed25519 multicodec prefix (0xed 0x01)
477
- const multicodecPrefix = new Uint8Array([0xed, 0x01]);
478
- &nbsp;
479
- // 2. Combine multicodec prefix + public key
480
- const multicodecKey = new Uint8Array(multicodecPrefix.length + publicKeyBytes.length);
481
- multicodecKey.set(multicodecPrefix);
482
- multicodecKey.set(publicKeyBytes, multicodecPrefix.length);
483
- &nbsp;
484
- // 3. Encode with base58-btc (Bitcoin alphabet)
485
- const base58 = baseX('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
486
- const base58Encoded = base58.encode(multicodecKey);
487
- &nbsp;
488
- // 4. Add multibase prefix 'z' for base58-btc
489
- const multibaseEncoded = 'z' + base58Encoded;
490
- &nbsp;
491
- return `did:key:${multibaseEncoded}`;
492
- }
493
- &nbsp;
494
- /**
495
- * Extract the raw 32-byte Ed25519 private key from PKCS#8 format
496
- *
497
- * PKCS#8 format for Ed25519 (48 bytes total):
498
- * - 16-byte header (algorithm identifier, version, etc.)
499
- * - 32-byte raw Ed25519 private key
500
- *
501
- * @param pkcs8 - PKCS#8 private key as Uint8Array
502
- * @returns Uint8Array - Raw 32-byte Ed25519 private key
503
- */
504
- function extractEd25519PrivateKey(pkcs8: Uint8Array): Uint8Array {
505
- // Extract bytes 16-48 (the raw 32-byte key)
506
- // This matches WebCryptoProvider.extractRawPrivateKey()
507
- return pkcs8.slice(16, 48);
508
- }
509
- &nbsp;
510
- /**
511
- * Extract the raw 32-byte Ed25519 public key from SPKI format
512
- *
513
- * SPKI (SubjectPublicKeyInfo) format:
514
- * - 12-byte header (algorithm identifier)
515
- * - 32-byte raw Ed25519 public key
516
- *
517
- * @param publicKey - Base64-encoded SPKI public key
518
- * @returns Uint8Array - Raw 32-byte Ed25519 public key
519
- */
520
- function extractEd25519PublicKey(publicKey: string): Uint8Array {
521
- const spkiBytes = Buffer.from(publicKey, 'base64');
522
- &nbsp;
523
- // SPKI format: 12-byte header + 32-byte public key
524
- // We extract the last 32 bytes
525
- // This matches WebCryptoProvider.extractRawPublicKey()
526
- return spkiBytes.slice(-32);
527
- }
528
- &nbsp;
529
- /**
530
- * Validate that a string is a valid DID:key identifier
531
- *
532
- * @param did - String to validate
533
- * @returns boolean - True if valid DID:key format
534
- */
535
- export function isValidDIDKey(did: string): boolean {
536
- // DID:key format: did:key:z&lt;base58-encoded-multicodec-key&gt;
537
- const didKeyRegex = /^did:key:z[1-9A-HJ-NP-Za-km-z]{47,}$/;
538
- return didKeyRegex.test(did);
539
- }
540
- &nbsp;
541
- /**
542
- * Extract the base58-encoded multicodec key from a DID:key
543
- *
544
- * @param did - DID:key identifier
545
- * @returns string - Base58-encoded multicodec key (without 'z' prefix)
546
- */
547
- export function extractMultibaseFromDID(did: string): string | null {
548
- if (!isValidDIDKey(did)) {
549
- return null;
550
- }
551
- &nbsp;
552
- // Remove "did:key:z" prefix
553
- return did.slice('did:key:z'.length);
554
- }
555
- &nbsp;</pre></td></tr></table></pre>
556
-
557
- <div class='push'></div><!-- for sticky footer -->
558
- </div><!-- /wrapper -->
559
- <div class='footer quiet pad2 space-top1 center small'>
560
- Code coverage generated by
561
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
562
- at 2025-11-03T20:33:32.026Z
563
- </div>
564
- <script src="prettify.js"></script>
565
- <script>
566
- window.onload = function () {
567
- prettyPrint();
568
- };
569
- </script>
570
- <script src="sorter.js"></script>
571
- <script src="block-navigation.js"></script>
572
- </body>
573
- </html>
574
-