@hot-updater/aws 0.12.6 → 0.13.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.
@@ -1,6 +1,10 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
2
 
3
3
  // src/s3Database.ts
4
+ import {
5
+ CloudFrontClient,
6
+ CreateInvalidationCommand
7
+ } from "@aws-sdk/client-cloudfront";
4
8
  import {
5
9
  DeleteObjectCommand,
6
10
  GetObjectCommand,
@@ -9,6 +13,37 @@ import {
9
13
  S3Client
10
14
  } from "@aws-sdk/client-s3";
11
15
  import { Upload } from "@aws-sdk/lib-storage";
16
+ import { createDatabasePlugin } from "@hot-updater/plugin-core";
17
+
18
+ // ../../node_modules/.pnpm/es-toolkit@1.32.0/node_modules/es-toolkit/dist/_internal/compareValues.mjs
19
+ function compareValues(a, b, order) {
20
+ if (a < b) {
21
+ return order === "asc" ? -1 : 1;
22
+ }
23
+ if (a > b) {
24
+ return order === "asc" ? 1 : -1;
25
+ }
26
+ return 0;
27
+ }
28
+
29
+ // ../../node_modules/.pnpm/es-toolkit@1.32.0/node_modules/es-toolkit/dist/array/orderBy.mjs
30
+ function orderBy(arr, criteria, orders) {
31
+ return arr.slice().sort((a, b) => {
32
+ const ordersLength = orders.length;
33
+ for (let i = 0; i < criteria.length; i++) {
34
+ const order = ordersLength > i ? orders[i] : orders[ordersLength - 1];
35
+ const criterion = criteria[i];
36
+ const criterionIsFunction = typeof criterion === "function";
37
+ const valueA = criterionIsFunction ? criterion(a) : a[criterion];
38
+ const valueB = criterionIsFunction ? criterion(b) : b[criterion];
39
+ const result = compareValues(valueA, valueB, order);
40
+ if (result !== 0) {
41
+ return result;
42
+ }
43
+ }
44
+ return 0;
45
+ });
46
+ }
12
47
 
13
48
  // ../../node_modules/.pnpm/mime@4.0.4/node_modules/mime/dist/types/other.js
14
49
  var types = { "application/prs.cww": ["cww"], "application/prs.xsf+xml": ["xsf"], "application/vnd.1000minds.decision-model+xml": ["1km"], "application/vnd.3gpp.pic-bw-large": ["plb"], "application/vnd.3gpp.pic-bw-small": ["psb"], "application/vnd.3gpp.pic-bw-var": ["pvb"], "application/vnd.3gpp2.tcap": ["tcap"], "application/vnd.3m.post-it-notes": ["pwn"], "application/vnd.accpac.simply.aso": ["aso"], "application/vnd.accpac.simply.imp": ["imp"], "application/vnd.acucobol": ["acu"], "application/vnd.acucorp": ["atc", "acutc"], "application/vnd.adobe.air-application-installer-package+zip": ["air"], "application/vnd.adobe.formscentral.fcdt": ["fcdt"], "application/vnd.adobe.fxp": ["fxp", "fxpl"], "application/vnd.adobe.xdp+xml": ["xdp"], "application/vnd.adobe.xfdf": ["*xfdf"], "application/vnd.age": ["age"], "application/vnd.ahead.space": ["ahead"], "application/vnd.airzip.filesecure.azf": ["azf"], "application/vnd.airzip.filesecure.azs": ["azs"], "application/vnd.amazon.ebook": ["azw"], "application/vnd.americandynamics.acc": ["acc"], "application/vnd.amiga.ami": ["ami"], "application/vnd.android.package-archive": ["apk"], "application/vnd.anser-web-certificate-issue-initiation": ["cii"], "application/vnd.anser-web-funds-transfer-initiation": ["fti"], "application/vnd.antix.game-component": ["atx"], "application/vnd.apple.installer+xml": ["mpkg"], "application/vnd.apple.keynote": ["key"], "application/vnd.apple.mpegurl": ["m3u8"], "application/vnd.apple.numbers": ["numbers"], "application/vnd.apple.pages": ["pages"], "application/vnd.apple.pkpass": ["pkpass"], "application/vnd.aristanetworks.swi": ["swi"], "application/vnd.astraea-software.iota": ["iota"], "application/vnd.audiograph": ["aep"], "application/vnd.balsamiq.bmml+xml": ["bmml"], "application/vnd.blueice.multipass": ["mpm"], "application/vnd.bmi": ["bmi"], "application/vnd.businessobjects": ["rep"], "application/vnd.chemdraw+xml": ["cdxml"], "application/vnd.chipnuts.karaoke-mmd": ["mmd"], "application/vnd.cinderella": ["cdy"], "application/vnd.citationstyles.style+xml": ["csl"], "application/vnd.claymore": ["cla"], "application/vnd.cloanto.rp9": ["rp9"], "application/vnd.clonk.c4group": ["c4g", "c4d", "c4f", "c4p", "c4u"], "application/vnd.cluetrust.cartomobile-config": ["c11amc"], "application/vnd.cluetrust.cartomobile-config-pkg": ["c11amz"], "application/vnd.commonspace": ["csp"], "application/vnd.contact.cmsg": ["cdbcmsg"], "application/vnd.cosmocaller": ["cmc"], "application/vnd.crick.clicker": ["clkx"], "application/vnd.crick.clicker.keyboard": ["clkk"], "application/vnd.crick.clicker.palette": ["clkp"], "application/vnd.crick.clicker.template": ["clkt"], "application/vnd.crick.clicker.wordbank": ["clkw"], "application/vnd.criticaltools.wbs+xml": ["wbs"], "application/vnd.ctc-posml": ["pml"], "application/vnd.cups-ppd": ["ppd"], "application/vnd.curl.car": ["car"], "application/vnd.curl.pcurl": ["pcurl"], "application/vnd.dart": ["dart"], "application/vnd.data-vision.rdz": ["rdz"], "application/vnd.dbf": ["dbf"], "application/vnd.dece.data": ["uvf", "uvvf", "uvd", "uvvd"], "application/vnd.dece.ttml+xml": ["uvt", "uvvt"], "application/vnd.dece.unspecified": ["uvx", "uvvx"], "application/vnd.dece.zip": ["uvz", "uvvz"], "application/vnd.denovo.fcselayout-link": ["fe_launch"], "application/vnd.dna": ["dna"], "application/vnd.dolby.mlp": ["mlp"], "application/vnd.dpgraph": ["dpg"], "application/vnd.dreamfactory": ["dfac"], "application/vnd.ds-keypoint": ["kpxx"], "application/vnd.dvb.ait": ["ait"], "application/vnd.dvb.service": ["svc"], "application/vnd.dynageo": ["geo"], "application/vnd.ecowin.chart": ["mag"], "application/vnd.enliven": ["nml"], "application/vnd.epson.esf": ["esf"], "application/vnd.epson.msf": ["msf"], "application/vnd.epson.quickanime": ["qam"], "application/vnd.epson.salt": ["slt"], "application/vnd.epson.ssf": ["ssf"], "application/vnd.eszigno3+xml": ["es3", "et3"], "application/vnd.ezpix-album": ["ez2"], "application/vnd.ezpix-package": ["ez3"], "application/vnd.fdf": ["*fdf"], "application/vnd.fdsn.mseed": ["mseed"], "application/vnd.fdsn.seed": ["seed", "dataless"], "application/vnd.flographit": ["gph"], "application/vnd.fluxtime.clip": ["ftc"], "application/vnd.framemaker": ["fm", "frame", "maker", "book"], "application/vnd.frogans.fnc": ["fnc"], "application/vnd.frogans.ltf": ["ltf"], "application/vnd.fsc.weblaunch": ["fsc"], "application/vnd.fujitsu.oasys": ["oas"], "application/vnd.fujitsu.oasys2": ["oa2"], "application/vnd.fujitsu.oasys3": ["oa3"], "application/vnd.fujitsu.oasysgp": ["fg5"], "application/vnd.fujitsu.oasysprs": ["bh2"], "application/vnd.fujixerox.ddd": ["ddd"], "application/vnd.fujixerox.docuworks": ["xdw"], "application/vnd.fujixerox.docuworks.binder": ["xbd"], "application/vnd.fuzzysheet": ["fzs"], "application/vnd.genomatix.tuxedo": ["txd"], "application/vnd.geogebra.file": ["ggb"], "application/vnd.geogebra.tool": ["ggt"], "application/vnd.geometry-explorer": ["gex", "gre"], "application/vnd.geonext": ["gxt"], "application/vnd.geoplan": ["g2w"], "application/vnd.geospace": ["g3w"], "application/vnd.gmx": ["gmx"], "application/vnd.google-apps.document": ["gdoc"], "application/vnd.google-apps.presentation": ["gslides"], "application/vnd.google-apps.spreadsheet": ["gsheet"], "application/vnd.google-earth.kml+xml": ["kml"], "application/vnd.google-earth.kmz": ["kmz"], "application/vnd.grafeq": ["gqf", "gqs"], "application/vnd.groove-account": ["gac"], "application/vnd.groove-help": ["ghf"], "application/vnd.groove-identity-message": ["gim"], "application/vnd.groove-injector": ["grv"], "application/vnd.groove-tool-message": ["gtm"], "application/vnd.groove-tool-template": ["tpl"], "application/vnd.groove-vcard": ["vcg"], "application/vnd.hal+xml": ["hal"], "application/vnd.handheld-entertainment+xml": ["zmm"], "application/vnd.hbci": ["hbci"], "application/vnd.hhe.lesson-player": ["les"], "application/vnd.hp-hpgl": ["hpgl"], "application/vnd.hp-hpid": ["hpid"], "application/vnd.hp-hps": ["hps"], "application/vnd.hp-jlyt": ["jlt"], "application/vnd.hp-pcl": ["pcl"], "application/vnd.hp-pclxl": ["pclxl"], "application/vnd.hydrostatix.sof-data": ["sfd-hdstx"], "application/vnd.ibm.minipay": ["mpy"], "application/vnd.ibm.modcap": ["afp", "listafp", "list3820"], "application/vnd.ibm.rights-management": ["irm"], "application/vnd.ibm.secure-container": ["sc"], "application/vnd.iccprofile": ["icc", "icm"], "application/vnd.igloader": ["igl"], "application/vnd.immervision-ivp": ["ivp"], "application/vnd.immervision-ivu": ["ivu"], "application/vnd.insors.igm": ["igm"], "application/vnd.intercon.formnet": ["xpw", "xpx"], "application/vnd.intergeo": ["i2g"], "application/vnd.intu.qbo": ["qbo"], "application/vnd.intu.qfx": ["qfx"], "application/vnd.ipunplugged.rcprofile": ["rcprofile"], "application/vnd.irepository.package+xml": ["irp"], "application/vnd.is-xpr": ["xpr"], "application/vnd.isac.fcs": ["fcs"], "application/vnd.jam": ["jam"], "application/vnd.jcp.javame.midlet-rms": ["rms"], "application/vnd.jisp": ["jisp"], "application/vnd.joost.joda-archive": ["joda"], "application/vnd.kahootz": ["ktz", "ktr"], "application/vnd.kde.karbon": ["karbon"], "application/vnd.kde.kchart": ["chrt"], "application/vnd.kde.kformula": ["kfo"], "application/vnd.kde.kivio": ["flw"], "application/vnd.kde.kontour": ["kon"], "application/vnd.kde.kpresenter": ["kpr", "kpt"], "application/vnd.kde.kspread": ["ksp"], "application/vnd.kde.kword": ["kwd", "kwt"], "application/vnd.kenameaapp": ["htke"], "application/vnd.kidspiration": ["kia"], "application/vnd.kinar": ["kne", "knp"], "application/vnd.koan": ["skp", "skd", "skt", "skm"], "application/vnd.kodak-descriptor": ["sse"], "application/vnd.las.las+xml": ["lasxml"], "application/vnd.llamagraphics.life-balance.desktop": ["lbd"], "application/vnd.llamagraphics.life-balance.exchange+xml": ["lbe"], "application/vnd.lotus-1-2-3": ["123"], "application/vnd.lotus-approach": ["apr"], "application/vnd.lotus-freelance": ["pre"], "application/vnd.lotus-notes": ["nsf"], "application/vnd.lotus-organizer": ["org"], "application/vnd.lotus-screencam": ["scm"], "application/vnd.lotus-wordpro": ["lwp"], "application/vnd.macports.portpkg": ["portpkg"], "application/vnd.mapbox-vector-tile": ["mvt"], "application/vnd.mcd": ["mcd"], "application/vnd.medcalcdata": ["mc1"], "application/vnd.mediastation.cdkey": ["cdkey"], "application/vnd.mfer": ["mwf"], "application/vnd.mfmp": ["mfm"], "application/vnd.micrografx.flo": ["flo"], "application/vnd.micrografx.igx": ["igx"], "application/vnd.mif": ["mif"], "application/vnd.mobius.daf": ["daf"], "application/vnd.mobius.dis": ["dis"], "application/vnd.mobius.mbk": ["mbk"], "application/vnd.mobius.mqy": ["mqy"], "application/vnd.mobius.msl": ["msl"], "application/vnd.mobius.plc": ["plc"], "application/vnd.mobius.txf": ["txf"], "application/vnd.mophun.application": ["mpn"], "application/vnd.mophun.certificate": ["mpc"], "application/vnd.mozilla.xul+xml": ["xul"], "application/vnd.ms-artgalry": ["cil"], "application/vnd.ms-cab-compressed": ["cab"], "application/vnd.ms-excel": ["xls", "xlm", "xla", "xlc", "xlt", "xlw"], "application/vnd.ms-excel.addin.macroenabled.12": ["xlam"], "application/vnd.ms-excel.sheet.binary.macroenabled.12": ["xlsb"], "application/vnd.ms-excel.sheet.macroenabled.12": ["xlsm"], "application/vnd.ms-excel.template.macroenabled.12": ["xltm"], "application/vnd.ms-fontobject": ["eot"], "application/vnd.ms-htmlhelp": ["chm"], "application/vnd.ms-ims": ["ims"], "application/vnd.ms-lrm": ["lrm"], "application/vnd.ms-officetheme": ["thmx"], "application/vnd.ms-outlook": ["msg"], "application/vnd.ms-pki.seccat": ["cat"], "application/vnd.ms-pki.stl": ["*stl"], "application/vnd.ms-powerpoint": ["ppt", "pps", "pot"], "application/vnd.ms-powerpoint.addin.macroenabled.12": ["ppam"], "application/vnd.ms-powerpoint.presentation.macroenabled.12": ["pptm"], "application/vnd.ms-powerpoint.slide.macroenabled.12": ["sldm"], "application/vnd.ms-powerpoint.slideshow.macroenabled.12": ["ppsm"], "application/vnd.ms-powerpoint.template.macroenabled.12": ["potm"], "application/vnd.ms-project": ["*mpp", "mpt"], "application/vnd.ms-word.document.macroenabled.12": ["docm"], "application/vnd.ms-word.template.macroenabled.12": ["dotm"], "application/vnd.ms-works": ["wps", "wks", "wcm", "wdb"], "application/vnd.ms-wpl": ["wpl"], "application/vnd.ms-xpsdocument": ["xps"], "application/vnd.mseq": ["mseq"], "application/vnd.musician": ["mus"], "application/vnd.muvee.style": ["msty"], "application/vnd.mynfc": ["taglet"], "application/vnd.neurolanguage.nlu": ["nlu"], "application/vnd.nitf": ["ntf", "nitf"], "application/vnd.noblenet-directory": ["nnd"], "application/vnd.noblenet-sealer": ["nns"], "application/vnd.noblenet-web": ["nnw"], "application/vnd.nokia.n-gage.ac+xml": ["*ac"], "application/vnd.nokia.n-gage.data": ["ngdat"], "application/vnd.nokia.n-gage.symbian.install": ["n-gage"], "application/vnd.nokia.radio-preset": ["rpst"], "application/vnd.nokia.radio-presets": ["rpss"], "application/vnd.novadigm.edm": ["edm"], "application/vnd.novadigm.edx": ["edx"], "application/vnd.novadigm.ext": ["ext"], "application/vnd.oasis.opendocument.chart": ["odc"], "application/vnd.oasis.opendocument.chart-template": ["otc"], "application/vnd.oasis.opendocument.database": ["odb"], "application/vnd.oasis.opendocument.formula": ["odf"], "application/vnd.oasis.opendocument.formula-template": ["odft"], "application/vnd.oasis.opendocument.graphics": ["odg"], "application/vnd.oasis.opendocument.graphics-template": ["otg"], "application/vnd.oasis.opendocument.image": ["odi"], "application/vnd.oasis.opendocument.image-template": ["oti"], "application/vnd.oasis.opendocument.presentation": ["odp"], "application/vnd.oasis.opendocument.presentation-template": ["otp"], "application/vnd.oasis.opendocument.spreadsheet": ["ods"], "application/vnd.oasis.opendocument.spreadsheet-template": ["ots"], "application/vnd.oasis.opendocument.text": ["odt"], "application/vnd.oasis.opendocument.text-master": ["odm"], "application/vnd.oasis.opendocument.text-template": ["ott"], "application/vnd.oasis.opendocument.text-web": ["oth"], "application/vnd.olpc-sugar": ["xo"], "application/vnd.oma.dd2+xml": ["dd2"], "application/vnd.openblox.game+xml": ["obgx"], "application/vnd.openofficeorg.extension": ["oxt"], "application/vnd.openstreetmap.data+xml": ["osm"], "application/vnd.openxmlformats-officedocument.presentationml.presentation": ["pptx"], "application/vnd.openxmlformats-officedocument.presentationml.slide": ["sldx"], "application/vnd.openxmlformats-officedocument.presentationml.slideshow": ["ppsx"], "application/vnd.openxmlformats-officedocument.presentationml.template": ["potx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ["xlsx"], "application/vnd.openxmlformats-officedocument.spreadsheetml.template": ["xltx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.document": ["docx"], "application/vnd.openxmlformats-officedocument.wordprocessingml.template": ["dotx"], "application/vnd.osgeo.mapguide.package": ["mgp"], "application/vnd.osgi.dp": ["dp"], "application/vnd.osgi.subsystem": ["esa"], "application/vnd.palm": ["pdb", "pqa", "oprc"], "application/vnd.pawaafile": ["paw"], "application/vnd.pg.format": ["str"], "application/vnd.pg.osasli": ["ei6"], "application/vnd.picsel": ["efif"], "application/vnd.pmi.widget": ["wg"], "application/vnd.pocketlearn": ["plf"], "application/vnd.powerbuilder6": ["pbd"], "application/vnd.previewsystems.box": ["box"], "application/vnd.proteus.magazine": ["mgz"], "application/vnd.publishare-delta-tree": ["qps"], "application/vnd.pvi.ptid1": ["ptid"], "application/vnd.pwg-xhtml-print+xml": ["xhtm"], "application/vnd.quark.quarkxpress": ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"], "application/vnd.rar": ["rar"], "application/vnd.realvnc.bed": ["bed"], "application/vnd.recordare.musicxml": ["mxl"], "application/vnd.recordare.musicxml+xml": ["musicxml"], "application/vnd.rig.cryptonote": ["cryptonote"], "application/vnd.rim.cod": ["cod"], "application/vnd.rn-realmedia": ["rm"], "application/vnd.rn-realmedia-vbr": ["rmvb"], "application/vnd.route66.link66+xml": ["link66"], "application/vnd.sailingtracker.track": ["st"], "application/vnd.seemail": ["see"], "application/vnd.sema": ["sema"], "application/vnd.semd": ["semd"], "application/vnd.semf": ["semf"], "application/vnd.shana.informed.formdata": ["ifm"], "application/vnd.shana.informed.formtemplate": ["itp"], "application/vnd.shana.informed.interchange": ["iif"], "application/vnd.shana.informed.package": ["ipk"], "application/vnd.simtech-mindmapper": ["twd", "twds"], "application/vnd.smaf": ["mmf"], "application/vnd.smart.teacher": ["teacher"], "application/vnd.software602.filler.form+xml": ["fo"], "application/vnd.solent.sdkm+xml": ["sdkm", "sdkd"], "application/vnd.spotfire.dxp": ["dxp"], "application/vnd.spotfire.sfs": ["sfs"], "application/vnd.stardivision.calc": ["sdc"], "application/vnd.stardivision.draw": ["sda"], "application/vnd.stardivision.impress": ["sdd"], "application/vnd.stardivision.math": ["smf"], "application/vnd.stardivision.writer": ["sdw", "vor"], "application/vnd.stardivision.writer-global": ["sgl"], "application/vnd.stepmania.package": ["smzip"], "application/vnd.stepmania.stepchart": ["sm"], "application/vnd.sun.wadl+xml": ["wadl"], "application/vnd.sun.xml.calc": ["sxc"], "application/vnd.sun.xml.calc.template": ["stc"], "application/vnd.sun.xml.draw": ["sxd"], "application/vnd.sun.xml.draw.template": ["std"], "application/vnd.sun.xml.impress": ["sxi"], "application/vnd.sun.xml.impress.template": ["sti"], "application/vnd.sun.xml.math": ["sxm"], "application/vnd.sun.xml.writer": ["sxw"], "application/vnd.sun.xml.writer.global": ["sxg"], "application/vnd.sun.xml.writer.template": ["stw"], "application/vnd.sus-calendar": ["sus", "susp"], "application/vnd.svd": ["svd"], "application/vnd.symbian.install": ["sis", "sisx"], "application/vnd.syncml+xml": ["xsm"], "application/vnd.syncml.dm+wbxml": ["bdm"], "application/vnd.syncml.dm+xml": ["xdm"], "application/vnd.syncml.dmddf+xml": ["ddf"], "application/vnd.tao.intent-module-archive": ["tao"], "application/vnd.tcpdump.pcap": ["pcap", "cap", "dmp"], "application/vnd.tmobile-livetv": ["tmo"], "application/vnd.trid.tpt": ["tpt"], "application/vnd.triscape.mxs": ["mxs"], "application/vnd.trueapp": ["tra"], "application/vnd.ufdl": ["ufd", "ufdl"], "application/vnd.uiq.theme": ["utz"], "application/vnd.umajin": ["umj"], "application/vnd.unity": ["unityweb"], "application/vnd.uoml+xml": ["uoml", "uo"], "application/vnd.vcx": ["vcx"], "application/vnd.visio": ["vsd", "vst", "vss", "vsw"], "application/vnd.visionary": ["vis"], "application/vnd.vsf": ["vsf"], "application/vnd.wap.wbxml": ["wbxml"], "application/vnd.wap.wmlc": ["wmlc"], "application/vnd.wap.wmlscriptc": ["wmlsc"], "application/vnd.webturbo": ["wtb"], "application/vnd.wolfram.player": ["nbp"], "application/vnd.wordperfect": ["wpd"], "application/vnd.wqd": ["wqd"], "application/vnd.wt.stf": ["stf"], "application/vnd.xara": ["xar"], "application/vnd.xfdl": ["xfdl"], "application/vnd.yamaha.hv-dic": ["hvd"], "application/vnd.yamaha.hv-script": ["hvs"], "application/vnd.yamaha.hv-voice": ["hvp"], "application/vnd.yamaha.openscoreformat": ["osf"], "application/vnd.yamaha.openscoreformat.osfpvg+xml": ["osfpvg"], "application/vnd.yamaha.smaf-audio": ["saf"], "application/vnd.yamaha.smaf-phrase": ["spf"], "application/vnd.yellowriver-custom-menu": ["cmp"], "application/vnd.zul": ["zir", "zirz"], "application/vnd.zzazz.deck+xml": ["zaz"], "application/x-7z-compressed": ["7z"], "application/x-abiword": ["abw"], "application/x-ace-compressed": ["ace"], "application/x-apple-diskimage": ["*dmg"], "application/x-arj": ["arj"], "application/x-authorware-bin": ["aab", "x32", "u32", "vox"], "application/x-authorware-map": ["aam"], "application/x-authorware-seg": ["aas"], "application/x-bcpio": ["bcpio"], "application/x-bdoc": ["*bdoc"], "application/x-bittorrent": ["torrent"], "application/x-blorb": ["blb", "blorb"], "application/x-bzip": ["bz"], "application/x-bzip2": ["bz2", "boz"], "application/x-cbr": ["cbr", "cba", "cbt", "cbz", "cb7"], "application/x-cdlink": ["vcd"], "application/x-cfs-compressed": ["cfs"], "application/x-chat": ["chat"], "application/x-chess-pgn": ["pgn"], "application/x-chrome-extension": ["crx"], "application/x-cocoa": ["cco"], "application/x-conference": ["nsc"], "application/x-cpio": ["cpio"], "application/x-csh": ["csh"], "application/x-debian-package": ["*deb", "udeb"], "application/x-dgc-compressed": ["dgc"], "application/x-director": ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"], "application/x-doom": ["wad"], "application/x-dtbncx+xml": ["ncx"], "application/x-dtbook+xml": ["dtb"], "application/x-dtbresource+xml": ["res"], "application/x-dvi": ["dvi"], "application/x-envoy": ["evy"], "application/x-eva": ["eva"], "application/x-font-bdf": ["bdf"], "application/x-font-ghostscript": ["gsf"], "application/x-font-linux-psf": ["psf"], "application/x-font-pcf": ["pcf"], "application/x-font-snf": ["snf"], "application/x-font-type1": ["pfa", "pfb", "pfm", "afm"], "application/x-freearc": ["arc"], "application/x-futuresplash": ["spl"], "application/x-gca-compressed": ["gca"], "application/x-glulx": ["ulx"], "application/x-gnumeric": ["gnumeric"], "application/x-gramps-xml": ["gramps"], "application/x-gtar": ["gtar"], "application/x-hdf": ["hdf"], "application/x-httpd-php": ["php"], "application/x-install-instructions": ["install"], "application/x-iso9660-image": ["*iso"], "application/x-iwork-keynote-sffkey": ["*key"], "application/x-iwork-numbers-sffnumbers": ["*numbers"], "application/x-iwork-pages-sffpages": ["*pages"], "application/x-java-archive-diff": ["jardiff"], "application/x-java-jnlp-file": ["jnlp"], "application/x-keepass2": ["kdbx"], "application/x-latex": ["latex"], "application/x-lua-bytecode": ["luac"], "application/x-lzh-compressed": ["lzh", "lha"], "application/x-makeself": ["run"], "application/x-mie": ["mie"], "application/x-mobipocket-ebook": ["*prc", "mobi"], "application/x-ms-application": ["application"], "application/x-ms-shortcut": ["lnk"], "application/x-ms-wmd": ["wmd"], "application/x-ms-wmz": ["wmz"], "application/x-ms-xbap": ["xbap"], "application/x-msaccess": ["mdb"], "application/x-msbinder": ["obd"], "application/x-mscardfile": ["crd"], "application/x-msclip": ["clp"], "application/x-msdos-program": ["*exe"], "application/x-msdownload": ["*exe", "*dll", "com", "bat", "*msi"], "application/x-msmediaview": ["mvb", "m13", "m14"], "application/x-msmetafile": ["*wmf", "*wmz", "*emf", "emz"], "application/x-msmoney": ["mny"], "application/x-mspublisher": ["pub"], "application/x-msschedule": ["scd"], "application/x-msterminal": ["trm"], "application/x-mswrite": ["wri"], "application/x-netcdf": ["nc", "cdf"], "application/x-ns-proxy-autoconfig": ["pac"], "application/x-nzb": ["nzb"], "application/x-perl": ["pl", "pm"], "application/x-pilot": ["*prc", "*pdb"], "application/x-pkcs12": ["p12", "pfx"], "application/x-pkcs7-certificates": ["p7b", "spc"], "application/x-pkcs7-certreqresp": ["p7r"], "application/x-rar-compressed": ["*rar"], "application/x-redhat-package-manager": ["rpm"], "application/x-research-info-systems": ["ris"], "application/x-sea": ["sea"], "application/x-sh": ["sh"], "application/x-shar": ["shar"], "application/x-shockwave-flash": ["swf"], "application/x-silverlight-app": ["xap"], "application/x-sql": ["*sql"], "application/x-stuffit": ["sit"], "application/x-stuffitx": ["sitx"], "application/x-subrip": ["srt"], "application/x-sv4cpio": ["sv4cpio"], "application/x-sv4crc": ["sv4crc"], "application/x-t3vm-image": ["t3"], "application/x-tads": ["gam"], "application/x-tar": ["tar"], "application/x-tcl": ["tcl", "tk"], "application/x-tex": ["tex"], "application/x-tex-tfm": ["tfm"], "application/x-texinfo": ["texinfo", "texi"], "application/x-tgif": ["*obj"], "application/x-ustar": ["ustar"], "application/x-virtualbox-hdd": ["hdd"], "application/x-virtualbox-ova": ["ova"], "application/x-virtualbox-ovf": ["ovf"], "application/x-virtualbox-vbox": ["vbox"], "application/x-virtualbox-vbox-extpack": ["vbox-extpack"], "application/x-virtualbox-vdi": ["vdi"], "application/x-virtualbox-vhd": ["vhd"], "application/x-virtualbox-vmdk": ["vmdk"], "application/x-wais-source": ["src"], "application/x-web-app-manifest+json": ["webapp"], "application/x-x509-ca-cert": ["der", "crt", "pem"], "application/x-xfig": ["fig"], "application/x-xliff+xml": ["*xlf"], "application/x-xpinstall": ["xpi"], "application/x-xz": ["xz"], "application/x-zmachine": ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"], "audio/vnd.dece.audio": ["uva", "uvva"], "audio/vnd.digital-winds": ["eol"], "audio/vnd.dra": ["dra"], "audio/vnd.dts": ["dts"], "audio/vnd.dts.hd": ["dtshd"], "audio/vnd.lucent.voice": ["lvp"], "audio/vnd.ms-playready.media.pya": ["pya"], "audio/vnd.nuera.ecelp4800": ["ecelp4800"], "audio/vnd.nuera.ecelp7470": ["ecelp7470"], "audio/vnd.nuera.ecelp9600": ["ecelp9600"], "audio/vnd.rip": ["rip"], "audio/x-aac": ["*aac"], "audio/x-aiff": ["aif", "aiff", "aifc"], "audio/x-caf": ["caf"], "audio/x-flac": ["flac"], "audio/x-m4a": ["*m4a"], "audio/x-matroska": ["mka"], "audio/x-mpegurl": ["m3u"], "audio/x-ms-wax": ["wax"], "audio/x-ms-wma": ["wma"], "audio/x-pn-realaudio": ["ram", "ra"], "audio/x-pn-realaudio-plugin": ["rmp"], "audio/x-realaudio": ["*ra"], "audio/x-wav": ["*wav"], "chemical/x-cdx": ["cdx"], "chemical/x-cif": ["cif"], "chemical/x-cmdf": ["cmdf"], "chemical/x-cml": ["cml"], "chemical/x-csml": ["csml"], "chemical/x-xyz": ["xyz"], "image/prs.btif": ["btif", "btf"], "image/prs.pti": ["pti"], "image/vnd.adobe.photoshop": ["psd"], "image/vnd.airzip.accelerator.azv": ["azv"], "image/vnd.dece.graphic": ["uvi", "uvvi", "uvg", "uvvg"], "image/vnd.djvu": ["djvu", "djv"], "image/vnd.dvb.subtitle": ["*sub"], "image/vnd.dwg": ["dwg"], "image/vnd.dxf": ["dxf"], "image/vnd.fastbidsheet": ["fbs"], "image/vnd.fpx": ["fpx"], "image/vnd.fst": ["fst"], "image/vnd.fujixerox.edmics-mmr": ["mmr"], "image/vnd.fujixerox.edmics-rlc": ["rlc"], "image/vnd.microsoft.icon": ["ico"], "image/vnd.ms-dds": ["dds"], "image/vnd.ms-modi": ["mdi"], "image/vnd.ms-photo": ["wdp"], "image/vnd.net-fpx": ["npx"], "image/vnd.pco.b16": ["b16"], "image/vnd.tencent.tap": ["tap"], "image/vnd.valve.source.texture": ["vtf"], "image/vnd.wap.wbmp": ["wbmp"], "image/vnd.xiff": ["xif"], "image/vnd.zbrush.pcx": ["pcx"], "image/x-3ds": ["3ds"], "image/x-cmu-raster": ["ras"], "image/x-cmx": ["cmx"], "image/x-freehand": ["fh", "fhc", "fh4", "fh5", "fh7"], "image/x-icon": ["*ico"], "image/x-jng": ["jng"], "image/x-mrsid-image": ["sid"], "image/x-ms-bmp": ["*bmp"], "image/x-pcx": ["*pcx"], "image/x-pict": ["pic", "pct"], "image/x-portable-anymap": ["pnm"], "image/x-portable-bitmap": ["pbm"], "image/x-portable-graymap": ["pgm"], "image/x-portable-pixmap": ["ppm"], "image/x-rgb": ["rgb"], "image/x-tga": ["tga"], "image/x-xbitmap": ["xbm"], "image/x-xpixmap": ["xpm"], "image/x-xwindowdump": ["xwd"], "message/vnd.wfa.wsc": ["wsc"], "model/vnd.cld": ["cld"], "model/vnd.collada+xml": ["dae"], "model/vnd.dwf": ["dwf"], "model/vnd.gdl": ["gdl"], "model/vnd.gtw": ["gtw"], "model/vnd.mts": ["mts"], "model/vnd.opengex": ["ogex"], "model/vnd.parasolid.transmit.binary": ["x_b"], "model/vnd.parasolid.transmit.text": ["x_t"], "model/vnd.pytha.pyox": ["pyo", "pyox"], "model/vnd.sap.vds": ["vds"], "model/vnd.usda": ["usda"], "model/vnd.usdz+zip": ["usdz"], "model/vnd.valve.source.compiled-map": ["bsp"], "model/vnd.vtu": ["vtu"], "text/prs.lines.tag": ["dsc"], "text/vnd.curl": ["curl"], "text/vnd.curl.dcurl": ["dcurl"], "text/vnd.curl.mcurl": ["mcurl"], "text/vnd.curl.scurl": ["scurl"], "text/vnd.dvb.subtitle": ["sub"], "text/vnd.familysearch.gedcom": ["ged"], "text/vnd.fly": ["fly"], "text/vnd.fmi.flexstor": ["flx"], "text/vnd.graphviz": ["gv"], "text/vnd.in3d.3dml": ["3dml"], "text/vnd.in3d.spot": ["spot"], "text/vnd.sun.j2me.app-descriptor": ["jad"], "text/vnd.wap.wml": ["wml"], "text/vnd.wap.wmlscript": ["wmls"], "text/x-asm": ["s", "asm"], "text/x-c": ["c", "cc", "cxx", "cpp", "h", "hh", "dic"], "text/x-component": ["htc"], "text/x-fortran": ["f", "for", "f77", "f90"], "text/x-handlebars-template": ["hbs"], "text/x-java-source": ["java"], "text/x-lua": ["lua"], "text/x-markdown": ["mkd"], "text/x-nfo": ["nfo"], "text/x-opml": ["opml"], "text/x-org": ["*org"], "text/x-pascal": ["p", "pas"], "text/x-processing": ["pde"], "text/x-sass": ["sass"], "text/x-scss": ["scss"], "text/x-setext": ["etx"], "text/x-sfv": ["sfv"], "text/x-suse-ymp": ["ymp"], "text/x-uuencode": ["uu"], "text/x-vcalendar": ["vcs"], "text/x-vcard": ["vcf"], "video/vnd.dece.hd": ["uvh", "uvvh"], "video/vnd.dece.mobile": ["uvm", "uvvm"], "video/vnd.dece.pd": ["uvp", "uvvp"], "video/vnd.dece.sd": ["uvs", "uvvs"], "video/vnd.dece.video": ["uvv", "uvvv"], "video/vnd.dvb.file": ["dvb"], "video/vnd.fvt": ["fvt"], "video/vnd.mpegurl": ["mxu", "m4u"], "video/vnd.ms-playready.media.pyv": ["pyv"], "video/vnd.uvvu.mp4": ["uvu", "uvvu"], "video/vnd.vivo": ["viv"], "video/x-f4v": ["f4v"], "video/x-fli": ["fli"], "video/x-flv": ["flv"], "video/x-m4v": ["m4v"], "video/x-matroska": ["mkv", "mk3d", "mks"], "video/x-mng": ["mng"], "video/x-ms-asf": ["asf", "asx"], "video/x-ms-vob": ["vob"], "video/x-ms-wm": ["wm"], "video/x-ms-wmv": ["wmv"], "video/x-ms-wmx": ["wmx"], "video/x-ms-wvx": ["wvx"], "video/x-msvideo": ["avi"], "video/x-sgi-movie": ["movie"], "video/x-smv": ["smv"], "x-conference/x-cooltalk": ["ice"] };
