@aopslabs/aops 0.3.27 → 0.3.28

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.28",
116
+ "versionId": "community-core-0.3.28"
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.28",
14
+ "versionId": "community-core-0.3.28"
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": "4b74e2bab67b40ecc4ea37a972d2747491f7a8b2",
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.28",
15
+ "versionId": "community-core-0.3.28"
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": "a7d0ddab5014eb99f6bae0b3b6ef74a5a8c85139a2c4d219c965f36c8e1bd807"
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": "6eb29fbf8c2399e854083ef13c2428440ce23f5088824877dc905a8520e47c1b"
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": "6eb29fbf8c2399e854083ef13c2428440ce23f5088824877dc905a8520e47c1b"
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": "02ea968111c9cdad8fe406cb8d9e57e6f26a58644ac193c04f00a6aa577ec3dc"
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.28",
165
165
  "schemaVersion": 1,
166
166
  "source": {
167
- "commit": "4787e531f33f55bfa3b8c4c28e8244a38abaeb6b",
167
+ "commit": "4b74e2bab67b40ecc4ea37a972d2747491f7a8b2",
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": "MIIHdDCCBvugAwIBAgIUKz3TRlv3SyEK3rhBdC6XVPKLd6swCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwODIxMjEyMDMyWhcNMjYwODIxMjEzMDMyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsdWUtMvNxb87LwPcaNwM+ylP9oVfnBeqdNEMwKKRzhu+wZWY8MaiqO2RpMY1rw6C2qW8eweTV4DNiaFS9ab5W6OCBhowggYWMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUJJHZBd+BtXs20lbN1levZtQde+swHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdAYDVR0RAQH/BGowaIZmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoNGI3NGUyYmFiNjdiNDBlY2M0ZWEzN2E5NzJkMjc0NzQ5MWY3YThiMjAxBgorBgEEAYO/MAEEBCNTaWduIGV4YWN0IHB1YmxpYyBBT1BTIGFnZW50IGFzc2V0czAiBgorBgEEAYO/MAEFBBRlZWVtenMvYW9wcy1wbGF0Zm9ybTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHYGCisGAQQBg78wAQkEaAxmaHR0cHM6Ly9naXRodWIuY29tL2VlZW16cy9hb3BzLXBsYXRmb3JtLy5naXRodWIvd29ya2Zsb3dzL3NpZ24tcHVibGljLWFnZW50LWFzc2V0cy55bWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoNGI3NGUyYmFiNjdiNDBlY2M0ZWEzN2E5NzJkMjc0NzQ5MWY3YThiMjAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwNwYKKwYBBAGDvzABDAQpDCdodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0wOAYKKwYBBAGDvzABDQQqDCg0Yjc0ZTJiYWI2N2I0MGVjYzRlYTM3YTk3MmQyNzQ3NDkxZjdhOGIyMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTMxNjI1NTAyNjApBgorBgEEAYO/MAEQBBsMGWh0dHBzOi8vZ2l0aHViLmNvbS9lZWVtenMwGQYKKwYBBAGDvzABEQQLDAkxMDkzMTA3NzQwdgYKKwYBBAGDvzABEgRoDGZodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1wdWJsaWMtYWdlbnQtYXNzZXRzLnltbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg0Yjc0ZTJiYWI2N2I0MGVjYzRlYTM3YTk3MmQyNzQ3NDkxZjdhOGIyMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwWwYKKwYBBAGDvzABFQRNDEtodHRwczovL2dpdGh1Yi5jb20vZWVlbXpzL2FvcHMtcGxhdGZvcm0vYWN0aW9ucy9ydW5zLzMyNTI3OTU1NTExL2F0dGVtcHRzLzEwFwYKKwYBBAGDvzABFgQJDAdwcml2YXRlMFIGCisGAQQBg78wARgERAxCcmVwbzplZWVtenNAMTA5MzEwNzc0L2FvcHMtcGxhdGZvcm1AMTMxNjI1NTAyNjpyZWY6cmVmcy9oZWFkcy9tYWluMIGLBgorBgEEAdZ5AgQCBH0EewB5AHcA3T0wasbHETJjGR4cmWc3AqJKXrjePK3/h4pygC8p7o4AAAGgJjJnNwAABAMASDBGAiEA1NThMhpMbIHSlcM1R1pZAUb+aMbHgfImv4eywNO+13MCIQCNDGdt/WC4r93RO2pbQFb2LZla78d+Y9aDRw7/evS6mjAKBggqhkjOPQQDAwNnADBkAjA2pREYTGp5wwefgH33D2euXopPmsY72LFbAd3ML7fN46JqfXyO1U188leQZbfeMrICMEpLodjpfLfJuKeLhF3pE6QtEJxau3rMvIfv4v0mFxf0M7kUybG59dt5OTENDNC88A=="
8
8
  }
