@powerhousedao/reactor-api 6.0.0-dev.15 → 6.0.0-dev.150
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/dist/codegen.js +1 -1
- package/dist/codegen.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/src/config.d.ts +1 -2
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +1 -5
- package/dist/src/config.js.map +1 -1
- package/dist/src/dev.d.ts +2 -0
- package/dist/src/dev.d.ts.map +1 -0
- package/dist/src/dev.js +51 -0
- package/dist/src/dev.js.map +1 -0
- package/dist/src/graphql/auth/resolvers.d.ts +17 -0
- package/dist/src/graphql/auth/resolvers.d.ts.map +1 -1
- package/dist/src/graphql/auth/resolvers.js +54 -0
- package/dist/src/graphql/auth/resolvers.js.map +1 -1
- package/dist/src/graphql/auth/schema.graphql +27 -5
- package/dist/src/graphql/auth/subgraph.d.ts +25 -0
- package/dist/src/graphql/auth/subgraph.d.ts.map +1 -1
- package/dist/src/graphql/auth/subgraph.js +46 -2
- package/dist/src/graphql/auth/subgraph.js.map +1 -1
- package/dist/src/graphql/base-subgraph.d.ts +11 -4
- package/dist/src/graphql/base-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/base-subgraph.js +94 -2
- package/dist/src/graphql/base-subgraph.js.map +1 -1
- package/dist/src/graphql/document-model-subgraph.d.ts +104 -45
- package/dist/src/graphql/document-model-subgraph.d.ts.map +1 -1
- package/dist/src/graphql/document-model-subgraph.js +323 -91
- package/dist/src/graphql/document-model-subgraph.js.map +1 -1
- package/dist/src/graphql/gateway/adapter-gateway-apollo.d.ts +23 -0
- package/dist/src/graphql/gateway/adapter-gateway-apollo.d.ts.map +1 -0
- package/dist/src/graphql/gateway/adapter-gateway-apollo.js +156 -0
- package/dist/src/graphql/gateway/adapter-gateway-apollo.js.map +1 -0
- package/dist/src/graphql/gateway/adapter-gateway-mercurius.d.ts +17 -0
- package/dist/src/graphql/gateway/adapter-gateway-mercurius.d.ts.map +1 -0
- package/dist/src/graphql/gateway/adapter-gateway-mercurius.js +154 -0
- package/dist/src/graphql/gateway/adapter-gateway-mercurius.js.map +1 -0
- package/dist/src/graphql/gateway/adapter-http-express.d.ts +25 -0
- package/dist/src/graphql/gateway/adapter-http-express.d.ts.map +1 -0
- package/dist/src/graphql/gateway/adapter-http-express.js +163 -0
- package/dist/src/graphql/gateway/adapter-http-express.js.map +1 -0
- package/dist/src/graphql/gateway/adapter-http-fastify.d.ts +23 -0
- package/dist/src/graphql/gateway/adapter-http-fastify.d.ts.map +1 -0
- package/dist/src/graphql/gateway/adapter-http-fastify.js +228 -0
- package/dist/src/graphql/gateway/adapter-http-fastify.js.map +1 -0
- package/dist/src/graphql/gateway/auth-middleware.d.ts +7 -0
- package/dist/src/graphql/gateway/auth-middleware.d.ts.map +1 -0
- package/dist/src/graphql/gateway/auth-middleware.js +15 -0
- package/dist/src/graphql/gateway/auth-middleware.js.map +1 -0
- package/dist/src/graphql/gateway/factory.d.ts +11 -0
- package/dist/src/graphql/gateway/factory.d.ts.map +1 -0
- package/dist/src/graphql/gateway/factory.js +21 -0
- package/dist/src/graphql/gateway/factory.js.map +1 -0
- package/dist/src/graphql/gateway/types.d.ts +100 -0
- package/dist/src/graphql/gateway/types.d.ts.map +1 -0
- package/dist/src/{sync → graphql/gateway}/types.js.map +1 -1
- package/dist/src/graphql/graphql-manager.d.ts +30 -12
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +282 -232
- package/dist/src/graphql/graphql-manager.js.map +1 -1
- package/dist/src/graphql/index.d.ts +5 -1
- package/dist/src/graphql/index.d.ts.map +1 -1
- package/dist/src/graphql/index.js +5 -1
- package/dist/src/graphql/index.js.map +1 -1
- package/dist/src/graphql/packages/index.d.ts +2 -0
- package/dist/src/graphql/packages/index.d.ts.map +1 -0
- package/dist/src/graphql/packages/index.js +2 -0
- package/dist/src/graphql/packages/index.js.map +1 -0
- package/dist/src/graphql/packages/resolvers.d.ts +31 -0
- package/dist/src/graphql/packages/resolvers.d.ts.map +1 -0
- package/dist/src/graphql/packages/resolvers.js +37 -0
- package/dist/src/graphql/packages/resolvers.js.map +1 -0
- package/dist/src/graphql/packages/schema.graphql +50 -0
- package/dist/src/graphql/packages/subgraph.d.ts +55 -0
- package/dist/src/graphql/packages/subgraph.d.ts.map +1 -0
- package/dist/src/graphql/packages/subgraph.js +73 -0
- package/dist/src/graphql/packages/subgraph.js.map +1 -0
- package/dist/src/graphql/playground.d.ts.map +1 -1
- package/dist/src/graphql/playground.js +19 -12
- package/dist/src/graphql/playground.js.map +1 -1
- package/dist/src/graphql/reactor/adapters.d.ts +10 -2
- package/dist/src/graphql/reactor/adapters.d.ts.map +1 -1
- package/dist/src/graphql/reactor/adapters.js +36 -1
- package/dist/src/graphql/reactor/adapters.js.map +1 -1
- package/dist/src/graphql/reactor/factory.d.ts +28 -7
- package/dist/src/graphql/reactor/factory.d.ts.map +1 -1
- package/dist/src/graphql/reactor/factory.js +1 -1
- package/dist/src/graphql/reactor/factory.js.map +1 -1
- package/dist/src/graphql/reactor/gen/graphql.d.ts +363 -84
- package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
- package/dist/src/graphql/reactor/gen/graphql.js +247 -12
- package/dist/src/graphql/reactor/gen/graphql.js.map +1 -1
- package/dist/src/graphql/reactor/index.d.ts +1 -1
- package/dist/src/graphql/reactor/index.d.ts.map +1 -1
- package/dist/src/graphql/reactor/index.js +1 -1
- package/dist/src/graphql/reactor/index.js.map +1 -1
- package/dist/src/graphql/reactor/operations.graphql +193 -3
- package/dist/src/graphql/reactor/requester.with-zod.d.ts.map +1 -1
- package/dist/src/graphql/reactor/requester.with-zod.js +114 -38
- package/dist/src/graphql/reactor/requester.with-zod.js.map +1 -1
- package/dist/src/graphql/reactor/resolvers.d.ts +90 -26
- package/dist/src/graphql/reactor/resolvers.d.ts.map +1 -1
- package/dist/src/graphql/reactor/resolvers.js +258 -77
- package/dist/src/graphql/reactor/resolvers.js.map +1 -1
- package/dist/src/graphql/reactor/schema.graphql +78 -32
- package/dist/src/graphql/reactor/subgraph.d.ts +2 -31
- package/dist/src/graphql/reactor/subgraph.d.ts.map +1 -1
- package/dist/src/graphql/reactor/subgraph.js +139 -213
- package/dist/src/graphql/reactor/subgraph.js.map +1 -1
- package/dist/src/graphql/reactor/validation.d.ts +266 -20
- package/dist/src/graphql/reactor/validation.d.ts.map +1 -1
- package/dist/src/graphql/reactor/validation.js +98 -4
- package/dist/src/graphql/reactor/validation.js.map +1 -1
- package/dist/src/graphql/sse.d.ts +35 -0
- package/dist/src/graphql/sse.d.ts.map +1 -0
- package/dist/src/graphql/sse.js +29 -0
- package/dist/src/graphql/sse.js.map +1 -0
- package/dist/src/graphql/system/index.d.ts +0 -1
- package/dist/src/graphql/system/index.d.ts.map +1 -1
- package/dist/src/graphql/system/index.js +0 -1
- package/dist/src/graphql/system/index.js.map +1 -1
- package/dist/src/graphql/types.d.ts +7 -8
- package/dist/src/graphql/types.d.ts.map +1 -1
- package/dist/src/graphql/utils.d.ts +3 -20
- package/dist/src/graphql/utils.d.ts.map +1 -1
- package/dist/src/graphql/utils.js +7 -35
- package/dist/src/graphql/utils.js.map +1 -1
- package/dist/src/migrations/002_add_document_protection.d.ts +4 -0
- package/dist/src/migrations/002_add_document_protection.d.ts.map +1 -0
- package/dist/src/migrations/002_add_document_protection.js +18 -0
- package/dist/src/migrations/002_add_document_protection.js.map +1 -0
- package/dist/src/migrations/index.d.ts.map +1 -1
- package/dist/src/migrations/index.js +2 -0
- package/dist/src/migrations/index.js.map +1 -1
- package/dist/src/packages/http-loader.d.ts +59 -0
- package/dist/src/packages/http-loader.d.ts.map +1 -0
- package/dist/src/packages/http-loader.js +203 -0
- package/dist/src/packages/http-loader.js.map +1 -0
- package/dist/src/packages/https-hooks.d.mts +37 -0
- package/dist/src/packages/https-hooks.d.mts.map +1 -0
- package/dist/src/packages/https-hooks.mjs +95 -0
- package/dist/src/packages/https-hooks.mjs.map +1 -0
- package/dist/src/packages/import-loader.d.ts +4 -6
- package/dist/src/packages/import-loader.d.ts.map +1 -1
- package/dist/src/packages/import-loader.js +4 -18
- package/dist/src/packages/import-loader.js.map +1 -1
- package/dist/src/packages/package-manager.d.ts +3 -4
- package/dist/src/packages/package-manager.d.ts.map +1 -1
- package/dist/src/packages/package-manager.js +10 -7
- package/dist/src/packages/package-manager.js.map +1 -1
- package/dist/src/packages/types.d.ts +8 -8
- package/dist/src/packages/types.d.ts.map +1 -1
- package/dist/src/packages/util.d.ts +4 -5
- package/dist/src/packages/util.d.ts.map +1 -1
- package/dist/src/packages/util.js +2 -14
- package/dist/src/packages/util.js.map +1 -1
- package/dist/src/packages/vite-loader.d.ts +12 -11
- package/dist/src/packages/vite-loader.d.ts.map +1 -1
- package/dist/src/packages/vite-loader.js +20 -21
- package/dist/src/packages/vite-loader.js.map +1 -1
- package/dist/src/server.d.ts +15 -33
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +164 -244
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +3 -18
- package/dist/src/services/auth.service.d.ts.map +1 -1
- package/dist/src/services/auth.service.js +38 -72
- package/dist/src/services/auth.service.js.map +1 -1
- package/dist/src/services/authorization.service.d.ts +70 -0
- package/dist/src/services/authorization.service.d.ts.map +1 -0
- package/dist/src/services/authorization.service.js +155 -0
- package/dist/src/services/authorization.service.js.map +1 -0
- package/dist/src/services/document-permission.service.d.ts +47 -7
- package/dist/src/services/document-permission.service.d.ts.map +1 -1
- package/dist/src/services/document-permission.service.js +162 -7
- package/dist/src/services/document-permission.service.js.map +1 -1
- package/dist/src/services/package-management.service.d.ts +32 -0
- package/dist/src/services/package-management.service.d.ts.map +1 -0
- package/dist/src/services/package-management.service.js +95 -0
- package/dist/src/services/package-management.service.js.map +1 -0
- package/dist/src/services/package-storage.d.ts +23 -0
- package/dist/src/services/package-storage.d.ts.map +1 -0
- package/dist/src/services/package-storage.js +19 -0
- package/dist/src/services/package-storage.js.map +1 -0
- package/dist/src/tracing.d.ts.map +1 -1
- package/dist/src/tracing.js +25 -1
- package/dist/src/tracing.js.map +1 -1
- package/dist/src/types.d.ts +13 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/create-schema.d.ts +31 -6
- package/dist/src/utils/create-schema.d.ts.map +1 -1
- package/dist/src/utils/create-schema.js +446 -40
- package/dist/src/utils/create-schema.js.map +1 -1
- package/dist/src/utils/db.d.ts +8 -0
- package/dist/src/utils/db.d.ts.map +1 -1
- package/dist/src/utils/db.js.map +1 -1
- package/dist/test/auth-chain.test.d.ts +12 -0
- package/dist/test/auth-chain.test.d.ts.map +1 -0
- package/dist/test/auth-chain.test.js +157 -0
- package/dist/test/auth-chain.test.js.map +1 -0
- package/dist/test/auth.service.test.d.ts +10 -0
- package/dist/test/auth.service.test.d.ts.map +1 -0
- package/dist/test/auth.service.test.js +141 -0
- package/dist/test/auth.service.test.js.map +1 -0
- package/dist/test/authorization.service.test.d.ts +2 -0
- package/dist/test/authorization.service.test.d.ts.map +1 -0
- package/dist/test/authorization.service.test.js +252 -0
- package/dist/test/authorization.service.test.js.map +1 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts +2 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.d.ts.map +1 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.js +204 -0
- package/dist/test/connect-switchboard-reshuffle-convergence.test.js.map +1 -0
- package/dist/test/connect-switchboard-sync.test.d.ts +2 -0
- package/dist/test/connect-switchboard-sync.test.d.ts.map +1 -0
- package/dist/test/connect-switchboard-sync.test.js +633 -0
- package/dist/test/connect-switchboard-sync.test.js.map +1 -0
- package/dist/test/document-drive-subgraph.test.d.ts +2 -0
- package/dist/test/document-drive-subgraph.test.d.ts.map +1 -0
- package/dist/test/document-drive-subgraph.test.js +244 -0
- package/dist/test/document-drive-subgraph.test.js.map +1 -0
- package/dist/test/document-model-subgraph-permissions.test.d.ts +2 -0
- package/dist/test/document-model-subgraph-permissions.test.d.ts.map +1 -0
- package/dist/test/document-model-subgraph-permissions.test.js +587 -0
- package/dist/test/document-model-subgraph-permissions.test.js.map +1 -0
- package/dist/test/drive-info-endpoint.test.d.ts +2 -0
- package/dist/test/drive-info-endpoint.test.d.ts.map +1 -0
- package/dist/test/drive-info-endpoint.test.js +123 -0
- package/dist/test/drive-info-endpoint.test.js.map +1 -0
- package/dist/test/fault-injection-sync.test.d.ts +2 -0
- package/dist/test/fault-injection-sync.test.d.ts.map +1 -0
- package/dist/test/fault-injection-sync.test.js +197 -0
- package/dist/test/fault-injection-sync.test.js.map +1 -0
- package/dist/test/gateway/adapter-gateway-apollo.test.d.ts +2 -0
- package/dist/test/gateway/adapter-gateway-apollo.test.d.ts.map +1 -0
- package/dist/test/gateway/adapter-gateway-apollo.test.js +206 -0
- package/dist/test/gateway/adapter-gateway-apollo.test.js.map +1 -0
- package/dist/test/gateway/adapter-gateway-mercurius.test.d.ts +2 -0
- package/dist/test/gateway/adapter-gateway-mercurius.test.d.ts.map +1 -0
- package/dist/test/gateway/adapter-gateway-mercurius.test.js +23 -0
- package/dist/test/gateway/adapter-gateway-mercurius.test.js.map +1 -0
- package/dist/test/gateway/adapter-http-express.test.d.ts +2 -0
- package/dist/test/gateway/adapter-http-express.test.d.ts.map +1 -0
- package/dist/test/gateway/adapter-http-express.test.js +17 -0
- package/dist/test/gateway/adapter-http-express.test.js.map +1 -0
- package/dist/test/gateway/adapter-http-fastify.test.d.ts +2 -0
- package/dist/test/gateway/adapter-http-fastify.test.d.ts.map +1 -0
- package/dist/test/gateway/adapter-http-fastify.test.js +17 -0
- package/dist/test/gateway/adapter-http-fastify.test.js.map +1 -0
- package/dist/test/gateway/auth-middleware.test.d.ts +8 -0
- package/dist/test/gateway/auth-middleware.test.d.ts.map +1 -0
- package/dist/test/gateway/auth-middleware.test.js +73 -0
- package/dist/test/gateway/auth-middleware.test.js.map +1 -0
- package/dist/test/gateway/gateway-adapter-contract.d.ts +30 -0
- package/dist/test/gateway/gateway-adapter-contract.d.ts.map +1 -0
- package/dist/test/gateway/gateway-adapter-contract.js +347 -0
- package/dist/test/gateway/gateway-adapter-contract.js.map +1 -0
- package/dist/test/gateway/http-adapter-contract.d.ts +30 -0
- package/dist/test/gateway/http-adapter-contract.d.ts.map +1 -0
- package/dist/test/gateway/http-adapter-contract.js +277 -0
- package/dist/test/gateway/http-adapter-contract.js.map +1 -0
- package/dist/test/graphql-manager.test.d.ts +12 -0
- package/dist/test/graphql-manager.test.d.ts.map +1 -0
- package/dist/test/graphql-manager.test.js +576 -0
- package/dist/test/graphql-manager.test.js.map +1 -0
- package/dist/test/index.d.ts +0 -1
- package/dist/test/index.d.ts.map +1 -1
- package/dist/test/index.js +0 -1
- package/dist/test/index.js.map +1 -1
- package/dist/test/permissions-integration.test.js +6 -20
- package/dist/test/permissions-integration.test.js.map +1 -1
- package/dist/test/push-backfill.test.d.ts +2 -0
- package/dist/test/push-backfill.test.d.ts.map +1 -0
- package/dist/test/push-backfill.test.js +299 -0
- package/dist/test/push-backfill.test.js.map +1 -0
- package/dist/test/reactor-adapters.test.js +3 -2
- package/dist/test/reactor-adapters.test.js.map +1 -1
- package/dist/test/reactor-client.test.js +172 -13
- package/dist/test/reactor-client.test.js.map +1 -1
- package/dist/test/reactor-resolvers.test.js +11 -13
- package/dist/test/reactor-resolvers.test.js.map +1 -1
- package/dist/test/reactor-subgraph-permissions.test.js +7 -36
- package/dist/test/reactor-subgraph-permissions.test.js.map +1 -1
- package/dist/test/subscriptions-sse.test.d.ts +2 -0
- package/dist/test/subscriptions-sse.test.d.ts.map +1 -0
- package/dist/test/subscriptions-sse.test.js +264 -0
- package/dist/test/subscriptions-sse.test.js.map +1 -0
- package/dist/test/subscriptions.test.js +2 -0
- package/dist/test/subscriptions.test.js.map +1 -1
- package/dist/test/utils/gql-resolver-bridge.d.ts +4 -1
- package/dist/test/utils/gql-resolver-bridge.d.ts.map +1 -1
- package/dist/test/utils/gql-resolver-bridge.js +36 -7
- package/dist/test/utils/gql-resolver-bridge.js.map +1 -1
- package/dist/test/utils.d.ts +1 -5
- package/dist/test/utils.d.ts.map +1 -1
- package/dist/test/utils.js +0 -10
- package/dist/test/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vitest.config.d.ts.map +1 -1
- package/dist/vitest.config.js +1 -0
- package/dist/vitest.config.js.map +1 -1
- package/package.json +64 -59
- package/dist/src/graphql/drive-subgraph.d.ts +0 -25
- package/dist/src/graphql/drive-subgraph.d.ts.map +0 -1
- package/dist/src/graphql/drive-subgraph.js +0 -487
- package/dist/src/graphql/drive-subgraph.js.map +0 -1
- package/dist/src/graphql/system/system-subgraph.d.ts +0 -49
- package/dist/src/graphql/system/system-subgraph.d.ts.map +0 -1
- package/dist/src/graphql/system/system-subgraph.js +0 -130
- package/dist/src/graphql/system/system-subgraph.js.map +0 -1
- package/dist/src/sync/types.d.ts +0 -10
- package/dist/src/sync/types.d.ts.map +0 -1
- package/dist/src/sync/utils.d.ts +0 -7
- package/dist/src/sync/utils.d.ts.map +0 -1
- package/dist/src/sync/utils.js +0 -78
- package/dist/src/sync/utils.js.map +0 -1
- package/dist/src/utils/auth.d.ts +0 -3
- package/dist/src/utils/auth.d.ts.map +0 -1
- package/dist/src/utils/auth.js +0 -19
- package/dist/src/utils/auth.js.map +0 -1
- package/dist/test/benchmarks/load.bench.d.ts +0 -2
- package/dist/test/benchmarks/load.bench.d.ts.map +0 -1
- package/dist/test/benchmarks/load.bench.js +0 -73
- package/dist/test/benchmarks/load.bench.js.map +0 -1
- package/dist/test/benchmarks/sync.bench.d.ts +0 -2
- package/dist/test/benchmarks/sync.bench.d.ts.map +0 -1
- package/dist/test/benchmarks/sync.bench.js +0 -119
- package/dist/test/benchmarks/sync.bench.js.map +0 -1
- package/dist/test/drive-handlers.d.ts +0 -4
- package/dist/test/drive-handlers.d.ts.map +0 -1
- package/dist/test/drive-handlers.js +0 -39
- package/dist/test/drive-handlers.js.map +0 -1
- package/dist/test/drive-subgraph-permissions.test.d.ts +0 -2
- package/dist/test/drive-subgraph-permissions.test.d.ts.map +0 -1
- package/dist/test/drive-subgraph-permissions.test.js +0 -195
- package/dist/test/drive-subgraph-permissions.test.js.map +0 -1
- package/dist/test/drive.test.d.ts +0 -2
- package/dist/test/drive.test.d.ts.map +0 -1
- package/dist/test/drive.test.js +0 -142
- package/dist/test/drive.test.js.map +0 -1
- package/dist/test/identity-integration.test.d.ts +0 -2
- package/dist/test/identity-integration.test.d.ts.map +0 -1
- package/dist/test/identity-integration.test.js +0 -349
- package/dist/test/identity-integration.test.js.map +0 -1
- package/dist/test/pull-responder-transmitter.test.d.ts +0 -2
- package/dist/test/pull-responder-transmitter.test.d.ts.map +0 -1
- package/dist/test/pull-responder-transmitter.test.js +0 -220
- package/dist/test/pull-responder-transmitter.test.js.map +0 -1
- package/dist/test/push-transmitter.test.d.ts +0 -2
- package/dist/test/push-transmitter.test.d.ts.map +0 -1
- package/dist/test/push-transmitter.test.js +0 -179
- package/dist/test/push-transmitter.test.js.map +0 -1
- package/dist/test/system.test.d.ts +0 -2
- package/dist/test/system.test.d.ts.map +0 -1
- package/dist/test/system.test.js +0 -211
- package/dist/test/system.test.js.map +0 -1
- package/dist/test/three-reactor-gql-sync.test.d.ts +0 -2
- package/dist/test/three-reactor-gql-sync.test.d.ts.map +0 -1
- package/dist/test/three-reactor-gql-sync.test.js +0 -368
- package/dist/test/three-reactor-gql-sync.test.js.map +0 -1
- package/dist/test/two-reactor-gql-sync.test.d.ts +0 -2
- package/dist/test/two-reactor-gql-sync.test.d.ts.map +0 -1
- package/dist/test/two-reactor-gql-sync.test.js +0 -348
- package/dist/test/two-reactor-gql-sync.test.js.map +0 -1
- /package/dist/src/{sync → graphql/gateway}/types.js +0 -0
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
import type { NextFunction, Request, Response } from "express";
|
|
2
1
|
export interface AuthConfig {
|
|
3
2
|
enabled: boolean;
|
|
4
|
-
guests: string[];
|
|
5
|
-
users: string[];
|
|
6
3
|
admins: string[];
|
|
7
|
-
freeEntry: boolean;
|
|
8
4
|
cacheTtl?: number;
|
|
9
5
|
skipCredentialVerification?: boolean;
|
|
10
6
|
}
|
|
@@ -13,20 +9,15 @@ export interface User {
|
|
|
13
9
|
chainId: number;
|
|
14
10
|
networkId: string;
|
|
15
11
|
}
|
|
16
|
-
export interface
|
|
12
|
+
export interface AuthContext {
|
|
17
13
|
user?: User;
|
|
18
14
|
admins: string[];
|
|
19
|
-
|
|
20
|
-
guests: string[];
|
|
21
|
-
freeEntry: boolean;
|
|
15
|
+
auth_enabled: boolean;
|
|
22
16
|
}
|
|
23
17
|
export declare class AuthService {
|
|
24
18
|
private readonly config;
|
|
25
19
|
constructor(config: AuthConfig);
|
|
26
|
-
|
|
27
|
-
* Middleware function to authenticate requests
|
|
28
|
-
*/
|
|
29
|
-
authenticate(req: AuthenticatedRequest, res: Response, next: NextFunction): Promise<void>;
|
|
20
|
+
authenticateRequest(request: globalThis.Request): Promise<AuthContext | globalThis.Response>;
|
|
30
21
|
authenticateWebSocketConnection(connectionParams: Record<string, unknown>): Promise<User | null>;
|
|
31
22
|
/**
|
|
32
23
|
* Verify the auth bearer token
|
|
@@ -36,16 +27,10 @@ export declare class AuthService {
|
|
|
36
27
|
* Extract user information from verification result
|
|
37
28
|
*/
|
|
38
29
|
private extractUserFromVerification;
|
|
39
|
-
/**
|
|
40
|
-
* Check if user address is in allowed lists
|
|
41
|
-
*/
|
|
42
|
-
private isUserAllowed;
|
|
43
30
|
/**
|
|
44
31
|
* Get additional context fields for GraphQL
|
|
45
32
|
*/
|
|
46
33
|
getAdditionalContextFields(): {
|
|
47
|
-
isGuest: (address: string) => boolean;
|
|
48
|
-
isUser: (address: string) => boolean;
|
|
49
34
|
isAdmin: (address: string) => boolean;
|
|
50
35
|
};
|
|
51
36
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;gBAExB,MAAM,EAAE,UAAU;IAIxB,mBAAmB,CACvB,OAAO,EAAE,UAAU,CAAC,OAAO,GAC1B,OAAO,CAAC,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC;IAsDvC,+BAA+B,CACnC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IA4CvB;;OAEG;YACW,WAAW;IAIzB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAqBnC;;OAEG;IACH,0BAA0B;2BAQH,MAAM;;IAM7B;;OAEG;IACH,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI;;;;;;;;;IAY1B;;OAEG;YACW,sBAAsB;CAgCrC"}
|
|
@@ -1,61 +1,54 @@
|
|
|
1
|
-
import { verifyAuthBearerToken } from "@renown/sdk";
|
|
1
|
+
import { verifyAuthBearerToken, } from "@renown/sdk";
|
|
2
2
|
export class AuthService {
|
|
3
3
|
config;
|
|
4
4
|
constructor(config) {
|
|
5
5
|
this.config = config;
|
|
6
6
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
req.guests = this.config.guests;
|
|
21
|
-
req.auth_enabled = this.config.enabled;
|
|
22
|
-
req.freeEntry = this.config.freeEntry;
|
|
23
|
-
const token = req.headers.authorization?.split(" ")[1];
|
|
7
|
+
async authenticateRequest(request) {
|
|
8
|
+
if (!this.config.enabled) {
|
|
9
|
+
return { user: undefined, admins: [], auth_enabled: false };
|
|
10
|
+
}
|
|
11
|
+
const method = request.method;
|
|
12
|
+
if (method === "OPTIONS" || method === "GET") {
|
|
13
|
+
return {
|
|
14
|
+
user: undefined,
|
|
15
|
+
admins: this.config.admins,
|
|
16
|
+
auth_enabled: true,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const token = request.headers.get("authorization")?.split(" ")[1];
|
|
24
20
|
if (!token) {
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
return {
|
|
22
|
+
user: undefined,
|
|
23
|
+
admins: this.config.admins,
|
|
24
|
+
auth_enabled: true,
|
|
25
|
+
};
|
|
27
26
|
}
|
|
28
27
|
try {
|
|
29
|
-
const verified =
|
|
28
|
+
const verified = await this.verifyToken(token);
|
|
30
29
|
if (!verified) {
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
return new Response(JSON.stringify({ error: "Verification failed" }), {
|
|
31
|
+
status: 401,
|
|
32
|
+
});
|
|
33
33
|
}
|
|
34
34
|
const user = this.extractUserFromVerification(verified);
|
|
35
35
|
if (!user) {
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
return new Response(JSON.stringify({ error: "Missing credentials" }), {
|
|
37
|
+
status: 401,
|
|
38
|
+
});
|
|
38
39
|
}
|
|
39
|
-
// Verify that the credentials still exist on the Renown API
|
|
40
|
-
// This can be skipped via config (useful for testing or when Renown API is unavailable)
|
|
41
40
|
if (!this.config.skipCredentialVerification) {
|
|
42
41
|
const credentialExists = await this.verifyCredentialExists(user.address, user.chainId, verified.issuer);
|
|
43
42
|
if (!credentialExists) {
|
|
44
|
-
|
|
45
|
-
return;
|
|
43
|
+
return new Response(JSON.stringify({ error: "Credentials no longer valid" }), { status: 401 });
|
|
46
44
|
}
|
|
47
45
|
}
|
|
48
|
-
|
|
49
|
-
// Note: We no longer block users here based on global allowed lists.
|
|
50
|
-
// The resolver layer handles authorization based on:
|
|
51
|
-
// 1. Global roles (admin/user/guest) for unrestricted access
|
|
52
|
-
// 2. Document-level permissions (direct or via groups) for specific documents
|
|
53
|
-
// This allows users who have document-specific permissions (e.g., via groups)
|
|
54
|
-
// to access those documents even if they're not in the global allowed lists.
|
|
55
|
-
next();
|
|
46
|
+
return { user, admins: this.config.admins, auth_enabled: true };
|
|
56
47
|
}
|
|
57
48
|
catch {
|
|
58
|
-
|
|
49
|
+
return new Response(JSON.stringify({ error: "Authentication failed" }), {
|
|
50
|
+
status: 401,
|
|
51
|
+
});
|
|
59
52
|
}
|
|
60
53
|
}
|
|
61
54
|
async authenticateWebSocketConnection(connectionParams) {
|
|
@@ -70,7 +63,7 @@ export class AuthService {
|
|
|
70
63
|
if (!token) {
|
|
71
64
|
throw new Error("Invalid authorization format");
|
|
72
65
|
}
|
|
73
|
-
const verified =
|
|
66
|
+
const verified = await this.verifyToken(token);
|
|
74
67
|
if (!verified) {
|
|
75
68
|
throw new Error("Token verification failed");
|
|
76
69
|
}
|
|
@@ -100,10 +93,8 @@ export class AuthService {
|
|
|
100
93
|
* Extract user information from verification result
|
|
101
94
|
*/
|
|
102
95
|
extractUserFromVerification(verified) {
|
|
103
|
-
if (!verified)
|
|
104
|
-
return null;
|
|
105
96
|
try {
|
|
106
|
-
const { address, chainId, networkId } = verified.verifiableCredential
|
|
97
|
+
const { address, chainId, networkId } = verified.verifiableCredential.credentialSubject;
|
|
107
98
|
if (!address || !chainId || !networkId) {
|
|
108
99
|
return null;
|
|
109
100
|
}
|
|
@@ -117,34 +108,16 @@ export class AuthService {
|
|
|
117
108
|
return null;
|
|
118
109
|
}
|
|
119
110
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Check if user address is in allowed lists
|
|
122
|
-
*/
|
|
123
|
-
isUserAllowed(address) {
|
|
124
|
-
const all = [
|
|
125
|
-
...this.config.admins,
|
|
126
|
-
...this.config.users,
|
|
127
|
-
...this.config.guests,
|
|
128
|
-
];
|
|
129
|
-
return all.includes(address.toLocaleLowerCase()) || this.config.freeEntry;
|
|
130
|
-
}
|
|
131
111
|
/**
|
|
132
112
|
* Get additional context fields for GraphQL
|
|
133
113
|
*/
|
|
134
114
|
getAdditionalContextFields() {
|
|
135
115
|
if (!this.config.enabled) {
|
|
136
116
|
return {
|
|
137
|
-
|
|
138
|
-
isUser: (address) => true,
|
|
139
|
-
isAdmin: (address) => true,
|
|
117
|
+
isAdmin: () => true,
|
|
140
118
|
};
|
|
141
119
|
}
|
|
142
120
|
return {
|
|
143
|
-
isGuest: (address) => this.config.enabled &&
|
|
144
|
-
(this.config.freeEntry ||
|
|
145
|
-
this.config.guests?.includes(address.toLowerCase())),
|
|
146
|
-
isUser: (address) => this.config.enabled &&
|
|
147
|
-
this.config.users?.includes(address.toLowerCase()),
|
|
148
121
|
isAdmin: (address) => this.config.enabled &&
|
|
149
122
|
this.config.admins?.includes(address.toLowerCase()),
|
|
150
123
|
};
|
|
@@ -166,28 +139,21 @@ export class AuthService {
|
|
|
166
139
|
/**
|
|
167
140
|
* Verify that the credential still exists on the Renown API
|
|
168
141
|
*/
|
|
169
|
-
async verifyCredentialExists(address, chainId,
|
|
170
|
-
const url = `https://www.renown.id/api/auth/credential?address=${address}&chainId=${chainId}&connectId=${
|
|
171
|
-
console.log("url", url);
|
|
142
|
+
async verifyCredentialExists(address, chainId, appId) {
|
|
143
|
+
const url = `https://www.renown.id/api/auth/credential?address=${address}&chainId=${chainId}&connectId=${appId}&appId=${appId}`;
|
|
172
144
|
try {
|
|
173
145
|
const response = await fetch(url, {
|
|
174
146
|
method: "GET",
|
|
175
147
|
});
|
|
176
148
|
const body = (await response.json());
|
|
177
149
|
const credential = body.credential;
|
|
178
|
-
const
|
|
150
|
+
const appIdVerfied = credential.credentialSubject.id;
|
|
179
151
|
const addressVerfied = credential.issuer.id.split(":")[4];
|
|
180
152
|
const chainIdVerfied = credential.issuer.id.split(":")[3];
|
|
181
153
|
if (response.status !== 200) {
|
|
182
154
|
return false;
|
|
183
155
|
}
|
|
184
|
-
|
|
185
|
-
console.log("connectId", connectId);
|
|
186
|
-
console.log("addressVerfied", addressVerfied);
|
|
187
|
-
console.log("address", address);
|
|
188
|
-
console.log("chainIdVerfied", chainIdVerfied);
|
|
189
|
-
console.log("chainId", chainId);
|
|
190
|
-
return (connectIdVerfied === connectId &&
|
|
156
|
+
return (appIdVerfied === appId &&
|
|
191
157
|
addressVerfied.toLocaleLowerCase() === address.toLocaleLowerCase() &&
|
|
192
158
|
chainIdVerfied === chainId.toString());
|
|
193
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../src/services/auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { DocumentPermissionService, GetParentIdsFn } from "./document-permission.service.js";
|
|
2
|
+
export interface AuthorizationConfig {
|
|
3
|
+
admins: string[];
|
|
4
|
+
defaultProtection: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Central authorization service — single source of truth for all permission checks.
|
|
8
|
+
*
|
|
9
|
+
* Authorization model:
|
|
10
|
+
* 1. Supreme admin (ADMINS env) → ALLOW ALL
|
|
11
|
+
* 2. Is document protected?
|
|
12
|
+
* a. NOT protected:
|
|
13
|
+
* - READ: anyone (even anonymous) → ALLOW
|
|
14
|
+
* - WRITE: authenticated user → ALLOW
|
|
15
|
+
* b. PROTECTED:
|
|
16
|
+
* - READ: requires explicit READ/WRITE/ADMIN grant (direct or via group/parent)
|
|
17
|
+
* - WRITE: requires explicit WRITE/ADMIN grant (direct or via group/parent)
|
|
18
|
+
* 3. Operation restricted? → Check OperationUserPermission
|
|
19
|
+
* 4. Document owner = implicit ADMIN
|
|
20
|
+
* 5. Drive protected = all children effectively protected
|
|
21
|
+
*/
|
|
22
|
+
export declare class AuthorizationService {
|
|
23
|
+
private readonly documentPermissionService;
|
|
24
|
+
readonly config: AuthorizationConfig;
|
|
25
|
+
constructor(documentPermissionService: DocumentPermissionService, config: AuthorizationConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Check if a user is a supreme admin (from ADMINS env var).
|
|
28
|
+
*/
|
|
29
|
+
isSupremeAdmin(userAddress?: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Check if a user can read a document.
|
|
32
|
+
*
|
|
33
|
+
* - Supreme admin → yes
|
|
34
|
+
* - Not protected → anyone can read (even anonymous)
|
|
35
|
+
* - Protected → requires READ/WRITE/ADMIN grant (direct, group, or parent inheritance)
|
|
36
|
+
* - Owner → yes (implicit ADMIN)
|
|
37
|
+
*/
|
|
38
|
+
canRead(documentId: string, userAddress?: string, getParentIds?: GetParentIdsFn): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Check if a user can write to a document.
|
|
41
|
+
*
|
|
42
|
+
* - Supreme admin → yes
|
|
43
|
+
* - Not protected → anyone can write (even anonymous)
|
|
44
|
+
* - Protected → requires authentication + WRITE/ADMIN grant
|
|
45
|
+
* - Owner → yes (implicit ADMIN)
|
|
46
|
+
*/
|
|
47
|
+
canWrite(documentId: string, userAddress?: string, getParentIds?: GetParentIdsFn): Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if a user can manage a document (change permissions, protection, transfer ownership).
|
|
50
|
+
*
|
|
51
|
+
* - Supreme admin → yes
|
|
52
|
+
* - Owner → yes
|
|
53
|
+
* - Has ADMIN grant → yes
|
|
54
|
+
*/
|
|
55
|
+
canManage(documentId: string, userAddress?: string, getParentIds?: GetParentIdsFn): Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* Check if a user can execute a specific operation.
|
|
58
|
+
* If the operation is not restricted, falls through to the standard write check.
|
|
59
|
+
* If the operation is restricted, requires an explicit OperationUserPermission grant.
|
|
60
|
+
*/
|
|
61
|
+
canExecuteOperation(documentId: string, operationType: string, userAddress?: string, getParentIds?: GetParentIdsFn): Promise<boolean>;
|
|
62
|
+
/**
|
|
63
|
+
* Combined check for mutations: can the user write + execute the operation?
|
|
64
|
+
* This enables READ-only users with operation grants to execute specific operations.
|
|
65
|
+
* For restricted operations, only the operation grant is checked (bypasses write check),
|
|
66
|
+
* allowing READ-only users with an explicit operation grant to execute that operation.
|
|
67
|
+
*/
|
|
68
|
+
canMutate(documentId: string, operationType: string, userAddress?: string, getParentIds?: GetParentIdsFn): Promise<boolean>;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=authorization.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.service.d.ts","sourceRoot":"","sources":["../../../src/services/authorization.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,cAAc,EACf,MAAM,kCAAkC,CAAC;AAE1C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,oBAAoB;IAI7B,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAH5C,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;gBAGlB,yBAAyB,EAAE,yBAAyB,EACrE,MAAM,EAAE,mBAAmB;IAK7B;;OAEG;IACH,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO;IAK7C;;;;;;;OAOG;IACG,OAAO,CACX,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,OAAO,CAAC;IAqCnB;;;;;;;OAOG;IACG,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,OAAO,CAAC;IAqCnB;;;;;;OAMG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,OAAO,CAAC;IAkBnB;;;;OAIG;IACG,mBAAmB,CACvB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,OAAO,CAAC;IAwBnB;;;;;OAKG;IACG,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,cAAc,GAC5B,OAAO,CAAC,OAAO,CAAC;CAwBpB"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Central authorization service — single source of truth for all permission checks.
|
|
3
|
+
*
|
|
4
|
+
* Authorization model:
|
|
5
|
+
* 1. Supreme admin (ADMINS env) → ALLOW ALL
|
|
6
|
+
* 2. Is document protected?
|
|
7
|
+
* a. NOT protected:
|
|
8
|
+
* - READ: anyone (even anonymous) → ALLOW
|
|
9
|
+
* - WRITE: authenticated user → ALLOW
|
|
10
|
+
* b. PROTECTED:
|
|
11
|
+
* - READ: requires explicit READ/WRITE/ADMIN grant (direct or via group/parent)
|
|
12
|
+
* - WRITE: requires explicit WRITE/ADMIN grant (direct or via group/parent)
|
|
13
|
+
* 3. Operation restricted? → Check OperationUserPermission
|
|
14
|
+
* 4. Document owner = implicit ADMIN
|
|
15
|
+
* 5. Drive protected = all children effectively protected
|
|
16
|
+
*/
|
|
17
|
+
export class AuthorizationService {
|
|
18
|
+
documentPermissionService;
|
|
19
|
+
config;
|
|
20
|
+
constructor(documentPermissionService, config) {
|
|
21
|
+
this.documentPermissionService = documentPermissionService;
|
|
22
|
+
this.config = config;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a user is a supreme admin (from ADMINS env var).
|
|
26
|
+
*/
|
|
27
|
+
isSupremeAdmin(userAddress) {
|
|
28
|
+
if (!userAddress)
|
|
29
|
+
return false;
|
|
30
|
+
return this.config.admins.includes(userAddress.toLowerCase());
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Check if a user can read a document.
|
|
34
|
+
*
|
|
35
|
+
* - Supreme admin → yes
|
|
36
|
+
* - Not protected → anyone can read (even anonymous)
|
|
37
|
+
* - Protected → requires READ/WRITE/ADMIN grant (direct, group, or parent inheritance)
|
|
38
|
+
* - Owner → yes (implicit ADMIN)
|
|
39
|
+
*/
|
|
40
|
+
async canRead(documentId, userAddress, getParentIds) {
|
|
41
|
+
// Supreme admin bypasses all
|
|
42
|
+
if (this.isSupremeAdmin(userAddress))
|
|
43
|
+
return true;
|
|
44
|
+
// Check protection status (walks parent chain if getParentIds provided)
|
|
45
|
+
const isProtected = getParentIds
|
|
46
|
+
? await this.documentPermissionService.isProtectedWithAncestors(documentId, getParentIds)
|
|
47
|
+
: await this.documentPermissionService.isDocumentProtected(documentId);
|
|
48
|
+
// Unprotected documents are readable by anyone
|
|
49
|
+
if (!isProtected)
|
|
50
|
+
return true;
|
|
51
|
+
// Protected document — requires authentication
|
|
52
|
+
if (!userAddress)
|
|
53
|
+
return false;
|
|
54
|
+
// Owner has implicit ADMIN
|
|
55
|
+
const owner = await this.documentPermissionService.getDocumentOwner(documentId);
|
|
56
|
+
if (owner && owner === userAddress.toLowerCase())
|
|
57
|
+
return true;
|
|
58
|
+
// Check grant (READ/WRITE/ADMIN all allow reading)
|
|
59
|
+
if (getParentIds) {
|
|
60
|
+
return this.documentPermissionService.canRead(documentId, userAddress, getParentIds);
|
|
61
|
+
}
|
|
62
|
+
return this.documentPermissionService.canReadDocument(documentId, userAddress);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check if a user can write to a document.
|
|
66
|
+
*
|
|
67
|
+
* - Supreme admin → yes
|
|
68
|
+
* - Not protected → anyone can write (even anonymous)
|
|
69
|
+
* - Protected → requires authentication + WRITE/ADMIN grant
|
|
70
|
+
* - Owner → yes (implicit ADMIN)
|
|
71
|
+
*/
|
|
72
|
+
async canWrite(documentId, userAddress, getParentIds) {
|
|
73
|
+
// Supreme admin bypasses all
|
|
74
|
+
if (this.isSupremeAdmin(userAddress))
|
|
75
|
+
return true;
|
|
76
|
+
// Check protection status
|
|
77
|
+
const isProtected = getParentIds
|
|
78
|
+
? await this.documentPermissionService.isProtectedWithAncestors(documentId, getParentIds)
|
|
79
|
+
: await this.documentPermissionService.isDocumentProtected(documentId);
|
|
80
|
+
// Unprotected documents are writable by anyone (even anonymous)
|
|
81
|
+
if (!isProtected)
|
|
82
|
+
return true;
|
|
83
|
+
// Protected document — requires authentication
|
|
84
|
+
if (!userAddress)
|
|
85
|
+
return false;
|
|
86
|
+
// Owner has implicit ADMIN
|
|
87
|
+
const owner = await this.documentPermissionService.getDocumentOwner(documentId);
|
|
88
|
+
if (owner && owner === userAddress.toLowerCase())
|
|
89
|
+
return true;
|
|
90
|
+
// Check grant (WRITE/ADMIN allow writing)
|
|
91
|
+
if (getParentIds) {
|
|
92
|
+
return this.documentPermissionService.canWrite(documentId, userAddress, getParentIds);
|
|
93
|
+
}
|
|
94
|
+
return this.documentPermissionService.canWriteDocument(documentId, userAddress);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Check if a user can manage a document (change permissions, protection, transfer ownership).
|
|
98
|
+
*
|
|
99
|
+
* - Supreme admin → yes
|
|
100
|
+
* - Owner → yes
|
|
101
|
+
* - Has ADMIN grant → yes
|
|
102
|
+
*/
|
|
103
|
+
async canManage(documentId, userAddress, getParentIds) {
|
|
104
|
+
// Supreme admin bypasses all
|
|
105
|
+
if (this.isSupremeAdmin(userAddress))
|
|
106
|
+
return true;
|
|
107
|
+
if (!userAddress)
|
|
108
|
+
return false;
|
|
109
|
+
// Owner has implicit ADMIN
|
|
110
|
+
const owner = await this.documentPermissionService.getDocumentOwner(documentId);
|
|
111
|
+
if (owner && owner === userAddress.toLowerCase())
|
|
112
|
+
return true;
|
|
113
|
+
// Check ADMIN grant
|
|
114
|
+
return this.documentPermissionService.canManageDocument(documentId, userAddress);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Check if a user can execute a specific operation.
|
|
118
|
+
* If the operation is not restricted, falls through to the standard write check.
|
|
119
|
+
* If the operation is restricted, requires an explicit OperationUserPermission grant.
|
|
120
|
+
*/
|
|
121
|
+
async canExecuteOperation(documentId, operationType, userAddress, getParentIds) {
|
|
122
|
+
// Supreme admin bypasses all
|
|
123
|
+
if (this.isSupremeAdmin(userAddress))
|
|
124
|
+
return true;
|
|
125
|
+
// Check if operation is restricted
|
|
126
|
+
const isRestricted = await this.documentPermissionService.isOperationRestricted(documentId, operationType);
|
|
127
|
+
if (!isRestricted) {
|
|
128
|
+
// Operation not restricted — standard write check applies
|
|
129
|
+
return this.canWrite(documentId, userAddress, getParentIds);
|
|
130
|
+
}
|
|
131
|
+
// Operation is restricted — user needs explicit operation grant
|
|
132
|
+
return this.documentPermissionService.canExecuteOperation(documentId, operationType, userAddress?.toLowerCase());
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Combined check for mutations: can the user write + execute the operation?
|
|
136
|
+
* This enables READ-only users with operation grants to execute specific operations.
|
|
137
|
+
* For restricted operations, only the operation grant is checked (bypasses write check),
|
|
138
|
+
* allowing READ-only users with an explicit operation grant to execute that operation.
|
|
139
|
+
*/
|
|
140
|
+
async canMutate(documentId, operationType, userAddress, getParentIds) {
|
|
141
|
+
// Supreme admin bypasses all
|
|
142
|
+
if (this.isSupremeAdmin(userAddress))
|
|
143
|
+
return true;
|
|
144
|
+
// Check if the operation is restricted
|
|
145
|
+
const isRestricted = await this.documentPermissionService.isOperationRestricted(documentId, operationType);
|
|
146
|
+
if (isRestricted) {
|
|
147
|
+
// For restricted operations, only the operation grant matters
|
|
148
|
+
// This allows READ-only users with operation grants to execute
|
|
149
|
+
return this.documentPermissionService.canExecuteOperation(documentId, operationType, userAddress?.toLowerCase());
|
|
150
|
+
}
|
|
151
|
+
// For unrestricted operations, standard write check applies
|
|
152
|
+
return this.canWrite(documentId, userAddress, getParentIds);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=authorization.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.service.js","sourceRoot":"","sources":["../../../src/services/authorization.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,12 @@ export interface OperationGroupPermissionEntry {
|
|
|
42
42
|
* This is injected to avoid circular dependencies with the reactor client
|
|
43
43
|
*/
|
|
44
44
|
export type GetParentIdsFn = (documentId: string) => Promise<string[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Configuration for the DocumentPermissionService
|
|
47
|
+
*/
|
|
48
|
+
export interface DocumentPermissionConfig {
|
|
49
|
+
defaultProtection: boolean;
|
|
50
|
+
}
|
|
45
51
|
/**
|
|
46
52
|
* Service for managing document-level permissions.
|
|
47
53
|
*
|
|
@@ -52,16 +58,11 @@ export type GetParentIdsFn = (documentId: string) => Promise<string[]>;
|
|
|
52
58
|
*
|
|
53
59
|
* Operation permissions:
|
|
54
60
|
* - Users and groups can be granted permission to execute specific operations
|
|
55
|
-
*
|
|
56
|
-
* Global roles (via environment variables):
|
|
57
|
-
* - AUTH_ENABLED: Enables authorization checks
|
|
58
|
-
* - ADMINS: Comma-separated list of admin addresses (full access)
|
|
59
|
-
* - USERS: Comma-separated list of user addresses (read/write access)
|
|
60
|
-
* - GUESTS: Comma-separated list of guest addresses (read access)
|
|
61
61
|
*/
|
|
62
62
|
export declare class DocumentPermissionService {
|
|
63
63
|
private readonly db;
|
|
64
|
-
|
|
64
|
+
readonly config: DocumentPermissionConfig;
|
|
65
|
+
constructor(db: Kysely<DocumentPermissionDatabase>, config?: DocumentPermissionConfig);
|
|
65
66
|
/**
|
|
66
67
|
* Get the permission level for a user on a specific document.
|
|
67
68
|
* Returns null if no permission is set.
|
|
@@ -197,5 +198,44 @@ export declare class DocumentPermissionService {
|
|
|
197
198
|
* Check if an operation has any permissions set (is restricted)
|
|
198
199
|
*/
|
|
199
200
|
isOperationRestricted(documentId: string, operationType: string): Promise<boolean>;
|
|
201
|
+
/**
|
|
202
|
+
* Check if a specific document has a protection row set to true.
|
|
203
|
+
* Falls back to `config.defaultProtection` if no row exists.
|
|
204
|
+
*/
|
|
205
|
+
isDocumentProtected(documentId: string): Promise<boolean>;
|
|
206
|
+
/**
|
|
207
|
+
* Walk the parent chain: if the document itself or any ancestor is protected, return true.
|
|
208
|
+
* Collects all ancestor IDs first (with cycle detection), then batch-checks protection.
|
|
209
|
+
*/
|
|
210
|
+
isProtectedWithAncestors(documentId: string, getParentIds: GetParentIdsFn): Promise<boolean>;
|
|
211
|
+
/**
|
|
212
|
+
* Collect all ancestor IDs (including the document itself) with cycle detection.
|
|
213
|
+
*/
|
|
214
|
+
private collectAncestorIds;
|
|
215
|
+
/**
|
|
216
|
+
* Upsert protection status for a document.
|
|
217
|
+
*/
|
|
218
|
+
setDocumentProtection(documentId: string, isProtected: boolean): Promise<void>;
|
|
219
|
+
/**
|
|
220
|
+
* Get the owner address for a document, or null if not set.
|
|
221
|
+
*/
|
|
222
|
+
getDocumentOwner(documentId: string): Promise<string | null>;
|
|
223
|
+
/**
|
|
224
|
+
* Upsert owner address for a document.
|
|
225
|
+
*/
|
|
226
|
+
setDocumentOwner(documentId: string, ownerAddress: string): Promise<void>;
|
|
227
|
+
/**
|
|
228
|
+
* Initialize protection for a newly created document.
|
|
229
|
+
* Sets protection status and grants ADMIN to the owner.
|
|
230
|
+
*/
|
|
231
|
+
initializeDocumentProtection(documentId: string, ownerAddress: string, defaultProtection?: boolean): Promise<void>;
|
|
232
|
+
/**
|
|
233
|
+
* Get the full protection info for a document.
|
|
234
|
+
*/
|
|
235
|
+
getDocumentProtection(documentId: string): Promise<{
|
|
236
|
+
documentId: string;
|
|
237
|
+
protected: boolean;
|
|
238
|
+
ownerAddress: string | null;
|
|
239
|
+
}>;
|
|
200
240
|
}
|
|
201
241
|
//# sourceMappingURL=document-permission.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-permission.service.d.ts","sourceRoot":"","sources":["../../../src/services/document-permission.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAEvE
|
|
1
|
+
{"version":3,"file":"document-permission.service.d.ts","sourceRoot":"","sources":["../../../src/services/document-permission.service.ts"],"names":[],"mappings":"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"}
|