@blinkk/root-cms 3.0.6 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +77 -0
  2. package/dist/app.js +6 -4
  3. package/dist/browser-client/browser-client.d.ts +148 -0
  4. package/dist/browser-client/embed-window.d.ts +66 -0
  5. package/dist/browser-client/emitter.d.ts +11 -0
  6. package/dist/browser-client.js +377 -0
  7. package/dist/{chunk-RXWDB3K4.js → chunk-4VZTYUQ7.js} +1 -1
  8. package/dist/{chunk-N4K6ICFR.js → chunk-AFBSITEO.js} +4 -6
  9. package/dist/{chunk-PNLLZXVY.js → chunk-AJDMNTZQ.js} +2 -2
  10. package/dist/{chunk-7L5OI5ES.js → chunk-GXV4UQ6Z.js} +8 -4
  11. package/dist/chunk-J72JK4KR.js +8 -0
  12. package/dist/cli.js +2 -1
  13. package/dist/client.js +2 -1
  14. package/dist/core/client.d.ts +5 -0
  15. package/dist/core.js +4 -2
  16. package/dist/functions.js +4 -3
  17. package/dist/plugin.js +5 -4
  18. package/dist/shared/embed-protocol.d.ts +72 -0
  19. package/dist/ui/AIPage-EL6DQYII.js +1 -0
  20. package/dist/ui/AssetsPage-5S6PNMF6.js +1 -0
  21. package/dist/ui/CollectionPage-CU3VDEXA.js +1 -0
  22. package/dist/ui/ComparePage-FTZLYO2O.js +1 -0
  23. package/dist/ui/DataPage-XIXFKXDN.js +1 -0
  24. package/dist/ui/DataSourcePage-ORIEQH3Y.js +1 -0
  25. package/dist/ui/DocTranslationsPage-4OVBIPSG.js +1 -0
  26. package/dist/ui/DocumentPage-3JPFJF3E.js +1 -0
  27. package/dist/ui/EditDataSourcePage-HIGZZQJC.js +1 -0
  28. package/dist/ui/EditReleasePage-KUHBU2HQ.js +1 -0
  29. package/dist/ui/EmbeddedAIPage-CJWZE5FC.js +1 -0
  30. package/dist/ui/EmbeddedDocumentPage-6XQHYIAO.js +1 -0
  31. package/dist/ui/{ImageEditorDialog-QEULJAT2.js → ImageEditorDialog-GGS4VFEA.js} +2 -2
  32. package/dist/ui/LogsPage-4DVGYXZY.js +1 -0
  33. package/dist/ui/NewDataSourcePage-7TUUE6ZL.js +1 -0
  34. package/dist/ui/NewReleasePage-6UT36HDW.js +1 -0
  35. package/dist/ui/NotFoundPage-AW6UC6II.js +1 -0
  36. package/dist/ui/ProjectPage-US5FJGFK.js +1 -0
  37. package/dist/ui/ReleasePage-W2R3DIFX.js +1 -0
  38. package/dist/ui/ReleasesPage-HBBUGE7D.js +1 -0
  39. package/dist/ui/SettingsPage-7JQQILUV.js +1 -0
  40. package/dist/ui/SidebarToolsPage-MIYXKHF2.js +1 -0
  41. package/dist/ui/TaskPage-JYUQEGRB.js +1 -0
  42. package/dist/ui/TasksPage-4VFQF243.js +1 -0
  43. package/dist/ui/TranslationsArbPage-AJLM5VSD.js +2 -0
  44. package/dist/ui/TranslationsEditPage-RTTGTIGI.js +1 -0
  45. package/dist/ui/{TranslationsPage-OBN6CQZZ.js → TranslationsPage-HPYAJQ4Q.js} +2 -2
  46. package/dist/ui/{chunk-WKOX3VFN.js → chunk-2KSMCQ6H.js} +2 -2
  47. package/dist/ui/{chunk-V7RAXP2W.js → chunk-3E6CASIN.js} +1 -1
  48. package/dist/ui/{chunk-N4DFAIC5.js → chunk-3T4ZWQR4.js} +1 -1
  49. package/dist/ui/chunk-4ISFTE2G.js +5 -0
  50. package/dist/ui/chunk-5AVRMJVW.js +1 -0
  51. package/dist/ui/chunk-764W6634.js +1 -0
  52. package/dist/ui/chunk-76ZGLKLT.js +1 -0
  53. package/dist/ui/{chunk-SKEP5WYH.js → chunk-7SK47HHZ.js} +3 -3
  54. package/dist/ui/chunk-AZCGXQTL.js +1 -0
  55. package/dist/ui/{chunk-KYKFNAX4.js → chunk-B6M55OFE.js} +1 -1
  56. package/dist/ui/{chunk-2225WAJ2.js → chunk-CAY5NM4Z.js} +1 -1
  57. package/dist/ui/{chunk-4KE2SZKH.js → chunk-D3UIZHRK.js} +1 -1
  58. package/dist/ui/{chunk-NMBXHKIJ.js → chunk-E76ECIOX.js} +1 -1
  59. package/dist/ui/chunk-FBSBL476.js +1 -0
  60. package/dist/ui/chunk-FFHV5S6A.js +1 -0
  61. package/dist/ui/{chunk-NQB37NMX.js → chunk-FJLNXXE3.js} +1 -1
  62. package/dist/ui/chunk-FSVNOZ6F.js +1 -0
  63. package/dist/ui/{chunk-3IDOZ4MG.js → chunk-GDXNSFLE.js} +1 -1
  64. package/dist/ui/{chunk-EMYXSVTD.js → chunk-GQ5IRK43.js} +1 -1
  65. package/dist/ui/{chunk-UHWNLNP4.js → chunk-GU24U5RM.js} +1 -1
  66. package/dist/ui/{chunk-KPJ53X55.js → chunk-HARRKJFZ.js} +1 -1
  67. package/dist/ui/{chunk-6E7PGMZX.js → chunk-HO3W4RVG.js} +1 -1
  68. package/dist/ui/{chunk-CVGYBXVH.js → chunk-J5E457OI.js} +1 -1
  69. package/dist/ui/{chunk-W3HIZQ4Z.js → chunk-JS6TK4OP.js} +1 -1
  70. package/dist/ui/{chunk-BEDUTYQP.js → chunk-JTIQBW33.js} +1 -1
  71. package/dist/ui/{chunk-ORXEMIQC.js → chunk-KRNQ6L35.js} +1 -1
  72. package/dist/ui/chunk-LROR6N3B.js +7 -0
  73. package/dist/ui/{chunk-4CUWZQXT.js.LEGAL.txt → chunk-LROR6N3B.js.LEGAL.txt} +6 -1
  74. package/dist/ui/{chunk-AOCBDKLV.js → chunk-M3T56ZRP.js} +1 -1
  75. package/dist/ui/chunk-MXGHX55S.js +141 -0
  76. package/dist/ui/{chunk-HYARD7BK.js → chunk-MZTOPPWQ.js} +1 -1
  77. package/dist/ui/{chunk-RQKL4KXY.js → chunk-N3JSLTMV.js} +1 -1
  78. package/dist/ui/{chunk-D37DCENS.js → chunk-NSOTG64N.js} +1 -1
  79. package/dist/ui/{chunk-N5Y5OWTV.js → chunk-O5P3CPJ4.js} +1 -1
  80. package/dist/ui/chunk-OWQL5DVE.js +1 -0
  81. package/dist/ui/{chunk-SEUH7LN2.js → chunk-OXVYTSIZ.js} +1 -1
  82. package/dist/ui/chunk-P2Z66DHV.js +1 -0
  83. package/dist/ui/{chunk-TZEZEMRQ.js → chunk-QEE7XS6O.js} +1 -1
  84. package/dist/ui/{chunk-AXETBZ6T.js → chunk-QHJOTXYB.js} +1 -1
  85. package/dist/ui/{chunk-4IXGYXA2.js → chunk-R6B3W5AJ.js} +1 -1
  86. package/dist/ui/{chunk-T47V6AGW.js → chunk-RAXWL656.js} +1 -1
  87. package/dist/ui/chunk-SRX7EWL4.js +1 -0
  88. package/dist/ui/{chunk-OVRTVMO5.js → chunk-TDUBSLEC.js} +1 -1
  89. package/dist/ui/chunk-TFB3VGWP.js +1 -0
  90. package/dist/ui/{chunk-6MOPIV5T.js → chunk-U7PWJV6F.js} +1 -1
  91. package/dist/ui/{chunk-GDSSFO5R.js → chunk-UUVAD4U4.js} +1 -1
  92. package/dist/ui/chunk-V4CTOC6E.js +1 -0
  93. package/dist/ui/{chunk-EGEB6N4J.js → chunk-VD6G5NV4.js} +11 -11
  94. package/dist/ui/chunk-W5DOO6ID.js +1 -0
  95. package/dist/ui/{chunk-3XYCOR6Z.js → chunk-WFQU7V3W.js} +1 -1
  96. package/dist/ui/{chunk-XYBHH5L4.js → chunk-WKF7CSWS.js} +1 -1
  97. package/dist/ui/{chunk-DXKEDMEI.js → chunk-WXT7LTQM.js} +1 -1
  98. package/dist/ui/{chunk-6GPTGBA7.js → chunk-XT5FNJCX.js} +1 -1
  99. package/dist/ui/chunk-YLSRRNSE.js +1 -0
  100. package/dist/ui/{chunk-UFQSZ6J2.js → chunk-ZN2Y5OUF.js} +1 -1
  101. package/dist/ui/gcs-ECSDFCIU.js +1 -0
  102. package/dist/ui/ui.css +1 -1
  103. package/dist/ui/ui.js +1 -1
  104. package/package.json +7 -3
  105. package/dist/ui/AIPage-JPZ4QUB4.js +0 -1
  106. package/dist/ui/AssetsPage-GDJMKS3M.js +0 -1
  107. package/dist/ui/CollectionPage-5DVXJEET.js +0 -1
  108. package/dist/ui/ComparePage-LIXA6G66.js +0 -1
  109. package/dist/ui/DataPage-AP4Z5JPS.js +0 -1
  110. package/dist/ui/DataSourcePage-WO3ZKMFI.js +0 -1
  111. package/dist/ui/DocTranslationsPage-QKYFIVHP.js +0 -1
  112. package/dist/ui/DocumentPage-ON43I5KM.js +0 -1
  113. package/dist/ui/EditDataSourcePage-XVMEV2LJ.js +0 -1
  114. package/dist/ui/EditReleasePage-A2NB5TFG.js +0 -1
  115. package/dist/ui/LogsPage-4LZJX3O4.js +0 -1
  116. package/dist/ui/NewDataSourcePage-4YWX7IOG.js +0 -1
  117. package/dist/ui/NewReleasePage-HWLVTEXX.js +0 -1
  118. package/dist/ui/NotFoundPage-72AXQAYX.js +0 -1
  119. package/dist/ui/ProjectPage-L4GYDIA5.js +0 -1
  120. package/dist/ui/ReleasePage-43BSWL5B.js +0 -1
  121. package/dist/ui/ReleasesPage-CJXAZBP6.js +0 -1
  122. package/dist/ui/SettingsPage-SYXAMKSF.js +0 -1
  123. package/dist/ui/SidebarToolsPage-OFF5BOXP.js +0 -1
  124. package/dist/ui/TaskPage-HBDLHFI5.js +0 -1
  125. package/dist/ui/TasksPage-OLCDTQNB.js +0 -1
  126. package/dist/ui/TranslationsArbPage-E3NCMAMS.js +0 -2
  127. package/dist/ui/TranslationsEditPage-IWOI7Y5G.js +0 -1
  128. package/dist/ui/chunk-32LRQ5MJ.js +0 -1
  129. package/dist/ui/chunk-3HVDIPSS.js +0 -1
  130. package/dist/ui/chunk-4CUWZQXT.js +0 -7
  131. package/dist/ui/chunk-DUJYIOLE.js +0 -5
  132. package/dist/ui/chunk-IDYKCAAL.js +0 -1
  133. package/dist/ui/chunk-IKED2IGU.js +0 -1
  134. package/dist/ui/chunk-J3EGGI57.js +0 -1
  135. package/dist/ui/chunk-MZP6RIG2.js +0 -1
  136. package/dist/ui/chunk-NQ5ARARP.js +0 -1
  137. package/dist/ui/chunk-RI2JWWU3.js +0 -141
  138. package/dist/ui/chunk-RPOP6MVJ.js +0 -1
  139. package/dist/ui/chunk-TDKVKTW4.js +0 -1
  140. package/dist/ui/chunk-UA7UCTX5.js +0 -1
  141. package/dist/ui/gcs-L33FIRZU.js +0 -1
  142. /package/dist/ui/{ImageEditorDialog-QEULJAT2.js.LEGAL.txt → ImageEditorDialog-GGS4VFEA.js.LEGAL.txt} +0 -0
  143. /package/dist/ui/{chunk-SKEP5WYH.js.LEGAL.txt → chunk-7SK47HHZ.js.LEGAL.txt} +0 -0
  144. /package/dist/ui/{chunk-NMBXHKIJ.js.LEGAL.txt → chunk-E76ECIOX.js.LEGAL.txt} +0 -0
  145. /package/dist/ui/{chunk-RI2JWWU3.js.LEGAL.txt → chunk-MXGHX55S.js.LEGAL.txt} +0 -0
  146. /package/dist/ui/{chunk-EGEB6N4J.js.LEGAL.txt → chunk-VD6G5NV4.js.LEGAL.txt} +0 -0
