@objectifthunes/create-sandstone 0.2.0 → 1.0.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.
Files changed (58) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +31 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/add-adapter.d.ts +2 -0
  6. package/dist/commands/add-adapter.d.ts.map +1 -0
  7. package/dist/commands/add-adapter.js +683 -0
  8. package/dist/commands/add-adapter.js.map +1 -0
  9. package/dist/commands/generate-adapter.d.ts +2 -0
  10. package/dist/commands/generate-adapter.d.ts.map +1 -0
  11. package/dist/commands/generate-adapter.js +467 -0
  12. package/dist/commands/generate-adapter.js.map +1 -0
  13. package/dist/commands/generate-entity.d.ts +2 -0
  14. package/dist/commands/generate-entity.d.ts.map +1 -0
  15. package/dist/commands/generate-entity.js +210 -0
  16. package/dist/commands/generate-entity.js.map +1 -0
  17. package/dist/generator.d.ts.map +1 -1
  18. package/dist/generator.js +7 -0
  19. package/dist/generator.js.map +1 -1
  20. package/dist/index.js +3 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/presets.d.ts +23 -3
  23. package/dist/presets.d.ts.map +1 -1
  24. package/dist/presets.js +48 -1
  25. package/dist/presets.js.map +1 -1
  26. package/dist/prompts.d.ts.map +1 -1
  27. package/dist/prompts.js +181 -7
  28. package/dist/prompts.js.map +1 -1
  29. package/dist/templates/claude-md.d.ts.map +1 -1
  30. package/dist/templates/claude-md.js +470 -2
  31. package/dist/templates/claude-md.js.map +1 -1
  32. package/dist/templates/docker-compose.d.ts.map +1 -1
  33. package/dist/templates/docker-compose.js +42 -0
  34. package/dist/templates/docker-compose.js.map +1 -1
  35. package/dist/templates/env-example.d.ts.map +1 -1
  36. package/dist/templates/env-example.js +81 -2
  37. package/dist/templates/env-example.js.map +1 -1
  38. package/dist/templates/infrastructure.d.ts.map +1 -1
  39. package/dist/templates/infrastructure.js +431 -27
  40. package/dist/templates/infrastructure.js.map +1 -1
  41. package/dist/templates/main-express.d.ts.map +1 -1
  42. package/dist/templates/main-express.js +41 -6
  43. package/dist/templates/main-express.js.map +1 -1
  44. package/dist/templates/main-fastify.d.ts +3 -0
  45. package/dist/templates/main-fastify.d.ts.map +1 -0
  46. package/dist/templates/main-fastify.js +73 -0
  47. package/dist/templates/main-fastify.js.map +1 -0
  48. package/dist/templates/main-hono.d.ts.map +1 -1
  49. package/dist/templates/main-hono.js +45 -9
  50. package/dist/templates/main-hono.js.map +1 -1
  51. package/dist/templates/package-json.d.ts.map +1 -1
  52. package/dist/templates/package-json.js +67 -3
  53. package/dist/templates/package-json.js.map +1 -1
  54. package/dist/templates/test-setup.d.ts +1 -1
  55. package/dist/templates/test-setup.d.ts.map +1 -1
  56. package/dist/templates/test-setup.js +10 -39
  57. package/dist/templates/test-setup.js.map +1 -1
  58. package/package.json +8 -7
