@iicp/client 0.5.5 → 0.5.7

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.
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.configDir = configDir;
4
+ exports.generateOperator = generateOperator;
5
+ exports.operatorPath = operatorPath;
6
+ exports.loadOperator = loadOperator;
7
+ exports.saveOperator = saveOperator;
8
+ exports.generateNode = generateNode;
9
+ exports.nodePath = nodePath;
10
+ exports.loadNode = loadNode;
11
+ exports.saveNode = saveNode;
12
+ exports.listNodes = listNodes;
13
+ // SPDX-License-Identifier: Apache-2.0
14
+ /**
15
+ * Persistent on-disk identity for the IICP TypeScript SDK CLI.
16
+ *
17
+ * Mirrors iicp_client.identity (Python) so operators get the same
18
+ * persisted operator + node files regardless of which SDK they pick.
19
+ *
20
+ * - Operator identity at ~/.iicp/operator.json (one per machine)
21
+ * - Node identity at ~/.iicp/nodes/<name>.json (one per provider node)
22
+ *
23
+ * Stable node_id survives restarts (#215). Files are chmod 0600 on
24
+ * creation so other local users can't read tokens / identity.
25
+ */
26
+ const fs = require("node:fs");
27
+ const os = require("node:os");
28
+ const path = require("node:path");
29
+ const node_crypto_1 = require("node:crypto");
30
+ const NAME_RE = /^[a-z0-9][a-z0-9._-]{0,62}$/;
31
+ function nowIso() {
32
+ return new Date().toISOString().replace(/\.\d{3}Z$/, "Z");
33
+ }
34
+ function chmod600(p) {
35
+ try {
36
+ fs.chmodSync(p, 0o600);
37
+ }
38
+ catch {
39
+ // Windows / WSL no-op
40
+ }
41
+ }
42
+ function configDir() {
43
+ const base = process.env.IICP_HOME;
44
+ const dir = base
45
+ ? path.resolve(base.replace(/^~/, os.homedir()))
46
+ : path.join(os.homedir(), ".iicp");
47
+ fs.mkdirSync(dir, { recursive: true });
48
+ fs.mkdirSync(path.join(dir, "nodes"), { recursive: true });
49
+ return dir;
50
+ }
51
+ function generateOperator(opts = {}) {
52
+ return {
53
+ operator_id: `op-${(0, node_crypto_1.randomUUID)()}`,
54
+ created_at: nowIso(),
55
+ display_name: opts.display_name ?? "",
56
+ contact: opts.contact ?? "",
57
+ };
58
+ }
59
+ function operatorPath() {
60
+ return path.join(configDir(), "operator.json");
61
+ }
62
+ function loadOperator() {
63
+ const p = operatorPath();
64
+ if (!fs.existsSync(p))
65
+ return null;
66
+ const data = JSON.parse(fs.readFileSync(p, "utf-8"));
67
+ return {
68
+ operator_id: data.operator_id,
69
+ created_at: data.created_at,
70
+ display_name: data.display_name ?? "",
71
+ contact: data.contact ?? "",
72
+ };
73
+ }
74
+ function saveOperator(op) {
75
+ const p = operatorPath();
76
+ fs.writeFileSync(p, JSON.stringify(op, null, 2) + "\n");
77
+ chmod600(p);
78
+ return p;
79
+ }
80
+ function validateName(name) {
81
+ if (!NAME_RE.test(name)) {
82
+ throw new Error(`invalid node name "${name}" — must match [a-z0-9][a-z0-9._-]{0,62}`);
83
+ }
84
+ return name;
85
+ }
86
+ function generateNode(opts) {
87
+ return {
88
+ node_id: (0, node_crypto_1.randomUUID)(),
89
+ operator_id: opts.operator_id,
90
+ name: validateName(opts.name),
91
+ backend_url: opts.backend_url,
92
+ model: opts.model,
93
+ intent: opts.intent ?? "urn:iicp:intent:llm:chat:v1",
94
+ region: opts.region ?? "eu-central",
95
+ directory_url: opts.directory_url ?? "https://iicp.network/api",
96
+ max_concurrent: opts.max_concurrent ?? 4,
97
+ port: opts.port ?? 8020,
98
+ host: opts.host ?? "0.0.0.0",
99
+ public_endpoint: opts.public_endpoint ?? "",
100
+ auto_detect_nat: opts.auto_detect_nat ?? false,
101
+ external_ip_probe_url: opts.external_ip_probe_url ?? "",
102
+ created_at: nowIso(),
103
+ };
104
+ }
105
+ function nodePath(name) {
106
+ return path.join(configDir(), "nodes", `${validateName(name)}.json`);
107
+ }
108
+ function loadNode(name) {
109
+ const p = nodePath(name);
110
+ if (!fs.existsSync(p))
111
+ return null;
112
+ return JSON.parse(fs.readFileSync(p, "utf-8"));
113
+ }
114
+ function saveNode(node) {
115
+ const p = nodePath(node.name);
116
+ fs.writeFileSync(p, JSON.stringify(node, null, 2) + "\n");
117
+ chmod600(p);
118
+ return p;
119
+ }
120
+ function listNodes() {
121
+ const nodesDir = path.join(configDir(), "nodes");
122
+ if (!fs.existsSync(nodesDir))
123
+ return [];
124
+ const out = [];
125
+ const files = fs.readdirSync(nodesDir).filter((f) => f.endsWith(".json")).sort();
126
+ for (const f of files) {
127
+ try {
128
+ out.push(JSON.parse(fs.readFileSync(path.join(nodesDir, f), "utf-8")));
129
+ }
130
+ catch {
131
+ // Malformed — skip
132
+ }
133
+ }
134
+ return out;
135
+ }
136
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":";;AAgCA,8BAQC;AASD,4CAOC;AAED,oCAEC;AAED,oCAUC;AAED,oCAKC;AA2BD,oCAgCC;AAED,4BAEC;AAED,4BAIC;AAED,4BAKC;AAED,8BAaC;AA1KD,sCAAsC;AACtC;;;;;;;;;;;GAWG;AACH,8BAA8B;AAC9B,8BAA8B;AAC9B,kCAAkC;AAClC,6CAAyC;AAEzC,MAAM,OAAO,GAAG,6BAA6B,CAAC;AAE9C,SAAS,MAAM;IACb,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI;QACd,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACrC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,GAAG,CAAC;AACb,CAAC;AASD,SAAgB,gBAAgB,CAAC,OAAoD,EAAE;IACrF,OAAO;QACL,WAAW,EAAE,MAAM,IAAA,wBAAU,GAAE,EAAE;QACjC,UAAU,EAAE,MAAM,EAAE;QACpB,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY;IAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,CAAC;AACjD,CAAC;AAED,SAAgB,YAAY;IAC1B,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrD,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;QACrC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;KAC5B,CAAC;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,EAAoB;IAC/C,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,CAAC,CAAC;AACX,CAAC;AAoBD,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,0CAA0C,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,YAAY,CAAC,IAc5B;IACC,OAAO;QACL,OAAO,EAAE,IAAA,wBAAU,GAAE;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,6BAA6B;QACpD,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,YAAY;QACnC,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,0BAA0B;QAC/D,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC;QACxC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;QAC5B,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,EAAE;QAC3C,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,KAAK;QAC9C,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,IAAI,EAAE;QACvD,UAAU,EAAE,MAAM,EAAE;KACrB,CAAC;AACJ,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvE,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAY;IACnC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAiB,CAAC;AACjE,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAkB;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,QAAQ,CAAC,CAAC,CAAC,CAAC;IACZ,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAiB,CAAC,CAAC;QACzF,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -23,7 +23,7 @@
23
23
  * `nat-upnp` is an optional peer dependency. Without it `detectNat()` returns
