@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 +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +245 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/uploader-client.d.ts +102 -0
- package/dist/client/uploader-client.d.ts.map +1 -0
- package/dist/client/uploader-client.js +398 -0
- package/dist/client/uploader-client.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +289 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +85 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +58 -0
package/dist/cli.d.ts
ADDED
|
@@ -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
|
package/dist/cli.js.map
ADDED
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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":"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"}
|
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
|
+
}
|