@channel.io/app-sdk 0.1.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.
@@ -0,0 +1,373 @@
1
+ import { Command } from "commander";
2
+ import pc from "picocolors";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ export const createCommand = new Command("create")
6
+ .description("Create a new Channel.io app")
7
+ .argument("<name>", "Name of the app")
8
+ .option("-t, --template <template>", "Template to use", "basic")
9
+ .action(async (name, options) => {
10
+ console.log(pc.cyan(`\nCreating Channel.io app: ${pc.bold(name)}\n`));
11
+ const targetDir = join(process.cwd(), name);
12
+ try {
13
+ // Create directory structure
14
+ await mkdir(targetDir, { recursive: true });
15
+ await mkdir(join(targetDir, "apps", "server", "src", "extensions"), { recursive: true });
16
+ await mkdir(join(targetDir, "apps", "wam", "src"), { recursive: true });
17
+ await mkdir(join(targetDir, "packages", "shared", "src"), { recursive: true });
18
+ // Create root package.json
19
+ await writeFile(join(targetDir, "package.json"), JSON.stringify({
20
+ name: name,
21
+ version: "0.0.1",
22
+ private: true,
23
+ scripts: {
24
+ dev: "turbo run dev",
25
+ build: "turbo run build",
26
+ lint: "turbo run lint",
27
+ },
28
+ devDependencies: {
29
+ turbo: "^2.3.3",
30
+ typescript: "^5.7.2",
31
+ },
32
+ packageManager: "pnpm@9.15.4",
33
+ }, null, 2));
34
+ // Create pnpm-workspace.yaml
35
+ await writeFile(join(targetDir, "pnpm-workspace.yaml"), `packages:
36
+ - "apps/*"
37
+ - "packages/*"
38
+ `);
39
+ // Create turbo.json
40
+ await writeFile(join(targetDir, "turbo.json"), JSON.stringify({
41
+ $schema: "https://turbo.build/schema.json",
42
+ tasks: {
43
+ build: {
44
+ dependsOn: ["^build"],
45
+ outputs: ["dist/**"],
46
+ },
47
+ dev: {
48
+ cache: false,
49
+ persistent: true,
50
+ },
51
+ lint: {
52
+ outputs: [],
53
+ },
54
+ },
55
+ }, null, 2));
56
+ // Create .env.example
57
+ await writeFile(join(targetDir, ".env.example"), `APP_ID=your-app-id
58
+ APP_SECRET=your-app-secret
59
+ `);
60
+ // Create server app
61
+ await createServerApp(targetDir, name, options.template);
62
+ // Create WAM app
63
+ await createWamApp(targetDir, name);
64
+ // Create shared package
65
+ await createSharedPackage(targetDir, name);
66
+ console.log(pc.green(`\n✓ Created ${name} successfully!\n`));
67
+ console.log(`Next steps:\n`);
68
+ console.log(` cd ${name}`);
69
+ console.log(` pnpm install`);
70
+ console.log(` cp .env.example .env`);
71
+ console.log(` pnpm dev\n`);
72
+ }
73
+ catch (error) {
74
+ console.error(pc.red(`\nError creating app: ${String(error)}`));
75
+ process.exit(1);
76
+ }
77
+ });
78
+ async function createServerApp(targetDir, name, _template) {
79
+ const serverDir = join(targetDir, "apps", "server");
80
+ // package.json
81
+ await writeFile(join(serverDir, "package.json"), JSON.stringify({
82
+ name: `@${name}/server`,
83
+ version: "0.0.1",
84
+ private: true,
85
+ type: "module",
86
+ scripts: {
87
+ build: "nest build",
88
+ dev: "nest start --watch",
89
+ start: "node dist/main.js",
90
+ lint: "eslint src/",
91
+ },
92
+ dependencies: {
93
+ "@channel.io/app-sdk": "^0.0.1",
94
+ "@nestjs/common": "^10.4.15",
95
+ "@nestjs/core": "^10.4.15",
96
+ "@nestjs/platform-express": "^10.4.15",
97
+ "reflect-metadata": "^0.2.2",
98
+ rxjs: "^7.8.1",
99
+ zod: "^3.24.1",
100
+ },
101
+ devDependencies: {
102
+ "@nestjs/cli": "^10.4.9",
103
+ "@types/node": "^22.10.5",
104
+ typescript: "^5.7.2",
105
+ },
106
+ }, null, 2));
107
+ // tsconfig.json
108
+ await writeFile(join(serverDir, "tsconfig.json"), JSON.stringify({
109
+ compilerOptions: {
110
+ target: "ES2022",
111
+ module: "NodeNext",
112
+ moduleResolution: "NodeNext",
113
+ strict: true,
114
+ esModuleInterop: true,
115
+ skipLibCheck: true,
116
+ experimentalDecorators: true,
117
+ emitDecoratorMetadata: true,
118
+ outDir: "./dist",
119
+ rootDir: "./src",
120
+ },
121
+ include: ["src/**/*"],
122
+ }, null, 2));
123
+ // nest-cli.json
124
+ await writeFile(join(serverDir, "nest-cli.json"), JSON.stringify({
125
+ $schema: "https://json.schemastore.org/nest-cli",
126
+ collection: "@nestjs/schematics",
127
+ sourceRoot: "src",
128
+ compilerOptions: {
129
+ builder: "tsc",
130
+ },
131
+ }, null, 2));
132
+ // main.ts
133
+ await writeFile(join(serverDir, "src", "main.ts"), `import { NestFactory } from "@nestjs/core";
134
+ import { AppModule } from "./app.module.js";
135
+
136
+ async function bootstrap() {
137
+ const app = await NestFactory.create(AppModule);
138
+
139
+ const port = process.env.PORT ?? 3000;
140
+ await app.listen(port);
141
+
142
+ console.log(\`Server running on http://localhost:\${port}\`);
143
+ }
144
+
145
+ bootstrap();
146
+ `);
147
+ // app.module.ts
148
+ await writeFile(join(serverDir, "src", "app.module.ts"), `import { Module } from "@nestjs/common";
149
+ import { ConfigModule, ConfigService } from "@nestjs/config";
150
+ import { ChannelAppModule } from "@channel.io/app-sdk";
151
+ import { commandExtension } from "./extensions/command.extension.js";
152
+
153
+ @Module({
154
+ imports: [
155
+ ConfigModule.forRoot(),
156
+ ChannelAppModule.forRootAsync({
157
+ imports: [ConfigModule],
158
+ inject: [ConfigService],
159
+ useFactory: (config: ConfigService) => ({
160
+ appId: config.get("APP_ID") ?? "",
161
+ appSecret: config.get("APP_SECRET") ?? "",
162
+ extensions: [commandExtension],
163
+ debug: true,
164
+ }),
165
+ }),
166
+ ],
167
+ })
168
+ export class AppModule {}
169
+ `);
170
+ // Sample extension
171
+ await writeFile(join(serverDir, "src", "extensions", "command.extension.ts"), `import { createExtension, defineFunction } from "@channel.io/app-sdk";
172
+ import { z } from "zod";
173
+
174
+ export const commandExtension = createExtension({
175
+ name: "command",
176
+ systemVersion: 1,
177
+ groups: {
178
+ command: {
179
+ execute: defineFunction({
180
+ description: "Execute a command",
181
+ input: z.object({
182
+ command: z.string(),
183
+ args: z.array(z.string()).optional(),
184
+ }),
185
+ output: z.object({
186
+ success: z.boolean(),
187
+ message: z.string(),
188
+ }),
189
+ handler: async (ctx, params) => {
190
+ console.log(\`Executing command: \${params.command}\`);
191
+
192
+ return {
193
+ success: true,
194
+ message: \`Command '\${params.command}' executed successfully\`,
195
+ };
196
+ },
197
+ }),
198
+ },
199
+ },
200
+ });
201
+ `);
202
+ // Add @nestjs/config to dependencies
203
+ const pkgJson = JSON.parse(await (await import("node:fs/promises")).readFile(join(serverDir, "package.json"), "utf-8"));
204
+ pkgJson.dependencies["@nestjs/config"] = "^3.3.0";
205
+ await writeFile(join(serverDir, "package.json"), JSON.stringify(pkgJson, null, 2));
206
+ }
207
+ async function createWamApp(targetDir, name) {
208
+ const wamDir = join(targetDir, "apps", "wam");
209
+ // package.json
210
+ await writeFile(join(wamDir, "package.json"), JSON.stringify({
211
+ name: `@${name}/wam`,
212
+ version: "0.0.1",
213
+ private: true,
214
+ type: "module",
215
+ scripts: {
216
+ dev: "vite",
217
+ build: "vite build",
218
+ preview: "vite preview",
219
+ lint: "eslint src/",
220
+ },
221
+ dependencies: {
222
+ "@channel.io/app-sdk": "^0.0.1",
223
+ react: "^18.3.1",
224
+ "react-dom": "^18.3.1",
225
+ },
226
+ devDependencies: {
227
+ "@types/react": "^18.3.18",
228
+ "@types/react-dom": "^18.3.5",
229
+ "@vitejs/plugin-react": "^4.3.4",
230
+ typescript: "^5.7.2",
231
+ vite: "^6.0.7",
232
+ },
233
+ }, null, 2));
234
+ // vite.config.ts
235
+ await writeFile(join(wamDir, "vite.config.ts"), `import { defineConfig } from "vite";
236
+ import react from "@vitejs/plugin-react";
237
+
238
+ export default defineConfig({
239
+ plugins: [react()],
240
+ build: {
241
+ outDir: "dist",
242
+ },
243
+ });
244
+ `);
245
+ // tsconfig.json
246
+ await writeFile(join(wamDir, "tsconfig.json"), JSON.stringify({
247
+ compilerOptions: {
248
+ target: "ES2022",
249
+ module: "ESNext",
250
+ moduleResolution: "bundler",
251
+ strict: true,
252
+ esModuleInterop: true,
253
+ skipLibCheck: true,
254
+ jsx: "react-jsx",
255
+ lib: ["ES2022", "DOM"],
256
+ },
257
+ include: ["src/**/*"],
258
+ }, null, 2));
259
+ // index.html
260
+ await writeFile(join(wamDir, "index.html"), `<!DOCTYPE html>
261
+ <html lang="en">
262
+ <head>
263
+ <meta charset="UTF-8" />
264
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
265
+ <title>${name} WAM</title>
266
+ </head>
267
+ <body>
268
+ <div id="root"></div>
269
+ <script type="module" src="/src/main.tsx"></script>
270
+ </body>
271
+ </html>
272
+ `);
273
+ // main.tsx
274
+ await writeFile(join(wamDir, "src", "main.tsx"), `import React from "react";
275
+ import ReactDOM from "react-dom/client";
276
+ import { WamProvider } from "@channel.io/app-sdk";
277
+ import App from "./App";
278
+
279
+ ReactDOM.createRoot(document.getElementById("root")!).render(
280
+ <React.StrictMode>
281
+ <WamProvider>
282
+ <App />
283
+ </WamProvider>
284
+ </React.StrictMode>
285
+ );
286
+ `);
287
+ // App.tsx
288
+ await writeFile(join(wamDir, "src", "App.tsx"), `import { useEffect } from "react";
289
+ import { useWamData, useWamSize, useCallFunction } from "@channel.io/app-sdk";
290
+
291
+ export default function App() {
292
+ const appId = useWamData<string>("appId") ?? "";
293
+ const channelId = useWamData<string>("channelId");
294
+ const { setSize } = useWamSize();
295
+
296
+ const { call, loading, data } = useCallFunction<{ success: boolean; message: string }>({
297
+ appId,
298
+ name: "command.command.execute",
299
+ });
300
+
301
+ useEffect(() => {
302
+ setSize({ height: 300 });
303
+ }, [setSize]);
304
+
305
+ const handleClick = async () => {
306
+ try {
307
+ await call({ command: "hello", args: ["world"] });
308
+ } catch (error) {
309
+ console.error("Failed to execute command:", error);
310
+ }
311
+ };
312
+
313
+ return (
314
+ <div style={{ padding: 20 }}>
315
+ <h1>Channel.io App</h1>
316
+ <p>Channel ID: {channelId}</p>
317
+
318
+ <button onClick={handleClick} disabled={loading}>
319
+ {loading ? "Executing..." : "Execute Command"}
320
+ </button>
321
+
322
+ {data && (
323
+ <p style={{ color: data.success ? "green" : "red" }}>
324
+ {data.message}
325
+ </p>
326
+ )}
327
+ </div>
328
+ );
329
+ }
330
+ `);
331
+ }
332
+ async function createSharedPackage(targetDir, name) {
333
+ const sharedDir = join(targetDir, "packages", "shared");
334
+ // package.json
335
+ await writeFile(join(sharedDir, "package.json"), JSON.stringify({
336
+ name: `@${name}/shared`,
337
+ version: "0.0.1",
338
+ private: true,
339
+ type: "module",
340
+ main: "./dist/index.js",
341
+ types: "./dist/index.d.ts",
342
+ scripts: {
343
+ build: "tsc",
344
+ dev: "tsc --watch",
345
+ },
346
+ devDependencies: {
347
+ typescript: "^5.7.2",
348
+ },
349
+ }, null, 2));
350
+ // tsconfig.json
351
+ await writeFile(join(sharedDir, "tsconfig.json"), JSON.stringify({
352
+ compilerOptions: {
353
+ target: "ES2022",
354
+ module: "NodeNext",
355
+ moduleResolution: "NodeNext",
356
+ strict: true,
357
+ esModuleInterop: true,
358
+ skipLibCheck: true,
359
+ declaration: true,
360
+ outDir: "./dist",
361
+ rootDir: "./src",
362
+ },
363
+ include: ["src/**/*"],
364
+ }, null, 2));
365
+ // index.ts
366
+ await writeFile(join(sharedDir, "src", "index.ts"), `// Shared types and utilities
367
+ export interface AppConfig {
368
+ appId: string;
369
+ channelId: string;
370
+ }
371
+ `);
372
+ }
373
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const devCommand: Command;
3
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,UAAU,SAmDnB,CAAC"}
@@ -0,0 +1,175 @@
1
+ import { Command } from "commander";
2
+ import pc from "picocolors";
3
+ import * as fs from "node:fs";
4
+ import * as path from "node:path";
5
+ import { spawn } from "node:child_process";
6
+ export const devCommand = new Command()
7
+ .command("dev")
8
+ .description("Start development server")
9
+ .option("-p, --port <port>", "Server port", "3000")
10
+ .option("-w, --wam-port <port>", "WAM dev server port", "5173")
11
+ .action((options) => {
12
+ const projectType = detectProjectType();
13
+ console.log(pc.cyan("Starting development servers..."));
14
+ const processes = [];
15
+ // Start server if it exists
16
+ if (projectType.hasServer) {
17
+ console.log(pc.dim(`Starting server on port ${options.port}...`));
18
+ const serverProcess = startServer(projectType.serverPath, options.port);
19
+ if (serverProcess) {
20
+ processes.push(serverProcess);
21
+ }
22
+ }
23
+ // Start WAM dev server if it exists
24
+ if (projectType.hasWam) {
25
+ console.log(pc.dim(`Starting WAM dev server on port ${options.wamPort}...`));
26
+ const wamProcess = startWamDevServer(projectType.wamPath, options.wamPort);
27
+ if (wamProcess) {
28
+ processes.push(wamProcess);
29
+ }
30
+ }
31
+ if (processes.length === 0) {
32
+ console.log(pc.yellow("No server or WAM found to start."));
33
+ console.log(pc.dim("Make sure you're in a Channel.io app project directory."));
34
+ return;
35
+ }
36
+ // Handle shutdown
37
+ process.on("SIGINT", () => {
38
+ console.log(pc.dim("\nShutting down..."));
39
+ for (const p of processes) {
40
+ p.kill();
41
+ }
42
+ process.exit(0);
43
+ });
44
+ process.on("SIGTERM", () => {
45
+ for (const p of processes) {
46
+ p.kill();
47
+ }
48
+ process.exit(0);
49
+ });
50
+ });
51
+ function detectProjectType() {
52
+ const cwd = process.cwd();
53
+ // Check for monorepo structure
54
+ const appsServerPath = path.join(cwd, "apps/server");
55
+ const appsWamPath = path.join(cwd, "apps/wam");
56
+ if (fs.existsSync(appsServerPath) && fs.existsSync(appsWamPath)) {
57
+ return {
58
+ hasServer: true,
59
+ serverPath: appsServerPath,
60
+ hasWam: true,
61
+ wamPath: appsWamPath,
62
+ };
63
+ }
64
+ // Check for standalone server
65
+ const serverPackageJson = path.join(cwd, "server/package.json");
66
+ const wamPackageJson = path.join(cwd, "wam/package.json");
67
+ if (fs.existsSync(serverPackageJson) && fs.existsSync(wamPackageJson)) {
68
+ return {
69
+ hasServer: true,
70
+ serverPath: path.join(cwd, "server"),
71
+ hasWam: true,
72
+ wamPath: path.join(cwd, "wam"),
73
+ };
74
+ }
75
+ // Check for single project (server only or combined)
76
+ const packageJsonPath = path.join(cwd, "package.json");
77
+ if (fs.existsSync(packageJsonPath)) {
78
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
79
+ const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
80
+ return {
81
+ hasServer: !!deps["@nestjs/core"] || !!deps["@channel.io/app-sdk-server"],
82
+ serverPath: cwd,
83
+ hasWam: !!deps["react"] || !!deps["@channel.io/app-sdk-wam"],
84
+ wamPath: cwd,
85
+ };
86
+ }
87
+ return {
88
+ hasServer: false,
89
+ serverPath: cwd,
90
+ hasWam: false,
91
+ wamPath: cwd,
92
+ };
93
+ }
94
+ function startServer(serverPath, port) {
95
+ const packageJsonPath = path.join(serverPath, "package.json");
96
+ if (!fs.existsSync(packageJsonPath)) {
97
+ console.log(pc.yellow(`No package.json found at ${serverPath}`));
98
+ return null;
99
+ }
100
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
101
+ const scripts = packageJson.scripts ?? {};
102
+ // Try to find the best dev script
103
+ let command;
104
+ let args;
105
+ if (scripts["dev"]) {
106
+ command = "pnpm";
107
+ args = ["run", "dev"];
108
+ }
109
+ else if (scripts["start:dev"]) {
110
+ command = "pnpm";
111
+ args = ["run", "start:dev"];
112
+ }
113
+ else if (scripts["start"]) {
114
+ command = "pnpm";
115
+ args = ["run", "start"];
116
+ }
117
+ else {
118
+ console.log(pc.yellow("No dev/start script found in server package.json"));
119
+ return null;
120
+ }
121
+ const env = { ...process.env };
122
+ if (port) {
123
+ env["PORT"] = port;
124
+ }
125
+ const child = spawn(command, args, {
126
+ cwd: serverPath,
127
+ stdio: "inherit",
128
+ env,
129
+ shell: true,
130
+ });
131
+ child.on("error", (err) => {
132
+ console.log(pc.red(`Server error: ${err.message}`));
133
+ });
134
+ return child;
135
+ }
136
+ function startWamDevServer(wamPath, port) {
137
+ const packageJsonPath = path.join(wamPath, "package.json");
138
+ if (!fs.existsSync(packageJsonPath)) {
139
+ console.log(pc.yellow(`No package.json found at ${wamPath}`));
140
+ return null;
141
+ }
142
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
143
+ const scripts = packageJson.scripts ?? {};
144
+ // Try to find the best dev script
145
+ let command;
146
+ let args;
147
+ if (scripts["dev"]) {
148
+ command = "pnpm";
149
+ args = ["run", "dev"];
150
+ }
151
+ else if (scripts["start"]) {
152
+ command = "pnpm";
153
+ args = ["run", "start"];
154
+ }
155
+ else {
156
+ console.log(pc.yellow("No dev/start script found in WAM package.json"));
157
+ return null;
158
+ }
159
+ const env = { ...process.env };
160
+ if (port) {
161
+ env["PORT"] = port;
162
+ env["VITE_PORT"] = port;
163
+ }
164
+ const child = spawn(command, args, {
165
+ cwd: wamPath,
166
+ stdio: "inherit",
167
+ env,
168
+ shell: true,
169
+ });
170
+ child.on("error", (err) => {
171
+ console.log(pc.red(`WAM dev server error: ${err.message}`));
172
+ });
173
+ return child;
174
+ }
175
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const generateCommand: Command;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,eAAe,SAkBxB,CAAC"}