@eternl/network-id 0.46.0 → 0.47.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.
- package/README.md +21 -0
- package/dist/timeline.cjs +58 -0
- package/dist/timeline.cjs.map +1 -0
- package/dist/timeline.d.cts +19 -0
- package/dist/timeline.d.cts.map +1 -0
- package/dist/timeline.d.mts +19 -0
- package/dist/timeline.d.mts.map +1 -0
- package/dist/timeline.mjs +57 -0
- package/dist/timeline.mjs.map +1 -0
- package/llms.txt +1 -0
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -27,6 +27,27 @@ if (isSupportedNetworkId(id)) {
|
|
|
27
27
|
}
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
## Caller-supplied slot timelines
|
|
31
|
+
|
|
32
|
+
`@eternl/network-id/timeline` provides `createSlotTimeline` for a caller's explicit
|
|
33
|
+
era boundaries. It snapshots and freezes the supplied data, checks continuity,
|
|
34
|
+
and rejects unsafe integers. It does not register networks or select endpoints.
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { createSlotTimeline } from '@eternl/network-id/timeline'
|
|
38
|
+
|
|
39
|
+
const timeline = createSlotTimeline([
|
|
40
|
+
{ firstSlot: 0, startTimeMs: Date.UTC(2026, 0, 1), slotLengthMs: 1000 }
|
|
41
|
+
])
|
|
42
|
+
const time = timeline.timestampAtSlot(42)
|
|
43
|
+
const firstSlot = timeline.slotAtOrAfter(time + 1) // 43
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Times are nonnegative Unix milliseconds. `slotAtOrAfter` clamps timestamps before
|
|
47
|
+
genesis to slot zero; it rounds up, so the inclusive last slot in `[start, end)`
|
|
48
|
+
is `slotAtOrAfter(end) - 1`. Results beyond the safe integer range throw.
|
|
49
|
+
Existing registered-network helpers and frontend network lists are unchanged.
|
|
50
|
+
|
|
30
51
|
## Exports
|
|
31
52
|
|
|
32
53
|
- `NETWORK_ID`
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
//#region src/timeline.ts
|
|
3
|
+
const integer = (value, label) => {
|
|
4
|
+
if (!Number.isSafeInteger(value) || value < 0) throw new RangeError(`${label} must be a nonnegative safe integer`);
|
|
5
|
+
return BigInt(value);
|
|
6
|
+
};
|
|
7
|
+
const safeNumber = (value) => {
|
|
8
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new RangeError("Slot timeline result exceeds the safe integer range");
|
|
9
|
+
return Number(value);
|
|
10
|
+
};
|
|
11
|
+
/** Build an immutable, continuous timeline from caller-supplied era boundaries. */
|
|
12
|
+
const createSlotTimeline = (input) => {
|
|
13
|
+
if (!input.length) throw new RangeError("Slot timeline must contain at least one era");
|
|
14
|
+
const eras = input.map((era, index) => {
|
|
15
|
+
const firstSlot = integer(era.firstSlot, "First slot");
|
|
16
|
+
const startTimeMs = integer(era.startTimeMs, "Start time");
|
|
17
|
+
const slotLengthMs = integer(era.slotLengthMs, "Slot length");
|
|
18
|
+
const previous = input[index - 1];
|
|
19
|
+
if (slotLengthMs === 0n || index === 0 && firstSlot !== 0n) throw new RangeError("Slot timeline must start at slot zero with positive slot lengths");
|
|
20
|
+
if (previous && (era.firstSlot <= previous.firstSlot || startTimeMs !== BigInt(previous.startTimeMs) + (firstSlot - BigInt(previous.firstSlot)) * BigInt(previous.slotLengthMs))) throw new RangeError("Slot timeline eras must be ordered and continuous");
|
|
21
|
+
return Object.freeze({
|
|
22
|
+
firstSlot: era.firstSlot,
|
|
23
|
+
startTimeMs: era.startTimeMs,
|
|
24
|
+
slotLengthMs: era.slotLengthMs
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
const timestampAtSlot = (slot) => {
|
|
28
|
+
const value = integer(slot, "Slot");
|
|
29
|
+
let era = eras[0];
|
|
30
|
+
for (const candidate of eras) {
|
|
31
|
+
if (candidate.firstSlot > slot) break;
|
|
32
|
+
era = candidate;
|
|
33
|
+
}
|
|
34
|
+
return safeNumber(BigInt(era.startTimeMs) + (value - BigInt(era.firstSlot)) * BigInt(era.slotLengthMs));
|
|
35
|
+
};
|
|
36
|
+
/** First slot starting at or after a timestamp; timestamps before genesis clamp to zero. */
|
|
37
|
+
const slotAtOrAfter = (timestampMs) => {
|
|
38
|
+
const value = integer(timestampMs, "Timestamp");
|
|
39
|
+
let era = eras[0];
|
|
40
|
+
if (timestampMs <= era.startTimeMs) return 0;
|
|
41
|
+
for (const candidate of eras) {
|
|
42
|
+
if (candidate.startTimeMs > timestampMs) break;
|
|
43
|
+
era = candidate;
|
|
44
|
+
}
|
|
45
|
+
const length = BigInt(era.slotLengthMs);
|
|
46
|
+
const elapsed = value - BigInt(era.startTimeMs);
|
|
47
|
+
return safeNumber(BigInt(era.firstSlot) + (elapsed + length - 1n) / length);
|
|
48
|
+
};
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
eras: Object.freeze(eras),
|
|
51
|
+
timestampAtSlot,
|
|
52
|
+
slotAtOrAfter
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
//#endregion
|
|
56
|
+
exports.createSlotTimeline = createSlotTimeline;
|
|
57
|
+
|
|
58
|
+
//# sourceMappingURL=timeline.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.cjs","names":[],"sources":["../src/timeline.ts"],"sourcesContent":["export type SlotEra = Readonly<{\n firstSlot: number,\n startTimeMs: number,\n slotLengthMs: number,\n}>\n\nconst integer = (value: number, label: string): bigint => {\n\n if (!Number.isSafeInteger(value) || value < 0) {\n\n throw new RangeError(`${label} must be a nonnegative safe integer`)\n }\n\n return BigInt(value)\n}\n\nconst safeNumber = (value: bigint): number => {\n\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n\n throw new RangeError('Slot timeline result exceeds the safe integer range')\n }\n\n return Number(value)\n}\n\n/** Build an immutable, continuous timeline from caller-supplied era boundaries. */\nexport const createSlotTimeline = (input: readonly SlotEra[]) => {\n\n if (!input.length) {\n\n throw new RangeError('Slot timeline must contain at least one era')\n }\n\n const eras = input.map((era, index) => {\n\n const firstSlot = integer(era.firstSlot, 'First slot')\n const startTimeMs = integer(era.startTimeMs, 'Start time')\n const slotLengthMs = integer(era.slotLengthMs, 'Slot length')\n const previous = input[index - 1]\n\n if (slotLengthMs === 0n || (index === 0 && firstSlot !== 0n)) {\n\n throw new RangeError('Slot timeline must start at slot zero with positive slot lengths')\n }\n\n if (previous && (era.firstSlot <= previous.firstSlot || startTimeMs !== BigInt(previous.startTimeMs) +\n (firstSlot - BigInt(previous.firstSlot)) * BigInt(previous.slotLengthMs))) {\n\n throw new RangeError('Slot timeline eras must be ordered and continuous')\n }\n\n return Object.freeze({ firstSlot: era.firstSlot, startTimeMs: era.startTimeMs, slotLengthMs: era.slotLengthMs })\n })\n\n const timestampAtSlot = (slot: number): number => {\n\n const value = integer(slot, 'Slot')\n let era = eras[0]!\n\n for (const candidate of eras) {\n\n if (candidate.firstSlot > slot) break\n era = candidate\n }\n\n return safeNumber(BigInt(era.startTimeMs) + (value - BigInt(era.firstSlot)) * BigInt(era.slotLengthMs))\n }\n\n /** First slot starting at or after a timestamp; timestamps before genesis clamp to zero. */\n const slotAtOrAfter = (timestampMs: number): number => {\n\n const value = integer(timestampMs, 'Timestamp')\n let era = eras[0]!\n\n if (timestampMs <= era.startTimeMs) return 0\n\n for (const candidate of eras) {\n\n if (candidate.startTimeMs > timestampMs) break\n era = candidate\n }\n\n const length = BigInt(era.slotLengthMs)\n const elapsed = value - BigInt(era.startTimeMs)\n\n return safeNumber(BigInt(era.firstSlot) + (elapsed + length - 1n) / length)\n }\n\n return Object.freeze({ eras: Object.freeze(eras), timestampAtSlot, slotAtOrAfter })\n}\n\nexport type SlotTimeline = ReturnType<typeof createSlotTimeline>\n"],"mappings":";;AAMA,MAAM,WAA2B,OAAe,UAA0B;CAExE,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAE1C,MAAM,IAAI,WAAW,GAAG,MAAM,oCAAoC;CAGpE,OAAO,OAAO,KAAK;AACrB;AAEA,MAAM,cAA2B,UAA0B;CAEzD,IAAI,QAAQ,OAAO,OAAO,gBAAgB,GAExC,MAAM,IAAI,WAAW,qDAAqD;CAG5E,OAAO,OAAO,KAAK;AACrB;;AAGA,MAAa,sBAAsB,UAA8B;CAE/D,IAAI,CAAC,MAAM,QAET,MAAM,IAAI,WAAW,6CAA6C;CAGpE,MAAM,OAAwB,MAAM,KAAK,KAAK,UAAU;EAEtD,MAAM,YAAsB,QAAQ,IAAI,WAAW,YAAY;EAC/D,MAAM,cAAsB,QAAQ,IAAI,aAAa,YAAY;EACjE,MAAM,eAAsB,QAAQ,IAAI,cAAc,aAAa;EACnE,MAAM,WAAsB,MAAM,QAAQ;EAE1C,IAAI,iBAAiB,MAAO,UAAU,KAAK,cAAc,IAEvD,MAAM,IAAI,WAAW,kEAAkE;EAGzF,IAAI,aAAa,IAAI,aAAa,SAAS,aAAa,gBAAgB,OAAO,SAAS,WAAW,KAC9F,YAAY,OAAO,SAAS,SAAS,KAAK,OAAO,SAAS,YAAY,IAEzE,MAAM,IAAI,WAAW,mDAAmD;EAG1E,OAAO,OAAO,OAAO;GAAE,WAAW,IAAI;GAAW,aAAa,IAAI;GAAa,cAAc,IAAI;EAAa,CAAC;CACjH,CAAC;CAED,MAAM,mBAAyB,SAAyB;EAEtD,MAAM,QAAsB,QAAQ,MAAM,MAAM;EAChD,IAAI,MAAwB,KAAK;EAEjC,KAAK,MAAM,aAAa,MAAM;GAE5B,IAAI,UAAU,YAAY,MAAM;GAChC,MAA0B;EAC5B;EAEA,OAAO,WAAW,OAAO,IAAI,WAAW,KAAK,QAAQ,OAAO,IAAI,SAAS,KAAK,OAAO,IAAI,YAAY,CAAC;CACxG;;CAGA,MAAM,iBAAyB,gBAAgC;EAE7D,MAAM,QAAsB,QAAQ,aAAa,WAAW;EAC5D,IAAI,MAAwB,KAAK;EAEjC,IAAI,eAAe,IAAI,aAAa,OAAO;EAE3C,KAAK,MAAM,aAAa,MAAM;GAE5B,IAAI,UAAU,cAAc,aAAa;GACzC,MAA0B;EAC5B;EAEA,MAAM,SAAsB,OAAO,IAAI,YAAY;EACnD,MAAM,UAAsB,QAAQ,OAAO,IAAI,WAAW;EAE1D,OAAO,WAAW,OAAO,IAAI,SAAS,KAAK,UAAU,SAAS,MAAM,MAAM;CAC5E;CAEA,OAAO,OAAO,OAAO;EAAE,MAAM,OAAO,OAAO,IAAI;EAAG;EAAiB;CAAc,CAAC;AACpF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/timeline.d.ts
|
|
2
|
+
export type SlotEra = Readonly<{
|
|
3
|
+
firstSlot: number;
|
|
4
|
+
startTimeMs: number;
|
|
5
|
+
slotLengthMs: number;
|
|
6
|
+
}>;
|
|
7
|
+
/** Build an immutable, continuous timeline from caller-supplied era boundaries. */
|
|
8
|
+
export declare const createSlotTimeline: (input: readonly SlotEra[]) => Readonly<{
|
|
9
|
+
eras: readonly Readonly<{
|
|
10
|
+
firstSlot: number;
|
|
11
|
+
startTimeMs: number;
|
|
12
|
+
slotLengthMs: number;
|
|
13
|
+
}>[];
|
|
14
|
+
timestampAtSlot: (slot: number) => number;
|
|
15
|
+
slotAtOrAfter: (timestampMs: number) => number;
|
|
16
|
+
}>;
|
|
17
|
+
export type SlotTimeline = ReturnType<typeof createSlotTimeline>;
|
|
18
|
+
//#endregion
|
|
19
|
+
//# sourceMappingURL=timeline.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.cts","names":[],"sources":["../src/timeline.ts"],"mappings":";YAAY,UAAmB;EAC7B;EACA;EACA;;;qBAwBW,qBAAkB,gBAAoB,cAAS;;;;;;EA4BrB,kBAAA;EAeO,gBAAA;;YAsBlC,eAAoB,kBAAkB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/timeline.d.ts
|
|
2
|
+
export type SlotEra = Readonly<{
|
|
3
|
+
firstSlot: number;
|
|
4
|
+
startTimeMs: number;
|
|
5
|
+
slotLengthMs: number;
|
|
6
|
+
}>;
|
|
7
|
+
/** Build an immutable, continuous timeline from caller-supplied era boundaries. */
|
|
8
|
+
export declare const createSlotTimeline: (input: readonly SlotEra[]) => Readonly<{
|
|
9
|
+
eras: readonly Readonly<{
|
|
10
|
+
firstSlot: number;
|
|
11
|
+
startTimeMs: number;
|
|
12
|
+
slotLengthMs: number;
|
|
13
|
+
}>[];
|
|
14
|
+
timestampAtSlot: (slot: number) => number;
|
|
15
|
+
slotAtOrAfter: (timestampMs: number) => number;
|
|
16
|
+
}>;
|
|
17
|
+
export type SlotTimeline = ReturnType<typeof createSlotTimeline>;
|
|
18
|
+
//#endregion
|
|
19
|
+
//# sourceMappingURL=timeline.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.mts","names":[],"sources":["../src/timeline.ts"],"mappings":";YAAY,UAAmB;EAC7B;EACA;EACA;;;qBAwBW,qBAAkB,gBAAoB,cAAS;;;;;;EA4BrB,kBAAA;EAeO,gBAAA;;YAsBlC,eAAoB,kBAAkB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
//#region src/timeline.ts
|
|
2
|
+
const integer = (value, label) => {
|
|
3
|
+
if (!Number.isSafeInteger(value) || value < 0) throw new RangeError(`${label} must be a nonnegative safe integer`);
|
|
4
|
+
return BigInt(value);
|
|
5
|
+
};
|
|
6
|
+
const safeNumber = (value) => {
|
|
7
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) throw new RangeError("Slot timeline result exceeds the safe integer range");
|
|
8
|
+
return Number(value);
|
|
9
|
+
};
|
|
10
|
+
/** Build an immutable, continuous timeline from caller-supplied era boundaries. */
|
|
11
|
+
const createSlotTimeline = (input) => {
|
|
12
|
+
if (!input.length) throw new RangeError("Slot timeline must contain at least one era");
|
|
13
|
+
const eras = input.map((era, index) => {
|
|
14
|
+
const firstSlot = integer(era.firstSlot, "First slot");
|
|
15
|
+
const startTimeMs = integer(era.startTimeMs, "Start time");
|
|
16
|
+
const slotLengthMs = integer(era.slotLengthMs, "Slot length");
|
|
17
|
+
const previous = input[index - 1];
|
|
18
|
+
if (slotLengthMs === 0n || index === 0 && firstSlot !== 0n) throw new RangeError("Slot timeline must start at slot zero with positive slot lengths");
|
|
19
|
+
if (previous && (era.firstSlot <= previous.firstSlot || startTimeMs !== BigInt(previous.startTimeMs) + (firstSlot - BigInt(previous.firstSlot)) * BigInt(previous.slotLengthMs))) throw new RangeError("Slot timeline eras must be ordered and continuous");
|
|
20
|
+
return Object.freeze({
|
|
21
|
+
firstSlot: era.firstSlot,
|
|
22
|
+
startTimeMs: era.startTimeMs,
|
|
23
|
+
slotLengthMs: era.slotLengthMs
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
const timestampAtSlot = (slot) => {
|
|
27
|
+
const value = integer(slot, "Slot");
|
|
28
|
+
let era = eras[0];
|
|
29
|
+
for (const candidate of eras) {
|
|
30
|
+
if (candidate.firstSlot > slot) break;
|
|
31
|
+
era = candidate;
|
|
32
|
+
}
|
|
33
|
+
return safeNumber(BigInt(era.startTimeMs) + (value - BigInt(era.firstSlot)) * BigInt(era.slotLengthMs));
|
|
34
|
+
};
|
|
35
|
+
/** First slot starting at or after a timestamp; timestamps before genesis clamp to zero. */
|
|
36
|
+
const slotAtOrAfter = (timestampMs) => {
|
|
37
|
+
const value = integer(timestampMs, "Timestamp");
|
|
38
|
+
let era = eras[0];
|
|
39
|
+
if (timestampMs <= era.startTimeMs) return 0;
|
|
40
|
+
for (const candidate of eras) {
|
|
41
|
+
if (candidate.startTimeMs > timestampMs) break;
|
|
42
|
+
era = candidate;
|
|
43
|
+
}
|
|
44
|
+
const length = BigInt(era.slotLengthMs);
|
|
45
|
+
const elapsed = value - BigInt(era.startTimeMs);
|
|
46
|
+
return safeNumber(BigInt(era.firstSlot) + (elapsed + length - 1n) / length);
|
|
47
|
+
};
|
|
48
|
+
return Object.freeze({
|
|
49
|
+
eras: Object.freeze(eras),
|
|
50
|
+
timestampAtSlot,
|
|
51
|
+
slotAtOrAfter
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
//#endregion
|
|
55
|
+
export { createSlotTimeline };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=timeline.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.mjs","names":[],"sources":["../src/timeline.ts"],"sourcesContent":["export type SlotEra = Readonly<{\n firstSlot: number,\n startTimeMs: number,\n slotLengthMs: number,\n}>\n\nconst integer = (value: number, label: string): bigint => {\n\n if (!Number.isSafeInteger(value) || value < 0) {\n\n throw new RangeError(`${label} must be a nonnegative safe integer`)\n }\n\n return BigInt(value)\n}\n\nconst safeNumber = (value: bigint): number => {\n\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n\n throw new RangeError('Slot timeline result exceeds the safe integer range')\n }\n\n return Number(value)\n}\n\n/** Build an immutable, continuous timeline from caller-supplied era boundaries. */\nexport const createSlotTimeline = (input: readonly SlotEra[]) => {\n\n if (!input.length) {\n\n throw new RangeError('Slot timeline must contain at least one era')\n }\n\n const eras = input.map((era, index) => {\n\n const firstSlot = integer(era.firstSlot, 'First slot')\n const startTimeMs = integer(era.startTimeMs, 'Start time')\n const slotLengthMs = integer(era.slotLengthMs, 'Slot length')\n const previous = input[index - 1]\n\n if (slotLengthMs === 0n || (index === 0 && firstSlot !== 0n)) {\n\n throw new RangeError('Slot timeline must start at slot zero with positive slot lengths')\n }\n\n if (previous && (era.firstSlot <= previous.firstSlot || startTimeMs !== BigInt(previous.startTimeMs) +\n (firstSlot - BigInt(previous.firstSlot)) * BigInt(previous.slotLengthMs))) {\n\n throw new RangeError('Slot timeline eras must be ordered and continuous')\n }\n\n return Object.freeze({ firstSlot: era.firstSlot, startTimeMs: era.startTimeMs, slotLengthMs: era.slotLengthMs })\n })\n\n const timestampAtSlot = (slot: number): number => {\n\n const value = integer(slot, 'Slot')\n let era = eras[0]!\n\n for (const candidate of eras) {\n\n if (candidate.firstSlot > slot) break\n era = candidate\n }\n\n return safeNumber(BigInt(era.startTimeMs) + (value - BigInt(era.firstSlot)) * BigInt(era.slotLengthMs))\n }\n\n /** First slot starting at or after a timestamp; timestamps before genesis clamp to zero. */\n const slotAtOrAfter = (timestampMs: number): number => {\n\n const value = integer(timestampMs, 'Timestamp')\n let era = eras[0]!\n\n if (timestampMs <= era.startTimeMs) return 0\n\n for (const candidate of eras) {\n\n if (candidate.startTimeMs > timestampMs) break\n era = candidate\n }\n\n const length = BigInt(era.slotLengthMs)\n const elapsed = value - BigInt(era.startTimeMs)\n\n return safeNumber(BigInt(era.firstSlot) + (elapsed + length - 1n) / length)\n }\n\n return Object.freeze({ eras: Object.freeze(eras), timestampAtSlot, slotAtOrAfter })\n}\n\nexport type SlotTimeline = ReturnType<typeof createSlotTimeline>\n"],"mappings":";AAMA,MAAM,WAA2B,OAAe,UAA0B;CAExE,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAE1C,MAAM,IAAI,WAAW,GAAG,MAAM,oCAAoC;CAGpE,OAAO,OAAO,KAAK;AACrB;AAEA,MAAM,cAA2B,UAA0B;CAEzD,IAAI,QAAQ,OAAO,OAAO,gBAAgB,GAExC,MAAM,IAAI,WAAW,qDAAqD;CAG5E,OAAO,OAAO,KAAK;AACrB;;AAGA,MAAa,sBAAsB,UAA8B;CAE/D,IAAI,CAAC,MAAM,QAET,MAAM,IAAI,WAAW,6CAA6C;CAGpE,MAAM,OAAwB,MAAM,KAAK,KAAK,UAAU;EAEtD,MAAM,YAAsB,QAAQ,IAAI,WAAW,YAAY;EAC/D,MAAM,cAAsB,QAAQ,IAAI,aAAa,YAAY;EACjE,MAAM,eAAsB,QAAQ,IAAI,cAAc,aAAa;EACnE,MAAM,WAAsB,MAAM,QAAQ;EAE1C,IAAI,iBAAiB,MAAO,UAAU,KAAK,cAAc,IAEvD,MAAM,IAAI,WAAW,kEAAkE;EAGzF,IAAI,aAAa,IAAI,aAAa,SAAS,aAAa,gBAAgB,OAAO,SAAS,WAAW,KAC9F,YAAY,OAAO,SAAS,SAAS,KAAK,OAAO,SAAS,YAAY,IAEzE,MAAM,IAAI,WAAW,mDAAmD;EAG1E,OAAO,OAAO,OAAO;GAAE,WAAW,IAAI;GAAW,aAAa,IAAI;GAAa,cAAc,IAAI;EAAa,CAAC;CACjH,CAAC;CAED,MAAM,mBAAyB,SAAyB;EAEtD,MAAM,QAAsB,QAAQ,MAAM,MAAM;EAChD,IAAI,MAAwB,KAAK;EAEjC,KAAK,MAAM,aAAa,MAAM;GAE5B,IAAI,UAAU,YAAY,MAAM;GAChC,MAA0B;EAC5B;EAEA,OAAO,WAAW,OAAO,IAAI,WAAW,KAAK,QAAQ,OAAO,IAAI,SAAS,KAAK,OAAO,IAAI,YAAY,CAAC;CACxG;;CAGA,MAAM,iBAAyB,gBAAgC;EAE7D,MAAM,QAAsB,QAAQ,aAAa,WAAW;EAC5D,IAAI,MAAwB,KAAK;EAEjC,IAAI,eAAe,IAAI,aAAa,OAAO;EAE3C,KAAK,MAAM,aAAa,MAAM;GAE5B,IAAI,UAAU,cAAc,aAAa;GACzC,MAA0B;EAC5B;EAEA,MAAM,SAAsB,OAAO,IAAI,YAAY;EACnD,MAAM,UAAsB,QAAQ,OAAO,IAAI,WAAW;EAE1D,OAAO,WAAW,OAAO,IAAI,SAAS,KAAK,UAAU,SAAS,MAAM,MAAM;CAC5E;CAEA,OAAO,OAAO,OAAO;EAAE,MAAM,OAAO,OAAO,IAAI;EAAG;EAAiB;CAAc,CAAC;AACpF"}
|
package/llms.txt
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
- [`@eternl/network-id`](./dist/index.d.mts)
|
|
14
14
|
- [`@eternl/network-id/chain`](./dist/chain.d.mts)
|
|
15
15
|
- [`@eternl/network-id/network/*`](./dist/network/)
|
|
16
|
+
- [`@eternl/network-id/timeline`](./dist/timeline.d.mts)
|
|
16
17
|
- [`@eternl/network-id/types/*`](./dist/types/)
|
|
17
18
|
|
|
18
19
|
## Optional
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eternl/network-id",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.0",
|
|
4
4
|
"description": "Network identifiers and network-level metadata for Eternl packages",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"type": "module",
|
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
"types": "./dist/types/*.d.mts",
|
|
29
29
|
"import": "./dist/types/*.mjs",
|
|
30
30
|
"require": "./dist/types/*.cjs"
|
|
31
|
+
},
|
|
32
|
+
"./timeline": {
|
|
33
|
+
"types": "./dist/timeline.d.mts",
|
|
34
|
+
"import": "./dist/timeline.mjs",
|
|
35
|
+
"require": "./dist/timeline.cjs"
|
|
31
36
|
}
|
|
32
37
|
},
|
|
33
38
|
"files": [
|