@cirrobio/sdk 0.2.7 → 0.2.10
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.
|
@@ -52,16 +52,16 @@ class FileService {
|
|
|
52
52
|
async getProjectAccessCredentials(fileAccessContext) {
|
|
53
53
|
const accessType = fileAccessContext.fileAccessRequest.accessType;
|
|
54
54
|
// Special case for project download, since we can cache the credentials
|
|
55
|
-
if (accessType === api_client_1.
|
|
55
|
+
if (accessType === api_client_1.ProjectAccessType.ProjectDownload || accessType === api_client_1.ProjectAccessType.SharedDatasetDownload) {
|
|
56
56
|
return this.getProjectReadCredentials(fileAccessContext);
|
|
57
57
|
}
|
|
58
|
-
return this.fileApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id,
|
|
58
|
+
return this.fileApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id, projectFileAccessRequest: fileAccessContext.fileAccessRequest });
|
|
59
59
|
}
|
|
60
60
|
async getProjectReadCredentials(fileAccessContext) {
|
|
61
61
|
const projectId = fileAccessContext.project.id;
|
|
62
62
|
// Append datasetId to cache key for shared dataset downloads since we need to generate a new token for each dataset
|
|
63
63
|
let cacheKey = projectId;
|
|
64
|
-
if (fileAccessContext.fileAccessRequest.accessType === api_client_1.
|
|
64
|
+
if (fileAccessContext.fileAccessRequest.accessType === api_client_1.ProjectAccessType.SharedDatasetDownload) {
|
|
65
65
|
cacheKey = `${projectId}-${fileAccessContext.fileAccessRequest.datasetId}`;
|
|
66
66
|
}
|
|
67
67
|
return credentials_mutex_so_1.credentialsMutex.dispatch(async () => {
|
|
@@ -69,8 +69,8 @@ class FileService {
|
|
|
69
69
|
const expirationTime = cachedCredentials ? cachedCredentials === null || cachedCredentials === void 0 ? void 0 : cachedCredentials.expiration : null;
|
|
70
70
|
const fetchNewCredentials = !expirationTime || expirationTime < new Date();
|
|
71
71
|
if (fetchNewCredentials) {
|
|
72
|
-
const
|
|
73
|
-
const credentials = await this.fileApi.generateProjectFileAccessToken({ projectId,
|
|
72
|
+
const projectFileAccessRequest = fileAccessContext.fileAccessRequest;
|
|
73
|
+
const credentials = await this.fileApi.generateProjectFileAccessToken({ projectId, projectFileAccessRequest });
|
|
74
74
|
credentials_mutex_so_1.credentialsCache.set(cacheKey, credentials);
|
|
75
75
|
return credentials;
|
|
76
76
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DatasetDetail,
|
|
1
|
+
import { DatasetDetail, ProjectFileAccessRequest, Project } from "@cirrobio/api-client";
|
|
2
2
|
type ProjectIdentifiable = Pick<Project, 'id'>;
|
|
3
3
|
/**
|
|
4
4
|
* Helper class to encapsulate the file access for a project.
|
|
@@ -6,8 +6,8 @@ type ProjectIdentifiable = Pick<Project, 'id'>;
|
|
|
6
6
|
export declare class ProjectFileAccessContext {
|
|
7
7
|
readonly project: ProjectIdentifiable;
|
|
8
8
|
readonly dataset: DatasetDetail;
|
|
9
|
-
readonly fileAccessRequest:
|
|
10
|
-
constructor(project: ProjectIdentifiable, dataset: DatasetDetail, fileAccessRequest:
|
|
9
|
+
readonly fileAccessRequest: ProjectFileAccessRequest;
|
|
10
|
+
constructor(project: ProjectIdentifiable, dataset: DatasetDetail, fileAccessRequest: ProjectFileAccessRequest);
|
|
11
11
|
static projectDownload(project: ProjectIdentifiable): ProjectFileAccessContext;
|
|
12
12
|
static datasetDownload(project: ProjectIdentifiable, dataset: DatasetDetail): ProjectFileAccessContext;
|
|
13
13
|
}
|
|
@@ -12,11 +12,11 @@ class ProjectFileAccessContext {
|
|
|
12
12
|
this.fileAccessRequest = fileAccessRequest;
|
|
13
13
|
}
|
|
14
14
|
static projectDownload(project) {
|
|
15
|
-
const request = { accessType: api_client_1.
|
|
15
|
+
const request = { accessType: api_client_1.ProjectAccessType.ProjectDownload };
|
|
16
16
|
return new ProjectFileAccessContext(project, null, request);
|
|
17
17
|
}
|
|
18
18
|
static datasetDownload(project, dataset) {
|
|
19
|
-
const accessType = dataset.share ? api_client_1.
|
|
19
|
+
const accessType = dataset.share ? api_client_1.ProjectAccessType.SharedDatasetDownload : api_client_1.ProjectAccessType.ProjectDownload;
|
|
20
20
|
const request = { accessType, datasetId: dataset.id };
|
|
21
21
|
return new ProjectFileAccessContext(project, dataset, request);
|
|
22
22
|
}
|
package/package.json
CHANGED
package/src/file/file.service.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProjectAccessType, AWSCredentials, FileApi } from "@cirrobio/api-client";
|
|
2
2
|
import { ProjectFileAccessContext } from "./project-access-context";
|
|
3
3
|
import { DownloadableFile } from "./file-object.model";
|
|
4
4
|
import { credentialsCache, credentialsMutex } from "./util/credentials-mutex.so";
|
|
@@ -56,17 +56,17 @@ export class FileService {
|
|
|
56
56
|
async getProjectAccessCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {
|
|
57
57
|
const accessType = fileAccessContext.fileAccessRequest.accessType;
|
|
58
58
|
// Special case for project download, since we can cache the credentials
|
|
59
|
-
if (accessType ===
|
|
59
|
+
if (accessType === ProjectAccessType.ProjectDownload || accessType === ProjectAccessType.SharedDatasetDownload) {
|
|
60
60
|
return this.getProjectReadCredentials(fileAccessContext);
|
|
61
61
|
}
|
|
62
|
-
return this.fileApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id,
|
|
62
|
+
return this.fileApi.generateProjectFileAccessToken({ projectId: fileAccessContext.project.id, projectFileAccessRequest: fileAccessContext.fileAccessRequest });
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
private async getProjectReadCredentials(fileAccessContext: ProjectFileAccessContext): Promise<AWSCredentials> {
|
|
66
66
|
const projectId = fileAccessContext.project.id;
|
|
67
67
|
// Append datasetId to cache key for shared dataset downloads since we need to generate a new token for each dataset
|
|
68
68
|
let cacheKey = projectId;
|
|
69
|
-
if (fileAccessContext.fileAccessRequest.accessType ===
|
|
69
|
+
if (fileAccessContext.fileAccessRequest.accessType === ProjectAccessType.SharedDatasetDownload) {
|
|
70
70
|
cacheKey = `${projectId}-${fileAccessContext.fileAccessRequest.datasetId}`;
|
|
71
71
|
}
|
|
72
72
|
|
|
@@ -75,8 +75,8 @@ export class FileService {
|
|
|
75
75
|
const expirationTime = cachedCredentials ? cachedCredentials?.expiration : null;
|
|
76
76
|
const fetchNewCredentials = !expirationTime || expirationTime < new Date();
|
|
77
77
|
if (fetchNewCredentials) {
|
|
78
|
-
const
|
|
79
|
-
const credentials = await this.fileApi.generateProjectFileAccessToken({ projectId,
|
|
78
|
+
const projectFileAccessRequest = fileAccessContext.fileAccessRequest;
|
|
79
|
+
const credentials = await this.fileApi.generateProjectFileAccessToken({ projectId, projectFileAccessRequest });
|
|
80
80
|
credentialsCache.set(cacheKey, credentials);
|
|
81
81
|
return credentials;
|
|
82
82
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ProjectAccessType, DatasetDetail, ProjectFileAccessRequest, Project } from "@cirrobio/api-client";
|
|
2
2
|
|
|
3
3
|
type ProjectIdentifiable = Pick<Project, 'id'>;
|
|
4
4
|
|
|
@@ -9,18 +9,18 @@ export class ProjectFileAccessContext {
|
|
|
9
9
|
constructor(
|
|
10
10
|
readonly project: ProjectIdentifiable,
|
|
11
11
|
readonly dataset: DatasetDetail,
|
|
12
|
-
readonly fileAccessRequest:
|
|
12
|
+
readonly fileAccessRequest: ProjectFileAccessRequest
|
|
13
13
|
) {
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
static projectDownload(project: ProjectIdentifiable): ProjectFileAccessContext {
|
|
17
|
-
const request:
|
|
17
|
+
const request: ProjectFileAccessRequest = { accessType: ProjectAccessType.ProjectDownload };
|
|
18
18
|
return new ProjectFileAccessContext(project, null, request);
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
static datasetDownload(project: ProjectIdentifiable, dataset: DatasetDetail): ProjectFileAccessContext {
|
|
22
|
-
const accessType = dataset.share ?
|
|
23
|
-
const request:
|
|
22
|
+
const accessType = dataset.share ? ProjectAccessType.SharedDatasetDownload : ProjectAccessType.ProjectDownload;
|
|
23
|
+
const request: ProjectFileAccessRequest = { accessType, datasetId: dataset.id };
|
|
24
24
|
return new ProjectFileAccessContext(project, dataset, request);
|
|
25
25
|
}
|
|
26
26
|
}
|