six-degrees 0.8.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +3 -3
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/server/app/_global-error.html +1 -1
  5. package/.next/standalone/.next/server/app/_global-error.rsc +1 -1
  6. package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  9. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  10. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  11. package/.next/standalone/.next/server/app/_not-found.html +1 -1
  12. package/.next/standalone/.next/server/app/_not-found.rsc +14 -14
  13. package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +14 -14
  14. package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +13 -13
  15. package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  16. package/.next/standalone/.next/server/app/api/admin-delete/route.js.nft.json +1 -1
  17. package/.next/standalone/.next/server/app/api/admin-update/route.js.nft.json +1 -1
  18. package/.next/standalone/.next/server/app/api/bridges/route.js.nft.json +1 -1
  19. package/.next/standalone/.next/server/app/api/bulk-import/route.js.nft.json +1 -1
  20. package/.next/standalone/.next/server/app/api/company-scores/legacy/route.js.nft.json +1 -1
  21. package/.next/standalone/.next/server/app/api/company-scores/route.js.nft.json +1 -1
  22. package/.next/standalone/.next/server/app/api/connections/route.js.nft.json +1 -1
  23. package/.next/standalone/.next/server/app/api/data/backup/route.js.nft.json +1 -1
  24. package/.next/standalone/.next/server/app/api/data/csv/route.js.nft.json +1 -1
  25. package/.next/standalone/.next/server/app/api/data/export/route.js.nft.json +1 -1
  26. package/.next/standalone/.next/server/app/api/data/import/route.js.nft.json +1 -1
  27. package/.next/standalone/.next/server/app/api/data/restart/route.js.nft.json +1 -1
  28. package/.next/standalone/.next/server/app/api/data/restore/route.js.nft.json +1 -1
  29. package/.next/standalone/.next/server/app/api/data/reveal/route.js.nft.json +1 -1
  30. package/.next/standalone/.next/server/app/api/data/route.js.nft.json +1 -1
  31. package/.next/standalone/.next/server/app/api/delete-cluster/route.js.nft.json +1 -1
  32. package/.next/standalone/.next/server/app/api/ingest/route.js.nft.json +1 -1
  33. package/.next/standalone/.next/server/app/api/network/route.js.nft.json +1 -1
  34. package/.next/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  35. package/.next/standalone/.next/server/app/api/outreach/route.js.nft.json +1 -1
  36. package/.next/standalone/.next/server/app/api/queue/route.js.nft.json +1 -1
  37. package/.next/standalone/.next/server/app/api/scraper/route.js +1 -1
  38. package/.next/standalone/.next/server/app/api/scraper/route.js.nft.json +1 -1
  39. package/.next/standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
  40. package/.next/standalone/.next/server/app/api/settings/sector-preview/route.js.nft.json +1 -1
  41. package/.next/standalone/.next/server/app/api/settings/sector-suggestions/route.js.nft.json +1 -1
  42. package/.next/standalone/.next/server/app/api/setup-profile/route.js.nft.json +1 -1
  43. package/.next/standalone/.next/server/app/api/social/crm/route.js.nft.json +1 -1
  44. package/.next/standalone/.next/server/app/api/social/messages/route.js.nft.json +1 -1
  45. package/.next/standalone/.next/server/app/api/social/route.js.nft.json +1 -1
  46. package/.next/standalone/.next/server/app/api/unlock/route.js.nft.json +1 -1
  47. package/.next/standalone/.next/server/app/api/update/route.js.nft.json +1 -1
  48. package/.next/standalone/.next/server/app/api/update-images/route.js.nft.json +1 -1
  49. package/.next/standalone/.next/server/app/api/users/route.js.nft.json +1 -1
  50. package/.next/standalone/.next/server/app/avatars/[file]/route.js.nft.json +1 -1
  51. package/.next/standalone/.next/server/app/import/page.js.nft.json +1 -1
  52. package/.next/standalone/.next/server/app/import/page_client-reference-manifest.js +1 -1
  53. package/.next/standalone/.next/server/app/import.html +1 -1
  54. package/.next/standalone/.next/server/app/import.rsc +16 -16
  55. package/.next/standalone/.next/server/app/import.segments/_full.segment.rsc +16 -16
  56. package/.next/standalone/.next/server/app/import.segments/_tree.segment.rsc +1 -1
  57. package/.next/standalone/.next/server/app/import.segments/import/__PAGE__.segment.rsc +15 -15
  58. package/.next/standalone/.next/server/app/index.html +1 -1
  59. package/.next/standalone/.next/server/app/index.rsc +16 -16
  60. package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +15 -15
  61. package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +16 -16
  62. package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  63. package/.next/standalone/.next/server/app/insights/page.js.nft.json +1 -1
  64. package/.next/standalone/.next/server/app/insights/page_client-reference-manifest.js +1 -1
  65. package/.next/standalone/.next/server/app/insights.html +1 -1
  66. package/.next/standalone/.next/server/app/insights.rsc +16 -16
  67. package/.next/standalone/.next/server/app/insights.segments/_full.segment.rsc +16 -16
  68. package/.next/standalone/.next/server/app/insights.segments/_tree.segment.rsc +1 -1
  69. package/.next/standalone/.next/server/app/insights.segments/insights/__PAGE__.segment.rsc +15 -15
  70. package/.next/standalone/.next/server/app/launch/page.js.nft.json +1 -1
  71. package/.next/standalone/.next/server/app/launch/page_client-reference-manifest.js +1 -1
  72. package/.next/standalone/.next/server/app/launch.html +2 -2
  73. package/.next/standalone/.next/server/app/launch.rsc +16 -16
  74. package/.next/standalone/.next/server/app/launch.segments/_full.segment.rsc +16 -16
  75. package/.next/standalone/.next/server/app/launch.segments/_tree.segment.rsc +1 -1
  76. package/.next/standalone/.next/server/app/launch.segments/launch/__PAGE__.segment.rsc +15 -15
  77. package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
  78. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  79. package/.next/standalone/.next/server/app/paths/page.js.nft.json +1 -1
  80. package/.next/standalone/.next/server/app/paths/page_client-reference-manifest.js +1 -1
  81. package/.next/standalone/.next/server/app/paths.html +1 -1
  82. package/.next/standalone/.next/server/app/paths.rsc +16 -16
  83. package/.next/standalone/.next/server/app/paths.segments/_full.segment.rsc +16 -16
  84. package/.next/standalone/.next/server/app/paths.segments/_tree.segment.rsc +1 -1
  85. package/.next/standalone/.next/server/app/paths.segments/paths/__PAGE__.segment.rsc +15 -15
  86. package/.next/standalone/.next/server/app/profile/page.js.nft.json +1 -1
  87. package/.next/standalone/.next/server/app/profile/page_client-reference-manifest.js +1 -1
  88. package/.next/standalone/.next/server/app/profile.html +1 -1
  89. package/.next/standalone/.next/server/app/profile.rsc +16 -16
  90. package/.next/standalone/.next/server/app/profile.segments/_full.segment.rsc +16 -16
  91. package/.next/standalone/.next/server/app/profile.segments/_tree.segment.rsc +1 -1
  92. package/.next/standalone/.next/server/app/profile.segments/profile/__PAGE__.segment.rsc +15 -15
  93. package/.next/standalone/.next/server/app/queue/page.js.nft.json +1 -1
  94. package/.next/standalone/.next/server/app/queue/page_client-reference-manifest.js +1 -1
  95. package/.next/standalone/.next/server/app/queue.html +1 -1
  96. package/.next/standalone/.next/server/app/queue.rsc +16 -16
  97. package/.next/standalone/.next/server/app/queue.segments/_full.segment.rsc +16 -16
  98. package/.next/standalone/.next/server/app/queue.segments/_tree.segment.rsc +1 -1
  99. package/.next/standalone/.next/server/app/queue.segments/queue/__PAGE__.segment.rsc +15 -15
  100. package/.next/standalone/.next/server/app/scores/page.js.nft.json +1 -1
  101. package/.next/standalone/.next/server/app/scores/page_client-reference-manifest.js +1 -1
  102. package/.next/standalone/.next/server/app/scores.html +1 -1
  103. package/.next/standalone/.next/server/app/scores.rsc +16 -16
  104. package/.next/standalone/.next/server/app/scores.segments/_full.segment.rsc +16 -16
  105. package/.next/standalone/.next/server/app/scores.segments/_tree.segment.rsc +1 -1
  106. package/.next/standalone/.next/server/app/scores.segments/scores/__PAGE__.segment.rsc +15 -15
  107. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
  108. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  109. package/.next/standalone/.next/server/app/settings.html +1 -1
  110. package/.next/standalone/.next/server/app/settings.rsc +16 -16
  111. package/.next/standalone/.next/server/app/settings.segments/_full.segment.rsc +16 -16
  112. package/.next/standalone/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  113. package/.next/standalone/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +15 -15
  114. package/.next/standalone/.next/server/app/setup/page.js.nft.json +1 -1
  115. package/.next/standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  116. package/.next/standalone/.next/server/app/setup.html +1 -1
  117. package/.next/standalone/.next/server/app/setup.rsc +17 -17
  118. package/.next/standalone/.next/server/app/setup.segments/_full.segment.rsc +17 -17
  119. package/.next/standalone/.next/server/app/setup.segments/_tree.segment.rsc +1 -1
  120. package/.next/standalone/.next/server/app/setup.segments/setup/__PAGE__.segment.rsc +15 -15
  121. package/.next/standalone/.next/server/app/social/page.js.nft.json +1 -1
  122. package/.next/standalone/.next/server/app/social/page_client-reference-manifest.js +1 -1
  123. package/.next/standalone/.next/server/app/social.html +1 -1
  124. package/.next/standalone/.next/server/app/social.rsc +16 -16
  125. package/.next/standalone/.next/server/app/social.segments/_full.segment.rsc +16 -16
  126. package/.next/standalone/.next/server/app/social.segments/_tree.segment.rsc +1 -1
  127. package/.next/standalone/.next/server/app/social.segments/social/__PAGE__.segment.rsc +15 -15
  128. package/.next/standalone/.next/server/chunks/_1_fynia._.js +7 -7
  129. package/.next/standalone/.next/server/chunks/_1itd1o_._.js +1 -1
  130. package/.next/standalone/.next/server/chunks/lib_02iz_9q._.js +2 -2
  131. package/.next/standalone/.next/server/chunks/lib_05agvk3._.js +2 -2
  132. package/.next/standalone/.next/server/chunks/lib_0v84u66._.js +2 -2
  133. package/.next/standalone/.next/server/chunks/lib_db-client_0_dch35.js +1 -1
  134. package/.next/standalone/.next/server/chunks/{lib_rpc_0t552z6.js → lib_rpc_1hjjjr4.js} +1 -1
  135. package/.next/standalone/.next/server/chunks/ssr/_0_79idq._.js +1 -1
  136. package/.next/standalone/.next/server/chunks/ssr/app_setup_page_1-282zx.js +4 -4
  137. package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
  138. package/.next/standalone/.next/server/middleware-manifest.json +5 -5
  139. package/.next/standalone/.next/server/pages/404.html +1 -1
  140. package/.next/standalone/.next/server/pages/500.html +1 -1
  141. package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
  142. package/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  143. package/.next/standalone/.next/static/chunks/0hggugbh84m4t.js +21 -0
  144. package/.next/standalone/.next/static/chunks/1ods5h86raivz.js +1 -0
  145. package/.next/standalone/CHANGELOG.md +23 -0
  146. package/.next/standalone/README.md +15 -13
  147. package/.next/standalone/SECURITY.md +9 -4
  148. package/.next/standalone/app/api/scraper/route.js +9 -1
  149. package/.next/standalone/app/setup/page.js +55 -4
  150. package/.next/standalone/install.sh +7 -6
  151. package/.next/standalone/lib/scanner-setup.js +82 -3
  152. package/.next/standalone/lib/settings.js +3 -0
  153. package/.next/standalone/package-lock.json +2 -2
  154. package/.next/standalone/package.json +1 -1
  155. package/.next/standalone/scripts/build-app.mjs +167 -11
  156. package/.next/standalone/scripts/build-desktop.mjs +3 -2
  157. package/.next/standalone/scripts/ci-mac-signing.sh +128 -0
  158. package/.next/standalone/scripts/entitlements/electron.plist +23 -0
  159. package/.next/standalone/scripts/entitlements/node.plist +27 -0
  160. package/.next/standalone/scripts/mac-sign.mjs +563 -0
  161. package/.next/standalone/scripts/make-dmg-background.mjs +2 -1
  162. package/.next/standalone/scripts/set-signing-secrets.sh +96 -0
  163. package/.next/static/chunks/0hggugbh84m4t.js +21 -0
  164. package/.next/static/chunks/1ods5h86raivz.js +1 -0
  165. package/CHANGELOG.md +23 -0
  166. package/README.md +15 -13
  167. package/SECURITY.md +9 -4
  168. package/lib/scanner-setup.js +82 -3
  169. package/lib/settings.js +3 -0
  170. package/package.json +1 -1
  171. package/.next/standalone/.next/static/chunks/0838_s6w-i_ik.js +0 -1
  172. package/.next/standalone/.next/static/chunks/112mv-com-mqa.js +0 -21
  173. package/.next/static/chunks/0838_s6w-i_ik.js +0 -1
  174. package/.next/static/chunks/112mv-com-mqa.js +0 -21
  175. /package/.next/standalone/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_buildManifest.js +0 -0
  176. /package/.next/standalone/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_clientMiddlewareManifest.js +0 -0
  177. /package/.next/standalone/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_ssgManifest.js +0 -0
  178. /package/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_buildManifest.js +0 -0
  179. /package/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_clientMiddlewareManifest.js +0 -0
  180. /package/.next/static/{3NCyJyAPDCEYsYTwF1Ieu → mwCGF3OV3CWV4SjUgg5T8}/_ssgManifest.js +0 -0
