@samebase/convex-hosting 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/CHANGELOG.md +10 -128
  2. package/README.md +136 -398
  3. package/dist/cli/convex.d.ts +63 -0
  4. package/dist/cli/convex.js +108 -0
  5. package/dist/cli/convex.js.map +1 -0
  6. package/dist/cli/files.d.ts +18 -0
  7. package/dist/cli/files.js +106 -0
  8. package/dist/cli/files.js.map +1 -0
  9. package/dist/cli/index.d.ts +1 -11
  10. package/dist/cli/index.js +3 -58
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/main.d.ts +5 -0
  13. package/dist/cli/main.js +346 -0
  14. package/dist/cli/main.js.map +1 -0
  15. package/dist/client/index.d.ts +8 -115
  16. package/dist/client/index.js +65 -254
  17. package/dist/client/index.js.map +1 -1
  18. package/dist/client/types.d.ts +5 -0
  19. package/dist/client/version-module.d.ts +6 -0
  20. package/dist/component/_generated/api.d.ts +0 -5
  21. package/dist/component/_generated/api.js.map +1 -1
  22. package/dist/component/_generated/component.d.ts +20 -18
  23. package/dist/component/_generated/dataModel.d.ts +0 -1
  24. package/dist/component/_generated/server.d.ts +12 -1
  25. package/dist/component/_generated/server.js +2 -0
  26. package/dist/component/_generated/server.js.map +1 -1
  27. package/dist/component/convex.config.d.ts +0 -1
  28. package/dist/component/lib.d.ts +175 -156
  29. package/dist/component/lib.js +396 -710
  30. package/dist/component/lib.js.map +1 -1
  31. package/dist/component/schema.d.ts +76 -72
  32. package/dist/component/schema.js +35 -59
  33. package/dist/component/schema.js.map +1 -1
  34. package/dist/workers-shared/asset-worker/src/analytics.d.ts +39 -0
  35. package/dist/workers-shared/asset-worker/src/analytics.js +86 -0
  36. package/dist/workers-shared/asset-worker/src/analytics.js.map +1 -0
  37. package/dist/workers-shared/asset-worker/src/compatibility-flags.d.ts +19 -0
  38. package/dist/workers-shared/asset-worker/src/compatibility-flags.js +29 -0
  39. package/dist/workers-shared/asset-worker/src/compatibility-flags.js.map +1 -0
  40. package/dist/workers-shared/asset-worker/src/configuration.d.ts +3 -0
  41. package/dist/workers-shared/asset-worker/src/configuration.js +30 -0
  42. package/dist/workers-shared/asset-worker/src/configuration.js.map +1 -0
  43. package/dist/workers-shared/asset-worker/src/constants.d.ts +1 -0
  44. package/dist/workers-shared/asset-worker/src/constants.js +3 -0
  45. package/dist/workers-shared/asset-worker/src/constants.js.map +1 -0
  46. package/dist/workers-shared/asset-worker/src/handler.d.ts +28 -0
  47. package/dist/workers-shared/asset-worker/src/handler.js +717 -0
  48. package/dist/workers-shared/asset-worker/src/handler.js.map +1 -0
  49. package/dist/workers-shared/asset-worker/src/types.d.ts +13 -0
  50. package/dist/workers-shared/asset-worker/src/types.js +2 -0
  51. package/dist/workers-shared/asset-worker/src/types.js.map +1 -0
  52. package/dist/workers-shared/asset-worker/src/utils/base-path.d.ts +29 -0
  53. package/dist/workers-shared/asset-worker/src/utils/base-path.js +56 -0
  54. package/dist/workers-shared/asset-worker/src/utils/base-path.js.map +1 -0
  55. package/dist/workers-shared/asset-worker/src/utils/headers.d.ts +11 -0
  56. package/dist/workers-shared/asset-worker/src/utils/headers.js +77 -0
  57. package/dist/workers-shared/asset-worker/src/utils/headers.js.map +1 -0
  58. package/dist/workers-shared/asset-worker/src/utils/rules-engine.d.ts +23 -0
  59. package/dist/workers-shared/asset-worker/src/utils/rules-engine.js +133 -0
  60. package/dist/workers-shared/asset-worker/src/utils/rules-engine.js.map +1 -0
  61. package/dist/workers-shared/asset-worker/src/worker.d.ts +14 -0
  62. package/dist/workers-shared/asset-worker/src/worker.js +12 -0
  63. package/dist/workers-shared/asset-worker/src/worker.js.map +1 -0
  64. package/dist/workers-shared/utils/base-path.d.ts +32 -0
  65. package/dist/workers-shared/utils/base-path.js +94 -0
  66. package/dist/workers-shared/utils/base-path.js.map +1 -0
  67. package/dist/workers-shared/utils/configuration/constants.d.ts +15 -0
  68. package/dist/workers-shared/utils/configuration/constants.js +16 -0
  69. package/dist/workers-shared/utils/configuration/constants.js.map +1 -0
  70. package/dist/workers-shared/utils/configuration/constructConfiguration.d.ts +12 -0
  71. package/dist/workers-shared/utils/configuration/constructConfiguration.js +103 -0
  72. package/dist/workers-shared/utils/configuration/constructConfiguration.js.map +1 -0
  73. package/dist/workers-shared/utils/configuration/parseHeaders.d.ts +5 -0
  74. package/dist/workers-shared/utils/configuration/parseHeaders.js +181 -0
  75. package/dist/workers-shared/utils/configuration/parseHeaders.js.map +1 -0
  76. package/dist/workers-shared/utils/configuration/parseRedirects.d.ts +8 -0
  77. package/dist/workers-shared/utils/configuration/parseRedirects.js +129 -0
  78. package/dist/workers-shared/utils/configuration/parseRedirects.js.map +1 -0
  79. package/dist/workers-shared/utils/configuration/parseStaticRouting.d.ts +2 -0
  80. package/dist/workers-shared/utils/configuration/parseStaticRouting.js +94 -0
  81. package/dist/workers-shared/utils/configuration/parseStaticRouting.js.map +1 -0
  82. package/dist/workers-shared/utils/configuration/types.d.ts +38 -0
  83. package/dist/workers-shared/utils/configuration/types.js +2 -0
  84. package/dist/workers-shared/utils/configuration/types.js.map +1 -0
  85. package/dist/workers-shared/utils/configuration/validateURL.d.ts +3 -0
  86. package/dist/workers-shared/utils/configuration/validateURL.js +56 -0
  87. package/dist/workers-shared/utils/configuration/validateURL.js.map +1 -0
  88. package/dist/workers-shared/utils/constants.d.ts +28 -0
  89. package/dist/workers-shared/utils/constants.js +34 -0
  90. package/dist/workers-shared/utils/constants.js.map +1 -0
  91. package/dist/workers-shared/utils/helpers.d.ts +22 -0
  92. package/dist/workers-shared/utils/helpers.js +73 -0
  93. package/dist/workers-shared/utils/helpers.js.map +1 -0
  94. package/dist/workers-shared/utils/responses.d.ts +43 -0
  95. package/dist/workers-shared/utils/responses.js +125 -0
  96. package/dist/workers-shared/utils/responses.js.map +1 -0
  97. package/dist/workers-shared/utils/tracing.d.ts +3 -0
  98. package/dist/workers-shared/utils/tracing.js +29 -0
  99. package/dist/workers-shared/utils/tracing.js.map +1 -0
  100. package/dist/workers-shared/utils/types.d.ts +131 -0
  101. package/dist/workers-shared/utils/types.js +72 -0
  102. package/dist/workers-shared/utils/types.js.map +1 -0
  103. package/package.json +16 -32
  104. package/INTEGRATION.md +0 -399
  105. package/dist/cli/args.d.ts +0 -28
  106. package/dist/cli/args.d.ts.map +0 -1
  107. package/dist/cli/args.js +0 -148
  108. package/dist/cli/args.js.map +0 -1
  109. package/dist/cli/argumentChunks.d.ts +0 -3
  110. package/dist/cli/argumentChunks.d.ts.map +0 -1
  111. package/dist/cli/argumentChunks.js +0 -29
  112. package/dist/cli/argumentChunks.js.map +0 -1
  113. package/dist/cli/collectFiles.d.ts +0 -10
  114. package/dist/cli/collectFiles.d.ts.map +0 -1
  115. package/dist/cli/collectFiles.js +0 -53
  116. package/dist/cli/collectFiles.js.map +0 -1
  117. package/dist/cli/commands.d.ts +0 -8
  118. package/dist/cli/commands.d.ts.map +0 -1
  119. package/dist/cli/commands.js +0 -56
  120. package/dist/cli/commands.js.map +0 -1
  121. package/dist/cli/componentName.d.ts +0 -32
  122. package/dist/cli/componentName.d.ts.map +0 -1
  123. package/dist/cli/componentName.js +0 -43
  124. package/dist/cli/componentName.js.map +0 -1
  125. package/dist/cli/deploy.d.ts +0 -16
  126. package/dist/cli/deploy.d.ts.map +0 -1
  127. package/dist/cli/deploy.js +0 -283
  128. package/dist/cli/deploy.js.map +0 -1
  129. package/dist/cli/deployEnvironment.d.ts +0 -10
  130. package/dist/cli/deployEnvironment.d.ts.map +0 -1
  131. package/dist/cli/deployEnvironment.js +0 -12
  132. package/dist/cli/deployEnvironment.js.map +0 -1
  133. package/dist/cli/index.d.ts.map +0 -1
  134. package/dist/cli/upload.d.ts +0 -22
  135. package/dist/cli/upload.d.ts.map +0 -1
  136. package/dist/cli/upload.js +0 -630
  137. package/dist/cli/upload.js.map +0 -1
  138. package/dist/client/_generated/_ignore.d.ts +0 -1
  139. package/dist/client/_generated/_ignore.d.ts.map +0 -1
  140. package/dist/client/_generated/_ignore.js +0 -3
  141. package/dist/client/_generated/_ignore.js.map +0 -1
  142. package/dist/client/index.d.ts.map +0 -1
  143. package/dist/component/_generated/api.d.ts.map +0 -1
  144. package/dist/component/_generated/component.d.ts.map +0 -1
  145. package/dist/component/_generated/dataModel.d.ts.map +0 -1
  146. package/dist/component/_generated/server.d.ts.map +0 -1
  147. package/dist/component/convex.config.d.ts.map +0 -1
  148. package/dist/component/http.d.ts +0 -4
  149. package/dist/component/http.d.ts.map +0 -1
  150. package/dist/component/http.js +0 -125
  151. package/dist/component/http.js.map +0 -1
  152. package/dist/component/lib.d.ts.map +0 -1
  153. package/dist/component/schema.d.ts.map +0 -1
  154. package/dist/component/serving.d.ts +0 -17
  155. package/dist/component/serving.d.ts.map +0 -1
  156. package/dist/component/serving.js +0 -150
  157. package/dist/component/serving.js.map +0 -1
  158. package/dist/react/index.d.ts +0 -59
  159. package/dist/react/index.d.ts.map +0 -1
  160. package/dist/react/index.js +0 -137
  161. package/dist/react/index.js.map +0 -1
  162. package/src/cli/args.test.ts +0 -79
  163. package/src/cli/args.ts +0 -153
  164. package/src/cli/argumentChunks.test.ts +0 -27
  165. package/src/cli/argumentChunks.ts +0 -40
  166. package/src/cli/collectFiles.test.ts +0 -26
  167. package/src/cli/collectFiles.ts +0 -59
  168. package/src/cli/commands.ts +0 -68
  169. package/src/cli/componentName.test.ts +0 -41
  170. package/src/cli/componentName.ts +0 -46
  171. package/src/cli/deploy.ts +0 -336
  172. package/src/cli/deployEnvironment.test.ts +0 -27
  173. package/src/cli/deployEnvironment.ts +0 -17
  174. package/src/cli/index.ts +0 -65
  175. package/src/cli/upload.ts +0 -837
  176. package/src/client/_generated/_ignore.ts +0 -1
  177. package/src/client/index.test.ts +0 -510
  178. package/src/client/index.ts +0 -355
  179. package/src/client/setup.test.ts +0 -22
  180. package/src/component/_generated/api.ts +0 -54
  181. package/src/component/_generated/component.ts +0 -55
  182. package/src/component/_generated/dataModel.ts +0 -60
  183. package/src/component/_generated/server.ts +0 -156
  184. package/src/component/convex.config.ts +0 -3
  185. package/src/component/http.test.ts +0 -223
  186. package/src/component/http.ts +0 -144
  187. package/src/component/lib.test.ts +0 -1007
  188. package/src/component/lib.ts +0 -862
  189. package/src/component/schema.ts +0 -75
  190. package/src/component/serving.ts +0 -158
  191. package/src/component/setup.test.ts +0 -11
  192. package/src/react/index.tsx +0 -197
  193. package/src/test.ts +0 -23
