@protontech/drive-sdk 0.3.0 → 0.3.2
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/crypto/driveCrypto.d.ts +1 -1
- package/dist/crypto/driveCrypto.js.map +1 -1
- package/dist/crypto/interface.d.ts +6 -1
- package/dist/crypto/openPGPCrypto.d.ts +1 -1
- package/dist/crypto/openPGPCrypto.js +4 -1
- package/dist/crypto/openPGPCrypto.js.map +1 -1
- package/dist/diagnostic/httpClient.d.ts +3 -3
- package/dist/interface/httpClient.d.ts +5 -5
- package/dist/interface/index.d.ts +15 -5
- package/dist/internal/apiService/apiService.js +1 -1
- package/dist/internal/apiService/apiService.js.map +1 -1
- package/dist/internal/apiService/errorCodes.d.ts +1 -0
- package/dist/internal/apiService/errorCodes.js.map +1 -1
- package/dist/internal/apiService/errors.d.ts +4 -3
- package/dist/internal/apiService/errors.js +7 -4
- package/dist/internal/apiService/errors.js.map +1 -1
- package/dist/internal/apiService/errors.test.js +2 -1
- package/dist/internal/apiService/errors.test.js.map +1 -1
- package/dist/internal/download/cryptoService.js +2 -2
- package/dist/internal/download/cryptoService.js.map +1 -1
- package/dist/internal/download/fileDownloader.js +2 -2
- package/dist/internal/download/fileDownloader.js.map +1 -1
- package/dist/internal/download/fileDownloader.test.js +3 -1
- package/dist/internal/download/fileDownloader.test.js.map +1 -1
- package/dist/internal/events/index.d.ts +1 -1
- package/dist/internal/nodes/cache.js +3 -1
- package/dist/internal/nodes/cache.js.map +1 -1
- package/dist/internal/nodes/cryptoCache.js +6 -7
- package/dist/internal/nodes/cryptoCache.js.map +1 -1
- package/dist/internal/nodes/cryptoCache.test.js +4 -7
- package/dist/internal/nodes/cryptoCache.test.js.map +1 -1
- package/dist/internal/nodes/cryptoReporter.d.ts +20 -0
- package/dist/internal/nodes/cryptoReporter.js +96 -0
- package/dist/internal/nodes/cryptoReporter.js.map +1 -0
- package/dist/internal/nodes/cryptoService.d.ts +17 -12
- package/dist/internal/nodes/cryptoService.js +17 -97
- package/dist/internal/nodes/cryptoService.js.map +1 -1
- package/dist/internal/nodes/cryptoService.test.js +3 -1
- package/dist/internal/nodes/cryptoService.test.js.map +1 -1
- package/dist/internal/nodes/index.js +3 -1
- package/dist/internal/nodes/index.js.map +1 -1
- package/dist/internal/nodes/interface.d.ts +1 -1
- package/dist/internal/nodes/nodesAccess.d.ts +2 -2
- package/dist/internal/nodes/nodesAccess.js +52 -54
- package/dist/internal/nodes/nodesAccess.js.map +1 -1
- package/dist/internal/shares/cryptoCache.d.ts +4 -3
- package/dist/internal/shares/cryptoCache.js +23 -6
- package/dist/internal/shares/cryptoCache.js.map +1 -1
- package/dist/internal/shares/cryptoCache.test.js +3 -2
- package/dist/internal/shares/cryptoCache.test.js.map +1 -1
- package/dist/internal/shares/index.js +1 -1
- package/dist/internal/shares/index.js.map +1 -1
- package/dist/internal/sharing/cache.d.ts +3 -0
- package/dist/internal/sharing/cache.js +17 -2
- package/dist/internal/sharing/cache.js.map +1 -1
- package/dist/internal/sharing/cryptoService.js +8 -6
- package/dist/internal/sharing/cryptoService.js.map +1 -1
- package/dist/internal/sharing/cryptoService.test.js +13 -0
- package/dist/internal/sharing/cryptoService.test.js.map +1 -1
- package/dist/internal/sharing/index.js +1 -1
- package/dist/internal/sharing/index.js.map +1 -1
- package/dist/internal/sharing/interface.d.ts +1 -1
- package/dist/internal/sharing/interface.js +1 -1
- package/dist/internal/sharing/sharingAccess.js +6 -0
- package/dist/internal/sharing/sharingAccess.js.map +1 -1
- package/dist/internal/sharing/sharingAccess.test.js +242 -33
- package/dist/internal/sharing/sharingAccess.test.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.d.ts +3 -1
- package/dist/internal/sharing/sharingManagement.js +10 -1
- package/dist/internal/sharing/sharingManagement.js.map +1 -1
- package/dist/internal/sharing/sharingManagement.test.js +32 -1
- package/dist/internal/sharing/sharingManagement.test.js.map +1 -1
- package/dist/internal/sharingPublic/apiService.d.ts +19 -0
- package/dist/internal/sharingPublic/apiService.js +141 -0
- package/dist/internal/sharingPublic/apiService.js.map +1 -0
- package/dist/internal/sharingPublic/cryptoCache.d.ts +19 -0
- package/dist/internal/sharingPublic/cryptoCache.js +72 -0
- package/dist/internal/sharingPublic/cryptoCache.js.map +1 -0
- package/dist/internal/sharingPublic/cryptoService.d.ts +9 -0
- package/dist/internal/sharingPublic/cryptoService.js +57 -0
- package/dist/internal/sharingPublic/cryptoService.js.map +1 -0
- package/dist/internal/sharingPublic/index.d.ts +15 -0
- package/dist/internal/sharingPublic/index.js +27 -0
- package/dist/internal/sharingPublic/index.js.map +1 -0
- package/dist/internal/sharingPublic/interface.d.ts +6 -0
- package/dist/internal/sharingPublic/interface.js +3 -0
- package/dist/internal/sharingPublic/interface.js.map +1 -0
- package/dist/internal/sharingPublic/manager.d.ts +19 -0
- package/dist/internal/sharingPublic/manager.js +81 -0
- package/dist/internal/sharingPublic/manager.js.map +1 -0
- package/dist/internal/sharingPublic/session/apiService.d.ts +28 -0
- package/dist/internal/sharingPublic/session/apiService.js +55 -0
- package/dist/internal/sharingPublic/session/apiService.js.map +1 -0
- package/dist/internal/sharingPublic/session/httpClient.d.ts +16 -0
- package/dist/internal/sharingPublic/session/httpClient.js +41 -0
- package/dist/internal/sharingPublic/session/httpClient.js.map +1 -0
- package/dist/internal/sharingPublic/session/index.d.ts +1 -0
- package/dist/internal/sharingPublic/session/index.js +6 -0
- package/dist/internal/sharingPublic/session/index.js.map +1 -0
- package/dist/internal/sharingPublic/session/interface.d.ts +18 -0
- package/dist/internal/sharingPublic/session/interface.js +3 -0
- package/dist/internal/sharingPublic/session/interface.js.map +1 -0
- package/dist/internal/sharingPublic/session/manager.d.ts +49 -0
- package/dist/internal/sharingPublic/session/manager.js +75 -0
- package/dist/internal/sharingPublic/session/manager.js.map +1 -0
- package/dist/internal/sharingPublic/session/session.d.ts +34 -0
- package/dist/internal/sharingPublic/session/session.js +67 -0
- package/dist/internal/sharingPublic/session/session.js.map +1 -0
- package/dist/internal/sharingPublic/session/url.d.ts +12 -0
- package/dist/internal/sharingPublic/session/url.js +23 -0
- package/dist/internal/sharingPublic/session/url.js.map +1 -0
- package/dist/internal/sharingPublic/session/url.test.d.ts +1 -0
- package/dist/internal/sharingPublic/session/url.test.js +59 -0
- package/dist/internal/sharingPublic/session/url.test.js.map +1 -0
- package/dist/internal/upload/streamUploader.js +1 -1
- package/dist/internal/upload/streamUploader.js.map +1 -1
- package/dist/internal/upload/streamUploader.test.js +3 -1
- package/dist/internal/upload/streamUploader.test.js.map +1 -1
- package/dist/protonDriveClient.d.ts +18 -3
- package/dist/protonDriveClient.js +31 -8
- package/dist/protonDriveClient.js.map +1 -1
- package/dist/protonDrivePublicLinkClient.d.ts +57 -0
- package/dist/protonDrivePublicLinkClient.js +73 -0
- package/dist/protonDrivePublicLinkClient.js.map +1 -0
- package/package.json +1 -1
- package/src/crypto/driveCrypto.ts +1 -1
- package/src/crypto/interface.ts +12 -1
- package/src/crypto/openPGPCrypto.ts +5 -2
- package/src/diagnostic/httpClient.ts +4 -4
- package/src/interface/httpClient.ts +5 -5
- package/src/interface/index.ts +18 -6
- package/src/internal/apiService/apiService.ts +1 -1
- package/src/internal/apiService/errorCodes.ts +1 -0
- package/src/internal/apiService/errors.test.ts +2 -1
- package/src/internal/apiService/errors.ts +15 -4
- package/src/internal/download/cryptoService.ts +2 -2
- package/src/internal/download/fileDownloader.test.ts +3 -1
- package/src/internal/download/fileDownloader.ts +2 -2
- package/src/internal/events/index.ts +1 -1
- package/src/internal/nodes/cache.ts +3 -1
- package/src/internal/nodes/cryptoCache.test.ts +4 -7
- package/src/internal/nodes/cryptoCache.ts +6 -7
- package/src/internal/nodes/cryptoReporter.ts +145 -0
- package/src/internal/nodes/cryptoService.test.ts +3 -1
- package/src/internal/nodes/cryptoService.ts +44 -137
- package/src/internal/nodes/index.ts +3 -1
- package/src/internal/nodes/interface.ts +3 -1
- package/src/internal/nodes/nodesAccess.ts +59 -61
- package/src/internal/shares/cryptoCache.test.ts +3 -2
- package/src/internal/shares/cryptoCache.ts +26 -7
- package/src/internal/shares/index.ts +1 -1
- package/src/internal/sharing/cache.ts +19 -2
- package/src/internal/sharing/cryptoService.test.ts +22 -1
- package/src/internal/sharing/cryptoService.ts +8 -6
- package/src/internal/sharing/index.ts +1 -0
- package/src/internal/sharing/interface.ts +1 -1
- package/src/internal/sharing/sharingAccess.test.ts +282 -34
- package/src/internal/sharing/sharingAccess.ts +6 -0
- package/src/internal/sharing/sharingManagement.test.ts +33 -0
- package/src/internal/sharing/sharingManagement.ts +9 -0
- package/src/internal/sharingPublic/apiService.ts +173 -0
- package/src/internal/sharingPublic/cryptoCache.ts +79 -0
- package/src/internal/sharingPublic/cryptoService.ts +98 -0
- package/src/internal/sharingPublic/index.ts +41 -0
- package/src/internal/sharingPublic/interface.ts +14 -0
- package/src/internal/sharingPublic/manager.ts +86 -0
- package/src/internal/sharingPublic/session/apiService.ts +74 -0
- package/src/internal/sharingPublic/session/httpClient.ts +48 -0
- package/src/internal/sharingPublic/session/index.ts +1 -0
- package/src/internal/sharingPublic/session/interface.ts +20 -0
- package/src/internal/sharingPublic/session/manager.ts +97 -0
- package/src/internal/sharingPublic/session/session.ts +78 -0
- package/src/internal/sharingPublic/session/url.test.ts +72 -0
- package/src/internal/sharingPublic/session/url.ts +23 -0
- package/src/internal/upload/streamUploader.test.ts +3 -1
- package/src/internal/upload/streamUploader.ts +1 -1
- package/src/protonDriveClient.ts +48 -11
- package/src/protonDrivePublicLinkClient.ts +135 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { getConfig } from './config';
|
|
2
|
+
import { DriveCrypto, OpenPGPCrypto, SRPModule, SessionKey } from './crypto';
|
|
3
|
+
import {
|
|
4
|
+
ProtonDriveHTTPClient,
|
|
5
|
+
ProtonDriveTelemetry,
|
|
6
|
+
ProtonDriveConfig,
|
|
7
|
+
Logger,
|
|
8
|
+
ProtonDriveCryptoCache,
|
|
9
|
+
NodeOrUid,
|
|
10
|
+
ProtonDriveAccount,
|
|
11
|
+
MaybeNode,
|
|
12
|
+
} from './interface';
|
|
13
|
+
import { Telemetry } from './telemetry';
|
|
14
|
+
import { getUid, convertInternalNodePromise, convertInternalNodeIterator } from './transformers';
|
|
15
|
+
import { DriveAPIService } from './internal/apiService';
|
|
16
|
+
import { SDKEvents } from './internal/sdkEvents';
|
|
17
|
+
import { initSharingPublicModule } from './internal/sharingPublic';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* ProtonDrivePublicLinkClient is the interface for the public link client.
|
|
21
|
+
*
|
|
22
|
+
* The client provides high-level operations for managing nodes, and
|
|
23
|
+
* downloading/uploading files.
|
|
24
|
+
*
|
|
25
|
+
* Do not use this client direclty, use ProtonDriveClient instead.
|
|
26
|
+
* The main client handles public link sessions and provides access to
|
|
27
|
+
* public links.
|
|
28
|
+
*
|
|
29
|
+
* See `experimental.getPublicLinkInfo` and `experimental.authPublicLink`
|
|
30
|
+
* for more information.
|
|
31
|
+
*/
|
|
32
|
+
export class ProtonDrivePublicLinkClient {
|
|
33
|
+
private logger: Logger;
|
|
34
|
+
private sdkEvents: SDKEvents;
|
|
35
|
+
private sharingPublic: ReturnType<typeof initSharingPublicModule>;
|
|
36
|
+
|
|
37
|
+
public experimental: {
|
|
38
|
+
/**
|
|
39
|
+
* Experimental feature to return the URL of the node.
|
|
40
|
+
*
|
|
41
|
+
* Use it when you want to open the node in the ProtonDrive web app.
|
|
42
|
+
*
|
|
43
|
+
* It has hardcoded URLs to open in production client only.
|
|
44
|
+
*/
|
|
45
|
+
getNodeUrl: (nodeUid: NodeOrUid) => Promise<string>;
|
|
46
|
+
/**
|
|
47
|
+
* Experimental feature to get the docs key for a node.
|
|
48
|
+
*
|
|
49
|
+
* This is used by Docs app to encrypt and decrypt document updates.
|
|
50
|
+
*/
|
|
51
|
+
getDocsKey: (nodeUid: NodeOrUid) => Promise<SessionKey>;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
constructor({
|
|
55
|
+
httpClient,
|
|
56
|
+
cryptoCache,
|
|
57
|
+
account,
|
|
58
|
+
openPGPCryptoModule,
|
|
59
|
+
srpModule,
|
|
60
|
+
config,
|
|
61
|
+
telemetry,
|
|
62
|
+
token,
|
|
63
|
+
password,
|
|
64
|
+
}: {
|
|
65
|
+
httpClient: ProtonDriveHTTPClient;
|
|
66
|
+
cryptoCache: ProtonDriveCryptoCache;
|
|
67
|
+
account: ProtonDriveAccount;
|
|
68
|
+
openPGPCryptoModule: OpenPGPCrypto;
|
|
69
|
+
srpModule: SRPModule;
|
|
70
|
+
config?: ProtonDriveConfig;
|
|
71
|
+
telemetry?: ProtonDriveTelemetry;
|
|
72
|
+
token: string;
|
|
73
|
+
password: string;
|
|
74
|
+
}) {
|
|
75
|
+
if (!telemetry) {
|
|
76
|
+
telemetry = new Telemetry();
|
|
77
|
+
}
|
|
78
|
+
this.logger = telemetry.getLogger('interface');
|
|
79
|
+
|
|
80
|
+
const fullConfig = getConfig(config);
|
|
81
|
+
this.sdkEvents = new SDKEvents(telemetry);
|
|
82
|
+
|
|
83
|
+
const apiService = new DriveAPIService(
|
|
84
|
+
telemetry,
|
|
85
|
+
this.sdkEvents,
|
|
86
|
+
httpClient,
|
|
87
|
+
fullConfig.baseUrl,
|
|
88
|
+
fullConfig.language,
|
|
89
|
+
);
|
|
90
|
+
const driveCrypto = new DriveCrypto(openPGPCryptoModule, srpModule);
|
|
91
|
+
this.sharingPublic = initSharingPublicModule(
|
|
92
|
+
telemetry,
|
|
93
|
+
apiService,
|
|
94
|
+
cryptoCache,
|
|
95
|
+
driveCrypto,
|
|
96
|
+
account,
|
|
97
|
+
token,
|
|
98
|
+
password,
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
this.experimental = {
|
|
102
|
+
getNodeUrl: async (nodeUid: NodeOrUid) => {
|
|
103
|
+
this.logger.debug(`Getting node URL for ${getUid(nodeUid)}`);
|
|
104
|
+
// TODO: public node has different URL
|
|
105
|
+
return '';
|
|
106
|
+
},
|
|
107
|
+
getDocsKey: async (nodeUid: NodeOrUid) => {
|
|
108
|
+
this.logger.debug(`Getting docs keys for ${getUid(nodeUid)}`);
|
|
109
|
+
const keys = await this.sharingPublic.getNodeKeys(getUid(nodeUid));
|
|
110
|
+
if (!keys.contentKeyPacketSessionKey) {
|
|
111
|
+
throw new Error('Node does not have a content key packet session key');
|
|
112
|
+
}
|
|
113
|
+
return keys.contentKeyPacketSessionKey;
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @returns The root folder to the public link.
|
|
120
|
+
*/
|
|
121
|
+
async getRootNode(): Promise<MaybeNode> {
|
|
122
|
+
this.logger.info(`Getting root node`);
|
|
123
|
+
return convertInternalNodePromise(this.sharingPublic.getRootNode());
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Iterates the children of the given parent node.
|
|
128
|
+
*
|
|
129
|
+
* See `ProtonDriveClient.iterateFolderChildren` for more information.
|
|
130
|
+
*/
|
|
131
|
+
async *iterateFolderChildren(parentUid: NodeOrUid, signal?: AbortSignal): AsyncGenerator<MaybeNode> {
|
|
132
|
+
this.logger.info(`Iterating children of ${getUid(parentUid)}`);
|
|
133
|
+
yield * convertInternalNodeIterator(this.sharingPublic.iterateFolderChildren(getUid(parentUid), signal));
|
|
134
|
+
}
|
|
135
|
+
}
|