9
9
  ]
10
10
  },
11
11
  "tlogEntries": [
12
12
  {
13
- "logIndex": "2553178141",
13
+ "logIndex": "2553771214",
14
14
  "logId": {
15
15
  "keyId": "wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="
16
16
  },
@@ -18,28 +18,27 @@
18
18
  "kind": "hashedrekord",
19
19
  "version": "0.0.1"
20
20
  },
21
- "integratedTime": "1787342921",
21
+ "integratedTime": "1787347232",
22
22
  "inclusionPromise": {
23
- "signedEntryTimestamp": "MEYCIQCee5Wed+UEwne5gGRsns8vttd6Fh5iJakwaDqmcEfh4gIhAIZ0hCBDw4sf1VyXYwrvjPQanbci5oB1R5CM5pbrBKnj"
23
+ "signedEntryTimestamp": "MEQCIDfcm9LkMQJMVzC1y8Zz+3W4lZCSfSEcqVcokF3cL9OQAiA2t3KDqtR5h61DxjgR/24n+diVWnRr1HroMr7gtnRX1g=="
24
24
  },
25
25
  "inclusionProof": {
26
- "logIndex": "2431273879",
27
- "rootHash": "2XyGUmnJWgDxbNiyLiB73MkMe5El87RlUbgYu+6MfTk=",
28
- "treeSize": "2431273907",
26
+ "logIndex": "2431866952",
27
+ "rootHash": "FzfjDKMb7RwLCOsn5MqV4EI4I6He4TxvmsSWsJabXUo=",
28
+ "treeSize": "2431866964",
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=",
30
+ "TkmstTcLV80Z8cCC14nTYMmgLh+WDktBMOMgkpTc0BM=",
31
+ "ee0gHJOEFErA2/e5JNqBpVFZmpI9p/162qHYajKcUJ4=",
32
+ "LtPS7ZHwKewZie+9kcDo3GEi+K/OyYmhduazzRJBpwk=",
33
+ "yDZ7T4a4ZoMY72uid/bnC3pm3ukVkmrYVR15KKrmiks=",
34
+ "M07J7P95IA48Te8doVTxWxwMs9wCzLp1n4CivkC90ls=",
35
+ "Ifr+B23ijUQ8mSxGm2huQ33ngNbAkh45/6YVvJ6YkC8=",
36
+ "PDl2+2g31pAzh7inLT1wKZBgs8IQEH6UbNBtW6NlY/g=",
37
+ "Oy8zIaaZ4Jjs8LgOH36qYR5qfnXId5Ya/7xJobY3FRQ=",
38
+ "nb2F2HW8++pxo5kubryZYX4S4GpLlrAHfvhIygp7i48=",
39
+ "TajTE5zxXucFXS1a0NWZQSd8UUQtAjDtaQ47uEBlsAw=",
40
+ "LVkP/pXcdaXlrM7GmttJ9G/8UlAsG9peo4xRdefiIdE=",
41
+ "6pok3vcu/J36uan+mjVjYgeDF8aod94o/h6fjqQvlMA=",
43
42
  "V26C/ZbgRB037k4IypmNXaS2AKEAq+mYdBpCYzUHZaI=",
44
43
  "9573PZDNoVVnalVG+4BpJVrKEFneAwqHLpVdOEfbE0Y=",
45
44
  "RhRQJE8gq9XjV+FJY/OHh6ZhCnS6INvqNxL9MyobX54=",
@@ -47,10 +46,10 @@
47
46
  "xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="
48
47
  ],
49
48
  "checkpoint": {
50
- "envelope": "rekor.sigstore.dev - 1193050959916656506\n2431273907\n2XyGUmnJWgDxbNiyLiB73MkMe5El87RlUbgYu+6MfTk=\n\n— rekor.sigstore.dev wNI9ajBGAiEAmjN2WcuZd3AxnbMhkcQXlkFGQ/6nMrnUxZ7+ixDpIWoCIQCFIrhYFjo+4E305v29z4KMXtTu7q3yaEz05Yz12pk7FQ==\n"
49
+ "envelope": "rekor.sigstore.dev - 1193050959916656506\n2431866964\nFzfjDKMb7RwLCOsn5MqV4EI4I6He4TxvmsSWsJabXUo=\n\n— rekor.sigstore.dev wNI9ajBGAiEA3FKcKQyuF1Qinx8qvAOOpwvjarVMsXB66iDktb8uABkCIQDf7gkJs+AkOBETCt8Asn/QLbwZ65ZXdNgZsi95zCIMsQ==\n"
51
50
  }
52
51
  },
