@farm.js/core 0.1.62 → 0.1.63

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.
Files changed (158) hide show
  1. package/dist/{agent-mcp.d-BKZ3UNbt.d.mts → agent-mcp.d-CCQ-wKwg.d.mts} +1 -1
  2. package/dist/{agent-mcp.d-C1zr_nGS.d.ts → agent-mcp.d-DOJCBSh9.d.ts} +1 -1
  3. package/dist/agent-runtime.d.mts +1 -1
  4. package/dist/agent-runtime.d.ts +1 -1
  5. package/dist/analyzer-KEA5JVDR.cjs +15 -0
  6. package/dist/{analyzer-YESYU3GK.mjs → analyzer-WNPQPWFR.mjs} +2 -2
  7. package/dist/api/route-manager.d.mts +3 -3
  8. package/dist/api/route-manager.d.ts +3 -3
  9. package/dist/api/runtime.d.mts +2 -2
  10. package/dist/api/runtime.d.ts +2 -2
  11. package/dist/api.d.mts +3 -3
  12. package/dist/api.d.ts +3 -3
  13. package/dist/{app-manifest.d-ntch_bvA.d.ts → app-manifest.d-BaA0omsv.d.mts} +9 -1
  14. package/dist/{app-manifest.d-BpvhfKRH.d.mts → app-manifest.d-poayV4lq.d.ts} +9 -1
  15. package/dist/app-markdown.d.mts +2 -2
  16. package/dist/app-markdown.d.ts +2 -2
  17. package/dist/{app.d-AE8_v3Db.d.ts → app.d-D4Dn03E3.d.ts} +4 -4
  18. package/dist/{app.d-CysWA_8v.d.mts → app.d-DdWxeIGU.d.mts} +4 -4
  19. package/dist/{chunk-RZNCMRD3.mjs → chunk-4DIKLG56.mjs} +1 -1
  20. package/dist/{chunk-ZVIEFTUA.cjs → chunk-5IKQ7BIR.cjs} +2 -2
  21. package/dist/{chunk-WKJQ2FJA.cjs → chunk-5L7I6AMY.cjs} +3 -3
  22. package/dist/{chunk-VM7X5CKC.mjs → chunk-7FFW7DC4.mjs} +29 -3
  23. package/dist/{chunk-JEJQGZI7.cjs → chunk-ANXU3D32.cjs} +2 -2
  24. package/dist/{chunk-VWW4Q3BJ.mjs → chunk-BA2IA32Q.mjs} +1 -1
  25. package/dist/{chunk-SG57PX7K.cjs → chunk-BTVDYS4B.cjs} +7 -2
  26. package/dist/{chunk-IQIKPKFP.mjs → chunk-CBDRR3J3.mjs} +96 -16
  27. package/dist/{chunk-OUWRNHTV.mjs → chunk-EENTT56C.mjs} +10 -10
  28. package/dist/{chunk-XX32BOMM.cjs → chunk-EYLC6GD6.cjs} +44 -18
  29. package/dist/{chunk-SM25ZC4S.cjs → chunk-FNHN3RBD.cjs} +1 -1
  30. package/dist/{chunk-T46NNU4D.mjs → chunk-GPKBUME5.mjs} +1 -1
  31. package/dist/{chunk-2JYBLE63.mjs → chunk-LA45FN37.mjs} +762 -235
  32. package/dist/chunk-LA6O5EL2.mjs +254 -0
  33. package/dist/{chunk-UWI3SJAK.cjs → chunk-LFFSDZ4Y.cjs} +3 -3
  34. package/dist/chunk-LWWDTBGL.cjs +254 -0
  35. package/dist/{chunk-ZBUAOGMY.mjs → chunk-O5FCWI6O.mjs} +1 -1
  36. package/dist/{chunk-RMUD75WT.cjs → chunk-PVJX4UPA.cjs} +323 -243
  37. package/dist/{chunk-GGNJAGGE.cjs → chunk-QN5WRQSQ.cjs} +971 -444
  38. package/dist/{chunk-NT3QDN2E.mjs → chunk-RFYL5OLP.mjs} +1 -1
  39. package/dist/{chunk-LVWGURLD.mjs → chunk-S2NUYHRY.mjs} +1 -1
  40. package/dist/{chunk-2WZTGPK6.mjs → chunk-SQ5O7I3L.mjs} +7 -2
  41. package/dist/{chunk-545WJ5UG.cjs → chunk-U6WCUVSV.cjs} +2 -2
  42. package/dist/{chunk-2CNKQC3G.mjs → chunk-XICXQXYE.mjs} +1 -1
  43. package/dist/{chunk-AJB3DHN6.cjs → chunk-Y2YBNQ3D.cjs} +2 -2
  44. package/dist/{chunk-EXXFSZOC.cjs → chunk-Z74NNER4.cjs} +86 -86
  45. package/dist/{client-component.d-Bgt3x5Fu.d.ts → client-component.d-CQLvqLAJ.d.ts} +14 -3
  46. package/dist/{client-component.d-BoqC2MLC.d.mts → client-component.d-CSEFlHfG.d.mts} +14 -3
  47. package/dist/{client-plugins.d-CWyYBxXf.d.mts → client-plugins.d-BTF0gZm4.d.mts} +10 -1
  48. package/dist/{client-plugins.d-BcqIy4au.d.ts → client-plugins.d-BgPUYPc9.d.ts} +10 -1
  49. package/dist/client-plugins.d.mts +1 -1
  50. package/dist/client-plugins.d.ts +1 -1
  51. package/dist/client.d.mts +6 -6
  52. package/dist/client.d.ts +6 -6
  53. package/dist/config.d.mts +1 -1
  54. package/dist/config.d.ts +1 -1
  55. package/dist/desktop.d.mts +2 -2
  56. package/dist/desktop.d.ts +2 -2
  57. package/dist/{devtools-NUVXYG7I.mjs → devtools-HDKTYIZF.mjs} +2 -2
  58. package/dist/{devtools-SVRSGPNC.cjs → devtools-ZHN5JLVI.cjs} +3 -3
  59. package/dist/docs.cjs +4 -4
  60. package/dist/docs.d.mts +2 -2
  61. package/dist/docs.d.ts +2 -2
  62. package/dist/docs.mjs +3 -3
  63. package/dist/index.cjs +12 -12
  64. package/dist/{index.d-nAncqTXz.d.ts → index.d-Coow7bD4.d.ts} +1 -1
  65. package/dist/{index.d-BDaiu2i5.d.mts → index.d-Dbjx0ku7.d.mts} +1 -1
  66. package/dist/index.d.mts +16 -16
  67. package/dist/index.d.ts +16 -16
  68. package/dist/index.mjs +11 -11
  69. package/dist/integrations.d.mts +1 -1
  70. package/dist/integrations.d.ts +1 -1
  71. package/dist/internal/app-markdown-runtime.d.mts +2 -2
  72. package/dist/internal/app-markdown-runtime.d.ts +2 -2
  73. package/dist/internal/build-runtime.cjs +13 -13
  74. package/dist/internal/build-runtime.d.mts +3 -3
  75. package/dist/internal/build-runtime.d.ts +3 -3
  76. package/dist/internal/build-runtime.mjs +12 -12
  77. package/dist/internal/cli-runtime.cjs +3 -3
  78. package/dist/internal/cli-runtime.mjs +2 -2
  79. package/dist/internal/client-error-overlay.cjs +4 -4
  80. package/dist/internal/client-error-overlay.mjs +1 -1
  81. package/dist/internal/client-runtime.d.mts +4 -4
  82. package/dist/internal/client-runtime.d.ts +4 -4
  83. package/dist/internal/compression-runtime.d.mts +1 -1
  84. package/dist/internal/compression-runtime.d.ts +1 -1
  85. package/dist/internal/config-runtime.cjs +4 -4
  86. package/dist/internal/config-runtime.d.mts +3 -3
  87. package/dist/internal/config-runtime.d.ts +3 -3
  88. package/dist/internal/config-runtime.mjs +3 -3
  89. package/dist/internal/infra-analytics-runtime.cjs +8 -6
  90. package/dist/internal/infra-analytics-runtime.mjs +6 -4
  91. package/dist/internal/native-server-fns.cjs +4 -4
  92. package/dist/internal/native-server-fns.mjs +3 -3
  93. package/dist/internal/product-telemetry-runtime.cjs +17 -211
  94. package/dist/internal/product-telemetry-runtime.mjs +10 -204
  95. package/dist/internal/production-runtime.cjs +7 -6
  96. package/dist/internal/production-runtime.d.mts +10 -10
  97. package/dist/internal/production-runtime.d.ts +10 -10
  98. package/dist/internal/production-runtime.mjs +7 -6
  99. package/dist/internal/react-cache.cjs +21 -1
  100. package/dist/internal/react-cache.d.mts +8 -1
  101. package/dist/internal/react-cache.d.ts +8 -1
  102. package/dist/internal/react-cache.mjs +21 -1
  103. package/dist/markdown.d.mts +1 -1
  104. package/dist/markdown.d.ts +1 -1
  105. package/dist/middleware.d.mts +3 -3
  106. package/dist/middleware.d.ts +3 -3
  107. package/dist/{navigation-delegate.d-CSCm8ZxL.d.mts → navigation-delegate.d-Ca_BV0Wu.d.mts} +1 -1
  108. package/dist/{navigation-delegate.d-BbUHRXxG.d.ts → navigation-delegate.d-aHiPI6GL.d.ts} +1 -1
  109. package/dist/navigation.d.mts +4 -4
  110. package/dist/navigation.d.ts +4 -4
  111. package/dist/plugin.cjs +7 -7
  112. package/dist/plugin.d.mts +3 -3
  113. package/dist/plugin.d.ts +3 -3
  114. package/dist/plugin.mjs +6 -6
  115. package/dist/{production-runtime.d-DgT24A0f.d.ts → production-runtime.d-C0rF7a10.d.ts} +1 -1
  116. package/dist/{production-runtime.d-CcQiDko5.d.mts → production-runtime.d-CnAsSWgF.d.mts} +1 -1
  117. package/dist/{render-plan.d-CyrX6MDs.d.ts → render-plan.d-BxeITFT1.d.ts} +1 -1
  118. package/dist/{render-plan.d-BH9WF-JZ.d.mts → render-plan.d-Z-93m5GZ.d.mts} +1 -1
  119. package/dist/renderer-client.d.mts +4 -4
  120. package/dist/renderer-client.d.ts +4 -4
  121. package/dist/{request.d-CUrPnCW7.d.mts → request.d-8_fMFNEb.d.mts} +1 -1
  122. package/dist/{request.d-BB8M8bcD.d.ts → request.d-X7Q1vmGF.d.ts} +1 -1
  123. package/dist/request.d.mts +2 -2
  124. package/dist/request.d.ts +2 -2
  125. package/dist/{route-rendering.d-CYxlzaFm.d.mts → route-rendering.d-BInmBmul.d.mts} +1 -1
  126. package/dist/{route-rendering.d-DYqZMIf4.d.ts → route-rendering.d-BUr3Jp8S.d.ts} +1 -1
  127. package/dist/{router.d-7o24CD8u.d.mts → router.d-CZQmbpHx.d.mts} +1 -1
  128. package/dist/{router.d-DaKo507j.d.ts → router.d-crorSRiW.d.ts} +1 -1
  129. package/dist/routes.d.mts +1 -1
  130. package/dist/routes.d.ts +1 -1
  131. package/dist/{rsc-pipeline-RFLHDAKD.mjs → rsc-pipeline-3MPRULGA.mjs} +3 -3
  132. package/dist/{rsc-pipeline-OF2I7PCX.cjs → rsc-pipeline-RHEZNBFQ.cjs} +4 -4
  133. package/dist/{runtime-LBTK62AD.cjs → runtime-OZKFZQCU.cjs} +5 -5
  134. package/dist/{runtime-M6UJCSLA.mjs → runtime-X5UR7VHP.mjs} +3 -3
  135. package/dist/{runtime.d-CN73a-IL.d.ts → runtime.d-CCsjTZJW.d.ts} +1 -1
  136. package/dist/{runtime.d-CcNuzhX6.d.mts → runtime.d-CETtpLb-.d.mts} +1 -1
  137. package/dist/server-plugins.d.mts +2 -2
  138. package/dist/server-plugins.d.ts +2 -2
  139. package/dist/server.cjs +24 -24
  140. package/dist/server.d.mts +9 -9
  141. package/dist/server.d.ts +9 -9
  142. package/dist/server.mjs +9 -9
  143. package/dist/{spa-router.d-Cvgf5QP4.d.ts → spa-router.d-CCADbSqJ.d.ts} +2 -2
  144. package/dist/{spa-router.d-CNi77LZm.d.mts → spa-router.d-CtSHzXlC.d.mts} +2 -2
  145. package/dist/testing.d.mts +1 -1
  146. package/dist/testing.d.ts +1 -1
  147. package/dist/{utils.d-C3H-14_Y.d.ts → utils.d-CjyE-npA.d.ts} +1 -1
  148. package/dist/{utils.d-D8VfzZYn.d.mts → utils.d-zFPHKFFJ.d.mts} +1 -1
  149. package/dist/version.cjs +2 -2
  150. package/dist/version.mjs +1 -1
  151. package/dist/vite.cjs +11 -7
  152. package/dist/vite.d.mts +23 -5
  153. package/dist/vite.d.ts +23 -5
  154. package/dist/vite.mjs +10 -6
  155. package/package.json +1 -1
  156. package/dist/analyzer-2AHWJJR7.cjs +0 -15
  157. package/dist/chunk-CSLUBKGG.mjs +0 -44
  158. package/dist/chunk-SGBNF56S.cjs +0 -44