@@ -4,19 +4,30 @@ export function infrastructureTemplate(config) {
4
4
  const appOptions = [];
5
5
  const devMode = config.devMode === true;
6
6
  const devPath = `'@objectifthunes/sandstone-sdk/dev'`;
7
+ const isSocketIo = config.realtime === 'socketio';
7
8
  // Core imports always needed
8
9
  imports.push(`import { createApp } from '@objectifthunes/sandstone-sdk'`);
9
- // Database
10
+ // ── Database ──────────────────────────────────────────────────────────────
10
11
  if (devMode) {
11
- imports.push(`import { createPgClient } from ${devPath}`);
12
- inits.push(`const db = createPgClient()`);
12
+ if (config.database === 'supabase') {
13
+ imports.push(`import { createSupabaseClient } from ${devPath}`);
14
+ inits.push(`const db = createSupabaseClient()`);
15
+ }
16
+ else {
17
+ imports.push(`import { createPgClient } from ${devPath}`);
18
+ inits.push(`const db = createPgClient()`);
19
+ }
20
+ }
21
+ else if (config.database === 'supabase') {
22
+ imports.push(`import { createSupabaseClient } from '@objectifthunes/sandstone-sdk/supabase'`);
23
+ inits.push(`const db = createSupabaseClient({ connectionString: process.env.DATABASE_URL! })`);
13
24
  }
14
25
  else {
15
26
  imports.push(`import { createPgClient } from '@objectifthunes/sandstone-sdk/pg'`);
16
27
  inits.push(`const db = createPgClient({ connectionString: process.env.DATABASE_URL! })`);
17
28
  }
18
29
  appOptions.push('db');
19
- // Logger
30
+ // ── Logger ────────────────────────────────────────────────────────────────
20
31
  if (devMode) {
21
32
  imports.push(`import { createPinoLogger } from ${devPath}`);
22
33
  inits.push(`const logger = createPinoLogger()`);
@@ -26,7 +37,7 @@ export function infrastructureTemplate(config) {
26
37
  inits.push(`const logger = createPinoLogger({ level: process.env.LOG_LEVEL ?? 'info' })`);
27
38
  }
28
39
  appOptions.push('logger');
29
- // Tokens
40
+ // ── Tokens ────────────────────────────────────────────────────────────────
30
41
  if (devMode) {
31
42
  imports.push(`import { createJoseSigner } from ${devPath}`);
32
43
  inits.push(`const tokens = createJoseSigner()`);
@@ -36,7 +47,19 @@ export function infrastructureTemplate(config) {
36
47
  inits.push(`const tokens = createJoseSigner({ secret: process.env.JWT_SECRET! })`);
37
48
  }
38
49
  appOptions.push('tokens');
39
- // Email
50
+ // ── Tracing ───────────────────────────────────────────────────────────────
51
+ if (config.tracing) {
52
+ if (devMode) {
53
+ imports.push(`import { createOtelTracer } from ${devPath}`);
54
+ inits.push(`const tracer = createOtelTracer()`);
55
+ }
56
+ else {
57
+ imports.push(`import { createOtelTracer } from '@objectifthunes/sandstone-sdk/otel'`);
58
+ inits.push(`const tracer = createOtelTracer({ serviceName: process.env.OTEL_SERVICE_NAME ?? 'app' })`);
59
+ }
60
+ appOptions.push('tracer');
61
+ }
62
+ // ── Email ─────────────────────────────────────────────────────────────────
40
63
  if (devMode && config.email) {
41
64
  imports.push(`import { createNodemailerTransport } from ${devPath}`);
42
65
  inits.push(`const emailTransport = createNodemailerTransport()`);
@@ -56,12 +79,12 @@ export function infrastructureTemplate(config) {
56
79
  })`);
57
80
  appOptions.push(`email: { transport: emailTransport, from: process.env.EMAIL_FROM ?? 'noreply@example.com' }`);
58
81
  }
59
- // Auth
82
+ // ── Auth ──────────────────────────────────────────────────────────────────
60
83
  if (config.auth) {
61
84
  const authOpts = [`otp: { length: 6, expiresIn: '10m' }`];
62
85
  appOptions.push(`auth: { ${authOpts.join(', ')} }`);
63
86
  }
64
- // Password hasher (for password+otp or all)
87
+ // ── Password hasher (for password+otp or all) ────────────────────────────
65
88
  if (config.auth === 'password+otp' || config.auth === 'all') {
66
89
  if (devMode) {
67
90
  imports.push(`import { createArgon2Hasher } from ${devPath}`);
@@ -71,22 +94,326 @@ export function infrastructureTemplate(config) {
71
94
  }
72
95
  inits.push(`const passwordHasher = createArgon2Hasher()`);
73
96
  }
74
- // OAuth (for oauth+otp or all)
75
- if (config.auth === 'oauth+otp' || config.auth === 'all') {
76
- if (devMode) {
77
- imports.push(`import { createGoogleOAuth } from ${devPath}`);
78
- inits.push(`const googleOAuth = createGoogleOAuth()`);
79
- }
80
- else {
81
- imports.push(`import { createGoogleOAuth } from '@objectifthunes/sandstone-sdk/oauth-google'`);
82
- inits.push(`const googleOAuth = createGoogleOAuth({
97
+ // ── OAuth providers (for oauth+otp or all) ───────────────────────────────
98
+ if ((config.auth === 'oauth+otp' || config.auth === 'all') && config.oauthProviders.length > 0) {
99
+ const providerMap = {
100
+ google: {
101
+ factory: 'createGoogleOAuth',
102
+ subpath: 'oauth-google',
103
+ envVars: `{
83
104
  clientId: process.env.GOOGLE_CLIENT_ID!,
84
105
  clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
85
106
  redirectUri: process.env.GOOGLE_REDIRECT_URI!,
107
+ }`,
108
+ },
109
+ github: {
110
+ factory: 'createGitHubOAuth',
111
+ subpath: 'oauth-github',
112
+ envVars: `{
113
+ clientId: process.env.GITHUB_CLIENT_ID!,
114
+ clientSecret: process.env.GITHUB_CLIENT_SECRET!,
115
+ redirectUri: process.env.GITHUB_REDIRECT_URI!,
116
+ }`,
117
+ },
118
+ apple: {
119
+ factory: 'createAppleOAuth',
120
+ subpath: 'oauth-apple',
121
+ envVars: `{
122
+ clientId: process.env.APPLE_CLIENT_ID!,
123
+ clientSecret: process.env.APPLE_CLIENT_SECRET!,
124
+ teamId: process.env.APPLE_TEAM_ID!,
125
+ keyId: process.env.APPLE_KEY_ID!,
126
+ privateKey: process.env.APPLE_PRIVATE_KEY!,
127
+ }`,
128
+ },
129
+ discord: {
130
+ factory: 'createDiscordOAuth',
131
+ subpath: 'oauth-discord',
132
+ envVars: `{
133
+ clientId: process.env.DISCORD_CLIENT_ID!,
134
+ clientSecret: process.env.DISCORD_CLIENT_SECRET!,
135
+ redirectUri: process.env.DISCORD_REDIRECT_URI!,
136
+ }`,
137
+ },
138
+ };
139
+ for (const provider of config.oauthProviders) {
140
+ const info = providerMap[provider];
141
+ if (!info)
142
+ continue;
143
+ const varName = `${provider}OAuth`;
144
+ if (devMode) {
145
+ imports.push(`import { ${info.factory} } from ${devPath}`);
146
+ inits.push(`const ${varName} = ${info.factory}()`);
147
+ }
148
+ else {
149
+ imports.push(`import { ${info.factory} } from '@objectifthunes/sandstone-sdk/${info.subpath}'`);
150
+ inits.push(`const ${varName} = ${info.factory}(${info.envVars})`);
151
+ }
152
+ }
153
+ }
154
+ // ── SMS ───────────────────────────────────────────────────────────────────
155
+ if (config.sms === 'twilio') {
156
+ if (devMode) {
157
+ imports.push(`import { createTwilioSms } from ${devPath}`);
158
+ inits.push(`const sms = createTwilioSms()`);
159
+ }
160
+ else {
161
+ imports.push(`import { createTwilioSms } from '@objectifthunes/sandstone-sdk/twilio'`);
162
+ inits.push(`const sms = createTwilioSms({
163
+ accountSid: process.env.TWILIO_ACCOUNT_SID!,
164
+ authToken: process.env.TWILIO_AUTH_TOKEN!,
165
+ from: process.env.TWILIO_FROM_NUMBER!,
166
+ })`);
167
+ }
168
+ appOptions.push('sms');
169
+ }
170
+ else if (config.sms === 'sns') {
171
+ if (devMode) {
172
+ imports.push(`import { createSnsSms } from ${devPath}`);
173
+ inits.push(`const sms = createSnsSms()`);
174
+ }
175
+ else {
176
+ imports.push(`import { createSnsSms } from '@objectifthunes/sandstone-sdk/sns'`);
177
+ inits.push(`const sms = createSnsSms({
178
+ region: process.env.AWS_REGION!,
179
+ })`);
180
+ }
181
+ appOptions.push('sms');
182
+ }
183
+ // ── Push ──────────────────────────────────────────────────────────────────
184
+ if (config.push === 'fcm') {
185
+ if (devMode) {
186
+ imports.push(`import { createFcmPush } from ${devPath}`);
187
+ inits.push(`const push = createFcmPush()`);
188
+ }
189
+ else {
190
+ imports.push(`import { createFcmPush } from '@objectifthunes/sandstone-sdk/fcm'`);
191
+ inits.push(`const push = createFcmPush({
192
+ projectId: process.env.FCM_PROJECT_ID!,
193
+ clientEmail: process.env.FCM_CLIENT_EMAIL!,
194
+ privateKey: process.env.FCM_PRIVATE_KEY!,
195
+ })`);
196
+ }
197
+ appOptions.push('push');
198
+ }
199
+ else if (config.push === 'apns') {
200
+ if (devMode) {
201
+ imports.push(`import { createApnsPush } from ${devPath}`);
202
+ inits.push(`const push = createApnsPush()`);
203
+ }
204
+ else {
205
+ imports.push(`import { createApnsPush } from '@objectifthunes/sandstone-sdk/apns'`);
206
+ inits.push(`const push = createApnsPush({
207
+ keyId: process.env.APNS_KEY_ID!,
208
+ teamId: process.env.APNS_TEAM_ID!,
209
+ privateKey: process.env.APNS_PRIVATE_KEY!,
210
+ bundleId: process.env.APNS_BUNDLE_ID!,
211
+ })`);
212
+ }
213
+ appOptions.push('push');
214
+ }
215
+ else if (config.push === 'both') {
216
+ if (devMode) {
217
+ imports.push(`import { createFcmPush, createApnsPush } from ${devPath}`);
218
+ inits.push(`const fcmPush = createFcmPush()`);
219
+ inits.push(`const apnsPush = createApnsPush()`);
220
+ }
221
+ else {
222
+ imports.push(`import { createFcmPush } from '@objectifthunes/sandstone-sdk/fcm'`);
223
+ imports.push(`import { createApnsPush } from '@objectifthunes/sandstone-sdk/apns'`);
224
+ inits.push(`const fcmPush = createFcmPush({
225
+ projectId: process.env.FCM_PROJECT_ID!,
226
+ clientEmail: process.env.FCM_CLIENT_EMAIL!,
227
+ privateKey: process.env.FCM_PRIVATE_KEY!,
228
+ })`);
229
+ inits.push(`const apnsPush = createApnsPush({
230
+ keyId: process.env.APNS_KEY_ID!,
231
+ teamId: process.env.APNS_TEAM_ID!,
232
+ privateKey: process.env.APNS_PRIVATE_KEY!,
233
+ bundleId: process.env.APNS_BUNDLE_ID!,
234
+ })`);
235
+ }
236
+ // Use FCM as primary push; APNs available for fan-out wrapper
237
+ appOptions.push('push: fcmPush');
238
+ }
239
+ // ── Realtime ──────────────────────────────────────────────────────────────
240
+ if (config.realtime === 'pusher') {
241
+ if (devMode) {
242
+ imports.push(`import { createPusherRealtime } from ${devPath}`);
243
+ inits.push(`const realtime = createPusherRealtime()`);
244
+ }
245
+ else {
246
+ imports.push(`import { createPusherRealtime } from '@objectifthunes/sandstone-sdk/pusher'`);
247
+ inits.push(`const realtime = createPusherRealtime({
248
+ appId: process.env.PUSHER_APP_ID!,
249
+ key: process.env.PUSHER_KEY!,
250
+ secret: process.env.PUSHER_SECRET!,
251
+ cluster: process.env.PUSHER_CLUSTER!,
252
+ })`);
253
+ }
254
+ appOptions.push('realtime');
255
+ }
256
+ else if (config.realtime === 'ably') {
257
+ if (devMode) {
258
+ imports.push(`import { createAblyRealtime } from ${devPath}`);
259
+ inits.push(`const realtime = createAblyRealtime()`);
260
+ }
261
+ else {
262
+ imports.push(`import { createAblyRealtime } from '@objectifthunes/sandstone-sdk/ably'`);
263
+ inits.push(`const realtime = createAblyRealtime({
264
+ apiKey: process.env.ABLY_API_KEY!,
265
+ })`);
266
+ }
267
+ appOptions.push('realtime');
268
+ }
269
+ // socketio is handled in the export pattern below — needs HTTP server from main.ts
270
+ // ── Search ────────────────────────────────────────────────────────────────
271
+ if (config.search === 'meilisearch') {
272
+ if (devMode) {
273
+ imports.push(`import { createMeilisearchSearch } from ${devPath}`);
274
+ inits.push(`const search = createMeilisearchSearch()`);
275
+ }
276
+ else {
277
+ imports.push(`import { createMeilisearchSearch } from '@objectifthunes/sandstone-sdk/meilisearch'`);
278
+ inits.push(`const search = createMeilisearchSearch({
279
+ host: process.env.MEILISEARCH_HOST!,
280
+ apiKey: process.env.MEILISEARCH_API_KEY!,
281
+ })`);
282
+ }
283
+ appOptions.push('search');
284
+ }
285
+ else if (config.search === 'typesense') {
286
+ if (devMode) {
287
+ imports.push(`import { createTypesenseSearch } from ${devPath}`);
288
+ inits.push(`const search = createTypesenseSearch()`);
289
+ }
290
+ else {
291
+ imports.push(`import { createTypesenseSearch } from '@objectifthunes/sandstone-sdk/typesense'`);
292
+ inits.push(`const search = createTypesenseSearch({
293
+ host: process.env.TYPESENSE_HOST!,
294
+ port: Number(process.env.TYPESENSE_PORT ?? 8108),
295
+ apiKey: process.env.TYPESENSE_API_KEY!,
296
+ })`);
297
+ }
298
+ appOptions.push('search');
299
+ }
300
+ else if (config.search === 'pg-search') {
301
+ if (devMode) {
302
+ imports.push(`import { createPgSearch } from ${devPath}`);
303
+ inits.push(`const search = createPgSearch()`);
304
+ }
305
+ else {
306
+ imports.push(`import { createPgSearch } from '@objectifthunes/sandstone-sdk/pg-search'`);
307
+ inits.push(`const search = createPgSearch({ db })`);
308
+ }
309
+ appOptions.push('search');
310
+ }
311
+ // ── Queue ─────────────────────────────────────────────────────────────────
312
+ if (config.queue === 'bullmq') {
313
+ if (devMode) {
314
+ imports.push(`import { createBullMQQueue } from ${devPath}`);
315
+ inits.push(`const queue = createBullMQQueue()`);
316
+ }
317
+ else {
318
+ imports.push(`import { createBullMQQueue } from '@objectifthunes/sandstone-sdk/bullmq'`);
319
+ inits.push(`const queue = createBullMQQueue({
320
+ connection: process.env.REDIS_URL!,
321
+ })`);
322
+ }
323
+ appOptions.push('queue');
324
+ }
325
+ else if (config.queue === 'pg-boss') {
326
+ if (devMode) {
327
+ imports.push(`import { createPgBossQueue } from ${devPath}`);
328
+ inits.push(`const queue = createPgBossQueue()`);
329
+ }
330
+ else {
331
+ imports.push(`import { createPgBossQueue } from '@objectifthunes/sandstone-sdk/pg-boss'`);
332
+ inits.push(`const queue = createPgBossQueue({
333
+ connectionString: process.env.DATABASE_URL!,
334
+ })`);
335
+ }
336
+ appOptions.push('queue');
337
+ }
338
+ // ── Scheduler (only when queue is set) ────────────────────────────────────
339
+ if (config.scheduler && config.queue) {
340
+ if (devMode) {
341
+ imports.push(`import { createNodeCronTickSource } from ${devPath}`);
342
+ inits.push(`const nodeCronTickSource = createNodeCronTickSource()`);
343
+ }
344
+ else {
345
+ imports.push(`import { createNodeCronTickSource } from '@objectifthunes/sandstone-sdk/node-cron'`);
346
+ inits.push(`const nodeCronTickSource = createNodeCronTickSource()`);
347
+ }
348
+ appOptions.push(`scheduler: { tickSource: nodeCronTickSource, tasks: [] }`);
349
+ }
350
+ // ── Feature Flags ─────────────────────────────────────────────────────────
351
+ if (config.flags === 'pg-flags') {
352
+ if (devMode) {
353
+ imports.push(`import { createPgFlags } from ${devPath}`);
354
+ inits.push(`const flags = createPgFlags()`);
355
+ }
356
+ else {
357
+ imports.push(`import { createPgFlags } from '@objectifthunes/sandstone-sdk/pg-flags'`);
358
+ inits.push(`const flags = createPgFlags({ db })`);
359
+ }
360
+ appOptions.push('flags');
361
+ }
362
+ else if (config.flags === 'env-flags') {
363
+ if (devMode) {
364
+ imports.push(`import { createEnvFlags } from ${devPath}`);
365
+ inits.push(`const flags = createEnvFlags()`);
366
+ }
367
+ else {
368
+ imports.push(`import { createEnvFlags } from '@objectifthunes/sandstone-sdk/env-flags'`);
369
+ inits.push(`const flags = createEnvFlags({ prefix: 'FLAG_' })`);
370
+ }
371
+ appOptions.push('flags');
372
+ }
373
+ else if (config.flags === 'launchdarkly') {
374
+ if (devMode) {
375
+ imports.push(`import { createLaunchDarklyFlags } from ${devPath}`);
376
+ inits.push(`const flags = createLaunchDarklyFlags()`);
377
+ }
378
+ else {
379
+ imports.push(`import { createLaunchDarklyFlags } from '@objectifthunes/sandstone-sdk/launchdarkly'`);
380
+ inits.push(`const flags = createLaunchDarklyFlags({
381
+ sdkKey: process.env.LAUNCHDARKLY_SDK_KEY!,
382
+ })`);
383
+ }
384
+ appOptions.push('flags');
385
+ }
386
+ // ── Audit ─────────────────────────────────────────────────────────────────
387
+ if (config.audit) {
388
+ appOptions.push('audit: true');
389
+ }
390
+ // ── Authorization ─────────────────────────────────────────────────────────
391
+ if (config.authz === 'pg-authz') {
392
+ if (devMode) {
393
+ imports.push(`import { createPgAuthz } from ${devPath}`);
394
+ inits.push(`const authz = createPgAuthz()`);
395
+ }
396
+ else {
397
+ imports.push(`import { createPgAuthz } from '@objectifthunes/sandstone-sdk/pg-authz'`);
398
+ inits.push(`const authz = createPgAuthz({ db })`);
399
+ }
400
+ appOptions.push('authz');
401
+ }
402
+ else if (config.authz === 'casbin') {
403
+ if (devMode) {
404
+ imports.push(`import { createCasbinAuthz } from ${devPath}`);
405
+ inits.push(`const authz = createCasbinAuthz()`);
406
+ }
407
+ else {
408
+ imports.push(`import { createCasbinAuthz } from '@objectifthunes/sandstone-sdk/casbin'`);
409
+ inits.push(`const authz = createCasbinAuthz({
410
+ modelPath: './casbin/model.conf',
411
+ policyPath: './casbin/policy.csv',
86
412
  })`);
87
413
  }
414
+ appOptions.push('authz');
88
415
  }
89
- // Payments
416
+ // ── Payments ──────────────────────────────────────────────────────────────
90
417
  if (config.payments === 'stripe') {
91
418
  if (devMode) {
92
419
  imports.push(`import { createStripeProvider } from ${devPath}`);
@@ -144,7 +471,7 @@ export function infrastructureTemplate(config) {
144
471
  }
145
472
  appOptions.push('payments: { provider: paymentProvider }');
146
473
  }
147
- // Storage
474
+ // ── Storage ───────────────────────────────────────────────────────────────
148
475
  if (config.storage === 's3') {
149
476
  if (devMode) {
150
477
  imports.push(`import { createS3Storage } from ${devPath}`);
@@ -189,7 +516,7 @@ export function infrastructureTemplate(config) {
189
516
  })`);
190
517
  }
191
518
  }
192
- // Cache
519
+ // ── Cache ─────────────────────────────────────────────────────────────────
193
520
  if (config.cache === 'upstash') {
194
521
  if (devMode) {
195
522
  imports.push(`import { createUpstashCache } from ${devPath}`);
@@ -203,12 +530,38 @@ export function infrastructureTemplate(config) {
203
530
  })`);
204
531
  }
205
532
  }
206
- // GraphQL
533
+ else if (config.cache === 'redis') {
534
+ if (devMode) {
535
+ imports.push(`import { createRedisCache } from ${devPath}`);
536
+ inits.push(`const cache = createRedisCache()`);
537
+ }
538
+ else {
539
+ imports.push(`import { createRedisCache } from '@objectifthunes/sandstone-sdk/redis'`);
540
+ inits.push(`const cache = createRedisCache({
541
+ url: process.env.REDIS_URL!,
542
+ })`);
543
+ }
544
+ }
545
+ else if (config.cache === 'memory') {
546
+ if (devMode) {
547
+ imports.push(`import { createMemoryCache } from ${devPath}`);
548
+ inits.push(`const cache = createMemoryCache()`);
549
+ }
550
+ else {
551
+ imports.push(`import { createMemoryCache } from '@objectifthunes/sandstone-sdk/memory'`);
552
+ inits.push(`const cache = createMemoryCache()`);
553
+ }
554
+ }
555
+ // ── GraphQL ───────────────────────────────────────────────────────────────
207
556
  if (config.graphql) {
208
557
  imports.push(`import { schema } from './schema.js'`);
209
558
  appOptions.push(`graphql: { schema }`);
210
559
  }
211
- // Build the createApp call
560
+ // ── Dashboard ─────────────────────────────────────────────────────────────
561
+ if (config.dashboard) {
562
+ imports.push(`import { createDashboard } from '@objectifthunes/sandstone-sdk'`);
563
+ }
564
+ // ── Build the output ─────────────────────────────────────────────────────
212
565
  const optionsStr = appOptions
213
566
  .map((opt) => ` ${opt},`)
214
567
  .join('\n');
@@ -217,15 +570,60 @@ export function infrastructureTemplate(config) {
217
570
  parts.push('');
218
571
  parts.push(inits.join('\n\n'));
219
572
  parts.push('');
220
- parts.push(`export const app = await createApp({
573
+ // Socket.io special export pattern
574
+ if (isSocketIo) {
575
+ if (devMode) {
576
+ imports.push(`import { createSocketIoRealtime } from ${devPath}`);
577
+ }
578
+ else {
579
+ imports.push(`import { createSocketIoRealtime } from '@objectifthunes/sandstone-sdk/socketio'`);
580
+ }
581
+ imports.push(`import type { Server as HttpServer } from 'node:http'`);
582
+ // Rebuild parts with updated imports
583
+ parts.length = 0;
584
+ parts.push(imports.join('\n'));
585
+ parts.push('');
586
+ parts.push(inits.join('\n\n'));
587
+ parts.push('');
588
+ if (devMode) {
589
+ parts.push(`export function createRealtime(server: HttpServer) {
590
+ return createSocketIoRealtime()
591
+ }`);
592
+ }
593
+ else {
594
+ parts.push(`export function createRealtime(server: HttpServer) {
595
+ return createSocketIoRealtime({ server })
596
+ }`);
597
+ }
598
+ parts.push('');
599
+ parts.push(`export const appOptions = {
600
+ ${optionsStr}
601
+ }`);
602
+ }
603
+ else {
604
+ parts.push(`export const app = await createApp({
221
605
  ${optionsStr}
222
606
  })`);
223
- // Export extras that main.ts might need
607
+ }
608
+ // ── Dashboard handler export ──────────────────────────────────────────────
609
+ if (config.dashboard) {
610
+ parts.push('');
611
+ if (isSocketIo) {
612
+ parts.push(`// Dashboard must be created after app is constructed in main.ts`);
613
+ parts.push(`export { createDashboard }`);
614
+ }
615
+ else {
616
+ parts.push(`export const dashboardHandler = createDashboard(app, {
617
+ secret: process.env.DASHBOARD_SECRET,
618
+ })`);
619
+ }
620
+ }
621
+ // ── Export extras that main.ts might need ─────────────────────────────────
224
622
  if (config.storage) {
225
623
  parts.push('');
226
624
  parts.push('export { storage }');
227
625
  }
228
- if (config.cache === 'upstash') {
626
+ if (config.cache) {
229
627
  parts.push('');
230
628
  parts.push('export { cache }');
231
629
  }
@@ -233,9 +631,15 @@ ${optionsStr}
233
631
  parts.push('');
234
632
  parts.push('export { passwordHasher }');
235
633
  }
236
- if (config.auth === 'oauth+otp' || config.auth === 'all') {
634
+ if ((config.auth === 'oauth+otp' || config.auth === 'all') && config.oauthProviders.length > 0) {
635
+ const oauthExports = config.oauthProviders.map((p) => `${p}OAuth`).join(', ');
636
+ parts.push('');
637
+ parts.push(`export { ${oauthExports} }`);
638
+ }
639
+ if (config.push === 'both') {
237
640
  parts.push('');
238
- parts.push('export { googleOAuth }');
641
+ parts.push(`// APNs push available for fan-out wrapper`);
642
+ parts.push('export { apnsPush }');
239
643
  }
240
644
  parts.push('');
241
645
  return parts.join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../../src/templates/infrastructure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"infrastructure.js","sourceRoot":"","sources":["../../src/templates/infrastructure.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main-express.d.ts","sourceRoot":"","sources":["../../src/templates/main-express.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAkDjE"}
1
+ {"version":3,"file":"main-express.d.ts","sourceRoot":"","sources":["../../src/templates/main-express.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAsFjE"}