@aopslabs/aops 0.3.27 → 0.3.29

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.
@@ -112,6 +112,6 @@
112
112
  },
113
113
  "schemaVersion": 1,
114
114
  "standard": "aops-community-core-v1",
115
- "version": "0.3.27",
116
- "versionId": "community-core-0.3.27"
115
+ "version": "0.3.29",
116
+ "versionId": "community-core-0.3.29"
117
117
  }
@@ -10,8 +10,8 @@
10
10
  "name": "aops",
11
11
  "optional": false,
12
12
  "packageSha256": "bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb",
13
- "version": "0.3.27",
14
- "versionId": "community-core-0.3.27"
13
+ "version": "0.3.29",
14
+ "versionId": "community-core-0.3.29"
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": "4787e531f33f55bfa3b8c4c28e8244a38abaeb6b",
25
+ "commit": "940d0ec66f682efc8e8048df6b4be3cd78f4d180",
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": "bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb",
14
- "version": "0.3.27",
15
- "versionId": "community-core-0.3.27"
14
+ "version": "0.3.29",
15
+ "versionId": "community-core-0.3.29"
16
16
  },
17
17
  "files": [
18
18
  {
@@ -118,7 +118,7 @@
118
118
  {
119
119
  "byteLength": 3811,
120
120
  "ref": "agent-assets/core/bc42dd7792dbe66040e99a7ef3d80b3bc788c72b369b5a065cf936aef29f53fb/manifest.json",
121
- "sha256": "0ff0b66ff505b3d6d8672e1d19aa8c5bfe041e3849319b752494d3b84cce283a"
121
+ "sha256": "0eccb48450d12a1d5d95bc5f16c0461449144989d142c8a2ea09179dbd55650d"
122
122
  },
123
123
  {
124
124
  "byteLength": 621,
@@ -128,7 +128,7 @@
128
128
  {
129
129
  "byteLength": 926,
130
130
  "ref": "agent-assets/inventory.json",
131
- "sha256": "697dac2568b453e08a3f869911d73dce9690d24b8a5a4e23b5ede7107a1ea66c"
131
+ "sha256": "f1c89a17b291a8a09915d7d4f51b322e55c51edc9368500ea24d44ca11f7ceb9"
132
132
  },
133
133
  {
134
134
  "byteLength": 281,
@@ -144,7 +144,7 @@
144
144
  },
145
145
  "inventory": {
146
146
  "ref": "agent-assets/inventory.json",
147
- "sha256": "697dac2568b453e08a3f869911d73dce9690d24b8a5a4e23b5ede7107a1ea66c"
147
+ "sha256": "f1c89a17b291a8a09915d7d4f51b322e55c51edc9368500ea24d44ca11f7ceb9"
148
148
  },
149
149
  "kind": "aops-community-agent-assets-release-v1",
150
150
  "projection": {
@@ -153,7 +153,7 @@
153
153
  },
154
154
  "root": "agent-assets",
155
155
  "schemaVersion": 1,
156
- "setSha256": "9d0dee44c2531e55e8023bb11a06333f52ced7651a37e4ac412c0cd214782b96"
156
+ "setSha256": "971d27634c354b7694cb121fda19879e869a67af35f0a039b185d37497c1a440"
157
157
  },
158
158
  "evidence": {
159
159
  "signature": {
@@ -161,10 +161,10 @@
161
161
  }
162
162
  },
163
163
  "kind": "aops-community-agent-assets-bundle-v1",
164
- "releaseVersion": "0.3.27",
164
+ "releaseVersion": "0.3.29",
165
165
  "schemaVersion": 1,
166
166
  "source": {
167
- "commit": "4787e531f33f55bfa3b8c4c28e8244a38abaeb6b",
167
+ "commit": "940d0ec66f682efc8e8048df6b4be3cd78f4d180",
168
168
  "repository": "git+https://github.com/eeemzs/aops-platform",
169
169
  "root": "apps/aops-cli/assets/agent-assets"
170
170
  }
@@ -4,13 +4,13 @@
4
4
  "x509CertificateChain": {
5
5
  "certificates": [
6
6
  {
7
- "rawBytes": "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"
7
+ "rawBytes": "MIIHczCCBvmgAwIBAgIUWM4xyIHxp4fzhxhR6kQk1qvW1WswCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwODIyMTM1MDEzWhcNMjYwODIyMTQwMDEzWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkBzJsGvzW4Ml8Q3pAn9ajJ0FctgRh9r+eDyWST/O/fKyM1yOkbWgr5GgrH7wJYL2O7L+U7B64pMChNr4DIC9NaOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUhj76kjavIXeY/GU8ezBGHNdCf1gwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdAYDVR0RAQH/BGowaIZmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoOTQwZDBlYzY2ZjY4MmVmYzhlODA0OGRmNmI0YmUzY2Q3OGY0ZDE4MDAxBgorBgEEAYO/MAEEBCNTaWduIGV4YWN0IHB1YmxpYyBBT1BTIGFnZW50IGFzc2V0czAiBgorBgEEAYO/MAEFBBRlZWVtenMvYW9wcy1wbGF0Zm9ybTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHYGCisGAQQBg78wAQkEaAxmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOTQwZDBlYzY2ZjY4MmVmYzhlODA0OGRmNmI0YmUzY2Q3OGY0ZDE4MDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwNwYKKwYBBAGDvzABDAQpDCdodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0wOAYKKwYBBAGDvzABDQQqDCg5NDBkMGVjNjZmNjgyZWZjOGU4MDQ4ZGY2YjRiZTNjZDc4ZjRkMTgwMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTMxNjI1NTAyNjApBgorBgEEAYO/MAEQBBsMGWh0dHBzOi8vZ2l0aHViLmNvbS9lZWVtenMwGQYKKwYBBAGDvzABEQQLDAkxMDkzMTA3NzQwdgYKKwYBBAGDvzABEgRoDGZodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1wdWJsaWMtYWdlbnQtYXNzZXRzLnltbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg5NDBkMGVjNjZmNjgyZWZjOGU4MDQ4ZGY2YjRiZTNjZDc4ZjRkMTgwMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwWwYKKwYBBAGDvzABFQRNDEtodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vYWN0aW9ucy9ydW5zLzMyNTc2ODc1ODUzL2F0dGVtcHRzLzEwFwYKKwYBBAGDvzABFgQJDAdwcml2YXRlMFIGCisGAQQBg78wARgERAxCcmVwbzplZWVtenNAMTA5MzEwNzc0L2FvcHMtcGxhdGZvcm1AMTMxNjI1NTAyNjpyZWY6cmVmcy9oZWFkcy9tYWluMIGJBgorBgEEAdZ5AgQCBHsEeQB3AHUA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGgKbx9kAAABAMARjBEAiBYBcJIEIWb8TR3vNRIxEn+Qnmxy8KnNSTmTKYwHKmzJAIgOC8/xgboSPGwnv8j9/XSiJ+OgkK1tUKhV48FuRVafXswCgYIKoZIzj0EAwMDaAAwZQIwdCfAEFHnCfOfV76405IcOVIIebwXjOcgpLQ4DFs3kETduBh+sJ1W1WCSD8KHDZqZAjEAkeDWG04VtSkR8tooOIOhA90L32g7esdtIJhpsiZ+rouUTxyCmfB92LqrhM1cpuFg"
8
8
  }
9
9
  ]
10
10
  },
11
11
  "tlogEntries": [
12
12
  {
13
- "logIndex": "2553178141",
13
+ "logIndex": "2565511877",
14
14
  "logId": {
15
15
  "keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="
16
16
  },
@@ -18,39 +18,43 @@
18
18
  "kind": "hashedrekord",
19
19
  "version": "0.0.1"
20
20
  },
21
- "integratedTime": "1787342921",
21
+ "integratedTime": "1787406614",
22
22
  "inclusionPromise": {
23
- "signedEntryTimestamp": "MEYCIQCee5Wed+UEwne5gGRsns8vttd6Fh5iJakwaDqmcEfh4gIhAIZ0hCBDw4sf1VyXYwrvjPQanbci5oB1R5CM5pbrBKnj"
23
+ "signedEntryTimestamp": "MEUCIHH7dtm4urIY2+2+jzWlngGQyTFxPsfEpZEiaZtuGTP4AiEA9twygiG1WrnLZRcCo6OF3R/iOv2Qk/3eLXaY9jJ2ql4="
24
24
  },
25
25
  "inclusionProof": {
26
- "logIndex": "2431273879",
27
- "rootHash": "2XyGUmnJWgDxbNiyLiB73MkMe5El87RlUbgYu+6MfTk=",
28
- "treeSize": "2431273907",
26
+ "logIndex": "2443607615",
27
+ "rootHash": "VOvm2ArPTUqNdOWBbQ1pZecquFMu3j8vP71wEs0P1wU=",
28
+ "treeSize": "2443607823",
29
29
  "hashes": [
30
- "8gMKN9aOLLWsjPT3PvQv7PoAq+VrnJ/Fpommxp6rqTg=",
31
- "/Orbvjm03Qo3V9z1diSnCrnaRl6m40BTskvHzv8NF88=",
32
- "Vk9RVBe9kNT781XMp8tS8DTpcko4XBl71cBukeVjkwc=",
33
- "UQWQhSjdQxQDCKXudkGJLLE28GZjH+OidyImQaK9OC4=",
34
- "P9GkuSWPSPRucx8JDkhB4JHOUV8FODtMU2a5X2mIw2w=",
35
- "DJUcCbfFaQesa8LbApiHB67fApbOV08sij1IDbtVfMM=",
36
- "PFfmG059BEJ/812MXXbY5/0vW7zhlYVFtiLTUc57TBU=",
37
- "QjUheA/uRcU++iSf4WAbD/RjjviABR0rlAGnkxB8KsM=",
38
- "q6H9/Vf7Sa04fwaiP/lzs2cJJI2u+CQoYKgJMS5GLjc=",
39
- "qqxkJzAU2CVmos07YmHcElqrBOHc1wXsPxkbLjHV+7M=",
40
- "6G3AK1+2CWs3TqAwJV6YH281UuodnSFa0qbj0Aaa20s=",
41
- "NNUbUnztR4LkmVrpHik9kp1MkzVWL6ncjeKPTGf1Wtg=",
42
- "yqyiMHfdl4qv1WrmtBYfbvpXnXVW3U2mKAE7FuRLIgc=",
43
- "V26C/ZbgRB037k4IypmNXaS2AKEAq+mYdBpCYzUHZaI=",
44
- "9573PZDNoVVnalVG+4BpJVrKEFneAwqHLpVdOEfbE0Y=",
45
- "RhRQJE8gq9XjV+FJY/OHh6ZhCnS6INvqNxL9MyobX54=",
30
+ "vgfGqGEsqLLVTy7b2HiBTqVYC5Htp6HUBbQwysP5YiQ=",
31
+ "Fn1Q7w/AxR6Z1RYwU6+8gGUVX1979XbpLjmnMbDaH5w=",
32
+ "/SlFcsC3NYh4j9rwCy7pdC7Ya9p8YxEbAcxcnw+ZH+U=",
33
+ "CfMi8ANS8LimJc1atlgt0qSN7hNQE+3Sow2VmNsgGEE=",
34
+ "AvU21up370gnJi4C6E91VM+unJ86vQtlIP84EHAyv1M=",
35
+ "+JQlipTrSNIbQQWzenBTcS0AbO65rz1fYcwnF53LJYU=",
36
+ "A20r/YYq8Mb0ewqDXX1c2PsvU7NytT4HWByCP85q+cw=",
37
+ "eQuhCaWm/4x0JeLKrlpbcBYsFalp16oK0d0x4SQppuk=",
38
+ "i5+KOKJz03P4AE0s5bjz3JKR5Mz2Tocw3bSZDSiqV8M=",
39
+ "JlbxoqRArH+zS1WuPHozzh/g1zmMFQelfH5RgcM6d00=",
40
+ "tFJ6d1lQpYAH/fErb89AhRqMS3PlaNK7Rxx2XKW1rG4=",
41
+ "Y1wq4a6hc3LeCMoWLXJ/VEB5Lli60GG7KB+RO0nfdDw=",
42
+ "1CTVNdvE/DUGaPxk3yc9HGhFWlG91nDPMyJk3l6OkOg=",
43
+ "9Xvik1WvYBEDs5qBoKpD8oJqf18yMAXbQVWK9AOH+3w=",
44
+ "9IGHBNGs8zyik4vrff9gZtSXjzHfJNjpiFrgOOm3U5I=",
45
+ "nLs2S6+ujI7/+4Y8fm4+QEaJ+5GjbNvhAutNdrSn0U0=",
46
+ "QYQNqQmZx0ueBdHIwSGYc/hOWmM8mw+952pZNEiTllc=",
47
+ "24IMJdpNHM4CBmlq/I5bX+pwIPFu0S2mvApHPIOZVfI=",
48
+ "bJAtWgiq8wqDN8pmhbZdBJcDVJrYD0SnlDHhruu1M2w=",
49
+ "xugBqqOa94v0FTyXEeKUuA9kiXCOb3WSyGGy52n2JdA=",
46
50
  "SndbMKVtcTenAkwi2JBfGzD+mhexp1qJbRIY+A1JRIU=",
47
51
  "xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="
48
52
  ],
49
53
  "checkpoint": {
50
- "envelope": "rekor.sigstore.dev - 1193050959916656506\n2431273907\n2XyGUmnJWgDxbNiyLiB73MkMe5El87RlUbgYu+6MfTk=\n\n— rekor.sigstore.dev wNI9ajBGAiEAmjN2WcuZd3AxnbMhkcQXlkFGQ/6nMrnUxZ7+ixDpIWoCIQCFIrhYFjo+4E305v29z4KMXtTu7q3yaEz05Yz12pk7FQ==\n"
54
+ "envelope": "rekor.sigstore.dev - 1193050959916656506\n2443607823\nVOvm2ArPTUqNdOWBbQ1pZecquFMu3j8vP71wEs0P1wU=\n\n— rekor.sigstore.dev wNI9ajBFAiEA8WOuqN3/9s1RzYOzxKBqL1FSkuklqiK9RoADhQJ7RoACICoCYWnlzt/ho9RiTTeDBvv7t2V/fY6RWI8ndfxKloTY\n"
51
55
  }
52
56
  },
53
- "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI5MWQwZmYxODIwNWQyOWY2MTY1NTQ4ZmVmYzAzMzBiNGI4NjVmMThjY2VkNzBkMzQ1OWU1NWU4Y2U4YmFjYzY3In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUURvbWVQWThXaU5lcGxPVjR1VGVuNlQ2M2xsRnpxemovWGhEUFQ2UnVZb293SWdUTGpzMnQ0eSsyelhUREY1blZ2SXVQclppSGN4UGxKUmVUalRCclVTMEY4PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGtha05EUW5aMVowRjNTVUpCWjBsVlEwNDNhMjQ0Wml0a1prZFdWVE5FUWpCdVUwVlBTWEZ3VG0xTmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFU1hoTmFrRjNUMFJSZUZkb1kwNU5hbGwzVDBSSmVFMXFRWGhQUkZGNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZPVUVnclpHdFFOeTlsTDJ4b2JsQmxUbW8wWlVzelpVRk5iR2d6WlcxUWVHMUpaV0VLU2padVNIaHBOVkZxVVhaRFVYaFJRbEZrYlM4NFlYSnFjVFZHZVRaR1RVSnphREpaVWpOWFpIcFNkVTFOZWpKbldFdFBRMEpvYjNkbloxbFhUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZUVnpaS0NsQnJiSEZGWVcxeWNURTBkV2hUT0U1WWRGZ3ZOVFpWZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSQldVUldVakJTUVZGSUwwSkhiM2RoU1ZwdFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKV2JGcFhNVFpqZVRsb1lqTkNlZ3BNV0VKeldWaFNiV0l6U25STWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTA1d1dqSTBkR05JVm1saVIyeHFURmRHYmxwWE5UQk1WMFo2Q21NeVZqQmplVFUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJyUjBOcGMwZEJVVkZDWnpjNGQwRlJSVVZMTW1nd1pFaENlazlwT0hZS1pFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2WkZkS01XTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNTSGRaUzB0M1dVSkNRVWRFZG5wQlFncEJaMUZTWkRJNWVXRXlXbk5pTTJSbVdrZHNlbU5IUmpCWk1tZDNUbWRaUzB0M1dVSkNRVWRFZG5wQlFrRjNVVzlPUkdNMFRqSlZNVTE2Um0xTmVrNXRDazVVVm1sYWJVVjZXV3BvYWs1SFRYbFBSMVUwVFdwUk1GbFVUVFJaVjBwb1dsZEpNbGxxUVhoQ1oyOXlRbWRGUlVGWlR5OU5RVVZGUWtOT1ZHRlhaSFVLU1VkV05GbFhUakJKU0VJeFdXMTRjRmw1UWtKVU1VSlVTVWRHYmxwWE5UQkpSMFo2WXpKV01HTjZRV2xDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pTYkFwYVYxWjBaVzVOZGxsWE9YZGplVEYzWWtkR01GcHRPWGxpVkVGa1FtZHZja0puUlVWQldVOHZUVUZGUjBKQk9YbGFWMXA2VERKb2JGbFhVbnBNTWpGb0NtRlhOSGRQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZta0taRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU0ZsSFEybHpSMEZSVVVKbk56aDNRVkZyUldGQmVHMWhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESldiRnBYTVRaamVUbG9Zak5DZWt4WVFuTlpXRkp0WWpOS2RFeDVOVzVoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3elRuQmFNalIwQ21OSVZtbGlSMnhxVEZkR2JscFhOVEJNVjBaNll6SldNR041TlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVJS1p6YzRkMEZSYjBWTFozZHZUa1JqTkU0eVZURk5la1p0VFhwT2JVNVVWbWxhYlVWNldXcG9hazVIVFhsUFIxVTBUV3BSTUZsVVRUUlpWMHBvV2xkSk1ncFpha0ZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOWlNMDR3V2xkUmQwNTNXVXRMZDFsQ1FrRkhSSFo2UVVKRVFWRndDa1JEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIzVDBGWlMwdDNXVUlLUWtGSFJIWjZRVUpFVVZGeFJFTm5NRTU2WnpOYVZGVjZUVmRaZWsweVdURk9WMHB0V1ZST2FVOUhUVEJaZWtrMFdsUm5lVTVFVW1oTmVtaG9XVzFHYkFwWmFscHBUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5RbTlIUTJselIwRlJVVUpuTnpoM0NrRlJPRVZFUVhkTFRWUk5lRTVxU1RGT1ZFRjVUbXBCY0VKbmIzSkNaMFZGUVZsUEwwMUJSVkZDUW5OTlIxZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZta0tURzFPZG1KVE9XeGFWMVowWlc1TmQwZFJXVXRMZDFsQ1FrRkhSSFo2UVVKRlVWRk1SRUZyZUUxRWEzcE5WRUV6VG5wUmQyUm5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1JXZFNiMFJIV205a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIyQ2t4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU15Ykc1aWFURjNaRmRLYzJGWFRYUlpWMlJzWW01UmRGbFlUbnBhV0ZKNlRHNXNkR0pGUW5rS1dsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjVVJEWnpCT2VtY3pXbFJWZWsxWFdYcE5NbGt4VGxkS2JRcFpWRTVwVDBkTk1GbDZTVFJhVkdkNVRrUlNhRTE2YUdoWmJVWnNXV3BhYVUxRFJVZERhWE5IUVZGUlFtYzNPSGRCVWxGRlJYZDNVbVF5T1hsaE1scHpDbUl6WkdaYVIyeDZZMGRHTUZreVozZFhkMWxMUzNkWlFrSkJSMFIyZWtGQ1JsRlNUa1JGZEc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLV2xkV2JHSlljSHBNTWtaMlkwaE5kR05IZUdoa1IxcDJZMjB3ZGxsWFRqQmhWemwxWTNrNWVXUlhOWHBNZWsxNVRsUkplRTlVWXpOTmVtZDZUREpHTUFwa1IxWjBZMGhTZWt4NlJYZEdkMWxMUzNkWlFrSkJSMFIyZWtGQ1JtZFJTa1JCWkhkamJXd3lXVmhTYkUxR1NVZERhWE5IUVZGUlFtYzNPSGRCVW1kRkNsSkJlRU5qYlZaM1lucHdiRnBYVm5SbGJrNUJUVlJCTlUxNlJYZE9lbU13VERKR2RtTklUWFJqUjNob1pFZGFkbU50TVVGTlZFMTRUbXBKTVU1VVFYa0tUbXB3ZVZwWFdUWmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFKUjB4Q1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtnd1JXVjNRalZCU0dOQk0xUXdkd3BoYzJKSVJWUktha2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaMHBtUTJWblVVRkJRa0ZOUVZORVFrZEJhVVZCQ21zNE1ESnpRbWRwUkU1VVQyUnRRWFpQZW1NMVlVc3lNWFpZZFdnNFZFZENkbEp5VWtkdVJHaDJZemhEU1ZGREwyOXFZak5ETm5KUFUzTnRXVTkzV0VzS2FVZFZVbTlKTWxsSWVXeFNXRGxJWkhsa1pXNXllbVJPVEhwQlMwSm5aM0ZvYTJwUFVGRlJSRUYzVG5CQlJFSnRRV3BGUVd0Q1kyYzNNbVJOYnpsV1Z3cEJaM0YyZVV0SU5reHRTRTFJWlRaNGFVWkdORmgzVWpKV2FGRXdXbk53UjJSNFFWVTNkazU1VG5oRGIyRklOSGh2WldKcFFXcEZRU3RwUldoTFEzWnhDa0Z2YW1SM2NWUndZbkJwU3pKNmNVMUJkSFJTUVN0dVdHbENPR3hLWmxwTWFGZ3hZM1pxTTA5bGVFeEZhRE5YYUU1UVF6WnVVMkZKQ2kwdExTMHRSVTVFSUVORlVsUkpSa2xEUVZSRkxTMHRMUzBLIn19fX0="
57
+ "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI3ZDUwYWE1ODRkNDVjZWZiNDI3NmRiMDY2ZjdkN2Q1ZTVlYWQ0ZGEwMzI4ZDc0ZDI5MjhjOGI3NTQzNWY0OTU0In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUNNbmNkNVMxa3J5dDRtc3BiYnpLUzcwN3hUQXUrNjVZdG9NUUp4Rk5MWFBRSWhBSWtjUkwwUmNXNGVDSEpMRU5uSVpWTHN6V0R0VHJEcERxUWprS1FlNEZqciIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5adFowRjNTVUpCWjBsVlYwMDBlSGxKU0hod05HWjZhSGhvVWpaclVXc3hjWFpYTVZkemQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFU1hsTlZFMHhUVVJGZWxkb1kwNU5hbGwzVDBSSmVVMVVVWGROUkVWNlYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZyUW5wS2MwZDJlbGMwVFd3NFVUTndRVzQ1WVdwS01FWmpkR2RTYURseUsyVkVlVmNLVTFRdlR5OW1TM2xOTVhsUGEySlhaM0kxUjJkeVNEZDNTbGxNTWs4M1RDdFZOMEkyTkhCTlEyaE9jalJFU1VNNVRtRlBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZvYWpjMkNtdHFZWFpKV0dWWkwwZFZPR1Y2UWtkSVRtUkRaakZuZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSQldVUldVakJTUVZGSUwwSkhiM2RoU1ZwdFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKV2JGcFhNVFpqZVRsb1lqTkNlZ3BNV0VKeldWaFNiV0l6U25STWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTA1d1dqSTBkR05JVm1saVIyeHFURmRHYmxwWE5UQk1WMFo2Q21NeVZqQmplVFUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJyUjBOcGMwZEJVVkZDWnpjNGQwRlJSVVZMTW1nd1pFaENlazlwT0hZS1pFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2WkZkS01XTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNTSGRaUzB0M1dVSkNRVWRFZG5wQlFncEJaMUZTWkRJNWVXRXlXbk5pTTJSbVdrZHNlbU5IUmpCWk1tZDNUbWRaUzB0M1dVSkNRVWRFZG5wQlFrRjNVVzlQVkZGM1drUkNiRmw2V1RKYWFsazBDazF0Vm0xWmVtaHNUMFJCTUU5SFVtMU9iVWt3V1cxVmVsa3lVVE5QUjFrd1drUkZORTFFUVhoQ1oyOXlRbWRGUlVGWlR5OU5RVVZGUWtOT1ZHRlhaSFVLU1VkV05GbFhUakJKU0VJeFdXMTRjRmw1UWtKVU1VSlVTVWRHYmxwWE5UQkpSMFo2WXpKV01HTjZRV2xDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pTYkFwYVYxWjBaVzVOZGxsWE9YZGplVEYzWWtkR01GcHRPWGxpVkVGa1FtZHZja0puUlVWQldVOHZUVUZGUjBKQk9YbGFWMXA2VERKb2JGbFhVbnBNTWpGb0NtRlhOSGRQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZta0taRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU0ZsSFEybHpSMEZSVVVKbk56aDNRVkZyUldGQmVHMWhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESldiRnBYTVRaamVUbG9Zak5DZWt4WVFuTlpXRkp0WWpOS2RFeDVOVzVoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3elRuQmFNalIwQ21OSVZtbGlSMnhxVEZkR2JscFhOVEJNVjBaNll6SldNR041TlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVJS1p6YzRkMEZSYjBWTFozZHZUMVJSZDFwRVFteFplbGt5V21wWk5FMXRWbTFaZW1oc1QwUkJNRTlIVW0xT2JVa3dXVzFWZWxreVVUTlBSMWt3V2tSRk5BcE5SRUZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOWlNMDR3V2xkUmQwNTNXVXRMZDFsQ1FrRkhSSFo2UVVKRVFWRndDa1JEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIzVDBGWlMwdDNXVUlLUWtGSFJIWjZRVUpFVVZGeFJFTm5OVTVFUW10TlIxWnFUbXBhYlU1cVozbGFWMXBxVDBkVk5FMUVVVFJhUjFreVdXcFNhVnBVVG1wYVJHTTBXbXBTYXdwTlZHZDNUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5RbTlIUTJselIwRlJVVUpuTnpoM0NrRlJPRVZFUVhkTFRWUk5lRTVxU1RGT1ZFRjVUbXBCY0VKbmIzSkNaMFZGUVZsUEwwMUJSVkZDUW5OTlIxZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZta0tURzFPZG1KVE9XeGFWMVowWlc1TmQwZFJXVXRMZDFsQ1FrRkhSSFo2UVVKRlVWRk1SRUZyZUUxRWEzcE5WRUV6VG5wUmQyUm5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1JXZFNiMFJIV205a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIyQ2t4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU15Ykc1aWFURjNaRmRLYzJGWFRYUlpWMlJzWW01UmRGbFlUbnBhV0ZKNlRHNXNkR0pGUW5rS1dsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjVVJEWnpWT1JFSnJUVWRXYWs1cVdtMU9hbWQ1V2xkYWFncFBSMVUwVFVSUk5GcEhXVEpaYWxKcFdsUk9hbHBFWXpSYWFsSnJUVlJuZDAxRFJVZERhWE5IUVZGUlFtYzNPSGRCVWxGRlJYZDNVbVF5T1hsaE1scHpDbUl6WkdaYVIyeDZZMGRHTUZreVozZFhkMWxMUzNkWlFrSkJSMFIyZWtGQ1JsRlNUa1JGZEc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLV2xkV2JHSlljSHBNTWtaMlkwaE5kR05IZUdoa1IxcDJZMjB3ZGxsWFRqQmhWemwxWTNrNWVXUlhOWHBNZWsxNVRsUmpNazlFWXpGUFJGVjZUREpHTUFwa1IxWjBZMGhTZWt4NlJYZEdkMWxMUzNkWlFrSkJSMFIyZWtGQ1JtZFJTa1JCWkhkamJXd3lXVmhTYkUxR1NVZERhWE5IUVZGUlFtYzNPSGRCVW1kRkNsSkJlRU5qYlZaM1lucHdiRnBYVm5SbGJrNUJUVlJCTlUxNlJYZE9lbU13VERKR2RtTklUWFJqUjNob1pFZGFkbU50TVVGTlZFMTRUbXBKTVU1VVFYa0tUbXB3ZVZwWFdUWmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFKUjBwQ1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtoelJXVlJRak5CU0ZWQk0xUXdkd3BoYzJKSVJWUktha2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaMHRpZURsclFVRkJRa0ZOUVZKcVFrVkJhVUpaQ2tKalNrbEZTVmRpT0ZSU00zWk9Va2w0Ulc0clVXNXRlSGs0UzI1T1UxUnRWRXRaZDBoTGJYcEtRVWxuVDBNNEwzaG5ZbTlUVUVkM2JuWTRhamt2V0ZNS2FVb3JUMmRyU3pGMFZVdG9WalE0Um5WU1ZtRm1XSE4zUTJkWlNVdHZXa2w2YWpCRlFYZE5SR0ZCUVhkYVVVbDNaRU5tUVVWR1NHNURaazltVmpjMk5Bb3dOVWxqVDFaSlNXVmlkMWhxVDJObmNFeFJORVJHY3pOclJWUmtkVUpvSzNOS01WY3hWME5UUkRoTFNFUmFjVnBCYWtWQmEyVkVWMGN3TkZaMFUydFNDamgwYjI5UFNVOW9RVGt3VERNeVp6ZGxjMlIwU1Vwb2NITnBXaXR5YjNWVlZIaDVRMjFtUWpreVRIRnlhRTB4WTNCMVJtY0tMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="
54
58
  }
55
59
  ],
56
60
  "timestampVerificationData": {}
@@ -58,8 +62,8 @@
58
62
  "messageSignature": {
59
63
  "messageDigest": {
60
64
  "algorithm": "SHA2_256",
61
- "digest": "kdD/GCBdKfYWVUj+/AMwtLhl8YzO1w00WeVejOi6zGc="
65
+ "digest": "fVCqWE1FzvtCdtsGb319Xl6tTaAyjXTSkoyLdUNfSVQ="
62
66
  },
63
- "signature": "MEUCIQDomePY8WiNeplOV4uTen6T63llFzqzj/XhDPT6RuYoowIgTLjs2t4y+2zXTDF5nVvIuPrZiHcxPlJReTjTBrUS0F8="
67
+ "signature": "MEYCIQCMncd5S1kryt4mspbbzKS707xTAu+65YtoMQJxFNLXPQIhAIkcRL0RcW4eCHJLENnIZVLszWDtTrDpDqQjkKQe4Fjr"
64
68
  }
65
69
  }
