@underpeaks/generator-nextjs 1.0.19
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/generator.d.ts +3 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +113 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/algolia.d.ts +3 -0
- package/dist/integrations/algolia.d.ts.map +1 -0
- package/dist/integrations/algolia.js +56 -0
- package/dist/integrations/algolia.js.map +1 -0
- package/dist/integrations/anthropic.d.ts +3 -0
- package/dist/integrations/anthropic.d.ts.map +1 -0
- package/dist/integrations/anthropic.js +54 -0
- package/dist/integrations/anthropic.js.map +1 -0
- package/dist/integrations/aws-s3.d.ts +3 -0
- package/dist/integrations/aws-s3.d.ts.map +1 -0
- package/dist/integrations/aws-s3.js +59 -0
- package/dist/integrations/aws-s3.js.map +1 -0
- package/dist/integrations/clerk.d.ts +3 -0
- package/dist/integrations/clerk.d.ts.map +1 -0
- package/dist/integrations/clerk.js +34 -0
- package/dist/integrations/clerk.js.map +1 -0
- package/dist/integrations/cloudinary.d.ts +3 -0
- package/dist/integrations/cloudinary.d.ts.map +1 -0
- package/dist/integrations/cloudinary.js +57 -0
- package/dist/integrations/cloudinary.js.map +1 -0
- package/dist/integrations/crisp.d.ts +3 -0
- package/dist/integrations/crisp.d.ts.map +1 -0
- package/dist/integrations/crisp.js +53 -0
- package/dist/integrations/crisp.js.map +1 -0
- package/dist/integrations/firebase.d.ts +3 -0
- package/dist/integrations/firebase.d.ts.map +1 -0
- package/dist/integrations/firebase.js +53 -0
- package/dist/integrations/firebase.js.map +1 -0
- package/dist/integrations/flutterwave.d.ts +3 -0
- package/dist/integrations/flutterwave.d.ts.map +1 -0
- package/dist/integrations/flutterwave.js +53 -0
- package/dist/integrations/flutterwave.js.map +1 -0
- package/dist/integrations/gemini.d.ts +3 -0
- package/dist/integrations/gemini.d.ts.map +1 -0
- package/dist/integrations/gemini.js +40 -0
- package/dist/integrations/gemini.js.map +1 -0
- package/dist/integrations/github.d.ts +3 -0
- package/dist/integrations/github.d.ts.map +1 -0
- package/dist/integrations/github.js +53 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/hubspot.d.ts +3 -0
- package/dist/integrations/hubspot.d.ts.map +1 -0
- package/dist/integrations/hubspot.js +54 -0
- package/dist/integrations/hubspot.js.map +1 -0
- package/dist/integrations/index.d.ts +3 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +63 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/lemonsqueezy.d.ts +3 -0
- package/dist/integrations/lemonsqueezy.d.ts.map +1 -0
- package/dist/integrations/lemonsqueezy.js +43 -0
- package/dist/integrations/lemonsqueezy.js.map +1 -0
- package/dist/integrations/mailchimp.d.ts +3 -0
- package/dist/integrations/mailchimp.d.ts.map +1 -0
- package/dist/integrations/mailchimp.js +52 -0
- package/dist/integrations/mailchimp.js.map +1 -0
- package/dist/integrations/openai.d.ts +3 -0
- package/dist/integrations/openai.d.ts.map +1 -0
- package/dist/integrations/openai.js +78 -0
- package/dist/integrations/openai.js.map +1 -0
- package/dist/integrations/payfast.d.ts +3 -0
- package/dist/integrations/payfast.d.ts.map +1 -0
- package/dist/integrations/payfast.js +94 -0
- package/dist/integrations/payfast.js.map +1 -0
- package/dist/integrations/pusher.d.ts +3 -0
- package/dist/integrations/pusher.d.ts.map +1 -0
- package/dist/integrations/pusher.js +86 -0
- package/dist/integrations/pusher.js.map +1 -0
- package/dist/integrations/resend.d.ts +3 -0
- package/dist/integrations/resend.d.ts.map +1 -0
- package/dist/integrations/resend.js +45 -0
- package/dist/integrations/resend.js.map +1 -0
- package/dist/integrations/sendgrid.d.ts +3 -0
- package/dist/integrations/sendgrid.d.ts.map +1 -0
- package/dist/integrations/sendgrid.js +42 -0
- package/dist/integrations/sendgrid.js.map +1 -0
- package/dist/integrations/sentry.d.ts +3 -0
- package/dist/integrations/sentry.d.ts.map +1 -0
- package/dist/integrations/sentry.js +49 -0
- package/dist/integrations/sentry.js.map +1 -0
- package/dist/integrations/slack.d.ts +3 -0
- package/dist/integrations/slack.d.ts.map +1 -0
- package/dist/integrations/slack.js +54 -0
- package/dist/integrations/slack.js.map +1 -0
- package/dist/integrations/storage.d.ts +3 -0
- package/dist/integrations/storage.d.ts.map +1 -0
- package/dist/integrations/storage.js +71 -0
- package/dist/integrations/storage.js.map +1 -0
- package/dist/integrations/stripe.d.ts +3 -0
- package/dist/integrations/stripe.d.ts.map +1 -0
- package/dist/integrations/stripe.js +65 -0
- package/dist/integrations/stripe.js.map +1 -0
- package/dist/integrations/twilio.d.ts +3 -0
- package/dist/integrations/twilio.d.ts.map +1 -0
- package/dist/integrations/twilio.js +45 -0
- package/dist/integrations/twilio.js.map +1 -0
- package/dist/integrations/uploadthing.d.ts +3 -0
- package/dist/integrations/uploadthing.d.ts.map +1 -0
- package/dist/integrations/uploadthing.js +41 -0
- package/dist/integrations/uploadthing.js.map +1 -0
- package/dist/templates/api-builder.d.ts +12 -0
- package/dist/templates/api-builder.d.ts.map +1 -0
- package/dist/templates/api-builder.js +76 -0
- package/dist/templates/api-builder.js.map +1 -0
- package/dist/templates/api-route-id.d.ts +3 -0
- package/dist/templates/api-route-id.d.ts.map +1 -0
- package/dist/templates/api-route-id.js +137 -0
- package/dist/templates/api-route-id.js.map +1 -0
- package/dist/templates/api-route.d.ts +3 -0
- package/dist/templates/api-route.d.ts.map +1 -0
- package/dist/templates/api-route.js +85 -0
- package/dist/templates/api-route.js.map +1 -0
- package/dist/templates/app-nav.d.ts +23 -0
- package/dist/templates/app-nav.d.ts.map +1 -0
- package/dist/templates/app-nav.js +132 -0
- package/dist/templates/app-nav.js.map +1 -0
- package/dist/templates/env.d.ts +3 -0
- package/dist/templates/env.d.ts.map +1 -0
- package/dist/templates/env.js +39 -0
- package/dist/templates/env.js.map +1 -0
- package/dist/templates/layout.d.ts +3 -0
- package/dist/templates/layout.d.ts.map +1 -0
- package/dist/templates/layout.js +50 -0
- package/dist/templates/layout.js.map +1 -0
- package/dist/templates/navigation.d.ts +3 -0
- package/dist/templates/navigation.d.ts.map +1 -0
- package/dist/templates/navigation.js +129 -0
- package/dist/templates/navigation.js.map +1 -0
- package/dist/templates/nxf-client.d.ts +3 -0
- package/dist/templates/nxf-client.d.ts.map +1 -0
- package/dist/templates/nxf-client.js +96 -0
- package/dist/templates/nxf-client.js.map +1 -0
- package/dist/templates/page-auth.d.ts +3 -0
- package/dist/templates/page-auth.d.ts.map +1 -0
- package/dist/templates/page-auth.js +344 -0
- package/dist/templates/page-auth.js.map +1 -0
- package/dist/templates/page-detail.d.ts +3 -0
- package/dist/templates/page-detail.d.ts.map +1 -0
- package/dist/templates/page-detail.js +86 -0
- package/dist/templates/page-detail.js.map +1 -0
- package/dist/templates/page-form.d.ts +3 -0
- package/dist/templates/page-form.d.ts.map +1 -0
- package/dist/templates/page-form.js +159 -0
- package/dist/templates/page-form.js.map +1 -0
- package/dist/templates/page-landing.d.ts +3 -0
- package/dist/templates/page-landing.d.ts.map +1 -0
- package/dist/templates/page-landing.js +140 -0
- package/dist/templates/page-landing.js.map +1 -0
- package/dist/templates/page-list.d.ts +3 -0
- package/dist/templates/page-list.d.ts.map +1 -0
- package/dist/templates/page-list.js +130 -0
- package/dist/templates/page-list.js.map +1 -0
- package/dist/templates/page-remaining.d.ts +3 -0
- package/dist/templates/page-remaining.d.ts.map +1 -0
- package/dist/templates/page-remaining.js +870 -0
- package/dist/templates/page-remaining.js.map +1 -0
- package/dist/templates/readme.d.ts +3 -0
- package/dist/templates/readme.d.ts.map +1 -0
- package/dist/templates/readme.js +87 -0
- package/dist/templates/readme.js.map +1 -0
- package/dist/templates/tailwind.d.ts +3 -0
- package/dist/templates/tailwind.d.ts.map +1 -0
- package/dist/templates/tailwind.js +63 -0
- package/dist/templates/tailwind.js.map +1 -0
- package/dist/templates/theme.d.ts +3 -0
- package/dist/templates/theme.d.ts.map +1 -0
- package/dist/templates/theme.js +49 -0
- package/dist/templates/theme.js.map +1 -0
- package/dist/templates/types.d.ts +3 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +74 -0
- package/dist/templates/types.js.map +1 -0
- package/dist/templates/validators.d.ts +3 -0
- package/dist/templates/validators.d.ts.map +1 -0
- package/dist/templates/validators.js +37 -0
- package/dist/templates/validators.js.map +1 -0
- package/package.json +24 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payfast.d.ts","sourceRoot":"","sources":["../../src/integrations/payfast.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CA0FnF"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/payfast.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generatePayfastNextjs = generatePayfastNextjs;
|
|
5
|
+
function generatePayfastNextjs(config) {
|
|
6
|
+
const merchantId = config['merchant_id'] ?? 'YOUR_MERCHANT_ID';
|
|
7
|
+
const merchantKey = config['merchant_key'] ?? 'YOUR_MERCHANT_KEY';
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
10
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
11
|
+
lines.push(`// Integration: PayFast`);
|
|
12
|
+
lines.push(``);
|
|
13
|
+
lines.push(`// ── Note ──────────────────────────────────────────────────────────────────`);
|
|
14
|
+
lines.push(`// PayFast works by redirecting users to their hosted payment page.`);
|
|
15
|
+
lines.push(`// Build the payment form server-side and redirect the user.`);
|
|
16
|
+
lines.push(``);
|
|
17
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
18
|
+
lines.push(`// Add PAYFAST_PASSPHRASE to .env.local. PayFast requires an MD5 signature`);
|
|
19
|
+
lines.push(`// of all submitted fields (plus your passphrase) to prevent tampering —`);
|
|
20
|
+
lines.push(`// without it, PayFast will reject the request or (if signature checking`);
|
|
21
|
+
lines.push(`// is misconfigured on your account) silently accept a tampered amount.`);
|
|
22
|
+
lines.push(``);
|
|
23
|
+
lines.push(`import crypto from 'crypto'`);
|
|
24
|
+
lines.push(``);
|
|
25
|
+
lines.push(`export interface PayfastPayment {`);
|
|
26
|
+
lines.push(` merchantId: string`);
|
|
27
|
+
lines.push(` merchantKey: string`);
|
|
28
|
+
lines.push(` returnUrl: string`);
|
|
29
|
+
lines.push(` cancelUrl: string`);
|
|
30
|
+
lines.push(` notifyUrl: string`);
|
|
31
|
+
lines.push(` nameFirst: string`);
|
|
32
|
+
lines.push(` emailAddress: string`);
|
|
33
|
+
lines.push(` mPaymentId: string`);
|
|
34
|
+
lines.push(` amount: string`);
|
|
35
|
+
lines.push(` itemName: string`);
|
|
36
|
+
lines.push(`}`);
|
|
37
|
+
lines.push(``);
|
|
38
|
+
// FIX: crypto was imported but never used — no MD5 signature was ever
|
|
39
|
+
// generated, despite PayFast requiring one. Without a signature, a
|
|
40
|
+
// client could alter `amount` (or any other field) in the redirect URL
|
|
41
|
+
// before the user is sent to PayFast, and PayFast has no way to detect
|
|
42
|
+
// the tampering. generateSignature() now builds the exact
|
|
43
|
+
// param-string-then-MD5 signature PayFast's own docs specify (alphabetical
|
|
44
|
+
// key order is NOT required by PayFast — insertion order of the actual
|
|
45
|
+
// submitted fields is used, matching how the form itself is built), and
|
|
46
|
+
// buildPayfastUrl() includes it as the final `signature` param.
|
|
47
|
+
lines.push(`function generateSignature(`);
|
|
48
|
+
lines.push(` data: Record<string, string>,`);
|
|
49
|
+
lines.push(` passphrase?: string,`);
|
|
50
|
+
lines.push(`): string {`);
|
|
51
|
+
lines.push(` let paramString = Object.entries(data)`);
|
|
52
|
+
lines.push(` .map(([k, v]) => \`\${k}=\${encodeURIComponent(v.trim()).replace(/%20/g, '+')}\`)`);
|
|
53
|
+
lines.push(` .join('&')`);
|
|
54
|
+
lines.push(``);
|
|
55
|
+
lines.push(` if (passphrase) {`);
|
|
56
|
+
lines.push(` paramString += \`&passphrase=\${encodeURIComponent(passphrase.trim()).replace(/%20/g, '+')}\``);
|
|
57
|
+
lines.push(` }`);
|
|
58
|
+
lines.push(``);
|
|
59
|
+
lines.push(` return crypto.createHash('md5').update(paramString).digest('hex')`);
|
|
60
|
+
lines.push(`}`);
|
|
61
|
+
lines.push(``);
|
|
62
|
+
lines.push(`export function buildPayfastUrl(payment: PayfastPayment, sandbox = false): string {`);
|
|
63
|
+
lines.push(` const base = sandbox`);
|
|
64
|
+
lines.push(` ? 'https://sandbox.payfast.co.za/eng/process'`);
|
|
65
|
+
lines.push(` : 'https://www.payfast.co.za/eng/process'`);
|
|
66
|
+
lines.push(``);
|
|
67
|
+
lines.push(` const data: Record<string, string> = {`);
|
|
68
|
+
lines.push(` merchant_id: payment.merchantId || '${merchantId}',`);
|
|
69
|
+
lines.push(` merchant_key: payment.merchantKey || '${merchantKey}',`);
|
|
70
|
+
lines.push(` return_url: payment.returnUrl,`);
|
|
71
|
+
lines.push(` cancel_url: payment.cancelUrl,`);
|
|
72
|
+
lines.push(` notify_url: payment.notifyUrl,`);
|
|
73
|
+
lines.push(` name_first: payment.nameFirst,`);
|
|
74
|
+
lines.push(` email_address: payment.emailAddress,`);
|
|
75
|
+
lines.push(` m_payment_id: payment.mPaymentId,`);
|
|
76
|
+
lines.push(` amount: payment.amount,`);
|
|
77
|
+
lines.push(` item_name: payment.itemName,`);
|
|
78
|
+
lines.push(` }`);
|
|
79
|
+
lines.push(``);
|
|
80
|
+
lines.push(` const signature = generateSignature(data, process.env.PAYFAST_PASSPHRASE)`);
|
|
81
|
+
lines.push(``);
|
|
82
|
+
lines.push(` const paramString = Object.entries({ ...data, signature })`);
|
|
83
|
+
lines.push(` .map(([k, v]) => \`\${encodeURIComponent(k)}=\${encodeURIComponent(v)}\`)`);
|
|
84
|
+
lines.push(` .join('&')`);
|
|
85
|
+
lines.push(``);
|
|
86
|
+
lines.push(` return \`\${base}?\${paramString}\``);
|
|
87
|
+
lines.push(`}`);
|
|
88
|
+
return {
|
|
89
|
+
path: 'lib/generated/integrations/payfast.ts',
|
|
90
|
+
content: lines.join('\n'),
|
|
91
|
+
category: 'generated',
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=payfast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payfast.js","sourceRoot":"","sources":["../../src/integrations/payfast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pusher.d.ts","sourceRoot":"","sources":["../../src/integrations/pusher.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAkFlF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/pusher.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generatePusherNextjs = generatePusherNextjs;
|
|
5
|
+
function generatePusherNextjs(config) {
|
|
6
|
+
const appKey = config['key'] ?? 'YOUR_PUSHER_KEY';
|
|
7
|
+
const cluster = config['cluster'] ?? 'mt1';
|
|
8
|
+
const appId = config['app_id'] ?? 'YOUR_APP_ID';
|
|
9
|
+
const lines = [];
|
|
10
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
11
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
12
|
+
lines.push(`// Integration: Pusher`);
|
|
13
|
+
lines.push(``);
|
|
14
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
15
|
+
lines.push(`// 1. npm install pusher pusher-js`);
|
|
16
|
+
lines.push(`// 2. Add PUSHER_SECRET to .env.local — required, no fallback is generated`);
|
|
17
|
+
lines.push(`// into this file. Pusher server secrets must never ship in source.`);
|
|
18
|
+
lines.push(``);
|
|
19
|
+
lines.push(`// ── Client-side (use in components) ──────────────────────────────────────`);
|
|
20
|
+
lines.push(``);
|
|
21
|
+
lines.push(`import PusherClient from 'pusher-js'`);
|
|
22
|
+
lines.push(`import PusherServer from 'pusher'`);
|
|
23
|
+
lines.push(``);
|
|
24
|
+
lines.push(`let pusherClient: PusherClient | null = null`);
|
|
25
|
+
lines.push(``);
|
|
26
|
+
lines.push(`export function getPusherClient(): PusherClient {`);
|
|
27
|
+
lines.push(` if (!pusherClient) {`);
|
|
28
|
+
lines.push(` pusherClient = new PusherClient('${appKey}', { cluster: '${cluster}' })`);
|
|
29
|
+
lines.push(` }`);
|
|
30
|
+
lines.push(` return pusherClient`);
|
|
31
|
+
lines.push(`}`);
|
|
32
|
+
lines.push(``);
|
|
33
|
+
lines.push(`export function subscribeToChannel(`);
|
|
34
|
+
lines.push(` channelName: string,`);
|
|
35
|
+
lines.push(` eventName: string,`);
|
|
36
|
+
lines.push(` callback: (data: unknown) => void,`);
|
|
37
|
+
lines.push(`) {`);
|
|
38
|
+
lines.push(` const client = getPusherClient()`);
|
|
39
|
+
lines.push(` const channel = client.subscribe(channelName)`);
|
|
40
|
+
lines.push(` channel.bind(eventName, callback)`);
|
|
41
|
+
lines.push(` return () => {`);
|
|
42
|
+
lines.push(` channel.unbind(eventName, callback)`);
|
|
43
|
+
lines.push(` client.unsubscribe(channelName)`);
|
|
44
|
+
lines.push(` }`);
|
|
45
|
+
lines.push(`}`);
|
|
46
|
+
lines.push(``);
|
|
47
|
+
lines.push(`// ── Server-side (use in API routes only) ─────────────────────────────────`);
|
|
48
|
+
lines.push(``);
|
|
49
|
+
lines.push(`export function getPusherServer(): PusherServer {`);
|
|
50
|
+
// FIX: was `secret: process.env.PUSHER_SECRET ?? '${secret}'` — a real
|
|
51
|
+
// secret value could be baked as a literal string fallback directly into
|
|
52
|
+
// this committed source file if PUSHER_SECRET wasn't set at generation
|
|
53
|
+
// time. Pusher server secrets must stay server-only and out of source
|
|
54
|
+
// control entirely. Now throws a clear error at runtime instead of ever
|
|
55
|
+
// embedding a literal secret — no `secret` config value is read here at
|
|
56
|
+
// all anymore.
|
|
57
|
+
lines.push(` if (!process.env.PUSHER_SECRET) {`);
|
|
58
|
+
lines.push(` throw new Error(`);
|
|
59
|
+
lines.push(` 'PUSHER_SECRET is not set. Add it to your .env.local — ' +`);
|
|
60
|
+
lines.push(` 'never hardcode Pusher server secrets in source.',`);
|
|
61
|
+
lines.push(` )`);
|
|
62
|
+
lines.push(` }`);
|
|
63
|
+
lines.push(` return new PusherServer({`);
|
|
64
|
+
lines.push(` appId: '${appId}',`);
|
|
65
|
+
lines.push(` key: '${appKey}',`);
|
|
66
|
+
lines.push(` secret: process.env.PUSHER_SECRET,`);
|
|
67
|
+
lines.push(` cluster: '${cluster}',`);
|
|
68
|
+
lines.push(` useTLS: true,`);
|
|
69
|
+
lines.push(` })`);
|
|
70
|
+
lines.push(`}`);
|
|
71
|
+
lines.push(``);
|
|
72
|
+
lines.push(`export async function triggerEvent(`);
|
|
73
|
+
lines.push(` channel: string,`);
|
|
74
|
+
lines.push(` event: string,`);
|
|
75
|
+
lines.push(` data: unknown,`);
|
|
76
|
+
lines.push(`) {`);
|
|
77
|
+
lines.push(` const server = getPusherServer()`);
|
|
78
|
+
lines.push(` await server.trigger(channel, event, data)`);
|
|
79
|
+
lines.push(`}`);
|
|
80
|
+
return {
|
|
81
|
+
path: 'lib/generated/integrations/pusher.ts',
|
|
82
|
+
content: lines.join('\n'),
|
|
83
|
+
category: 'generated',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=pusher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pusher.js","sourceRoot":"","sources":["../../src/integrations/pusher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../src/integrations/resend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAyClF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/resend.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateResendNextjs = generateResendNextjs;
|
|
5
|
+
function generateResendNextjs(config) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Integration: Resend`);
|
|
10
|
+
lines.push(``);
|
|
11
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
12
|
+
lines.push(`// 1. npm install resend`);
|
|
13
|
+
lines.push(`// 2. Add RESEND_API_KEY to .env.local`);
|
|
14
|
+
lines.push(`// 3. Only use in API routes or Server Actions`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`import { Resend } from 'resend'`);
|
|
17
|
+
lines.push(``);
|
|
18
|
+
lines.push(`let client: Resend | null = null`);
|
|
19
|
+
lines.push(``);
|
|
20
|
+
lines.push(`export function getResendClient(): Resend {`);
|
|
21
|
+
lines.push(` if (!client) client = new Resend(process.env.RESEND_API_KEY)`);
|
|
22
|
+
lines.push(` return client`);
|
|
23
|
+
lines.push(`}`);
|
|
24
|
+
lines.push(``);
|
|
25
|
+
lines.push(`export async function sendEmail({`);
|
|
26
|
+
lines.push(` to,`);
|
|
27
|
+
lines.push(` subject,`);
|
|
28
|
+
lines.push(` html,`);
|
|
29
|
+
lines.push(` from = 'noreply@yourdomain.com',`);
|
|
30
|
+
lines.push(`}: {`);
|
|
31
|
+
lines.push(` to: string | string[]`);
|
|
32
|
+
lines.push(` subject: string`);
|
|
33
|
+
lines.push(` html: string`);
|
|
34
|
+
lines.push(` from?: string`);
|
|
35
|
+
lines.push(`}) {`);
|
|
36
|
+
lines.push(` const resend = getResendClient()`);
|
|
37
|
+
lines.push(` return resend.emails.send({ from, to, subject, html })`);
|
|
38
|
+
lines.push(`}`);
|
|
39
|
+
return {
|
|
40
|
+
path: 'lib/generated/integrations/resend.ts',
|
|
41
|
+
content: lines.join('\n'),
|
|
42
|
+
category: 'generated',
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=resend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resend.js","sourceRoot":"","sources":["../../src/integrations/resend.ts"],"names":[],"mappings":";AAAA,gFAAgF;;AAIhF,oDAyCC;AAzCD,SAAgB,oBAAoB,CAAC,MAA8B;IACjE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACtC,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACpD,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;IACzD,KAAK,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAA;IAC5E,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;IAC1C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;IACtE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sCAAsC;QAChD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,WAAW;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendgrid.d.ts","sourceRoot":"","sources":["../../src/integrations/sendgrid.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAsCpF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/sendgrid.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateSendGridNextjs = generateSendGridNextjs;
|
|
5
|
+
function generateSendGridNextjs(config) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Integration: SendGrid`);
|
|
10
|
+
lines.push(``);
|
|
11
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
12
|
+
lines.push(`// 1. npm install @sendgrid/mail`);
|
|
13
|
+
lines.push(`// 2. Add SENDGRID_API_KEY to .env.local`);
|
|
14
|
+
lines.push(`// 3. Only use in API routes or Server Actions`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`import sgMail from '@sendgrid/mail'`);
|
|
17
|
+
lines.push(``);
|
|
18
|
+
lines.push(`export function initSendGrid() {`);
|
|
19
|
+
lines.push(` sgMail.setApiKey(process.env.SENDGRID_API_KEY ?? '')`);
|
|
20
|
+
lines.push(`}`);
|
|
21
|
+
lines.push(``);
|
|
22
|
+
lines.push(`export async function sendEmail({`);
|
|
23
|
+
lines.push(` to,`);
|
|
24
|
+
lines.push(` subject,`);
|
|
25
|
+
lines.push(` html,`);
|
|
26
|
+
lines.push(` from = 'noreply@yourdomain.com',`);
|
|
27
|
+
lines.push(`}: {`);
|
|
28
|
+
lines.push(` to: string`);
|
|
29
|
+
lines.push(` subject: string`);
|
|
30
|
+
lines.push(` html: string`);
|
|
31
|
+
lines.push(` from?: string`);
|
|
32
|
+
lines.push(`}) {`);
|
|
33
|
+
lines.push(` initSendGrid()`);
|
|
34
|
+
lines.push(` return sgMail.send({ to, from, subject, html })`);
|
|
35
|
+
lines.push(`}`);
|
|
36
|
+
return {
|
|
37
|
+
path: 'lib/generated/integrations/sendgrid.ts',
|
|
38
|
+
content: lines.join('\n'),
|
|
39
|
+
category: 'generated',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=sendgrid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendgrid.js","sourceRoot":"","sources":["../../src/integrations/sendgrid.ts"],"names":[],"mappings":";AAAA,kFAAkF;;AAIlF,wDAsCC;AAtCD,SAAgB,sBAAsB,CAAC,MAA8B;IACnE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IACpE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,wCAAwC;QAClD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,WAAW;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../src/integrations/sentry.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CA6ClF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/sentry.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateSentryNextjs = generateSentryNextjs;
|
|
5
|
+
function generateSentryNextjs(config) {
|
|
6
|
+
const dsn = config['dsn'] ?? 'YOUR_SENTRY_DSN';
|
|
7
|
+
const env = config['environment'] ?? 'production';
|
|
8
|
+
const lines = [];
|
|
9
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
10
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
11
|
+
lines.push(`// Integration: Sentry`);
|
|
12
|
+
lines.push(``);
|
|
13
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
14
|
+
lines.push(`// 1. npm install @sentry/nextjs`);
|
|
15
|
+
lines.push(`// 2. Add sentry.client.config.ts and sentry.server.config.ts`);
|
|
16
|
+
lines.push(`// 3. Run: npx @sentry/wizard@latest -i nextjs`);
|
|
17
|
+
lines.push(``);
|
|
18
|
+
lines.push(`import * as Sentry from '@sentry/nextjs'`);
|
|
19
|
+
lines.push(``);
|
|
20
|
+
lines.push(`export function initSentry() {`);
|
|
21
|
+
lines.push(` Sentry.init({`);
|
|
22
|
+
lines.push(` dsn: '${dsn}',`);
|
|
23
|
+
lines.push(` environment: '${env}',`);
|
|
24
|
+
lines.push(` tracesSampleRate: 1.0,`);
|
|
25
|
+
lines.push(` })`);
|
|
26
|
+
lines.push(`}`);
|
|
27
|
+
lines.push(``);
|
|
28
|
+
lines.push(`export function captureException(error: unknown) {`);
|
|
29
|
+
lines.push(` Sentry.captureException(error)`);
|
|
30
|
+
lines.push(`}`);
|
|
31
|
+
lines.push(``);
|
|
32
|
+
lines.push(`export function captureMessage(message: string) {`);
|
|
33
|
+
lines.push(` Sentry.captureMessage(message)`);
|
|
34
|
+
lines.push(`}`);
|
|
35
|
+
lines.push(``);
|
|
36
|
+
lines.push(`export function setUser(id: string, email?: string) {`);
|
|
37
|
+
lines.push(` Sentry.setUser({ id, email })`);
|
|
38
|
+
lines.push(`}`);
|
|
39
|
+
lines.push(``);
|
|
40
|
+
lines.push(`export function clearUser() {`);
|
|
41
|
+
lines.push(` Sentry.setUser(null)`);
|
|
42
|
+
lines.push(`}`);
|
|
43
|
+
return {
|
|
44
|
+
path: 'lib/generated/integrations/sentry.ts',
|
|
45
|
+
content: lines.join('\n'),
|
|
46
|
+
category: 'generated',
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=sentry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../src/integrations/sentry.ts"],"names":[],"mappings":";AAAA,gFAAgF;;AAIhF,oDA6CC;AA7CD,SAAgB,oBAAoB,CAAC,MAA8B;IACjE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAY,iBAAiB,CAAA;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,YAAY,CAAA;IACjD,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAA;IAC3E,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;IACxC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAA;IAC/D,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;IACnE,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;IAC7C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAC3C,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;IACpC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,sCAAsC;QAChD,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,WAAW;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/integrations/slack.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAkDjF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/slack.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateSlackNextjs = generateSlackNextjs;
|
|
5
|
+
function generateSlackNextjs(config) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Integration: Slack`);
|
|
10
|
+
lines.push(``);
|
|
11
|
+
lines.push(`// ── Setup instructions ────────────────────────────────────────────────────`);
|
|
12
|
+
lines.push(`// 1. npm install @slack/web-api`);
|
|
13
|
+
lines.push(`// 2. Add SLACK_BOT_TOKEN to .env.local`);
|
|
14
|
+
lines.push(`// 3. Only use in API routes or Server Actions`);
|
|
15
|
+
lines.push(``);
|
|
16
|
+
lines.push(`import { WebClient } from '@slack/web-api'`);
|
|
17
|
+
lines.push(``);
|
|
18
|
+
lines.push(`let client: WebClient | null = null`);
|
|
19
|
+
lines.push(``);
|
|
20
|
+
lines.push(`export function getSlackClient(): WebClient {`);
|
|
21
|
+
lines.push(` if (!client) {`);
|
|
22
|
+
lines.push(` client = new WebClient(process.env.SLACK_BOT_TOKEN)`);
|
|
23
|
+
lines.push(` }`);
|
|
24
|
+
lines.push(` return client`);
|
|
25
|
+
lines.push(`}`);
|
|
26
|
+
lines.push(``);
|
|
27
|
+
lines.push(`export async function sendMessage({`);
|
|
28
|
+
lines.push(` channel,`);
|
|
29
|
+
lines.push(` text,`);
|
|
30
|
+
lines.push(`}: {`);
|
|
31
|
+
lines.push(` channel: string`);
|
|
32
|
+
lines.push(` text: string`);
|
|
33
|
+
lines.push(`}) {`);
|
|
34
|
+
lines.push(` const slack = getSlackClient()`);
|
|
35
|
+
lines.push(` return slack.chat.postMessage({ channel, text })`);
|
|
36
|
+
lines.push(`}`);
|
|
37
|
+
lines.push(``);
|
|
38
|
+
lines.push(`export async function sendBlock({`);
|
|
39
|
+
lines.push(` channel,`);
|
|
40
|
+
lines.push(` blocks,`);
|
|
41
|
+
lines.push(`}: {`);
|
|
42
|
+
lines.push(` channel: string`);
|
|
43
|
+
lines.push(` blocks: unknown[]`);
|
|
44
|
+
lines.push(`}) {`);
|
|
45
|
+
lines.push(` const slack = getSlackClient()`);
|
|
46
|
+
lines.push(` return slack.chat.postMessage({ channel, blocks: blocks as any })`);
|
|
47
|
+
lines.push(`}`);
|
|
48
|
+
return {
|
|
49
|
+
path: 'lib/generated/integrations/slack.ts',
|
|
50
|
+
content: lines.join('\n'),
|
|
51
|
+
category: 'generated',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=slack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/integrations/slack.ts"],"names":[],"mappings":";AAAA,+EAA+E;;AAI/E,kDAkDC;AAlDD,SAAgB,mBAAmB,CAAC,MAA8B;IAChE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAA;IACvD,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3F,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;IACrD,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC5D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC3D,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;IAC9B,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IACrE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAA;IACjD,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;IAChE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACxB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACvB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IAC/B,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAClC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IAC9C,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;IACjF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEf,OAAO;QACL,IAAI,EAAM,qCAAqC;QAC/C,OAAO,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,WAAW;KACtB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/integrations/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CAmEnF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: underpeaks_codegen/packages/generator-nextjs/src/integrations/storage.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.generateStorageNextjs = generateStorageNextjs;
|
|
5
|
+
function generateStorageNextjs(config) {
|
|
6
|
+
const lines = [];
|
|
7
|
+
lines.push(`// GENERATED FILE — DO NOT EDIT MANUALLY`);
|
|
8
|
+
lines.push(`// Generated by Underpeaks CodeGen v1.0.0`);
|
|
9
|
+
lines.push(`// Integration: Underpeaks Hosted Storage`);
|
|
10
|
+
lines.push(``);
|
|
11
|
+
lines.push(`// ── Note ──────────────────────────────────────────────────────────────────`);
|
|
12
|
+
lines.push(`// Files upload to your Underpeaks hosted storage. The returned URL is permanent`);
|
|
13
|
+
lines.push(`// and safe to store — render it directly in <img src>.`);
|
|
14
|
+
lines.push(`// Files are organised into folders (e.g. 'avatars', 'documents'). If you don't`);
|
|
15
|
+
lines.push(`// specify a folder, files are uploaded to the default 'uploads' folder.`);
|
|
16
|
+
lines.push(``);
|
|
17
|
+
lines.push(`import { apiConfig } from '../config/api-config'`);
|
|
18
|
+
lines.push(``);
|
|
19
|
+
lines.push(`export interface NxfStorageFile {`);
|
|
20
|
+
lines.push(` storage_id: string`);
|
|
21
|
+
lines.push(` url: string`);
|
|
22
|
+
lines.push(` file_name: string`);
|
|
23
|
+
lines.push(` folder: string`);
|
|
24
|
+
lines.push(` size: number`);
|
|
25
|
+
lines.push(`}`);
|
|
26
|
+
lines.push(``);
|
|
27
|
+
lines.push(`const base = () =>`);
|
|
28
|
+
lines.push(' `${apiConfig.baseUrl}/api-public/v1/${apiConfig.projectId}/storage`');
|
|
29
|
+
lines.push(``);
|
|
30
|
+
lines.push(`/**`);
|
|
31
|
+
lines.push(` * Upload a file. Optionally pass a folder to organise it`);
|
|
32
|
+
lines.push(` * (e.g. 'avatars', 'documents') — defaults to 'uploads' if omitted.`);
|
|
33
|
+
lines.push(` */`);
|
|
34
|
+
lines.push(`export async function uploadFile(file: File, folder?: string): Promise<NxfStorageFile> {`);
|
|
35
|
+
lines.push(` const form = new FormData()`);
|
|
36
|
+
lines.push(` form.append('file', file)`);
|
|
37
|
+
lines.push(` if (folder) form.append('folder', folder)`);
|
|
38
|
+
lines.push(``);
|
|
39
|
+
lines.push(' const res = await fetch(`${base()}/upload`, {');
|
|
40
|
+
lines.push(` method: 'POST',`);
|
|
41
|
+
lines.push(` headers: { 'x-api-key': apiConfig.apiKey },`);
|
|
42
|
+
lines.push(` body: form,`);
|
|
43
|
+
lines.push(` })`);
|
|
44
|
+
lines.push(` if (!res.ok) throw new Error('Upload failed: ' + (await res.text()))`);
|
|
45
|
+
lines.push(` return res.json()`);
|
|
46
|
+
lines.push(`}`);
|
|
47
|
+
lines.push(``);
|
|
48
|
+
lines.push(`export async function listFiles(): Promise<NxfStorageFile[]> {`);
|
|
49
|
+
lines.push(' const res = await fetch(`${base()}/list`, {');
|
|
50
|
+
lines.push(` headers: { 'x-api-key': apiConfig.apiKey },`);
|
|
51
|
+
lines.push(` })`);
|
|
52
|
+
lines.push(` if (!res.ok) throw new Error('List failed: ' + (await res.text()))`);
|
|
53
|
+
lines.push(` const data = await res.json()`);
|
|
54
|
+
lines.push(` return data.files ?? []`);
|
|
55
|
+
lines.push(`}`);
|
|
56
|
+
lines.push(``);
|
|
57
|
+
lines.push(`export async function deleteFile(storageId: string): Promise<void> {`);
|
|
58
|
+
lines.push(' const res = await fetch(`${base()}/delete`, {');
|
|
59
|
+
lines.push(` method: 'POST',`);
|
|
60
|
+
lines.push(` headers: { 'Content-Type': 'application/json', 'x-api-key': apiConfig.apiKey },`);
|
|
61
|
+
lines.push(` body: JSON.stringify({ id: storageId }),`);
|
|
62
|
+
lines.push(` })`);
|
|
63
|
+
lines.push(` if (!res.ok) throw new Error('Delete failed: ' + (await res.text()))`);
|
|
64
|
+
lines.push(`}`);
|
|
65
|
+
return {
|
|
66
|
+
path: 'lib/generated/integrations/storage.ts',
|
|
67
|
+
content: lines.join('\n'),
|
|
68
|
+
category: 'generated',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/integrations/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../../src/integrations/stripe.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE/D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,aAAa,CA6DlF"}
|