@interfere/next 0.1.0-alpha.11 → 0.1.0-alpha.2

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 (266) hide show
  1. package/README.md +70 -305
  2. package/dist/_virtual/_rolldown/runtime.mjs +11 -5
  3. package/dist/config.d.mts +11 -0
  4. package/dist/config.d.mts.map +1 -0
  5. package/dist/config.mjs +116 -0
  6. package/dist/config.mjs.map +1 -0
  7. package/dist/instrument-client.d.mts +2 -0
  8. package/dist/instrument-client.mjs +2 -0
  9. package/dist/internal/build/configure-build.d.mts +22 -0
  10. package/dist/internal/build/configure-build.d.mts.map +1 -0
  11. package/dist/internal/build/configure-build.mjs +87 -0
  12. package/dist/internal/build/configure-build.mjs.map +1 -0
  13. package/dist/internal/build/injected.d.mts +12 -0
  14. package/dist/internal/build/injected.d.mts.map +1 -0
  15. package/dist/internal/build/injected.mjs +9 -0
  16. package/dist/internal/build/injected.mjs.map +1 -0
  17. package/dist/internal/build/logger.d.mts +8 -0
  18. package/dist/internal/build/logger.d.mts.map +1 -0
  19. package/dist/internal/build/logger.mjs +44 -0
  20. package/dist/internal/build/logger.mjs.map +1 -0
  21. package/dist/internal/build/release/destinations/vercel.d.mts +6 -0
  22. package/dist/internal/build/release/destinations/vercel.d.mts.map +1 -0
  23. package/dist/internal/build/release/destinations/vercel.mjs +25 -0
  24. package/dist/internal/build/release/destinations/vercel.mjs.map +1 -0
  25. package/dist/internal/build/release/git.d.mts +4 -0
  26. package/dist/internal/build/release/git.d.mts.map +1 -0
  27. package/dist/internal/build/release/git.mjs +21 -0
  28. package/dist/internal/build/release/git.mjs.map +1 -0
  29. package/dist/internal/build/release/index.d.mts +7 -0
  30. package/dist/internal/build/release/index.d.mts.map +1 -0
  31. package/dist/internal/build/release/index.mjs +26 -0
  32. package/dist/internal/build/release/index.mjs.map +1 -0
  33. package/dist/internal/build/release/sources/github.d.mts +6 -0
  34. package/dist/internal/build/release/sources/github.d.mts.map +1 -0
  35. package/dist/internal/build/release/sources/github.mjs +15 -0
  36. package/dist/internal/build/release/sources/github.mjs.map +1 -0
  37. package/dist/internal/build/release/types.d.mts +11 -0
  38. package/dist/internal/build/release/types.d.mts.map +1 -0
  39. package/dist/internal/build/release/types.mjs +1 -0
  40. package/dist/internal/build/source-maps/discover.d.mts +14 -0
  41. package/dist/internal/build/source-maps/discover.d.mts.map +1 -0
  42. package/dist/internal/build/source-maps/discover.mjs +61 -0
  43. package/dist/internal/build/source-maps/discover.mjs.map +1 -0
  44. package/dist/internal/build/source-maps/index.d.mts +23 -0
  45. package/dist/internal/build/source-maps/index.d.mts.map +1 -0
  46. package/dist/internal/build/source-maps/index.mjs +33 -0
  47. package/dist/internal/build/source-maps/index.mjs.map +1 -0
  48. package/dist/internal/build/value-injection-loader.d.mts +10 -0
  49. package/dist/internal/build/value-injection-loader.d.mts.map +1 -0
  50. package/dist/internal/build/value-injection-loader.mjs +24 -0
  51. package/dist/internal/build/value-injection-loader.mjs.map +1 -0
  52. package/dist/internal/env.d.mts +15 -0
  53. package/dist/internal/env.d.mts.map +1 -0
  54. package/dist/internal/env.mjs +18 -0
  55. package/dist/internal/env.mjs.map +1 -0
  56. package/dist/internal/route/cors.d.mts +4 -0
  57. package/dist/internal/route/cors.d.mts.map +1 -0
  58. package/dist/internal/route/cors.mjs +15 -0
  59. package/dist/internal/route/cors.mjs.map +1 -0
  60. package/dist/internal/route/handle-get.d.mts +4 -0
  61. package/dist/internal/route/handle-get.d.mts.map +1 -0
  62. package/dist/internal/route/handle-get.mjs +15 -0
  63. package/dist/internal/route/handle-get.mjs.map +1 -0
  64. package/dist/internal/route/handle-post.d.mts +4 -0
  65. package/dist/internal/route/handle-post.d.mts.map +1 -0
  66. package/dist/internal/route/handle-post.mjs +105 -0
  67. package/dist/internal/route/handle-post.mjs.map +1 -0
  68. package/dist/internal/route/sw-script.d.mts +4 -0
  69. package/dist/internal/route/sw-script.d.mts.map +1 -0
  70. package/dist/internal/route/sw-script.mjs +32 -0
  71. package/dist/internal/route/sw-script.mjs.map +1 -0
  72. package/dist/internal/server/capture.d.mts +9 -0
  73. package/dist/internal/server/capture.d.mts.map +1 -0
  74. package/dist/internal/server/capture.mjs +46 -0
  75. package/dist/internal/server/capture.mjs.map +1 -0
  76. package/dist/internal/server/dedupe.d.mts +5 -0
  77. package/dist/internal/server/dedupe.d.mts.map +1 -0
  78. package/dist/internal/server/dedupe.mjs +11 -0
  79. package/dist/internal/server/dedupe.mjs.map +1 -0
  80. package/dist/internal/server/envelope.d.mts +14 -0
  81. package/dist/internal/server/envelope.d.mts.map +1 -0
  82. package/dist/internal/server/envelope.mjs +41 -0
  83. package/dist/internal/server/envelope.mjs.map +1 -0
  84. package/dist/internal/server/mechanisms.d.mts +7 -0
  85. package/dist/internal/server/mechanisms.d.mts.map +1 -0
  86. package/dist/internal/server/mechanisms.mjs +12 -0
  87. package/dist/internal/server/mechanisms.mjs.map +1 -0
  88. package/dist/internal/server/normalize-request.d.mts +7 -0
  89. package/dist/internal/server/normalize-request.d.mts.map +1 -0
  90. package/dist/internal/server/normalize-request.mjs +50 -0
  91. package/dist/internal/server/normalize-request.mjs.map +1 -0
  92. package/dist/internal/server/runtime.d.mts +14 -0
  93. package/dist/internal/server/runtime.d.mts.map +1 -0
  94. package/dist/internal/server/runtime.mjs +18 -0
  95. package/dist/internal/server/runtime.mjs.map +1 -0
  96. package/dist/internal/server/session.d.mts +11 -0
  97. package/dist/internal/server/session.d.mts.map +1 -0
  98. package/dist/internal/server/session.mjs +15 -0
  99. package/dist/internal/server/session.mjs.map +1 -0
  100. package/dist/internal/server/transport.d.mts +12 -0
  101. package/dist/internal/server/transport.d.mts.map +1 -0
  102. package/dist/internal/server/transport.mjs +17 -0
  103. package/dist/internal/server/transport.mjs.map +1 -0
  104. package/dist/internal/server/types.d.mts +17 -0
  105. package/dist/internal/server/types.d.mts.map +1 -0
  106. package/dist/internal/server/types.mjs +1 -0
  107. package/dist/provider.d.mts +2 -0
  108. package/dist/provider.mjs +3 -0
  109. package/dist/route-handler.d.mts +7 -0
  110. package/dist/route-handler.d.mts.map +1 -0
  111. package/dist/route-handler.mjs +18 -0
  112. package/dist/route-handler.mjs.map +1 -0
  113. package/dist/server.d.mts +8 -0
  114. package/dist/server.d.mts.map +1 -0
  115. package/dist/server.mjs +6 -0
  116. package/dist/server.mjs.map +1 -0
  117. package/package.json +52 -84
  118. package/LICENSE +0 -21
  119. package/dist/build/env-config.d.mts +0 -9
  120. package/dist/build/env-config.d.mts.map +0 -1
  121. package/dist/build/env-config.mjs +0 -25
  122. package/dist/build/env-config.mjs.map +0 -1
  123. package/dist/build/exchange-surface.d.mts +0 -9
  124. package/dist/build/exchange-surface.d.mts.map +0 -1
  125. package/dist/build/exchange-surface.mjs +0 -36
  126. package/dist/build/exchange-surface.mjs.map +0 -1
  127. package/dist/build/loaders/value-injection-loader.d.mts +0 -22
  128. package/dist/build/loaders/value-injection-loader.d.mts.map +0 -1
  129. package/dist/build/loaders/value-injection-loader.mjs +0 -35
  130. package/dist/build/loaders/value-injection-loader.mjs.map +0 -1
  131. package/dist/build/logger.d.mts +0 -11
  132. package/dist/build/logger.d.mts.map +0 -1
  133. package/dist/build/logger.mjs +0 -153
  134. package/dist/build/logger.mjs.map +0 -1
  135. package/dist/build/nextjs-version.d.mts +0 -40
  136. package/dist/build/nextjs-version.d.mts.map +0 -1
  137. package/dist/build/nextjs-version.mjs +0 -66
  138. package/dist/build/nextjs-version.mjs.map +0 -1
  139. package/dist/build/release-program.d.mts +0 -21
  140. package/dist/build/release-program.d.mts.map +0 -1
  141. package/dist/build/release-program.mjs +0 -91
  142. package/dist/build/release-program.mjs.map +0 -1
  143. package/dist/build/services/config.service.d.mts +0 -9
  144. package/dist/build/services/config.service.d.mts.map +0 -1
  145. package/dist/build/services/config.service.mjs +0 -8
  146. package/dist/build/services/config.service.mjs.map +0 -1
  147. package/dist/build/services/instrumentation-detection.service.d.mts +0 -19
  148. package/dist/build/services/instrumentation-detection.service.d.mts.map +0 -1
  149. package/dist/build/services/instrumentation-detection.service.mjs +0 -77
  150. package/dist/build/services/instrumentation-detection.service.mjs.map +0 -1
  151. package/dist/build/services/preflight.service.d.mts +0 -18
  152. package/dist/build/services/preflight.service.d.mts.map +0 -1
  153. package/dist/build/services/preflight.service.mjs +0 -67
  154. package/dist/build/services/preflight.service.mjs.map +0 -1
  155. package/dist/build/services/release-api.service.d.mts +0 -11
  156. package/dist/build/services/release-api.service.d.mts.map +0 -1
  157. package/dist/build/services/release-api.service.mjs +0 -9
  158. package/dist/build/services/release-api.service.mjs.map +0 -1
  159. package/dist/build/services/release-identity.service.d.mts +0 -23
  160. package/dist/build/services/release-identity.service.d.mts.map +0 -1
  161. package/dist/build/services/release-identity.service.mjs +0 -61
  162. package/dist/build/services/release-identity.service.mjs.map +0 -1
  163. package/dist/build/services/source-map-failure-cleanup.service.d.mts +0 -11
  164. package/dist/build/services/source-map-failure-cleanup.service.d.mts.map +0 -1
  165. package/dist/build/services/source-map-failure-cleanup.service.mjs +0 -9
  166. package/dist/build/services/source-map-failure-cleanup.service.mjs.map +0 -1
  167. package/dist/build/services/source-map.service.d.mts +0 -20
  168. package/dist/build/services/source-map.service.d.mts.map +0 -1
  169. package/dist/build/services/source-map.service.mjs +0 -56
  170. package/dist/build/services/source-map.service.mjs.map +0 -1
  171. package/dist/build/source-maps/api.d.mts +0 -44
  172. package/dist/build/source-maps/api.d.mts.map +0 -1
  173. package/dist/build/source-maps/api.mjs +0 -64
  174. package/dist/build/source-maps/api.mjs.map +0 -1
  175. package/dist/build/source-maps/client.d.mts +0 -82
  176. package/dist/build/source-maps/client.d.mts.map +0 -1
  177. package/dist/build/source-maps/client.mjs +0 -239
  178. package/dist/build/source-maps/client.mjs.map +0 -1
  179. package/dist/build/source-maps/errors.d.mts +0 -121
  180. package/dist/build/source-maps/errors.d.mts.map +0 -1
  181. package/dist/build/source-maps/errors.mjs +0 -46
  182. package/dist/build/source-maps/errors.mjs.map +0 -1
  183. package/dist/build/source-maps/files.d.mts +0 -35
  184. package/dist/build/source-maps/files.d.mts.map +0 -1
  185. package/dist/build/source-maps/files.mjs +0 -220
  186. package/dist/build/source-maps/files.mjs.map +0 -1
  187. package/dist/build/source-maps/providers/deployment/detector.d.mts +0 -17
  188. package/dist/build/source-maps/providers/deployment/detector.d.mts.map +0 -1
  189. package/dist/build/source-maps/providers/deployment/detector.mjs +0 -20
  190. package/dist/build/source-maps/providers/deployment/detector.mjs.map +0 -1
  191. package/dist/build/source-maps/providers/deployment/types.d.mts +0 -12
  192. package/dist/build/source-maps/providers/deployment/types.d.mts.map +0 -1
  193. package/dist/build/source-maps/providers/deployment/types.mjs +0 -3
  194. package/dist/build/source-maps/providers/deployment/vercel.d.mts +0 -6
  195. package/dist/build/source-maps/providers/deployment/vercel.d.mts.map +0 -1
  196. package/dist/build/source-maps/providers/deployment/vercel.mjs +0 -33
  197. package/dist/build/source-maps/providers/deployment/vercel.mjs.map +0 -1
  198. package/dist/build/source-maps/providers/source-control/detector.d.mts +0 -16
  199. package/dist/build/source-maps/providers/source-control/detector.d.mts.map +0 -1
  200. package/dist/build/source-maps/providers/source-control/detector.mjs +0 -20
  201. package/dist/build/source-maps/providers/source-control/detector.mjs.map +0 -1
  202. package/dist/build/source-maps/providers/source-control/git.d.mts +0 -6
  203. package/dist/build/source-maps/providers/source-control/git.d.mts.map +0 -1
  204. package/dist/build/source-maps/providers/source-control/git.mjs +0 -47
  205. package/dist/build/source-maps/providers/source-control/git.mjs.map +0 -1
  206. package/dist/build/source-maps/providers/source-control/types.d.mts +0 -14
  207. package/dist/build/source-maps/providers/source-control/types.d.mts.map +0 -1
  208. package/dist/build/source-maps/providers/source-control/types.mjs +0 -3
  209. package/dist/build/with-interfere.d.mts +0 -70
  210. package/dist/build/with-interfere.d.mts.map +0 -1
  211. package/dist/build/with-interfere.mjs +0 -182
  212. package/dist/build/with-interfere.mjs.map +0 -1
  213. package/dist/client/auto-init.d.mts +0 -91
  214. package/dist/client/auto-init.d.mts.map +0 -1
  215. package/dist/client/auto-init.mjs +0 -121
  216. package/dist/client/auto-init.mjs.map +0 -1
  217. package/dist/client/client.d.mts +0 -3
  218. package/dist/client/client.mjs +0 -5
  219. package/dist/client/provider.d.mts +0 -22
  220. package/dist/client/provider.d.mts.map +0 -1
  221. package/dist/client/provider.mjs +0 -50
  222. package/dist/client/provider.mjs.map +0 -1
  223. package/dist/lib/env.d.mts +0 -12
  224. package/dist/lib/env.d.mts.map +0 -1
  225. package/dist/lib/env.mjs +0 -17
  226. package/dist/lib/env.mjs.map +0 -1
  227. package/dist/lib/types.d.mts +0 -22
  228. package/dist/lib/types.d.mts.map +0 -1
  229. package/dist/lib/types.mjs +0 -7
  230. package/dist/lib/types.mjs.map +0 -1
  231. package/dist/server/auto-init.d.mts +0 -88
  232. package/dist/server/auto-init.d.mts.map +0 -1
  233. package/dist/server/auto-init.mjs +0 -101
  234. package/dist/server/auto-init.mjs.map +0 -1
  235. package/dist/server/middleware.d.mts +0 -11
  236. package/dist/server/middleware.d.mts.map +0 -1
  237. package/dist/server/middleware.mjs +0 -92
  238. package/dist/server/middleware.mjs.map +0 -1
  239. package/dist/server/on-request-error.d.mts +0 -27
  240. package/dist/server/on-request-error.d.mts.map +0 -1
  241. package/dist/server/on-request-error.mjs +0 -74
  242. package/dist/server/on-request-error.mjs.map +0 -1
  243. package/dist/server/proxy.d.mts +0 -6
  244. package/dist/server/proxy.d.mts.map +0 -1
  245. package/dist/server/proxy.mjs +0 -29
  246. package/dist/server/proxy.mjs.map +0 -1
  247. package/dist/server/route-handler.d.mts +0 -39
  248. package/dist/server/route-handler.d.mts.map +0 -1
  249. package/dist/server/route-handler.mjs +0 -171
  250. package/dist/server/route-handler.mjs.map +0 -1
  251. package/dist/server/sdk.d.mts +0 -96
  252. package/dist/server/sdk.d.mts.map +0 -1
  253. package/dist/server/sdk.mjs +0 -152
  254. package/dist/server/sdk.mjs.map +0 -1
  255. package/dist/server/services/config.service.d.mts +0 -48
  256. package/dist/server/services/config.service.d.mts.map +0 -1
  257. package/dist/server/services/config.service.mjs +0 -67
  258. package/dist/server/services/config.service.mjs.map +0 -1
  259. package/dist/server/services/error-tracking.service.d.mts +0 -19
  260. package/dist/server/services/error-tracking.service.d.mts.map +0 -1
  261. package/dist/server/services/error-tracking.service.mjs +0 -33
  262. package/dist/server/services/error-tracking.service.mjs.map +0 -1
  263. package/dist/server/session-context.d.mts +0 -60
  264. package/dist/server/session-context.d.mts.map +0 -1
  265. package/dist/server/session-context.mjs +0 -62
  266. package/dist/server/session-context.mjs.map +0 -1