@@ -0,0 +1,254 @@
1
+ import {
2
+ FARM_VERSION
3
+ } from "./chunk-RFYL5OLP.mjs";
4
+
5
+ // src/deployment-environment.ts
6
+ function isFarmProductionDeploymentEnvironment(env = process.env) {
7
+ const environment = normalizeEnvironment(env.VERCEL_ENV);
8
+ const targetEnvironment = normalizeEnvironment(env.VERCEL_TARGET_ENV);
9
+ if (environment && environment !== "production") return false;
10
+ if (targetEnvironment && targetEnvironment !== "production") return false;
11
+ if (isTrue(env.NETLIFY)) {
12
+ const context = normalizeEnvironment(env.CONTEXT);
13
+ if (context && context !== "production") return false;
14
+ }
15
+ if (isTrue(env.IS_PULL_REQUEST)) return false;
16
+ return true;
17
+ }
18
+ function isFarmPreviewDeploymentEnvironment(env) {
19
+ return resolveFarmPreviewDeployment(env, false);
20
+ }
21
+ function resolveFarmPreviewDeployment(env, builtAsPreview) {
22
+ const explicit = env?.FARM_PREVIEW;
23
+ if (isTrue(explicit)) return true;
24
+ if (isFalse(explicit)) return false;
25
+ if (builtAsPreview || !env) return builtAsPreview;
26
+ if (normalizeEnvironment(env.VERCEL_ENV) === "preview") return true;
27
+ if (isTrue(env.NETLIFY)) {
28
+ const context = normalizeEnvironment(env.CONTEXT);
29
+ if (context === "deploy-preview" || context === "branch-deploy") return true;
30
+ }
31
+ return isTrue(env.IS_PULL_REQUEST);
32
+ }
33
+ function normalizeEnvironment(value) {
34
+ const normalized = value?.trim().toLowerCase();
35
+ return normalized || void 0;
36
+ }
37
+ function isTrue(value) {
38
+ return value !== void 0 && ["1", "true", "yes", "on"].includes(value.toLowerCase());
39
+ }
40
+ function isFalse(value) {
41
+ return value !== void 0 && ["0", "false", "no", "off"].includes(value.toLowerCase());
42
+ }
43
+
44
+ // src/product-telemetry.ts
45
+ var FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION = 1;
46
+ var FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE = "production_site_active";
47
+ var FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME = "@farm.js/core";
48
+ var FARM_PRODUCTION_SITE_ATTESTATION_PATH = "/.well-known/farm-telemetry";
49
+ var FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE = "production_site_attestation";
50
+ var DEFAULT_SITE_TELEMETRY_ENDPOINT = "https://farmjs.dev/api/telemetry/v1/sites";
51
+ var REQUEST_TIMEOUT_MS = 3e3;
52
+ var REPORT_INTERVAL_MS = 24 * 60 * 60 * 1e3;
53
+ var RETRY_INTERVAL_MS = 5 * 60 * 1e3;
54
+ var MAX_ORIGINS_PER_INSTANCE = 32;
55
+ var SAFE_DETAIL_PATTERN = /^[0-9A-Za-z._-]{1,64}$/;
56
+ function detectFarmProductionSiteOrigin(value) {
57
+ try {
58
+ const url = value instanceof URL ? value : new URL(value);
59
+ return normalizeFarmProductionSiteOrigin(url.origin);
60
+ } catch {
61
+ return void 0;
62
+ }
63
+ }
64
+ function normalizeFarmProductionSiteOrigin(value) {
65
+ const candidate = value.trim();
66
+ if (!candidate || candidate.length > 2048) return void 0;
67
+ try {
68
+ const url = new URL(candidate);
69
+ const hostname = url.hostname.toLowerCase();
70
+ const isIpv4 = /^\d{1,3}(?:\.\d{1,3}){3}$/.test(hostname);
71
+ const isIpv6 = hostname.startsWith("[") && hostname.endsWith("]");
72
+ const isLocal = hostname === "localhost" || hostname.endsWith(".localhost") || hostname.endsWith(".local");
73
+ const isSingleLabel = !hostname.includes(".");
74
+ if (url.protocol !== "https:" || url.username || url.password || url.search || url.hash || url.pathname !== "/" || isIpv4 || isIpv6 || isLocal || isSingleLabel || hostname.endsWith(".")) {
75
+ return void 0;
76
+ }
77
+ return url.origin;
78
+ } catch {
79
+ return void 0;
80
+ }
81
+ }
82
+ function createFarmProductionSiteReporter(options) {
83
+ const now = options.now ?? Date.now;
84
+ const reportIntervalMs = options.reportIntervalMs ?? REPORT_INTERVAL_MS;
85
+ const retryIntervalMs = options.retryIntervalMs ?? RETRY_INTERVAL_MS;
86
+ const send = options.fetch ?? globalThis.fetch;
87
+ const reportStates = /* @__PURE__ */ new Map();
88
+ let reportingSkipped;
89
+ const attestation = {
90
+ schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,
91
+ eventType: FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE,
92
+ packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,
93
+ packageVersion: sanitizeDetail(FARM_VERSION, "unknown"),
94
+ renderer: sanitizeDetail(options.renderer, "custom"),
95
+ deployTarget: sanitizeDetail(options.deployTarget, "custom")
96
+ };
97
+ return {
98
+ handleAttestation(request) {
99
+ if (!request.url.includes(FARM_PRODUCTION_SITE_ATTESTATION_PATH)) return null;
100
+ if (productionTelemetryDisabled()) return null;
101
+ let pathname;
102
+ try {
103
+ pathname = new URL(request.url).pathname;
104
+ } catch {
105
+ return null;
106
+ }
107
+ if (pathname !== FARM_PRODUCTION_SITE_ATTESTATION_PATH) return null;
108
+ if (request.method !== "GET" && request.method !== "HEAD") {
109
+ return new Response("Method Not Allowed", {
110
+ status: 405,
111
+ headers: {
112
+ allow: "GET, HEAD",
113
+ "cache-control": "no-store",
114
+ "content-type": "text/plain; charset=utf-8",
115
+ "x-content-type-options": "nosniff"
116
+ }
117
+ });
118
+ }
119
+ return new Response(request.method === "HEAD" ? null : JSON.stringify(attestation), {
120
+ status: 200,
121
+ headers: {
122
+ "cache-control": "no-store",
123
+ "content-type": "application/json; charset=utf-8",
124
+ "x-content-type-options": "nosniff"
125
+ }
126
+ });
127
+ },
128
+ report(requestUrl, waitUntil) {
129
+ if (reportingSkipped === void 0) {
130
+ reportingSkipped = productionTelemetryDisabled() ? "disabled" : isFarmProductionDeploymentEnvironment() ? false : "not-production";
131
+ if (reportingSkipped === "not-production") {
132
+ debug("production-site check-in skipped outside a production deployment");
133
+ }
134
+ }
135
+ if (reportingSkipped) return;
136
+ const siteUrl = detectFarmProductionSiteOrigin(requestUrl);
137
+ if (!siteUrl) return;
138
+ let state = reportStates.get(siteUrl);
139
+ if (!state) {
140
+ if (reportStates.size >= MAX_ORIGINS_PER_INSTANCE) return;
141
+ state = { nextReportAt: 0 };
142
+ reportStates.set(siteUrl, state);
143
+ }
144
+ const attemptedAt = now();
145
+ if (state.pending || attemptedAt < state.nextReportAt) return;
146
+ state.nextReportAt = attemptedAt + reportIntervalMs;
147
+ const payload = {
148
+ schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,
149
+ eventType: FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE,
150
+ siteUrl,
151
+ packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,
152
+ packageVersion: attestation.packageVersion,
153
+ renderer: attestation.renderer,
154
+ deployTarget: attestation.deployTarget
155
+ };
156
+ state.pending = deliver(send, resolveSiteTelemetryEndpoint(options.endpoint), payload).then((delivered) => {
157
+ if (!delivered) state.nextReportAt = now() + retryIntervalMs;
158
+ }).catch(() => {
159
+ state.nextReportAt = now() + retryIntervalMs;
160
+ }).finally(() => {
161
+ state.pending = void 0;
162
+ });
163
+ if (waitUntil) {
164
+ try {
165
+ waitUntil(state.pending);
166
+ } catch {
167
+ }
168
+ } else {
169
+ void state.pending;
170
+ }
171
+ }
172
+ };
173
+ }
174
+ async function deliver(send, endpoint, payload) {
175
+ if (!endpoint) {
176
+ debug("invalid or insecure production-site telemetry endpoint; check-in skipped");
177
+ return false;
178
+ }
179
+ const controller = new AbortController();
180
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
181
+ timeout.unref?.();
182
+ try {
183
+ const response = await send(endpoint, {
184
+ method: "POST",
185
+ headers: { "content-type": "application/json" },
186
+ body: JSON.stringify(payload),
187
+ signal: controller.signal
188
+ });
189
+ if (!response.ok) {
190
+ debug(`production-site check-in rejected with HTTP ${response.status}`);
191
+ return false;
192
+ }
193
+ try {
194
+ const result = await response.json();
195
+ if (result && result.stored === false) {
196
+ debug("production-site check-in was accepted but not stored");
197
+ return false;
198
+ }
199
+ } catch {
200
+ }
201
+ return true;
202
+ } catch {
203
+ debug("production-site check-in failed");
204
+ return false;
205
+ } finally {
206
+ clearTimeout(timeout);
207
+ }
208
+ }
209
+ function resolveSiteTelemetryEndpoint(explicit) {
210
+ const candidate = explicit || process.env.FARM_TELEMETRY_SITE_ENDPOINT;
211
+ if (!candidate) return DEFAULT_SITE_TELEMETRY_ENDPOINT;
212
+ try {
213
+ const url = new URL(candidate);
214
+ const hostname = url.hostname.toLowerCase().replace(/^\[|\]$/g, "");
215
+ const isLocal = ["localhost", "127.0.0.1", "::1"].includes(hostname);
216
+ if (url.protocol === "https:" || url.protocol === "http:" && isLocal) {
217
+ return url.toString();
218
+ }
219
+ } catch {
220
+ }
221
+ return void 0;
222
+ }
223
+ function productionTelemetryDisabled() {
224
+ if (process.env.DO_NOT_TRACK !== void 0 && !isFalse2(process.env.DO_NOT_TRACK)) return true;
225
+ if (isTrue2(process.env.FARM_TELEMETRY_DISABLED)) return true;
226
+ return isFalse2(process.env.FARM_TELEMETRY);
227
+ }
228
+ function sanitizeDetail(value, fallback) {
229
+ return value && SAFE_DETAIL_PATTERN.test(value) ? value : fallback;
230
+ }
231
+ function isTrue2(value) {
232
+ return value !== void 0 && ["1", "true", "yes", "on"].includes(value.toLowerCase());
233
+ }
234
+ function isFalse2(value) {
235
+ return value !== void 0 && ["0", "false", "no", "off"].includes(value.toLowerCase());
236
+ }
237
+ function debug(message) {
238
+ if (!isTrue2(process.env.FARM_TELEMETRY_DEBUG)) return;
239
+ process.stderr.write(`[farm.telemetry] ${message}
240
+ `);
241
+ }
242
+
243
+ export {
244
+ isFarmPreviewDeploymentEnvironment,
245
+ resolveFarmPreviewDeployment,
246
+ FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,
247
+ FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE,
248
+ FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,
249
+ FARM_PRODUCTION_SITE_ATTESTATION_PATH,
250
+ FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE,
251
+ detectFarmProductionSiteOrigin,
252
+ normalizeFarmProductionSiteOrigin,
253
+ createFarmProductionSiteReporter
254
+ };
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
2
 
