@vankyle/storage-azure 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.
- package/README.md +123 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata/cosmos-metadata-store.d.ts +14 -0
- package/dist/metadata/cosmos-metadata-store.d.ts.map +1 -0
- package/dist/metadata/cosmos-metadata-store.js +39 -0
- package/dist/metadata/cosmos-metadata-store.js.map +1 -0
- package/dist/metadata/index.d.ts +5 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +5 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/mappers/blob-doc.mapper.d.ts +30 -0
- package/dist/metadata/mappers/blob-doc.mapper.d.ts.map +1 -0
- package/dist/metadata/mappers/blob-doc.mapper.js +28 -0
- package/dist/metadata/mappers/blob-doc.mapper.js.map +1 -0
- package/dist/metadata/mappers/file-doc.mapper.d.ts +33 -0
- package/dist/metadata/mappers/file-doc.mapper.d.ts.map +1 -0
- package/dist/metadata/mappers/file-doc.mapper.js +31 -0
- package/dist/metadata/mappers/file-doc.mapper.js.map +1 -0
- package/dist/metadata/mappers/index.d.ts +4 -0
- package/dist/metadata/mappers/index.d.ts.map +1 -0
- package/dist/metadata/mappers/index.js +4 -0
- package/dist/metadata/mappers/index.js.map +1 -0
- package/dist/metadata/mappers/upload-session-doc.mapper.d.ts +40 -0
- package/dist/metadata/mappers/upload-session-doc.mapper.d.ts.map +1 -0
- package/dist/metadata/mappers/upload-session-doc.mapper.js +38 -0
- package/dist/metadata/mappers/upload-session-doc.mapper.js.map +1 -0
- package/dist/metadata/stores/cosmos-blob-store.d.ts +16 -0
- package/dist/metadata/stores/cosmos-blob-store.d.ts.map +1 -0
- package/dist/metadata/stores/cosmos-blob-store.js +109 -0
- package/dist/metadata/stores/cosmos-blob-store.js.map +1 -0
- package/dist/metadata/stores/cosmos-file-store.d.ts +15 -0
- package/dist/metadata/stores/cosmos-file-store.d.ts.map +1 -0
- package/dist/metadata/stores/cosmos-file-store.js +114 -0
- package/dist/metadata/stores/cosmos-file-store.js.map +1 -0
- package/dist/metadata/stores/cosmos-upload-session-store.d.ts +14 -0
- package/dist/metadata/stores/cosmos-upload-session-store.d.ts.map +1 -0
- package/dist/metadata/stores/cosmos-upload-session-store.js +105 -0
- package/dist/metadata/stores/cosmos-upload-session-store.js.map +1 -0
- package/dist/metadata/stores/index.d.ts +4 -0
- package/dist/metadata/stores/index.d.ts.map +1 -0
- package/dist/metadata/stores/index.js +4 -0
- package/dist/metadata/stores/index.js.map +1 -0
- package/dist/storage/azure-blob-storage.d.ts +23 -0
- package/dist/storage/azure-blob-storage.d.ts.map +1 -0
- package/dist/storage/azure-blob-storage.js +255 -0
- package/dist/storage/azure-blob-storage.js.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/types/azure-options.d.ts +9 -0
- package/dist/types/azure-options.d.ts.map +1 -0
- package/dist/types/azure-options.js +2 -0
- package/dist/types/azure-options.js.map +1 -0
- package/dist/types/cosmos-options.d.ts +7 -0
- package/dist/types/cosmos-options.d.ts.map +1 -0
- package/dist/types/cosmos-options.js +2 -0
- package/dist/types/cosmos-options.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# @vankyle-hub/storage-azure
|
|
2
|
+
|
|
3
|
+
`IStorage` and `IMetadataStore` implementations for the Azure ecosystem.
|
|
4
|
+
|
|
5
|
+
## What's included
|
|
6
|
+
|
|
7
|
+
| Class | Interface | Backend |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `AzureBlobStorage` | `IStorage` | Azure Blob Storage |
|
|
10
|
+
| `CosmosMetadataStore` | `IMetadataStore` | Azure Cosmos DB |
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pnpm add @vankyle-hub/storage-azure @vankyle-hub/storage-core @vankyle-hub/storage-shared
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Azure Blob Storage
|
|
19
|
+
|
|
20
|
+
### Setup
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { AzureBlobStorage } from "@vankyle-hub/storage-azure";
|
|
24
|
+
|
|
25
|
+
// Option 1: connection string
|
|
26
|
+
const storage = new AzureBlobStorage({
|
|
27
|
+
connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING!,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Option 2: account name + key
|
|
31
|
+
const storage = new AzureBlobStorage({
|
|
32
|
+
accountName: process.env.AZURE_STORAGE_ACCOUNT!,
|
|
33
|
+
accountKey: process.env.AZURE_STORAGE_KEY!,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Option 3: pre-constructed BlobServiceClient
|
|
37
|
+
import { BlobServiceClient } from "@azure/storage-blob";
|
|
38
|
+
const storage = new AzureBlobStorage({
|
|
39
|
+
blobServiceClient: new BlobServiceClient(url, credential),
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Capabilities
|
|
44
|
+
|
|
45
|
+
| Capability | Supported |
|
|
46
|
+
|---|---|
|
|
47
|
+
| `multipartUpload` | ✓ (via Block Blob staging) |
|
|
48
|
+
| `signedReadUrl` | ✓ (SAS token) |
|
|
49
|
+
| `signedPutUrl` | ✓ (SAS token) |
|
|
50
|
+
| `signedPartUrl` | ✗ |
|
|
51
|
+
|
|
52
|
+
> Signed URLs require a `StorageSharedKeyCredential`. If you initialize with a pre-built `BlobServiceClient` that uses a different credential type, `createReadUrl` and `createPutUrl` will throw `CapabilityNotSupportedError`.
|
|
53
|
+
|
|
54
|
+
### Multipart upload
|
|
55
|
+
|
|
56
|
+
Azure Blob Storage does not have a native multipart upload API. `AzureBlobStorage` simulates it using [Block Blob staging](https://learn.microsoft.com/azure/storage/blobs/storage-blob-block-blob-upload):
|
|
57
|
+
|
|
58
|
+
| `IStorage` method | Azure API |
|
|
59
|
+
|---|---|
|
|
60
|
+
| `initUploadSession` | Generates a session UUID (no API call needed) |
|
|
61
|
+
| `uploadPart` | `stageBlock` — block ID is base64 of the part number |
|
|
62
|
+
| `completeUploadSession` | `commitBlockList` — blocks sorted by `partNumber` |
|
|
63
|
+
| `abortUploadSession` | No-op (Azure auto-discards uncommitted blocks) |
|
|
64
|
+
|
|
65
|
+
## Cosmos DB Metadata Store
|
|
66
|
+
|
|
67
|
+
All six entity types (`upload-session`, `uploaded-part`, `blob`, `blob-reference`, `file`, `file-version`) are stored in a **single Cosmos container**, discriminated by a `type` field.
|
|
68
|
+
|
|
69
|
+
### Setup
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import { CosmosMetadataStore } from "@vankyle-hub/storage-azure";
|
|
73
|
+
|
|
74
|
+
// Option 1: connection string
|
|
75
|
+
const metadata = new CosmosMetadataStore({
|
|
76
|
+
connectionString: process.env.COSMOS_CONNECTION_STRING!,
|
|
77
|
+
databaseId: "my-database",
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// Option 2: endpoint + key
|
|
81
|
+
const metadata = new CosmosMetadataStore({
|
|
82
|
+
endpoint: process.env.COSMOS_ENDPOINT!,
|
|
83
|
+
key: process.env.COSMOS_KEY!,
|
|
84
|
+
databaseId: "my-database",
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The default container ID is `"storage"`. The container must exist before first use and must have `/id` as the partition key.
|
|
89
|
+
|
|
90
|
+
### Options reference
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
interface CosmosMetadataOptions {
|
|
94
|
+
/** Full connection string (alternative to endpoint+key) */
|
|
95
|
+
connectionString?: string;
|
|
96
|
+
/** Cosmos DB account endpoint */
|
|
97
|
+
endpoint?: string;
|
|
98
|
+
/** Cosmos DB account key */
|
|
99
|
+
key?: string;
|
|
100
|
+
/** Database ID (required) */
|
|
101
|
+
databaseId: string;
|
|
102
|
+
/** Container ID — defaults to "storage" */
|
|
103
|
+
containerId?: string;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Using both together
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { AzureBlobStorage, CosmosMetadataStore } from "@vankyle-hub/storage-azure";
|
|
111
|
+
import { DefaultStorageService } from "@vankyle-hub/storage-core";
|
|
112
|
+
|
|
113
|
+
const service = new DefaultStorageService({
|
|
114
|
+
storage: new AzureBlobStorage({
|
|
115
|
+
connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING!,
|
|
116
|
+
}),
|
|
117
|
+
metadata: new CosmosMetadataStore({
|
|
118
|
+
connectionString: process.env.COSMOS_CONNECTION_STRING!,
|
|
119
|
+
databaseId: "storage-db",
|
|
120
|
+
}),
|
|
121
|
+
bucket: process.env.AZURE_CONTAINER!,
|
|
122
|
+
});
|
|
123
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AzureBlobStorage } from "./storage/index.js";
|
|
2
|
+
export { CosmosMetadataStore } from "./metadata/index.js";
|
|
3
|
+
export type { AzureBlobStorageOptions } from "./types/azure-options.js";
|
|
4
|
+
export type { CosmosMetadataOptions } from "./types/cosmos-options.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACxE,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Container } from "@azure/cosmos";
|
|
2
|
+
import type { IMetadataStore } from "@vankyle-hub/storage-core";
|
|
3
|
+
import type { CosmosMetadataOptions } from "../types/cosmos-options.js";
|
|
4
|
+
import { CosmosUploadSessionStore } from "./stores/cosmos-upload-session-store.js";
|
|
5
|
+
import { CosmosBlobStore } from "./stores/cosmos-blob-store.js";
|
|
6
|
+
import { CosmosFileStore } from "./stores/cosmos-file-store.js";
|
|
7
|
+
export declare class CosmosMetadataStore implements IMetadataStore {
|
|
8
|
+
readonly uploads: CosmosUploadSessionStore;
|
|
9
|
+
readonly blobs: CosmosBlobStore;
|
|
10
|
+
readonly files: CosmosFileStore;
|
|
11
|
+
constructor(container: Container);
|
|
12
|
+
constructor(options: CosmosMetadataOptions, containerId?: string);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=cosmos-metadata-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmos-metadata-store.d.ts","sourceRoot":"","sources":["../../src/metadata/cosmos-metadata-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIhE,qBAAa,mBAAoB,YAAW,cAAc;IACxD,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;gBAEpB,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,qBAAqB,EAAE,WAAW,CAAC,EAAE,MAAM;CAmCjE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { CosmosClient } from "@azure/cosmos";
|
|
2
|
+
import { CosmosUploadSessionStore } from "./stores/cosmos-upload-session-store.js";
|
|
3
|
+
import { CosmosBlobStore } from "./stores/cosmos-blob-store.js";
|
|
4
|
+
import { CosmosFileStore } from "./stores/cosmos-file-store.js";
|
|
5
|
+
const DEFAULT_CONTAINER_ID = "storage";
|
|
6
|
+
export class CosmosMetadataStore {
|
|
7
|
+
uploads;
|
|
8
|
+
blobs;
|
|
9
|
+
files;
|
|
10
|
+
constructor(containerOrOptions, containerId) {
|
|
11
|
+
let container;
|
|
12
|
+
if ("items" in containerOrOptions) {
|
|
13
|
+
container = containerOrOptions;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
const options = containerOrOptions;
|
|
17
|
+
let client;
|
|
18
|
+
if (options.connectionString) {
|
|
19
|
+
client = new CosmosClient(options.connectionString);
|
|
20
|
+
}
|
|
21
|
+
else if (options.endpoint && options.key) {
|
|
22
|
+
client = new CosmosClient({
|
|
23
|
+
endpoint: options.endpoint,
|
|
24
|
+
key: options.key,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
throw new Error("CosmosMetadataStore requires connectionString or endpoint+key");
|
|
29
|
+
}
|
|
30
|
+
container = client
|
|
31
|
+
.database(options.databaseId)
|
|
32
|
+
.container(containerId ?? DEFAULT_CONTAINER_ID);
|
|
33
|
+
}
|
|
34
|
+
this.uploads = new CosmosUploadSessionStore(container);
|
|
35
|
+
this.blobs = new CosmosBlobStore(container);
|
|
36
|
+
this.files = new CosmosFileStore(container);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=cosmos-metadata-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmos-metadata-store.js","sourceRoot":"","sources":["../../src/metadata/cosmos-metadata-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAkB,MAAM,eAAe,CAAC;AAG7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAEvC,MAAM,OAAO,mBAAmB;IACrB,OAAO,CAA2B;IAClC,KAAK,CAAkB;IACvB,KAAK,CAAkB;IAIhC,YACE,kBAAqD,EACrD,WAAoB;QAEpB,IAAI,SAAoB,CAAC;QAEzB,IAAI,OAAO,IAAI,kBAAkB,EAAE,CAAC;YAClC,SAAS,GAAG,kBAA+B,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,kBAAkB,CAAC;YACnC,IAAI,MAAoB,CAAC;YAEzB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC3C,MAAM,GAAG,IAAI,YAAY,CAAC;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,GAAG,EAAE,OAAO,CAAC,GAAG;iBACjB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;YACJ,CAAC;YAED,SAAS,GAAG,MAAM;iBACf,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;iBAC5B,SAAS,CAAC,WAAW,IAAI,oBAAoB,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { CosmosMetadataStore } from "./cosmos-metadata-store.js";
|
|
2
|
+
export { CosmosUploadSessionStore } from "./stores/cosmos-upload-session-store.js";
|
|
3
|
+
export { CosmosBlobStore } from "./stores/cosmos-blob-store.js";
|
|
4
|
+
export { CosmosFileStore } from "./stores/cosmos-file-store.js";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { CosmosMetadataStore } from "./cosmos-metadata-store.js";
|
|
2
|
+
export { CosmosUploadSessionStore } from "./stores/cosmos-upload-session-store.js";
|
|
3
|
+
export { CosmosBlobStore } from "./stores/cosmos-blob-store.js";
|
|
4
|
+
export { CosmosFileStore } from "./stores/cosmos-file-store.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { JsonObject } from "@vankyle-hub/storage-shared";
|
|
2
|
+
import type { Blob, BlobReference } from "@vankyle-hub/storage-core";
|
|
3
|
+
export interface BlobDoc {
|
|
4
|
+
id: string;
|
|
5
|
+
type: "blob";
|
|
6
|
+
provider: string;
|
|
7
|
+
bucket: string;
|
|
8
|
+
objectKey: string;
|
|
9
|
+
size: number;
|
|
10
|
+
mimeType?: string | undefined;
|
|
11
|
+
sha256?: string | undefined;
|
|
12
|
+
etag?: string | undefined;
|
|
13
|
+
storageClass?: string | undefined;
|
|
14
|
+
status: string;
|
|
15
|
+
createdAt: string;
|
|
16
|
+
updatedAt: string;
|
|
17
|
+
deletedAt?: string | undefined;
|
|
18
|
+
metadata?: JsonObject | undefined;
|
|
19
|
+
}
|
|
20
|
+
export interface BlobReferenceDoc {
|
|
21
|
+
id: string;
|
|
22
|
+
type: "blob-reference";
|
|
23
|
+
blobId: string;
|
|
24
|
+
refType: string;
|
|
25
|
+
refId: string;
|
|
26
|
+
createdAt: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function blobDocToModel(doc: BlobDoc): Blob;
|
|
29
|
+
export declare function blobReferenceDocToModel(doc: BlobReferenceDoc): BlobReference;
|
|
30
|
+
//# sourceMappingURL=blob-doc.mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-doc.mapper.d.ts","sourceRoot":"","sources":["../../../src/metadata/mappers/blob-doc.mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAA+B,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAElG,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAiBjD;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAQ5E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function blobDocToModel(doc) {
|
|
2
|
+
return {
|
|
3
|
+
id: doc.id,
|
|
4
|
+
provider: doc.provider,
|
|
5
|
+
bucket: doc.bucket,
|
|
6
|
+
objectKey: doc.objectKey,
|
|
7
|
+
size: doc.size,
|
|
8
|
+
mimeType: doc.mimeType,
|
|
9
|
+
sha256: doc.sha256,
|
|
10
|
+
etag: doc.etag,
|
|
11
|
+
storageClass: doc.storageClass,
|
|
12
|
+
status: doc.status,
|
|
13
|
+
createdAt: new Date(doc.createdAt),
|
|
14
|
+
updatedAt: new Date(doc.updatedAt),
|
|
15
|
+
deletedAt: doc.deletedAt ? new Date(doc.deletedAt) : undefined,
|
|
16
|
+
metadata: doc.metadata,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function blobReferenceDocToModel(doc) {
|
|
20
|
+
return {
|
|
21
|
+
id: doc.id,
|
|
22
|
+
blobId: doc.blobId,
|
|
23
|
+
refType: doc.refType,
|
|
24
|
+
refId: doc.refId,
|
|
25
|
+
createdAt: new Date(doc.createdAt),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=blob-doc.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blob-doc.mapper.js","sourceRoot":"","sources":["../../../src/metadata/mappers/blob-doc.mapper.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,QAA2B;QACzC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,MAAM,EAAE,GAAG,CAAC,MAAoB;QAChC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9D,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAqB;IAC3D,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { JsonObject } from "@vankyle-hub/storage-shared";
|
|
2
|
+
import type { File, FileVersion } from "@vankyle-hub/storage-core";
|
|
3
|
+
export interface FileDoc {
|
|
4
|
+
id: string;
|
|
5
|
+
type: "file";
|
|
6
|
+
ownerId?: string | undefined;
|
|
7
|
+
displayName: string;
|
|
8
|
+
mimeType?: string | undefined;
|
|
9
|
+
currentVersionId?: string | undefined;
|
|
10
|
+
size?: number | undefined;
|
|
11
|
+
parentId?: string | undefined;
|
|
12
|
+
status: string;
|
|
13
|
+
createdAt: string;
|
|
14
|
+
updatedAt: string;
|
|
15
|
+
deletedAt?: string | undefined;
|
|
16
|
+
metadata?: JsonObject | undefined;
|
|
17
|
+
}
|
|
18
|
+
export interface FileVersionDoc {
|
|
19
|
+
id: string;
|
|
20
|
+
type: "file-version";
|
|
21
|
+
fileId: string;
|
|
22
|
+
blobId: string;
|
|
23
|
+
version: number;
|
|
24
|
+
size: number;
|
|
25
|
+
mimeType?: string | undefined;
|
|
26
|
+
sha256?: string | undefined;
|
|
27
|
+
createdAt: string;
|
|
28
|
+
createdBy?: string | undefined;
|
|
29
|
+
metadata?: JsonObject | undefined;
|
|
30
|
+
}
|
|
31
|
+
export declare function fileDocToModel(doc: FileDoc): File;
|
|
32
|
+
export declare function fileVersionDocToModel(doc: FileVersionDoc): FileVersion;
|
|
33
|
+
//# sourceMappingURL=file-doc.mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-doc.mapper.d.ts","sourceRoot":"","sources":["../../../src/metadata/mappers/file-doc.mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAc,MAAM,2BAA2B,CAAC;AAE/E,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CACnC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAejD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,WAAW,CAatE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function fileDocToModel(doc) {
|
|
2
|
+
return {
|
|
3
|
+
id: doc.id,
|
|
4
|
+
ownerId: doc.ownerId,
|
|
5
|
+
displayName: doc.displayName,
|
|
6
|
+
mimeType: doc.mimeType,
|
|
7
|
+
currentVersionId: doc.currentVersionId,
|
|
8
|
+
size: doc.size,
|
|
9
|
+
parentId: doc.parentId,
|
|
10
|
+
status: doc.status,
|
|
11
|
+
createdAt: new Date(doc.createdAt),
|
|
12
|
+
updatedAt: new Date(doc.updatedAt),
|
|
13
|
+
deletedAt: doc.deletedAt ? new Date(doc.deletedAt) : undefined,
|
|
14
|
+
metadata: doc.metadata,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function fileVersionDocToModel(doc) {
|
|
18
|
+
return {
|
|
19
|
+
id: doc.id,
|
|
20
|
+
fileId: doc.fileId,
|
|
21
|
+
blobId: doc.blobId,
|
|
22
|
+
version: doc.version,
|
|
23
|
+
size: doc.size,
|
|
24
|
+
mimeType: doc.mimeType,
|
|
25
|
+
sha256: doc.sha256,
|
|
26
|
+
createdAt: new Date(doc.createdAt),
|
|
27
|
+
createdBy: doc.createdBy,
|
|
28
|
+
metadata: doc.metadata,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=file-doc.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-doc.mapper.js","sourceRoot":"","sources":["../../../src/metadata/mappers/file-doc.mapper.ts"],"names":[],"mappings":"AAiCA,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAoB;QAChC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9D,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAAmB;IACvD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { type UploadSessionDoc, type UploadedPartDoc, uploadSessionDocToModel, uploadedPartDocToModel, } from "./upload-session-doc.mapper.js";
|
|
2
|
+
export { type BlobDoc, type BlobReferenceDoc, blobDocToModel, blobReferenceDocToModel, } from "./blob-doc.mapper.js";
|
|
3
|
+
export { type FileDoc, type FileVersionDoc, fileDocToModel, fileVersionDocToModel, } from "./file-doc.mapper.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metadata/mappers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,cAAc,EACd,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,cAAc,EACd,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { uploadSessionDocToModel, uploadedPartDocToModel, } from "./upload-session-doc.mapper.js";
|
|
2
|
+
export { blobDocToModel, blobReferenceDocToModel, } from "./blob-doc.mapper.js";
|
|
3
|
+
export { fileDocToModel, fileVersionDocToModel, } from "./file-doc.mapper.js";
|
|
4
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metadata/mappers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,cAAc,EACd,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAGL,cAAc,EACd,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { JsonObject } from "@vankyle-hub/storage-shared";
|
|
2
|
+
import type { UploadSession, UploadedPart } from "@vankyle-hub/storage-core";
|
|
3
|
+
export interface UploadSessionDoc {
|
|
4
|
+
id: string;
|
|
5
|
+
type: "upload-session";
|
|
6
|
+
provider: string;
|
|
7
|
+
bucket: string;
|
|
8
|
+
objectKey: string;
|
|
9
|
+
mode: string;
|
|
10
|
+
status: string;
|
|
11
|
+
fileName?: string | undefined;
|
|
12
|
+
mimeType?: string | undefined;
|
|
13
|
+
expectedSize?: number | undefined;
|
|
14
|
+
expectedSha256?: string | undefined;
|
|
15
|
+
providerUploadId?: string | undefined;
|
|
16
|
+
providerSessionData?: JsonObject | undefined;
|
|
17
|
+
createdBy?: string | undefined;
|
|
18
|
+
ownerId?: string | undefined;
|
|
19
|
+
metadata?: JsonObject | undefined;
|
|
20
|
+
createdAt: string;
|
|
21
|
+
updatedAt: string;
|
|
22
|
+
expiresAt?: string | undefined;
|
|
23
|
+
completedAt?: string | undefined;
|
|
24
|
+
abortedAt?: string | undefined;
|
|
25
|
+
}
|
|
26
|
+
export interface UploadedPartDoc {
|
|
27
|
+
id: string;
|
|
28
|
+
type: "uploaded-part";
|
|
29
|
+
sessionId: string;
|
|
30
|
+
partNumber: number;
|
|
31
|
+
size: number;
|
|
32
|
+
etag?: string | undefined;
|
|
33
|
+
checksumSha256?: string | undefined;
|
|
34
|
+
providerPartId?: string | undefined;
|
|
35
|
+
providerPartData?: JsonObject | undefined;
|
|
36
|
+
uploadedAt: string;
|
|
37
|
+
}
|
|
38
|
+
export declare function uploadSessionDocToModel(doc: UploadSessionDoc): UploadSession;
|
|
39
|
+
export declare function uploadedPartDocToModel(doc: UploadedPartDoc): UploadedPart;
|
|
40
|
+
//# sourceMappingURL=upload-session-doc.mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-session-doc.mapper.d.ts","sourceRoot":"","sources":["../../../src/metadata/mappers/upload-session-doc.mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAIb,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,mBAAmB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,gBAAgB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAuB5E;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,CAYzE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export function uploadSessionDocToModel(doc) {
|
|
2
|
+
return {
|
|
3
|
+
id: doc.id,
|
|
4
|
+
provider: doc.provider,
|
|
5
|
+
bucket: doc.bucket,
|
|
6
|
+
objectKey: doc.objectKey,
|
|
7
|
+
mode: doc.mode,
|
|
8
|
+
status: doc.status,
|
|
9
|
+
fileName: doc.fileName,
|
|
10
|
+
mimeType: doc.mimeType,
|
|
11
|
+
expectedSize: doc.expectedSize,
|
|
12
|
+
expectedSha256: doc.expectedSha256,
|
|
13
|
+
providerUploadId: doc.providerUploadId,
|
|
14
|
+
providerSessionData: doc.providerSessionData,
|
|
15
|
+
createdBy: doc.createdBy,
|
|
16
|
+
ownerId: doc.ownerId,
|
|
17
|
+
metadata: doc.metadata,
|
|
18
|
+
createdAt: new Date(doc.createdAt),
|
|
19
|
+
updatedAt: new Date(doc.updatedAt),
|
|
20
|
+
expiresAt: doc.expiresAt ? new Date(doc.expiresAt) : undefined,
|
|
21
|
+
completedAt: doc.completedAt ? new Date(doc.completedAt) : undefined,
|
|
22
|
+
abortedAt: doc.abortedAt ? new Date(doc.abortedAt) : undefined,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function uploadedPartDocToModel(doc) {
|
|
26
|
+
return {
|
|
27
|
+
id: doc.id,
|
|
28
|
+
sessionId: doc.sessionId,
|
|
29
|
+
partNumber: doc.partNumber,
|
|
30
|
+
size: doc.size,
|
|
31
|
+
etag: doc.etag,
|
|
32
|
+
checksumSha256: doc.checksumSha256,
|
|
33
|
+
providerPartId: doc.providerPartId,
|
|
34
|
+
providerPartData: doc.providerPartData,
|
|
35
|
+
uploadedAt: new Date(doc.uploadedAt),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=upload-session-doc.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-session-doc.mapper.js","sourceRoot":"","sources":["../../../src/metadata/mappers/upload-session-doc.mapper.ts"],"names":[],"mappings":"AA8CA,MAAM,UAAU,uBAAuB,CAAC,GAAqB;IAC3D,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,QAA2B;QACzC,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,IAAI,EAAE,GAAG,CAAC,IAAkB;QAC5B,MAAM,EAAE,GAAG,CAAC,MAA6B;QACzC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,mBAAmB,EAAE,GAAG,CAAC,mBAAmB;QAC5C,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;QAClC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9D,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;QACpE,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAoB;IACzD,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,cAAc,EAAE,GAAG,CAAC,cAAc;QAClC,gBAAgB,EAAE,GAAG,CAAC,gBAAgB;QACtC,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Container } from "@azure/cosmos";
|
|
2
|
+
import type { IBlobStore, CreateBlobInput, UpdateBlobInput, CreateBlobReferenceInput } from "@vankyle-hub/storage-core";
|
|
3
|
+
import type { Blob, BlobReference, StorageProvider } from "@vankyle-hub/storage-core";
|
|
4
|
+
export declare class CosmosBlobStore implements IBlobStore {
|
|
5
|
+
private readonly container;
|
|
6
|
+
constructor(container: Container);
|
|
7
|
+
createBlob(input: CreateBlobInput): Promise<Blob>;
|
|
8
|
+
getBlob(id: string): Promise<Blob | undefined>;
|
|
9
|
+
updateBlob(id: string, input: UpdateBlobInput): Promise<Blob>;
|
|
10
|
+
findBlobBySha256(sha256: string): Promise<Blob | undefined>;
|
|
11
|
+
findBlobByLocator(provider: StorageProvider, bucket: string, objectKey: string): Promise<Blob | undefined>;
|
|
12
|
+
createReference(input: CreateBlobReferenceInput): Promise<BlobReference>;
|
|
13
|
+
listReferences(blobId: string): Promise<BlobReference[]>;
|
|
14
|
+
deleteReference(id: string): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=cosmos-blob-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmos-blob-store.d.ts","sourceRoot":"","sources":["../../../src/metadata/stores/cosmos-blob-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAStF,qBAAa,eAAgB,YAAW,UAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAE3C,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAU9C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB7D,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAe3D,iBAAiB,CACrB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAgBtB,eAAe,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC;IAcxE,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAaxD,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGjD"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { BlobStatus } from "@vankyle-hub/storage-core";
|
|
2
|
+
import { blobDocToModel, blobReferenceDocToModel, } from "../mappers/blob-doc.mapper.js";
|
|
3
|
+
export class CosmosBlobStore {
|
|
4
|
+
container;
|
|
5
|
+
constructor(container) {
|
|
6
|
+
this.container = container;
|
|
7
|
+
}
|
|
8
|
+
async createBlob(input) {
|
|
9
|
+
const now = new Date().toISOString();
|
|
10
|
+
const doc = {
|
|
11
|
+
id: input.id,
|
|
12
|
+
type: "blob",
|
|
13
|
+
provider: input.provider,
|
|
14
|
+
bucket: input.bucket,
|
|
15
|
+
objectKey: input.objectKey,
|
|
16
|
+
size: input.size,
|
|
17
|
+
mimeType: input.mimeType,
|
|
18
|
+
sha256: input.sha256,
|
|
19
|
+
etag: input.etag,
|
|
20
|
+
storageClass: input.storageClass,
|
|
21
|
+
status: BlobStatus.Active,
|
|
22
|
+
createdAt: now,
|
|
23
|
+
updatedAt: now,
|
|
24
|
+
metadata: input.metadata,
|
|
25
|
+
};
|
|
26
|
+
const { resource } = await this.container.items.create(doc);
|
|
27
|
+
return blobDocToModel(resource);
|
|
28
|
+
}
|
|
29
|
+
async getBlob(id) {
|
|
30
|
+
try {
|
|
31
|
+
const { resource } = await this.container.item(id, id).read();
|
|
32
|
+
if (!resource || resource.type !== "blob")
|
|
33
|
+
return undefined;
|
|
34
|
+
return blobDocToModel(resource);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async updateBlob(id, input) {
|
|
41
|
+
const { resource: existing } = await this.container.item(id, id).read();
|
|
42
|
+
if (!existing) {
|
|
43
|
+
throw new Error(`Blob not found: ${id}`);
|
|
44
|
+
}
|
|
45
|
+
const updated = {
|
|
46
|
+
...existing,
|
|
47
|
+
updatedAt: new Date().toISOString(),
|
|
48
|
+
};
|
|
49
|
+
if (input.status !== undefined)
|
|
50
|
+
updated.status = input.status;
|
|
51
|
+
if (input.deletedAt !== undefined)
|
|
52
|
+
updated.deletedAt = input.deletedAt.toISOString();
|
|
53
|
+
const { resource } = await this.container.item(id, id).replace(updated);
|
|
54
|
+
return blobDocToModel(resource);
|
|
55
|
+
}
|
|
56
|
+
async findBlobBySha256(sha256) {
|
|
57
|
+
const query = {
|
|
58
|
+
query: "SELECT * FROM c WHERE c.type = 'blob' AND c.sha256 = @sha256 AND c.status = @status",
|
|
59
|
+
parameters: [
|
|
60
|
+
{ name: "@sha256", value: sha256 },
|
|
61
|
+
{ name: "@status", value: BlobStatus.Active },
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
const { resources } = await this.container.items.query(query).fetchAll();
|
|
65
|
+
if (resources.length === 0)
|
|
66
|
+
return undefined;
|
|
67
|
+
return blobDocToModel(resources[0]);
|
|
68
|
+
}
|
|
69
|
+
async findBlobByLocator(provider, bucket, objectKey) {
|
|
70
|
+
const query = {
|
|
71
|
+
query: "SELECT * FROM c WHERE c.type = 'blob' AND c.provider = @provider AND c.bucket = @bucket AND c.objectKey = @objectKey",
|
|
72
|
+
parameters: [
|
|
73
|
+
{ name: "@provider", value: provider },
|
|
74
|
+
{ name: "@bucket", value: bucket },
|
|
75
|
+
{ name: "@objectKey", value: objectKey },
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
const { resources } = await this.container.items.query(query).fetchAll();
|
|
79
|
+
if (resources.length === 0)
|
|
80
|
+
return undefined;
|
|
81
|
+
return blobDocToModel(resources[0]);
|
|
82
|
+
}
|
|
83
|
+
async createReference(input) {
|
|
84
|
+
const doc = {
|
|
85
|
+
id: input.id,
|
|
86
|
+
type: "blob-reference",
|
|
87
|
+
blobId: input.blobId,
|
|
88
|
+
refType: input.refType,
|
|
89
|
+
refId: input.refId,
|
|
90
|
+
createdAt: new Date().toISOString(),
|
|
91
|
+
};
|
|
92
|
+
const { resource } = await this.container.items.create(doc);
|
|
93
|
+
return blobReferenceDocToModel(resource);
|
|
94
|
+
}
|
|
95
|
+
async listReferences(blobId) {
|
|
96
|
+
const query = {
|
|
97
|
+
query: "SELECT * FROM c WHERE c.type = 'blob-reference' AND c.blobId = @blobId",
|
|
98
|
+
parameters: [{ name: "@blobId", value: blobId }],
|
|
99
|
+
};
|
|
100
|
+
const { resources } = await this.container.items
|
|
101
|
+
.query(query)
|
|
102
|
+
.fetchAll();
|
|
103
|
+
return resources.map(blobReferenceDocToModel);
|
|
104
|
+
}
|
|
105
|
+
async deleteReference(id) {
|
|
106
|
+
await this.container.item(id, id).delete();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=cosmos-blob-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmos-blob-store.js","sourceRoot":"","sources":["../../../src/metadata/stores/cosmos-blob-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Container } from "@azure/cosmos";
|
|
2
|
+
import type { IFileStore, CreateFileInput, UpdateFileInput, CreateFileVersionInput } from "@vankyle-hub/storage-core";
|
|
3
|
+
import type { File, FileVersion } from "@vankyle-hub/storage-core";
|
|
4
|
+
export declare class CosmosFileStore implements IFileStore {
|
|
5
|
+
private readonly container;
|
|
6
|
+
constructor(container: Container);
|
|
7
|
+
createFile(input: CreateFileInput): Promise<File>;
|
|
8
|
+
getFile(id: string): Promise<File | undefined>;
|
|
9
|
+
updateFile(id: string, input: UpdateFileInput): Promise<File>;
|
|
10
|
+
createVersion(input: CreateFileVersionInput): Promise<FileVersion>;
|
|
11
|
+
getVersion(id: string): Promise<FileVersion | undefined>;
|
|
12
|
+
listVersions(fileId: string): Promise<FileVersion[]>;
|
|
13
|
+
getLatestVersion(fileId: string): Promise<FileVersion | undefined>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=cosmos-file-store.d.ts.map
|