@@ -1,272 +1,83 @@
1
- import { httpActionGeneric, queryGeneric, } from "convex/server";
2
- import { v } from "convex/values";
3
- import { cacheControlFor, decodeRequestPath, etagMatches, getMimeType, getSetupHtml, isHtmlContentType, } from "../component/serving.js";
4
- const deploymentInfoValidator = v.object({
5
- _id: v.string(),
6
- _creationTime: v.number(),
7
- currentDeploymentId: v.string(),
8
- deployedAt: v.number(),
9
- spaFallback: v.optional(v.boolean()),
10
- });
11
1
  /**
12
- * Register app-owned HTTP routes for the hosted site.
2
+ * Answers `request` with the asset of version `versionId` that Cloudflare's asset handler picks.
13
3
  *
14
- * Prefer mounting the component's own HTTP routes when it can own the URL
15
- * prefix. Use this compatibility mode when existing app HTTP routes must stay
16
- * at the same root. Exact app routes take precedence over this catch-all.
17
- * Assets and deployment state still live in the component.
18
- *
19
- * @example
20
- * ```typescript
21
- * // convex/convex.config.ts
22
- * const app = defineApp();
23
- * app.use(hosting); // no httpPrefix: the app owns HTTP routing
24
- *
25
- * // convex/http.ts
26
- * const http = httpRouter();
27
- * auth.addHttpRoutes(http);
28
- * registerStaticRoutes(http, components.hosting);
29
- * export default http;
30
- * ```
31
- */
32
- export function registerStaticRoutes(http, component, { pathPrefix = "/", spaFallback, cdnBaseUrl, } = {}) {
33
- if (!pathPrefix.startsWith("/")) {
34
- throw new Error("pathPrefix must start with /");
35
- }
36
- const normalizedPrefix = pathPrefix === "/" ? "" : pathPrefix.replace(/\/$/, "");
37
- const serveStaticFile = httpActionGeneric(async (ctx, request) => {
38
- const decodedPath = decodeRequestPath(new URL(request.url).pathname);
39
- if (decodedPath === null) {
40
- return new Response("Bad Request", {
41
- status: 400,
42
- headers: { "Content-Type": "text/plain" },
43
- });
44
- }
45
- let path = decodedPath;
46
- if (normalizedPrefix && path.startsWith(normalizedPrefix)) {
47
- path = path.slice(normalizedPrefix.length) || "/";
48
- }
49
- if (path === "" || path === "/") {
50
- path = "/index.html";
51
- }
52
- const response = await serveAsset(ctx, component, request, path, {
53
- spaFallback,
54
- cdnBaseUrl,
55
- });
56
- if (response)
57
- return response;
58
- if (path === "/index.html") {
59
- return new Response(getSetupHtml(), {
60
- status: 503,
61
- headers: {
62
- "Content-Type": "text/html; charset=utf-8",
63
- "Cache-Control": "no-store",
64
- "Retry-After": "5",
65
- },
66
- });
67
- }
68
- return new Response("Not Found", {
69
- status: 404,
70
- headers: { "Content-Type": "text/plain" },
71
- });
72
- });
73
- http.route({
74
- pathPrefix: pathPrefix === "/" ? "/" : `${normalizedPrefix}/`,
75
- method: "GET",
76
- handler: serveStaticFile,
77
- });
78
- if (normalizedPrefix) {
79
- http.route({
80
- path: normalizedPrefix,
81
- method: "GET",
82
- handler: serveStaticFile,
83
- });
84
- }
85
- }
86
- /**
87
- * Serve an uploaded static file from your own HTTP action, or return null when
88
- * no file matches so the action can continue with its own routing: server
89
- * rendering, prerendered pages, redirects.
90
- *
91
- * Found files get the same response as `registerStaticRoutes`: content type,
92
- * cache headers, ETag revalidation, and legacy CDN redirects. A found file
93
- * whose storage can't be read gets a 500 response. A request path with
94
- * malformed percent-encoding matches no file, so it returns null.
95
- *
96
- * The lookup is exact by default. `/` is not mapped to `/index.html`, and there
97
- * is no SPA fallback, so the SPA shell never answers for a route your action
98
- * handles. To serve the shell, pass `{ path: "/index.html" }`. When your route
99
- * has a prefix, pass `path` with the prefix removed.
100
- *
101
- * @example
102
- * ```typescript
103
- * // convex/http.ts
104
- * const http = httpRouter();
105
- * http.route({
106
- * pathPrefix: "/",
107
- * method: "GET",
108
- * handler: httpAction(async (ctx, request) => {
109
- * const file = await serveStaticAsset(ctx, components.hosting, request);
110
- * if (file) return file;
111
- * return await renderPage(request);
112
- * }),
113
- * });
114
- * export default http;
115
- * ```
116
- */
117
- export async function serveStaticAsset(ctx, component, request, { path, spaFallback = false, cdnBaseUrl, } = {}) {
118
- if (path !== undefined && !path.startsWith("/")) {
119
- throw new Error("path must start with /");
120
- }
121
- const filePath = path ?? decodeRequestPath(new URL(request.url).pathname);
122
- if (filePath === null)
123
- return null;
124
- return await serveAsset(ctx, component, request, filePath, {
125
- spaFallback,
126
- cdnBaseUrl,
127
- });
128
- }
129
- export { decodeRequestPath };
130
- /**
131
- * Serve the uploaded file at `path` (decoded, relative to the mount prefix),
132
- * or return null when no file matches. An undefined `spaFallback` uses the
133
- * deployment's stored setting.
4
+ * Returns `null` when no asset matches, so the app continues (a static site answers 404, a
5
+ * server-rendered site renders the page). A version that does not exist, is still uploading, or
6
+ * is being deleted answers 404, so a half-installed site does not render pages without their
7
+ * files. The first request for a `ready` version marks it live, which deletes the versions that
8
+ * were live before it.
134
9
  */
