@agentuity/storage 3.0.0-beta.1 → 3.0.0-beta.2
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/dist/bun.d.ts +1 -0
- package/dist/bun.d.ts.map +1 -1
- package/dist/bun.js +3 -3
- package/dist/bun.js.map +1 -1
- package/dist/node.d.ts +1 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +9 -8
- package/dist/node.js.map +1 -1
- package/dist/types.d.ts +70 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +85 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/src/bun.ts +3 -3
- package/src/node.ts +9 -8
- package/src/types.ts +123 -3
package/dist/bun.d.ts
CHANGED
package/dist/bun.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"bun.d.ts","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EACX,YAAY,EAEZ,YAAY,EAMZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAiFjE"}
|
package/dist/bun.js
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* condition.
|
|
13
13
|
*/
|
|
14
14
|
import { S3Client } from 'bun';
|
|
15
|
+
import { resolveEndpoint } from "./types.js";
|
|
16
|
+
export { bucketConfigFromEnv } from "./types.js";
|
|
15
17
|
/**
|
|
16
18
|
* Create an S3 client backed by `Bun.S3Client`.
|
|
17
19
|
*
|
|
@@ -20,9 +22,7 @@ import { S3Client } from 'bun';
|
|
|
20
22
|
* correct bucket.
|
|
21
23
|
*/
|
|
22
24
|
export function createS3Client(bucket) {
|
|
23
|
-
const endpoint = bucket
|
|
24
|
-
? bucket.endpoint
|
|
25
|
-
: `https://${bucket.endpoint}`;
|
|
25
|
+
const endpoint = resolveEndpoint(bucket);
|
|
26
26
|
const client = new S3Client({
|
|
27
27
|
endpoint,
|
|
28
28
|
accessKeyId: bucket.access_key,
|
package/dist/bun.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"bun.js","sourceRoot":"","sources":["../src/bun.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
CHANGED
|
@@ -30,5 +30,6 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import type { BucketConfig, S3ClientLike } from './types.ts';
|
|
32
32
|
export type { BucketConfig, S3ClientLike } from './types.ts';
|
|
33
|
+
export { bucketConfigFromEnv } from './types.ts';
|
|
33
34
|
export declare function createS3Client(bucket: BucketConfig): S3ClientLike;
|
|
34
35
|
//# sourceMappingURL=node.d.ts.map
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAMH,OAAO,KAAK,EACX,YAAY,EAEZ,YAAY,EAMZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA4BjD,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAqJjE"}
|
package/dist/node.js
CHANGED
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
*/
|
|
31
31
|
import { Buffer } from 'node:buffer';
|
|
32
32
|
import { Readable, Transform } from 'node:stream';
|
|
33
|
+
import { resolveEndpoint } from "./types.js";
|
|
34
|
+
export { bucketConfigFromEnv } from "./types.js";
|
|
33
35
|
let sdkModule = null;
|
|
34
36
|
let sdkPromise = null;
|
|
35
37
|
async function loadSdk() {
|
|
@@ -44,14 +46,13 @@ async function loadSdk() {
|
|
|
44
46
|
return sdkPromise;
|
|
45
47
|
}
|
|
46
48
|
export function createS3Client(bucket) {
|
|
47
|
-
const endpoint = bucket
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
const bucketLabel = extractBucketLabel(endpoint);
|
|
49
|
+
const endpoint = resolveEndpoint(bucket);
|
|
50
|
+
// The SDK's `Bucket` parameter is essentially a placeholder for our
|
|
51
|
+
// purposes — we always send virtual-hosted-style requests, so the
|
|
52
|
+
// `endpoint` URL is what actually routes. Prefer the explicit
|
|
53
|
+
// `bucket` field when supplied; otherwise fall back to parsing the
|
|
54
|
+
// leading hostname label out of the composed endpoint.
|
|
55
|
+
const bucketLabel = bucket.bucket ?? extractBucketLabel(endpoint);
|
|
55
56
|
const state = {
|
|
56
57
|
endpoint,
|
|
57
58
|
bucketLabel,
|
package/dist/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -6,14 +6,41 @@
|
|
|
6
6
|
* rather than backend-specific shapes, so that swapping the backend (or
|
|
7
7
|
* letting the package conditionally pick one) is transparent.
|
|
8
8
|
*/
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Bucket connection configuration.
|
|
11
|
+
*
|
|
12
|
+
* Two addressing forms are supported:
|
|
13
|
+
*
|
|
14
|
+
* 1. **Pre-composed virtual-hosted endpoint**: pass `endpoint` as
|
|
15
|
+
* `<bucket>.<host>` (e.g. `my-bucket.agentuity.run`). Use this when
|
|
16
|
+
* the platform already gives you a bucket-scoped endpoint.
|
|
17
|
+
*
|
|
18
|
+
* 2. **Separate `bucket` + `host`**: pass them as distinct fields and
|
|
19
|
+
* `createS3Client` will compose the virtual-hosted endpoint for
|
|
20
|
+
* you. This is what Agentuity-provisioned buckets need today —
|
|
21
|
+
* the platform injects `AWS_ENDPOINT` (shared host) and
|
|
22
|
+
* `AWS_BUCKET` (per-bucket name) separately.
|
|
23
|
+
*
|
|
24
|
+
* Exactly one of these forms must be provided.
|
|
25
|
+
*/
|
|
10
26
|
export interface BucketConfig {
|
|
11
27
|
/**
|
|
12
28
|
* Bucket-specific endpoint, e.g. `my-bucket.agentuity.run`. May be
|
|
13
29
|
* provided with or without a scheme; missing schemes default to
|
|
14
|
-
* `https://`.
|
|
30
|
+
* `https://`. Mutually exclusive with `host`/`bucket`.
|
|
31
|
+
*/
|
|
32
|
+
endpoint?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Shared S3 host, e.g. `t3.storage.dev` or
|
|
35
|
+
* `https://t3.storage.dev`. When set, `bucket` is required and the
|
|
36
|
+
* virtual-hosted endpoint is composed as `<bucket>.<host>`.
|
|
37
|
+
*/
|
|
38
|
+
host?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Bucket name. Required when `host` is set; ignored when `endpoint`
|
|
41
|
+
* is set (the bucket is parsed out of the endpoint hostname).
|
|
15
42
|
*/
|
|
16
|
-
|
|
43
|
+
bucket?: string;
|
|
17
44
|
/** S3 access key ID. */
|
|
18
45
|
access_key: string;
|
|
19
46
|
/** S3 secret access key. */
|
|
@@ -21,6 +48,46 @@ export interface BucketConfig {
|
|
|
21
48
|
/** Optional region. Defaults to `'auto'` when omitted or null. */
|
|
22
49
|
region?: string | null;
|
|
23
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve the canonical virtual-hosted endpoint URL from a
|
|
53
|
+
* `BucketConfig`, applying the `endpoint` vs `host`+`bucket` rules.
|
|
54
|
+
*
|
|
55
|
+
* Always returns a fully-qualified URL with a scheme (defaults to
|
|
56
|
+
* `https://` when missing). Throws on invalid configurations rather
|
|
57
|
+
* than silently picking a default — misconfigured storage usually
|
|
58
|
+
* means the user forgot to provision/inject env vars.
|
|
59
|
+
*/
|
|
60
|
+
export declare function resolveEndpoint(bucket: BucketConfig): string;
|
|
61
|
+
/**
|
|
62
|
+
* Build a `BucketConfig` from environment variables.
|
|
63
|
+
*
|
|
64
|
+
* Two naming schemes are recognised, in this priority order:
|
|
65
|
+
*
|
|
66
|
+
* 1. **Agentuity-canonical** —
|
|
67
|
+
* `AGENTUITY_BUCKET_ENDPOINT`,
|
|
68
|
+
* `AGENTUITY_BUCKET_ACCESS_KEY`,
|
|
69
|
+
* `AGENTUITY_BUCKET_SECRET_KEY`,
|
|
70
|
+
* optional `AGENTUITY_BUCKET_REGION`.
|
|
71
|
+
* The endpoint is treated as bucket-scoped
|
|
72
|
+
* (virtual-hosted-style, `<bucket>.<host>`) and used as-is.
|
|
73
|
+
*
|
|
74
|
+
* 2. **AWS-style fallback** —
|
|
75
|
+
* `AWS_ENDPOINT` (shared host) + `AWS_BUCKET` (bucket name) +
|
|
76
|
+
* `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`,
|
|
77
|
+
* optional `AWS_REGION`.
|
|
78
|
+
* This matches what the Agentuity platform currently injects
|
|
79
|
+
* when a bucket is provisioned (host and bucket are kept
|
|
80
|
+
* separate). Falls through to it only if no
|
|
81
|
+
* `AGENTUITY_BUCKET_ENDPOINT` is set.
|
|
82
|
+
*
|
|
83
|
+
* Throws a single, descriptive error when neither scheme yields a
|
|
84
|
+
* complete configuration so callers can surface a useful message at
|
|
85
|
+
* startup or first request.
|
|
86
|
+
*
|
|
87
|
+
* Pass an explicit `env` (defaults to `process.env`) to make this
|
|
88
|
+
* unit-testable without mutating global state.
|
|
89
|
+
*/
|
|
90
|
+
export declare function bucketConfigFromEnv(env?: Record<string, string | undefined>): BucketConfig;
|
|
24
91
|
/** Options for `list()`. */
|
|
25
92
|
export interface S3ListOptions {
|
|
26
93
|
/** Only return objects whose key starts with this prefix. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -6,5 +6,89 @@
|
|
|
6
6
|
* rather than backend-specific shapes, so that swapping the backend (or
|
|
7
7
|
* letting the package conditionally pick one) is transparent.
|
|
8
8
|
*/
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the canonical virtual-hosted endpoint URL from a
|
|
11
|
+
* `BucketConfig`, applying the `endpoint` vs `host`+`bucket` rules.
|
|
12
|
+
*
|
|
13
|
+
* Always returns a fully-qualified URL with a scheme (defaults to
|
|
14
|
+
* `https://` when missing). Throws on invalid configurations rather
|
|
15
|
+
* than silently picking a default — misconfigured storage usually
|
|
16
|
+
* means the user forgot to provision/inject env vars.
|
|
17
|
+
*/
|
|
18
|
+
export function resolveEndpoint(bucket) {
|
|
19
|
+
if (bucket.endpoint && (bucket.host || bucket.bucket)) {
|
|
20
|
+
throw new Error('BucketConfig accepts either `endpoint` or `host`+`bucket`, not both.');
|
|
21
|
+
}
|
|
22
|
+
if (bucket.endpoint) {
|
|
23
|
+
return bucket.endpoint.startsWith('http') ? bucket.endpoint : `https://${bucket.endpoint}`;
|
|
24
|
+
}
|
|
25
|
+
if (!bucket.host || !bucket.bucket) {
|
|
26
|
+
throw new Error('BucketConfig requires either `endpoint` or both `host` and `bucket`.');
|
|
27
|
+
}
|
|
28
|
+
// Strip scheme + trailing slashes from `host` so callers can pass
|
|
29
|
+
// either `t3.storage.dev` or `https://t3.storage.dev/`.
|
|
30
|
+
const hostOnly = bucket.host.replace(/^https?:\/\//, '').replace(/\/+$/, '');
|
|
31
|
+
return `https://${bucket.bucket}.${hostOnly}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build a `BucketConfig` from environment variables.
|
|
35
|
+
*
|
|
36
|
+
* Two naming schemes are recognised, in this priority order:
|
|
37
|
+
*
|
|
38
|
+
* 1. **Agentuity-canonical** —
|
|
39
|
+
* `AGENTUITY_BUCKET_ENDPOINT`,
|
|
40
|
+
* `AGENTUITY_BUCKET_ACCESS_KEY`,
|
|
41
|
+
* `AGENTUITY_BUCKET_SECRET_KEY`,
|
|
42
|
+
* optional `AGENTUITY_BUCKET_REGION`.
|
|
43
|
+
* The endpoint is treated as bucket-scoped
|
|
44
|
+
* (virtual-hosted-style, `<bucket>.<host>`) and used as-is.
|
|
45
|
+
*
|
|
46
|
+
* 2. **AWS-style fallback** —
|
|
47
|
+
* `AWS_ENDPOINT` (shared host) + `AWS_BUCKET` (bucket name) +
|
|
48
|
+
* `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`,
|
|
49
|
+
* optional `AWS_REGION`.
|
|
50
|
+
* This matches what the Agentuity platform currently injects
|
|
51
|
+
* when a bucket is provisioned (host and bucket are kept
|
|
52
|
+
* separate). Falls through to it only if no
|
|
53
|
+
* `AGENTUITY_BUCKET_ENDPOINT` is set.
|
|
54
|
+
*
|
|
55
|
+
* Throws a single, descriptive error when neither scheme yields a
|
|
56
|
+
* complete configuration so callers can surface a useful message at
|
|
57
|
+
* startup or first request.
|
|
58
|
+
*
|
|
59
|
+
* Pass an explicit `env` (defaults to `process.env`) to make this
|
|
60
|
+
* unit-testable without mutating global state.
|
|
61
|
+
*/
|
|
62
|
+
export function bucketConfigFromEnv(env = process.env) {
|
|
63
|
+
// 1. Agentuity-canonical naming.
|
|
64
|
+
const agentuityEndpoint = env.AGENTUITY_BUCKET_ENDPOINT;
|
|
65
|
+
const agentuityAccess = env.AGENTUITY_BUCKET_ACCESS_KEY;
|
|
66
|
+
const agentuitySecret = env.AGENTUITY_BUCKET_SECRET_KEY;
|
|
67
|
+
if (agentuityEndpoint && agentuityAccess && agentuitySecret) {
|
|
68
|
+
return {
|
|
69
|
+
endpoint: agentuityEndpoint,
|
|
70
|
+
access_key: agentuityAccess,
|
|
71
|
+
secret_key: agentuitySecret,
|
|
72
|
+
region: env.AGENTUITY_BUCKET_REGION,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// 2. AWS-style fallback (matches the platform's current injection).
|
|
76
|
+
const awsHost = env.AWS_ENDPOINT;
|
|
77
|
+
const awsBucket = env.AWS_BUCKET;
|
|
78
|
+
const awsAccess = env.AWS_ACCESS_KEY_ID;
|
|
79
|
+
const awsSecret = env.AWS_SECRET_ACCESS_KEY;
|
|
80
|
+
if (awsHost && awsBucket && awsAccess && awsSecret) {
|
|
81
|
+
return {
|
|
82
|
+
host: awsHost,
|
|
83
|
+
bucket: awsBucket,
|
|
84
|
+
access_key: awsAccess,
|
|
85
|
+
secret_key: awsSecret,
|
|
86
|
+
region: env.AWS_REGION,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
throw new Error('Storage env vars are not set. Expected AGENTUITY_BUCKET_ENDPOINT + ' +
|
|
90
|
+
'AGENTUITY_BUCKET_ACCESS_KEY + AGENTUITY_BUCKET_SECRET_KEY, or the ' +
|
|
91
|
+
'AWS-equivalents (AWS_ENDPOINT + AWS_BUCKET + AWS_ACCESS_KEY_ID + ' +
|
|
92
|
+
'AWS_SECRET_ACCESS_KEY). Provision an Agentuity bucket or set them manually.');
|
|
93
|
+
}
|
|
10
94
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6CH;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,MAAoB;IACnD,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACzF,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC5F,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACzF,CAAC;IACD,kEAAkE;IAClE,wDAAwD;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7E,OAAO,WAAW,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,mBAAmB,CAClC,MAA0C,OAAO,CAAC,GAAG;IAErD,iCAAiC;IACjC,MAAM,iBAAiB,GAAG,GAAG,CAAC,yBAAyB,CAAC;IACxD,MAAM,eAAe,GAAG,GAAG,CAAC,2BAA2B,CAAC;IACxD,MAAM,eAAe,GAAG,GAAG,CAAC,2BAA2B,CAAC;IACxD,IAAI,iBAAiB,IAAI,eAAe,IAAI,eAAe,EAAE,CAAC;QAC7D,OAAO;YACN,QAAQ,EAAE,iBAAiB;YAC3B,UAAU,EAAE,eAAe;YAC3B,UAAU,EAAE,eAAe;YAC3B,MAAM,EAAE,GAAG,CAAC,uBAAuB;SACnC,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC;IACjC,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC;IACjC,MAAM,SAAS,GAAG,GAAG,CAAC,iBAAiB,CAAC;IACxC,MAAM,SAAS,GAAG,GAAG,CAAC,qBAAqB,CAAC;IAC5C,IAAI,OAAO,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;QACpD,OAAO;YACN,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;YACrB,MAAM,EAAE,GAAG,CAAC,UAAU;SACtB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACd,qEAAqE;QACpE,oEAAoE;QACpE,mEAAmE;QACnE,6EAA6E,CAC9E,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/storage",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.2",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"description": "Dual-runtime S3 client for Agentuity storage buckets. Bun backend uses Bun.S3Client; Node backend uses @aws-sdk/client-s3.",
|
package/src/bun.ts
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import { S3Client } from 'bun';
|
|
16
|
+
import { resolveEndpoint } from './types.ts';
|
|
16
17
|
import type {
|
|
17
18
|
BucketConfig,
|
|
18
19
|
S3Body,
|
|
@@ -25,6 +26,7 @@ import type {
|
|
|
25
26
|
} from './types.ts';
|
|
26
27
|
|
|
27
28
|
export type { BucketConfig, S3ClientLike } from './types.ts';
|
|
29
|
+
export { bucketConfigFromEnv } from './types.ts';
|
|
28
30
|
|
|
29
31
|
/**
|
|
30
32
|
* Create an S3 client backed by `Bun.S3Client`.
|
|
@@ -34,9 +36,7 @@ export type { BucketConfig, S3ClientLike } from './types.ts';
|
|
|
34
36
|
* correct bucket.
|
|
35
37
|
*/
|
|
36
38
|
export function createS3Client(bucket: BucketConfig): S3ClientLike {
|
|
37
|
-
const endpoint = bucket
|
|
38
|
-
? bucket.endpoint
|
|
39
|
-
: `https://${bucket.endpoint}`;
|
|
39
|
+
const endpoint = resolveEndpoint(bucket);
|
|
40
40
|
|
|
41
41
|
const client = new S3Client({
|
|
42
42
|
endpoint,
|
package/src/node.ts
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
import { Buffer } from 'node:buffer';
|
|
33
33
|
import { Readable, Transform } from 'node:stream';
|
|
34
34
|
import type { ReadableStream as NodeWebReadableStream } from 'node:stream/web';
|
|
35
|
+
import { resolveEndpoint } from './types.ts';
|
|
35
36
|
import type {
|
|
36
37
|
BucketConfig,
|
|
37
38
|
S3Body,
|
|
@@ -44,6 +45,7 @@ import type {
|
|
|
44
45
|
} from './types.ts';
|
|
45
46
|
|
|
46
47
|
export type { BucketConfig, S3ClientLike } from './types.ts';
|
|
48
|
+
export { bucketConfigFromEnv } from './types.ts';
|
|
47
49
|
|
|
48
50
|
// Lazy-loaded handle to `@aws-sdk/client-s3`. Populated on first call to
|
|
49
51
|
// `loadSdk()`; subsequent calls reuse the cached module.
|
|
@@ -72,15 +74,14 @@ interface InternalState {
|
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
export function createS3Client(bucket: BucketConfig): S3ClientLike {
|
|
75
|
-
const endpoint = bucket
|
|
76
|
-
? bucket.endpoint
|
|
77
|
-
: `https://${bucket.endpoint}`;
|
|
77
|
+
const endpoint = resolveEndpoint(bucket);
|
|
78
78
|
|
|
79
|
-
//
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
|
|
79
|
+
// The SDK's `Bucket` parameter is essentially a placeholder for our
|
|
80
|
+
// purposes — we always send virtual-hosted-style requests, so the
|
|
81
|
+
// `endpoint` URL is what actually routes. Prefer the explicit
|
|
82
|
+
// `bucket` field when supplied; otherwise fall back to parsing the
|
|
83
|
+
// leading hostname label out of the composed endpoint.
|
|
84
|
+
const bucketLabel = bucket.bucket ?? extractBucketLabel(endpoint);
|
|
84
85
|
|
|
85
86
|
const state: InternalState = {
|
|
86
87
|
endpoint,
|
package/src/types.ts
CHANGED
|
@@ -7,14 +7,41 @@
|
|
|
7
7
|
* letting the package conditionally pick one) is transparent.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Bucket connection configuration.
|
|
12
|
+
*
|
|
13
|
+
* Two addressing forms are supported:
|
|
14
|
+
*
|
|
15
|
+
* 1. **Pre-composed virtual-hosted endpoint**: pass `endpoint` as
|
|
16
|
+
* `<bucket>.<host>` (e.g. `my-bucket.agentuity.run`). Use this when
|
|
17
|
+
* the platform already gives you a bucket-scoped endpoint.
|
|
18
|
+
*
|
|
19
|
+
* 2. **Separate `bucket` + `host`**: pass them as distinct fields and
|
|
20
|
+
* `createS3Client` will compose the virtual-hosted endpoint for
|
|
21
|
+
* you. This is what Agentuity-provisioned buckets need today —
|
|
22
|
+
* the platform injects `AWS_ENDPOINT` (shared host) and
|
|
23
|
+
* `AWS_BUCKET` (per-bucket name) separately.
|
|
24
|
+
*
|
|
25
|
+
* Exactly one of these forms must be provided.
|
|
26
|
+
*/
|
|
11
27
|
export interface BucketConfig {
|
|
12
28
|
/**
|
|
13
29
|
* Bucket-specific endpoint, e.g. `my-bucket.agentuity.run`. May be
|
|
14
30
|
* provided with or without a scheme; missing schemes default to
|
|
15
|
-
* `https://`.
|
|
31
|
+
* `https://`. Mutually exclusive with `host`/`bucket`.
|
|
16
32
|
*/
|
|
17
|
-
endpoint
|
|
33
|
+
endpoint?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Shared S3 host, e.g. `t3.storage.dev` or
|
|
36
|
+
* `https://t3.storage.dev`. When set, `bucket` is required and the
|
|
37
|
+
* virtual-hosted endpoint is composed as `<bucket>.<host>`.
|
|
38
|
+
*/
|
|
39
|
+
host?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Bucket name. Required when `host` is set; ignored when `endpoint`
|
|
42
|
+
* is set (the bucket is parsed out of the endpoint hostname).
|
|
43
|
+
*/
|
|
44
|
+
bucket?: string;
|
|
18
45
|
/** S3 access key ID. */
|
|
19
46
|
access_key: string;
|
|
20
47
|
/** S3 secret access key. */
|
|
@@ -23,6 +50,99 @@ export interface BucketConfig {
|
|
|
23
50
|
region?: string | null;
|
|
24
51
|
}
|
|
25
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the canonical virtual-hosted endpoint URL from a
|
|
55
|
+
* `BucketConfig`, applying the `endpoint` vs `host`+`bucket` rules.
|
|
56
|
+
*
|
|
57
|
+
* Always returns a fully-qualified URL with a scheme (defaults to
|
|
58
|
+
* `https://` when missing). Throws on invalid configurations rather
|
|
59
|
+
* than silently picking a default — misconfigured storage usually
|
|
60
|
+
* means the user forgot to provision/inject env vars.
|
|
61
|
+
*/
|
|
62
|
+
export function resolveEndpoint(bucket: BucketConfig): string {
|
|
63
|
+
if (bucket.endpoint && (bucket.host || bucket.bucket)) {
|
|
64
|
+
throw new Error('BucketConfig accepts either `endpoint` or `host`+`bucket`, not both.');
|
|
65
|
+
}
|
|
66
|
+
if (bucket.endpoint) {
|
|
67
|
+
return bucket.endpoint.startsWith('http') ? bucket.endpoint : `https://${bucket.endpoint}`;
|
|
68
|
+
}
|
|
69
|
+
if (!bucket.host || !bucket.bucket) {
|
|
70
|
+
throw new Error('BucketConfig requires either `endpoint` or both `host` and `bucket`.');
|
|
71
|
+
}
|
|
72
|
+
// Strip scheme + trailing slashes from `host` so callers can pass
|
|
73
|
+
// either `t3.storage.dev` or `https://t3.storage.dev/`.
|
|
74
|
+
const hostOnly = bucket.host.replace(/^https?:\/\//, '').replace(/\/+$/, '');
|
|
75
|
+
return `https://${bucket.bucket}.${hostOnly}`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Build a `BucketConfig` from environment variables.
|
|
80
|
+
*
|
|
81
|
+
* Two naming schemes are recognised, in this priority order:
|
|
82
|
+
*
|
|
83
|
+
* 1. **Agentuity-canonical** —
|
|
84
|
+
* `AGENTUITY_BUCKET_ENDPOINT`,
|
|
85
|
+
* `AGENTUITY_BUCKET_ACCESS_KEY`,
|
|
86
|
+
* `AGENTUITY_BUCKET_SECRET_KEY`,
|
|
87
|
+
* optional `AGENTUITY_BUCKET_REGION`.
|
|
88
|
+
* The endpoint is treated as bucket-scoped
|
|
89
|
+
* (virtual-hosted-style, `<bucket>.<host>`) and used as-is.
|
|
90
|
+
*
|
|
91
|
+
* 2. **AWS-style fallback** —
|
|
92
|
+
* `AWS_ENDPOINT` (shared host) + `AWS_BUCKET` (bucket name) +
|
|
93
|
+
* `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`,
|
|
94
|
+
* optional `AWS_REGION`.
|
|
95
|
+
* This matches what the Agentuity platform currently injects
|
|
96
|
+
* when a bucket is provisioned (host and bucket are kept
|
|
97
|
+
* separate). Falls through to it only if no
|
|
98
|
+
* `AGENTUITY_BUCKET_ENDPOINT` is set.
|
|
99
|
+
*
|
|
100
|
+
* Throws a single, descriptive error when neither scheme yields a
|
|
101
|
+
* complete configuration so callers can surface a useful message at
|
|
102
|
+
* startup or first request.
|
|
103
|
+
*
|
|
104
|
+
* Pass an explicit `env` (defaults to `process.env`) to make this
|
|
105
|
+
* unit-testable without mutating global state.
|
|
106
|
+
*/
|
|
107
|
+
export function bucketConfigFromEnv(
|
|
108
|
+
env: Record<string, string | undefined> = process.env
|
|
109
|
+
): BucketConfig {
|
|
110
|
+
// 1. Agentuity-canonical naming.
|
|
111
|
+
const agentuityEndpoint = env.AGENTUITY_BUCKET_ENDPOINT;
|
|
112
|
+
const agentuityAccess = env.AGENTUITY_BUCKET_ACCESS_KEY;
|
|
113
|
+
const agentuitySecret = env.AGENTUITY_BUCKET_SECRET_KEY;
|
|
114
|
+
if (agentuityEndpoint && agentuityAccess && agentuitySecret) {
|
|
115
|
+
return {
|
|
116
|
+
endpoint: agentuityEndpoint,
|
|
117
|
+
access_key: agentuityAccess,
|
|
118
|
+
secret_key: agentuitySecret,
|
|
119
|
+
region: env.AGENTUITY_BUCKET_REGION,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// 2. AWS-style fallback (matches the platform's current injection).
|
|
124
|
+
const awsHost = env.AWS_ENDPOINT;
|
|
125
|
+
const awsBucket = env.AWS_BUCKET;
|
|
126
|
+
const awsAccess = env.AWS_ACCESS_KEY_ID;
|
|
127
|
+
const awsSecret = env.AWS_SECRET_ACCESS_KEY;
|
|
128
|
+
if (awsHost && awsBucket && awsAccess && awsSecret) {
|
|
129
|
+
return {
|
|
130
|
+
host: awsHost,
|
|
131
|
+
bucket: awsBucket,
|
|
132
|
+
access_key: awsAccess,
|
|
133
|
+
secret_key: awsSecret,
|
|
134
|
+
region: env.AWS_REGION,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
throw new Error(
|
|
139
|
+
'Storage env vars are not set. Expected AGENTUITY_BUCKET_ENDPOINT + ' +
|
|
140
|
+
'AGENTUITY_BUCKET_ACCESS_KEY + AGENTUITY_BUCKET_SECRET_KEY, or the ' +
|
|
141
|
+
'AWS-equivalents (AWS_ENDPOINT + AWS_BUCKET + AWS_ACCESS_KEY_ID + ' +
|
|
142
|
+
'AWS_SECRET_ACCESS_KEY). Provision an Agentuity bucket or set them manually.'
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
26
146
|
/** Options for `list()`. */
|
|
27
147
|
export interface S3ListOptions {
|
|
28
148
|
/** Only return objects whose key starts with this prefix. */
|