authflow-cli 0.1.1 → 0.3.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/LICENSE +201 -201
- package/README.md +374 -265
- package/dist/cli.js +4 -27
- package/dist/cli.js.map +1 -1
- package/dist/commands/connect.js +11 -1
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/get.d.ts +7 -0
- package/dist/commands/get.js +34 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/init.js +37 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.js +44 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/plan.d.ts +6 -0
- package/dist/commands/plan.js +26 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/probe.js +1 -0
- package/dist/commands/probe.js.map +1 -1
- package/dist/commands/register.js +24 -0
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/rotate-origin-key.d.ts +6 -0
- package/dist/commands/rotate-origin-key.js +56 -0
- package/dist/commands/rotate-origin-key.js.map +1 -0
- package/dist/commands/scaffold.js +31 -31
- package/dist/commands/set-connected-account.d.ts +7 -0
- package/dist/commands/set-connected-account.js +38 -0
- package/dist/commands/set-connected-account.js.map +1 -0
- package/dist/commands/set-origin.d.ts +5 -0
- package/dist/commands/set-origin.js +55 -19
- package/dist/commands/set-origin.js.map +1 -1
- package/dist/commands/status.d.ts +10 -0
- package/dist/commands/status.js +40 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/mcp/server.js +58 -7
- package/dist/mcp/server.js.map +1 -1
- package/dist/program.d.ts +6 -0
- package/dist/program.js +46 -0
- package/dist/program.js.map +1 -0
- package/dist/rail.d.ts +5 -0
- package/dist/rail.js +14 -1
- package/dist/rail.js.map +1 -1
- package/dist/status.d.ts +34 -0
- package/dist/status.js +124 -0
- package/dist/status.js.map +1 -0
- package/dist/surface.d.ts +22 -0
- package/dist/surface.js +22 -0
- package/dist/surface.js.map +1 -0
- package/package.json +56 -56
package/dist/status.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning a receipt into "what is done, what is left, and what do I type next".
|
|
3
|
+
*
|
|
4
|
+
* Onboarding is several commands that each half-configure a resource, and the state lived nowhere a
|
|
5
|
+
* tenant could see it: a half-configured resource answers 403 exactly like a broken one. The first
|
|
6
|
+
* tenant through deployed an origin, never ran set-origin, and spent the afternoon reading gateway
|
|
7
|
+
* errors that could not have told them which step was missing.
|
|
8
|
+
*/
|
|
9
|
+
/** MCP client config for the gateway URL — what a subscriber pastes to reach the paid server. */
|
|
10
|
+
export function cursorMcpConfig(receipt) {
|
|
11
|
+
const url = receipt.gateway_url?.trim() || receipt.resource?.trim();
|
|
12
|
+
if (!url) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
return { mcpServers: { [receipt.slug || "authflow-resource"]: { url } } };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The single output that would have prevented the worst failure of the first onboarding: the client
|
|
19
|
+
* was pointed at the origin's own hostname, which worked right up until the paywall went live and
|
|
20
|
+
* then failed as an unsigned request. The gateway URL is known the moment registration returns, so
|
|
21
|
+
* there is no reason to make anyone assemble it.
|
|
22
|
+
*/
|
|
23
|
+
export function formatCursorMcpConfig(receipt) {
|
|
24
|
+
const config = cursorMcpConfig(receipt);
|
|
25
|
+
if (!config) {
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
return [
|
|
29
|
+
"Connect an MCP client to the gateway, never to the origin hostname:",
|
|
30
|
+
"",
|
|
31
|
+
...JSON.stringify(config, null, 2)
|
|
32
|
+
.split("\n")
|
|
33
|
+
.map((line) => ` ${line}`),
|
|
34
|
+
"",
|
|
35
|
+
"The origin only accepts requests signed by the gateway. Pointing a client straight at the",
|
|
36
|
+
"origin returns 403 invalid_origin_identity, which looks like an auth bug and is not one.",
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
export function resourceReadiness(receipt) {
|
|
40
|
+
const slug = receipt.slug ?? "<slug>";
|
|
41
|
+
const pending = receipt.pending_requirements ?? [];
|
|
42
|
+
const blocked = (requirement) => pending.includes(requirement);
|
|
43
|
+
const steps = [
|
|
44
|
+
{
|
|
45
|
+
name: "resource registered",
|
|
46
|
+
done: Boolean(receipt.slug),
|
|
47
|
+
detail: receipt.resource ?? "not registered",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
name: "origin URI set",
|
|
51
|
+
done: Boolean(receipt.origin_base_uri) && !blocked("origin_base_uri"),
|
|
52
|
+
detail: receipt.origin_base_uri ?? "no origin — the gateway has nowhere to forward to",
|
|
53
|
+
command: receipt.origin_base_uri
|
|
54
|
+
? undefined
|
|
55
|
+
: `authflow set-origin --slug ${slug} --origin-url https://your-origin.example`,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "Stripe connected",
|
|
59
|
+
done: Boolean(receipt.connected_account_id) && !blocked("connected_account_id"),
|
|
60
|
+
detail: receipt.connected_account_id ?? "no connected account — nothing can be charged",
|
|
61
|
+
command: receipt.connected_account_id ? undefined : attachStripeCommand(slug),
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: "Stripe onboarding complete",
|
|
65
|
+
done: Boolean(receipt.connected_account_id) &&
|
|
66
|
+
!blocked("connected_account_id") &&
|
|
67
|
+
!blocked("stripe_onboarding_complete"),
|
|
68
|
+
detail: !receipt.connected_account_id
|
|
69
|
+
? "no connected account — attach one before Stripe can confirm charges"
|
|
70
|
+
: blocked("stripe_onboarding_complete")
|
|
71
|
+
? "Stripe has not confirmed charges_enabled yet"
|
|
72
|
+
: "charges enabled",
|
|
73
|
+
command: !receipt.connected_account_id
|
|
74
|
+
? attachStripeCommand(slug)
|
|
75
|
+
: blocked("stripe_onboarding_complete")
|
|
76
|
+
? `authflow connect --slug ${slug}`
|
|
77
|
+
: undefined,
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
// Conformance is not a receipt field: the rail records registration state, not whether the origin
|
|
81
|
+
// has been exercised. Prompt for it whenever the origin exists so it is not silently skipped.
|
|
82
|
+
if (receipt.origin_base_uri) {
|
|
83
|
+
steps.push({
|
|
84
|
+
name: "conformance probed",
|
|
85
|
+
done: false,
|
|
86
|
+
detail: "run the probe to confirm the origin fails closed on a bad identity header",
|
|
87
|
+
command: "authflow probe",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
slug,
|
|
92
|
+
status: receipt.status ?? (pending.length === 0 ? "live" : "draft"),
|
|
93
|
+
ready: pending.length === 0 && receipt.status === "live",
|
|
94
|
+
gatewayUrl: receipt.gateway_url ?? receipt.resource,
|
|
95
|
+
steps,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function attachStripeCommand(slug) {
|
|
99
|
+
return (`authflow connect --slug ${slug}` +
|
|
100
|
+
` (or authflow set-connected-account --slug ${slug} --account acct_…)`);
|
|
101
|
+
}
|
|
102
|
+
export function formatReadiness(readiness) {
|
|
103
|
+
const lines = [
|
|
104
|
+
`resource: ${readiness.slug}`,
|
|
105
|
+
`status: ${readiness.status}`,
|
|
106
|
+
];
|
|
107
|
+
if (readiness.gatewayUrl) {
|
|
108
|
+
lines.push(`gateway: ${readiness.gatewayUrl}`);
|
|
109
|
+
}
|
|
110
|
+
lines.push("");
|
|
111
|
+
for (const step of readiness.steps) {
|
|
112
|
+
lines.push(` ${step.done ? "[x]" : "[ ]"} ${step.name}`);
|
|
113
|
+
lines.push(` ${step.detail}`);
|
|
114
|
+
if (step.command) {
|
|
115
|
+
lines.push(` next: ${step.command}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
lines.push("");
|
|
119
|
+
lines.push(readiness.ready
|
|
120
|
+
? "The resource is live. Subscribers can reach it through the gateway URL."
|
|
121
|
+
: "The resource is not taking paid traffic yet. Clear the unchecked steps above.");
|
|
122
|
+
return lines.join("\n");
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The MCP onboarding server and the CLI are two fronts of one surface. When a tool exists on one
|
|
3
|
+
* and not the other, tenants following docs hit a dead end (tenant #1, set-connected-account).
|
|
4
|
+
*
|
|
5
|
+
* This map is the contract the surface-parity test enforces.
|
|
6
|
+
*/
|
|
7
|
+
export declare const mcpToolToCliCommand: {
|
|
8
|
+
readonly authflow_signup: "signup";
|
|
9
|
+
readonly authflow_doctor: "doctor";
|
|
10
|
+
readonly authflow_register_resource: "register";
|
|
11
|
+
readonly authflow_get_resource: "get";
|
|
12
|
+
readonly authflow_list_resources: "list";
|
|
13
|
+
readonly authflow_status: "status";
|
|
14
|
+
readonly authflow_integration_plan: "plan";
|
|
15
|
+
readonly authflow_start_stripe_connect: "connect";
|
|
16
|
+
readonly authflow_set_connected_account: "set-connected-account";
|
|
17
|
+
readonly authflow_set_origin: "set-origin";
|
|
18
|
+
readonly authflow_probe: "probe";
|
|
19
|
+
readonly authflow_mint_test_header: "mint-header";
|
|
20
|
+
readonly authflow_rotate_origin_key: "rotate-origin-key";
|
|
21
|
+
};
|
|
22
|
+
export type McpOnboardingTool = keyof typeof mcpToolToCliCommand;
|
package/dist/surface.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The MCP onboarding server and the CLI are two fronts of one surface. When a tool exists on one
|
|
3
|
+
* and not the other, tenants following docs hit a dead end (tenant #1, set-connected-account).
|
|
4
|
+
*
|
|
5
|
+
* This map is the contract the surface-parity test enforces.
|
|
6
|
+
*/
|
|
7
|
+
export const mcpToolToCliCommand = {
|
|
8
|
+
authflow_signup: "signup",
|
|
9
|
+
authflow_doctor: "doctor",
|
|
10
|
+
authflow_register_resource: "register",
|
|
11
|
+
authflow_get_resource: "get",
|
|
12
|
+
authflow_list_resources: "list",
|
|
13
|
+
authflow_status: "status",
|
|
14
|
+
authflow_integration_plan: "plan",
|
|
15
|
+
authflow_start_stripe_connect: "connect",
|
|
16
|
+
authflow_set_connected_account: "set-connected-account",
|
|
17
|
+
authflow_set_origin: "set-origin",
|
|
18
|
+
authflow_probe: "probe",
|
|
19
|
+
authflow_mint_test_header: "mint-header",
|
|
20
|
+
authflow_rotate_origin_key: "rotate-origin-key",
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"surface.js","sourceRoot":"","sources":["../src/surface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,eAAe,EAAE,QAAQ;IACzB,eAAe,EAAE,QAAQ;IACzB,0BAA0B,EAAE,UAAU;IACtC,qBAAqB,EAAE,KAAK;IAC5B,uBAAuB,EAAE,MAAM;IAC/B,eAAe,EAAE,QAAQ;IACzB,yBAAyB,EAAE,MAAM;IACjC,6BAA6B,EAAE,SAAS;IACxC,8BAA8B,EAAE,uBAAuB;IACvD,mBAAmB,EAAE,YAAY;IACjC,cAAc,EAAE,OAAO;IACvB,yBAAyB,EAAE,aAAa;IACxC,0BAA0B,EAAE,mBAAmB;CACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "authflow-cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Authflow Rail onboarding CLI — register, mint-header, probe, scaffold",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"authflow": "dist/cli.js"
|
|
8
|
-
},
|
|
9
|
-
"files": [
|
|
10
|
-
"dist",
|
|
11
|
-
"LICENSE",
|
|
12
|
-
"README.md"
|
|
13
|
-
],
|
|
14
|
-
"scripts": {
|
|
15
|
-
"build": "tsc",
|
|
16
|
-
"start": "node dist/cli.js",
|
|
17
|
-
"authflow": "tsx src/cli.ts",
|
|
18
|
-
"test": "node --import tsx --test \"test/**/*.test.ts\"",
|
|
19
|
-
"typecheck": "tsc -p tsconfig.test.json",
|
|
20
|
-
"prepublishOnly": "npm run build"
|
|
21
|
-
},
|
|
22
|
-
"engines": {
|
|
23
|
-
"node": ">=20"
|
|
24
|
-
},
|
|
25
|
-
"dependencies": {
|
|
26
|
-
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
27
|
-
"commander": "^13.1.0",
|
|
28
|
-
"zod": "^4.5.4"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@types/node": "^22.13.10",
|
|
32
|
-
"tsx": "^4.19.3",
|
|
33
|
-
"typescript": "^5.8.2"
|
|
34
|
-
},
|
|
35
|
-
"homepage": "https://docs.authflow.ai/docs/tools/cli",
|
|
36
|
-
"bugs": {
|
|
37
|
-
"url": "https://github.com/Snyder-Technology-LLC/Authflow.Rail/issues"
|
|
38
|
-
},
|
|
39
|
-
"repository": {
|
|
40
|
-
"type": "git",
|
|
41
|
-
"url": "git+https://github.com/Snyder-Technology-LLC/Authflow.Rail.git",
|
|
42
|
-
"directory": "sdk/cli"
|
|
43
|
-
},
|
|
44
|
-
"keywords": [
|
|
45
|
-
"mcp",
|
|
46
|
-
"authflow",
|
|
47
|
-
"oauth",
|
|
48
|
-
"cli",
|
|
49
|
-
"monetization"
|
|
50
|
-
],
|
|
51
|
-
"author": "Authflow LLC",
|
|
52
|
-
"license": "Apache-2.0",
|
|
53
|
-
"publishConfig": {
|
|
54
|
-
"access": "public"
|
|
55
|
-
}
|
|
56
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "authflow-cli",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Authflow Rail onboarding CLI — register, mint-header, probe, scaffold",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"authflow": "dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"LICENSE",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"start": "node dist/cli.js",
|
|
17
|
+
"authflow": "tsx src/cli.ts",
|
|
18
|
+
"test": "node --import tsx --test \"test/**/*.test.ts\"",
|
|
19
|
+
"typecheck": "tsc -p tsconfig.test.json",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=20"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
27
|
+
"commander": "^13.1.0",
|
|
28
|
+
"zod": "^4.5.4"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@types/node": "^22.13.10",
|
|
32
|
+
"tsx": "^4.19.3",
|
|
33
|
+
"typescript": "^5.8.2"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://docs.authflow.ai/docs/tools/cli",
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/Snyder-Technology-LLC/Authflow.Rail/issues"
|
|
38
|
+
},
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "git+https://github.com/Snyder-Technology-LLC/Authflow.Rail.git",
|
|
42
|
+
"directory": "sdk/cli"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"mcp",
|
|
46
|
+
"authflow",
|
|
47
|
+
"oauth",
|
|
48
|
+
"cli",
|
|
49
|
+
"monetization"
|
|
50
|
+
],
|
|
51
|
+
"author": "Authflow LLC",
|
|
52
|
+
"license": "Apache-2.0",
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"access": "public"
|
|
55
|
+
}
|
|
56
|
+
}
|