skool-cli 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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +179 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +33 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/create-folder.d.ts +3 -0
  8. package/dist/commands/create-folder.d.ts.map +1 -0
  9. package/dist/commands/create-folder.js +24 -0
  10. package/dist/commands/create-folder.js.map +1 -0
  11. package/dist/commands/create-lesson.d.ts +3 -0
  12. package/dist/commands/create-lesson.d.ts.map +1 -0
  13. package/dist/commands/create-lesson.js +35 -0
  14. package/dist/commands/create-lesson.js.map +1 -0
  15. package/dist/commands/create-post.d.ts +3 -0
  16. package/dist/commands/create-post.d.ts.map +1 -0
  17. package/dist/commands/create-post.js +36 -0
  18. package/dist/commands/create-post.js.map +1 -0
  19. package/dist/commands/debug-api.d.ts +3 -0
  20. package/dist/commands/debug-api.d.ts.map +1 -0
  21. package/dist/commands/debug-api.js +112 -0
  22. package/dist/commands/debug-api.js.map +1 -0
  23. package/dist/commands/debug-manual.d.ts +3 -0
  24. package/dist/commands/debug-manual.d.ts.map +1 -0
  25. package/dist/commands/debug-manual.js +66 -0
  26. package/dist/commands/debug-manual.js.map +1 -0
  27. package/dist/commands/debug.d.ts +3 -0
  28. package/dist/commands/debug.d.ts.map +1 -0
  29. package/dist/commands/debug.js +114 -0
  30. package/dist/commands/debug.js.map +1 -0
  31. package/dist/commands/delete-lesson.d.ts +3 -0
  32. package/dist/commands/delete-lesson.d.ts.map +1 -0
  33. package/dist/commands/delete-lesson.js +17 -0
  34. package/dist/commands/delete-lesson.js.map +1 -0
  35. package/dist/commands/get-categories.d.ts +3 -0
  36. package/dist/commands/get-categories.d.ts.map +1 -0
  37. package/dist/commands/get-categories.js +34 -0
  38. package/dist/commands/get-categories.js.map +1 -0
  39. package/dist/commands/get-members.d.ts +3 -0
  40. package/dist/commands/get-members.d.ts.map +1 -0
  41. package/dist/commands/get-members.js +35 -0
  42. package/dist/commands/get-members.js.map +1 -0
  43. package/dist/commands/get-posts.d.ts +3 -0
  44. package/dist/commands/get-posts.d.ts.map +1 -0
  45. package/dist/commands/get-posts.js +41 -0
  46. package/dist/commands/get-posts.js.map +1 -0
  47. package/dist/commands/list-lessons.d.ts +3 -0
  48. package/dist/commands/list-lessons.d.ts.map +1 -0
  49. package/dist/commands/list-lessons.js +45 -0
  50. package/dist/commands/list-lessons.js.map +1 -0
  51. package/dist/commands/login.d.ts +3 -0
  52. package/dist/commands/login.d.ts.map +1 -0
  53. package/dist/commands/login.js +30 -0
  54. package/dist/commands/login.js.map +1 -0
  55. package/dist/commands/test-api.d.ts +3 -0
  56. package/dist/commands/test-api.d.ts.map +1 -0
  57. package/dist/commands/test-api.js +143 -0
  58. package/dist/commands/test-api.js.map +1 -0
  59. package/dist/commands/whoami.d.ts +3 -0
  60. package/dist/commands/whoami.d.ts.map +1 -0
  61. package/dist/commands/whoami.js +17 -0
  62. package/dist/commands/whoami.js.map +1 -0
  63. package/dist/core/browser-manager.d.ts +25 -0
  64. package/dist/core/browser-manager.d.ts.map +1 -0
  65. package/dist/core/browser-manager.js +104 -0
  66. package/dist/core/browser-manager.js.map +1 -0
  67. package/dist/core/config.d.ts +15 -0
  68. package/dist/core/config.d.ts.map +1 -0
  69. package/dist/core/config.js +17 -0
  70. package/dist/core/config.js.map +1 -0
  71. package/dist/core/html-generator.d.ts +15 -0
  72. package/dist/core/html-generator.d.ts.map +1 -0
  73. package/dist/core/html-generator.js +254 -0
  74. package/dist/core/html-generator.js.map +1 -0
  75. package/dist/core/page-ops.d.ts +69 -0
  76. package/dist/core/page-ops.d.ts.map +1 -0
  77. package/dist/core/page-ops.js +511 -0
  78. package/dist/core/page-ops.js.map +1 -0
  79. package/dist/core/skool-api.d.ts +74 -0
  80. package/dist/core/skool-api.d.ts.map +1 -0
  81. package/dist/core/skool-api.js +389 -0
  82. package/dist/core/skool-api.js.map +1 -0
  83. package/dist/core/skool-client.d.ts +63 -0
  84. package/dist/core/skool-client.d.ts.map +1 -0
  85. package/dist/core/skool-client.js +501 -0
  86. package/dist/core/skool-client.js.map +1 -0
  87. package/dist/core/types.d.ts +58 -0
  88. package/dist/core/types.d.ts.map +1 -0
  89. package/dist/core/types.js +2 -0
  90. package/dist/core/types.js.map +1 -0
  91. package/package.json +51 -0
