@awcp/transport-storage 0.0.0-dev-202602030448

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,3 @@
1
+ export { StorageProvider, StorageUploadResult } from './storage-provider.js';
2
+ export { LocalStorageProvider, type LocalStorageConfig } from './local-storage.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delegator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { LocalStorageProvider } from './local-storage.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delegator/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAA2B,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Local Filesystem Storage Provider
3
+ *
4
+ * Uses local filesystem for storage, suitable for testing and single-machine setups.
5
+ * Files are served via HTTP URLs that point to the local file server.
6
+ */
7
+ import type { StorageProvider, StorageUploadResult } from './storage-provider.js';
8
+ export interface LocalStorageConfig {
9
+ baseDir: string;
10
+ baseUrl: string;
11
+ }
12
+ export declare class LocalStorageProvider implements StorageProvider {
13
+ private baseDir;
14
+ private baseUrl;
15
+ constructor(config: LocalStorageConfig);
16
+ upload(key: string, data: Buffer, ttlSeconds: number): Promise<StorageUploadResult>;
17
+ download(url: string): Promise<Buffer>;
18
+ generateUrls(key: string, ttlSeconds: number): Promise<StorageUploadResult>;
19
+ cleanup(key: string): Promise<void>;
20
+ }
21
+ //# sourceMappingURL=local-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-storage.d.ts","sourceRoot":"","sources":["../../src/delegator/local-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAElF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,kBAAkB;IAKhC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAcnF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQtC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO3E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAM1C"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Local Filesystem Storage Provider
3
+ *
4
+ * Uses local filesystem for storage, suitable for testing and single-machine setups.
5
+ * Files are served via HTTP URLs that point to the local file server.
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ export class LocalStorageProvider {
10
+ baseDir;
11
+ baseUrl;
12
+ constructor(config) {
13
+ this.baseDir = config.baseDir;
14
+ this.baseUrl = config.baseUrl.replace(/\/$/, '');
15
+ }
16
+ async upload(key, data, ttlSeconds) {
17
+ await fs.promises.mkdir(this.baseDir, { recursive: true });
18
+ const filePath = path.join(this.baseDir, key);
19
+ await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
20
+ await fs.promises.writeFile(filePath, data);
21
+ const expiresAt = new Date(Date.now() + ttlSeconds * 1000).toISOString();
22
+ const downloadUrl = `${this.baseUrl}/${key}`;
23
+ const uploadUrl = `${this.baseUrl}/${key.replace('.zip', '-result.zip')}`;
24
+ return { downloadUrl, uploadUrl, expiresAt };
25
+ }
26
+ async download(url) {
27
+ const response = await fetch(url);
28
+ if (!response.ok) {
29
+ throw new Error(`Download failed: ${response.status} ${response.statusText}`);
30
+ }
31
+ return Buffer.from(await response.arrayBuffer());
32
+ }
33
+ async generateUrls(key, ttlSeconds) {
34
+ const expiresAt = new Date(Date.now() + ttlSeconds * 1000).toISOString();
35
+ const downloadUrl = `${this.baseUrl}/${key}`;
36
+ const uploadUrl = `${this.baseUrl}/${key.replace('.zip', '-result.zip')}`;
37
+ return { downloadUrl, uploadUrl, expiresAt };
38
+ }
39
+ async cleanup(key) {
40
+ const filePath = path.join(this.baseDir, key);
41
+ await fs.promises.unlink(filePath).catch(() => { });
42
+ const resultPath = filePath.replace('.zip', '-result.zip');
43
+ await fs.promises.unlink(resultPath).catch(() => { });
44
+ }
45
+ }
46
+ //# sourceMappingURL=local-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-storage.js","sourceRoot":"","sources":["../../src/delegator/local-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Storage Provider Interface
3
+ *
4
+ * Abstract interface for different storage backends (S3, local filesystem, etc.)
5
+ *
6
+ * TODO: Implement S3StorageProvider for production cloud deployments
7
+ */
8
+ export interface StorageUploadResult {
9
+ downloadUrl: string;
10
+ uploadUrl: string;
11
+ expiresAt: string;
12
+ }
13
+ export interface StorageProvider {
14
+ upload(key: string, data: Buffer, ttlSeconds: number): Promise<StorageUploadResult>;
15
+ download(url: string, headers?: Record<string, string>): Promise<Buffer>;
16
+ generateUrls(key: string, ttlSeconds: number): Promise<StorageUploadResult>;
17
+ }
18
+ //# sourceMappingURL=storage-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-provider.d.ts","sourceRoot":"","sources":["../../src/delegator/storage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpF,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC7E"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Storage Provider Interface
3
+ *
4
+ * Abstract interface for different storage backends (S3, local filesystem, etc.)
5
+ *
6
+ * TODO: Implement S3StorageProvider for production cloud deployments
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=storage-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-provider.js","sourceRoot":"","sources":["../../src/delegator/storage-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/executor/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @awcp/transport-storage
3
+ *
4
+ * Storage-based transport for AWCP workspace delegation.
5
+ * Uses pre-signed URLs to transfer workspace archives via external storage.
6
+ */
7
+ export { StorageTransport } from './storage-transport.js';
8
+ export type { StorageTransportConfig, StorageProviderConfig } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @awcp/transport-storage
3
+ *
4
+ * Storage-based transport for AWCP workspace delegation.
5
+ * Uses pre-signed URLs to transfer workspace archives via external storage.
6
+ */
7
+ export { StorageTransport } from './storage-transport.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Storage Transport Adapter
3
+ *
4
+ * Implements TransportAdapter interface for URL-based storage transfer.
5
+ * Uses pre-signed URLs to upload/download workspace archives.
6
+ */
7
+ import type { TransportAdapter, TransportPrepareParams, TransportPrepareResult, TransportSetupParams, TransportTeardownParams, TransportTeardownResult, TransportApplyResultParams, DependencyCheckResult } from '@awcp/core';
8
+ import type { StorageTransportConfig } from './types.js';
9
+ export declare class StorageTransport implements TransportAdapter {
10
+ readonly type: "storage";
11
+ private provider?;
12
+ private tempDir;
13
+ private config;
14
+ constructor(config?: StorageTransportConfig);
15
+ private getProvider;
16
+ prepare(params: TransportPrepareParams): Promise<TransportPrepareResult>;
17
+ applyResult(params: TransportApplyResultParams): Promise<void>;
18
+ cleanup(delegationId: string): Promise<void>;
19
+ checkDependency(): Promise<DependencyCheckResult>;
20
+ setup(params: TransportSetupParams): Promise<string>;
21
+ teardown(params: TransportTeardownParams): Promise<TransportTeardownResult>;
22
+ }
23
+ //# sourceMappingURL=storage-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-transport.d.ts","sourceRoot":"","sources":["../src/storage-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAIzD,qBAAa,gBAAiB,YAAW,gBAAgB;IACvD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IAEnC,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAyB;gBAE3B,MAAM,GAAE,sBAA2B;IAK/C,OAAO,CAAC,WAAW;IAqBb,OAAO,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA4BxE,WAAW,CAAC,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB9D,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5C,eAAe,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAIjD,KAAK,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;IAiCpD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CAelF"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Storage Transport Adapter
3
+ *
4
+ * Implements TransportAdapter interface for URL-based storage transfer.
5
+ * Uses pre-signed URLs to upload/download workspace archives.
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import * as os from 'node:os';
10
+ import * as crypto from 'node:crypto';
11
+ import { TransportError, ChecksumMismatchError } from '@awcp/core';
12
+ import { createArchive, extractArchive, applyResultToResources } from '@awcp/transport-archive';
13
+ import { LocalStorageProvider } from './delegator/local-storage.js';
14
+ export class StorageTransport {
15
+ type = 'storage';
16
+ provider;
17
+ tempDir;
18
+ config;
19
+ constructor(config = {}) {
20
+ this.config = config;
21
+ this.tempDir = config.delegator?.tempDir ?? config.executor?.tempDir ?? path.join(os.tmpdir(), 'awcp-storage');
22
+ }
23
+ getProvider() {
24
+ if (!this.provider) {
25
+ const delegatorConfig = this.config.delegator;
26
+ if (!delegatorConfig?.provider) {
27
+ throw new TransportError('Storage provider not configured');
28
+ }
29
+ if (delegatorConfig.provider.type === 'local') {
30
+ this.provider = new LocalStorageProvider({
31
+ baseDir: delegatorConfig.provider.localDir,
32
+ baseUrl: delegatorConfig.provider.endpoint,
33
+ });
34
+ }
35
+ else {
36
+ throw new TransportError(`Storage provider type '${delegatorConfig.provider.type}' not implemented`);
37
+ }
38
+ }
39
+ return this.provider;
40
+ }
41
+ // ========== Delegator Side ==========
42
+ async prepare(params) {
43
+ const { delegationId, exportPath, ttlSeconds } = params;
44
+ await fs.promises.mkdir(this.tempDir, { recursive: true });
45
+ const archivePath = path.join(this.tempDir, `${delegationId}.zip`);
46
+ await createArchive(exportPath, archivePath);
47
+ const buffer = await fs.promises.readFile(archivePath);
48
+ const checksum = crypto.createHash('sha256').update(buffer).digest('hex');
49
+ const provider = this.getProvider();
50
+ const key = `workspaces/${delegationId}.zip`;
51
+ const { downloadUrl, uploadUrl, expiresAt } = await provider.upload(key, buffer, ttlSeconds);
52
+ await fs.promises.unlink(archivePath);
53
+ const workDirInfo = {
54
+ transport: 'storage',
55
+ downloadUrl,
56
+ uploadUrl,
57
+ checksum,
58
+ expiresAt,
59
+ };
60
+ return { workDirInfo };
61
+ }
62
+ async applyResult(params) {
63
+ const { delegationId, resultData, resources } = params;
64
+ const resultInfo = JSON.parse(resultData);
65
+ await fs.promises.mkdir(this.tempDir, { recursive: true });
66
+ const archivePath = path.join(this.tempDir, `${delegationId}-apply.zip`);
67
+ const extractDir = path.join(this.tempDir, `${delegationId}-apply`);
68
+ const response = await fetch(resultInfo.resultUrl);
69
+ if (!response.ok) {
70
+ throw new TransportError(`Failed to download result: ${response.status}`);
71
+ }
72
+ const buffer = Buffer.from(await response.arrayBuffer());
73
+ await fs.promises.writeFile(archivePath, buffer);
74
+ await extractArchive(archivePath, extractDir);
75
+ await fs.promises.unlink(archivePath);
76
+ await applyResultToResources(extractDir, resources);
77
+ await fs.promises.rm(extractDir, { recursive: true, force: true });
78
+ }
79
+ async cleanup(delegationId) {
80
+ const archivePath = path.join(this.tempDir, `${delegationId}.zip`);
81
+ await fs.promises.unlink(archivePath).catch(() => { });
82
+ }
83
+ // ========== Executor Side ==========
84
+ async checkDependency() {
85
+ return { available: true };
86
+ }
87
+ async setup(params) {
88
+ const { delegationId, workDirInfo, workDir } = params;
89
+ if (workDirInfo.transport !== 'storage') {
90
+ throw new TransportError(`Unexpected transport type: ${workDirInfo.transport}`);
91
+ }
92
+ const info = workDirInfo;
93
+ await fs.promises.mkdir(this.tempDir, { recursive: true });
94
+ const archivePath = path.join(this.tempDir, `${delegationId}.zip`);
95
+ const response = await fetch(info.downloadUrl, {
96
+ headers: info.headers,
97
+ });
98
+ if (!response.ok) {
99
+ throw new TransportError(`Failed to download workspace: ${response.status}`);
100
+ }
101
+ const buffer = Buffer.from(await response.arrayBuffer());
102
+ const hash = crypto.createHash('sha256').update(buffer).digest('hex');
103
+ if (hash !== info.checksum) {
104
+ throw new ChecksumMismatchError(info.checksum, hash);
105
+ }
106
+ await fs.promises.writeFile(archivePath, buffer);
107
+ await extractArchive(archivePath, workDir);
108
+ await fs.promises.unlink(archivePath);
109
+ return workDir;
110
+ }
111
+ async teardown(params) {
112
+ const { delegationId, workDir } = params;
113
+ await fs.promises.mkdir(this.tempDir, { recursive: true });
114
+ const archivePath = path.join(this.tempDir, `${delegationId}-result.zip`);
115
+ await createArchive(workDir, archivePath, { exclude: [] });
116
+ const buffer = await fs.promises.readFile(archivePath);
117
+ const resultBase64 = buffer.toString('base64');
118
+ await fs.promises.unlink(archivePath);
119
+ return { resultBase64 };
120
+ }
121
+ }
122
+ //# sourceMappingURL=storage-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-transport.js","sourceRoot":"","sources":["../src/storage-transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export { StorageWorkDirInfo } from '@awcp/core';
2
+ export interface StorageProviderConfig {
3
+ type: 's3' | 'local';
4
+ bucket?: string;
5
+ region?: string;
6
+ endpoint?: string;
7
+ accessKeyId?: string;
8
+ secretAccessKey?: string;
9
+ localDir?: string;
10
+ }
11
+ export interface StorageDelegatorConfig {
12
+ provider: StorageProviderConfig;
13
+ tempDir?: string;
14
+ urlTtlSeconds?: number;
15
+ }
16
+ export interface StorageExecutorConfig {
17
+ tempDir?: string;
18
+ }
19
+ export interface StorageTransportConfig {
20
+ delegator?: StorageDelegatorConfig;
21
+ executor?: StorageExecutorConfig;
22
+ }
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@awcp/transport-storage",
3
+ "version": "0.0.0-dev-202602030448",
4
+ "description": "AWCP Storage Transport - URL-based storage transfer for workspace delegation",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc -p tsconfig.build.json",
20
+ "clean": "rm -rf dist *.tsbuildinfo",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest"
23
+ },
24
+ "dependencies": {
25
+ "@awcp/core": "0.0.0-dev-202602030448",
26
+ "@awcp/transport-archive": "0.0.0-dev-202602030448"
27
+ },
28
+ "keywords": [
29
+ "awcp",
30
+ "storage",
31
+ "transport",
32
+ "s3",
33
+ "url"
34
+ ],
35
+ "license": "Apache-2.0",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/anthropics/awcp.git",
39
+ "directory": "packages/transport-storage"
40
+ }
41
+ }