@nordsym/apiclaw 1.3.6 → 1.3.7
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/README.md +33 -0
- package/convex/_generated/api.d.ts +12 -0
- package/convex/billing.ts +651 -216
- package/convex/crons.ts +17 -0
- package/convex/email.ts +135 -82
- package/convex/feedback.ts +265 -0
- package/convex/http.ts +80 -4
- package/convex/logs.ts +287 -0
- package/convex/providerKeys.ts +209 -0
- package/convex/providers.ts +18 -0
- package/convex/schema.ts +115 -0
- package/convex/stripeActions.ts +512 -0
- package/convex/webhooks.ts +494 -0
- package/convex/workspaces.ts +74 -1
- package/dist/index.js +178 -0
- package/dist/index.js.map +1 -1
- package/dist/metered.d.ts +62 -0
- package/dist/metered.d.ts.map +1 -0
- package/dist/metered.js +81 -0
- package/dist/metered.js.map +1 -0
- package/dist/stripe.d.ts +62 -0
- package/dist/stripe.d.ts.map +1 -1
- package/dist/stripe.js +212 -0
- package/dist/stripe.js.map +1 -1
- package/docs/PRD-final-polish.md +117 -0
- package/docs/PRD-mobile-responsive.md +56 -0
- package/docs/PRD-navigation-expansion.md +295 -0
- package/docs/PRD-stripe-billing.md +312 -0
- package/docs/PRD-workspace-cleanup.md +200 -0
- package/landing/src/app/api/billing/checkout/route.ts +109 -0
- package/landing/src/app/api/billing/payment-method/route.ts +118 -0
- package/landing/src/app/api/billing/portal/route.ts +64 -0
- package/landing/src/app/auth/verify/page.tsx +20 -5
- package/landing/src/app/earn/page.tsx +6 -6
- package/landing/src/app/login/page.tsx +1 -1
- package/landing/src/app/page.tsx +70 -70
- package/landing/src/app/providers/dashboard/page.tsx +1 -1
- package/landing/src/app/workspace/page.tsx +3497 -535
- package/landing/src/components/CheckoutButton.tsx +188 -0
- package/landing/src/components/Toast.tsx +84 -0
- package/landing/src/lib/stats.json +1 -1
- package/landing/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/index.ts +205 -0
- package/src/metered.ts +149 -0
- package/src/stripe.ts +253 -0
package/dist/stripe.js
CHANGED
|
@@ -193,4 +193,216 @@ export function processWebhookEvent(event) {
|
|
|
193
193
|
export function getStripe() {
|
|
194
194
|
return stripe;
|
|
195
195
|
}
|
|
196
|
+
// ============================================
|
|
197
|
+
// METERED BILLING (Pay-per-call)
|
|
198
|
+
// ============================================
|
|
199
|
+
// Stripe Meter configuration
|
|
200
|
+
export const METERED_BILLING = {
|
|
201
|
+
meterId: 'mtr_61UFEGojJ0b2awh1441RtJYK3aJTqS9g',
|
|
202
|
+
eventName: 'api_call',
|
|
203
|
+
priceId: 'price_1T5qMQRtJYK3aJTqun4YZLsE',
|
|
204
|
+
productId: 'prod_U3yHbnc4NcLofW',
|
|
205
|
+
pricePerCall: 0.002, // $0.002 per API call
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Report API usage to Stripe Meter
|
|
209
|
+
* Call this after each successful API call
|
|
210
|
+
*/
|
|
211
|
+
export async function reportUsage(customerId, calls = 1, idempotencyKey) {
|
|
212
|
+
if (!stripe) {
|
|
213
|
+
return { success: false, error: 'Stripe not configured' };
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
// Use Stripe's meter event API
|
|
217
|
+
const event = await stripe.billing.meterEvents.create({
|
|
218
|
+
event_name: METERED_BILLING.eventName,
|
|
219
|
+
payload: {
|
|
220
|
+
stripe_customer_id: customerId,
|
|
221
|
+
value: calls.toString(),
|
|
222
|
+
},
|
|
223
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
224
|
+
}, {
|
|
225
|
+
idempotencyKey: idempotencyKey || `usage_${customerId}_${Date.now()}_${Math.random()}`,
|
|
226
|
+
});
|
|
227
|
+
return { success: true, eventId: event.identifier };
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
console.error('Failed to report usage:', error);
|
|
231
|
+
return {
|
|
232
|
+
success: false,
|
|
233
|
+
error: error instanceof Error ? error.message : 'Usage reporting failed',
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Create or get a customer in Stripe
|
|
239
|
+
*/
|
|
240
|
+
export async function getOrCreateCustomer(agentId, email) {
|
|
241
|
+
if (!stripe) {
|
|
242
|
+
return { error: 'Stripe not configured' };
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
// Search for existing customer by agentId
|
|
246
|
+
const existing = await stripe.customers.search({
|
|
247
|
+
query: `metadata['agentId']:'${agentId}'`,
|
|
248
|
+
});
|
|
249
|
+
if (existing.data.length > 0) {
|
|
250
|
+
return { customerId: existing.data[0].id };
|
|
251
|
+
}
|
|
252
|
+
// Create new customer
|
|
253
|
+
const customer = await stripe.customers.create({
|
|
254
|
+
email: email || `${agentId}@apiclaw.local`,
|
|
255
|
+
metadata: {
|
|
256
|
+
agentId,
|
|
257
|
+
source: 'apiclaw',
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
return { customerId: customer.id };
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
console.error('Failed to get/create customer:', error);
|
|
264
|
+
return {
|
|
265
|
+
error: error instanceof Error ? error.message : 'Customer creation failed',
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Create a metered subscription for pay-per-call billing
|
|
271
|
+
*/
|
|
272
|
+
export async function createMeteredSubscription(customerId, paymentMethodId) {
|
|
273
|
+
if (!stripe) {
|
|
274
|
+
return { error: 'Stripe not configured' };
|
|
275
|
+
}
|
|
276
|
+
try {
|
|
277
|
+
// If payment method provided, attach it
|
|
278
|
+
if (paymentMethodId) {
|
|
279
|
+
await stripe.paymentMethods.attach(paymentMethodId, {
|
|
280
|
+
customer: customerId,
|
|
281
|
+
});
|
|
282
|
+
await stripe.customers.update(customerId, {
|
|
283
|
+
invoice_settings: {
|
|
284
|
+
default_payment_method: paymentMethodId,
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
// Create subscription with metered price
|
|
289
|
+
const subscription = await stripe.subscriptions.create({
|
|
290
|
+
customer: customerId,
|
|
291
|
+
items: [
|
|
292
|
+
{
|
|
293
|
+
price: METERED_BILLING.priceId,
|
|
294
|
+
},
|
|
295
|
+
],
|
|
296
|
+
payment_behavior: 'default_incomplete',
|
|
297
|
+
payment_settings: {
|
|
298
|
+
save_default_payment_method: 'on_subscription',
|
|
299
|
+
},
|
|
300
|
+
expand: ['latest_invoice.payment_intent'],
|
|
301
|
+
});
|
|
302
|
+
return {
|
|
303
|
+
subscriptionId: subscription.id,
|
|
304
|
+
status: subscription.status,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
console.error('Failed to create metered subscription:', error);
|
|
309
|
+
return {
|
|
310
|
+
error: error instanceof Error ? error.message : 'Subscription creation failed',
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Create a checkout session for metered billing subscription
|
|
316
|
+
*/
|
|
317
|
+
export async function createMeteredCheckoutSession(agentId, successUrl, cancelUrl) {
|
|
318
|
+
if (!stripe) {
|
|
319
|
+
return { error: 'Stripe not configured' };
|
|
320
|
+
}
|
|
321
|
+
try {
|
|
322
|
+
const session = await stripe.checkout.sessions.create({
|
|
323
|
+
mode: 'subscription',
|
|
324
|
+
payment_method_types: ['card'],
|
|
325
|
+
line_items: [
|
|
326
|
+
{
|
|
327
|
+
price: METERED_BILLING.priceId,
|
|
328
|
+
},
|
|
329
|
+
],
|
|
330
|
+
metadata: {
|
|
331
|
+
agentId,
|
|
332
|
+
billingType: 'metered',
|
|
333
|
+
},
|
|
334
|
+
subscription_data: {
|
|
335
|
+
metadata: {
|
|
336
|
+
agentId,
|
|
337
|
+
billingType: 'metered',
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
success_url: successUrl,
|
|
341
|
+
cancel_url: cancelUrl,
|
|
342
|
+
});
|
|
343
|
+
return {
|
|
344
|
+
sessionId: session.id,
|
|
345
|
+
url: session.url,
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
console.error('Metered checkout error:', error);
|
|
350
|
+
return {
|
|
351
|
+
error: error instanceof Error ? error.message : 'Checkout failed',
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get usage summary for a subscription
|
|
357
|
+
*/
|
|
358
|
+
export async function getUsageSummary(subscriptionId) {
|
|
359
|
+
if (!stripe) {
|
|
360
|
+
return { error: 'Stripe not configured' };
|
|
361
|
+
}
|
|
362
|
+
try {
|
|
363
|
+
// Get subscription details - use raw API response
|
|
364
|
+
const subscription = await stripe.subscriptions.retrieve(subscriptionId);
|
|
365
|
+
const subData = subscription;
|
|
366
|
+
// For metered billing with meters, usage is tracked via meter events
|
|
367
|
+
// The actual usage amount will show up on the invoice at period end
|
|
368
|
+
// For now, return period info and note that detailed usage is on the Stripe dashboard
|
|
369
|
+
return {
|
|
370
|
+
totalCalls: 0, // Usage tracked via meter events, visible in Stripe dashboard
|
|
371
|
+
totalCost: 0,
|
|
372
|
+
period: {
|
|
373
|
+
start: subData.current_period_start || Math.floor(Date.now() / 1000),
|
|
374
|
+
end: subData.current_period_end || Math.floor(Date.now() / 1000) + 30 * 24 * 3600,
|
|
375
|
+
},
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
console.error('Failed to get usage summary:', error);
|
|
380
|
+
return {
|
|
381
|
+
error: error instanceof Error ? error.message : 'Usage summary failed',
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Check if a customer has an active metered subscription
|
|
387
|
+
*/
|
|
388
|
+
export async function hasActiveMeteredSubscription(customerId) {
|
|
389
|
+
if (!stripe) {
|
|
390
|
+
return { active: false };
|
|
391
|
+
}
|
|
392
|
+
try {
|
|
393
|
+
const subscriptions = await stripe.subscriptions.list({
|
|
394
|
+
customer: customerId,
|
|
395
|
+
status: 'active',
|
|
396
|
+
price: METERED_BILLING.priceId,
|
|
397
|
+
});
|
|
398
|
+
if (subscriptions.data.length > 0) {
|
|
399
|
+
return { active: true, subscriptionId: subscriptions.data[0].id };
|
|
400
|
+
}
|
|
401
|
+
return { active: false };
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
console.error('Failed to check subscription:', error);
|
|
405
|
+
return { active: false };
|
|
406
|
+
}
|
|
407
|
+
}
|
|
196
408
|
//# sourceMappingURL=stripe.js.map
|
package/dist/stripe.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../src/stripe.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stripe.js","sourceRoot":"","sources":["../src/stripe.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,mBAAmB;AACnB,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;AAE/B,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAEtD,IAAI,CAAC,eAAe,EAAE,CAAC;IACrB,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEpE,kBAAkB;AAClB,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,mBAAmB;KACjC;IACD,MAAM,EAAE;QACN,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,GAAG;QACZ,KAAK,EAAE,EAAE;QACT,WAAW,EAAE,+BAA+B;KAC7C;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,GAAG;QACd,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,kCAAkC;KAChD;CACO,CAAC;AAIX;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAe,EACf,WAAwB,EACxB,UAAkB,EAClB,SAAiB;IAEjB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,KAAK,EAAE,oBAAoB,WAAW,EAAE,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACpD,IAAI,EAAE,SAAS;YACf,oBAAoB,EAAE,CAAC,MAAM,CAAC;YAC9B,UAAU,EAAE;gBACV;oBACE,UAAU,EAAE;wBACV,QAAQ,EAAE,KAAK;wBACf,YAAY,EAAE;4BACZ,IAAI,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE;4BAC3B,WAAW,EAAE,GAAG,CAAC,WAAW;4BAC5B,QAAQ,EAAE;gCACR,WAAW;gCACX,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE;6BAChC;yBACF;wBACD,WAAW,EAAE,GAAG,CAAC,SAAS,GAAG,GAAG,EAAE,oBAAoB;qBACvD;oBACD,QAAQ,EAAE,CAAC;iBACZ;aACF;YACD,QAAQ,EAAE;gBACR,OAAO;gBACP,WAAW;gBACX,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE;aAChC;YACD,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,GAAG,EAAE,OAAO,CAAC,GAAI;SAClB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB;SAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,WAAwB;IAKxB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,KAAK,EAAE,oBAAoB,WAAW,EAAE,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;YACvD,MAAM,EAAE,GAAG,CAAC,SAAS,GAAG,GAAG;YAC3B,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE;gBACR,OAAO;gBACP,WAAW;gBACX,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE;aAChC;YACD,yBAAyB,EAAE;gBACzB,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,OAAO;YACL,YAAY,EAAE,aAAa,CAAC,aAAc;YAC1C,eAAe,EAAE,aAAa,CAAC,EAAE;YACjC,MAAM,EAAE,GAAG,CAAC,SAAS;SACtB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO;YACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;SACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAwB,EACxB,SAAiB;IAEjB,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACxD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAcD,MAAM,UAAU,mBAAmB,CAAC,KAAmB;IACrD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAiC,CAAC;YAC7D,IAAI,OAAO,CAAC,cAAc,KAAK,MAAM;gBAAE,OAAO,IAAI,CAAC;YAEnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAA0B,CAAC;YACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAEtD,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,QAAQ,CAAC,CAAC;gBACjE,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,OAAO;gBACP,WAAW;gBACX,OAAO;gBACP,SAAS,EAAE,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,GAAG;gBAC5C,eAAe,EAAE,OAAO,CAAC,EAAE;aAC5B,CAAC;QACJ,CAAC;QAED,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,MAA8B,CAAC;YAChE,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAA0B,CAAC;YACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAEtD,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;gBAC/D,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO;gBACL,OAAO;gBACP,WAAW;gBACX,OAAO;gBACP,SAAS,EAAE,aAAa,CAAC,MAAM,GAAG,GAAG;gBACrC,qBAAqB,EAAE,aAAa,CAAC,EAAE;aACxC,CAAC;QACJ,CAAC;QAED;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,+CAA+C;AAC/C,iCAAiC;AACjC,+CAA+C;AAE/C,6BAA6B;AAC7B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,sCAAsC;IAC/C,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,gCAAgC;IACzC,SAAS,EAAE,qBAAqB;IAChC,YAAY,EAAE,KAAK,EAAE,sBAAsB;CACnC,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAAkB,EAClB,QAAgB,CAAC,EACjB,cAAuB;IAEvB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC;QACH,+BAA+B;QAC/B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,UAAU,EAAE,eAAe,CAAC,SAAS;YACrC,OAAO,EAAE;gBACP,kBAAkB,EAAE,UAAU;gBAC9B,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;aACxB;YACD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;SACzC,EAAE;YACD,cAAc,EAAE,cAAc,IAAI,SAAS,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;SACvF,CAAC,CAAC;QAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB;SACzE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,KAAc;IAEd,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAC7C,KAAK,EAAE,wBAAwB,OAAO,GAAG;SAC1C,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC7C,CAAC;QAED,sBAAsB;QACtB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YAC7C,KAAK,EAAE,KAAK,IAAI,GAAG,OAAO,gBAAgB;YAC1C,QAAQ,EAAE;gBACR,OAAO;gBACP,MAAM,EAAE,SAAS;aAClB;SACF,CAAC,CAAC;QAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACvD,OAAO;YACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;SAC3E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAAkB,EAClB,eAAwB;IAExB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,wCAAwC;QACxC,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,EAAE;gBAClD,QAAQ,EAAE,UAAU;aACrB,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;gBACxC,gBAAgB,EAAE;oBAChB,sBAAsB,EAAE,eAAe;iBACxC;aACF,CAAC,CAAC;QACL,CAAC;QAED,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;YACrD,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE;gBACL;oBACE,KAAK,EAAE,eAAe,CAAC,OAAO;iBAC/B;aACF;YACD,gBAAgB,EAAE,oBAAoB;YACtC,gBAAgB,EAAE;gBAChB,2BAA2B,EAAE,iBAAiB;aAC/C;YACD,MAAM,EAAE,CAAC,+BAA+B,CAAC;SAC1C,CAAC,CAAC;QAEH,OAAO;YACL,cAAc,EAAE,YAAY,CAAC,EAAE;YAC/B,MAAM,EAAE,YAAY,CAAC,MAAM;SAC5B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO;YACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B;SAC/E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,OAAe,EACf,UAAkB,EAClB,SAAiB;IAEjB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACpD,IAAI,EAAE,cAAc;YACpB,oBAAoB,EAAE,CAAC,MAAM,CAAC;YAC9B,UAAU,EAAE;gBACV;oBACE,KAAK,EAAE,eAAe,CAAC,OAAO;iBAC/B;aACF;YACD,QAAQ,EAAE;gBACR,OAAO;gBACP,WAAW,EAAE,SAAS;aACvB;YACD,iBAAiB,EAAE;gBACjB,QAAQ,EAAE;oBACR,OAAO;oBACP,WAAW,EAAE,SAAS;iBACvB;aACF;YACD,WAAW,EAAE,UAAU;YACvB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QAEH,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,GAAG,EAAE,OAAO,CAAC,GAAI;SAClB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO;YACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB;SAClE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,cAAsB;IAEtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC;QACH,kDAAkD;QAClD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,YAIf,CAAC;QAEF,qEAAqE;QACrE,oEAAoE;QACpE,sFAAsF;QAEtF,OAAO;YACL,UAAU,EAAE,CAAC,EAAE,8DAA8D;YAC7E,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE;gBACN,KAAK,EAAE,OAAO,CAAC,oBAAoB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gBACpE,GAAG,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;aAClF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO;YACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;SACvE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,UAAkB;IAElB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;YACpD,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,eAAe,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpE,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# PRD: APIClaw Final Polish
|
|
2
|
+
|
|
3
|
+
Samlar alla återstående issues för en sista polish-runda.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Issues
|
|
8
|
+
|
|
9
|
+
### 1. 🔴 "Available APIs: 10" Kort Förvirrar
|
|
10
|
+
|
|
11
|
+
**Problem:**
|
|
12
|
+
- Kortet visar "Available APIs: 10"
|
|
13
|
+
- User tror det är en personlig begränsning
|
|
14
|
+
- User tänker "kan jag köpa fler?"
|
|
15
|
+
- Verkligheten: 10 Direct Call + 22k+ via MCP
|
|
16
|
+
|
|
17
|
+
**Lösning:**
|
|
18
|
+
- Ta bort "Available APIs" kortet helt
|
|
19
|
+
- Behåll: API Calls, My Agents, My APIs
|
|
20
|
+
- Direct Call-sektionen visar redan de 10 APIs
|
|
21
|
+
|
|
22
|
+
**Scope:** Ändra OverviewTab, ta bort första stat-kortet
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### 2. 🔴 Stripe Environment Variables
|
|
27
|
+
|
|
28
|
+
**Problem:**
|
|
29
|
+
- Stripe-koden finns men env vars saknas
|
|
30
|
+
- Betalning fungerar inte förrän keys är satta
|
|
31
|
+
|
|
32
|
+
**Variabler som behövs:**
|
|
33
|
+
```
|
|
34
|
+
STRIPE_SECRET_KEY=sk_live_...
|
|
35
|
+
STRIPE_WEBHOOK_SECRET=whsec_...
|
|
36
|
+
STRIPE_PRICE_ID_USAGE=price_...
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Lösning:**
|
|
40
|
+
- Gustav hämtar keys från Stripe dashboard
|
|
41
|
+
- Lägg in i Convex environment variables
|
|
42
|
+
- Testa checkout flow
|
|
43
|
+
|
|
44
|
+
**Scope:** Config only (ingen kod)
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
### 3. 🟡 Logging Hook → Execute.ts
|
|
49
|
+
|
|
50
|
+
**Problem:**
|
|
51
|
+
- Logs UI finns och visar data
|
|
52
|
+
- Men logs kopplas inte automatiskt till faktiska API-anrop
|
|
53
|
+
- `logs:createLog` mutation finns men anropas inte från execute
|
|
54
|
+
|
|
55
|
+
**Lösning:**
|
|
56
|
+
- Hitta execute-funktionen i MCP-servern
|
|
57
|
+
- Efter varje Direct Call, anropa createLog
|
|
58
|
+
- Logga: provider, action, status, latency, workspaceId
|
|
59
|
+
|
|
60
|
+
**Filer:**
|
|
61
|
+
- `src/execute.ts` (eller liknande i MCP-servern)
|
|
62
|
+
- Anropa Convex mutation efter varje call
|
|
63
|
+
|
|
64
|
+
**Scope:** 1 agent
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
### 4. 🟢 Auto-Configure Feature
|
|
69
|
+
|
|
70
|
+
**Problem:**
|
|
71
|
+
- Användare måste manuellt konfigurera MCP config
|
|
72
|
+
- Friktion i onboarding
|
|
73
|
+
|
|
74
|
+
**Vision:**
|
|
75
|
+
- Klicka "Auto-Configure" i workspace
|
|
76
|
+
- Permission dialog (File System Access API)
|
|
77
|
+
- AI lokaliserar och modifierar MCP config
|
|
78
|
+
- Visuell bekräftelse
|
|
79
|
+
|
|
80
|
+
**Tekniska alternativ:**
|
|
81
|
+
1. File System Access API (Chrome/Edge)
|
|
82
|
+
2. Browser extension
|
|
83
|
+
3. Local daemon
|
|
84
|
+
4. CLI command + copy-paste
|
|
85
|
+
|
|
86
|
+
**Scope:** Egen mini-PRD, 2-3 agenter
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Agenter
|
|
91
|
+
|
|
92
|
+
| # | Agent | Scope | Prio |
|
|
93
|
+
|---|-------|-------|------|
|
|
94
|
+
| 1 | `overview-cleanup` | Ta bort "Available APIs" kort | 🔴 |
|
|
95
|
+
| 2 | `stripe-config` | Dokumentera env var setup | 🔴 |
|
|
96
|
+
| 3 | `logging-hook` | Koppla execute → logs | 🟡 |
|
|
97
|
+
| 4 | `auto-configure-prd` | Skriv detaljerad PRD | 🟢 |
|
|
98
|
+
|
|
99
|
+
**Total: 4 agenter**
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Acceptanskriterier
|
|
104
|
+
|
|
105
|
+
- [ ] Overview visar 3 kort (inte 4)
|
|
106
|
+
- [ ] Stripe checkout fungerar live
|
|
107
|
+
- [ ] API-anrop loggas automatiskt
|
|
108
|
+
- [ ] Auto-Configure PRD dokumenterad
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Prioritetsordning
|
|
113
|
+
|
|
114
|
+
1. **Overview cleanup** — Snabb fix, tar bort förvirring
|
|
115
|
+
2. **Stripe config** — Gustav gör manuellt med guide
|
|
116
|
+
3. **Logging hook** — Kräver research i MCP-servern
|
|
117
|
+
4. **Auto-Configure** — Future feature, PRD först
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# PRD: APIClaw Mobile Responsiveness
|
|
2
|
+
|
|
3
|
+
## Scope
|
|
4
|
+
Göra workspace och landing page mobile-friendly.
|
|
5
|
+
|
|
6
|
+
## Arbete (1 agent, ingen spawn)
|
|
7
|
+
|
|
8
|
+
Jag gör allt själv — inga subagenter. Estimat: ~20 min.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Del 1: Workspace Mobile (workspace/page.tsx)
|
|
13
|
+
|
|
14
|
+
### Ändringar:
|
|
15
|
+
1. **Sidebar** → Dold på mobil, visa via hamburger-meny
|
|
16
|
+
2. **Tabs** → Horisontell scroll eller dropdown på mobil
|
|
17
|
+
3. **Cards/Tables** → Stack vertically på små skärmar
|
|
18
|
+
4. **Agent-kort** → Responsiv layout, knappar under content
|
|
19
|
+
5. **Input-fält** → Full width på mobil
|
|
20
|
+
|
|
21
|
+
### Tekniskt:
|
|
22
|
+
- Tailwind breakpoints: `sm:`, `md:`, `lg:`
|
|
23
|
+
- Befintlig `Menu`/`X` icons redan importerade
|
|
24
|
+
- Mobil sidebar state: `sidebarOpen` finns redan
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Del 2: Landing Page Header (page.tsx)
|
|
29
|
+
|
|
30
|
+
### Ändringar:
|
|
31
|
+
1. **Desktop nav** → Dölj på mobil (`hidden lg:flex`)
|
|
32
|
+
2. **Hamburger** → Visa på mobil (`lg:hidden`)
|
|
33
|
+
3. **Mobile menu** → Slide-in eller dropdown
|
|
34
|
+
4. **CTA-knappar** → Stack på mobil
|
|
35
|
+
|
|
36
|
+
### Tekniskt:
|
|
37
|
+
- Lägg till mobile menu state
|
|
38
|
+
- Animera med Tailwind transitions
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Filer som ändras:
|
|
43
|
+
1. `landing/src/app/workspace/page.tsx`
|
|
44
|
+
2. `landing/src/app/page.tsx`
|
|
45
|
+
|
|
46
|
+
## Inga nya dependencies
|
|
47
|
+
|
|
48
|
+
## Teststrategi:
|
|
49
|
+
- Chrome DevTools mobile view
|
|
50
|
+
- Breakpoints: 375px (iPhone), 768px (tablet)
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Attestera?
|
|
55
|
+
|
|
56
|
+
Svara **"kör"** för att starta.
|