@aopslabs/aops 0.3.12 → 0.3.14
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.
- package/agent-assets-release/agent-assets/core/ec1a663c171f7b847980a06dc84ce045493880f8a71d9d2e992d9bcaa31407ff/manifest.json +2 -2
- package/agent-assets-release/agent-assets/inventory.json +3 -3
- package/agent-assets-release/agent-assets-release.json +8 -8
- package/agent-assets-release/agent-assets-release.sigstore.json +27 -21
- package/dist/commands/global-update.js +133 -22
- package/dist/lib/agent-assets/native-fs.js +2 -2
- package/dist/lib/tui-launcher.js +1 -0
- package/native/manifest.json +1 -1
- package/native/qualifications/win32-x64.json +1 -1
- package/native/tui/darwin-arm64/aops-tui +0 -0
- package/native/tui/linux-x64/aops-tui +0 -0
- package/native/tui/win32-x64/aops-tui.exe +0 -0
- package/package.json +1 -1
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"name": "aops",
|
|
11
11
|
"optional": false,
|
|
12
12
|
"packageSha256": "ec1a663c171f7b847980a06dc84ce045493880f8a71d9d2e992d9bcaa31407ff",
|
|
13
|
-
"version": "0.3.
|
|
14
|
-
"versionId": "community-core-0.3.
|
|
13
|
+
"version": "0.3.14",
|
|
14
|
+
"versionId": "community-core-0.3.14"
|
|
15
15
|
},
|
|
16
16
|
"gateway": {
|
|
17
17
|
"byteLength": 621,
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"kind": "aops-community-agent-assets-inventory-v1",
|
|
23
23
|
"schemaVersion": 1,
|
|
24
24
|
"source": {
|
|
25
|
-
"commit": "
|
|
25
|
+
"commit": "4b1be22676cc3666a27c17ecdc693bfd89d7d63d",
|
|
26
26
|
"repository": "git+https://github.com/eeemzs/aops-platform",
|
|
27
27
|
"root": "apps/aops-cli/assets/agent-assets"
|
|
28
28
|
}
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"name": "aops",
|
|
12
12
|
"optional": false,
|
|
13
13
|
"packageSha256": "ec1a663c171f7b847980a06dc84ce045493880f8a71d9d2e992d9bcaa31407ff",
|
|
14
|
-
"version": "0.3.
|
|
15
|
-
"versionId": "community-core-0.3.
|
|
14
|
+
"version": "0.3.14",
|
|
15
|
+
"versionId": "community-core-0.3.14"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
{
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
{
|
|
124
124
|
"byteLength": 3978,
|
|
125
125
|
"ref": "agent-assets/core/ec1a663c171f7b847980a06dc84ce045493880f8a71d9d2e992d9bcaa31407ff/manifest.json",
|
|
126
|
-
"sha256": "
|
|
126
|
+
"sha256": "1a8b09c11c8257ffb18d960b2f66cb102e80c31ef2ae030ac810f5ad3a95ca51"
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
"byteLength": 621,
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
{
|
|
134
134
|
"byteLength": 926,
|
|
135
135
|
"ref": "agent-assets/inventory.json",
|
|
136
|
-
"sha256": "
|
|
136
|
+
"sha256": "590ff7c7f4fe1de4c19cc030bc9e0e830101cfc06b24f51efb788a4993da3ce9"
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"byteLength": 281,
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
},
|
|
150
150
|
"inventory": {
|
|
151
151
|
"ref": "agent-assets/inventory.json",
|
|
152
|
-
"sha256": "
|
|
152
|
+
"sha256": "590ff7c7f4fe1de4c19cc030bc9e0e830101cfc06b24f51efb788a4993da3ce9"
|
|
153
153
|
},
|
|
154
154
|
"kind": "aops-community-agent-assets-release-v1",
|
|
155
155
|
"projection": {
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
},
|
|
159
159
|
"root": "agent-assets",
|
|
160
160
|
"schemaVersion": 1,
|
|
161
|
-
"setSha256": "
|
|
161
|
+
"setSha256": "a7d14136fb5d75e254d49796d5f7649f31063f6f27dab2fa7449128823e294cb"
|
|
162
162
|
},
|
|
163
163
|
"evidence": {
|
|
164
164
|
"signature": {
|
|
@@ -166,10 +166,10 @@
|
|
|
166
166
|
}
|
|
167
167
|
},
|
|
168
168
|
"kind": "aops-community-agent-assets-bundle-v1",
|
|
169
|
-
"releaseVersion": "0.3.
|
|
169
|
+
"releaseVersion": "0.3.14",
|
|
170
170
|
"schemaVersion": 1,
|
|
171
171
|
"source": {
|
|
172
|
-
"commit": "
|
|
172
|
+
"commit": "4b1be22676cc3666a27c17ecdc693bfd89d7d63d",
|
|
173
173
|
"repository": "git+https://github.com/eeemzs/aops-platform",
|
|
174
174
|
"root": "apps/aops-cli/assets/agent-assets"
|
|
175
175
|
}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"x509CertificateChain": {
|
|
5
5
|
"certificates": [
|
|
6
6
|
{
|
|
7
|
-
"rawBytes": "
|
|
7
|
+
"rawBytes": "MIIHdTCCBvugAwIBAgIUSgQYaM4oH/x3x057qFl2GA+r/U0wCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwODEzMTM0NDE2WhcNMjYwODEzMTM1NDE2WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExx/zpj3DFoELSx+l0ii6qqzzTv+oYwBBmctMWB59XL1X/5XpcgV9d+TYSxstA+1ssS0428i2HhwYshoa0MkJ06OCBhowggYWMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUwkj/Z0SnW6RnBZAh3h1qljYRdKUwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdAYDVR0RAQH/BGowaIZmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoNGIxYmUyMjY3NmNjMzY2NmEyN2MxN2VjZGM2OTNiZmQ4OWQ3ZDYzZDAxBgorBgEEAYO/MAEEBCNTaWduIGV4YWN0IHB1YmxpYyBBT1BTIGFnZW50IGFzc2V0czAiBgorBgEEAYO/MAEFBBRlZWVtenMvYW9wcy1wbGF0Zm9ybTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHYGCisGAQQBg78wAQkEaAxmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoNGIxYmUyMjY3NmNjMzY2NmEyN2MxN2VjZGM2OTNiZmQ4OWQ3ZDYzZDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwNwYKKwYBBAGDvzABDAQpDCdodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0wOAYKKwYBBAGDvzABDQQqDCg0YjFiZTIyNjc2Y2MzNjY2YTI3YzE3ZWNkYzY5M2JmZDg5ZDdkNjNkMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTMxNjI1NTAyNjApBgorBgEEAYO/MAEQBBsMGWh0dHBzOi8vZ2l0aHViLmNvbS9lZWVtenMwGQYKKwYBBAGDvzABEQQLDAkxMDkzMTA3NzQwdgYKKwYBBAGDvzABEgRoDGZodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1wdWJsaWMtYWdlbnQtYXNzZXRzLnltbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg0YjFiZTIyNjc2Y2MzNjY2YTI3YzE3ZWNkYzY5M2JmZDg5ZDdkNjNkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwWwYKKwYBBAGDvzABFQRNDEtodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vYWN0aW9ucy9ydW5zLzMxNzA2MzY5OTg4L2F0dGVtcHRzLzEwFwYKKwYBBAGDvzABFgQJDAdwcml2YXRlMFIGCisGAQQBg78wARgERAxCcmVwbzplZWVtenNAMTA5MzEwNzc0L2FvcHMtcGxhdGZvcm1AMTMxNjI1NTAyNjpyZWY6cmVmcy9oZWFkcy9tYWluMIGLBgorBgEEAdZ5AgQCBH0EewB5AHcA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGf+13N5AAABAMASDBGAiEA6bAGnExsRZ4UYg0IYOxee1G+zku4iGM/NUkJrfPQOMwCIQDKjnjYGQDEyhXYvUKg5dDPjUMUj58woxJWdQCgQibb9TAKBggqhkjOPQQDAwNoADBlAjEAvtnAgj7EK+2eNy4dFZa8FCoW9ReQsxMR34QuM/9dOYUvDB8AZ233vVUzGtBQjgAJAjALcrM7He6Jcgk1DRuwkAsqSsoswd5GeO91VhuSYdakVIk4mGRQTkcI+KuW7n5oqGU="
|
|
8
8
|
}
|
|
9
9
|
]
|
|
10
10
|
},
|
|
11
11
|
"tlogEntries": [
|
|
12
12
|
{
|
|
13
|
-
"logIndex": "
|
|
13
|
+
"logIndex": "2451721425",
|
|
14
14
|
"logId": {
|
|
15
15
|
"keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="
|
|
16
16
|
},
|
|
@@ -18,34 +18,40 @@
|
|
|
18
18
|
"kind": "hashedrekord",
|
|
19
19
|
"version": "0.0.1"
|
|
20
20
|
},
|
|
21
|
-
"integratedTime": "
|
|
21
|
+
"integratedTime": "1786628657",
|
|
22
22
|
"inclusionPromise": {
|
|
23
|
-
"signedEntryTimestamp": "
|
|
23
|
+
"signedEntryTimestamp": "MEUCIQDN/u03Z3TTcWdtyEmSSJbjfhEsyRVIYllYHca+E10waQIgT2ig9PWP8lTg+WMvRk6a2jaAjlZhbUYAst+5QleDqCg="
|
|
24
24
|
},
|
|
25
25
|
"inclusionProof": {
|
|
26
|
-
"logIndex": "
|
|
27
|
-
"rootHash": "
|
|
28
|
-
"treeSize": "
|
|
26
|
+
"logIndex": "2329817163",
|
|
27
|
+
"rootHash": "CFRh5bsN2BUcVcs135/BL1Hb36IleS/DVSe7PpHICw8=",
|
|
28
|
+
"treeSize": "2329817250",
|
|
29
29
|
"hashes": [
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
30
|
+
"fhHU1vYvvXgxqXy0D3hos03CGiKVvOvJpVIEEyxV9kk=",
|
|
31
|
+
"7etL9ZfxN5z3RAGzoK4MuUg9/26tVJ+MydZdy/1XmRU=",
|
|
32
|
+
"Tlu8xG+VtIGYz37PZm37Sm7szLF5UtQlSzfxVajV0eM=",
|
|
33
|
+
"tmWNGOtQfT6NLO+NRUxqFUj5yJ5n2/QQcbkoPDP22b8=",
|
|
34
|
+
"YJuXGRS4D7XUcmbqiLJd28WhGRm4sLKMB3Q4m64h0bA=",
|
|
35
|
+
"Vxpyi774eOpCeV6E/2PCCC6NOBKn0fq3TQCAc4Txy20=",
|
|
36
|
+
"k9zCZy0uJk+mt/g+ZU2XKpAGlgzm+oB2a4unPbuLxxw=",
|
|
37
|
+
"UmIf1bdYkBjc37XNrs56ZoUJsYHho1SPTSBDOK0yf2s=",
|
|
38
|
+
"a5VFPQY+OwGDOIbXpTKjFiR4nLpYmQI28WxbxNN2jmI=",
|
|
39
|
+
"IprmBla/eZWo6Dkkr5pWVz/Z1bO9VCG3pljh6YQsUN8=",
|
|
40
|
+
"tbHTh11f8HO1/vjDd2XEu/fZ0RXSI0M+SfIeG3/DrZA=",
|
|
41
|
+
"BP4srQF1P/sAxt4h9+7haEMwhZTE/MBdc6mUnr/Irg8=",
|
|
42
|
+
"LsGWtzUHwiUWuv0rYdm2QhDqHSL7VfPEDGygRXO0/pY=",
|
|
43
|
+
"fkP96AJsjebfJ8WnLnxWOhTrjLumzpaPXZYT8LWqkmI=",
|
|
44
|
+
"JrZU75bHC8kO4u24orKA936FvCUUKrQ9nX4wyGyf2oE=",
|
|
45
|
+
"Yf0KNRQvpU5eUazOp61yyTzte4kp/AkUx5uokleLp1c=",
|
|
40
46
|
"mYkFdqU5C9m3w88wTn9l6UpYo+PI93c232s+vBiBEpM=",
|
|
41
47
|
"ygTG08vB2EEmJQPXRvF5H06Tlac72AkODENK7PhCPkw=",
|
|
42
48
|
"xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="
|
|
43
49
|
],
|
|
44
50
|
"checkpoint": {
|
|
45
|
-
"envelope": "rekor.sigstore.dev - 1193050959916656506\
|
|
51
|
+
"envelope": "rekor.sigstore.dev - 1193050959916656506\n2329817250\nCFRh5bsN2BUcVcs135/BL1Hb36IleS/DVSe7PpHICw8=\n\n— rekor.sigstore.dev wNI9ajBGAiEAvxDAVaKaNo5g+u5eYhu/0EXaO88DeY0RgvsMW55X9hQCIQCsXQUkiUl3pOR+/lmWay6lUTKwcp4et+JkXO7zYbH6gw==\n"
|
|
46
52
|
}
|
|
47
53
|
},
|
|
48
|
-
"canonicalizedBody": "
|
|
54
|
+
"canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlNTJjZDhiN2M5M2FmMDkzOWQ1ZmRlMTIwZDNlMWNkZGY2Y2U2NjNlMGQwNDM3YWU3NDcyZTlmOWRjYTk2N2FiIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJQVlYL1BGNFoxeWlSSmo1L0U5QVQ0YXFaUGhxRm52SmFOZXRhVTA0UzJOK0FpQUoxeGU2cHc0ZGQ4T0RKV21JdXBKN0NMT0N3bnd1cW9yejdjOXF4aUdSVVE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGtWRU5EUW5aMVowRjNTVUpCWjBsVlUyZFJXV0ZOTkc5SUwzZ3plREExTjNGR2JESkhRU3R5TDFVd2QwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFUlhwTlZFMHdUa1JGTWxkb1kwNU5hbGwzVDBSRmVrMVVUVEZPUkVVeVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVY0ZUM5NmNHb3pSRVp2UlV4VGVDdHNNR2xwTm5GeGVucFVkaXR2V1hkQ1FtMWpkRTBLVjBJMU9WaE1NVmd2TlZod1kyZFdPV1FyVkZsVGVITjBRU3N4YzNOVE1EUXlPR2t5U0doM1dYTm9iMkV3VFd0S01EWlBRMEpvYjNkbloxbFhUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlYzYTJvdkNsb3dVMjVYTmxKdVFscEJhRE5vTVhGc2FsbFNaRXRWZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSQldVUldVakJTUVZGSUwwSkhiM2RoU1ZwdFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKV2JGcFhNVFpqZVRsb1lqTkNlZ3BNV0VKeldWaFNiV0l6U25STWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTA1d1dqSTBkR05JVm1saVIyeHFURmRHYmxwWE5UQk1WMFo2Q21NeVZqQmplVFUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJyUjBOcGMwZEJVVkZDWnpjNGQwRlJSVVZMTW1nd1pFaENlazlwT0hZS1pFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2WkZkS01XTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNTSGRaUzB0M1dVSkNRVWRFZG5wQlFncEJaMUZTWkRJNWVXRXlXbk5pTTJSbVdrZHNlbU5IUmpCWk1tZDNUbWRaUzB0M1dVSkNRVWRFZG5wQlFrRjNVVzlPUjBsNFdXMVZlVTFxV1ROT2JVNXFDazE2V1RKT2JVVjVUakpOZUU0eVZtcGFSMDB5VDFST2FWcHRVVFJQVjFFeldrUlplbHBFUVhoQ1oyOXlRbWRGUlVGWlR5OU5RVVZGUWtOT1ZHRlhaSFVLU1VkV05GbFhUakJKU0VJeFdXMTRjRmw1UWtKVU1VSlVTVWRHYmxwWE5UQkpSMFo2WXpKV01HTjZRV2xDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pTYkFwYVYxWjBaVzVOZGxsWE9YZGplVEYzWWtkR01GcHRPWGxpVkVGa1FtZHZja0puUlVWQldVOHZUVUZGUjBKQk9YbGFWMXA2VERKb2JGbFhVbnBNTWpGb0NtRlhOSGRQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZta0taRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU0ZsSFEybHpSMEZSVVVKbk56aDNRVkZyUldGQmVHMWhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESldiRnBYTVRaamVUbG9Zak5DZWt4WVFuTlpXRkp0WWpOS2RFeDVOVzVoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3elRuQmFNalIwQ21OSVZtbGlSMnhxVEZkR2JscFhOVEJNVjBaNll6SldNR041TlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVJS1p6YzRkMEZSYjBWTFozZHZUa2RKZUZsdFZYbE5hbGt6VG0xT2FrMTZXVEpPYlVWNVRqSk5lRTR5Vm1wYVIwMHlUMVJPYVZwdFVUUlBWMUV6V2tSWmVncGFSRUZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOWlNMDR3V2xkUmQwNTNXVXRMZDFsQ1FrRkhSSFo2UVVKRVFWRndDa1JEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIzVDBGWlMwdDNXVUlLUWtGSFJIWjZRVUpFVVZGeFJFTm5NRmxxUm1sYVZFbDVUbXBqTWxreVRYcE9hbGt5V1ZSSk0xbDZSVE5hVjA1cldYcFpOVTB5U20xYVJHYzFXa1JrYXdwT2FrNXJUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5RbTlIUTJselIwRlJVVUpuTnpoM0NrRlJPRVZFUVhkTFRWUk5lRTVxU1RGT1ZFRjVUbXBCY0VKbmIzSkNaMFZGUVZsUEwwMUJSVkZDUW5OTlIxZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZta0tURzFPZG1KVE9XeGFWMVowWlc1TmQwZFJXVXRMZDFsQ1FrRkhSSFo2UVVKRlVWRk1SRUZyZUUxRWEzcE5WRUV6VG5wUmQyUm5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1JXZFNiMFJIV205a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIyQ2t4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU15Ykc1aWFURjNaRmRLYzJGWFRYUlpWMlJzWW01UmRGbFlUbnBhV0ZKNlRHNXNkR0pGUW5rS1dsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjVVJEWnpCWmFrWnBXbFJKZVU1cVl6SlpNazE2VG1wWk1ncFpWRWt6V1hwRk0xcFhUbXRaZWxrMVRUSktiVnBFWnpWYVJHUnJUbXBPYTAxRFJVZERhWE5IUVZGUlFtYzNPSGRCVWxGRlJYZDNVbVF5T1hsaE1scHpDbUl6WkdaYVIyeDZZMGRHTUZreVozZFhkMWxMUzNkWlFrSkJSMFIyZWtGQ1JsRlNUa1JGZEc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLV2xkV2JHSlljSHBNTWtaMlkwaE5kR05IZUdoa1IxcDJZMjB3ZGxsWFRqQmhWemwxWTNrNWVXUlhOWHBNZWsxNFRucEJNazE2V1RWUFZHYzBUREpHTUFwa1IxWjBZMGhTZWt4NlJYZEdkMWxMUzNkWlFrSkJSMFIyZWtGQ1JtZFJTa1JCWkhkamJXd3lXVmhTYkUxR1NVZERhWE5IUVZGUlFtYzNPSGRCVW1kRkNsSkJlRU5qYlZaM1lucHdiRnBYVm5SbGJrNUJUVlJCTlUxNlJYZE9lbU13VERKR2RtTklUWFJqUjNob1pFZGFkbU50TVVGTlZFMTRUbXBKTVU1VVFYa0tUbXB3ZVZwWFdUWmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFKUjB4Q1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtnd1JXVjNRalZCU0dOQk0xUXdkd3BoYzJKSVJWUktha2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaaXN4TTA0MVFVRkJRa0ZOUVZORVFrZEJhVVZCQ2paaVFVZHVSWGh6VWxvMFZWbG5NRWxaVDNobFpURkhLM3ByZFRScFIwMHZUbFZyU25KbVVGRlBUWGREU1ZGRVMycHVhbGxIVVVSRmVXaFlXWFpWUzJjS05XUkVVR3BWVFZWcU5UaDNiM2hLVjJSUlEyZFJhV0ppT1ZSQlMwSm5aM0ZvYTJwUFVGRlJSRUYzVG05QlJFSnNRV3BGUVhaMGJrRm5hamRGU3lzeVpRcE9lVFJrUmxwaE9FWkRiMWM1VW1WUmMzaE5Vak0wVVhWTkx6bGtUMWxWZGtSQ09FRmFNak16ZGxaVmVrZDBRbEZxWjBGS1FXcEJUR055VFRkSVpUWktDbU5uYXpGRVVuVjNhMEZ6Y1ZOemIzTjNaRFZIWlU4NU1WWm9kVk5aWkdGclZrbHJORzFIVWxGVWEyTkpLMHQxVnpkdU5XOXhSMVU5Q2kwdExTMHRSVTVFSUVORlVsUkpSa2xEUVZSRkxTMHRMUzBLIn19fX0="
|
|
49
55
|
}
|
|
50
56
|
],
|
|
51
57
|
"timestampVerificationData": {}
|
|
@@ -53,8 +59,8 @@
|
|
|
53
59
|
"messageSignature": {
|
|
54
60
|
"messageDigest": {
|
|
55
61
|
"algorithm": "SHA2_256",
|
|
56
|
-
"digest": "
|
|
62
|
+
"digest": "5SzYt8k68JOdX94SDT4c3fbOZj4NBDeudHLp+dypZ6s="
|
|
57
63
|
},
|
|
58
|
-
"signature": "
|
|
64
|
+
"signature": "MEQCIAYX/PF4Z1yiRJj5/E9AT4aqZPhqFnvJaNetaU04S2N+AiAJ1xe6pw4dd8ODJWmIupJ7CLOCwnwuqorz7c9qxiGRUQ=="
|
|
59
65
|
}
|
|
60
66
|
}
|
|
@@ -14,9 +14,12 @@ const EXACT_STABLE_VERSION = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u;
|
|
|
14
14
|
const PLAN_ID = /^sha256:[a-f0-9]{64}$/u;
|
|
15
15
|
const SHA256 = /^[a-f0-9]{64}$/u;
|
|
16
16
|
const SHA512_INTEGRITY = /^sha512-[A-Za-z0-9+/]+={0,2}$/u;
|
|
17
|
+
const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;
|
|
17
18
|
const PACKAGE_NAMES = ['@aopslabs/aops', '@aopslabs/aops-server'];
|
|
18
19
|
const HEALTH_SAMPLES = 4;
|
|
19
20
|
const HEALTH_INTERVAL_MS = 3_000;
|
|
21
|
+
const HEALTH_STARTUP_ATTEMPTS = 30;
|
|
22
|
+
const HEALTH_STARTUP_INTERVAL_MS = 2_000;
|
|
20
23
|
function cleanEnvironment() {
|
|
21
24
|
return {
|
|
22
25
|
...process.env,
|
|
@@ -44,8 +47,32 @@ function defaultRunner(command, args, cwd = process.cwd()) {
|
|
|
44
47
|
assert.equal(result.status, 0, `${command} ${args.join(' ')} failed\n${result.stdout}\n${result.stderr}`);
|
|
45
48
|
return result.stdout;
|
|
46
49
|
}
|
|
47
|
-
function
|
|
48
|
-
|
|
50
|
+
export function resolveNpmInvocation(options = {}) {
|
|
51
|
+
const platform = options.platform ?? process.platform;
|
|
52
|
+
if (platform !== 'win32')
|
|
53
|
+
return { command: 'npm', prefixArgs: [] };
|
|
54
|
+
const nodeExecutable = path.resolve(options.nodeExecutable ?? process.execPath);
|
|
55
|
+
const environment = options.environment ?? process.env;
|
|
56
|
+
const fileExists = options.fileExists ?? existsSync;
|
|
57
|
+
const candidates = [
|
|
58
|
+
path.join(path.dirname(nodeExecutable), 'node_modules', 'npm', 'bin', 'npm-cli.js'),
|
|
59
|
+
];
|
|
60
|
+
const npmExecPath = environment.npm_execpath?.trim();
|
|
61
|
+
if (npmExecPath && /^npm-cli\.(?:c?js)$/iu.test(path.basename(npmExecPath))) {
|
|
62
|
+
candidates.push(path.resolve(npmExecPath));
|
|
63
|
+
}
|
|
64
|
+
for (const entry of String(environment.PATH ?? '').split(path.delimiter)) {
|
|
65
|
+
if (!entry.trim())
|
|
66
|
+
continue;
|
|
67
|
+
candidates.push(path.resolve(entry, 'node_modules', 'npm', 'bin', 'npm-cli.js'));
|
|
68
|
+
}
|
|
69
|
+
const npmCli = [...new Set(candidates)].find((candidate) => fileExists(candidate));
|
|
70
|
+
assert.ok(npmCli, 'windows_npm_cli_not_found');
|
|
71
|
+
return { command: nodeExecutable, prefixArgs: [npmCli] };
|
|
72
|
+
}
|
|
73
|
+
function runNpm(run, args, cwd) {
|
|
74
|
+
const invocation = resolveNpmInvocation();
|
|
75
|
+
return run(invocation.command, [...invocation.prefixArgs, ...args], cwd);
|
|
49
76
|
}
|
|
50
77
|
export function publicNpmArgs(args) {
|
|
51
78
|
return [
|
|
@@ -106,9 +133,8 @@ function packageManifest(packageRoot, expectedName) {
|
|
|
106
133
|
return manifest;
|
|
107
134
|
}
|
|
108
135
|
function inspectGlobalInstall(run) {
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const globalRoot = plainDirectory(run(npm, ['root', '--global']).trim(), 'global npm root');
|
|
136
|
+
const globalPrefix = plainDirectory(runNpm(run, ['prefix', '--global']).trim(), 'global npm prefix');
|
|
137
|
+
const globalRoot = plainDirectory(runNpm(run, ['root', '--global']).trim(), 'global npm root');
|
|
112
138
|
ensureWithin(globalPrefix, globalRoot, 'global npm root');
|
|
113
139
|
const cliRoot = path.join(globalRoot, '@aopslabs', 'aops');
|
|
114
140
|
const cli = packageManifest(cliRoot, '@aopslabs/aops');
|
|
@@ -129,10 +155,12 @@ function inspectGlobalInstall(run) {
|
|
|
129
155
|
assert.equal(exactVersion(server.version, `installed ${placement} Server version`), exactServerDependency, `installed ${placement} Server does not match the CLI exact dependency`);
|
|
130
156
|
}
|
|
131
157
|
const cliPath = plainFile(path.join(cliRoot, 'dist', 'main.js'), 'global AOPS CLI entrypoint');
|
|
158
|
+
const serverPath = plainDirectory(nestedServer ? nestedServerRoot : topLevelServerRoot, 'global AOPS Server root');
|
|
132
159
|
return {
|
|
133
160
|
globalPrefix,
|
|
134
161
|
globalRoot,
|
|
135
162
|
cliPath,
|
|
163
|
+
serverPath,
|
|
136
164
|
packages: {
|
|
137
165
|
cli: exactVersion(cli.version, 'installed CLI version'),
|
|
138
166
|
server: exactServerDependency,
|
|
@@ -141,7 +169,7 @@ function inspectGlobalInstall(run) {
|
|
|
141
169
|
};
|
|
142
170
|
}
|
|
143
171
|
function npmViewString(run, selector, field) {
|
|
144
|
-
const value = parseJson(run
|
|
172
|
+
const value = parseJson(runNpm(run, publicNpmArgs(['view', selector, field, '--json'])).trim(), `npm_view_${field}`);
|
|
145
173
|
if (typeof value !== 'string')
|
|
146
174
|
throw new Error(`${selector} ${field} must be a string`);
|
|
147
175
|
return value;
|
|
@@ -189,7 +217,7 @@ function assertHealthyServices(services) {
|
|
|
189
217
|
assert.equal(services.cockpit.health, 'healthy', 'AOPS Cockpit must be healthy before update');
|
|
190
218
|
}
|
|
191
219
|
function packRegistryPackage(run, destination, name, version) {
|
|
192
|
-
const packed = parseJson(run
|
|
220
|
+
const packed = parseJson(runNpm(run, publicNpmArgs([
|
|
193
221
|
'pack',
|
|
194
222
|
`${name}@${version}`,
|
|
195
223
|
'--ignore-scripts',
|
|
@@ -276,6 +304,8 @@ export function prepareGlobalUpdate(options = {}, run = defaultRunner) {
|
|
|
276
304
|
requiresExactConfirmation: true,
|
|
277
305
|
healthSamples: HEALTH_SAMPLES,
|
|
278
306
|
healthIntervalMs: HEALTH_INTERVAL_MS,
|
|
307
|
+
healthStartupAttempts: HEALTH_STARTUP_ATTEMPTS,
|
|
308
|
+
healthStartupIntervalMs: HEALTH_STARTUP_INTERVAL_MS,
|
|
279
309
|
},
|
|
280
310
|
};
|
|
281
311
|
const plan = { ...body, planId: computeGlobalUpdatePlanId(body) };
|
|
@@ -330,6 +360,8 @@ export function readGlobalUpdatePlan(planPath) {
|
|
|
330
360
|
assert.equal(plan.safety.requiresExactConfirmation, true);
|
|
331
361
|
assert.equal(plan.safety.healthSamples, HEALTH_SAMPLES);
|
|
332
362
|
assert.equal(plan.safety.healthIntervalMs, HEALTH_INTERVAL_MS);
|
|
363
|
+
assert.equal(plan.safety.healthStartupAttempts, HEALTH_STARTUP_ATTEMPTS);
|
|
364
|
+
assert.equal(plan.safety.healthStartupIntervalMs, HEALTH_STARTUP_INTERVAL_MS);
|
|
333
365
|
return plan;
|
|
334
366
|
}
|
|
335
367
|
export function installGlobalUpdateClosure(run, plan, records, topology) {
|
|
@@ -337,10 +369,10 @@ export function installGlobalUpdateClosure(run, plan, records, topology) {
|
|
|
337
369
|
const server = packageRecordByName(records, '@aopslabs/aops-server');
|
|
338
370
|
const cacheRoot = path.join(plan.operationRoot, 'cache');
|
|
339
371
|
mkdirSync(cacheRoot, { recursive: true, mode: 0o700 });
|
|
340
|
-
run
|
|
372
|
+
runNpm(run, publicNpmArgs(['cache', 'add', server.path, `--cache=${cacheRoot}`]));
|
|
341
373
|
const topLevelServerRoot = path.join(plan.globalRoot, '@aopslabs', 'aops-server');
|
|
342
374
|
if (existsSync(path.join(topLevelServerRoot, 'package.json'))) {
|
|
343
|
-
run
|
|
375
|
+
runNpm(run, publicNpmArgs([
|
|
344
376
|
'--prefix',
|
|
345
377
|
plan.globalPrefix,
|
|
346
378
|
'uninstall',
|
|
@@ -363,12 +395,12 @@ export function installGlobalUpdateClosure(run, plan, records, topology) {
|
|
|
363
395
|
'--audit=false',
|
|
364
396
|
];
|
|
365
397
|
if (topology.topLevelServer && !topology.nestedServer) {
|
|
366
|
-
run
|
|
398
|
+
runNpm(run, publicNpmArgs([...commonInstallArgs, cli.path, server.path]));
|
|
367
399
|
return;
|
|
368
400
|
}
|
|
369
|
-
run
|
|
401
|
+
runNpm(run, publicNpmArgs([...commonInstallArgs, cli.path]));
|
|
370
402
|
if (topology.topLevelServer) {
|
|
371
|
-
run
|
|
403
|
+
runNpm(run, publicNpmArgs([
|
|
372
404
|
...commonInstallArgs,
|
|
373
405
|
server.path,
|
|
374
406
|
]));
|
|
@@ -386,16 +418,54 @@ function stopService(run, cliPath, service, bestEffort = false) {
|
|
|
386
418
|
function startService(run, cliPath, service) {
|
|
387
419
|
run(process.execPath, [cliPath, service, 'start', '--json']);
|
|
388
420
|
}
|
|
421
|
+
function updateServerApplication(run, cliPath, expected) {
|
|
422
|
+
const result = runInstalledJson(run, cliPath, ['server', 'update', '--detach', '--json']);
|
|
423
|
+
assert.equal(result.status, 'community-native-application-updated');
|
|
424
|
+
assert.equal(result.priorReleaseVersion, expected.prior);
|
|
425
|
+
assert.equal(result.releaseVersion, expected.target);
|
|
426
|
+
assert.equal(typeof result.updateId, 'string');
|
|
427
|
+
assert.match(result.updateId, UUID);
|
|
428
|
+
return result.updateId;
|
|
429
|
+
}
|
|
430
|
+
function rollbackServerApplication(run, cliPath, updateId, serverPath, expectedRelease) {
|
|
431
|
+
const result = runInstalledJson(run, cliPath, [
|
|
432
|
+
'server',
|
|
433
|
+
'rollback',
|
|
434
|
+
'app',
|
|
435
|
+
'--update-id',
|
|
436
|
+
updateId,
|
|
437
|
+
'--source-root',
|
|
438
|
+
serverPath,
|
|
439
|
+
'--detach',
|
|
440
|
+
'--json',
|
|
441
|
+
]);
|
|
442
|
+
assert.equal(result.status, 'community-native-application-rolled-back');
|
|
443
|
+
assert.equal(result.updateId, updateId);
|
|
444
|
+
assert.equal(result.releaseVersion, expectedRelease);
|
|
445
|
+
}
|
|
389
446
|
const defaultExecutionDependencies = {
|
|
390
447
|
fetch: globalThis.fetch.bind(globalThis),
|
|
391
448
|
sleep: (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)),
|
|
392
449
|
};
|
|
450
|
+
class StartupHealthPending extends Error {
|
|
451
|
+
constructor(cause) {
|
|
452
|
+
super('global_update_health_startup_pending', { cause });
|
|
453
|
+
}
|
|
454
|
+
}
|
|
393
455
|
async function assertStableHealth(run, plan, execution) {
|
|
394
456
|
const evidence = [];
|
|
395
|
-
|
|
457
|
+
const collectSample = async (sample, startup) => {
|
|
396
458
|
const installed = inspectGlobalInstall(run);
|
|
397
|
-
|
|
398
|
-
|
|
459
|
+
let services;
|
|
460
|
+
try {
|
|
461
|
+
services = serviceSnapshot(run, installed.cliPath);
|
|
462
|
+
assertHealthyServices(services);
|
|
463
|
+
}
|
|
464
|
+
catch (error) {
|
|
465
|
+
if (startup)
|
|
466
|
+
throw new StartupHealthPending(error);
|
|
467
|
+
throw error;
|
|
468
|
+
}
|
|
399
469
|
const serverOrigin = validateLoopbackOrigin(services.server.origin, 'AOPS Server origin');
|
|
400
470
|
const cockpitOrigin = validateLoopbackOrigin(services.cockpit.origin, 'AOPS Cockpit origin');
|
|
401
471
|
const endpoints = [];
|
|
@@ -404,15 +474,45 @@ async function assertStableHealth(run, plan, execution) {
|
|
|
404
474
|
['cockpit', cockpitOrigin],
|
|
405
475
|
['cockpit-proxy', `${cockpitOrigin}/api/health`],
|
|
406
476
|
]) {
|
|
407
|
-
|
|
477
|
+
let response;
|
|
478
|
+
try {
|
|
479
|
+
response = await execution.fetch(url, { cache: 'no-store', signal: AbortSignal.timeout(15_000) });
|
|
480
|
+
}
|
|
481
|
+
catch (error) {
|
|
482
|
+
if (startup)
|
|
483
|
+
throw new StartupHealthPending(error);
|
|
484
|
+
throw error;
|
|
485
|
+
}
|
|
486
|
+
if (response.status !== 200 && startup) {
|
|
487
|
+
throw new StartupHealthPending(new Error(`${name} health returned ${response.status}`));
|
|
488
|
+
}
|
|
408
489
|
assert.equal(response.status, 200, `${name} health returned ${response.status}`);
|
|
409
490
|
const body = await response.arrayBuffer();
|
|
410
491
|
endpoints.push({ name, url, status: response.status, bytes: body.byteLength });
|
|
411
492
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
493
|
+
return { sample, observedAt: new Date().toISOString(), endpoints };
|
|
494
|
+
};
|
|
495
|
+
let startupError;
|
|
496
|
+
for (let attempt = 1; attempt <= plan.safety.healthStartupAttempts; attempt += 1) {
|
|
497
|
+
try {
|
|
498
|
+
evidence.push(await collectSample(1, true));
|
|
499
|
+
startupError = undefined;
|
|
500
|
+
break;
|
|
415
501
|
}
|
|
502
|
+
catch (error) {
|
|
503
|
+
if (!(error instanceof StartupHealthPending))
|
|
504
|
+
throw error;
|
|
505
|
+
startupError = error.cause ?? error;
|
|
506
|
+
if (attempt < plan.safety.healthStartupAttempts) {
|
|
507
|
+
await execution.sleep(plan.safety.healthStartupIntervalMs);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
if (startupError)
|
|
512
|
+
throw startupError;
|
|
513
|
+
for (let sample = 2; sample <= plan.safety.healthSamples; sample += 1) {
|
|
514
|
+
await execution.sleep(plan.safety.healthIntervalMs);
|
|
515
|
+
evidence.push(await collectSample(sample, false));
|
|
416
516
|
}
|
|
417
517
|
return evidence;
|
|
418
518
|
}
|
|
@@ -437,6 +537,7 @@ export async function applyGlobalUpdate(options, run = defaultRunner, execution
|
|
|
437
537
|
assert.equal(current.globalPrefix, plan.globalPrefix, 'global npm prefix changed after update planning');
|
|
438
538
|
assertHealthyServices(serviceSnapshot(run, current.cliPath));
|
|
439
539
|
const events = [];
|
|
540
|
+
let applicationUpdateId = null;
|
|
440
541
|
try {
|
|
441
542
|
stopService(run, current.cliPath, 'cockpit');
|
|
442
543
|
events.push('stopped:cockpit');
|
|
@@ -447,8 +548,11 @@ export async function applyGlobalUpdate(options, run = defaultRunner, execution
|
|
|
447
548
|
const updated = inspectGlobalInstall(run);
|
|
448
549
|
assert.deepEqual(updated.packages, plan.target.packages, 'installed candidate closure is not exact');
|
|
449
550
|
assert.deepEqual(updated.topology, plan.target.topology, 'installed candidate topology is not canonical');
|
|
450
|
-
|
|
451
|
-
|
|
551
|
+
applicationUpdateId = updateServerApplication(run, updated.cliPath, {
|
|
552
|
+
prior: plan.prior.packages.server,
|
|
553
|
+
target: plan.target.packages.server,
|
|
554
|
+
});
|
|
555
|
+
events.push('updated:server');
|
|
452
556
|
startService(run, updated.cliPath, 'cockpit');
|
|
453
557
|
events.push('started:cockpit');
|
|
454
558
|
const healthEvidence = await assertStableHealth(run, plan, execution);
|
|
@@ -474,7 +578,14 @@ export async function applyGlobalUpdate(options, run = defaultRunner, execution
|
|
|
474
578
|
const restored = inspectGlobalInstall(run);
|
|
475
579
|
assert.deepEqual(restored.packages, plan.prior.packages, 'rollback package closure is not exact');
|
|
476
580
|
assert.deepEqual(restored.topology, plan.prior.topology, 'rollback package topology is not exact');
|
|
477
|
-
|
|
581
|
+
if (applicationUpdateId) {
|
|
582
|
+
rollbackServerApplication(run, restored.cliPath, applicationUpdateId, restored.serverPath, plan.prior.packages.server);
|
|
583
|
+
events.push('rolled-back:server-application');
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
startService(run, restored.cliPath, 'server');
|
|
587
|
+
events.push('started:server-restore');
|
|
588
|
+
}
|
|
478
589
|
startService(run, restored.cliPath, 'cockpit');
|
|
479
590
|
await assertStableHealth(run, plan, execution);
|
|
480
591
|
events.push('rollback:healthy');
|
|
@@ -543,9 +543,9 @@ function defaultNativeRoot() {
|
|
|
543
543
|
return moduleDirectory.endsWith(`${path.sep}dist`) ? bundled : compiledOrSource;
|
|
544
544
|
}
|
|
545
545
|
function injectedNativeManifestSha256() {
|
|
546
|
-
return typeof "
|
|
546
|
+
return typeof "3a12e2eb69ea6bb4b6b8b37e0083c07041026489b5bfa56e502a50f50913e030" === 'undefined'
|
|
547
547
|
? undefined
|
|
548
|
-
: "
|
|
548
|
+
: "3a12e2eb69ea6bb4b6b8b37e0083c07041026489b5bfa56e502a50f50913e030";
|
|
549
549
|
}
|
|
550
550
|
function sha256(bytes) {
|
|
551
551
|
return createHash('sha256').update(bytes).digest('hex');
|
package/dist/lib/tui-launcher.js
CHANGED
|
@@ -4,6 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
const SUPPORTED_TUI_TARGETS = new Set([
|
|
6
6
|
'darwin-arm64',
|
|
7
|
+
'linux-x64',
|
|
7
8
|
'win32-x64',
|
|
8
9
|
]);
|
|
9
10
|
const TUI_REINSTALL_MESSAGE = 'The bundled AOPS TUI is not executable. Reinstall @aopslabs/aops or use aops --help.';
|
package/native/manifest.json
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"capabilityClass": "windows-ntfs-crash-recoverable-v1",
|
|
43
43
|
"qualification": {
|
|
44
44
|
"relativePath": "qualifications/win32-x64.json",
|
|
45
|
-
"sha256": "
|
|
45
|
+
"sha256": "1c7b0f0f93bdcc1b73b36d6fbaa9d327168bb2175dfc30e3b92f766ab545c595"
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
]
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"filesystem": "NTFS",
|
|
8
8
|
"primitiveProfile": "windows-createfile-flush-movefileex-v1",
|
|
9
9
|
"capabilityClass": "windows-ntfs-crash-recoverable-v1",
|
|
10
|
-
"evidenceSha256": "
|
|
10
|
+
"evidenceSha256": "d9fc9a6e0cf5a79270498fbc7fa5d2abb2d0db0473d0ce970e8f9cacabbe9dc2",
|
|
11
11
|
"crashInjectionPoints": [
|
|
12
12
|
"authority-history",
|
|
13
13
|
"authority-current",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|