@@ -0,0 +1,501 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { BrowserManager } from "./browser-manager.js";
3
+ import { PageOps } from "./page-ops.js";
4
+ import { SkoolApi } from "./skool-api.js";
5
+ import { markdownToHtml, structuredContentToHtml } from "./html-generator.js";
6
+ /**
7
+ * High-level Skool client.
8
+ * This is the main API for both CLI commands and programmatic usage.
9
+ */
10
+ export class SkoolClient {
11
+ browser;
12
+ ops;
13
+ api;
14
+ // Cached IDs for API calls
15
+ cachedGroupId = "";
16
+ cachedUserId = "";
17
+ cachedRootId = "";
18
+ constructor() {
19
+ this.browser = new BrowserManager();
20
+ this.ops = new PageOps(this.browser);
21
+ this.api = new SkoolApi(this.browser);
22
+ }
23
+ /** Discover group_id, user_id, root_id for API calls */
24
+ async discoverIds(groupSlug, courseName) {
25
+ // Return cached if available
26
+ if (this.cachedGroupId && this.cachedUserId && this.cachedRootId) {
27
+ return {
28
+ groupId: this.cachedGroupId,
29
+ userId: this.cachedUserId,
30
+ rootId: this.cachedRootId,
31
+ };
32
+ }
33
+ const page = await this.browser.getPage();
34
+ // Navigate to classroom
35
+ await this.ops.gotoClassroom(groupSlug);
36
+ // Enter course
37
+ if (courseName) {
38
+ await page.getByText(courseName, { exact: false }).first().click();
39
+ }
40
+ else {
41
+ const courseLink = page.locator('a[href*="/classroom/"]').first();
42
+ if ((await courseLink.count()) > 0)
43
+ await courseLink.click();
44
+ }
45
+ await page.waitForTimeout(3000);
46
+ // Get group_id from telemetry/page
47
+ let groupId = "";
48
+ page.on("request", (req) => {
49
+ const body = req.postData();
50
+ if (body) {
51
+ const gm = body.match(/"group_id"\s*:\s*"([a-f0-9]{32})"/);
52
+ if (gm && !groupId)
53
+ groupId = gm[1];
54
+ }
55
+ });
56
+ // Get group_id from page assets if not captured
57
+ if (!groupId) {
58
+ groupId = await page.evaluate(() => {
59
+ const str = document.documentElement.innerHTML;
60
+ const m = str.match(/[a-f0-9]{32}/);
61
+ // Look for the specific pattern in og:image URLs
62
+ const ogMatch = str.match(/assets\.skool\.com\/f\/([a-f0-9]{32})/);
63
+ return ogMatch ? ogMatch[1] : (m ? m[0] : "");
64
+ });
65
+ }
66
+ // Get user_id from JWT auth_token cookie
67
+ let userId = "";
68
+ const cookies = await page.context().cookies();
69
+ const authCookie = cookies.find((c) => c.name === "auth_token");
70
+ if (authCookie) {
71
+ try {
72
+ const payload = JSON.parse(Buffer.from(authCookie.value.split(".")[1], "base64").toString());
73
+ userId = payload.user_id || payload.sub || payload.id || "";
74
+ }
75
+ catch { /* ignore */ }
76
+ }
77
+ // Get root_id by intercepting the POST to api2.skool.com when doing "Add page"
78
+ // Then DELETE the unwanted "New page" that gets created
79
+ let rootId = "";
80
+ let tempPageId = "";
81
+ const rootIdPromise = new Promise((resolve) => {
82
+ const timeout = setTimeout(() => resolve({ rootId: "", pageId: "" }), 15000);
83
+ page.on("response", async (res) => {
84
+ if (res.url().includes("api2.skool.com/courses") && res.request().method() === "POST") {
85
+ try {
86
+ const data = (await res.json());
87
+ if (data.root_id && data.id) {
88
+ clearTimeout(timeout);
89
+ resolve({
90
+ rootId: data.root_id,
91
+ pageId: data.id,
92
+ });
93
+ }
94
+ }
95
+ catch { /* ignore */ }
96
+ }
97
+ });
98
+ });
99
+ // Trigger "Add page" to get root_id
100
+ const courseTopArea = page.locator('div[class*="CourseMenuTop"]').first();
101
+ await courseTopArea.hover();
102
+ await page.waitForTimeout(500);
103
+ await page.evaluate(() => {
104
+ const topArea = document.querySelector('div[class*="CourseMenuTop"]');
105
+ if (!topArea)
106
+ return;
107
+ topArea.querySelectorAll("div, button, span, svg").forEach((el) => {
108
+ const rect = el.getBoundingClientRect();
109
+ const text = el.textContent?.trim() || "";
110
+ if (rect.width > 10 && rect.width < 50 && rect.height > 10 && rect.height < 50 && text.length < 4) {
111
+ el.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true }));
112
+ }
113
+ });
114
+ });
115
+ await page.waitForTimeout(800);
116
+ try {
117
+ await page.getByText("Add page", { exact: true }).click({ timeout: 5000 });
118
+ }
119
+ catch {
120
+ await page.getByText("Add page", { exact: true }).click({ force: true, timeout: 5000 });
121
+ }
122
+ const captured = await rootIdPromise;
123
+ rootId = captured.rootId;
124
+ tempPageId = captured.pageId;
125
+ // Delete the temporary "New page" that was created for discovery
126
+ if (tempPageId) {
127
+ await this.api.deletePage(tempPageId);
128
+ }
129
+ // Cache for future calls
130
+ this.cachedGroupId = groupId;
131
+ this.cachedUserId = userId;
132
+ this.cachedRootId = rootId;
133
+ return { groupId, userId, rootId };
134
+ }
135
+ // ----------------------------------------------------------
136
+ // Auth
137
+ // ----------------------------------------------------------
138
+ /** Login to Skool with email and password */
139
+ async login(email, password) {
140
+ const success = await this.ops.login(email, password);
141
+ return {
142
+ success,
143
+ message: success
144
+ ? "Logged in successfully. Session cached for future use."
145
+ : "Login failed. Check your email and password.",
146
+ };
147
+ }
148
+ /** Check if the current session is valid */
149
+ async checkSession(groupSlug) {
150
+ await this.ops.gotoCommunity(groupSlug);
151
+ const authenticated = await this.ops.isAuthenticated();
152
+ return {
153
+ success: authenticated,
154
+ message: authenticated
155
+ ? "Session is active."
156
+ : "Session expired. Run: skool login",
157
+ };
158
+ }
159
+ // ----------------------------------------------------------
160
+ // Classroom
161
+ // ----------------------------------------------------------
162
+ /** Create a new folder (module) in a Skool classroom course */
163
+ async createFolder(options) {
164
+ try {
165
+ const { groupId, userId, rootId } = await this.discoverIds(options.group, options.course);
166
+ if (!groupId || !rootId) {
167
+ return { success: false, message: "Could not discover Skool IDs." };
168
+ }
169
+ const result = await this.api.createFolder({
170
+ groupId,
171
+ parentId: rootId,
172
+ rootId,
173
+ title: options.title,
174
+ });
175
+ return { success: result.success, message: result.message };
176
+ }
177
+ catch (error) {
178
+ return {
179
+ success: false,
180
+ message: `Failed to create folder: ${error.message}`,
181
+ };
182
+ }
183
+ }
184
+ /** Find a folder by name and return its ID.
185
+ * Extracts folder names + IDs from the sidebar DOM via Playwright.
186
+ */
187
+ async findFolderByName(groupId, rootId, folderName) {
188
+ // First try: API-based lookup
189
+ const items = await this.api.listCourseItems(groupId, rootId);
190
+ for (const item of items) {
191
+ const meta = item.metadata;
192
+ const title = meta?.title || "";
193
+ const unitType = item.unit_type || "";
194
+ if (unitType === "set" &&
195
+ title.toLowerCase() === folderName.toLowerCase()) {
196
+ return item.id;
197
+ }
198
+ }
199
+ // Second try: extract from sidebar links via Playwright
200
+ // Folder links in the sidebar contain the folder ID in the URL hash
201
+ const page = await this.browser.getPage();
202
+ const folderId = await page.evaluate((name) => {
203
+ // Folders in sidebar are MenuItemTitle elements
204
+ // Their parent MenuItemWrapper contains a link or data attribute with the ID
205
+ // When you click a folder, the URL changes to include ?md=<folder_first_child_id>
206
+ // But we can also find the folder by matching the name in the sidebar
207
+ // and looking for nearby elements with ID-like attributes
208
+ // Alternative: look at all links in the sidebar that contain the course path
209
+ const links = document.querySelectorAll('a[href*="/classroom/"]');
210
+ let found = "";
211
+ links.forEach((link) => {
212
+ const href = link.getAttribute("href") || "";
213
+ const text = link.textContent?.trim() || "";
214
+ // Links inside folders have ?md= parameter with the page ID
215
+ // We need the folder ID, which is the parent_id of pages inside it
216
+ // This approach won't give us the folder ID directly
217
+ });
218
+ // Better approach: check if Skool stores course data in React state
219
+ // Look for __NEXT_DATA__ or similar
220
+ const scripts = document.querySelectorAll("script#__NEXT_DATA__");
221
+ if (scripts.length > 0) {
222
+ try {
223
+ const data = JSON.parse(scripts[0].textContent || "{}");
224
+ const str = JSON.stringify(data);
225
+ // Find all "set" type items (folders) by parsing the full state
226
+ // Pattern: "unit_type":"set" with matching "title":"<name>"
227
+ const regex = new RegExp(`"id":"([a-f0-9]{32})"[^}]*"unit_type":"set"[^}]*"title":"${name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}"`, "i");
228
+ const match = str.match(regex);
229
+ if (match)
230
+ return match[1];
231
+ // Try reverse order (title before id)
232
+ const regex2 = new RegExp(`"title":"${name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}"[^}]*"unit_type":"set"[^}]*"id":"([a-f0-9]{32})"`, "i");
233
+ const match2 = str.match(regex2);
234
+ if (match2)
235
+ return match2[1];
236
+ }
237
+ catch {
238
+ // ignore parse errors
239
+ }
240
+ }
241
+ return found;
242
+ }, folderName);
243
+ return folderId || null;
244
+ }
245
+ /** Create a new lesson in a Skool classroom module */
246
+ async createLesson(options) {
247
+ // Resolve HTML content
248
+ let html;
249
+ if (options.htmlContent) {
250
+ html = options.htmlContent;
251
+ }
252
+ else if (options.markdownContent) {
253
+ html = markdownToHtml(options.markdownContent);
254
+ }
255
+ else if (options.filePath) {
256
+ const content = readFileSync(options.filePath, "utf-8");
257
+ if (options.filePath.endsWith(".json")) {
258
+ const parsed = JSON.parse(content);
259
+ const sc = parsed.skool_class || parsed;
260
+ html = structuredContentToHtml(sc);
261
+ }
262
+ else if (options.filePath.endsWith(".html") ||
263
+ options.filePath.endsWith(".htm")) {
264
+ html = content;
265
+ }
266
+ else {
267
+ html = markdownToHtml(content);
268
+ }
269
+ }
270
+ else {
271
+ return {
272
+ success: false,
273
+ message: "No content provided. Use --file, --html, or provide markdown content.",
274
+ };
275
+ }
276
+ try {
277
+ // Discover IDs via browser navigation
278
+ const { groupId, userId, rootId } = await this.discoverIds(options.group, options.course);
279
+ if (!groupId || !userId || !rootId) {
280
+ return {
281
+ success: false,
282
+ message: "Could not discover Skool IDs. Check your auth session.",
283
+ };
284
+ }
285
+ // Resolve parent: if folder specified, find its ID
286
+ let parentId = rootId;
287
+ if (options.folderId) {
288
+ // Direct folder ID provided
289
+ parentId = options.folderId;
290
+ }
291
+ else if (options.folder) {
292
+ const folderId = await this.findFolderByName(groupId, rootId, options.folder);
293
+ if (!folderId) {
294
+ return {
295
+ success: false,
296
+ message: `Folder "${options.folder}" not found. Try --folder-id with the folder ID directly.`,
297
+ };
298
+ }
299
+ parentId = folderId;
300
+ }
301
+ // Create lesson via direct API call
302
+ const result = await this.api.createPage({
303
+ groupId,
304
+ userId,
305
+ parentId,
306
+ rootId,
307
+ title: options.title,
308
+ content: html,
309
+ });
310
+ return {
311
+ success: result.success,
312
+ message: result.message,
313
+ };
314
+ }
315
+ catch (error) {
316
+ return {
317
+ success: false,
318
+ message: `Failed to create lesson: ${error.message}`,
319
+ };
320
+ }
321
+ }
322
+ /** List all lessons and folders in a course (from sidebar DOM) */
323
+ async listLessons(groupSlug, courseName) {
324
+ try {
325
+ const page = await this.browser.getPage();
326
+ // Navigate to classroom and enter course
327
+ await this.ops.gotoClassroom(groupSlug);
328
+ if (courseName) {
329
+ await page.getByText(courseName, { exact: false }).first().click();
330
+ }
331
+ else {
332
+ const link = page.locator('a[href*="/classroom/"]').first();
333
+ if ((await link.count()) > 0)
334
+ await link.click();
335
+ }
336
+ await page.waitForTimeout(3000);
337
+ // Extract structure from sidebar DOM
338
+ // Folders have class MenuItemTitle with a chevron (expandable)
339
+ // Lessons are links inside expanded folders or at course root
340
+ const items = await page.evaluate(() => {
341
+ const result = [];
342
+ // All items in the sidebar menu
343
+ const wrappers = document.querySelectorAll('div[class*="MenuItemWrapper"]');
344
+ let currentFolder = null;
345
+ wrappers.forEach((wrapper) => {
346
+ const titleEl = wrapper.querySelector('div[class*="MenuItemTitle"]');
347
+ const name = titleEl?.textContent?.trim() || "";
348
+ if (!name)
349
+ return;
350
+ // Check if this is a folder (has SetMenuItem children or is a "set" type)
351
+ // Folders have a chevron (expand/collapse) indicator
352
+ const hasChevron = wrapper.querySelector('svg, [class*="Chevron"], [class*="arrow"]') !== null;
353
+ const setItems = wrapper.querySelector('div[class*="SetMenuItem"]');
354
+ // A folder is an item that contains other items
355
+ // In the DOM: folders are top-level MenuItemWrapper with child SetMenuItem items
356
+ if (setItems || wrapper.classList.toString().includes("SetMenuItem") === false) {
357
+ // Check if this item has children (is expanded with lessons underneath)
358
+ const childContainer = wrapper.querySelector('div[class*="SetMenuItem"]');
359
+ if (childContainer) {
360
+ // This is a folder with visible children
361
+ currentFolder = { name, type: "folder", children: [] };
362
+ // Children are links inside this wrapper
363
+ const childLinks = wrapper.querySelectorAll('a[href*="/classroom/"]');
364
+ childLinks.forEach((link) => {
365
+ const childName = link.textContent?.trim() || "";
366
+ if (childName && childName !== name) {
367
+ currentFolder.children.push({ name: childName });
368
+ }
369
+ });
370
+ result.push(currentFolder);
371
+ currentFolder = null;
372
+ }
373
+ else {
374
+ // Standalone item (could be a collapsed folder or a root-level lesson)
375
+ // Check if it has a link (lessons have links, folders don't always)
376
+ const link = wrapper.querySelector('a[href*="/classroom/"]');
377
+ if (link) {
378
+ result.push({ name, type: "lesson" });
379
+ }
380
+ else {
381
+ // Collapsed folder (no children visible)
382
+ result.push({ name, type: "folder", children: [] });
383
+ }
384
+ }
385
+ }
386
+ });
387
+ return result;
388
+ });
389
+ return { success: true, message: `Found ${items.length} items`, items };
390
+ }
391
+ catch (error) {
392
+ return {
393
+ success: false,
394
+ message: `Failed to list lessons: ${error.message}`,
395
+ items: [],
396
+ };
397
+ }
398
+ }
399
+ /** Delete a lesson or folder by ID */
400
+ async deleteLesson(pageId) {
401
+ try {
402
+ const success = await this.api.deletePage(pageId);
403
+ return {
404
+ success,
405
+ message: success
406
+ ? `Deleted successfully. ID: ${pageId}`
407
+ : `Delete failed for ID: ${pageId}`,
408
+ };
409
+ }
410
+ catch (error) {
411
+ return {
412
+ success: false,
413
+ message: `Failed to delete: ${error.message}`,
414
+ };
415
+ }
416
+ }
417
+ // ----------------------------------------------------------
418
+ // Community
419
+ // ----------------------------------------------------------
420
+ /** Create a community post */
421
+ async createPost(options) {
422
+ // Check auth first
423
+ await this.ops.gotoCommunity(options.group);
424
+ const authenticated = await this.ops.isAuthenticated();
425
+ if (!authenticated) {
426
+ return {
427
+ success: false,
428
+ message: "Not authenticated. Run: skool login",
429
+ };
430
+ }
431
+ try {
432
+ await this.ops.createCommunityPost(options.group, options.title, options.body, options.category);
433
+ return {
434
+ success: true,
435
+ message: `Post "${options.title}" created successfully.`,
436
+ };
437
+ }
438
+ catch (error) {
439
+ return {
440
+ success: false,
441
+ message: `Failed to create post: ${error.message}`,
442
+ };
443
+ }
444
+ }
445
+ /** Get posts from a community */
446
+ async getPosts(groupSlug) {
447
+ try {
448
+ const raw = await this.ops.extractPosts(groupSlug);
449
+ const posts = raw.map((p) => ({
450
+ title: p.title,
451
+ author: p.author,
452
+ category: p.category,
453
+ likes: 0,
454
+ comments: 0,
455
+ preview: p.preview,
456
+ url: p.url,
457
+ }));
458
+ return { success: true, posts };
459
+ }
460
+ catch (error) {
461
+ return { success: false, posts: [] };
462
+ }
463
+ }
464
+ /** Get categories from a community */
465
+ async getCategories(groupSlug) {
466
+ try {
467
+ const categories = await this.ops.extractCategories(groupSlug);
468
+ return { success: true, categories };
469
+ }
470
+ catch {
471
+ return { success: false, categories: [] };
472
+ }
473
+ }
474
+ // ----------------------------------------------------------
475
+ // Members
476
+ // ----------------------------------------------------------
477
+ /** Get members from a community */
478
+ async getMembers(groupSlug, search) {
479
+ try {
480
+ const raw = await this.ops.extractMembers(groupSlug, search);
481
+ const members = raw.map((m) => ({
482
+ name: m.name,
483
+ level: m.level,
484
+ points: 0,
485
+ contributions: m.contributions,
486
+ }));
487
+ return { success: true, members };
488
+ }
489
+ catch {
490
+ return { success: false, members: [] };
491
+ }
492
+ }
493
+ // ----------------------------------------------------------
494
+ // Lifecycle
495
+ // ----------------------------------------------------------
496
+ /** Close the browser and cleanup */
497
+ async close() {
498
+ await this.browser.close();
499
+ }
500
+ }
501
+ //# sourceMappingURL=skool-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skool-client.js","sourceRoot":"","sources":["../../src/core/skool-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /** Skool community post */
2
+ export interface SkoolPost {
3
+ title: string;
4
+ author: string;
5
+ category: string;
6
+ likes: number;
7
+ comments: number;
8
+ preview: string;
9
+ url: string;
10
+ }
11
+ /** Skool community member */
12
+ export interface SkoolMember {
13
+ name: string;
14
+ level: number;
15
+ points: number;
16
+ contributions: number;
17
+ }
18
+ /** Skool course info */
19
+ export interface SkoolCourse {
20
+ name: string;
21
+ modules: SkoolModule[];
22
+ }
23
+ /** Skool module (folder) in a course */
24
+ export interface SkoolModule {
25
+ name: string;
26
+ lessons: string[];
27
+ }
28
+ /** Options for creating a lesson */
29
+ export interface CreateLessonOptions {
30
+ group: string;
31
+ module: string;
32
+ title: string;
33
+ course?: string;
34
+ folder?: string;
35
+ folderId?: string;
36
+ htmlContent?: string;
37
+ markdownContent?: string;
38
+ filePath?: string;
39
+ }
40
+ /** Options for creating a folder */
41
+ export interface CreateFolderOptions {
42
+ group: string;
43
+ title: string;
44
+ course?: string;
45
+ }
46
+ /** Options for creating a post */
47
+ export interface CreatePostOptions {
48
+ group: string;
49
+ title: string;
50
+ body: string;
51
+ category?: string;
52
+ }
53
+ /** Result of an operation */
54
+ export interface OperationResult {
55
+ success: boolean;
56
+ message: string;
57
+ }
58
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,6BAA6B;AAC7B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAwB;AACxB,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,oCAAoC;AACpC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,kCAAkC;AAClC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,6BAA6B;AAC7B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "skool-cli",
3
+ "version": "1.0.0",
4
+ "description": "CLI and programmatic API for Skool.com automation — create lessons, posts, and manage communities via browser automation",
5
+ "type": "module",
6
+ "main": "dist/core/skool-client.js",
7
+ "types": "dist/core/skool-client.d.ts",
8
+ "bin": {
9
+ "skool": "dist/cli.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/core/skool-client.js",
14
+ "types": "./dist/core/skool-client.d.ts"
15
+ }
16
+ },
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "dev": "tsc --watch",
20
+ "start": "node dist/cli.js"
21
+ },
22
+ "keywords": [
23
+ "skool",
24
+ "cli",
25
+ "automation",
26
+ "playwright",
27
+ "classroom",
28
+ "community",
29
+ "education",
30
+ "mcp",
31
+ "ai-tools"
32
+ ],
33
+ "author": "UNIKPROMPT Technologies LLC",
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/unikprompt/skool-cli"
38
+ },
39
+ "homepage": "https://unikprompt.com",
40
+ "dependencies": {
41
+ "commander": "^13.1.0",
42
+ "playwright": "^1.52.0"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^22.0.0",
46
+ "typescript": "^5.7.0"
47
+ },
48
+ "engines": {
49
+ "node": ">=18.0.0"
50
+ }
51
+ }