@@ -128,6 +128,7 @@ function addSetupInitOptions(command) {
128
128
  return command
129
129
  .option('--path <path>', 'Setup path: 1 | 2 | 3 | 4 (semantic ids are also accepted)')
130
130
  .option('--postgres-config <path>', 'PostgreSQL env file override for path 1, or private output path for path 3')
131
+ .option('--postgres-bin-dir <path>', 'Directory holding PostgreSQL client tools you installed yourself; setup will not look for or install any')
131
132
  .option('--postgres-tls <policy>', 'PostgreSQL TLS policy: disable | require | verify-full')
132
133
  .option('--local-postgres-host <host>', 'Path 3 local PostgreSQL loopback host (default: 127.0.0.1)')
133
134
  .option('--local-postgres-port <port>', 'Path 3 local PostgreSQL port (default: 5432)', (value) => Number.parseInt(String(value), 10))
@@ -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 "7f232c413710060253a8f61f7b9b977106d8f71df4fadb408f77b12bbdf2bc29" === 'undefined'
546
+ return typeof "d822aae713ec279700deea89e879c3040bf7d4376aa21b461004f725ac064661" === 'undefined'
547
547
  ? undefined
548
- : "7f232c413710060253a8f61f7b9b977106d8f71df4fadb408f77b12bbdf2bc29";
548
+ : "d822aae713ec279700deea89e879c3040bf7d4376aa21b461004f725ac064661";
549
549
  }