53
- "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI5MWQwZmYxODIwNWQyOWY2MTY1NTQ4ZmVmYzAzMzBiNGI4NjVmMThjY2VkNzBkMzQ1OWU1NWU4Y2U4YmFjYzY3In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUURvbWVQWThXaU5lcGxPVjR1VGVuNlQ2M2xsRnpxemovWGhEUFQ2UnVZb293SWdUTGpzMnQ0eSsyelhUREY1blZ2SXVQclppSGN4UGxKUmVUalRCclVTMEY4PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGtha05EUW5aMVowRjNTVUpCWjBsVlEwNDNhMjQ0Wml0a1prZFdWVE5FUWpCdVUwVlBTWEZ3VG0xTmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFU1hoTmFrRjNUMFJSZUZkb1kwNU5hbGwzVDBSSmVFMXFRWGhQUkZGNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZPVUVnclpHdFFOeTlsTDJ4b2JsQmxUbW8wWlVzelpVRk5iR2d6WlcxUWVHMUpaV0VLU2padVNIaHBOVkZxVVhaRFVYaFJRbEZrYlM4NFlYSnFjVFZHZVRaR1RVSnphREpaVWpOWFpIcFNkVTFOZWpKbldFdFBRMEpvYjNkbloxbFhUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZUVnpaS0NsQnJiSEZGWVcxeWNURTBkV2hUT0U1WWRGZ3ZOVFpWZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSQldVUldVakJTUVZGSUwwSkhiM2RoU1ZwdFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKV2JGcFhNVFpqZVRsb1lqTkNlZ3BNV0VKeldWaFNiV0l6U25STWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTA1d1dqSTBkR05JVm1saVIyeHFURmRHYmxwWE5UQk1WMFo2Q21NeVZqQmplVFUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJyUjBOcGMwZEJVVkZDWnpjNGQwRlJSVVZMTW1nd1pFaENlazlwT0hZS1pFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2WkZkS01XTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNTSGRaUzB0M1dVSkNRVWRFZG5wQlFncEJaMUZTWkRJNWVXRXlXbk5pTTJSbVdrZHNlbU5IUmpCWk1tZDNUbWRaUzB0M1dVSkNRVWRFZG5wQlFrRjNVVzlPUkdNMFRqSlZNVTE2Um0xTmVrNXRDazVVVm1sYWJVVjZXV3BvYWs1SFRYbFBSMVUwVFdwUk1GbFVUVFJaVjBwb1dsZEpNbGxxUVhoQ1oyOXlRbWRGUlVGWlR5OU5RVVZGUWtOT1ZHRlhaSFVLU1VkV05GbFhUakJKU0VJeFdXMTRjRmw1UWtKVU1VSlVTVWRHYmxwWE5UQkpSMFo2WXpKV01HTjZRV2xDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pTYkFwYVYxWjBaVzVOZGxsWE9YZGplVEYzWWtkR01GcHRPWGxpVkVGa1FtZHZja0puUlVWQldVOHZUVUZGUjBKQk9YbGFWMXA2VERKb2JGbFhVbnBNTWpGb0NtRlhOSGRQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZta0taRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU0ZsSFEybHpSMEZSVVVKbk56aDNRVkZyUldGQmVHMWhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESldiRnBYTVRaamVUbG9Zak5DZWt4WVFuTlpXRkp0WWpOS2RFeDVOVzVoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3elRuQmFNalIwQ21OSVZtbGlSMnhxVEZkR2JscFhOVEJNVjBaNll6SldNR041TlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVJS1p6YzRkMEZSYjBWTFozZHZUa1JqTkU0eVZURk5la1p0VFhwT2JVNVVWbWxhYlVWNldXcG9hazVIVFhsUFIxVTBUV3BSTUZsVVRUUlpWMHBvV2xkSk1ncFpha0ZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOWlNMDR3V2xkUmQwNTNXVXRMZDFsQ1FrRkhSSFo2UVVKRVFWRndDa1JEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIzVDBGWlMwdDNXVUlLUWtGSFJIWjZRVUpFVVZGeFJFTm5NRTU2WnpOYVZGVjZUVmRaZWsweVdURk9WMHB0V1ZST2FVOUhUVEJaZWtrMFdsUm5lVTVFVW1oTmVtaG9XVzFHYkFwWmFscHBUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5RbTlIUTJselIwRlJVVUpuTnpoM0NrRlJPRVZFUVhkTFRWUk5lRTVxU1RGT1ZFRjVUbXBCY0VKbmIzSkNaMFZGUVZsUEwwMUJSVkZDUW5OTlIxZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZta0tURzFPZG1KVE9XeGFWMVowWlc1TmQwZFJXVXRMZDFsQ1FrRkhSSFo2UVVKRlVWRk1SRUZyZUUxRWEzcE5WRUV6VG5wUmQyUm5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1JXZFNiMFJIV205a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIyQ2t4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU15Ykc1aWFURjNaRmRLYzJGWFRYUlpWMlJzWW01UmRGbFlUbnBhV0ZKNlRHNXNkR0pGUW5rS1dsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjVVJEWnpCT2VtY3pXbFJWZWsxWFdYcE5NbGt4VGxkS2JRcFpWRTVwVDBkTk1GbDZTVFJhVkdkNVRrUlNhRTE2YUdoWmJVWnNXV3BhYVUxRFJVZERhWE5IUVZGUlFtYzNPSGRCVWxGRlJYZDNVbVF5T1hsaE1scHpDbUl6WkdaYVIyeDZZMGRHTUZreVozZFhkMWxMUzNkWlFrSkJSMFIyZWtGQ1JsRlNUa1JGZEc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLV2xkV2JHSlljSHBNTWtaMlkwaE5kR05IZUdoa1IxcDJZMjB3ZGxsWFRqQmhWemwxWTNrNWVXUlhOWHBNZWsxNVRsUkplRTlVWXpOTmVtZDZUREpHTUFwa1IxWjBZMGhTZWt4NlJYZEdkMWxMUzNkWlFrSkJSMFIyZWtGQ1JtZFJTa1JCWkhkamJXd3lXVmhTYkUxR1NVZERhWE5IUVZGUlFtYzNPSGRCVW1kRkNsSkJlRU5qYlZaM1lucHdiRnBYVm5SbGJrNUJUVlJCTlUxNlJYZE9lbU13VERKR2RtTklUWFJqUjNob1pFZGFkbU50TVVGTlZFMTRUbXBKTVU1VVFYa0tUbXB3ZVZwWFdUWmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFKUjB4Q1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtnd1JXVjNRalZCU0dOQk0xUXdkd3BoYzJKSVJWUktha2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaMHBtUTJWblVVRkJRa0ZOUVZORVFrZEJhVVZCQ21zNE1ESnpRbWRwUkU1VVQyUnRRWFpQZW1NMVlVc3lNWFpZZFdnNFZFZENkbEp5VWtkdVJHaDJZemhEU1ZGREwyOXFZak5ETm5KUFUzTnRXVTkzV0VzS2FVZFZVbTlKTWxsSWVXeFNXRGxJWkhsa1pXNXllbVJPVEhwQlMwSm5aM0ZvYTJwUFVGRlJSRUYzVG5CQlJFSnRRV3BGUVd0Q1kyYzNNbVJOYnpsV1Z3cEJaM0YyZVV0SU5reHRTRTFJWlRaNGFVWkdORmgzVWpKV2FGRXdXbk53UjJSNFFWVTNkazU1VG5oRGIyRklOSGh2WldKcFFXcEZRU3RwUldoTFEzWnhDa0Z2YW1SM2NWUndZbkJwU3pKNmNVMUJkSFJTUVN0dVdHbENPR3hLWmxwTWFGZ3hZM1pxTTA5bGVFeEZhRE5YYUU1UVF6WnVVMkZKQ2kwdExTMHRSVTVFSUVORlVsUkpSa2xEUVZSRkxTMHRMUzBLIn19fX0="
52
+ "canonicalizedBody": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI0MjFjY2FhMGYwOTM3NDA3Zjc3MTMxOGM3ZjJlZmQyYjQxNDdhYmM5MjgyNmUwOGMxNmY0YWZjZWRjMDc0YmI3In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUNOU3pFMnhoanhEdHJVWUFJY3VEZjVHYmhCRFpISU9KazVlR3FLUzZxVWl3SWhBS1R3RVoyOFFTNlJmQXY2MkJWMSsrZUxOQ0Qxc1NLNmpqTzllWFpuV2VHQSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGtSRU5EUW5aMVowRjNTVUpCWjBsVlMzb3pWRkpzZGpOVGVVVkxNM0pvUW1SRE5saFdVRXRNWkRaemQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlFU1hoTmFrVjVUVVJOZVZkb1kwNU5hbGwzVDBSSmVFMXFSWHBOUkUxNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZ6WkZkVmRFMTJUbmhpT0RkTWQxQmpZVTUzVFN0NWJGQTViMVptYmtKbGNXUk9SVTBLZDB0TFVucG9kU3QzV2xkWk9FMWhhWEZQTWxKd1RWa3hjbmMyUXpKeFZ6aGxkMlZVVmpSRVRtbGhSbE01WVdJMVZ6WlBRMEpvYjNkbloxbFhUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZLU2toYUNrSmtLMEowV0hNeU1HeGlUakZzWlhaYWRGRmtaU3R6ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSQldVUldVakJTUVZGSUwwSkhiM2RoU1ZwdFlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKV2JGcFhNVFpqZVRsb1lqTkNlZ3BNV0VKeldWaFNiV0l6U25STWVUVnVZVmhTYjJSWFNYWmtNamw1WVRKYWMySXpaSHBNTTA1d1dqSTBkR05JVm1saVIyeHFURmRHYmxwWE5UQk1WMFo2Q21NeVZqQmplVFUxWWxkNFFXTnRWbTFqZVRsdldsZEdhMk41T1hSWlYyeDFUVVJyUjBOcGMwZEJVVkZDWnpjNGQwRlJSVVZMTW1nd1pFaENlazlwT0hZS1pFYzVjbHBYTkhWWlYwNHdZVmM1ZFdONU5XNWhXRkp2WkZkS01XTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNTSGRaUzB0M1dVSkNRVWRFZG5wQlFncEJaMUZTWkRJNWVXRXlXbk5pTTJSbVdrZHNlbU5IUmpCWk1tZDNUbWRaUzB0M1dVSkNRVWRFZG5wQlFrRjNVVzlPUjBrelRrZFZlVmx0Um1sT2FtUnBDazVFUW14Wk1rMHdXbGRGZWs0eVJUVk9la3ByVFdwak1FNTZVVFZOVjFreldWUm9hVTFxUVhoQ1oyOXlRbWRGUlVGWlR5OU5RVVZGUWtOT1ZHRlhaSFVLU1VkV05GbFhUakJKU0VJeFdXMTRjRmw1UWtKVU1VSlVTVWRHYmxwWE5UQkpSMFo2WXpKV01HTjZRV2xDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0pTYkFwYVYxWjBaVzVOZGxsWE9YZGplVEYzWWtkR01GcHRPWGxpVkVGa1FtZHZja0puUlVWQldVOHZUVUZGUjBKQk9YbGFWMXA2VERKb2JGbFhVbnBNTWpGb0NtRlhOSGRQZDFsTFMzZFpRa0pCUjBSMmVrRkNRMEZSZEVSRGRHOWtTRkozWTNwdmRrd3pVblpoTWxaMVRHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZta0taRmhPYkdOdFRuWmlibEpzWW01UmRWa3lPWFJOU0ZsSFEybHpSMEZSVVVKbk56aDNRVkZyUldGQmVHMWhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkUXBaTWpsMFRESldiRnBYTVRaamVUbG9Zak5DZWt4WVFuTlpXRkp0WWpOS2RFeDVOVzVoV0ZKdlpGZEpkbVF5T1hsaE1scHpZak5rZWt3elRuQmFNalIwQ21OSVZtbGlSMnhxVEZkR2JscFhOVEJNVjBaNll6SldNR041TlRWaVYzaEJZMjFXYldONU9XOWFWMFpyWTNrNWRGbFhiSFZOUkdkSFEybHpSMEZSVVVJS1p6YzRkMEZSYjBWTFozZHZUa2RKTTA1SFZYbFpiVVpwVG1wa2FVNUVRbXhaTWswd1dsZEZlazR5UlRWT2VrcHJUV3BqTUU1NlVUVk5WMWt6V1ZSb2FRcE5ha0ZrUW1kdmNrSm5SVVZCV1U4dlRVRkZURUpCT0UxRVYyUndaRWRvTVZscE1XOWlNMDR3V2xkUmQwNTNXVXRMZDFsQ1FrRkhSSFo2UVVKRVFWRndDa1JEWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIzVDBGWlMwdDNXVUlLUWtGSFJIWjZRVUpFVVZGeFJFTm5NRmxxWXpCYVZFcHBXVmRKTWs0eVNUQk5SMVpxV1hwU2JGbFVUVE5aVkdzelRXMVJlVTU2VVROT1JHdDRXbXBrYUFwUFIwbDVUVUk0UjBOcGMwZEJVVkZDWnpjNGQwRlJORVZGVVhkUVkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5RbTlIUTJselIwRlJVVUpuTnpoM0NrRlJPRVZFUVhkTFRWUk5lRTVxU1RGT1ZFRjVUbXBCY0VKbmIzSkNaMFZGUVZsUEwwMUJSVkZDUW5OTlIxZG9NR1JJUW5wUGFUaDJXakpzTUdGSVZta0tURzFPZG1KVE9XeGFWMVowWlc1TmQwZFJXVXRMZDFsQ1FrRkhSSFo2UVVKRlVWRk1SRUZyZUUxRWEzcE5WRUV6VG5wUmQyUm5XVXRMZDFsQ1FrRkhSQXAyZWtGQ1JXZFNiMFJIV205a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFphVjFac1lsaHdla3d5Um5aalNFMTBZMGQ0YUdSSFduWmpiVEIyQ2t4dFpIQmtSMmd4V1drNU0ySXpTbkphYlhoMlpETk5kbU15Ykc1aWFURjNaRmRLYzJGWFRYUlpWMlJzWW01UmRGbFlUbnBhV0ZKNlRHNXNkR0pGUW5rS1dsZGFla3d5YUd4WlYxSjZUREl4YUdGWE5IZFBRVmxMUzNkWlFrSkJSMFIyZWtGQ1JYZFJjVVJEWnpCWmFtTXdXbFJLYVZsWFNUSk9Na2t3VFVkV2FncFplbEpzV1ZSTk0xbFVhek5OYlZGNVRucFJNMDVFYTNoYWFtUm9UMGRKZVUxRFJVZERhWE5IUVZGUlFtYzNPSGRCVWxGRlJYZDNVbVF5T1hsaE1scHpDbUl6WkdaYVIyeDZZMGRHTUZreVozZFhkMWxMUzNkWlFrSkJSMFIyZWtGQ1JsRlNUa1JGZEc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFlLV2xkV2JHSlljSHBNTWtaMlkwaE5kR05IZUdoa1IxcDJZMjB3ZGxsWFRqQmhWemwxWTNrNWVXUlhOWHBNZWsxNVRsUkpNMDlVVlRGT1ZFVjRUREpHTUFwa1IxWjBZMGhTZWt4NlJYZEdkMWxMUzNkWlFrSkJSMFIyZWtGQ1JtZFJTa1JCWkhkamJXd3lXVmhTYkUxR1NVZERhWE5IUVZGUlFtYzNPSGRCVW1kRkNsSkJlRU5qYlZaM1lucHdiRnBYVm5SbGJrNUJUVlJCTlUxNlJYZE9lbU13VERKR2RtTklUWFJqUjNob1pFZGFkbU50TVVGTlZFMTRUbXBKTVU1VVFYa0tUbXB3ZVZwWFdUWmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFKUjB4Q1oyOXlRbWRGUlVGa1dqVkJaMUZEUWtnd1JXVjNRalZCU0dOQk0xUXdkd3BoYzJKSVJWUktha2RTTkdOdFYyTXpRWEZLUzFoeWFtVlFTek12YURSd2VXZERPSEEzYnpSQlFVRkhaMHBxU201T2QwRkJRa0ZOUVZORVFrZEJhVVZCQ2pGT1ZHaE5hSEJOWWtsSVUyeGpUVEZTTVhCYVFWVmlLMkZOWWtoblprbHRkalJsZVhkT1R5c3hNMDFEU1ZGRFRrUkhaSFF2VjBNMGNqa3pVazh5Y0dJS1VVWmlNa3hhYkdFM09HUXJXVGxoUkZKM055OWxkbE0yYldwQlMwSm5aM0ZvYTJwUFVGRlJSRUYzVG01QlJFSnJRV3BCTW5CU1JWbFVSM0ExZDNkbFpncG5TRE16UkRKbGRWaHZjRkJ0YzFrM01reEdZa0ZrTTAxTU4yWk9ORFpLY1daWWVVOHhWVEU0T0d4bFVWcGlabVZOY2tsRFRVVndURzlrYW5CbVRHWktDblZMWlV4b1JqTndSVFpSZEVWS2VHRjFNM0pOZGtsbWRqUjJNRzFHZUdZd1RUZHJWWGxpUnpVNVpIUTFUMVJGVGtST1F6ZzRRVDA5Q2kwdExTMHRSVTVFSUVORlVsUkpSa2xEUVZSRkxTMHRMUzBLIn19fX0="
54
53
  }
