@empiricalrun/r2-uploader 0.8.0 → 0.9.0

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,11 @@
1
1
  # @empiricalrun/r2-uploader
2
2
 
3
+ ## 0.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1967ac3: feat: support iam creds for s3 uploads
8
+
3
9
  ## 0.8.0
4
10
 
5
11
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEhE,wBAAgB,4BAA4B,IAAI,kBAAkB,GAAG,IAAI,CA4BxE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,QAAQ,CAuBvE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAEhE,wBAAgB,4BAA4B,IAAI,kBAAkB,GAAG,IAAI,CAoCxE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,QAAQ,CA8BvE"}
package/dist/client.js CHANGED
@@ -14,6 +14,13 @@ function getStorageCredentialsFromEnv() {
14
14
  secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
15
15
  };
16
16
  }
17
+ // S3 with IAM role-based auth (no explicit credentials needed)
18
+ if (process.env.S3_REGION && process.env.S3_UPLOAD_BUCKET) {
19
+ return {
20
+ provider: "s3-iam",
21
+ region: process.env.S3_REGION,
22
+ };
23
+ }
17
24
  if (process.env.R2_ACCOUNT_ID &&
18
25
  process.env.R2_ACCESS_KEY_ID &&
19
26
  process.env.R2_SECRET_ACCESS_KEY) {
@@ -36,6 +43,12 @@ function createStorageClient(config) {
36
43
  },
37
44
  });
38
45
  }