135
- async function serveAsset(ctx, component, request, path, { spaFallback, cdnBaseUrl, }) {
136
- const asset = await ctx.runQuery(component.lib.resolveAssetForHttp, {
137
- path,
138
- ...(spaFallback === undefined ? {} : { spaFallback }),
10
+ export async function serveAsset(ctx, component, request, versionId) {
11
+ const { state, newestLiveAt, asset } = await ctx.runQuery(component.lib.route, {
12
+ versionId,
13
+ method: request.method,
14
+ url: request.url,
15
+ headers: handlerHeaders(request.headers),
139
16
  });
140
- if (!asset)
141
- return null;
142
- const contentType = asset.contentType || getMimeType(path);
143
- const cacheControl = cacheControlFor(path);
144
- if (asset.blobId && !isHtmlContentType(contentType)) {
145
- const configuredBase = typeof cdnBaseUrl === "function" ? cdnBaseUrl(request) : cdnBaseUrl;
146
- const baseUrl = configuredBase ?? `${new URL(request.url).origin}/fs/blobs`;
147
- return new Response(null, {
148
- status: 302,
149
- headers: {
150
- Location: `${baseUrl.replace(/\/$/, "")}/${asset.blobId}`,
151
- "Cache-Control": cacheControl,
152
- },
153
- });
154
- }
155
- // TODO(remove in a future major): v1→v2 transitional path. The file still
156
- // lives in the app's own storage (a same-name migration inherited the v1
157
- // row; see the component's resolveAssetForHttp). Serve it directly from app
158
- // storage so the site stays up during migration with no re-upload. Once v1
159
- // app-storage assets are no longer supported, delete this branch.
160
- if (asset.appStorageId) {
161
- if (asset.etag && etagMatches(request.headers.get("If-None-Match"), asset.etag)) {
162
- return new Response(null, {
163
- status: 304,
164
- headers: { ETag: asset.etag, "Cache-Control": cacheControl },
165
- });
166
- }
167
- const blob = await ctx.storage.get(asset.appStorageId);
168
- if (!blob) {
169
- // The component surfaces appStorageId whenever it can't resolve a
170
- // storage URL, which also covers a genuinely deleted file (the two are
171
- // indistinguishable from the component). If it isn't in app storage
172
- // either, treat it as missing, like an empty deployment, rather than
173
- // erroring.
174
- return null;
175
- }
176
- return new Response(blob, {
177
- status: 200,
178
- headers: {
179
- "Content-Type": contentType,
180
- "Cache-Control": cacheControl,
181
- ...(asset.etag ? { ETag: asset.etag } : {}),
182
- "X-Content-Type-Options": "nosniff",
183
- },
17
+ if (state === null || state === "uploading" || state === "deleting") {
18
+ const problem = state === null
19
+ ? "does not exist"
20
+ : state === "uploading"
21
+ ? "is still uploading"
22
+ : "is being deleted";
23
+ return new Response(`Version ${versionId} of the site ${problem}.`, {
24
+ status: 404,
25
+ headers: NO_STORE,
184
26
  });
185
27
  }
186
- if (!asset.storageUrl) {
187
- return new Response("Asset not available", {
188
- status: 500,
189
- headers: { "Content-Type": "text/plain" },
28
+ // Only the pushed code knows which version the deployment runs, so its first request reports it.
29
+ if (state === "ready") {
30
+ await ctx.runMutation(component.lib.markLive, {
31
+ versionId,
32
+ expectedNewestLiveAt: newestLiveAt,
190
33
  });
191
34
  }
192
- if (asset.etag && etagMatches(request.headers.get("If-None-Match"), asset.etag)) {
193
- return new Response(null, {
194
- status: 304,
195
- headers: { ETag: asset.etag, "Cache-Control": cacheControl },
196
- });
35
+ if (asset === null)
36
+ return null;
37
+ const headers = new Headers();
38
+ for (const { name, value } of asset.headers)
39
+ headers.append(name, value);
40
+ if (asset.bodyUrl === null)
41
+ return new Response(null, { status: asset.status, headers });
42
+ // An app cannot read a component's storage, so the body comes from the storage URL.
43
+ let stored;
44
+ try {
45
+ stored = await fetch(asset.bodyUrl);
197
46
  }
198
- const storageResponse = await fetch(asset.storageUrl);
199
- if (!storageResponse.ok || !storageResponse.body) {
200
- return new Response("Storage error", {
201
- status: 500,
202
- headers: { "Content-Type": "text/plain" },
203
- });
47
+ catch {
48
+ return badGateway();
204
49
  }
205
- return new Response(storageResponse.body, {
206
- status: 200,
207
- headers: {
208
- "Content-Type": contentType,
209
- "Cache-Control": cacheControl,
210
- ...(asset.etag ? { ETag: asset.etag } : {}),
211
- "X-Content-Type-Options": "nosniff",
212
- },
213
- });
50
+ // A deploy deleted the file between the query and the fetch.
51
+ if (stored.status === 404)
52
+ return new Response(null, { status: 404, headers: NO_STORE });
53
+ if (!stored.ok)
54
+ return badGateway();
55
+ return new Response(stored.body, { status: asset.status, headers });
214
56
  }
215
57
  /**
216
- * Expose a query that clients can subscribe to for live reload on deploy.
217
- * This is only needed if you use `UpdateBanner` / `useDeploymentUpdates` from
218
- * `@samebase/convex-hosting/react`. If you don't surface deployment updates
219
- * in your app, you don't need to call this.
220
- *
221
- * @example
222
- * ```typescript
223
- * // convex/hosting.ts
224
- * import { exposeDeploymentQuery } from "@samebase/convex-hosting";
225
- * import { components } from "./_generated/api";
226
- *
227
- * export const { getCurrentDeployment } = exposeDeploymentQuery(
228
- * components.hosting,
229
- * );
230
- * ```
58
+ * The request headers that Cloudflare's handler reads. It reads only the presence of
59
+ * `Authorization` and `Range`, so their values (a credential, for one) stay out of the query.
231
60
  */
232
- export function exposeDeploymentQuery(component) {
233
- return {
234
- getCurrentDeployment: queryGeneric({
235
- args: {},
236
- returns: v.union(deploymentInfoValidator, v.null()),
237
- handler: async (ctx) => {
238
- const deployment = await ctx.runQuery(component.lib.getCurrentDeployment, {});
239
- if (!deployment)
240
- return null;
241
- // Cleanup accounting is private component state. Returning it through
242
- // this public wrapper would fail the narrower response validator.
243
- const deploymentWithCleanup = deployment;
244
- const { pendingBlobCleanupCount: _pending, ...publicDeployment } = deploymentWithCleanup;
245
- return publicDeployment;
246
- },
247
- }),
248
- };
61
+ function handlerHeaders(headers) {
62
+ const picked = {};
63
+ for (const name of ["if-none-match", "sec-fetch-mode"]) {
64
+ const value = headers.get(name);
65
+ if (value !== null)
66
+ picked[name] = value;
67
+ }
68
+ for (const name of ["authorization", "range"]) {
69
+ if (headers.has(name))
70
+ picked[name] = "";
71
+ }
72
+ return picked;
249
73
  }
250
74
  /**
251
- * Derive the Convex cloud URL from a `.convex.site` hostname.
252
- * Useful when your frontend is served by this component and needs
253
- * to connect to its own Convex backend without an explicit env var.
254
- *
255
- * @example
256
- * ```typescript
257
- * import { getConvexUrl } from "@samebase/convex-hosting";
258
- *
259
- * const convexUrl = import.meta.env.VITE_CONVEX_URL ?? getConvexUrl();
260
- * const convex = new ConvexReactClient(convexUrl);
261
- * ```
75
+ * For the answers that no uploaded file gives. The deployment's Cloudflare front caches 404 answers
76
+ * on static paths, so without it a script requested seconds before its upload ended would stay
77
+ * missing for hours (the 0.3.2 incident).
262
78
  */
263
- export function getConvexUrl() {
264
- if (typeof window === "undefined") {
265
- throw new Error("getConvexUrl() can only be called in a browser context");
266
- }
267
- if (window.location.hostname.endsWith(".convex.site")) {
268
- return `https://${window.location.hostname.replace(".convex.site", ".convex.cloud")}`;
269
- }
270
- throw new Error("Unable to derive Convex URL. Please set VITE_CONVEX_URL environment variable.");
79
+ const NO_STORE = { "Cache-Control": "no-store" };
80
+ function badGateway() {
81
+ return new Response(null, { status: 502, headers: NO_STORE });
271
82
  }
272
83
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,YAAY,GAIb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,CAAC,EAAkB,MAAM,eAAe,CAAC;AAElD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,YAAY,EACZ,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;CACrC,CAAC,CAAC;AAOH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAgB,EAChB,SAAuB,EACvB,EACE,UAAU,GAAG,GAAG,EAChB,WAAW,EACX,UAAU,MAQR,EAAE;IAEN,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEjF,MAAM,eAAe,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;QAC/D,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,IAAI,QAAQ,CAAC,aAAa,EAAE;gBACjC,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;aAC1C,CAAC,CAAC;QACL,CAAC;QACD,IAAI,IAAI,GAAG,WAAW,CAAC;QAEvB,IAAI,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC1D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAChC,IAAI,GAAG,aAAa,CAAC;QACvB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE;YAC/D,WAAW;YACX,UAAU;SACX,CAAC,CAAC;QACH,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAE9B,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE;gBAClC,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACP,cAAc,EAAE,0BAA0B;oBAC1C,eAAe,EAAE,UAAU;oBAC3B,aAAa,EAAE,GAAG;iBACnB;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE;YAC/B,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,KAAK,CAAC;QACT,UAAU,EAAE,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,gBAAgB,GAAG;QAC7D,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,eAAe;KACzB,CAAC,CAAC;IAEH,IAAI,gBAAgB,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC;YACT,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAoB,EACpB,SAAuB,EACvB,OAAgB,EAChB,EACE,IAAI,EACJ,WAAW,GAAG,KAAK,EACnB,UAAU,MAWR,EAAE;IAEN,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,IAAI,iBAAiB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1E,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,MAAM,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE;QACzD,WAAW;QACX,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B;;;;GAIG;AACH,KAAK,UAAU,UAAU,CACvB,GAAoB,EACpB,SAAuB,EACvB,OAAgB,EAChB,IAAY,EACZ,EACE,WAAW,EACX,UAAU,GAIX;IAED,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE;QAClE,IAAI;QACJ,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;KACtD,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAE3C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,MAAM,cAAc,GAAG,OAAO,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAC3F,MAAM,OAAO,GAAG,cAAc,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,WAAW,CAAC;QAC5E,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;gBACzD,eAAe,EAAE,YAAY;aAC9B;SACF,CAAC,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,yEAAyE;IACzE,4EAA4E;IAC5E,2EAA2E;IAC3E,kEAAkE;IAClE,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAChF,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACxB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE;aAC7D,CAAC,CAAC;QACL,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAqC,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,kEAAkE;YAClE,uEAAuE;YACvE,oEAAoE;YACpE,qEAAqE;YACrE,YAAY;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,cAAc,EAAE,WAAW;gBAC3B,eAAe,EAAE,YAAY;gBAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,wBAAwB,EAAE,SAAS;aACpC;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE;YACzC,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChF,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE;SAC7D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,QAAQ,CAAC,eAAe,EAAE;YACnC,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE;QACxC,MAAM,EAAE,GAAG;QACX,OAAO,EAAE;YACP,cAAc,EAAE,WAAW;YAC3B,eAAe,EAAE,YAAY;YAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,wBAAwB,EAAE,SAAS;SACpC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,qBAAqB,CAAC,SAAuB;IAC3D,OAAO;QACL,oBAAoB,EAAE,YAAY,CAAC;YACjC,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACrB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC,UAAU;oBAAE,OAAO,IAAI,CAAC;gBAC7B,sEAAsE;gBACtE,kEAAkE;gBAClE,MAAM,qBAAqB,GAAG,UAE7B,CAAC;gBACF,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,GAAG,qBAAqB,CAAC;gBACzF,OAAO,gBAAgB,CAAC;YAC1B,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACtD,OAAO,WAAW,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,CAAC,EAAE,CAAC;IACxF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;AACnG,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ // An import cannot include a script declaration file, and the wildcard module in it needs an
2
+ // ambient context, so this is the one reference directive in the package.
3
+ // oxlint-disable-next-line typescript/triple-slash-reference
4
+ /// <reference path="./version-module.d.ts" />
5
+ export * from "./index.js";
@@ -0,0 +1,6 @@
1
+ // Ambient declaration of the module that `convex-hosting deploy` writes, so an app typechecks on a
2
+ // fresh clone, before its first deploy. Script file on purpose: a wildcard module name is only allowed
3
+ // in an ambient context.
4
+ declare module "*/.convex-hosting/version.js" {
5
+ export const versionId: string;
6
+ }
@@ -6,14 +6,10 @@
6
6
  * To regenerate, run `npx convex dev`.
7
7
  * @module
8
8
  */
9
- import type * as http from "../http.js";
10
9
  import type * as lib from "../lib.js";
11
- import type * as serving from "../serving.js";
12
10
  import type { ApiFromModules, FilterApi, FunctionReference } from "convex/server";
13
11
  declare const fullApi: ApiFromModules<{
14
- http: typeof http;
15
12
  lib: typeof lib;
16
- serving: typeof serving;
17
13
  }>;
18
14
  /**
19
15
  * A utility for referencing Convex functions in your app's public API.
@@ -35,4 +31,3 @@ export declare const api: FilterApi<typeof fullApi, FunctionReference<any, "publ
35
31
  export declare const internal: FilterApi<typeof fullApi, FunctionReference<any, "internal">>;
36
32
  export declare const components: {};
37
33
  export {};
38
- //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAWH,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,OAAO,GAIR,MAAa,CAAC;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAGZ,MAAa,CAAC;AAElB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAGjB,MAAa,CAAC;AAElB,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,EAAmB,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AASH,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,OAAO,GAER,MAAa,CAAC;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAGZ,MAAa,CAAC;AAElB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAGjB,MAAa,CAAC;AAElB,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,EAAmB,CAAC"}
@@ -20,24 +20,26 @@ import type { FunctionReference } from "convex/server";
20
20
  */
21
21
  export type ComponentApi<Name extends string | undefined = string | undefined> = {
22
22
  lib: {
23
- getCurrentDeployment: FunctionReference<"query", "internal", {}, {
24
- _creationTime: number;
25
- _id: string;
26
- currentDeploymentId: string;
27
- deployedAt: number;
28
- pendingBlobCleanupCount?: number;
29
- spaFallback?: boolean;
30
- } | null, Name>;
31
- resolveAssetForHttp: FunctionReference<"query", "internal", {
32
- path: string;
33
- spaFallback?: boolean;
23
+ markLive: FunctionReference<"mutation", "internal", {
24
+ expectedNewestLiveAt: number | null;
25
+ versionId: string;
26
+ }, null, Name>;
27
+ route: FunctionReference<"query", "internal", {
28
+ headers: Record<string, string>;
29
+ method: string;
30
+ url: string;
31
+ versionId: string;
34
32
  }, {
35
- appStorageId?: string;
36
- blobId?: string;
37
- contentType: string;
38
- etag?: string;
39
- storageUrl?: string;
40
- } | null, Name>;
33
+ asset: null | {
34
+ bodyUrl: string | null;
35
+ headers: Array<{
36
+ name: string;
37
+ value: string;
38
+ }>;
39
+ status: number;
40
+ };
41
+ newestLiveAt: number | null;
42
+ state: "uploading" | "ready" | "live" | "deleting" | null;
43
+ }, Name>;
41
44
  };
42
45
  };
43
- //# sourceMappingURL=component.d.ts.map
@@ -43,4 +43,3 @@ export type Id<TableName extends TableNames | SystemTableNames> = GenericId<Tabl
43
43
  * `mutationGeneric` to make them type-safe.
44
44
  */
45
45
  export type DataModel = DataModelFromSchemaDefinition<typeof schema>;
46
- //# sourceMappingURL=dataModel.d.ts.map
@@ -8,6 +8,16 @@
8
8
  */
9
9
  import type { ActionBuilder, HttpActionBuilder, MutationBuilder, QueryBuilder, GenericActionCtx, GenericMutationCtx, GenericQueryCtx, GenericDatabaseReader, GenericDatabaseWriter } from "convex/server";
10
10
  import type { DataModel } from "./dataModel.js";
11
+ /**
12
+ * Typesafe environment variables.
13
+ *
14
+ * This includes platform-provided env vars and any variables declared in
15
+ * `convex.config.ts`.
16
+ */
17
+ type Env = {
18
+ readonly CONVEX_CLOUD_URL: string;
19
+ readonly CONVEX_SITE_URL: string;
20
+ };
11
21
  /**
12
22
  * Define a query in this Convex app's public API.
13
23
  *
@@ -75,6 +85,7 @@ export declare const internalAction: ActionBuilder<DataModel, "internal">;
75
85
  * @returns The wrapped function. Import this function from `convex/http.js` and route it to hook it up.
76
86
  */
77
87
  export declare const httpAction: HttpActionBuilder;
88
+ export declare const env: Env;
78
89
  /**
79
90
  * A set of services for use within Convex query functions.
80
91
  *
@@ -118,4 +129,4 @@ export type DatabaseReader = GenericDatabaseReader<DataModel>;
118
129
  * for the guarantees Convex provides your functions.
119
130
  */
120
131
  export type DatabaseWriter = GenericDatabaseWriter<DataModel>;
121
- //# sourceMappingURL=server.d.ts.map
132
+ export {};
@@ -75,4 +75,6 @@ export const internalAction = internalActionGeneric;
75
75
  * @returns The wrapped function. Import this function from `convex/http.js` and route it to hook it up.
76
76
  */
77
77
  export const httpAction = httpActionGeneric;
78
+ export const env = globalThis
79
+ .process.env;
78
80
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/component/_generated/server.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAaH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAGvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAsC,YAAY,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,oBAAoB,CAAC;AAEvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAyC,eAAe,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uBAAuB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,MAAM,GAAuC,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GACzB,qBAAqB,CAAC;AAExB;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsB,iBAAiB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/component/_generated/server.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAaH,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAcvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAsC,YAAY,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,oBAAoB,CAAC;AAEvB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAyC,eAAe,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,uBAAuB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,MAAM,GAAuC,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GACzB,qBAAqB,CAAC;AAExB;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,UAAU,GAAsB,iBAAiB,CAAC;AAC/D,MAAM,CAAC,MAAM,GAAG,GAAS,UAAmD;KACzE,OAAO,CAAC,GAAG,CAAC"}
@@ -1,3 +1,2 @@
1
1
  declare const _default: import("convex/server").ComponentDefinition<any, {}>;
2
2
  export default _default;
3
- //# sourceMappingURL=convex.config.d.ts.map