@sinch/cli 0.1.27-beta.0 → 0.1.28-beta.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 (133) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +198 -198
  3. package/bin/sinch +2 -2
  4. package/dist/commands/conversations/apps.d.ts +2 -0
  5. package/dist/commands/conversations/apps.d.ts.map +1 -0
  6. package/dist/commands/conversations/apps.js +162 -0
  7. package/dist/commands/conversations/apps.js.map +1 -0
  8. package/dist/commands/conversations/contacts.d.ts +2 -0
  9. package/dist/commands/conversations/contacts.d.ts.map +1 -0
  10. package/dist/commands/conversations/contacts.js +245 -0
  11. package/dist/commands/conversations/contacts.js.map +1 -0
  12. package/dist/commands/conversations/conversation.d.ts +2 -0
  13. package/dist/commands/conversations/conversation.d.ts.map +1 -0
  14. package/dist/commands/conversations/conversation.js +19 -0
  15. package/dist/commands/conversations/conversation.js.map +1 -0
  16. package/dist/commands/conversations/conversations.d.ts +2 -0
  17. package/dist/commands/conversations/conversations.d.ts.map +1 -0
  18. package/dist/commands/conversations/conversations.js +104 -0
  19. package/dist/commands/conversations/conversations.js.map +1 -0
  20. package/dist/commands/conversations/messages.d.ts +2 -0
  21. package/dist/commands/conversations/messages.d.ts.map +1 -0
  22. package/dist/commands/conversations/messages.js +107 -0
  23. package/dist/commands/conversations/messages.js.map +1 -0
  24. package/dist/commands/conversations/send.d.ts +2 -0
  25. package/dist/commands/conversations/send.d.ts.map +1 -0
  26. package/dist/commands/conversations/send.js +185 -0
  27. package/dist/commands/conversations/send.js.map +1 -0
  28. package/dist/commands/conversations/utils.d.ts +4 -0
  29. package/dist/commands/conversations/utils.d.ts.map +1 -0
  30. package/dist/commands/conversations/utils.js +30 -0
  31. package/dist/commands/conversations/utils.js.map +1 -0
  32. package/dist/commands/conversations/webhooks.d.ts +2 -0
  33. package/dist/commands/conversations/webhooks.d.ts.map +1 -0
  34. package/dist/commands/conversations/webhooks.js +238 -0
  35. package/dist/commands/conversations/webhooks.js.map +1 -0
  36. package/dist/commands/delete.d.ts +2 -0
  37. package/dist/commands/delete.d.ts.map +1 -0
  38. package/dist/commands/delete.js +93 -0
  39. package/dist/commands/delete.js.map +1 -0
  40. package/dist/commands/deploy.d.ts +2 -0
  41. package/dist/commands/deploy.d.ts.map +1 -0
  42. package/dist/commands/deploy.js +687 -0
  43. package/dist/commands/deploy.js.map +1 -0
  44. package/dist/commands/dev.d.ts +2 -0
  45. package/dist/commands/dev.d.ts.map +1 -0
  46. package/dist/commands/dev.js +460 -0
  47. package/dist/commands/dev.js.map +1 -0
  48. package/dist/commands/docs.d.ts +2 -0
  49. package/dist/commands/docs.d.ts.map +1 -0
  50. package/dist/commands/docs.js +105 -0
  51. package/dist/commands/docs.js.map +1 -0
  52. package/dist/commands/download.d.ts +2 -0
  53. package/dist/commands/download.d.ts.map +1 -0
  54. package/dist/commands/download.js +207 -0
  55. package/dist/commands/download.js.map +1 -0
  56. package/dist/commands/functions.d.ts +2 -0
  57. package/dist/commands/functions.d.ts.map +1 -0
  58. package/dist/commands/functions.js +25 -0
  59. package/dist/commands/functions.js.map +1 -0
  60. package/dist/commands/init.d.ts +2 -0
  61. package/dist/commands/init.d.ts.map +1 -0
  62. package/dist/commands/init.js +552 -0
  63. package/dist/commands/init.js.map +1 -0
  64. package/dist/commands/list.d.ts +2 -0
  65. package/dist/commands/list.d.ts.map +1 -0
  66. package/dist/commands/list.js +180 -0
  67. package/dist/commands/list.js.map +1 -0
  68. package/dist/commands/logs.d.ts +2 -0
  69. package/dist/commands/logs.d.ts.map +1 -0
  70. package/dist/commands/logs.js +1001 -0
  71. package/dist/commands/logs.js.map +1 -0
  72. package/dist/commands/secrets.d.ts +2 -0
  73. package/dist/commands/secrets.d.ts.map +1 -0
  74. package/dist/commands/secrets.js +197 -0
  75. package/dist/commands/secrets.js.map +1 -0
  76. package/dist/commands/skills.d.ts +4 -0
  77. package/dist/commands/skills.d.ts.map +1 -0
  78. package/dist/commands/skills.js +309 -0
  79. package/dist/commands/skills.js.map +1 -0
  80. package/dist/commands/status.d.ts +2 -0
  81. package/dist/commands/status.d.ts.map +1 -0
  82. package/dist/commands/status.js +145 -0
  83. package/dist/commands/status.js.map +1 -0
  84. package/dist/commands/templates.d.ts +2 -0
  85. package/dist/commands/templates.d.ts.map +1 -0
  86. package/dist/commands/templates.js +168 -0
  87. package/dist/commands/templates.js.map +1 -0
  88. package/dist/commands/voice.d.ts +2 -0
  89. package/dist/commands/voice.d.ts.map +1 -0
  90. package/dist/commands/voice.js +259 -0
  91. package/dist/commands/voice.js.map +1 -0
  92. package/dist/index.d.ts +2 -0
  93. package/dist/index.d.ts.map +1 -0
  94. package/dist/index.js +780 -325
  95. package/dist/index.js.map +1 -0
  96. package/dist/lib/api.d.ts +73 -0
  97. package/dist/lib/api.d.ts.map +1 -0
  98. package/dist/lib/api.js +455 -0
  99. package/dist/lib/api.js.map +1 -0
  100. package/dist/lib/config.d.ts +68 -0
  101. package/dist/lib/config.d.ts.map +1 -0
  102. package/dist/lib/config.js +276 -0
  103. package/dist/lib/config.js.map +1 -0
  104. package/dist/lib/conversation.d.ts +8 -0
  105. package/dist/lib/conversation.d.ts.map +1 -0
  106. package/dist/lib/conversation.js +179 -0
  107. package/dist/lib/conversation.js.map +1 -0
  108. package/dist/lib/credentials.d.ts +43 -0
  109. package/dist/lib/credentials.d.ts.map +1 -0
  110. package/dist/lib/credentials.js +365 -0
  111. package/dist/lib/credentials.js.map +1 -0
  112. package/dist/lib/docs-utils.d.ts +13 -0
  113. package/dist/lib/docs-utils.d.ts.map +1 -0
  114. package/dist/lib/docs-utils.js +115 -0
  115. package/dist/lib/docs-utils.js.map +1 -0
  116. package/dist/lib/update-check.d.ts +5 -0
  117. package/dist/lib/update-check.d.ts.map +1 -0
  118. package/dist/lib/update-check.js +114 -0
  119. package/dist/lib/update-check.js.map +1 -0
  120. package/dist/lib/voice.d.ts +3 -0
  121. package/dist/lib/voice.d.ts.map +1 -0
  122. package/dist/lib/voice.js +49 -0
  123. package/dist/lib/voice.js.map +1 -0
  124. package/dist/package.json +71 -0
  125. package/dist/utils/logger.d.ts +28 -0
  126. package/dist/utils/logger.d.ts.map +1 -0
  127. package/dist/utils/logger.js +138 -0
  128. package/dist/utils/logger.js.map +1 -0
  129. package/dist/utils/spinner.d.ts +17 -0
  130. package/dist/utils/spinner.d.ts.map +1 -0
  131. package/dist/utils/spinner.js +75 -0
  132. package/dist/utils/spinner.js.map +1 -0
  133. package/package.json +71 -71
