mirror of
https://github.com/xweiba/location-spoofer.git
synced 2026-09-25 08:01:55 +08:00
fix(proxy): 恢复上游脚本与逐项域名复制
This commit is contained in:
+40
-40
@@ -1,52 +1,52 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { createHash } from "node:crypto";
|
||||
import { readFile } from "node:fs/promises";
|
||||
import vm from "node:vm";
|
||||
|
||||
const bundles = [
|
||||
new URL("../dist/v1/wloc.js", import.meta.url),
|
||||
new URL("../dist/v1/wloc-settings.js", import.meta.url)
|
||||
];
|
||||
const files = new Map([
|
||||
[new URL("../dist/v1/wloc.js", import.meta.url), "a1b361e60f0b434585260fb59c65d1ddbe3bff89ace3639f592e7d8af432b3c1"],
|
||||
[new URL("../dist/v1/wloc-settings.js", import.meta.url), "cbff047a7f42055615ee19e208ddfc2ec66833e6f2b75555eac84f1c299a66cf"],
|
||||
[new URL("../LICENSE", import.meta.url), "8486a10c4393cee1c25392769ddd3b2d6c242d6ec7928e1414efff7dfb2f07ef"]
|
||||
]);
|
||||
|
||||
test("generated bundles avoid newer JavaScriptCore runtime requirements", async () => {
|
||||
for (const bundle of bundles) {
|
||||
const source = await readFile(bundle, "utf8");
|
||||
for (const unsupported of [
|
||||
/\bBigInt\b/,
|
||||
/\bglobalThis\b/,
|
||||
/\bURLSearchParams\b/,
|
||||
/\bObject\.fromEntries\b/,
|
||||
/\?\./,
|
||||
/\?\?/
|
||||
]) {
|
||||
assert.equal(unsupported.test(source), false, `${bundle.pathname} contains ${unsupported}`);
|
||||
}
|
||||
test("vendored upstream files retain their pinned SHA-256 hashes", async () => {
|
||||
for (const [file, expectedHash] of files) {
|
||||
const contents = await readFile(file);
|
||||
const actualHash = createHash("sha256").update(contents).digest("hex");
|
||||
assert.equal(actualHash, expectedHash, file.pathname);
|
||||
}
|
||||
});
|
||||
|
||||
test("settings bundle runs without modern URL and text globals", async () => {
|
||||
const source = await readFile(bundles[1], "utf8");
|
||||
let result;
|
||||
test("settings bundle saves and queries wloc_settings in Shadowrocket", async () => {
|
||||
const source = await readFile(new URL("../dist/v1/wloc-settings.js", import.meta.url), "utf8");
|
||||
const storage = new Map();
|
||||
vm.runInNewContext(source, {
|
||||
$rocket: {},
|
||||
$request: {
|
||||
url: "https://gs-loc.apple.com/wloc-settings/save?lon=121.1&lat=31.2&acc=25"
|
||||
},
|
||||
$persistentStore: {
|
||||
read: (key) => storage.get(key) || null,
|
||||
write: (value, key) => {
|
||||
storage.set(key, value);
|
||||
return true;
|
||||
}
|
||||
},
|
||||
$done: (value) => { result = value; },
|
||||
JSON,
|
||||
Number,
|
||||
Object,
|
||||
String,
|
||||
decodeURIComponent
|
||||
});
|
||||
|
||||
assert.equal(JSON.parse(result.response.body).success, true);
|
||||
const run = (url) => {
|
||||
let result;
|
||||
vm.runInNewContext(source, {
|
||||
$rocket: {},
|
||||
$request: { url },
|
||||
$persistentStore: {
|
||||
read: (key) => storage.get(key) ?? null,
|
||||
write: (value, key) => {
|
||||
storage.set(key, value);
|
||||
return true;
|
||||
}
|
||||
},
|
||||
$done: (value) => { result = value; },
|
||||
console
|
||||
});
|
||||
return JSON.parse(result.response.body);
|
||||
};
|
||||
|
||||
const saved = run("https://gs-loc.apple.com/wloc-settings/save?lon=121.1&lat=31.2&acc=25");
|
||||
assert.equal(saved.success, true);
|
||||
assert.equal(storage.has("wloc_settings"), true);
|
||||
|
||||
const queried = run("https://gs-loc.apple.com/wloc-settings/save?action=query");
|
||||
assert.deepEqual(
|
||||
{ success: queried.success, longitude: queried.longitude, latitude: queried.latitude, accuracy: queried.accuracy },
|
||||
{ success: true, longitude: 121.1, latitude: 31.2, accuracy: 25 }
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user