@@ -1 +1 @@
1
- import{a as _,c as P}from"./chunk-W3HIZQ4Z.js";import{f as u}from"./chunk-ORXEMIQC.js";import{a as w,b as j,c as n,g as T,n as b,o as R,p as I,q as m,t as h,u as l,w as f}from"./chunk-EGEB6N4J.js";async function F(t,a){if(!t)throw new Error("missing data source id");let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t);await I(s,{...a,id:t,createdAt:l(),createdBy:window.firebase.user.email}),u("datasource.create",{metadata:{datasourceId:t}})}async function G(){let t=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,o=j(a,"Projects",t,"DataSources"),e=T(o),s=await R(e),r=[];return s.forEach(c=>{r.push(c.data())}),r}async function S(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t),s=await b(e);return s.exists()?s.data():null}async function O(t,a){let o=a?.mode||"draft",e=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,r=n(s,"Projects",e,"DataSources",t,"Data",o),c=await b(r);return c.exists()?c.data():null}async function U(t,a){let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t);await m(s,a),u("datasource.save",{metadata:{datasourceId:t}})}async function q(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t);await m(e,{archivedAt:l(),archivedBy:window.firebase.user.email}),u("datasource.archive",{metadata:{datasourceId:t}})}async function H(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t);await m(e,{archivedAt:h(),archivedBy:h()}),u("datasource.unarchive",{metadata:{datasourceId:t}})}async function W(t){let a=await S(t);if(!a)throw new Error(`data source not found: ${t}`);if(a.archivedAt)throw new Error(`data source is archived: ${t}`);if(a.type==="http"&&a.url&&!C(a.url)){let o=await fetch("/cms/api/data.sync",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:a.id})});if(o.status!==200){let e=await o.text();throw new Error(`sync failed: ${e}`)}}else{let{data:o,headers:e}=await x(a),s=window.__ROOT_CTX.rootConfig.projectId,r=window.firebase.db,c=n(r,"Projects",s,"DataSources",t),d=n(r,"Projects",s,"DataSources",t,"Data","draft"),p={...a,syncedAt:w.now(),syncedBy:window.firebase.user.email},i=f(r);i.set(d,{dataSource:p,data:o,...e?{headers:e}:{}}),i.update(c,{syncedAt:w.now(),syncedBy:window.firebase.user.email}),await i.commit()}console.log(`synced data source: ${t}`),u("datasource.sync",{metadata:{datasourceId:t}})}async function M(t){let a=await S(t);if(!a)throw new Error(`data source not found: ${t}`);if(a.archivedAt)throw new Error(`data source is archived: ${t}`);let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t),r=n(e,"Projects",o,"DataSources",t,"Data","draft"),c=n(e,"Projects",o,"DataSources",t,"Data","published"),d=await O(t,{mode:"draft"}),p={...a,publishedAt:w.now(),publishedBy:window.firebase.user.email},i=f(e);i.set(c,{dataSource:p,data:d?.data||null,...d?.headers?{headers:d.headers}:{}}),i.update(r,{dataSource:p}),i.update(s,{publishedAt:w.now(),publishedBy:window.firebase.user.email}),await i.commit(),console.log(`published data ${t}`),u("datasource.publish",{metadata:{datasourceId:t}})}async function k(t){if(!await S(t))throw new Error(`data source not found: ${t}`);let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t),r=n(e,"Projects",o,"DataSources",t,"Data","draft"),c=n(e,"Projects",o,"DataSources",t,"Data","published"),d=f(e);d.update(s,{publishedAt:h(),publishedBy:h()}),(await b(r)).exists()&&d.update(r,{"dataSource.publishedAt":h(),"dataSource.publishedBy":h()}),d.delete(c),await d.commit(),console.log(`unpublished data source: ${t}`),u("datasource.unpublish",{metadata:{datasourceId:t}})}async function J(t,a){if(t.length===0)return;let o=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId,s=a?.batch||f(o);for(let r of t){let c=await S(r);if(!c)throw new Error(`data source not found: ${r}`);if(c.archivedAt)throw new Error(`data source is archived: ${r}`);let d=await O(r,{mode:"draft"}),p=n(o,"Projects",e,"DataSources",r),i=n(o,"Projects",e,"DataSources",r,"Data","draft"),y=n(o,"Projects",e,"DataSources",r,"Data","published"),D={...c,publishedAt:l(),publishedBy:window.firebase.user.email};s.set(y,{dataSource:D,data:d?.data||null,...d?.headers?{headers:d.headers}:{}}),s.update(i,{dataSource:D}),s.update(p,{publishedAt:l(),publishedBy:window.firebase.user.email}),u("datasource.publish",{metadata:{datasourceId:r}})}(!a?.batch||a?.commitBatch)&&await s.commit()}async function N(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t),s=n(o,"Projects",a,"DataSources",t,"Data","draft"),r=n(o,"Projects",a,"DataSources",t,"Data","published"),c=f(o);c.delete(s),c.delete(r),c.delete(e),await c.commit(),console.log(`deleted data source ${t}`),u("datasource.delete",{metadata:{datasourceId:t}})}async function x(t){if(t.type==="http")return{data:await B(t)};if(t.type==="gsheet")return await v(t);throw new Error(`unsupported data source: ${t.type}`)}async function v(t){let a=P(t.url);if(!a?.spreadsheetId)throw new Error(`failed to parse google sheet url: ${t.url}`);let e=await new _(a.spreadsheetId).getSheet(a.gid??0);if(!e)throw new Error(`could not find sheet: ${t.url}`);let s=t.dataFormat||"map",[r,c]=await e.getValues();return s==="array"?{data:[r,c],headers:r}:{data:c.map(p=>{let i={};return p.forEach((y,D)=>{let g=r[D];g&&(i[g]=String(y||""))}),i}),headers:r}}async function B(t){if(!C(t.url))throw new Error(`unsupported url: ${t.url}`);let a=await fetch(t.url,{method:t.httpOptions?.method||"GET",headers:t.httpOptions?.headers||[],body:t.httpOptions?.body||void 0});if(a.status!==200){let e=await a.text();throw new Error(`req failed: ${e}`)}return String(a.headers.get("content-type")).includes("application/json")?await a.json():a.text()}function C(t){return t&&t.startsWith("/")}export{F as a,G as b,S as c,O as d,U as e,q as f,H as g,W as h,M as i,k as j,J as k,N as l};
1
+ import{a as _,c as P}from"./chunk-JS6TK4OP.js";import{f as u}from"./chunk-KRNQ6L35.js";import{a as w,b as j,c as n,g as T,n as b,o as R,p as I,q as m,u as h,v as l,x as f}from"./chunk-VD6G5NV4.js";async function F(t,a){if(!t)throw new Error("missing data source id");let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t);await I(s,{...a,id:t,createdAt:l(),createdBy:window.firebase.user.email}),u("datasource.create",{metadata:{datasourceId:t}})}async function G(){let t=window.__ROOT_CTX.rootConfig.projectId,a=window.firebase.db,o=j(a,"Projects",t,"DataSources"),e=T(o),s=await R(e),r=[];return s.forEach(c=>{r.push(c.data())}),r}async function S(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t),s=await b(e);return s.exists()?s.data():null}async function O(t,a){let o=a?.mode||"draft",e=window.__ROOT_CTX.rootConfig.projectId,s=window.firebase.db,r=n(s,"Projects",e,"DataSources",t,"Data",o),c=await b(r);return c.exists()?c.data():null}async function U(t,a){let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t);await m(s,a),u("datasource.save",{metadata:{datasourceId:t}})}async function q(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t);await m(e,{archivedAt:l(),archivedBy:window.firebase.user.email}),u("datasource.archive",{metadata:{datasourceId:t}})}async function H(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t);await m(e,{archivedAt:h(),archivedBy:h()}),u("datasource.unarchive",{metadata:{datasourceId:t}})}async function W(t){let a=await S(t);if(!a)throw new Error(`data source not found: ${t}`);if(a.archivedAt)throw new Error(`data source is archived: ${t}`);if(a.type==="http"&&a.url&&!C(a.url)){let o=await fetch("/cms/api/data.sync",{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({id:a.id})});if(o.status!==200){let e=await o.text();throw new Error(`sync failed: ${e}`)}}else{let{data:o,headers:e}=await x(a),s=window.__ROOT_CTX.rootConfig.projectId,r=window.firebase.db,c=n(r,"Projects",s,"DataSources",t),d=n(r,"Projects",s,"DataSources",t,"Data","draft"),p={...a,syncedAt:w.now(),syncedBy:window.firebase.user.email},i=f(r);i.set(d,{dataSource:p,data:o,...e?{headers:e}:{}}),i.update(c,{syncedAt:w.now(),syncedBy:window.firebase.user.email}),await i.commit()}console.log(`synced data source: ${t}`),u("datasource.sync",{metadata:{datasourceId:t}})}async function M(t){let a=await S(t);if(!a)throw new Error(`data source not found: ${t}`);if(a.archivedAt)throw new Error(`data source is archived: ${t}`);let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t),r=n(e,"Projects",o,"DataSources",t,"Data","draft"),c=n(e,"Projects",o,"DataSources",t,"Data","published"),d=await O(t,{mode:"draft"}),p={...a,publishedAt:w.now(),publishedBy:window.firebase.user.email},i=f(e);i.set(c,{dataSource:p,data:d?.data||null,...d?.headers?{headers:d.headers}:{}}),i.update(r,{dataSource:p}),i.update(s,{publishedAt:w.now(),publishedBy:window.firebase.user.email}),await i.commit(),console.log(`published data ${t}`),u("datasource.publish",{metadata:{datasourceId:t}})}async function k(t){if(!await S(t))throw new Error(`data source not found: ${t}`);let o=window.__ROOT_CTX.rootConfig.projectId,e=window.firebase.db,s=n(e,"Projects",o,"DataSources",t),r=n(e,"Projects",o,"DataSources",t,"Data","draft"),c=n(e,"Projects",o,"DataSources",t,"Data","published"),d=f(e);d.update(s,{publishedAt:h(),publishedBy:h()}),(await b(r)).exists()&&d.update(r,{"dataSource.publishedAt":h(),"dataSource.publishedBy":h()}),d.delete(c),await d.commit(),console.log(`unpublished data source: ${t}`),u("datasource.unpublish",{metadata:{datasourceId:t}})}async function J(t,a){if(t.length===0)return;let o=window.firebase.db,e=window.__ROOT_CTX.rootConfig.projectId,s=a?.batch||f(o);for(let r of t){let c=await S(r);if(!c)throw new Error(`data source not found: ${r}`);if(c.archivedAt)throw new Error(`data source is archived: ${r}`);let d=await O(r,{mode:"draft"}),p=n(o,"Projects",e,"DataSources",r),i=n(o,"Projects",e,"DataSources",r,"Data","draft"),y=n(o,"Projects",e,"DataSources",r,"Data","published"),D={...c,publishedAt:l(),publishedBy:window.firebase.user.email};s.set(y,{dataSource:D,data:d?.data||null,...d?.headers?{headers:d.headers}:{}}),s.update(i,{dataSource:D}),s.update(p,{publishedAt:l(),publishedBy:window.firebase.user.email}),u("datasource.publish",{metadata:{datasourceId:r}})}(!a?.batch||a?.commitBatch)&&await s.commit()}async function N(t){let a=window.__ROOT_CTX.rootConfig.projectId,o=window.firebase.db,e=n(o,"Projects",a,"DataSources",t),s=n(o,"Projects",a,"DataSources",t,"Data","draft"),r=n(o,"Projects",a,"DataSources",t,"Data","published"),c=f(o);c.delete(s),c.delete(r),c.delete(e),await c.commit(),console.log(`deleted data source ${t}`),u("datasource.delete",{metadata:{datasourceId:t}})}async function x(t){if(t.type==="http")return{data:await B(t)};if(t.type==="gsheet")return await v(t);throw new Error(`unsupported data source: ${t.type}`)}async function v(t){let a=P(t.url);if(!a?.spreadsheetId)throw new Error(`failed to parse google sheet url: ${t.url}`);let e=await new _(a.spreadsheetId).getSheet(a.gid??0);if(!e)throw new Error(`could not find sheet: ${t.url}`);let s=t.dataFormat||"map",[r,c]=await e.getValues();return s==="array"?{data:[r,c],headers:r}:{data:c.map(p=>{let i={};return p.forEach((y,D)=>{let g=r[D];g&&(i[g]=String(y||""))}),i}),headers:r}}async function B(t){if(!C(t.url))throw new Error(`unsupported url: ${t.url}`);let a=await fetch(t.url,{method:t.httpOptions?.method||"GET",headers:t.httpOptions?.headers||[],body:t.httpOptions?.body||void 0});if(a.status!==200){let e=await a.text();throw new Error(`req failed: ${e}`)}return String(a.headers.get("content-type")).includes("application/json")?await a.json():a.text()}function C(t){return t&&t.startsWith("/")}export{F as a,G as b,S as c,O as d,U as e,q as f,H as g,W as h,M as i,k as j,J as k,N as l};