@_linked/s3 1.4.1 → 1.5.1

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,26 @@
1
1
  # @\_linked/s3
2
2
 
3
+ ## 1.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#31](https://github.com/linked-fw/s3/pull/31) [`e4c009c`](https://github.com/linked-fw/s3/commit/e4c009cf27eb807e1b2a542b77cb0f62dd6d73fe) Thanks [@flyon](https://github.com/flyon)! - Sourcemaps now embed their TypeScript source, so consumers no longer see 'points to missing source files' warnings.
8
+
9
+ ## 1.5.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#28](https://github.com/linked-fw/s3/pull/28) [`a3e2308`](https://github.com/linked-fw/s3/commit/a3e2308b78e2c8237eabd395f11d325f775360a3) Thanks [@flyon](https://github.com/flyon)! - Require `@_linked/core@^2.22.8` (was `^2.21.0`), and pin it in the lockfile.
14
+
15
+ The declared range was wide enough that the resolved core depended on whatever the
16
+ consumer — or this repo's own CI, via `package-lock.json` — happened to install. Core
17
+ decides how a shape's IRI is minted, so a stale core made this package emit legacy
18
+ `data.lincd.org` IRIs instead of the arch-02 `linked.cm` scheme. Which IRIs a published
19
+ package produces should not be a function of the installer's dependency tree.
20
+
21
+ Minor rather than patch: this raises the minimum core a consumer must resolve, so it
22
+ changes what gets installed rather than only what this package does internally.
23
+
3
24
  ## 1.4.1
4
25
 
