@powerhousedao/reactor-api 6.0.0-dev.11 → 6.0.0-dev.110
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 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- 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-http-express.d.ts +23 -0
- package/dist/src/graphql/gateway/adapter-http-express.d.ts.map +1 -0
- package/dist/src/graphql/gateway/adapter-http-express.js +155 -0
- package/dist/src/graphql/gateway/adapter-http-express.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 +15 -0
- package/dist/src/graphql/gateway/factory.js.map +1 -0
- package/dist/src/graphql/gateway/types.d.ts +84 -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 +31 -12
- package/dist/src/graphql/graphql-manager.d.ts.map +1 -1
- package/dist/src/graphql/graphql-manager.js +284 -228
- 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 +22 -1
- 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 +355 -76
- package/dist/src/graphql/reactor/gen/graphql.d.ts.map +1 -1
- package/dist/src/graphql/reactor/gen/graphql.js +245 -10
- 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 +191 -1
- 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 +275 -77
- package/dist/src/graphql/reactor/resolvers.js.map +1 -1
- package/dist/src/graphql/reactor/schema.graphql +76 -30
- 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 +133 -210
- 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 +42 -0
- package/dist/src/graphql/sse.d.ts.map +1 -0
- package/dist/src/graphql/sse.js +33 -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 +68 -0
- package/dist/src/packages/http-loader.d.ts.map +1 -0
- package/dist/src/packages/http-loader.js +176 -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 +88 -0
- package/dist/src/packages/https-hooks.mjs.map +1 -0
- package/dist/src/packages/import-loader.d.ts +3 -4
- package/dist/src/packages/import-loader.d.ts.map +1 -1
- package/dist/src/packages/import-loader.js +6 -12
- 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 +2 -2
- package/dist/src/packages/package-manager.js.map +1 -1
- package/dist/src/packages/types.d.ts +9 -6
- package/dist/src/packages/types.d.ts.map +1 -1
- package/dist/src/packages/util.d.ts +4 -4
- package/dist/src/packages/util.d.ts.map +1 -1
- package/dist/src/packages/util.js +2 -2
- package/dist/src/packages/util.js.map +1 -1
- package/dist/src/packages/vite-loader.d.ts +8 -7
- package/dist/src/packages/vite-loader.d.ts.map +1 -1
- package/dist/src/packages/vite-loader.js +20 -8
- package/dist/src/packages/vite-loader.js.map +1 -1
- package/dist/src/server.d.ts +15 -28
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +137 -167
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/auth.service.d.ts +11 -15
- package/dist/src/services/auth.service.d.ts.map +1 -1
- package/dist/src/services/auth.service.js +61 -40
- 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 +19 -1
- package/dist/src/tracing.js.map +1 -1
- package/dist/src/types.d.ts +14 -6
- 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 +451 -43
- 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/src/utils/drive-url.d.ts +2 -0
- package/dist/src/utils/drive-url.d.ts.map +1 -0
- package/dist/src/utils/drive-url.js +3 -0
- package/dist/src/utils/drive-url.js.map +1 -0
- package/dist/src/utils/index.d.ts +1 -0
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +1 -0
- package/dist/src/utils/index.js.map +1 -1
- 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 +582 -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-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/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 +226 -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 +488 -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/package.json +52 -58
- 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,4 +1,4 @@
|
|
|
1
|
-
import { verifyAuthBearerToken } from "@renown/sdk";
|
|
1
|
+
import { verifyAuthBearerToken, } from "@renown/sdk";
|
|
2
2
|
export class AuthService {
|
|
3
3
|
config;
|
|
4
4
|
constructor(config) {
|
|
@@ -6,6 +6,7 @@ export class AuthService {
|
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
8
|
* Middleware function to authenticate requests
|
|
9
|
+
* @deprecated Use {@link authenticateRequest} with the Fetch API instead.
|
|
9
10
|
*/
|
|
10
11
|
async authenticate(req, res, next) {
|
|
11
12
|
if (!this.config.enabled ||
|
|
@@ -16,17 +17,17 @@ export class AuthService {
|
|
|
16
17
|
}
|
|
17
18
|
// Set auth lists on request
|
|
18
19
|
req.admins = this.config.admins;
|
|
19
|
-
req.users = this.config.users;
|
|
20
|
-
req.guests = this.config.guests;
|
|
21
20
|
req.auth_enabled = this.config.enabled;
|
|
22
|
-
req.freeEntry = this.config.freeEntry;
|
|
23
21
|
const token = req.headers.authorization?.split(" ")[1];
|
|
24
22
|
if (!token) {
|
|
25
|
-
|
|
23
|
+
// Allow through without user — resolver layer enforces permissions
|
|
24
|
+
// This is critical: GraphQL queries are POST requests, so blocking
|
|
25
|
+
// unauthenticated POSTs would block all anonymous reads.
|
|
26
|
+
next();
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
try {
|
|
29
|
-
const verified =
|
|
30
|
+
const verified = await this.verifyToken(token);
|
|
30
31
|
if (!verified) {
|
|
31
32
|
res.status(401).json({ error: "Verification failed" });
|
|
32
33
|
return;
|
|
@@ -58,6 +59,53 @@ export class AuthService {
|
|
|
58
59
|
res.status(401).json({ error: "Authentication failed" });
|
|
59
60
|
}
|
|
60
61
|
}
|
|
62
|
+
async authenticateRequest(request) {
|
|
63
|
+
if (!this.config.enabled) {
|
|
64
|
+
return { user: undefined, admins: [], auth_enabled: false };
|
|
65
|
+
}
|
|
66
|
+
const method = request.method;
|
|
67
|
+
if (method === "OPTIONS" || method === "GET") {
|
|
68
|
+
return {
|
|
69
|
+
user: undefined,
|
|
70
|
+
admins: this.config.admins,
|
|
71
|
+
auth_enabled: true,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const token = request.headers.get("authorization")?.split(" ")[1];
|
|
75
|
+
if (!token) {
|
|
76
|
+
return {
|
|
77
|
+
user: undefined,
|
|
78
|
+
admins: this.config.admins,
|
|
79
|
+
auth_enabled: true,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const verified = await this.verifyToken(token);
|
|
84
|
+
if (!verified) {
|
|
85
|
+
return new Response(JSON.stringify({ error: "Verification failed" }), {
|
|
86
|
+
status: 401,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const user = this.extractUserFromVerification(verified);
|
|
90
|
+
if (!user) {
|
|
91
|
+
return new Response(JSON.stringify({ error: "Missing credentials" }), {
|
|
92
|
+
status: 401,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (!this.config.skipCredentialVerification) {
|
|
96
|
+
const credentialExists = await this.verifyCredentialExists(user.address, user.chainId, verified.issuer);
|
|
97
|
+
if (!credentialExists) {
|
|
98
|
+
return new Response(JSON.stringify({ error: "Credentials no longer valid" }), { status: 401 });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return { user, admins: this.config.admins, auth_enabled: true };
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return new Response(JSON.stringify({ error: "Authentication failed" }), {
|
|
105
|
+
status: 401,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
61
109
|
async authenticateWebSocketConnection(connectionParams) {
|
|
62
110
|
if (!this.config.enabled) {
|
|
63
111
|
return null;
|
|
@@ -70,7 +118,7 @@ export class AuthService {
|
|
|
70
118
|
if (!token) {
|
|
71
119
|
throw new Error("Invalid authorization format");
|
|
72
120
|
}
|
|
73
|
-
const verified =
|
|
121
|
+
const verified = await this.verifyToken(token);
|
|
74
122
|
if (!verified) {
|
|
75
123
|
throw new Error("Token verification failed");
|
|
76
124
|
}
|
|
@@ -100,10 +148,8 @@ export class AuthService {
|
|
|
100
148
|
* Extract user information from verification result
|
|
101
149
|
*/
|
|
102
150
|
extractUserFromVerification(verified) {
|
|
103
|
-
if (!verified)
|
|
104
|
-
return null;
|
|
105
151
|
try {
|
|
106
|
-
const { address, chainId, networkId } = verified.verifiableCredential
|
|
152
|
+
const { address, chainId, networkId } = verified.verifiableCredential.credentialSubject;
|
|
107
153
|
if (!address || !chainId || !networkId) {
|
|
108
154
|
return null;
|
|
109
155
|
}
|
|
@@ -117,34 +163,16 @@ export class AuthService {
|
|
|
117
163
|
return null;
|
|
118
164
|
}
|
|
119
165
|
}
|
|
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
166
|
/**
|
|
132
167
|
* Get additional context fields for GraphQL
|
|
133
168
|
*/
|
|
134
169
|
getAdditionalContextFields() {
|
|
135
170
|
if (!this.config.enabled) {
|
|
136
171
|
return {
|
|
137
|
-
|
|
138
|
-
isUser: (address) => true,
|
|
139
|
-
isAdmin: (address) => true,
|
|
172
|
+
isAdmin: () => true,
|
|
140
173
|
};
|
|
141
174
|
}
|
|
142
175
|
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
176
|
isAdmin: (address) => this.config.enabled &&
|
|
149
177
|
this.config.admins?.includes(address.toLowerCase()),
|
|
150
178
|
};
|
|
@@ -166,28 +194,21 @@ export class AuthService {
|
|
|
166
194
|
/**
|
|
167
195
|
* Verify that the credential still exists on the Renown API
|
|
168
196
|
*/
|
|
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);
|
|
197
|
+
async verifyCredentialExists(address, chainId, appId) {
|
|
198
|
+
const url = `https://www.renown.id/api/auth/credential?address=${address}&chainId=${chainId}&connectId=${appId}&appId=${appId}`;
|
|
172
199
|
try {
|
|
173
200
|
const response = await fetch(url, {
|
|
174
201
|
method: "GET",
|
|
175
202
|
});
|
|
176
203
|
const body = (await response.json());
|
|
177
204
|
const credential = body.credential;
|
|
178
|
-
const
|
|
205
|
+
const appIdVerfied = credential.credentialSubject.id;
|
|
179
206
|
const addressVerfied = credential.issuer.id.split(":")[4];
|
|
180
207
|
const chainIdVerfied = credential.issuer.id.split(":")[3];
|
|
181
208
|
if (response.status !== 200) {
|
|
182
209
|
return false;
|
|
183
210
|
}
|
|
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 &&
|
|
211
|
+
return (appIdVerfied === appId &&
|
|
191
212
|
addressVerfied.toLocaleLowerCase() === address.toLocaleLowerCase() &&
|
|
192
213
|
chainIdVerfied === chainId.toString());
|
|
193
214
|
}
|
|
@@ -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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"}
|