@powerhousedao/connect 3.2.0-dev.3 → 3.2.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.env +1 -0
- package/dist/assets/{AddDriveModal.S5JSMmVF.js → AddDriveModal.DU0-1Gwj.js} +2 -2
- package/dist/assets/{AddDriveModal.S5JSMmVF.js.map → AddDriveModal.DU0-1Gwj.js.map} +1 -1
- package/dist/assets/{AddLocalDriveModal.n1mqr4Ur.js → AddLocalDriveModal.BmWt-zqx.js} +2 -2
- package/dist/assets/{AddLocalDriveModal.n1mqr4Ur.js.map → AddLocalDriveModal.BmWt-zqx.js.map} +1 -1
- package/dist/assets/{AddRemoteDriveModal.wFq1V4ak.js → AddRemoteDriveModal.B2dLszvc.js} +2 -2
- package/dist/assets/{AddRemoteDriveModal.wFq1V4ak.js.map → AddRemoteDriveModal.B2dLszvc.js.map} +1 -1
- package/dist/assets/{ConfirmationModal.C8RDHYs4.js → ConfirmationModal.BeBmQkT4.js} +2 -2
- package/dist/assets/{ConfirmationModal.C8RDHYs4.js.map → ConfirmationModal.BeBmQkT4.js.map} +1 -1
- package/dist/assets/{CookiesPolicyModal.A--L98Lz.js → CookiesPolicyModal.Da5Eremm.js} +2 -2
- package/dist/assets/{CookiesPolicyModal.A--L98Lz.js.map → CookiesPolicyModal.Da5Eremm.js.map} +1 -1
- package/dist/assets/{CreateDocumentModal.CnSb_jQl.js → CreateDocumentModal.BfyfQ4CP.js} +2 -2
- package/dist/assets/{CreateDocumentModal.CnSb_jQl.js.map → CreateDocumentModal.BfyfQ4CP.js.map} +1 -1
- package/dist/assets/{DebugSettingsModal.G7uoivFk.js → DebugSettingsModal.D1RjRPeP.js} +2 -2
- package/dist/assets/{DebugSettingsModal.G7uoivFk.js.map → DebugSettingsModal.D1RjRPeP.js.map} +1 -1
- package/dist/assets/{DeleteDriveModal.ChVVlip-.js → DeleteDriveModal.CTBCQ3Gm.js} +2 -2
- package/dist/assets/{DeleteDriveModal.ChVVlip-.js.map → DeleteDriveModal.CTBCQ3Gm.js.map} +1 -1
- package/dist/assets/{DeleteItemModal.DITFrzCI.js → DeleteItemModal.iAY-B9YV.js} +2 -2
- package/dist/assets/{DeleteItemModal.DITFrzCI.js.map → DeleteItemModal.iAY-B9YV.js.map} +1 -1
- package/dist/assets/{DisclaimerModal.COSJ5Mb3.js → DisclaimerModal.5nyrmZzU.js} +2 -2
- package/dist/assets/{DisclaimerModal.COSJ5Mb3.js.map → DisclaimerModal.5nyrmZzU.js.map} +1 -1
- package/dist/assets/{DriveSettingsModal._ieV-khA.js → DriveSettingsModal.BswCtDqR.js} +2 -2
- package/dist/assets/{DriveSettingsModal._ieV-khA.js.map → DriveSettingsModal.BswCtDqR.js.map} +1 -1
- package/dist/assets/{SettingsModal.CLz_Pwjg.js → SettingsModal.xtmwrOuz.js} +2 -2
- package/dist/assets/{SettingsModal.CLz_Pwjg.js.map → SettingsModal.xtmwrOuz.js.map} +1 -1
- package/dist/assets/{Trans.DPLArfzj.js → Trans.kFe2S0Wk.js} +2 -2
- package/dist/assets/{Trans.DPLArfzj.js.map → Trans.kFe2S0Wk.js.map} +1 -1
- package/dist/assets/{UpgradeDriveModal.BQJxekDN.js → UpgradeDriveModal.B7mUnNcD.js} +2 -2
- package/dist/assets/{UpgradeDriveModal.BQJxekDN.js.map → UpgradeDriveModal.B7mUnNcD.js.map} +1 -1
- package/dist/assets/app-skeleton.js +1 -1
- package/dist/assets/{app.qUOoOKql.js → app.i8BXWBLI.js} +6 -6
- package/dist/assets/app.i8BXWBLI.js.map +1 -0
- package/dist/assets/{atlas-import.DFyx2ULx.js → atlas-import.BlRucXow.js} +2 -2
- package/dist/assets/{atlas-import.DFyx2ULx.js.map → atlas-import.BlRucXow.js.map} +1 -1
- package/dist/assets/{connect.config.BIAWWw4c.js → connect.config.BIqjxCXL.js} +2 -2
- package/dist/assets/connect.config.BIqjxCXL.js.map +1 -0
- package/dist/assets/{content.D5x8bb-b.js → content.wJSU5SX4.js} +3 -3
- package/dist/assets/{content.D5x8bb-b.js.map → content.wJSU5SX4.js.map} +1 -1
- package/dist/assets/{cookie-banner.DY7qoG0W.js → cookie-banner.OUQb8XFD.js} +2 -2
- package/dist/assets/{cookie-banner.DY7qoG0W.js.map → cookie-banner.OUQb8XFD.js.map} +1 -1
- package/dist/assets/{home.10bnjd9x.js → home.BPNW5daP.js} +2 -2
- package/dist/assets/{home.10bnjd9x.js.map → home.BPNW5daP.js.map} +1 -1
- package/dist/assets/{index.Do5xnOI9.js → index.BZv9HHlY.js} +2 -2
- package/dist/assets/{index.Do5xnOI9.js.map → index.BZv9HHlY.js.map} +1 -1
- package/dist/assets/{index.B1X7VkO2.js → index.BnnhHj1x.js} +2 -2
- package/dist/assets/{index.B1X7VkO2.js.map → index.BnnhHj1x.js.map} +1 -1
- package/dist/assets/{index.DK_8MvB2.js → index.CgUigIc1.js} +2 -2
- package/dist/assets/{index.DK_8MvB2.js.map → index.CgUigIc1.js.map} +1 -1
- package/dist/assets/index.DIldf0L8.js +3 -0
- package/dist/assets/{index.BpiSpZ8T.js.map → index.DIldf0L8.js.map} +1 -1
- package/dist/assets/index.DkcL7UzK.js +2 -0
- package/dist/assets/{index.tFj_U6SH.js.map → index.DkcL7UzK.js.map} +1 -1
- package/dist/assets/{index.CEQRMIAY.js → index.DlyZ17HN.js} +2 -2
- package/dist/assets/{index.CEQRMIAY.js.map → index.DlyZ17HN.js.map} +1 -1
- package/dist/assets/index.Do_wXic0.js +2 -0
- package/dist/assets/index.Do_wXic0.js.map +1 -0
- package/dist/assets/{index.Dc5HlSvp.js → index.DxrAJM8l.js} +2 -2
- package/dist/assets/{index.Dc5HlSvp.js.map → index.DxrAJM8l.js.map} +1 -1
- package/dist/assets/{index.BrOLYS47.js → index.dIkm5cjz.js} +2 -2
- package/dist/assets/{index.BrOLYS47.js.map → index.dIkm5cjz.js.map} +1 -1
- package/dist/assets/{main.BDioUTOa.js → main.B9faieT7.js} +3 -3
- package/dist/assets/{main.BDioUTOa.js.map → main.B9faieT7.js.map} +1 -1
- package/dist/assets/modal.DnfLqdig.js +3 -0
- package/dist/assets/{modal.DMmzVWT5.js.map → modal.DnfLqdig.js.map} +1 -1
- package/dist/assets/{modals.Bvtd5okT.js → modals.JWX5rpFT.js} +2 -2
- package/dist/assets/{modals.Bvtd5okT.js.map → modals.JWX5rpFT.js.map} +1 -1
- package/dist/assets/nodefs.DBLOWKOu.js +2 -0
- package/dist/assets/{nodefs.BOz_9Cu2.js.map → nodefs.DBLOWKOu.js.map} +1 -1
- package/dist/assets/{opfs-ahp.EyJwDrf5.js → opfs-ahp.CcP1RoS9.js} +2 -2
- package/dist/assets/{opfs-ahp.EyJwDrf5.js.map → opfs-ahp.CcP1RoS9.js.map} +1 -1
- package/dist/assets/{react-error-boundary.esm.uEuLAO53.js → react-error-boundary.esm.DcWSXRDX.js} +2 -2
- package/dist/assets/{react-error-boundary.esm.uEuLAO53.js.map → react-error-boundary.esm.DcWSXRDX.js.map} +1 -1
- package/dist/assets/{registerServiceWorker.D0bvv5hZ.js → registerServiceWorker.CK34OHp2.js} +2 -2
- package/dist/assets/{registerServiceWorker.D0bvv5hZ.js.map → registerServiceWorker.CK34OHp2.js.map} +1 -1
- package/dist/assets/{root.C3hMJJ71.js → root.dhXDMo9v.js} +2 -2
- package/dist/assets/{root.C3hMJJ71.js.map → root.dhXDMo9v.js.map} +1 -1
- package/dist/assets/{toast.Dz6iiaGE.js → toast.Dw86T5dF.js} +2 -2
- package/dist/assets/{toast.Dz6iiaGE.js.map → toast.Dw86T5dF.js.map} +1 -1
- package/dist/assets/{useAcceptedCookies.DCKq2Qw9.js → useAcceptedCookies.8vhwrcp8.js} +2 -2
- package/dist/assets/{useAcceptedCookies.DCKq2Qw9.js.map → useAcceptedCookies.8vhwrcp8.js.map} +1 -1
- package/dist/assets/useConnectConfig.DSamQwGk.js +2 -0
- package/dist/assets/{useConnectConfig.DnsUzXBZ.js.map → useConnectConfig.DSamQwGk.js.map} +1 -1
- package/dist/assets/useDefaultDocumentModelEditor.VXhuetiN.js +2 -0
- package/dist/assets/{useDefaultDocumentModelEditor.Cxs9BMEu.js.map → useDefaultDocumentModelEditor.VXhuetiN.js.map} +1 -1
- package/dist/assets/useDocumentDriveServer.ZRZSrNVE.js +2 -0
- package/dist/assets/{useDocumentDriveServer.ByAzntgK.js.map → useDocumentDriveServer.ZRZSrNVE.js.map} +1 -1
- package/dist/assets/{useFeatureFlags.HTSEqgkg.js → useFeatureFlags.8avcsZhG.js} +2 -2
- package/dist/assets/{useFeatureFlags.HTSEqgkg.js.map → useFeatureFlags.8avcsZhG.js.map} +1 -1
- package/dist/assets/{user.YHDZ_9fW.js → user.D7qu66vB.js} +4 -4
- package/dist/assets/{user.YHDZ_9fW.js.map → user.D7qu66vB.js.map} +1 -1
- package/dist/index.html +2 -1
- package/dist/swEnv.js +1 -0
- package/dist/vite-envs.sh +10 -1
- package/package.json +10 -10
- package/dist/assets/app.qUOoOKql.js.map +0 -1
- package/dist/assets/connect.config.BIAWWw4c.js.map +0 -1
- package/dist/assets/index.BpiSpZ8T.js +0 -3
- package/dist/assets/index.tFj_U6SH.js +0 -2
- package/dist/assets/modal.DMmzVWT5.js +0 -3
- package/dist/assets/nodefs.BOz_9Cu2.js +0 -2
- package/dist/assets/useConnectConfig.DnsUzXBZ.js +0 -2
- package/dist/assets/useDefaultDocumentModelEditor.Cxs9BMEu.js +0 -2
- package/dist/assets/useDocumentDriveServer.ByAzntgK.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var N=Object.defineProperty;var _=(r,t,e)=>t in r?N(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var d=(r,t,e)=>_(r,typeof t!="symbol"?t+"":t,e);import{e as $}from"./index.DxrAJM8l.js";import{A as s,D as C}from"./app.i8BXWBLI.js";import"react";import"react/jsx-runtime";import"react-dom";import"./useFeatureFlags.8avcsZhG.js";import"./user.D7qu66vB.js";import"./connect.config.BIqjxCXL.js";import"./browser.BkwNmV2Z.js";import"./useAcceptedCookies.8vhwrcp8.js";import"./useConnectConfig.DSamQwGk.js";import"./index.CAUjMUXb.js";import"./registerServiceWorker.CK34OHp2.js";const D=["ADD_FILE","ADD_FOLDER"],m=["COPY_NODE"],v=["UPDATE_FILE","UPDATE_NODE"],O=["MOVE_NODE"],f=["DELETE_NODE"],P=[...D,...m,...v,...O,...f];class V{constructor(t,e=$(["processor","drive-analytics"])){d(this,"analyticsStore");d(this,"logger");this.analyticsStore=t,this.logger=e}async onStrands(t){if(t.length!==0)for(const e of t){if(e.operations.length===0)continue;const S=e.operations[0],E=s.fromString(`ph/drive/${e.documentId}/${e.branch}/${e.scope}`);S.index===0&&await this.clearSource(E);const{documentId:p,branch:g,scope:h}=e,c=50;for(let a=0;a<e.operations.length;a+=c){const y=e.operations.slice(a,a+c),i=[];for(const o of y){const I=o.index,T=this.getActionType(o.type),u=P.includes(o.type)?"NODE":"DRIVE";let l=p;if(u==="NODE"){const n=o.input;l=n.id||n.targetId||n.srcFolder||p}const A={source:E,metric:"DriveOperations",start:C.fromISO(o.timestamp),value:1,dimensions:{drive:s.fromString(`drive/${p}/${g}/${h}/${I}`),operation:s.fromString(`operation/${o.type}/${o.index}`),target:s.fromString(`target/${u}/${l}`),actionType:s.fromString(`actionType/${T}/${l}`)}};for(i.push(A);i.length>=c;){const n=i.splice(0,c);await this.analyticsStore.addSeriesValues(n)}}i.length>0&&await this.analyticsStore.addSeriesValues(i)}}}async onDisconnect(){}getActionType(t){return D.includes(t)?"CREATED":m.includes(t)?"DUPLICATED":f.includes(t)?"REMOVED":O.includes(t)?"MOVED":"UPDATED"}async clearSource(t){try{await this.analyticsStore.clearSeriesBySource(t,!0)}catch(e){this.logger.error("Failed to clear source",e)}}}const j=r=>t=>[{processor:new V(r.analyticsStore),filter:{branch:["main"],documentId:["*"],scope:["*"],documentType:["powerhouse/document-drive"]}}];export{V as DriveAnalyticsProcessor,j as processorFactory};
|
|
2
|
+
//# sourceMappingURL=index.Do_wXic0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.Do_wXic0.js","sources":["../../../../packages/common/dist/drive-analytics/processor/processor.js","../../../../packages/common/dist/drive-analytics/processor/index.js"],"sourcesContent":["import { AnalyticsPath, DateTime, } from \"@powerhousedao/reactor-browser/analytics\";\nimport { childLogger } from \"document-drive\";\nconst CREATE_NODE_ACTIONS = [\"ADD_FILE\", \"ADD_FOLDER\"];\nconst DUPLICATE_NODE_ACTIONS = [\"COPY_NODE\"];\nconst UPDATE_NODE_ACTIONS = [\"UPDATE_FILE\", \"UPDATE_NODE\"];\nconst MOVE_NODE_ACTIONS = [\"MOVE_NODE\"];\nconst REMOVE_NODE_ACTIONS = [\"DELETE_NODE\"];\nconst NODE_ACTIONS = [\n ...CREATE_NODE_ACTIONS,\n ...DUPLICATE_NODE_ACTIONS,\n ...UPDATE_NODE_ACTIONS,\n ...MOVE_NODE_ACTIONS,\n ...REMOVE_NODE_ACTIONS,\n];\nexport class DriveAnalyticsProcessor {\n analyticsStore;\n logger;\n constructor(analyticsStore, logger = childLogger([\"processor\", \"drive-analytics\"])) {\n this.analyticsStore = analyticsStore;\n this.logger = logger;\n //\n }\n async onStrands(strands) {\n if (strands.length === 0) {\n return;\n }\n for (const strand of strands) {\n // skip empty strands\n if (strand.operations.length === 0) {\n continue;\n }\n const firstOp = strand.operations[0];\n const source = AnalyticsPath.fromString(`ph/drive/${strand.documentId}/${strand.branch}/${strand.scope}`);\n if (firstOp.index === 0) {\n await this.clearSource(source);\n }\n const { documentId: driveId, branch, scope } = strand;\n const CHUNK_SIZE = 50;\n for (let i = 0; i < strand.operations.length; i += CHUNK_SIZE) {\n const chunk = strand.operations.slice(i, i + CHUNK_SIZE);\n const buffer = [];\n for (const operation of chunk) {\n const revision = operation.index;\n const actionType = this.getActionType(operation.type);\n const target = NODE_ACTIONS.includes(operation.type)\n ? \"NODE\"\n : \"DRIVE\";\n let targetId = driveId;\n if (target === \"NODE\") {\n const operationInput = operation.input;\n targetId =\n operationInput.id ||\n operationInput.targetId ||\n operationInput.srcFolder ||\n driveId;\n }\n const seriesInput = {\n source,\n metric: \"DriveOperations\",\n start: DateTime.fromISO(operation.timestamp),\n value: 1,\n dimensions: {\n drive: AnalyticsPath.fromString(`drive/${driveId}/${branch}/${scope}/${revision}`),\n operation: AnalyticsPath.fromString(`operation/${operation.type}/${operation.index}`),\n target: AnalyticsPath.fromString(`target/${target}/${targetId}`),\n actionType: AnalyticsPath.fromString(`actionType/${actionType}/${targetId}`),\n },\n };\n buffer.push(seriesInput);\n while (buffer.length >= CHUNK_SIZE) {\n const batch = buffer.splice(0, CHUNK_SIZE);\n await this.analyticsStore.addSeriesValues(batch);\n }\n }\n if (buffer.length > 0) {\n await this.analyticsStore.addSeriesValues(buffer);\n }\n }\n }\n }\n async onDisconnect() { }\n getActionType(action) {\n if (CREATE_NODE_ACTIONS.includes(action)) {\n return \"CREATED\";\n }\n if (DUPLICATE_NODE_ACTIONS.includes(action)) {\n return \"DUPLICATED\";\n }\n if (REMOVE_NODE_ACTIONS.includes(action)) {\n return \"REMOVED\";\n }\n if (MOVE_NODE_ACTIONS.includes(action)) {\n return \"MOVED\";\n }\n return \"UPDATED\";\n }\n async clearSource(source) {\n try {\n await this.analyticsStore.clearSeriesBySource(source, true);\n }\n catch (e) {\n this.logger.error(\"Failed to clear source\", e);\n }\n }\n}\n//# sourceMappingURL=processor.js.map","import { DriveAnalyticsProcessor } from \"./processor.js\";\nexport const processorFactory = (module) => (driveId) => {\n return [\n {\n processor: new DriveAnalyticsProcessor(module.analyticsStore),\n filter: {\n branch: [\"main\"],\n documentId: [\"*\"],\n scope: [\"*\"],\n documentType: [\"powerhouse/document-drive\"],\n },\n },\n ];\n};\nexport * from \"./processor.js\";\n//# sourceMappingURL=index.js.map"],"names":["CREATE_NODE_ACTIONS","DUPLICATE_NODE_ACTIONS","UPDATE_NODE_ACTIONS","MOVE_NODE_ACTIONS","REMOVE_NODE_ACTIONS","NODE_ACTIONS","DriveAnalyticsProcessor","analyticsStore","logger","childLogger","__publicField","strands","strand","firstOp","source","AnalyticsPath","driveId","branch","scope","CHUNK_SIZE","i","chunk","buffer","operation","revision","actionType","target","targetId","operationInput","seriesInput","DateTime","batch","action","processorFactory","module"],"mappings":"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"}
|