@@ -0,0 +1,128 @@
1
+ #!/bin/bash
2
+ # The Mac release's Developer ID, for .github/workflows/release.yml's Mac jobs
3
+ # (docs/brain/DESKTOP.md D4). Two commands:
4
+ #
5
+ # ci-mac-signing.sh setup VERSION DRY_RUN before the build
6
+ # ci-mac-signing.sh cleanup after it, always (if: always())
7
+ #
8
+ # setup asks scripts/mac-sign.mjs whether this release signs (release-plan):
9
+ # - all five secrets set: it signs, dry run or not;
10
+ # - none set: ad hoc, as before 1.0, unless this is a real release of 1.0.0 or
11
+ # later, which must be signed: then it fails here, before anything is built;
12
+ # - some but not all: always a mistake, and it fails, naming the missing ones.
13
+ # When it signs, it decodes the certificate (.p12, which carries Apple's
14
+ # Developer ID G2 intermediate too) into a temporary keychain with a random
15
+ # password, finds the "Developer ID Application" identity in it, decodes the App
16
+ # Store Connect API key (.p8) for notarytool, and hands the build their places
17
+ # through $GITHUB_ENV: SIX_DEGREES_SIGN_IDENTITY (the identity's SHA-1: names
18
+ # can repeat across renewals, a hash can't), SIX_DEGREES_SIGN_KEYCHAIN and
19
+ # SIX_DEGREES_NOTARY_KEY. The key's id and issuer reach the build step straight
20
+ # from the secrets (release.yml), never through a file. MAC_SIGNING says which
21
+ # it was (developer-id or ad-hoc), for the smoke test and the release notes.
22
+ #
23
+ # The secrets arrive as environment variables, set by release.yml from GitHub's
24
+ # secrets and nowhere else. Nothing here prints one: values go to files made
25
+ # under umask 077, or to `security` itself, and GitHub masks them in the log
26
+ # besides. Never run this with `bash -x`. cleanup deletes the keychain, puts the
27
+ # keychain search list back as it was, and removes every decoded file.
28
+
29
+ set -euo pipefail
30
+
31
+ work="${RUNNER_TEMP:?RUNNER_TEMP is not set (this runs in GitHub Actions)}/six-degrees-signing"
32
+ keychain="$work/signing.keychain-db"
33
+ here="$(cd "$(dirname "$0")" && pwd)"
34
+
35
+ say() { printf '%s\n' "$*"; }
36
+ die() { printf '::error::%s\n' "$*"; exit 1; }
37
+
38
+ setup() {
39
+ local version="${1:?usage: ci-mac-signing.sh setup VERSION DRY_RUN}" dry_run="${2:-false}" plan
40
+ local genv="${GITHUB_ENV:?GITHUB_ENV is not set}"
41
+ # release-plan reads only whether each secret is set, never a value.
42
+ if ! plan="$(node "$here/mac-sign.mjs" release-plan "$version" "$dry_run")"; then
43
+ die "The Mac app can't be built as asked: see the line above."
44
+ fi
45
+ if [ "$plan" != developer-id ]; then
46
+ echo "MAC_SIGNING=ad-hoc" >> "$genv"
47
+ say "Signing: ad hoc."
48
+ return 0
49
+ fi
50
+
51
+ umask 077
52
+ rm -rf "$work"
53
+ mkdir -p "$work"
54
+
55
+ # The certificate, for the keychain only; its file goes as soon as it's in.
56
+ printf '%s' "$MACOS_SIGN_P12_BASE64" | base64 --decode > "$work/cert.p12" 2>/dev/null \
57
+ || die "MACOS_SIGN_P12_BASE64 isn't base64 (set it again with scripts/set-signing-secrets.sh)."
58
+ [ -s "$work/cert.p12" ] || die "MACOS_SIGN_P12_BASE64 decodes to nothing."
59
+ # The API key, for notarytool, kept until cleanup.
60
+ printf '%s' "$APPLE_API_KEY_P8_BASE64" | base64 --decode > "$work/AuthKey.p8" 2>/dev/null \
61
+ || die "APPLE_API_KEY_P8_BASE64 isn't base64 (set it again with scripts/set-signing-secrets.sh)."
62
+ grep -q -- '-----BEGIN PRIVATE KEY-----' "$work/AuthKey.p8" \
63
+ || die "APPLE_API_KEY_P8_BASE64 doesn't decode to an App Store Connect API key (.p8)."
64
+
65
+ # A keychain of its own, with a password nobody needs to know, unlocked for
66
+ # the length of the job (6 hours), and codesign allowed to use the key without
67
+ # asking (the partition list): there is nobody to click Allow on a runner.
68
+ local kc_pass
69
+ kc_pass="$(head -c 32 /dev/urandom | base64 | tr -d '\n=+/')"
70
+ security create-keychain -p "$kc_pass" "$keychain"
71
+ security set-keychain-settings -lut 21600 "$keychain"
72
+ security unlock-keychain -p "$kc_pass" "$keychain"
73
+ security import "$work/cert.p12" -k "$keychain" -f pkcs12 -P "$MACOS_SIGN_P12_PASSWORD" \
74
+ -T /usr/bin/codesign -T /usr/bin/security > /dev/null \
75
+ || die "The certificate wouldn't import: is MACOS_SIGN_P12_PASSWORD the .p12's password?"
76
+ rm -f "$work/cert.p12"
77
+ security set-key-partition-list -S apple-tool:,apple: -s -k "$kc_pass" "$keychain" > /dev/null
78
+ kc_pass=""
79
+
80
+ # codesign finds an identity only in a keychain on the search list. The list as
81
+ # it was is kept, for cleanup to put back.
82
+ security list-keychains -d user > "$work/search-list"
83
+ local line orig=()
84
+ while IFS= read -r line; do
85
+ line="${line#"${line%%[![:space:]]*}"}"; line="${line%\"}"; line="${line#\"}"
86
+ [ -n "$line" ] && orig+=("$line")
87
+ done < "$work/search-list"
88
+ security list-keychains -d user -s "$keychain" ${orig[@]+"${orig[@]}"}
89
+
90
+ # By its kind, not its full name: whatever Developer ID Application identity
91
+ # the certificate holds, and it must be valid (its chain reaches Apple's root).
92
+ local found identity name
93
+ found="$(security find-identity -v -p codesigning "$keychain" | grep '"Developer ID Application: ' | head -1 || true)"
94
+ identity="$(printf '%s\n' "$found" | awk '{print $2}')"
95
+ name="$(printf '%s\n' "$found" | sed -n 's/.*"\(Developer ID Application: [^"]*\)".*/\1/p')"
96
+ if [ -z "$identity" ]; then
97
+ say "The keychain holds these code-signing identities (valid or not):"
98
+ security find-identity -p codesigning "$keychain" | sed 's/^/ /'
99
+ die "No valid \"Developer ID Application\" identity in MACOS_SIGN_P12_BASE64. Export the Developer ID Application certificate with its private key (and Apple's intermediate) as the .p12."
100
+ fi
101
+ {
102
+ echo "SIX_DEGREES_SIGN_IDENTITY=$identity"
103
+ echo "SIX_DEGREES_SIGN_KEYCHAIN=$keychain"
104
+ echo "SIX_DEGREES_NOTARY_KEY=$work/AuthKey.p8"
105
+ echo "MAC_SIGNING=developer-id"
106
+ } >> "$genv"
107
+ say "Signing: $name, from a temporary keychain; notarized with the App Store Connect API key."
108
+ }
109
+
110
+ cleanup() {
111
+ if [ -f "$work/search-list" ]; then
112
+ local line orig=()
113
+ while IFS= read -r line; do
114
+ line="${line#"${line%%[![:space:]]*}"}"; line="${line%\"}"; line="${line#\"}"
115
+ [ -n "$line" ] && orig+=("$line")
116
+ done < "$work/search-list"
117
+ security list-keychains -d user -s ${orig[@]+"${orig[@]}"} || true
118
+ fi
119
+ if [ -e "$keychain" ]; then security delete-keychain "$keychain" || true; fi
120
+ rm -rf "$work"
121
+ say "Signing: cleaned up (no keychain, key or certificate left)."
122
+ }
123
+
124
+ case "${1:-}" in
125
+ setup) shift; setup "$@" ;;
126
+ cleanup) cleanup ;;
127
+ *) echo "usage: ci-mac-signing.sh setup VERSION DRY_RUN | cleanup" >&2; exit 2 ;;
128
+ esac
@@ -0,0 +1,23 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <!--
4
+ Six Degrees.app and its Electron helper apps (GPU, Renderer, Plugin), signed
5
+ with Developer ID and the hardened runtime (scripts/mac-sign.mjs, DESKTOP.md D4).
6
+
7
+ allow-jit V8 compiles JavaScript as it runs; the hardened
8
+ runtime refuses that without it.
9
+ allow-unsigned-executable-memory what V8 still uses where it can't use MAP_JIT
10
+ (Intel Macs). Discord's and Electron's own
11
+ templates carry the same two.
12
+
13
+ Never disable-library-validation: every library the app loads is signed by the
14
+ same team in the same pass, and it loads nothing from outside itself.
15
+ -->
16
+ <plist version="1.0">
17
+ <dict>
18
+ <key>com.apple.security.cs.allow-jit</key>
19
+ <true/>
20
+ <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
21
+ <true/>
22
+ </dict>
23
+ </plist>
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <!--
4
+ The Node inside the app (Contents/Resources/node), which runs the server, and
5
+ Playwright's driver's Node when it isn't a link to that one. Signed with
6
+ Developer ID and the hardened runtime (scripts/mac-sign.mjs, DESKTOP.md D4).
7
+
8
+ allow-jit V8 compiles JavaScript as it runs. Without it
9
+ Node 24 stops before running anything: "Failed
10
+ to reserve virtual memory for CodeRange"
11
+ (checked on this build's Node, 2026-10-04).
12
+ allow-unsigned-executable-memory what V8 still uses where it can't use MAP_JIT
13
+ (Intel Macs). Node's own release signature
14
+ carries both.
15
+
16
+ Never disable-library-validation, which Node's own signature does carry so that
17
+ anyone's native addons load: the only native code this server loads is the
18
+ app's own (sharp and its libvips), signed by the same team in the same pass.
19
+ -->
20
+ <plist version="1.0">
21
+ <dict>
22
+ <key>com.apple.security.cs.allow-jit</key>
23
+ <true/>
24
+ <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
25
+ <true/>
26
+ </dict>
27
+ </plist>