julion-cloud-google-drive 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,16 @@
1
+ import { deleteUserDriveToken } from 'julion-shared';
2
+ export declare function authenticate(): Promise<void>;
3
+ export declare function authenticateViaWebsite(): Promise<void>;
4
+ export declare function uploadSnapshot(snapshotPath: string, repositoryName?: string): Promise<{
5
+ fileId: string | null | undefined;
6
+ fileName: string | null | undefined;
7
+ repositoryName: string;
8
+ repositoryFolderId: any;
9
+ }>;
10
+ export declare function downloadSnapshot(snapshotName: string, downloadPath: string, repositoryName?: string): Promise<{
11
+ fileId: string;
12
+ fileName: string | null | undefined;
13
+ downloadedTo: string;
14
+ }>;
15
+ export { deleteUserDriveToken };
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,oBAAoB,EAQrB,MAAM,eAAe,CAAC;AAsJvB,wBAAsB,YAAY,kBAwBjC;AAED,wBAAsB,sBAAsB,kBAwB3C;AAED,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;;;;;GA0BjF;AAED,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;;;;GAkDzG;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,248 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deleteUserDriveToken = void 0;
7
+ exports.authenticate = authenticate;
8
+ exports.authenticateViaWebsite = authenticateViaWebsite;
9
+ exports.uploadSnapshot = uploadSnapshot;
10
+ exports.downloadSnapshot = downloadSnapshot;
11
+ const fs_1 = require("fs");
12
+ const os_1 = __importDefault(require("os"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const readline_1 = __importDefault(require("readline"));
15
+ const child_process_1 = require("child_process");
16
+ const googleapis_1 = require("googleapis");
17
+ const julion_shared_1 = require("julion-shared");
18
+ Object.defineProperty(exports, "deleteUserDriveToken", { enumerable: true, get: function () { return julion_shared_1.deleteUserDriveToken; } });
19
+ const STORAGE_DIR = path_1.default.join(os_1.default.homedir(), '.julion');
20
+ const TOKEN_PATH = path_1.default.join(STORAGE_DIR, 'google-drive-token.json');
21
+ const ROOT_FOLDER_NAME = 'JULION';
22
+ async function readJson(filePath) {
23
+ try {
24
+ const raw = await fs_1.promises.readFile(filePath, 'utf8');
25
+ return JSON.parse(raw);
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ async function ensureStorageDirectory() {
32
+ await fs_1.promises.mkdir(STORAGE_DIR, { recursive: true });
33
+ }
34
+ function openUrl(url) {
35
+ const platform = process.platform;
36
+ const command = platform === 'win32' ? `start "" "${url}"` : platform === 'darwin' ? `open "${url}"` : `xdg-open "${url}"`;
37
+ (0, child_process_1.exec)(command, (error) => {
38
+ if (error) {
39
+ console.warn('Unable to open browser automatically. Copy the URL and open it manually.');
40
+ }
41
+ });
42
+ }
43
+ function prompt(question) {
44
+ const rl = readline_1.default.createInterface({ input: process.stdin, output: process.stdout });
45
+ return new Promise((resolve) => {
46
+ rl.question(question, (answer) => {
47
+ rl.close();
48
+ resolve(answer.trim());
49
+ });
50
+ });
51
+ }
52
+ function normalizeStoredToken(raw) {
53
+ if (!raw || typeof raw !== 'object') {
54
+ return null;
55
+ }
56
+ const payload = raw;
57
+ if (payload.token && typeof payload.token === 'object') {
58
+ return payload.token;
59
+ }
60
+ if (payload.access_token || payload.refresh_token) {
61
+ return payload;
62
+ }
63
+ return null;
64
+ }
65
+ async function saveToken(token, user) {
66
+ await ensureStorageDirectory();
67
+ const payload = {
68
+ token: token,
69
+ user_email: user?.email,
70
+ user_name: user?.name
71
+ };
72
+ await fs_1.promises.writeFile(TOKEN_PATH, JSON.stringify(payload, null, 2), 'utf8');
73
+ if (user?.email) {
74
+ await (0, julion_shared_1.saveUserDriveToken)(user.email, token);
75
+ }
76
+ }
77
+ async function loadToken() {
78
+ const filePayload = await readJson(TOKEN_PATH);
79
+ const fromFile = normalizeStoredToken(filePayload);
80
+ if (fromFile) {
81
+ return fromFile;
82
+ }
83
+ const userEmail = filePayload?.user_email;
84
+ if (userEmail) {
85
+ const fromDb = await (0, julion_shared_1.loadUserDriveToken)(userEmail);
86
+ if (fromDb) {
87
+ return fromDb;
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ async function getOAuthClient() {
93
+ const { clientId, clientSecret, redirectUri } = await (0, julion_shared_1.loadGoogleClientConfig)();
94
+ const auth = new googleapis_1.google.auth.OAuth2(clientId, clientSecret, redirectUri);
95
+ const token = await loadToken();
96
+ if (token) {
97
+ auth.setCredentials(token);
98
+ return auth;
99
+ }
100
+ throw new Error('No stored Google Drive credentials found. Run `julion auth google --website` first.');
101
+ }
102
+ async function getDrive() {
103
+ const auth = await getOAuthClient();
104
+ return googleapis_1.google.drive({ version: 'v3', auth });
105
+ }
106
+ function escapeQueryValue(value) {
107
+ return value.replace(/'/g, "\\'");
108
+ }
109
+ async function getOrCreateFolder(drive, name, parentId) {
110
+ const queryParts = [
111
+ `name='${escapeQueryValue(name)}'`,
112
+ `mimeType='application/vnd.google-apps.folder'`,
113
+ 'trashed=false'
114
+ ];
115
+ if (parentId) {
116
+ queryParts.push(`'${parentId}' in parents`);
117
+ }
118
+ else {
119
+ queryParts.push("'root' in parents");
120
+ }
121
+ const response = await drive.files.list({
122
+ q: queryParts.join(' and '),
123
+ fields: 'files(id,name)',
124
+ spaces: 'drive'
125
+ });
126
+ const existingFolder = response.data.files?.[0];
127
+ if (existingFolder?.id) {
128
+ return existingFolder.id;
129
+ }
130
+ const created = await drive.files.create({
131
+ requestBody: {
132
+ name,
133
+ mimeType: 'application/vnd.google-apps.folder',
134
+ parents: parentId ? [parentId] : undefined
135
+ },
136
+ fields: 'id'
137
+ });
138
+ return created.data.id;
139
+ }
140
+ async function authenticate() {
141
+ const { clientId, clientSecret, redirectUri } = await (0, julion_shared_1.loadGoogleClientConfig)();
142
+ const auth = new googleapis_1.google.auth.OAuth2(clientId, clientSecret, redirectUri);
143
+ const authUrl = auth.generateAuthUrl({
144
+ access_type: 'offline',
145
+ scope: julion_shared_1.GOOGLE_DRIVE_SCOPES,
146
+ prompt: 'consent'
147
+ });
148
+ console.log('Open this URL in your browser to authorize JULION Google Drive access:');
149
+ console.log(authUrl);
150
+ openUrl(authUrl);
151
+ const code = await prompt('Paste the authorization code here: ');
152
+ const tokenResponse = await auth.getToken(code);
153
+ auth.setCredentials(tokenResponse.tokens);
154
+ const oauth2 = googleapis_1.google.oauth2({ version: 'v2', auth });
155
+ const profile = await oauth2.userinfo.get();
156
+ const email = profile.data.email || 'unknown@user.local';
157
+ const name = profile.data.name || email;
158
+ await saveToken(tokenResponse.tokens, { email, name });
159
+ console.log(`Google Drive authorization complete for ${email}.`);
160
+ }
161
+ async function authenticateViaWebsite() {
162
+ const env = await (0, julion_shared_1.loadMergedEnv)();
163
+ const sessionId = (0, julion_shared_1.createSessionId)();
164
+ await (0, julion_shared_1.createAuthSession)(sessionId);
165
+ const baseUrl = (0, julion_shared_1.resolveWebsiteAuthUrl)(env);
166
+ const url = new URL(baseUrl);
167
+ url.searchParams.set('session', sessionId);
168
+ console.log('Step 1: Opening your Julion login page in the browser...');
169
+ console.log(url.toString());
170
+ openUrl(url.toString());
171
+ console.log('');
172
+ console.log('Step 2: Sign in with Google and approve Drive access.');
173
+ console.log('Step 3: When the page says you can return to VS Code, come back here.');
174
+ console.log('');
175
+ console.log('Waiting for login to complete...');
176
+ const result = await (0, julion_shared_1.waitForAuthSession)(sessionId);
177
+ await saveToken(result.token, { email: result.user_email, name: result.user_name });
178
+ console.log(`Logged in as ${result.user_name} (${result.user_email}).`);
179
+ console.log('Google Drive is ready. You can now run:');
180
+ console.log(' julion save --ultra --push --repository my-repo');
181
+ }
182
+ async function uploadSnapshot(snapshotPath, repositoryName) {
183
+ const drive = await getDrive();
184
+ const rootFolderId = await getOrCreateFolder(drive, ROOT_FOLDER_NAME);
185
+ const repoName = repositoryName || path_1.default.basename(snapshotPath, '.on');
186
+ const repoFolderId = await getOrCreateFolder(drive, repoName, rootFolderId);
187
+ const media = {
188
+ mimeType: 'application/octet-stream',
189
+ body: (0, fs_1.createReadStream)(snapshotPath)
190
+ };
191
+ const response = await drive.files.create({
192
+ requestBody: {
193
+ name: path_1.default.basename(snapshotPath),
194
+ parents: [repoFolderId]
195
+ },
196
+ media,
197
+ fields: 'id,name'
198
+ });
199
+ return {
200
+ fileId: response.data.id,
201
+ fileName: response.data.name,
202
+ repositoryName: repoName,
203
+ repositoryFolderId: repoFolderId
204
+ };
205
+ }
206
+ async function downloadSnapshot(snapshotName, downloadPath, repositoryName) {
207
+ const drive = await getDrive();
208
+ const rootFolderId = await getOrCreateFolder(drive, ROOT_FOLDER_NAME);
209
+ let folderId = rootFolderId;
210
+ if (repositoryName) {
211
+ folderId = await getOrCreateFolder(drive, repositoryName, rootFolderId);
212
+ }
213
+ const queryParts = [`name='${escapeQueryValue(snapshotName)}'`, 'trashed=false'];
214
+ if (repositoryName) {
215
+ queryParts.push(`'${folderId}' in parents`);
216
+ }
217
+ let response = await drive.files.list({
218
+ q: queryParts.join(' and '),
219
+ fields: 'files(id,name,parents)',
220
+ spaces: 'drive'
221
+ });
222
+ if (!response.data.files?.length) {
223
+ response = await drive.files.list({
224
+ q: `name='${escapeQueryValue(snapshotName)}' and trashed=false`,
225
+ fields: 'files(id,name,parents)',
226
+ spaces: 'drive'
227
+ });
228
+ }
229
+ const file = response.data.files?.[0];
230
+ if (!file?.id) {
231
+ throw new Error(`Snapshot ${snapshotName} not found on Google Drive.`);
232
+ }
233
+ await fs_1.promises.mkdir(path_1.default.dirname(downloadPath), { recursive: true });
234
+ const dest = (0, fs_1.createWriteStream)(downloadPath);
235
+ const stream = await drive.files.get({ fileId: file.id, alt: 'media' }, { responseType: 'stream' });
236
+ await new Promise((resolve, reject) => {
237
+ stream.data
238
+ .on('end', () => resolve())
239
+ .on('error', reject)
240
+ .pipe(dest);
241
+ });
242
+ return {
243
+ fileId: file.id,
244
+ fileName: file.name,
245
+ downloadedTo: downloadPath
246
+ };
247
+ }
248
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAwKA,oCAwBC;AAED,wDAwBC;AAED,wCA0BC;AAED,4CAkDC;AA1SD,2BAAyE;AACzE,4CAAoB;AACpB,gDAAwB;AACxB,wDAAgC;AAChC,iDAAqC;AACrC,2CAAoC;AAEpC,iDAWuB;AA0Rd,qGAlSP,oCAAoB,OAkSO;AAxR7B,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACvD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;AACrE,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAQlC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IACtC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,aAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,OAAO,GACX,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;IAC7G,IAAA,oBAAI,EAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;QACtB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,kBAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAY;IACxC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,GAAgD,CAAC;IACjE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC,KAAgC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,OAAO,OAAkC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,KAAc,EAAE,IAAuC;IAC9E,MAAM,sBAAsB,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAoB;QAC/B,KAAK,EAAE,KAAgC;QACvC,UAAU,EAAE,IAAI,EAAE,KAAK;QACvB,SAAS,EAAE,IAAI,EAAE,IAAI;KACtB,CAAC;IACF,MAAM,aAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAEzE,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QAChB,MAAM,IAAA,kCAAkB,EAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,SAAS,GAAI,WAAsC,EAAE,UAAU,CAAC;IACtE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAkB,EAAC,SAAS,CAAC,CAAC;QACnD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,sCAAsB,GAAE,CAAC;IAC/E,MAAM,IAAI,GAAG,IAAI,mBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAEzE,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAC;IAChC,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;AACzG,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;IACpC,OAAO,mBAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,KAAU,EAAE,IAAY,EAAE,QAAiB;IAC1E,MAAM,UAAU,GAAG;QACjB,SAAS,gBAAgB,CAAC,IAAI,CAAC,GAAG;QAClC,+CAA+C;QAC/C,eAAe;KAChB,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,cAAc,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACtC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3B,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,cAAc,EAAE,EAAE,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QACvC,WAAW,EAAE;YACX,IAAI;YACJ,QAAQ,EAAE,oCAAoC;YAC9C,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;SAC3C;QACD,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,IAAI,CAAC,EAAY,CAAC;AACnC,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,MAAM,IAAA,sCAAsB,GAAE,CAAC;IAC/E,MAAM,IAAI,GAAG,IAAI,mBAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QACnC,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,mCAAmB;QAC1B,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjB,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,MAAM,GAAG,mBAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,oBAAoB,CAAC;IACzD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;IAExC,MAAM,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,2CAA2C,KAAK,GAAG,CAAC,CAAC;AACnE,CAAC;AAEM,KAAK,UAAU,sBAAsB;IAC1C,MAAM,GAAG,GAAG,MAAM,IAAA,6BAAa,GAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAA,+BAAe,GAAE,CAAC;IACpC,MAAM,IAAA,iCAAiB,EAAC,SAAS,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,IAAA,qCAAqB,EAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,IAAA,kCAAkB,EAAC,SAAS,CAAC,CAAC;IACnD,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAEpF,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;AACnE,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,YAAoB,EAAE,cAAuB;IAChF,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,cAAc,IAAI,cAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAE5E,MAAM,KAAK,GAAG;QACZ,QAAQ,EAAE,0BAA0B;QACpC,IAAI,EAAE,IAAA,qBAAgB,EAAC,YAAY,CAAC;KACrC,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC,WAAW,EAAE;YACX,IAAI,EAAE,cAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YACjC,OAAO,EAAE,CAAC,YAAY,CAAC;SACxB;QACD,KAAK;QACL,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE;QACxB,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;QAC5B,cAAc,EAAE,QAAQ;QACxB,kBAAkB,EAAE,YAAY;KACjC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,YAAoB,EAAE,YAAoB,EAAE,cAAuB;IACxG,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACtE,IAAI,QAAQ,GAAG,YAAY,CAAC;IAE5B,IAAI,cAAc,EAAE,CAAC;QACnB,QAAQ,GAAG,MAAM,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,SAAS,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEjF,IAAI,cAAc,EAAE,CAAC;QACnB,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,cAAc,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACpC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;QAC3B,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACjC,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,CAAC,EAAE,SAAS,gBAAgB,CAAC,YAAY,CAAC,qBAAqB;YAC/D,MAAM,EAAE,wBAAwB;YAChC,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,YAAY,YAAY,6BAA6B,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,aAAE,CAAC,KAAK,CAAC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAA,sBAAiB,EAAC,YAAY,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAEpG,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,CAAC,IAA8B;aACnC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;aAC1B,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;aACnB,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,YAAY,EAAE,YAAY;KAC3B,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "julion-cloud-google-drive",
3
+ "version": "0.1.0",
4
+ "description": "Google Drive adapter for Julion CLI authentication and file sync.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc -p tsconfig.json"
12
+ },
13
+ "dependencies": {
14
+ "googleapis": "^172.0.0",
15
+ "julion-core": "^0.1.0",
16
+ "julion-shared": "^0.1.0"
17
+ },
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "https://github.com/JulioOxalis/Julion.git",
24
+ "directory": "packages/cloud/google-drive"
25
+ },
26
+ "bugs": {
27
+ "url": "https://github.com/JulioOxalis/Julion/issues"
28
+ },
29
+ "homepage": "https://github.com/JulioOxalis/Julion#readme",
30
+ "license": "MIT"
31
+ }