@hellolynk-ai/trae-work-mcp 0.4.97 → 0.4.98
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/bin/hellolynk-client-setup.mjs +70 -10
- package/hellolynk-client-pack-manifest.json +71 -51
- package/hellolynk-client-pack-pin.json +1 -1
- package/integrations/trae-work/package.json +1 -1
- package/package.json +1 -1
- package/runtime/bootstrap/core/hellolynk-client-account.mjs +1 -1
- package/runtime/bootstrap/core/hellolynk-darwin-host.mjs +269 -0
- package/runtime/bootstrap/core/hellolynk-darwin-vault.mjs +153 -0
- package/runtime/bootstrap/core/hellolynk-host-protected-store.mjs +20 -8
- package/runtime/bootstrap/core/hellolynk-neutral-host-installation-store.mjs +1 -1
- package/runtime/bootstrap/core/hellolynk-platform-credential-store.mjs +68 -14
- package/runtime/connect-activate.mjs +5 -1
- package/runtime/core/hellolynk-client-account.mjs +1 -1
- package/runtime/core/hellolynk-client-update-entry.mjs +7 -3
- package/runtime/core/hellolynk-client-update-runtime.mjs +62 -33
- package/runtime/core/hellolynk-client-update.mjs +62 -18
- package/runtime/core/hellolynk-darwin-host.mjs +269 -0
- package/runtime/core/hellolynk-darwin-vault.mjs +153 -0
- package/runtime/core/hellolynk-host-protected-store.mjs +20 -8
- package/runtime/core/hellolynk-human-confirmation-ledger.mjs +53 -6
- package/runtime/core/hellolynk-local-data-protection.mjs +22 -7
- package/runtime/core/hellolynk-native-human-confirmation-broker.mjs +7 -5
- package/runtime/core/hellolynk-neutral-host-installation-store.mjs +1 -1
- package/runtime/core/hellolynk-neutral-host-launcher.mjs +9 -3
- package/runtime/core/hellolynk-neutral-host-process.mjs +1 -1
- package/runtime/core/hellolynk-platform-credential-store.mjs +68 -14
- package/runtime/core/hellolynk-release-retention.mjs +101 -2
- package/runtime/core/hellolynk-workbench-connection.mjs +5 -3
- package/runtime/neutral-host-release-loader.mjs +1 -1
- package/runtime/neutral-host-release-manifest.json +38 -22
- package/runtime/neutral-host-release-pin.json +1 -1
- package/runtime/platform/windows/credential-store.ps1 +46 -10
- package/tools/hellolynk-activate-neutral-host-clients.mjs +5 -1
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
"files": [
|
|
5
5
|
{
|
|
6
6
|
"path": "release/integrations/trae-work/package.json",
|
|
7
|
-
"sha256": "
|
|
7
|
+
"sha256": "76d72f67de8dc545e61f39ad7edc996f5ce6344078e897fddfe3ff3c67eb5994"
|
|
8
8
|
},
|
|
9
9
|
{
|
|
10
10
|
"path": "connect-activate.mjs",
|
|
11
|
-
"sha256": "
|
|
11
|
+
"sha256": "93c68c23ed2d18e87766ecd8dae6c3d8e757eca6ad7569477c8ec994402a8b0e"
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
"path": "neutral-host-bootstrap.mjs",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
"path": "neutral-host-release-loader.mjs",
|
|
19
|
-
"sha256": "
|
|
19
|
+
"sha256": "137c5663e34ef8ee62340b1c2d46f7284dc60576b6f25d3d0122390bb600e372"
|
|
20
20
|
},
|
|
21
21
|
{
|
|
22
22
|
"path": "neutral-host-release-entry.mjs",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
{
|
|
34
34
|
"path": "core/hellolynk-client-account.mjs",
|
|
35
|
-
"sha256": "
|
|
35
|
+
"sha256": "57082d5ea5e068dad81a47dd8abd38e34663e4563d8efa40f5130b817a346670"
|
|
36
36
|
},
|
|
37
37
|
{
|
|
38
38
|
"path": "core/hellolynk-client-core.mjs",
|
|
@@ -44,19 +44,19 @@
|
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"path": "core/hellolynk-client-update-entry.mjs",
|
|
47
|
-
"sha256": "
|
|
47
|
+
"sha256": "8b872933f9883a92889202cf370e1e8d878c2172e4e1c5d8aa8261f314577d90"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
"path": "core/hellolynk-client-update-runtime.mjs",
|
|
51
|
-
"sha256": "
|
|
51
|
+
"sha256": "6bdcc525579963fa3ffc46f29527817acc0b8090fdc6a9cbdadb0fc262eee12e"
|
|
52
52
|
},
|
|
53
53
|
{
|
|
54
54
|
"path": "core/hellolynk-client-update.mjs",
|
|
55
|
-
"sha256": "
|
|
55
|
+
"sha256": "374690bb6cc7335b5f1cf030c33989aba9713e0922369edda0348b40ef71b02f"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"path": "core/hellolynk-release-retention.mjs",
|
|
59
|
-
"sha256": "
|
|
59
|
+
"sha256": "b894c452019b89486dd3090c9eeee7b7c2bb4e50753565bf88ecd14ce0efeaf1"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"path": "core/hellolynk-contact-request-e2ee.mjs",
|
|
@@ -66,6 +66,14 @@
|
|
|
66
66
|
"path": "core/hellolynk-device-enrollment.mjs",
|
|
67
67
|
"sha256": "18f9decb843a5a82ef8dfc3e866904e0b04bbc48d700eac55a8ae54c5729c2aa"
|
|
68
68
|
},
|
|
69
|
+
{
|
|
70
|
+
"path": "core/hellolynk-darwin-host.mjs",
|
|
71
|
+
"sha256": "43dba4cd61cff66f2479c39532e504348a46e76faae0f7b1e09a7a7f5362e64a"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"path": "core/hellolynk-darwin-vault.mjs",
|
|
75
|
+
"sha256": "2972df9fa8a0d7594072a39bc8dfa2a41b8fb33ddf79cc5abe5e66636c1ea3ca"
|
|
76
|
+
},
|
|
69
77
|
{
|
|
70
78
|
"path": "core/hellolynk-direct-text-e2ee-client.mjs",
|
|
71
79
|
"sha256": "dd5dfa410a664e21e14b3c253ca496dd303e36aa5a2e1370b78cc51ec1fba973"
|
|
@@ -80,7 +88,7 @@
|
|
|
80
88
|
},
|
|
81
89
|
{
|
|
82
90
|
"path": "core/hellolynk-host-protected-store.mjs",
|
|
83
|
-
"sha256": "
|
|
91
|
+
"sha256": "bb0167b7861de2c408b90c16f24765f45dfeca7033f90d31e17dca3fc9e30c41"
|
|
84
92
|
},
|
|
85
93
|
{
|
|
86
94
|
"path": "core/hellolynk-host-transport-client.mjs",
|
|
@@ -112,7 +120,7 @@
|
|
|
112
120
|
},
|
|
113
121
|
{
|
|
114
122
|
"path": "core/hellolynk-human-confirmation-ledger.mjs",
|
|
115
|
-
"sha256": "
|
|
123
|
+
"sha256": "746f2d23f19fa110ecd87d0b1dc3d88138776accc3b177afd8f5d266223ccc81"
|
|
116
124
|
},
|
|
117
125
|
{
|
|
118
126
|
"path": "core/hellolynk-human-relationship-controller.mjs",
|
|
@@ -144,7 +152,7 @@
|
|
|
144
152
|
},
|
|
145
153
|
{
|
|
146
154
|
"path": "core/hellolynk-local-data-protection.mjs",
|
|
147
|
-
"sha256": "
|
|
155
|
+
"sha256": "e33b0c83fff59ba3ed49ae880d1b95016be4457bc7fd223367683942c78525bc"
|
|
148
156
|
},
|
|
149
157
|
{
|
|
150
158
|
"path": "core/hellolynk-local-identity-trust.mjs",
|
|
@@ -176,7 +184,7 @@
|
|
|
176
184
|
},
|
|
177
185
|
{
|
|
178
186
|
"path": "core/hellolynk-native-human-confirmation-broker.mjs",
|
|
179
|
-
"sha256": "
|
|
187
|
+
"sha256": "98d986f492a9e646f4601f25588cabe065e3c7bb00f0773b5dfd99e72e65c324"
|
|
180
188
|
},
|
|
181
189
|
{
|
|
182
190
|
"path": "core/hellolynk-neutral-host-assembly.mjs",
|
|
@@ -184,15 +192,15 @@
|
|
|
184
192
|
},
|
|
185
193
|
{
|
|
186
194
|
"path": "core/hellolynk-neutral-host-installation-store.mjs",
|
|
187
|
-
"sha256": "
|
|
195
|
+
"sha256": "f6e04183e8e0c945006c5348ed251833ec12a6ab9777031609b5a3ccd0d2252d"
|
|
188
196
|
},
|
|
189
197
|
{
|
|
190
198
|
"path": "core/hellolynk-neutral-host-launcher.mjs",
|
|
191
|
-
"sha256": "
|
|
199
|
+
"sha256": "0afe5310d1d9f7b1448a9f50aeb2c1fc93b42ce7eb48dd8472fbde5d33e898af"
|
|
192
200
|
},
|
|
193
201
|
{
|
|
194
202
|
"path": "core/hellolynk-neutral-host-process.mjs",
|
|
195
|
-
"sha256": "
|
|
203
|
+
"sha256": "634279c96b8b4e83bcbcc92c5184f4ec7c31713a097f45af3f5650f8151fb78b"
|
|
196
204
|
},
|
|
197
205
|
{
|
|
198
206
|
"path": "core/hellolynk-neutral-host-store-adapters.mjs",
|
|
@@ -204,7 +212,7 @@
|
|
|
204
212
|
},
|
|
205
213
|
{
|
|
206
214
|
"path": "core/hellolynk-platform-credential-store.mjs",
|
|
207
|
-
"sha256": "
|
|
215
|
+
"sha256": "0ab136d36e890309b4cb5ff6f1cef6f3d82caf65f5b1d08c7b3992442ffe38a7"
|
|
208
216
|
},
|
|
209
217
|
{
|
|
210
218
|
"path": "core/hellolynk-relay-client-cli.mjs",
|
|
@@ -220,7 +228,7 @@
|
|
|
220
228
|
},
|
|
221
229
|
{
|
|
222
230
|
"path": "core/hellolynk-workbench-connection.mjs",
|
|
223
|
-
"sha256": "
|
|
231
|
+
"sha256": "0f24d28316253a761dc03d8096dace3da7a3cf8cb8eaf575765b2aa07d30274c"
|
|
224
232
|
},
|
|
225
233
|
{
|
|
226
234
|
"path": "workbench/candidate-bootstrap.mjs",
|
|
@@ -288,7 +296,7 @@
|
|
|
288
296
|
},
|
|
289
297
|
{
|
|
290
298
|
"path": "platform/windows/credential-store.ps1",
|
|
291
|
-
"sha256": "
|
|
299
|
+
"sha256": "4817c3c91d5d180763794a7a528f83664602f34cf1d1a8396e75ad6d56bd874f"
|
|
292
300
|
},
|
|
293
301
|
{
|
|
294
302
|
"path": "platform/windows/hellolynk-host-protected-store.ps1",
|
|
@@ -306,9 +314,17 @@
|
|
|
306
314
|
"path": "platform/windows/hellolynk-native-human-confirmation-broker.ps1",
|
|
307
315
|
"sha256": "d63e02b34eb43d1a81d771f0e23f0b8d38e34c8f96663156d0c7b79985802936"
|
|
308
316
|
},
|
|
317
|
+
{
|
|
318
|
+
"path": "bootstrap/core/hellolynk-darwin-host.mjs",
|
|
319
|
+
"sha256": "43dba4cd61cff66f2479c39532e504348a46e76faae0f7b1e09a7a7f5362e64a"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"path": "bootstrap/core/hellolynk-darwin-vault.mjs",
|
|
323
|
+
"sha256": "2972df9fa8a0d7594072a39bc8dfa2a41b8fb33ddf79cc5abe5e66636c1ea3ca"
|
|
324
|
+
},
|
|
309
325
|
{
|
|
310
326
|
"path": "bootstrap/core/hellolynk-client-account.mjs",
|
|
311
|
-
"sha256": "
|
|
327
|
+
"sha256": "57082d5ea5e068dad81a47dd8abd38e34663e4563d8efa40f5130b817a346670"
|
|
312
328
|
},
|
|
313
329
|
{
|
|
314
330
|
"path": "bootstrap/core/hellolynk-client-core.mjs",
|
|
@@ -324,7 +340,7 @@
|
|
|
324
340
|
},
|
|
325
341
|
{
|
|
326
342
|
"path": "bootstrap/core/hellolynk-host-protected-store.mjs",
|
|
327
|
-
"sha256": "
|
|
343
|
+
"sha256": "bb0167b7861de2c408b90c16f24765f45dfeca7033f90d31e17dca3fc9e30c41"
|
|
328
344
|
},
|
|
329
345
|
{
|
|
330
346
|
"path": "bootstrap/core/hellolynk-local-process-lock.mjs",
|
|
@@ -332,11 +348,11 @@
|
|
|
332
348
|
},
|
|
333
349
|
{
|
|
334
350
|
"path": "bootstrap/core/hellolynk-neutral-host-installation-store.mjs",
|
|
335
|
-
"sha256": "
|
|
351
|
+
"sha256": "f6e04183e8e0c945006c5348ed251833ec12a6ab9777031609b5a3ccd0d2252d"
|
|
336
352
|
},
|
|
337
353
|
{
|
|
338
354
|
"path": "bootstrap/core/hellolynk-platform-credential-store.mjs",
|
|
339
|
-
"sha256": "
|
|
355
|
+
"sha256": "0ab136d36e890309b4cb5ff6f1cef6f3d82caf65f5b1d08c7b3992442ffe38a7"
|
|
340
356
|
},
|
|
341
357
|
{
|
|
342
358
|
"path": "bootstrap/core/hellolynk-runtime-safety.cjs",
|
|
@@ -85,8 +85,27 @@ public static class HelloLynkWindowsFileNative {
|
|
|
85
85
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
86
86
|
public static extern bool MoveFileExW(string existingName, string newName, uint flags);
|
|
87
87
|
|
|
88
|
+
[StructLayout(LayoutKind.Sequential)]
|
|
89
|
+
private struct SECURITY_ATTRIBUTES {
|
|
90
|
+
public int Length;
|
|
91
|
+
public IntPtr SecurityDescriptor;
|
|
92
|
+
public int InheritHandle;
|
|
93
|
+
}
|
|
94
|
+
|
|
88
95
|
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
|
89
|
-
|
|
96
|
+
private static extern bool CreateDirectoryW(string path, ref SECURITY_ATTRIBUTES attributes);
|
|
97
|
+
|
|
98
|
+
public static bool CreateProtectedDirectory(string path, byte[] descriptor) {
|
|
99
|
+
var pinned = GCHandle.Alloc(descriptor, GCHandleType.Pinned);
|
|
100
|
+
try {
|
|
101
|
+
var attributes = new SECURITY_ATTRIBUTES {
|
|
102
|
+
Length = Marshal.SizeOf<SECURITY_ATTRIBUTES>(),
|
|
103
|
+
SecurityDescriptor = pinned.AddrOfPinnedObject(),
|
|
104
|
+
InheritHandle = 0
|
|
105
|
+
};
|
|
106
|
+
return CreateDirectoryW(path, ref attributes);
|
|
107
|
+
} finally { pinned.Free(); }
|
|
108
|
+
}
|
|
90
109
|
}
|
|
91
110
|
'@
|
|
92
111
|
|
|
@@ -162,7 +181,7 @@ function Get-HelloLynkExistingAncestorDirectories([string]$RootPath) {
|
|
|
162
181
|
return $ordered
|
|
163
182
|
}
|
|
164
183
|
|
|
165
|
-
function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
184
|
+
function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath, [bool]$Create = $false) {
|
|
166
185
|
$rootParent = [IO.Path]::GetDirectoryName($RootPath.TrimEnd([char[]]@('\', '/')))
|
|
167
186
|
$directories = @(Get-HelloLynkExistingAncestorDirectories $RootPath)
|
|
168
187
|
$dangerousRights = (
|
|
@@ -175,6 +194,8 @@ function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
|
175
194
|
[Security.AccessControl.FileSystemRights]::ChangePermissions -bor
|
|
176
195
|
[Security.AccessControl.FileSystemRights]::TakeOwnership
|
|
177
196
|
)
|
|
197
|
+
$createRights = [Security.AccessControl.FileSystemRights]::CreateFiles -bor
|
|
198
|
+
[Security.AccessControl.FileSystemRights]::CreateDirectories
|
|
178
199
|
foreach ($directory in $directories) {
|
|
179
200
|
Assert-HelloLynkNoReparseAncestors $directory
|
|
180
201
|
$identity = Open-HelloLynkIdentity $directory $true
|
|
@@ -204,6 +225,7 @@ function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
|
204
225
|
)
|
|
205
226
|
$isRootParent = $directory.Equals($rootParent, [StringComparison]::OrdinalIgnoreCase)
|
|
206
227
|
$directoryIndex = [Array]::IndexOf($directories, $directory)
|
|
228
|
+
$willCreateProtectedChild = $Create -and -not $isRootParent -and $directoryIndex -eq $directories.Count - 1
|
|
207
229
|
$nextDirectoryProtected = $false
|
|
208
230
|
if ($directoryIndex -ge 0 -and $directoryIndex + 1 -lt $directories.Count) {
|
|
209
231
|
try {
|
|
@@ -220,15 +242,20 @@ function Assert-HelloLynkTrustedAncestorAcl([string]$RootPath) {
|
|
|
220
242
|
) { continue }
|
|
221
243
|
$rights = $rule.FileSystemRights
|
|
222
244
|
$hasDangerousRights = (($rights -band $dangerousRights) -ne 0)
|
|
245
|
+
# A competing child created by a different user fails our owner check.
|
|
246
|
+
# A grant to alter the ancestor itself still prevents first creation.
|
|
247
|
+
$canCreateProtectedChild = $willCreateProtectedChild -and
|
|
248
|
+
(($rights -band $dangerousRights -band (-bnot $createRights)) -eq 0)
|
|
223
249
|
$hasDeleteChild = (
|
|
224
250
|
($rights -band [Security.AccessControl.FileSystemRights]::DeleteSubdirectoriesAndFiles) -ne 0
|
|
225
251
|
)
|
|
226
252
|
if (
|
|
227
253
|
$hasDeleteChild -or
|
|
228
|
-
($hasDangerousRights -and ($isRootParent -or -not $nextDirectoryProtected))
|
|
254
|
+
($hasDangerousRights -and ($isRootParent -or (-not $nextDirectoryProtected -and -not $canCreateProtectedChild)))
|
|
229
255
|
) { Fail "client_root_ancestor_dacl_untrusted" }
|
|
230
256
|
}
|
|
231
257
|
}
|
|
258
|
+
return $directories[-1]
|
|
232
259
|
}
|
|
233
260
|
|
|
234
261
|
function New-HelloLynkAcl([bool]$Directory) {
|
|
@@ -361,7 +388,7 @@ function Exit-HelloLynkRootMutex($Mutex) {
|
|
|
361
388
|
try { $Mutex.ReleaseMutex() } finally { $Mutex.Dispose() }
|
|
362
389
|
}
|
|
363
390
|
|
|
364
|
-
function Ensure-HelloLynkSecureDirectory([string]$PathValue) {
|
|
391
|
+
function Ensure-HelloLynkSecureDirectory([string]$PathValue, [string]$ExistingAncestor = "") {
|
|
365
392
|
if ([IO.Directory]::Exists($PathValue)) {
|
|
366
393
|
Assert-HelloLynkNoReparseAncestors $PathValue
|
|
367
394
|
Assert-HelloLynkSecureAcl $PathValue $true
|
|
@@ -370,12 +397,21 @@ function Ensure-HelloLynkSecureDirectory([string]$PathValue) {
|
|
|
370
397
|
return
|
|
371
398
|
}
|
|
372
399
|
$parent = [IO.Path]::GetDirectoryName($PathValue)
|
|
373
|
-
if (
|
|
374
|
-
|
|
400
|
+
if ($ExistingAncestor) {
|
|
401
|
+
if (-not $parent.Equals($ExistingAncestor, [StringComparison]::OrdinalIgnoreCase)) {
|
|
402
|
+
Ensure-HelloLynkSecureDirectory $parent $ExistingAncestor
|
|
403
|
+
}
|
|
404
|
+
} elseif (-not [IO.Directory]::Exists($parent)) {
|
|
405
|
+
Ensure-HelloLynkSecureDirectory $parent
|
|
406
|
+
}
|
|
407
|
+
Assert-HelloLynkNoReparseAncestors $PathValue
|
|
408
|
+
$descriptor = (New-HelloLynkAcl $true).GetSecurityDescriptorBinaryForm()
|
|
409
|
+
if (-not [HelloLynkWindowsFileNative]::CreateProtectedDirectory($PathValue, $descriptor)) {
|
|
375
410
|
Fail "client_root_create_race"
|
|
376
411
|
}
|
|
377
|
-
Set-HelloLynkSecureAcl $PathValue $true
|
|
378
412
|
Assert-HelloLynkNoReparseAncestors $PathValue
|
|
413
|
+
# Keep the Windows auto-inheritance marker used by child file ACL checks.
|
|
414
|
+
Set-HelloLynkSecureAcl $PathValue $true
|
|
379
415
|
Assert-HelloLynkSecureAcl $PathValue $true
|
|
380
416
|
$identity = Open-HelloLynkIdentity $PathValue $true
|
|
381
417
|
$identity.Handle.Dispose()
|
|
@@ -386,14 +422,14 @@ function Resolve-HelloLynkClientRoot([string]$RootValue, [bool]$Create) {
|
|
|
386
422
|
Assert-HelloLynkNoReparseAncestors $root
|
|
387
423
|
$mutex = Enter-HelloLynkRootMutex $root
|
|
388
424
|
try {
|
|
389
|
-
Assert-HelloLynkTrustedAncestorAcl $root
|
|
390
|
-
if ($Create) { Ensure-HelloLynkSecureDirectory $root }
|
|
425
|
+
$existingAncestor = Assert-HelloLynkTrustedAncestorAcl $root $Create
|
|
426
|
+
if ($Create) { Ensure-HelloLynkSecureDirectory $root $existingAncestor }
|
|
391
427
|
if (-not [IO.Directory]::Exists($root)) { Fail "client_root_missing" }
|
|
392
428
|
Assert-HelloLynkNoReparseAncestors $root
|
|
393
429
|
Assert-HelloLynkSecureAcl $root $true
|
|
394
430
|
$identity = Open-HelloLynkIdentity $root $true
|
|
395
431
|
try {
|
|
396
|
-
Assert-HelloLynkTrustedAncestorAcl $root
|
|
432
|
+
$null = Assert-HelloLynkTrustedAncestorAcl $root
|
|
397
433
|
$canonical = $root
|
|
398
434
|
} finally { $identity.Handle.Dispose() }
|
|
399
435
|
return [pscustomobject]@{ Root = $canonical; Mutex = $mutex }
|
|
@@ -5,6 +5,7 @@ import crypto from "node:crypto";
|
|
|
5
5
|
import fs from "node:fs/promises";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
|
|
8
|
+
import { verifyDarwinUnclaimedAuthorization } from "../runtime/core/hellolynk-darwin-host.mjs";
|
|
8
9
|
import { readClientProfile } from "../runtime/core/hellolynk-client-profile.mjs";
|
|
9
10
|
import { createNeutralHostInstallationStore } from "../runtime/core/hellolynk-neutral-host-installation-store.mjs";
|
|
10
11
|
import { clientAccountBaseRoot } from "../runtime/core/hellolynk-client-account.mjs";
|
|
@@ -164,7 +165,7 @@ assert.equal(releaseVerification.verifiedFileCount >= 8, true);
|
|
|
164
165
|
let transport = null;
|
|
165
166
|
let bootstrapTransportRequired = false;
|
|
166
167
|
let protectedStorePresent = true;
|
|
167
|
-
try { await fs.lstat(path.join(root, "capabilities-v1.dpapi.clixml")); }
|
|
168
|
+
try { await fs.lstat(path.join(root, process.platform === "darwin" ? "protected-v1.sqlite" : "capabilities-v1.dpapi.clixml")); }
|
|
168
169
|
catch (error) {
|
|
169
170
|
if (error?.code !== "ENOENT") throw error;
|
|
170
171
|
protectedStorePresent = false;
|
|
@@ -173,6 +174,9 @@ if (!protectedStorePresent) {
|
|
|
173
174
|
if (!(freshPreBind || recoveryPreBind)) await store.status();
|
|
174
175
|
await verifyHostProtectedStorePath({ root, path: root, directory: true });
|
|
175
176
|
bootstrapTransportRequired = true;
|
|
177
|
+
} else if (process.platform === "darwin" && freshPreBind) {
|
|
178
|
+
await verifyDarwinUnclaimedAuthorization(root);
|
|
179
|
+
bootstrapTransportRequired = true;
|
|
176
180
|
} else {
|
|
177
181
|
assert.equal((await store.status()).protected, true);
|
|
178
182
|
try { transport = preflightOnly ? await store.verifyTransport() : await store.resolveTransport(); }
|