@beignet/cli 0.0.12 → 0.0.14
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/CHANGELOG.md +26 -0
- package/README.md +24 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/inspect.js +174 -0
- package/dist/inspect.js.map +1 -1
- package/dist/lint.d.ts.map +1 -1
- package/dist/lint.js +22 -3
- package/dist/lint.js.map +1 -1
- package/dist/make.d.ts +11 -0
- package/dist/make.d.ts.map +1 -1
- package/dist/make.js +1608 -0
- package/dist/make.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +14 -2
- package/dist/mcp.js.map +1 -1
- package/dist/templates/agents.d.ts +4 -3
- package/dist/templates/agents.d.ts.map +1 -1
- package/dist/templates/agents.js +4 -3
- package/dist/templates/agents.js.map +1 -1
- package/dist/templates/index.d.ts.map +1 -1
- package/dist/templates/index.js +1 -0
- package/dist/templates/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +35 -0
- package/src/inspect.ts +361 -0
- package/src/lint.ts +28 -3
- package/src/make.ts +1823 -0
- package/src/mcp.ts +16 -2
- package/src/templates/agents.ts +4 -3
- package/src/templates/index.ts +1 -0
package/dist/mcp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4BpE;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AA0NF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS,CA2G1E;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3E"}
|
package/dist/mcp.js
CHANGED
|
@@ -4,7 +4,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { applyDoctorFixes, inspectApp } from "./inspect.js";
|
|
6
6
|
import { lintApp } from "./lint.js";
|
|
7
|
-
import { makeAdapter, makeContract, makeEvent, makeFactory, makeFeature, makeFeatureAddonChoices, makeJob, makeListener, makeNotification, makePolicy, makePort, makeResource, makeSchedule, makeSeed, makeTask, makeTest, makeUpload, makeUseCase, } from "./make.js";
|
|
7
|
+
import { makeAdapter, makeContract, makeEvent, makeFactory, makeFeature, makeFeatureAddonChoices, makeJob, makeListener, makeNotification, makePayments, makePolicy, makePort, makeResource, makeSchedule, makeSeed, makeTask, makeTest, makeUpload, makeUseCase, } from "./make.js";
|
|
8
8
|
const makeArtifactChoices = [
|
|
9
9
|
"adapter",
|
|
10
10
|
"contract",
|
|
@@ -14,6 +14,7 @@ const makeArtifactChoices = [
|
|
|
14
14
|
"job",
|
|
15
15
|
"listener",
|
|
16
16
|
"notification",
|
|
17
|
+
"payments",
|
|
17
18
|
"policy",
|
|
18
19
|
"port",
|
|
19
20
|
"resource",
|
|
@@ -30,7 +31,8 @@ const makeInputSchema = {
|
|
|
30
31
|
.describe("Kind of artifact to generate."),
|
|
31
32
|
name: z
|
|
32
33
|
.string()
|
|
33
|
-
.
|
|
34
|
+
.optional()
|
|
35
|
+
.describe("Artifact name. Required except for payments. Feature-owned artifacts use feature-scoped paths such as posts/backfill."),
|
|
34
36
|
with: z
|
|
35
37
|
.array(z.enum(makeFeatureAddonChoices))
|
|
36
38
|
.optional()
|
|
@@ -101,6 +103,16 @@ async function safeToolResult(run) {
|
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
async function runMakeTool(cwd, input) {
|
|
106
|
+
if (input.artifact === "payments") {
|
|
107
|
+
return makePayments({
|
|
108
|
+
cwd,
|
|
109
|
+
force: input.force,
|
|
110
|
+
dryRun: input.dryRun,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
if (!input.name) {
|
|
114
|
+
throw new Error(`make ${input.artifact} requires a name.`);
|
|
115
|
+
}
|
|
104
116
|
const base = {
|
|
105
117
|
name: input.name,
|
|
106
118
|
cwd,
|
package/dist/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,WAAW,EACX,uBAAuB,EACvB,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,GACZ,MAAM,WAAW,CAAC;AAUnB,MAAM,mBAAmB,GAAG;IAC1B,SAAS;IACT,UAAU;IACV,OAAO;IACP,SAAS;IACT,SAAS;IACT,KAAK;IACL,UAAU;IACV,cAAc;IACd,QAAQ;IACR,MAAM;IACN,UAAU;IACV,UAAU;IACV,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,UAAU;CACF,CAAC;AAIX,MAAM,eAAe,GAAG;IACtB,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,mBAAmB,CAAC;SACzB,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CACP,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type TemplateContext } from "./shared.js";
|
|
2
2
|
/**
|
|
3
|
-
* AGENTS.md
|
|
4
|
-
* from the code: registration wiring, generators, and the
|
|
5
|
-
* README.md owns setup and the app map; this file must not
|
|
3
|
+
* AGENTS.md and CLAUDE.md teach coding agents the conventions that are not
|
|
4
|
+
* discoverable from the code: registration wiring, generators, and the
|
|
5
|
+
* validation loop. README.md owns setup and the app map; this file must not
|
|
6
|
+
* duplicate it.
|
|
6
7
|
*/
|
|
7
8
|
export declare function agentsMd(ctx: TemplateContext): string;
|
|
8
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAyFrD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAWpD"}
|
package/dist/templates/agents.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { json, packageRunner } from "./shared.js";
|
|
2
2
|
/**
|
|
3
|
-
* AGENTS.md
|
|
4
|
-
* from the code: registration wiring, generators, and the
|
|
5
|
-
* README.md owns setup and the app map; this file must not
|
|
3
|
+
* AGENTS.md and CLAUDE.md teach coding agents the conventions that are not
|
|
4
|
+
* discoverable from the code: registration wiring, generators, and the
|
|
5
|
+
* validation loop. README.md owns setup and the app map; this file must not
|
|
6
|
+
* duplicate it.
|
|
6
7
|
*/
|
|
7
8
|
export function agentsMd(ctx) {
|
|
8
9
|
const cli = packageRunner(ctx);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAExE
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/templates/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB;IAC3C,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,IAAI,GACR,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,WAAW,CAAC;IACvC,MAAM,MAAM,GACV,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,aAAa,CAAC;IACzC,MAAM,SAAS,GACb,GAAG,CAAC,cAAc,KAAK,KAAK;QAC1B,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,GAAG,GAAG,CAAC,cAAc,gBAAgB,CAAC;IAE5C,OAAO,KAAK,GAAG,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;mCAsBa,GAAG;IAClC,GAAG;;;;;IAKH,GAAG;kDAC2C,GAAG;;IAEjD,GAAG,yBAAyB,GAAG;;;;;;;EAOjC,IAAI;EACJ,GAAG;EACH,GAAG;EACH,IAAI;EACJ,SAAS;;;IAGP,IAAI,oCAAoC,MAAM;IAC9C,GAAG;;;;;;;;;;;;;;;;;;;;;;6BAsBsB,GAAG;CAC/B,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAoB;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAE9D,OAAO,IAAI,CAAC;QACV,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,OAAO;gBACP,IAAI,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC;aACzB;SACF;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAqBjE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,eAAe,EACf,cAAc,EACd,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAqBjE,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CAsHrE"}
|
package/dist/templates/index.js
CHANGED
|
@@ -20,6 +20,7 @@ export function getTemplateFiles(ctx) {
|
|
|
20
20
|
{ path: "package.json", content: packageJson(ctx) },
|
|
21
21
|
{ path: "README.md", content: readme(ctx) },
|
|
22
22
|
{ path: "AGENTS.md", content: agentsMd(ctx) },
|
|
23
|
+
{ path: "CLAUDE.md", content: agentsMd(ctx) },
|
|
23
24
|
{ path: ".mcp.json", content: mcpJson(ctx) },
|
|
24
25
|
{ path: ".gitignore", content: baseFiles.gitignore },
|
|
25
26
|
{ path: ".env.example", content: envExample(ctx) },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI for creating and maintaining Beignet apps.",
|
|
6
6
|
"main": "./dist/lib.js",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"typescript": "^5.3.0"
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@beignet/core": "^0.0.
|
|
69
|
+
"@beignet/core": "^0.0.14",
|
|
70
70
|
"@clack/prompts": "^1.5.1",
|
|
71
71
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
72
72
|
"@stricli/core": "^1.2.7",
|
package/src/index.ts
CHANGED
|
@@ -1058,6 +1058,31 @@ const makeScheduleCommand = buildCommand<
|
|
|
1058
1058
|
},
|
|
1059
1059
|
});
|
|
1060
1060
|
|
|
1061
|
+
const makePaymentsCommand = buildCommand<MakeFlags, [], CliContext>({
|
|
1062
|
+
docs: {
|
|
1063
|
+
brief: "Generate a payments-backed billing slice.",
|
|
1064
|
+
},
|
|
1065
|
+
parameters: {
|
|
1066
|
+
flags: makeFlagParameters,
|
|
1067
|
+
},
|
|
1068
|
+
loader: async () => {
|
|
1069
|
+
const { makePayments } = await import("./make.js");
|
|
1070
|
+
|
|
1071
|
+
return async function runMakePayments(this: CliContext, flags: MakeFlags) {
|
|
1072
|
+
const result = await makePayments({
|
|
1073
|
+
force: Boolean(flags.force),
|
|
1074
|
+
dryRun: Boolean(flags.dryRun),
|
|
1075
|
+
});
|
|
1076
|
+
writeOutput(
|
|
1077
|
+
this,
|
|
1078
|
+
flags.json
|
|
1079
|
+
? JSON.stringify(result, null, 2)
|
|
1080
|
+
: makePaymentsNextSteps(result),
|
|
1081
|
+
);
|
|
1082
|
+
};
|
|
1083
|
+
},
|
|
1084
|
+
});
|
|
1085
|
+
|
|
1061
1086
|
const makeRoutes = buildRouteMap({
|
|
1062
1087
|
docs: {
|
|
1063
1088
|
brief: "Generate Beignet app files.",
|
|
@@ -1094,6 +1119,7 @@ const makeRoutes = buildRouteMap({
|
|
|
1094
1119
|
"Generate a feature notification.",
|
|
1095
1120
|
makeNotificationNextSteps,
|
|
1096
1121
|
),
|
|
1122
|
+
payments: makePaymentsCommand,
|
|
1097
1123
|
listener: makeListenerCommand,
|
|
1098
1124
|
policy: simpleMakeCommand(
|
|
1099
1125
|
"makePolicy",
|
|
@@ -1512,6 +1538,15 @@ function makeNotificationNextSteps(result: MakeNextStepsResult): string {
|
|
|
1512
1538
|
]);
|
|
1513
1539
|
}
|
|
1514
1540
|
|
|
1541
|
+
function makePaymentsNextSteps(result: MakeNextStepsResult): string {
|
|
1542
|
+
return makeNextSteps(result, "billing slice", [
|
|
1543
|
+
"Set BILLING_TEAM_PRICE_ID in .env.local to the provider price ID for your team plan.",
|
|
1544
|
+
"Run beignet db generate and beignet db migrate so billing_accounts exists before handling webhooks.",
|
|
1545
|
+
"Use createMemoryPaymentsProvider() for local development, then swap server/providers.ts to stripePaymentsProvider when STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET are configured.",
|
|
1546
|
+
"Run your app's test, lint, and typecheck commands, then beignet lint and beignet doctor.",
|
|
1547
|
+
]);
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1515
1550
|
function makeListenerNextSteps(result: MakeNextStepsResult): string {
|
|
1516
1551
|
return makeNextSteps(result, "listener", [
|
|
1517
1552
|
"Replace the starter handler with the event reaction.",
|
package/src/inspect.ts
CHANGED
|
@@ -1975,6 +1975,30 @@ async function inspectProductionReadiness(
|
|
|
1975
1975
|
config,
|
|
1976
1976
|
sourceCache,
|
|
1977
1977
|
);
|
|
1978
|
+
const stripeMemoryProviderMismatch = await hasStripeMemoryProviderMismatch(
|
|
1979
|
+
targetDir,
|
|
1980
|
+
sourceCache,
|
|
1981
|
+
configFiles,
|
|
1982
|
+
installedPackages,
|
|
1983
|
+
providerEntries,
|
|
1984
|
+
);
|
|
1985
|
+
|
|
1986
|
+
diagnostics.push(
|
|
1987
|
+
...(await inspectEntitlementsProductionReadiness(
|
|
1988
|
+
targetDir,
|
|
1989
|
+
files,
|
|
1990
|
+
config,
|
|
1991
|
+
sourceCache,
|
|
1992
|
+
)),
|
|
1993
|
+
...(await inspectPaymentsProductionReadiness(
|
|
1994
|
+
targetDir,
|
|
1995
|
+
files,
|
|
1996
|
+
config,
|
|
1997
|
+
sourceCache,
|
|
1998
|
+
installedPackages,
|
|
1999
|
+
stripeMemoryProviderMismatch,
|
|
2000
|
+
)),
|
|
2001
|
+
);
|
|
1978
2002
|
|
|
1979
2003
|
for (const provider of providerDoctorRules) {
|
|
1980
2004
|
if (!installedPackages.has(provider.packageName)) continue;
|
|
@@ -2048,6 +2072,184 @@ async function inspectProductionReadiness(
|
|
|
2048
2072
|
return diagnostics;
|
|
2049
2073
|
}
|
|
2050
2074
|
|
|
2075
|
+
async function inspectEntitlementsProductionReadiness(
|
|
2076
|
+
targetDir: string,
|
|
2077
|
+
files: string[],
|
|
2078
|
+
config: ResolvedBeignetConfig,
|
|
2079
|
+
sourceCache: Map<string, string>,
|
|
2080
|
+
): Promise<InspectDiagnostic[]> {
|
|
2081
|
+
if (
|
|
2082
|
+
!(await usesEntitlementChecks(targetDir, files, sourceCache)) ||
|
|
2083
|
+
(await appPortsIncludesPort(
|
|
2084
|
+
targetDir,
|
|
2085
|
+
files,
|
|
2086
|
+
config,
|
|
2087
|
+
sourceCache,
|
|
2088
|
+
"entitlements",
|
|
2089
|
+
))
|
|
2090
|
+
) {
|
|
2091
|
+
return [];
|
|
2092
|
+
}
|
|
2093
|
+
|
|
2094
|
+
return [
|
|
2095
|
+
{
|
|
2096
|
+
severity: "warning",
|
|
2097
|
+
code: "BEIGNET_ENTITLEMENTS_PORT_MISSING",
|
|
2098
|
+
file: config.paths.ports,
|
|
2099
|
+
message:
|
|
2100
|
+
"This app checks entitlements, but AppPorts does not declare an entitlements port. Add entitlements: EntitlementsPort; and wire a provider-backed entitlement resolver before deploying paid feature gates.",
|
|
2101
|
+
},
|
|
2102
|
+
];
|
|
2103
|
+
}
|
|
2104
|
+
|
|
2105
|
+
async function inspectPaymentsProductionReadiness(
|
|
2106
|
+
targetDir: string,
|
|
2107
|
+
files: string[],
|
|
2108
|
+
config: ResolvedBeignetConfig,
|
|
2109
|
+
sourceCache: Map<string, string>,
|
|
2110
|
+
installedPackages: Set<string>,
|
|
2111
|
+
stripeMemoryProviderMismatch: boolean,
|
|
2112
|
+
): Promise<InspectDiagnostic[]> {
|
|
2113
|
+
if (
|
|
2114
|
+
!(
|
|
2115
|
+
hasBillingOrPaymentsFeature(files, config) ||
|
|
2116
|
+
installedPackages.has("@beignet/provider-payments-stripe")
|
|
2117
|
+
)
|
|
2118
|
+
) {
|
|
2119
|
+
return [];
|
|
2120
|
+
}
|
|
2121
|
+
|
|
2122
|
+
const diagnostics: InspectDiagnostic[] = [];
|
|
2123
|
+
|
|
2124
|
+
if (stripeMemoryProviderMismatch) {
|
|
2125
|
+
diagnostics.push({
|
|
2126
|
+
severity: "warning",
|
|
2127
|
+
code: "BEIGNET_PAYMENTS_STRIPE_MEMORY_PROVIDER",
|
|
2128
|
+
file: serverProviderFiles(files, config)[0] ?? config.paths.server,
|
|
2129
|
+
message:
|
|
2130
|
+
"@beignet/provider-payments-stripe is installed and Stripe env/config is present, but server/providers.ts still registers memory payments. Register stripePaymentsProvider before deploying Stripe-backed billing, or remove the Stripe provider/config until the app is ready to switch.",
|
|
2131
|
+
});
|
|
2132
|
+
}
|
|
2133
|
+
|
|
2134
|
+
if (!(await hasPaymentWebhookRoute(targetDir, files, config, sourceCache))) {
|
|
2135
|
+
diagnostics.push({
|
|
2136
|
+
severity: "warning",
|
|
2137
|
+
code: "BEIGNET_PAYMENTS_WEBHOOK_ROUTE_MISSING",
|
|
2138
|
+
file: directoryPath(config.paths.routes),
|
|
2139
|
+
message:
|
|
2140
|
+
"This app appears to use payments, but no route calls createPaymentWebhookRoute(...). Expose payment webhooks under app/api/webhooks/payments/route.ts or an equivalent configured route so provider events can update billing state.",
|
|
2141
|
+
});
|
|
2142
|
+
}
|
|
2143
|
+
|
|
2144
|
+
const billingContractsFile = `${directoryPath(config.paths.features)}/billing/contracts.ts`;
|
|
2145
|
+
if (files.includes(billingContractsFile)) {
|
|
2146
|
+
const source = await readCachedSource(
|
|
2147
|
+
targetDir,
|
|
2148
|
+
billingContractsFile,
|
|
2149
|
+
sourceCache,
|
|
2150
|
+
);
|
|
2151
|
+
const checkoutContract = exportedConstInitializer(
|
|
2152
|
+
source,
|
|
2153
|
+
"createCheckoutSession",
|
|
2154
|
+
);
|
|
2155
|
+
if (
|
|
2156
|
+
checkoutContract &&
|
|
2157
|
+
!(
|
|
2158
|
+
/\bidempotency\s*:/.test(checkoutContract) &&
|
|
2159
|
+
/["']idempotency-key["']/.test(checkoutContract)
|
|
2160
|
+
)
|
|
2161
|
+
) {
|
|
2162
|
+
diagnostics.push({
|
|
2163
|
+
severity: "warning",
|
|
2164
|
+
code: "BEIGNET_BILLING_CHECKOUT_IDEMPOTENCY_MISSING",
|
|
2165
|
+
file: billingContractsFile,
|
|
2166
|
+
contract: "createCheckoutSession",
|
|
2167
|
+
message:
|
|
2168
|
+
"The billing checkout contract appears to create payment sessions without idempotency metadata and an idempotency-key header. Mark checkout as idempotent so retries do not create duplicate payment sessions.",
|
|
2169
|
+
});
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
|
|
2173
|
+
const billingUseCasesFile = `${directoryPath(config.paths.features)}/billing/use-cases/index.ts`;
|
|
2174
|
+
if (files.includes(billingUseCasesFile)) {
|
|
2175
|
+
const source = await readCachedSource(
|
|
2176
|
+
targetDir,
|
|
2177
|
+
billingUseCasesFile,
|
|
2178
|
+
sourceCache,
|
|
2179
|
+
);
|
|
2180
|
+
if (
|
|
2181
|
+
/\bctx\.ports\.idempotency\b/.test(source) &&
|
|
2182
|
+
!(await appPortsIncludesIdempotency(
|
|
2183
|
+
targetDir,
|
|
2184
|
+
files,
|
|
2185
|
+
config,
|
|
2186
|
+
sourceCache,
|
|
2187
|
+
))
|
|
2188
|
+
) {
|
|
2189
|
+
diagnostics.push({
|
|
2190
|
+
severity: "warning",
|
|
2191
|
+
code: "BEIGNET_BILLING_IDEMPOTENCY_PORT_MISSING",
|
|
2192
|
+
file: config.paths.ports,
|
|
2193
|
+
message:
|
|
2194
|
+
"Billing use cases reference ctx.ports.idempotency, but AppPorts does not declare an idempotency port. Add idempotency to AppPorts and provider wiring, or remove the stale billing workflow dependency.",
|
|
2195
|
+
});
|
|
2196
|
+
}
|
|
2197
|
+
}
|
|
2198
|
+
|
|
2199
|
+
const billingEntitlementsFile = `${directoryPath(config.paths.features)}/billing/entitlements.ts`;
|
|
2200
|
+
if (
|
|
2201
|
+
files.includes(billingEntitlementsFile) &&
|
|
2202
|
+
!(await hasBillingEntitlementsProviderWiring(
|
|
2203
|
+
targetDir,
|
|
2204
|
+
files,
|
|
2205
|
+
config,
|
|
2206
|
+
sourceCache,
|
|
2207
|
+
))
|
|
2208
|
+
) {
|
|
2209
|
+
diagnostics.push({
|
|
2210
|
+
severity: "warning",
|
|
2211
|
+
code: "BEIGNET_BILLING_ENTITLEMENTS_PROVIDER_MISSING",
|
|
2212
|
+
file: path.dirname(config.paths.infrastructurePorts),
|
|
2213
|
+
message:
|
|
2214
|
+
"features/billing/entitlements.ts exists, but no infra or server provider appears to call createBillingEntitlements(...). Wire the billing-backed entitlements port into AppPorts so paid feature gates use app billing state.",
|
|
2215
|
+
});
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2218
|
+
return diagnostics;
|
|
2219
|
+
}
|
|
2220
|
+
|
|
2221
|
+
async function hasStripeMemoryProviderMismatch(
|
|
2222
|
+
targetDir: string,
|
|
2223
|
+
sourceCache: Map<string, string>,
|
|
2224
|
+
configFiles: string[],
|
|
2225
|
+
installedPackages: Set<string>,
|
|
2226
|
+
providerEntries: string[],
|
|
2227
|
+
): Promise<boolean> {
|
|
2228
|
+
if (!installedPackages.has("@beignet/provider-payments-stripe")) {
|
|
2229
|
+
return false;
|
|
2230
|
+
}
|
|
2231
|
+
if (
|
|
2232
|
+
findProviderEntryIndex(providerEntries, ["stripePaymentsProvider"]) >= 0
|
|
2233
|
+
) {
|
|
2234
|
+
return false;
|
|
2235
|
+
}
|
|
2236
|
+
if (
|
|
2237
|
+
findProviderEntryIndex(providerEntries, [
|
|
2238
|
+
"createMemoryPaymentsProvider",
|
|
2239
|
+
"createMemoryPayments",
|
|
2240
|
+
]) < 0
|
|
2241
|
+
) {
|
|
2242
|
+
return false;
|
|
2243
|
+
}
|
|
2244
|
+
|
|
2245
|
+
return anyFileMatches(
|
|
2246
|
+
targetDir,
|
|
2247
|
+
configFiles,
|
|
2248
|
+
/\bSTRIPE_(?:SECRET_KEY|WEBHOOK_SECRET)\b/,
|
|
2249
|
+
sourceCache,
|
|
2250
|
+
);
|
|
2251
|
+
}
|
|
2252
|
+
|
|
2051
2253
|
// Local-dev ranges such as the generated-app conformance vendoring point each
|
|
2052
2254
|
// @beignet/* package at a different path on purpose, so they are exempt from
|
|
2053
2255
|
// the declared-range comparison. Their installed versions still participate in
|
|
@@ -2200,9 +2402,22 @@ async function inspectProviderRegistrationDrift(
|
|
|
2200
2402
|
config,
|
|
2201
2403
|
sourceCache,
|
|
2202
2404
|
);
|
|
2405
|
+
const stripeMemoryProviderMismatch = await hasStripeMemoryProviderMismatch(
|
|
2406
|
+
targetDir,
|
|
2407
|
+
sourceCache,
|
|
2408
|
+
operationalConfigFiles(files, config),
|
|
2409
|
+
installedPackages,
|
|
2410
|
+
providerEntries,
|
|
2411
|
+
);
|
|
2203
2412
|
|
|
2204
2413
|
for (const provider of providerDoctorRules) {
|
|
2205
2414
|
if (!installedPackages.has(provider.packageName)) continue;
|
|
2415
|
+
if (
|
|
2416
|
+
provider.packageName === "@beignet/provider-payments-stripe" &&
|
|
2417
|
+
stripeMemoryProviderMismatch
|
|
2418
|
+
) {
|
|
2419
|
+
continue;
|
|
2420
|
+
}
|
|
2206
2421
|
|
|
2207
2422
|
if (provider.variants !== undefined) {
|
|
2208
2423
|
if (
|
|
@@ -2641,6 +2856,152 @@ function hasBetterAuthRoute(
|
|
|
2641
2856
|
);
|
|
2642
2857
|
}
|
|
2643
2858
|
|
|
2859
|
+
function hasBillingOrPaymentsFeature(
|
|
2860
|
+
files: string[],
|
|
2861
|
+
config: ResolvedBeignetConfig,
|
|
2862
|
+
): boolean {
|
|
2863
|
+
const featuresPath = directoryPath(config.paths.features);
|
|
2864
|
+
return files.some(
|
|
2865
|
+
(file) =>
|
|
2866
|
+
file.startsWith(`${featuresPath}/billing/`) ||
|
|
2867
|
+
file.startsWith(`${featuresPath}/payments/`),
|
|
2868
|
+
);
|
|
2869
|
+
}
|
|
2870
|
+
|
|
2871
|
+
async function hasPaymentWebhookRoute(
|
|
2872
|
+
targetDir: string,
|
|
2873
|
+
files: string[],
|
|
2874
|
+
config: ResolvedBeignetConfig,
|
|
2875
|
+
sourceCache: Map<string, string>,
|
|
2876
|
+
): Promise<boolean> {
|
|
2877
|
+
const routesPath = directoryPath(config.paths.routes);
|
|
2878
|
+
const routeFiles = files.filter(
|
|
2879
|
+
(file) => file.startsWith(`${routesPath}/`) && file.endsWith("/route.ts"),
|
|
2880
|
+
);
|
|
2881
|
+
|
|
2882
|
+
for (const file of routeFiles) {
|
|
2883
|
+
const source = await readCachedSource(targetDir, file, sourceCache);
|
|
2884
|
+
if (containsCallExpression(source, "createPaymentWebhookRoute")) {
|
|
2885
|
+
return true;
|
|
2886
|
+
}
|
|
2887
|
+
}
|
|
2888
|
+
|
|
2889
|
+
return false;
|
|
2890
|
+
}
|
|
2891
|
+
|
|
2892
|
+
async function appPortsIncludesIdempotency(
|
|
2893
|
+
targetDir: string,
|
|
2894
|
+
files: string[],
|
|
2895
|
+
config: ResolvedBeignetConfig,
|
|
2896
|
+
sourceCache: Map<string, string>,
|
|
2897
|
+
): Promise<boolean> {
|
|
2898
|
+
return appPortsIncludesPort(
|
|
2899
|
+
targetDir,
|
|
2900
|
+
files,
|
|
2901
|
+
config,
|
|
2902
|
+
sourceCache,
|
|
2903
|
+
"idempotency",
|
|
2904
|
+
);
|
|
2905
|
+
}
|
|
2906
|
+
|
|
2907
|
+
async function appPortsIncludesPort(
|
|
2908
|
+
targetDir: string,
|
|
2909
|
+
files: string[],
|
|
2910
|
+
config: ResolvedBeignetConfig,
|
|
2911
|
+
sourceCache: Map<string, string>,
|
|
2912
|
+
portName: string,
|
|
2913
|
+
): Promise<boolean> {
|
|
2914
|
+
if (!files.includes(config.paths.ports)) return false;
|
|
2915
|
+
|
|
2916
|
+
const source = await readCachedSource(
|
|
2917
|
+
targetDir,
|
|
2918
|
+
config.paths.ports,
|
|
2919
|
+
sourceCache,
|
|
2920
|
+
);
|
|
2921
|
+
const declarationStart = source.search(/\bexport\s+type\s+AppPorts\b/);
|
|
2922
|
+
if (declarationStart < 0) return false;
|
|
2923
|
+
|
|
2924
|
+
const bodyStart = source.indexOf("{", declarationStart);
|
|
2925
|
+
if (bodyStart < 0) return false;
|
|
2926
|
+
|
|
2927
|
+
const body = balancedObjectSource(source, bodyStart);
|
|
2928
|
+
return (
|
|
2929
|
+
body !== undefined &&
|
|
2930
|
+
new RegExp(`\\b${escapeRegExp(portName)}\\s*:`).test(body)
|
|
2931
|
+
);
|
|
2932
|
+
}
|
|
2933
|
+
|
|
2934
|
+
async function usesEntitlementChecks(
|
|
2935
|
+
targetDir: string,
|
|
2936
|
+
files: string[],
|
|
2937
|
+
sourceCache: Map<string, string>,
|
|
2938
|
+
): Promise<boolean> {
|
|
2939
|
+
for (const file of files) {
|
|
2940
|
+
if (!/\.(?:ts|tsx|mts|cts)$/.test(file)) continue;
|
|
2941
|
+
if (isTestSourceFile(file)) continue;
|
|
2942
|
+
|
|
2943
|
+
const source = await readCachedSource(targetDir, file, sourceCache);
|
|
2944
|
+
if (
|
|
2945
|
+
/\brequireEntitlement\s*\(/.test(source) ||
|
|
2946
|
+
/\bctx\.ports\.entitlements\b/.test(source)
|
|
2947
|
+
) {
|
|
2948
|
+
return true;
|
|
2949
|
+
}
|
|
2950
|
+
}
|
|
2951
|
+
|
|
2952
|
+
return false;
|
|
2953
|
+
}
|
|
2954
|
+
|
|
2955
|
+
async function hasBillingEntitlementsProviderWiring(
|
|
2956
|
+
targetDir: string,
|
|
2957
|
+
files: string[],
|
|
2958
|
+
config: ResolvedBeignetConfig,
|
|
2959
|
+
sourceCache: Map<string, string>,
|
|
2960
|
+
): Promise<boolean> {
|
|
2961
|
+
const infraPath = path.dirname(config.paths.infrastructurePorts);
|
|
2962
|
+
const serverPath = path.dirname(config.paths.server);
|
|
2963
|
+
const candidateFiles = files.filter(
|
|
2964
|
+
(file) =>
|
|
2965
|
+
/\.(?:ts|tsx|mts|cts)$/.test(file) &&
|
|
2966
|
+
!isTestSourceFile(file) &&
|
|
2967
|
+
(file.startsWith(`${infraPath}/`) || file.startsWith(`${serverPath}/`)),
|
|
2968
|
+
);
|
|
2969
|
+
|
|
2970
|
+
for (const file of candidateFiles) {
|
|
2971
|
+
const source = await readCachedSource(targetDir, file, sourceCache);
|
|
2972
|
+
if (containsCallExpression(source, "createBillingEntitlements")) {
|
|
2973
|
+
return true;
|
|
2974
|
+
}
|
|
2975
|
+
}
|
|
2976
|
+
|
|
2977
|
+
return false;
|
|
2978
|
+
}
|
|
2979
|
+
|
|
2980
|
+
function isTestSourceFile(file: string): boolean {
|
|
2981
|
+
return (
|
|
2982
|
+
/(?:^|\/)tests\//.test(file) ||
|
|
2983
|
+
/\.(?:test|spec)\.(?:ts|tsx|mts|cts)$/.test(file)
|
|
2984
|
+
);
|
|
2985
|
+
}
|
|
2986
|
+
|
|
2987
|
+
function exportedConstInitializer(
|
|
2988
|
+
source: string,
|
|
2989
|
+
exportName: string,
|
|
2990
|
+
): string | undefined {
|
|
2991
|
+
const declaration = new RegExp(
|
|
2992
|
+
`\\bexport\\s+const\\s+${escapeRegExp(exportName)}\\s*=`,
|
|
2993
|
+
).exec(source);
|
|
2994
|
+
if (declaration?.index === undefined) return undefined;
|
|
2995
|
+
|
|
2996
|
+
const start = declaration.index;
|
|
2997
|
+
const nextExport =
|
|
2998
|
+
/\n\s*export\s+(?:const|function|type|interface|class)\s+/g;
|
|
2999
|
+
nextExport.lastIndex = start + declaration[0].length;
|
|
3000
|
+
const next = nextExport.exec(source);
|
|
3001
|
+
|
|
3002
|
+
return source.slice(start, next?.index ?? source.length);
|
|
3003
|
+
}
|
|
3004
|
+
|
|
2644
3005
|
function featureNameFromContractFile(
|
|
2645
3006
|
file: string,
|
|
2646
3007
|
config: ResolvedBeignetConfig,
|