├── .editorconfig ├── .eslintignore ├── .eslintrc ├── .gitattributes ├── .github └── workflows │ └── validate-workflow.yml ├── .gitignore ├── .gitmodules ├── .husky └── pre-commit ├── .node-version ├── .npmignore ├── .npmrc ├── .prettierignore ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── SECURITY.md ├── apps ├── app-config │ ├── README.md │ ├── _generateConnectorLists.ts │ ├── _generateDocs.bin.ts │ ├── backendConfig.ts │ ├── bootstrap.ts │ ├── connector-envs.ts │ ├── connectors │ │ ├── connectors.client.ts │ │ ├── connectors.def.ts │ │ ├── connectors.merged.ts │ │ ├── connectors.server.ts │ │ └── meta.js │ ├── constants.ts │ ├── env.ts │ ├── package.json │ └── register.node.ts ├── cli │ ├── README.md │ ├── _cli.ts │ ├── airbyte-plaid-connector.ts │ ├── cli-utils.ts │ ├── package.json │ ├── pgMigrator-cli.ts │ ├── sync-test-old.ts │ ├── sync-test.ts │ └── venice-cli.ts ├── gondola │ ├── .gitignore │ ├── app │ │ ├── global.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── next-env.d.ts │ ├── next.config.js │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.js │ ├── sentry.properties │ ├── tailwind.config.ts │ └── tsconfig.json └── web │ ├── .env.example │ ├── .gitignore │ ├── @types │ └── node-http-proxy-json.d.ts │ ├── app │ ├── (admin) │ │ ├── (authenticated) │ │ │ ├── Sidebar.tsx │ │ │ ├── TopNav.tsx │ │ │ ├── api-access │ │ │ │ ├── graphql │ │ │ │ │ └── page.tsx │ │ │ │ ├── page.tsx │ │ │ │ └── rest │ │ │ │ │ └── page.tsx │ │ │ ├── connector-configs │ │ │ │ ├── ConnectorConfigPage.tsx │ │ │ │ ├── ConnectorConfigSheet.tsx │ │ │ │ └── page.tsx │ │ │ ├── end-users │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── magic-link │ │ │ │ └── page.tsx │ │ │ ├── metrics │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ ├── pipelines │ │ │ │ └── page.tsx │ │ │ ├── resources │ │ │ │ ├── ResourcesPage.tsx │ │ │ │ ├── [resourceId] │ │ │ │ │ ├── playground │ │ │ │ │ │ ├── PlaygroundPage.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── sql │ │ │ │ │ │ ├── SqlPage.tsx │ │ │ │ │ │ └── page.tsx │ │ │ │ └── page.tsx │ │ │ └── settings │ │ │ │ └── page.tsx │ │ ├── layout.tsx │ │ ├── org │ │ │ └── [slug] │ │ │ │ ├── layout-client.tsx │ │ │ │ ├── layout.tsx │ │ │ │ └── page.tsx │ │ ├── sign-in │ │ │ └── page.tsx │ │ └── sign-up │ │ │ └── page.tsx │ ├── api │ │ ├── me │ │ │ └── route.ts │ │ ├── resources │ │ │ └── [resourceId] │ │ │ │ └── sql │ │ │ │ └── route.ts │ │ └── v0-edge │ │ │ └── [...trpc] │ │ │ └── route.ts │ ├── connect │ │ ├── ConnectPage.tsx │ │ ├── SetCookieAndRedirect.tsx │ │ ├── callback │ │ │ ├── CallbackEffect.tsx │ │ │ └── page.tsx │ │ └── page.tsx │ ├── demo │ │ └── page.tsx │ ├── global.css │ ├── hello │ │ └── page.tsx │ └── layout.tsx │ ├── components │ ├── ClientRoot.tsx │ ├── FullScreenCenter.tsx │ ├── NoSSR.tsx │ ├── PipelineSheet.tsx │ ├── RedirectTo.tsx │ ├── ResourceSheet.tsx │ ├── SuperHydrate.tsx │ └── viewer-context.tsx │ ├── inngest │ ├── cli.ts │ ├── functions.ts │ └── routines.ts │ ├── lib-client │ ├── analytics-browser.ts │ ├── copyToClipboard.ts │ ├── react-query-client.ts │ ├── supabase-realtime.ts │ ├── trpcReact.ts │ └── ui-utils.ts │ ├── lib-common │ └── schemas.ts │ ├── lib-server │ ├── analytics-server.ts │ ├── appRouter.ts │ ├── index.ts │ ├── procedures.ts │ ├── sentry-client.ts │ ├── server-component-helpers.ts │ ├── server-helpers.ts │ └── supabase-proxy.ts │ ├── middleware.ts │ ├── migrations │ ├── 0_setup-ulid.sql │ ├── 1_create-table.sql │ ├── 2023-01-06_rls.sql │ ├── 2023-01-25_rename_to_raw.sql │ ├── 2023-01-27_rename_connection_to_resource.sql │ ├── 2023-02-01_user_apikey_index.sql │ ├── 2023-02-02_add_connection_name.sql │ ├── 2023-02-03_graphql_comments.sql │ ├── 2023-02-22_institution_rls.sql │ ├── 2023-02-27_remove_database_users.sql │ ├── 2023-02-27_revoke_anon.sql │ ├── 2023-02-28_1307_enable_realtime_publications.sql │ ├── 2023-02-28_1954_remove_public_uid.sql │ ├── 2023-04-02_0140_admin_user.sql │ ├── 2023-04-04_0211_pgrest_pre_request.sql │ ├── 2023-04-22_1503_add_end_user_id_remove_ledger_id.sql │ ├── 2023-04-23_0735_default_id_prefix.sql │ ├── 2023-04-23_0753_materialized_cte_over_pre_request.sql │ ├── 2023-04-29_1549_multi_tenant.sql │ ├── 2023-05-22_2146_migrate_plaid_config.sql │ ├── 2023-10-23_0313_integration_env_name.sql │ ├── 2023-10-29_2125_integration_provider_name_grant.sql │ ├── 2023-11-14_0109_pipeline_disabled.sql │ ├── 2023-11-20_1923_connector_name.sql │ ├── 2023-11-21_0821_integration_to_connector_config.sql │ ├── 2023-11-21_0934_institution_to_integration.sql │ ├── 2023-11-24_0008_connector_config_src_dest.sql │ ├── 2023-11-25_0545_connector_config_src_dest_top_level.sql │ ├── 2023-11-25_0836_connector_config_incoming_outgoing.sql │ ├── 2023-11-30_2212_add_metadata.sql │ └── 2023-11-30_2310_drop_end_user_access.sql │ ├── migrations_wip │ ├── 2023-01-06_connection-user.sql │ ├── 2023-01-07_create-views.sql │ ├── 2023-02-27_2252_postgres-follow-privileges.sql │ ├── 2023-02-28_1433_database_webhooks.sql │ ├── 2023-04-22_1501_pre_request_to_mcte.sql │ └── 2023-04-22_2039_end_user_table.sql │ ├── next-env.d.ts │ ├── next.config.js │ ├── package.json │ ├── pages │ └── api │ │ ├── debug.ts │ │ ├── graphql │ │ └── [[...graphql]].ts │ │ ├── inngest.ts │ │ ├── rest │ │ └── [[...rest]].ts │ │ ├── sentry_sample_error.ts │ │ ├── trpc │ │ ├── [...trpc].ts │ │ └── index.ts │ │ ├── v0 │ │ ├── [...trpc].ts │ │ └── index.ts │ │ └── webhook │ │ └── [[...webhook]].ts │ ├── postcss.config.js │ ├── public │ ├── _assets │ │ ├── logo-airtable.png │ │ ├── logo-airtable.svg │ │ ├── logo-apollo.svg │ │ ├── logo-brex.png │ │ ├── logo-discord.svg │ │ ├── logo-firebase.png │ │ ├── logo-heron.png │ │ ├── logo-import.png │ │ ├── logo-mercury.png │ │ ├── logo-mongodb.png │ │ ├── logo-moota.png │ │ ├── logo-onebrick.png │ │ ├── logo-outreach.svg │ │ ├── logo-postgres.png │ │ ├── logo-qbo.svg │ │ ├── logo-ramp.png │ │ ├── logo-salesloft.svg │ │ ├── logo-saltedge.png │ │ ├── logo-spreadsheet.png │ │ ├── logo-stripe.png │ │ ├── logo-teller.svg │ │ ├── logo-twenty.svg │ │ ├── logo-venmo.png │ │ ├── logo-webhook.png │ │ ├── logo-wise.png │ │ ├── logo-xero.svg │ │ └── logo-yodlee.png │ ├── chase-logo.svg │ ├── copy-icon.svg │ ├── db-links-line.svg │ ├── favicon.svg │ ├── fidelity-logo.svg │ ├── heron-logo.png │ ├── institution-placeholder.svg │ ├── mergeLogo.png │ ├── netsuiteLogo.png │ ├── pipeline-in.svg │ ├── pipeline-out.svg │ ├── plaidLogo.png │ ├── qboLogo.png │ ├── requestLogo.png │ ├── stripeLogo.png │ ├── venice-database.png │ ├── venice-logo-black.svg │ ├── venice-logo-white-no-bg.svg │ └── wells-fargo-logo.svg │ ├── schema.sql │ ├── sentry.client.config.ts │ ├── sentry.edge.config.ts │ ├── sentry.properties │ ├── sentry.server.config.ts │ ├── supabase │ ├── .gitignore │ ├── config.toml │ ├── seed.sql │ └── supabase.gen.d.ts │ ├── tailwind.config.ts │ ├── themes.ts │ ├── tsconfig.json │ └── vcommands │ ├── GlobalCommandBar.tsx │ ├── vcommand-components.tsx │ ├── vcommand-context.tsx │ └── vcommand-definitions.ts ├── bin ├── shdotenv └── venice.ts ├── connectors ├── LICENSE ├── README.md ├── connector-airtable │ ├── AirtableClient.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-alphavantage │ ├── alphavantage.d.ts │ ├── alphavantageClient.ts │ ├── index.ts │ └── package.json ├── connector-apollo │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-beancount │ ├── __snapshots__ │ │ └── beancountConverters.spec.ts.snap │ ├── bean-fs-utils.ts │ ├── beancount.d.ts │ ├── beancountConverters.spec.ts │ ├── beancountConverters.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-brex │ ├── BrexClient.ts │ ├── README.md │ ├── __generated__ │ │ ├── transactions.gen.ts │ │ └── transactions.openapi.json │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-copilot │ ├── CopilotClient.ts │ └── package.json ├── connector-debug │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-discord │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-expensify │ ├── expensify.d.ts │ ├── expensifyClient.ts │ ├── index.ts │ └── package.json ├── connector-firebase │ ├── MultiBatch.ts │ ├── def.ts │ ├── firebase-types.ts │ ├── firebase-utils.ts │ ├── firebaseAuth.ts │ ├── index.ts │ ├── package.json │ ├── register.node.ts │ └── server.ts ├── connector-foreceipt │ ├── ForeceiptClient.ts │ ├── def.ts │ ├── foreceipt-utils.ts │ ├── foreceipt.d.ts │ ├── index.ts │ ├── package.json │ ├── register.node.ts │ └── server.ts ├── connector-fs │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-heron │ ├── HeronClient.ts │ ├── README.md │ ├── def.ts │ ├── heron.gen.ts │ ├── heron.openapi.json │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-lunchmoney │ ├── def.ts │ ├── index.ts │ ├── lunchmoneyClient.ts │ ├── package.json │ └── server.ts ├── connector-mercury │ ├── def.ts │ ├── lib │ │ └── mercury.gen.ts │ └── package.json ├── connector-merge │ ├── MergeClient.ts │ ├── README.md │ ├── client.ts │ ├── def.ts │ ├── index.ts │ ├── merge-logo.svg.ts │ ├── merge.accounting.gen.ts │ ├── package.json │ └── server.ts ├── connector-mongodb │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-moota │ ├── def.ts │ ├── index.ts │ ├── moota.d.ts │ ├── mootaClient.ts │ ├── package.json │ └── server.ts ├── connector-notion │ ├── notion.openapi.gen.d.ts │ ├── notion.openapi.gen.yaml │ └── package.json ├── connector-onebrick │ ├── OneBrickClient.ts │ ├── client.ts │ ├── def.ts │ ├── index.ts │ ├── onebrick-utils.ts │ ├── onebrick.gen.ts │ ├── package.json │ └── server.ts ├── connector-outreach │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-plaid │ ├── PlaidClient.ts │ ├── README.md │ ├── client.ts │ ├── def.ts │ ├── index.ts │ ├── legacy │ │ └── plaid-helpers.ts │ ├── package.json │ ├── plaid-utils.ts │ ├── plaid.types.ts │ ├── request.noop.ts │ └── server.ts ├── connector-postgres │ ├── @types │ │ └── slonik-interceptor-preset.d.ts │ ├── def.ts │ ├── index.ts │ ├── makePostgresClient.spec.ts │ ├── makePostgresClient.ts │ ├── package.json │ └── server.ts ├── connector-qbo │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-ramp │ ├── RampClient.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-salesloft │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-saltedge │ ├── def.ts │ ├── index.ts │ ├── package.json │ ├── saltedge.d.ts │ ├── saltedgeClient.ts │ └── server.ts ├── connector-splitwise │ ├── SplitwiseClientNext.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ ├── server.ts │ └── splitwise-schema.ts ├── connector-spreadsheet │ ├── RowIdMaker.spec.ts │ ├── RowIdMaker.ts │ ├── def.ts │ ├── formats │ │ ├── format-alliant-credit-union.ts │ │ ├── format-apple-card.ts │ │ ├── format-bbva-mexico.ts │ │ ├── format-brex-cash.ts │ │ ├── format-brex.ts │ │ ├── format-capitalone-bank.ts │ │ ├── format-capitalone.ts │ │ ├── format-coinbase.ts │ │ ├── format-coinkeeper.ts │ │ ├── format-etrade.ts │ │ ├── format-first-republic.ts │ │ ├── format-ramp.ts │ │ ├── format-wise.ts │ │ └── index.ts │ ├── index.ts │ ├── makeImportFormat.ts │ ├── package.json │ └── server.ts ├── connector-stripe │ ├── StripeClient.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ ├── server.ts │ └── stripe.gen.ts ├── connector-teller │ ├── TellerClient.ts │ ├── client.ts │ ├── def.ts │ ├── index.ts │ ├── institutionWsResponse.json │ ├── package.json │ └── server.ts ├── connector-toggl │ ├── TogglCient.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-twenty │ ├── crm-unifiedModels.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ ├── sdk.spec.ts │ ├── server.spec.ts │ └── server.ts ├── connector-venmo │ ├── VenmoClient.ts │ ├── VenmoProvider.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ ├── venmo-helpers.ts │ ├── venmo-v5.d.ts │ └── venmo.d.ts ├── connector-vercel │ ├── package.json │ ├── vercel.openapi.gen.d.ts │ └── vercel.openapi.gen.yaml ├── connector-webhook │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-wise │ ├── WiseClient.ts │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts ├── connector-xero │ ├── def.ts │ ├── index.ts │ ├── package.json │ └── server.ts └── connector-yodlee │ ├── README.md │ ├── YodleeClient.ts │ ├── client.ts │ ├── def.ts │ ├── fastlink.d.ts │ ├── index.ts │ ├── package.json │ ├── request.noop.ts │ ├── server.ts │ ├── yodlee-utils.ts │ ├── yodlee.deprecated.d.ts │ ├── yodlee.oas.d.ts │ ├── yodlee.oas.json │ └── yodlee.types.ts ├── docker-compose.yml ├── docs ├── api-reference │ ├── connect │ │ ├── post-connectmagic-link.mdx │ │ └── post-connecttoken.mdx │ ├── connectors │ │ ├── get-connector-1.mdx │ │ ├── get-connector-oas.mdx │ │ ├── get-connector-schemas.mdx │ │ └── get-connector.mdx │ ├── core │ │ ├── delete-coreconnector_config.mdx │ │ ├── delete-corepipeline.mdx │ │ ├── delete-coreresource.mdx │ │ ├── get-coreconnector_config-1.mdx │ │ ├── get-coreconnector_config.mdx │ │ ├── get-coreconnector_config_info.mdx │ │ ├── get-corepipeline.mdx │ │ ├── get-coreresource-1.mdx │ │ ├── get-coreresource.mdx │ │ ├── patch-coreresource.mdx │ │ ├── post-coreconnector_config.mdx │ │ ├── post-coreresource-source_sync.mdx │ │ └── post-coreresource.mdx │ ├── get-openapijson.mdx │ ├── index.json │ ├── internal │ │ ├── get-debugraw-schemas.mdx │ │ ├── health-check.mdx │ │ └── post-passthrough.mdx │ └── verticals │ │ ├── get-verticalsaccountingaccount.mdx │ │ ├── get-verticalsaccountingexpense.mdx │ │ ├── get-verticalsaccountingvendor.mdx │ │ ├── get-verticalsinvestmentaccount.mdx │ │ ├── get-verticalsinvestmentholding.mdx │ │ ├── get-verticalsinvestmentsecurity.mdx │ │ ├── get-verticalsinvestmenttransaction.mdx │ │ ├── get-verticalsptaaccount.mdx │ │ ├── get-verticalsptacommodity.mdx │ │ └── get-verticalsptatransaction.mdx ├── images │ ├── background.png │ ├── favicon.png │ ├── logo │ │ ├── venice-black-logo.svg │ │ └── venice-white-logo.svg │ ├── models.png │ ├── models.svg │ └── synced.svg ├── mint.json ├── mint.ts ├── models.prisma ├── package.json ├── quickstart │ ├── features.mdx │ ├── quickstart.mdx │ └── use-cases.mdx ├── samples │ ├── banking-test.ts │ ├── proxy-test.mts │ ├── sales-engagement-test.ts │ └── sample.ts ├── support │ ├── attribution.mdx │ ├── contact-us.mdx │ ├── custom-integration.mdx │ └── faq.mdx ├── technical │ ├── apis.mdx │ ├── architecture.mdx │ ├── data-models.mdx │ ├── deploy-locally.mdx │ ├── deploy-to-cloud.mdx │ └── open-source.mdx └── venice.oas.json ├── env.d.ts ├── github ├── github.png ├── join-community.png ├── read-docs.png └── sign-up.png ├── jest.config.js ├── kits ├── cdk │ ├── LICENSE │ ├── base-links.ts │ ├── connector-meta.types.ts │ ├── connector-utils.ts │ ├── connector.types.ts │ ├── entity-links.ts │ ├── frontend-utils.tsx │ ├── id.types.ts │ ├── index.ts │ ├── metaForConnector.ts │ ├── models.ts │ ├── nango │ │ ├── NangoClient.spec.ts │ │ ├── NangoClient.ts │ │ ├── index.ts │ │ ├── nangoProxyLink.spec.ts │ │ ├── nangoProxyLink.ts │ │ └── oauthConnector.ts │ ├── package.json │ ├── protocol.ts │ ├── sync.ts │ ├── verticals.ts │ └── viewer.ts ├── connect │ ├── .gitignore │ ├── .npmignore │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── common.ts │ │ ├── embed-react.tsx │ │ ├── index.ts │ │ └── popup.ts │ └── tsconfig.json ├── sdk │ ├── .npmignore │ ├── createSdk.ts │ ├── index.ts │ ├── package.json │ ├── tsconfig.json │ ├── venice.oas.d.ts │ └── venice.oas.json └── vdk │ ├── index.ts │ ├── new-mapper.spec.ts │ ├── new-mapper.ts │ └── package.json ├── logo.png ├── package.json ├── packages ├── engine-backend │ ├── context.ts │ ├── events.ts │ ├── index.ts │ ├── package.json │ ├── parseWebhookRequest.ts │ ├── router │ │ ├── _base.ts │ │ ├── _schemas.ts │ │ ├── adminRouter.ts │ │ ├── connectorConfigRouter.ts │ │ ├── connectorRouter.ts │ │ ├── endUserRouter.ts │ │ ├── index.ts │ │ ├── pipelineRouter.ts │ │ ├── protectedRouter.ts │ │ ├── publicRouter.ts │ │ ├── resourceRouter.ts │ │ └── systemRouter.ts │ ├── services │ │ ├── NoopMetaService.ts │ │ ├── dbService.ts │ │ ├── index.ts │ │ ├── kvStore.ts │ │ ├── makeMetaLinks.ts │ │ ├── metaService.ts │ │ └── sync-service.ts │ └── types.ts ├── engine-frontend │ ├── TRPCProvider.tsx │ ├── VeniceConnect.tsx │ ├── index.ts │ ├── lib │ │ └── useGetter.ts │ └── package.json ├── meta-service-airbyte │ ├── Dockerfile │ ├── Dockerfile.dockerignore │ ├── READMD.md │ ├── airbyte-sdk.ts │ ├── airbyteMetaService.ts │ ├── api │ │ ├── airbyte-api-connections.gen.d.ts │ │ ├── airbyte-api-connections.oas.json │ │ ├── airbyte-api-destinations.gen.d.ts │ │ ├── airbyte-api-destinations.oas.json │ │ ├── airbyte-api-health.gen.d.ts │ │ ├── airbyte-api-health.oas.json │ │ ├── airbyte-api-jobs.gen.d.ts │ │ ├── airbyte-api-jobs.oas.json │ │ ├── airbyte-api-sources.gen.d.ts │ │ ├── airbyte-api-sources.oas.json │ │ ├── airbyte-api-streams.gen.d.ts │ │ ├── airbyte-api-streams.oas.json │ │ ├── airbyte-api-workspaces.gen.d.ts │ │ ├── airbyte-api-workspaces.oas.json │ │ ├── airbyte-private-api.gen.d.ts │ │ └── airbyte-private-api.oas.json │ ├── bin │ │ └── yaml2json.js │ ├── index.ts │ ├── makeAirbyteConnector.ts │ ├── package.json │ ├── protocol │ │ ├── low-code-connector.gen.ts │ │ ├── low-code-connector.oas.json │ │ ├── protocol.gen.ts │ │ ├── protocol.oas.json │ │ └── protocol.ts │ ├── redocly.yaml │ ├── sample │ │ ├── configured-catalog.json │ │ └── src-config.json │ └── utils.ts ├── meta-service-fs │ ├── index.ts │ ├── makeFsKVStore.ts │ └── package.json ├── meta-service-postgres │ ├── index.ts │ ├── makePostgresMetaService.ts │ └── package.json ├── meta-service-redis │ ├── index.ts │ ├── package.json │ └── redisKvStore.ts ├── ui │ ├── LICENSE │ ├── command │ │ ├── command-components.tsx │ │ ├── command-fns.spec.ts │ │ ├── command-fns.ts │ │ ├── command-types.ts │ │ └── index.ts │ ├── components │ │ ├── CodeEditor.tsx │ │ ├── DataGrid.tsx │ │ ├── DataTable.tsx │ │ ├── EffectContainer.tsx │ │ ├── Icon.tsx │ │ ├── Kbd.tsx │ │ ├── LoadingText.tsx │ │ ├── SchemaForm.tsx │ │ ├── SchemaSheet.tsx │ │ └── index.ts │ ├── domain-components │ │ ├── ConnectorCard.tsx │ │ ├── ResourceCard.tsx │ │ └── index.ts │ ├── hooks │ │ ├── index.ts │ │ ├── useConstant.ts │ │ ├── useWhyDidYouUpdate.ts │ │ └── useWithToast.ts │ ├── index.ts │ ├── package.json │ ├── shadcn │ │ ├── AlertDialog.tsx │ │ ├── Badge.tsx │ │ ├── Breadcrumb.tsx │ │ ├── Button.tsx │ │ ├── Card.tsx │ │ ├── Checkbox.tsx │ │ ├── Combobox.tsx │ │ ├── Command.tsx │ │ ├── Dialog.tsx │ │ ├── DropdownMenu.tsx │ │ ├── Input.tsx │ │ ├── Label.tsx │ │ ├── Popover.tsx │ │ ├── ScrollArea.tsx │ │ ├── Separator.tsx │ │ ├── Sheet.tsx │ │ ├── Table.tsx │ │ ├── Toast.tsx │ │ ├── Toaster.tsx │ │ └── index.ts │ └── utils.ts └── util │ ├── @types │ └── blossomfinance__iso-4217-currencies.d.ts │ ├── BehaviorObservable.ts │ ├── LICENSE │ ├── amount-utils.spec.ts │ ├── amount-utils.ts │ ├── array-utils.ts │ ├── balance-utils.ts │ ├── converter-utils.ts │ ├── date-utils.spec.ts │ ├── date-utils.ts │ ├── debug-utils.ts │ ├── di-utils.ts │ ├── env-utils.spec.ts │ ├── env-utils.ts │ ├── error-utils.ts │ ├── formatting-amount.spec.ts │ ├── formatting-amount.ts │ ├── formatting-number.ts │ ├── fs-utils.ts │ ├── function-utils.ts │ ├── http │ ├── http-utils.ts │ ├── index.ts │ ├── makeHttpClient.ts │ ├── makeOpenApiClient.ts │ └── oauth-utils.ts │ ├── id-utils.ts │ ├── immutable-utils.ts │ ├── index.ts │ ├── injected-utils.ts │ ├── iterable-utils.spec.ts │ ├── iterable-utils.ts │ ├── json-utils.ts │ ├── jsonschema-nodewalker.ts │ ├── logging-utils.ts │ ├── math-utils.ts │ ├── object-utils.spec.ts │ ├── object-utils.ts │ ├── observable-utils.ts │ ├── package.json │ ├── perf-utils.ts │ ├── promise-utils.ts │ ├── proxy-utils.spec.ts │ ├── proxy-utils.ts │ ├── schrono │ ├── MPDate.ts │ ├── MPInterval.spec.ts │ ├── MPInterval.ts │ ├── __snapshots__ │ │ └── simple-schedule.spec.ts.snap │ ├── __tests__ │ │ ├── __snapshots__ │ │ │ └── schrono.spec.ts.snap │ │ ├── iso-date.spec.ts │ │ ├── natural-date.spec.ts │ │ └── schrono.spec.ts │ ├── chrono-parsers │ │ ├── RelativeDateFormatParser.ts │ │ ├── TimeUnitCasualRelativeFormatParser.ts │ │ └── chrono-parser-utils.ts │ ├── index.ts │ ├── schrono-utils.spec.ts │ ├── schrono-utils.ts │ ├── simple-duration.spec.ts │ ├── simple-duration.ts │ ├── simple-schedule.spec.ts │ └── simple-schedule.ts │ ├── string-utils.spec.ts │ ├── string-utils.ts │ ├── type-utils.ts │ ├── url-utils.spec.ts │ ├── url-utils.ts │ ├── zod-function-utils.ts │ ├── zod-jsonschema-utils.ts │ ├── zod-trpc-utils.ts │ └── zod-utils.ts ├── patches ├── @lilyrose2798__trpc-openapi@1.3.10.patch ├── @nangohq__frontend@0.33.8.patch ├── @stoplight__elements-core@7.7.10.patch ├── cac@6.7.12.patch ├── esbuild-jest@0.5.0.patch ├── firebase@9.8.1.patch ├── micro-memoize@4.0.10.patch └── typescript@4.8.2.patch ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── prettier.config.js ├── tsconfig.base.json ├── tsconfig.json ├── turbo.json ├── utils ├── env │ ├── index.ts │ ├── package.json │ └── tsconfig.json ├── openapi-client │ ├── .npmignore │ ├── index.ts │ ├── package.json │ ├── src │ │ ├── HTTPError.ts │ │ ├── createClient.ts │ │ ├── createOauthClient.ts │ │ └── index.ts │ └── tsconfig.json ├── types │ ├── PathsOf.ts │ ├── index.ts │ ├── package.json │ └── tsconfig.json └── zod │ ├── index.spec.ts │ ├── index.ts │ ├── package.json │ └── tsconfig.json └── verticals ├── vertical-accounting ├── accounting.ts ├── index.ts └── package.json ├── vertical-banking ├── adapters │ ├── qbo-adapter.ts │ └── xero-adapter.ts ├── banking.ts ├── index.ts └── package.json ├── vertical-investment ├── index.ts ├── investment.ts └── package.json ├── vertical-pta ├── index.ts ├── package.json ├── pta-types.ts └── pta-utils.ts └── vertical-sales-engagement ├── adapters ├── apollo-adapter.ts ├── outreach-adapter.ts └── salesloft-adapter.ts ├── index.ts ├── package.json ├── sales-engagement.ts └── schemas.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 2 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.patch] 15 | charset = unset 16 | end_of_line = unset 17 | indent_size = unset 18 | indent_style = unset 19 | insert_final_newline = unset 20 | trim_trailing_whitespace = unset 21 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Unignore dotfiles 2 | !.* 3 | 4 | # dependencies 5 | **/node_modules/ 6 | 7 | # temporary files 8 | **/temp/ 9 | 10 | # generated files 11 | **/__generated__/ 12 | *.generated.* 13 | *.gen.* 14 | *.oas.* 15 | 16 | # jest 17 | *.snap 18 | 19 | # next.js 20 | /apps/web/.next/ 21 | /apps/web/out/ 22 | 23 | # vim: set filetype=ignore: 24 | .obsidian/ 25 | 26 | docs/venice.oas.json 27 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | **/__generated__/ linguist-generated=true 2 | **/*.generated.* linguist-generated=true 3 | **/*.gen.* linguist-generated=true 4 | **/*.openapi.* linguist-generated=true 5 | **/*.oas.* linguist-generated=true 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | **/node_modules 5 | **/.pnp 6 | **/.pnp.js 7 | 8 | # testing 9 | /coverage 10 | /apps/tests 11 | 12 | # next.js 13 | /apps/web/.next/ 14 | /apps/web/out/ 15 | 16 | # production 17 | /apps/web/build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | .pnpm-debug.log* 28 | 29 | # local env files except example 30 | .env* 31 | !.env.example 32 | 33 | # symlinked for working with veniceFS 34 | /data 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | 42 | # eslint 43 | .eslintcache 44 | 45 | # tailwind 46 | /apps/web/__generated__/tailwind.css 47 | 48 | *.secret.json 49 | 50 | temp/ 51 | # We version control json files instead of the yaml ones 52 | *.oas.yaml 53 | .turbo 54 | dist/ 55 | 56 | *.play.* 57 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "apps/tests"] 2 | path = apps/tests 3 | url = git@github.com:alkafinance/ledger-sync-tests.git 4 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx lint-staged 5 | pnpm run typecheck -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | tsup.config.ts 2 | tsconfig.json 3 | .turbo 4 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | public-hoist-pattern[]=@jest/types 2 | public-hoist-pattern[]=@trpc/server 3 | public-hoist-pattern[]=*babel* 4 | public-hoist-pattern[]=*eslint* 5 | public-hoist-pattern[]=cac 6 | public-hoist-pattern[]=chrono-node 7 | public-hoist-pattern[]=firebase 8 | public-hoist-pattern[]=micro-memoize 9 | public-hoist-pattern[]=next 10 | public-hoist-pattern[]=plaid 11 | public-hoist-pattern[]=remeda 12 | public-hoist-pattern[]=zod 13 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | **/node_modules/ 3 | 4 | # temporary files 5 | **/temp/ 6 | 7 | # generated files 8 | **/__generated__/ 9 | *.generated.* 10 | *.gen.* 11 | # *.oas.* 12 | 13 | # jest 14 | *.snap 15 | 16 | # next.js 17 | /apps/web/.next/ 18 | /apps/web/out/ 19 | 20 | # pnpm 21 | pnpm-lock.yaml 22 | 23 | # vim: set filetype=ignore: 24 | 25 | .obsidian/ 26 | 27 | docs/venice.oas.json 28 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "adpyke.vscode-sql-formatter", 4 | "bradlc.vscode-tailwindcss", 5 | "chrislajoie.vscode-modelines", 6 | "dbaeumer.vscode-eslint", 7 | "editorconfig.editorconfig", 8 | "esbenp.prettier-vscode", 9 | "fabiospampinato.vscode-highlight", 10 | "forbeslindesay.vscode-sql-template-literal", 11 | "maptz.regionfolder", 12 | "mikestead.dotenv", 13 | "naumovs.color-highlight", 14 | "orta.vscode-jest", 15 | "spywhere.mark-jump", 16 | "usernamehw.errorlens" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "node", 9 | "request": "launch", 10 | "name": "Run file", 11 | "runtimeArgs": ["--loader", "tsx"], 12 | "console": "integratedTerminal", 13 | "args": ["${file}"] 14 | }, 15 | { 16 | "type": "node", 17 | "request": "attach", 18 | "name": "Attach to --inspect-brk", 19 | "port": 9229 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting a Vulnerability 2 | 3 | >**Please do not post security vulnerabilities on our community Discord or file them as GitHub issues since those are both public audiences and could lead to additional security concerns.** 4 | 5 | Venice takes security issues very seriously. If you have any concerns about Venice or believe you have uncovered a vulnerability, contact us at security@venice.is. 6 | 7 | In the email, please try to describe the issue and a way to reproduce it. The security team will get back to you as soon as possible. 8 | 9 | 🙏 Please report any security problems to us before disclosing it publicly. 10 | -------------------------------------------------------------------------------- /apps/app-config/connectors/connectors.client.ts: -------------------------------------------------------------------------------- 1 | // generated by _generateConnectorLists.ts. Do not modify by hand 2 | import {default as connectorMerge} from '@usevenice/connector-merge/client' 3 | import {default as connectorOnebrick} from '@usevenice/connector-onebrick/client' 4 | import {default as connectorPlaid} from '@usevenice/connector-plaid/client' 5 | import {default as connectorTeller} from '@usevenice/connector-teller/client' 6 | import {default as connectorYodlee} from '@usevenice/connector-yodlee/client' 7 | 8 | export const clientConnectors = { 9 | merge: connectorMerge, 10 | onebrick: connectorOnebrick, 11 | plaid: connectorPlaid, 12 | teller: connectorTeller, 13 | yodlee: connectorYodlee, 14 | } 15 | -------------------------------------------------------------------------------- /apps/cli/README.md: -------------------------------------------------------------------------------- 1 | # Admin Query 2 | 3 | TablePlus -> Queries tab -> Right click -> New -> Add a shared folder to Queries 4 | 5 | This is how we persist common admin / debugging queries during development and share them with the team. 6 | -------------------------------------------------------------------------------- /apps/cli/airbyte-plaid-connector.ts: -------------------------------------------------------------------------------- 1 | import '@usevenice/app-config/register.node' 2 | 3 | import {plaidProvider} from '@usevenice/connector-plaid' 4 | import {makeAirbyteConnector} from '@usevenice/meta-service-airbyte/makeAirbyteConnector' 5 | 6 | import {cliFromRouter} from './cli-utils' 7 | 8 | cliFromRouter(makeAirbyteConnector(plaidProvider), { 9 | jsonOutput: true, 10 | consoleLog: false, 11 | readStdin: false, 12 | }).parse(process.argv) 13 | -------------------------------------------------------------------------------- /apps/cli/pgMigrator-cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env tsx 2 | import '@usevenice/app-config/register.node' 3 | 4 | import path from 'node:path' 5 | 6 | import {makePostgresClient} from '@usevenice/connector-postgres' 7 | import {z} from '@usevenice/util' 8 | 9 | void makePostgresClient({ 10 | databaseUrl: z.string().parse(process.env['POSTGRES_OR_WEBHOOK_URL']), 11 | migrationsPath: path.join(__dirname, '../web/migrations'), 12 | migrationTableName: '_migrations', 13 | }).runMigratorCli() 14 | -------------------------------------------------------------------------------- /apps/gondola/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | .env 31 | 32 | # vercel 33 | .vercel 34 | 35 | # tailwind 36 | /__generated__/tailwind.css 37 | 38 | # Sentry 39 | .sentryclirc 40 | 41 | # Auto generated by next.js, but not used by us because we use monorepo 42 | .vscode 43 | -------------------------------------------------------------------------------- /apps/gondola/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import './global.css' 2 | 3 | import NextTopLoader from 'nextjs-toploader' 4 | 5 | export const metadata = { 6 | title: 'Gondola, your financial DB', 7 | // icons: [{url: '/favicon.svg', type: 'image/svg+xml'}], 8 | } 9 | 10 | export default function RootLayout({children}: {children: React.ReactNode}) { 11 | return ( 12 | 13 |
14 | 15 |11 | // A dashboard is coming soon. In the meantime check out entities section 12 | // and magic link page 13 | //
14 | //Under construction
8 |{JSON.stringify(serverComponentGetAuth(), null, 2)}10 |
19 | Please pass a valid venice connect token in the url as query param 20 | `?token=` 21 |
22 | )} 23 |(
16 | prefix: P,
17 | externalId: string | null | undefined,
18 | ) {
19 | return `${prefix}_${externalId ?? makeUlid()}` as const
20 | }
21 |
--------------------------------------------------------------------------------
/packages/util/immutable-utils.ts:
--------------------------------------------------------------------------------
1 | import {setAutoFreeze} from 'immer'
2 |
3 | // Auto-freeze is not cool...
4 | // @see https://github.com/immerjs/immer/issues/959
5 | setAutoFreeze(false)
6 |
7 | // Should this live in its own separate file?
8 | export {produce} from 'immer' // Auto-freeze is cool
9 | export type {WritableDraft} from 'immer/dist/types/types-external' // Auto-freeze is cool
10 |
--------------------------------------------------------------------------------
/packages/util/injected-utils.ts:
--------------------------------------------------------------------------------
1 | import {defineProxyFn} from './di-utils'
2 |
3 | /** @deprecated */
4 | export const $ensureDir =
5 | defineProxyFn<(path: string) => Promise