tru-mcp 0.9.0 → 0.11.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/dist/api-client.d.ts +2 -0
- package/dist/api-client.js +12 -0
- package/dist/api-client.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/init.js +16 -79
- package/dist/init.js.map +1 -1
- package/dist/server.js +51 -67
- package/dist/server.js.map +1 -1
- package/dist/tools/add_agent_signup.js +12 -7
- package/dist/tools/add_agent_signup.js.map +1 -1
- package/dist/tools/authenticate.d.ts +18 -2
- package/dist/tools/authenticate.js +48 -20
- package/dist/tools/authenticate.js.map +1 -1
- package/dist/tools/configure_products.js +3 -1
- package/dist/tools/configure_products.js.map +1 -1
- package/dist/tools/connect_stripe.js +5 -2
- package/dist/tools/connect_stripe.js.map +1 -1
- package/dist/tools/discover_api.js +5 -1
- package/dist/tools/discover_api.js.map +1 -1
- package/dist/tools/get_started.js +126 -87
- package/dist/tools/get_started.js.map +1 -1
- package/dist/tools/register_app.d.ts +2 -0
- package/dist/tools/register_app.js +11 -4
- package/dist/tools/register_app.js.map +1 -1
- package/dist/tools/validate_integration.js +42 -29
- package/dist/tools/validate_integration.js.map +1 -1
- package/package.json +1 -1
package/dist/api-client.d.ts
CHANGED
|
@@ -86,6 +86,7 @@ export interface RegisterAppParams {
|
|
|
86
86
|
allowed_fields?: string[];
|
|
87
87
|
redirect_uris?: string[];
|
|
88
88
|
provision_url?: string;
|
|
89
|
+
brand_color?: string;
|
|
89
90
|
}
|
|
90
91
|
export interface RegisterAppResponse {
|
|
91
92
|
app: {
|
|
@@ -175,5 +176,6 @@ export declare function getAppProducts(appIdOrServiceName: string): Promise<AppP
|
|
|
175
176
|
export declare function syncAppProducts(appId: string): Promise<AppProduct[]>;
|
|
176
177
|
/** Toggle agent visibility on a product — requires app's own API key */
|
|
177
178
|
export declare function setProductVisibility(appId: string, productId: string, agentVisible: boolean): Promise<AppProduct>;
|
|
179
|
+
export declare function reportSetupProgress(appId: string, steps: string | string[]): Promise<void>;
|
|
178
180
|
export declare function registerAppAuthenticated(params: Omit<RegisterAppParams, "owner_email">, token: string): Promise<RegisterAppResponse>;
|
|
179
181
|
export {};
|
package/dist/api-client.js
CHANGED
|
@@ -183,6 +183,18 @@ export async function setProductVisibility(appId, productId, agentVisible) {
|
|
|
183
183
|
body: JSON.stringify({ agent_visible: agentVisible }),
|
|
184
184
|
}));
|
|
185
185
|
}
|
|
186
|
+
// ─── Setup Progress Reporting ────────────────────────────────────
|
|
187
|
+
export async function reportSetupProgress(appId, steps) {
|
|
188
|
+
try {
|
|
189
|
+
await request(`/api/apps/setup-progress/${encodeURIComponent(appId)}`, {
|
|
190
|
+
method: "POST",
|
|
191
|
+
body: JSON.stringify({ steps }),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
// Non-critical — don't fail the tool if progress reporting fails
|
|
196
|
+
}
|
|
197
|
+
}
|
|
186
198
|
export async function registerAppAuthenticated(params, token) {
|
|
187
199
|
const url = `${getBaseUrl()}/api/apps`;
|
|
188
200
|
const res = await fetch(url, {
|
package/dist/api-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,gBAAgB,CAAC;AACrD,CAAC;AAED,wEAAwE;AACxE,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;AACvC,CAAC;AA8BD,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,UAAuB,EAAE;IAC5D,MAAM,GAAG,GAAG,GAAG,UAAU,EAAE,GAAG,IAAI,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,GAAG,OAAO;QACV,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,SAAS,EAAE;YACxB,GAAG,OAAO,CAAC,OAAO;SACnB;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa;IAC/C,OAAO,CAAC,MAAM,OAAO,CAAC,0BAA0B,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAA0B,CAAC;AACzG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAa,EACb,OAAe,EACf,MAAgB;IAEhB,OAAO,CAAC,MAAM,OAAO,CAAC,kBAAkB,EAAE;QACxC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,OAAO;YACP,MAAM;SACP,CAAC;KACH,CAAC,CAAsB,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAU;IAC/C,OAAO,CAAC,MAAM,OAAO,CAAC,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAsB,CAAC;AAC5F,CAAC;AAmBD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAa,EACb,WAAmB,EACnB,WAAoB,EACpB,IAAa,EACb,QAAiB,EACjB,QAAiB,EACjB,WAAoB,EACpB,MAAe,EACf,KAAc,EACd,WAAoB,EACpB,SAAkB;IAElB,OAAO,CAAC,MAAM,OAAO,CAAC,sBAAsB,EAAE;QAC5C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK;YACL,YAAY,EAAE,WAAW;YACzB,QAAQ,EAAE,QAAQ,IAAI,KAAK;YAC3B,WAAW;YACX,IAAI,EAAE,IAAI,IAAI,UAAU;YACxB,QAAQ;YACR,YAAY,EAAE,WAAW,IAAI,QAAQ;YACrC,MAAM;YACN,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,WAAW;YACzB,UAAU,EAAE,SAAS;SACtB,CAAC;KACH,CAAC,CAAmB,CAAC;AACxB,CAAC;AA0CD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,WAAmB;IAC9D,OAAO,CAAC,MAAM,OAAO,CAAC,wBAAwB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAsB,CAAC;AACzG,CAAC;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
package/dist/config.js
CHANGED
|
@@ -31,6 +31,11 @@ export function saveAuth(token, email) {
|
|
|
31
31
|
config.auth = { token, email };
|
|
32
32
|
writeConfig(config);
|
|
33
33
|
}
|
|
34
|
+
export function clearAuth() {
|
|
35
|
+
const config = readConfig();
|
|
36
|
+
delete config.auth;
|
|
37
|
+
writeConfig(config);
|
|
38
|
+
}
|
|
34
39
|
export function getStoredApp() {
|
|
35
40
|
const config = readConfig();
|
|
36
41
|
const app = config.app;
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/init.js
CHANGED
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
import { readFile, writeFile, access, mkdir } from "node:fs/promises";
|
|
3
3
|
import { join, dirname } from "node:path";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
|
-
import { createInterface } from "node:readline";
|
|
6
|
-
import { exec } from "node:child_process";
|
|
7
|
-
import { createMcpSession, pollMcpSession, verifyAuth } from "./api-client.js";
|
|
8
|
-
import { getStoredAuth, saveAuth } from "./config.js";
|
|
9
5
|
function detectTargets() {
|
|
10
6
|
const targets = [];
|
|
11
7
|
const cwd = process.cwd();
|
|
@@ -51,11 +47,10 @@ async function readJsonFile(p) {
|
|
|
51
47
|
return {};
|
|
52
48
|
}
|
|
53
49
|
}
|
|
54
|
-
function buildEntry(apiKey, apiUrl) {
|
|
55
|
-
const entry =
|
|
56
|
-
command: "
|
|
57
|
-
args: ["-y", "tru-mcp"]
|
|
58
|
-
};
|
|
50
|
+
function buildEntry(apiKey, apiUrl, local) {
|
|
51
|
+
const entry = local
|
|
52
|
+
? { command: "node", args: [local] }
|
|
53
|
+
: { command: "npx", args: ["-y", "tru-mcp"] };
|
|
59
54
|
const env = {};
|
|
60
55
|
if (apiKey)
|
|
61
56
|
env.TRU_API_KEY = apiKey;
|
|
@@ -69,6 +64,7 @@ function parseArgs() {
|
|
|
69
64
|
const args = process.argv.slice(2).filter((a) => a !== "init");
|
|
70
65
|
let key;
|
|
71
66
|
let url;
|
|
67
|
+
let local;
|
|
72
68
|
for (let i = 0; i < args.length; i++) {
|
|
73
69
|
if (args[i] === "--key" && args[i + 1]) {
|
|
74
70
|
key = args[i + 1];
|
|
@@ -78,11 +74,19 @@ function parseArgs() {
|
|
|
78
74
|
url = args[i + 1];
|
|
79
75
|
i++;
|
|
80
76
|
}
|
|
77
|
+
else if (args[i] === "--local" && args[i + 1]) {
|
|
78
|
+
local = args[i + 1];
|
|
79
|
+
i++;
|
|
80
|
+
}
|
|
81
|
+
else if (args[i] === "--local") {
|
|
82
|
+
// --local without a path: resolve from this script's location
|
|
83
|
+
local = join(dirname(new URL(import.meta.url).pathname), "index.js");
|
|
84
|
+
}
|
|
81
85
|
}
|
|
82
|
-
return { key, url };
|
|
86
|
+
return { key, url, local };
|
|
83
87
|
}
|
|
84
88
|
async function main() {
|
|
85
|
-
const { key, url } = parseArgs();
|
|
89
|
+
const { key, url, local } = parseArgs();
|
|
86
90
|
// Set TRU_API_URL so api-client uses the right server during init
|
|
87
91
|
if (url) {
|
|
88
92
|
process.env.TRU_API_URL = url;
|
|
@@ -92,7 +96,7 @@ async function main() {
|
|
|
92
96
|
`);
|
|
93
97
|
const targets = detectTargets();
|
|
94
98
|
const written = [];
|
|
95
|
-
const entry = buildEntry(key, url);
|
|
99
|
+
const entry = buildEntry(key, url, local);
|
|
96
100
|
for (const t of targets) {
|
|
97
101
|
// Write to existing config files, or create .mcp.json for Claude Code
|
|
98
102
|
const exists = await fileExists(t.path);
|
|
@@ -113,8 +117,6 @@ async function main() {
|
|
|
113
117
|
return;
|
|
114
118
|
}
|
|
115
119
|
console.log(` Installed tru MCP server in ${written.join(", ")}.`);
|
|
116
|
-
console.log("");
|
|
117
|
-
await authenticate();
|
|
118
120
|
console.log(`
|
|
119
121
|
Done! Restart your agent, then ask:
|
|
120
122
|
|
|
@@ -123,71 +125,6 @@ async function main() {
|
|
|
123
125
|
Or use the slash command: /tru:dev-setup
|
|
124
126
|
`);
|
|
125
127
|
}
|
|
126
|
-
function openBrowser(url) {
|
|
127
|
-
const platform = process.platform;
|
|
128
|
-
const cmd = platform === "darwin" ? "open" :
|
|
129
|
-
platform === "win32" ? "start" :
|
|
130
|
-
"xdg-open";
|
|
131
|
-
exec(`${cmd} "${url}"`);
|
|
132
|
-
}
|
|
133
|
-
function sleep(ms) {
|
|
134
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
135
|
-
}
|
|
136
|
-
async function authenticate() {
|
|
137
|
-
// Check for existing valid auth
|
|
138
|
-
const stored = getStoredAuth();
|
|
139
|
-
if (stored) {
|
|
140
|
-
try {
|
|
141
|
-
const user = await verifyAuth(stored.token);
|
|
142
|
-
console.log(` ✓ Logged in as ${user.email}`);
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
// Token expired or invalid, continue to prompt
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
150
|
-
console.log(" To register your app, you'll need a tru account.");
|
|
151
|
-
console.log(" This opens your browser to sign in with tru.\n");
|
|
152
|
-
const answer = await new Promise((resolve) => {
|
|
153
|
-
rl.question(" Sign in now? [Y/n] ", (ans) => {
|
|
154
|
-
rl.close();
|
|
155
|
-
resolve(ans.trim().toLowerCase());
|
|
156
|
-
});
|
|
157
|
-
});
|
|
158
|
-
if (answer === "n" || answer === "no") {
|
|
159
|
-
console.log(" Skipped. Run `login` tool later to authenticate.");
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
try {
|
|
163
|
-
const session = await createMcpSession();
|
|
164
|
-
openBrowser(session.login_url);
|
|
165
|
-
console.log(" Waiting for browser login");
|
|
166
|
-
const maxAttempts = 150; // 5 min at 2s intervals
|
|
167
|
-
let attempts = 0;
|
|
168
|
-
while (attempts < maxAttempts) {
|
|
169
|
-
await sleep(2000);
|
|
170
|
-
attempts++;
|
|
171
|
-
process.stdout.write(".");
|
|
172
|
-
try {
|
|
173
|
-
const status = await pollMcpSession(session.code);
|
|
174
|
-
if (status.status === "complete" && status.token && status.user) {
|
|
175
|
-
saveAuth(status.token, status.user.email);
|
|
176
|
-
console.log(`\n ✓ Authenticated as ${status.user.email}`);
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
// Keep polling
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
console.log(`\n Timed out. Visit: ${session.login_url}`);
|
|
185
|
-
}
|
|
186
|
-
catch (err) {
|
|
187
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
188
|
-
console.log(` Auth error: ${message}`);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
128
|
main().catch((err) => {
|
|
192
129
|
console.error("Error:", err);
|
|
193
130
|
process.exit(1);
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -11,7 +11,7 @@ import { connectStripeTool } from "./tools/connect_stripe.js";
|
|
|
11
11
|
import { getStartedTool } from "./tools/get_started.js";
|
|
12
12
|
import { discoverApiTool } from "./tools/discover_api.js";
|
|
13
13
|
import { provisionUserTool } from "./tools/provision_user.js";
|
|
14
|
-
import { authenticateTool } from "./tools/authenticate.js";
|
|
14
|
+
import { authenticateTool, logoutTool } from "./tools/authenticate.js";
|
|
15
15
|
import { discoverProductsTool } from "./tools/discover_products.js";
|
|
16
16
|
import { configureProductsTool } from "./tools/configure_products.js";
|
|
17
17
|
import { addAgentSignupTool } from "./tools/add_agent_signup.js";
|
|
@@ -25,6 +25,7 @@ const server = new McpServer({
|
|
|
25
25
|
});
|
|
26
26
|
// Register tools
|
|
27
27
|
server.tool(authenticateTool.name, authenticateTool.description, authenticateTool.inputSchema, authenticateTool.handler);
|
|
28
|
+
server.tool(logoutTool.name, logoutTool.description, logoutTool.inputSchema, logoutTool.handler);
|
|
28
29
|
server.tool(requestVirtualCardTool.name, requestVirtualCardTool.description, requestVirtualCardTool.inputSchema, requestVirtualCardTool.handler);
|
|
29
30
|
server.tool(discoverAppsTool.name, discoverAppsTool.description, discoverAppsTool.inputSchema, discoverAppsTool.handler);
|
|
30
31
|
server.tool(readSkillTool.name, readSkillTool.description, readSkillTool.inputSchema, readSkillTool.handler);
|
|
@@ -72,13 +73,11 @@ server.prompt("dev-add-login", "Add OAuth login to your app — redirect-based,
|
|
|
72
73
|
type: "text",
|
|
73
74
|
text: `You are adding OAuth login to this project. tru uses OAuth 2.0 with redirect-based auth.
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
tru is invisible to the app's customers. Buttons say "Login" or "Sign in". The login screen uses tru's own styling — the app's logo provides visual identification. The only tru mention is a small "secured by tru" in the footer.
|
|
76
77
|
|
|
77
78
|
## Strategy
|
|
78
79
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
Only keep existing auth alongside tru if the app requires social providers (Google, GitHub) or enterprise SSO/SAML.
|
|
80
|
+
The default approach is to add tru as a login option alongside the existing login form. Every user gets a verified identity and payment method in one step. Only keep existing auth alongside tru if the app requires social providers (Google, GitHub) or enterprise SSO/SAML.
|
|
82
81
|
|
|
83
82
|
## Implementation
|
|
84
83
|
|
|
@@ -89,72 +88,58 @@ TRU_CLIENT_ID=<app-id> # from dev_register_app
|
|
|
89
88
|
TRU_CLIENT_SECRET=<api-key> # same as TRU_API_KEY
|
|
90
89
|
\`\`\`
|
|
91
90
|
|
|
92
|
-
### 2.
|
|
93
|
-
\`\`\`javascript
|
|
94
|
-
function login() {
|
|
95
|
-
const state = crypto.randomUUID();
|
|
96
|
-
sessionStorage.setItem('oauth_state', state);
|
|
97
|
-
window.open(
|
|
98
|
-
\`\${TRU_URL}/api/oauth/authorize?client_id=\${CLIENT_ID}&state=\${state}\`,
|
|
99
|
-
'tru_login',
|
|
100
|
-
'width=480,height=700,left=200,top=100'
|
|
101
|
-
);
|
|
102
|
-
}
|
|
91
|
+
### 2. Add the tru.js SDK script tag
|
|
103
92
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
93
|
+
Add this to the login page's \`<head>\`:
|
|
94
|
+
\`\`\`html
|
|
95
|
+
<script src="TRU_URL/tru.js" data-app="SERVICE_NAME"></script>
|
|
96
|
+
\`\`\`
|
|
97
|
+
|
|
98
|
+
### 3. Add the login button
|
|
99
|
+
|
|
100
|
+
Add \`<tru-login-button>\` below the existing login form, separated by a divider. The SDK renders it as a styled button.
|
|
101
|
+
\`\`\`html
|
|
102
|
+
<tru-login-button>Log in with tru</tru-login-button>
|
|
110
103
|
\`\`\`
|
|
111
|
-
Button text: "Login" or "Sign in" — no mention of tru.
|
|
112
104
|
|
|
113
|
-
|
|
105
|
+
### 4. Handle the login event
|
|
106
|
+
|
|
107
|
+
When the user completes login, the SDK dispatches a \`tru:login\` event. The user data is in \`e.detail.user\` (not \`e.detail\` directly).
|
|
114
108
|
|
|
115
|
-
### 3. Server-side callback — set session, signal popup, close
|
|
116
109
|
\`\`\`javascript
|
|
117
|
-
|
|
118
|
-
const {
|
|
119
|
-
const
|
|
110
|
+
document.addEventListener('tru:login', async (e) => {
|
|
111
|
+
const { email, name } = e.detail.user;
|
|
112
|
+
const res = await fetch('/auth/tru', {
|
|
120
113
|
method: 'POST',
|
|
121
114
|
headers: { 'Content-Type': 'application/json' },
|
|
122
|
-
body: JSON.stringify({
|
|
115
|
+
body: JSON.stringify({ email, name }),
|
|
123
116
|
});
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
let account = await db.users.findByEmail(user.email);
|
|
128
|
-
if (!account) account = await db.users.create({ email: user.email, name: user.name });
|
|
129
|
-
|
|
130
|
-
const sessionId = crypto.randomBytes(24).toString('hex');
|
|
131
|
-
sessions.set(sessionId, account.email);
|
|
132
|
-
res.setHeader('Set-Cookie', \`session=\${sessionId}; Path=/; HttpOnly; SameSite=Lax; Max-Age=86400\`);
|
|
133
|
-
|
|
134
|
-
// Signal parent window and close popup (fallback to redirect if not in popup)
|
|
135
|
-
res.send(\`<script>
|
|
136
|
-
if (window.opener) {
|
|
137
|
-
window.opener.postMessage({ type: 'tru_login_complete' }, '*');
|
|
138
|
-
window.close();
|
|
139
|
-
} else {
|
|
140
|
-
window.location.href = '/';
|
|
141
|
-
}
|
|
142
|
-
</script>\`);
|
|
117
|
+
if (res.ok) {
|
|
118
|
+
window.location.href = '/admin'; // or wherever logged-in users go
|
|
119
|
+
}
|
|
143
120
|
});
|
|
144
121
|
\`\`\`
|
|
145
122
|
|
|
146
|
-
###
|
|
147
|
-
The landing page shows Login for anonymous visitors. When the popup closes and the page reloads, check for session cookie on \`/\` and serve dashboard content instead of the landing page.
|
|
123
|
+
### 5. Server-side callback — create session from tru login
|
|
148
124
|
|
|
149
|
-
|
|
150
|
-
|
|
125
|
+
\`\`\`javascript
|
|
126
|
+
app.post('/auth/tru', (req, res) => {
|
|
127
|
+
const { email, name } = req.body;
|
|
128
|
+
if (!email) return res.status(400).json({ error: 'email required' });
|
|
151
129
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
130
|
+
// Find or create the user (no password needed for tru login)
|
|
131
|
+
let user = db.users.findByEmail(email);
|
|
132
|
+
if (!user) user = db.users.create({ email, name });
|
|
133
|
+
|
|
134
|
+
// Set session
|
|
135
|
+
req.session.email = email;
|
|
136
|
+
res.json({ ok: true });
|
|
137
|
+
});
|
|
156
138
|
\`\`\`
|
|
157
139
|
|
|
140
|
+
### 6. Account linking
|
|
141
|
+
When a user pays via billing before logging in, a tru account is auto-created with their email. If they later click Login, your callback gets the same email. Always find by email first — don't create duplicates.
|
|
142
|
+
|
|
158
143
|
Explore the codebase to understand the existing auth setup, then implement.`,
|
|
159
144
|
},
|
|
160
145
|
},
|
|
@@ -168,12 +153,11 @@ server.prompt("dev-add-billing", "Add tru billing to your app — one-time charg
|
|
|
168
153
|
type: "text",
|
|
169
154
|
text: `You are adding billing to this project. tru handles payments via Stripe Connect — money goes to the developer's Stripe account.
|
|
170
155
|
|
|
171
|
-
|
|
156
|
+
tru is invisible to the app's customers. Buttons say "Subscribe", "Buy", or "Pay". The billing approval popup uses tru's own styling with the app's logo for identification.
|
|
172
157
|
|
|
173
158
|
## Prerequisites
|
|
174
159
|
- App registered on tru (dev_register_app tool)
|
|
175
160
|
- Stripe connected (dev_connect_stripe tool)
|
|
176
|
-
- brand_color set so billing popups match the app
|
|
177
161
|
|
|
178
162
|
## Server-side: Create charge and return approval URL
|
|
179
163
|
|
|
@@ -192,7 +176,7 @@ app.post('/api/purchase', auth, async (req, res) => {
|
|
|
192
176
|
});
|
|
193
177
|
const charge = await response.json();
|
|
194
178
|
|
|
195
|
-
//
|
|
179
|
+
// Return approve_url so frontend can open the billing popup
|
|
196
180
|
res.json({
|
|
197
181
|
charge_id: charge.id,
|
|
198
182
|
status: charge.status,
|
|
@@ -228,7 +212,7 @@ async function purchase() {
|
|
|
228
212
|
return;
|
|
229
213
|
}
|
|
230
214
|
|
|
231
|
-
// Open
|
|
215
|
+
// Open billing approval in a popup
|
|
232
216
|
const popup = window.open(data.approve_url, 'tru_approve',
|
|
233
217
|
'width=480,height=700,left=200,top=100');
|
|
234
218
|
|
|
@@ -251,15 +235,15 @@ async function purchase() {
|
|
|
251
235
|
|
|
252
236
|
## Key patterns
|
|
253
237
|
|
|
254
|
-
1.
|
|
255
|
-
2.
|
|
256
|
-
3.
|
|
257
|
-
4.
|
|
258
|
-
5.
|
|
259
|
-
6.
|
|
238
|
+
1. Billing uses popups, not redirects. The popup shows the approval page with the app's logo.
|
|
239
|
+
2. Return \`approve_url\` from the server so the frontend can open it.
|
|
240
|
+
3. Poll for status — poll your own server endpoint every 2s (don't rely on postMessage).
|
|
241
|
+
4. Handle auto-approve — if the user has spending rules that allow the charge, it's approved instantly (no popup needed).
|
|
242
|
+
5. Close the popup when the poll detects approved/rejected.
|
|
243
|
+
6. Same pattern for both one-time and recurring. Set type to 'one_time' or 'recurring' with interval 'month'/'year'.
|
|
260
244
|
|
|
261
245
|
## User experience
|
|
262
|
-
Users see a
|
|
246
|
+
Users see a popup with the charge amount and description. They approve with their saved payment method or add a new one. Users can set auto-approve rules in their wallet (e.g. "auto-approve charges under $10 from this app") — those charges skip the popup entirely.
|
|
263
247
|
|
|
264
248
|
Explore the codebase to find where billing should be integrated, then implement.`,
|
|
265
249
|
},
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { lookupAppByServiceName } from "../api-client.js";
|
|
2
|
+
import { lookupAppByServiceName, reportSetupProgress } from "../api-client.js";
|
|
3
3
|
import { getStoredApp } from "../config.js";
|
|
4
|
+
const BASE_URL = process.env.TRU_API_URL || "https://tru.so";
|
|
4
5
|
export const addAgentSignupTool = {
|
|
5
6
|
name: "dev_add_agent_signup",
|
|
6
7
|
description: "Returns the agent signup HTML snippet for the developer's app. The snippet is a single line that goes on the app's login page. " +
|
|
@@ -28,22 +29,26 @@ export const addAgentSignupTool = {
|
|
|
28
29
|
isError: true,
|
|
29
30
|
};
|
|
30
31
|
}
|
|
31
|
-
const snippet = `<
|
|
32
|
+
const snippet = `<tru-agent-signup></tru-agent-signup>`;
|
|
32
33
|
const guide = [
|
|
33
|
-
`## Agent Signup
|
|
34
|
+
`## Agent Signup for ${lookup.app.display_name}`,
|
|
34
35
|
"",
|
|
35
|
-
"Add this
|
|
36
|
+
"Add this to your login page, after the login form:",
|
|
36
37
|
"",
|
|
37
38
|
"```html",
|
|
38
39
|
snippet,
|
|
39
40
|
"```",
|
|
40
41
|
"",
|
|
41
|
-
"
|
|
42
|
+
"This is a web component from tru.js (already on the page). It renders a subtle link to your SKILL.md that AI agents follow to learn how to sign up.",
|
|
42
43
|
"",
|
|
43
|
-
"**
|
|
44
|
+
"**Styling:** The component renders a plain `<a>` element — no Shadow DOM. Read the login page's existing CSS (colors, fonts, spacing, link styles) and write a CSS rule for `tru-agent-signup a` that blends in naturally. Match the muted/secondary text color, font size, and font family already used on the page. Center it if the form is centered.",
|
|
44
45
|
"",
|
|
45
|
-
"**
|
|
46
|
+
"**Where to place it:** After the login form or auth buttons. It should be subtle — small text below the main login UI.",
|
|
46
47
|
].join("\n");
|
|
48
|
+
// Report progress
|
|
49
|
+
if (lookup.app?.id) {
|
|
50
|
+
await reportSetupProgress(lookup.app.id, "add_agent_signup");
|
|
51
|
+
}
|
|
47
52
|
return {
|
|
48
53
|
content: [{ type: "text", text: guide }],
|
|
49
54
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"add_agent_signup.js","sourceRoot":"","sources":["../../src/tools/add_agent_signup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"add_agent_signup.js","sourceRoot":"","sources":["../../src/tools/add_agent_signup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,gBAAgB,CAAC;AAE7D,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EACT,iIAAiI;QACjI,kFAAkF;IACpF,WAAW,EAAE;QACX,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,0GAA0G,CAAC;KACxH;IACD,OAAO,EAAE,KAAK,EAAE,IAA+B,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE,EAAE,YAAY,CAAC;YACtE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8FAA8F,EAAE,CAAC;oBAC1I,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,WAAW,CAAC,CAAC;YACzD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAClD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,WAAW,iDAAiD,EAAE,CAAC;oBAChH,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,uCAAuC,CAAC;YAExD,MAAM,KAAK,GAAG;gBACZ,uBAAuB,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE;gBAChD,EAAE;gBACF,oDAAoD;gBACpD,EAAE;gBACF,SAAS;gBACT,OAAO;gBACP,KAAK;gBACL,EAAE;gBACF,qJAAqJ;gBACrJ,EAAE;gBACF,0VAA0V;gBAC1V,EAAE;gBACF,wHAAwH;aACzH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,kBAAkB;YAClB,IAAI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;gBACnB,MAAM,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;aAClD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
export declare const authenticateTool: {
|
|
2
3
|
name: string;
|
|
3
4
|
description: string;
|
|
4
|
-
inputSchema: {
|
|
5
|
-
|
|
5
|
+
inputSchema: {
|
|
6
|
+
switch_account: z.ZodOptional<z.ZodBoolean>;
|
|
7
|
+
};
|
|
8
|
+
handler: (args: {
|
|
9
|
+
switch_account?: boolean;
|
|
10
|
+
}) => Promise<{
|
|
6
11
|
content: {
|
|
7
12
|
type: "text";
|
|
8
13
|
text: string;
|
|
@@ -16,3 +21,14 @@ export declare const authenticateTool: {
|
|
|
16
21
|
isError: boolean;
|
|
17
22
|
}>;
|
|
18
23
|
};
|
|
24
|
+
export declare const logoutTool: {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
inputSchema: {};
|
|
28
|
+
handler: (_args: Record<string, never>) => Promise<{
|
|
29
|
+
content: {
|
|
30
|
+
type: "text";
|
|
31
|
+
text: string;
|
|
32
|
+
}[];
|
|
33
|
+
}>;
|
|
34
|
+
};
|