@powerhousedao/reactor-api 1.6.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -5
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/router.ts +5 -5
- package/src/utils/create-schema.ts +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
## 1.
|
|
1
|
+
## 1.7.0 (2024-12-03)
|
|
2
2
|
|
|
3
|
-
###
|
|
3
|
+
### 🚀 Features
|
|
4
4
|
|
|
5
|
-
- **
|
|
5
|
+
- **design-system:** bump storybook deps ([f21d9539](https://github.com/powerhouse-inc/powerhouse/commit/f21d9539))
|
|
6
|
+
- **monorepo:** remove eslint args ([4677e343](https://github.com/powerhouse-inc/powerhouse/commit/4677e343))
|
|
7
|
+
- **monorepo:** readd vite for reactor local ([24a9e56b](https://github.com/powerhouse-inc/powerhouse/commit/24a9e56b))
|
|
8
|
+
- **monorepo:** add linting for switchboard gui ([dc56c561](https://github.com/powerhouse-inc/powerhouse/commit/dc56c561))
|
|
9
|
+
- **monorepo:** gitignore tsbuildinfo files ([d676a703](https://github.com/powerhouse-inc/powerhouse/commit/d676a703))
|
|
10
|
+
- **monorepo:** unify typescript and linting ([24b9a205](https://github.com/powerhouse-inc/powerhouse/commit/24b9a205))
|
|
6
11
|
|
|
7
|
-
###
|
|
12
|
+
### 🧱 Updated Dependencies
|
|
13
|
+
|
|
14
|
+
- Updated document-model-libs to 1.117.1
|
|
15
|
+
- Updated document-drive to 1.6.0
|
|
16
|
+
- Updated document-model to 2.8.0
|
|
17
|
+
- Updated @powerhousedao/scalars to 1.10.0
|
|
18
|
+
|
|
19
|
+
### ❤️ Thank You
|
|
8
20
|
|
|
9
|
-
-
|
|
21
|
+
- ryanwolhuter @ryanwolhuter
|
|
10
22
|
|
|
11
23
|
## 1.2.0 (2024-10-29)
|
|
12
24
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/json-stringify-deterministic@1.0.12/node_modules/json-stringify-deterministic/lib/defaults.js","../../../node_modules/.pnpm/json-stringify-deterministic@1.0.12/node_modules/json-stringify-deterministic/lib/util.js","../../../node_modules/.pnpm/json-stringify-deterministic@1.0.12/node_modules/json-stringify-deterministic/lib/index.js","../../document-drive/src/utils/run-asap.ts","../../document-drive/src/utils/index.ts","../../document-drive/src/utils/logger.ts","../../document-drive/src/utils/document-helpers.ts","../../document-drive/src/server/utils.ts","../../document-drive/src/server/listener/transmitter/internal.ts","../../document-drive/src/server/listener/transmitter/switchboard-push.ts","../src/internal-listener-manager.ts","../src/utils/create-schema.ts","../src/subgraphs/system/resolvers.ts","../src/subgraphs/system/subgraph.ts","../src/subgraphs/drive/resolvers.ts","../src/subgraphs/drive/subgraph.ts","../src/subgraphs/index.ts","../src/router.ts","../src/server.ts"],"names":["stringify","key","RunAsap","index","runAsap","runAsapAsync","resolve","uuidv4","logger","resolvers","typeDefs","documentModel","scalarsTypeDefs","actions","__dirname","dirname","fileURLToPath","readFileSync","schema_default","getSchema","express"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,gBAAA,GAAA,UAAA,CAAA;AAAA,EAAA,wHAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAA,MAAA,CAAO,OAAU,GAAA;AAAA,MACf,KAAO,EAAA,EAAA;AAAA,MACP,MAAQ,EAAA,KAAA;AAAA,MACR,QAAA,EAAU,CAAC,CAAA,EAAG,CAAM,KAAA,CAAA;AAAA,MACpB,WAAW,IAAK,CAAA;AAAA,KAClB;AAAA;AAAA,CAAA,CAAA;;;ACLA,IAAA,YAAA,GAAA,UAAA,CAAA;AAAA,EAAA,oHAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,MAAA,CAAO,OAAU,GAAA;AAAA,MACf,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,QAAQ,MAAO,CAAA,MAAA;AAAA,MACf,QAAA,EAAU,CAAK,CAAA,KAAA,OAAO,CAAM,KAAA,QAAA;AAAA,MAC5B,UAAA,EAAY,CAAK,CAAA,KAAA,OAAO,CAAM,KAAA,UAAA;AAAA,MAC9B,SAAA,EAAW,CAAK,CAAA,KAAA,OAAO,CAAM,KAAA,SAAA;AAAA,MAC7B,OAAA,EAAS,OAAK,CAAa,YAAA,MAAA;AAAA,MAC3B,MAAM,MAAO,CAAA;AAAA,KACf;AAAA;AAAA,CAAA,CAAA;;;ACVA,IAAA,WAAA,GAAA,UAAA,CAAA;AAAA,EAAA,qHAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAEA,IAAA,IAAM,QAAW,GAAA,gBAAA,EAAA;AACjB,IAAA,IAAM,aAAa,YAAkB,EAAA,CAAA,UAAA;AACrC,IAAA,IAAM,YAAY,YAAkB,EAAA,CAAA,SAAA;AACpC,IAAA,IAAM,WAAW,YAAkB,EAAA,CAAA,QAAA;AACnC,IAAA,IAAM,UAAU,YAAkB,EAAA,CAAA,OAAA;AAClC,IAAA,IAAM,UAAU,YAAkB,EAAA,CAAA,OAAA;AAClC,IAAA,IAAM,SAAS,YAAkB,EAAA,CAAA,MAAA;AACjC,IAAA,IAAM,OAAO,YAAkB,EAAA,CAAA,IAAA;AAE/B,IAAA,SAAS,UAAW,GAAK,EAAA;AACvB,MAAA,IAAI,GAAQ,KAAA,IAAA,IAAQ,GAAQ,KAAA,KAAA,CAAA,EAAkB,OAAA,GAAA;AAC9C,MAAA,IAAI,OAAQ,CAAA,GAAG,CAAG,EAAA,OAAO,IAAI,QAAS,EAAA;AACtC,MAAA,OAAO,GAAI,CAAA,MAAA,GAAS,GAAI,CAAA,MAAA,EAAW,GAAA,GAAA;AAAA;AAGrC,IAAS,SAAA,sBAAA,CAAwB,KAAK,IAAM,EAAA;AAC1C,MAAA,IAAA,GAAO,IAAQ,IAAA,MAAA,CAAO,EAAC,EAAG,QAAQ,CAAA;AAElC,MAAA,IAAI,WAAW,IAAI,CAAA,EAAU,IAAA,GAAA,EAAE,SAAS,IAAK,EAAA;AAE7C,MAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,IAAS,QAAS,CAAA,KAAA;AACrC,MAAA,MAAM,SAAS,SAAU,CAAA,IAAA,CAAK,MAAM,CAAI,GAAA,IAAA,CAAK,SAAS,QAAS,CAAA,MAAA;AAC/D,MAAM,MAAA,QAAA,GAAW,IAAK,CAAA,QAAA,IAAY,QAAS,CAAA,QAAA;AAC3C,MAAMA,MAAAA,UAAAA,GAAY,IAAK,CAAA,SAAA,IAAa,QAAS,CAAA,SAAA;AAE7C,MAAA,MAAM,OAAU,GAAA,IAAA,CAAK,OAAY,oBAAA,SAAU,CAAG,EAAA;AAC5C,QAAA,OAAO,SAAU,IAAM,EAAA;AACrB,UAAO,OAAA,SAAU,GAAG,CAAG,EAAA;AACrB,YAAA,MAAM,OAAO,EAAE,GAAA,EAAK,GAAG,KAAO,EAAA,IAAA,CAAK,CAAC,CAAE,EAAA;AACtC,YAAA,MAAM,OAAO,EAAE,GAAA,EAAK,GAAG,KAAO,EAAA,IAAA,CAAK,CAAC,CAAE,EAAA;AACtC,YAAO,OAAA,CAAA,CAAE,MAAM,IAAI,CAAA;AAAA,WACrB;AAAA,SACF;AAAA,OACF,CAAG,KAAK,OAAO,CAAA;AAGf,MAAA,IAAI,CAAC,MAAA,EAAQA,UAAAA,CAAU,GAAG,CAAA;AAE1B,MAAA,MAAM,OAAO,EAAC;AAEd,MAAA,OAAQ,SAAS,cAAA,CAAgB,MAAQ,EAAA,GAAA,EAAK,MAAM,KAAO,EAAA;AACzD,QAAM,MAAA,MAAA,GAAS,KAAS,GAAA,IAAA,GAAO,IAAI,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,IAAK,CAAA,KAAK,CAAK,GAAA,EAAA;AACnE,QAAM,MAAA,cAAA,GAAiB,QAAQ,IAAO,GAAA,GAAA;AAEtC,QAAA,IAAA,GAAO,UAAU,IAAI,CAAA;AACrB,QAAA,IAAA,GAAO,QAAS,CAAA,IAAA,CAAK,MAAQ,EAAA,GAAA,EAAK,IAAI,CAAA;AAEtC,QAAA,IAAI,SAAS,KAAW,CAAA,EAAA;AAExB,QAAI,IAAA,CAAC,SAAS,IAAI,CAAA,IAAK,SAAS,IAAM,EAAA,OAAOA,WAAU,IAAI,CAAA;AAE3D,QAAI,IAAA,OAAA,CAAQ,IAAI,CAAG,EAAA;AACjB,UAAA,MAAM,MAAM,EAAC;AACb,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,YAAM,MAAA,IAAA,GAAO,cAAe,CAAA,IAAA,EAAM,CAAG,EAAA,IAAA,CAAK,CAAC,CAAA,EAAG,KAAQ,GAAA,CAAC,CAAKA,IAAAA,UAAAA,CAAU,IAAI,CAAA;AAC1E,YAAI,GAAA,CAAA,IAAA,CAAK,MAAS,GAAA,KAAA,GAAQ,IAAI,CAAA;AAAA;AAEhC,UAAA,OAAO,GAAM,GAAA,GAAA,CAAI,IAAK,CAAA,GAAG,IAAI,MAAS,GAAA,GAAA;AAAA,SACjC,MAAA;AACL,UAAA,IAAI,MAAQ,EAAA;AACV,YAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,IAAI,CAAA,KAAM,CAAI,CAAA,EAAA;AAC7B,cAAA,OAAOA,WAAU,YAAY,CAAA;AAAA,aACxB,MAAA;AACL,cAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA;AAChB;AAGF,UAAM,MAAA,QAAA,GAAW,KAAK,IAAI,CAAA,CAAE,KAAK,OAAW,IAAA,OAAA,CAAQ,IAAI,CAAC,CAAA;AACzD,UAAA,MAAM,MAAM,EAAC;AACb,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,YAAMC,MAAAA,IAAAA,GAAM,SAAS,CAAC,CAAA;AACtB,YAAM,MAAA,KAAA,GAAQ,eAAe,IAAMA,EAAAA,IAAAA,EAAK,KAAKA,IAAG,CAAA,EAAG,QAAQ,CAAC,CAAA;AAE5D,YAAA,IAAI,CAAC,KAAO,EAAA;AAEZ,YAAA,MAAM,QAAWD,GAAAA,UAAAA,CAAUC,IAAG,CAAA,GAAI,cAAiB,GAAA,KAAA;AACnD,YAAI,GAAA,CAAA,IAAA,CAAK,MAAS,GAAA,KAAA,GAAQ,QAAQ,CAAA;AAAA;AAEpC,UAAA,IAAA,CAAK,MAAO,CAAA,IAAA,CAAK,OAAQ,CAAA,IAAI,GAAG,CAAC,CAAA;AACjC,UAAA,OAAO,GAAM,GAAA,GAAA,CAAI,IAAK,CAAA,GAAG,IAAI,MAAS,GAAA,GAAA;AAAA;AACxC,QACC,EAAE,EAAA,EAAI,KAAO,EAAA,EAAA,EAAI,KAAK,CAAC,CAAA;AAAA;AAG5B,IAAA,MAAA,CAAO,OAAU,GAAA,sBAAA;AAAA;AAAA,CAAA,CAAA;;;ACrFV,IAAU,OAAA;AAAA,CAAV,CAAUC,QAAV,KAAA;AAKE,EAAMA,QAAAA,CAAA,qBAAqB,MAAM;AACtC,IAAI,IAAA,OAAO,mBAAmB,WAAa,EAAA;AACzC,MAAO,OAAA,IAAI,MAAM,iCAAiC,CAAA;AAAA;AAGpD,IAAA,OAAO,CAAC,IAAe,KAAA;AACrB,MAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AACvC,MAAA,MAAM,SAAS,UAAW,CAAA,MAAA;AAC1B,MAAM,MAAA,EAAA,GAAK,IAAI,cAAe,EAAA;AAC9B,MAAG,EAAA,CAAA,KAAA,CAAM,YAAY,IAAI,CAAA;AACzB,MAAA,EAAA,CAAG,KAAM,CAAA,gBAAA;AAAA,QACP,SAAA;AAAA,QACA,MAAM;AACJ,UAAK,IAAA,EAAA;AACL,UAAA,EAAA,CAAG,MAAM,KAAM,EAAA;AACf,UAAA,EAAA,CAAG,MAAM,KAAM,EAAA;AAAA,SACjB;AAAA,QACA,EAAE,IAAM,EAAA,IAAA,EAAM,MAAe;AAAA,OAC/B;AACA,MAAA,EAAA,CAAG,MAAM,KAAM,EAAA;AACf,MAAO,OAAA,MAAM,WAAW,KAAM,EAAA;AAAA,KAChC;AAAA,GACC,GAAA;AAEI,EAAMA,QAAAA,CAAA,kBAAkB,MAAM;AACnC,IAAM,MAAA,KAAA;AAAA;AAAA,MAEH,OAAO,WAAW,QAAY,IAAA,MAAA;AAAA,MAE9B,OAAO,MAAW,KAAA,QAAA,IAAY,MAC9B,IAAA,OAAO,SAAS,QAAY,IAAA;AAAA,KAAA;AAC/B,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAO,OAAA,IAAI,MAAM,wBAAwB,CAAA;AAAA;AAG3C,IAAA,MAAM,IAAO,GAAA,KAAA;AACb,IAAA;AAAA;AAAA,MAEE,CAAC,IAAK,CAAA,WAAA;AAAA,MAEN,CAAC,IAAK,CAAA,gBAAA,IACL,IAAqC,CAAA;AAAA,MACtC;AACA,MAAO,OAAA,IAAI,MAAM,8BAA8B,CAAA;AAAA;AAGjD,IAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,IAAM,MAAA,KAAA,uBAAY,GAAkB,EAAA;AAEpC,IAAA,SAAS,WAAc,GAAA;AACrB,MAAA,IAAI,UAAU,gBAAkB,EAAA;AAC9B,QAAO,OAAA,CAAA;AAAA;AAET,MAAA,OAAO,EAAE,KAAA;AAAA;AAGX,IAAM,MAAA,cAAA,GAAiB,oBAAuB,GAAA,IAAA,CAAK,MAAO,EAAA;AAE1D,IAAK,IAAA,CAAA,gBAAA;AAAA,MACH,SAAA;AAAA,MACA,CAAC,CAAM,KAAA;AACL,QAAA,MAAM,KAAQ,GAAA,CAAA;AACd,QAAI,IAAA,OAAO,KAAM,CAAA,IAAA,KAAS,QAAU,EAAA;AAClC,UAAA;AAAA;AAEF,QAAI,IAAA,KAAA,CAAM,WAAW,IAAQ,IAAA,CAAC,MAAM,IAAK,CAAA,UAAA,CAAW,cAAc,CAAG,EAAA;AACnE,UAAA;AAAA;AAEF,QAAA,MAAMC,SAAQ,KAAM,CAAA,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,GAAG,CAAC,CAAA;AACxC,QAAA,IAAIA,WAAU,KAAW,CAAA,EAAA;AACvB,UAAA;AAAA;AAEF,QAAA,MAAM,IAAI,CAACA,MAAAA;AACX,QAAM,MAAA,IAAA,GAAO,KAAM,CAAA,GAAA,CAAI,CAAC,CAAA;AACxB,QAAA,IAAI,IAAM,EAAA;AACR,UAAK,IAAA,EAAA;AACL,UAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA;AAChB,OACF;AAAA,MACA;AAAA,KACF;AAEA,IAAA,OAAO,CAAC,IAAe,KAAA;AACrB,MAAA,MAAM,IAAI,WAAY,EAAA;AACtB,MAAM,KAAA,CAAA,GAAA,CAAI,GAAG,IAAI,CAAA;AACjB,MAAA,IAAA,CAAK,YAAY,cAAiB,GAAA,GAAA,GAAM,GAAG,EAAE,YAAA,EAAc,KAAK,CAAA;AAChE,MAAA,OAAO,MAAM;AACX,QAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,OAChB;AAAA,KACF;AAAA,GACC,GAAA;AAEI,EAAMD,QAAAA,CAAA,mBAAmB,MAAM;AACpC,IAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AACjC,MAAO,OAAA,IAAI,MAAM,8CAA8C,CAAA;AAAA;AAEjE,IAAI,IAAA,OAAO,iBAAiB,WAAa,EAAA;AACvC,MAAO,OAAA,IAAI,MAAM,+BAA+B,CAAA;AAAA;AAGlD,IAAA,OAAO,CAAC,IAAe,KAAA;AACrB,MAAM,MAAA,EAAA,GAAK,aAAa,IAAI,CAAA;AAC5B,MAAO,OAAA,MAAM,eAAe,EAAE,CAAA;AAAA,KAChC;AAAA,GACC,GAAA;AAEI,EAAMA,QAAAA,CAAA,gCAAuB,CAAA,MAAA;AAClC,IAAA,OAAO,CAAC,IAAe,KAAA;AACrB,MAAM,MAAA,EAAA,GAAK,UAAW,CAAA,IAAA,EAAM,CAAC,CAAA;AAC7B,MAAO,OAAA,MAAM,aAAa,EAAE,CAAA;AAAA,KAC9B;AAAA,GACC,GAAA;AAII,EAAA,SAASE,SAAkB,IAA0B,EAAA;AAE1D,IAAI,IAAA,EAAEF,QAAA,CAAA,eAAA,YAA2B,KAAQ,CAAA,EAAA;AACvC,MAAOA,OAAAA,IAAAA,QAAAA,CAAA,iBAAgB,IAAI,CAAA;AAAA,KAGpB,MAAA,IAAA,EAAEA,QAAA,CAAA,iBAAA,YAA6B,KAAQ,CAAA,EAAA;AAC9C,MAAOA,OAAAA,IAAAA,QAAAA,CAAA,mBAAkB,IAAI,CAAA;AAAA,KAGtB,MAAA,IAAA,EAAEA,QAAA,CAAA,cAAA,YAA0B,KAAQ,CAAA,EAAA;AAC3C,MAAOA,OAAAA,IAAAA,QAAAA,CAAA,gBAAe,IAAI,CAAA;AAAA,KAGvB,MAAA;AACH,MAAOA,OAAAA,IAAAA,QAAAA,CAAA,eAAc,IAAI,CAAA;AAAA;AAC3B;AAhBK,EAAAA,SAAS,OAAAE,GAAAA,QAAAA;AAmBT,EAASC,SAAAA,aAAAA,CACd,IACA,EAAA,WAAA,GAA6BD,QACjB,EAAA;AACZ,IAAA,IAAI,uBAAuB,KAAO,EAAA;AAChC,MAAM,MAAA,IAAI,MAAM,8BAAgC,EAAA;AAAA,QAC9C,KAAO,EAAA;AAAA,OACR,CAAA;AAAA;AAEH,IAAA,OAAO,IAAI,OAAA,CAAQ,CAACE,QAAAA,EAAS,MAAW,KAAA;AACtC,MAAA,WAAA,CAAY,MAAM;AAChB,QAAA,IAAA,EAAO,CAAA,IAAA,CAAKA,QAAO,CAAA,CAAE,MAAM,MAAM,CAAA;AAAA,OAClC,CAAA;AAAA,KACF,CAAA;AAAA;AAbI,EAAAJ,SAAS,YAAAG,GAAAA,aAAAA;AAAA,CA3ID,EAAA,OAAA,KAAA,OAAA,GAAA,EAAA,CAAA,CAAA;;;ACkBM,OAAQ,CAAA;AACH,OAAQ,CAAA;AA6C7B,SAAS,YAAuB,GAAA;AACrC,EAAA,OAAOE,EAAO,EAAA;AAChB;;;AC/DA,IAAM,SAAN,MAAgC;AAAA,EAC9B,OAAmB,GAAA,OAAA;AAAA,EAEnB,IAAI,OAAOC,OAAiB,EAAA;AAC1B,IAAA,IAAA,CAAK,OAAUA,GAAAA,OAAAA;AAAA;AACjB,EAEA,OAAO,IAAmB,EAAA;AAExB,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,GAAI,CAAA,GAAG,IAAI,CAAA;AAAA;AACjC,EAEA,QAAQ,IAAmB,EAAA;AAEzB,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,IAAI,CAAA;AAAA;AAClC,EAEA,QAAQ,IAAmB,EAAA;AAEzB,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,IAAI,CAAA;AAAA;AAClC,EAEA,SAAS,IAAmB,EAAA;AAE1B,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,KAAM,CAAA,GAAG,IAAI,CAAA;AAAA;AACnC,EAEA,SAAS,IAAmB,EAAA;AAE1B,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,KAAM,CAAA,GAAG,IAAI,CAAA;AAAA;AACnC,EAEA,SAAS,IAAmB,EAAA;AAE1B,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,KAAM,CAAA,GAAG,IAAI,CAAA;AAAA;AAErC,CAAA;AAEA,IAAM,cAAA,GAAiB,IAAI,MAAO,EAAA;AAE3B,IAAM,MAAkB,GAAA,cAAA;ACxB3B,KAAM,CAAA;;;ACjBH,SAAS,oBAAA,CACd,OACA,EAAA,OAAA,EACA,UACiB,EAAA;AACjB,EAAA,OAAO,OAAQ,CAAA,MAAA,CAAwB,CAAC,GAAA,EAAK,CAAM,KAAA;AACjD,IAAA,IAAI,EAAE,CAAE,CAAA,OAAA,KAAY,OAAW,IAAA,CAAA,CAAE,eAAe,UAAa,CAAA,EAAA;AAC3D,MAAO,OAAA,GAAA;AAAA;AAET,IAAI,GAAA,CAAA,CAAA,CAAE,KAAK,CAAA,GAAI,CAAE,CAAA,UAAA,CAAW,EAAE,UAAW,CAAA,MAAA,GAAS,CAAC,CAAA,EAAG,KAAS,IAAA,CAAA,CAAA;AAC/D,IAAO,OAAA,GAAA;AAAA,GACT,EAAG,EAAE,CAAA;AACP;;;ACkBO,IAAM,sBAAN,MAAkD;AAAA,EAC/C,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EAER,WAAA,CAAY,UAAoB,KAAiC,EAAA;AAC/D,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAChB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA;AACf,EAEA,MAAM,SAAS,OAAsD,EAAA;AACnE,IAAI,IAAA,CAAC,KAAK,QAAU,EAAA;AAClB,MAAA,OAAO,EAAC;AAAA;AAGV,IAAM,MAAA,kBAAA,uBAAyB,GAAsB,EAAA;AACrD,IAAA,MAAM,UAAuC,EAAC;AAC9C,IAAA,KAAA,MAAW,UAAU,OAAS,EAAA;AAC5B,MAAA,IAAI,WAAW,kBAAmB,CAAA,GAAA;AAAA,QAChC,CAAG,EAAA,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAO,UAAU,CAAA;AAAA,OACxC;AACA,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAA,MAAM,SAAY,GAAA,oBAAA;AAAA,UAChB,OAAA;AAAA,UACA,MAAO,CAAA,OAAA;AAAA,UACP,MAAO,CAAA;AAAA,SACT;AACA,QAAW,QAAA,GAAA,OAAO,OAAO,UACrB,GAAA,IAAA,CAAK,MAAM,WAAY,CAAA,MAAA,CAAO,OAAS,EAAA,MAAA,CAAO,UAAY,EAAA;AAAA,UACxD;AAAA,SACD,IACD,IAAK,CAAA,KAAA,CAAM,SAAS,MAAO,CAAA,OAAA,EAAS,EAAE,SAAA,EAAW,CAAA,CAAA;AACrD,QAAmB,kBAAA,CAAA,GAAA;AAAA,UACjB,CAAG,EAAA,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAO,UAAU,CAAA,CAAA;AAAA,UACtC;AAAA,SACF;AAAA;AAEF,MAAQ,OAAA,CAAA,IAAA,CAAK,EAAE,GAAG,MAAQ,EAAA,KAAA,EAAO,SAAS,KAAM,CAAA,MAAA,CAAO,KAAK,CAAA,EAAG,CAAA;AAAA;AAEjE,IAAI,IAAA;AACF,MAAM,MAAA,IAAA,CAAK,QAAS,CAAA,QAAA,CAAS,OAAO,CAAA;AACpC,MAAA,OAAO,QAAQ,GAAI,CAAA,CAAC,EAAE,UAAY,EAAA,GAAG,GAAS,MAAA;AAAA,QAC5C,GAAG,CAAA;AAAA,QACH,MAAQ,EAAA,SAAA;AAAA,QACR,UAAU,UAAW,CAAA,UAAA,CAAW,MAAS,GAAA,CAAC,GAAG,KAAS,IAAA,CAAA;AAAA,OACtD,CAAA,CAAA;AAAA,aACK,KAAO,EAAA;AACd,MAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAElB,MAAA,OAAO,QAAQ,GAAI,CAAA,CAAC,EAAE,UAAY,EAAA,GAAG,GAAS,MAAA;AAAA,QAC5C,GAAG,CAAA;AAAA,QACH,MAAQ,EAAA,OAAA;AAAA,QACR,QAAW,EAAA,CAAA,UAAA,CAAW,CAAC,CAAA,EAAG,SAAS,CAAK,IAAA;AAAA,OACxC,CAAA,CAAA;AAAA;AACJ;AACF,EAEA,YAAY,QAAqB,EAAA;AAC/B,IAAA,IAAA,CAAK,QAAW,GAAA,QAAA;AAAA;AAClB,EAEA,MAAM,UAA4B,GAAA;AAChC,IAAM,MAAA,IAAA,CAAK,UAAU,UAAW,EAAA;AAAA;AAEpC,CAAA;;;ACjGsB,OAAA,CAAA,WAAA,EAAA;;;ACcf,IAAM,0BAAN,MAA8B;AAAA,EAC3B,WAAA;AAAA,EACA,UAAoC,EAAC;AAAA,EAE7C,YAAY,WAAmC,EAAA;AAC7C,IAAA,IAAA,CAAK,WAAc,GAAA,WAAA;AACnB,IAAA,WAAA,CAAY,GAAG,YAAc,EAAA,IAAA,CAAK,aAAc,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA;AAC5D,EAEA,MAAM,cAAc,KAA8B,EAAA;AAChD,IAAA,MAAM,OAAQ,CAAA,GAAA;AAAA,MACZ,KAAK,OAAQ,CAAA,GAAA;AAAA,QAAI,CAAC,MAChB,KAAA,IAAA,CAAK,WAAY,CAAA,mBAAA;AAAA,UACf,KAAA,CAAM,MAAM,MAAO,CAAA,EAAA;AAAA,UACnB;AAAA,YACE,QAAU,EAAA,CAAC,OAAY,KAAA,MAAA,CAAO,SAAS,OAAO,CAAA;AAAA,YAC9C,YAAY,YAAY;AACtB,cAAA,OAAO,QAAQ,OAAQ,EAAA;AAAA;AACzB,WACF;AAAA,UACA,EAAE,GAAG,MAAO,CAAA,OAAA,EAAS,OAAO,MAAO,CAAA,OAAA,CAAQ,SAAS,EAAG;AAAA;AACzD;AACF,KACF;AAAA;AACF,EAEA,MAAM,IAAO,GAAA;AACX,IAAA,MAAM,MAAS,GAAA,MAAM,IAAK,CAAA,WAAA,CAAY,SAAU,EAAA;AAEhD,IAAA,KAAA,MAAW,EAAE,OAAA,EAAS,QAAS,EAAA,IAAK,KAAK,OAAS,EAAA;AAChD,MAAI,IAAA,CAAC,OAAW,IAAA,CAAC,QAAU,EAAA;AACzB,QAAA;AAAA;AAGF,MAAA,KAAA,MAAW,WAAW,MAAQ,EAAA;AAC5B,QAAI,IAAA;AACF,UAAM,MAAA,EAAE,YAAe,GAAA,OAAA;AACvB,UAAA,MAAM,KAAQ,GAAA,MAAM,IAAK,CAAA,WAAA,CAAY,SAAS,OAAO,CAAA;AACrD,UAAA,MAAM,gBACJ,GAAA,KAAA,CAAM,KAAM,CAAA,KAAA,CAAM,SAAU,CAAA,MAAA;AAAA,YAC1B,CAAC,CAAM,KAAA,CAAA,CAAE,UAAe,KAAA;AAAA,YACxB,MAAS,GAAA,CAAA;AACb,UAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,YAAA,MAAM,KAAK,WAAY,CAAA,mBAAA;AAAA,cACrB,OAAA;AAAA,cACA;AAAA,gBACE,QAAU,EAAA,OAAO,OAAY,KAAA,QAAA,CAAS,OAAO,CAAA;AAAA,gBAC7C,UAAA,EAAY,YAAY,OAAA,CAAQ,OAAQ;AAAA,eAC1C;AAAA,cACA;AAAA,gBACE,KAAO,EAAA,KAAA;AAAA,gBACP,QAAQ,OAAQ,CAAA,MAAA;AAAA,gBAChB,OAAO,OAAQ,CAAA,KAAA;AAAA,gBACf;AAAA;AACF,aACF;AAEA,YAAA;AAAA;AAGF,UAAM,MAAA,WAAA,GAAc,MAAM,IAAA,CAAK,WAAY,CAAA,cAAA;AAAA,YACzC,OAAA;AAAA,YACA;AAAA,WACF;AACA,UAAA,IAAI,uBAAuB,mBAAqB,EAAA;AAC9C,YAAA,WAAA,CAAY,WAAY,CAAA;AAAA,cACtB,QAAA,EAAU,OAAO,OAAyC,KAAA;AACxD,gBAAA,MAAM,SAAS,OAAO,CAAA;AACtB,gBAAA,OAAO,QAAQ,OAAQ,EAAA;AAAA,eACzB;AAAA,cACA,YAAY,MAAM;AAChB,gBAAA,OAAA,CAAQ,GAAI,CAAA,CAAA,uBAAA,EAA0B,OAAQ,CAAA,UAAU,CAAE,CAAA,CAAA;AAC1D,gBAAA,OAAO,QAAQ,OAAQ,EAAA;AAAA;AACzB,aACD,CAAA;AAAA;AACH,iBACO,CAAG,EAAA;AACV,UAAQ,OAAA,CAAA,KAAA;AAAA,YACN,CAAqC,kCAAA,EAAA,OAAA,CAAQ,UAAU,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA;AAAA,YAC5E;AAAA,WACF;AAAA;AACF;AACF;AACF;AACF,EAEA,MAAM,yBAAyB,MAAgC,EAAA;AAC7D,IAAI,IAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,KAAS,MAAO,CAAA,IAAI,CAAG,EAAA;AACpD,MAAA;AAAA;AAEF,IAAK,IAAA,CAAA,OAAA,CAAQ,KAAK,MAAM,CAAA;AACxB,IAAA,MAAM,KAAK,IAAK,EAAA;AAAA;AAEpB,CAAA;ACrGO,IAAM,YAAe,GAAA,CAC1B,mBACAC,EAAAA,UAAAA,EACAC,cAEA,mBAAoB,CAAA;AAAA,EAClB;AAAA,IACE,QAAA,EAAU,wBAAyB,CAAA,mBAAA,EAAqBA,SAAQ,CAAA;AAAA,IAChE,SAAAD,EAAAA;AAAA;AAEJ,CAAC;AAEU,IAAA,wBAAA,GAA2B,CACtC,mBAAA,EACAC,SACG,KAAA;AACH,EAAM,MAAA,cAAA,GAAiB,oBAAoB,iBAAkB,EAAA;AAC7D,EAAA,IAAI,QAAW,GAAA,EAAA;AACf,EAAA,cAAA,CAAe,OAAQ,CAAA,CAAC,EAAE,aAAA,EAAAC,gBAAoB,KAAA;AAC5C,IAAY,QAAA,IAAA;AAAA,UAAA,EACJA,eAAc,cACb,CAAA,GAAA;AAAA,MAAI,CAAC,aAAA,KACJ,aAAc,CAAA,KAAA,CAAM,OAAO,MACxB,CAAA,UAAA,CAAW,WAAa,EAAA,CAAA,CAAA,EAAIA,cAAc,CAAA,IAAI,CAAU,QAAA,CAAA,CAAA,CACxD,WAAW,CAAa,SAAA,CAAA,EAAA,CAAA,EAAA,EAAKA,cAAc,CAAA,IAAI,CAAS,OAAA,CAAA,CAAA,CACxD,UAAW,CAAA,CAAA,WAAA,CAAA,EAAe,IAAIA,cAAc,CAAA,IAAI,CAAY,UAAA,CAAA,CAAA,CAC5D,WAAW,iBAAmB,EAAA,EAAE,CAChC,CAAA,UAAA,CAAW,2BAA2B,EAAE;AAAA,KAC7C,CACC,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA;AAAA,UAAA,EAEXA,eAAc,cACb,CAAA,GAAA;AAAA,MAAI,CAAC,kBACJ,aAAc,CAAA,KAAA,CAAM,MAAM,MACvB,CAAA,UAAA,CAAW,aAAa,CAAIA,CAAAA,EAAAA,cAAAA,CAAc,IAAI,CAAU,QAAA,CAAA,CAAA,CACxD,WAAW,CAAa,SAAA,CAAA,EAAA,CAAA,EAAA,EAAKA,eAAc,IAAI,CAAA,OAAA,CAAS,EACxD,UAAW,CAAA,CAAA,WAAA,CAAA,EAAe,IAAIA,cAAc,CAAA,IAAI,YAAY,CAC5D,CAAA,UAAA,CAAW,mBAAmB,EAAE,CAAA,CAChC,WAAW,yBAA2B,EAAA,EAAE,EACxC,UAAW,CAAA,gCAAA,EAAkC,EAAE,CAC/C,CAAA,UAAA,CAAW,kCAAkC,EAAE,CAAA,CAC/C,UAAW,CAAA,+BAAA,EAAiC,EAAE;AAAA,KACnD,CACC,IAAK,CAAA,IAAI,CAAC,CAAA;AAAA;AAAA,eAAA,EAENA,eAAc,IAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAOnBA,eAAc,IAAS,KAAA,eAAA,GAAkB,UAAUA,cAAc,CAAA,IAAI,WAAW,EAAE;AAAA;AAAA,CAAA;AAAA,GAE/F,CAAA;AAGD,EAAA,MAAM,MAAS,GAAA;AAAA,MACT,EAAAC,UAAA,CAAgB,IAAK,CAAA,IAAI,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,EAU1B,QAAQ;AAAA;AAAA,MAAA,EAERF,SAAQ;AAAA,MAAA,CAAA;AAGd,EAAA,OAAO,KAAM,CAAA,MAAA,CAAO,UAAW,CAAA,GAAA,EAAK,EAAE,CAAC,CAAA;AACzC;;;AC7EO,IAAM,SAAY,GAAA;AAAA,EACvB,KAAO,EAAA;AAAA,IACL,MAAQ,EAAA,OAAO,MAAiB,EAAA,IAAA,EAAe,GAAiB,KAAA;AAC9D,MAAA,MAAM,MAAS,GAAA,MAAM,GAAI,CAAA,WAAA,CAAY,SAAU,EAAA;AAC/C,MAAO,OAAA,MAAA;AAAA;AACT,GACF;AAAA,EACA,QAAU,EAAA;AAAA,IACR,QAAU,EAAA,OAAO,MAAiB,EAAA,IAAA,EAAkB,GAAiB,KAAA;AACnE,MAAI,IAAA;AACF,QAAA,MAAM,KAAQ,GAAA,MAAM,GAAI,CAAA,WAAA,CAAY,SAAS,IAAI,CAAA;AACjD,QAAA,OAAO,MAAM,KAAM,CAAA,MAAA;AAAA,eACZ,CAAG,EAAA;AACV,QAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AACf,QAAM,MAAA,IAAI,MAAM,CAAW,CAAA;AAAA;AAC7B;AACF;AAEJ,CAAA;;;;;;ACZA,IAAM,YACJ,MAAY,CAAA,IAAA,CAAA,OAAA,IAAW,QAAQ,aAAc,CAAA,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAE/D,IAAM,WAAW,YAAa,CAAA,OAAA,CAAQ,SAAW,EAAA,cAAU,GAAG,MAAM,CAAA;AAE7D,IAAM,YAAY,CAAC,WAAA,KACxB,YAAa,CAAA,WAAA,EAAa,WAAiC,QAAQ,CAAA;ACK9D,IAAMD,UAAY,GAAA;AAAA,EACvB,KAAO,EAAA;AAAA,IACL,KAAO,EAAA,OAAO,CAAY,EAAA,IAAA,EAAe,GAAiB,KAAA;AACxD,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACxD,MAAA,MAAM,QAAQ,MAAM,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,IAAI,OAAO,CAAA;AACxD,MAAA,OAAO,MAAM,KAAM,CAAA,MAAA;AAAA,KACrB;AAAA,IACA,SAAW,EAAA,OAAO,CAAY,EAAA,IAAA,EAAe,GAAiB,KAAA;AAC5D,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACxD,MAAA,MAAM,YAAY,MAAM,GAAA,CAAI,WAAY,CAAA,YAAA,CAAa,IAAI,OAAO,CAAA;AAChE,MAAO,OAAA,SAAA;AAAA,KACT;AAAA,IACA,UAAU,OAAO,CAAA,EAAY,EAAE,EAAA,IAAsB,GAAiB,KAAA;AACpE,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACxD,MAAA,MAAM,WAAW,MAAM,GAAA,CAAI,YAAY,WAAY,CAAA,GAAA,CAAI,SAAS,EAAE,CAAA;AAElE,MAAM,MAAA,GAAA,GAAM,GAAI,CAAA,WAAA,CAAY,iBAAkB,EAAA;AAC9C,MAAA,MAAM,KAAK,GAAI,CAAA,IAAA;AAAA,QACb,CAAC,EAAE,aAAA,EAAAE,gBACDA,KAAAA,cAAAA,CAAc,OAAO,QAAS,CAAA;AAAA,OAClC;AACA,MAAM,MAAA,WAAA,GAAc,SAAS,KAAM,CAAA,MAAA;AACnC,MAAA,IAAI,CAAC,WAAA,EAAmB,MAAA,IAAI,MAAM,oBAAoB,CAAA;AACtD,MAAA,MAAM,QAAW,GAAA;AAAA,QACf,GAAG,QAAA;AAAA,QACH,EAAA;AAAA,QACA,QAAA,EAAU,SAAS,QAAS,CAAA,MAAA;AAAA,QAC5B,KAAA,EAAO,SAAS,KAAM,CAAA,MAAA;AAAA,QACtB,YAAY,QAAS,CAAA,UAAA,CAAW,MAAO,CAAA,GAAA,CAAI,CAAC,EAAmB,MAAA;AAAA,UAC7D,GAAG,EAAA;AAAA,UACH,SAAA,EACE,OAAO,EAAA,CAAG,KAAU,KAAA,QAAA,GAAW,GAAG,KAAQ,GAAA,IAAA,CAAK,SAAU,CAAA,EAAA,CAAG,KAAK;AAAA,SACnE,CAAA,CAAA;AAAA,QACF,YAAA,EAAc,QAAS,CAAA,YAAA,CAAa,KAAM,CAAA,MAAA;AAAA,QAC1C,UAAA,EAAY,IAAI,aAAc,CAAA;AAAA,OAChC;AACA,MAAO,OAAA,QAAA;AAAA,KACT;AAAA,IACA,MAAQ,EAAA,OAAO,EAAE,IAAA,EAAM,EAAG,EAAA;AAAA,GAC5B;AAAA,EACA,QAAU,EAAA;AAAA,IACR,+BAA+B,OAC7B,CAAA,EACA,EAAE,MAAA,IACF,GACG,KAAA;AACH,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACxD,MAAA,MAAM,OAAO,YAAa,EAAA;AAC1B,MAAA,MAAM,QAAqB,GAAA;AAAA,QACzB,KAAO,EAAA,KAAA;AAAA,QACP,QAAU,EAAA;AAAA,UACR,IAAM,EAAA,EAAA;AAAA,UACN,IAAM,EAAA,eAAA;AAAA,UACN,eAAiB,EAAA;AAAA,SACnB;AAAA,QACA,MAAQ,EAAA;AAAA,UACN,MAAA,EAAQ,MAAO,CAAA,MAAA,IAAU,EAAC;AAAA,UAC1B,UAAA,EAAY,MAAO,CAAA,UAAA,IAAc,EAAC;AAAA,UAClC,YAAA,EAAc,MAAO,CAAA,YAAA,IAAgB,EAAC;AAAA,UACtC,KAAA,EAAO,MAAO,CAAA,KAAA,IAAS;AAAC,SAC1B;AAAA,QACA,KAAA,EAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,QAC7B,UAAY,EAAA,IAAA;AAAA,QACZ,MAAQ,EAAA;AAAA,OACV;AAEA,MAAM,MAAA,MAAA,GAAS,MAAM,GAAA,CAAI,WAAY,CAAA,gBAAA;AAAA,QACnC,GAAI,CAAA,OAAA;AAAA,QACJE,OAAQ,CAAA,WAAA,CAAY,EAAE,QAAA,EAAU;AAAA,OAClC;AAEA,MAAA,IAAI,MAAO,CAAA,MAAA,KAAW,SAAa,IAAA,MAAA,CAAO,KAAO,EAAA;AAC/C,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,iCAAA,EAAoC,MAAO,CAAA,KAAA,CAAM,OAAO,CAAA;AAAA,SAC1D;AAAA;AAGF,MAAO,OAAA,QAAA;AAAA,KACT;AAAA,IACA,aAAa,OACX,CAAA,EACA,EAAE,OAAA,IACF,GACG,KAAA;AACH,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACxD,MAAM,MAAA,iBAAA,GAAwC,MAAM,OAAQ,CAAA,GAAA;AAAA,QAC1D,OAAA,CAAQ,GAAI,CAAA,OAAO,CAAM,KAAA;AACvB,UAAA,MAAM,UACJ,GAAA,CAAA,CAAE,UAAW,CAAA,GAAA,CAAI,CAAC,CAAO,MAAA;AAAA,YACvB,GAAG,CAAA;AAAA,YACH,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,CAAA,CAAE,KAAK,CAAA;AAAA,YACzB,IAAA,EAAM,EAAE,IAAQ,IAAA,CAAA;AAAA,YAChB,OAAO,CAAE,CAAA,KAAA;AAAA,YACT,MAAQ,EAAA;AAAA,WACV,CAAE,KAAK,EAAC;AAEV,UAAA,MAAM,SAAS,OAAO,CAAA,CAAE,UAAe,KAAA,KAAA,CAAA,GACnC,IAAI,WAAY,CAAA,eAAA;AAAA,YACd,CAAE,CAAA,OAAA;AAAA,YACF,CAAE,CAAA,UAAA;AAAA,YACF;AAAA,WACF,GACA,IAAI,WAAY,CAAA,oBAAA;AAAA,YACd,CAAE,CAAA,OAAA;AAAA,YACF;AAAA,WACF,CAAA;AAEJ,UAAA,MAAM,kBAAkB,MAAO,CAAA,QAAA,EAAU,WAAW,CAAE,CAAA,KAAK,KAAK,EAAC;AACjE,UAAI,IAAA,eAAA,CAAgB,WAAW,CAAG,EAAA;AAChC,YAAO,OAAA;AAAA,cACL,QAAU,EAAA,CAAA,CAAA;AAAA,cACV,QAAQ,CAAE,CAAA,MAAA;AAAA,cACV,UAAA,EAAY,EAAE,UAAc,IAAA,EAAA;AAAA,cAC5B,SAAS,CAAE,CAAA,OAAA;AAAA,cACX,OAAO,CAAE,CAAA,KAAA;AAAA,cACT,QAAQ,MAAO,CAAA;AAAA,aACjB;AAAA;AAGF,UAAA,MAAM,WAAW,eAAgB,CAAA,KAAA,EAAQ,CAAA,GAAA,IAAO,KAAS,IAAA,CAAA,CAAA;AACzD,UAAO,OAAA;AAAA,YACL,QAAA;AAAA,YACA,QAAQ,CAAE,CAAA,MAAA;AAAA,YACV,UAAA,EAAY,EAAE,UAAc,IAAA,EAAA;AAAA,YAC5B,SAAS,CAAE,CAAA,OAAA;AAAA,YACX,OAAO,CAAE,CAAA,KAAA;AAAA,YACT,QAAQ,MAAO,CAAA,MAAA;AAAA,YACf,KAAA,EAAO,MAAO,CAAA,KAAA,EAAO,OAAW,IAAA,KAAA;AAAA,WAClC;AAAA,SACD;AAAA,OACH;AAEA,MAAO,OAAA,iBAAA;AAAA,KACT;AAAA,IACA,WAAA,EAAa,OACX,CACA,EAAA;AAAA,MACE,UAAA;AAAA,MACA;AAAA,OAEF,GACG,KAAA;AACH,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,SAAA,EAAkB,OAAA,KAAA;AACtC,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACxD,MAAM,MAAA,YAAA,GAAe,SAClB,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,IAAI,CAAA,CACxB,GAAI,CAAA,CAAC,CAAO,MAAA;AAAA,QACX,SAAS,CAAE,CAAA,OAAA;AAAA,QACX,YAAY,CAAE,CAAA,UAAA;AAAA,QACd,OAAO,CAAE,CAAA,KAAA;AAAA,QACT,QAAQ,CAAE,CAAA,MAAA;AAAA,QACV,UAAU,CAAE,CAAA,QAAA;AAAA,QACZ,QAAQ,CAAE,CAAA;AAAA,OACV,CAAA,CAAA;AAEJ,MAAM,MAAA,WAAA,GAAe,MAAM,GAAA,CAAI,WAAY,CAAA,cAAA;AAAA,QACzC,GAAI,CAAA,OAAA;AAAA,QACJ;AAAA,OACF;AACA,MAAM,MAAA,MAAA,GAAS,MAAM,WAAY,CAAA,kBAAA;AAAA,QAC/B,IAAI,OAAW,IAAA,GAAA;AAAA,QACf,UAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAO,OAAA,MAAA;AAAA;AACT,GACF;AAAA,EACA,QAAQ,EAAC;AAAA,EACT,IAAM,EAAA;AAAA,IACJ,SAAS,OACP,CAAA,EACA,EAAE,UAAY,EAAA,KAAA,IACd,GACG,KAAA;AACH,MAAA,IAAI,CAAC,GAAI,CAAA,OAAA,EAAe,MAAA,IAAI,MAAM,sBAAsB,CAAA;AACxD,MAAM,MAAA,QAAA,GAAY,MAAM,GAAA,CAAI,WAAY,CAAA,cAAA;AAAA,QACtC,GAAI,CAAA,OAAA;AAAA,QACJ;AAAA,OACF;AACA,MAAA,MAAM,UAAU,MAAM,QAAA,CAAS,UAAW,CAAA,EAAE,OAAO,CAAA;AACnD,MAAO,OAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,CAAO,MAAA;AAAA,QACzB,SAAS,CAAE,CAAA,OAAA;AAAA,QACX,YAAY,CAAE,CAAA,UAAA;AAAA,QACd,OAAO,CAAE,CAAA,KAAA;AAAA,QACT,QAAQ,CAAE,CAAA,MAAA;AAAA,QACV,UAAY,EAAA,CAAA,CAAE,UAAW,CAAA,GAAA,CAAI,CAAC,CAAO,MAAA;AAAA,UACnC,OAAO,CAAE,CAAA,KAAA;AAAA,UACT,MAAM,CAAE,CAAA,IAAA;AAAA,UACR,MAAM,CAAE,CAAA,IAAA;AAAA,UACR,KAAO,EAAA,IAAA,CAAK,SAAU,CAAA,CAAA,CAAE,KAAK,CAAA;AAAA,UAC7B,MAAM,CAAE,CAAA,IAAA;AAAA,UACR,WAAW,CAAE,CAAA,SAAA;AAAA,UACb,MAAM,CAAE,CAAA,IAAA;AAAA,UACR,SAAS,CAAE,CAAA,OAAA;AAAA,UACX,IAAI,CAAE,CAAA;AAAA,SACN,CAAA;AAAA,OACF,CAAA,CAAA;AAAA;AACJ;AAEJ,CAAA;;;;;;ACnNA,IAAMC,aACJ,MAAY,CAAA,IAAA,CAAA,OAAA,IAAWC,UAAQC,eAAc,CAAA,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AAE/D,IAAMN,YAAWO,cAAaX,CAAAA,SAAAA,CAAQQ,UAAWI,EAAAA,eAAU,GAAG,MAAM,CAAA;AAE7D,IAAMC,aAAY,CAAC,WAAA,KACxB,YAAa,CAAA,WAAA,EAAaV,YAAiCC,SAAQ,CAAA;;;ACV9D,IAAM,iBAAoB,GAAA;AAAA,EAC/B;AAAA,IACE,IAAM,EAAA,QAAA;AAAA,IACN;AAAA,GACF;AAAA,EACA;AAAA,IACE,IAAM,EAAA,UAAA;AAAA,IACN,SAAWS,EAAAA;AAAA;AAEf,CAAA;;;ACDO,IAAI,gBAAyB,MAAO;AAE3C,IAAM,sBAAA,GAAyB,CAAC,YAC9B,KAAA,iBAAA,CAAkB,KAAK,CAAC,EAAA,KAAO,EAAG,CAAA,IAAA,KAAS,YAAY,CAAA;AAEzD,IAAI,eAAA;AAES,IAAA,kBAAA,GAAqB,OAAO,WAAsC,KAAA;AAC7E,EAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,IAAkB,eAAA,GAAA,IAAI,wBAAwB,WAAW,CAAA;AACzD,IAAA,MAAM,gBAAgB,IAAK,EAAA;AAAA;AAE7B,EAAO,OAAA,eAAA;AACT;AAEa,IAAA,YAAA,GAAe,OAAO,WAAsC,KAAA;AACvE,EAAA,MAAM,YAAY,MAAO,EAAA;AACzB,EAAU,SAAA,CAAA,GAAA,CAAI,MAAM,CAAA;AACpB,EAAU,SAAA,CAAA,GAAA,CAAI,UAAW,CAAA,IAAA,EAAM,CAAA;AAE/B,EAAA,KAAA,MAAW,YAAY,iBAAmB,EAAA;AACxC,IAAM,MAAA,cAAA,GAAiB,sBAAuB,CAAA,QAAA,CAAS,IAAI,CAAA;AAC3D,IAAA,IAAI,CAAC,cAAgB,EAAA;AAGrB,IAAM,MAAA,MAAA,GAAS,cAAe,CAAA,SAAA,CAAU,WAAW,CAAA;AAGnD,IAAM,MAAA,MAAA,GAAS,IAAI,YAAa,CAAA;AAAA,MAC9B,MAAA;AAAA,MACA,aAAe,EAAA,IAAA;AAAA,MACf,OAAA,EAAS,CAAC,qCAAA,EAAuC;AAAA,KAClD,CAAA;AAGD,IAAA,MAAM,OAAO,KAAM,EAAA;AAGnB,IAAM,MAAA,IAAA,GAAO,CAAI,CAAA,EAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AACpC,IAAU,SAAA,CAAA,GAAA;AAAA,MACR,IAAA;AAAA;AAAA,MAEA,kBAAkB,MAAQ,EAAA;AAAA,QACxB,SAAS,CAAC,EAAE,GAAI,EAAA,KACd,QAAQ,OAAQ,CAAA;AAAA,UACd,SAAS,GAAI,CAAA,OAAA;AAAA,UACb,OAAA,EAAS,GAAI,CAAA,MAAA,CAAO,KAAS,IAAA,KAAA,CAAA;AAAA,UAC7B,WAAA;AAAA,UACA,GAAG,0BAA2B;AAAA,SAC/B;AAAA,OACJ;AAAA,KACH;AACA,IAAA,OAAA,CAAQ,IAAI,CAAe,YAAA,EAAA,cAAA,CAAe,IAAI,CAAA,cAAA,EAAiB,IAAI,CAAE,CAAA,CAAA;AAAA;AAGvE,EAAkB,eAAA,GAAA,MAAM,mBAAmB,WAAW,CAAA;AACtD,EAAgB,aAAA,GAAA,SAAA;AAChB,EAAA,OAAA,CAAQ,IAAI,wBAAwB,CAAA;AACtC;AAEA,IAAI,cAAA;AACG,IAAM,iBAAoB,GAAA,OAC/B,IACA,EAAA,GAAA,EACA,WACG,KAAA;AACH,EAAiB,cAAA,GAAA,WAAA;AACjB,EAAM,MAAA,MAAA,GAAS,YAAY,iBAAkB,EAAA;AAC7C,EAAA,MAAM,aAAa,MAAO,CAAA,IAAA;AAAA,IACxB,CAAC,EAAA,KAAO,EAAG,CAAA,aAAA,CAAc,IAAS,KAAA;AAAA,GACpC;AAEA,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAM,MAAA,IAAI,MAAM,8BAA8B,CAAA;AAAA;AAGhD,EAAA,MAAM,aAAa,WAAW,CAAA;AAE9B,EAAY,WAAA,CAAA,EAAA,CAAG,kBAAkB,MAAM;AACrC,IAAa,YAAA,CAAA,WAAW,EAAE,KAAM,CAAA,CAAC,UAAmB,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,GACzE,CAAA;AAED,EAAI,GAAA,CAAA,GAAA,CAAI,IAAM,EAAA,CAAC,GAAK,EAAA,GAAA,EAAK,SAAS,aAAc,CAAA,GAAA,EAAK,GAAK,EAAA,IAAI,CAAC,CAAA;AACjE;AAEa,IAAA,WAAA,GAAc,OACzB,QACG,KAAA;AACH,EAAA,iBAAA,CAAkB,QAAQ,QAAQ,CAAA;AAClC,EAAA,MAAM,aAAa,cAAc,CAAA;AACnC;AAEa,IAAA,wBAAA,GAA2B,OACtC,MACG,KAAA;AACH,EAAA,IAAI,CAAC,eAAiB,EAAA;AACpB,IAAM,MAAA,IAAI,MAAM,kCAAkC,CAAA;AAAA;AAEpD,EAAM,MAAA,eAAA,CAAgB,yBAAyB,MAAM,CAAA;AACvD;AAEA,IAAI,gBAAgB,EAAC;AACd,IAAM,6BAA6B,MAAM;AAC9C,EAAO,OAAA,aAAA;AACT;AAEa,IAAA,0BAAA,GAA6B,CAAC,MAAgC,KAAA;AACzE,EAAA,aAAA,GAAgB,EAAE,GAAG,aAAe,EAAA,GAAG,MAAO,EAAA;AAChD;;;ACjHA,IAAM,YAAe,GAAA,GAAA;AAErB,eAAsB,QAAA,CACpB,SACA,OACA,EAAA;AACA,EAAM,MAAA,IAAA,GAAO,QAAQ,IAAQ,IAAA,YAAA;AAC7B,EAAM,MAAA,GAAA,GAAM,OAAQ,CAAA,OAAA,IAAWC,QAAQ,EAAA;AAEvC,EAAM,MAAA,iBAAA,CAAkB,GAAK,EAAA,GAAA,EAAK,OAAO,CAAA;AAEzC,EAAA,GAAA,CAAI,OAAO,IAAI,CAAA;AAEf,EAAO,OAAA,GAAA;AACT","file":"index.js","sourcesContent":["module.exports = {\n space: '',\n cycles: false,\n replacer: (k, v) => v,\n stringify: JSON.stringify\n}\n","'use strict'\n\nmodule.exports = {\n isArray: Array.isArray,\n assign: Object.assign,\n isObject: v => typeof v === 'object',\n isFunction: v => typeof v === 'function',\n isBoolean: v => typeof v === 'boolean',\n isRegex: v => v instanceof RegExp,\n keys: Object.keys\n}\n","'use strict'\n\nconst DEFAULTS = require('./defaults')\nconst isFunction = require('./util').isFunction\nconst isBoolean = require('./util').isBoolean\nconst isObject = require('./util').isObject\nconst isArray = require('./util').isArray\nconst isRegex = require('./util').isRegex\nconst assign = require('./util').assign\nconst keys = require('./util').keys\n\nfunction serialize (obj) {\n if (obj === null || obj === undefined) return obj\n if (isRegex(obj)) return obj.toString()\n return obj.toJSON ? obj.toJSON() : obj\n}\n\nfunction stringifyDeterministic (obj, opts) {\n opts = opts || assign({}, DEFAULTS)\n\n if (isFunction(opts)) opts = { compare: opts }\n\n const space = opts.space || DEFAULTS.space\n const cycles = isBoolean(opts.cycles) ? opts.cycles : DEFAULTS.cycles\n const replacer = opts.replacer || DEFAULTS.replacer\n const stringify = opts.stringify || DEFAULTS.stringify\n\n const compare = opts.compare && (function (f) {\n return function (node) {\n return function (a, b) {\n const aobj = { key: a, value: node[a] }\n const bobj = { key: b, value: node[b] }\n return f(aobj, bobj)\n }\n }\n })(opts.compare)\n\n // Detect circular structure in obj and raise error efficiently.\n if (!cycles) stringify(obj)\n\n const seen = []\n\n return (function _deterministic (parent, key, node, level) {\n const indent = space ? ('\\n' + new Array(level + 1).join(space)) : ''\n const colonSeparator = space ? ': ' : ':'\n\n node = serialize(node)\n node = replacer.call(parent, key, node)\n\n if (node === undefined) return\n\n if (!isObject(node) || node === null) return stringify(node)\n\n if (isArray(node)) {\n const out = []\n for (let i = 0; i < node.length; i++) {\n const item = _deterministic(node, i, node[i], level + 1) || stringify(null)\n out.push(indent + space + item)\n }\n return '[' + out.join(',') + indent + ']'\n } else {\n if (cycles) {\n if (seen.indexOf(node) !== -1) {\n return stringify('[Circular]')\n } else {\n seen.push(node)\n }\n }\n\n const nodeKeys = keys(node).sort(compare && compare(node))\n const out = []\n for (let i = 0; i < nodeKeys.length; i++) {\n const key = nodeKeys[i]\n const value = _deterministic(node, key, node[key], level + 1)\n\n if (!value) continue\n\n const keyValue = stringify(key) + colonSeparator + value\n out.push(indent + space + keyValue)\n }\n seen.splice(seen.indexOf(node), 1)\n return '{' + out.join(',') + indent + '}'\n }\n })({ '': obj }, '', obj, 0)\n}\n\nmodule.exports = stringifyDeterministic\n","// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace RunAsap {\n export type Task<T = void> = () => T;\n export type AbortTask = () => void;\n export type RunAsap<T> = (task: Task<T>) => AbortTask;\n\n export const useMessageChannel = (() => {\n if (typeof MessageChannel === \"undefined\") {\n return new Error(\"MessageChannel is not supported\");\n }\n\n return (task: Task) => {\n const controller = new AbortController();\n const signal = controller.signal;\n const mc = new MessageChannel();\n mc.port1.postMessage(null);\n mc.port2.addEventListener(\n \"message\",\n () => {\n task();\n mc.port1.close();\n mc.port2.close();\n },\n { once: true, signal: signal },\n );\n mc.port2.start();\n return () => controller.abort();\n };\n })();\n\n export const usePostMessage = (() => {\n const _main: unknown =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n (typeof window === \"object\" && window) ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n (typeof global === \"object\" && global) ||\n (typeof self === \"object\" && self);\n if (!_main) {\n return new Error(\"No global object found\");\n }\n\n const main = _main as Window;\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n !main.postMessage ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n !main.addEventListener ||\n (main as { importScripts?: unknown }).importScripts // web workers can't this method\n ) {\n return new Error(\"postMessage is not supported\");\n }\n\n let index = 0;\n const tasks = new Map<number, Task>();\n\n function getNewIndex() {\n if (index === 9007199254740991) {\n return 0;\n }\n return ++index;\n }\n\n const MESSAGE_PREFIX = \"com.usePostMessage\" + Math.random();\n\n main.addEventListener(\n \"message\",\n (e) => {\n const event = e as MessageEvent<string>;\n if (typeof event.data !== \"string\") {\n return;\n }\n if (event.source !== main || !event.data.startsWith(MESSAGE_PREFIX)) {\n return;\n }\n const index = event.data.split(\":\").at(1);\n if (index === undefined) {\n return;\n }\n const i = +index;\n const task = tasks.get(i);\n if (task) {\n task();\n tasks.delete(i);\n }\n },\n false,\n );\n\n return (task: Task) => {\n const i = getNewIndex();\n tasks.set(i, task);\n main.postMessage(MESSAGE_PREFIX + \":\" + i, { targetOrigin: \"*\" });\n return () => {\n tasks.delete(i);\n };\n };\n })();\n\n export const useSetImmediate = (() => {\n if (typeof window !== \"undefined\") {\n return new Error(\"setImmediate is not supported on the browser\");\n }\n if (typeof setImmediate === \"undefined\") {\n return new Error(\"setImmediate is not supported\");\n }\n\n return (task: Task) => {\n const id = setImmediate(task);\n return () => clearImmediate(id);\n };\n })();\n\n export const useSetTimeout = (() => {\n return (task: Task) => {\n const id = setTimeout(task, 0);\n return () => clearTimeout(id);\n };\n })();\n\n // queues the task in the macro tasks queue, so it doesn't\n // prevent the event loop from movin on the next tick\n export function runAsap<T = void>(task: Task<T>): AbortTask {\n // if on node use setImmediate\n if (!(useSetImmediate instanceof Error)) {\n return useSetImmediate(task);\n }\n // on browser use MessageChannel if available\n else if (!(useMessageChannel instanceof Error)) {\n return useMessageChannel(task);\n }\n // otherwise use window.postMessage\n else if (!(usePostMessage instanceof Error)) {\n return usePostMessage(task);\n }\n // fallback to setTimeout with 0 delay\n else {\n return useSetTimeout(task);\n }\n }\n\n export function runAsapAsync<T = void>(\n task: RunAsap.Task<Promise<T>>,\n queueMethod: RunAsap<void> = runAsap,\n ): Promise<T> {\n if (queueMethod instanceof Error) {\n throw new Error(\"queueMethod is not supported\", {\n cause: queueMethod,\n });\n }\n return new Promise((resolve, reject) => {\n queueMethod(() => {\n task().then(resolve).catch(reject);\n });\n });\n }\n}\n","import {\n DocumentDriveDocument,\n documentModel as DocumentDriveModel,\n} from \"document-model-libs/document-drive\";\nimport {\n Action,\n BaseAction,\n Document,\n DocumentOperations,\n Operation,\n OperationScope,\n} from \"document-model/document\";\n// import setAsap from 'setasap';\nimport { v4 as uuidv4 } from \"uuid\";\nimport { OperationError } from \"../server/error\";\nimport { DocumentDriveStorage, DocumentStorage } from \"../storage\";\nimport { RunAsap } from \"./run-asap\";\nexport * from \"./run-asap\";\n\nexport const runAsap = RunAsap.runAsap;\nexport const runAsapAsync = RunAsap.runAsapAsync;\n\nexport function isDocumentDriveStorage(\n document: DocumentStorage,\n): document is DocumentDriveStorage {\n return document.documentType === DocumentDriveModel.id;\n}\n\nexport function isDocumentDrive(\n document: Document,\n): document is DocumentDriveDocument {\n return document.documentType === DocumentDriveModel.id;\n}\n\nexport function mergeOperations<A extends Action = Action>(\n currentOperations: DocumentOperations<A>,\n newOperations: Operation<A | BaseAction>[],\n): DocumentOperations<A> {\n const minIndexByScope = Object.keys(currentOperations).reduce<\n Partial<Record<OperationScope, number>>\n >((acc, curr) => {\n const scope = curr as OperationScope;\n acc[scope] = currentOperations[scope].at(-1)?.index ?? 0;\n return acc;\n }, {});\n\n const conflictOp = newOperations.find(\n (op) => op.index < (minIndexByScope[op.scope] ?? 0),\n );\n if (conflictOp) {\n throw new OperationError(\n \"ERROR\",\n conflictOp,\n `Tried to add operation with index ${conflictOp.index} and document is at index ${minIndexByScope[conflictOp.scope]}`,\n );\n }\n\n return newOperations\n .sort((a, b) => a.index - b.index)\n .reduce<DocumentOperations<A>>((acc, curr) => {\n const existingOperations = acc[curr.scope] || [];\n return { ...acc, [curr.scope]: [...existingOperations, curr] };\n }, currentOperations);\n}\n\nexport function generateUUID(): string {\n return uuidv4();\n}\n\nexport function isNoopUpdate(\n operation: Operation,\n latestOperation?: Operation,\n) {\n if (!latestOperation) {\n return false;\n }\n\n const isNoopOp = operation.type === \"NOOP\";\n const isNoopLatestOp = latestOperation.type === \"NOOP\";\n const isSameIndexOp = operation.index === latestOperation.index;\n const isSkipOpGreaterThanLatestOp = operation.skip > latestOperation.skip;\n\n return (\n isNoopOp && isNoopLatestOp && isSameIndexOp && isSkipOpGreaterThanLatestOp\n );\n}\n\n// return true if dateA is before dateB\nexport function isBefore(dateA: Date | string, dateB: Date | string) {\n return new Date(dateA) < new Date(dateB);\n}\n","export type ILogger = Pick<\n Console,\n \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\" | \"trace\"\n>;\nclass Logger implements ILogger {\n #logger: ILogger = console;\n\n set logger(logger: ILogger) {\n this.#logger = logger;\n }\n\n log(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.log(...data);\n }\n\n info(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.info(...data);\n }\n\n warn(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.warn(...data);\n }\n\n error(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.error(...data);\n }\n\n debug(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.debug(...data);\n }\n\n trace(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.trace(...data);\n }\n}\n\nconst loggerInstance = new Logger();\n\nexport const logger: ILogger = loggerInstance;\nexport const setLogger = (logger: ILogger) => (loggerInstance.logger = logger);\n","import { utils } from \"document-model/document\";\n\nexport const {\n attachBranch,\n garbageCollect,\n groupOperationsByScope,\n merge,\n split,\n precedes,\n removeExistingOperations,\n reshuffleByTimestamp,\n sortOperations,\n addUndo,\n checkOperationsIntegrity,\n checkCleanedOperationsIntegrity,\n reshuffleByTimestampAndIndex,\n nextSkipNumber,\n prepareOperations,\n IntegrityIssueSubType,\n IntegrityIssueType,\n} = utils.documentHelpers;\n","import type { Document, OperationScope } from \"document-model/document\";\nimport { RevisionsFilter, StrandUpdate } from \"./types\";\n\nexport function buildRevisionsFilter(\n strands: StrandUpdate[],\n driveId: string,\n documentId: string,\n): RevisionsFilter {\n return strands.reduce<RevisionsFilter>((acc, s) => {\n if (!(s.driveId === driveId && s.documentId === documentId)) {\n return acc;\n }\n acc[s.scope] = s.operations[s.operations.length - 1]?.index ?? -1;\n return acc;\n }, {});\n}\n\nexport function filterOperationsByRevision(\n operations: Document[\"operations\"],\n revisions?: RevisionsFilter,\n): Document[\"operations\"] {\n if (!revisions) {\n return operations;\n }\n return (Object.keys(operations) as OperationScope[]).reduce<\n Document[\"operations\"]\n >((acc, scope) => {\n const revision = revisions[scope];\n if (revision !== undefined) {\n acc[scope] = operations[scope].filter((op) => op.index <= revision);\n }\n return acc;\n }, operations);\n}\n","import { Document, OperationScope } from \"document-model/document\";\nimport { logger } from \"../../../utils/logger\";\nimport {\n IBaseDocumentDriveServer,\n Listener,\n ListenerRevision,\n OperationUpdate,\n StrandUpdate,\n} from \"../../types\";\nimport { buildRevisionsFilter } from \"../../utils\";\nimport { ITransmitter } from \"./types\";\n\nexport interface IReceiver {\n transmit: (strands: InternalTransmitterUpdate[]) => Promise<void>;\n disconnect: () => Promise<void>;\n}\n\nexport type InternalTransmitterUpdate<\n T extends Document = Document,\n S extends OperationScope = OperationScope,\n> = {\n driveId: string;\n documentId: string;\n scope: S;\n branch: string;\n operations: OperationUpdate[];\n state: T[\"state\"][S];\n};\n\nexport interface IInternalTransmitter extends ITransmitter {\n setReceiver(receiver: IReceiver): void;\n}\n\nexport class InternalTransmitter implements ITransmitter {\n private drive: IBaseDocumentDriveServer;\n private listener: Listener;\n private receiver: IReceiver | undefined;\n\n constructor(listener: Listener, drive: IBaseDocumentDriveServer) {\n this.listener = listener;\n this.drive = drive;\n }\n\n async transmit(strands: StrandUpdate[]): Promise<ListenerRevision[]> {\n if (!this.receiver) {\n return [];\n }\n\n const retrievedDocuments = new Map<string, Document>();\n const updates: InternalTransmitterUpdate[] = [];\n for (const strand of strands) {\n let document = retrievedDocuments.get(\n `${strand.driveId}:${strand.documentId}`,\n );\n if (!document) {\n const revisions = buildRevisionsFilter(\n strands,\n strand.driveId,\n strand.documentId,\n );\n document = await (strand.documentId\n ? this.drive.getDocument(strand.driveId, strand.documentId, {\n revisions,\n })\n : this.drive.getDrive(strand.driveId, { revisions }));\n retrievedDocuments.set(\n `${strand.driveId}:${strand.documentId}`,\n document,\n );\n }\n updates.push({ ...strand, state: document.state[strand.scope] });\n }\n try {\n await this.receiver.transmit(updates);\n return strands.map(({ operations, ...s }) => ({\n ...s,\n status: \"SUCCESS\",\n revision: operations[operations.length - 1]?.index ?? -1,\n }));\n } catch (error) {\n logger.error(error);\n // TODO check which strand caused an error\n return strands.map(({ operations, ...s }) => ({\n ...s,\n status: \"ERROR\",\n revision: (operations[0]?.index ?? 0) - 1,\n }));\n }\n }\n\n setReceiver(receiver: IReceiver) {\n this.receiver = receiver;\n }\n\n async disconnect(): Promise<void> {\n await this.receiver?.disconnect();\n }\n}\n","import stringify from \"json-stringify-deterministic\";\nimport { gql, requestGraphql } from \"../../../utils/graphql\";\nimport { logger } from \"../../../utils/logger\";\nimport {\n IBaseDocumentDriveServer,\n Listener,\n ListenerRevision,\n StrandUpdate,\n} from \"../../types\";\nimport { ITransmitter, StrandUpdateSource } from \"./types\";\n\nexport class SwitchboardPushTransmitter implements ITransmitter {\n private drive: IBaseDocumentDriveServer;\n private listener: Listener;\n private targetURL: string;\n\n constructor(listener: Listener, drive: IBaseDocumentDriveServer) {\n this.listener = listener;\n this.drive = drive;\n this.targetURL = listener.callInfo!.data!;\n }\n\n async transmit(\n strands: StrandUpdate[],\n source: StrandUpdateSource,\n ): Promise<ListenerRevision[]> {\n if (\n source.type === \"trigger\" &&\n source.trigger.data?.url === this.targetURL\n ) {\n return strands.map((strand) => ({\n driveId: strand.driveId,\n documentId: strand.documentId,\n scope: strand.scope,\n branch: strand.branch,\n status: \"SUCCESS\",\n revision: strand.operations.at(-1)?.index ?? -1,\n }));\n }\n\n // Send Graphql mutation to switchboard\n try {\n const { pushUpdates } = await requestGraphql<{\n pushUpdates: ListenerRevision[];\n }>(\n this.targetURL,\n gql`\n mutation pushUpdates($strands: [InputStrandUpdate!]) {\n pushUpdates(strands: $strands) {\n driveId\n documentId\n scope\n branch\n status\n revision\n error\n }\n }\n `,\n {\n strands: strands.map((strand) => ({\n ...strand,\n operations: strand.operations.map((op) => ({\n ...op,\n input: stringify(op.input),\n })),\n })),\n },\n );\n\n if (!pushUpdates) {\n throw new Error(\"Couldn't update listener revision\");\n }\n\n return pushUpdates;\n } catch (e) {\n logger.error(e);\n throw e;\n }\n return [];\n }\n}\n","import {\n IDocumentDriveServer,\n InternalTransmitter,\n InternalTransmitterUpdate,\n Listener,\n} from \"document-drive\";\nimport { DocumentDriveDocument } from \"document-model-libs/document-drive\";\n\nexport type InternalListenerModule = {\n name: string;\n options: Omit<Listener, \"driveId\">;\n transmit: (strands: InternalTransmitterUpdate[]) => Promise<void>;\n};\n\nexport class InternalListenerManager {\n private driveServer: IDocumentDriveServer;\n private modules: InternalListenerModule[] = [];\n\n constructor(driveServer: IDocumentDriveServer) {\n this.driveServer = driveServer;\n driveServer.on(\"driveAdded\", this.#onDriveAdded.bind(this));\n }\n\n async #onDriveAdded(drive: DocumentDriveDocument) {\n await Promise.all(\n this.modules.map((module) =>\n this.driveServer.addInternalListener(\n drive.state.global.id,\n {\n transmit: (strands) => module.transmit(strands),\n disconnect: async () => {\n return Promise.resolve();\n },\n },\n { ...module.options, label: module.options.label ?? \"\" },\n ),\n ),\n );\n }\n\n async init() {\n const drives = await this.driveServer.getDrives();\n\n for (const { options, transmit } of this.modules) {\n if (!options || !transmit) {\n continue;\n }\n\n for (const driveId of drives) {\n try {\n const { listenerId } = options;\n const drive = await this.driveServer.getDrive(driveId);\n const moduleRegistered =\n drive.state.local.listeners.filter(\n (l) => l.listenerId === listenerId,\n ).length > 0;\n if (!moduleRegistered) {\n await this.driveServer.addInternalListener(\n driveId,\n {\n transmit: async (strands) => transmit(strands),\n disconnect: async () => Promise.resolve(),\n },\n {\n block: false,\n filter: options.filter,\n label: options.label!,\n listenerId,\n },\n );\n\n return;\n }\n\n const transmitter = await this.driveServer.getTransmitter(\n driveId,\n listenerId,\n );\n if (transmitter instanceof InternalTransmitter) {\n transmitter.setReceiver({\n transmit: async (strands: InternalTransmitterUpdate[]) => {\n await transmit(strands);\n return Promise.resolve();\n },\n disconnect: () => {\n console.log(`Disconnecting listener ${options.listenerId}`);\n return Promise.resolve();\n },\n });\n }\n } catch (e) {\n console.error(\n `Error while initializing listener ${options.listenerId} for drive ${driveId}`,\n e,\n );\n }\n }\n }\n }\n\n async registerInternalListener(module: InternalListenerModule) {\n if (this.modules.find((m) => m.name === module.name)) {\n return;\n }\n this.modules.push(module);\n await this.init();\n }\n}\n","import { buildSubgraphSchema } from \"@apollo/subgraph\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport { GraphQLResolverMap } from \"@apollo/subgraph/dist/schema-helper\";\nimport { typeDefs as scalarsTypeDefs } from \"@powerhousedao/scalars\";\nimport { parse } from \"graphql\";\n\nexport const createSchema = (\n documentDriveServer: IDocumentDriveServer,\n resolvers: GraphQLResolverMap,\n typeDefs: string\n) =>\n buildSubgraphSchema([\n {\n typeDefs: getDocumentModelTypeDefs(documentDriveServer, typeDefs),\n resolvers,\n },\n ]);\n\nexport const getDocumentModelTypeDefs = (\n documentDriveServer: IDocumentDriveServer,\n typeDefs: string\n) => {\n const documentModels = documentDriveServer.getDocumentModels();\n let dmSchema = \"\";\n documentModels.forEach(({ documentModel }) => {\n dmSchema += `\n ${documentModel.specifications\n .map((specification) =>\n specification.state.global.schema\n .replaceAll(\" Account \", ` ${documentModel.name}Account `)\n .replaceAll(`: Account`, `: ${documentModel.name}Account`)\n .replaceAll(`[Account!]!`, `[${documentModel.name}Account!]!`)\n .replaceAll(\"scalar DateTime\", \"\")\n .replaceAll(/input (.*?) {[\\s\\S]*?}/g, \"\")\n )\n .join(\"\\n\")};\n \n ${documentModel.specifications\n .map((specification) =>\n specification.state.local.schema\n .replaceAll(\" Account \", ` ${documentModel.name}Account `)\n .replaceAll(`: Account`, `: ${documentModel.name}Account`)\n .replaceAll(`[Account!]!`, `[${documentModel.name}Account!]!`)\n .replaceAll(\"scalar DateTime\", \"\")\n .replaceAll(/input (.*?) {[\\s\\S]*?}/g, \"\")\n .replaceAll(\"type AccountSnapshotLocalState\", \"\")\n .replaceAll(\"type BudgetStatementLocalState\", \"\")\n .replaceAll(\"type ScopeFrameworkLocalState\", \"\")\n )\n .join(\"\\n\")};\n \n type ${documentModel.name} implements IDocument {\n id: ID!\n name: String!\n documentType: String!\n revision: Int!\n created: DateTime!\n lastModified: DateTime!\n ${documentModel.name !== \"DocumentModel\" ? `state: ${documentModel.name}State!` : \"\"}\n }\\n`;\n });\n\n // add the mutation and query types\n const schema = `\n ${scalarsTypeDefs.join(\"\\n\")}\n \n interface IDocument {\n name: String!\n documentType: String!\n revision: Int!\n created: DateTime!\n lastModified: DateTime!\n \n }\n ${dmSchema}\n \n ${typeDefs}\n `;\n\n return parse(schema.replaceAll(\";\", \"\"));\n};\n","import { DriveInput } from \"document-drive\";\nimport { Context } from \"../types\";\n\nexport const resolvers = {\n Query: {\n drives: async (parent: unknown, args: unknown, ctx: Context) => {\n const drives = await ctx.driveServer.getDrives();\n return drives;\n },\n },\n Mutation: {\n addDrive: async (parent: unknown, args: DriveInput, ctx: Context) => {\n try {\n const drive = await ctx.driveServer.addDrive(args);\n return drive.state.global;\n } catch (e) {\n console.error(e);\n throw new Error(e as string);\n }\n },\n },\n};\n","import { GraphQLResolverMap } from \"@apollo/subgraph/dist/schema-helper\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport { readFileSync } from \"fs\";\nimport { dirname, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createSchema } from \"src/utils/create-schema\";\nimport { resolvers } from \"./resolvers\";\nimport schemaPath from \"./schema.graphql\";\n\nconst __dirname =\n import.meta.dirname ?? dirname(fileURLToPath(import.meta.url));\n\nconst typeDefs = readFileSync(resolve(__dirname, schemaPath), \"utf8\");\n\nexport const getSchema = (driveServer: IDocumentDriveServer) =>\n createSchema(driveServer, resolvers as GraphQLResolverMap, typeDefs);\n","import {\n generateUUID,\n ListenerRevision,\n PullResponderTransmitter,\n StrandUpdateGraphQL,\n} from \"document-drive\";\nimport {\n actions,\n DocumentDriveAction,\n Listener,\n ListenerFilter,\n TransmitterType,\n} from \"document-model-libs/document-drive\";\nimport { BaseAction, Operation } from \"document-model/document\";\nimport {\n DocumentModelInput,\n DocumentModelState,\n} from \"document-model/document-model\";\nimport { Context } from \"../types\";\n\nexport const resolvers = {\n Query: {\n drive: async (_: unknown, args: unknown, ctx: Context) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const drive = await ctx.driveServer.getDrive(ctx.driveId);\n return drive.state.global;\n },\n documents: async (_: unknown, args: unknown, ctx: Context) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const documents = await ctx.driveServer.getDocuments(ctx.driveId);\n return documents;\n },\n document: async (_: unknown, { id }: { id: string }, ctx: Context) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const document = await ctx.driveServer.getDocument(ctx.driveId, id);\n\n const dms = ctx.driveServer.getDocumentModels();\n const dm = dms.find(\n ({ documentModel }: { documentModel: DocumentModelState }) =>\n documentModel.id === document.documentType,\n );\n const globalState = document.state.global;\n if (!globalState) throw new Error(\"Document not found\");\n const response = {\n ...document,\n id,\n revision: document.revision.global,\n state: document.state.global,\n operations: document.operations.global.map((op: Operation) => ({\n ...op,\n inputText:\n typeof op.input === \"string\" ? op.input : JSON.stringify(op.input),\n })),\n initialState: document.initialState.state.global,\n __typename: dm?.documentModel.name,\n };\n return response;\n },\n system: () => ({ sync: {} }),\n },\n Mutation: {\n registerPullResponderListener: async (\n _: unknown,\n { filter }: { filter: ListenerFilter },\n ctx: Context,\n ) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const uuid = generateUUID();\n const listener: Listener = {\n block: false,\n callInfo: {\n data: \"\",\n name: \"PullResponder\",\n transmitterType: \"PullResponder\" as TransmitterType,\n },\n filter: {\n branch: filter.branch ?? [],\n documentId: filter.documentId ?? [],\n documentType: filter.documentType ?? [],\n scope: filter.scope ?? [],\n },\n label: `Pullresponder #${uuid}`,\n listenerId: uuid,\n system: false,\n };\n\n const result = await ctx.driveServer.queueDriveAction(\n ctx.driveId,\n actions.addListener({ listener }),\n );\n\n if (result.status !== \"SUCCESS\" && result.error) {\n throw new Error(\n `Listener couldn't be registered: ${result.error.message}`,\n );\n }\n\n return listener;\n },\n pushUpdates: async (\n _: unknown,\n { strands }: { strands: StrandUpdateGraphQL[] },\n ctx: Context,\n ) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const listenerRevisions: ListenerRevision[] = await Promise.all(\n strands.map(async (s) => {\n const operations =\n s.operations.map((o) => ({\n ...o,\n input: JSON.parse(o.input) as DocumentModelInput,\n skip: o.skip ?? 0,\n scope: s.scope,\n branch: \"main\",\n })) ?? [];\n\n const result = await (s.documentId !== undefined\n ? ctx.driveServer.queueOperations(\n s.driveId,\n s.documentId,\n operations,\n )\n : ctx.driveServer.queueDriveOperations(\n s.driveId,\n operations as Operation<DocumentDriveAction | BaseAction>[],\n ));\n\n const scopeOperations = result.document?.operations[s.scope] ?? [];\n if (scopeOperations.length === 0) {\n return {\n revision: -1,\n branch: s.branch,\n documentId: s.documentId ?? \"\",\n driveId: s.driveId,\n scope: s.scope,\n status: result.status,\n };\n }\n\n const revision = scopeOperations.slice().pop()?.index ?? -1;\n return {\n revision,\n branch: s.branch,\n documentId: s.documentId ?? \"\",\n driveId: s.driveId,\n scope: s.scope,\n status: result.status,\n error: result.error?.message || undefined,\n };\n }),\n );\n\n return listenerRevisions;\n },\n acknowledge: async (\n _: unknown,\n {\n listenerId,\n revisions,\n }: { listenerId: string; revisions: ListenerRevision[] },\n ctx: Context,\n ) => {\n if (!listenerId || !revisions) return false;\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const validEntries = revisions\n .filter((r) => r !== null)\n .map((e) => ({\n driveId: e.driveId,\n documentId: e.documentId,\n scope: e.scope,\n branch: e.branch,\n revision: e.revision,\n status: e.status,\n }));\n\n const transmitter = (await ctx.driveServer.getTransmitter(\n ctx.driveId,\n listenerId,\n )) as PullResponderTransmitter;\n const result = await transmitter.processAcknowledge(\n ctx.driveId ?? \"1\",\n listenerId,\n validEntries,\n );\n\n return result;\n },\n },\n System: {},\n Sync: {\n strands: async (\n _: unknown,\n { listenerId, since }: { listenerId: string; since: string | undefined },\n ctx: Context,\n ) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const listener = (await ctx.driveServer.getTransmitter(\n ctx.driveId,\n listenerId,\n )) as PullResponderTransmitter;\n const strands = await listener.getStrands({ since });\n return strands.map((e) => ({\n driveId: e.driveId,\n documentId: e.documentId,\n scope: e.scope,\n branch: e.branch,\n operations: e.operations.map((o) => ({\n index: o.index,\n skip: o.skip,\n name: o.type,\n input: JSON.stringify(o.input),\n hash: o.hash,\n timestamp: o.timestamp,\n type: o.type,\n context: o.context,\n id: o.id,\n })),\n }));\n },\n },\n};\n","import { GraphQLResolverMap } from \"@apollo/subgraph/dist/schema-helper\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport { readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createSchema } from \"src/utils/create-schema\";\nimport { resolvers } from \"./resolvers\";\nimport schemaPath from \"./schema.graphql\";\n\nconst __dirname =\n import.meta.dirname ?? dirname(fileURLToPath(import.meta.url));\n\nconst typeDefs = readFileSync(resolve(__dirname, schemaPath), \"utf8\");\n\nexport const getSchema = (driveServer: IDocumentDriveServer) =>\n createSchema(driveServer, resolvers as GraphQLResolverMap, typeDefs);\n","import { getSchema as getSystemSchema } from \"./system/subgraph\";\nimport { getSchema as getDriveSchema } from \"./drive/subgraph\";\n\nexport * from \"./types\";\n\nexport const SUBGRAPH_REGISTRY = [\n {\n name: \"system\",\n getSchema: getSystemSchema,\n },\n {\n name: \"d/:drive\",\n getSchema: getDriveSchema,\n },\n];\n","import { ApolloServer } from \"@apollo/server\";\nimport { expressMiddleware } from \"@apollo/server/express4\";\nimport { ApolloServerPluginInlineTraceDisabled } from \"@apollo/server/plugin/disabled\";\nimport bodyParser from \"body-parser\";\nimport cors from \"cors\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport express, { IRouter, Router } from \"express\";\nimport {\n InternalListenerManager,\n InternalListenerModule,\n} from \"./internal-listener-manager\";\nimport { SUBGRAPH_REGISTRY } from \"./subgraphs\";\nimport { Context } from \"./types\";\nexport let reactorRouter: IRouter = Router();\n\nconst getLocalSubgraphConfig = (subgraphName: string) =>\n SUBGRAPH_REGISTRY.find((it) => it.name === subgraphName);\n\nlet listenerManager: InternalListenerManager | undefined;\n\nexport const getListenerManager = async (driveServer: IDocumentDriveServer) => {\n if (!listenerManager) {\n listenerManager = new InternalListenerManager(driveServer);\n await listenerManager.init();\n }\n return listenerManager;\n};\n\nexport const updateRouter = async (driveServer: IDocumentDriveServer) => {\n const newRouter = Router();\n newRouter.use(cors());\n newRouter.use(bodyParser.json());\n // Run each subgraph on the same http server, but at different paths\n for (const subgraph of SUBGRAPH_REGISTRY) {\n const subgraphConfig = getLocalSubgraphConfig(subgraph.name);\n if (!subgraphConfig) continue;\n\n // get schema\n const schema = subgraphConfig.getSchema(driveServer);\n\n // create apollo server\n const server = new ApolloServer({\n schema,\n introspection: true,\n plugins: [ApolloServerPluginInlineTraceDisabled()],\n });\n\n // start apollo server\n await server.start();\n\n // setup path\n const path = `/${subgraphConfig.name}`;\n newRouter.use(\n path,\n // @ts-ignore\n expressMiddleware(server, {\n context: ({ req }): Promise<Context> =>\n Promise.resolve({\n headers: req.headers,\n driveId: req.params.drive ?? undefined,\n driveServer,\n ...getAdditionalContextFields(),\n }),\n })\n );\n console.log(`Setting up [${subgraphConfig.name}] subgraph at ${path}`);\n }\n\n listenerManager = await getListenerManager(driveServer);\n reactorRouter = newRouter;\n console.log(\"All subgraphs started.\");\n};\n\nlet docDriveServer: IDocumentDriveServer;\nexport const initReactorRouter = async (\n path: string,\n app: express.Express,\n driveServer: IDocumentDriveServer\n) => {\n docDriveServer = driveServer;\n const models = driveServer.getDocumentModels();\n const driveModel = models.find(\n (it) => it.documentModel.name === \"DocumentDrive\"\n );\n\n if (!driveModel) {\n throw new Error(\"DocumentDrive model required\");\n }\n\n await updateRouter(driveServer);\n\n driveServer.on(\"documentModels\", () => {\n updateRouter(driveServer).catch((error: unknown) => console.error(error));\n });\n\n app.use(path, (req, res, next) => reactorRouter(req, res, next));\n};\n\nexport const addSubgraph = async (\n subgraph: (typeof SUBGRAPH_REGISTRY)[number]\n) => {\n SUBGRAPH_REGISTRY.unshift(subgraph);\n await updateRouter(docDriveServer);\n};\n\nexport const registerInternalListener = async (\n module: InternalListenerModule\n) => {\n if (!listenerManager) {\n throw new Error(\"Listener manager not initialized\");\n }\n await listenerManager.registerInternalListener(module);\n};\n\nlet contextFields = {};\nexport const getAdditionalContextFields = () => {\n return contextFields;\n};\n\nexport const setAdditionalContextFields = (fields: Record<string, any>) => {\n contextFields = { ...contextFields, ...fields };\n};\n","import { IDocumentDriveServer } from \"document-drive\";\nimport express, { Express } from \"express\";\nimport { initReactorRouter } from \"./router\";\ntype Options = {\n express?: Express;\n port?: number;\n};\n\nconst DEFAULT_PORT = 4000;\n\nexport async function startAPI(\n reactor: IDocumentDriveServer,\n options: Options,\n) {\n const port = options.port ?? DEFAULT_PORT;\n const app = options.express ?? express();\n\n await initReactorRouter(\"/\", app, reactor);\n\n app.listen(port);\n\n return app;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/json-stringify-deterministic@1.0.12/node_modules/json-stringify-deterministic/lib/defaults.js","../../../node_modules/.pnpm/json-stringify-deterministic@1.0.12/node_modules/json-stringify-deterministic/lib/util.js","../../../node_modules/.pnpm/json-stringify-deterministic@1.0.12/node_modules/json-stringify-deterministic/lib/index.js","../../document-drive/src/utils/run-asap.ts","../../document-drive/src/utils/index.ts","../../document-drive/src/utils/logger.ts","../../document-drive/src/utils/document-helpers.ts","../../document-drive/src/server/utils.ts","../../document-drive/src/server/listener/transmitter/internal.ts","../../document-drive/src/server/listener/transmitter/switchboard-push.ts","../src/internal-listener-manager.ts","../src/utils/create-schema.ts","../src/subgraphs/system/resolvers.ts","../src/subgraphs/system/subgraph.ts","../src/subgraphs/drive/resolvers.ts","../src/subgraphs/drive/subgraph.ts","../src/subgraphs/index.ts","../src/router.ts","../src/server.ts"],"names":["stringify","key","RunAsap","index","runAsap","runAsapAsync","resolve","uuidv4","logger","resolvers","typeDefs","documentModel","scalarsTypeDefs","actions","__dirname","dirname","fileURLToPath","readFileSync","schema_default","getSchema","express"],"mappings":"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","file":"index.js","sourcesContent":["module.exports = {\n space: '',\n cycles: false,\n replacer: (k, v) => v,\n stringify: JSON.stringify\n}\n","'use strict'\n\nmodule.exports = {\n isArray: Array.isArray,\n assign: Object.assign,\n isObject: v => typeof v === 'object',\n isFunction: v => typeof v === 'function',\n isBoolean: v => typeof v === 'boolean',\n isRegex: v => v instanceof RegExp,\n keys: Object.keys\n}\n","'use strict'\n\nconst DEFAULTS = require('./defaults')\nconst isFunction = require('./util').isFunction\nconst isBoolean = require('./util').isBoolean\nconst isObject = require('./util').isObject\nconst isArray = require('./util').isArray\nconst isRegex = require('./util').isRegex\nconst assign = require('./util').assign\nconst keys = require('./util').keys\n\nfunction serialize (obj) {\n if (obj === null || obj === undefined) return obj\n if (isRegex(obj)) return obj.toString()\n return obj.toJSON ? obj.toJSON() : obj\n}\n\nfunction stringifyDeterministic (obj, opts) {\n opts = opts || assign({}, DEFAULTS)\n\n if (isFunction(opts)) opts = { compare: opts }\n\n const space = opts.space || DEFAULTS.space\n const cycles = isBoolean(opts.cycles) ? opts.cycles : DEFAULTS.cycles\n const replacer = opts.replacer || DEFAULTS.replacer\n const stringify = opts.stringify || DEFAULTS.stringify\n\n const compare = opts.compare && (function (f) {\n return function (node) {\n return function (a, b) {\n const aobj = { key: a, value: node[a] }\n const bobj = { key: b, value: node[b] }\n return f(aobj, bobj)\n }\n }\n })(opts.compare)\n\n // Detect circular structure in obj and raise error efficiently.\n if (!cycles) stringify(obj)\n\n const seen = []\n\n return (function _deterministic (parent, key, node, level) {\n const indent = space ? ('\\n' + new Array(level + 1).join(space)) : ''\n const colonSeparator = space ? ': ' : ':'\n\n node = serialize(node)\n node = replacer.call(parent, key, node)\n\n if (node === undefined) return\n\n if (!isObject(node) || node === null) return stringify(node)\n\n if (isArray(node)) {\n const out = []\n for (let i = 0; i < node.length; i++) {\n const item = _deterministic(node, i, node[i], level + 1) || stringify(null)\n out.push(indent + space + item)\n }\n return '[' + out.join(',') + indent + ']'\n } else {\n if (cycles) {\n if (seen.indexOf(node) !== -1) {\n return stringify('[Circular]')\n } else {\n seen.push(node)\n }\n }\n\n const nodeKeys = keys(node).sort(compare && compare(node))\n const out = []\n for (let i = 0; i < nodeKeys.length; i++) {\n const key = nodeKeys[i]\n const value = _deterministic(node, key, node[key], level + 1)\n\n if (!value) continue\n\n const keyValue = stringify(key) + colonSeparator + value\n out.push(indent + space + keyValue)\n }\n seen.splice(seen.indexOf(node), 1)\n return '{' + out.join(',') + indent + '}'\n }\n })({ '': obj }, '', obj, 0)\n}\n\nmodule.exports = stringifyDeterministic\n","// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace RunAsap {\n export type Task<T = void> = () => T;\n export type AbortTask = () => void;\n export type RunAsap<T> = (task: Task<T>) => AbortTask;\n\n export const useMessageChannel = (() => {\n if (typeof MessageChannel === \"undefined\") {\n return new Error(\"MessageChannel is not supported\");\n }\n\n return (task: Task) => {\n const controller = new AbortController();\n const signal = controller.signal;\n const mc = new MessageChannel();\n mc.port1.postMessage(null);\n mc.port2.addEventListener(\n \"message\",\n () => {\n task();\n mc.port1.close();\n mc.port2.close();\n },\n { once: true, signal: signal },\n );\n mc.port2.start();\n return () => controller.abort();\n };\n })();\n\n export const usePostMessage = (() => {\n const _main: unknown =\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n (typeof window === \"object\" && window) ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n (typeof global === \"object\" && global) ||\n (typeof self === \"object\" && self);\n if (!_main) {\n return new Error(\"No global object found\");\n }\n\n const main = _main as Window;\n if (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n !main.postMessage ||\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n !main.addEventListener ||\n (main as { importScripts?: unknown }).importScripts // web workers can't this method\n ) {\n return new Error(\"postMessage is not supported\");\n }\n\n let index = 0;\n const tasks = new Map<number, Task>();\n\n function getNewIndex() {\n if (index === 9007199254740991) {\n return 0;\n }\n return ++index;\n }\n\n const MESSAGE_PREFIX = \"com.usePostMessage\" + Math.random();\n\n main.addEventListener(\n \"message\",\n (e) => {\n const event = e as MessageEvent<string>;\n if (typeof event.data !== \"string\") {\n return;\n }\n if (event.source !== main || !event.data.startsWith(MESSAGE_PREFIX)) {\n return;\n }\n const index = event.data.split(\":\").at(1);\n if (index === undefined) {\n return;\n }\n const i = +index;\n const task = tasks.get(i);\n if (task) {\n task();\n tasks.delete(i);\n }\n },\n false,\n );\n\n return (task: Task) => {\n const i = getNewIndex();\n tasks.set(i, task);\n main.postMessage(MESSAGE_PREFIX + \":\" + i, { targetOrigin: \"*\" });\n return () => {\n tasks.delete(i);\n };\n };\n })();\n\n export const useSetImmediate = (() => {\n if (typeof window !== \"undefined\") {\n return new Error(\"setImmediate is not supported on the browser\");\n }\n if (typeof setImmediate === \"undefined\") {\n return new Error(\"setImmediate is not supported\");\n }\n\n return (task: Task) => {\n const id = setImmediate(task);\n return () => clearImmediate(id);\n };\n })();\n\n export const useSetTimeout = (() => {\n return (task: Task) => {\n const id = setTimeout(task, 0);\n return () => clearTimeout(id);\n };\n })();\n\n // queues the task in the macro tasks queue, so it doesn't\n // prevent the event loop from movin on the next tick\n export function runAsap<T = void>(task: Task<T>): AbortTask {\n // if on node use setImmediate\n if (!(useSetImmediate instanceof Error)) {\n return useSetImmediate(task);\n }\n // on browser use MessageChannel if available\n else if (!(useMessageChannel instanceof Error)) {\n return useMessageChannel(task);\n }\n // otherwise use window.postMessage\n else if (!(usePostMessage instanceof Error)) {\n return usePostMessage(task);\n }\n // fallback to setTimeout with 0 delay\n else {\n return useSetTimeout(task);\n }\n }\n\n export function runAsapAsync<T = void>(\n task: RunAsap.Task<Promise<T>>,\n queueMethod: RunAsap<void> = runAsap,\n ): Promise<T> {\n if (queueMethod instanceof Error) {\n throw new Error(\"queueMethod is not supported\", {\n cause: queueMethod,\n });\n }\n return new Promise((resolve, reject) => {\n queueMethod(() => {\n task().then(resolve).catch(reject);\n });\n });\n }\n}\n","import {\n DocumentDriveDocument,\n documentModel as DocumentDriveModel,\n} from \"document-model-libs/document-drive\";\nimport {\n Action,\n BaseAction,\n Document,\n DocumentOperations,\n Operation,\n OperationScope,\n} from \"document-model/document\";\n// import setAsap from 'setasap';\nimport { v4 as uuidv4 } from \"uuid\";\nimport { OperationError } from \"../server/error\";\nimport { DocumentDriveStorage, DocumentStorage } from \"../storage\";\nimport { RunAsap } from \"./run-asap\";\nexport * from \"./run-asap\";\n\nexport const runAsap = RunAsap.runAsap;\nexport const runAsapAsync = RunAsap.runAsapAsync;\n\nexport function isDocumentDriveStorage(\n document: DocumentStorage,\n): document is DocumentDriveStorage {\n return document.documentType === DocumentDriveModel.id;\n}\n\nexport function isDocumentDrive(\n document: Document,\n): document is DocumentDriveDocument {\n return document.documentType === DocumentDriveModel.id;\n}\n\nexport function mergeOperations<A extends Action = Action>(\n currentOperations: DocumentOperations<A>,\n newOperations: Operation<A | BaseAction>[],\n): DocumentOperations<A> {\n const minIndexByScope = Object.keys(currentOperations).reduce<\n Partial<Record<OperationScope, number>>\n >((acc, curr) => {\n const scope = curr as OperationScope;\n acc[scope] = currentOperations[scope].at(-1)?.index ?? 0;\n return acc;\n }, {});\n\n const conflictOp = newOperations.find(\n (op) => op.index < (minIndexByScope[op.scope] ?? 0),\n );\n if (conflictOp) {\n throw new OperationError(\n \"ERROR\",\n conflictOp,\n `Tried to add operation with index ${conflictOp.index} and document is at index ${minIndexByScope[conflictOp.scope]}`,\n );\n }\n\n return newOperations\n .sort((a, b) => a.index - b.index)\n .reduce<DocumentOperations<A>>((acc, curr) => {\n const existingOperations = acc[curr.scope] || [];\n return { ...acc, [curr.scope]: [...existingOperations, curr] };\n }, currentOperations);\n}\n\nexport function generateUUID(): string {\n return uuidv4();\n}\n\nexport function isNoopUpdate(\n operation: Operation,\n latestOperation?: Operation,\n) {\n if (!latestOperation) {\n return false;\n }\n\n const isNoopOp = operation.type === \"NOOP\";\n const isNoopLatestOp = latestOperation.type === \"NOOP\";\n const isSameIndexOp = operation.index === latestOperation.index;\n const isSkipOpGreaterThanLatestOp = operation.skip > latestOperation.skip;\n\n return (\n isNoopOp && isNoopLatestOp && isSameIndexOp && isSkipOpGreaterThanLatestOp\n );\n}\n\n// return true if dateA is before dateB\nexport function isBefore(dateA: Date | string, dateB: Date | string) {\n return new Date(dateA) < new Date(dateB);\n}\n","export type ILogger = Pick<\n Console,\n \"log\" | \"info\" | \"warn\" | \"error\" | \"debug\" | \"trace\"\n>;\nclass Logger implements ILogger {\n #logger: ILogger = console;\n\n set logger(logger: ILogger) {\n this.#logger = logger;\n }\n\n log(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.log(...data);\n }\n\n info(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.info(...data);\n }\n\n warn(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.warn(...data);\n }\n\n error(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.error(...data);\n }\n\n debug(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.debug(...data);\n }\n\n trace(...data: any[]): void {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return this.#logger.trace(...data);\n }\n}\n\nconst loggerInstance = new Logger();\n\nexport const logger: ILogger = loggerInstance;\nexport const setLogger = (logger: ILogger) => (loggerInstance.logger = logger);\n","import { utils } from \"document-model/document\";\n\nexport const {\n attachBranch,\n garbageCollect,\n groupOperationsByScope,\n merge,\n split,\n precedes,\n removeExistingOperations,\n reshuffleByTimestamp,\n sortOperations,\n addUndo,\n checkOperationsIntegrity,\n checkCleanedOperationsIntegrity,\n reshuffleByTimestampAndIndex,\n nextSkipNumber,\n prepareOperations,\n IntegrityIssueSubType,\n IntegrityIssueType,\n} = utils.documentHelpers;\n","import type { Document, OperationScope } from \"document-model/document\";\nimport { RevisionsFilter, StrandUpdate } from \"./types\";\n\nexport function buildRevisionsFilter(\n strands: StrandUpdate[],\n driveId: string,\n documentId: string,\n): RevisionsFilter {\n return strands.reduce<RevisionsFilter>((acc, s) => {\n if (!(s.driveId === driveId && s.documentId === documentId)) {\n return acc;\n }\n acc[s.scope] = s.operations[s.operations.length - 1]?.index ?? -1;\n return acc;\n }, {});\n}\n\nexport function filterOperationsByRevision(\n operations: Document[\"operations\"],\n revisions?: RevisionsFilter,\n): Document[\"operations\"] {\n if (!revisions) {\n return operations;\n }\n return (Object.keys(operations) as OperationScope[]).reduce<\n Document[\"operations\"]\n >((acc, scope) => {\n const revision = revisions[scope];\n if (revision !== undefined) {\n acc[scope] = operations[scope].filter((op) => op.index <= revision);\n }\n return acc;\n }, operations);\n}\n","import { Document, OperationScope } from \"document-model/document\";\nimport { logger } from \"../../../utils/logger\";\nimport {\n IBaseDocumentDriveServer,\n Listener,\n ListenerRevision,\n OperationUpdate,\n StrandUpdate,\n} from \"../../types\";\nimport { buildRevisionsFilter } from \"../../utils\";\nimport { ITransmitter } from \"./types\";\n\nexport interface IReceiver {\n transmit: (strands: InternalTransmitterUpdate[]) => Promise<void>;\n disconnect: () => Promise<void>;\n}\n\nexport type InternalTransmitterUpdate<\n T extends Document = Document,\n S extends OperationScope = OperationScope,\n> = {\n driveId: string;\n documentId: string;\n scope: S;\n branch: string;\n operations: OperationUpdate[];\n state: T[\"state\"][S];\n};\n\nexport interface IInternalTransmitter extends ITransmitter {\n setReceiver(receiver: IReceiver): void;\n}\n\nexport class InternalTransmitter implements ITransmitter {\n private drive: IBaseDocumentDriveServer;\n private listener: Listener;\n private receiver: IReceiver | undefined;\n\n constructor(listener: Listener, drive: IBaseDocumentDriveServer) {\n this.listener = listener;\n this.drive = drive;\n }\n\n async transmit(strands: StrandUpdate[]): Promise<ListenerRevision[]> {\n if (!this.receiver) {\n return [];\n }\n\n const retrievedDocuments = new Map<string, Document>();\n const updates: InternalTransmitterUpdate[] = [];\n for (const strand of strands) {\n let document = retrievedDocuments.get(\n `${strand.driveId}:${strand.documentId}`,\n );\n if (!document) {\n const revisions = buildRevisionsFilter(\n strands,\n strand.driveId,\n strand.documentId,\n );\n document = await (strand.documentId\n ? this.drive.getDocument(strand.driveId, strand.documentId, {\n revisions,\n })\n : this.drive.getDrive(strand.driveId, { revisions }));\n retrievedDocuments.set(\n `${strand.driveId}:${strand.documentId}`,\n document,\n );\n }\n updates.push({ ...strand, state: document.state[strand.scope] });\n }\n try {\n await this.receiver.transmit(updates);\n return strands.map(({ operations, ...s }) => ({\n ...s,\n status: \"SUCCESS\",\n revision: operations[operations.length - 1]?.index ?? -1,\n }));\n } catch (error) {\n logger.error(error);\n // TODO check which strand caused an error\n return strands.map(({ operations, ...s }) => ({\n ...s,\n status: \"ERROR\",\n revision: (operations[0]?.index ?? 0) - 1,\n }));\n }\n }\n\n setReceiver(receiver: IReceiver) {\n this.receiver = receiver;\n }\n\n async disconnect(): Promise<void> {\n await this.receiver?.disconnect();\n }\n}\n","import stringify from \"json-stringify-deterministic\";\nimport { gql, requestGraphql } from \"../../../utils/graphql\";\nimport { logger } from \"../../../utils/logger\";\nimport {\n IBaseDocumentDriveServer,\n Listener,\n ListenerRevision,\n StrandUpdate,\n} from \"../../types\";\nimport { ITransmitter, StrandUpdateSource } from \"./types\";\n\nexport class SwitchboardPushTransmitter implements ITransmitter {\n private drive: IBaseDocumentDriveServer;\n private listener: Listener;\n private targetURL: string;\n\n constructor(listener: Listener, drive: IBaseDocumentDriveServer) {\n this.listener = listener;\n this.drive = drive;\n this.targetURL = listener.callInfo!.data!;\n }\n\n async transmit(\n strands: StrandUpdate[],\n source: StrandUpdateSource,\n ): Promise<ListenerRevision[]> {\n if (\n source.type === \"trigger\" &&\n source.trigger.data?.url === this.targetURL\n ) {\n return strands.map((strand) => ({\n driveId: strand.driveId,\n documentId: strand.documentId,\n scope: strand.scope,\n branch: strand.branch,\n status: \"SUCCESS\",\n revision: strand.operations.at(-1)?.index ?? -1,\n }));\n }\n\n // Send Graphql mutation to switchboard\n try {\n const { pushUpdates } = await requestGraphql<{\n pushUpdates: ListenerRevision[];\n }>(\n this.targetURL,\n gql`\n mutation pushUpdates($strands: [InputStrandUpdate!]) {\n pushUpdates(strands: $strands) {\n driveId\n documentId\n scope\n branch\n status\n revision\n error\n }\n }\n `,\n {\n strands: strands.map((strand) => ({\n ...strand,\n operations: strand.operations.map((op) => ({\n ...op,\n input: stringify(op.input),\n })),\n })),\n },\n );\n\n if (!pushUpdates) {\n throw new Error(\"Couldn't update listener revision\");\n }\n\n return pushUpdates;\n } catch (e) {\n logger.error(e);\n throw e;\n }\n return [];\n }\n}\n","import {\n IDocumentDriveServer,\n InternalTransmitter,\n InternalTransmitterUpdate,\n Listener,\n} from \"document-drive\";\nimport { DocumentDriveDocument } from \"document-model-libs/document-drive\";\n\nexport type InternalListenerModule = {\n name: string;\n options: Omit<Listener, \"driveId\">;\n transmit: (strands: InternalTransmitterUpdate[]) => Promise<void>;\n};\n\nexport class InternalListenerManager {\n private driveServer: IDocumentDriveServer;\n private modules: InternalListenerModule[] = [];\n\n constructor(driveServer: IDocumentDriveServer) {\n this.driveServer = driveServer;\n driveServer.on(\"driveAdded\", this.#onDriveAdded.bind(this));\n }\n\n async #onDriveAdded(drive: DocumentDriveDocument) {\n await Promise.all(\n this.modules.map((module) =>\n this.driveServer.addInternalListener(\n drive.state.global.id,\n {\n transmit: (strands) => module.transmit(strands),\n disconnect: async () => {\n return Promise.resolve();\n },\n },\n { ...module.options, label: module.options.label ?? \"\" },\n ),\n ),\n );\n }\n\n async init() {\n const drives = await this.driveServer.getDrives();\n\n for (const { options, transmit } of this.modules) {\n if (!options || !transmit) {\n continue;\n }\n\n for (const driveId of drives) {\n try {\n const { listenerId } = options;\n const drive = await this.driveServer.getDrive(driveId);\n const moduleRegistered =\n drive.state.local.listeners.filter(\n (l) => l.listenerId === listenerId,\n ).length > 0;\n if (!moduleRegistered) {\n await this.driveServer.addInternalListener(\n driveId,\n {\n transmit: async (strands) => transmit(strands),\n disconnect: async () => Promise.resolve(),\n },\n {\n block: false,\n filter: options.filter,\n label: options.label!,\n listenerId,\n },\n );\n\n return;\n }\n\n const transmitter = await this.driveServer.getTransmitter(\n driveId,\n listenerId,\n );\n if (transmitter instanceof InternalTransmitter) {\n transmitter.setReceiver({\n transmit: async (strands: InternalTransmitterUpdate[]) => {\n await transmit(strands);\n return Promise.resolve();\n },\n disconnect: () => {\n console.log(`Disconnecting listener ${options.listenerId}`);\n return Promise.resolve();\n },\n });\n }\n } catch (e) {\n console.error(\n `Error while initializing listener ${options.listenerId} for drive ${driveId}`,\n e,\n );\n }\n }\n }\n }\n\n async registerInternalListener(module: InternalListenerModule) {\n if (this.modules.find((m) => m.name === module.name)) {\n return;\n }\n this.modules.push(module);\n await this.init();\n }\n}\n","import { buildSubgraphSchema } from \"@apollo/subgraph\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport { GraphQLResolverMap } from \"@apollo/subgraph/dist/schema-helper\";\nimport { typeDefs as scalarsTypeDefs } from \"@powerhousedao/scalars\";\nimport { parse } from \"graphql\";\n\nexport const createSchema = (\n documentDriveServer: IDocumentDriveServer,\n resolvers: GraphQLResolverMap,\n typeDefs: string,\n) =>\n buildSubgraphSchema([\n {\n typeDefs: getDocumentModelTypeDefs(documentDriveServer, typeDefs),\n resolvers,\n },\n ]);\n\nexport const getDocumentModelTypeDefs = (\n documentDriveServer: IDocumentDriveServer,\n typeDefs: string,\n) => {\n const documentModels = documentDriveServer.getDocumentModels();\n let dmSchema = \"\";\n documentModels.forEach(({ documentModel }) => {\n dmSchema += `\n ${documentModel.specifications\n .map((specification) =>\n specification.state.global.schema\n .replaceAll(\" Account \", ` ${documentModel.name}Account `)\n .replaceAll(`: Account`, `: ${documentModel.name}Account`)\n .replaceAll(`[Account!]!`, `[${documentModel.name}Account!]!`)\n .replaceAll(\"scalar DateTime\", \"\")\n .replaceAll(/input (.*?) {[\\s\\S]*?}/g, \"\"),\n )\n .join(\"\\n\")};\n \n ${documentModel.specifications\n .map((specification) =>\n specification.state.local.schema\n .replaceAll(\" Account \", ` ${documentModel.name}Account `)\n .replaceAll(`: Account`, `: ${documentModel.name}Account`)\n .replaceAll(`[Account!]!`, `[${documentModel.name}Account!]!`)\n .replaceAll(\"scalar DateTime\", \"\")\n .replaceAll(/input (.*?) {[\\s\\S]*?}/g, \"\")\n .replaceAll(\"type AccountSnapshotLocalState\", \"\")\n .replaceAll(\"type BudgetStatementLocalState\", \"\")\n .replaceAll(\"type ScopeFrameworkLocalState\", \"\"),\n )\n .join(\"\\n\")};\n \n type ${documentModel.name} implements IDocument {\n id: ID!\n name: String!\n documentType: String!\n revision: Int!\n created: DateTime!\n lastModified: DateTime!\n ${documentModel.name !== \"DocumentModel\" ? `state: ${documentModel.name}State!` : \"\"}\n }\\n`;\n });\n\n // add the mutation and query types\n const schema = `\n ${scalarsTypeDefs.join(\"\\n\")}\n \n interface IDocument {\n name: String!\n documentType: String!\n revision: Int!\n created: DateTime!\n lastModified: DateTime!\n \n }\n ${dmSchema}\n \n ${typeDefs}\n `;\n\n return parse(schema.replaceAll(\";\", \"\"));\n};\n","import { DriveInput } from \"document-drive\";\nimport { Context } from \"../types\";\n\nexport const resolvers = {\n Query: {\n drives: async (parent: unknown, args: unknown, ctx: Context) => {\n const drives = await ctx.driveServer.getDrives();\n return drives;\n },\n },\n Mutation: {\n addDrive: async (parent: unknown, args: DriveInput, ctx: Context) => {\n try {\n const drive = await ctx.driveServer.addDrive(args);\n return drive.state.global;\n } catch (e) {\n console.error(e);\n throw new Error(e as string);\n }\n },\n },\n};\n","import { GraphQLResolverMap } from \"@apollo/subgraph/dist/schema-helper\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport { readFileSync } from \"fs\";\nimport { dirname, resolve } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createSchema } from \"src/utils/create-schema\";\nimport { resolvers } from \"./resolvers\";\nimport schemaPath from \"./schema.graphql\";\n\nconst __dirname =\n import.meta.dirname ?? dirname(fileURLToPath(import.meta.url));\n\nconst typeDefs = readFileSync(resolve(__dirname, schemaPath), \"utf8\");\n\nexport const getSchema = (driveServer: IDocumentDriveServer) =>\n createSchema(driveServer, resolvers as GraphQLResolverMap, typeDefs);\n","import {\n generateUUID,\n ListenerRevision,\n PullResponderTransmitter,\n StrandUpdateGraphQL,\n} from \"document-drive\";\nimport {\n actions,\n DocumentDriveAction,\n Listener,\n ListenerFilter,\n TransmitterType,\n} from \"document-model-libs/document-drive\";\nimport { BaseAction, Operation } from \"document-model/document\";\nimport {\n DocumentModelInput,\n DocumentModelState,\n} from \"document-model/document-model\";\nimport { Context } from \"../types\";\n\nexport const resolvers = {\n Query: {\n drive: async (_: unknown, args: unknown, ctx: Context) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const drive = await ctx.driveServer.getDrive(ctx.driveId);\n return drive.state.global;\n },\n documents: async (_: unknown, args: unknown, ctx: Context) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const documents = await ctx.driveServer.getDocuments(ctx.driveId);\n return documents;\n },\n document: async (_: unknown, { id }: { id: string }, ctx: Context) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const document = await ctx.driveServer.getDocument(ctx.driveId, id);\n\n const dms = ctx.driveServer.getDocumentModels();\n const dm = dms.find(\n ({ documentModel }: { documentModel: DocumentModelState }) =>\n documentModel.id === document.documentType,\n );\n const globalState = document.state.global;\n if (!globalState) throw new Error(\"Document not found\");\n const response = {\n ...document,\n id,\n revision: document.revision.global,\n state: document.state.global,\n operations: document.operations.global.map((op: Operation) => ({\n ...op,\n inputText:\n typeof op.input === \"string\" ? op.input : JSON.stringify(op.input),\n })),\n initialState: document.initialState.state.global,\n __typename: dm?.documentModel.name,\n };\n return response;\n },\n system: () => ({ sync: {} }),\n },\n Mutation: {\n registerPullResponderListener: async (\n _: unknown,\n { filter }: { filter: ListenerFilter },\n ctx: Context,\n ) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const uuid = generateUUID();\n const listener: Listener = {\n block: false,\n callInfo: {\n data: \"\",\n name: \"PullResponder\",\n transmitterType: \"PullResponder\" as TransmitterType,\n },\n filter: {\n branch: filter.branch ?? [],\n documentId: filter.documentId ?? [],\n documentType: filter.documentType ?? [],\n scope: filter.scope ?? [],\n },\n label: `Pullresponder #${uuid}`,\n listenerId: uuid,\n system: false,\n };\n\n const result = await ctx.driveServer.queueDriveAction(\n ctx.driveId,\n actions.addListener({ listener }),\n );\n\n if (result.status !== \"SUCCESS\" && result.error) {\n throw new Error(\n `Listener couldn't be registered: ${result.error.message}`,\n );\n }\n\n return listener;\n },\n pushUpdates: async (\n _: unknown,\n { strands }: { strands: StrandUpdateGraphQL[] },\n ctx: Context,\n ) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const listenerRevisions: ListenerRevision[] = await Promise.all(\n strands.map(async (s) => {\n const operations =\n s.operations.map((o) => ({\n ...o,\n input: JSON.parse(o.input) as DocumentModelInput,\n skip: o.skip ?? 0,\n scope: s.scope,\n branch: \"main\",\n })) ?? [];\n\n const result = await (s.documentId !== undefined\n ? ctx.driveServer.queueOperations(\n s.driveId,\n s.documentId,\n operations,\n )\n : ctx.driveServer.queueDriveOperations(\n s.driveId,\n operations as Operation<DocumentDriveAction | BaseAction>[],\n ));\n\n const scopeOperations = result.document?.operations[s.scope] ?? [];\n if (scopeOperations.length === 0) {\n return {\n revision: -1,\n branch: s.branch,\n documentId: s.documentId ?? \"\",\n driveId: s.driveId,\n scope: s.scope,\n status: result.status,\n };\n }\n\n const revision = scopeOperations.slice().pop()?.index ?? -1;\n return {\n revision,\n branch: s.branch,\n documentId: s.documentId ?? \"\",\n driveId: s.driveId,\n scope: s.scope,\n status: result.status,\n error: result.error?.message || undefined,\n };\n }),\n );\n\n return listenerRevisions;\n },\n acknowledge: async (\n _: unknown,\n {\n listenerId,\n revisions,\n }: { listenerId: string; revisions: ListenerRevision[] },\n ctx: Context,\n ) => {\n if (!listenerId || !revisions) return false;\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const validEntries = revisions\n .filter((r) => r !== null)\n .map((e) => ({\n driveId: e.driveId,\n documentId: e.documentId,\n scope: e.scope,\n branch: e.branch,\n revision: e.revision,\n status: e.status,\n }));\n\n const transmitter = (await ctx.driveServer.getTransmitter(\n ctx.driveId,\n listenerId,\n )) as PullResponderTransmitter;\n const result = await transmitter.processAcknowledge(\n ctx.driveId ?? \"1\",\n listenerId,\n validEntries,\n );\n\n return result;\n },\n },\n System: {},\n Sync: {\n strands: async (\n _: unknown,\n { listenerId, since }: { listenerId: string; since: string | undefined },\n ctx: Context,\n ) => {\n if (!ctx.driveId) throw new Error(\"Drive ID is required\");\n const listener = (await ctx.driveServer.getTransmitter(\n ctx.driveId,\n listenerId,\n )) as PullResponderTransmitter;\n const strands = await listener.getStrands({ since });\n return strands.map((e) => ({\n driveId: e.driveId,\n documentId: e.documentId,\n scope: e.scope,\n branch: e.branch,\n operations: e.operations.map((o) => ({\n index: o.index,\n skip: o.skip,\n name: o.type,\n input: JSON.stringify(o.input),\n hash: o.hash,\n timestamp: o.timestamp,\n type: o.type,\n context: o.context,\n id: o.id,\n })),\n }));\n },\n },\n};\n","import { GraphQLResolverMap } from \"@apollo/subgraph/dist/schema-helper\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport { readFileSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { createSchema } from \"src/utils/create-schema\";\nimport { resolvers } from \"./resolvers\";\nimport schemaPath from \"./schema.graphql\";\n\nconst __dirname =\n import.meta.dirname ?? dirname(fileURLToPath(import.meta.url));\n\nconst typeDefs = readFileSync(resolve(__dirname, schemaPath), \"utf8\");\n\nexport const getSchema = (driveServer: IDocumentDriveServer) =>\n createSchema(driveServer, resolvers as GraphQLResolverMap, typeDefs);\n","import { getSchema as getSystemSchema } from \"./system/subgraph\";\nimport { getSchema as getDriveSchema } from \"./drive/subgraph\";\n\nexport * from \"./types\";\n\nexport const SUBGRAPH_REGISTRY = [\n {\n name: \"system\",\n getSchema: getSystemSchema,\n },\n {\n name: \"d/:drive\",\n getSchema: getDriveSchema,\n },\n];\n","import { ApolloServer } from \"@apollo/server\";\nimport { expressMiddleware } from \"@apollo/server/express4\";\nimport { ApolloServerPluginInlineTraceDisabled } from \"@apollo/server/plugin/disabled\";\nimport bodyParser from \"body-parser\";\nimport cors from \"cors\";\nimport { IDocumentDriveServer } from \"document-drive\";\nimport express, { IRouter, Router } from \"express\";\nimport {\n InternalListenerManager,\n InternalListenerModule,\n} from \"./internal-listener-manager\";\nimport { SUBGRAPH_REGISTRY } from \"./subgraphs\";\nimport { Context } from \"./types\";\nexport let reactorRouter: IRouter = Router();\n\nconst getLocalSubgraphConfig = (subgraphName: string) =>\n SUBGRAPH_REGISTRY.find((it) => it.name === subgraphName);\n\nlet listenerManager: InternalListenerManager | undefined;\n\nexport const getListenerManager = async (driveServer: IDocumentDriveServer) => {\n if (!listenerManager) {\n listenerManager = new InternalListenerManager(driveServer);\n await listenerManager.init();\n }\n return listenerManager;\n};\n\nexport const updateRouter = async (driveServer: IDocumentDriveServer) => {\n const newRouter = Router();\n newRouter.use(cors());\n newRouter.use(bodyParser.json());\n // Run each subgraph on the same http server, but at different paths\n for (const subgraph of SUBGRAPH_REGISTRY) {\n const subgraphConfig = getLocalSubgraphConfig(subgraph.name);\n if (!subgraphConfig) continue;\n\n // get schema\n const schema = subgraphConfig.getSchema(driveServer);\n\n // create apollo server\n const server = new ApolloServer({\n schema,\n introspection: true,\n plugins: [ApolloServerPluginInlineTraceDisabled()],\n });\n\n // start apollo server\n await server.start();\n\n // setup path\n const path = `/${subgraphConfig.name}`;\n newRouter.use(\n path,\n // @ts-ignore\n expressMiddleware(server, {\n context: ({ req }): Promise<Context> =>\n Promise.resolve({\n headers: req.headers,\n driveId: req.params.drive ?? undefined,\n driveServer,\n ...getAdditionalContextFields(),\n }),\n }),\n );\n console.log(`Setting up [${subgraphConfig.name}] subgraph at ${path}`);\n }\n\n listenerManager = await getListenerManager(driveServer);\n reactorRouter = newRouter;\n console.log(\"All subgraphs started.\");\n};\n\nlet docDriveServer: IDocumentDriveServer;\nexport const initReactorRouter = async (\n path: string,\n app: express.Express,\n driveServer: IDocumentDriveServer,\n) => {\n docDriveServer = driveServer;\n const models = driveServer.getDocumentModels();\n const driveModel = models.find(\n (it) => it.documentModel.name === \"DocumentDrive\",\n );\n\n if (!driveModel) {\n throw new Error(\"DocumentDrive model required\");\n }\n\n await updateRouter(driveServer);\n\n driveServer.on(\"documentModels\", () => {\n updateRouter(driveServer).catch((error: unknown) => console.error(error));\n });\n\n app.use(path, (req, res, next) => reactorRouter(req, res, next));\n};\n\nexport const addSubgraph = async (\n subgraph: (typeof SUBGRAPH_REGISTRY)[number],\n) => {\n SUBGRAPH_REGISTRY.unshift(subgraph);\n await updateRouter(docDriveServer);\n};\n\nexport const registerInternalListener = async (\n module: InternalListenerModule,\n) => {\n if (!listenerManager) {\n throw new Error(\"Listener manager not initialized\");\n }\n await listenerManager.registerInternalListener(module);\n};\n\nlet contextFields = {};\nexport const getAdditionalContextFields = () => {\n return contextFields;\n};\n\nexport const setAdditionalContextFields = (fields: Record<string, any>) => {\n contextFields = { ...contextFields, ...fields };\n};\n","import { IDocumentDriveServer } from \"document-drive\";\nimport express, { Express } from \"express\";\nimport { initReactorRouter } from \"./router\";\ntype Options = {\n express?: Express;\n port?: number;\n};\n\nconst DEFAULT_PORT = 4000;\n\nexport async function startAPI(\n reactor: IDocumentDriveServer,\n options: Options,\n) {\n const port = options.port ?? DEFAULT_PORT;\n const app = options.express ?? express();\n\n await initReactorRouter(\"/\", app, reactor);\n\n app.listen(port);\n\n return app;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/reactor-api",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -18,14 +18,13 @@
|
|
|
18
18
|
"@types/express": "^5.0.0",
|
|
19
19
|
"esbuild": "^0.24.0",
|
|
20
20
|
"graphql-tag": "^2.12.6",
|
|
21
|
-
"
|
|
22
|
-
"@powerhousedao/scalars": "1.
|
|
23
|
-
"document-
|
|
24
|
-
"document-model": "2.7.1"
|
|
21
|
+
"document-drive": "1.6.0",
|
|
22
|
+
"@powerhousedao/scalars": "1.10.0",
|
|
23
|
+
"document-model": "2.8.0"
|
|
25
24
|
},
|
|
26
25
|
"peerDependencies": {
|
|
27
|
-
"@powerhousedao/scalars": "1.
|
|
28
|
-
"document-model": "2.
|
|
26
|
+
"@powerhousedao/scalars": "1.10.0",
|
|
27
|
+
"document-model": "2.8.0"
|
|
29
28
|
},
|
|
30
29
|
"dependencies": {
|
|
31
30
|
"@apollo/server": "^4.11.0",
|
|
@@ -37,10 +36,11 @@
|
|
|
37
36
|
"graphql-request": "^6.1.0",
|
|
38
37
|
"nanoevents": "^9.0.0",
|
|
39
38
|
"uuid": "^9.0.1",
|
|
40
|
-
"document-model-libs": "1.117.
|
|
39
|
+
"document-model-libs": "1.117.1"
|
|
41
40
|
},
|
|
42
41
|
"scripts": {
|
|
43
42
|
"build": "tsup",
|
|
44
|
-
"test": "vitest"
|
|
43
|
+
"test": "vitest",
|
|
44
|
+
"lint": "eslint"
|
|
45
45
|
}
|
|
46
46
|
}
|
package/src/router.ts
CHANGED
|
@@ -61,7 +61,7 @@ export const updateRouter = async (driveServer: IDocumentDriveServer) => {
|
|
|
61
61
|
driveServer,
|
|
62
62
|
...getAdditionalContextFields(),
|
|
63
63
|
}),
|
|
64
|
-
})
|
|
64
|
+
}),
|
|
65
65
|
);
|
|
66
66
|
console.log(`Setting up [${subgraphConfig.name}] subgraph at ${path}`);
|
|
67
67
|
}
|
|
@@ -75,12 +75,12 @@ let docDriveServer: IDocumentDriveServer;
|
|
|
75
75
|
export const initReactorRouter = async (
|
|
76
76
|
path: string,
|
|
77
77
|
app: express.Express,
|
|
78
|
-
driveServer: IDocumentDriveServer
|
|
78
|
+
driveServer: IDocumentDriveServer,
|
|
79
79
|
) => {
|
|
80
80
|
docDriveServer = driveServer;
|
|
81
81
|
const models = driveServer.getDocumentModels();
|
|
82
82
|
const driveModel = models.find(
|
|
83
|
-
(it) => it.documentModel.name === "DocumentDrive"
|
|
83
|
+
(it) => it.documentModel.name === "DocumentDrive",
|
|
84
84
|
);
|
|
85
85
|
|
|
86
86
|
if (!driveModel) {
|
|
@@ -97,14 +97,14 @@ export const initReactorRouter = async (
|
|
|
97
97
|
};
|
|
98
98
|
|
|
99
99
|
export const addSubgraph = async (
|
|
100
|
-
subgraph: (typeof SUBGRAPH_REGISTRY)[number]
|
|
100
|
+
subgraph: (typeof SUBGRAPH_REGISTRY)[number],
|
|
101
101
|
) => {
|
|
102
102
|
SUBGRAPH_REGISTRY.unshift(subgraph);
|
|
103
103
|
await updateRouter(docDriveServer);
|
|
104
104
|
};
|
|
105
105
|
|
|
106
106
|
export const registerInternalListener = async (
|
|
107
|
-
module: InternalListenerModule
|
|
107
|
+
module: InternalListenerModule,
|
|
108
108
|
) => {
|
|
109
109
|
if (!listenerManager) {
|
|
110
110
|
throw new Error("Listener manager not initialized");
|
|
@@ -7,7 +7,7 @@ import { parse } from "graphql";
|
|
|
7
7
|
export const createSchema = (
|
|
8
8
|
documentDriveServer: IDocumentDriveServer,
|
|
9
9
|
resolvers: GraphQLResolverMap,
|
|
10
|
-
typeDefs: string
|
|
10
|
+
typeDefs: string,
|
|
11
11
|
) =>
|
|
12
12
|
buildSubgraphSchema([
|
|
13
13
|
{
|
|
@@ -18,7 +18,7 @@ export const createSchema = (
|
|
|
18
18
|
|
|
19
19
|
export const getDocumentModelTypeDefs = (
|
|
20
20
|
documentDriveServer: IDocumentDriveServer,
|
|
21
|
-
typeDefs: string
|
|
21
|
+
typeDefs: string,
|
|
22
22
|
) => {
|
|
23
23
|
const documentModels = documentDriveServer.getDocumentModels();
|
|
24
24
|
let dmSchema = "";
|
|
@@ -31,7 +31,7 @@ export const getDocumentModelTypeDefs = (
|
|
|
31
31
|
.replaceAll(`: Account`, `: ${documentModel.name}Account`)
|
|
32
32
|
.replaceAll(`[Account!]!`, `[${documentModel.name}Account!]!`)
|
|
33
33
|
.replaceAll("scalar DateTime", "")
|
|
34
|
-
.replaceAll(/input (.*?) {[\s\S]*?}/g, "")
|
|
34
|
+
.replaceAll(/input (.*?) {[\s\S]*?}/g, ""),
|
|
35
35
|
)
|
|
36
36
|
.join("\n")};
|
|
37
37
|
|
|
@@ -45,7 +45,7 @@ export const getDocumentModelTypeDefs = (
|
|
|
45
45
|
.replaceAll(/input (.*?) {[\s\S]*?}/g, "")
|
|
46
46
|
.replaceAll("type AccountSnapshotLocalState", "")
|
|
47
47
|
.replaceAll("type BudgetStatementLocalState", "")
|
|
48
|
-
.replaceAll("type ScopeFrameworkLocalState", "")
|
|
48
|
+
.replaceAll("type ScopeFrameworkLocalState", ""),
|
|
49
49
|
)
|
|
50
50
|
.join("\n")};
|
|
51
51
|
|