-
Notifications
You must be signed in to change notification settings - Fork 89
feat: Multi-Tenancy v1 #3413
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
njlie
wants to merge
36
commits into
main
Choose a base branch
from
2893/multi-tenancy-v1
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
feat: Multi-Tenancy v1 #3413
+14,740
−2,076
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* feat(auth): tenants table v1 * fix: add updatedAt, createdAt * feat: add deletedAt
* feat(auth): tenant service * chore(auth): format * fix(auth): jest test warning about migration * fix(auth): remove temporary code * feat(auth): soft delete tenants * fix(auth): return erroneously removed tests
* feat(backend): tenant service * fix: integration tests * feat: use soft delete * refactor: compare whole object in test * fix: better gql errors in tests * feat: add idp columns to tenant model * feat: pagination tests, push deletedAt to auth api call * feat: add cache * fix: update localenv environment variables * feat: make some tenants fields optional, small refactors
* feat(auth): migration to seed operator tenant * feat(backend): migration to seed operator tenant * chore(localenv): add env vars for operator tenant * test(backend): set operator env variables in jest config * test(auth): set operator env variables in jest config * test(auth, backend): load env vars into jest environment script * feat(auth,backend): update migrations with error messages * test(integration): adding operator tenant vars * chore(backend, localenv): replace OPERATOR_TENANT_SECRET with existing API_SECRET
…3177) * fix(backend): await signature verification * test(integration): add signatures to apollo client requests * test(backend): sign GraphQL requests in test environment * Revert "test(backend): sign GraphQL requests in test environment" This reverts commit 0a128d1. * chore(backend): remove sig verification in test files
* feat(auth): tenants table v1 * feat(backend): tenant service * feat: use soft delete * feat: add idp columns to tenant model * feat: pagination tests, push deletedAt to auth api call * feat: add cache * feat(backend): tenant signature validation for admin api * fix: rebase errors * fix: remove admin api secret check from app * fix: always expect tenant id in request * chore: remove some logs * feat: await signature verification, test improvements * fix: better util parameters * fix: add tenant info to apollo context * feat: fix integration tests * fix: make tenant required on extended apollo context
* feat(auth): add service api with /healtz endpoint * feat(auth): tenant routes * feat(auth): service api error handling * chore(auth): rm old todo * fix(auth): how errors are set * fix(auth): improve tenant tests, cleanup tenant get response, * feat(backend): auth service api client * fix(auth): change status codes to 204 where no body * fix(backend): format * feat(auth): add required deletedAt to DELETE /tenant body * feat(backend): AUTH_SERVICE_API_URL env var * fix(backend): auth service client tests to mock codes correctly * feat(backend): add AuthServiceClient dep * feat(backend): use auth service client in tenant service * chore(auth): format * chore(auth): format * fix(integration,localenv): auth service api config * fix(backend,auth): update tenant api to support deletedAt * docs: update with env vars * fix(backend): dep container type * fix(localenv): docker compose config * fix(backend): add default header to api client
* feat(backend): migration to backfill tenantId on assets * feat(backend): add tenantId to asset, use it in service * feat(backend): use tenantId in asset resolvers * test(backend): update tests to use asset tenantId where necessary * test(backend): truncate tenant table manually in tenant tests * test(backend): update failing accounting tests * test(backend): update tenant service test * test: fix accounting tests linting * test(backend): update accounting tests * feat(backend): use tenantId when fetching asset * test(backend): make tests work with separate middleware * test(backend): keep operator tenant when truncating tables * test(backend): skip tenant pagination tests for now * test(backend): seed operator tenant in truncateTable * test(backend): seed operator tenant after tenants service is done * test(backend): use separate schema for tenant tests * test(backend): pass operator tenant id in pagination tests * feat(backend): make tenantId required in asset pagination * test(backend): update tenant service tests * chore(backend): update config file * test: update truncateTables to take in dbSchema * feat(backend): make tenantId optional in asset pagination
# Conflicts: # packages/backend/src/app.ts # pnpm-lock.yaml # test/integration/package.json
* feat(frontend): set api credentials on session * chore(frontend): more details in todo comment * refactor(frontend): move credentials form from modal to component on index * chore(frontend): mark dialog for removal - not removing yet because not sure if we might end up using it. could be useful if we want to make global redirect if this is not set. * feat(frontend): store api creds in server side session * feat(frontend): POC for adding tenantId from session to headers for all apollo requests Uses the assets and list asset query. This POC passes the request to the listAsset function. Which imports the apolloClient directly and passes the cookie from request headers in the context. To avoid having to set this on each query as we compose it, my intention is to create a new getApolloClient function and use that insteadof directly importing a single client. This enables us to form a link to handle setting the headers per request (as opposed to static links that are used across all requests as it is currently). * feat(frontend): form apollo client per request - enables authLink to get tenantId, apiSecret from cookie in request - wondered if this was a performance concern (maybe why we had single instance before?) but found several things indicating this is OK and even recommended: - apollographql/apollo-client#9520 (comment) - https://www.apollographql.com/blog/how-to-use-apollo-client-with-remix * fix(mock-ase): update seed script to pass tenant sig/id verifcation * feat(frontend): block api cred form submit on invalid uuid * feat(frontend): handle errors, WIP apollo client - see TODOs in apollo client in frontend. maybe need to remove some env vars and verify how no tenantid/secret are handled * feat(frontend): disable nav links * docs(localenv): update readme to not say kratos is required * chore(frontend): format * chore(frontend): rm unused component * chore(frontend): rm commented out code * chore(frontend): formatting * refactor(frontend): better error parsing * chore(frontend): rm todo * refactor(frontend): use session api for deletion, not manual * fix(frontend): display error based on message reverses previous commit to use apollo error. proved unreliable * fix(frontend): rm SIGNATURE_SECRET, SIGNATURE_VERSION env vars * feat(mock-ase): log operator/tenant details to streamline use of frontend * feat(frontend): dont show nav items if api creds required and not set * feat(frontend): move api credential set action to own endpoint - removes the action from the index. the intention is to expose the remix server port over docker and call this from the MASE to set the api credentials on start * feat(frontend): prefill api credential form * chore(frontend): format * feat(frontend): auto submit form if values passed in requires changing intent to be set as an input. submitting form bypasses the button so the action didnt have the intent and failed when auto submitting. * fix: reinstate sig version env var
* feat(backend): tenant service * fix: integration tests * feat: use soft delete * refactor: compare whole object in test * fix: better gql errors in tests * feat: add idp columns to tenant model * feat: pagination tests, push deletedAt to auth api call * feat: add cache * fix: update localenv environment variables * feat(3114): add tenant to wallet address. * feat(3114): test fixes. * feat: make some tenants fields optional, small refactors * feat(auth): tenants table v1 * feat(backend): tenant service * feat: use soft delete * feat: add idp columns to tenant model * feat: pagination tests, push deletedAt to auth api call * feat: add cache * feat(backend): tenant signature validation for admin api * fix: rebase errors * feat(3114): update seed.ts * fix: remove admin api secret check from app * fix: always expect tenant id in request * chore: remove some logs * feat(3114): update for auth and resource server. * feat(3114): fix asset service.test.ts * feat(3114): fix tests. * feat(3114): merged with latest tenant changes. * feat(3114): extract tenant id from tenant context instead of admin input variable. * feat(3114): test case updates, obtain tenant from header. * feat(3114): fix test cases for wallet address. * feat(3114): address review comments. * feat(3114): rework tenantId to not be mandatory for wallet address service layer. * feat(3114): rework tenantId to not be mandatory for wallet address service layer. * feat(3114): rework tenantId to not be mandatory for wallet address service layer. * feat(3114): fix tenant service test case. * feat(3114): fix tenant service test case. * feat(3114): fix tenant service test case. * feat(3114): fix tenant service test case. * feat(3114): fix tenant service test case. * feat(3114): force 'forTenantId'. * feat(3114): force 'forTenantId'. * feat(3114): force 'forTenantId'. * feat(3114): enhancements for 'forTenantId'. * feat(3114): test case fixes. * feat(3114): internal server error * feat(3114): test case. * feat(3114): test case. * feat(3114): review feedback. * feat(3114): review feedback. * feat(3114): remove tenant on quote. * feat(3114): default operator tenant. * feat(3114): review feedback. * feat(3114): review feedback from Max. * feat(3114): review feedback from Max. * feat(3114): fixed. * feat(3114): review feedback. * feat(3114): review feedback. * feat(3114): review feedback. do not force error on graphql middleware. * feat(3114): fix the integration test. * feat(3114): further review comments. * feat(3114): further review comments. * feat(3114): final round with Max. * feat(3114): revert. * feat(3114): remove unused. * feat(3114): set the correct operator id. --------- Co-authored-by: Nathan Lie <lie4nathan@gmail.com>
* feat: backend tenant graphql resolvers * chore: formatting * fix: extra testing db for tenants * feat: bruno collection * feat: update graphql schema comments * fix: review comments * feat: optional idp secret & consent url * feat: tenant response requirement * feat: make delete operator-only * chore: cleanup
* docs(localenv): add details for tenant credentials for admin ui * doc(localenv): fix typo * chore: admin ui requirement info and add example output * chore: use full name for MASE, instead of acronym
* feat(auth): tenanted grants * fix: tests * feat: update bruno collection * fix: tests * feat: update bruno requests, fix integration tests * feat: handle tenants with no idp info * feat: backfill tenants on grants, trim down queries * feat: use tenantId in grant revocation * fix: service function signatures
* feat: backend tenant graphql resolvers * chore: formatting * fix: extra testing db for tenants * feat: bruno collection * feat: update graphql schema comments * fix: review comments * feat: optional idp secret & consent url * feat: tenant response requirement * feat: make delete operator-only * feat(2915): admin front-end for tenant support * feat(2915): apply permissions for tenant screens * feat(2915): improvements * chore: cleanup * feat(2915): merged with tenant branch. updates to update screen. * feat(2915): update fixes. * feat(3180): bug fixes and testing with non operator tenant. * feat(3180): bug fixes and testing with non operator tenant. * feat(2915): review feedback * feat(2915): fix update. field validation for email. * feat(2915): formatting. * feat(2915): fix. * feat(2915): review fixes. --------- Co-authored-by: Nathan Lie <lie4nathan@gmail.com>
* feat(3256): able to view deleted tenant * feat(3256): fix backend tests. * feat(3256): allow for switching between deleted and not. * feat(3256): review comments.
* Draft version of tenanted incoming payments * Finished fixing unit and integration tests * PR comments fixes * Created helper function that adds tenantId to incoming payment id * Removed tenantId from url in bruno requests, added tenantId in url of the incoming payment, fixed tests accordingly * Fixed formatting * Replaced get with findOne when querying using id and tenantId.
* feat: tenanted quotes - first iteration with dummy tenant * feat: tenanted quotes - replace hardcoded tenantId values with creation of tenant * feat: tenanted quotes - formatting * feat: tenanted quotes - fix outgoing payments service test * WIP * Fix tests - TODOs not resolved yet * feat: tenanted quotes and outgoing payments - update resolvers and fix all tests * feat: tenanted quotes and outgoing payments - remove unnecessary comments * feat: tenanted quotes and outgoing payments - fix integration tests * feat: tenanted quotes and outgoing payments - fix vulnerabilities scan * feat: tenanted quotes and outgoing payments - partially fix vulnerabilities scan * feat: tenanted quotes and outgoing payments - fix get routes for quotes and outgoing payments * feat: tenanted quotes and outgoing payments - fix outgoing payments routes unit tests * chore: fix docker image scans (#3272) * chore: fix path-to-regexp lib * chore: update base node image version in Dockerfiles --------- Co-authored-by: bsanduc <bogdan.sandu@breakpointit.eu> * feat: tenanted quotes and outgoing payments - remove tenantId from ILP payment method handler * feat: tenanted quotes and outgoing payments - remove tenantId from StartQuoteOptions in quote service * feat: tenanted quotes and outgoing payments - fix unit tests * feat: tenanted quotes and outgoing payments - remove tenantId from GraphQL Input types * feat: tenanted quotes and outgoing payments - format * feat: tenanted quotes and outgoing payments - remove tenantId from integration test inputs * feat: tenanted quotes and outgoing payments - remove unnecessary tenantId * feat: tenanted quotes and outgoing payments - update Bruno collection * feat: tenanted quotes and outgoing payments - address PR comments * feat: tenanted quotes and outgoing payments - fix Bruno collection merge conflict * feat: tenanted quotes and outgoing payments - add tenantId to outgoing payments routes, add test cases for unknown tenantId * feat: tenanted quotes and outgoing payments - update comments for GraphQL types * feat: tenanted quotes and outgoing payments - update quote resolver context * feat: tenanted quotes and outgoing payments - add tenantId to outgoing payment and quote routes middleware * feat: tenanted quotes and outgoing payments - add test for getting outgoing payments WA middleware * feat: tenanted quotes and outgoing payments - modify get outgoing payment query in service * feat: tenanted quotes and outgoing payments - add test for getting WA from quote middleware * feat: tenanted quotes and outgoing payments - remove unused import * feat: tenanted quotes and outgoing payments - remove unused import * feat: tenanted quotes and outgoing payments - format --------- Co-authored-by: Max Kurapov <max@interledger.org>
#3289) * feat(frontend): add operator-contextual dropdowns for tenant selection during asset, wallet address, and peer creation * feat: improved dropdown labels * fix: use tenantId properly during asset creation * chore: gql type, remove dangling log * chore: regenerate graphql
* fix(tenant): duplicate test * feat(tenants): settings * feat(tenants): add default settings when creating tenant * feat(tenantSettings): tests updates * chore(tenantSettings): format * chore(tenantSettings): format * tests(tenantSettings): mock call to auth when creating tenant * tests(tenants): when tenant is created, default settings should be set * feat(graphql): tenant settings * fix(tenantSettings): address PR comments
* feat(frontend): disallow api secret update and change tenant form to submit sections independently * feat(backend): disallow tenant api secret update in admin api * feat(backend): add service method to update secret, call on app start * chore: rm log * fix(fronted): 'no any' lint error * fix(backend): error on failed secret update from config * fix(backend): wallet address resolver tests to be operator/non-operator as needed - previous way of controlling if the request was from an operator or not no longer worked after changing app start to sync apiSecret * test(backend): update tenant tests to reflect operator cant update apiSecret * chore: fix format * chore: debug ci test failure (working locally) * chore: fix format * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * chore: debug ci test failure (working locally) * fix: test side effects * fix(backend): uncomment test * Update packages/backend/src/tenants/service.ts Co-authored-by: Max Kurapov <max@interledger.org> * fix(backend): rm unushesd nock * feat(backend): set cache on update operator secret method * fix(frontend): typo * fix: typo --------- Co-authored-by: Max Kurapov <max@interledger.org>
* feat: Added tenantId to peers * Added tenantId to getPage, updated contexts * Removed unused imports + updated some tests * Changes following PR comments * Fixes on resolvers: create and get peer, deposit liquidity and create peer liquidity withdrawal * Added missing tests for create and get peer
* feat: tenanted rates endpoints - first iteration, WIP * feat: tenanted rates endpoints - format * feat: tenanted rates endpoints - deprecate exchange rates url env var, WIP * feat: tenanted rates endpoints - use operator tenant id for telemetry, internal rates service * feat: tenanted rates endpoints - don't throw if exchange urls is not found * feat: tenanted rates endpoints - more fixes, WIP * feat: tenanted rates endpoints - fix integration tests * feat: tenanted rates endpoints - format * Add optional operator exchange rates URL as env var * Check if exchange rates URL is set when creating assets * Address comments * Address more comments * Format * Add tenantId to ConnectorAccount * Revert pnpm lock file * Restore package.json * Revert "Format" This reverts commit 219baa9.
…3325) * feat(graphql): schema update for specifying settings when creating tenant * feat(tenant): add possibility to specify initial tenant settings as an operator * test(tenant): create with settings * feat(wallet-address): rename url to address * fix(tenant-settings): duplicate key for tenant * feat(wallet-address): replace url field with address field url field was replaced with address field, because now with range in wallet address, it is possible for the caller, to specify just the portion of the wallet address url. There is no need to specify the whole url in order to create wallet address. #3278 * chore(backend): format * fix(tests): some of them * fix(frontend): due to wallet address url change * fix(mase): due to wallet address url change * fix(backend): tests due to wallet address url change * test(integration): fix tests and have default address for operator * fix(wallet-address): test for operator can perform cross tenant create@ * test(tenant-settings): remove pagination tests for tenant settings * docs(bruno): rename of the walletaddress url variable * test(wallet-address): create with tenant settings or not as an operator or not * feat(wallet-address): put creation of it into new function * chore(format): everything * feat(tenant-settings): add tests for upsert * feat(tenant-settings): add more tests and remove pagination * Update packages/backend/src/open_payments/wallet_address/service.ts Co-authored-by: Max Kurapov <max@interledger.org> * Update packages/backend/src/graphql/resolvers/tenant_settings.ts Co-authored-by: Max Kurapov <max@interledger.org> * Update packages/backend/src/graphql/schema.graphql Co-authored-by: Max Kurapov <max@interledger.org> * chore(graphql): generate schema * fix(tenant): mapping settings to tenant * chore(graphql): generate schema --------- Co-authored-by: Max Kurapov <max@interledger.org>
* tests(tenants): when tenant is created, default settings should be set * feat(graphql): tenant settings * fix(tenantSettings): address PR comments * fix(tenantSettings): address PR comments * feat(backend): tenanted webhooks * fix: rebase * chore: fix some rebasing issues * feat: use resource tenant ids where available * feat: add tenant id to tests; temporary operator tenant id in peer webhook events * fix: build errors * feat: remove temporary tenantId code from before tenanted peers * fix: build errors * feat: update settings formatting, handle NaN * fix: tests * feat: key mapping as const, non-optional settings for webhook event function * fix: prevent tests from failing with default settings --------- Co-authored-by: golobitch <tadej.golobic@icloud.com>
✅ Deploy Preview for brilliant-pasca-3e80ec canceled.
|
e53733f
to
e0dbac7
Compare
…t is tenant (#3368) * tests(tenants): when tenant is created, default settings should be set * feat(graphql): tenant settings * fix(tenantSettings): address PR comments * fix(tenantSettings): address PR comments * feat(backend): tenanted webhooks * fix: rebase * chore: fix some rebasing issues * feat: add tenant id to tests; temporary operator tenant id in peer webhook events * fix: build errors * feat: remove temporary tenantId code from before tenanted peers * fix: build errors * tests(tenants): when tenant is created, default settings should be set * fix(tenantSettings): address PR comments * feat(backend): tenanted webhooks * chore: fix some rebasing issues * feat(backend): also publish webhooks to operators if primary recipient is tenant * fix: rebase issues * fix: tests * feat: add webhook model * refactor: move webhook & webhookevent models * feat: include tenant id in webhook gql response * fix: generated files * fix: rebase errors * feat: review comments * feat: remove getWebhook, rename processWebhookEvent to processWebhook * fix: remove operatorSettings from sendWebhook --------- Co-authored-by: golobitch <tadej.golobic@icloud.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
pkg: auth
Changes in the GNAP auth package.
pkg: backend
Changes in the backend package.
pkg: documentation
Changes in the documentation package.
pkg: frontend
Changes in the frontend package.
pkg: mock-account-service-lib
pkg: mock-ase
type: localenv
Local playground
type: source
Changes business logic
type: tests
Testing related
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changes proposed in this pull request
Context
Checklist
fixes #number
user-docs
label (if necessary)