5
26
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/backend.ts"],"names":[],"mappings":"AAAA,gEAAgE"}
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/backend.ts"],"names":[],"mappings":"AAAA,gEAAgE","sourcesContent":["//import your providers here (providers only run in the backend)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AACpB,OAAO,6BAA6B,CAAC;AAErC,cAAc;AACd,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;AACjC,gFAAgF;AAChF,wCAAwC;AACxC,gDAAgD;AAChD,oCAAoC;AAEpC,iBAAiB;AACjB,OAAO,sBAAsB,CAAC;AAC9B,OAAO,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,CAAC;AACpB,OAAO,6BAA6B,CAAC;AAErC,cAAc;AACd,OAAO,sBAAsB,CAAC;AAC9B,OAAO,yBAAyB,CAAC;AACjC,gFAAgF;AAChF,wCAAwC;AACxC,gDAAgD;AAChD,oCAAoC;AAEpC,iBAAiB;AACjB,OAAO,sBAAsB,CAAC;AAC9B,OAAO,iBAAiB,CAAC","sourcesContent":["import './types.js';\nimport './ontologies/s3.register.js';\n\n//SHAPES FIRST\nimport './shapes/S3Bucket.js';\nimport './shapes/S3FileStore.js';\n// Old quad-store patterns — depend on N3FileStore/BackendStore (in modules_old)\n// import './shapes/S3FrontendStore.js';\n// import './shapes/S3FrontendStoreProvider.js';\n// import './shapes/S3QuadStore.js';\n\n//THEN COMPONENTS\nimport './utils/accessUrl.js';\nimport './utils/cors.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/ontologies/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,CAAC,IAAI,QAAQ,GAAG,GAAG,EAAE;IACzB,YAAY;IACZ,OAAO,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CACvB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAE5D,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,UAAU;AACV,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AACvC,MAAM,CAAC,IAAI,aAAa,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;AAC/C,MAAM,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AAEvC,aAAa;AACb,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;AACrC,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3B,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEjC,mFAAmF;AACnF,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,UAAU;IACV,MAAM;IACN,SAAS;IACT,aAAa;IACb,SAAS;IAET,aAAa;IACb,MAAM;IACN,QAAQ;IACR,GAAG;IACH,MAAM;CACP,CAAC"}
1
+ {"version":3,"file":"s3.js","sourceRoot":"","sources":["../../../src/ontologies/s3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,CAAC,IAAI,QAAQ,GAAG,GAAG,EAAE;IACzB,YAAY;IACZ,OAAO,MAAM,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CACvB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,0BAA0B,CAAC,CAAC;AAE5D,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,UAAU;AACV,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AACvC,MAAM,CAAC,IAAI,aAAa,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;AAC/C,MAAM,CAAC,IAAI,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AAEvC,aAAa;AACb,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,CAAC,IAAI,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;AACrC,MAAM,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC3B,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEjC,mFAAmF;AACnF,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,UAAU;IACV,MAAM;IACN,SAAS;IACT,aAAa;IACb,SAAS;IAET,aAAa;IACb,MAAM;IACN,QAAQ;IACR,GAAG;IACH,MAAM;CACP,CAAC","sourcesContent":["import { createNameSpace } from '@_linked/core/utils/NameSpace';\n\nexport var loadData = () => {\n //@ts-ignore\n return import('../data/s3.json', { with: { type: 'json' } }).then(\n (data) => data.default\n );\n};\n\nexport var ns = createNameSpace('http://lincd.org/ont/s3/');\n\nexport var _self = ns('');\n\n// Classes\nexport var Bucket = ns('Bucket');\nexport var FileStore = ns('FileStore');\nexport var FrontendStore = ns('FrontendStore');\nexport var QuadStore = ns('QuadStore');\n\n// Properties\nexport var bucket = ns('bucket');\nexport var endpoint = ns('endpoint');\nexport var key = ns('key');\nexport var secret = ns('secret');\n\n//An extra grouping object so all the entities can be accessed from the prefix/name\nexport const s3 = {\n // Classes\n Bucket,\n FileStore,\n FrontendStore,\n QuadStore,\n\n // Properties\n bucket,\n endpoint,\n key,\n secret,\n};\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"s3.register.js","sourceRoot":"","sources":["../../../src/ontologies/s3.register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAC,MAAM,SAAS,CAAC;AACrC,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAE7C,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"s3.register.js","sourceRoot":"","sources":["../../../src/ontologies/s3.register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAC,QAAQ,EAAE,EAAE,EAAC,MAAM,SAAS,CAAC;AACrC,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAE7C,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC","sourcesContent":["/**\n * Registers this ontology.\n *\n * Kept out of `s3.ts` because registration needs that module's whole export\n * namespace, and a module cannot import itself once a bundler is involved: Rollup\n * treats a static self-reference as a circular import and elides it, so the binding is\n * undefined at runtime and the consuming app dies at boot with `_this is not\n * defined`. `tsc` preserves it, which is why the pattern survived for as long as\n * packages were built with `tsc` alone.\n *\n * From a sibling module the same import is ordinary and survives.\n */\nimport * as terms from './s3.js';\nimport {loadData, ns} from './s3.js';\nimport {linkedOntology} from '../package.js';\n\nlinkedOntology(terms, ns, 's3', loadData, '../data/s3.json');\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,CAAC,MAAM,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,WAAW,GACZ,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"package.js","sourceRoot":"","sources":["../../src/package.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,CAAC,MAAM,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,WAAW,GACZ,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC","sourcesContent":["import { linkedPackage } from '@_linked/core/utils/Package';\n\nexport const {\n linkedShape,\n linkedUtil,\n linkedOntology,\n registerPackageExport,\n packageExports,\n packageName,\n} = linkedPackage('@_linked/s3');\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"S3Bucket.js","sourceRoot":"","sources":["../../../src/shapes/S3Bucket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"S3Bucket.js","sourceRoot":"","sources":["../../../src/shapes/S3Bucket.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CopyObjectCommand,\n CopyObjectCommandInput,\n CORSRule,\n CreateBucketCommand,\n DeleteObjectCommand,\n DeleteObjectCommandInput,\n GetBucketCorsCommand,\n GetObjectCommand,\n GetObjectCommandInput,\n HeadObjectCommand,\n HeadObjectCommandInput,\n HeadObjectCommandOutput,\n ListObjectsCommand,\n PutBucketCorsCommand,\n PutObjectCommand,\n S3Client,\n} from '@aws-sdk/client-s3';\nimport {\n corsAccessDeniedMessage,\n corsRulesEqual,\n isCorsAccessDenied,\n isNoSuchCorsConfiguration,\n staticAssetCorsRule,\n type StaticAssetCorsOptions,\n} from '../utils/cors.js';\nimport {\n PutObjectCommandInput,\n PutObjectCommandOutput,\n} from '@aws-sdk/client-s3/dist-types/commands/PutObjectCommand';\nimport { StreamingBlobPayloadInputTypes } from '@smithy/types';\nimport { ListObjectsCommandInput } from '@aws-sdk/client-s3/dist-types/commands/ListObjectsCommand';\n\nexport interface S3ClientConfigInput {\n endpoint?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n region?: string;\n}\n\nexport const endpoint: string = process.env.S3_BUCKET_ENDPOINT;\n\n/**\n * Builds an S3 client from explicit config, falling back to legacy env vars.\n * This enables multiple S3 stores in one process with independent credentials/endpoints.\n */\nexport const createS3Client = (config: S3ClientConfigInput = {}) =>\n new S3Client({\n endpoint: config.endpoint ?? process.env.S3_BUCKET_ENDPOINT,\n // https://github.com/aws/aws-sdk-js-v3/issues/3392#issuecomment-1120027821\n credentials: {\n accessKeyId: config.accessKeyId ?? process.env.AWS_ACCESS_KEY_ID,\n secretAccessKey:\n config.secretAccessKey ?? process.env.AWS_SECRET_ACCESS_KEY,\n },\n region: config.region ?? process.env.AWS_REGION ?? 'us-east-1',\n });\n\n/**\n * Legacy singleton exported for backward compatibility. New code should prefer\n * per-instance clients by passing config into S3Bucket/S3FileStore.\n */\nexport const s3Client = createS3Client();\n\n/**\n * A bucket is not a Shape.\n *\n * This class used to `extends Shape` and carry `@linkedShape` with\n * `static targetClass = s3.Bucket`, but used nothing from `Shape`: no `this.id`,\n * no `this.uri`, no `nodeShape`, no Shape statics, no property decorators.\n * `label` is its own field. The only inherited behaviour was a `super()` call\n * that deliberately passed `undefined` for the string form — i.e. did nothing at\n * all — and both construction sites pass a string.\n *\n * Dropping `extends Shape` forces dropping the decorator with it, since\n * `linkedShape` is typed `<T extends typeof Shape>`. That removes S3Bucket's\n * auto-minted NodeShape from the shape index, which is the one observable\n * change — see the changeset. The shape was propertyless and `s3:Bucket` has no\n * RDF definition in this package's ontology data, so nothing described it.\n *\n * Follows `S3FileStore`, `LocalFileStore` and `FusekiStore`, and core `0e8c86e`\n * (\"datasets are not shapes\").\n */\nexport class S3Bucket {\n protected _client: S3Client;\n label: string;\n\n private ensureKeyPromise: Map<string, Promise<string | void>> = new Map();\n\n /**\n * `n` names the bucket. The `{id}` form is still accepted so existing callers\n * keep compiling, but it is no longer stored as a node id — nothing read it.\n */\n constructor(n?: string | { id: string }, clientConfig?: S3ClientConfigInput) {\n if (typeof n === 'string') {\n this.label = n;\n }\n this._client = createS3Client(clientConfig);\n }\n\n get endpoint(): string {\n return this._client.config.endpoint.toString();\n }\n\n /**\n * Delete an object from the bucket.\n * @param key The key of the object to delete\n * @param options Additional options to pass to the DeleteObjectCommand\n * @returns The response from the DeleteObjectCommand\n * @todo Batch delete, see https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html\n */\n async deleteObject(\n key: string,\n options?: Omit<DeleteObjectCommandInput, 'Key' | 'Bucket'>\n ) {\n let bucketParams: DeleteObjectCommandInput = {\n Bucket: this.label,\n Key: key,\n ...options,\n };\n try {\n const data = await this._client.send(\n new DeleteObjectCommand(bucketParams)\n );\n // console.log('Successfully deleted object ' + key);\n return data;\n } catch (err) {\n console.log('Could not delete object: ', err);\n }\n }\n\n async copyObject(\n sourceKey: string,\n destinationKey: string,\n options?: Omit<PutObjectCommandInput, 'Key' | 'Bucket'>\n ) {\n let bucketParams: CopyObjectCommandInput = {\n Bucket: this.label,\n Key: destinationKey,\n CopySource: `${this.label}/${sourceKey}`,\n ...options,\n };\n try {\n const data = await this._client.send(new CopyObjectCommand(bucketParams));\n // console.log('Successfully copied object ' + sourceKey + ' to ' + destinationKey);\n return data.$metadata.httpStatusCode === 200;\n } catch (err) {\n console.log('Could not copy object: ', err);\n }\n }\n\n /**\n * Put an object into the bucket.\n *\n * @param key The key of the object to PUT (i.e. file name)\n * @param value The value of the object to PUT (i.e. file contents)\n * @param options Additional options to pass to the PutObjectCommand\n * @returns The response from the PutObjectCommand\n */\n async putObject(\n key: string,\n value: StreamingBlobPayloadInputTypes,\n options?: Omit<PutObjectCommandInput, 'Body' | 'Key' | 'Bucket'>\n ): Promise<PutObjectCommandOutput> {\n let bucketParams: PutObjectCommandInput = {\n Bucket: this.label,\n Key: key,\n Body: value,\n ACL: 'public-read',\n ...options,\n };\n\n try {\n const data = await this._client.send(new PutObjectCommand(bucketParams));\n // console.log(\n // 'Successfully uploaded object: ' +\n // bucketParams.Bucket +\n // '/' +\n // bucketParams.Key,\n // );\n return data;\n } catch (err) {\n console.log('Error', err);\n }\n return null;\n }\n\n /**\n * Get a list of all object keys in the bucket.\n * Important to note that only a maximum 1000 keys will be returned.\n *\n * @param prefix The prefix to search for in the bucket. This can be a folder or the beginning of a file name.\n * @returns A list of all object keys in the bucket\n * @todo Recursive search within directories\n * @todo Implement pagination\n */\n async getAllObjectKeys(prefix = ''): Promise<string[]> {\n let bucketParams = {\n Bucket: this.label,\n Prefix: prefix,\n } as ListObjectsCommandInput;\n try {\n const data = await this._client.send(\n new ListObjectsCommand(bucketParams)\n );\n return data.Contents?.map((object) => object.Key) || [];\n } catch (err) {\n console.log('Could not list bucket contents: ', err);\n return Promise.reject(err);\n }\n }\n\n /**\n * Get the contents of an object in the bucket.\n * @param key The key of the object to get\n * @returns The contents of the object as a string\n */\n async getObject(key: string): Promise<string> {\n let bucketParams: GetObjectCommandInput = {\n Bucket: this.label,\n Key: key,\n };\n\n return new Promise(async (resolve, reject) => {\n const getObjectCommand = new GetObjectCommand(bucketParams);\n\n try {\n const response = await this._client.send(getObjectCommand);\n // let objectData = response.Body.toString();\n // resolve(objectData);\n\n //for future usecases: use this to stream data or use binary data,\n // see https://stackoverflow.com/questions/36942442/how-to-get-response-from-s3-getobject-in-node-js\n // // Store all of data chunks returned from the response data stream\n // // into an array then use Array#join() to use the returned contents as a String\n let responseDataChunks = [];\n // let body:ReadableStream = response.Body as ReadableStream;\n let body = response.Body as any;\n // Handle an error while streaming the response body\n body.once('error', (err) => reject(err));\n\n // Attach a 'data' listener to add the chunks of data to our array\n // Each chunk is a Buffer instance\n body.on('data', (chunk) => responseDataChunks.push(chunk));\n\n // Once the stream has no more data, join the chunks into a string and return the string\n body.once('end', () => resolve(responseDataChunks.join('')));\n } catch (err) {\n // Handle the error or throw\n return reject(err);\n }\n });\n }\n\n /**\n * Read an object's metadata without downloading its contents.\n *\n * @param key The key of the object to head\n * @returns The HeadObject response, or null when the object does not exist.\n * Any other error (permissions, network, no such bucket) is rethrown, so a\n * caller cannot mistake a broken connection for a missing file.\n */\n async headObject(key: string): Promise<HeadObjectCommandOutput | null> {\n let bucketParams: HeadObjectCommandInput = {\n Bucket: this.label,\n Key: key,\n };\n\n try {\n return await this._client.send(new HeadObjectCommand(bucketParams));\n } catch (error) {\n // v3 of the AWS SDK reports a missing object as NotFound; some\n // S3-compatible endpoints surface the bare 404 instead.\n if (\n error?.name === 'NotFound' ||\n error?.$metadata?.httpStatusCode === 404\n ) {\n return null;\n }\n throw error;\n }\n }\n\n /**\n * Ensure that the given key exists in the bucket, the file contents\n * will be an empty json object.\n *\n * @param key The key to insert if it does not exist\n * @returns The promise that will resolve when the key exists\n */\n async ensureKeyExists(key: string) {\n if (!this.ensureKeyPromise.has(key)) {\n let promise = this._ensureKeyExists(key);\n this.ensureKeyPromise.set(key, promise);\n }\n return this.ensureKeyPromise.get(key);\n }\n\n private async _ensureKeyExists(key: string): Promise<string | void> {\n let bucketParams: HeadObjectCommandInput = {\n Bucket: this.label,\n Key: key,\n };\n\n //see if the object already exists. `headObject` owns the single\n //\"does this key exist\" decision in this class, including the bare-404\n //fallback that S3-compatible endpoints need.\n let head: HeadObjectCommandOutput | null;\n try {\n head = await this.headObject(key);\n } catch (error) {\n throw 'Error checking existence of object: ' + error;\n }\n\n if (head) {\n return;\n }\n\n //If the object does not exist, create it,\n // with the content being an empty json object\n try {\n await this._client.send(\n new PutObjectCommand({\n ...bucketParams,\n Body: JSON.stringify({}),\n })\n );\n } catch (err) {\n if (err.name === 'NoSuchBucket') {\n await this.createBucket();\n await this._ensureKeyExists(key);\n return;\n }\n throw 'Error putting object: ' + err;\n }\n }\n\n /**\n * Create the bucket if it does not exist.\n * @returns The promise that will resolve when the bucket exists\n */\n async createBucket() {\n let bucketParams = { Bucket: this.label };\n try {\n const data = await this._client.send(\n new CreateBucketCommand(bucketParams)\n );\n console.log('Successfully created bucket ' + this.label);\n return data; // For unit tests.\n } catch (err) {\n console.log('Could not create bucket: ', err);\n }\n }\n\n /**\n * Read the bucket's CORS configuration.\n *\n * @returns The rules, or null when the bucket has none configured. A bucket\n * without CORS answers `GetBucketCors` with `NoSuchCORSConfiguration`,\n * which is an ordinary state and not an error worth throwing over.\n * @throws When the credentials may not read bucket configuration, with a\n * message naming what to do about it. Use {@link ensureCors} if you want\n * that case handled for you.\n */\n async getBucketCors(): Promise<CORSRule[] | null> {\n try {\n const data = await this._client.send(\n new GetBucketCorsCommand({ Bucket: this.label })\n );\n return data.CORSRules ?? null;\n } catch (err) {\n if (isNoSuchCorsConfiguration(err)) {\n return null;\n }\n if (isCorsAccessDenied(err)) {\n const error: any = new Error(\n corsAccessDeniedMessage(this.label, 'read')\n );\n error.name = 'CorsAccessDenied';\n error.cause = err;\n throw error;\n }\n throw err;\n }\n }\n\n /**\n * Replace the bucket's CORS configuration with the given rules.\n *\n * `PutBucketCors` replaces the whole configuration, so pass every rule the\n * bucket should end up with.\n *\n * @throws When the credentials may not write bucket configuration, with a\n * message naming what to do about it.\n */\n async putBucketCors(rules: CORSRule[]): Promise<CORSRule[]> {\n try {\n await this._client.send(\n new PutBucketCorsCommand({\n Bucket: this.label,\n CORSConfiguration: { CORSRules: rules },\n })\n );\n return rules;\n } catch (err) {\n if (isCorsAccessDenied(err)) {\n const error: any = new Error(\n corsAccessDeniedMessage(this.label, 'set')\n );\n error.name = 'CorsAccessDenied';\n error.cause = err;\n throw error;\n }\n throw err;\n }\n }\n\n /**\n * Make sure the bucket serves static assets to the given page origins.\n *\n * Best effort by design: it reads the current configuration first and writes\n * nothing when an equivalent rule is already there, and it reports rather\n * than throws when the credentials are not allowed to touch bucket config —\n * which is the normal case on Cloudflare R2 and other providers that keep\n * bucket CORS out of reach of object-scoped tokens.\n *\n * @param origins The page origins that will load the assets, e.g.\n * `['https://app.example']`.\n * @param options Overrides for the default rule, plus `replace` to drop any\n * rules the bucket already carries instead of keeping them.\n */\n async ensureCors(\n origins: string[],\n options: StaticAssetCorsOptions & { replace?: boolean } = {}\n ): Promise<EnsureCorsResult> {\n const { replace, ...ruleOptions } = options;\n const desired = staticAssetCorsRule(origins, ruleOptions);\n\n let existing: CORSRule[] | null;\n try {\n existing = await this.getBucketCors();\n } catch (err: any) {\n if (err?.name === 'CorsAccessDenied') {\n console.warn(err.message);\n return { status: 'forbidden', rules: null, message: err.message };\n }\n throw err;\n }\n\n if (existing?.some((rule) => corsRulesEqual(rule, desired))) {\n return {\n status: 'unchanged',\n rules: existing,\n message: `Bucket \"${this.label}\" already allows ${origins.join(', ')}.`,\n };\n }\n\n // PutBucketCors replaces the entire configuration, so carry any unrelated\n // rules over unless the caller explicitly asked for a clean slate.\n const rules = replace || !existing ? [desired] : [...existing, desired];\n\n try {\n await this.putBucketCors(rules);\n } catch (err: any) {\n if (err?.name === 'CorsAccessDenied') {\n console.warn(err.message);\n return { status: 'forbidden', rules: null, message: err.message };\n }\n throw err;\n }\n\n return {\n status: 'updated',\n rules,\n message: `Bucket \"${this.label}\" now allows ${origins.join(', ')} for GET/HEAD.`,\n };\n }\n}\n\nexport interface EnsureCorsResult {\n /**\n * `unchanged` when an equivalent rule was already in place, `updated` when\n * the rule was written, `forbidden` when the credentials may not configure\n * bucket CORS (in which case `message` says what to do instead).\n */\n status: 'unchanged' | 'updated' | 'forbidden';\n /** The rules now in effect, or null when they could not be read or written. */\n rules: CORSRule[] | null;\n message: string;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"S3FileStore.js","sourceRoot":"","sources":["../../../src/shapes/S3FileStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"S3FileStore.js","sourceRoot":"","sources":["../../../src/shapes/S3FileStore.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n FileStat,\n IFileStore,\n SaveFileOptions,\n normalizeSaveFileOptions,\n} from '@_linked/core/interfaces/IFileStore';\nimport mime from 'mime';\nimport path from 'path';\nimport {\n S3Bucket,\n type EnsureCorsResult,\n type S3ClientConfigInput,\n} from './S3Bucket.js';\nimport {\n checkCorsAccess,\n type CorsCheckOptions,\n type CorsCheckResult,\n} from '../utils/cors.js';\nimport type { Readable } from 'stream';\n\nexport interface S3FileStoreConfig {\n bucketName?: string;\n accessURL?: string;\n prefix?: string;\n clientConfig?: S3ClientConfigInput;\n}\n\nconst trimSlashes = (value = '') => value.replace(/^\\/+|\\/+$/g, '');\nconst trimTrailingSlash = (value = '') => value.replace(/\\/+$/g, '');\n\n/**\n * A file store is not a Shape.\n *\n * This class used to `extends Shape` and declare `static targetClass = s3.FileStore`,\n * but used nothing from `Shape`: no `this.id`, no `this.uri`, no `nodeShape`, no\n * Shape statics, and no caller treats it as a Shape. `label` is its own field, not\n * an inherited one. The `targetClass` was inert — it is only ever read by\n * `@linkedShape`, which this class never carried, and `s3:FileStore` is not defined\n * in this package's ontology data.\n *\n * Stores and datasets stopped being Shapes deliberately in core `0e8c86e`\n * (\"datasets are not shapes\").\n */\nexport class S3FileStore implements IFileStore {\n label: string;\n private _bucket: S3Bucket;\n private readonly config: S3FileStoreConfig;\n\n public readonly accessURL: string;\n\n constructor(n: string | { id: string }, config: S3FileStoreConfig = {}) {\n // The old `super()` minted `${DATA_ROOT}/s3-filestore/${n}` with a comment\n // claiming the URI had to match between frontend and backend. Nothing ever\n // read it — the only occurrence in the codebase was the `super()` call itself.\n if (typeof n === 'string') {\n this.label = n;\n }\n\n this.config = config;\n this.accessURL = this.resolveAccessURL();\n }\n\n private get bucket(): S3Bucket {\n const bucketName = this.resolveBucketName();\n if (!bucketName) {\n throw new Error(\n 'S3_FILES_BUCKET_NAME environment variable must be set to use S3FileStore (or pass bucketName in config)'\n );\n }\n\n if (!this._bucket) {\n this._bucket = new S3Bucket(bucketName, this.config.clientConfig);\n }\n return this._bucket;\n }\n\n private resolveBucketName(): string {\n // Scoped store config wins. Legacy shared env vars stay as fallback to keep\n // existing apps working while allowing upload/static separation.\n return (\n this.config.bucketName ??\n process.env.S3_FILES_BUCKET_NAME ??\n process.env.UPLOADS_S3_FILES_BUCKET_NAME ??\n process.env.STATIC_S3_FILES_BUCKET_NAME\n );\n }\n\n private resolveAccessURL(): string {\n const explicitAccessURL =\n this.config.accessURL ??\n process.env.S3_CDN_URL ??\n process.env.UPLOADS_ACCESS_URL ??\n process.env.STATIC_ACCESS_URL;\n\n if (explicitAccessURL) {\n return trimTrailingSlash(explicitAccessURL);\n }\n\n const endpoint =\n this.config.clientConfig?.endpoint ??\n process.env.S3_BUCKET_ENDPOINT ??\n process.env.UPLOADS_S3_BUCKET_ENDPOINT ??\n process.env.STATIC_S3_BUCKET_ENDPOINT;\n const bucketName = this.resolveBucketName();\n\n if (endpoint && bucketName) {\n return `${trimTrailingSlash(endpoint)}/${bucketName}`;\n }\n\n return trimTrailingSlash(endpoint);\n }\n\n private get prefix(): string {\n // Optional per-store key prefix, used for versioned static publishing.\n return trimSlashes(this.config.prefix ?? '');\n }\n\n private normalizePath(filePath: string): string {\n return filePath.replace(/^\\/+/, '');\n }\n\n private applyPrefix(filePath: string): string {\n const normalizedPath = this.normalizePath(filePath);\n if (!this.prefix) {\n return normalizedPath;\n }\n // Guard against accidental double prefixing when callers pass already-prefixed keys.\n if (normalizedPath.startsWith(`${this.prefix}/`)) {\n return normalizedPath;\n }\n return `${this.prefix}/${normalizedPath}`;\n }\n\n private stripPrefix(filePath: string): string {\n if (!this.prefix) {\n return filePath;\n }\n const normalizedPath = this.normalizePath(filePath);\n const prefixedPath = `${this.prefix}/`;\n if (normalizedPath.startsWith(prefixedPath)) {\n return normalizedPath.substring(prefixedPath.length);\n }\n return normalizedPath;\n }\n\n /**\n * List all files in the bucket\n * @param recursive Whether to list files recursively or just the top-level files\n * @returns A list of file paths, relative to the endpoint\n * @todo Think about taking an options parameter instead of positional args\n * @todo Take a path parameter to list files in a subdirectory\n */\n async listFiles(prefix?: string): Promise<string[]> {\n let bucket = this.bucket;\n const keyPrefix = this.prefix\n ? prefix\n ? this.applyPrefix(prefix)\n : `${this.prefix}/`\n : prefix;\n\n return bucket\n .getAllObjectKeys(keyPrefix)\n .then((keys) => keys.map((key) => this.stripPrefix(key)))\n .catch((err) => {\n console.error('Error listing files:', err);\n return [];\n });\n }\n\n /**\n * Save a file to the bucket\n * @param filePath The path to save the file to, relative to the endpoint\n * @param fileContent The contents of the file as a buffer\n * @param options Save options, or a plain string read as the old positional mime type\n * @param preventDuplicates Only honoured when `options` is a string\n * @returns The public URL of the file\n */\n async saveFile(\n filePath: string,\n fileContent: string | Uint8Array | Buffer | Readable,\n options?: SaveFileOptions | string,\n preventDuplicates?: boolean\n ): Promise<string> {\n let bucket = this.bucket;\n\n // Normalised in core so this store cannot drift from the other IFileStores.\n const opts = normalizeSaveFileOptions(options, preventDuplicates);\n\n // Core reports an unspecified `preventDuplicates` as `undefined` and never\n // invents a default, so each store applies its own. This store's default is\n // to overwrite, which is what it has always done.\n const shouldPreventDuplicates = opts.preventDuplicates ?? false;\n\n filePath = this.normalizePath(filePath);\n\n const mimeType = opts.mimeType ?? mime.getType(filePath);\n\n //first check if the object already exists\n if (shouldPreventDuplicates && (await this.fileExists(filePath))) {\n //if yes, use a more unique name based on the current unix timestamp\n filePath = `${path.dirname(filePath)}/${Date.now()}-${path.basename(\n filePath\n )}`;\n console.log(\n 'File already exists, renaming to avoid overwrite: ' + filePath\n );\n }\n\n const key = this.applyPrefix(filePath);\n\n let res = await bucket\n .putObject(key, fileContent, {\n ContentType: mimeType,\n // Only send the optional headers when they were asked for, so the\n // bucket's own defaults keep applying otherwise.\n ...(opts.cacheControl ? { CacheControl: opts.cacheControl } : {}),\n ...(opts.metadata ? { Metadata: opts.metadata } : {}),\n })\n .catch((err) => {\n console.error('Error saving file to S3:', err);\n return false;\n });\n\n if (!res) {\n return null;\n }\n return this.accessURL + '/' + filePath;\n }\n\n /**\n * Get a file from the bucket\n * @param filePath The path of the file to get, relative to the endpoint\n * @returns The contents of the file as a buffer\n */\n async getFile(filePath: string): Promise<Buffer | null> {\n let bucket = this.bucket;\n\n const key = this.applyPrefix(filePath);\n const bufferString = await bucket.getObject(key);\n\n return Buffer.from(bufferString, 'base64');\n }\n\n /**\n * Delete a file from the bucket\n * @param filePath The path of the file to delete, relative to the endpoint\n */\n async deleteFile(filePath: string): Promise<void> {\n let bucket = this.bucket;\n\n await bucket.deleteObject(this.applyPrefix(filePath));\n }\n\n /**\n * Check if a file exists in the bucket\n * @param filePath The path of the file to check, relative to the endpoint\n * @returns Whether the file exists\n */\n async fileExists(filePath: string): Promise<boolean> {\n try {\n // HeadObject, not GetObject: existence must not cost a full download of\n // the very object `saveFile` is about to overwrite. Compared against\n // `null` rather than truthiness, so a 0-byte object counts as existing.\n const head = await this.bucket.headObject(\n this.applyPrefix(this.normalizePath(filePath))\n );\n return head !== null;\n } catch (e) {\n return false;\n }\n }\n\n /**\n * Read the metadata of a stored file, for verify-after-upload.\n *\n * @param filePath The path of the file, relative to the endpoint. Normalised\n * and prefixed exactly as `saveFile` does, so a path that was just saved\n * can be handed straight back here.\n * @returns The stat, or null when the object does not exist.\n */\n async statFile(filePath: string): Promise<FileStat | null> {\n const key = this.applyPrefix(this.normalizePath(filePath));\n\n const head = await this.bucket.headObject(key);\n if (!head) {\n return null;\n }\n\n return {\n // S3 always reports ContentLength for an existing object, but the type is\n // `number | undefined` and some S3-compatible endpoints omit it. FileStat\n // requires a number, so an unreported size is read as 0: a caller doing\n // verify-after-upload then sees a size mismatch and fails closed, which is\n // the right outcome when the store cannot tell us how big the file is.\n size: head.ContentLength ?? 0,\n // Only present when the object was uploaded with a checksum. Left\n // undefined otherwise: the caller must then treat the file as\n // \"cannot verify\". ETag is never a content hash (MD5 at best, and\n // something else entirely for multipart uploads), so it is reported\n // separately and never as sha256.\n sha256: head.ChecksumSHA256 ?? undefined,\n etag: head.ETag,\n };\n }\n\n /**\n * Make sure the store's bucket serves its assets to the given page origins.\n *\n * A CDN-hosted release is loaded cross-origin by the browser, so the bucket\n * needs an `Access-Control-Allow-Origin` rule or the dynamic-import chunks\n * never load. Best effort: see {@link S3Bucket.ensureCors}.\n */\n async ensureCors(\n origins: string[],\n options: Parameters<S3Bucket['ensureCors']>[1] = {}\n ): Promise<EnsureCorsResult> {\n return this.bucket.ensureCors(origins, options);\n }\n\n /**\n * Check, from the outside, that a stored file really is loadable from the\n * given page origin.\n *\n * Uses only public read access, so this works even where the store's\n * credentials cannot read bucket configuration — which is the usual case.\n *\n * @param filePath The path of the file, relative to the endpoint, exactly as\n * `saveFile` takes it.\n * @param origin The page origin that will load it, e.g. `https://app.example`.\n */\n async checkAssetCors(\n filePath: string,\n origin: string,\n options: CorsCheckOptions = {}\n ): Promise<CorsCheckResult> {\n const key = this.applyPrefix(this.normalizePath(filePath));\n return checkCorsAccess(`${this.accessURL}/${key}`, origin, options);\n }\n}\n"]}
@@ -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":["declare module '*.module.css' {\n const classes: { [key: string]: string };\n export default classes;\n}\n\ndeclare module '*.module.scss' {\n const classes: { [key: string]: string };\n export default classes;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"accessUrl.js","sourceRoot":"","sources":["../../../src/utils/accessUrl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"accessUrl.js","sourceRoot":"","sources":["../../../src/utils/accessUrl.ts"],"names":[],"mappings":"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","sourcesContent":["const trimTrailingSlash = (value = '') => value.replace(/\\/+$/g, '');\nconst trimSlashes = (value = '') => value.replace(/^\\/+|\\/+$/g, '');\n\n/**\n * Read env vars in a browser-safe way while still allowing webpack EnvironmentPlugin\n * to inline direct `process.env.X` references at build time.\n */\nconst readEnv = (getter: () => string | undefined) => {\n try {\n return getter();\n } catch (_error) {\n return undefined;\n }\n};\n\n// Shared legacy env set used when scoped STATIC_/UPLOADS_ vars are absent.\nconst getSharedS3Env = () => ({\n accessURL: readEnv(() => process.env.S3_CDN_URL),\n endpoint: readEnv(() => process.env.S3_BUCKET_ENDPOINT),\n bucketName: readEnv(() => process.env.S3_FILES_BUCKET_NAME),\n});\n\n// Returns the first defined, non-empty value from a fallback chain.\nconst firstNonEmpty = (...values: Array<string | undefined>) => {\n for (const value of values) {\n if (value !== undefined && value !== null && value !== '') {\n return value;\n }\n }\n return undefined;\n};\n\n// Builds versioned/static URL segments without duplicate or broken slashes.\nconst appendPathSegment = (base?: string, segment?: string) => {\n const cleanBase = trimTrailingSlash(base || '');\n const cleanSegment = trimSlashes(segment || '');\n if (!cleanBase) {\n return undefined;\n }\n if (!cleanSegment || cleanBase.endsWith(`/${cleanSegment}`)) {\n return cleanBase;\n }\n return `${cleanBase}/${cleanSegment}`;\n};\n\n// Normalizes the final public access URL from either direct accessURL or endpoint+bucket.\nconst getAccessURL = ({\n accessURL,\n endpoint,\n bucketName,\n}: {\n accessURL?: string;\n endpoint?: string;\n bucketName?: string;\n}) => {\n if (accessURL) {\n return trimTrailingSlash(accessURL);\n }\n if (endpoint && bucketName) {\n return `${trimTrailingSlash(endpoint)}/${bucketName}`;\n }\n return trimTrailingSlash(endpoint);\n};\n\n/**\n * Access URL for user-uploaded files. This intentionally prefers upload-specific\n * env vars, then falls back to legacy shared env vars.\n */\nexport const getAccessURLUploadsStore = () => {\n const shared = getSharedS3Env();\n const uploadsAccessURL = readEnv(() => process.env.UPLOADS_ACCESS_URL);\n const uploadsEndpoint = readEnv(() => process.env.UPLOADS_S3_BUCKET_ENDPOINT);\n const uploadsBucketName = readEnv(\n () => process.env.UPLOADS_S3_FILES_BUCKET_NAME\n );\n\n return getAccessURL({\n accessURL: firstNonEmpty(uploadsAccessURL, shared.accessURL),\n endpoint: firstNonEmpty(uploadsEndpoint, shared.endpoint),\n bucketName: firstNonEmpty(uploadsBucketName, shared.bucketName),\n });\n};\n\n/**\n * Access URL for static web assets (bundles/images/root). This can be independent\n * from uploads and is expected to include the release version when configured by\n * app storage bootstrap (for example \".../4.1.1\").\n */\nexport const getAccessURLStaticStore = () => {\n const shared = getSharedS3Env();\n const uploadsEndpoint = readEnv(() => process.env.UPLOADS_S3_BUCKET_ENDPOINT);\n const uploadsBucketName = readEnv(\n () => process.env.UPLOADS_S3_FILES_BUCKET_NAME\n );\n const staticAccessURL = readEnv(() => process.env.STATIC_ACCESS_URL);\n const version = readEnv(() => process.env.VERSION);\n const staticEndpoint = readEnv(() => process.env.STATIC_S3_BUCKET_ENDPOINT);\n const staticBucketName = readEnv(\n () => process.env.STATIC_S3_FILES_BUCKET_NAME\n );\n // If STATIC_ACCESS_URL is not set, derive it from shared CDN + VERSION.\n // This keeps static assets versioned even with legacy env-only configs.\n const fallbackStaticAccessURL = appendPathSegment(shared.accessURL, version);\n\n return getAccessURL({\n accessURL: firstNonEmpty(staticAccessURL, fallbackStaticAccessURL),\n endpoint: firstNonEmpty(staticEndpoint, uploadsEndpoint, shared.endpoint),\n bucketName: firstNonEmpty(\n staticBucketName,\n uploadsBucketName,\n shared.bucketName\n ),\n });\n};\n\n/**\n * Backward-compatible alias for existing imports.\n */\nexport const getAccessURLS3FileStore = () => getAccessURLUploadsStore();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/utils/cors.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,OAAiB,EACjB,UAAkC,EAAE,EAC1B,EAAE;;IACZ,MAAM,IAAI,GAAa;QACrB,cAAc,EAAE,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,KAAK,EAAE,MAAM,CAAC;QACzD,cAAc,EAAE,OAAO;QACvB,cAAc,EAAE,MAAA,OAAO,CAAC,cAAc,mCAAI,CAAC,GAAG,CAAC;QAC/C,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI;YACtC,MAAM;YACN,gBAAgB;YAChB,cAAc;SACf;QACD,aAAa,EAAE,MAAA,OAAO,CAAC,aAAa,mCAAI,4BAA4B;KACrE,CAAC;IACF,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAiB,EAAE,EAAE,CAC1C,CAAC,GAAG,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAY,EAAE,CAAY,EAAW,EAAE;;IACpE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,CAAY,EAAE,CAAY,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,CACL,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;YAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,CACrD,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,CACL,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC;QAC5C,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC;QAC5C,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,cAAc,CAAC;QAC5C,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC;QAC1C,CAAC,MAAA,CAAC,CAAC,aAAa,mCAAI,IAAI,CAAC,KAAK,CAAC,MAAA,CAAC,CAAC,aAAa,mCAAI,IAAI,CAAC,CACxD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAU,EAAW,EAAE;;IACxD,MAAM,IAAI,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC;IACxC,OAAO,CACL,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,0CAAE,cAAc,MAAK,GAAG;QACxC,IAAI,KAAK,cAAc;QACvB,IAAI,KAAK,WAAW;QACpB,IAAI,KAAK,gBAAgB,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF,iEAAiE;AACjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAU,EAAW,EAAE;;IAC/D,MAAM,IAAI,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,mCAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,CAAC;IACxC,OAAO,CACL,IAAI,KAAK,yBAAyB;QAClC,IAAI,KAAK,8BAA8B,CACxC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,MAAc,EAAE,MAAc,EAAE,EAAE,CACxE,4BAA4B,MAAM,oBAAoB,MAAM,KAAK;IACjE,wEAAwE;IACxE,yEAAyE;IACzE,wEAAwE;IACxE,mEAAmE,CAAC;AA8BtE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,GAAW,EACX,MAAc,EACd,UAA4B,EAAE,EACJ,EAAE;;IAC5B,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,MAAM,CAAC;IACxC,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,SAAS,mCAAI,UAAU,CAAC,KAAK,CAAC;IACxD,MAAM,IAAI,GAAG,wBAAwB,MAAM,KAAK,GAAG,EAAE,CAAC;IAEtD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,GAAG;YACH,MAAM;YACN,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,mCAAmC;YAC1C,IAAI;YACJ,OAAO,EACL,0EAA0E;gBAC1E,WAAW,IAAI,EAAE;SACpB,CAAC;IACJ,CAAC;IAED,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,mCAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,OAAO;YACL,EAAE,EAAE,KAAK;YACT,GAAG;YACH,MAAM;YACN,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,IAAI;YACjB,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,IAAI;YACnB,KAAK,EAAE,MAAM;YACb,IAAI;YACJ,OAAO,EAAE,mBAAmB,GAAG,KAAK,MAAM,EAAE;SAC7C,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GACf,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,GAAG,CAAC,6BAA6B,CAAC,mCAAI,IAAI,CAAC;IAC/D,MAAM,aAAa,GACjB,MAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,GAAG,CAAC,+BAA+B,CAAC,mCAAI,IAAI,CAAC;IACjE,MAAM,YAAY,GAChB,WAAW,KAAK,GAAG;QACnB,CAAC,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAA,QAAQ,CAAC,MAAM,mCAAI,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;IACnE,MAAM,EAAE,GAAG,SAAS,IAAI,YAAY,CAAC;IAErC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,GAAG,GAAG,GAAG,cAAc,MAAM,8CAA8C,CAAC;IACrF,CAAC;SAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;YACL,GAAG,GAAG,4DAA4D,MAAM,GAAG;gBAC3E,2DAA2D,CAAC;IAChE,CAAC;SAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO;YACL,GAAG,GAAG,YAAY,WAAW,2BAA2B,MAAM,IAAI;gBAClE,0CAA0C,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,GAAG,qBAAqB,MAAM,kCAAkC,WAAW,IAAI,CAAC;IAC/F,CAAC;IAED,OAAO;QACL,EAAE;QACF,GAAG;QACH,MAAM;QACN,MAAM;QACN,WAAW;QACX,YAAY;QACZ,aAAa;QACb,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"cors.js","sourceRoot":"","sources":["../../../src/utils/cors.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CORSRule } from '@aws-sdk/client-s3';\n\n/**\n * Options for the default \"serve static assets\" CORS rule.\n */\nexport interface StaticAssetCorsOptions {\n /** Methods to allow. Static hosting only ever needs GET/HEAD. */\n allowedMethods?: string[];\n /** Request headers the browser may send on the preflight. */\n allowedHeaders?: string[];\n /**\n * Response headers the browser is allowed to read. ETag and the content\n * headers matter for caching and for range requests on large chunks.\n */\n exposeHeaders?: string[];\n /** How long a preflight may be cached, in seconds. */\n maxAgeSeconds?: number;\n /** Optional rule id, useful when a bucket carries several rules. */\n id?: string;\n}\n\nexport const DEFAULT_CORS_MAX_AGE_SECONDS = 3600;\n\n/**\n * The rule a bucket needs in order to serve a CDN-hosted frontend release.\n *\n * `linked build-app` bakes Vite's `base` to the release URL, so dynamic-import\n * chunks are fetched from the bucket rather than from the app origin. Module\n * scripts are always fetched in CORS mode, so without\n * `Access-Control-Allow-Origin` on the response those chunks fail to load.\n */\nexport const staticAssetCorsRule = (\n origins: string[],\n options: StaticAssetCorsOptions = {}\n): CORSRule => {\n const rule: CORSRule = {\n AllowedMethods: options.allowedMethods ?? ['GET', 'HEAD'],\n AllowedOrigins: origins,\n AllowedHeaders: options.allowedHeaders ?? ['*'],\n ExposeHeaders: options.exposeHeaders ?? [\n 'ETag',\n 'Content-Length',\n 'Content-Type',\n ],\n MaxAgeSeconds: options.maxAgeSeconds ?? DEFAULT_CORS_MAX_AGE_SECONDS,\n };\n if (options.id) {\n rule.ID = options.id;\n }\n return rule;\n};\n\nconst normalizeList = (values?: string[]) =>\n [...(values ?? [])].map((value) => value.trim()).sort();\n\n/**\n * Compare two rules by meaning rather than by shape: order within the string\n * lists is irrelevant to S3, and a missing list is the same as an empty one.\n * Used so that `ensureCors` can no-op instead of rewriting an identical rule.\n */\nexport const corsRulesEqual = (a?: CORSRule, b?: CORSRule): boolean => {\n if (!a || !b) {\n return false;\n }\n const sameList = (x?: string[], y?: string[]) => {\n const left = normalizeList(x);\n const right = normalizeList(y);\n return (\n left.length === right.length &&\n left.every((value, index) => value === right[index])\n );\n };\n return (\n sameList(a.AllowedMethods, b.AllowedMethods) &&\n sameList(a.AllowedOrigins, b.AllowedOrigins) &&\n sameList(a.AllowedHeaders, b.AllowedHeaders) &&\n sameList(a.ExposeHeaders, b.ExposeHeaders) &&\n (a.MaxAgeSeconds ?? null) === (b.MaxAgeSeconds ?? null)\n );\n};\n\n/**\n * True when the error means \"your credentials may not read or write this\n * bucket's configuration\". Object-scoped credentials (Cloudflare R2 tokens in\n * particular) can read and write objects but get a 403 on bucket CORS.\n */\nexport const isCorsAccessDenied = (error: any): boolean => {\n const name = error?.name ?? error?.Code;\n return (\n error?.$metadata?.httpStatusCode === 403 ||\n name === 'AccessDenied' ||\n name === 'Forbidden' ||\n name === 'NotImplemented'\n );\n};\n\n/** True when the bucket simply has no CORS configuration yet. */\nexport const isNoSuchCorsConfiguration = (error: any): boolean => {\n const name = error?.name ?? error?.Code;\n return (\n name === 'NoSuchCORSConfiguration' ||\n name === 'NoSuchCORSConfigurationError'\n );\n};\n\nexport const corsAccessDeniedMessage = (bucket: string, action: string) =>\n `These credentials cannot ${action} bucket CORS on \"${bucket}\". ` +\n `Many providers (Cloudflare R2 among them) never expose bucket CORS to ` +\n `object-scoped credentials, so the rule has to be set in the provider's ` +\n `dashboard or with an account-level token. See the CORS section of the ` +\n `@_linked/s3 README, and verify the result with checkCorsAccess().`;\n\nexport interface CorsCheckOptions {\n /** Injectable fetch, so this is testable and usable on older runtimes. */\n fetchImpl?: typeof fetch;\n /** HEAD by default: it is enough and downloads nothing. */\n method?: 'HEAD' | 'GET';\n}\n\nexport interface CorsCheckResult {\n /** True only when the asset responded OK *and* the origin is allowed. */\n ok: boolean;\n url: string;\n origin: string;\n /** HTTP status, or null when the request never completed. */\n status: number | null;\n /** The raw Access-Control-Allow-Origin header, or null when absent. */\n allowOrigin: string | null;\n /** Whether that header actually covers the origin we asked about. */\n allowsOrigin: boolean;\n /** The raw Access-Control-Expose-Headers header, or null when absent. */\n exposeHeaders: string | null;\n /** Set when the request itself failed (DNS, TLS, offline). */\n error?: string;\n /** The equivalent one-liner, handy to paste into a runbook or an issue. */\n curl: string;\n /** A human-readable verdict. */\n message: string;\n}\n\n/**\n * Verify cross-origin access to a published asset from the outside, the way a\n * browser would.\n *\n * This needs nothing but public read access, so it works on deployments whose\n * credentials cannot read bucket configuration at all — which is the common\n * case. Prefer it as the check that a release actually loads.\n */\nexport const checkCorsAccess = async (\n url: string,\n origin: string,\n options: CorsCheckOptions = {}\n): Promise<CorsCheckResult> => {\n const method = options.method ?? 'HEAD';\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n const curl = `curl -sI -H 'Origin: ${origin}' ${url}`;\n\n if (!fetchImpl) {\n return {\n ok: false,\n url,\n origin,\n status: null,\n allowOrigin: null,\n allowsOrigin: false,\n exposeHeaders: null,\n error: 'No fetch implementation available',\n curl,\n message:\n 'Could not check CORS: this runtime has no global fetch. Pass fetchImpl, ' +\n `or run: ${curl}`,\n };\n }\n\n let response: Response;\n try {\n response = await fetchImpl(url, { method, headers: { Origin: origin } });\n } catch (error: any) {\n const reason = error?.message ?? String(error);\n return {\n ok: false,\n url,\n origin,\n status: null,\n allowOrigin: null,\n allowsOrigin: false,\n exposeHeaders: null,\n error: reason,\n curl,\n message: `Could not reach ${url}: ${reason}`,\n };\n }\n\n const allowOrigin =\n response.headers?.get('access-control-allow-origin') ?? null;\n const exposeHeaders =\n response.headers?.get('access-control-expose-headers') ?? null;\n const allowsOrigin =\n allowOrigin === '*' ||\n (!!allowOrigin && allowOrigin.toLowerCase() === origin.toLowerCase());\n const status = response.status ?? null;\n const reachable = status !== null && status >= 200 && status < 400;\n const ok = reachable && allowsOrigin;\n\n let message: string;\n if (!reachable) {\n message = `${url} responded ${status}; the asset itself is not publicly readable.`;\n } else if (!allowOrigin) {\n message =\n `${url} has no Access-Control-Allow-Origin header, so a page on ${origin} ` +\n `cannot load it as a module script. Configure bucket CORS.`;\n } else if (!allowsOrigin) {\n message =\n `${url} allows \"${allowOrigin}\", which does not cover ${origin}. ` +\n `Add that origin to the bucket CORS rule.`;\n } else {\n message = `${url} is loadable from ${origin} (Access-Control-Allow-Origin: ${allowOrigin}).`;\n }\n\n return {\n ok,\n url,\n origin,\n status,\n allowOrigin,\n allowsOrigin,\n exposeHeaders,\n curl,\n message,\n };\n};\n"]}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "type": "git",
12
12
  "url": "git+https://github.com/linked-fw/s3.git"
13
13
  },
14
- "version": "1.4.1",
14
+ "version": "1.5.1",
15
15
  "packageManager": "npm@11.19.1",
16
16
  "linkedPackage": true,
17
17
  "type": "module",
@@ -38,7 +38,7 @@
38
38
  "aws"
39
39
  ],
40
40
  "dependencies": {
41
- "@_linked/core": "^2.21.0",
41
+ "@_linked/core": "^2.22.8",
42
42
  "@_linked/server": "^2.5.1",
43
43
  "@_linked/server-utils": "^1.0",
44
44
  "@aws-sdk/client-s3": "^3.159.0",