@altostra/core
Version:
Core library for shared types and logic
1 lines • 2.91 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.getBucketIdentifiers=exports.isBucketHttpsUrl=exports.toBucketHttpsUrl=exports.isS3URL=exports.isBucketArn=exports.isBucketName=void 0;const NonEmptyString_1=require("../../../common/CustomTypes/NonEmptyString"),AltoError_1=require("../../../common/Errors/AltoError"),Arn_1=require("../../CustomTypes/Arn"),S3BucketName_1=require("../../CustomTypes/S3BucketName");function isBucketArn(t){if(!(0,Arn_1.isArn)(t))return!1;const{resource:r,service:e,region:o,account:n}=(0,Arn_1.parseArn)(t);return"s3"===e&&!o&&!n&&(0,S3BucketName_1.isBucketName)(r.split("/")[0])}Object.defineProperty(exports,"isBucketName",{enumerable:!0,get:function(){return S3BucketName_1.isBucketName}}),exports.isBucketArn=isBucketArn;const s3UrlRX=/^s3:\/\/([^/]+)/;function isS3URL(t){if(!(0,NonEmptyString_1.isNonEmptyString)(t)||!s3UrlRX.test(t))return!1;try{return toBucketHttpsUrl(t,"us-east-1"),!0}catch(t){return!1}}function toBucketHttpsUrl(t,r){var e;let o;if((0,Arn_1.isArn)(t)){const{service:r,region:e,account:n,resource:s}=(0,Arn_1.parseArn)(t);if("s3"!==r||e||n)throw AltoError_1.AltoError.create("The provided ARN is not an S3 ARN.",{data:{arn:t}});const[i]=s.split("/");if(!(0,S3BucketName_1.isBucketName)(i))throw AltoError_1.AltoError.create("Invalid S3 Bucket name",{data:{arn:t,invalidName:i}});o=i}else if(t.startsWith("s3://")){const[,r]=null!==(e=s3UrlRX.exec(t))&&void 0!==e?e:[];if(!r)throw AltoError_1.AltoError.create("Invalid name, ARN or S3 URL",{data:{arnOrS3Url:t}});if(!(0,S3BucketName_1.isBucketName)(r))throw AltoError_1.AltoError.create("Invalid S3 Bucket name",{data:{s3URL:t,invalidName:r}});o=r}else{if(!(0,S3BucketName_1.isBucketName)(t))throw AltoError_1.AltoError.create("Invalid name, ARN or S3 URL",{data:{arnOrS3Url:t}});o=t}return getHttpsUrl(o,r)}function getHttpsUrl(t,r){return`https://${t}.s3.${r}.amazonaws.com`}exports.isS3URL=isS3URL,exports.toBucketHttpsUrl=toBucketHttpsUrl;const httpsS3UrlRX=/^(https:\/\/([^.]+)\.s3\.([^.]+)\.amazonaws\.com)(?:$|\/)/;function isBucketHttpsUrl(t){if(!(0,NonEmptyString_1.isNonEmptyString)(t))return!1;try{return getBucketIdentifiers(t),!0}catch(t){return!1}}function getBucketIdentifiers(t){var r;const[,e,o,n]=null!==(r=httpsS3UrlRX.exec(t))&&void 0!==r?r:[];if(!(0,NonEmptyString_1.isNonEmptyString)(e)||!o||!(0,NonEmptyString_1.isNonEmptyString)(n))throw AltoError_1.AltoError.create("Invalid HTTPS S3 URL.",{data:{invalidHttpsURL:t}});if(!(0,S3BucketName_1.isBucketName)(o))throw AltoError_1.AltoError.create("Invalid S3 Bucket name",{data:{bucketHttpsUrl:t,invalidName:o}});return{httpsUrl:e,domain:o+".s3.amazonaws.com",regionalDomain:`${o}.s3.${n}.amazonaws.com`,bucketName:o,region:n,s3Url:"s3://"+o,arn:(0,Arn_1.formatArn)({service:"s3",resource:o,region:"",account:""})}}exports.isBucketHttpsUrl=isBucketHttpsUrl,exports.getBucketIdentifiers=getBucketIdentifiers;