diff --git a/.github/actions/setup-smithy/action.yml b/.github/actions/setup-smithy/action.yml index 18147e19..69339ecc 100644 --- a/.github/actions/setup-smithy/action.yml +++ b/.github/actions/setup-smithy/action.yml @@ -6,9 +6,11 @@ runs: steps: - name: Install Smithy CLI shell: bash - env: - SMITHY_VERSION: '1.61.0' run: | + # Extract Smithy version from smithy-build.json + SMITHY_VERSION=$(jq -r '.maven.dependencies[] | select(contains("smithy-aws-traits")) | split(":")[2]' smithy-build.json) + echo "Installing Smithy CLI version ${SMITHY_VERSION}" + mkdir -p smithy-install/smithy curl -L https://github.com/smithy-lang/smithy/releases/download/${SMITHY_VERSION}/smithy-cli-linux-x86_64.zip -o smithy-install/smithy-cli-linux-x86_64.zip unzip -qo smithy-install/smithy-cli-linux-x86_64.zip -d smithy-install diff --git a/.github/docker-compose.cloudserver-metadata.yml b/.github/docker-compose.cloudserver-metadata.yml index 25a9e2e5..52abc17f 100644 --- a/.github/docker-compose.cloudserver-metadata.yml +++ b/.github/docker-compose.cloudserver-metadata.yml @@ -7,7 +7,7 @@ services: - ./md-config.json:/mnt/standalone_workdir/config.json:ro cloudserver-metadata: - image: ghcr.io/scality/cloudserver:9.1.4 + image: ghcr.io/scality/cloudserver:9.3.0-preview.1 platform: linux/amd64 network_mode: 'host' environment: diff --git a/.github/docker-compose.cloudserver-mongo.yml b/.github/docker-compose.cloudserver-mongo.yml index 0fd3471c..7f208901 100644 --- a/.github/docker-compose.cloudserver-mongo.yml +++ b/.github/docker-compose.cloudserver-mongo.yml @@ -24,7 +24,7 @@ services: restart: "no" cloudserver: - image: ghcr.io/scality/cloudserver:9.1.4 + image: ghcr.io/scality/cloudserver:9.3.0-preview.1 platform: linux/amd64 ports: - "8000:8000" diff --git a/examples/bucketQuota.ts b/examples/bucketQuota.ts new file mode 100644 index 00000000..f3f3b9d7 --- /dev/null +++ b/examples/bucketQuota.ts @@ -0,0 +1,47 @@ +import { + BucketQuotaClient, + CloudserverBucketQuotaClientConfig, + GetBucketQuotaCommand +} from '@scality/cloudserverclient/clients/bucketQuota'; + +const config: CloudserverBucketQuotaClientConfig = { + endpoint: 'http://localhost:8000', + credentials: { + accessKeyId: 'accessKey1', + secretAccessKey: 'verySecretKey1', + }, + region: 'us-east-1', + maxAttempts: 1, +}; + +const bucketQuotaClient = new BucketQuotaClient(config); +try { + const getBucketQuotaCommand = new GetBucketQuotaCommand({ + Bucket: 'aBucketName', + }); + + const quotaData = await bucketQuotaClient.send(getBucketQuotaCommand); + // { + // "$metadata": { + // "httpStatusCode": 200, + // "requestId": "aa0681fd844c9a2272fa", + // "extendedRequestId": "aa0681fd844c9a2272fa", + // "attempts": 1, + // "totalRetryDelay": 0 + // }, + // "Name": "aBucketName", + // "Quota": 42 + // } +} catch (error: any) { + console.error(error.name); // NoSuchBucket + console.error(error.message); // The specified bucket does not exist. + // { + // httpStatusCode: 404, + // requestId: "0caf000bc140bb9e62e9", + // extendedRequestId: "0caf000bc140bb9e62e9", + // cfId: undefined, + // attempts: 1, + // totalRetryDelay: 0, + // } + console.error(error.$metadata); +} diff --git a/examples/cloudserverClient.ts b/examples/cloudserverClient.ts new file mode 100644 index 00000000..9b4b31b1 --- /dev/null +++ b/examples/cloudserverClient.ts @@ -0,0 +1,27 @@ +// cloudserverClient is a meta client that imports all other clients. +// In this library, you can either use individual clients (like BackbeatRoutesClient or BucketQuotaClient), +// or use this global client. + +import { + CloudserverClient, + CloudserverClientConfig, + GetObjectCommand +} from '@scality/cloudserverclient'; + +const command = new GetObjectCommand({ + Bucket: 'aBucketName', + Key: 'anObjectKey', +}); + +const config: CloudserverClientConfig = { + endpoint: 'http://localhost:8000', + credentials: { + accessKeyId: 'accessKey1', + secretAccessKey: 'verySecretKey1', + }, + region: 'us-east-1', +}; +const client = new CloudserverClient(config); + +const getData = await client.backbeatRoutes.send(command); +const bodyStr = await getData.Body.transformToString(); \ No newline at end of file diff --git a/models/batchDelete.smithy b/models/backbeatRoutes/batchDelete.smithy similarity index 96% rename from models/batchDelete.smithy rename to models/backbeatRoutes/batchDelete.smithy index 5e9ff938..2585d46c 100644 --- a/models/batchDelete.smithy +++ b/models/backbeatRoutes/batchDelete.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @idempotent @http(method: "POST", uri: "/_/backbeat/batchdelete/{Bucket}/{Key+}") diff --git a/models/commonStructures.smithy b/models/backbeatRoutes/commonStructures.smithy similarity index 96% rename from models/commonStructures.smithy rename to models/backbeatRoutes/commonStructures.smithy index 02b67741..0f3556dc 100644 --- a/models/commonStructures.smithy +++ b/models/backbeatRoutes/commonStructures.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Streaming blob type for binary data transfer @streaming diff --git a/models/deleteBucketIndexes.smithy b/models/backbeatRoutes/deleteBucketIndexes.smithy similarity index 92% rename from models/deleteBucketIndexes.smithy rename to models/backbeatRoutes/deleteBucketIndexes.smithy index 54a14ac4..1a350b1f 100644 --- a/models/deleteBucketIndexes.smithy +++ b/models/backbeatRoutes/deleteBucketIndexes.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @http(method: "POST", uri: "/_/backbeat/index/{Bucket}?operation=delete") @idempotent diff --git a/models/deleteObjectFromExpiration.smithy b/models/backbeatRoutes/deleteObjectFromExpiration.smithy similarity index 94% rename from models/deleteObjectFromExpiration.smithy rename to models/backbeatRoutes/deleteObjectFromExpiration.smithy index a03890b0..4eaba01f 100644 --- a/models/deleteObjectFromExpiration.smithy +++ b/models/backbeatRoutes/deleteObjectFromExpiration.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @idempotent @http(method: "DELETE", uri: "/_/backbeat/expiration/{Bucket}/{Key+}") diff --git a/models/getBucketCseq.smithy b/models/backbeatRoutes/getBucketCseq.smithy similarity index 92% rename from models/getBucketCseq.smithy rename to models/backbeatRoutes/getBucketCseq.smithy index 95832bfc..8320d9ea 100644 --- a/models/getBucketCseq.smithy +++ b/models/backbeatRoutes/getBucketCseq.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Retrieves bucket sequence information @readonly diff --git a/models/getBucketIndexes.smithy b/models/backbeatRoutes/getBucketIndexes.smithy similarity index 94% rename from models/getBucketIndexes.smithy rename to models/backbeatRoutes/getBucketIndexes.smithy index f99de06e..044a5092 100644 --- a/models/getBucketIndexes.smithy +++ b/models/backbeatRoutes/getBucketIndexes.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @readonly @http(method: "GET", uri: "/_/backbeat/index/{Bucket}") diff --git a/models/getBucketMetadata.smithy b/models/backbeatRoutes/getBucketMetadata.smithy similarity index 98% rename from models/getBucketMetadata.smithy rename to models/backbeatRoutes/getBucketMetadata.smithy index 7749c55d..3cf1b0ab 100644 --- a/models/getBucketMetadata.smithy +++ b/models/backbeatRoutes/getBucketMetadata.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @readonly @http(method: "GET", uri: "/_/metadata/default/attributes/{Bucket}") diff --git a/models/getMetadata.smithy b/models/backbeatRoutes/getMetadata.smithy similarity index 92% rename from models/getMetadata.smithy rename to models/backbeatRoutes/getMetadata.smithy index 1ec56b81..f91f4667 100644 --- a/models/getMetadata.smithy +++ b/models/backbeatRoutes/getMetadata.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @http(method: "GET", uri: "/_/backbeat/metadata/{Bucket}/{Key+}") @readonly diff --git a/models/getObject.smithy b/models/backbeatRoutes/getObject.smithy similarity index 99% rename from models/getObject.smithy rename to models/backbeatRoutes/getObject.smithy index 6a65c6f4..3e08ebed 100644 --- a/models/getObject.smithy +++ b/models/backbeatRoutes/getObject.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @readonly @http(method: "GET", uri: "/{Bucket}/{Key+}", code: 200) diff --git a/models/getObjectList.smithy b/models/backbeatRoutes/getObjectList.smithy similarity index 94% rename from models/getObjectList.smithy rename to models/backbeatRoutes/getObjectList.smithy index 84958f74..df3d453f 100644 --- a/models/getObjectList.smithy +++ b/models/backbeatRoutes/getObjectList.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @readonly @http(method: "GET", uri: "/_/metadata/default/bucket/{Bucket}") diff --git a/models/getRaftBuckets.smithy b/models/backbeatRoutes/getRaftBuckets.smithy similarity index 93% rename from models/getRaftBuckets.smithy rename to models/backbeatRoutes/getRaftBuckets.smithy index b78acbc7..63ffb2e2 100644 --- a/models/getRaftBuckets.smithy +++ b/models/backbeatRoutes/getRaftBuckets.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Retrieves buckets associated with a specific Raft log ID @readonly diff --git a/models/getRaftId.smithy b/models/backbeatRoutes/getRaftId.smithy similarity index 91% rename from models/getRaftId.smithy rename to models/backbeatRoutes/getRaftId.smithy index 74dde516..0040fd29 100644 --- a/models/getRaftId.smithy +++ b/models/backbeatRoutes/getRaftId.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @readonly @http(method: "GET", uri: "/_/metadata/admin/buckets/{Bucket}/id") diff --git a/models/getRaftLog.smithy b/models/backbeatRoutes/getRaftLog.smithy similarity index 96% rename from models/getRaftLog.smithy rename to models/backbeatRoutes/getRaftLog.smithy index 8cbc04e9..0a614a0b 100644 --- a/models/getRaftLog.smithy +++ b/models/backbeatRoutes/getRaftLog.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Retrieves Raft log entries for a specific log ID @readonly diff --git a/models/listLifecycleCurrents.smithy b/models/backbeatRoutes/listLifecycleCurrents.smithy similarity index 98% rename from models/listLifecycleCurrents.smithy rename to models/backbeatRoutes/listLifecycleCurrents.smithy index dccf0427..8cdcc550 100644 --- a/models/listLifecycleCurrents.smithy +++ b/models/backbeatRoutes/listLifecycleCurrents.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// List lifecycle current objects operation @readonly diff --git a/models/listLifecycleNonCurrents.smithy b/models/backbeatRoutes/listLifecycleNonCurrents.smithy similarity index 98% rename from models/listLifecycleNonCurrents.smithy rename to models/backbeatRoutes/listLifecycleNonCurrents.smithy index 882e59db..5f9281d7 100644 --- a/models/listLifecycleNonCurrents.smithy +++ b/models/backbeatRoutes/listLifecycleNonCurrents.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// List lifecycle non-current objects operation @readonly diff --git a/models/listLifecycleOrphans.smithy b/models/backbeatRoutes/listLifecycleOrphans.smithy similarity index 98% rename from models/listLifecycleOrphans.smithy rename to models/backbeatRoutes/listLifecycleOrphans.smithy index 94a7fff5..a9a51b17 100644 --- a/models/listLifecycleOrphans.smithy +++ b/models/backbeatRoutes/listLifecycleOrphans.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// List lifecycle orphan objects operation @readonly diff --git a/models/multipleBackendAbortMPU.smithy b/models/backbeatRoutes/multipleBackendAbortMPU.smithy similarity index 95% rename from models/multipleBackendAbortMPU.smithy rename to models/backbeatRoutes/multipleBackendAbortMPU.smithy index fdd097e0..3249efdf 100644 --- a/models/multipleBackendAbortMPU.smithy +++ b/models/backbeatRoutes/multipleBackendAbortMPU.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Aborts a multipart upload for multiple backend storage @idempotent diff --git a/models/multipleBackendCompleteMPU.smithy b/models/backbeatRoutes/multipleBackendCompleteMPU.smithy similarity index 97% rename from models/multipleBackendCompleteMPU.smithy rename to models/backbeatRoutes/multipleBackendCompleteMPU.smithy index 450b0a16..8d4eb83d 100644 --- a/models/multipleBackendCompleteMPU.smithy +++ b/models/backbeatRoutes/multipleBackendCompleteMPU.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Completes a multipart upload for multiple backend storage @http(method: "POST", uri: "/_/backbeat/multiplebackenddata/{Bucket}/{Key+}?operation=completempu") diff --git a/models/multipleBackendDeleteObject.smithy b/models/backbeatRoutes/multipleBackendDeleteObject.smithy similarity index 94% rename from models/multipleBackendDeleteObject.smithy rename to models/backbeatRoutes/multipleBackendDeleteObject.smithy index f310f479..69e9f3e7 100644 --- a/models/multipleBackendDeleteObject.smithy +++ b/models/backbeatRoutes/multipleBackendDeleteObject.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @idempotent @http(method: "DELETE", uri: "/_/backbeat/multiplebackenddata/{Bucket}/{Key+}?operation=deleteobject", code: 200) diff --git a/models/multipleBackendDeleteObjectTagging.smithy b/models/backbeatRoutes/multipleBackendDeleteObjectTagging.smithy similarity index 97% rename from models/multipleBackendDeleteObjectTagging.smithy rename to models/backbeatRoutes/multipleBackendDeleteObjectTagging.smithy index c06d31d3..52908f4e 100644 --- a/models/multipleBackendDeleteObjectTagging.smithy +++ b/models/backbeatRoutes/multipleBackendDeleteObjectTagging.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Removes tags from an object in multiple backend storage @idempotent diff --git a/models/multipleBackendHeadObject.smithy b/models/backbeatRoutes/multipleBackendHeadObject.smithy similarity index 95% rename from models/multipleBackendHeadObject.smithy rename to models/backbeatRoutes/multipleBackendHeadObject.smithy index 567c3863..f224dfc2 100644 --- a/models/multipleBackendHeadObject.smithy +++ b/models/backbeatRoutes/multipleBackendHeadObject.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Retrieves metadata for an object from multiple backend storage @readonly diff --git a/models/multipleBackendInitiateMPU.smithy b/models/backbeatRoutes/multipleBackendInitiateMPU.smithy similarity index 97% rename from models/multipleBackendInitiateMPU.smithy rename to models/backbeatRoutes/multipleBackendInitiateMPU.smithy index 55ffc6cf..89982299 100644 --- a/models/multipleBackendInitiateMPU.smithy +++ b/models/backbeatRoutes/multipleBackendInitiateMPU.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Initiates a multipart upload for multiple backend storage @http(method: "POST", uri: "/_/backbeat/multiplebackenddata/{Bucket}/{Key+}?operation=initiatempu") diff --git a/models/multipleBackendPutMPUPart.smithy b/models/backbeatRoutes/multipleBackendPutMPUPart.smithy similarity index 96% rename from models/multipleBackendPutMPUPart.smithy rename to models/backbeatRoutes/multipleBackendPutMPUPart.smithy index debc395b..a571489e 100644 --- a/models/multipleBackendPutMPUPart.smithy +++ b/models/backbeatRoutes/multipleBackendPutMPUPart.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes use aws.auth#unsignedPayload diff --git a/models/multipleBackendPutObject.smithy b/models/backbeatRoutes/multipleBackendPutObject.smithy similarity index 97% rename from models/multipleBackendPutObject.smithy rename to models/backbeatRoutes/multipleBackendPutObject.smithy index 18974e1a..85cd5c29 100644 --- a/models/multipleBackendPutObject.smithy +++ b/models/backbeatRoutes/multipleBackendPutObject.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes use aws.auth#unsignedPayload diff --git a/models/multipleBackendPutObjectTagging.smithy b/models/backbeatRoutes/multipleBackendPutObjectTagging.smithy similarity index 97% rename from models/multipleBackendPutObjectTagging.smithy rename to models/backbeatRoutes/multipleBackendPutObjectTagging.smithy index 30b9d703..948133aa 100644 --- a/models/multipleBackendPutObjectTagging.smithy +++ b/models/backbeatRoutes/multipleBackendPutObjectTagging.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes /// Adds or updates tags for an object in multiple backend storage @http(method: "POST", uri: "/_/backbeat/multiplebackenddata/{Bucket}/{Key+}?operation=puttagging") diff --git a/models/putBucketIndexes.smithy b/models/backbeatRoutes/putBucketIndexes.smithy similarity index 92% rename from models/putBucketIndexes.smithy rename to models/backbeatRoutes/putBucketIndexes.smithy index 37b7def6..7d5d2781 100644 --- a/models/putBucketIndexes.smithy +++ b/models/backbeatRoutes/putBucketIndexes.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @http(method: "POST", uri: "/_/backbeat/index/{Bucket}?operation=add") operation PutBucketIndexes { diff --git a/models/putMetadata.smithy b/models/backbeatRoutes/putMetadata.smithy similarity index 95% rename from models/putMetadata.smithy rename to models/backbeatRoutes/putMetadata.smithy index 60faaae7..2aa181d9 100644 --- a/models/putMetadata.smithy +++ b/models/backbeatRoutes/putMetadata.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes @http(method: "PUT", uri: "/_/backbeat/metadata/{Bucket}/{Key+}") operation PutMetadata { diff --git a/models/putdata.smithy b/models/backbeatRoutes/putdata.smithy similarity index 96% rename from models/putdata.smithy rename to models/backbeatRoutes/putdata.smithy index a7d75f2a..45e45780 100644 --- a/models/putdata.smithy +++ b/models/backbeatRoutes/putdata.smithy @@ -1,5 +1,5 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes use aws.auth#unsignedPayload diff --git a/models/quotas/deleteBucketQuota.smithy b/models/quotas/deleteBucketQuota.smithy new file mode 100644 index 00000000..61266c3d --- /dev/null +++ b/models/quotas/deleteBucketQuota.smithy @@ -0,0 +1,14 @@ +$version: "2.0" + +namespace cloudserver.bucketquota + +@http(method: "DELETE", uri: "/{Bucket}?quota=true") +@idempotent +operation DeleteBucketQuota { + input := { + @required + @httpLabel + Bucket: String + } + output := {} +} diff --git a/models/quotas/getBucketQuota.smithy b/models/quotas/getBucketQuota.smithy new file mode 100644 index 00000000..614615ac --- /dev/null +++ b/models/quotas/getBucketQuota.smithy @@ -0,0 +1,17 @@ +$version: "2.0" + +namespace cloudserver.bucketquota + +@http(method: "GET", uri: "/{Bucket}?quota=true") +@readonly +operation GetBucketQuota { + input := { + @required + @httpLabel + Bucket: String + } + output := { + Name: String + Quota: Long + } +} diff --git a/models/quotas/updateBucketQuota.smithy b/models/quotas/updateBucketQuota.smithy new file mode 100644 index 00000000..8c69dd00 --- /dev/null +++ b/models/quotas/updateBucketQuota.smithy @@ -0,0 +1,23 @@ +$version: "2.0" +namespace cloudserver.bucketquota + +@http(method: "PUT", uri: "/{Bucket}?quota=true") +@idempotent +operation UpdateBucketQuota { + input: QuotaConfiguration + output: UpdateBucketQuotaOutput +} + +structure QuotaConfiguration { + @required + @httpLabel + Bucket: String + + @required + Quota: Long +} + +structure UpdateBucketQuotaOutput { + @httpPayload + body: String +} \ No newline at end of file diff --git a/package.json b/package.json index 91cc0b65..c1b9fbce 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,26 @@ { "name": "@scality/cloudserverclient", - "version": "1.0.0", + "version": "1.0.1", "engines": { "node": ">=20" }, "description": "Smithy-generated TypeScript client for Cloudserver's internal APIs", "main": "dist/index.js", "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./*": { + "types": "./dist/*.d.ts", + "default": "./dist/*.js" + } + }, "files": [ "dist", - "build/smithy/source/typescript-codegen" + "build/smithy/cloudserverBackbeatRoutes/typescript-codegen", + "build/smithy/cloudserverBucketQuota/typescript-codegen" ], "publishConfig": { "access": "public", @@ -18,9 +29,10 @@ "scripts": { "clean:build": "rm -rf build dist", "build:smithy": "smithy build", - "build:generated": "cd build/smithy/source/typescript-codegen && yarn install && yarn build", + "build:generated:backbeatRoutes": "cd build/smithy/cloudserverBackbeatRoutes/typescript-codegen && yarn install && yarn build", + "build:generated:bucketQuota": "cd build/smithy/cloudserverBucketQuota/typescript-codegen && yarn install && yarn build", "build:wrapper": "tsc", - "build": "yarn install && yarn clean:build && yarn build:smithy && yarn build:generated && yarn build:wrapper", + "build": "yarn install && yarn clean:build && yarn build:smithy && yarn build:generated:backbeatRoutes && yarn build:generated:bucketQuota && yarn build:wrapper", "test": "jest", "test:indexes": "jest tests/testIndexesApis.test.ts", "test:error-handling": "jest tests/testErrorHandling.test.ts", @@ -29,7 +41,8 @@ "test:lifecycle": "jest tests/testLifecycleApis.test.ts", "test:metadata": "jest tests/testMetadataApis.test.ts", "test:raft": "jest tests/testRaftApis.test.ts", - "test:mongo-backend": "yarn test:indexes && yarn test:error-handling && yarn test:multiple-backend", + "test:bucketQuotas": "jest tests/testQuotaApis.test.ts", + "test:mongo-backend": "yarn test:indexes && yarn test:error-handling && yarn test:multiple-backend && yarn test:bucketQuotas", "test:metadata-backend": "yarn test:api && yarn test:lifecycle && yarn test:metadata && yarn test:raft", "lint": "eslint src tests", "typecheck": "tsc --noEmit" diff --git a/service/cloudserver.smithy b/service/cloudserverBackbeatRoutes.smithy similarity index 88% rename from service/cloudserver.smithy rename to service/cloudserverBackbeatRoutes.smithy index 607f87cb..caac538b 100644 --- a/service/cloudserver.smithy +++ b/service/cloudserverBackbeatRoutes.smithy @@ -1,6 +1,6 @@ $version: "2.0" -namespace cloudserver.client +namespace cloudserver.backbeatRoutes use aws.protocols#restJson1 use aws.auth#sigv4 @@ -8,8 +8,8 @@ use aws.api#service @restJson1 @sigv4(name: "s3") -@service(sdkId: "cloudserver") -service cloudserver { +@service(sdkId: "CloudserverBackbeatRoutes") +service CloudserverBackbeatRoutes { version: "2017-07-01", operations: [ BatchDelete, diff --git a/service/cloudserverBucketQuota.smithy b/service/cloudserverBucketQuota.smithy new file mode 100644 index 00000000..c21cfb1a --- /dev/null +++ b/service/cloudserverBucketQuota.smithy @@ -0,0 +1,19 @@ +$version: "2.0" + +namespace cloudserver.bucketquota + +use aws.protocols#restXml +use aws.auth#sigv4 +use aws.api#service + +@restXml(noErrorWrapping: true) +@sigv4(name: "s3") +@service(sdkId: "CloudserverBucketQuota") +service CloudserverBucketQuota { + version: "2018-07-11", + operations: [ + GetBucketQuota, + UpdateBucketQuota, + DeleteBucketQuota, + ] +} diff --git a/smithy-build.json b/smithy-build.json index 5f07bc34..00589e82 100644 --- a/smithy-build.json +++ b/smithy-build.json @@ -7,10 +7,24 @@ "software.amazon.smithy.typescript:smithy-aws-typescript-codegen:0.34.0" ] }, - "plugins": { - "typescript-codegen": { - "package": "@scality/cloudserverclient", - "packageVersion": "1.0.0" + "projections": { + "cloudserverBackbeatRoutes": { + "plugins": { + "typescript-codegen": { + "service": "cloudserver.backbeatRoutes#CloudserverBackbeatRoutes", + "package": "@scality/cloudserverclient", + "packageVersion": "1.0.0" + } + } + }, + "cloudserverBucketQuota": { + "plugins": { + "typescript-codegen": { + "service": "cloudserver.bucketquota#CloudserverBucketQuota", + "package": "@scality/cloudserverclient-bucket", + "packageVersion": "1.0.0" + } + } } } } diff --git a/src/clients/backbeatRoutes.ts b/src/clients/backbeatRoutes.ts new file mode 100644 index 00000000..95089064 --- /dev/null +++ b/src/clients/backbeatRoutes.ts @@ -0,0 +1,18 @@ +import { + CloudserverBackbeatRoutesClient, + CloudserverBackbeatRoutesClientConfig, +} from '../../build/smithy/cloudserverBackbeatRoutes/typescript-codegen'; +import { createCustomErrorMiddleware } from '../utils'; + +export * from '../../build/smithy/cloudserverBackbeatRoutes/typescript-codegen'; +export class BackbeatRoutesClient extends CloudserverBackbeatRoutesClient { + constructor(config: CloudserverBackbeatRoutesClientConfig) { + super(config); + + this.middlewareStack.add(createCustomErrorMiddleware(), { + step: 'deserialize', + name: 'cloudserverErrorHandler', + priority: 'normal', + }); + } +} diff --git a/src/clients/bucketQuota.ts b/src/clients/bucketQuota.ts new file mode 100644 index 00000000..6e7af6a9 --- /dev/null +++ b/src/clients/bucketQuota.ts @@ -0,0 +1,20 @@ +import { + CloudserverBucketQuotaClient, + CloudserverBucketQuotaClientConfig, +} from '../../build/smithy/cloudserverBucketQuota/typescript-codegen'; + +export { + CloudserverBucketQuotaClientConfig, + GetBucketQuotaCommand, + GetBucketQuotaCommandOutput, + UpdateBucketQuotaCommand, + UpdateBucketQuotaCommandOutput, + DeleteBucketQuotaCommand, + DeleteBucketQuotaCommandOutput, +} from '../../build/smithy/cloudserverBucketQuota/typescript-codegen'; + +export class BucketQuotaClient extends CloudserverBucketQuotaClient { + constructor(config: CloudserverBucketQuotaClientConfig) { + super(config); + } +} diff --git a/src/clients/cloudserver.ts b/src/clients/cloudserver.ts new file mode 100644 index 00000000..d279de43 --- /dev/null +++ b/src/clients/cloudserver.ts @@ -0,0 +1,15 @@ +import { BackbeatRoutesClient } from './backbeatRoutes'; +import { BucketQuotaClient } from './bucketQuota'; +import { CloudserverBackbeatRoutesClientConfig } from '../../build/smithy/cloudserverBackbeatRoutes/typescript-codegen'; + +export type CloudserverClientConfig = CloudserverBackbeatRoutesClientConfig; + +export class CloudserverClient { + public readonly backbeatRoutes: BackbeatRoutesClient; + public readonly bucketQuota: BucketQuotaClient; + + constructor(config: CloudserverClientConfig) { + this.backbeatRoutes = new BackbeatRoutesClient(config); + this.bucketQuota = new BucketQuotaClient(config); + } +} diff --git a/src/index.ts b/src/index.ts index 88d50bd9..5c274a04 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,20 +1,4 @@ -import { - CloudserverClient as GeneratedCloudserverClient, - CloudserverClientConfig -} from '../build/smithy/source/typescript-codegen'; -import { createCustomErrorMiddleware } from './utils'; - -export * from '../build/smithy/source/typescript-codegen'; +export * from './clients/backbeatRoutes'; +export * from './clients/bucketQuota'; +export { CloudserverClient, CloudserverClientConfig } from './clients/cloudserver'; export * from './utils'; - -export class CloudserverClient extends GeneratedCloudserverClient { - constructor(config: CloudserverClientConfig) { - super(config); - - this.middlewareStack.add(createCustomErrorMiddleware(), { - step: 'deserialize', - name: 'cloudserverErrorHandler', - priority: 'normal', - }); - } -} diff --git a/src/utils.ts b/src/utils.ts index 83e2c4eb..11eaebef 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,5 +1,7 @@ import { XMLParser } from 'fast-xml-parser'; -import { CloudserverServiceException } from '../build/smithy/source/typescript-codegen'; +import { + CloudserverBackbeatRoutesServiceException +} from '../build/smithy/cloudserverBackbeatRoutes/typescript-codegen'; /** * Adds middleware to manually set the Content-Length header on a command. @@ -68,7 +70,7 @@ export function createCustomErrorMiddleware() { const xml = body?.toString() || ''; const errorInfo = parseXmlError(xml); - const xmlError: any = new CloudserverServiceException({ + const xmlError: any = new CloudserverBackbeatRoutesServiceException({ name: errorInfo.code || error.name, message: errorInfo.message || 'XML error response', $fault: statusCode >= 500 ? 'server' : 'client', @@ -88,7 +90,7 @@ export function createCustomErrorMiddleware() { const title = html.match(/