@atproto/aws 0.2.29 → 0.2.31

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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atproto/aws
2
2
 
3
+ ## 0.2.31
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [[`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7), [`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7), [`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7), [`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7), [`261968fd6`](https://github.com/bluesky-social/atproto/commit/261968fd65014ded613e2bf085d61a7864b8fba7)]:
8
+ - @atproto/common-web@0.4.4
9
+ - @atproto/common@0.5.0
10
+ - @atproto/repo@0.8.11
11
+ - @atproto/crypto@0.4.4
12
+
13
+ ## 0.2.30
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [[`8dd77bad2`](https://github.com/bluesky-social/atproto/commit/8dd77bad2fdee20e39d3787198d960c19d8df3d0)]:
18
+ - @atproto/repo@0.8.10
19
+
3
20
  ## 0.2.29
4
21
 
5
22
  ### Patch Changes
package/dist/bunny.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bunny.js","sourceRoot":"","sources":["../src/bunny.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAQ9C,MAAM,aAAa,GAAG,6BAA6B,CAAA;AAEnD,MAAa,gBAAgB;IAC3B,YAAmB,GAAgB;QAAvB;;;;mBAAO,GAAG;WAAa;IAAG,CAAC;IACvC,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAe;QAChD,MAAM,IAAA,qBAAY,EAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACvB,QAAQ,CAAC;YACP,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;SAC9B,CAAC,CACH,CACF,CAAA;IACH,CAAC;CACF;AAZD,4CAYC;AAED,kBAAe,gBAAgB,CAAA;AAE/B,KAAK,UAAU,QAAQ,CAAC,IAAwC;IAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAA;IACpC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,MAAM,KAAK,CAAC,aAAa,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE;QACnD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;KACvC,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"bunny.js","sourceRoot":"","sources":["../src/bunny.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAQ9C,MAAM,aAAa,GAAG,6BAA6B,CAAA;AAEnD,MAAa,gBAAgB;IAC3B,YAAmB,GAAgB;QAAvB;;;;mBAAO,GAAG;WAAa;IAAG,CAAC;IACvC,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAe;QAChD,MAAM,IAAA,qBAAY,EAChB,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACvB,QAAQ,CAAC;YACP,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI;YAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS;SAC9B,CAAC,CACH,CACF,CAAA;IACH,CAAC;CACF;AAZD,4CAYC;AAED,kBAAe,gBAAgB,CAAA;AAE/B,KAAK,UAAU,QAAQ,CAAC,IAAwC;IAC9D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAA;IACpC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,MAAM,KAAK,CAAC,aAAa,GAAG,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE;QACnD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;KACvC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { allFulfilled } from '@atproto/common'\nimport { ImageInvalidator } from './types'\n\nexport type BunnyConfig = {\n accessKey: string\n urlPrefix: string\n}\n\nconst API_PURGE_URL = 'https://api.bunny.net/purge'\n\nexport class BunnyInvalidator implements ImageInvalidator {\n constructor(public cfg: BunnyConfig) {}\n async invalidate(_subject: string, paths: string[]) {\n await allFulfilled(\n paths.map(async (path) =>\n purgeUrl({\n url: this.cfg.urlPrefix + path,\n accessKey: this.cfg.accessKey,\n }),\n ),\n )\n }\n}\n\nexport default BunnyInvalidator\n\nasync function purgeUrl(opts: { accessKey: string; url: string }) {\n const search = new URLSearchParams()\n search.set('async', 'true')\n search.set('url', opts.url)\n await fetch(API_PURGE_URL + '?' + search.toString(), {\n method: 'post',\n headers: { AccessKey: opts.accessKey },\n })\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cloudfront.js","sourceRoot":"","sources":["../src/cloudfront.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAiD;AAQjD,MAAa,qBAAqB;IAIhC,YAAY,GAAqB;QAHjC;;;;;WAAsB;QACtB;;;;;WAAkB;QAClB;;;;;WAAsB;QAEpB,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;QACnD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;YAC/B,GAAG,IAAI;YACP,UAAU,EAAE,YAAY;SACzB,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,KAAe;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,iBAAiB,EAAE;gBACjB,eAAe,EAAE,kBAAkB,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC1D,KAAK,EAAE;oBACL,QAAQ,EAAE,KAAK,CAAC,MAAM;oBACtB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;iBACnD;aACF;SACF,CAAC,CAAA;IACJ,CAAC;CACF;AAzBD,sDAyBC;AAED,kBAAe,qBAAqB,CAAA"}
1
+ {"version":3,"file":"cloudfront.js","sourceRoot":"","sources":["../src/cloudfront.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAAiD;AAQjD,MAAa,qBAAqB;IAIhC,YAAY,GAAqB;QAHjC;;;;;WAAsB;QACtB;;;;;WAAkB;QAClB;;;;;WAAsB;QAEpB,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;QACnD,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,EAAE,CAAA;QAClC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;YAC/B,GAAG,IAAI;YACP,UAAU,EAAE,YAAY;SACzB,CAAC,CAAA;IACJ,CAAC;IACD,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,KAAe;QAC/C,MAAM,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YACnC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,iBAAiB,EAAE;gBACjB,eAAe,EAAE,kBAAkB,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;gBAC1D,KAAK,EAAE;oBACL,QAAQ,EAAE,KAAK,CAAC,MAAM;oBACtB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;iBACnD;aACF;SACF,CAAC,CAAA;IACJ,CAAC;CACF;AAzBD,sDAyBC;AAED,kBAAe,qBAAqB,CAAA","sourcesContent":["import * as aws from '@aws-sdk/client-cloudfront'\nimport { ImageInvalidator } from './types'\n\nexport type CloudfrontConfig = {\n distributionId: string\n pathPrefix?: string\n} & Omit<aws.CloudFrontClientConfig, 'apiVersion'>\n\nexport class CloudfrontInvalidator implements ImageInvalidator {\n distributionId: string\n pathPrefix: string\n client: aws.CloudFront\n constructor(cfg: CloudfrontConfig) {\n const { distributionId, pathPrefix, ...rest } = cfg\n this.distributionId = distributionId\n this.pathPrefix = pathPrefix ?? ''\n this.client = new aws.CloudFront({\n ...rest,\n apiVersion: '2020-05-31',\n })\n }\n async invalidate(subject: string, paths: string[]) {\n await this.client.createInvalidation({\n DistributionId: this.distributionId,\n InvalidationBatch: {\n CallerReference: `cf-invalidator-${subject}-${Date.now()}`,\n Paths: {\n Quantity: paths.length,\n Items: paths.map((path) => this.pathPrefix + path),\n },\n },\n })\n }\n}\n\nexport default CloudfrontInvalidator\n"]}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,uCAAoB;AACpB,+CAA4B;AAC5B,0CAAuB;AACvB,yCAAsB;AACtB,0CAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wCAAqB;AACrB,uCAAoB;AACpB,+CAA4B;AAC5B,0CAAuB;AACvB,yCAAsB;AACtB,0CAAuB","sourcesContent":["export * from './kms'\nexport * from './s3'\nexport * from './cloudfront'\nexport * from './bunny'\nexport * from './util'\nexport * from './types'\n"]}
package/dist/kms.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"kms.js","sourceRoot":"","sources":["../src/kms.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA0C;AAC1C,uDAA4D;AAC5D,8DAAoC;AACpC,iDAAkC;AAClC,wDAAyC;AAEzC,MAAM,UAAU,GAAG,IAAI,qBAAU,CAAC,WAAW,CAAC,CAAA;AAO9C,MAAa,UAAU;IAGrB,YACU,MAAe,EACf,KAAa,EACb,SAAqB;QAF7B;;;;mBAAQ,MAAM;WAAS;QACvB;;;;mBAAQ,KAAK;WAAQ;QACrB;;;;mBAAQ,SAAS;WAAY;QAL/B;;;;mBAAS,MAAM,CAAC,iBAAiB;WAAA;IAM9B,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAc;QAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;YACzB,GAAG,IAAI;YACP,UAAU,EAAE,YAAY;SACzB,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC9C,CAAC;QACD,gFAAgF;QAChF,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAC1B,KAAK,EACL,KAAK,CACN,CAAA;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;QACxD,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC;IAED,GAAG;QACD,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAe;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,GAAG;YACZ,gBAAgB,EAAE,eAAe;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QACD,oDAAoD;QACpD,uCAAuC;QACvC,kFAAkF;QAClF,qCAAqC;QACrC,8HAA8H;QAC9H,MAAM,GAAG,GAAG,qBAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAAA;QACnC,OAAO,UAAU,CAAC,iBAAiB,EAAE,CAAA;IACvC,CAAC;CACF;AAnDD,gCAmDC;AAED,kBAAe,UAAU,CAAA"}
1
+ {"version":3,"file":"kms.js","sourceRoot":"","sources":["../src/kms.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yDAA0C;AAC1C,uDAA4D;AAC5D,8DAAoC;AACpC,iDAAkC;AAClC,wDAAyC;AAEzC,MAAM,UAAU,GAAG,IAAI,qBAAU,CAAC,WAAW,CAAC,CAAA;AAO9C,MAAa,UAAU;IAGrB,YACU,MAAe,EACf,KAAa,EACb,SAAqB;QAF7B;;;;mBAAQ,MAAM;WAAS;QACvB;;;;mBAAQ,KAAK;WAAQ;QACrB;;;;mBAAQ,SAAS;WAAY;QAL/B;;;;mBAAS,MAAM,CAAC,iBAAiB;WAAA;IAM9B,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAc;QAC9B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAA;QAC9B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;YACzB,GAAG,IAAI;YACP,UAAU,EAAE,YAAY;SACzB,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACvD,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC9C,CAAC;QACD,gFAAgF;QAChF,MAAM,eAAe,GAAG,UAAU,CAAC,YAAY,CAC7C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAC1B,KAAK,EACL,KAAK,CACN,CAAA;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;QACxD,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC;IAED,GAAG;QACD,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAe;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACjC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,GAAG;YACZ,gBAAgB,EAAE,eAAe;SAClC,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;QAC5C,CAAC;QACD,oDAAoD;QACpD,uCAAuC;QACvC,kFAAkF;QAClF,qCAAqC;QACrC,8HAA8H;QAC9H,MAAM,GAAG,GAAG,qBAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAAA;QACnC,OAAO,UAAU,CAAC,iBAAiB,EAAE,CAAA;IACvC,CAAC;CACF;AAnDD,gCAmDC;AAED,kBAAe,UAAU,CAAA","sourcesContent":["import * as aws from '@aws-sdk/client-kms'\nimport { secp256k1 as noble } from '@noble/curves/secp256k1'\nimport KeyEncoder from 'key-encoder'\nimport * as ui8 from 'uint8arrays'\nimport * as crypto from '@atproto/crypto'\n\nconst keyEncoder = new KeyEncoder('secp256k1')\n\nexport type KmsConfig = { keyId: string } & Omit<\n aws.KMSClientConfig,\n 'apiVersion'\n>\n\nexport class KmsKeypair implements crypto.Keypair {\n jwtAlg = crypto.SECP256K1_JWT_ALG\n\n constructor(\n private client: aws.KMS,\n private keyId: string,\n private publicKey: Uint8Array,\n ) {}\n\n static async load(cfg: KmsConfig) {\n const { keyId, ...rest } = cfg\n const client = new aws.KMS({\n ...rest,\n apiVersion: '2014-11-01',\n })\n const res = await client.getPublicKey({ KeyId: keyId })\n if (!res.PublicKey) {\n throw new Error('Could not find public key')\n }\n // public key comes back DER-encoded, so we translate it to raw 65 byte encoding\n const rawPublicKeyHex = keyEncoder.encodePublic(\n Buffer.from(res.PublicKey),\n 'der',\n 'raw',\n )\n const publicKey = ui8.fromString(rawPublicKeyHex, 'hex')\n return new KmsKeypair(client, keyId, publicKey)\n }\n\n did(): string {\n return crypto.formatDidKey(this.jwtAlg, this.publicKey)\n }\n\n async sign(msg: Uint8Array): Promise<Uint8Array> {\n const res = await this.client.sign({\n KeyId: this.keyId,\n Message: msg,\n SigningAlgorithm: 'ECDSA_SHA_256',\n })\n if (!res.Signature) {\n throw new Error('Could not get signature')\n }\n // signature comes back DER encoded & not-normalized\n // we translate to raw 64 byte encoding\n // we also normalize s as no more than 1/2 prime order to pass strict verification\n // (prevents duplicating a signature)\n // more: https://github.com/bitcoin-core/secp256k1/blob/a1102b12196ea27f44d6201de4d25926a2ae9640/include/secp256k1.h#L530-L534\n const sig = noble.Signature.fromDER(res.Signature)\n const normalized = sig.normalizeS()\n return normalized.toCompactRawBytes()\n }\n}\n\nexport default KmsKeypair\n"]}
package/dist/s3.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"s3.js","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../src/s3.ts"],"names":[],"mappings":"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","sourcesContent":["import stream from 'node:stream'\nimport { NoSuchKey, S3, S3ClientConfig } from '@aws-sdk/client-s3'\nimport { Upload } from '@aws-sdk/lib-storage'\nimport { CID } from 'multiformats/cid'\nimport { SECOND, aggregateErrors, chunkArray } from '@atproto/common-web'\nimport { randomStr } from '@atproto/crypto'\nimport { BlobNotFoundError, BlobStore } from '@atproto/repo'\n\nexport type S3Config = {\n bucket: string\n /**\n * The maximum time any request to S3 (including individual blob chunks\n * uploads) can take, in milliseconds.\n */\n requestTimeoutMs?: number\n /**\n * The maximum total time a blob upload can take, in milliseconds.\n */\n uploadTimeoutMs?: number\n} & Omit<S3ClientConfig, 'apiVersion' | 'requestHandler'>\n\nexport class S3BlobStore implements BlobStore {\n private client: S3\n private bucket: string\n private uploadTimeoutMs: number\n\n constructor(\n public did: string,\n cfg: S3Config,\n ) {\n const {\n bucket,\n uploadTimeoutMs = 10 * SECOND,\n requestTimeoutMs = uploadTimeoutMs,\n ...rest\n } = cfg\n this.bucket = bucket\n this.uploadTimeoutMs = uploadTimeoutMs\n this.client = new S3({\n ...rest,\n apiVersion: '2006-03-01',\n // Ensures that all requests timeout under \"requestTimeoutMs\".\n //\n // @NOTE This will also apply to the upload of each individual chunk\n // when using Upload from @aws-sdk/lib-storage.\n requestHandler: { requestTimeout: requestTimeoutMs },\n })\n }\n\n static creator(cfg: S3Config) {\n return (did: string) => {\n return new S3BlobStore(did, cfg)\n }\n }\n\n private genKey() {\n return randomStr(32, 'base32')\n }\n\n private getTmpPath(key: string): string {\n return `tmp/${this.did}/${key}`\n }\n\n private getStoredPath(cid: CID): string {\n return `blocks/${this.did}/${cid.toString()}`\n }\n\n private getQuarantinedPath(cid: CID): string {\n return `quarantine/${this.did}/${cid.toString()}`\n }\n\n private async uploadBytes(path: string, bytes: Uint8Array | stream.Readable) {\n // @NOTE we use Upload rather than client.putObject because stream length is\n // not known in advance. See also aws/aws-sdk-js-v3#2348.\n //\n // See also https://github.com/aws/aws-sdk-js-v3/issues/6426, wherein Upload\n // may hang the s3 connection under certain circumstances. We don't have a\n // good way to avoid this, so we use timeouts defensively on all s3\n // requests.\n\n const abortSignal = AbortSignal.timeout(this.uploadTimeoutMs)\n const abortController = new AbortController()\n abortSignal.addEventListener('abort', () => abortController.abort())\n\n const upload = new Upload({\n client: this.client,\n params: {\n Bucket: this.bucket,\n Body: bytes,\n Key: path,\n },\n // @ts-ignore native implementation fine in node >=15\n abortController,\n })\n\n try {\n await upload.done()\n } catch (err) {\n // Translate aws-sdk's abort error to something more specific\n if (err instanceof Error && err.name === 'AbortError') {\n throw new Error('Blob upload timed out', { cause: err })\n }\n\n throw err\n }\n }\n\n async putTemp(bytes: Uint8Array | stream.Readable): Promise<string> {\n const key = this.genKey()\n await this.uploadBytes(this.getTmpPath(key), bytes)\n return key\n }\n\n async makePermanent(key: string, cid: CID): Promise<void> {\n try {\n // @NOTE we normally call this method when we know the file is temporary.\n // Because of this, we optimistically move the file, allowing to make\n // fewer network requests in the happy path.\n await this.move({\n from: this.getTmpPath(key),\n to: this.getStoredPath(cid),\n })\n } catch (err) {\n // If the optimistic move failed because the temp file was not found,\n // check if the permanent file already exists. If it does, we can assume\n // that another process made the file permanent concurrently, and we can\n // no-op.\n if (err instanceof BlobNotFoundError) {\n // Blob was not found from temp storage...\n const alreadyHas = await this.hasStored(cid)\n // already saved, so we no-op\n if (alreadyHas) return\n }\n\n throw err\n }\n }\n\n async putPermanent(\n cid: CID,\n bytes: Uint8Array | stream.Readable,\n ): Promise<void> {\n await this.uploadBytes(this.getStoredPath(cid), bytes)\n }\n\n async quarantine(cid: CID): Promise<void> {\n await this.move({\n from: this.getStoredPath(cid),\n to: this.getQuarantinedPath(cid),\n })\n }\n\n async unquarantine(cid: CID): Promise<void> {\n await this.move({\n from: this.getQuarantinedPath(cid),\n to: this.getStoredPath(cid),\n })\n }\n\n private async getObject(cid: CID) {\n const res = await this.client.getObject({\n Bucket: this.bucket,\n Key: this.getStoredPath(cid),\n })\n if (res.Body) {\n return res.Body\n } else {\n throw new BlobNotFoundError()\n }\n }\n\n async getBytes(cid: CID): Promise<Uint8Array> {\n const res = await this.getObject(cid)\n return res.transformToByteArray()\n }\n\n async getStream(cid: CID): Promise<stream.Readable> {\n const res = await this.getObject(cid)\n return res as stream.Readable\n }\n\n async delete(cid: CID): Promise<void> {\n await this.deleteKey(this.getStoredPath(cid))\n }\n\n async deleteMany(cids: CID[]): Promise<void> {\n const errors: unknown[] = []\n for (const chunk of chunkArray(cids, 500)) {\n try {\n const keys = chunk.map((cid) => this.getStoredPath(cid))\n await this.deleteManyKeys(keys)\n } catch (err) {\n errors.push(err)\n }\n }\n if (errors.length) throw aggregateErrors(errors)\n }\n\n async hasStored(cid: CID): Promise<boolean> {\n return this.hasKey(this.getStoredPath(cid))\n }\n\n async hasTemp(key: string): Promise<boolean> {\n return this.hasKey(this.getTmpPath(key))\n }\n\n private async hasKey(key: string) {\n try {\n const res = await this.client.headObject({\n Bucket: this.bucket,\n Key: key,\n })\n return res.$metadata.httpStatusCode === 200\n } catch (err) {\n return false\n }\n }\n\n private async deleteKey(key: string) {\n await this.client.deleteObject({\n Bucket: this.bucket,\n Key: key,\n })\n }\n\n private async deleteManyKeys(keys: string[]) {\n await this.client.deleteObjects({\n Bucket: this.bucket,\n Delete: {\n Objects: keys.map((k) => ({ Key: k })),\n },\n })\n }\n\n private async move(keys: { from: string; to: string }) {\n try {\n await this.client.copyObject({\n Bucket: this.bucket,\n CopySource: `${this.bucket}/${keys.from}`,\n Key: keys.to,\n })\n } catch (cause) {\n if (cause instanceof NoSuchKey) {\n // Already deleted, possibly by a concurrently running process\n throw new BlobNotFoundError(undefined, { cause })\n }\n\n throw cause\n }\n\n try {\n await this.client.deleteObject({\n Bucket: this.bucket,\n Key: keys.from,\n })\n } catch (err) {\n if (err instanceof NoSuchKey) {\n // Already deleted, possibly by a concurrently running process\n return\n }\n\n throw err\n }\n }\n}\n\nexport default S3BlobStore\n"]}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["// @NOTE keep in sync with same interface in bsky/src/image/invalidator.ts\n// this is separate to avoid the dependency on @atproto/bsky.\nexport interface ImageInvalidator {\n invalidate(subject: string, paths: string[]): Promise<void>\n}\n"]}
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAG9C,MAAa,qBAAqB;IAChC,YAAmB,YAAgC;QAAvC;;;;mBAAO,YAAY;WAAoB;IAAG,CAAC;IACvD,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,KAAe;QAC/C,MAAM,IAAA,qBAAY,EAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACpC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CACvC,CACF,CAAA;IACH,CAAC;CACF;AATD,sDASC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAG9C,MAAa,qBAAqB;IAChC,YAAmB,YAAgC;QAAvC;;;;mBAAO,YAAY;WAAoB;IAAG,CAAC;IACvD,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,KAAe;QAC/C,MAAM,IAAA,qBAAY,EAChB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CACpC,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CACvC,CACF,CAAA;IACH,CAAC;CACF;AATD,sDASC","sourcesContent":["import { allFulfilled } from '@atproto/common'\nimport { ImageInvalidator } from './types'\n\nexport class MultiImageInvalidator implements ImageInvalidator {\n constructor(public invalidators: ImageInvalidator[]) {}\n async invalidate(subject: string, paths: string[]) {\n await allFulfilled(\n this.invalidators.map((invalidator) =>\n invalidator.invalidate(subject, paths),\n ),\n )\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/aws",
3
- "version": "0.2.29",
3
+ "version": "0.2.31",
4
4
  "license": "MIT",
5
5
  "description": "Shared AWS cloud API helpers for atproto services",
6
6
  "keywords": [
@@ -27,10 +27,10 @@
27
27
  "key-encoder": "^2.0.3",
28
28
  "multiformats": "^9.9.0",
29
29
  "uint8arrays": "3.0.0",
30
- "@atproto/common": "^0.4.12",
31
- "@atproto/common-web": "^0.4.3",
30
+ "@atproto/common": "^0.5.0",
31
+ "@atproto/common-web": "^0.4.4",
32
32
  "@atproto/crypto": "^0.4.4",
33
- "@atproto/repo": "^0.8.9"
33
+ "@atproto/repo": "^0.8.11"
34
34
  },
35
35
  "devDependencies": {
36
36
  "typescript": "^5.6.3"