3
3
 
4
- var _chunkJEJQGZI7cjs = require('./chunk-JEJQGZI7.cjs');
4
+ var _chunkANXU3D32cjs = require('./chunk-ANXU3D32.cjs');
5
5
 
6
6
 
7
7
  var _chunkPIUTGRDIcjs = require('./chunk-PIUTGRDI.cjs');
@@ -64,7 +64,7 @@ function findFarmNativeScreenFiles(appDirs) {
64
64
  }
65
65
  function collectFarmNativeServerFns(options) {
66
66
  const { root, srcDir } = options;
67
- const aliases = _chunkJEJQGZI7cjs.readAliases.call(void 0, root, srcDir);
67
+ const aliases = _chunkANXU3D32cjs.readAliases.call(void 0, root, srcDir);
68
68
  const seen = /* @__PURE__ */ new Set();
69
69
  const found = /* @__PURE__ */ new Map();
70
70
  const queue = [...options.entries];
@@ -98,7 +98,7 @@ function collectFarmNativeServerFns(options) {
98
98
  }
99
99
  }
100
100
  for (const candidate of _nullishCoalesce(candidates, () => ( []))) {
101
- const resolved = _chunkJEJQGZI7cjs.resolveFile.call(void 0, candidate);
101
+ const resolved = _chunkANXU3D32cjs.resolveFile.call(void 0, candidate);
102
102
  if (resolved && SCRIPT.test(resolved) && !resolved.includes(`${_path2.default.sep}node_modules${_path2.default.sep}`)) {
103
103
  queue.push(resolved);
104
104
  break;
@@ -0,0 +1,254 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+ var _chunkFNHN3RBDcjs = require('./chunk-FNHN3RBD.cjs');
4
+
5
+ // src/deployment-environment.ts
6
+ function isFarmProductionDeploymentEnvironment(env = process.env) {
7
+ const environment = normalizeEnvironment(env.VERCEL_ENV);
8
+ const targetEnvironment = normalizeEnvironment(env.VERCEL_TARGET_ENV);
9
+ if (environment && environment !== "production") return false;
10
+ if (targetEnvironment && targetEnvironment !== "production") return false;
11
+ if (isTrue(env.NETLIFY)) {
12
+ const context = normalizeEnvironment(env.CONTEXT);
13
+ if (context && context !== "production") return false;
14
+ }
15
+ if (isTrue(env.IS_PULL_REQUEST)) return false;
16
+ return true;
17
+ }
18
+ function isFarmPreviewDeploymentEnvironment(env) {
19
+ return resolveFarmPreviewDeployment(env, false);
20
+ }
21
+ function resolveFarmPreviewDeployment(env, builtAsPreview) {
22
+ const explicit = _optionalChain([env, 'optionalAccess', _ => _.FARM_PREVIEW]);
23
+ if (isTrue(explicit)) return true;
24
+ if (isFalse(explicit)) return false;
25
+ if (builtAsPreview || !env) return builtAsPreview;
26
+ if (normalizeEnvironment(env.VERCEL_ENV) === "preview") return true;
27
+ if (isTrue(env.NETLIFY)) {
28
+ const context = normalizeEnvironment(env.CONTEXT);
29
+ if (context === "deploy-preview" || context === "branch-deploy") return true;
30
+ }
31
+ return isTrue(env.IS_PULL_REQUEST);
32
+ }
33
+ function normalizeEnvironment(value) {
34
+ const normalized = _optionalChain([value, 'optionalAccess', _2 => _2.trim, 'call', _3 => _3(), 'access', _4 => _4.toLowerCase, 'call', _5 => _5()]);
35
+ return normalized || void 0;
36
+ }
37
+ function isTrue(value) {
38
+ return value !== void 0 && ["1", "true", "yes", "on"].includes(value.toLowerCase());
39
+ }
40
+ function isFalse(value) {
41
+ return value !== void 0 && ["0", "false", "no", "off"].includes(value.toLowerCase());
42
+ }
43
+
44
+ // src/product-telemetry.ts
45
+ var FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION = 1;
46
+ var FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE = "production_site_active";
47
+ var FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME = "@farm.js/core";
48
+ var FARM_PRODUCTION_SITE_ATTESTATION_PATH = "/.well-known/farm-telemetry";
49
+ var FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE = "production_site_attestation";
50
+ var DEFAULT_SITE_TELEMETRY_ENDPOINT = "https://farmjs.dev/api/telemetry/v1/sites";
51
+ var REQUEST_TIMEOUT_MS = 3e3;
52
+ var REPORT_INTERVAL_MS = 24 * 60 * 60 * 1e3;
53
+ var RETRY_INTERVAL_MS = 5 * 60 * 1e3;
54
+ var MAX_ORIGINS_PER_INSTANCE = 32;
55
+ var SAFE_DETAIL_PATTERN = /^[0-9A-Za-z._-]{1,64}$/;
56
+ function detectFarmProductionSiteOrigin(value) {
57
+ try {
58
+ const url = value instanceof URL ? value : new URL(value);
59
+ return normalizeFarmProductionSiteOrigin(url.origin);
60
+ } catch (e) {
61
+ return void 0;
62
+ }
63
+ }
64
+ function normalizeFarmProductionSiteOrigin(value) {
65
+ const candidate = value.trim();
66
+ if (!candidate || candidate.length > 2048) return void 0;
67
+ try {
68
+ const url = new URL(candidate);
69
+ const hostname = url.hostname.toLowerCase();
70
+ const isIpv4 = /^\d{1,3}(?:\.\d{1,3}){3}$/.test(hostname);
71
+ const isIpv6 = hostname.startsWith("[") && hostname.endsWith("]");
72
+ const isLocal = hostname === "localhost" || hostname.endsWith(".localhost") || hostname.endsWith(".local");
73
+ const isSingleLabel = !hostname.includes(".");
74
+ if (url.protocol !== "https:" || url.username || url.password || url.search || url.hash || url.pathname !== "/" || isIpv4 || isIpv6 || isLocal || isSingleLabel || hostname.endsWith(".")) {
75
+ return void 0;
76
+ }
77
+ return url.origin;
78
+ } catch (e2) {
79
+ return void 0;
80
+ }
81
+ }
82
+ function createFarmProductionSiteReporter(options) {
83
+ const now = _nullishCoalesce(options.now, () => ( Date.now));
84
+ const reportIntervalMs = _nullishCoalesce(options.reportIntervalMs, () => ( REPORT_INTERVAL_MS));
85
+ const retryIntervalMs = _nullishCoalesce(options.retryIntervalMs, () => ( RETRY_INTERVAL_MS));
86
+ const send = _nullishCoalesce(options.fetch, () => ( globalThis.fetch));
87
+ const reportStates = /* @__PURE__ */ new Map();
88
+ let reportingSkipped;
89
+ const attestation = {
90
+ schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,
91
+ eventType: FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE,
92
+ packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,
93
+ packageVersion: sanitizeDetail(_chunkFNHN3RBDcjs.FARM_VERSION, "unknown"),
94
+ renderer: sanitizeDetail(options.renderer, "custom"),
95
+ deployTarget: sanitizeDetail(options.deployTarget, "custom")
96
+ };
97
+ return {
98
+ handleAttestation(request) {
99
+ if (!request.url.includes(FARM_PRODUCTION_SITE_ATTESTATION_PATH)) return null;
100
+ if (productionTelemetryDisabled()) return null;
101
+ let pathname;
102
+ try {
103
+ pathname = new URL(request.url).pathname;
104
+ } catch (e3) {
105
+ return null;
106
+ }
107
+ if (pathname !== FARM_PRODUCTION_SITE_ATTESTATION_PATH) return null;
108
+ if (request.method !== "GET" && request.method !== "HEAD") {
109
+ return new Response("Method Not Allowed", {
110
+ status: 405,
111
+ headers: {
112
+ allow: "GET, HEAD",
113
+ "cache-control": "no-store",
114
+ "content-type": "text/plain; charset=utf-8",
115
+ "x-content-type-options": "nosniff"
116
+ }
117
+ });
118
+ }
119
+ return new Response(request.method === "HEAD" ? null : JSON.stringify(attestation), {
120
+ status: 200,
121
+ headers: {
122
+ "cache-control": "no-store",
123
+ "content-type": "application/json; charset=utf-8",
124
+ "x-content-type-options": "nosniff"
125
+ }
126
+ });
127
+ },
128
+ report(requestUrl, waitUntil) {
129
+ if (reportingSkipped === void 0) {
130
+ reportingSkipped = productionTelemetryDisabled() ? "disabled" : isFarmProductionDeploymentEnvironment() ? false : "not-production";
131
+ if (reportingSkipped === "not-production") {
132
+ debug("production-site check-in skipped outside a production deployment");
133
+ }
134
+ }
135
+ if (reportingSkipped) return;
136
+ const siteUrl = detectFarmProductionSiteOrigin(requestUrl);
137
+ if (!siteUrl) return;
138
+ let state = reportStates.get(siteUrl);
139
+ if (!state) {
140
+ if (reportStates.size >= MAX_ORIGINS_PER_INSTANCE) return;
141
+ state = { nextReportAt: 0 };
142
+ reportStates.set(siteUrl, state);
143
+ }
144
+ const attemptedAt = now();
145
+ if (state.pending || attemptedAt < state.nextReportAt) return;
146
+ state.nextReportAt = attemptedAt + reportIntervalMs;
147
+ const payload = {
148
+ schemaVersion: FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION,
149
+ eventType: FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE,
150
+ siteUrl,
151
+ packageName: FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME,
152
+ packageVersion: attestation.packageVersion,
153
+ renderer: attestation.renderer,
154
+ deployTarget: attestation.deployTarget
155
+ };
156
+ state.pending = deliver(send, resolveSiteTelemetryEndpoint(options.endpoint), payload).then((delivered) => {
157
+ if (!delivered) state.nextReportAt = now() + retryIntervalMs;
158
+ }).catch(() => {
159
+ state.nextReportAt = now() + retryIntervalMs;
160
+ }).finally(() => {
161
+ state.pending = void 0;
162
+ });
163
+ if (waitUntil) {
164
+ try {
165
+ waitUntil(state.pending);
166
+ } catch (e4) {
167
+ }
168
+ } else {
169
+ void state.pending;
170
+ }
171
+ }
172
+ };
173
+ }
174
+ async function deliver(send, endpoint, payload) {
175
+ if (!endpoint) {
176
+ debug("invalid or insecure production-site telemetry endpoint; check-in skipped");
177
+ return false;
178
+ }
179
+ const controller = new AbortController();
180
+ const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
181
+ _optionalChain([timeout, 'access', _6 => _6.unref, 'optionalCall', _7 => _7()]);
182
+ try {
183
+ const response = await send(endpoint, {
184
+ method: "POST",
185
+ headers: { "content-type": "application/json" },
186
+ body: JSON.stringify(payload),
187
+ signal: controller.signal
188
+ });
189
+ if (!response.ok) {
190
+ debug(`production-site check-in rejected with HTTP ${response.status}`);
191
+ return false;
192
+ }
193
+ try {
194
+ const result = await response.json();
195
+ if (result && result.stored === false) {
196
+ debug("production-site check-in was accepted but not stored");
197
+ return false;
198
+ }
199
+ } catch (e5) {
200
+ }
201
+ return true;
202
+ } catch (e6) {
203
+ debug("production-site check-in failed");
204
+ return false;
205
+ } finally {
206
+ clearTimeout(timeout);
207
+ }
208
+ }
209
+ function resolveSiteTelemetryEndpoint(explicit) {
210
+ const candidate = explicit || process.env.FARM_TELEMETRY_SITE_ENDPOINT;
211
+ if (!candidate) return DEFAULT_SITE_TELEMETRY_ENDPOINT;
212
+ try {
213
+ const url = new URL(candidate);
214
+ const hostname = url.hostname.toLowerCase().replace(/^\[|\]$/g, "");
215
+ const isLocal = ["localhost", "127.0.0.1", "::1"].includes(hostname);
216
+ if (url.protocol === "https:" || url.protocol === "http:" && isLocal) {
217
+ return url.toString();
218
+ }
219
+ } catch (e7) {
220
+ }
221
+ return void 0;
222
+ }
223
+ function productionTelemetryDisabled() {
224
+ if (process.env.DO_NOT_TRACK !== void 0 && !isFalse2(process.env.DO_NOT_TRACK)) return true;
225
+ if (isTrue2(process.env.FARM_TELEMETRY_DISABLED)) return true;
226
+ return isFalse2(process.env.FARM_TELEMETRY);
227
+ }
228
+ function sanitizeDetail(value, fallback) {
229
+ return value && SAFE_DETAIL_PATTERN.test(value) ? value : fallback;
230
+ }
231
+ function isTrue2(value) {
232
+ return value !== void 0 && ["1", "true", "yes", "on"].includes(value.toLowerCase());
233
+ }
234
+ function isFalse2(value) {
235
+ return value !== void 0 && ["0", "false", "no", "off"].includes(value.toLowerCase());
236
+ }
237
+ function debug(message) {
238
+ if (!isTrue2(process.env.FARM_TELEMETRY_DEBUG)) return;
239
+ process.stderr.write(`[farm.telemetry] ${message}
240
+ `);
241
+ }
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+ exports.isFarmPreviewDeploymentEnvironment = isFarmPreviewDeploymentEnvironment; exports.resolveFarmPreviewDeployment = resolveFarmPreviewDeployment; exports.FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION = FARM_PRODUCTION_SITE_TELEMETRY_SCHEMA_VERSION; exports.FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE = FARM_PRODUCTION_SITE_TELEMETRY_EVENT_TYPE; exports.FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME = FARM_PRODUCTION_SITE_TELEMETRY_PACKAGE_NAME; exports.FARM_PRODUCTION_SITE_ATTESTATION_PATH = FARM_PRODUCTION_SITE_ATTESTATION_PATH; exports.FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE = FARM_PRODUCTION_SITE_ATTESTATION_EVENT_TYPE; exports.detectFarmProductionSiteOrigin = detectFarmProductionSiteOrigin; exports.normalizeFarmProductionSiteOrigin = normalizeFarmProductionSiteOrigin; exports.createFarmProductionSiteReporter = createFarmProductionSiteReporter;
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-FN5UEC7I.mjs";
8
8
  import {
9
9
  resolveDeployOutputPath
10
- } from "./chunk-VWW4Q3BJ.mjs";
10
+ } from "./chunk-BA2IA32Q.mjs";
11
11
  import {
12
12
  farmDesktopDevGuardPlugin,
13
13
  loadFarmReactPlugin