tru-402 0.1.0 → 0.2.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/src/challenge.d.ts.map +1 -1
- package/dist/src/challenge.js +3 -2
- package/dist/src/challenge.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/index.d.ts.map +1 -1
- package/dist/src/init/index.js +20 -0
- package/dist/src/init/index.js.map +1 -1
- package/dist/src/middleware.d.ts +6 -0
- package/dist/src/middleware.d.ts.map +1 -1
- package/dist/src/middleware.js +36 -10
- package/dist/src/middleware.js.map +1 -1
- package/dist/src/session.d.ts +15 -0
- package/dist/src/session.d.ts.map +1 -1
- package/dist/src/session.js +37 -0
- package/dist/src/session.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../src/challenge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAa7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,
|
|
1
|
+
{"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../src/challenge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAa7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB,CAgF5E"}
|
package/dist/src/challenge.js
CHANGED
|
@@ -31,7 +31,7 @@ export function generateChallenge(params) {
|
|
|
31
31
|
// Self-documenting body
|
|
32
32
|
const body = {
|
|
33
33
|
error: 'payment_required',
|
|
34
|
-
message: `This API costs $${amountDollars.toFixed(2)} per request.
|
|
34
|
+
message: `This API costs $${amountDollars.toFixed(2)} per request. Usage is batched and settled daily — one charge, not one per request.`,
|
|
35
35
|
amount: amountDollars,
|
|
36
36
|
currency,
|
|
37
37
|
description: options.description || undefined,
|
|
@@ -49,8 +49,9 @@ export function generateChallenge(params) {
|
|
|
49
49
|
email: '<your_email>',
|
|
50
50
|
},
|
|
51
51
|
step_1_note: "If you don't have a tru account, open the auth_url below in the user's browser first.",
|
|
52
|
-
step_2: 'The response includes an authorization_header value',
|
|
52
|
+
step_2: 'The response includes an authorization_header value and your email',
|
|
53
53
|
step_3: 'Retry this same request with that Authorization header',
|
|
54
|
+
step_4: 'For subsequent requests, send X-Tru-User: <your_email> header instead — no re-auth needed',
|
|
54
55
|
},
|
|
55
56
|
auth_url: `${config.apiUrl}/connect`,
|
|
56
57
|
auth_url_note: 'First-time users: open this URL to link a payment method via Stripe Link (10 seconds)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../src/challenge.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B;;GAEG;AACH,SAAS,WAAW,CAAC,GAA4B;IAC/C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SACpC,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAeD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAC/C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ;IAE5E,kCAAkC;IAClC,MAAM,OAAO,GAAG,WAAW,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;QAC7B,QAAQ;QACR,GAAG,EAAE,UAAU;KAChB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC;IAEjD,0BAA0B;IAC1B,MAAM,MAAM,GAAG,eAAe,WAAW,aAAa,KAAK,8CAA8C,OAAO,eAAe,OAAO,GAAG,CAAC;IAE1I,wBAAwB;IACxB,MAAM,IAAI,GAA4B;QACpC,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,mBAAmB,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../src/challenge.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export { createMiddleware as trux } from './middleware.js';
|
|
|
2
2
|
export type { TruIdentity, TruxOptions, TruxPlan, TruxConfig } from './identity.js';
|
|
3
3
|
export { generateChallenge } from './challenge.js';
|
|
4
4
|
export { verifyCredential } from './verify.js';
|
|
5
|
-
export { debitSession, createSession } from './session.js';
|
|
5
|
+
export { recordUsage, debitSession, createSession } from './session.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { createMiddleware as trux } from './middleware.js';
|
|
2
2
|
export { generateChallenge } from './challenge.js';
|
|
3
3
|
export { verifyCredential } from './verify.js';
|
|
4
|
-
export { debitSession, createSession } from './session.js';
|
|
4
|
+
export { recordUsage, debitSession, createSession } from './session.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,IAAI,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/init/index.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAsB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/init/index.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,wBAAsB,OAAO,kBA2J5B"}
|
package/dist/src/init/index.js
CHANGED
|
@@ -9,6 +9,8 @@ const TRU_API_URL = process.env.TRU_API_URL || 'https://tru.so';
|
|
|
9
9
|
*/
|
|
10
10
|
export async function runInit() {
|
|
11
11
|
console.log('\n tru-402 — One-line middleware for agent commerce\n');
|
|
12
|
+
// 0. Auto-install tru-402 as a dependency if not already present
|
|
13
|
+
await ensureDependency(process.cwd());
|
|
12
14
|
// 1. Scan project
|
|
13
15
|
console.log(' Scanning project...');
|
|
14
16
|
const project = scanProject(process.cwd());
|
|
@@ -146,6 +148,24 @@ export async function runInit() {
|
|
|
146
148
|
Docs: https://tru.so/docs
|
|
147
149
|
`);
|
|
148
150
|
}
|
|
151
|
+
async function ensureDependency(cwd) {
|
|
152
|
+
const pkgPath = resolve(cwd, 'package.json');
|
|
153
|
+
if (!existsSync(pkgPath))
|
|
154
|
+
return;
|
|
155
|
+
try {
|
|
156
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
157
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
158
|
+
if (deps['tru-402'])
|
|
159
|
+
return; // already installed
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
console.log(' Installing tru-402...');
|
|
165
|
+
const { execSync } = await import('child_process');
|
|
166
|
+
execSync('npm install tru-402', { cwd, stdio: 'inherit' });
|
|
167
|
+
console.log(' Installed tru-402\n');
|
|
168
|
+
}
|
|
149
169
|
function ensureGitignore(cwd) {
|
|
150
170
|
const gitignorePath = resolve(cwd, '.gitignore');
|
|
151
171
|
if (existsSync(gitignorePath)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/init/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/middleware.d.ts
CHANGED
|
@@ -3,6 +3,12 @@ import type { TruxOptions } from './identity.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Create the trux Express middleware.
|
|
5
5
|
*
|
|
6
|
+
* Flow:
|
|
7
|
+
* 1. Existing auth (API keys, sessions) → pass through
|
|
8
|
+
* 2. X-Tru-User header (returning user) → record usage, settle daily
|
|
9
|
+
* 3. SPT credential (first request after 402) → verify, record usage, return X-Tru-User for next time
|
|
10
|
+
* 4. No auth → 402 with self-documenting payment instructions
|
|
11
|
+
*
|
|
6
12
|
* Usage:
|
|
7
13
|
* ```
|
|
8
14
|
* app.post('/api/generate', trux({ amount: 0.05 }), handler);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,eAAe,CAAC;AA4E7D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,IAGrC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,mBAiE9D"}
|
package/dist/src/middleware.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { generateChallenge } from './challenge.js';
|
|
2
2
|
import { verifyCredential } from './verify.js';
|
|
3
|
-
import { debitSession } from './session.js';
|
|
3
|
+
import { recordUsage, debitSession } from './session.js';
|
|
4
4
|
/**
|
|
5
5
|
* Resolve trux config from environment variables.
|
|
6
6
|
*/
|
|
@@ -40,23 +40,25 @@ function extractCredential(authHeader) {
|
|
|
40
40
|
}
|
|
41
41
|
return null;
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Extract user email from X-Tru-User header.
|
|
45
|
+
* Set after initial 402 resolution — allows usage tracking without re-verification.
|
|
46
|
+
*/
|
|
47
|
+
function extractTruUser(req) {
|
|
48
|
+
return req.headers['x-tru-user'] || null;
|
|
49
|
+
}
|
|
43
50
|
/**
|
|
44
51
|
* Check if request has existing auth that should bypass payment.
|
|
45
|
-
* Looks for API keys, session cookies, or other standard auth mechanisms.
|
|
46
52
|
*/
|
|
47
53
|
function hasExistingAuth(req, options) {
|
|
48
|
-
// Custom passthrough check
|
|
49
54
|
if (options.passthrough?.(req))
|
|
50
55
|
return true;
|
|
51
|
-
// Standard auth headers (non-SPT bearer tokens, basic auth, API keys)
|
|
52
56
|
const auth = req.headers.authorization;
|
|
53
57
|
if (auth && !auth.startsWith('Payment ') && !auth.startsWith('Bearer spt_')) {
|
|
54
58
|
return true;
|
|
55
59
|
}
|
|
56
|
-
// Common API key headers
|
|
57
60
|
if (req.headers['x-api-key'] || req.headers['api-key'])
|
|
58
61
|
return true;
|
|
59
|
-
// Session cookies
|
|
60
62
|
if (req.cookies?.session || req.cookies?.token)
|
|
61
63
|
return true;
|
|
62
64
|
return false;
|
|
@@ -64,6 +66,12 @@ function hasExistingAuth(req, options) {
|
|
|
64
66
|
/**
|
|
65
67
|
* Create the trux Express middleware.
|
|
66
68
|
*
|
|
69
|
+
* Flow:
|
|
70
|
+
* 1. Existing auth (API keys, sessions) → pass through
|
|
71
|
+
* 2. X-Tru-User header (returning user) → record usage, settle daily
|
|
72
|
+
* 3. SPT credential (first request after 402) → verify, record usage, return X-Tru-User for next time
|
|
73
|
+
* 4. No auth → 402 with self-documenting payment instructions
|
|
74
|
+
*
|
|
67
75
|
* Usage:
|
|
68
76
|
* ```
|
|
69
77
|
* app.post('/api/generate', trux({ amount: 0.05 }), handler);
|
|
@@ -74,21 +82,40 @@ export function createMiddleware(options) {
|
|
|
74
82
|
return async (req, res, next) => {
|
|
75
83
|
try {
|
|
76
84
|
const config = getConfig();
|
|
85
|
+
const endpoint = `${req.method} ${req.route?.path || req.path}`;
|
|
77
86
|
// 1. Passthrough for existing auth (existing customers unaffected)
|
|
78
87
|
if (hasExistingAuth(req, options)) {
|
|
79
88
|
return next();
|
|
80
89
|
}
|
|
81
|
-
// 2. Check for
|
|
90
|
+
// 2. Check for returning user (X-Tru-User header — set after first payment)
|
|
91
|
+
// Record usage for daily batch settlement. No Stripe call.
|
|
92
|
+
const truUser = extractTruUser(req);
|
|
93
|
+
if (truUser) {
|
|
94
|
+
const result = await recordUsage(truUser, amountCents, config, {
|
|
95
|
+
description: options.description,
|
|
96
|
+
agentName: req.headers['x-tru-agent'],
|
|
97
|
+
endpoint,
|
|
98
|
+
});
|
|
99
|
+
if (result.ok && result.identity) {
|
|
100
|
+
req.tru = result.identity;
|
|
101
|
+
return next();
|
|
102
|
+
}
|
|
103
|
+
// User not found or no payment method — fall through to 402
|
|
104
|
+
}
|
|
105
|
+
// 3. Check for SPT credential (Authorization: Payment <spt_xxx>)
|
|
106
|
+
// This is the first request after resolving a 402 challenge.
|
|
82
107
|
const credential = extractCredential(req.headers.authorization);
|
|
83
108
|
if (credential) {
|
|
84
109
|
const result = await verifyCredential(credential, amountCents, config);
|
|
85
110
|
if (result.valid && result.identity) {
|
|
86
111
|
req.tru = result.identity;
|
|
112
|
+
// Tell the agent to use X-Tru-User for subsequent requests
|
|
113
|
+
res.setHeader('X-Tru-User', result.identity.email);
|
|
87
114
|
return next();
|
|
88
115
|
}
|
|
89
116
|
// Invalid credential — fall through to 402
|
|
90
117
|
}
|
|
91
|
-
//
|
|
118
|
+
// 4. Check for session header (X-Tru-Session — legacy pre-auth sessions)
|
|
92
119
|
const sessionId = req.headers['x-tru-session'];
|
|
93
120
|
if (sessionId) {
|
|
94
121
|
const result = await debitSession(sessionId, amountCents, config);
|
|
@@ -96,9 +123,8 @@ export function createMiddleware(options) {
|
|
|
96
123
|
req.tru = result.identity;
|
|
97
124
|
return next();
|
|
98
125
|
}
|
|
99
|
-
// Session exhausted or invalid — fall through to 402
|
|
100
126
|
}
|
|
101
|
-
//
|
|
127
|
+
// 5. No valid auth — return 402 with self-documenting challenge
|
|
102
128
|
const requestUrl = `${req.protocol}://${req.get('host')}${req.originalUrl}`;
|
|
103
129
|
const challenge = generateChallenge({
|
|
104
130
|
options,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/middleware.ts"],"names":[],"mappings":"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"}
|
package/dist/src/session.d.ts
CHANGED
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
import type { TruIdentity, TruxConfig } from './identity.js';
|
|
2
|
+
interface RecordUsageResult {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
usage_id?: string;
|
|
5
|
+
identity?: TruIdentity;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Record usage for daily batch settlement. No Stripe charge happens now —
|
|
10
|
+
* tru settles all usage at end of day in one charge per user.
|
|
11
|
+
*/
|
|
12
|
+
export declare function recordUsage(userEmail: string, amountCents: number, config: TruxConfig, opts?: {
|
|
13
|
+
description?: string;
|
|
14
|
+
agentName?: string;
|
|
15
|
+
endpoint?: string;
|
|
16
|
+
}): Promise<RecordUsageResult>;
|
|
2
17
|
interface SessionDebitResult {
|
|
3
18
|
ok: boolean;
|
|
4
19
|
remaining_cents?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI7D,UAAU,iBAAiB;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,EAClB,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE,OAAO,CAAC,iBAAiB,CAAC,CAmC5B;AAID,UAAU,kBAAkB;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAiC7B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAkB1D"}
|
package/dist/src/session.js
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record usage for daily batch settlement. No Stripe charge happens now —
|
|
3
|
+
* tru settles all usage at end of day in one charge per user.
|
|
4
|
+
*/
|
|
5
|
+
export async function recordUsage(userEmail, amountCents, config, opts) {
|
|
6
|
+
const res = await fetch(`${config.apiUrl}/api/mpp/usage`, {
|
|
7
|
+
method: 'POST',
|
|
8
|
+
headers: {
|
|
9
|
+
'Content-Type': 'application/json',
|
|
10
|
+
'X-API-Key': config.apiKey,
|
|
11
|
+
},
|
|
12
|
+
body: JSON.stringify({
|
|
13
|
+
user_email: userEmail,
|
|
14
|
+
amount_cents: amountCents,
|
|
15
|
+
description: opts?.description,
|
|
16
|
+
agent_name: opts?.agentName,
|
|
17
|
+
endpoint: opts?.endpoint,
|
|
18
|
+
}),
|
|
19
|
+
});
|
|
20
|
+
const data = await res.json();
|
|
21
|
+
if (!res.ok || !data.ok) {
|
|
22
|
+
return { ok: false, error: data.error || `HTTP ${res.status}` };
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
ok: true,
|
|
26
|
+
usage_id: data.usage_id,
|
|
27
|
+
identity: data.identity ? {
|
|
28
|
+
email: data.identity.email,
|
|
29
|
+
name: data.identity.name,
|
|
30
|
+
userId: data.identity.userId,
|
|
31
|
+
cardBrand: data.identity.cardBrand,
|
|
32
|
+
cardLast4: data.identity.cardLast4,
|
|
33
|
+
agentName: data.identity.agentName,
|
|
34
|
+
chargeId: data.identity.chargeId,
|
|
35
|
+
} : undefined,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
1
38
|
/**
|
|
2
39
|
* Debit from an existing trux session.
|
|
3
40
|
*/
|
package/dist/src/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
|