24
24
  * tier 4 with a clear "npm install nat-upnp" message instead of crashing.
25
25
  */
26
- /** ADR-043 §4 — IPv6 qualification result (#342). */
26
+ /** ADR-043 §4 — IPv6 qualification result (#342, #343). */
27
27
  export interface Ipv6Profile {
28
28
  globalV6Available: boolean;
29
29
  stableV6Available: boolean;
@@ -32,6 +32,14 @@ export interface Ipv6Profile {
32
32
  listenerV6Ok: boolean;
33
33
  /** Outbound v6 connectivity test result (does NOT prove inbound). */
34
34
  externalV6Reachable: boolean;
35
+ /** ADR-043 §5 — true iff router accepted WANIPv6FirewallControl::AddPinhole. */
36
+ pinholeActive?: boolean;
37
+ /** UPnP UniqueID returned by AddPinhole — pass to deleteIpv6Pinhole() on shutdown. */
38
+ pinholeUniqueId?: number;
39
+ /** Granted lease (seconds). 0 = permanent / refresh required by spec. */
40
+ pinholeLeaseSeconds?: number;
41
+ /** Echoes GetFirewallStatus::InboundPinholeAllowed. */
42
+ pinholeInboundAllowed?: boolean;
35
43
  error?: string;
36
44
  }
37
45
  export interface NatProfile {
@@ -70,11 +78,25 @@ export declare function detectIpv6(bindPort: number, opts?: {
70
78
  probeUrl?: string;
71
79
  timeoutMs?: number;
72
80
  }): Promise<Ipv6Profile>;
81
+ /**
82
+ * Enumerate local GUAs ranked by likelihood-of-being-pinhole-accepted.
83
+ *
84
+ * macOS only has the "secured" vs "temporary" vs "deprecated" flag distinction
85
+ * via `ifconfig` (node:os doesn't expose it). On Linux we fall back to first-
86
+ * GUA-per-interface. AVM FRITZ!Box only authorises AddPinhole for the
87
+ * **current temporary** RFC 4941 address, so on Mac we put those first.
88
+ */
89
+ export declare function rankedGlobalIpv6Candidates(): string[];
73
90
  export interface UpnpResult {
74
91
  success: boolean;
75
92
  externalIp?: string;
93
+ /** Primary external port the IGD actually assigned. Differs from the
94
+ * internal when AddAnyPortMapping was used after a 1:1 conflict. */
76
95
  externalPort?: number;
96
+ /** All internal ports we successfully mapped to SOME external port. */
77
97
  mappedPorts: number[];
98
+ /** internal_port → assigned_external_port. */
99
+ portMapping?: Record<number, number>;
78
100
  igdDevice?: string;
79
101
  error?: string;
80
102
  }
@@ -86,4 +108,40 @@ export declare function probeExternalIp(url: string, timeoutMs?: number): Promis
86
108
  */
87
109
  export declare function looksRoutable(url: string): boolean;
88
110
  export declare function detectCgnat(externalIp: string): Promise<string | null>;
111
+ /**
112
+ * ADR-043 §5 (#343) — open an inbound IPv6 firewall pinhole on the IGD.
113
+ * Returns `{ uniqueId, leaseSeconds, inboundAllowed }` on success, null otherwise.
114
+ *
115
+ * Operators close the pinhole on shutdown via `deleteIpv6Pinhole(uniqueId)`.
116
+ */
117
+ export declare function tryUpnpIpv6Pinhole(internalV6: string, internalPort: number, opts?: {
118
+ leaseSeconds?: number;
119
+ protocol?: number;
120
+ timeoutMs?: number;
121
+ }): Promise<{
122
+ uniqueId: number;
123
+ leaseSeconds: number;
124
+ inboundAllowed: boolean;
125
+ } | null>;
126
+ /**
127
+ * Tier-0 helper — given a (possibly bracketed-IPv6) public endpoint URL,
128
+ * attempt to open an inbound UPnP firewall pinhole on the matching IGD.
129
+ *
130
+ * Ranked-retry behaviour (FRITZ!Box compatibility): if the initial v6 in
131
+ * the URL gets a UPnP error 606, iterate through this host's other GUAs
132
+ * (ranked current-temporary → secured → deprecated) and retry. On success
133
+ * the returned object includes a `rewrittenEndpoint` if a different GUA
134
+ * was needed, so the caller can advertise the actually-pinhole'd address.
135
+ */
136
+ export interface PinholeOpenResult {
137
+ pinholeActive: boolean;
138
+ pinholeUniqueId?: number;
139
+ pinholeLeaseSeconds?: number;
140
+ pinholeInboundAllowed?: boolean;
141
+ rewrittenEndpoint?: string;
142
+ detectionLog: string[];
143
+ }
144
+ export declare function tryOpenV6PinholeForEndpoint(endpoint: string, bindPort: number): Promise<PinholeOpenResult>;
145
+ /** ADR-043 §5 — close a previously-opened IPv6 pinhole. Best-effort. */
146
+ export declare function deleteIpv6Pinhole(uniqueId: number, timeoutMs?: number): Promise<boolean>;
89
147
  //# sourceMappingURL=nat_detection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nat_detection.d.ts","sourceRoot":"","sources":["../src/nat_detection.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0DAA0D;IAC1D,YAAY,EAAE,OAAO,CAAC;IACtB,qEAAqE;IACrE,mBAAmB,EAAE,OAAO,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EACX,QAAQ,GACR,aAAa,GACb,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,GACjB,aAAa,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,WAAW,IAAI,OAAO,CAAC;CACxB;AAaD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoJ3E;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,OAAO,CAAC,WAAW,CAAC,CAwDtB;AAkED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EAAE,EACvB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,UAAU,CAAC,CA2ErB;AAID,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsB3F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAmBlD;AAsCD,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB5E"}
1
+ {"version":3,"file":"nat_detection.d.ts","sourceRoot":"","sources":["../src/nat_detection.ts"],"names":[],"mappings":"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"}