55
54
  ],
56
55
  "timestampVerificationData": {}
@@ -58,8 +57,8 @@
58
57
  "messageSignature": {
59
58
  "messageDigest": {
60
59
  "algorithm": "SHA2_256",
61
- "digest": "kdD/GCBdKfYWVUj+/AMwtLhl8YzO1w00WeVejOi6zGc="
60
+ "digest": "QhzKoPCTdAf3cTGMfy79K0FHq8koJuCMFvSvztwHS7c="
62
61
  },
63
- "signature": "MEUCIQDomePY8WiNeplOV4uTen6T63llFzqzj/XhDPT6RuYoowIgTLjs2t4y+2zXTDF5nVvIuPrZiHcxPlJReTjTBrUS0F8="
62
+ "signature": "MEYCIQCNSzE2xhjxDtrUYAIcuDf5GbhBDZHIOJk5eGqKS6qUiwIhAKTwEZ28QS6RfAv62BV1++eLNCD1sSK6jjO9eXZnWeGA"
64
63
  }
65
64
  }
@@ -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 "50600a98d6f7643b0dd62d7f6fb9c9761a8d384210dda72b10d4bbb761d3e14a" === 'undefined'
547
547
  ? undefined
548
- : "7f232c413710060253a8f61f7b9b977106d8f71df4fadb408f77b12bbdf2bc29";
548
+ : "50600a98d6f7643b0dd62d7f6fb9c9761a8d384210dda72b10d4bbb761d3e14a";
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": "8cc3d15f86ed5b243b4d2ba834f239e57db89c0a9987e5d7ca30ab13cc6b2706"
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": "8d22f4416cad09beaa5f8b81b01b3da95cf9f2dca5d270f6f25ce7b67b8dd778",
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.28",
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.22",
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.7",
82
83
  "@aopslabs/aops-runtime-config": "0.2.2",
83
84
  "@sigstore/bundle": "4.0.0",
84
85
  "@sigstore/protobuf-specs": "0.5.1",