@walkeros/server-store-s3 3.4.2 → 4.0.0-next-1777463920154

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/README.md CHANGED
@@ -33,7 +33,7 @@ MinIO, and any S3-compatible provider. Uses
33
33
  "file": {
34
34
  "package": "@walkeros/server-transformer-file",
35
35
  "config": { "settings": { "prefix": "/static" } },
36
- "env": { "store": "$store:assets" }
36
+ "env": { "store": "$store.assets" }
37
37
  }
38
38
  }
39
39
  }
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,c=Object.prototype.hasOwnProperty,s={};((e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})})(s,{default:()=>o,storeS3Init:()=>o}),module.exports=(e=s,((e,s,i,o)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let a of n(s))c.call(e,a)||a===i||t(e,a,{get:()=>s[a],enumerable:!(o=r(s,a))||o.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i=require("s3mini");var o=e=>{const t=e.config.settings,r=function(e){if(!e)return"";const t=e.replace(/^\/+|\/+$/g,"");return t?t+"/":""}(t.prefix),n=new i.S3mini({endpoint:(c=t.endpoint,s=t.bucket,`${c.replace(/\/+$/,"")}/${s}`),accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,region:t.region||"auto"});var c,s;function o(t){if(function(e){return!(!e||e.startsWith("/")||e.startsWith("\\")||e.split(/[/\\]/).includes(".."))}(t))return r+t;e.logger.warn("Invalid key rejected",{key:t})}return{type:"s3",config:e.config,async get(e){const t=o(e);if(t)try{const e=await n.getObjectArrayBuffer(t);if(!e)return;return Buffer.from(e)}catch(e){return}},async set(e,t){const r=o(e);r&&await n.putObject(r,t)},async delete(e){const t=o(e);if(t)try{await n.deleteObject(t)}catch(e){}}}};//# sourceMappingURL=index.js.map
1
+ "use strict";var e,t=Object.defineProperty,r=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,c=Object.prototype.hasOwnProperty,s={};((e,r)=>{for(var n in r)t(e,n,{get:r[n],enumerable:!0})})(s,{default:()=>o,storeS3Init:()=>o}),module.exports=(e=s,((e,s,i,o)=>{if(s&&"object"==typeof s||"function"==typeof s)for(let a of n(s))c.call(e,a)||a===i||t(e,a,{get:()=>s[a],enumerable:!(o=r(s,a))||o.enumerable});return e})(t({},"__esModule",{value:!0}),e));var i=require("s3mini");var o=e=>{const t=e.config.settings,r=function(e){if(!e)return"";const t=e.replace(/^\/+|\/+$/g,"");return t?t+"/":""}(t.prefix),n=new i.S3mini({endpoint:(c=t.endpoint,s=t.bucket,`${c.replace(/\/+$/,"")}/${s}`),accessKeyId:t.accessKeyId,secretAccessKey:t.secretAccessKey,region:t.region||"auto"});var c,s;function o(t){if(function(e){return!(!e||e.startsWith("/")||e.startsWith("\\")||e.split(/[/\\]/).includes(".."))}(t))return r+t;e.logger.warn("Invalid key rejected",{key:t})}return{type:"s3",config:e.config,async get(e){const t=o(e);if(t)try{const e=await n.getObjectArrayBuffer(t);if(!e)return;return Buffer.from(e)}catch{return}},async set(e,t){const r=o(e);r&&await n.putObject(r,t)},async delete(e){const t=o(e);if(t)try{await n.deleteObject(t)}catch{}}}};//# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/store.ts"],"sourcesContent":["export { storeS3Init } from './store';\nexport type { S3StoreSettings } from './types';\nexport { storeS3Init as default } from './store';\n","import { S3mini } from 's3mini';\nimport type { Store } from '@walkeros/core';\nimport type { S3StoreSettings } from './types';\n\nfunction isValidKey(key: string): boolean {\n if (!key || key.startsWith('/') || key.startsWith('\\\\')) return false;\n return !key.split(/[/\\\\]/).includes('..');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix) return '';\n const trimmed = prefix.replace(/^\\/+|\\/+$/g, '');\n return trimmed ? trimmed + '/' : '';\n}\n\nfunction buildEndpoint(endpoint: string, bucket: string): string {\n const base = endpoint.replace(/\\/+$/, '');\n return `${base}/${bucket}`;\n}\n\nexport const storeS3Init: Store.Init<Store.Types<S3StoreSettings>> = (\n context,\n) => {\n const settings = context.config.settings as S3StoreSettings;\n const prefix = normalizePrefix(settings.prefix);\n\n const client = new S3mini({\n endpoint: buildEndpoint(settings.endpoint, settings.bucket),\n accessKeyId: settings.accessKeyId,\n secretAccessKey: settings.secretAccessKey,\n region: settings.region || 'auto',\n });\n\n function resolveKey(key: string): string | undefined {\n if (!isValidKey(key)) {\n context.logger.warn('Invalid key rejected', { key });\n return undefined;\n }\n return prefix + key;\n }\n\n return {\n type: 's3',\n config: context.config as Store.Config<Store.Types<S3StoreSettings>>,\n\n async get(key: string): Promise<Buffer | undefined> {\n const s3Key = resolveKey(key);\n if (!s3Key) return undefined;\n\n try {\n const arrayBuffer = await client.getObjectArrayBuffer(s3Key);\n if (!arrayBuffer) return undefined;\n return Buffer.from(arrayBuffer);\n } catch {\n return undefined;\n }\n },\n\n async set(key: string, value: unknown): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n await client.putObject(s3Key, value as Buffer);\n },\n\n async delete(key: string): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n try {\n await client.deleteObject(s3Key);\n } catch {\n /* S3 delete is idempotent */\n }\n },\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAuB;AAIvB,SAAS,WAAW,KAAsB;AACxC,MAAI,CAAC,OAAO,IAAI,WAAW,GAAG,KAAK,IAAI,WAAW,IAAI,EAAG,QAAO;AAChE,SAAO,CAAC,IAAI,MAAM,OAAO,EAAE,SAAS,IAAI;AAC1C;AAEA,SAAS,gBAAgB,QAAyB;AAChD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,UAAU,OAAO,QAAQ,cAAc,EAAE;AAC/C,SAAO,UAAU,UAAU,MAAM;AACnC;AAEA,SAAS,cAAc,UAAkB,QAAwB;AAC/D,QAAM,OAAO,SAAS,QAAQ,QAAQ,EAAE;AACxC,SAAO,GAAG,IAAI,IAAI,MAAM;AAC1B;AAEO,IAAM,cAAwD,CACnE,YACG;AACH,QAAM,WAAW,QAAQ,OAAO;AAChC,QAAM,SAAS,gBAAgB,SAAS,MAAM;AAE9C,QAAM,SAAS,IAAI,qBAAO;AAAA,IACxB,UAAU,cAAc,SAAS,UAAU,SAAS,MAAM;AAAA,IAC1D,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,IAC1B,QAAQ,SAAS,UAAU;AAAA,EAC7B,CAAC;AAED,WAAS,WAAW,KAAiC;AACnD,QAAI,CAAC,WAAW,GAAG,GAAG;AACpB,cAAQ,OAAO,KAAK,wBAAwB,EAAE,IAAI,CAAC;AACnD,aAAO;AAAA,IACT;AACA,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,QAAQ;AAAA,IAEhB,MAAM,IAAI,KAA0C;AAClD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI;AACF,cAAM,cAAc,MAAM,OAAO,qBAAqB,KAAK;AAC3D,YAAI,CAAC,YAAa,QAAO;AACzB,eAAO,OAAO,KAAK,WAAW;AAAA,MAChC,SAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,KAAa,OAA+B;AACpD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,YAAM,OAAO,UAAU,OAAO,KAAe;AAAA,IAC/C;AAAA,IAEA,MAAM,OAAO,KAA4B;AACvC,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,UAAI;AACF,cAAM,OAAO,aAAa,KAAK;AAAA,MACjC,SAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/store.ts"],"sourcesContent":["export { storeS3Init } from './store';\nexport type { S3StoreSettings } from './types';\nexport { storeS3Init as default } from './store';\n","import { S3mini } from 's3mini';\nimport type { Store } from '@walkeros/core';\nimport type { S3StoreSettings } from './types';\n\nfunction isValidKey(key: string): boolean {\n if (!key || key.startsWith('/') || key.startsWith('\\\\')) return false;\n return !key.split(/[/\\\\]/).includes('..');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix) return '';\n const trimmed = prefix.replace(/^\\/+|\\/+$/g, '');\n return trimmed ? trimmed + '/' : '';\n}\n\nfunction buildEndpoint(endpoint: string, bucket: string): string {\n const base = endpoint.replace(/\\/+$/, '');\n return `${base}/${bucket}`;\n}\n\nexport const storeS3Init: Store.Init<Store.Types<S3StoreSettings>> = (\n context,\n) => {\n const settings = context.config.settings as S3StoreSettings;\n const prefix = normalizePrefix(settings.prefix);\n\n const client = new S3mini({\n endpoint: buildEndpoint(settings.endpoint, settings.bucket),\n accessKeyId: settings.accessKeyId,\n secretAccessKey: settings.secretAccessKey,\n region: settings.region || 'auto',\n });\n\n function resolveKey(key: string): string | undefined {\n if (!isValidKey(key)) {\n context.logger.warn('Invalid key rejected', { key });\n return undefined;\n }\n return prefix + key;\n }\n\n return {\n type: 's3',\n config: context.config as Store.Config<Store.Types<S3StoreSettings>>,\n\n async get(key: string): Promise<Buffer | undefined> {\n const s3Key = resolveKey(key);\n if (!s3Key) return undefined;\n\n try {\n const arrayBuffer = await client.getObjectArrayBuffer(s3Key);\n if (!arrayBuffer) return undefined;\n return Buffer.from(arrayBuffer);\n } catch {\n return undefined;\n }\n },\n\n async set(key: string, value: unknown): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n await client.putObject(s3Key, value as Buffer);\n },\n\n async delete(key: string): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n try {\n await client.deleteObject(s3Key);\n } catch {\n /* S3 delete is idempotent */\n }\n },\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAuB;AAIvB,SAAS,WAAW,KAAsB;AACxC,MAAI,CAAC,OAAO,IAAI,WAAW,GAAG,KAAK,IAAI,WAAW,IAAI,EAAG,QAAO;AAChE,SAAO,CAAC,IAAI,MAAM,OAAO,EAAE,SAAS,IAAI;AAC1C;AAEA,SAAS,gBAAgB,QAAyB;AAChD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,UAAU,OAAO,QAAQ,cAAc,EAAE;AAC/C,SAAO,UAAU,UAAU,MAAM;AACnC;AAEA,SAAS,cAAc,UAAkB,QAAwB;AAC/D,QAAM,OAAO,SAAS,QAAQ,QAAQ,EAAE;AACxC,SAAO,GAAG,IAAI,IAAI,MAAM;AAC1B;AAEO,IAAM,cAAwD,CACnE,YACG;AACH,QAAM,WAAW,QAAQ,OAAO;AAChC,QAAM,SAAS,gBAAgB,SAAS,MAAM;AAE9C,QAAM,SAAS,IAAI,qBAAO;AAAA,IACxB,UAAU,cAAc,SAAS,UAAU,SAAS,MAAM;AAAA,IAC1D,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,IAC1B,QAAQ,SAAS,UAAU;AAAA,EAC7B,CAAC;AAED,WAAS,WAAW,KAAiC;AACnD,QAAI,CAAC,WAAW,GAAG,GAAG;AACpB,cAAQ,OAAO,KAAK,wBAAwB,EAAE,IAAI,CAAC;AACnD,aAAO;AAAA,IACT;AACA,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,QAAQ;AAAA,IAEhB,MAAM,IAAI,KAA0C;AAClD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI;AACF,cAAM,cAAc,MAAM,OAAO,qBAAqB,KAAK;AAC3D,YAAI,CAAC,YAAa,QAAO;AACzB,eAAO,OAAO,KAAK,WAAW;AAAA,MAChC,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,KAAa,OAA+B;AACpD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,YAAM,OAAO,UAAU,OAAO,KAAe;AAAA,IAC/C;AAAA,IAEA,MAAM,OAAO,KAA4B;AACvC,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,UAAI;AACF,cAAM,OAAO,aAAa,KAAK;AAAA,MACjC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{S3mini as e}from"s3mini";var t=t=>{const r=t.config.settings,n=function(e){if(!e)return"";const t=e.replace(/^\/+|\/+$/g,"");return t?t+"/":""}(r.prefix),c=new e({endpoint:(s=r.endpoint,i=r.bucket,`${s.replace(/\/+$/,"")}/${i}`),accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,region:r.region||"auto"});var s,i;function a(e){if(function(e){return!(!e||e.startsWith("/")||e.startsWith("\\")||e.split(/[/\\]/).includes(".."))}(e))return n+e;t.logger.warn("Invalid key rejected",{key:e})}return{type:"s3",config:t.config,async get(e){const t=a(e);if(t)try{const e=await c.getObjectArrayBuffer(t);if(!e)return;return Buffer.from(e)}catch(e){return}},async set(e,t){const r=a(e);r&&await c.putObject(r,t)},async delete(e){const t=a(e);if(t)try{await c.deleteObject(t)}catch(e){}}}};export{t as default,t as storeS3Init};//# sourceMappingURL=index.mjs.map
1
+ import{S3mini as e}from"s3mini";var t=t=>{const r=t.config.settings,n=function(e){if(!e)return"";const t=e.replace(/^\/+|\/+$/g,"");return t?t+"/":""}(r.prefix),c=new e({endpoint:(s=r.endpoint,i=r.bucket,`${s.replace(/\/+$/,"")}/${i}`),accessKeyId:r.accessKeyId,secretAccessKey:r.secretAccessKey,region:r.region||"auto"});var s,i;function a(e){if(function(e){return!(!e||e.startsWith("/")||e.startsWith("\\")||e.split(/[/\\]/).includes(".."))}(e))return n+e;t.logger.warn("Invalid key rejected",{key:e})}return{type:"s3",config:t.config,async get(e){const t=a(e);if(t)try{const e=await c.getObjectArrayBuffer(t);if(!e)return;return Buffer.from(e)}catch{return}},async set(e,t){const r=a(e);r&&await c.putObject(r,t)},async delete(e){const t=a(e);if(t)try{await c.deleteObject(t)}catch{}}}};export{t as default,t as storeS3Init};//# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { S3mini } from 's3mini';\nimport type { Store } from '@walkeros/core';\nimport type { S3StoreSettings } from './types';\n\nfunction isValidKey(key: string): boolean {\n if (!key || key.startsWith('/') || key.startsWith('\\\\')) return false;\n return !key.split(/[/\\\\]/).includes('..');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix) return '';\n const trimmed = prefix.replace(/^\\/+|\\/+$/g, '');\n return trimmed ? trimmed + '/' : '';\n}\n\nfunction buildEndpoint(endpoint: string, bucket: string): string {\n const base = endpoint.replace(/\\/+$/, '');\n return `${base}/${bucket}`;\n}\n\nexport const storeS3Init: Store.Init<Store.Types<S3StoreSettings>> = (\n context,\n) => {\n const settings = context.config.settings as S3StoreSettings;\n const prefix = normalizePrefix(settings.prefix);\n\n const client = new S3mini({\n endpoint: buildEndpoint(settings.endpoint, settings.bucket),\n accessKeyId: settings.accessKeyId,\n secretAccessKey: settings.secretAccessKey,\n region: settings.region || 'auto',\n });\n\n function resolveKey(key: string): string | undefined {\n if (!isValidKey(key)) {\n context.logger.warn('Invalid key rejected', { key });\n return undefined;\n }\n return prefix + key;\n }\n\n return {\n type: 's3',\n config: context.config as Store.Config<Store.Types<S3StoreSettings>>,\n\n async get(key: string): Promise<Buffer | undefined> {\n const s3Key = resolveKey(key);\n if (!s3Key) return undefined;\n\n try {\n const arrayBuffer = await client.getObjectArrayBuffer(s3Key);\n if (!arrayBuffer) return undefined;\n return Buffer.from(arrayBuffer);\n } catch {\n return undefined;\n }\n },\n\n async set(key: string, value: unknown): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n await client.putObject(s3Key, value as Buffer);\n },\n\n async delete(key: string): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n try {\n await client.deleteObject(s3Key);\n } catch {\n /* S3 delete is idempotent */\n }\n },\n };\n};\n"],"mappings":";AAAA,SAAS,cAAc;AAIvB,SAAS,WAAW,KAAsB;AACxC,MAAI,CAAC,OAAO,IAAI,WAAW,GAAG,KAAK,IAAI,WAAW,IAAI,EAAG,QAAO;AAChE,SAAO,CAAC,IAAI,MAAM,OAAO,EAAE,SAAS,IAAI;AAC1C;AAEA,SAAS,gBAAgB,QAAyB;AAChD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,UAAU,OAAO,QAAQ,cAAc,EAAE;AAC/C,SAAO,UAAU,UAAU,MAAM;AACnC;AAEA,SAAS,cAAc,UAAkB,QAAwB;AAC/D,QAAM,OAAO,SAAS,QAAQ,QAAQ,EAAE;AACxC,SAAO,GAAG,IAAI,IAAI,MAAM;AAC1B;AAEO,IAAM,cAAwD,CACnE,YACG;AACH,QAAM,WAAW,QAAQ,OAAO;AAChC,QAAM,SAAS,gBAAgB,SAAS,MAAM;AAE9C,QAAM,SAAS,IAAI,OAAO;AAAA,IACxB,UAAU,cAAc,SAAS,UAAU,SAAS,MAAM;AAAA,IAC1D,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,IAC1B,QAAQ,SAAS,UAAU;AAAA,EAC7B,CAAC;AAED,WAAS,WAAW,KAAiC;AACnD,QAAI,CAAC,WAAW,GAAG,GAAG;AACpB,cAAQ,OAAO,KAAK,wBAAwB,EAAE,IAAI,CAAC;AACnD,aAAO;AAAA,IACT;AACA,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,QAAQ;AAAA,IAEhB,MAAM,IAAI,KAA0C;AAClD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI;AACF,cAAM,cAAc,MAAM,OAAO,qBAAqB,KAAK;AAC3D,YAAI,CAAC,YAAa,QAAO;AACzB,eAAO,OAAO,KAAK,WAAW;AAAA,MAChC,SAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,KAAa,OAA+B;AACpD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,YAAM,OAAO,UAAU,OAAO,KAAe;AAAA,IAC/C;AAAA,IAEA,MAAM,OAAO,KAA4B;AACvC,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,UAAI;AACF,cAAM,OAAO,aAAa,KAAK;AAAA,MACjC,SAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { S3mini } from 's3mini';\nimport type { Store } from '@walkeros/core';\nimport type { S3StoreSettings } from './types';\n\nfunction isValidKey(key: string): boolean {\n if (!key || key.startsWith('/') || key.startsWith('\\\\')) return false;\n return !key.split(/[/\\\\]/).includes('..');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix) return '';\n const trimmed = prefix.replace(/^\\/+|\\/+$/g, '');\n return trimmed ? trimmed + '/' : '';\n}\n\nfunction buildEndpoint(endpoint: string, bucket: string): string {\n const base = endpoint.replace(/\\/+$/, '');\n return `${base}/${bucket}`;\n}\n\nexport const storeS3Init: Store.Init<Store.Types<S3StoreSettings>> = (\n context,\n) => {\n const settings = context.config.settings as S3StoreSettings;\n const prefix = normalizePrefix(settings.prefix);\n\n const client = new S3mini({\n endpoint: buildEndpoint(settings.endpoint, settings.bucket),\n accessKeyId: settings.accessKeyId,\n secretAccessKey: settings.secretAccessKey,\n region: settings.region || 'auto',\n });\n\n function resolveKey(key: string): string | undefined {\n if (!isValidKey(key)) {\n context.logger.warn('Invalid key rejected', { key });\n return undefined;\n }\n return prefix + key;\n }\n\n return {\n type: 's3',\n config: context.config as Store.Config<Store.Types<S3StoreSettings>>,\n\n async get(key: string): Promise<Buffer | undefined> {\n const s3Key = resolveKey(key);\n if (!s3Key) return undefined;\n\n try {\n const arrayBuffer = await client.getObjectArrayBuffer(s3Key);\n if (!arrayBuffer) return undefined;\n return Buffer.from(arrayBuffer);\n } catch {\n return undefined;\n }\n },\n\n async set(key: string, value: unknown): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n await client.putObject(s3Key, value as Buffer);\n },\n\n async delete(key: string): Promise<void> {\n const s3Key = resolveKey(key);\n if (!s3Key) return;\n\n try {\n await client.deleteObject(s3Key);\n } catch {\n /* S3 delete is idempotent */\n }\n },\n };\n};\n"],"mappings":";AAAA,SAAS,cAAc;AAIvB,SAAS,WAAW,KAAsB;AACxC,MAAI,CAAC,OAAO,IAAI,WAAW,GAAG,KAAK,IAAI,WAAW,IAAI,EAAG,QAAO;AAChE,SAAO,CAAC,IAAI,MAAM,OAAO,EAAE,SAAS,IAAI;AAC1C;AAEA,SAAS,gBAAgB,QAAyB;AAChD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,UAAU,OAAO,QAAQ,cAAc,EAAE;AAC/C,SAAO,UAAU,UAAU,MAAM;AACnC;AAEA,SAAS,cAAc,UAAkB,QAAwB;AAC/D,QAAM,OAAO,SAAS,QAAQ,QAAQ,EAAE;AACxC,SAAO,GAAG,IAAI,IAAI,MAAM;AAC1B;AAEO,IAAM,cAAwD,CACnE,YACG;AACH,QAAM,WAAW,QAAQ,OAAO;AAChC,QAAM,SAAS,gBAAgB,SAAS,MAAM;AAE9C,QAAM,SAAS,IAAI,OAAO;AAAA,IACxB,UAAU,cAAc,SAAS,UAAU,SAAS,MAAM;AAAA,IAC1D,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,IAC1B,QAAQ,SAAS,UAAU;AAAA,EAC7B,CAAC;AAED,WAAS,WAAW,KAAiC;AACnD,QAAI,CAAC,WAAW,GAAG,GAAG;AACpB,cAAQ,OAAO,KAAK,wBAAwB,EAAE,IAAI,CAAC;AACnD,aAAO;AAAA,IACT;AACA,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,QAAQ;AAAA,IAEhB,MAAM,IAAI,KAA0C;AAClD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI;AACF,cAAM,cAAc,MAAM,OAAO,qBAAqB,KAAK;AAC3D,YAAI,CAAC,YAAa,QAAO;AACzB,eAAO,OAAO,KAAK,WAAW;AAAA,MAChC,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,IAAI,KAAa,OAA+B;AACpD,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,YAAM,OAAO,UAAU,OAAO,KAAe;AAAA,IAC/C;AAAA,IAEA,MAAM,OAAO,KAA4B;AACvC,YAAM,QAAQ,WAAW,GAAG;AAC5B,UAAI,CAAC,MAAO;AAEZ,UAAI;AACF,cAAM,OAAO,aAAa,KAAK;AAAA,MACjC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$meta": {
3
3
  "package": "@walkeros/server-store-s3",
4
- "version": "3.4.2",
4
+ "version": "4.0.0-next-1777463920154",
5
5
  "type": "store",
6
6
  "platform": [
7
7
  "server"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@walkeros/server-store-s3",
3
3
  "description": "S3-compatible object storage for walkerOS server flows",
4
- "version": "3.4.2",
4
+ "version": "4.0.0-next-1777463920154",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.mjs",
@@ -32,7 +32,7 @@
32
32
  "update": "npx npm-check-updates -u && npm update"
33
33
  },
34
34
  "dependencies": {
35
- "@walkeros/core": "3.4.2",
35
+ "@walkeros/core": "4.0.0-next-1777463920154",
36
36
  "s3mini": "^0.9.1"
37
37
  },
38
38
  "devDependencies": {},