@aephia/atlas-kit 0.6.0-next.57 → 0.6.0-next.59
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/README.md +1 -0
- package/dist/fleets/actions/index.d.ts.map +1 -1
- package/dist/fleets/actions/index.js +1 -42
- package/dist/fleets/actions/index.js.map +1 -1
- package/dist/internal/c4/game.d.ts +5 -0
- package/dist/internal/c4/game.d.ts.map +1 -1
- package/dist/internal/c4/game.js +12 -0
- package/dist/internal/c4/game.js.map +1 -1
- package/dist/internal/c4/region-geometry.d.ts +8 -0
- package/dist/internal/c4/region-geometry.d.ts.map +1 -0
- package/dist/internal/c4/region-geometry.js +43 -0
- package/dist/internal/c4/region-geometry.js.map +1 -0
- package/dist/internal/c4/scan-detection-codecs.d.ts +3 -0
- package/dist/internal/c4/scan-detection-codecs.d.ts.map +1 -0
- package/dist/internal/c4/scan-detection-codecs.js +3 -0
- package/dist/internal/c4/scan-detection-codecs.js.map +1 -0
- package/dist/internal/planning/scan-detect-guard.d.ts +34 -0
- package/dist/internal/planning/scan-detect-guard.d.ts.map +1 -0
- package/dist/internal/planning/scan-detect-guard.js +77 -0
- package/dist/internal/planning/scan-detect-guard.js.map +1 -0
- package/dist/internal/planning/scan-detect.d.ts +24 -0
- package/dist/internal/planning/scan-detect.d.ts.map +1 -0
- package/dist/internal/planning/scan-detect.js +244 -0
- package/dist/internal/planning/scan-detect.js.map +1 -0
- package/dist/planning/execution.d.ts.map +1 -1
- package/dist/planning/execution.js +4 -0
- package/dist/planning/execution.js.map +1 -1
- package/dist/planning/index.d.ts +3 -2
- package/dist/planning/index.d.ts.map +1 -1
- package/dist/planning/index.js +79 -3
- package/dist/planning/index.js.map +1 -1
- package/dist/registry/scanning.d.ts +7 -0
- package/dist/registry/scanning.d.ts.map +1 -0
- package/dist/registry/scanning.js +13 -0
- package/dist/registry/scanning.js.map +1 -0
- package/dist/scanning/actions/index.d.ts +26 -0
- package/dist/scanning/actions/index.d.ts.map +1 -0
- package/dist/scanning/actions/index.js +31 -0
- package/dist/scanning/actions/index.js.map +1 -0
- package/dist/scanning/index.d.ts +1 -0
- package/dist/scanning/index.d.ts.map +1 -1
- package/dist/scanning/index.js +1 -0
- package/dist/scanning/index.js.map +1 -1
- package/dist/scanning/lifecycle.d.ts +77 -0
- package/dist/scanning/lifecycle.d.ts.map +1 -0
- package/dist/scanning/lifecycle.js +93 -0
- package/dist/scanning/lifecycle.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { SageSdkError, InvalidDerivationInputError } from '../client/errors.js';
|
|
2
|
+
import { attachJsonSerialization } from '../internal/json.js';
|
|
3
|
+
import { freezeResolvedSnapshot } from '../internal/resolved-snapshot.js';
|
|
4
|
+
function nonnegative(field, value) {
|
|
5
|
+
if (value < 0n)
|
|
6
|
+
throw new InvalidDerivationInputError(field, value, 'Supply a nonnegative slot or radius from a fresh scan snapshot before deriving scan timing or range.');
|
|
7
|
+
}
|
|
8
|
+
function required(value, field) {
|
|
9
|
+
if (value === undefined)
|
|
10
|
+
throw new SageSdkError('INVALID_DERIVATION_INPUT', `The scan signal is missing ${field} required by its state. Refetch the signal snapshot before deriving scan timing or range.`);
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
function remaining(end, now) {
|
|
14
|
+
return end > now ? end - now : 0n;
|
|
15
|
+
}
|
|
16
|
+
function finish(value) {
|
|
17
|
+
return freezeResolvedSnapshot(attachJsonSerialization(value));
|
|
18
|
+
}
|
|
19
|
+
/** Projects signal cooldown, pending entropy and contact expiry using explicit clock values.
|
|
20
|
+
* Reveal starts at commitSlot + 10 and ends exclusively 256 slots later, matching
|
|
21
|
+
* the fingerprinted client. No network, polling, clock access or acknowledgement
|
|
22
|
+
* eligibility is implied; abandonment acknowledgement can shorten cooldown.
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* declare const signal: ScanSignalSnapshot | undefined;
|
|
26
|
+
* const timing = deriveScanSignalTiming(signal, { slot: 54_000_000n, unixSeconds: 1_790_000_000n });
|
|
27
|
+
* console.log(timing.entropy?.phase);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export function deriveScanSignalTiming(signal, clock) {
|
|
31
|
+
nonnegative('clock.slot', clock.slot);
|
|
32
|
+
let entropy;
|
|
33
|
+
let contactExpiry;
|
|
34
|
+
if (signal?.status === 'pending-entropy') {
|
|
35
|
+
const { commitSlot } = required(signal.attempt, 'attempt');
|
|
36
|
+
nonnegative('attempt.commitSlot', commitSlot);
|
|
37
|
+
const readyAtSlot = commitSlot + 10n;
|
|
38
|
+
const deadlineSlot = readyAtSlot + 256n;
|
|
39
|
+
entropy = {
|
|
40
|
+
phase: clock.slot < readyAtSlot
|
|
41
|
+
? 'waiting'
|
|
42
|
+
: clock.slot < deadlineSlot
|
|
43
|
+
? 'ready'
|
|
44
|
+
: 'expired',
|
|
45
|
+
readyAtSlot,
|
|
46
|
+
deadlineSlot,
|
|
47
|
+
slotsUntilReady: remaining(readyAtSlot, clock.slot),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (signal?.status === 'contact') {
|
|
51
|
+
const { expiresAtUnixSeconds } = required(signal.contact, 'contact');
|
|
52
|
+
contactExpiry = {
|
|
53
|
+
expired: clock.unixSeconds >= expiresAtUnixSeconds,
|
|
54
|
+
remainingSeconds: remaining(expiresAtUnixSeconds, clock.unixSeconds),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return finish({
|
|
58
|
+
status: signal?.status ?? 'absent',
|
|
59
|
+
cooldownRemainingSeconds: signal === undefined
|
|
60
|
+
? 0n
|
|
61
|
+
: remaining(signal.cooldownEndsAtUnixSeconds, clock.unixSeconds),
|
|
62
|
+
entropy,
|
|
63
|
+
contactExpiry,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** Compares a contact's recovery radius with exact raw I8F56 coordinates, boundary included.
|
|
67
|
+
* Supply current raw I8F56 coordinates, not Fleet display coordinates or the
|
|
68
|
+
* original scan-attempt position. Never reconstruct exact bits from rounded values.
|
|
69
|
+
* Uses raw components only. This is geometry, not expiry, authority, capacity or
|
|
70
|
+
* instruction eligibility; an expired Contact still has measurable geometry.
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* declare const signal: ScanSignalSnapshot | undefined, location: ScanCoordinates;
|
|
74
|
+
* const range = deriveScanRecoveryRange(signal, location);
|
|
75
|
+
* if (range.kind === 'contact') console.log(range.withinRange);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export function deriveScanRecoveryRange(signal, location) {
|
|
79
|
+
if (signal?.status !== 'contact')
|
|
80
|
+
return finish({ kind: 'no-contact' });
|
|
81
|
+
const { target, targetRadius } = required(signal.contact, 'contact');
|
|
82
|
+
nonnegative('contact.targetRadius.raw', targetRadius.raw);
|
|
83
|
+
const dx = location.x.raw - target.x.raw, dy = location.y.raw - target.y.raw;
|
|
84
|
+
const distanceSquaredRaw = dx * dx + dy * dy;
|
|
85
|
+
const radiusSquaredRaw = targetRadius.raw * targetRadius.raw;
|
|
86
|
+
return finish({
|
|
87
|
+
kind: 'contact',
|
|
88
|
+
withinRange: distanceSquaredRaw <= radiusSquaredRaw,
|
|
89
|
+
distanceSquaredRaw,
|
|
90
|
+
radiusSquaredRaw,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/scanning/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aephia/atlas-kit",
|
|
3
|
-
"version": "0.6.0-next.
|
|
3
|
+
"version": "0.6.0-next.59",
|
|
4
4
|
"description": "Community-maintained non-custodial TypeScript SDK for Star Atlas SAGE C4.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Aephia contributors",
|
|
@@ -147,6 +147,10 @@
|
|
|
147
147
|
"./world": {
|
|
148
148
|
"types": "./dist/world/index.d.ts",
|
|
149
149
|
"import": "./dist/world/index.js"
|
|
150
|
+
},
|
|
151
|
+
"./scanning/actions": {
|
|
152
|
+
"types": "./dist/scanning/actions/index.d.ts",
|
|
153
|
+
"import": "./dist/scanning/actions/index.js"
|
|
150
154
|
}
|
|
151
155
|
},
|
|
152
156
|
"files": [
|