46
+ // S3 with IAM role-based auth - SDK auto-discovers credentials from environment/role
47
+ if (config.provider === "s3-iam") {
48
+ return new client_s3_1.S3Client({
49
+ region: config.region,
50
+ });
51
+ }
39
52
  if (config.provider === "r2" || "accountId" in config) {
40
53
  return new client_s3_1.S3Client({
41
54
  region: "auto",
package/dist/types.d.ts CHANGED
@@ -11,6 +11,10 @@ interface S3Credentials {
11
11
  accessKeyId: string;
12
12
  secretAccessKey: string;
13
13
  }
14
+ interface S3IamCredentials {
15
+ provider: "s3-iam";
16
+ region: string;
17
+ }
14
18
  /** @deprecated Legacy R2 credentials format without explicit provider */
15
19
  interface LegacyR2Credentials {
16
20
  provider?: undefined;
@@ -18,14 +22,15 @@ interface LegacyR2Credentials {
18
22
  accessKeyId: string;
19
23
  secretAccessKey: string;
20
24
  }
21
- export type StorageCredentials = R2Credentials | S3Credentials;
25
+ export type StorageCredentials = R2Credentials | S3Credentials | S3IamCredentials;
22
26
  interface BaseConfig {
23
27
  bucket: string;
24
28
  }
25
29
  type R2BaseConfig = BaseConfig & R2Credentials;
26
30
  type S3BaseConfig = BaseConfig & S3Credentials;
31
+ type S3IamBaseConfig = BaseConfig & S3IamCredentials;
27
32
  type LegacyR2BaseConfig = BaseConfig & LegacyR2Credentials;
28
- export type StorageBaseConfig = R2BaseConfig | S3BaseConfig | LegacyR2BaseConfig;
33
+ export type StorageBaseConfig = R2BaseConfig | S3BaseConfig | S3IamBaseConfig | LegacyR2BaseConfig;
29
34
  export type UploadStreamConfig = StorageBaseConfig & {
30
35
  destinationDir: string;
31
36
  files: {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,UAAU,aAAa;IACrB,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,yEAAyE;AACzE,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,aAAa,CAAC;AAE/D,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,YAAY,GAAG,UAAU,GAAG,aAAa,CAAC;AAC/C,KAAK,YAAY,GAAG,UAAU,GAAG,aAAa,CAAC;AAC/C,KAAK,kBAAkB,GAAG,UAAU,GAAG,mBAAmB,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,YAAY,GACZ,kBAAkB,CAAC;AAEvB,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AACtD,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AACtD,0CAA0C;AAC1C,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC;AACxC,2CAA2C;AAC3C,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;AAE1C,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAE1C,UAAU,aAAa;IACrB,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,gBAAgB;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,yEAAyE;AACzE,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,aAAa,GACb,gBAAgB,CAAC;AAErB,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,KAAK,YAAY,GAAG,UAAU,GAAG,aAAa,CAAC;AAC/C,KAAK,YAAY,GAAG,UAAU,GAAG,aAAa,CAAC;AAC/C,KAAK,eAAe,GAAG,UAAU,GAAG,gBAAgB,CAAC;AACrD,KAAK,kBAAkB,GAAG,UAAU,GAAG,mBAAmB,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GACzB,YAAY,GACZ,YAAY,GACZ,eAAe,GACf,kBAAkB,CAAC;AAEvB,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG;IACnD,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE7C,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AACtD,iDAAiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AACtD,0CAA0C;AAC1C,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC;AACxC,2CAA2C;AAC3C,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;AAE1C,MAAM,WAAW,OAAO;IACtB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC"}
@@ -1,10 +1,11 @@
1
- import { AsyncTask } from "./types";
1
+ import { AsyncTask, StorageCredentials } from "./types";
2
2
  export interface CreateUploadTaskOptions {
3
3
  sourceDir: string;
4
4
  fileList?: string[];
5
5
  destinationDir: string;
6
6
  uploadBucket: string;
7
7
  baseUrl: string;
8
+ credentials: StorageCredentials;
8
9
  }
9
10
  /**
10
11
  * Creates an async task for uploading files to R2 or S3 storage.
@@ -15,7 +16,8 @@ export interface CreateUploadTaskOptions {
15
16
  * @param {string} params.destinationDir - The destination directory in storage
16
17
  * @param {string} params.uploadBucket - The bucket to upload to
17
18
  * @param {string} params.baseUrl - The base URL for generating file URLs
19
+ * @param {StorageCredentials} params.credentials - Storage credentials for R2 or S3.
18
20
  * @returns {AsyncTask} An async task that when executed will upload the files and return a map of file paths to URLs
19
21
  */
20
- export declare function createUploadTask({ sourceDir, fileList, destinationDir, uploadBucket, baseUrl, }: CreateUploadTaskOptions): AsyncTask;
22
+ export declare function createUploadTask({ sourceDir, fileList, destinationDir, uploadBucket, baseUrl, credentials, }: CreateUploadTaskOptions): AsyncTask;
21
23
  //# sourceMappingURL=upload-task.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload-task.d.ts","sourceRoot":"","sources":["../src/upload-task.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAW,MAAM,SAAS,CAAC;AAG7C,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,OAAO,GACR,EAAE,uBAAuB,GAAG,SAAS,CAyBrC"}
1
+ {"version":3,"file":"upload-task.d.ts","sourceRoot":"","sources":["../src/upload-task.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAW,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGjE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,kBAAkB,CAAC;CACjC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,OAAO,EACP,WAAW,GACZ,EAAE,uBAAuB,GAAG,SAAS,CAsBrC"}
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createUploadTask = createUploadTask;
7
7
  const path_1 = __importDefault(require("path"));
8
- const client_1 = require("./client");
9
8
  const logger_1 = require("./logger");
10
9
  const upload_1 = require("./upload");
11
10
  /**
@@ -17,20 +16,18 @@ const upload_1 = require("./upload");
17
16
  * @param {string} params.destinationDir - The destination directory in storage
18
17
  * @param {string} params.uploadBucket - The bucket to upload to
19
18
  * @param {string} params.baseUrl - The base URL for generating file URLs
19
+ * @param {StorageCredentials} params.credentials - Storage credentials for R2 or S3.
20
20
  * @returns {AsyncTask} An async task that when executed will upload the files and return a map of file paths to URLs
21
21
  */
22
- function createUploadTask({ sourceDir, fileList, destinationDir, uploadBucket, baseUrl, }) {
22
+ function createUploadTask({ sourceDir, fileList, destinationDir, uploadBucket, baseUrl, credentials, }) {
23
23
  return async () => {
24
- const credentials = (0, client_1.getStorageCredentialsFromEnv)();
25
- if (!credentials) {
26
- return;
27
- }
28
24
  try {
29
25
  const uploadedFiles = await (0, upload_1.uploadDirectory)({
30
26
  sourceDir,
31
27
  fileList,
32
28
  destinationDir,
33
29
  uploadBucket,
30
+ credentials,
34
31
  });
35
32
  const urls = {};
36
33
  Object.entries(uploadedFiles).forEach(([filePath]) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@empiricalrun/r2-uploader",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"