@@ -0,0 +1,552 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const fs_extra_1 = __importDefault(require("fs-extra"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const inquirer_1 = __importDefault(require("inquirer"));
10
+ const commander_1 = require("commander");
11
+ const config_1 = require("../lib/config");
12
+ const logger_1 = require("../utils/logger");
13
+ const spinner_1 = require("../utils/spinner");
14
+ const api_1 = require("../lib/api");
15
+ const child_process_1 = require("child_process");
16
+ const adm_zip_1 = __importDefault(require("adm-zip"));
17
+ const keytar_1 = __importDefault(require("keytar"));
18
+ const init = new commander_1.Command('init');
19
+ init
20
+ .description('Initialize a new Sinch Functions project')
21
+ .argument('[template]', 'Template to use (simple-ivr, customer-lookup, smart-routing)')
22
+ .option('--name <name>', 'Function name (default: template name)')
23
+ .option('--runtime <runtime>', 'Runtime to use (node, csharp)')
24
+ .option('--skip-install', 'Skip npm install for Node.js projects')
25
+ .option('--non-interactive', 'Use default values without prompting')
26
+ .action(async (templateArg, options) => {
27
+ try {
28
+ await config_1.config.load();
29
+ const currentDir = process.cwd();
30
+ const api = new api_1.SinchAPI(config_1.config.getApiConfig());
31
+ let selectedRuntime = options.runtime;
32
+ if (!selectedRuntime) {
33
+ if (options.nonInteractive) {
34
+ selectedRuntime = 'node';
35
+ }
36
+ else {
37
+ const answers = await inquirer_1.default.prompt([
38
+ {
39
+ type: 'list',
40
+ name: 'runtime',
41
+ message: 'Choose a runtime:',
42
+ choices: [
43
+ { name: 'Node.js', value: 'node' },
44
+ { name: 'C# (.NET)', value: 'csharp' }
45
+ ],
46
+ default: 'node'
47
+ }
48
+ ]);
49
+ selectedRuntime = answers.runtime;
50
+ }
51
+ }
52
+ spinner_1.spinner.start(`Fetching available templates for ${selectedRuntime}...`);
53
+ const templatesResponse = await api.listRuntimeTemplates(selectedRuntime);
54
+ spinner_1.spinner.stop();
55
+ if (!templatesResponse.templates || templatesResponse.templates.length === 0) {
56
+ throw new Error(`No templates available for runtime '${selectedRuntime}'`);
57
+ }
58
+ let template = templateArg;
59
+ if (!template) {
60
+ if (options.nonInteractive) {
61
+ const availableTemplates = templatesResponse.templates.filter(t => t.name && t.name.trim());
62
+ if (availableTemplates.length > 0) {
63
+ template = availableTemplates[0]?.name || '';
64
+ logger_1.logger.info(`Using default template: ${template} (non-interactive mode)`);
65
+ }
66
+ else {
67
+ throw new Error('No templates available');
68
+ }
69
+ }
70
+ else {
71
+ const templateChoices = templatesResponse.templates
72
+ .filter(t => t.name && t.name.trim())
73
+ .map(t => ({
74
+ name: `${t.name} - ${(t.description || 'No description available').substring(0, 100)}`,
75
+ value: t.name
76
+ }));
77
+ const answers = await inquirer_1.default.prompt([
78
+ {
79
+ type: 'list',
80
+ name: 'selectedTemplate',
81
+ message: 'Choose a template:',
82
+ choices: templateChoices,
83
+ pageSize: 10
84
+ }
85
+ ]);
86
+ template = answers.selectedTemplate;
87
+ }
88
+ }
89
+ let functionName = options.name;
90
+ if (!functionName) {
91
+ if (options.nonInteractive) {
92
+ functionName = template;
93
+ }
94
+ else {
95
+ const answers = await inquirer_1.default.prompt([
96
+ {
97
+ type: 'input',
98
+ name: 'name',
99
+ message: 'Function name:',
100
+ default: template,
101
+ validate: (input) => {
102
+ if (!input || input.trim().length === 0) {
103
+ return 'Function name is required';
104
+ }
105
+ if (!/^[a-z][a-z0-9-]*$/.test(input.trim())) {
106
+ return 'Function name must be lowercase, start with a letter, and contain only letters, numbers, and hyphens';
107
+ }
108
+ return true;
109
+ }
110
+ }
111
+ ]);
112
+ functionName = answers.name.trim();
113
+ }
114
+ }
115
+ const functionDir = path_1.default.join(currentDir, functionName);
116
+ if (await fs_extra_1.default.pathExists(functionDir)) {
117
+ let overwrite = false;
118
+ if (options.nonInteractive) {
119
+ overwrite = true;
120
+ logger_1.logger.info(`Directory '${functionName}' already exists. Overwriting (non-interactive mode)...`);
121
+ }
122
+ else {
123
+ const answers = await inquirer_1.default.prompt([
124
+ {
125
+ type: 'confirm',
126
+ name: 'overwrite',
127
+ message: `Directory '${functionName}' already exists. Overwrite?`,
128
+ default: false
129
+ }
130
+ ]);
131
+ overwrite = answers.overwrite;
132
+ }
133
+ if (!overwrite) {
134
+ logger_1.logger.info('Initialization cancelled');
135
+ return;
136
+ }
137
+ await fs_extra_1.default.remove(functionDir);
138
+ }
139
+ await fs_extra_1.default.ensureDir(functionDir);
140
+ const selectedTemplateInfo = templatesResponse.templates.find(t => t.name === template);
141
+ if (!selectedTemplateInfo) {
142
+ const availableTemplates = templatesResponse.templates.map(t => t.name).join(', ');
143
+ throw new Error(`Template '${template}' not found. Available templates: ${availableTemplates}`);
144
+ }
145
+ const supportedRuntimes = ['node', 'csharp'];
146
+ if (!supportedRuntimes.includes(selectedRuntime)) {
147
+ throw new Error(`Runtime '${selectedRuntime}' not supported. Supported runtimes: ${supportedRuntimes.join(', ')}`);
148
+ }
149
+ spinner_1.spinner.start(`🚀 Initializing ${functionName} with ${template} template (${selectedRuntime})...`);
150
+ const templateBuffer = await api.downloadTemplate(selectedRuntime, template);
151
+ const zip = new adm_zip_1.default(templateBuffer);
152
+ zip.extractAllTo(functionDir, true);
153
+ spinner_1.spinner.succeed(`📦 Template extracted`);
154
+ let templateVariables = {};
155
+ let templateSecretKeys = [];
156
+ const templateJsonPath = path_1.default.join(functionDir, 'template.json');
157
+ if (await fs_extra_1.default.pathExists(templateJsonPath)) {
158
+ const templateJson = await fs_extra_1.default.readJson(templateJsonPath);
159
+ if (templateJson.variables && Object.keys(templateJson.variables).length > 0) {
160
+ if (options.nonInteractive) {
161
+ logger_1.logger.info('📝 Using default values for template variables (non-interactive mode):');
162
+ for (const [varName, varConfig] of Object.entries(templateJson.variables)) {
163
+ let defaultValue;
164
+ if (typeof varConfig === 'string') {
165
+ defaultValue = varConfig;
166
+ }
167
+ else {
168
+ defaultValue = varConfig.default || '';
169
+ }
170
+ templateVariables[varName] = defaultValue;
171
+ logger_1.logger.info(` ${varName}: ${defaultValue}`);
172
+ }
173
+ }
174
+ else {
175
+ logger_1.logger.newline();
176
+ logger_1.logger.info('📝 Configure template variables:');
177
+ for (const [varName, varConfig] of Object.entries(templateJson.variables)) {
178
+ let promptConfig;
179
+ if (typeof varConfig === 'string') {
180
+ promptConfig = {
181
+ type: 'input',
182
+ name: varName,
183
+ message: `${varName.replace(/_/g, ' ').toLowerCase()}:`,
184
+ default: varConfig
185
+ };
186
+ }
187
+ else {
188
+ promptConfig = {
189
+ type: varConfig.type === 'number' ? 'number' : 'input',
190
+ name: varName,
191
+ message: `${varConfig.description || varName.replace(/_/g, ' ').toLowerCase()}:`,
192
+ default: varConfig.default
193
+ };
194
+ if (varConfig.type === 'number') {
195
+ promptConfig.validate = (input) => {
196
+ if (varConfig.min !== undefined && input < varConfig.min) {
197
+ return `Value must be at least ${varConfig.min}`;
198
+ }
199
+ if (varConfig.max !== undefined && input > varConfig.max) {
200
+ return `Value must be at most ${varConfig.max}`;
201
+ }
202
+ return true;
203
+ };
204
+ }
205
+ }
206
+ const answers = await inquirer_1.default.prompt([promptConfig]);
207
+ templateVariables[varName] = answers[varName];
208
+ }
209
+ }
210
+ }
211
+ const SERVICE_NAME = 'sinch-functions-cli';
212
+ if (templateJson.secrets && Object.keys(templateJson.secrets).length > 0) {
213
+ templateSecretKeys = Object.keys(templateJson.secrets);
214
+ if (options.nonInteractive) {
215
+ logger_1.logger.info('📝 Template secrets detected (non-interactive mode):');
216
+ for (const secretName of Object.keys(templateJson.secrets)) {
217
+ logger_1.logger.info(` ${secretName}: [will need to be set manually]`);
218
+ }
219
+ }
220
+ else {
221
+ logger_1.logger.newline();
222
+ logger_1.logger.info('🔐 Configure template secrets (stored securely in OS keychain):');
223
+ for (const [secretName, secretConfig] of Object.entries(templateJson.secrets)) {
224
+ const description = secretConfig.description || secretName.replace(/_/g, ' ').toLowerCase();
225
+ const required = secretConfig.required !== false;
226
+ const promptConfig = {
227
+ type: 'password',
228
+ name: secretName,
229
+ message: `${description}:`,
230
+ validate: (input) => {
231
+ if (required && (!input || input.trim() === '')) {
232
+ return 'This secret is required';
233
+ }
234
+ return true;
235
+ }
236
+ };
237
+ const answers = await inquirer_1.default.prompt([promptConfig]);
238
+ const secretValue = answers[secretName];
239
+ if (secretValue && secretValue.trim() !== '') {
240
+ try {
241
+ const keychainKey = `${functionName}-${secretName}`;
242
+ await keytar_1.default.setPassword(SERVICE_NAME, keychainKey, secretValue);
243
+ logger_1.logger.info(` ✅ ${secretName} stored securely in keychain`);
244
+ }
245
+ catch (error) {
246
+ logger_1.logger.warn(` ⚠️ Could not store ${secretName} in keychain: ${error.message}`);
247
+ logger_1.logger.info(` 💡 You can add it later with: sinch secrets add ${secretName} <value>`);
248
+ }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ await fs_extra_1.default.remove(templateJsonPath);
254
+ }
255
+ spinner_1.spinner.start('🔧 Finalizing function configuration...');
256
+ const sinchJsonPath = path_1.default.join(functionDir, 'sinch.json');
257
+ let sinchConfig;
258
+ if (await fs_extra_1.default.pathExists(sinchJsonPath)) {
259
+ sinchConfig = await fs_extra_1.default.readJson(sinchJsonPath);
260
+ sinchConfig.name = functionName;
261
+ sinchConfig.description = `Sinch Functions function: ${functionName}`;
262
+ sinchConfig.functionId = null;
263
+ delete sinchConfig.projectId;
264
+ delete sinchConfig.voiceAppId;
265
+ if (sinchConfig.variables) {
266
+ for (const [key, value] of Object.entries(sinchConfig.variables)) {
267
+ if (typeof value === 'string') {
268
+ if (value === 'your-project-id' || value === '{{PROJECT_ID}}') {
269
+ sinchConfig.variables[key] = config_1.config.get('projectId');
270
+ }
271
+ else if (value === 'your-application-key' || value === '{{SINCH_APPLICATION_KEY}}') {
272
+ sinchConfig.variables[key] = config_1.config.get('defaultApplicationKey');
273
+ }
274
+ }
275
+ }
276
+ }
277
+ sinchConfig.created = new Date().toISOString();
278
+ sinchConfig.variables = {};
279
+ if (sinchConfig.secrets) {
280
+ delete sinchConfig.secrets;
281
+ }
282
+ }
283
+ else {
284
+ sinchConfig = {
285
+ name: functionName,
286
+ functionId: null,
287
+ runtime: selectedRuntime,
288
+ description: `Sinch Functions function: ${functionName}`,
289
+ created: new Date().toISOString(),
290
+ variables: {},
291
+ custom: {}
292
+ };
293
+ }
294
+ await fs_extra_1.default.writeJson(sinchJsonPath, sinchConfig, { spaces: 2 });
295
+ if (selectedRuntime === 'node') {
296
+ const packageJsonPath = path_1.default.join(functionDir, 'package.json');
297
+ if (await fs_extra_1.default.pathExists(packageJsonPath)) {
298
+ const packageJson = await fs_extra_1.default.readJson(packageJsonPath);
299
+ packageJson.name = functionName;
300
+ packageJson.description = sinchConfig.description;
301
+ await fs_extra_1.default.writeJson(packageJsonPath, packageJson, { spaces: 2 });
302
+ }
303
+ const envPath = path_1.default.join(functionDir, '.env');
304
+ let envContent = '# Sinch Functions Environment Variables\n';
305
+ envContent += '# Generated by sinch functions init\n\n';
306
+ envContent += '# Template Variables\n';
307
+ Object.keys(templateVariables).forEach(key => {
308
+ envContent += `${key}=${templateVariables[key]}\n`;
309
+ });
310
+ const projectId = config_1.config.get('projectId');
311
+ const functionId = config_1.config.get('functionId');
312
+ const appKey = config_1.config.get('defaultApplicationKey');
313
+ const apiKey = config_1.config.get('keyId');
314
+ envContent += '\n# Sinch Configuration\n';
315
+ envContent += `PROJECT_ID=${projectId || ''}\n`;
316
+ envContent += `FUNCTION_ID=${functionId || ''}\n`;
317
+ envContent += `PROJECT_ID_API_KEY=${apiKey || ''}\n`;
318
+ envContent += `VOICE_APPLICATION_KEY=${appKey || ''}\n`;
319
+ envContent += `PROTECT_VOICE_CALLBACKS=deploy\n`;
320
+ envContent += '\n# Secrets (stored in OS keychain - use "sinch auth login" to configure)\n';
321
+ envContent += 'PROJECT_ID_API_SECRET=\n';
322
+ envContent += 'VOICE_APPLICATION_SECRET=\n';
323
+ if (templateSecretKeys.length > 0) {
324
+ envContent += '\n# Template Secrets (stored in OS keychain - use "sinch secrets add <KEY> <VALUE>")\n';
325
+ templateSecretKeys.forEach(key => {
326
+ envContent += `${key}=\n`;
327
+ });
328
+ }
329
+ envContent += '\n# Environment\n';
330
+ envContent += 'NODE_ENV=development\n';
331
+ envContent += 'PORT=3000\n';
332
+ envContent += 'SINCH_TUNNEL=false\n';
333
+ await fs_extra_1.default.writeFile(envPath, envContent);
334
+ logger_1.logger.info('');
335
+ logger_1.logger.info('🔐 Secrets Management for Node.js:');
336
+ try {
337
+ const credentials = await config_1.config.getCredentials();
338
+ if (credentials && credentials.keySecret) {
339
+ logger_1.logger.info(' ✅ Sinch credentials found in secure storage');
340
+ logger_1.logger.info(' ✅ F5 debugging will automatically load secrets from OS keychain');
341
+ logger_1.logger.info('');
342
+ logger_1.logger.info(' 💡 To add custom secrets, use:');
343
+ logger_1.logger.info(` ${chalk_1.default.cyan('sinch functions secrets add <KEY> <VALUE>')}`);
344
+ }
345
+ else {
346
+ logger_1.logger.info(' ⚠️ No Sinch credentials found in secure storage');
347
+ logger_1.logger.info('');
348
+ logger_1.logger.info(' To set up authentication:');
349
+ logger_1.logger.info(` ${chalk_1.default.cyan('sinch auth login')}`);
350
+ logger_1.logger.info('');
351
+ logger_1.logger.info(' To add custom secrets:');
352
+ logger_1.logger.info(` ${chalk_1.default.cyan('sinch functions secrets add <KEY> <VALUE>')}`);
353
+ }
354
+ }
355
+ catch (error) {
356
+ logger_1.logger.info(' ℹ️ Set up authentication with:');
357
+ logger_1.logger.info(` ${chalk_1.default.cyan('sinch auth login')}`);
358
+ }
359
+ logger_1.logger.info('');
360
+ logger_1.logger.info(' 📝 Note: Secrets are stored securely in your OS keychain');
361
+ logger_1.logger.info(' 📝 Note: F5 debugging requires keytar (npm install keytar)');
362
+ }
363
+ if (selectedRuntime === 'csharp') {
364
+ const appSettingsPath = path_1.default.join(functionDir, 'appsettings.json');
365
+ let appSettings;
366
+ if (await fs_extra_1.default.pathExists(appSettingsPath)) {
367
+ appSettings = await fs_extra_1.default.readJson(appSettingsPath);
368
+ }
369
+ else {
370
+ appSettings = {
371
+ "Logging": {
372
+ "LogLevel": {
373
+ "Default": "Information",
374
+ "Microsoft.AspNetCore": "Warning"
375
+ }
376
+ },
377
+ "AllowedHosts": "*"
378
+ };
379
+ }
380
+ if (!appSettings.Logging) {
381
+ appSettings.Logging = {
382
+ "LogLevel": {
383
+ "Default": "Information",
384
+ "Microsoft.AspNetCore": "Warning"
385
+ }
386
+ };
387
+ }
388
+ if (!appSettings.AllowedHosts) {
389
+ appSettings.AllowedHosts = "*";
390
+ }
391
+ Object.keys(templateVariables).forEach(key => {
392
+ appSettings[key] = templateVariables[key];
393
+ });
394
+ const projectId = config_1.config.get('projectId');
395
+ const appKey = config_1.config.get('defaultApplicationKey');
396
+ const apiKey = config_1.config.get('keyId');
397
+ appSettings["PROJECT_ID"] = projectId || '';
398
+ appSettings["PROJECT_ID_API_KEY"] = apiKey || '';
399
+ appSettings["PROJECT_ID_API_SECRET"] = '';
400
+ appSettings["VOICE_APPLICATION_KEY"] = appKey || '';
401
+ appSettings["VOICE_APPLICATION_SECRET"] = '';
402
+ templateSecretKeys.forEach(key => {
403
+ appSettings[key] = '';
404
+ });
405
+ await fs_extra_1.default.writeJson(appSettingsPath, appSettings, { spaces: 2 });
406
+ const appSettingsDevPath = path_1.default.join(functionDir, 'appsettings.Development.json');
407
+ const appSettingsDev = {
408
+ "Logging": {
409
+ "LogLevel": {
410
+ "Default": "Debug",
411
+ "Microsoft.AspNetCore": "Information"
412
+ }
413
+ },
414
+ "SinchTunnel": false
415
+ };
416
+ await fs_extra_1.default.writeJson(appSettingsDevPath, appSettingsDev, { spaces: 2 });
417
+ try {
418
+ const credentials = await config_1.config.getCredentials();
419
+ await new Promise((resolve, reject) => {
420
+ const initSecrets = (0, child_process_1.spawn)('dotnet', ['user-secrets', 'init'], {
421
+ cwd: functionDir,
422
+ shell: true
423
+ });
424
+ initSecrets.on('close', code => code === 0 ? resolve() : reject(new Error('Failed to init user-secrets')));
425
+ initSecrets.on('error', reject);
426
+ });
427
+ if (credentials && credentials.keySecret) {
428
+ await new Promise((resolve, reject) => {
429
+ const setApiSecret = (0, child_process_1.spawn)('dotnet', ['user-secrets', 'set', 'PROJECT_ID_API_SECRET', credentials.keySecret], {
430
+ cwd: functionDir,
431
+ shell: true
432
+ });
433
+ setApiSecret.on('close', code => code === 0 ? resolve() : reject(new Error('Failed to set API secret')));
434
+ setApiSecret.on('error', reject);
435
+ });
436
+ }
437
+ if (credentials && credentials.applicationSecret) {
438
+ await new Promise((resolve, reject) => {
439
+ const setAppSecret = (0, child_process_1.spawn)('dotnet', ['user-secrets', 'set', 'VOICE_APPLICATION_SECRET', credentials.applicationSecret], {
440
+ cwd: functionDir,
441
+ shell: true
442
+ });
443
+ setAppSecret.on('close', code => code === 0 ? resolve() : reject(new Error('Failed to set app secret')));
444
+ setAppSecret.on('error', reject);
445
+ });
446
+ }
447
+ const SERVICE_NAME = 'sinch-functions-cli';
448
+ for (const secretKey of templateSecretKeys) {
449
+ try {
450
+ const keychainKey = `${functionName}-${secretKey}`;
451
+ const secretValue = await keytar_1.default.getPassword(SERVICE_NAME, keychainKey);
452
+ if (secretValue) {
453
+ await new Promise((resolve, reject) => {
454
+ const setSecret = (0, child_process_1.spawn)('dotnet', ['user-secrets', 'set', secretKey, secretValue], {
455
+ cwd: functionDir,
456
+ shell: true
457
+ });
458
+ setSecret.on('close', code => code === 0 ? resolve() : reject(new Error(`Failed to set ${secretKey}`)));
459
+ setSecret.on('error', reject);
460
+ });
461
+ }
462
+ }
463
+ catch (error) {
464
+ }
465
+ }
466
+ if (credentials && (credentials.keySecret || credentials.applicationSecret) || templateSecretKeys.length > 0) {
467
+ logger_1.logger.info('');
468
+ logger_1.logger.info('🔐 Secrets Management for C#:');
469
+ logger_1.logger.info(' ✅ User secrets have been configured automatically');
470
+ logger_1.logger.info(' You can view them with: ' + chalk_1.default.cyan('dotnet user-secrets list'));
471
+ if (templateSecretKeys.length > 0) {
472
+ logger_1.logger.info(' 💡 Template secrets have been added to user-secrets');
473
+ }
474
+ }
475
+ }
476
+ catch (error) {
477
+ logger_1.logger.info('');
478
+ logger_1.logger.info('🔐 Secrets Management for C#:');
479
+ logger_1.logger.info(' For local development, use dotnet user-secrets:');
480
+ logger_1.logger.info(` ${chalk_1.default.cyan('dotnet user-secrets init')}`);
481
+ logger_1.logger.info(` ${chalk_1.default.cyan('dotnet user-secrets set "PROJECT_ID_API_SECRET" "your-api-secret"')}`);
482
+ logger_1.logger.info(` ${chalk_1.default.cyan('dotnet user-secrets set "VOICE_APPLICATION_SECRET" "your-app-secret"')}`);
483
+ }
484
+ }
485
+ spinner_1.spinner.succeed('🚀 Function initialized successfully');
486
+ logger_1.logger.newline();
487
+ logger_1.logger.title(`Function: ${chalk_1.default.cyan(functionName)}`);
488
+ logger_1.logger.info(`Template: ${chalk_1.default.yellow(template)}`);
489
+ logger_1.logger.info(`Runtime: ${chalk_1.default.blue(selectedRuntime)}`);
490
+ logger_1.logger.info(`Location: ${chalk_1.default.gray(functionDir)}`);
491
+ if (selectedRuntime === 'node' && !options.skipInstall) {
492
+ logger_1.logger.newline();
493
+ spinner_1.spinner.start('Installing npm packages...');
494
+ try {
495
+ await new Promise((resolve, reject) => {
496
+ const npmInstall = (0, child_process_1.spawn)('npm', ['install'], {
497
+ cwd: functionDir,
498
+ stdio: 'inherit',
499
+ shell: true
500
+ });
501
+ npmInstall.on('close', (code) => {
502
+ if (code === 0) {
503
+ resolve();
504
+ }
505
+ else {
506
+ reject(new Error(`npm install failed with code ${code}`));
507
+ }
508
+ });
509
+ npmInstall.on('error', (err) => {
510
+ reject(err);
511
+ });
512
+ });
513
+ spinner_1.spinner.succeed('📦 Dependencies installed successfully');
514
+ }
515
+ catch (error) {
516
+ spinner_1.spinner.fail('📦 Failed to install dependencies');
517
+ if (error.code === 'ENOENT') {
518
+ logger_1.logger.warn('npm not found. Please ensure Node.js is installed and in your PATH.');
519
+ }
520
+ else {
521
+ logger_1.logger.debug(`npm install error: ${error.message}`);
522
+ }
523
+ }
524
+ }
525
+ logger_1.logger.newline();
526
+ logger_1.logger.info('📋 Next steps:');
527
+ logger_1.logger.info(` 1. 📁 Navigate to function: ${chalk_1.default.cyan(`cd ${functionName}`)}`);
528
+ if (selectedRuntime === 'node') {
529
+ logger_1.logger.info(' 2. 🏃 Start development: sinch functions dev');
530
+ }
531
+ else {
532
+ logger_1.logger.info(' 2. 🏃 Start development: dotnet run');
533
+ }
534
+ logger_1.logger.info(' 3. 🚀 Deploy to production: sinch functions deploy');
535
+ logger_1.logger.info(' 4. 📊 View logs: sinch functions logs --follow');
536
+ logger_1.logger.newline();
537
+ logger_1.logger.info('💡 Template info:');
538
+ logger_1.logger.info(`• ${selectedTemplateInfo.description}`);
539
+ if (selectedTemplateInfo.features && selectedTemplateInfo.features.length > 0) {
540
+ selectedTemplateInfo.features.forEach(feature => {
541
+ logger_1.logger.info(`• ${feature}`);
542
+ });
543
+ }
544
+ }
545
+ catch (error) {
546
+ spinner_1.spinner.stop();
547
+ logger_1.logger.error(`Failed to initialize function: ${error.message}`);
548
+ process.exit(1);
549
+ }
550
+ });
551
+ module.exports = init;
552
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":""}