@opencrater/sdk 0.8.52 → 0.8.54
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.
Potentially problematic release.
This version of @opencrater/sdk might be problematic. Click here for more details.
- package/dist/hook.js +22 -0
- package/dist/paint.js +15 -1
- package/package.json +1 -1
package/dist/hook.js
CHANGED
|
@@ -778,6 +778,23 @@ async function renderPlain(card, state, media, impressionId, campaignId) {
|
|
|
778
778
|
}
|
|
779
779
|
return { ...state, lastShownAt: Date.now(), disclosureShown: true };
|
|
780
780
|
}
|
|
781
|
+
function windowsCardShowing(displayMs) {
|
|
782
|
+
if (process.platform !== "win32") return false;
|
|
783
|
+
try {
|
|
784
|
+
const lockPath = path3__namespace.join(os2__namespace.homedir(), ".config", "opencrater", "painter.lock");
|
|
785
|
+
const lock = JSON.parse(fs3__namespace.readFileSync(lockPath, "utf8"));
|
|
786
|
+
if (typeof lock.pid !== "number" || typeof lock.startedAt !== "number") return false;
|
|
787
|
+
if (Date.now() - lock.startedAt > displayMs + 1e3) return false;
|
|
788
|
+
try {
|
|
789
|
+
process.kill(lock.pid, 0);
|
|
790
|
+
} catch {
|
|
791
|
+
return false;
|
|
792
|
+
}
|
|
793
|
+
return true;
|
|
794
|
+
} catch {
|
|
795
|
+
return false;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
781
798
|
var RENDER_SLOT_TTL_MS = 8e3;
|
|
782
799
|
function claimRenderSlot() {
|
|
783
800
|
const slot = path3__namespace.join(os2__namespace.homedir(), ".config", "opencrater", "render.lock");
|
|
@@ -902,6 +919,11 @@ async function main() {
|
|
|
902
919
|
debug("hook: pooled ad skipped \u2014 campaign inside a local cooldown");
|
|
903
920
|
({ ad: pooled, pool } = takeFromPool({ pool }, Date.now()));
|
|
904
921
|
}
|
|
922
|
+
if ((pooled || args.key) && windowsCardShowing((config.displayDurationSeconds ?? 25) * 1e3)) {
|
|
923
|
+
writeState(state);
|
|
924
|
+
debug("hook: a card is already on screen \u2014 not rendering another");
|
|
925
|
+
return;
|
|
926
|
+
}
|
|
905
927
|
if (pooled || args.key) {
|
|
906
928
|
if (!claimRenderSlot()) {
|
|
907
929
|
writeState(state);
|
package/dist/paint.js
CHANGED
|
@@ -1164,6 +1164,18 @@ function main() {
|
|
|
1164
1164
|
}
|
|
1165
1165
|
clear();
|
|
1166
1166
|
releaseLock();
|
|
1167
|
+
if (IS_WINDOWS) {
|
|
1168
|
+
let gone = false;
|
|
1169
|
+
const bye = () => {
|
|
1170
|
+
if (!gone) {
|
|
1171
|
+
gone = true;
|
|
1172
|
+
process.exit(0);
|
|
1173
|
+
}
|
|
1174
|
+
};
|
|
1175
|
+
void sink.closeAndWait().then(bye);
|
|
1176
|
+
setTimeout(bye, 1500).unref?.();
|
|
1177
|
+
return;
|
|
1178
|
+
}
|
|
1167
1179
|
sink.close();
|
|
1168
1180
|
process.exit(0);
|
|
1169
1181
|
};
|
|
@@ -1298,7 +1310,7 @@ function main() {
|
|
|
1298
1310
|
args.push(file);
|
|
1299
1311
|
}
|
|
1300
1312
|
try {
|
|
1301
|
-
audioProc = child_process.spawn(cmd, args, { stdio: "ignore" });
|
|
1313
|
+
audioProc = IS_WINDOWS ? child_process.spawn(cmd, args, { stdio: "ignore", detached: true, windowsHide: true }) : child_process.spawn(cmd, args, { stdio: "ignore" });
|
|
1302
1314
|
audioState = "playing";
|
|
1303
1315
|
audioStartedAt = Date.now();
|
|
1304
1316
|
audioProc.on("exit", () => {
|
|
@@ -1455,10 +1467,12 @@ function main() {
|
|
|
1455
1467
|
} catch {
|
|
1456
1468
|
}
|
|
1457
1469
|
}
|
|
1470
|
+
takeOverLock(sink);
|
|
1458
1471
|
const framesNow = ansiFrames;
|
|
1459
1472
|
const animated = !!(framesNow && framesNow.length > 1);
|
|
1460
1473
|
paint();
|
|
1461
1474
|
interval = setInterval(paint, animated ? ANIM_MS : REPAINT_MS);
|
|
1475
|
+
startActivityWatch();
|
|
1462
1476
|
setTimeout(() => cleanup(), duration2);
|
|
1463
1477
|
return;
|
|
1464
1478
|
}
|