@@ -140,170 +175,296 @@ async function uploadJsonToS3(client, bucket, key, data) {
140
175
  const ContentType = src_default.getType(key) ?? "application/json";
141
176
  const upload = new Upload({
142
177
  client,
143
- params: { Bucket: bucket, Key: key, Body, ContentType }
178
+ params: {
179
+ Bucket: bucket,
180
+ Key: key,
181
+ Body,
182
+ ContentType,
183
+ CacheControl: "max-age=31536000"
184
+ }
144
185
  });
145
186
  await upload.done();
146
187
  }
147
- var s3Database = (config, hooks) => (_) => {
148
- const { bucketName, ...s3Config } = config;
149
- const client = new S3Client(s3Config);
150
- let bundles = [];
151
- const changedIds = /* @__PURE__ */ new Set();
152
- const markChanged = (id) => changedIds.add(id);
153
- const PLATFORMS = ["ios", "android"];
154
- async function listUpdateJsonKeys(platform) {
155
- let continuationToken;
156
- const keys = [];
157
- const pattern = new RegExp(`^${platform}/[^/]+/update\\.json$`);
158
- do {
159
- const response = await client.send(
160
- new ListObjectsV2Command({
161
- Bucket: bucketName,
162
- Prefix: `${platform}/`,
163
- ContinuationToken: continuationToken
164
- })
165
- );
166
- const found = (response.Contents ?? []).map((item) => item.Key).filter((key) => !!key && pattern.test(key));
167
- keys.push(...found);
168
- continuationToken = response.NextContinuationToken;
169
- } while (continuationToken);
170
- return keys;
188
+ async function invalidateCloudFront(client, distributionId, paths) {
189
+ if (paths.length === 0) {
190
+ return;
171
191
  }
172
- async function updateTargetVersionsForPlatform(platform) {
173
- const targetKey = `${platform}/target-app-versions.json`;
192
+ const timestamp = (/* @__PURE__ */ new Date()).getTime();
193
+ await client.send(
194
+ new CreateInvalidationCommand({
195
+ DistributionId: distributionId,
196
+ InvalidationBatch: {
197
+ CallerReference: `invalidation-${timestamp}`,
198
+ Paths: {
199
+ Quantity: paths.length,
200
+ Items: paths
201
+ }
202
+ }
203
+ })
204
+ );
205
+ }
206
+ function removeBundleInternalKeys(bundle) {
207
+ const { _updateJsonKey, _oldUpdateJsonKey, ...pureBundle } = bundle;
208
+ return pureBundle;
209
+ }
210
+ async function listUpdateJsonKeys(client, bucketName, platform, channel) {
211
+ let continuationToken;
212
+ const keys = [];
213
+ const prefix = channel ? platform ? `${channel}/${platform}/` : `${channel}/` : "";
214
+ const pattern = channel ? platform ? new RegExp(`^${channel}/${platform}/[^/]+/update\\.json$`) : new RegExp(`^${channel}/[^/]+/[^/]+/update\\.json$`) : platform ? new RegExp(`^[^/]+/${platform}/[^/]+/update\\.json$`) : /^[^\/]+\/[^\/]+\/[^\/]+\/update\.json$/;
215
+ do {
216
+ const response = await client.send(
217
+ new ListObjectsV2Command({
218
+ Bucket: bucketName,
219
+ Prefix: prefix,
220
+ ContinuationToken: continuationToken
221
+ })
222
+ );
223
+ const found = (response.Contents ?? []).map((item) => item.Key).filter((key) => !!key && pattern.test(key));
224
+ keys.push(...found);
225
+ continuationToken = response.NextContinuationToken;
226
+ } while (continuationToken);
227
+ return keys;
228
+ }
229
+ async function updateTargetVersionsForPlatform(client, bucketName, platform) {
230
+ let continuationToken;
231
+ const keys = [];
232
+ const pattern = new RegExp(`^[^/]+/${platform}/[^/]+/update\\.json$`);
233
+ do {
234
+ const response = await client.send(
235
+ new ListObjectsV2Command({
236
+ Bucket: bucketName,
237
+ Prefix: "",
238
+ ContinuationToken: continuationToken
239
+ })
240
+ );
241
+ const found = (response.Contents ?? []).map((item) => item.Key).filter((key) => !!key && pattern.test(key));
242
+ keys.push(...found);
243
+ continuationToken = response.NextContinuationToken;
244
+ } while (continuationToken);
245
+ const keysByChannel = keys.reduce(
246
+ (acc, key) => {
247
+ const parts = key.split("/");
248
+ const channel = parts[0];
249
+ acc[channel] = acc[channel] || [];
250
+ acc[channel].push(key);
251
+ return acc;
252
+ },
253
+ {}
254
+ );
255
+ const updatedTargetFiles = /* @__PURE__ */ new Set();
256
+ for (const channel of Object.keys(keysByChannel)) {
257
+ const updateKeys = keysByChannel[channel];
258
+ const targetKey = `${channel}/${platform}/target-app-versions.json`;
259
+ const currentVersions = updateKeys.map((key) => key.split("/")[2]);
174
260
  const oldTargetVersions = await loadJsonFromS3(client, bucketName, targetKey) ?? [];
175
- const updateKeys = await listUpdateJsonKeys(platform);
176
- const currentVersions = updateKeys.map((key) => key.split("/")[1]);
177
261
  const newTargetVersions = oldTargetVersions.filter(
178
262
  (v) => currentVersions.includes(v)
179
263
  );
180
264
  for (const v of currentVersions) {
181
265
  if (!newTargetVersions.includes(v)) newTargetVersions.push(v);
182
266
  }
183
- await uploadJsonToS3(client, bucketName, targetKey, newTargetVersions);
184
- }
185
- async function processRemovals(oldKey, removalIds) {
186
- const currentBundles = await loadJsonFromS3(client, bucketName, oldKey) ?? [];
187
- const updatedBundles = currentBundles.filter(
188
- (b) => !removalIds.includes(b.id)
189
- );
190
- updatedBundles.sort((a, b) => b.id.localeCompare(a.id));
191
- if (updatedBundles.length === 0) {
192
- await client.send(
193
- new DeleteObjectCommand({ Bucket: bucketName, Key: oldKey })
194
- );
195
- } else {
196
- await uploadJsonToS3(client, bucketName, oldKey, updatedBundles);
267
+ if (JSON.stringify(oldTargetVersions) !== JSON.stringify(newTargetVersions)) {
268
+ await uploadJsonToS3(client, bucketName, targetKey, newTargetVersions);
269
+ updatedTargetFiles.add(`/${targetKey}`);
197
270
  }
198
271
  }
199
- async function mergeChangedBundles(updateJsonKey, changedList) {
200
- const currentBundles = await loadJsonFromS3(client, bucketName, updateJsonKey) ?? [];
201
- for (const changedBundle of changedList) {
202
- const index = currentBundles.findIndex(
203
- (b) => b.id === changedBundle.id
204
- );
205
- if (index >= 0) {
206
- currentBundles[index] = changedBundle;
207
- } else {
208
- currentBundles.push(changedBundle);
209
- }
272
+ return updatedTargetFiles;
273
+ }
274
+ var s3Database = (config, hooks) => {
275
+ const { bucketName, cloudfrontDistributionId, ...s3Config } = config;
276
+ const client = new S3Client(s3Config);
277
+ const cloudfrontClient = new CloudFrontClient({
278
+ credentials: s3Config.credentials,
279
+ region: s3Config.region
280
+ });
281
+ const bundlesMap = /* @__PURE__ */ new Map();
282
+ const pendingBundlesMap = /* @__PURE__ */ new Map();
283
+ const PLATFORMS = ["ios", "android"];
284
+ async function reloadBundles() {
285
+ bundlesMap.clear();
286
+ const platformPromises = PLATFORMS.map(async (platform) => {
287
+ const keys = await listUpdateJsonKeys(client, bucketName, platform);
288
+ const filePromises = keys.map(async (key) => {
289
+ const bundlesData = await loadJsonFromS3(client, bucketName, key) ?? [];
290
+ return bundlesData.map((bundle) => ({
291
+ ...bundle,
292
+ _updateJsonKey: key
293
+ }));
294
+ });
295
+ const results = await Promise.all(filePromises);
296
+ return results.flat();
297
+ });
298
+ const allBundles = (await Promise.all(platformPromises)).flat();
299
+ for (const bundle of allBundles) {
300
+ bundlesMap.set(bundle.id, bundle);
301
+ }
302
+ for (const [id, bundle] of pendingBundlesMap.entries()) {
303
+ bundlesMap.set(id, bundle);
210
304
  }
211
- currentBundles.sort((a, b) => b.id.localeCompare(a.id));
212
- await uploadJsonToS3(client, bucketName, updateJsonKey, currentBundles);
305
+ return orderBy(allBundles, [(v) => v.id], ["desc"]);
213
306
  }
214
- return {
215
- name: "s3Database",
216
- async commitBundle() {
217
- const changedBundlesByKey = {};
218
- const removalsByKey = {};
219
- for (const bundle of bundles) {
220
- if (changedIds.has(bundle.id)) {
221
- if (bundle._oldUpdateJsonKey) {
222
- removalsByKey[bundle._oldUpdateJsonKey] = removalsByKey[bundle._oldUpdateJsonKey] || [];
223
- removalsByKey[bundle._oldUpdateJsonKey].push(bundle.id);
307
+ return createDatabasePlugin(
308
+ "s3Database",
309
+ {
310
+ async getBundleById(bundleId) {
311
+ const pendingBundle = pendingBundlesMap.get(bundleId);
312
+ if (pendingBundle) {
313
+ return removeBundleInternalKeys(pendingBundle);
314
+ }
315
+ const bundle = bundlesMap.get(bundleId);
316
+ if (bundle) {
317
+ return removeBundleInternalKeys(bundle);
318
+ }
319
+ const bundles = await reloadBundles();
320
+ return bundles.find((bundle2) => bundle2.id === bundleId) ?? null;
321
+ },
322
+ async getBundles(options) {
323
+ let bundles = await reloadBundles();
324
+ const { where, limit, offset = 0 } = options ?? {};
325
+ if (where) {
326
+ bundles = bundles.filter((bundle) => {
327
+ return Object.entries(where).every(
328
+ ([key, value]) => value === void 0 || value === null || bundle[key] === value
329
+ );
330
+ });
331
+ }
332
+ if (offset > 0) {
333
+ bundles = bundles.slice(offset);
334
+ }
335
+ if (limit) {
336
+ bundles = bundles.slice(0, limit);
337
+ }
338
+ return bundles.map(removeBundleInternalKeys);
339
+ },
340
+ async getChannels() {
341
+ const allBundles = await this.getBundles();
342
+ return [...new Set(allBundles.map((bundle) => bundle.channel))];
343
+ },
344
+ async commitBundle({ changedSets }) {
345
+ if (changedSets.length === 0) return;
346
+ const changedBundlesByKey = {};
347
+ const removalsByKey = {};
348
+ const pathsToInvalidate = /* @__PURE__ */ new Set();
349
+ for (const { operation, data } of changedSets) {
350
+ if (operation === "insert") {
351
+ const key = `${data.channel}/${data.platform}/${data.targetAppVersion}/update.json`;
352
+ const bundleWithKey = {
353
+ ...data,
354
+ _updateJsonKey: key
355
+ };
356
+ bundlesMap.set(data.id, bundleWithKey);
357
+ pendingBundlesMap.set(data.id, bundleWithKey);
358
+ changedBundlesByKey[key] = changedBundlesByKey[key] || [];
359
+ changedBundlesByKey[key].push(
360
+ removeBundleInternalKeys(bundleWithKey)
361
+ );
362
+ pathsToInvalidate.add(`/${key}`);
363
+ continue;
364
+ }
365
+ let bundle = pendingBundlesMap.get(data.id);
366
+ if (!bundle) {
367
+ bundle = bundlesMap.get(data.id);
224
368
  }
225
- const currentKey = bundle._updateJsonKey;
226
- if (!currentKey) {
227
- throw new Error(
228
- `Missing _updateJsonKey for bundle id ${bundle.id}`
369
+ if (!bundle) {
370
+ throw new Error("targetBundleId not found");
371
+ }
372
+ if (operation === "update") {
373
+ const newChannel = data.channel !== void 0 ? data.channel : bundle.channel;
374
+ const newPlatform = data.platform !== void 0 ? data.platform : bundle.platform;
375
+ const newTargetAppVersion = data.targetAppVersion !== void 0 ? data.targetAppVersion : bundle.targetAppVersion;
376
+ const newKey = `${newChannel}/${newPlatform}/${newTargetAppVersion}/update.json`;
377
+ if (newKey !== bundle._updateJsonKey) {
378
+ const oldKey = bundle._updateJsonKey;
379
+ removalsByKey[oldKey] = removalsByKey[oldKey] || [];
380
+ removalsByKey[oldKey].push(bundle.id);
381
+ changedBundlesByKey[newKey] = changedBundlesByKey[newKey] || [];
382
+ const updatedBundle2 = { ...bundle, ...data };
383
+ updatedBundle2._oldUpdateJsonKey = oldKey;
384
+ updatedBundle2._updateJsonKey = newKey;
385
+ bundlesMap.set(data.id, updatedBundle2);
386
+ pendingBundlesMap.set(data.id, updatedBundle2);
387
+ changedBundlesByKey[newKey].push(
388
+ removeBundleInternalKeys(updatedBundle2)
389
+ );
390
+ pathsToInvalidate.add(`/${oldKey}`);
391
+ pathsToInvalidate.add(`/${newKey}`);
392
+ continue;
393
+ }
394
+ const currentKey = bundle._updateJsonKey;
395
+ const updatedBundle = { ...bundle, ...data };
396
+ bundlesMap.set(data.id, updatedBundle);
397
+ pendingBundlesMap.set(data.id, updatedBundle);
398
+ changedBundlesByKey[currentKey] = changedBundlesByKey[currentKey] || [];
399
+ changedBundlesByKey[currentKey].push(
400
+ removeBundleInternalKeys(updatedBundle)
229
401
  );
402
+ pathsToInvalidate.add(`/${currentKey}`);
230
403
  }
231
- changedBundlesByKey[currentKey] = changedBundlesByKey[currentKey] || [];
232
- const { _updateJsonKey, _oldUpdateJsonKey, ...pureBundle } = bundle;
233
- changedBundlesByKey[currentKey].push(pureBundle);
234
404
  }
405
+ for (const oldKey of Object.keys(removalsByKey)) {
406
+ await (async () => {
407
+ const currentBundles = await loadJsonFromS3(client, bucketName, oldKey) ?? [];
408
+ const updatedBundles = currentBundles.filter(
409
+ (b) => !removalsByKey[oldKey].includes(b.id)
410
+ );
411
+ updatedBundles.sort((a, b) => b.id.localeCompare(a.id));
412
+ if (updatedBundles.length === 0) {
413
+ await client.send(
414
+ new DeleteObjectCommand({ Bucket: bucketName, Key: oldKey })
415
+ );
416
+ } else {
417
+ await uploadJsonToS3(client, bucketName, oldKey, updatedBundles);
418
+ }
419
+ })();
420
+ }
421
+ for (const key of Object.keys(changedBundlesByKey)) {
422
+ await (async () => {
423
+ const currentBundles = await loadJsonFromS3(client, bucketName, key) ?? [];
424
+ const pureBundles = changedBundlesByKey[key].map(
425
+ (bundle) => bundle
426
+ );
427
+ for (const changedBundle of pureBundles) {
428
+ const index = currentBundles.findIndex(
429
+ (b) => b.id === changedBundle.id
430
+ );
431
+ if (index >= 0) {
432
+ currentBundles[index] = changedBundle;
433
+ } else {
434
+ currentBundles.push(changedBundle);
435
+ }
436
+ }
437
+ currentBundles.sort((a, b) => b.id.localeCompare(a.id));
438
+ await uploadJsonToS3(client, bucketName, key, currentBundles);
439
+ })();
440
+ }
441
+ const updatedTargetFilePaths = /* @__PURE__ */ new Set();
442
+ for (const platform of PLATFORMS) {
443
+ const updatedPaths = await updateTargetVersionsForPlatform(
444
+ client,
445
+ bucketName,
446
+ platform
447
+ );
448
+ for (const path2 of updatedPaths) {
449
+ updatedTargetFilePaths.add(path2);
450
+ }
451
+ }
452
+ for (const path2 of updatedTargetFilePaths) {
453
+ pathsToInvalidate.add(path2);
454
+ }
455
+ if (cloudfrontClient && cloudfrontDistributionId && pathsToInvalidate.size > 0) {
456
+ await invalidateCloudFront(
457
+ cloudfrontClient,
458
+ cloudfrontDistributionId,
459
+ Array.from(pathsToInvalidate)
460
+ );
461
+ }
462
+ pendingBundlesMap.clear();
463
+ hooks?.onDatabaseUpdated?.();
235
464
  }
236
- for (const oldKey of Object.keys(removalsByKey)) {
237
- await processRemovals(oldKey, removalsByKey[oldKey]);
238
- }
239
- for (const key of Object.keys(changedBundlesByKey)) {
240
- await mergeChangedBundles(key, changedBundlesByKey[key]);
241
- }
242
- for (const platform of PLATFORMS) {
243
- await updateTargetVersionsForPlatform(platform);
244
- }
245
- changedIds.clear();
246
- hooks?.onDatabaseUpdated?.();
247
- },
248
- async updateBundle(targetBundleId, newBundle) {
249
- const index = bundles.findIndex((u) => u.id === targetBundleId);
250
- if (index === -1) {
251
- throw new Error("target bundle version not found");
252
- }
253
- const original = bundles[index];
254
- const {
255
- platform: oldPlatform,
256
- targetAppVersion: oldTargetAppVersion,
257
- _updateJsonKey: oldUpdateJsonKey
258
- } = original;
259
- const newPlatform = newBundle.platform ?? original.platform;
260
- const newTargetAppVersion = newBundle.targetAppVersion ?? original.targetAppVersion;
261
- if (newPlatform !== oldPlatform || newTargetAppVersion !== oldTargetAppVersion) {
262
- original._oldUpdateJsonKey = oldUpdateJsonKey;
263
- original._updateJsonKey = `${newPlatform}/${newTargetAppVersion}/update.json`;
264
- }
265
- Object.assign(original, newBundle);
266
- markChanged(original.id);
267
- },
268
- async getBundleById(bundleId) {
269
- const bundle = bundles.find((b) => b.id === bundleId);
270
- if (!bundle) return null;
271
- const { _updateJsonKey, _oldUpdateJsonKey, ...pureBundle } = bundle;
272
- return pureBundle;
273
- },
274
- async getBundles(refresh = false) {
275
- if (!refresh && bundles.length > 0) {
276
- return bundles.map(
277
- ({ _updateJsonKey, _oldUpdateJsonKey, ...bundle }) => bundle
278
- );
279
- }
280
- const platformPromises = PLATFORMS.map(async (platform) => {
281
- const keys = await listUpdateJsonKeys(platform);
282
- const filePromises = keys.map(async (key) => {
283
- const bundlesData = await loadJsonFromS3(client, bucketName, key) ?? [];
284
- return bundlesData.map((bundle) => ({
285
- ...bundle,
286
- _updateJsonKey: key
287
- }));
288
- });
289
- const results = await Promise.all(filePromises);
290
- return results.flat();
291
- });
292
- const allBundles = (await Promise.all(platformPromises)).flat();
293
- allBundles.sort((a, b) => b.id.localeCompare(a.id));
294
- bundles = allBundles;
295
- return bundles.map(
296
- ({ _updateJsonKey, _oldUpdateJsonKey, ...bundle }) => bundle
297
- );
298
465
  },
299
- async appendBundle(inputBundle) {
300
- bundles.unshift({
301
- ...inputBundle,
302
- _updateJsonKey: `${inputBundle.platform}/${inputBundle.targetAppVersion}/update.json`
303
- });
304
- markChanged(inputBundle.id);
305
- }
306
- };
466
+ hooks
467
+ );
307
468
  };
308
469
 
309
470
  // src/s3Storage.ts
@@ -355,16 +516,18 @@ var s3Storage = (config, hooks) => (_) => {
355
516
  ContentType,
356
517
  Bucket: bucketName,
357
518
  Key,
358
- Body
519
+ Body,
520
+ CacheControl: "max-age=31536000"
359
521
  }
360
522
  });
361
523
  const response = await upload.done();
362
- if (!response.Location || !response.Key) {
524
+ if (!response.Bucket || !response.Key) {
363
525
  throw new Error("Upload Failed");
364
526
  }
365
527
  hooks?.onStorageUploaded?.();
366
528
  return {
367
- fileUrl: hooks?.transformFileUrl?.(response.Key) ?? response.Location
529
+ bucketName: response.Bucket,
530
+ key: response.Key
368
531
  };
369
532
  }
370
533
  };