@@ -1,239 +0,0 @@
1
- import { NotificationError, TokenRequestError, UploadError } from "./errors.mjs";
2
- import { Effect, pipe } from "effect";
3
- import { batchUploadPathsSchema, sourceMapConfigSchema } from "@interfere/types/data/source-maps";
4
-
5
- //#region src/build/source-maps/client.ts
6
- var SourceMapClient = class {
7
- config;
8
- apiUrl;
9
- apiKey;
10
- surfaceSlug;
11
- fetchImpl;
12
- uploadImpl;
13
- constructor(preflightConfig, apiUrl, options, deps) {
14
- if (!preflightConfig.enabled) throw new Error("Source maps are disabled");
15
- this.config = sourceMapConfigSchema.parse({
16
- ...options,
17
- ...preflightConfig
18
- });
19
- this.apiUrl = apiUrl;
20
- this.apiKey = preflightConfig.apiKey;
21
- this.surfaceSlug = preflightConfig.surface;
22
- this.fetchImpl = deps?.fetch ?? fetch;
23
- this.uploadImpl = deps?.upload ?? (async (...args) => {
24
- const { upload } = await import("@vercel/blob/client");
25
- return upload(...args);
26
- });
27
- }
28
- /**
29
- * Request upload paths for source maps (paths only, no tokens).
30
- * Tokens are generated per-file via the /upload endpoint.
31
- */
32
- requestUploadPaths(releaseSlug, request) {
33
- const { apiUrl, apiKey, config, fetchImpl } = this;
34
- return Effect.gen(function* () {
35
- const url = `${apiUrl}/releases/${releaseSlug}/source-maps/tokens`;
36
- yield* Effect.logDebug("Requesting upload paths", {
37
- releaseSlug,
38
- fileCount: request.files.length
39
- });
40
- const response = yield* Effect.tryPromise({
41
- try: async () => {
42
- const res = await fetchImpl(url, {
43
- method: "POST",
44
- headers: {
45
- "X-API-Key": apiKey,
46
- "Content-Type": "application/json"
47
- },
48
- body: JSON.stringify(request),
49
- signal: AbortSignal.timeout(config.uploadTimeoutMs)
50
- });
51
- if (!res.ok) {
52
- const error = await res.text().catch((e) => e);
53
- throw new TokenRequestError({ message: `POST ${url} failed: ${res.status} ${res.statusText} - ${error.slice(0, 100)}...` });
54
- }
55
- const data = await res.json();
56
- return batchUploadPathsSchema.parse(data);
57
- },
58
- catch: (error) => {
59
- if (error instanceof TokenRequestError) return error;
60
- return new TokenRequestError({ message: String(error) });
61
- }
62
- });
63
- yield* Effect.logDebug("Received upload paths", { pathCount: Object.keys(response.uploadPaths).length });
64
- return response;
65
- });
66
- }
67
- /**
68
- * Upload a source map file using Vercel Blob's secure client upload.
69
- * The server validates auth and issues a path-scoped token via /upload endpoint.
70
- */
71
- uploadFile(releaseSlug, file, uploadInfo) {
72
- const { apiUrl, apiKey, surfaceSlug, uploadImpl } = this;
73
- return Effect.gen(function* () {
74
- yield* Effect.logDebug("Uploading source map", {
75
- path: file.relativePath,
76
- size: file.size
77
- });
78
- const blobUrl = yield* Effect.tryPromise({
79
- try: async () => {
80
- if (!file.content) throw new Error("File content is required for upload");
81
- return (await uploadImpl(uploadInfo.uploadPath, file.content, {
82
- access: "public",
83
- handleUploadUrl: `${apiUrl}/releases/${releaseSlug}/source-maps/upload`,
84
- clientPayload: JSON.stringify({
85
- apiKey,
86
- surfaceSlug
87
- }),
88
- contentType: uploadInfo.contentType
89
- })).url;
90
- },
91
- catch: (cause) => {
92
- return new UploadError({
93
- message: `Upload failed: ${String(cause)}`,
94
- file: file.relativePath,
95
- cause: String(cause)
96
- });
97
- }
98
- });
99
- yield* Effect.logDebug("Upload complete", {
100
- path: file.relativePath,
101
- url: blobUrl
102
- });
103
- return {
104
- relativePath: file.relativePath,
105
- hash: file.hash,
106
- blobUrl
107
- };
108
- });
109
- }
110
- /**
111
- * Upload multiple source maps in parallel using secure client uploads.
112
- * Each upload gets a path-scoped token from the server.
113
- */
114
- uploadBatch(releaseSlug, files, batchPaths) {
115
- const { config } = this;
116
- const uploadFile = this.uploadFile.bind(this);
117
- return Effect.gen(function* () {
118
- const results = yield* Effect.forEach(files, (file) => {
119
- const uploadInfo = batchPaths.uploadPaths[file.relativePath];
120
- if (!uploadInfo) return Effect.fail(new UploadError({
121
- file: file.relativePath,
122
- message: "No upload path found for file"
123
- }));
124
- return uploadFile(releaseSlug, file, uploadInfo);
125
- }, { concurrency: config.concurrency });
126
- yield* Effect.logDebug("Batch upload complete", {
127
- uploaded: results.length,
128
- total: files.length
129
- });
130
- return results;
131
- });
132
- }
133
- /**
134
- * Notify the server that uploads are complete
135
- */
136
- notifyCompletion(releaseSlug, notification) {
137
- const { apiUrl, apiKey, config, fetchImpl } = this;
138
- return Effect.gen(function* () {
139
- const url = `${apiUrl}/releases/${releaseSlug}/source-maps/complete`;
140
- yield* Effect.logDebug("Notifying upload completion", {
141
- releaseSlug,
142
- fileCount: notification.uploadedFiles.length
143
- });
144
- const notifyStart = Date.now();
145
- const response = yield* Effect.tryPromise({
146
- try: async () => {
147
- const processingTimeout = Math.max(config.uploadTimeoutMs * 2, 6e4);
148
- const requestStart = Date.now();
149
- const res = await fetchImpl(url, {
150
- method: "POST",
151
- headers: {
152
- "X-API-Key": apiKey,
153
- "Content-Type": "application/json"
154
- },
155
- body: JSON.stringify(notification),
156
- signal: AbortSignal.timeout(processingTimeout)
157
- });
158
- const requestTime = Date.now() - requestStart;
159
- if (!res.ok) {
160
- const error = await res.text().catch(() => "Unknown error");
161
- throw new NotificationError({
162
- status: res.status,
163
- message: error
164
- });
165
- }
166
- const parseStart = Date.now();
167
- const json = await res.json();
168
- const parseTime = Date.now() - parseStart;
169
- if (typeof json !== "object" || json === null) throw new NotificationError({
170
- status: res.status,
171
- message: "Invalid response format"
172
- });
173
- return {
174
- json,
175
- requestTime,
176
- parseTime,
177
- status: res.status
178
- };
179
- },
180
- catch: (error) => {
181
- if (error instanceof NotificationError) return error;
182
- if (error instanceof Error && error.name === "AbortError") return new NotificationError({ message: `Request timed out after ${config.uploadTimeoutMs * 2}ms` });
183
- return new NotificationError({ message: String(error) });
184
- }
185
- });
186
- yield* Effect.logDebug(`Notification request completed in ${response.requestTime}ms`, { status: response.status });
187
- yield* Effect.logDebug(`Response parsed in ${response.parseTime}ms`);
188
- const notifyTime = Date.now() - notifyStart;
189
- yield* Effect.logDebug(`Server notified of upload completion in ${notifyTime}ms`, {
190
- fileCount: notification.uploadedFiles.length,
191
- processed: response.json.processed ?? "unknown"
192
- });
193
- return response.json;
194
- });
195
- }
196
- /**
197
- * Complete workflow: request paths, upload files with secure tokens, notify completion
198
- *
199
- * Flow:
200
- * 1. Request upload paths from API (paths only, no tokens)
201
- * 2. Upload files using secure client uploads (server issues path-scoped tokens)
202
- * 3. Notify API that uploads are complete for processing
203
- *
204
- * @param sourceMapToGenerated - Mapping from source map filename to generated JS file path
205
- */
206
- uploadSourceMaps(releaseSlug, sourceMapFiles, sourceMapToGenerated) {
207
- const requestUploadPaths = this.requestUploadPaths.bind(this);
208
- const uploadBatch = this.uploadBatch.bind(this);
209
- const notifyCompletion = this.notifyCompletion.bind(this);
210
- return pipe(Effect.gen(function* () {
211
- if (sourceMapFiles.length === 0) {
212
- yield* Effect.logInfo("No source maps to upload");
213
- return {
214
- uploaded: 0,
215
- processed: 0
216
- };
217
- }
218
- const uploadedSourceMaps = yield* uploadBatch(releaseSlug, sourceMapFiles, yield* requestUploadPaths(releaseSlug, {
219
- files: sourceMapFiles.map(({ content, ...file }) => file),
220
- folderPrefix: "source-maps"
221
- }));
222
- const result = yield* notifyCompletion(releaseSlug, {
223
- uploadedFiles: uploadedSourceMaps,
224
- sourceMapToGenerated
225
- });
226
- return {
227
- uploaded: uploadedSourceMaps.length,
228
- processed: result.processed
229
- };
230
- }), Effect.withSpan("source-maps.upload", { attributes: {
231
- releaseSlug,
232
- sourceMapCount: sourceMapFiles.length,
233
- mappingCount: Object.keys(sourceMapToGenerated).length
234
- } }), Effect.tap((result) => Effect.logDebug("Source map upload succeeded", result)));
235
- }
236
- };
237
-
238
- //#endregion
239
- export { SourceMapClient };
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.mjs","names":[],"sources":["../../../src/build/source-maps/client.ts"],"sourcesContent":["import {\n type BatchUploadPaths,\n batchUploadPathsSchema,\n type SourceMapConfig,\n type SourceMapFile,\n sourceMapConfigSchema,\n type UploadedBlob,\n} from \"@interfere/types/data/source-maps\";\n\nimport { Effect, pipe } from \"effect\";\nimport type { upload as vercelBlobUpload } from \"@vercel/blob/client\";\nimport type { PreflightConfig } from \"../../lib/types.js\";\nimport { NotificationError, TokenRequestError, UploadError } from \"./errors.js\";\n\ntype SourceMapFileWithContent = SourceMapFile & {\n content: string;\n};\n\ntype UploadFn = typeof vercelBlobUpload;\n\ntype SourceMapClientDeps = {\n readonly fetch?: typeof fetch;\n readonly upload?: UploadFn;\n};\n\nexport class SourceMapClient {\n private readonly config: SourceMapConfig;\n private readonly apiUrl: string;\n private readonly apiKey: string;\n private readonly surfaceSlug: string;\n private readonly fetchImpl: typeof fetch;\n private readonly uploadImpl: UploadFn;\n\n constructor(\n preflightConfig: PreflightConfig,\n apiUrl: string,\n options?: Partial<SourceMapConfig>,\n deps?: SourceMapClientDeps\n ) {\n if (!preflightConfig.enabled) {\n throw new Error(\"Source maps are disabled\");\n }\n\n this.config = sourceMapConfigSchema.parse({\n ...options,\n ...preflightConfig,\n });\n\n this.apiUrl = apiUrl;\n this.apiKey = preflightConfig.apiKey;\n this.surfaceSlug = preflightConfig.surface;\n this.fetchImpl = deps?.fetch ?? fetch;\n this.uploadImpl =\n deps?.upload ??\n (async (...args) => {\n const { upload } = await import(\"@vercel/blob/client\");\n return upload(...args);\n });\n }\n\n /**\n * Request upload paths for source maps (paths only, no tokens).\n * Tokens are generated per-file via the /upload endpoint.\n */\n requestUploadPaths(\n releaseSlug: string,\n request: { files: SourceMapFile[]; folderPrefix?: string }\n ) {\n const { apiUrl, apiKey, config, fetchImpl } = this;\n\n return Effect.gen(function* () {\n const url = `${apiUrl}/releases/${releaseSlug}/source-maps/tokens`;\n\n yield* Effect.logDebug(\"Requesting upload paths\", {\n releaseSlug,\n fileCount: request.files.length,\n });\n\n const response = yield* Effect.tryPromise({\n try: async () => {\n const res = await fetchImpl(url, {\n method: \"POST\",\n headers: {\n \"X-API-Key\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(request),\n signal: AbortSignal.timeout(config.uploadTimeoutMs),\n });\n\n if (!res.ok) {\n const error = await res.text().catch((e) => e);\n\n throw new TokenRequestError({\n message: `POST ${url} failed: ${res.status} ${res.statusText} - ${error.slice(0, 100)}...`,\n });\n }\n\n const data = await res.json();\n const parsed = batchUploadPathsSchema.parse(data);\n\n return parsed;\n },\n catch: (error) => {\n if (error instanceof TokenRequestError) {\n return error;\n }\n\n return new TokenRequestError({\n message: String(error),\n });\n },\n });\n\n yield* Effect.logDebug(\"Received upload paths\", {\n pathCount: Object.keys(response.uploadPaths).length,\n });\n\n return response;\n });\n }\n\n /**\n * Upload a source map file using Vercel Blob's secure client upload.\n * The server validates auth and issues a path-scoped token via /upload endpoint.\n */\n uploadFile(\n releaseSlug: string,\n file: SourceMapFileWithContent,\n uploadInfo: { uploadPath: string; contentType: string }\n ) {\n const { apiUrl, apiKey, surfaceSlug, uploadImpl } = this;\n\n return Effect.gen(function* () {\n yield* Effect.logDebug(\"Uploading source map\", {\n path: file.relativePath,\n size: file.size,\n });\n\n const blobUrl = yield* Effect.tryPromise({\n try: async () => {\n if (!file.content) {\n throw new Error(\"File content is required for upload\");\n }\n\n const result = await uploadImpl(uploadInfo.uploadPath, file.content, {\n access: \"public\",\n handleUploadUrl: `${apiUrl}/releases/${releaseSlug}/source-maps/upload`,\n clientPayload: JSON.stringify({ apiKey, surfaceSlug }),\n contentType: uploadInfo.contentType,\n });\n\n return result.url;\n },\n catch: (cause) => {\n return new UploadError({\n message: `Upload failed: ${String(cause)}`,\n file: file.relativePath,\n cause: String(cause),\n });\n },\n });\n\n yield* Effect.logDebug(\"Upload complete\", {\n path: file.relativePath,\n url: blobUrl,\n });\n\n return {\n relativePath: file.relativePath,\n hash: file.hash,\n blobUrl,\n };\n });\n }\n\n /**\n * Upload multiple source maps in parallel using secure client uploads.\n * Each upload gets a path-scoped token from the server.\n */\n uploadBatch(\n releaseSlug: string,\n files: SourceMapFileWithContent[],\n batchPaths: BatchUploadPaths\n ) {\n const { config } = this;\n const uploadFile = this.uploadFile.bind(this);\n\n return Effect.gen(function* () {\n // Upload files in parallel with concurrency limit\n const results = yield* Effect.forEach(\n files,\n (file) => {\n const uploadInfo = batchPaths.uploadPaths[file.relativePath];\n if (!uploadInfo) {\n return Effect.fail(\n new UploadError({\n file: file.relativePath,\n message: \"No upload path found for file\",\n })\n );\n }\n return uploadFile(releaseSlug, file, uploadInfo);\n },\n { concurrency: config.concurrency }\n );\n\n // Internal debug – the user‑visible status comes from the build logger\n yield* Effect.logDebug(\"Batch upload complete\", {\n uploaded: results.length,\n total: files.length,\n });\n\n return results;\n });\n }\n\n /**\n * Notify the server that uploads are complete\n */\n notifyCompletion(\n releaseSlug: string,\n notification: {\n uploadedFiles: UploadedBlob[];\n sourceMapToGenerated?: Record<string, string>;\n }\n ) {\n const { apiUrl, apiKey, config, fetchImpl } = this;\n\n return Effect.gen(function* () {\n const url = `${apiUrl}/releases/${releaseSlug}/source-maps/complete`;\n\n yield* Effect.logDebug(\"Notifying upload completion\", {\n releaseSlug,\n fileCount: notification.uploadedFiles.length,\n });\n\n const notifyStart = Date.now();\n const response = yield* Effect.tryPromise({\n try: async () => {\n // Use a longer timeout for processing notification since it can take time\n const processingTimeout = Math.max(config.uploadTimeoutMs * 2, 60_000);\n \n const requestStart = Date.now();\n const res = await fetchImpl(url, {\n method: \"POST\",\n headers: {\n \"X-API-Key\": apiKey,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(notification),\n signal: AbortSignal.timeout(processingTimeout),\n });\n const requestTime = Date.now() - requestStart;\n\n if (!res.ok) {\n const error = await res.text().catch(() => \"Unknown error\");\n throw new NotificationError({\n status: res.status,\n message: error,\n });\n }\n\n const parseStart = Date.now();\n const json = await res.json();\n const parseTime = Date.now() - parseStart;\n \n // Validate response has expected shape\n if (typeof json !== \"object\" || json === null) {\n throw new NotificationError({\n status: res.status,\n message: \"Invalid response format\",\n });\n }\n\n return { json, requestTime, parseTime, status: res.status };\n },\n catch: (error) => {\n if (error instanceof NotificationError) {\n return error;\n }\n \n // Handle timeout/abort errors\n if (error instanceof Error && error.name === \"AbortError\") {\n return new NotificationError({\n message: `Request timed out after ${config.uploadTimeoutMs * 2}ms`,\n });\n }\n \n return new NotificationError({\n message: String(error),\n });\n },\n });\n\n yield* Effect.logDebug(`Notification request completed in ${response.requestTime}ms`, {\n status: response.status,\n });\n yield* Effect.logDebug(`Response parsed in ${response.parseTime}ms`);\n\n const notifyTime = Date.now() - notifyStart;\n yield* Effect.logDebug(`Server notified of upload completion in ${notifyTime}ms`, {\n fileCount: notification.uploadedFiles.length,\n processed: response.json.processed ?? \"unknown\",\n });\n\n return response.json;\n });\n }\n\n /**\n * Complete workflow: request paths, upload files with secure tokens, notify completion\n *\n * Flow:\n * 1. Request upload paths from API (paths only, no tokens)\n * 2. Upload files using secure client uploads (server issues path-scoped tokens)\n * 3. Notify API that uploads are complete for processing\n * \n * @param sourceMapToGenerated - Mapping from source map filename to generated JS file path\n */\n uploadSourceMaps(\n releaseSlug: string,\n sourceMapFiles: SourceMapFileWithContent[],\n sourceMapToGenerated: Record<string, string>\n ) {\n const requestUploadPaths = this.requestUploadPaths.bind(this);\n const uploadBatch = this.uploadBatch.bind(this);\n const notifyCompletion = this.notifyCompletion.bind(this);\n\n return pipe(\n Effect.gen(function* () {\n if (sourceMapFiles.length === 0) {\n yield* Effect.logInfo(\"No source maps to upload\");\n return { uploaded: 0, processed: 0 };\n }\n\n // Step 1: Request upload paths for source maps (only send metadata, not content)\n const sourceMapPaths = yield* requestUploadPaths(releaseSlug, {\n files: sourceMapFiles.map(({ content, ...file }) => file),\n folderPrefix: \"source-maps\",\n });\n\n // Step 2: Upload source maps in parallel with secure client uploads\n // Each upload gets a path-scoped token from the /upload endpoint\n const uploadedSourceMaps = yield* uploadBatch(\n releaseSlug,\n sourceMapFiles,\n sourceMapPaths\n );\n\n // Step 3: Notify completion with source map to generated file mapping\n // (JS files are not uploaded, but we send the mapping for processing)\n const result = yield* notifyCompletion(releaseSlug, {\n uploadedFiles: uploadedSourceMaps,\n sourceMapToGenerated,\n });\n\n return {\n uploaded: uploadedSourceMaps.length,\n processed: result.processed,\n };\n }),\n Effect.withSpan(\"source-maps.upload\", {\n attributes: {\n releaseSlug,\n sourceMapCount: sourceMapFiles.length,\n mappingCount: Object.keys(sourceMapToGenerated).length,\n },\n }),\n // Let the outer releaseProgram own failure logging so we don't\n // print a separate top-level error line before the buffered\n // \"Failed to upload source maps\" block.\n Effect.tap((result) =>\n Effect.logDebug(\"Source map upload succeeded\", result)\n )\n );\n }\n}\n"],"mappings":"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"}
@@ -1,121 +0,0 @@
1
- import { Schema } from "effect";
2
-
3
- //#region src/build/source-maps/errors.d.ts
4
- declare const InvalidApiUrlError_base: Schema.TaggedErrorClass<InvalidApiUrlError, "InvalidApiUrlError", {
5
- readonly _tag: Schema.tag<"InvalidApiUrlError">;
6
- } & {
7
- message: typeof Schema.String;
8
- }>;
9
- declare class InvalidApiUrlError extends InvalidApiUrlError_base {}
10
- declare const MissingApiKeyError_base: Schema.TaggedErrorClass<MissingApiKeyError, "MissingApiKeyError", {
11
- readonly _tag: Schema.tag<"MissingApiKeyError">;
12
- } & {
13
- message: typeof Schema.String;
14
- }>;
15
- declare class MissingApiKeyError extends MissingApiKeyError_base {}
16
- declare const MissingSurfaceSlugError_base: Schema.TaggedErrorClass<MissingSurfaceSlugError, "MissingSurfaceSlugError", {
17
- readonly _tag: Schema.tag<"MissingSurfaceSlugError">;
18
- } & {
19
- message: typeof Schema.String;
20
- }>;
21
- declare class MissingSurfaceSlugError extends MissingSurfaceSlugError_base {}
22
- declare const UploadError_base: Schema.TaggedErrorClass<UploadError, "UploadError", {
23
- readonly _tag: Schema.tag<"UploadError">;
24
- } & {
25
- message: typeof Schema.String;
26
- file: Schema.optional<typeof Schema.String>;
27
- cause: Schema.optional<typeof Schema.Defect>;
28
- }>;
29
- declare class UploadError extends UploadError_base {}
30
- declare const TokenRequestError_base: Schema.TaggedErrorClass<TokenRequestError, "TokenRequestError", {
31
- readonly _tag: Schema.tag<"TokenRequestError">;
32
- } & {
33
- message: typeof Schema.String;
34
- }>;
35
- declare class TokenRequestError extends TokenRequestError_base {}
36
- declare const NotificationError_base: Schema.TaggedErrorClass<NotificationError, "NotificationError", {
37
- readonly _tag: Schema.tag<"NotificationError">;
38
- } & {
39
- message: typeof Schema.String;
40
- status: Schema.optional<typeof Schema.Number>;
41
- }>;
42
- declare class NotificationError extends NotificationError_base {}
43
- declare const PayloadTooLargeError_base: Schema.TaggedErrorClass<PayloadTooLargeError, "PayloadTooLargeError", {
44
- readonly _tag: Schema.tag<"PayloadTooLargeError">;
45
- } & {
46
- message: typeof Schema.String;
47
- }>;
48
- declare class PayloadTooLargeError extends PayloadTooLargeError_base {}
49
- declare const NoDeploymentError_base: Schema.TaggedErrorClass<NoDeploymentError, "NoDeploymentError", {
50
- readonly _tag: Schema.tag<"NoDeploymentError">;
51
- } & {
52
- message: typeof Schema.String;
53
- }>;
54
- declare class NoDeploymentError extends NoDeploymentError_base {}
55
- declare const NoBuildIdError_base: Schema.TaggedErrorClass<NoBuildIdError, "NoBuildIdError", {
56
- readonly _tag: Schema.tag<"NoBuildIdError">;
57
- } & {
58
- message: typeof Schema.String;
59
- }>;
60
- declare class NoBuildIdError extends NoBuildIdError_base {}
61
- declare const WithInterfereUsageError_base: Schema.TaggedErrorClass<WithInterfereUsageError, "WithInterfereUsageError", {
62
- readonly _tag: Schema.tag<"WithInterfereUsageError">;
63
- } & {
64
- message: typeof Schema.String;
65
- }>;
66
- declare class WithInterfereUsageError extends WithInterfereUsageError_base {}
67
- declare const ExchangeFailedError_base: Schema.TaggedErrorClass<ExchangeFailedError, "ExchangeFailedError", {
68
- readonly _tag: Schema.tag<"ExchangeFailedError">;
69
- } & {
70
- message: typeof Schema.String;
71
- cause: Schema.optional<typeof Schema.Unknown>;
72
- }>;
73
- declare class ExchangeFailedError extends ExchangeFailedError_base {}
74
- declare const MissingBuildIdError_base: Schema.TaggedErrorClass<MissingBuildIdError, "MissingBuildIdError", {
75
- readonly _tag: Schema.tag<"MissingBuildIdError">;
76
- } & {
77
- message: typeof Schema.String;
78
- }>;
79
- declare class MissingBuildIdError extends MissingBuildIdError_base {}
80
- declare const MissingReleaseIdError_base: Schema.TaggedErrorClass<MissingReleaseIdError, "MissingReleaseIdError", {
81
- readonly _tag: Schema.tag<"MissingReleaseIdError">;
82
- } & {
83
- message: typeof Schema.String;
84
- }>;
85
- declare class MissingReleaseIdError extends MissingReleaseIdError_base {}
86
- declare const FileReadError_base: Schema.TaggedErrorClass<FileReadError, "FileReadError", {
87
- readonly _tag: Schema.tag<"FileReadError">;
88
- } & {
89
- message: typeof Schema.String;
90
- path: typeof Schema.String;
91
- }>;
92
- declare class FileReadError extends FileReadError_base {}
93
- declare const FileGlobError_base: Schema.TaggedErrorClass<FileGlobError, "FileGlobError", {
94
- readonly _tag: Schema.tag<"FileGlobError">;
95
- } & {
96
- message: typeof Schema.String;
97
- pattern: typeof Schema.String;
98
- }>;
99
- declare class FileGlobError extends FileGlobError_base {}
100
- declare const FileDeleteError_base: Schema.TaggedErrorClass<FileDeleteError, "FileDeleteError", {
101
- readonly _tag: Schema.tag<"FileDeleteError">;
102
- } & {
103
- message: typeof Schema.String;
104
- path: typeof Schema.String;
105
- }>;
106
- declare class FileDeleteError extends FileDeleteError_base {}
107
- declare const FileHashError_base: Schema.TaggedErrorClass<FileHashError, "FileHashError", {
108
- readonly _tag: Schema.tag<"FileHashError">;
109
- } & {
110
- message: typeof Schema.String;
111
- path: typeof Schema.String;
112
- }>;
113
- declare class FileHashError extends FileHashError_base {}
114
- declare const SourceControlDetectionError_base: Schema.TaggedErrorClass<SourceControlDetectionError, "SourceControlDetectionError", {
115
- readonly _tag: Schema.tag<"SourceControlDetectionError">;
116
- } & {
117
- message: typeof Schema.String;
118
- }>;
119
- declare class SourceControlDetectionError extends SourceControlDetectionError_base {}
120
- //#endregion
121
- export { ExchangeFailedError, FileDeleteError, FileGlobError, FileHashError, FileReadError, InvalidApiUrlError, MissingApiKeyError, MissingBuildIdError, MissingReleaseIdError, MissingSurfaceSlugError, NoBuildIdError, NoDeploymentError, NotificationError, PayloadTooLargeError, SourceControlDetectionError, TokenRequestError, UploadError, WithInterfereUsageError };
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.mts","names":[],"sources":["../../../src/build/source-maps/errors.ts"],"mappings":";;;cAAgC,uBAAA;;;;;cAEnB,kBAAA,SAA2B,uBAAA;AAAA,cAKpC,uBAAA;;;;;cAES,kBAAA,SAA2B,uBAAA;AAAA,cAKpC,4BAAA;;;;;cAES,uBAAA,SAAgC,4BAAA;AAAA,cAKzC,gBAAA;;;;;;;cAES,WAAA,SAAoB,gBAAA;AAAA,cAO7B,sBAAA;;;;;cAES,iBAAA,SAA0B,sBAAA;AAAA,cAKnC,sBAAA;;;;;;cAES,iBAAA,SAA0B,sBAAA;AAAA,cAMnC,yBAAA;;;;;cAES,oBAAA,SAA6B,yBAAA;AAAA,cAKtC,sBAAA;;;;;cAES,iBAAA,SAA0B,sBAAA;AAAA,cAKnC,mBAAA;;;;;cAES,cAAA,SAAuB,mBAAA;AAAA,cAKhC,4BAAA;;;;;cAES,uBAAA,SAAgC,4BAAA;AAAA,cAKzC,wBAAA;;;;;;cAES,mBAAA,SAA4B,wBAAA;AAAA,cAMrC,wBAAA;;;;;cAES,mBAAA,SAA4B,wBAAA;AAAA,cAKrC,0BAAA;;;;;cAES,qBAAA,SAA8B,0BAAA;AAAA,cAKvC,kBAAA;;;;;;cAES,aAAA,SAAsB,kBAAA;AAAA,cAM/B,kBAAA;;;;;;cAES,aAAA,SAAsB,kBAAA;AAAA,cAM/B,oBAAA;;;;;;cAES,eAAA,SAAwB,oBAAA;AAAA,cAMjC,kBAAA;;;;;;cAES,aAAA,SAAsB,kBAAA;AAAA,cAM/B,gCAAA;;;;;cAES,2BAAA,SAAoC,gCAAA"}
@@ -1,46 +0,0 @@
1
- import { Schema } from "effect";
2
-
3
- //#region src/build/source-maps/errors.ts
4
- var InvalidApiUrlError = class extends Schema.TaggedError()("InvalidApiUrlError", { message: Schema.String }) {};
5
- var MissingApiKeyError = class extends Schema.TaggedError()("MissingApiKeyError", { message: Schema.String }) {};
6
- var MissingSurfaceSlugError = class extends Schema.TaggedError()("MissingSurfaceSlugError", { message: Schema.String }) {};
7
- var UploadError = class extends Schema.TaggedError()("UploadError", {
8
- message: Schema.String,
9
- file: Schema.optional(Schema.String),
10
- cause: Schema.optional(Schema.Defect)
11
- }) {};
12
- var TokenRequestError = class extends Schema.TaggedError()("TokenRequestError", { message: Schema.String }) {};
13
- var NotificationError = class extends Schema.TaggedError()("NotificationError", {
14
- message: Schema.String,
15
- status: Schema.optional(Schema.Number)
16
- }) {};
17
- var PayloadTooLargeError = class extends Schema.TaggedError()("PayloadTooLargeError", { message: Schema.String }) {};
18
- var NoDeploymentError = class extends Schema.TaggedError()("NoDeploymentError", { message: Schema.String }) {};
19
- var NoBuildIdError = class extends Schema.TaggedError()("NoBuildIdError", { message: Schema.String }) {};
20
- var WithInterfereUsageError = class extends Schema.TaggedError()("WithInterfereUsageError", { message: Schema.String }) {};
21
- var ExchangeFailedError = class extends Schema.TaggedError()("ExchangeFailedError", {
22
- message: Schema.String,
23
- cause: Schema.optional(Schema.Unknown)
24
- }) {};
25
- var MissingBuildIdError = class extends Schema.TaggedError()("MissingBuildIdError", { message: Schema.String }) {};
26
- var MissingReleaseIdError = class extends Schema.TaggedError()("MissingReleaseIdError", { message: Schema.String }) {};
27
- var FileReadError = class extends Schema.TaggedError()("FileReadError", {
28
- message: Schema.String,
29
- path: Schema.String
30
- }) {};
31
- var FileGlobError = class extends Schema.TaggedError()("FileGlobError", {
32
- message: Schema.String,
33
- pattern: Schema.String
34
- }) {};
35
- var FileDeleteError = class extends Schema.TaggedError()("FileDeleteError", {
36
- message: Schema.String,
37
- path: Schema.String
38
- }) {};
39
- var FileHashError = class extends Schema.TaggedError()("FileHashError", {
40
- message: Schema.String,
41
- path: Schema.String
42
- }) {};
43
- var SourceControlDetectionError = class extends Schema.TaggedError()("SourceControlDetectionError", { message: Schema.String }) {};
44
-
45
- //#endregion
46
- export { ExchangeFailedError, FileDeleteError, FileGlobError, FileHashError, FileReadError, InvalidApiUrlError, MissingApiKeyError, MissingBuildIdError, MissingReleaseIdError, MissingSurfaceSlugError, NoBuildIdError, NoDeploymentError, NotificationError, PayloadTooLargeError, SourceControlDetectionError, TokenRequestError, UploadError, WithInterfereUsageError };
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.mjs","names":[],"sources":["../../../src/build/source-maps/errors.ts"],"sourcesContent":["import { Schema } from \"effect\";\n\nexport class InvalidApiUrlError extends Schema.TaggedError<InvalidApiUrlError>()(\n \"InvalidApiUrlError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class MissingApiKeyError extends Schema.TaggedError<MissingApiKeyError>()(\n \"MissingApiKeyError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class MissingSurfaceSlugError extends Schema.TaggedError<MissingSurfaceSlugError>()(\n \"MissingSurfaceSlugError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class UploadError extends Schema.TaggedError<UploadError>()(\n \"UploadError\",\n {\n message: Schema.String,\n file: Schema.optional(Schema.String),\n cause: Schema.optional(Schema.Defect),\n }\n) {}\n\nexport class TokenRequestError extends Schema.TaggedError<TokenRequestError>()(\n \"TokenRequestError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class NotificationError extends Schema.TaggedError<NotificationError>()(\n \"NotificationError\",\n {\n message: Schema.String,\n status: Schema.optional(Schema.Number),\n }\n) {}\n\nexport class PayloadTooLargeError extends Schema.TaggedError<PayloadTooLargeError>()(\n \"PayloadTooLargeError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class NoDeploymentError extends Schema.TaggedError<NoDeploymentError>()(\n \"NoDeploymentError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class NoBuildIdError extends Schema.TaggedError<NoBuildIdError>()(\n \"NoBuildIdError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class WithInterfereUsageError extends Schema.TaggedError<WithInterfereUsageError>()(\n \"WithInterfereUsageError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class ExchangeFailedError extends Schema.TaggedError<ExchangeFailedError>()(\n \"ExchangeFailedError\",\n {\n message: Schema.String,\n cause: Schema.optional(Schema.Unknown),\n }\n) {}\n\nexport class MissingBuildIdError extends Schema.TaggedError<MissingBuildIdError>()(\n \"MissingBuildIdError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class MissingReleaseIdError extends Schema.TaggedError<MissingReleaseIdError>()(\n \"MissingReleaseIdError\",\n {\n message: Schema.String,\n }\n) {}\n\nexport class FileReadError extends Schema.TaggedError<FileReadError>()(\n \"FileReadError\",\n {\n message: Schema.String,\n path: Schema.String,\n }\n) {}\n\nexport class FileGlobError extends Schema.TaggedError<FileGlobError>()(\n \"FileGlobError\",\n {\n message: Schema.String,\n pattern: Schema.String,\n }\n) {}\n\nexport class FileDeleteError extends Schema.TaggedError<FileDeleteError>()(\n \"FileDeleteError\",\n {\n message: Schema.String,\n path: Schema.String,\n }\n) {}\n\nexport class FileHashError extends Schema.TaggedError<FileHashError>()(\n \"FileHashError\",\n {\n message: Schema.String,\n path: Schema.String,\n }\n) {}\n\nexport class SourceControlDetectionError extends Schema.TaggedError<SourceControlDetectionError>()(\n \"SourceControlDetectionError\",\n {\n message: Schema.String,\n }\n) {}\n"],"mappings":";;;AAEA,IAAa,qBAAb,cAAwC,OAAO,aAAiC,CAC9E,sBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,qBAAb,cAAwC,OAAO,aAAiC,CAC9E,sBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,0BAAb,cAA6C,OAAO,aAAsC,CACxF,2BACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,cAAb,cAAiC,OAAO,aAA0B,CAChE,eACA;CACE,SAAS,OAAO;CAChB,MAAM,OAAO,SAAS,OAAO,OAAO;CACpC,OAAO,OAAO,SAAS,OAAO,OAAO;CACtC,CACF,CAAC;AAEF,IAAa,oBAAb,cAAuC,OAAO,aAAgC,CAC5E,qBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,oBAAb,cAAuC,OAAO,aAAgC,CAC5E,qBACA;CACE,SAAS,OAAO;CAChB,QAAQ,OAAO,SAAS,OAAO,OAAO;CACvC,CACF,CAAC;AAEF,IAAa,uBAAb,cAA0C,OAAO,aAAmC,CAClF,wBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,oBAAb,cAAuC,OAAO,aAAgC,CAC5E,qBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,iBAAb,cAAoC,OAAO,aAA6B,CACtE,kBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,0BAAb,cAA6C,OAAO,aAAsC,CACxF,2BACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,sBAAb,cAAyC,OAAO,aAAkC,CAChF,uBACA;CACE,SAAS,OAAO;CAChB,OAAO,OAAO,SAAS,OAAO,QAAQ;CACvC,CACF,CAAC;AAEF,IAAa,sBAAb,cAAyC,OAAO,aAAkC,CAChF,uBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,wBAAb,cAA2C,OAAO,aAAoC,CACpF,yBACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC;AAEF,IAAa,gBAAb,cAAmC,OAAO,aAA4B,CACpE,iBACA;CACE,SAAS,OAAO;CAChB,MAAM,OAAO;CACd,CACF,CAAC;AAEF,IAAa,gBAAb,cAAmC,OAAO,aAA4B,CACpE,iBACA;CACE,SAAS,OAAO;CAChB,SAAS,OAAO;CACjB,CACF,CAAC;AAEF,IAAa,kBAAb,cAAqC,OAAO,aAA8B,CACxE,mBACA;CACE,SAAS,OAAO;CAChB,MAAM,OAAO;CACd,CACF,CAAC;AAEF,IAAa,gBAAb,cAAmC,OAAO,aAA4B,CACpE,iBACA;CACE,SAAS,OAAO;CAChB,MAAM,OAAO;CACd,CACF,CAAC;AAEF,IAAa,8BAAb,cAAiD,OAAO,aAA0C,CAChG,+BACA,EACE,SAAS,OAAO,QACjB,CACF,CAAC"}
@@ -1,35 +0,0 @@
1
- import { FileDeleteError, FileGlobError, FileHashError, FileReadError } from "./errors.mjs";
2
- import { Effect } from "effect";
3
-
4
- //#region src/build/source-maps/files.d.ts
5
- declare function findSourceMapFiles(): Effect.Effect<string[], FileGlobError, never>;
6
- declare function readSourceMapsFromFiles(paths: string[]): Effect.Effect<{
7
- relativePath: string;
8
- content: string;
9
- hash: string;
10
- }[], FileReadError | FileHashError, never>;
11
- declare function cleanupSourceMaps(paths: string[], debug: boolean): Effect.Effect<void, never, never> | Effect.Effect<undefined, FileDeleteError, never>;
12
- declare const maybeCleanupAfterFailure: (debug: boolean) => Effect.Effect<void, FileGlobError | FileDeleteError, never>;
13
- /**
14
- * Find all generated JavaScript files (excluding source maps)
15
- */
16
- declare function findGeneratedJsFiles(): Effect.Effect<string[], FileGlobError, never>;
17
- /**
18
- * Read generated JS files and extract sourceMappingURL to build a mapping.
19
- * Returns a map: sourceMapFilename -> generatedJsFilePath
20
- *
21
- * Both keys and values are in public URL format (_next/...) to match
22
- * what appears in error stack traces, making the backend framework-agnostic.
23
- */
24
- declare function buildSourceMapToGeneratedMapping(paths: string[]): Effect.Effect<Record<string, string>, FileReadError, never>;
25
- /**
26
- * Read generated JS files from disk
27
- * @deprecated Use buildSourceMapToGeneratedMapping instead - we no longer upload JS files
28
- */
29
- declare function readGeneratedJsFiles(paths: string[]): Effect.Effect<{
30
- relativePath: string;
31
- content: string;
32
- hash: string;
33
- }[], FileReadError | FileHashError, never>;
34
- //#endregion
35
- export { buildSourceMapToGeneratedMapping, cleanupSourceMaps, findGeneratedJsFiles, findSourceMapFiles, maybeCleanupAfterFailure, readGeneratedJsFiles, readSourceMapsFromFiles };
@@ -1 +0,0 @@
1
- {"version":3,"file":"files.d.mts","names":[],"sources":["../../../src/build/source-maps/files.ts"],"mappings":";;;;iBAqBgB,kBAAA,CAAA,GAAkB,MAAA,CAAA,MAAA,WAAA,aAAA;AAAA,iBAclB,uBAAA,CAAwB,KAAA,aAAe,MAAA,CAAA,MAAA;;;;;iBAmCvC,iBAAA,CAAkB,KAAA,YAAiB,KAAA,YAAc,MAAA,CAAA,MAAA,uBAAA,MAAA,CAAA,MAAA,YAAA,eAAA;AAAA,cAuDpD,wBAAA,GAAwB,KAAA,cAAA,MAAA,CAAA,MAAA,OAAA,aAAA,GAAA,eAAA;;;;iBAarB,oBAAA,CAAA,GAAoB,MAAA,CAAA,MAAA,WAAA,aAAA;;;;;;;;iBA2HpB,gCAAA,CAAiC,KAAA,aAAe,MAAA,CAAA,MAAA,CAAA,MAAA,kBAAA,aAAA;;;;;iBA8ChD,oBAAA,CAAqB,KAAA,aAAe,MAAA,CAAA,MAAA"}