run402 2.21.0 → 2.23.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.
- package/lib/assets.mjs +18 -6
- package/lib/deploy-v2.mjs +38 -0
- package/lib/doctor-source-scan.mjs +424 -0
- package/lib/doctor-source-scan.test.mjs +318 -0
- package/lib/doctor.mjs +66 -2
- package/lib/email.mjs +30 -12
- package/lib/functions.mjs +37 -12
- package/lib/init-astro.mjs +92 -3
- package/package.json +1 -1
- package/sdk/dist/namespaces/projects.types.d.ts +0 -28
- package/sdk/dist/namespaces/projects.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/tier.d.ts +7 -8
- package/sdk/dist/namespaces/tier.d.ts.map +1 -1
package/lib/init-astro.mjs
CHANGED
|
@@ -215,11 +215,10 @@ const { title, ogImage, canonical } = Astro.props;
|
|
|
215
215
|
// 2. DB update.
|
|
216
216
|
// 3. cache.invalidate() so the public URL re-renders fresh on next visit.
|
|
217
217
|
import type { APIRoute } from "astro";
|
|
218
|
-
import { db,
|
|
218
|
+
import { db, auth, cache } from "@run402/functions";
|
|
219
219
|
|
|
220
220
|
export const POST: APIRoute = async ({ request }) => {
|
|
221
|
-
const user = await
|
|
222
|
-
if (!user) return new Response("Unauthorized", { status: 401 });
|
|
221
|
+
const user = await auth.requireUser();
|
|
223
222
|
|
|
224
223
|
const body = (await request.json()) as { slug: string; title: string; html: string };
|
|
225
224
|
if (!body?.slug) return new Response("Missing slug", { status: 400 });
|
|
@@ -236,6 +235,96 @@ export const POST: APIRoute = async ({ request }) => {
|
|
|
236
235
|
headers: { "content-type": "application/json" },
|
|
237
236
|
});
|
|
238
237
|
};
|
|
238
|
+
`,
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
path: "AGENTS.md",
|
|
242
|
+
content: `# AGENTS.md
|
|
243
|
+
|
|
244
|
+
This file documents the brutally-small Run402 surface this Astro project
|
|
245
|
+
uses. Coding agents: read this first. The platform is intentionally small —
|
|
246
|
+
there are no other auth helpers, no other client surfaces, and no other
|
|
247
|
+
hidden APIs.
|
|
248
|
+
|
|
249
|
+
## The auth surface
|
|
250
|
+
|
|
251
|
+
\`auth\` is the entire user-auth surface. Import from \`@run402/functions\`:
|
|
252
|
+
|
|
253
|
+
\`\`\`ts
|
|
254
|
+
import { auth } from "@run402/functions";
|
|
255
|
+
|
|
256
|
+
// In SSR pages and API routes:
|
|
257
|
+
const user = await auth.user(); // Actor | null
|
|
258
|
+
const user = await auth.requireUser(); // Actor; throws R402_AUTH_REQUIRED
|
|
259
|
+
const { user, role } = await auth.requireRole("admin");
|
|
260
|
+
const { user, membership } = await auth.requireMembership("member");
|
|
261
|
+
await auth.requireFresh({ maxAge: "10m", amr: ["passkey"] });
|
|
262
|
+
|
|
263
|
+
// CSRF for hosted forms (server-side, in <form> rendering):
|
|
264
|
+
const field = auth.csrfField();
|
|
265
|
+
// → <input type="hidden" name="_csrf" value="..." />
|
|
266
|
+
|
|
267
|
+
// Cross-origin-safe fetch (auto-forwards actor context to same-origin):
|
|
268
|
+
const res = await auth.fetch("/api/internal"); // relative URLs only
|
|
269
|
+
\`\`\`
|
|
270
|
+
|
|
271
|
+
## The four Never rules
|
|
272
|
+
|
|
273
|
+
1. **Never \`try\`/\`catch\` auth errors.** Let them bubble. The platform turns
|
|
274
|
+
\`R402_AUTH_REQUIRED\` into a 303 to \`/auth/sign-in?return_to=…\` and
|
|
275
|
+
\`R402_AUTH_INSUFFICIENT_ROLE\` into 403 with a fix-it response. Catching
|
|
276
|
+
them creates silent-null bugs.
|
|
277
|
+
|
|
278
|
+
2. **Never \`.eq("user_id", user.id)\`.** \`db()\` propagates the actor to
|
|
279
|
+
PostgREST so RLS enforces ownership server-side. The redundant filter is
|
|
280
|
+
a code smell that \`run402 doctor\` flags as
|
|
281
|
+
\`R402_AUTH_REDUNDANT_USER_FILTER\`.
|
|
282
|
+
|
|
283
|
+
3. **Never set client-supplied actor headers.** \`x-run402-actor-*\`,
|
|
284
|
+
\`run402.actor.*\`, \`x-r402-actor-*\` are platform-owned channel headers.
|
|
285
|
+
The gateway strips inbound spoofing attempts and emits
|
|
286
|
+
\`R402_AUTH_ACTOR_HEADER_SPOOF\` in strict mode.
|
|
287
|
+
|
|
288
|
+
4. **Never mint a session from a raw \`userId\`.** Use
|
|
289
|
+
\`auth.sessions.createResponseFromIdentity({ provider, subject, proof, amr })\`
|
|
290
|
+
with a verified identity proof. No \`createSessionForUserId(uuid)\` API exists.
|
|
291
|
+
|
|
292
|
+
## Hosted UI components
|
|
293
|
+
|
|
294
|
+
For sign-in, sign-up, and sign-out chrome, use the platform's
|
|
295
|
+
\`@run402/astro\` components — they emit forms posting to platform hosted
|
|
296
|
+
routes (\`/auth/v1/sign-in\` etc.) with the CSRF token already wired:
|
|
297
|
+
|
|
298
|
+
\`\`\`astro
|
|
299
|
+
---
|
|
300
|
+
import { SignIn, SignUp, UserButton, SignedIn, SignedOut } from "@run402/astro";
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
<SignedIn>
|
|
304
|
+
<UserButton />
|
|
305
|
+
</SignedIn>
|
|
306
|
+
<SignedOut>
|
|
307
|
+
<SignIn returnTo="/dashboard" />
|
|
308
|
+
</SignedOut>
|
|
309
|
+
\`\`\`
|
|
310
|
+
|
|
311
|
+
Do NOT roll your own sign-in form. The hosted routes handle CSRF, returnTo
|
|
312
|
+
validation, OAuth provider bridges, and passkey ceremonies.
|
|
313
|
+
|
|
314
|
+
## Rendering-mode quick map
|
|
315
|
+
|
|
316
|
+
\`auth.*\` calls run at request time, so the page must be SSR or a
|
|
317
|
+
server-island. Calling \`auth.user()\` from a prerendered page throws
|
|
318
|
+
\`R402_AUTH_PRERENDERED\`.
|
|
319
|
+
|
|
320
|
+
| Mode | When | Auth-aware |
|
|
321
|
+
| ----------------------------- | ----------------------------------- | ----------------------- |
|
|
322
|
+
| SSR (default) | Personalized pages | \`auth.user()\` works |
|
|
323
|
+
| Prerendered | Marketing pages, never sees actor | \`auth.*\` throws |
|
|
324
|
+
| Server island | Prerendered page + personalized slot| \`auth.*\` in the island|
|
|
325
|
+
| Client hydrate | Visibility-only, no SSR pass | Component hits session |
|
|
326
|
+
|
|
327
|
+
For error-code reference: https://run402.com/errors/#R402_AUTH_REQUIRED
|
|
239
328
|
`,
|
|
240
329
|
},
|
|
241
330
|
];
|
package/package.json
CHANGED
|
@@ -41,36 +41,8 @@ export type EffectiveProjectStatus = "active" | "past_due" | "frozen" | "dormant
|
|
|
41
41
|
export interface ProjectSummary {
|
|
42
42
|
id: string;
|
|
43
43
|
name: string;
|
|
44
|
-
tier: string;
|
|
45
|
-
/**
|
|
46
|
-
* Derived effective status — see {@link EffectiveProjectStatus}. Prefer
|
|
47
|
-
* this over `account_lifecycle_state` for serving decisions because it
|
|
48
|
-
* collapses per-project `deleted_at` / `archived_at` into the same union.
|
|
49
|
-
*/
|
|
50
|
-
effective_status: EffectiveProjectStatus;
|
|
51
|
-
/**
|
|
52
|
-
* The owning billing account's lifecycle state. Every project on the
|
|
53
|
-
* same account shares this value (gateway v1.57+).
|
|
54
|
-
*/
|
|
55
|
-
account_lifecycle_state: BillingAccountLifecycleState;
|
|
56
|
-
/**
|
|
57
|
-
* Mirror of the owning billing account's `lease_perpetual` flag. When
|
|
58
|
-
* `true`, the account never advances past `active` regardless of lease
|
|
59
|
-
* expiry. Replaces the v1.56 per-project `pinned`.
|
|
60
|
-
*/
|
|
61
|
-
lease_perpetual: boolean;
|
|
62
|
-
/** ISO timestamp when the user deleted this project. `null` if the project still exists. */
|
|
63
|
-
deleted_at: string | null;
|
|
64
|
-
/** ISO timestamp when an operator archived this project. `null` if not archived. */
|
|
65
|
-
archived_at: string | null;
|
|
66
44
|
api_calls: number;
|
|
67
45
|
storage_bytes: number;
|
|
68
|
-
/**
|
|
69
|
-
* Optional: the gateway's project list does not currently include the
|
|
70
|
-
* lease expiry. Read it from `r.tier.status()` if you need it.
|
|
71
|
-
* `null` is reserved for unleased accounts.
|
|
72
|
-
*/
|
|
73
|
-
lease_expires_at?: string | null;
|
|
74
46
|
created_at: string;
|
|
75
47
|
}
|
|
76
48
|
export interface ListProjectsResult {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.types.d.ts","sourceRoot":"","sources":["../../src/namespaces/projects.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,+FAA+F;IAC/F,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GACpC,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,SAAS,GACT,QAAQ,CAAC;AAEb;;;;;;;;;GASG;AACH,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,UAAU,GACV,QAAQ,GACR,SAAS,GACT,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"projects.types.d.ts","sourceRoot":"","sources":["../../src/namespaces/projects.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -67,17 +67,16 @@ export interface TierStatusResult {
|
|
|
67
67
|
lease_expires_at: string | null;
|
|
68
68
|
active: boolean;
|
|
69
69
|
/**
|
|
70
|
-
* Lifecycle state of the owning billing account
|
|
71
|
-
*
|
|
72
|
-
* mirrors the same field on each `projects[]` entry.
|
|
70
|
+
* Lifecycle state of the owning billing account. `null` only when the
|
|
71
|
+
* wallet has no billing account row (orphan wallet).
|
|
73
72
|
*/
|
|
74
|
-
account_lifecycle_state
|
|
73
|
+
account_lifecycle_state: "active" | "past_due" | "frozen" | "dormant" | "purged" | null;
|
|
75
74
|
/**
|
|
76
|
-
* Operator escape hatch flag on the owning billing account
|
|
77
|
-
*
|
|
78
|
-
*
|
|
75
|
+
* Operator escape hatch flag on the owning billing account. When `true`,
|
|
76
|
+
* the account never advances past `active` regardless of lease expiry.
|
|
77
|
+
* `null` only for orphan wallets with no billing account row.
|
|
79
78
|
*/
|
|
80
|
-
lease_perpetual
|
|
79
|
+
lease_perpetual: boolean | null;
|
|
81
80
|
pool_usage: {
|
|
82
81
|
projects: number;
|
|
83
82
|
total_api_calls: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier.d.ts","sourceRoot":"","sources":["../../src/namespaces/tier.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,wBAAwB,CAAC,EAAE;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,SAAS,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB
|
|
1
|
+
{"version":3,"file":"tier.d.ts","sourceRoot":"","sources":["../../src/namespaces/tier.ts"],"names":[],"mappings":"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"}
|