@odvi/create-dtt-framework 0.1.11 → 0.1.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,eAAO,MAAM,aAAa,SAsPtB,CAAC"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,eAAO,MAAM,aAAa,SAqRtB,CAAC"}
@@ -114,30 +114,60 @@ export const updateCommand = new Command('update')
114
114
  console.log();
115
115
  }
116
116
  // Handle Modified Files
117
+ let overwriteStrategy = 'backup'; // default to backup (create .update files)
117
118
  if (modifiedFiles.length > 0) {
118
- console.log(chalk.yellow.bold('Modified files (conflicts):'));
119
+ console.log(chalk.yellow.bold('Modified files detected:'));
119
120
  console.log(chalk.yellow(' These files differ from the latest framework version.'));
120
- console.log(chalk.yellow(' Updating them might overwrite your custom changes.'));
121
121
  modifiedFiles.slice(0, 5).forEach(f => console.log(chalk.yellow(` ~ ${f}`)));
122
122
  if (modifiedFiles.length > 5)
123
123
  console.log(chalk.gray(` ...and ${modifiedFiles.length - 5} more`));
124
124
  console.log();
125
- }
126
- let shouldProceed = options?.yes || options?.force;
127
- if (!shouldProceed) {
128
- const answers = await inquirer.prompt([
129
- {
130
- type: 'confirm',
131
- name: 'proceed',
132
- message: 'Do you want to proceed with the update?',
133
- default: true,
125
+ if (!options?.force && !options?.yes) {
126
+ const strategyAnswer = await inquirer.prompt([
127
+ {
128
+ type: 'list',
129
+ name: 'strategy',
130
+ message: 'How would you like to handle modified files?',
131
+ choices: [
132
+ { name: 'Keep my files & create .update backups (Safe)', value: 'backup' },
133
+ { name: 'Overwrite all with new version (Destructive)', value: 'overwrite' },
134
+ { name: 'Cancel update', value: 'cancel' }
135
+ ],
136
+ default: 'backup'
137
+ }
138
+ ]);
139
+ if (strategyAnswer.strategy === 'cancel') {
140
+ console.log(chalk.yellow('Update cancelled.'));
141
+ process.exit(0);
134
142
  }
135
- ]);
136
- shouldProceed = answers.proceed;
143
+ overwriteStrategy = strategyAnswer.strategy;
144
+ }
145
+ else if (options?.force) {
146
+ overwriteStrategy = 'overwrite';
147
+ }
137
148
  }
149
+ let shouldProceed = options?.yes || options?.force || overwriteStrategy !== 'cancel';
138
150
  if (!shouldProceed) {
139
- console.log(chalk.yellow('Update cancelled.'));
140
- process.exit(0);
151
+ // ... (existing prompt code removed or simplified)
152
+ // actually if we already asked strategy, we basically implicitly proceeded.
153
+ // But let's keep the confirm logic for new files if no conflicts.
154
+ }
155
+ else {
156
+ // If we didn't ask strategy (e.g. no modified files), maybe confirm proceeding?
157
+ if (modifiedFiles.length === 0 && !options?.yes && !options?.force) {
158
+ const answers = await inquirer.prompt([
159
+ {
160
+ type: 'confirm',
161
+ name: 'proceed',
162
+ message: 'Do you want to proceed with the update?',
163
+ default: true,
164
+ }
165
+ ]);
166
+ if (!answers.proceed) {
167
+ console.log(chalk.yellow('Update cancelled.'));
168
+ process.exit(0);
169
+ }
170
+ }
141
171
  }
142
172
  const updateSpinner = ora('Updating files...').start();
143
173
  // Copy new files
@@ -150,7 +180,7 @@ export const updateCommand = new Command('update')
150
180
  let updatedCount = 0;
151
181
  let skippedCount = 0;
152
182
  if (modifiedFiles.length > 0) {
153
- if (options?.force) {
183
+ if (overwriteStrategy === 'overwrite') {
154
184
  // Overwrite everything
155
185
  for (const file of modifiedFiles) {
156
186
  const source = path.join(templatePath, file);
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odvi/create-dtt-framework",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "description": "CLI tool to scaffold new projects with DTT Framework",
5
5
  "type": "module",
6
6
  "bin": {
@@ -104,6 +104,19 @@ AWS_ACCESS_SECRET_KEY=wJalr...
104
104
  # AWS Region where your S3 buckets are located (e.g., us-east-1)
105
105
  AWS_REGION=us-east-1
106
106
 
107
+
108
+ # ========================================
109
+ # Synology (Optional)
110
+ # ========================================
111
+ # Synology DSM Host URL
112
+ SYNOLOGY_HOST=http://synology:5000
113
+
114
+ # Synology Username
115
+ SYNOLOGY_USERNAME=admin
116
+
117
+ # Synology Password
118
+ SYNOLOGY_PASSWORD=secret
119
+
107
120
  # ========================================
108
121
  # NextBank API (Placeholder)
109
122
  # ========================================
@@ -110,6 +110,19 @@ AWS_ACCESS_SECRET_KEY=wJalr...
110
110
  # AWS Region (e.g., us-east-1, ap-southeast-1)
111
111
  AWS_REGION=us-east-1
112
112
 
113
+ # ============================================
114
+ # Synology (Optional)
115
+ # ============================================
116
+
117
+ # Synology DSM Host URL
118
+ SYNOLOGY_HOST=http://synology:5000
119
+
120
+ # Synology Username
121
+ SYNOLOGY_USERNAME=admin
122
+
123
+ # Synology Password
124
+ SYNOLOGY_PASSWORD=secret
125
+
113
126
  # ============================================
114
127
  # NextBank (Placeholder - Optional)
115
128
  # ============================================
@@ -470,6 +483,37 @@ AWS_REGION=us-east-1
470
483
 
471
484
  ---
472
485
 
486
+ ### Synology Variables (Optional)
487
+
488
+ #### SYNOLOGY_HOST
489
+
490
+ **Purpose:** URL of your Synology DSM
491
+
492
+ **Example:**
493
+ ```bash
494
+ SYNOLOGY_HOST=http://192.168.1.100:5000
495
+ ```
496
+
497
+ #### SYNOLOGY_USERNAME
498
+
499
+ **Purpose:** Username for Synology authentication
500
+
501
+ **Example:**
502
+ ```bash
503
+ SYNOLOGY_USERNAME=admin
504
+ ```
505
+
506
+ #### SYNOLOGY_PASSWORD
507
+
508
+ **Purpose:** Password for Synology authentication
509
+
510
+ **Example:**
511
+ ```bash
512
+ SYNOLOGY_PASSWORD=secret
513
+ ```
514
+
515
+ ---
516
+
473
517
  ### NextBank Variables (Placeholder)
474
518
 
475
519
  **Note:** NextBank is a placeholder integration. These variables are optional and not currently used.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odvi/dtt-framework",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "bin": {
@@ -80,6 +80,7 @@
80
80
  "gray-matter": "^4.0.3",
81
81
  "highlight.js": "^11.11.1",
82
82
  "hono": "^4.11.3",
83
+ "https-proxy-agent": "^7.0.6",
83
84
  "lucide-react": "^0.562.0",
84
85
  "next": "^15.2.3",
85
86
  "postgres": "^3.4.4",
@@ -35,6 +35,11 @@ const envSchema = z.object({
35
35
  AWS_ACCESS_KEY_ID: z.string().optional(),
36
36
  AWS_ACCESS_SECRET_KEY: z.string().optional(),
37
37
  AWS_REGION: z.string().optional(),
38
+
39
+ // Synology (optional)
40
+ SYNOLOGY_HOST: z.string().url().optional(),
41
+ SYNOLOGY_USERNAME: z.string().optional(),
42
+ SYNOLOGY_PASSWORD: z.string().optional(),
38
43
  })
39
44
 
40
45
  export const env = envSchema.parse(process.env)
@@ -52,6 +52,14 @@ export const SERVICES = [
52
52
  { name: 'Ping API', endpoint: '/nextbank/ping' },
53
53
  ],
54
54
  },
55
+ {
56
+ name: 'Synology',
57
+ icon: 'server',
58
+ checks: [
59
+ { name: 'Ping Host', endpoint: '/synology/ping' },
60
+ { name: 'Authentication', endpoint: '/synology/auth' },
61
+ ],
62
+ },
55
63
  {
56
64
  name: 'AWS S3',
57
65
  icon: 'cloud',
@@ -0,0 +1,166 @@
1
+ import { env } from '@/config/env'
2
+ import https from 'https'
3
+
4
+ class SynologyClient {
5
+ private host: string
6
+ private username: string
7
+ private password: string
8
+ private sessionID: string | null = null
9
+
10
+ constructor() {
11
+ this.host = env.SYNOLOGY_HOST ?? ''
12
+ this.username = env.SYNOLOGY_USERNAME ?? ''
13
+ this.password = env.SYNOLOGY_PASSWORD ?? ''
14
+ }
15
+
16
+ // Helper to perform fetch with custom agent for self-signed certs
17
+ private async fetchWithAgent(url: string, options: RequestInit = {}) {
18
+ // For local development with self-signed certs, especially with Next.js/Node fetch,
19
+ // explicitly ignoring certificate errors at the process level for this specific request
20
+ // context is sometimes the most reliable way if agents aren't being picked up.
21
+
22
+ // Create an agent that ignores self-signed certificate errors
23
+ const agent = new https.Agent({
24
+ rejectUnauthorized: false
25
+ });
26
+
27
+ // Note: In Next.js App Router (server components/actions), fetch is patched.
28
+ // Standard https.Agent might not work as expected with the patched fetch.
29
+ // However, for API routes (Pages router) or Route Handlers (App router), it runs in Node environment.
30
+ // If the error persists, it's often because the fetch implementation doesn't support the 'agent' option directly
31
+ // or is using Undici which needs a Dispatcher.
32
+
33
+ // Let's try a more robust approach:
34
+ // 1. Pass 'agent' for node-fetch compatibility
35
+ // 2. Pass 'dispatcher' for Undici compatibility (Node 18+ native fetch)
36
+ // 3. Set 'cache: no-store' to ensure we aren't hitting cached responses
37
+
38
+ // @ts-ignore
39
+ const fetchOptions: any = {
40
+ ...options,
41
+ cache: 'no-store',
42
+ // 'agent' is for node-fetch / older polyfills
43
+ agent: agent,
44
+ };
45
+
46
+ // Attempt to handle Undici (Node 18+ native fetch) which Next.js uses
47
+ // We can't easily import 'Agent' from undici without adding it as dependency,
48
+ // but we can try to rely on the fact that sometimes just the node-fetch 'agent' isn't enough.
49
+
50
+ try {
51
+ return await fetch(url, fetchOptions);
52
+ } catch (err: any) {
53
+ // If fetch fails with a certificate error, it might be because 'agent' was ignored.
54
+ // As a fallback for development environments, we can temporarily disable TLS check
55
+ // WARNING: This is dangerous in production, but acceptable for "Synology local IP" scenarios
56
+ // if strictly scoped or if the user explicitly configured it.
57
+
58
+ if (err.message?.includes('certificate') || err.cause?.message?.includes('certificate') || err.cause?.code === 'DEPTH_ZERO_SELF_SIGNED_CERT') {
59
+ console.warn('[Synology] Certificate error detected. Retrying with permissive fetch...');
60
+
61
+ // This is a hacky workaround for environments where Agent isn't working for fetch
62
+ const originalReject = process.env.NODE_TLS_REJECT_UNAUTHORIZED;
63
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
64
+
65
+ try {
66
+ const retryResponse = await fetch(url, { ...options, cache: 'no-store' });
67
+ return retryResponse;
68
+ } finally {
69
+ // Restore original setting immediately
70
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = originalReject;
71
+ }
72
+ }
73
+ throw err;
74
+ }
75
+ }
76
+
77
+ async ping(): Promise<{ status: string; timestamp: string; version?: string; sid?: string }> {
78
+ if (!this.host) {
79
+ throw new Error('Synology host not configured')
80
+ }
81
+
82
+ const params = new URLSearchParams({
83
+ api: 'SYNO.API.Info',
84
+ version: '1',
85
+ method: 'query',
86
+ query: 'SYNO.API.Auth'
87
+ })
88
+
89
+ const infoUrl = `${this.host}/webapi/query.cgi?${params.toString()}`
90
+ console.log(`[Synology] Pinging ${infoUrl}`)
91
+
92
+ try {
93
+ const response = await this.fetchWithAgent(infoUrl)
94
+
95
+ if (!response.ok) {
96
+ throw new Error(`Synology API error: ${response.status} ${response.statusText}`)
97
+ }
98
+
99
+ const data = await response.json()
100
+
101
+ if (!data.success) {
102
+ throw new Error(`Synology API returned error: ${JSON.stringify(data)}`)
103
+ }
104
+
105
+ let sid: string | undefined
106
+
107
+ // If we have credentials, try to login to verify them
108
+ if (this.username && this.password) {
109
+ sid = await this.login()
110
+ }
111
+
112
+ return {
113
+ status: 'healthy',
114
+ timestamp: new Date().toISOString(),
115
+ version: data.data?.['SYNO.API.Auth']?.maxVersion?.toString(),
116
+ sid
117
+ }
118
+ } catch (error) {
119
+ console.error('[Synology] Ping failed:', error)
120
+ throw error
121
+ }
122
+ }
123
+
124
+ private async login(): Promise<string> {
125
+ const loginUrl = `${this.host}/webapi/auth.cgi`
126
+
127
+ const params = new URLSearchParams({
128
+ api: 'SYNO.API.Auth',
129
+ version: '6',
130
+ method: 'login',
131
+ account: this.username,
132
+ passwd: this.password,
133
+ session: 'FileStation',
134
+ format: 'sid'
135
+ })
136
+
137
+ console.log(`[Synology] Logging in...`)
138
+
139
+ try {
140
+ const response = await this.fetchWithAgent(`${loginUrl}?${params.toString()}`)
141
+
142
+ if (!response.ok) {
143
+ throw new Error(`Synology Auth error: ${response.status} ${response.statusText}`)
144
+ }
145
+
146
+ const data = await response.json()
147
+
148
+ if (!data.success) {
149
+ throw new Error(`Synology Auth failed: ${JSON.stringify(data)}`)
150
+ }
151
+
152
+ if (data.data?.sid) {
153
+ this.sessionID = data.data.sid
154
+ return this.sessionID!
155
+ }
156
+
157
+ throw new Error('No SID in response')
158
+ } catch (error) {
159
+ console.error('[Synology] Login error:', error)
160
+ this.sessionID = null
161
+ throw error
162
+ }
163
+ }
164
+ }
165
+
166
+ export const synologyClient = new SynologyClient()
@@ -5,6 +5,7 @@ import { storageHealthRoutes } from './storage'
5
5
  import { edgeFunctionsHealthRoutes } from './edge-functions'
6
6
  import { snowflakeHealthRoutes } from './snowflake'
7
7
  import { nextbankHealthRoutes } from './nextbank'
8
+ import { synologyHealthRoutes } from './synology'
8
9
  import { frameworkHealthRoutes } from './framework'
9
10
  import { awsS3HealthRoutes } from './aws-s3'
10
11
 
@@ -16,6 +17,7 @@ healthRoutes.route('/storage', storageHealthRoutes)
16
17
  healthRoutes.route('/edge', edgeFunctionsHealthRoutes)
17
18
  healthRoutes.route('/snowflake', snowflakeHealthRoutes)
18
19
  healthRoutes.route('/nextbank', nextbankHealthRoutes)
20
+ healthRoutes.route('/synology', synologyHealthRoutes)
19
21
  healthRoutes.route('/framework', frameworkHealthRoutes)
20
22
  healthRoutes.route('/aws-s3', awsS3HealthRoutes)
21
23
 
@@ -40,6 +42,8 @@ healthRoutes.get('/all', async (c) => {
40
42
  { name: 'Snowflake Query', url: `${baseUrl}/api/health/snowflake/query` },
41
43
  { name: 'NextBank Ping', url: `${baseUrl}/api/health/nextbank/ping` },
42
44
  { name: 'NextBank Auth', url: `${baseUrl}/api/health/nextbank/auth` },
45
+ { name: 'Synology Ping', url: `${baseUrl}/api/health/synology/ping` },
46
+ { name: 'Synology Auth', url: `${baseUrl}/api/health/synology/auth` },
43
47
  { name: 'AWS S3 Connect', url: `${baseUrl}/api/health/aws-s3/connect` },
44
48
  ]
45
49
 
@@ -0,0 +1,69 @@
1
+ import { Hono } from 'hono'
2
+ import { synologyClient } from '@/lib/synology/client'
3
+ import { env } from '@/config/env'
4
+
5
+ export const synologyHealthRoutes = new Hono()
6
+
7
+ synologyHealthRoutes.get('/ping', async (c) => {
8
+ const start = performance.now()
9
+
10
+ if (!env.SYNOLOGY_HOST) {
11
+ return c.json({
12
+ status: 'unconfigured',
13
+ responseTimeMs: Math.round(performance.now() - start),
14
+ message: 'Synology Host not configured',
15
+ })
16
+ }
17
+
18
+ try {
19
+ const result = await synologyClient.ping()
20
+ return c.json({
21
+ status: 'healthy',
22
+ responseTimeMs: Math.round(performance.now() - start),
23
+ message: 'Successfully connected to Synology',
24
+ data: result,
25
+ })
26
+ } catch (error) {
27
+ return c.json(
28
+ {
29
+ status: 'error',
30
+ responseTimeMs: Math.round(performance.now() - start),
31
+ error: error instanceof Error ? error.message : 'Ping failed',
32
+ },
33
+ 500
34
+ )
35
+ }
36
+ })
37
+
38
+ synologyHealthRoutes.get('/auth', async (c) => {
39
+ const start = performance.now()
40
+
41
+ if (!env.SYNOLOGY_HOST || !env.SYNOLOGY_USERNAME || !env.SYNOLOGY_PASSWORD) {
42
+ return c.json({
43
+ status: 'unconfigured',
44
+ responseTimeMs: Math.round(performance.now() - start),
45
+ message: 'Synology credentials not configured',
46
+ })
47
+ }
48
+
49
+ try {
50
+ // The ping method already does a login check if credentials are provided
51
+ const result = await synologyClient.ping()
52
+ return c.json({
53
+ status: 'healthy',
54
+ responseTimeMs: Math.round(performance.now() - start),
55
+ message: 'Successfully authenticated with Synology',
56
+ data: result,
57
+ })
58
+ } catch (error) {
59
+ return c.json(
60
+ {
61
+ status: 'error',
62
+ responseTimeMs: Math.round(performance.now() - start),
63
+ error: error instanceof Error ? error.message : 'Auth failed',
64
+ },
65
+ 500
66
+ )
67
+ }
68
+ })
69
+