@hasna/recordings 0.3.1 → 0.3.2
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/dist/__tests__/helpers/installer-guard-execution.d.ts.map +1 -1
- package/dist/cli/index.js +18 -5
- package/dist/http/client.d.ts +9 -0
- package/dist/http/client.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/mcp/index.js +2 -2
- package/dist/server/index.js +2 -2
- package/dist/storage.js +2 -2
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/scripts/install_macos_app.sh +54 -7
- package/scripts/macos_artifact.ts +118 -10
- package/scripts/smoke_macos_app.sh +62 -16
- package/src/native/Recordings/App/MenuBarStatusView.swift +9 -4
- package/src/native/Recordings/App/RecordingsApp.swift +37 -1
- package/src/native/Recordings/RecordingsLib/Info.plist +2 -2
- package/src/native/Recordings/RecordingsLib/PermissionRequestLaunchPlan.swift +21 -1
- package/src/native/Recordings/RecordingsTests/BarOnlyLaunchPlanTests.swift +99 -0
- package/src/native/Recordings/build.sh +152 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer-guard-execution.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/installer-guard-execution.ts"],"names":[],"mappings":"AA+DA,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AACvD,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AACxD,eAAO,MAAM,eAAe,QAAiB,CAAC;AAsB9C,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;AAuFtD,MAAM,MAAM,qBAAqB,GAE7B,oCAAoC,GAGpC,oCAAoC,GAEpC,MAAM,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG;IAKlC,iBAAiB,EAAE,OAAO,CAAC;IAG3B,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAK9C,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAKf,kBAAkB,EAAE,OAAO,CAAC;IAG5B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAG9B,cAAc,EAAE,MAAM,EAAE,CAAC;IAMzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,
|
|
1
|
+
{"version":3,"file":"installer-guard-execution.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/installer-guard-execution.ts"],"names":[],"mappings":"AA+DA,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AACvD,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AACxD,eAAO,MAAM,eAAe,QAAiB,CAAC;AAsB9C,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;AAuFtD,MAAM,MAAM,qBAAqB,GAE7B,oCAAoC,GAGpC,oCAAoC,GAEpC,MAAM,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG;IAKlC,iBAAiB,EAAE,OAAO,CAAC;IAG3B,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAK9C,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAKf,kBAAkB,EAAE,OAAO,CAAC;IAG5B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAG9B,cAAc,EAAE,MAAM,EAAE,CAAC;IAMzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,CAAC;AAEF,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,qBAAqB,GAC7B,oBAAoB,CA2StB"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1927,7 +1927,7 @@ function setAgentFocus(idOrName, projectId, db) {
|
|
|
1927
1927
|
}
|
|
1928
1928
|
|
|
1929
1929
|
// src/version.ts
|
|
1930
|
-
var VERSION = "0.3.
|
|
1930
|
+
var VERSION = "0.3.2";
|
|
1931
1931
|
|
|
1932
1932
|
// src/db/feedback.ts
|
|
1933
1933
|
function saveFeedback(input) {
|
|
@@ -1976,7 +1976,7 @@ function normalizeClientStore(value, sourceEnvKey, replacementEnvKey) {
|
|
|
1976
1976
|
throw new Error(`Unknown client store: ${value}. Use sqlite or http.`);
|
|
1977
1977
|
}
|
|
1978
1978
|
function defaultApiBaseUrl(name) {
|
|
1979
|
-
return `
|
|
1979
|
+
return `http://localhost:8874`;
|
|
1980
1980
|
}
|
|
1981
1981
|
function envKeys(name) {
|
|
1982
1982
|
const token = envToken(name);
|
|
@@ -5179,12 +5179,20 @@ program.command("init").description("Initialize .recordings/ in current director
|
|
|
5179
5179
|
console.log(chalk.dim(" db: .recordings/recordings.db"));
|
|
5180
5180
|
});
|
|
5181
5181
|
var appCommand = program.command("app").description("Manage the macOS app installed from this package");
|
|
5182
|
-
appCommand.command("install").description("Install a release or explicitly approved local-only Recordings.app artifact").requiredOption("--artifact <path>", "Finalized Recordings.app ZIP artifact").requiredOption("--manifest <path>", "Artifact provenance manifest").option("--envelope <path>", "Signed release envelope (required for release artifacts)").option("--expected-team-id <team>", "Required Developer ID TeamIdentifier for release artifacts").requiredOption("--manifest-sha256 <sha256>", "Authenticated release-manifest SHA-256").requiredOption("--expected-source-sha <sha>", "Exact approved 40-character source commit").requiredOption("--expected-version <version>", "Exact approved release version").option("--expected-hostname <hostname>", "Exact deployment hostname to verify before any install mutation").option("--artifact-policy <policy>", "Artifact policy: release or local-only", "release").option("--approved-target <station>", "Exact approved target; fleet for release artifacts", "fleet").option("--approved-target-identity-kind <kind>", "Target identity kind: hardware_uuid_sha256 or tailscale_node_id_sha256").option("--approved-target-identity-sha256 <sha256>", "Authenticated SHA-256 of the approved target identity; none for release artifacts", "none").option("--acknowledge-local-signing-and-permissions", "Acknowledge local-only ad-hoc identity and possible permission reauthorization").option("--expected-old-identity-sha256 <sha256>", "Exact installed identity approved for migration").option("--expected-new-identity-sha256 <sha256>", "Exact candidate identity approved for migration").option("--allow-signing-identity-migration", "Allow one reviewed signer change that requires new macOS permission approval").option("--allow-adhoc-identity-migration", "Accept that replacing an ad-hoc signed local-only app voids its Microphone and Accessibility grants").option("--launch", "Launch and verify the canonical app after installation").option("--launch-timeout <seconds>", "Canonical process launch timeout").action((opts) => {
|
|
5182
|
+
appCommand.command("install").description("Install a release or explicitly approved local-only Recordings.app artifact").requiredOption("--artifact <path>", "Finalized Recordings.app ZIP artifact").requiredOption("--manifest <path>", "Artifact provenance manifest").option("--envelope <path>", "Signed release envelope (required for release artifacts)").option("--expected-team-id <team>", "Required Developer ID TeamIdentifier for release artifacts").requiredOption("--manifest-sha256 <sha256>", "Authenticated release-manifest SHA-256").requiredOption("--expected-source-sha <sha>", "Exact approved 40-character source commit").requiredOption("--expected-version <version>", "Exact approved release version").option("--expected-hostname <hostname>", "Exact deployment hostname to verify before any install mutation").option("--artifact-policy <policy>", "Artifact policy: release or local-only", "release").option("--approved-target <station>", "Exact approved target; fleet for release artifacts", "fleet").option("--variant <variant>", "Artifact variant the operator intends to install: full or bar (default: full)", "full").option("--approved-target-identity-kind <kind>", "Target identity kind: hardware_uuid_sha256 or tailscale_node_id_sha256").option("--approved-target-identity-sha256 <sha256>", "Authenticated SHA-256 of the approved target identity; none for release artifacts", "none").option("--acknowledge-local-signing-and-permissions", "Acknowledge local-only ad-hoc identity and possible permission reauthorization").option("--expected-old-identity-sha256 <sha256>", "Exact installed identity approved for migration").option("--expected-new-identity-sha256 <sha256>", "Exact candidate identity approved for migration").option("--allow-signing-identity-migration", "Allow one reviewed signer change that requires new macOS permission approval").option("--allow-adhoc-identity-migration", "Accept that replacing an ad-hoc signed local-only app voids its Microphone and Accessibility grants").option("--launch", "Launch and verify the canonical app after installation").option("--launch-timeout <seconds>", "Canonical process launch timeout").action((opts) => {
|
|
5183
5183
|
if (process.platform !== "darwin") {
|
|
5184
5184
|
console.error(chalk.red("Recordings.app installation is only supported on macOS"));
|
|
5185
5185
|
process.exit(1);
|
|
5186
5186
|
}
|
|
5187
|
+
if (opts.variant !== "full" && opts.variant !== "bar") {
|
|
5188
|
+
console.error(chalk.red("Artifact variant must be full or bar."));
|
|
5189
|
+
process.exit(1);
|
|
5190
|
+
}
|
|
5187
5191
|
if (opts.artifactPolicy === "release") {
|
|
5192
|
+
if (opts.variant !== "full") {
|
|
5193
|
+
console.error(chalk.red("Release installs are always full-app artifacts. The bar variant installs " + "through the local-only path (--artifact-policy local-only --variant bar)."));
|
|
5194
|
+
process.exit(1);
|
|
5195
|
+
}
|
|
5188
5196
|
if (!opts.envelope) {
|
|
5189
5197
|
console.error(chalk.red("Release installation requires --envelope."));
|
|
5190
5198
|
process.exit(1);
|
|
@@ -5302,6 +5310,7 @@ appCommand.command("install").description("Install a release or explicitly appro
|
|
|
5302
5310
|
if (opts.expectedHostname) {
|
|
5303
5311
|
installerArgs.push("--expected-hostname", opts.expectedHostname);
|
|
5304
5312
|
}
|
|
5313
|
+
installerArgs.push("--variant", opts.variant);
|
|
5305
5314
|
if (opts.approvedTargetIdentityKind) {
|
|
5306
5315
|
installerArgs.push("--approved-target-identity-kind", opts.approvedTargetIdentityKind);
|
|
5307
5316
|
}
|
|
@@ -6538,7 +6547,9 @@ function buildPermissionWarnings(status) {
|
|
|
6538
6547
|
function resolveInstalledAppPath(home, canonicalPath, legacyPaths) {
|
|
6539
6548
|
const preference = [
|
|
6540
6549
|
canonicalPath,
|
|
6550
|
+
pathJoin("/", "Applications", "HasnaRecordings.app"),
|
|
6541
6551
|
pathJoin("/", "Applications", "Recordings.app"),
|
|
6552
|
+
pathJoin(home, ".hasna", "recordings", "HasnaRecordings.app"),
|
|
6542
6553
|
pathJoin(home, ".hasna", "recordings", "Recordings.app")
|
|
6543
6554
|
];
|
|
6544
6555
|
for (const candidate of preference) {
|
|
@@ -6550,12 +6561,14 @@ function resolveInstalledAppPath(home, canonicalPath, legacyPaths) {
|
|
|
6550
6561
|
function findLegacyMacOSAppPaths(home, canonicalPath) {
|
|
6551
6562
|
const candidates = [
|
|
6552
6563
|
pathJoin(home, ".hasna", "recordings", "Recordings.app"),
|
|
6553
|
-
pathJoin("
|
|
6564
|
+
pathJoin(home, ".hasna", "recordings", "HasnaRecordings.app"),
|
|
6565
|
+
pathJoin("/", "Applications", "Recordings.app"),
|
|
6566
|
+
pathJoin("/", "Applications", "HasnaRecordings.app")
|
|
6554
6567
|
];
|
|
6555
6568
|
const userApplications = pathJoin(home, "Applications");
|
|
6556
6569
|
if (existsSync8(userApplications)) {
|
|
6557
6570
|
for (const entry of readdirSync2(userApplications, { withFileTypes: true })) {
|
|
6558
|
-
if (entry.isDirectory() && entry.name.startsWith("Recordings.app.")) {
|
|
6571
|
+
if (entry.isDirectory() && (entry.name.startsWith("Recordings.app.") || entry.name.startsWith("HasnaRecordings.app."))) {
|
|
6559
6572
|
candidates.push(pathJoin(userApplications, entry.name));
|
|
6560
6573
|
}
|
|
6561
6574
|
}
|
package/dist/http/client.d.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
export type Env = Record<string, string | undefined>;
|
|
2
2
|
/** Where a client reads and writes. Two arms, no third. */
|
|
3
3
|
export type ClientStore = "sqlite" | "http";
|
|
4
|
+
/**
|
|
5
|
+
* Fallback API base URL when the client store resolves to `http` and no
|
|
6
|
+
* `HASNA_<APP>_API_URL` is set. It points at the app's own server on the same
|
|
7
|
+
* machine (`recordings-serve`'s default port — see DEFAULT_PORT in
|
|
8
|
+
* src/server/index.ts). This default deliberately contains no internal-infra
|
|
9
|
+
* hostname: a remote deployment sets `HASNA_<APP>_API_URL` explicitly. The
|
|
10
|
+
* `name` argument is retained for signature compatibility with the public
|
|
11
|
+
* `@hasna/recordings/storage` surface; it no longer derives a hostname.
|
|
12
|
+
*/
|
|
4
13
|
export declare function defaultApiBaseUrl(name: string): string;
|
|
5
14
|
export declare function toV1BaseUrl(apiUrl: string): string;
|
|
6
15
|
export type TransportKind = ClientStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1186,7 +1186,7 @@ function setAgentFocus(idOrName, projectId, db) {
|
|
|
1186
1186
|
}
|
|
1187
1187
|
|
|
1188
1188
|
// src/version.ts
|
|
1189
|
-
var VERSION = "0.3.
|
|
1189
|
+
var VERSION = "0.3.2";
|
|
1190
1190
|
|
|
1191
1191
|
// src/db/feedback.ts
|
|
1192
1192
|
function saveFeedback(input) {
|
|
@@ -1235,7 +1235,7 @@ function normalizeClientStore(value, sourceEnvKey, replacementEnvKey) {
|
|
|
1235
1235
|
throw new Error(`Unknown client store: ${value}. Use sqlite or http.`);
|
|
1236
1236
|
}
|
|
1237
1237
|
function defaultApiBaseUrl(name) {
|
|
1238
|
-
return `
|
|
1238
|
+
return `http://localhost:8874`;
|
|
1239
1239
|
}
|
|
1240
1240
|
function envKeys(name) {
|
|
1241
1241
|
const token = envToken(name);
|
package/dist/mcp/index.js
CHANGED
|
@@ -5056,7 +5056,7 @@ function setAgentFocus(idOrName, projectId, db) {
|
|
|
5056
5056
|
}
|
|
5057
5057
|
|
|
5058
5058
|
// src/version.ts
|
|
5059
|
-
var VERSION = "0.3.
|
|
5059
|
+
var VERSION = "0.3.2";
|
|
5060
5060
|
|
|
5061
5061
|
// src/db/feedback.ts
|
|
5062
5062
|
function saveFeedback(input) {
|
|
@@ -5105,7 +5105,7 @@ function normalizeClientStore(value, sourceEnvKey, replacementEnvKey) {
|
|
|
5105
5105
|
throw new Error(`Unknown client store: ${value}. Use sqlite or http.`);
|
|
5106
5106
|
}
|
|
5107
5107
|
function defaultApiBaseUrl(name) {
|
|
5108
|
-
return `
|
|
5108
|
+
return `http://localhost:8874`;
|
|
5109
5109
|
}
|
|
5110
5110
|
function envKeys(name) {
|
|
5111
5111
|
const token = envToken(name);
|
package/dist/server/index.js
CHANGED
|
@@ -18,7 +18,7 @@ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
|
18
18
|
var __require = import.meta.require;
|
|
19
19
|
|
|
20
20
|
// src/version.ts
|
|
21
|
-
var VERSION = "0.3.
|
|
21
|
+
var VERSION = "0.3.2";
|
|
22
22
|
|
|
23
23
|
// src/db/remote-storage.ts
|
|
24
24
|
import pg from "pg";
|
|
@@ -6748,7 +6748,7 @@ function normalizeClientStore(value, sourceEnvKey, replacementEnvKey) {
|
|
|
6748
6748
|
throw new Error(`Unknown client store: ${value}. Use sqlite or http.`);
|
|
6749
6749
|
}
|
|
6750
6750
|
function defaultApiBaseUrl(name) {
|
|
6751
|
-
return `
|
|
6751
|
+
return `http://localhost:8874`;
|
|
6752
6752
|
}
|
|
6753
6753
|
function envKeys(name) {
|
|
6754
6754
|
const token = envToken(name);
|
package/dist/storage.js
CHANGED
|
@@ -1021,7 +1021,7 @@ function setAgentFocus(idOrName, projectId, db) {
|
|
|
1021
1021
|
}
|
|
1022
1022
|
|
|
1023
1023
|
// src/version.ts
|
|
1024
|
-
var VERSION = "0.3.
|
|
1024
|
+
var VERSION = "0.3.2";
|
|
1025
1025
|
|
|
1026
1026
|
// src/db/feedback.ts
|
|
1027
1027
|
function saveFeedback(input) {
|
|
@@ -1070,7 +1070,7 @@ function normalizeClientStore(value, sourceEnvKey, replacementEnvKey) {
|
|
|
1070
1070
|
throw new Error(`Unknown client store: ${value}. Use sqlite or http.`);
|
|
1071
1071
|
}
|
|
1072
1072
|
function defaultApiBaseUrl(name) {
|
|
1073
|
-
return `
|
|
1073
|
+
return `http://localhost:8874`;
|
|
1074
1074
|
}
|
|
1075
1075
|
function envKeys(name) {
|
|
1076
1076
|
const token = envToken(name);
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.3.
|
|
1
|
+
export declare const VERSION = "0.3.2";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -168,6 +168,9 @@ Artifact and version:
|
|
|
168
168
|
|
|
169
169
|
Target selection:
|
|
170
170
|
--expected-hostname <name> Require this live short hostname before mutating
|
|
171
|
+
--variant <full|bar> Artifact variant the operator intends to install;
|
|
172
|
+
the manifest variant is verified against this at
|
|
173
|
+
install time (default: full)
|
|
171
174
|
--artifact-policy <release|local-only>
|
|
172
175
|
Trust policy to evaluate the artifact under
|
|
173
176
|
--approved-target <name> Approved target for a local-only artifact
|
|
@@ -214,6 +217,7 @@ EXPECTED_NEW_IDENTITY_SHA256=""
|
|
|
214
217
|
EXPECTED_HOSTNAME=""
|
|
215
218
|
EXPECTED_HOSTNAME_SET=0
|
|
216
219
|
ARTIFACT_POLICY="release"
|
|
220
|
+
INSTALL_VARIANT="full"
|
|
217
221
|
APPROVED_TARGET="fleet"
|
|
218
222
|
APPROVED_TARGET_IDENTITY_KIND=""
|
|
219
223
|
APPROVED_TARGET_IDENTITY_SHA256="none"
|
|
@@ -254,6 +258,16 @@ while [ "$#" -gt 0 ]; do
|
|
|
254
258
|
EXPECTED_HOSTNAME_SET=1
|
|
255
259
|
shift 2
|
|
256
260
|
;;
|
|
261
|
+
--variant)
|
|
262
|
+
case "${2:-}" in
|
|
263
|
+
full|bar) INSTALL_VARIANT="${2}" ;;
|
|
264
|
+
*)
|
|
265
|
+
echo "Install variant must be full or bar." >&2
|
|
266
|
+
exit 2
|
|
267
|
+
;;
|
|
268
|
+
esac
|
|
269
|
+
shift 2
|
|
270
|
+
;;
|
|
257
271
|
--artifact-policy)
|
|
258
272
|
case "${2:-}" in
|
|
259
273
|
release) ARTIFACT_POLICY="release" ;;
|
|
@@ -532,7 +546,8 @@ fi
|
|
|
532
546
|
"$BUN_EXECUTABLE" "$ARTIFACT_TOOL" native-fs-guard-check
|
|
533
547
|
DATA_DIR="${HOME}/.hasna/recordings"
|
|
534
548
|
DATA_PARENT="$("$DIRNAME_EXECUTABLE" "$DATA_DIR")"
|
|
535
|
-
|
|
549
|
+
MANIFEST_BUNDLE_NAME="Recordings.app"
|
|
550
|
+
APP_DEST="${HOME}/Applications/${MANIFEST_BUNDLE_NAME}"
|
|
536
551
|
APP_PARENT="$("$DIRNAME_EXECUTABLE" "$APP_DEST")"
|
|
537
552
|
ROLLBACK_DIR="${DATA_DIR}/rollbacks"
|
|
538
553
|
JOURNAL_PATH="${APP_PARENT}/.Recordings-install-transaction.json"
|
|
@@ -1323,6 +1338,7 @@ MANIFEST_SNAPSHOT="${WORK_DIR}/$("$BASENAME_EXECUTABLE" "$MANIFEST_PATH")"
|
|
|
1323
1338
|
--source-sha "$EXPECTED_SOURCE_SHA" \
|
|
1324
1339
|
--version "$EXPECTED_VERSION" \
|
|
1325
1340
|
--artifact-policy "$ARTIFACT_POLICY" \
|
|
1341
|
+
--variant "$INSTALL_VARIANT" \
|
|
1326
1342
|
--approved-target "$APPROVED_TARGET" \
|
|
1327
1343
|
--approved-target-identity-kind "$APPROVED_TARGET_IDENTITY_KIND" \
|
|
1328
1344
|
--approved-target-identity-sha256 "$APPROVED_TARGET_IDENTITY_SHA256"
|
|
@@ -1330,6 +1346,22 @@ MANIFEST_BUILDER_IDENTITY_KIND="$("$BUN_EXECUTABLE" "$ARTIFACT_TOOL" manifest-ge
|
|
|
1330
1346
|
--manifest "$MANIFEST_SNAPSHOT" \
|
|
1331
1347
|
--manifest-sha256 "$EXPECTED_MANIFEST_SHA256" \
|
|
1332
1348
|
--field builder_identity_kind)"
|
|
1349
|
+
AUTHENTICATED_BUNDLE_NAME="$("$BUN_EXECUTABLE" "$ARTIFACT_TOOL" manifest-get \
|
|
1350
|
+
--manifest "$MANIFEST_SNAPSHOT" \
|
|
1351
|
+
--manifest-sha256 "$EXPECTED_MANIFEST_SHA256" \
|
|
1352
|
+
--field bundle_name)"
|
|
1353
|
+
case "$AUTHENTICATED_BUNDLE_NAME" in
|
|
1354
|
+
*.app) ;;
|
|
1355
|
+
*)
|
|
1356
|
+
echo "Authenticated artifact manifest carries an invalid bundle name: ${AUTHENTICATED_BUNDLE_NAME}." >&2
|
|
1357
|
+
exit 1
|
|
1358
|
+
;;
|
|
1359
|
+
esac
|
|
1360
|
+
if [ "$AUTHENTICATED_BUNDLE_NAME" != "$MANIFEST_BUNDLE_NAME" ]; then
|
|
1361
|
+
MANIFEST_BUNDLE_NAME="$AUTHENTICATED_BUNDLE_NAME"
|
|
1362
|
+
APP_DEST="${HOME}/Applications/${MANIFEST_BUNDLE_NAME}"
|
|
1363
|
+
APP_PARENT="$("$DIRNAME_EXECUTABLE" "$APP_DEST")"
|
|
1364
|
+
fi
|
|
1333
1365
|
|
|
1334
1366
|
CURRENT_MACOS="$("$SW_VERS_EXECUTABLE" -productVersion)"
|
|
1335
1367
|
MINIMUM_MACOS="$("$BUN_EXECUTABLE" "$ARTIFACT_TOOL" manifest-get \
|
|
@@ -1361,7 +1393,7 @@ verify_secure_parent "$APP_PARENT"
|
|
|
1361
1393
|
verify_existing_state_root
|
|
1362
1394
|
|
|
1363
1395
|
STAGING_DIR="$("$MKTEMP_EXECUTABLE" -d "${APP_PARENT}/.Recordings-install.XXXXXX")"
|
|
1364
|
-
STAGED_APP="${STAGING_DIR}
|
|
1396
|
+
STAGED_APP="${STAGING_DIR}/${MANIFEST_BUNDLE_NAME}"
|
|
1365
1397
|
"$BUN_EXECUTABLE" "$ARTIFACT_TOOL" verify-archive \
|
|
1366
1398
|
--archive "$ARTIFACT_SNAPSHOT" \
|
|
1367
1399
|
--manifest "$MANIFEST_SNAPSHOT" \
|
|
@@ -1370,6 +1402,7 @@ STAGED_APP="${STAGING_DIR}/Recordings.app"
|
|
|
1370
1402
|
--source-sha "$EXPECTED_SOURCE_SHA" \
|
|
1371
1403
|
--version "$EXPECTED_VERSION" \
|
|
1372
1404
|
--artifact-policy "$ARTIFACT_POLICY" \
|
|
1405
|
+
--variant "$INSTALL_VARIANT" \
|
|
1373
1406
|
--approved-target "$APPROVED_TARGET" \
|
|
1374
1407
|
--approved-target-identity-kind "$APPROVED_TARGET_IDENTITY_KIND" \
|
|
1375
1408
|
--approved-target-identity-sha256 "$APPROVED_TARGET_IDENTITY_SHA256"
|
|
@@ -1647,10 +1680,11 @@ write_journal() {
|
|
|
1647
1680
|
--source-sha "$EXPECTED_SOURCE_SHA" \
|
|
1648
1681
|
--version "$EXPECTED_VERSION" \
|
|
1649
1682
|
--artifact-policy "$ARTIFACT_POLICY" \
|
|
1683
|
+
--variant "$INSTALL_VARIANT" \
|
|
1650
1684
|
--approved-target "$APPROVED_TARGET" \
|
|
1651
1685
|
--approved-target-identity-kind "$APPROVED_TARGET_IDENTITY_KIND" \
|
|
1652
1686
|
--approved-target-identity-sha256 "$APPROVED_TARGET_IDENTITY_SHA256"
|
|
1653
|
-
CANDIDATE_APP="$UNPACK_DIR
|
|
1687
|
+
CANDIDATE_APP="$UNPACK_DIR/${MANIFEST_BUNDLE_NAME}"
|
|
1654
1688
|
|
|
1655
1689
|
"$BUN_EXECUTABLE" "$ARTIFACT_TOOL" verify-app \
|
|
1656
1690
|
--app "$CANDIDATE_APP" \
|
|
@@ -1658,6 +1692,7 @@ CANDIDATE_APP="$UNPACK_DIR/Recordings.app"
|
|
|
1658
1692
|
--manifest-sha256 "$EXPECTED_MANIFEST_SHA256" \
|
|
1659
1693
|
--team-id "$EXPECTED_TEAM_ID" \
|
|
1660
1694
|
--artifact-policy "$ARTIFACT_POLICY" \
|
|
1695
|
+
--variant "$INSTALL_VARIANT" \
|
|
1661
1696
|
--approved-target "$APPROVED_TARGET" \
|
|
1662
1697
|
--approved-target-identity-kind "$APPROVED_TARGET_IDENTITY_KIND" \
|
|
1663
1698
|
--approved-target-identity-sha256 "$APPROVED_TARGET_IDENTITY_SHA256"
|
|
@@ -1671,10 +1706,12 @@ fi
|
|
|
1671
1706
|
DISCOVERED_APPS=()
|
|
1672
1707
|
add_unique_app "$APP_DEST"
|
|
1673
1708
|
add_unique_app "${DATA_DIR}/Recordings.app"
|
|
1674
|
-
|
|
1709
|
+
add_unique_app "${DATA_DIR}/HasnaRecordings.app"
|
|
1710
|
+
for candidate in "${HOME}"/Applications/Recordings.app.* "${HOME}"/Applications/HasnaRecordings.app.*; do
|
|
1675
1711
|
add_unique_app "$candidate"
|
|
1676
1712
|
done
|
|
1677
1713
|
add_unique_app "/Applications/Recordings.app"
|
|
1714
|
+
add_unique_app "/Applications/HasnaRecordings.app"
|
|
1678
1715
|
if [ -x "$MDFIND_EXECUTABLE" ]; then
|
|
1679
1716
|
while IFS= read -r candidate; do
|
|
1680
1717
|
[ -n "$candidate" ] || continue
|
|
@@ -1685,7 +1722,7 @@ fi
|
|
|
1685
1722
|
MANAGEABLE_APPS=()
|
|
1686
1723
|
for existing_app in ${DISCOVERED_APPS[@]+"${DISCOVERED_APPS[@]}"}; do
|
|
1687
1724
|
case "$existing_app" in
|
|
1688
|
-
"$APP_DEST"|"${DATA_DIR}/Recordings.app"|"${HOME}/Applications/Recordings.app."*)
|
|
1725
|
+
"$APP_DEST"|"${DATA_DIR}/Recordings.app"|"${DATA_DIR}/HasnaRecordings.app"|"${HOME}/Applications/Recordings.app."*|"${HOME}/Applications/HasnaRecordings.app."*)
|
|
1689
1726
|
echo "Duplicate disposition: archive transactionally, remove after activation: ${existing_app}"
|
|
1690
1727
|
MANAGEABLE_APPS+=("$existing_app")
|
|
1691
1728
|
;;
|
|
@@ -1847,6 +1884,7 @@ done
|
|
|
1847
1884
|
--manifest-sha256 "$EXPECTED_MANIFEST_SHA256" \
|
|
1848
1885
|
--team-id "$EXPECTED_TEAM_ID" \
|
|
1849
1886
|
--artifact-policy "$ARTIFACT_POLICY" \
|
|
1887
|
+
--variant "$INSTALL_VARIANT" \
|
|
1850
1888
|
--approved-target "$APPROVED_TARGET" \
|
|
1851
1889
|
--approved-target-identity-kind "$APPROVED_TARGET_IDENTITY_KIND" \
|
|
1852
1890
|
--approved-target-identity-sha256 "$APPROVED_TARGET_IDENTITY_SHA256"
|
|
@@ -2012,6 +2050,7 @@ write_journal candidate-installed
|
|
|
2012
2050
|
--manifest-sha256 "$EXPECTED_MANIFEST_SHA256" \
|
|
2013
2051
|
--team-id "$EXPECTED_TEAM_ID" \
|
|
2014
2052
|
--artifact-policy "$ARTIFACT_POLICY" \
|
|
2053
|
+
--variant "$INSTALL_VARIANT" \
|
|
2015
2054
|
--approved-target "$APPROVED_TARGET" \
|
|
2016
2055
|
--approved-target-identity-kind "$APPROVED_TARGET_IDENTITY_KIND" \
|
|
2017
2056
|
--approved-target-identity-sha256 "$APPROVED_TARGET_IDENTITY_SHA256"
|
|
@@ -2027,11 +2066,12 @@ fi
|
|
|
2027
2066
|
--manifest-sha256 "$EXPECTED_MANIFEST_SHA256" \
|
|
2028
2067
|
--team-id "$EXPECTED_TEAM_ID" \
|
|
2029
2068
|
--artifact-policy "$ARTIFACT_POLICY" \
|
|
2069
|
+
--variant "$INSTALL_VARIANT" \
|
|
2030
2070
|
--approved-target "$APPROVED_TARGET" \
|
|
2031
2071
|
--approved-target-identity-kind "$APPROVED_TARGET_IDENTITY_KIND" \
|
|
2032
2072
|
--approved-target-identity-sha256 "$APPROVED_TARGET_IDENTITY_SHA256"
|
|
2033
2073
|
SMOKE_TOOL_PATH="/usr/bin:/bin:/usr/sbin:/sbin:$("$DIRNAME_EXECUTABLE" "$BUN_EXECUTABLE")"
|
|
2034
|
-
PATH="$SMOKE_TOOL_PATH" "$RUNTIME_SMOKE" "$APP_DEST" "$BUN_EXECUTABLE"
|
|
2074
|
+
PATH="$SMOKE_TOOL_PATH" "$RUNTIME_SMOKE" "$APP_DEST" "$BUN_EXECUTABLE" --variant "$INSTALL_VARIANT"
|
|
2035
2075
|
write_journal activated
|
|
2036
2076
|
|
|
2037
2077
|
write_journal committed
|
|
@@ -2043,7 +2083,14 @@ STOPPED_RUNNING_APP=0
|
|
|
2043
2083
|
if [ "$LAUNCH_APP" -eq 1 ] || [ "$was_running" -eq 1 ]; then
|
|
2044
2084
|
EXPECTED_EXECUTABLE="$APP_DEST/Contents/MacOS/Recordings"
|
|
2045
2085
|
RUNNING_EXECUTABLES+=("$EXPECTED_EXECUTABLE")
|
|
2046
|
-
"$
|
|
2086
|
+
if [ "$INSTALL_VARIANT" = "bar" ]; then
|
|
2087
|
+
# Bar installs relaunch with an explicit --bar-only so the launch record is
|
|
2088
|
+
# self-describing; the compile-time RECORDINGS_BAR_ONLY default makes the bar
|
|
2089
|
+
# windowless even without the argument.
|
|
2090
|
+
"$OPEN_EXECUTABLE" -n "$APP_DEST" --args --bar-only
|
|
2091
|
+
else
|
|
2092
|
+
"$OPEN_EXECUTABLE" -n "$APP_DEST"
|
|
2093
|
+
fi
|
|
2047
2094
|
attempts=$((LAUNCH_TIMEOUT_SECONDS * 10))
|
|
2048
2095
|
launched_pid=""
|
|
2049
2096
|
launched_start_identity=""
|