@package-uploader/core 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.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,245 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const uploader_client_1 = require("./client/uploader-client");
41
+ const program = new commander_1.Command();
42
+ program
43
+ .name('package-upload')
44
+ .description('Upload Rise courses to LMS with auto-patching')
45
+ .version('1.0.0');
46
+ // =============================================================================
47
+ // Upload Command
48
+ // =============================================================================
49
+ program
50
+ .command('upload')
51
+ .description('Upload a course ZIP to LMS')
52
+ .argument('<file>', 'Path to the course ZIP file')
53
+ .requiredOption('-f, --folder <id>', 'Target folder ID in LMS')
54
+ .option('-e, --external-id <id>', 'External ID for upsert behavior')
55
+ .option('-t, --title <title>', 'Document title')
56
+ .option('-d, --description <desc>', 'Document description')
57
+ .option('-a, --author <author>', 'Document author')
58
+ .option('-l, --language <lang>', 'Language code (e.g., en-US)')
59
+ .option('-n, --note <note>', 'Version note')
60
+ .option('--async', 'Upload asynchronously')
61
+ .option('--skip-patch', 'Skip patch-adams patching')
62
+ .option('--wait', 'Wait for async upload to complete')
63
+ .action(async (file, options) => {
64
+ try {
65
+ const config = loadConfig();
66
+ const client = new uploader_client_1.PackageUploaderClient(config);
67
+ const filePath = path.resolve(file);
68
+ if (!fs.existsSync(filePath)) {
69
+ console.error(`Error: File not found: ${filePath}`);
70
+ process.exit(1);
71
+ }
72
+ const fileBuffer = fs.readFileSync(filePath);
73
+ const filename = path.basename(filePath);
74
+ console.log(`Uploading ${filename} to folder ${options.folder}...`);
75
+ const result = await client.uploadCourse(fileBuffer, filename, {
76
+ folderId: options.folder,
77
+ externalId: options.externalId,
78
+ title: options.title,
79
+ description: options.description,
80
+ author: options.author,
81
+ language: options.language,
82
+ note: options.note,
83
+ async: options.async,
84
+ skipPatch: options.skipPatch,
85
+ });
86
+ // If async with --wait, poll for completion
87
+ if (options.async && options.wait && result.jobId) {
88
+ console.log(`Upload started (job: ${result.jobId}). Waiting...`);
89
+ const finalResult = await client.waitForUpload(result.jobId);
90
+ printResult(finalResult);
91
+ }
92
+ else {
93
+ printResult(result);
94
+ }
95
+ }
96
+ catch (error) {
97
+ console.error('Error:', error.message);
98
+ process.exit(1);
99
+ }
100
+ });
101
+ // =============================================================================
102
+ // Update Command (upload new version)
103
+ // =============================================================================
104
+ program
105
+ .command('update')
106
+ .description('Upload a new version to an existing document')
107
+ .argument('<file>', 'Path to the course ZIP file')
108
+ .requiredOption('-i, --document-id <id>', 'Target document ID in LMS')
109
+ .option('-n, --note <note>', 'Version note')
110
+ .option('-d, --description <desc>', 'Document description')
111
+ .option('-a, --author <author>', 'Document author')
112
+ .option('--async', 'Upload asynchronously')
113
+ .option('--skip-patch', 'Skip patch-adams patching')
114
+ .option('--wait', 'Wait for async upload to complete')
115
+ .action(async (file, options) => {
116
+ try {
117
+ const config = loadConfig();
118
+ const client = new uploader_client_1.PackageUploaderClient(config);
119
+ const filePath = path.resolve(file);
120
+ if (!fs.existsSync(filePath)) {
121
+ console.error(`Error: File not found: ${filePath}`);
122
+ process.exit(1);
123
+ }
124
+ const fileBuffer = fs.readFileSync(filePath);
125
+ const filename = path.basename(filePath);
126
+ console.log(`Uploading new version to document ${options.documentId}...`);
127
+ const result = await client.uploadVersion(fileBuffer, filename, {
128
+ documentId: options.documentId,
129
+ note: options.note,
130
+ description: options.description,
131
+ author: options.author,
132
+ async: options.async,
133
+ skipPatch: options.skipPatch,
134
+ });
135
+ // If async with --wait, poll for completion
136
+ if (options.async && options.wait && result.jobId) {
137
+ console.log(`Upload started (job: ${result.jobId}). Waiting...`);
138
+ const finalResult = await client.waitForUpload(result.jobId);
139
+ printResult(finalResult);
140
+ }
141
+ else {
142
+ printResult(result);
143
+ }
144
+ }
145
+ catch (error) {
146
+ console.error('Error:', error.message);
147
+ process.exit(1);
148
+ }
149
+ });
150
+ // =============================================================================
151
+ // Status Command
152
+ // =============================================================================
153
+ program
154
+ .command('status')
155
+ .description('Check the status of an async upload')
156
+ .argument('<jobId>', 'The job ID from an async upload')
157
+ .action(async (jobId) => {
158
+ try {
159
+ const config = loadConfig();
160
+ const client = new uploader_client_1.PackageUploaderClient(config);
161
+ const status = await client.getUploadStatus(jobId);
162
+ console.log('Job Status:', JSON.stringify(status, null, 2));
163
+ }
164
+ catch (error) {
165
+ console.error('Error:', error.message);
166
+ process.exit(1);
167
+ }
168
+ });
169
+ // =============================================================================
170
+ // Init Command
171
+ // =============================================================================
172
+ program
173
+ .command('init')
174
+ .description('Create a configuration file')
175
+ .action(() => {
176
+ const configPath = path.resolve('uploader.config.json');
177
+ if (fs.existsSync(configPath)) {
178
+ console.error('Error: uploader.config.json already exists');
179
+ process.exit(1);
180
+ }
181
+ const defaultConfig = {
182
+ baseUrl: 'https://your-lms-instance.com',
183
+ apiKey: 'YOUR_API_KEY_HERE',
184
+ timeout: 30000,
185
+ patchAdams: {
186
+ enabled: true,
187
+ remoteDomain: 'https://your-patch-server.com',
188
+ },
189
+ };
190
+ fs.writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));
191
+ console.log('Created uploader.config.json');
192
+ console.log('Edit this file with your LMS API credentials.');
193
+ });
194
+ // =============================================================================
195
+ // Helpers
196
+ // =============================================================================
197
+ function loadConfig() {
198
+ // Check for config file
199
+ const configPath = path.resolve('uploader.config.json');
200
+ if (fs.existsSync(configPath)) {
201
+ const configContent = fs.readFileSync(configPath, 'utf-8');
202
+ return JSON.parse(configContent);
203
+ }
204
+ // Check for environment variables
205
+ if (process.env.UPLOADER_BASE_URL && process.env.UPLOADER_API_KEY) {
206
+ return {
207
+ baseUrl: process.env.UPLOADER_BASE_URL,
208
+ apiKey: process.env.UPLOADER_API_KEY,
209
+ timeout: parseInt(process.env.UPLOADER_TIMEOUT ?? '30000', 10),
210
+ patchAdams: process.env.PATCH_ADAMS_DOMAIN
211
+ ? {
212
+ enabled: true,
213
+ remoteDomain: process.env.PATCH_ADAMS_DOMAIN,
214
+ }
215
+ : undefined,
216
+ };
217
+ }
218
+ console.error('Error: No configuration found.');
219
+ console.error('Run `package-upload init` to create a config file,');
220
+ console.error('or set UPLOADER_BASE_URL and UPLOADER_API_KEY env vars.');
221
+ process.exit(1);
222
+ }
223
+ function printResult(result) {
224
+ if (result.success) {
225
+ console.log('\n✓ Upload successful!');
226
+ console.log(` Document ID: ${result.documentId}`);
227
+ console.log(` Version ID: ${result.versionId}`);
228
+ console.log(` Folder ID: ${result.folderId}`);
229
+ console.log(` Name: ${result.documentName}`);
230
+ if (result.updated) {
231
+ console.log(' (Updated existing document)');
232
+ }
233
+ if (result.warnings.length > 0) {
234
+ console.log('\n Warnings:');
235
+ result.warnings.forEach((w) => console.log(` - ${w}`));
236
+ }
237
+ }
238
+ else {
239
+ console.error('\n✗ Upload failed!');
240
+ result.errors.forEach((e) => console.error(` - ${e}`));
241
+ process.exit(1);
242
+ }
243
+ }
244
+ program.parse();
245
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { UploaderConfig, UploadOptions, VersionUploadOptions, JobStatus, CourseUploadResult, Folder, FolderListOptions, Document, DocumentListOptions, SharedLink, CreateSharedLinkOptions } from '../types';
2
+ /**
3
+ * Client for uploading course packages to LMS platforms
4
+ */
5
+ export declare class PackageUploaderClient {
6
+ private config;
7
+ private patcher;
8
+ private patcherInitialized;
9
+ private patcherInitPromise;
10
+ constructor(config: UploaderConfig);
11
+ /**
12
+ * Initialize patch-adams if configured (lazy initialization)
13
+ */
14
+ private initPatcher;
15
+ /**
16
+ * Build headers for API requests
17
+ */
18
+ private getHeaders;
19
+ /**
20
+ * Make an API request to the LMS
21
+ */
22
+ private request;
23
+ /**
24
+ * Patch a ZIP buffer if patcher is available
25
+ */
26
+ private maybePatch;
27
+ /**
28
+ * Build query string from options
29
+ */
30
+ private buildQueryString;
31
+ /**
32
+ * Upload a course to a folder
33
+ */
34
+ uploadCourse(fileBuffer: Buffer, filename: string, options: UploadOptions): Promise<CourseUploadResult>;
35
+ /**
36
+ * Upload a new version to an existing document
37
+ */
38
+ uploadVersion(fileBuffer: Buffer, filename: string, options: VersionUploadOptions): Promise<CourseUploadResult>;
39
+ /**
40
+ * Check the status of an async upload
41
+ */
42
+ getUploadStatus(jobId: string): Promise<JobStatus>;
43
+ /**
44
+ * Poll for async upload completion
45
+ */
46
+ waitForUpload(jobId: string, options?: {
47
+ pollInterval?: number;
48
+ maxWait?: number;
49
+ }): Promise<CourseUploadResult>;
50
+ /**
51
+ * Map API response to simplified result
52
+ */
53
+ private mapUploadResult;
54
+ /**
55
+ * List all accessible folders
56
+ */
57
+ listFolders(options?: FolderListOptions): Promise<Folder[]>;
58
+ /**
59
+ * Get a specific folder by ID
60
+ */
61
+ getFolder(folderId: string | number): Promise<Folder>;
62
+ /**
63
+ * List subfolders of a folder
64
+ */
65
+ listSubfolders(folderId: string | number, options?: FolderListOptions & {
66
+ nested?: boolean;
67
+ folderPath?: boolean;
68
+ }): Promise<Folder[]>;
69
+ /**
70
+ * List all accessible documents
71
+ */
72
+ listDocuments(options?: DocumentListOptions): Promise<Document[]>;
73
+ /**
74
+ * List documents in a specific folder
75
+ */
76
+ listFolderDocuments(folderId: string | number, options?: DocumentListOptions): Promise<Document[]>;
77
+ /**
78
+ * Get a specific document by ID
79
+ */
80
+ getDocument(documentId: string | number): Promise<Document>;
81
+ /**
82
+ * Get document versions
83
+ */
84
+ getDocumentVersions(documentId: string | number): Promise<Document['latestVersion'][]>;
85
+ /**
86
+ * List shared links for a document
87
+ */
88
+ listSharedLinks(documentId: string | number): Promise<SharedLink[]>;
89
+ /**
90
+ * Create a shared link for a document
91
+ */
92
+ createSharedLink(documentId: string | number, options: CreateSharedLinkOptions): Promise<SharedLink>;
93
+ /**
94
+ * Build the launch URL for a shared link
95
+ */
96
+ buildLaunchUrl(sharedLink: SharedLink): string;
97
+ /**
98
+ * Get or create a public shared link for launching a course
99
+ */
100
+ getOrCreateLaunchLink(documentId: string | number): Promise<string>;
101
+ }
102
+ //# sourceMappingURL=uploader-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader-client.d.ts","sourceRoot":"","sources":["../../src/client/uploader-client.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EAEd,aAAa,EAEb,oBAAoB,EAGpB,SAAS,EACT,kBAAkB,EAClB,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,mBAAmB,EACnB,UAAU,EACV,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAOlB;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,kBAAkB,CAAkB;IAC5C,OAAO,CAAC,kBAAkB,CAA8B;gBAE5C,MAAM,EAAE,cAAc;IAIlC;;OAEG;YACW,WAAW;IA8CzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;YACW,OAAO;IAsCrB;;OAEG;YACW,UAAU;IAmBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;OAEG;IACG,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,kBAAkB,CAAC;IAyC9B;;OAEG;IACG,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IAqC9B;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAOxD;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACxD,OAAO,CAAC,kBAAkB,CAAC;IA0C9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;OAEG;IACG,WAAW,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKrE;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI3D;;OAEG;IACG,cAAc,CAClB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,GAAE,iBAAiB,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAC3E,OAAO,CAAC,MAAM,EAAE,CAAC;IAYpB;;OAEG;IACG,aAAa,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAQ3E;;OAEG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,QAAQ,EAAE,CAAC;IAQtB;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAOjE;;OAEG;IACG,mBAAmB,CACvB,UAAU,EAAE,MAAM,GAAG,MAAM,GAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;IAWvC;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOzE;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,GAAG,MAAM,EAC3B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,UAAU,CAAC;IAStB;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IAI9C;;OAEG;IACG,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAsB1E"}
@@ -0,0 +1,398 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.PackageUploaderClient = void 0;
40
+ const form_data_1 = __importDefault(require("form-data"));
41
+ const types_1 = require("../types");
42
+ /**
43
+ * Client for uploading course packages to LMS platforms
44
+ */
45
+ class PackageUploaderClient {
46
+ config;
47
+ patcher = null;
48
+ patcherInitialized = false;
49
+ patcherInitPromise = null;
50
+ constructor(config) {
51
+ this.config = types_1.UploaderConfigSchema.parse(config);
52
+ }
53
+ /**
54
+ * Initialize patch-adams if configured (lazy initialization)
55
+ */
56
+ async initPatcher() {
57
+ if (this.patcherInitialized)
58
+ return;
59
+ if (this.patcherInitPromise) {
60
+ return this.patcherInitPromise;
61
+ }
62
+ this.patcherInitPromise = (async () => {
63
+ if (this.config.patchAdams?.enabled) {
64
+ try {
65
+ // Dynamic import to handle optional peer dependency
66
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
67
+ const patchAdamsCore = await Promise.resolve().then(() => __importStar(require('@patch-adams/core'))).catch(() => null);
68
+ if (patchAdamsCore) {
69
+ const { Patcher } = patchAdamsCore;
70
+ this.patcher = new Patcher({
71
+ remoteDomain: this.config.patchAdams.remoteDomain,
72
+ htmlClass: 'pa-patched',
73
+ loadingClass: 'pa-loading',
74
+ cssBefore: { filename: 'before.css', enabled: true },
75
+ cssAfter: { filename: 'after.css', enabled: true, timeout: 5000 },
76
+ jsBefore: { filename: 'before.js', enabled: true },
77
+ jsAfter: { filename: 'after.js', enabled: true, timeout: 5000 },
78
+ localFolders: { css: 'css', js: 'js' },
79
+ updateManifests: true,
80
+ });
81
+ console.log('[PackageUploader] patch-adams integration enabled');
82
+ }
83
+ else {
84
+ console.warn('[PackageUploader] @patch-adams/core not found. Patching disabled.');
85
+ }
86
+ }
87
+ catch (error) {
88
+ console.warn('[PackageUploader] @patch-adams/core not found. Patching disabled.');
89
+ this.patcher = null;
90
+ }
91
+ }
92
+ this.patcherInitialized = true;
93
+ })();
94
+ return this.patcherInitPromise;
95
+ }
96
+ /**
97
+ * Build headers for API requests
98
+ */
99
+ getHeaders(contentType) {
100
+ const headers = {
101
+ Authorization: `Bearer ${this.config.apiKey}`,
102
+ };
103
+ if (contentType) {
104
+ headers['Content-Type'] = contentType;
105
+ }
106
+ return headers;
107
+ }
108
+ /**
109
+ * Make an API request to the LMS
110
+ */
111
+ async request(method, path, body, headers) {
112
+ const url = `${this.config.baseUrl}${path}`;
113
+ const controller = new AbortController();
114
+ const timeout = setTimeout(() => controller.abort(), this.config.timeout);
115
+ try {
116
+ const requestHeaders = {
117
+ ...this.getHeaders(),
118
+ ...headers,
119
+ ...(body instanceof form_data_1.default ? body.getHeaders() : {}),
120
+ };
121
+ const response = await fetch(url, {
122
+ method,
123
+ headers: requestHeaders,
124
+ body: body,
125
+ signal: controller.signal,
126
+ });
127
+ if (!response.ok) {
128
+ const errorText = await response.text();
129
+ throw new Error(`API error: ${response.status} ${response.statusText} - ${errorText}`);
130
+ }
131
+ return (await response.json());
132
+ }
133
+ finally {
134
+ clearTimeout(timeout);
135
+ }
136
+ }
137
+ /**
138
+ * Patch a ZIP buffer if patcher is available
139
+ */
140
+ async maybePatch(buffer, skipPatch) {
141
+ if (skipPatch || !this.patcher) {
142
+ return buffer;
143
+ }
144
+ // Wait for patcher initialization
145
+ await this.initPatcher();
146
+ if (this.patcher) {
147
+ console.log('[PackageUploader] Patching course with patch-adams...');
148
+ return await this.patcher.patchBuffer(buffer);
149
+ }
150
+ return buffer;
151
+ }
152
+ /**
153
+ * Build query string from options
154
+ */
155
+ buildQueryString(params) {
156
+ const searchParams = new URLSearchParams();
157
+ for (const [key, value] of Object.entries(params)) {
158
+ if (value !== undefined && value !== null) {
159
+ searchParams.append(key, String(value));
160
+ }
161
+ }
162
+ const queryString = searchParams.toString();
163
+ return queryString ? `?${queryString}` : '';
164
+ }
165
+ /**
166
+ * Upload a course to a folder
167
+ */
168
+ async uploadCourse(fileBuffer, filename, options) {
169
+ const opts = types_1.UploadOptionsSchema.parse(options);
170
+ // Patch the course if enabled
171
+ const processedBuffer = await this.maybePatch(fileBuffer, opts.skipPatch ?? false);
172
+ // Build form data
173
+ const form = new form_data_1.default();
174
+ form.append('file', processedBuffer, {
175
+ filename,
176
+ contentType: 'application/zip',
177
+ });
178
+ // Build query parameters
179
+ const queryParams = {
180
+ externalId: opts.externalId,
181
+ title: opts.title,
182
+ description: opts.description,
183
+ author: opts.author,
184
+ language: opts.language,
185
+ resourceType: opts.resourceType,
186
+ activationDate: opts.activationDate,
187
+ dateExpired: opts.dateExpired,
188
+ note: opts.note,
189
+ useCDN: opts.useCDN,
190
+ indexFile: opts.indexFile,
191
+ async: opts.async,
192
+ sendEmail: opts.sendEmail,
193
+ };
194
+ const queryString = this.buildQueryString(queryParams);
195
+ const path = `/api/v3/upload/toFolder/${opts.folderId}${queryString}`;
196
+ const response = await this.request('POST', path, form);
197
+ return this.mapUploadResult(response, opts.async);
198
+ }
199
+ /**
200
+ * Upload a new version to an existing document
201
+ */
202
+ async uploadVersion(fileBuffer, filename, options) {
203
+ const opts = types_1.VersionUploadOptionsSchema.parse(options);
204
+ // Patch the course if enabled
205
+ const processedBuffer = await this.maybePatch(fileBuffer, opts.skipPatch ?? false);
206
+ // Build form data
207
+ const form = new form_data_1.default();
208
+ form.append('file', processedBuffer, {
209
+ filename,
210
+ contentType: 'application/zip',
211
+ });
212
+ // Build query parameters
213
+ const queryParams = {
214
+ note: opts.note,
215
+ description: opts.description,
216
+ author: opts.author,
217
+ language: opts.language,
218
+ resourceType: opts.resourceType,
219
+ useCDN: opts.useCDN,
220
+ indexFile: opts.indexFile,
221
+ async: opts.async,
222
+ sendEmail: opts.sendEmail,
223
+ };
224
+ const queryString = this.buildQueryString(queryParams);
225
+ const path = `/api/v3/upload/toDocument/${opts.documentId}${queryString}`;
226
+ const response = await this.request('POST', path, form);
227
+ return this.mapUploadResult(response, opts.async);
228
+ }
229
+ /**
230
+ * Check the status of an async upload
231
+ */
232
+ async getUploadStatus(jobId) {
233
+ return await this.request('GET', `/api/v3/upload/status/${jobId}`);
234
+ }
235
+ /**
236
+ * Poll for async upload completion
237
+ */
238
+ async waitForUpload(jobId, options = {}) {
239
+ const pollInterval = options.pollInterval ?? 2000;
240
+ const maxWait = options.maxWait ?? 300000; // 5 minutes default
241
+ const startTime = Date.now();
242
+ while (Date.now() - startTime < maxWait) {
243
+ const status = await this.getUploadStatus(jobId);
244
+ if (status.status === 'COMPLETED' && status.result) {
245
+ return {
246
+ success: true,
247
+ documentId: status.result.documents[0] ?? null,
248
+ versionId: status.result.documentVersions[0] ?? null,
249
+ documentName: status.result.documentName,
250
+ folderId: status.result.folderId,
251
+ updated: status.result.updated ?? false,
252
+ warnings: status.result.warnings.map((w) => w.name),
253
+ errors: [],
254
+ };
255
+ }
256
+ if (status.status === 'FAILED') {
257
+ return {
258
+ success: false,
259
+ documentId: null,
260
+ versionId: null,
261
+ documentName: '',
262
+ folderId: 0,
263
+ updated: false,
264
+ warnings: [],
265
+ errors: [status.error ?? 'Upload failed'],
266
+ };
267
+ }
268
+ // Wait before polling again
269
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
270
+ }
271
+ throw new Error(`Upload timed out after ${maxWait}ms`);
272
+ }
273
+ /**
274
+ * Map API response to simplified result
275
+ */
276
+ mapUploadResult(response, isAsync) {
277
+ const result = response.value;
278
+ // For async uploads, the response contains a job ID
279
+ if (isAsync && result.jobId) {
280
+ return {
281
+ success: true,
282
+ documentId: null,
283
+ versionId: null,
284
+ documentName: '',
285
+ folderId: 0,
286
+ updated: false,
287
+ warnings: [],
288
+ errors: [],
289
+ jobId: result.jobId,
290
+ };
291
+ }
292
+ return {
293
+ success: result.errors.length === 0,
294
+ documentId: result.documents[0] ?? null,
295
+ versionId: result.documentVersions[0] ?? null,
296
+ documentName: result.documentName,
297
+ folderId: result.folderId,
298
+ updated: result.updated ?? false,
299
+ warnings: result.warnings.map((w) => w.name),
300
+ errors: result.errors.map((e) => e.name),
301
+ };
302
+ }
303
+ // ===========================================================================
304
+ // FOLDER METHODS
305
+ // ===========================================================================
306
+ /**
307
+ * List all accessible folders
308
+ */
309
+ async listFolders(options = {}) {
310
+ const queryString = this.buildQueryString(options);
311
+ return await this.request('GET', `/api/v3/folders${queryString}`);
312
+ }
313
+ /**
314
+ * Get a specific folder by ID
315
+ */
316
+ async getFolder(folderId) {
317
+ return await this.request('GET', `/api/v3/folders/${folderId}`);
318
+ }
319
+ /**
320
+ * List subfolders of a folder
321
+ */
322
+ async listSubfolders(folderId, options = {}) {
323
+ const queryString = this.buildQueryString(options);
324
+ return await this.request('GET', `/api/v3/folders/${folderId}/subfolders${queryString}`);
325
+ }
326
+ // ===========================================================================
327
+ // DOCUMENT METHODS
328
+ // ===========================================================================
329
+ /**
330
+ * List all accessible documents
331
+ */
332
+ async listDocuments(options = {}) {
333
+ const queryString = this.buildQueryString(options);
334
+ return await this.request('GET', `/api/v3/documents${queryString}`);
335
+ }
336
+ /**
337
+ * List documents in a specific folder
338
+ */
339
+ async listFolderDocuments(folderId, options = {}) {
340
+ const queryString = this.buildQueryString(options);
341
+ return await this.request('GET', `/api/v3/folders/${folderId}/documents${queryString}`);
342
+ }
343
+ /**
344
+ * Get a specific document by ID
345
+ */
346
+ async getDocument(documentId) {
347
+ return await this.request('GET', `/api/v3/documents/${documentId}`);
348
+ }
349
+ /**
350
+ * Get document versions
351
+ */
352
+ async getDocumentVersions(documentId) {
353
+ return await this.request('GET', `/api/v3/documents/${documentId}/versions`);
354
+ }
355
+ // ===========================================================================
356
+ // SHARED LINK METHODS
357
+ // ===========================================================================
358
+ /**
359
+ * List shared links for a document
360
+ */
361
+ async listSharedLinks(documentId) {
362
+ return await this.request('GET', `/api/v3/documents/${documentId}/sharedLinks`);
363
+ }
364
+ /**
365
+ * Create a shared link for a document
366
+ */
367
+ async createSharedLink(documentId, options) {
368
+ return await this.request('POST', `/api/v3/documents/${documentId}/sharedLinks`, JSON.stringify(options), { 'Content-Type': 'application/json' });
369
+ }
370
+ /**
371
+ * Build the launch URL for a shared link
372
+ */
373
+ buildLaunchUrl(sharedLink) {
374
+ return `${this.config.baseUrl}/api/shared/${sharedLink.token}/content`;
375
+ }
376
+ /**
377
+ * Get or create a public shared link for launching a course
378
+ */
379
+ async getOrCreateLaunchLink(documentId) {
380
+ const existingLinks = await this.listSharedLinks(documentId);
381
+ // Look for an existing public link
382
+ const publicLink = existingLinks.find((link) => link.isPublic && link.enabled);
383
+ if (publicLink) {
384
+ return this.buildLaunchUrl(publicLink);
385
+ }
386
+ // Create a new public link
387
+ const newLink = await this.createSharedLink(documentId, {
388
+ name: `Public Link - ${new Date().toISOString()}`,
389
+ isPublic: true,
390
+ openInIframe: true,
391
+ isForThinPackage: false,
392
+ isIntegration: false,
393
+ });
394
+ return this.buildLaunchUrl(newLink);
395
+ }
396
+ }
397
+ exports.PackageUploaderClient = PackageUploaderClient;
398
+ //# sourceMappingURL=uploader-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader-client.js","sourceRoot":"","sources":["../../src/client/uploader-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { PackageUploaderClient } from './client/uploader-client';
2
+ export type { UploaderConfig, UploadOptions, VersionUploadOptions, UploadResult, UploadResponse, JobStatus, CourseUploadResult, IssueMessage, Folder, FolderListOptions, Document, DocumentVersion, DocumentListOptions, SharedLink, CreateSharedLinkOptions, Label, } from './types';
3
+ export { UploaderConfigSchema, UploadOptionsSchema, VersionUploadOptionsSchema, } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGjE,YAAY,EACV,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,uBAAuB,EACvB,KAAK,GACN,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionUploadOptionsSchema = exports.UploadOptionsSchema = exports.UploaderConfigSchema = exports.PackageUploaderClient = void 0;
4
+ // Main exports
5
+ var uploader_client_1 = require("./client/uploader-client");
6
+ Object.defineProperty(exports, "PackageUploaderClient", { enumerable: true, get: function () { return uploader_client_1.PackageUploaderClient; } });
7
+ // Schemas (for validation)
8
+ var types_1 = require("./types");
9
+ Object.defineProperty(exports, "UploaderConfigSchema", { enumerable: true, get: function () { return types_1.UploaderConfigSchema; } });
10
+ Object.defineProperty(exports, "UploadOptionsSchema", { enumerable: true, get: function () { return types_1.UploadOptionsSchema; } });
11
+ Object.defineProperty(exports, "VersionUploadOptionsSchema", { enumerable: true, get: function () { return types_1.VersionUploadOptionsSchema; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACf,4DAAiE;AAAxD,wHAAA,qBAAqB,OAAA;AAsB9B,2BAA2B;AAC3B,iCAIiB;AAHf,6GAAA,oBAAoB,OAAA;AACpB,4GAAA,mBAAmB,OAAA;AACnB,mHAAA,0BAA0B,OAAA"}
@@ -0,0 +1,289 @@
1
+ import { z } from 'zod';
2
+ export declare const UploaderConfigSchema: z.ZodObject<{
3
+ /** Base URL for the LMS API (e.g., https://lms.example.com) */
4
+ baseUrl: z.ZodString;
5
+ /** API key or Bearer token for authentication */
6
+ apiKey: z.ZodString;
7
+ /** Optional timeout in milliseconds (default: 30000) */
8
+ timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ /** Optional: Enable patch-adams integration */
10
+ patchAdams: z.ZodOptional<z.ZodObject<{
11
+ enabled: z.ZodDefault<z.ZodBoolean>;
12
+ remoteDomain: z.ZodString;
13
+ }, "strip", z.ZodTypeAny, {
14
+ enabled: boolean;
15
+ remoteDomain: string;
16
+ }, {
17
+ remoteDomain: string;
18
+ enabled?: boolean | undefined;
19
+ }>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ baseUrl: string;
22
+ apiKey: string;
23
+ timeout: number;
24
+ patchAdams?: {
25
+ enabled: boolean;
26
+ remoteDomain: string;
27
+ } | undefined;
28
+ }, {
29
+ baseUrl: string;
30
+ apiKey: string;
31
+ timeout?: number | undefined;
32
+ patchAdams?: {
33
+ remoteDomain: string;
34
+ enabled?: boolean | undefined;
35
+ } | undefined;
36
+ }>;
37
+ export type UploaderConfig = z.infer<typeof UploaderConfigSchema>;
38
+ export declare const UploadOptionsSchema: z.ZodObject<{
39
+ /** Target folder ID in LMS */
40
+ folderId: z.ZodString;
41
+ /** Optional: External ID for upsert behavior */
42
+ externalId: z.ZodOptional<z.ZodString>;
43
+ /** Optional: Document title */
44
+ title: z.ZodOptional<z.ZodString>;
45
+ /** Optional: Document description */
46
+ description: z.ZodOptional<z.ZodString>;
47
+ /** Optional: Document author */
48
+ author: z.ZodOptional<z.ZodString>;
49
+ /** Optional: Language code (e.g., 'en-US') */
50
+ language: z.ZodOptional<z.ZodString>;
51
+ /** Optional: Resource type */
52
+ resourceType: z.ZodOptional<z.ZodString>;
53
+ /** Optional: Activation date */
54
+ activationDate: z.ZodOptional<z.ZodString>;
55
+ /** Optional: Expiration date */
56
+ dateExpired: z.ZodOptional<z.ZodString>;
57
+ /** Optional: Version note */
58
+ note: z.ZodOptional<z.ZodString>;
59
+ /** Optional: Use CDN */
60
+ useCDN: z.ZodOptional<z.ZodBoolean>;
61
+ /** Optional: Index file path */
62
+ indexFile: z.ZodOptional<z.ZodString>;
63
+ /** Optional: Run upload asynchronously */
64
+ async: z.ZodOptional<z.ZodBoolean>;
65
+ /** Optional: Send email notification */
66
+ sendEmail: z.ZodOptional<z.ZodBoolean>;
67
+ /** Optional: Skip patching (upload as-is) */
68
+ skipPatch: z.ZodOptional<z.ZodBoolean>;
69
+ }, "strip", z.ZodTypeAny, {
70
+ folderId: string;
71
+ externalId?: string | undefined;
72
+ title?: string | undefined;
73
+ description?: string | undefined;
74
+ author?: string | undefined;
75
+ language?: string | undefined;
76
+ resourceType?: string | undefined;
77
+ activationDate?: string | undefined;
78
+ dateExpired?: string | undefined;
79
+ note?: string | undefined;
80
+ useCDN?: boolean | undefined;
81
+ indexFile?: string | undefined;
82
+ async?: boolean | undefined;
83
+ sendEmail?: boolean | undefined;
84
+ skipPatch?: boolean | undefined;
85
+ }, {
86
+ folderId: string;
87
+ externalId?: string | undefined;
88
+ title?: string | undefined;
89
+ description?: string | undefined;
90
+ author?: string | undefined;
91
+ language?: string | undefined;
92
+ resourceType?: string | undefined;
93
+ activationDate?: string | undefined;
94
+ dateExpired?: string | undefined;
95
+ note?: string | undefined;
96
+ useCDN?: boolean | undefined;
97
+ indexFile?: string | undefined;
98
+ async?: boolean | undefined;
99
+ sendEmail?: boolean | undefined;
100
+ skipPatch?: boolean | undefined;
101
+ }>;
102
+ export type UploadOptions = z.input<typeof UploadOptionsSchema>;
103
+ export declare const VersionUploadOptionsSchema: z.ZodObject<{
104
+ /** Document ID to upload new version to */
105
+ documentId: z.ZodString;
106
+ /** Optional: Version note */
107
+ note: z.ZodOptional<z.ZodString>;
108
+ /** Optional: Document description */
109
+ description: z.ZodOptional<z.ZodString>;
110
+ /** Optional: Document author */
111
+ author: z.ZodOptional<z.ZodString>;
112
+ /** Optional: Language code */
113
+ language: z.ZodOptional<z.ZodString>;
114
+ /** Optional: Resource type */
115
+ resourceType: z.ZodOptional<z.ZodString>;
116
+ /** Optional: Use CDN */
117
+ useCDN: z.ZodOptional<z.ZodBoolean>;
118
+ /** Optional: Index file path */
119
+ indexFile: z.ZodOptional<z.ZodString>;
120
+ /** Optional: Run upload asynchronously */
121
+ async: z.ZodOptional<z.ZodBoolean>;
122
+ /** Optional: Send email notification */
123
+ sendEmail: z.ZodOptional<z.ZodBoolean>;
124
+ /** Optional: Skip patching (upload as-is) */
125
+ skipPatch: z.ZodOptional<z.ZodBoolean>;
126
+ }, "strip", z.ZodTypeAny, {
127
+ documentId: string;
128
+ description?: string | undefined;
129
+ author?: string | undefined;
130
+ language?: string | undefined;
131
+ resourceType?: string | undefined;
132
+ note?: string | undefined;
133
+ useCDN?: boolean | undefined;
134
+ indexFile?: string | undefined;
135
+ async?: boolean | undefined;
136
+ sendEmail?: boolean | undefined;
137
+ skipPatch?: boolean | undefined;
138
+ }, {
139
+ documentId: string;
140
+ description?: string | undefined;
141
+ author?: string | undefined;
142
+ language?: string | undefined;
143
+ resourceType?: string | undefined;
144
+ note?: string | undefined;
145
+ useCDN?: boolean | undefined;
146
+ indexFile?: string | undefined;
147
+ async?: boolean | undefined;
148
+ sendEmail?: boolean | undefined;
149
+ skipPatch?: boolean | undefined;
150
+ }>;
151
+ export type VersionUploadOptions = z.input<typeof VersionUploadOptionsSchema>;
152
+ export interface UploadResult {
153
+ class: 'UploadResult';
154
+ fileId: number;
155
+ folderId: number;
156
+ documentName: string;
157
+ documents: number[];
158
+ documentVersions: number[];
159
+ numberOfLeafContentObjects: Record<string, number>;
160
+ warnings: IssueMessage[];
161
+ errors: IssueMessage[];
162
+ updated?: boolean;
163
+ }
164
+ export interface IssueMessage {
165
+ class: 'IssueMessage';
166
+ name: string;
167
+ details: string;
168
+ }
169
+ export interface UploadResponse {
170
+ value: UploadResult;
171
+ }
172
+ export interface JobStatus {
173
+ id: string;
174
+ status: 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED';
175
+ progress?: number;
176
+ result?: UploadResult;
177
+ error?: string;
178
+ }
179
+ export interface CourseUploadResult {
180
+ success: boolean;
181
+ documentId: number | null;
182
+ versionId: number | null;
183
+ documentName: string;
184
+ folderId: number;
185
+ updated: boolean;
186
+ warnings: string[];
187
+ errors: string[];
188
+ jobId?: string;
189
+ }
190
+ export interface Folder {
191
+ class: 'Folder';
192
+ id: number;
193
+ guid: string;
194
+ name: string;
195
+ parentFolderId: number | null;
196
+ spaceId: number;
197
+ dateCreated: string;
198
+ dateUpdated: string;
199
+ numberOfDocuments?: number;
200
+ numberOfSubfolders?: number;
201
+ path?: string;
202
+ }
203
+ export interface FolderListOptions {
204
+ offset?: number;
205
+ max?: number;
206
+ orderBy?: string;
207
+ orderDirection?: 'asc' | 'desc';
208
+ filterText?: string;
209
+ }
210
+ export interface DocumentVersion {
211
+ class: 'DocumentVersion';
212
+ id: number;
213
+ guid: string;
214
+ name: string;
215
+ dateCreated: string;
216
+ format: string;
217
+ resourceType: string;
218
+ lcmsOutputName?: string;
219
+ lcmsOutputGUID?: string;
220
+ }
221
+ export interface SharedLink {
222
+ class: 'SharedLink';
223
+ id: number;
224
+ token: string;
225
+ name: string;
226
+ documentId: number;
227
+ documentName: string;
228
+ folderId: number;
229
+ folderName?: string;
230
+ format: string;
231
+ state: string;
232
+ enabled: boolean;
233
+ isPublic: boolean;
234
+ isForThinPackage: boolean;
235
+ isIntegration: boolean;
236
+ openInIframe: boolean;
237
+ dateCreated: string;
238
+ dateExpired: string | null;
239
+ createdBy: string;
240
+ accessCounter: number;
241
+ labels: Label[];
242
+ }
243
+ export interface Label {
244
+ class: 'Label';
245
+ id: number;
246
+ guid: string;
247
+ name: string;
248
+ }
249
+ export interface Document {
250
+ class: 'Document';
251
+ id: number;
252
+ guid: string;
253
+ name: string;
254
+ folderId: number;
255
+ spaceId: number;
256
+ author?: string;
257
+ description?: string;
258
+ externalId?: string;
259
+ format: string;
260
+ resourceType: string;
261
+ active: boolean;
262
+ accessLevel: number;
263
+ dateCreated: string;
264
+ dateUpdated: string;
265
+ activationDate?: string;
266
+ dateExpired?: string | null;
267
+ latestVersion: DocumentVersion;
268
+ sharedLinks?: SharedLink[];
269
+ numberOfSharedLinks?: number;
270
+ }
271
+ export interface DocumentListOptions {
272
+ offset?: number;
273
+ max?: number;
274
+ orderBy?: string;
275
+ orderDirection?: 'asc' | 'desc';
276
+ filterText?: string;
277
+ includeSharedLinks?: boolean;
278
+ includeCustomAttributes?: boolean;
279
+ format?: string;
280
+ }
281
+ export interface CreateSharedLinkOptions {
282
+ name: string;
283
+ openInIframe?: boolean;
284
+ isPublic?: boolean;
285
+ isForThinPackage?: boolean;
286
+ isIntegration?: boolean;
287
+ labels?: number[];
288
+ }
289
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VersionUploadOptionsSchema = exports.UploadOptionsSchema = exports.UploaderConfigSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ // =============================================================================
6
+ // Configuration Schema
7
+ // =============================================================================
8
+ exports.UploaderConfigSchema = zod_1.z.object({
9
+ /** Base URL for the LMS API (e.g., https://lms.example.com) */
10
+ baseUrl: zod_1.z.string().url(),
11
+ /** API key or Bearer token for authentication */
12
+ apiKey: zod_1.z.string().min(1),
13
+ /** Optional timeout in milliseconds (default: 30000) */
14
+ timeout: zod_1.z.number().positive().optional().default(30000),
15
+ /** Optional: Enable patch-adams integration */
16
+ patchAdams: zod_1.z
17
+ .object({
18
+ enabled: zod_1.z.boolean().default(true),
19
+ remoteDomain: zod_1.z.string().url(),
20
+ })
21
+ .optional(),
22
+ });
23
+ // =============================================================================
24
+ // Upload Options
25
+ // =============================================================================
26
+ exports.UploadOptionsSchema = zod_1.z.object({
27
+ /** Target folder ID in LMS */
28
+ folderId: zod_1.z.string().min(1),
29
+ /** Optional: External ID for upsert behavior */
30
+ externalId: zod_1.z.string().optional(),
31
+ /** Optional: Document title */
32
+ title: zod_1.z.string().optional(),
33
+ /** Optional: Document description */
34
+ description: zod_1.z.string().optional(),
35
+ /** Optional: Document author */
36
+ author: zod_1.z.string().optional(),
37
+ /** Optional: Language code (e.g., 'en-US') */
38
+ language: zod_1.z.string().optional(),
39
+ /** Optional: Resource type */
40
+ resourceType: zod_1.z.string().optional(),
41
+ /** Optional: Activation date */
42
+ activationDate: zod_1.z.string().optional(),
43
+ /** Optional: Expiration date */
44
+ dateExpired: zod_1.z.string().optional(),
45
+ /** Optional: Version note */
46
+ note: zod_1.z.string().optional(),
47
+ /** Optional: Use CDN */
48
+ useCDN: zod_1.z.boolean().optional(),
49
+ /** Optional: Index file path */
50
+ indexFile: zod_1.z.string().optional(),
51
+ /** Optional: Run upload asynchronously */
52
+ async: zod_1.z.boolean().optional(),
53
+ /** Optional: Send email notification */
54
+ sendEmail: zod_1.z.boolean().optional(),
55
+ /** Optional: Skip patching (upload as-is) */
56
+ skipPatch: zod_1.z.boolean().optional(),
57
+ });
58
+ // =============================================================================
59
+ // Version Upload Options
60
+ // =============================================================================
61
+ exports.VersionUploadOptionsSchema = zod_1.z.object({
62
+ /** Document ID to upload new version to */
63
+ documentId: zod_1.z.string().min(1),
64
+ /** Optional: Version note */
65
+ note: zod_1.z.string().optional(),
66
+ /** Optional: Document description */
67
+ description: zod_1.z.string().optional(),
68
+ /** Optional: Document author */
69
+ author: zod_1.z.string().optional(),
70
+ /** Optional: Language code */
71
+ language: zod_1.z.string().optional(),
72
+ /** Optional: Resource type */
73
+ resourceType: zod_1.z.string().optional(),
74
+ /** Optional: Use CDN */
75
+ useCDN: zod_1.z.boolean().optional(),
76
+ /** Optional: Index file path */
77
+ indexFile: zod_1.z.string().optional(),
78
+ /** Optional: Run upload asynchronously */
79
+ async: zod_1.z.boolean().optional(),
80
+ /** Optional: Send email notification */
81
+ sendEmail: zod_1.z.boolean().optional(),
82
+ /** Optional: Skip patching (upload as-is) */
83
+ skipPatch: zod_1.z.boolean().optional(),
84
+ });
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,gFAAgF;AAChF,uBAAuB;AACvB,gFAAgF;AAEnE,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,+DAA+D;IAC/D,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IAEzB,iDAAiD;IACjD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEzB,wDAAwD;IACxD,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAExD,+CAA+C;IAC/C,UAAU,EAAE,OAAC;SACV,MAAM,CAAC;QACN,OAAO,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;KAC/B,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIH,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEnE,QAAA,mBAAmB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC1C,8BAA8B;IAC9B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE3B,gDAAgD;IAChD,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEjC,+BAA+B;IAC/B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,qCAAqC;IACrC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,gCAAgC;IAChC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B,8CAA8C;IAC9C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE/B,8BAA8B;IAC9B,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEnC,gCAAgC;IAChC,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAErC,gCAAgC;IAChC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,6BAA6B;IAC7B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE3B,wBAAwB;IACxB,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE9B,gCAAgC;IAChC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEhC,0CAA0C;IAC1C,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE7B,wCAAwC;IACxC,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAEjC,6CAA6C;IAC7C,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAIH,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEnE,QAAA,0BAA0B,GAAG,OAAC,CAAC,MAAM,CAAC;IACjD,2CAA2C;IAC3C,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7B,6BAA6B;IAC7B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE3B,qCAAqC;IACrC,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAElC,gCAAgC;IAChC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B,8BAA8B;IAC9B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE/B,8BAA8B;IAC9B,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEnC,wBAAwB;IACxB,MAAM,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE9B,gCAAgC;IAChC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEhC,0CAA0C;IAC1C,KAAK,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAE7B,wCAAwC;IACxC,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAEjC,6CAA6C;IAC7C,SAAS,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@package-uploader/core",
3
+ "version": "1.0.0",
4
+ "description": "Patch and upload Rise courses to LMS platforms",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "package-upload": "./dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "lint": "eslint src --ext .ts",
17
+ "test": "vitest",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "keywords": [
21
+ "lms",
22
+ "scorm",
23
+ "rise",
24
+ "e-learning",
25
+ "course",
26
+ "upload",
27
+ "cmi5",
28
+ "xapi"
29
+ ],
30
+ "author": "",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": ""
35
+ },
36
+ "dependencies": {
37
+ "commander": "^12.0.0",
38
+ "form-data": "^4.0.0",
39
+ "node-fetch": "^3.3.2",
40
+ "zod": "^3.22.4"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^20.11.0",
44
+ "typescript": "^5.3.3",
45
+ "vitest": "^1.2.0"
46
+ },
47
+ "peerDependencies": {
48
+ "@patch-adams/core": "^1.0.0"
49
+ },
50
+ "peerDependenciesMeta": {
51
+ "@patch-adams/core": {
52
+ "optional": true
53
+ }
54
+ },
55
+ "engines": {
56
+ "node": ">=18.0.0"
57
+ }
58
+ }