550
550
  function sha256(bytes) {
551
551
  return createHash('sha256').update(bytes).digest('hex');
@@ -0,0 +1,90 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ export function distributionCodename(readOsRelease = () => readFileSync('/etc/os-release', 'utf8')) {
4
+ let content;
5
+ try {
6
+ content = readOsRelease();
7
+ }
8
+ catch {
9
+ return undefined;
10
+ }
11
+ const match = /^VERSION_CODENAME=("?)([a-z][a-z0-9]*)\1\s*$/mu.exec(content);
12
+ return match?.[2];
13
+ }
14
+ export function planPgClientAcquisition(major, options = {}) {
15
+ const platform = options.platform ?? process.platform;
16
+ const hasCommand = options.hasCommand ?? (() => true);
17
+ if (!Number.isInteger(major) || major <= 0)
18
+ return undefined;
19
+ if (platform === 'darwin') {
20
+ if (!hasCommand('brew'))
21
+ return undefined;
22
+ const args = ['install', `postgresql@${major}`];
23
+ return {
24
+ platform,
25
+ major,
26
+ steps: [{ command: 'brew', args }],
27
+ display: `brew ${args.join(' ')}`,
28
+ needsPrivilege: false,
29
+ };
30
+ }
31
+ if (platform === 'win32') {
32
+ if (!hasCommand('winget'))
33
+ return undefined;
34
+ const args = ['install', '--exact', '--silent', `PostgreSQL.PostgreSQL.${major}`];
35
+ return {
36
+ platform,
37
+ major,
38
+ steps: [{ command: 'winget', args }],
39
+ display: `winget ${args.join(' ')}`,
40
+ needsPrivilege: false,
41
+ };
42
+ }
43
+ if (!hasCommand('apt-get'))
44
+ return undefined;
45
+ const keyPath = '/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc';
46
+ const codename = options.codename ?? distributionCodename();
47
+ if (!codename)
48
+ return undefined;
49
+ const listLine = `deb [signed-by=${keyPath}] https://apt.postgresql.org/pub/repos/apt ${codename}-pgdg main`;
50
+ return {
51
+ platform,
52
+ major,
53
+ steps: [
54
+ { command: 'apt-get', args: ['update'] },
55
+ { command: 'apt-get', args: ['install', '-y', 'curl', 'ca-certificates', 'gnupg'] },
56
+ { command: 'install', args: ['-d', '/usr/share/postgresql-common/pgdg'] },
57
+ { command: 'curl', args: ['-fsSL', '-o', keyPath, 'https://www.postgresql.org/media/keys/ACCC4CF8.asc'] },
58
+ { command: 'sh', args: ['-c', `echo '${listLine}' > /etc/apt/sources.list.d/pgdg.list`] },
59
+ { command: 'apt-get', args: ['update'] },
60
+ { command: 'apt-get', args: ['install', '-y', `postgresql-client-${major}`] },
61
+ ],
62
+ display: `sudo apt-get install -y postgresql-client-${major} (after adding apt.postgresql.org)`,
63
+ needsPrivilege: true,
64
+ };
65
+ }
66
+ export function acquirePgClient(options) {
67
+ const plan = planPgClientAcquisition(options.major, {
68
+ platform: options.platform,
69
+ hasCommand: options.hasCommand,
70
+ ...(options.codename ? { codename: options.codename } : {}),
71
+ });
72
+ if (!plan)
73
+ return { status: 'unavailable', major: options.major };
74
+ const privileged = options.isPrivileged ?? (() => typeof process.getuid === 'function' && process.getuid() === 0);
75
+ if (plan.needsPrivilege && !privileged()) {
76
+ return { status: 'failed', plan, reason: 'pg_client_acquisition_requires_privilege' };
77
+ }
78
+ try {
79
+ for (const step of plan.steps)
80
+ options.run(step.command, step.args);
81
+ }
82
+ catch (error) {
83
+ return { status: 'failed', plan, reason: error instanceof Error ? error.message : 'pg_client_acquisition_failed' };
84
+ }
85
+ return { status: 'acquired', plan };
86
+ }
87
+ export function explicitPgBinDir(input) {
88
+ const value = String(input ?? '').trim();
89
+ return value.length > 0 ? path.resolve(value) : undefined;
90
+ }
@@ -1,16 +1,43 @@
1
- import { existsSync } from 'node:fs';
1
+ import { existsSync, readdirSync } from 'node:fs';
2
2
  import path from 'node:path';
3
+ function windowsClientDirectories(listDirectory) {
4
+ const root = 'C:\\Program Files\\PostgreSQL';
5
+ const list = listDirectory ?? ((directory) => {
6
+ try {
7
+ return readdirSync(directory);
8
+ }
9
+ catch {
10
+ return [];
11
+ }
12
+ });
13
+ return list(root)
14
+ .map((entry) => ({ entry, major: Number(entry) }))
15
+ .filter((candidate) => Number.isInteger(candidate.major) && candidate.major > 0)
16
+ .sort((left, right) => right.major - left.major)
17
+ .map((candidate) => `${root}\\${candidate.entry}\\bin`);
18
+ }
19
+ export function pgToolCandidates(tool, options = {}) {
20
+ const platform = options.platform ?? process.platform;
21
+ const executable = platform === 'win32' ? `${tool}.exe` : tool;
22
+ const directories = platform === 'darwin'
23
+ ? ['/Applications/pgAdmin 4.app/Contents/SharedSupport', '/opt/homebrew/bin', '/usr/local/bin']
24
+ : platform === 'win32'
25
+ ? windowsClientDirectories(options.listDirectory)
26
+ : ['/usr/bin', '/usr/local/bin'];
27
+ return [executable, ...directories.map((directory) => path.join(directory, executable))];
28
+ }
3
29
  export function resolvePgTool(tool, options = {}) {
4
30
  const exists = options.exists ?? existsSync;
5
- const executable = process.platform === 'win32' ? `${tool}.exe` : tool;
31
+ const platform = options.platform ?? process.platform;
32
+ const executable = platform === 'win32' ? `${tool}.exe` : tool;
6
33
  if (options.explicit)
7
34
  return options.explicit;
8
35
  if (options.binDir)
9
36
  return path.join(options.binDir, executable);
10
- const candidates = process.platform === 'darwin'
37
+ const candidates = platform === 'darwin'
11
38
  ? ['/Applications/pgAdmin 4.app/Contents/SharedSupport', '/opt/homebrew/bin', '/usr/local/bin']
12
- : process.platform === 'win32'
13
- ? ['C:\\Program Files\\PostgreSQL\\17\\bin', 'C:\\Program Files\\PostgreSQL\\16\\bin']
39
+ : platform === 'win32'
40
+ ? windowsClientDirectories(options.listDirectory)
14
41
  : ['/usr/bin', '/usr/local/bin'];
15
42
  for (const dir of candidates) {
16
43
  const candidate = path.join(dir, executable);
@@ -64,30 +91,39 @@ export function pgEnvironmentFromUrl(repoUrl) {
64
91
  return env;
65
92
  }
66
93
  export function parsePgToolMajor(reported) {
67
- const match = /(\d+)(?:\.\d+)*\s*$/.exec(reported.trim());
68
- if (!match)
69
- return undefined;
70
- const major = Number(match[1]);
71
- return Number.isInteger(major) ? major : undefined;
94
+ const line = reported.trim();
95
+ const marked = /\(PostgreSQL\)\s+(\d+)/i.exec(line);
96
+ const fallback = /(?:^|\s)(\d+)\.\d+/.exec(line);
97
+ const major = Number((marked ?? fallback)?.[1] ?? Number.NaN);
98
+ return Number.isInteger(major) && major > 0 ? major : undefined;
72
99
  }
73
100
  export function inspectPgToolchain(options) {
74
101
  const requiredMajor = options.serverMajor;
75
102
  const tools = [];
76
103
  let cause;
77
104
  for (const tool of ['pg_dump', 'pg_restore']) {
78
- const located = locatePgTool(tool, options.env ?? process.env, options.exists ?? existsSync);
79
- if (!located) {
105
+ let located;
106
+ let major;
107
+ for (const candidate of pgToolCandidates(tool, { platform: options.platform })) {
108
+ let reported;
109
+ try {
110
+ reported = options.run(candidate, ['--version']);
111
+ }
112
+ catch {
113
+ continue;
114
+ }
115
+ const parsed = parsePgToolMajor(reported);
116
+ located = candidate;
117
+ if (parsed !== undefined) {
118
+ major = parsed;
119
+ break;
120
+ }
121
+ }
122
+ if (located === undefined) {
80
123
  tools.push({ tool });
81
124
  cause ??= `community_pg_toolchain_missing:${tool}:required_major_${requiredMajor}`;
82
125
  continue;
83
126
  }
84
- let major;
85
- try {
86
- major = parsePgToolMajor(options.run(located, ['--version']));
87
- }
88
- catch {
89
- major = undefined;
90
- }
91
127
  tools.push({ tool, path: located, major });
92
128
  if (major === undefined) {
93
129
  cause ??= `community_pg_toolchain_unusable:${tool}:required_major_${requiredMajor}`;
@@ -1,3 +1,6 @@
1
+ import { acquirePgClient, explicitPgBinDir } from './pg-client-acquisition.js';
2
+ import { inspectPgToolchain } from './pg-tool-location.js';
3
+ import { spawnSync } from 'node:child_process';
1
4
  import path from 'node:path';
2
5
  import { logInfo, logSuccess, logWarn } from '@aopslabs/xf-cli-ui';
3
6
  import { canonicalCommercialJson, managedInstallationLayoutBinding, sha256Commercial, } from '@aopslabs/artifact-trust-contracts';
@@ -197,6 +200,51 @@ function resolveOfficialCatalogReleasePath(value) {
197
200
  }
198
201
  return path.resolve(normalized);
199
202
  }
203
+ async function ensureBackupToolchain(connection, options) {
204
+ const serverMajor = Number(connection.serverMajor);
205
+ if (!Number.isInteger(serverMajor) || serverMajor <= 0) {
206
+ return { action: 'setup.backup-toolchain', status: 'skipped', reason: 'server_major_unknown' };
207
+ }
208
+ const binDir = explicitPgBinDir(options.postgresBinDir);
209
+ const probe = (command, args) => {
210
+ const result = spawnSync(command, args, { encoding: 'utf8' });
211
+ if (result.error || result.status !== 0)
212
+ throw new Error('pg_client_probe_failed');
213
+ return `${result.stdout ?? ''}`;
214
+ };
215
+ const before = inspectPgToolchain({ serverMajor, run: probe, ...(binDir ? { binDir } : {}) });
216
+ if (before.ready) {
217
+ return { action: 'setup.backup-toolchain', status: 'ready', serverMajor, source: binDir ? 'operator' : 'host' };
218
+ }
219
+ const outcome = acquirePgClient({
220
+ major: serverMajor,
221
+ run: (command, args) => {
222
+ const result = spawnSync(command, [...args], { encoding: 'utf8' });
223
+ if (result.error)
224
+ throw result.error;
225
+ if (result.status !== 0)
226
+ throw new Error(`${command} exited with ${result.status ?? 'unknown'}`);
227
+ },
228
+ });
229
+ if (outcome.status !== 'acquired') {
230
+ return {
231
+ action: 'setup.backup-toolchain',
232
+ status: 'action-required',
233
+ serverMajor,
234
+ cause: before.cause,
235
+ ...(outcome.status === 'failed' ? { install: outcome.plan.display, reason: outcome.reason } : {}),
236
+ next: 'Install PostgreSQL client tools of this major, or pass --postgres-bin-dir if they are already installed.',
237
+ };
238
+ }
239
+ const after = inspectPgToolchain({ serverMajor, run: probe, ...(binDir ? { binDir } : {}) });
240
+ return {
241
+ action: 'setup.backup-toolchain',
242
+ status: after.ready ? 'installed' : 'action-required',
243
+ serverMajor,
244
+ installed: outcome.plan.display,
245
+ ...(after.ready ? {} : { cause: after.cause }),
246
+ };
247
+ }
200
248
  export async function runSetupInitOrchestrator(options = {}, dependencies = {}) {
201
249
  const inspectReadiness = dependencies.inspectReadiness ?? inspectSetupReadiness;
202
250
  const setupCommunityServer = dependencies.setupCommunityServer ?? runCommunityServerSetup;
@@ -408,6 +456,7 @@ export async function runSetupInitOrchestrator(options = {}, dependencies = {})
408
456
  throw error;
409
457
  }
410
458
  steps.push({ action: 'setup.postgres-connection', ...connection });
459
+ steps.push(await ensureBackupToolchain(connection, options));
411
460
  }
412
461
  if (selectedPath === 'native-local') {
413
462
  const localCheck = initial.checks.find((check) => check.id === 'local-postgresql');
@@ -42,7 +42,7 @@
42
42
  "capabilityClass": "windows-ntfs-crash-recoverable-v1",
43
43
  "qualification": {
44
44
  "relativePath": "qualifications/win32-x64.json",
45
- "sha256": "e720ca34d30b63e5899f93ad9a4eda28a9c11b90c916ea8051a07d26e9a85652"
45
+ "sha256": "def9dbe73ee1276a31e2a0ae3cf361aa1072c0dcdbea8c3b6f99a8cddc7be624"
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": "caad48ff4b78a048304397f223163ce3504734cf8b36371d5c064b5d886aecef",
10
+ "evidenceSha256": "8d3e3c73efd524330622969b89e1872d407095f1e88e85a76505781724264c06",
11
11
  "crashInjectionPoints": [
12
12
  "authority-history",
13
13
  "authority-current",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aopslabs/aops",
3
- "version": "0.3.27",
3
+ "version": "0.3.29",
4
4
  "type": "module",
5
5
  "description": "AOPS CLI and terminal setup application.",
6
6
  "aopsDockerServerVersion": "0.2.17",
@@ -23,7 +23,7 @@
23
23
  "test:setup-docker": "node --test test/setup-docker-server.test.mjs",
24
24
  "test:native-lifecycle": "node --test test/community-native-lifecycle.test.mjs",
25
25
  "test:migration-snapshot-gate": "node --test test/community-migration-snapshot-gate.test.mjs",
26
- "test:backup-gate-parity": "node --test test/community-backup-gate-parity.test.mjs test/community-backup-list.test.mjs test/community-native-backup.test.mjs",
26
+ "test:backup-gate-parity": "node --test test/community-backup-gate-parity.test.mjs test/community-backup-list.test.mjs test/community-native-backup.test.mjs test/pg-client-acquisition.test.mjs",
27
27
  "test:migration-auto-dump": "node --test test/community-migration-auto-dump.test.mjs",
28
28
  "test:memory-search-window": "node --test test/memory-search-window-shape.test.mjs",
29
29
  "test:db-restore-source-root": "node --test test/db-restore-source-root.test.mjs",
@@ -70,15 +70,16 @@
70
70
  "test:chat-wake-watch": "node --test test/chat-wake-watch.test.mjs",
71
71
  "test:codex-wake": "node --test test/codex-wake.test.mjs",
72
72
  "test:commercial-lifecycle-evidence": "node --test test/commercial-lifecycle-evidence.test.mjs test/commercial-lifecycle-evidence-projection.test.mjs",
73
- "test:commercial-effects": "node --test test/commercial-interruption-removal-effects.test.mjs test/commercial-natural-controls-effects.test.mjs test/commercial-transition-effects.test.mjs"
73
+ "test:commercial-effects": "node --test test/commercial-interruption-removal-effects.test.mjs test/commercial-natural-controls-effects.test.mjs test/commercial-transition-effects.test.mjs",
74
+ "test:pg-client-acquisition": "node --test test/pg-client-acquisition.test.mjs"
74
75
  },
75
76
  "dependencies": {
76
77
  "@aopslabs/aops-agent-runtime": "0.1.0",
77
- "@aopslabs/aops-server": "0.2.21",
78
+ "@aopslabs/aops-server": "0.2.23",
78
79
  "@aopslabs/artifact-trust-contracts": "0.3.1",
79
80
  "@aopslabs/cli-kit": "0.1.0",
80
81
  "@aopslabs/aops-host-registration": "0.2.2",
81
- "@aopslabs/aops-pg-bootstrap": "0.2.6",
82
+ "@aopslabs/aops-pg-bootstrap": "0.2.8",
82
83
  "@aopslabs/aops-runtime-config": "0.2.2",
83
84
  "@sigstore/bundle": "4.0.0",
84
85
  "@sigstore/protobuf-specs": "0.5.1",