@base44/functions-compiler 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -9
- package/lib/src/assembly.js +2 -2
- package/lib/src/assembly.js.map +1 -1
- package/lib/src/assets.d.ts +7 -0
- package/lib/src/assets.js +15 -0
- package/lib/src/assets.js.map +1 -0
- package/lib/src/bundler.d.ts +3 -1
- package/lib/src/bundler.js +14 -1
- package/lib/src/bundler.js.map +1 -1
- package/lib/src/contracts.d.ts +2 -0
- package/lib/src/contracts.js +4 -0
- package/lib/src/contracts.js.map +1 -1
- package/lib/src/deno-bundle.js +2 -2
- package/lib/src/deno-bundle.js.map +1 -1
- package/lib/src/esbuild/deno-resolver.js +28 -24
- package/lib/src/esbuild/deno-resolver.js.map +1 -1
- package/lib/src/esbuild/private-data-sources-virtual.js +2 -3
- package/lib/src/esbuild/private-data-sources-virtual.js.map +1 -1
- package/lib/src/esbuild/runtime-context-specifier.d.ts +1 -0
- package/lib/src/esbuild/runtime-context-specifier.js +3 -0
- package/lib/src/esbuild/runtime-context-specifier.js.map +1 -0
- package/lib/src/esbuild/runtime-context-virtual.d.ts +2 -1
- package/lib/src/esbuild/runtime-context-virtual.js +4 -4
- package/lib/src/esbuild/runtime-context-virtual.js.map +1 -1
- package/lib/src/esbuild/runtime-virtual.js +4 -21
- package/lib/src/esbuild/runtime-virtual.js.map +1 -1
- package/lib/src/fetch-guard.js +4 -2
- package/lib/src/fetch-guard.js.map +1 -1
- package/lib/src/generated/assets.d.ts +1 -0
- package/lib/src/generated/assets.js +30 -0
- package/lib/src/generated/assets.js.map +1 -0
- package/lib/src/index.d.ts +1 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/lazy-deps.d.ts +2 -0
- package/lib/src/lazy-deps.js +11 -0
- package/lib/src/lazy-deps.js.map +1 -0
- package/lib/src/shards/build.d.ts +4 -1
- package/lib/src/shards/build.js +5 -4
- package/lib/src/shards/build.js.map +1 -1
- package/lib/src/version.d.ts +1 -1
- package/lib/src/version.js +1 -1
- package/lib/src/worker-entry.js +56 -40
- package/lib/src/worker-entry.js.map +1 -1
- package/package.json +4 -3
- package/lib/dist/activation-shim.mjs +0 -237
- package/lib/dist/actor.mjs +0 -1129
- package/lib/dist/deno-shim.mjs +0 -2347
- package/lib/src/private-data-sources/build-http.ts +0 -51
- package/lib/src/private-data-sources/elasticsearch.ts +0 -8
- package/lib/src/private-data-sources/http-url.ts +0 -23
- package/lib/src/private-data-sources/http.ts +0 -6
- package/lib/src/private-data-sources/hyperdrive.ts +0 -48
- package/lib/src/private-data-sources/ioredis-adapter.ts +0 -229
- package/lib/src/private-data-sources/manifest.ts +0 -150
- package/lib/src/private-data-sources/mariadb.ts +0 -8
- package/lib/src/private-data-sources/mongodb.ts +0 -70
- package/lib/src/private-data-sources/mysql.ts +0 -8
- package/lib/src/private-data-sources/node-net-adapter.ts +0 -247
- package/lib/src/private-data-sources/oracle.ts +0 -34
- package/lib/src/private-data-sources/postgres.ts +0 -8
- package/lib/src/private-data-sources/redis-auth.ts +0 -83
- package/lib/src/private-data-sources/redis.ts +0 -47
- package/lib/src/private-data-sources/runtime-environment.ts +0 -4
- package/lib/src/private-data-sources/runtime-manifest-store.ts +0 -32
- package/lib/src/private-data-sources/sqlserver.ts +0 -22
- package/lib/src/private-data-sources/tcp.ts +0 -86
- package/lib/src/private-data-sources/tedious-adapter.ts +0 -67
- package/lib/src/private-data-sources/types.ts +0 -29
- package/lib/src/runtime/index.ts +0 -30
- package/lib/src/runtime-context.ts +0 -29
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* Unlike the compiler's own `bundleApp`, this refuses a partial result. A module
|
|
17
17
|
* missing a handler is not a smaller success, it is a broken app.
|
|
18
18
|
*/
|
|
19
|
-
import type { AppFunctionInput } from "../contracts.js";
|
|
19
|
+
import type { ActivationMode, AppFunctionInput } from "../contracts.js";
|
|
20
20
|
import type { BundleErrorItem } from "../errors.js";
|
|
21
21
|
import { type ShardPolicy } from "./plan.js";
|
|
22
22
|
export interface CompiledShard {
|
|
@@ -29,6 +29,9 @@ export interface CompiledShard {
|
|
|
29
29
|
mainModule: string;
|
|
30
30
|
rawBytes: number;
|
|
31
31
|
gzipBytes: number;
|
|
32
|
+
/** Set when the module carries the pull activation shim (a runtime-secrets
|
|
33
|
+
* build); the deployer needs it to give the script a pull-shim id. */
|
|
34
|
+
activation?: ActivationMode;
|
|
32
35
|
}
|
|
33
36
|
export interface ShardBuildFailure {
|
|
34
37
|
/** The function this is about, when it belongs to one. */
|
package/lib/src/shards/build.js
CHANGED
|
@@ -70,7 +70,7 @@ async function buildWithSplit(group, policy, options) {
|
|
|
70
70
|
if (!verdict.breach) {
|
|
71
71
|
return {
|
|
72
72
|
ok: true,
|
|
73
|
-
shards: [shardOf(group, response
|
|
73
|
+
shards: [shardOf(group, response, verdict)],
|
|
74
74
|
};
|
|
75
75
|
}
|
|
76
76
|
if (group.length === 1) {
|
|
@@ -90,13 +90,14 @@ async function buildWithSplit(group, policy, options) {
|
|
|
90
90
|
return { ok: false, failures: halfFailures };
|
|
91
91
|
return { ok: true, shards: halves.flatMap((h) => (h.ok ? h.shards : [])) };
|
|
92
92
|
}
|
|
93
|
-
function shardOf(group,
|
|
93
|
+
function shardOf(group, response, verdict) {
|
|
94
94
|
return {
|
|
95
95
|
functions: group.map((fn) => fn.name),
|
|
96
|
-
module,
|
|
97
|
-
mainModule,
|
|
96
|
+
module: response.module,
|
|
97
|
+
mainModule: response.main_module,
|
|
98
98
|
rawBytes: verdict.rawBytes,
|
|
99
99
|
gzipBytes: verdict.gzipBytes,
|
|
100
|
+
...(response.activation ? { activation: response.activation } : {}),
|
|
100
101
|
};
|
|
101
102
|
}
|
|
102
103
|
/** Every declared function must land in exactly one emitted shard. A name that
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/shards/build.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAoB,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAoB,MAAM,WAAW,CAAC;AAE9D;gEACgE;AAChE,MAAM,mBAAmB,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/shards/build.ts"],"names":[],"mappings":"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"}
|
package/lib/src/version.d.ts
CHANGED
package/lib/src/version.js
CHANGED
package/lib/src/worker-entry.js
CHANGED
|
@@ -4,26 +4,18 @@
|
|
|
4
4
|
* `npm:`/`jsr:`/`https:` specifiers) plus an injected shim and a generated
|
|
5
5
|
* Worker entry. This is the layer that understands "functions" and "an app".
|
|
6
6
|
*/
|
|
7
|
-
import {
|
|
7
|
+
import { asset } from "./assets.js";
|
|
8
8
|
import { DenoCompatError } from "./errors.js";
|
|
9
9
|
import { RUNTIME_CONTEXT_SPECIFIER } from "./esbuild/runtime-context-virtual.js";
|
|
10
10
|
import { ASCII_ESCAPE, CAPTURE_PATCH, INVOCATION_LOGS_PATCH, } from "./invocation-logs.js";
|
|
11
11
|
import { TELEMETRY_PATCH, TELEMETRY_STORE_FIELDS } from "./telemetry.js";
|
|
12
12
|
import { COMPILER_VERSION } from "./version.js";
|
|
13
|
-
// Pre-built by scripts/build-shim.ts; regenerate
|
|
14
|
-
// Read LAZILY, not at module load: build-shim.ts transitively imports this
|
|
15
|
-
// module through the esbuild plugins, and on a fresh checkout dist/ doesn't
|
|
16
|
-
// exist yet — a load-time read would crash the very script that produces these
|
|
17
|
-
// files (and only pass locally where dist/ already exists).
|
|
18
|
-
let _denoShimSource;
|
|
13
|
+
// Pre-built by scripts/build-shim.ts; regenerate them after changing a shim.
|
|
19
14
|
function denoShimSource() {
|
|
20
|
-
|
|
21
|
-
return _denoShimSource;
|
|
15
|
+
return asset("deno-shim.mjs");
|
|
22
16
|
}
|
|
23
|
-
let _activationShimSource;
|
|
24
17
|
function activationShimSource() {
|
|
25
|
-
|
|
26
|
-
return _activationShimSource;
|
|
18
|
+
return asset("activation-shim.mjs");
|
|
27
19
|
}
|
|
28
20
|
// Synthetic files injected into the bundle; asserted absent from user input.
|
|
29
21
|
export const SHIM_FILENAME = "__base44_deno_shim.mjs";
|
|
@@ -75,8 +67,10 @@ export const CONSOLE_PATCH = [
|
|
|
75
67
|
// reads the store per call, so concurrent requests get their own ctx.
|
|
76
68
|
// `secrets` reads the request's Worker env binding the same way. Two filters:
|
|
77
69
|
// - reserved platform keys (the private-data-sources manifest, which carries
|
|
78
|
-
// plaintext VPC DB credentials
|
|
79
|
-
//
|
|
70
|
+
// plaintext VPC DB credentials; runtime-secrets bundles add the pull
|
|
71
|
+
// bindings, see RUNTIME_SECRETS_RESERVED_PATCH) are denied — user code
|
|
72
|
+
// reaches data sources via the base44:private-data-sources/* imports,
|
|
73
|
+
// never the raw manifest;
|
|
80
74
|
// - only string values are returned, so non-secret bindings (Hyperdrive
|
|
81
75
|
// objects, etc.) stay hidden.
|
|
82
76
|
// This global is the internal bridge behind the "base44:runtime" virtual
|
|
@@ -91,6 +85,16 @@ export const CONSOLE_PATCH = [
|
|
|
91
85
|
// Supabase-compat alias so copy-pasted EdgeRuntime.waitUntil code works.
|
|
92
86
|
"globalThis.EdgeRuntime = globalThis.EdgeRuntime ?? { waitUntil: (p) => globalThis.Base44.waitUntil(p) };",
|
|
93
87
|
].join("\n");
|
|
88
|
+
// Only runtime-secrets bundles carry the pull bindings, so only they reserve
|
|
89
|
+
// the names: a binding-mode function that stored a user secret under one of
|
|
90
|
+
// them before they were reserved must keep reading it (actors likewise never
|
|
91
|
+
// carry them — src/shim/actor.ts mirrors CONSOLE_PATCH's set alone).
|
|
92
|
+
const RUNTIME_SECRETS_RESERVED_PATCH = "_b44ReservedSecrets.add('BASE44_ACTIVATION_KEY').add('BASE44_ACTIVATION_URL');";
|
|
93
|
+
function consolePatch(runtimeSecrets) {
|
|
94
|
+
return runtimeSecrets
|
|
95
|
+
? `${CONSOLE_PATCH}\n${RUNTIME_SECRETS_RESERVED_PATCH}`
|
|
96
|
+
: CONSOLE_PATCH;
|
|
97
|
+
}
|
|
94
98
|
/** Assemble a single Deno function into a bundle-ready Worker. */
|
|
95
99
|
export async function prepareFunction(entry, files, postResponseTelemetry = false, runtimeSecrets = false) {
|
|
96
100
|
assertNoReservedFilenames(files);
|
|
@@ -162,16 +166,29 @@ export function prepareApp(entries, postResponseTelemetry = false, runtimeSecret
|
|
|
162
166
|
banner: buildBanner(entries, postResponseTelemetry, runtimeSecrets),
|
|
163
167
|
};
|
|
164
168
|
}
|
|
165
|
-
// Activation
|
|
166
|
-
//
|
|
167
|
-
//
|
|
168
|
-
const ACTIVATION_GATE = ` const _b44Activation = await ensureActivation(
|
|
169
|
-
if (_b44Activation) return _b44Activation;
|
|
170
|
-
request = withoutRuntimeSecretsHeader(request);
|
|
169
|
+
// Activation gate for runtime-secrets bundles: pull, or answer why it could not,
|
|
170
|
+
// BEFORE any user module is imported, so a shim response implies no user side
|
|
171
|
+
// effect ran.
|
|
172
|
+
const ACTIVATION_GATE = ` const _b44Activation = await ensureActivation(_b44Taken.challenge, env);
|
|
173
|
+
if (_b44Activation.response) return _b44Activation.response;
|
|
171
174
|
`;
|
|
175
|
+
// The entry's FIRST statement in a runtime-secrets bundle: read the challenge
|
|
176
|
+
// with captured references and drop it from the request before any plain
|
|
177
|
+
// `request.headers.get(...)` below, which a warm isolate's user code may have
|
|
178
|
+
// patched to read the live headers.
|
|
179
|
+
const ACTIVATION_TAKE = ` const _b44Taken = takeActivationChallenge(request); request = _b44Taken.request;
|
|
180
|
+
`;
|
|
181
|
+
// Every response produced AFTER the user module was imported goes through the
|
|
182
|
+
// strip, not only the handler's: those paths build with the call-time global
|
|
183
|
+
// `Response`, which a user module can replace with a subclass that carries a
|
|
184
|
+
// forged error header (a served, side-effecting request would then read as a
|
|
185
|
+
// failed activation). Identity for binding-mode bundles keeps their bytes.
|
|
186
|
+
function activationGuard(runtimeSecrets) {
|
|
187
|
+
return (expr) => runtimeSecrets ? `withoutActivationHeaders(${expr}, _b44Activation)` : expr;
|
|
188
|
+
}
|
|
172
189
|
function activationImport(runtimeSecrets) {
|
|
173
190
|
return runtimeSecrets
|
|
174
|
-
? `\nimport { ensureActivation,
|
|
191
|
+
? `\nimport { ensureActivation, takeActivationChallenge, withoutActivationHeaders } from "./${ACTIVATION_FILENAME}";`
|
|
175
192
|
: "";
|
|
176
193
|
}
|
|
177
194
|
/** Build the wrapper entry that loads the shim, lazily imports the user module
|
|
@@ -179,22 +196,22 @@ function activationImport(runtimeSecrets) {
|
|
|
179
196
|
* then exports a standard Worker fetch that delegates to that handler. */
|
|
180
197
|
function buildEntrySource(userEntry, telemetry, runtimeSecrets = false) {
|
|
181
198
|
const userImport = `./${userEntry.replace(/^\.\//, "")}`;
|
|
182
|
-
// Handler responses get the
|
|
183
|
-
//
|
|
199
|
+
// Handler responses get the shim's headers stripped (a forged error header
|
|
200
|
+
// after side effects would read as a non-billable failed activation) and the
|
|
201
|
+
// installing request's marker added.
|
|
184
202
|
const handlerExpr = telemetry
|
|
185
203
|
? "_b44AttachTelemetry(await handler(request, info))"
|
|
186
204
|
: runtimeSecrets
|
|
187
205
|
? "await handler(request, info)"
|
|
188
206
|
: "handler(request, info)";
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
: handlerExpr;
|
|
207
|
+
const guard = activationGuard(runtimeSecrets);
|
|
208
|
+
const returnExpr = guard(handlerExpr);
|
|
192
209
|
return `// Auto-generated by the base44 bundler. Do not edit.
|
|
193
210
|
|
|
194
211
|
import { currentWorkerRuntimeContext as _b44Context, runWithWorkerEnvironment as _b44Run } from ${JSON.stringify(RUNTIME_CONTEXT_SPECIFIER)};
|
|
195
212
|
import { getRegisteredHandler, installStaticEgressFetch } from "./${SHIM_FILENAME}";${activationImport(runtimeSecrets)}
|
|
196
213
|
|
|
197
|
-
${
|
|
214
|
+
${consolePatch(runtimeSecrets)}
|
|
198
215
|
// Static egress reads workerEnv from the active request store. Install it
|
|
199
216
|
// before telemetry so telemetry remains the outermost fetch wrapper.
|
|
200
217
|
installStaticEgressFetch();
|
|
@@ -203,7 +220,7 @@ ${telemetry ? TELEMETRY_PATCH : ""}
|
|
|
203
220
|
let _b44Init = null;
|
|
204
221
|
export default {
|
|
205
222
|
async fetch(request, env, ctx) {
|
|
206
|
-
const _b44Env = (request.headers.get('base44-functions-version') ?? '') === 'prod' ? 'prod' : 'preview';
|
|
223
|
+
${runtimeSecrets ? ACTIVATION_TAKE : ""} const _b44Env = (request.headers.get('base44-functions-version') ?? '') === 'prod' ? 'prod' : 'preview';
|
|
207
224
|
return _b44Run({ env: _b44Env, secrets: ${runtimeSecrets ? "process.env" : "env"}, workerEnv: env, waitUntil: (p) => ctx.waitUntil(p)${telemetry ? `, ${TELEMETRY_STORE_FIELDS}` : ""} }, async () => {
|
|
208
225
|
${runtimeSecrets ? ACTIVATION_GATE : ""} if (!_b44Init) _b44Init = import(${JSON.stringify(userImport)}).catch(e => { _b44Init = null; throw e; });
|
|
209
226
|
const _b44Mod = await _b44Init;
|
|
@@ -211,10 +228,10 @@ ${runtimeSecrets ? ACTIVATION_GATE : ""} if (!_b44Init) _b44Init = import($
|
|
|
211
228
|
// a default-exported handler is the new-contract fallback.
|
|
212
229
|
const handler = getRegisteredHandler() ?? (typeof _b44Mod?.default === 'function' ? _b44Mod.default : null);
|
|
213
230
|
if (!handler) {
|
|
214
|
-
return new Response(
|
|
231
|
+
return ${guard(`new Response(
|
|
215
232
|
"The function must export default a request handler or call Deno.serve()",
|
|
216
233
|
{ status: 503 },
|
|
217
|
-
);
|
|
234
|
+
)`)};
|
|
218
235
|
}
|
|
219
236
|
// Deno's handler signature is (request, info). Cloudflare doesn't expose a
|
|
220
237
|
// connection address the same way; pass a best-effort placeholder. Real
|
|
@@ -243,16 +260,15 @@ function buildAppEntrySource(functionModules, telemetry, runtimeSecrets = false)
|
|
|
243
260
|
const handlerExpr = `_b44AttachInvocationLogs(${telemetry
|
|
244
261
|
? "_b44AttachTelemetry(await handler(request, info))"
|
|
245
262
|
: "await handler(request, info)"})`;
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
: handlerExpr;
|
|
263
|
+
const guard = activationGuard(runtimeSecrets);
|
|
264
|
+
const returnExpr = guard(handlerExpr);
|
|
249
265
|
return `// Auto-generated by the base44 bundler. Do not edit.
|
|
250
266
|
|
|
251
267
|
import { currentWorkerRuntimeContext as _b44Context, runWithWorkerEnvironment as _b44Run } from ${JSON.stringify(RUNTIME_CONTEXT_SPECIFIER)};
|
|
252
268
|
import { installStaticEgressFetch, resolveHandler } from "./${SHIM_FILENAME}";${activationImport(runtimeSecrets)}
|
|
253
269
|
${moduleImports}
|
|
254
270
|
|
|
255
|
-
${
|
|
271
|
+
${consolePatch(runtimeSecrets)}
|
|
256
272
|
${INVOCATION_LOGS_PATCH}
|
|
257
273
|
// Static egress reads workerEnv from the active request store. Install it
|
|
258
274
|
// before telemetry so telemetry remains the outermost fetch wrapper.
|
|
@@ -261,7 +277,7 @@ ${telemetry ? TELEMETRY_PATCH : ""}
|
|
|
261
277
|
|
|
262
278
|
export default {
|
|
263
279
|
async fetch(request, env, ctx) {
|
|
264
|
-
const _b44Env = (request.headers.get('base44-functions-version') ?? '') === 'prod' ? 'prod' : 'preview';
|
|
280
|
+
${runtimeSecrets ? ACTIVATION_TAKE : ""} const _b44Env = (request.headers.get('base44-functions-version') ?? '') === 'prod' ? 'prod' : 'preview';
|
|
265
281
|
const functionName = request.headers.get("Base44-Function-Name");
|
|
266
282
|
return _b44Run({ env: _b44Env, fn: functionName ?? '', secrets: ${runtimeSecrets ? "process.env" : "env"}, workerEnv: env, waitUntil: (p) => ctx.waitUntil(p), ..._b44CaptureStore(request)${telemetry ? `, ${TELEMETRY_STORE_FIELDS}` : ""} }, async () => {
|
|
267
283
|
${runtimeSecrets ? ACTIVATION_GATE : ""} // Each early return below logs through the patch first: per-function log
|
|
@@ -271,22 +287,22 @@ ${runtimeSecrets ? ACTIVATION_GATE : ""} // Each early return below logs th
|
|
|
271
287
|
if (pendingHandler === undefined) {
|
|
272
288
|
const message = \`No function registered for "\${functionName ?? ""}"\`;
|
|
273
289
|
console.error(message);
|
|
274
|
-
return _b44AttachInvocationLogs(new Response(message, { status: 404 }));
|
|
290
|
+
return ${guard("_b44AttachInvocationLogs(new Response(message, { status: 404 }))")};
|
|
275
291
|
}
|
|
276
292
|
let handler;
|
|
277
293
|
try {
|
|
278
294
|
handler = await pendingHandler;
|
|
279
295
|
} catch (e) {
|
|
280
296
|
console.error(\`Function "\${functionName}" failed to initialize:\`, e);
|
|
281
|
-
return _b44AttachInvocationLogs(new Response(
|
|
297
|
+
return ${guard(`_b44AttachInvocationLogs(new Response(
|
|
282
298
|
\`Function "\${functionName}" failed to initialize: \${e instanceof Error ? e.message : String(e)}\`,
|
|
283
299
|
{ status: 500 },
|
|
284
|
-
));
|
|
300
|
+
))`)};
|
|
285
301
|
}
|
|
286
302
|
if (handler === null) {
|
|
287
303
|
const message = \`Function "\${functionName}" must export default a request handler or call Deno.serve()\`;
|
|
288
304
|
console.error(message);
|
|
289
|
-
return _b44AttachInvocationLogs(new Response(message, { status: 503 }));
|
|
305
|
+
return ${guard("_b44AttachInvocationLogs(new Response(message, { status: 503 }))")};
|
|
290
306
|
}
|
|
291
307
|
// Real client IP is in the "cf-connecting-ip" header, not this placeholder.
|
|
292
308
|
const info = {
|
|
@@ -306,7 +322,7 @@ ${runtimeSecrets ? ACTIVATION_GATE : ""} // Each early return below logs th
|
|
|
306
322
|
} catch (e) {
|
|
307
323
|
console.error(e);
|
|
308
324
|
const crash = _b44CrashResponse(e);
|
|
309
|
-
if (crash) return crash;
|
|
325
|
+
if (crash) return ${guard("crash")};
|
|
310
326
|
throw e;
|
|
311
327
|
}
|
|
312
328
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/worker-entry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@base44/functions-compiler",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "Production compiler for Base44 backend functions — turns function sources into a single Cloudflare Workers module.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -23,9 +23,10 @@
|
|
|
23
23
|
"README.md"
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
|
-
"build": "bun run clean && bun run build:shim && tsc -p tsconfig.build.json
|
|
26
|
+
"build": "bun run clean && bun run build:shim && tsc -p tsconfig.build.json",
|
|
27
27
|
"build:shim": "bun run scripts/build-shim.ts",
|
|
28
|
-
"
|
|
28
|
+
"prepare": "bun run build:shim",
|
|
29
|
+
"clean": "rm -rf dist lib src/generated",
|
|
29
30
|
"typecheck": "tsc --noEmit",
|
|
30
31
|
"test": "bun run build:shim && vitest run"
|
|
31
32
|
},
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
// GENERATED by scripts/build-shim.ts from src/shim/activation.ts — do not edit.
|
|
2
|
-
// Regenerate with `npm run build:shim`.
|
|
3
|
-
|
|
4
|
-
// src/shim/activation.ts
|
|
5
|
-
import { inflateSync } from "node:zlib";
|
|
6
|
-
import { setRuntimeManifest } from "base44:private-data-sources/runtime-manifest-store";
|
|
7
|
-
var NEEDS_ACTIVATION_HEADER = "X-Base44-Needs-Activation";
|
|
8
|
-
var RUNTIME_SECRETS_HEADER = "Base44-Runtime-Secrets";
|
|
9
|
-
var HKDF_INFO = "base44-runtime-secrets-v1";
|
|
10
|
-
var BACKEND_PUBKEY_LEN = 65;
|
|
11
|
-
var NONCE_LEN = 12;
|
|
12
|
-
var DATA_KEY_LEN = 32;
|
|
13
|
-
var WRAP_BLOCK_LEN = NONCE_LEN + DATA_KEY_LEN + 16;
|
|
14
|
-
var BLOB_BINDING_PREFIX = "BASE44_SECRETS_BLOB";
|
|
15
|
-
var BLOB_KEY_ID_LEN = 1;
|
|
16
|
-
var MANIFEST_KEY = "BASE44_PRIVATE_DATA_SOURCES";
|
|
17
|
-
var _subtle = crypto.subtle;
|
|
18
|
-
var _subtleGenerateKey = _subtle.generateKey.bind(_subtle);
|
|
19
|
-
var _subtleExportKey = _subtle.exportKey.bind(_subtle);
|
|
20
|
-
var _subtleImportKey = _subtle.importKey.bind(_subtle);
|
|
21
|
-
var _subtleDeriveBits = _subtle.deriveBits.bind(_subtle);
|
|
22
|
-
var _subtleDecrypt = _subtle.decrypt.bind(_subtle);
|
|
23
|
-
var _JSONparse = JSON.parse;
|
|
24
|
-
var _TextDecoder = TextDecoder;
|
|
25
|
-
var _TextEncoder = TextEncoder;
|
|
26
|
-
var _decodeUtf8 = TextDecoder.prototype.decode;
|
|
27
|
-
var _encodeUtf8 = TextEncoder.prototype.encode;
|
|
28
|
-
var _Uint8Array = Uint8Array;
|
|
29
|
-
var _atob = atob;
|
|
30
|
-
var _btoa = btoa;
|
|
31
|
-
var _DOMException = DOMException;
|
|
32
|
-
var _ObjectEntries = Object.entries;
|
|
33
|
-
var _Headers = Headers;
|
|
34
|
-
var _Request = Request;
|
|
35
|
-
var _Response = Response;
|
|
36
|
-
var _headersGet = Headers.prototype.get;
|
|
37
|
-
var _headersAppend = Headers.prototype.append;
|
|
38
|
-
var _headersEntries = Headers.prototype.entries;
|
|
39
|
-
var _iterNext = Object.getPrototypeOf(new Headers().entries()).next;
|
|
40
|
-
function accessor(proto, name) {
|
|
41
|
-
for (let o = proto; o; o = Object.getPrototypeOf(o)) {
|
|
42
|
-
const d = Object.getOwnPropertyDescriptor(o, name);
|
|
43
|
-
if (d?.get) return d.get;
|
|
44
|
-
}
|
|
45
|
-
return void 0;
|
|
46
|
-
}
|
|
47
|
-
var _reqHeaders = accessor(Request.prototype, "headers");
|
|
48
|
-
var _resHeaders = accessor(Response.prototype, "headers");
|
|
49
|
-
var _resStatus = accessor(Response.prototype, "status");
|
|
50
|
-
var _resStatusText = accessor(Response.prototype, "statusText");
|
|
51
|
-
var _resBody = accessor(Response.prototype, "body");
|
|
52
|
-
var _resWebSocket = accessor(Response.prototype, "webSocket");
|
|
53
|
-
var NEEDS_ACTIVATION_HEADER_LC = "x-base44-needs-activation";
|
|
54
|
-
var RUNTIME_SECRETS_HEADER_LC = "base44-runtime-secrets";
|
|
55
|
-
function headersWithout(src, dropLowercased) {
|
|
56
|
-
const out = new _Headers();
|
|
57
|
-
const it = _headersEntries.call(src);
|
|
58
|
-
for (; ; ) {
|
|
59
|
-
const step = _iterNext.call(it);
|
|
60
|
-
if (step.done) break;
|
|
61
|
-
if (step.value[0] !== dropLowercased) _headersAppend.call(out, step.value[0], step.value[1]);
|
|
62
|
-
}
|
|
63
|
-
return out;
|
|
64
|
-
}
|
|
65
|
-
var keyPairPromise = null;
|
|
66
|
-
var installed = false;
|
|
67
|
-
var pendingInstall = null;
|
|
68
|
-
var installChain = Promise.resolve();
|
|
69
|
-
function getKeyPair() {
|
|
70
|
-
keyPairPromise ??= _subtleGenerateKey(
|
|
71
|
-
{ name: "ECDH", namedCurve: "P-256" },
|
|
72
|
-
false,
|
|
73
|
-
["deriveBits"]
|
|
74
|
-
).catch((e) => {
|
|
75
|
-
keyPairPromise = null;
|
|
76
|
-
throw e;
|
|
77
|
-
});
|
|
78
|
-
return keyPairPromise;
|
|
79
|
-
}
|
|
80
|
-
async function needsActivationResponse() {
|
|
81
|
-
const { publicKey } = await getKeyPair();
|
|
82
|
-
const raw = await _subtleExportKey("raw", publicKey);
|
|
83
|
-
return new Response(null, {
|
|
84
|
-
status: 503,
|
|
85
|
-
headers: {
|
|
86
|
-
[NEEDS_ACTIVATION_HEADER]: toBase64Url(new _Uint8Array(raw)),
|
|
87
|
-
"Cache-Control": "no-store"
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
async function install(envelopeB64, env) {
|
|
92
|
-
const envelope = fromBase64Url(envelopeB64);
|
|
93
|
-
const backendPub = envelope.slice(0, BACKEND_PUBKEY_LEN);
|
|
94
|
-
const recipientCount = envelope[BACKEND_PUBKEY_LEN];
|
|
95
|
-
const { privateKey } = await getKeyPair();
|
|
96
|
-
const peer = await _subtleImportKey(
|
|
97
|
-
"raw",
|
|
98
|
-
backendPub,
|
|
99
|
-
{ name: "ECDH", namedCurve: "P-256" },
|
|
100
|
-
false,
|
|
101
|
-
[]
|
|
102
|
-
);
|
|
103
|
-
const shared = await _subtleDeriveBits({ name: "ECDH", public: peer }, privateKey, 256);
|
|
104
|
-
const hkdfKey = await _subtleImportKey("raw", shared, "HKDF", false, ["deriveBits"]);
|
|
105
|
-
const keyBits = await _subtleDeriveBits(
|
|
106
|
-
{
|
|
107
|
-
name: "HKDF",
|
|
108
|
-
hash: "SHA-256",
|
|
109
|
-
salt: new _Uint8Array(0),
|
|
110
|
-
info: _encodeUtf8.call(new _TextEncoder(), HKDF_INFO)
|
|
111
|
-
},
|
|
112
|
-
hkdfKey,
|
|
113
|
-
256
|
|
114
|
-
);
|
|
115
|
-
const kek = await _subtleImportKey("raw", keyBits, "AES-GCM", false, ["decrypt"]);
|
|
116
|
-
const appId = env?.BASE44_APP_ID;
|
|
117
|
-
const aad = _encodeUtf8.call(new _TextEncoder(), typeof appId === "string" ? appId : "");
|
|
118
|
-
let dataKeyBytes = null;
|
|
119
|
-
for (let i = 0; i < recipientCount && dataKeyBytes === null; i++) {
|
|
120
|
-
const blockStart = BACKEND_PUBKEY_LEN + 1 + i * WRAP_BLOCK_LEN;
|
|
121
|
-
const wrapNonce = envelope.slice(blockStart, blockStart + NONCE_LEN);
|
|
122
|
-
const wrapped = envelope.slice(blockStart + NONCE_LEN, blockStart + WRAP_BLOCK_LEN);
|
|
123
|
-
try {
|
|
124
|
-
dataKeyBytes = await _subtleDecrypt(
|
|
125
|
-
{ name: "AES-GCM", iv: wrapNonce, additionalData: aad },
|
|
126
|
-
kek,
|
|
127
|
-
wrapped
|
|
128
|
-
);
|
|
129
|
-
} catch {
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (dataKeyBytes === null) {
|
|
133
|
-
throw new _DOMException("no wrap block for this isolate", "OperationError");
|
|
134
|
-
}
|
|
135
|
-
const bindings = env ?? {};
|
|
136
|
-
let blobB64 = "";
|
|
137
|
-
for (let i = 0; ; i++) {
|
|
138
|
-
const part = bindings[`${BLOB_BINDING_PREFIX}_${i}`];
|
|
139
|
-
if (typeof part !== "string") break;
|
|
140
|
-
blobB64 += part;
|
|
141
|
-
}
|
|
142
|
-
if (blobB64 === "") {
|
|
143
|
-
throw new _DOMException("no secret blob bindings on this script", "OperationError");
|
|
144
|
-
}
|
|
145
|
-
const blob = fromBase64Url(blobB64);
|
|
146
|
-
const blobNonce = blob.slice(BLOB_KEY_ID_LEN, BLOB_KEY_ID_LEN + NONCE_LEN);
|
|
147
|
-
const blobCiphertext = blob.slice(BLOB_KEY_ID_LEN + NONCE_LEN);
|
|
148
|
-
const dataKey = await _subtleImportKey("raw", dataKeyBytes, "AES-GCM", false, ["decrypt"]);
|
|
149
|
-
const plaintext = await _subtleDecrypt(
|
|
150
|
-
{ name: "AES-GCM", iv: blobNonce, additionalData: aad },
|
|
151
|
-
dataKey,
|
|
152
|
-
blobCiphertext
|
|
153
|
-
);
|
|
154
|
-
const payload = _JSONparse(
|
|
155
|
-
_decodeUtf8.call(new _TextDecoder(), inflateSync(new _Uint8Array(plaintext)))
|
|
156
|
-
);
|
|
157
|
-
const secrets = payload && typeof payload === "object" && payload.secrets ? payload.secrets : {};
|
|
158
|
-
const manifestValue = secrets[MANIFEST_KEY];
|
|
159
|
-
setRuntimeManifest(typeof manifestValue === "string" ? manifestValue : "");
|
|
160
|
-
for (const [key, value] of _ObjectEntries(secrets)) {
|
|
161
|
-
if (key !== MANIFEST_KEY && typeof value === "string") process.env[key] = value;
|
|
162
|
-
}
|
|
163
|
-
installed = true;
|
|
164
|
-
}
|
|
165
|
-
function installOnce(envelopeB64, env) {
|
|
166
|
-
if (installed) return Promise.resolve();
|
|
167
|
-
const afterPrevious = installChain.then(void 0, () => {
|
|
168
|
-
});
|
|
169
|
-
const run = afterPrevious.then(() => installed ? void 0 : install(envelopeB64, env));
|
|
170
|
-
installChain = run.then(void 0, () => {
|
|
171
|
-
});
|
|
172
|
-
pendingInstall = run;
|
|
173
|
-
const clear = () => {
|
|
174
|
-
if (pendingInstall === run) pendingInstall = null;
|
|
175
|
-
};
|
|
176
|
-
run.then(clear, clear);
|
|
177
|
-
return run;
|
|
178
|
-
}
|
|
179
|
-
async function ensureActivation(request, env) {
|
|
180
|
-
const header = _headersGet.call(_reqHeaders.call(request), RUNTIME_SECRETS_HEADER);
|
|
181
|
-
if (header) {
|
|
182
|
-
try {
|
|
183
|
-
await installOnce(header, env);
|
|
184
|
-
return null;
|
|
185
|
-
} catch (e) {
|
|
186
|
-
console.error(
|
|
187
|
-
`Base44 runtime-secrets activation failed, re-signaling: ${e?.name ?? "error"}`
|
|
188
|
-
);
|
|
189
|
-
return needsActivationResponse();
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
if (installed) return null;
|
|
193
|
-
if (pendingInstall) {
|
|
194
|
-
try {
|
|
195
|
-
await pendingInstall;
|
|
196
|
-
} catch {
|
|
197
|
-
}
|
|
198
|
-
if (installed) return null;
|
|
199
|
-
}
|
|
200
|
-
return needsActivationResponse();
|
|
201
|
-
}
|
|
202
|
-
function withoutRuntimeSecretsHeader(request) {
|
|
203
|
-
const raw = _reqHeaders.call(request);
|
|
204
|
-
if (_headersGet.call(raw, RUNTIME_SECRETS_HEADER) === null) return request;
|
|
205
|
-
return new _Request(request, { headers: headersWithout(raw, RUNTIME_SECRETS_HEADER_LC) });
|
|
206
|
-
}
|
|
207
|
-
function withoutActivationSignal(response) {
|
|
208
|
-
const raw = _resHeaders.call(response);
|
|
209
|
-
if (_headersGet.call(raw, NEEDS_ACTIVATION_HEADER) === null) return response;
|
|
210
|
-
return new _Response(_resBody.call(response), {
|
|
211
|
-
status: _resStatus.call(response),
|
|
212
|
-
statusText: _resStatusText.call(response),
|
|
213
|
-
headers: headersWithout(raw, NEEDS_ACTIVATION_HEADER_LC),
|
|
214
|
-
// Preserved or a 101 upgrade would fail to reconstruct.
|
|
215
|
-
webSocket: _resWebSocket ? _resWebSocket.call(response) : void 0
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
function toBase64Url(bytes) {
|
|
219
|
-
let bin = "";
|
|
220
|
-
for (const b of bytes) bin += String.fromCharCode(b);
|
|
221
|
-
return _btoa(bin).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
222
|
-
}
|
|
223
|
-
function fromBase64Url(value) {
|
|
224
|
-
const b64 = value.replace(/-/g, "+").replace(/_/g, "/");
|
|
225
|
-
const padded = b64 + "=".repeat((4 - b64.length % 4) % 4);
|
|
226
|
-
const bin = _atob(padded);
|
|
227
|
-
const bytes = new _Uint8Array(bin.length);
|
|
228
|
-
for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);
|
|
229
|
-
return bytes;
|
|
230
|
-
}
|
|
231
|
-
export {
|
|
232
|
-
NEEDS_ACTIVATION_HEADER,
|
|
233
|
-
RUNTIME_SECRETS_HEADER,
|
|
234
|
-
ensureActivation,
|
|
235
|
-
withoutActivationSignal,
|
|
236
|
-
withoutRuntimeSecretsHeader
|
|
237
|
-
};
|