From d47556dc3c1bed2eaa06d448cadf2c3b4f467077 Mon Sep 17 00:00:00 2001 From: Jimmy Luong Date: Mon, 6 Jul 2026 22:24:20 +1000 Subject: [PATCH 1/2] refactor(dataconnect): extract accounts connector from example connector Splits the Account/AccountContact queries and mutations out of the example connector into a new accounts connector, generating a dedicated accounts-data-connector-admin admin SDK package for functions. Also works around a firebase-admin bug (getDataConnect caches DataConnect instances by location/serviceId only, ignoring the connector), which the functions code now hits since it calls two connectors sharing one service in the same process. Fixed upstream in https://github.com/firebase/firebase-admin-node/pull/3055; until a release with that fix is out, functions construct their own DataConnect instance per connector instead of relying on the shared cache. Co-Authored-By: Claude Sonnet 5 --- data/connectors/accounts/connector.yaml | 5 + data/connectors/accounts/mutations.gql | 91 ++++++ data/connectors/accounts/queries.gql | 73 +++++ data/connectors/example/mutations.gql | 92 ------ data/connectors/example/queries.gql | 74 ----- dataconnect.yaml | 1 + .../plaster-calculator-functions/package.json | 1 + .../src/accounts.ts | 32 +- .../src/data-connect.ts | 33 ++ .../src/floorplan-pages.ts | 13 +- .../src/ownership.ts | 26 +- .../src/page-analysis.ts | 5 +- .../src/processing-pages.ts | 3 +- .../src/processing.ts | 9 +- .../src/projects.ts | 28 +- .../src/quote-follow-up.ts | 11 +- .../src/reminders.ts | 17 +- .../src/settings.ts | 6 +- .../plaster-calculator-functions/src/types.ts | 6 +- .../esm/index.esm.js | 74 +++++ .../esm/package.json | 1 + .../index.cjs.js | 86 +++++ .../accounts-data-connector-admin/index.d.ts | 304 ++++++++++++++++++ .../package.json | 25 ++ .../example-data-connector/esm/index.esm.js | 66 ---- generated/example-data-connector/index.cjs.js | 77 ----- generated/example-data-connector/index.d.ts | 207 ------------ pnpm-lock.yaml | 9 + 28 files changed, 803 insertions(+), 572 deletions(-) create mode 100644 data/connectors/accounts/connector.yaml create mode 100644 data/connectors/accounts/mutations.gql create mode 100644 data/connectors/accounts/queries.gql create mode 100644 functions/plaster-calculator-functions/src/data-connect.ts create mode 100644 generated/accounts-data-connector-admin/esm/index.esm.js create mode 100644 generated/accounts-data-connector-admin/esm/package.json create mode 100644 generated/accounts-data-connector-admin/index.cjs.js create mode 100644 generated/accounts-data-connector-admin/index.d.ts create mode 100644 generated/accounts-data-connector-admin/package.json diff --git a/data/connectors/accounts/connector.yaml b/data/connectors/accounts/connector.yaml new file mode 100644 index 0000000..b96635a --- /dev/null +++ b/data/connectors/accounts/connector.yaml @@ -0,0 +1,5 @@ +connectorId: accounts +generate: + adminNodeSdk: + - package: "@generated/accounts-data-connector-admin" + outputDir: ../../../generated/accounts-data-connector-admin diff --git a/data/connectors/accounts/mutations.gql b/data/connectors/accounts/mutations.gql new file mode 100644 index 0000000..ad126fb --- /dev/null +++ b/data/connectors/accounts/mutations.gql @@ -0,0 +1,91 @@ +mutation CreateAccount( + $id: UUID! + $ownerId: String! + $companyName: String! + $businessNumber: String + $phoneNumber: String +) @auth(level: NO_ACCESS) { + account_insert( + data: { + id: $id + ownerId: $ownerId + companyName: $companyName + businessNumber: $businessNumber + phoneNumber: $phoneNumber + createdAt_expr: "request.time" + updatedAt_expr: "request.time" + } + ) +} + +mutation UpdateAccount( + $id: UUID! + $companyName: String + $businessNumber: String + $phoneNumber: String + $primaryContactId: UUID +) @auth(level: NO_ACCESS) { + account_update( + id: $id + data: { + companyName: $companyName + businessNumber: $businessNumber + phoneNumber: $phoneNumber + primaryContactId: $primaryContactId + updatedAt_expr: "request.time" + } + ) +} + +mutation DeleteAccountContacts($accountId: UUID!) @auth(level: NO_ACCESS) { + accountContact_deleteMany(where: { accountId: { eq: $accountId } }) +} + +mutation DeleteAccount($id: UUID!) @auth(level: NO_ACCESS) { + account_delete(id: $id) +} + +mutation CreateAccountContact( + $id: UUID! + $accountId: UUID! + $name: String! + $email: String + $phoneNumber: String + $role: String +) @auth(level: NO_ACCESS) { + accountContact_insert( + data: { + id: $id + accountId: $accountId + name: $name + email: $email + phoneNumber: $phoneNumber + role: $role + createdAt_expr: "request.time" + updatedAt_expr: "request.time" + } + ) +} + +mutation UpdateAccountContact( + $id: UUID! + $name: String + $email: String + $phoneNumber: String + $role: String +) @auth(level: NO_ACCESS) { + accountContact_update( + id: $id + data: { + name: $name + email: $email + phoneNumber: $phoneNumber + role: $role + updatedAt_expr: "request.time" + } + ) +} + +mutation DeleteAccountContact($id: UUID!) @auth(level: NO_ACCESS) { + accountContact_delete(id: $id) +} diff --git a/data/connectors/accounts/queries.gql b/data/connectors/accounts/queries.gql new file mode 100644 index 0000000..d01abdc --- /dev/null +++ b/data/connectors/accounts/queries.gql @@ -0,0 +1,73 @@ +query ListAccountsByOwner($ownerId: String!) @auth(level: NO_ACCESS) { + accounts( + where: { ownerId: { eq: $ownerId } } + orderBy: [{ updatedAt: DESC }] + ) { + id + ownerId + companyName + businessNumber + phoneNumber + primaryContactId + createdAt + updatedAt + } +} + +query GetAccountById($id: UUID!) @auth(level: NO_ACCESS) { + account(id: $id) { + id + ownerId + companyName + businessNumber + phoneNumber + primaryContactId + createdAt + updatedAt + contacts: accountContacts_on_account(orderBy: [{ createdAt: ASC }]) { + id + accountId + name + email + phoneNumber + role + createdAt + updatedAt + } + } +} + +query ListAccountContactsByAccountId($accountId: UUID!) +@auth(level: NO_ACCESS) { + accountContacts( + where: { accountId: { eq: $accountId } } + orderBy: [{ createdAt: ASC }] + ) { + id + accountId + name + email + phoneNumber + role + createdAt + updatedAt + } +} + +query GetAccountContactById($accountId: UUID!, $contactId: UUID!) +@auth(level: NO_ACCESS) { + accountContact( + first: { + where: { id: { eq: $contactId }, accountId: { eq: $accountId } } + } + ) { + id + accountId + name + email + phoneNumber + role + createdAt + updatedAt + } +} diff --git a/data/connectors/example/mutations.gql b/data/connectors/example/mutations.gql index 2e55412..ed6b49f 100644 --- a/data/connectors/example/mutations.gql +++ b/data/connectors/example/mutations.gql @@ -76,98 +76,6 @@ mutation DeleteProject($id: UUID!) @auth(level: NO_ACCESS) { project_delete(id: $id) } -mutation CreateAccount( - $id: UUID! - $ownerId: String! - $companyName: String! - $businessNumber: String - $phoneNumber: String -) @auth(level: NO_ACCESS) { - account_insert( - data: { - id: $id - ownerId: $ownerId - companyName: $companyName - businessNumber: $businessNumber - phoneNumber: $phoneNumber - createdAt_expr: "request.time" - updatedAt_expr: "request.time" - } - ) -} - -mutation UpdateAccount( - $id: UUID! - $companyName: String - $businessNumber: String - $phoneNumber: String - $primaryContactId: UUID -) @auth(level: NO_ACCESS) { - account_update( - id: $id - data: { - companyName: $companyName - businessNumber: $businessNumber - phoneNumber: $phoneNumber - primaryContactId: $primaryContactId - updatedAt_expr: "request.time" - } - ) -} - -mutation DeleteAccountContacts($accountId: UUID!) @auth(level: NO_ACCESS) { - accountContact_deleteMany(where: { accountId: { eq: $accountId } }) -} - -mutation DeleteAccount($id: UUID!) @auth(level: NO_ACCESS) { - account_delete(id: $id) -} - -mutation CreateAccountContact( - $id: UUID! - $accountId: UUID! - $name: String! - $email: String - $phoneNumber: String - $role: String -) @auth(level: NO_ACCESS) { - accountContact_insert( - data: { - id: $id - accountId: $accountId - name: $name - email: $email - phoneNumber: $phoneNumber - role: $role - createdAt_expr: "request.time" - updatedAt_expr: "request.time" - } - ) -} - -mutation UpdateAccountContact( - $id: UUID! - $name: String - $email: String - $phoneNumber: String - $role: String -) @auth(level: NO_ACCESS) { - accountContact_update( - id: $id - data: { - name: $name - email: $email - phoneNumber: $phoneNumber - role: $role - updatedAt_expr: "request.time" - } - ) -} - -mutation DeleteAccountContact($id: UUID!) @auth(level: NO_ACCESS) { - accountContact_delete(id: $id) -} - mutation UpsertUserSettings( $ownerId: String! $quoteFollowUpEnabled: Boolean! diff --git a/data/connectors/example/queries.gql b/data/connectors/example/queries.gql index 76ed43c..d47323c 100644 --- a/data/connectors/example/queries.gql +++ b/data/connectors/example/queries.gql @@ -151,80 +151,6 @@ query GetFloorplanPageById($projectId: UUID!, $pageId: UUID!) } } -query ListAccountsByOwner($ownerId: String!) @auth(level: NO_ACCESS) { - accounts( - where: { ownerId: { eq: $ownerId } } - orderBy: [{ updatedAt: DESC }] - ) { - id - ownerId - companyName - businessNumber - phoneNumber - primaryContactId - createdAt - updatedAt - } -} - -query GetAccountById($id: UUID!) @auth(level: NO_ACCESS) { - account(id: $id) { - id - ownerId - companyName - businessNumber - phoneNumber - primaryContactId - createdAt - updatedAt - contacts: accountContacts_on_account(orderBy: [{ createdAt: ASC }]) { - id - accountId - name - email - phoneNumber - role - createdAt - updatedAt - } - } -} - -query ListAccountContactsByAccountId($accountId: UUID!) -@auth(level: NO_ACCESS) { - accountContacts( - where: { accountId: { eq: $accountId } } - orderBy: [{ createdAt: ASC }] - ) { - id - accountId - name - email - phoneNumber - role - createdAt - updatedAt - } -} - -query GetAccountContactById($accountId: UUID!, $contactId: UUID!) -@auth(level: NO_ACCESS) { - accountContact( - first: { - where: { id: { eq: $contactId }, accountId: { eq: $accountId } } - } - ) { - id - accountId - name - email - phoneNumber - role - createdAt - updatedAt - } -} - query GetUserSettings($ownerId: String!) @auth(level: NO_ACCESS) { userSettings(key: { ownerId: $ownerId }) { ownerId diff --git a/dataconnect.yaml b/dataconnect.yaml index 0141ace..8026d1c 100644 --- a/dataconnect.yaml +++ b/dataconnect.yaml @@ -11,4 +11,5 @@ schemas: schemaValidation: "STRICT" connectorDirs: - ./data/connectors/example + - ./data/connectors/accounts - ./data/connectors/questionnaires diff --git a/functions/plaster-calculator-functions/package.json b/functions/plaster-calculator-functions/package.json index 67e1369..5c2b506 100644 --- a/functions/plaster-calculator-functions/package.json +++ b/functions/plaster-calculator-functions/package.json @@ -11,6 +11,7 @@ "logs": "firebase functions:log" }, "dependencies": { + "@generated/accounts-data-connector-admin": "workspace:*", "@generated/example-data-connector": "workspace:*", "firebase-admin": "^13.10.0", "firebase-functions": "^7.2.5", diff --git a/functions/plaster-calculator-functions/src/accounts.ts b/functions/plaster-calculator-functions/src/accounts.ts index 65fb878..98f0823 100644 --- a/functions/plaster-calculator-functions/src/accounts.ts +++ b/functions/plaster-calculator-functions/src/accounts.ts @@ -12,10 +12,11 @@ import { listAccountsByOwner, updateAccount as dcUpdateAccount, updateAccountContact as dcUpdateAccountContact, -} from "@generated/example-data-connector"; +} from "@generated/accounts-data-connector-admin"; import { onCall } from "firebase-functions/https"; import { requireAuth } from "./auth.js"; +import { accountsDataConnect } from "./data-connect.js"; import { toAccountContact, toAccountDetail, @@ -48,7 +49,9 @@ export const listAccounts = onCall< Promise<{ accounts: AccountSummary[] }> >(async (request) => { const auth = requireAuth(request); - const response = await listAccountsByOwner({ ownerId: auth.uid }); + const response = await listAccountsByOwner(accountsDataConnect, { + ownerId: auth.uid, + }); return { accounts: response.data.accounts.map(toAccountSummary) }; }); @@ -71,7 +74,10 @@ export const listAccountContactsByAccountId = onCall< const auth = requireAuth(request); const accountId = readRequiredString(request.data.accountId, "Account ID"); await requireOwnedAccount(accountId, auth.uid); - const response = await dcListAccountContactsByAccountId({ accountId }); + const response = await dcListAccountContactsByAccountId( + accountsDataConnect, + { accountId }, + ); return { contacts: response.data.accountContacts.map(toAccountContact) }; }); @@ -81,7 +87,7 @@ export const createAccount = onCall< >(async (request) => { const auth = requireAuth(request); const accountId = randomUUID(); - await dcCreateAccount({ + await dcCreateAccount(accountsDataConnect, { id: accountId, ownerId: auth.uid, companyName: readRequiredString( @@ -120,7 +126,7 @@ export const updateAccount = onCall< await requireOwnedAccountContact(accountId, primaryContactId, auth.uid); } - await dcUpdateAccount({ + await dcUpdateAccount(accountsDataConnect, { id: accountId, companyName: hasField(data, "companyName") ? readRequiredString(data.companyName, "Company name") @@ -145,8 +151,8 @@ export const deleteAccount = onCall>( "Account ID", ); await requireOwnedAccount(accountId, auth.uid); - await dcDeleteAccountContacts({ accountId }); - await dcDeleteAccount({ id: accountId }); + await dcDeleteAccountContacts(accountsDataConnect, { accountId }); + await dcDeleteAccount(accountsDataConnect, { id: accountId }); return { ok: true }; }, ); @@ -159,7 +165,7 @@ export const createAccountContact = onCall< const accountId = readRequiredString(request.data.accountId, "Account ID"); const account = await requireOwnedAccount(accountId, auth.uid); const contactId = randomUUID(); - await dcCreateAccountContact({ + await dcCreateAccountContact(accountsDataConnect, { id: contactId, accountId, name: readRequiredString(request.data.name, "Contact name"), @@ -170,7 +176,7 @@ export const createAccountContact = onCall< ), role: readOptionalNullableString(request.data.role, "Role"), }); - await dcUpdateAccount({ + await dcUpdateAccount(accountsDataConnect, { id: accountId, companyName: account.companyName, businessNumber: account.businessNumber ?? null, @@ -197,7 +203,7 @@ export const updateAccountContact = onCall< ); const data = request.data; - await dcUpdateAccountContact({ + await dcUpdateAccountContact(accountsDataConnect, { id: contactId, name: hasField(data, "name") ? readRequiredString(data.name, "Contact name") @@ -227,7 +233,7 @@ export const deleteAccountContact = onCall< await requireOwnedAccountContact(accountId, contactId, auth.uid); if (account.primaryContactId === contactId) { - await dcUpdateAccount({ + await dcUpdateAccount(accountsDataConnect, { id: accountId, companyName: account.companyName, businessNumber: account.businessNumber ?? null, @@ -236,7 +242,7 @@ export const deleteAccountContact = onCall< }); } - await dcDeleteAccountContact({ id: contactId }); + await dcDeleteAccountContact(accountsDataConnect, { id: contactId }); return toAccountDetail(await requireOwnedAccount(accountId, auth.uid)); }); @@ -249,7 +255,7 @@ export const setPrimaryAccountContact = onCall< const contactId = readRequiredString(request.data.contactId, "Contact ID"); const account = await requireOwnedAccount(accountId, auth.uid); await requireOwnedAccountContact(accountId, contactId, auth.uid); - await dcUpdateAccount({ + await dcUpdateAccount(accountsDataConnect, { id: accountId, companyName: account.companyName, businessNumber: account.businessNumber ?? null, diff --git a/functions/plaster-calculator-functions/src/data-connect.ts b/functions/plaster-calculator-functions/src/data-connect.ts new file mode 100644 index 0000000..e9d2d97 --- /dev/null +++ b/functions/plaster-calculator-functions/src/data-connect.ts @@ -0,0 +1,33 @@ +import "./bootstrap.js"; + +import { connectorConfig as accountsConnectorConfig } from "@generated/accounts-data-connector-admin"; +import { connectorConfig as exampleConnectorConfig } from "@generated/example-data-connector"; +import { getApp, type App } from "firebase-admin/app"; +import { DataConnect, type ConnectorConfig } from "firebase-admin/data-connect"; + +const app = getApp(); + +// The public .d.ts hides DataConnect's constructor (it's @internal-tagged), +// but the runtime class does accept (connectorConfig, app) - see +// firebase-admin/lib/data-connect/data-connect.js. Cast to restore the real +// signature so we can construct instances ourselves. +const DataConnectCtor = DataConnect as unknown as new ( + connectorConfig: ConnectorConfig, + app: App, +) => DataConnect; + +// firebase-admin's getDataConnect() caches instances keyed only by +// `${location}-${serviceId}`, ignoring the connector name, so two connectors +// sharing a service silently collide and route operations to whichever +// connector's client was constructed first in the process. Constructing our +// own instances per connector bypasses that shared cache. Fixed upstream in +// https://github.com/firebase/firebase-admin-node/pull/3055 - once a release +// containing that fix is out, this workaround can be removed. +export const accountsDataConnect = new DataConnectCtor( + accountsConnectorConfig, + app, +); +export const exampleDataConnect = new DataConnectCtor( + exampleConnectorConfig, + app, +); diff --git a/functions/plaster-calculator-functions/src/floorplan-pages.ts b/functions/plaster-calculator-functions/src/floorplan-pages.ts index b0b47a4..abb7440 100644 --- a/functions/plaster-calculator-functions/src/floorplan-pages.ts +++ b/functions/plaster-calculator-functions/src/floorplan-pages.ts @@ -8,6 +8,7 @@ import { import { HttpsError, onCall } from "firebase-functions/https"; import { requireAuth } from "./auth.js"; +import { exampleDataConnect } from "./data-connect.js"; import { toDetail, toPage } from "./mappers.js"; import { requireFloorplanPage, requireOwnedProject } from "./ownership.js"; import { @@ -66,7 +67,7 @@ export const updateFloorplanPage = onCall< } const nextValues = nextFloorplanPageValues(request.data, page); - await dcUpdateFloorplanPage({ + await dcUpdateFloorplanPage(exampleDataConnect, { id: page.id, overlayJson: nextValues.overlayJson, scaleMmPerPx: nextValues.scaleMmPerPx, @@ -74,7 +75,7 @@ export const updateFloorplanPage = onCall< referencePointsJson: nextValues.referencePointsJson, referenceLengthMm: nextValues.referenceLengthMm, }); - await touchProject({ id: projectId }); + await touchProject(exampleDataConnect, { id: projectId }); return toPage(await requireFloorplanPage(projectId, page.id)); }); @@ -126,7 +127,7 @@ export const initializeFloorplanPages = onCall< } await requireStorageImage(entry.path); const sourceImageUrl = await ensureFileDownloadUrl(entry.path); - await dcCreateFloorplanPage({ + await dcCreateFloorplanPage(exampleDataConnect, { projectId, pageNumber: entry.pageNumber, status: "READY", @@ -146,7 +147,7 @@ export const initializeFloorplanPages = onCall< }); } - await touchProject({ + await touchProject(exampleDataConnect, { id: projectId, status: "READY", processingError: null, @@ -210,7 +211,7 @@ export const updateFloorplanPages = onCall< for (const page of project.pages) { const nextValues = nextBatchPageValues(data, page); - await dcUpdateFloorplanPage({ + await dcUpdateFloorplanPage(exampleDataConnect, { id: page.id, overlayJson: page.overlayJson ?? null, scaleMmPerPx: nextValues.scaleMmPerPx, @@ -220,7 +221,7 @@ export const updateFloorplanPages = onCall< }); } - await touchProject({ id: projectId }); + await touchProject(exampleDataConnect, { id: projectId }); return toDetail(await requireOwnedProject(projectId, auth.uid)); }); diff --git a/functions/plaster-calculator-functions/src/ownership.ts b/functions/plaster-calculator-functions/src/ownership.ts index 516463d..6374282 100644 --- a/functions/plaster-calculator-functions/src/ownership.ts +++ b/functions/plaster-calculator-functions/src/ownership.ts @@ -1,16 +1,22 @@ import { getAccountById, getAccountContactById, +} from "@generated/accounts-data-connector-admin"; +import { getFloorplanPageById, getProjectDetailsById, getReminderById, } from "@generated/example-data-connector"; import { HttpsError } from "firebase-functions/https"; +import { accountsDataConnect, exampleDataConnect } from "./data-connect.js"; + export async function requireOwnedProject(projectId: string, ownerId: string) { // TODO: Add a lightweight ownership helper backed by getProjectById for // callsites that do not need floorplan pages. - const response = await getProjectDetailsById({ id: projectId }); + const response = await getProjectDetailsById(exampleDataConnect, { + id: projectId, + }); const project = response.data.project; if (!project || project.ownerId !== ownerId) { throw new HttpsError("not-found", "Project was not found."); @@ -20,7 +26,9 @@ export async function requireOwnedProject(projectId: string, ownerId: string) { } export async function requireOwnedAccount(accountId: string, ownerId: string) { - const response = await getAccountById({ id: accountId }); + const response = await getAccountById(accountsDataConnect, { + id: accountId, + }); const account = response.data.account; if (!account || account.ownerId !== ownerId) { throw new HttpsError("not-found", "Account was not found."); @@ -35,7 +43,10 @@ export async function requireOwnedAccountContact( ownerId: string, ) { await requireOwnedAccount(accountId, ownerId); - const response = await getAccountContactById({ accountId, contactId }); + const response = await getAccountContactById(accountsDataConnect, { + accountId, + contactId, + }); const contact = response.data.accountContact; if (!contact) { throw new HttpsError("not-found", "Contact was not found."); @@ -48,7 +59,9 @@ export async function requireOwnedReminder( reminderId: string, ownerId: string, ) { - const response = await getReminderById({ id: reminderId }); + const response = await getReminderById(exampleDataConnect, { + id: reminderId, + }); const reminder = response.data.reminder; if (!reminder || reminder.ownerId !== ownerId) { throw new HttpsError("not-found", "Reminder was not found."); @@ -57,7 +70,10 @@ export async function requireOwnedReminder( return reminder; } export async function requireFloorplanPage(projectId: string, pageId: string) { - const response = await getFloorplanPageById({ projectId, pageId }); + const response = await getFloorplanPageById(exampleDataConnect, { + projectId, + pageId, + }); const page = response.data.floorplanPage; if (!page) { throw new HttpsError("not-found", "Page was not found."); diff --git a/functions/plaster-calculator-functions/src/page-analysis.ts b/functions/plaster-calculator-functions/src/page-analysis.ts index 0c15e7a..69f1835 100644 --- a/functions/plaster-calculator-functions/src/page-analysis.ts +++ b/functions/plaster-calculator-functions/src/page-analysis.ts @@ -5,6 +5,7 @@ import { HttpsError, onCall } from "firebase-functions/https"; import * as logger from "firebase-functions/logger"; import { requireAuth } from "./auth.js"; +import { exampleDataConnect } from "./data-connect.js"; import { toDetail } from "./mappers.js"; import { requireFloorplanPage, requireOwnedProject } from "./ownership.js"; import { analyzePageImage } from "./processing-pages.js"; @@ -66,7 +67,7 @@ export const analyzeFloorplanPage = onCall< imageBytes: source, strategy, }); - await updateFloorplanPageAnalysis({ + await updateFloorplanPageAnalysis(exampleDataConnect, { id: page.id, status: "READY", processingError: null, @@ -130,7 +131,7 @@ async function writeAnalysisState( status: "PROCESSING" | "FAILED", processingError: string | null, ): Promise { - await updateFloorplanPageAnalysis({ + await updateFloorplanPageAnalysis(exampleDataConnect, { id: page.id, status, processingError, diff --git a/functions/plaster-calculator-functions/src/processing-pages.ts b/functions/plaster-calculator-functions/src/processing-pages.ts index 92b48ae..08fd806 100644 --- a/functions/plaster-calculator-functions/src/processing-pages.ts +++ b/functions/plaster-calculator-functions/src/processing-pages.ts @@ -5,6 +5,7 @@ import { buildOverlayFromAnalyzerResult, callFloorplanAnalyzer, } from "./analyzer.js"; +import { exampleDataConnect } from "./data-connect.js"; import { fetchStorageImage, storageProjectId, @@ -121,7 +122,7 @@ async function analysePage( strategy, }); - await dcCreateFloorplanPage({ + await dcCreateFloorplanPage(exampleDataConnect, { projectId, pageNumber, status: "READY", diff --git a/functions/plaster-calculator-functions/src/processing.ts b/functions/plaster-calculator-functions/src/processing.ts index 466e9c2..275a96e 100644 --- a/functions/plaster-calculator-functions/src/processing.ts +++ b/functions/plaster-calculator-functions/src/processing.ts @@ -8,6 +8,7 @@ import { HttpsError, onCall } from "firebase-functions/https"; import * as logger from "firebase-functions/logger"; import { requireAuth } from "./auth.js"; +import { exampleDataConnect } from "./data-connect.js"; import { toDetail } from "./mappers.js"; import { requireOwnedProject } from "./ownership.js"; import { analyseProjectPages } from "./processing-pages.js"; @@ -70,12 +71,12 @@ export const processProject = onCall< ) : new Map(); - await touchProject({ + await touchProject(exampleDataConnect, { id: projectId, status: "PROCESSING", processingError: null, }); - await dcDeleteFloorplanPages({ projectId }); + await dcDeleteFloorplanPages(exampleDataConnect, { projectId }); try { await analyseProjectPages( @@ -91,7 +92,7 @@ export const processProject = onCall< ? error.message : "Floorplan analysis failed."; logger.error("processProject failed", { projectId, message }); - await touchProject({ + await touchProject(exampleDataConnect, { id: projectId, status: "FAILED", processingError: message, @@ -101,7 +102,7 @@ export const processProject = onCall< : new HttpsError("internal", message); } - await touchProject({ + await touchProject(exampleDataConnect, { id: projectId, status: "READY", processingError: null, diff --git a/functions/plaster-calculator-functions/src/projects.ts b/functions/plaster-calculator-functions/src/projects.ts index 15501a1..00518c0 100644 --- a/functions/plaster-calculator-functions/src/projects.ts +++ b/functions/plaster-calculator-functions/src/projects.ts @@ -15,6 +15,7 @@ import { HttpsError, onCall } from "firebase-functions/https"; import { requireAuth } from "./auth.js"; import { buildProjectCsv, csvFileNamePart } from "./csv-export.js"; +import { exampleDataConnect } from "./data-connect.js"; import { toDetail, toDetailWithDownloadUrls, toSummary } from "./mappers.js"; import { requireOwnedAccount, requireOwnedProject } from "./ownership.js"; import { @@ -62,10 +63,13 @@ export const listProjects = onCall< const auth = requireAuth(request); const data = request.data ?? {}; const salesStatus = readSalesStatus(data.salesStatus); - const response = await listProjectsByOwnerAndSalesStatus({ - ownerId: auth.uid, - salesStatus, - }); + const response = await listProjectsByOwnerAndSalesStatus( + exampleDataConnect, + { + ownerId: auth.uid, + salesStatus, + }, + ); return { projects: response.data.projects.map(toSummary) }; }); @@ -76,7 +80,9 @@ export const listProjectsByAccount = onCall< const auth = requireAuth(request); const accountId = readRequiredString(request.data.accountId, "Account ID"); await requireOwnedAccount(accountId, auth.uid); - const response = await dcListProjectsByAccount({ accountId }); + const response = await dcListProjectsByAccount(exampleDataConnect, { + accountId, + }); return { projects: response.data.projects.map(toSummary) }; }); @@ -127,7 +133,7 @@ export const createProjectFromUpload = onCall< const uploadType = inferUploadType(originalFileName, contentType); const pageCount = uploadType === "PDF" ? readPdfPageCount(request.data.pageCount) : 1; - await dcCreateProjectFromUpload({ + await dcCreateProjectFromUpload(exampleDataConnect, { id: projectId, ownerId: auth.uid, accountId, @@ -142,7 +148,7 @@ export const createProjectFromUpload = onCall< }); if (uploadType === "IMAGE") { - await dcCreateFloorplanPage({ + await dcCreateFloorplanPage(exampleDataConnect, { projectId, pageNumber: 1, status: "READY", @@ -186,7 +192,7 @@ export const getProjectStatus = onCall< Promise >(async (request) => { const auth = requireAuth(request); - const response = await getProjectById({ + const response = await getProjectById(exampleDataConnect, { id: readRequiredString(request.data.projectId, "Project ID"), }); const project = response.data.project; @@ -257,8 +263,8 @@ export const deleteProject = onCall>( const project = await requireOwnedProject(projectId, auth.uid); await deleteOwnedProjectStorage(project, auth.uid, projectId); - await dcDeleteFloorplanPages({ projectId }); - await dcDeleteProject({ id: projectId }); + await dcDeleteFloorplanPages(exampleDataConnect, { projectId }); + await dcDeleteProject(exampleDataConnect, { id: projectId }); return { ok: true }; }, @@ -299,7 +305,7 @@ async function updateOwnedProject( const nextSalesStatus = nextSalesStatusFor(updates, project.salesStatus); - await dcUpdateProject({ + await dcUpdateProject(exampleDataConnect, { id: projectId, name: updates.name ?? project.name, accountId: nextAccountId, diff --git a/functions/plaster-calculator-functions/src/quote-follow-up.ts b/functions/plaster-calculator-functions/src/quote-follow-up.ts index 4069725..8c9fd3e 100644 --- a/functions/plaster-calculator-functions/src/quote-follow-up.ts +++ b/functions/plaster-calculator-functions/src/quote-follow-up.ts @@ -6,6 +6,7 @@ import { updateReminder as dcUpdateReminder, } from "@generated/example-data-connector"; +import { exampleDataConnect } from "./data-connect.js"; import { getUserSettingsOrDefault } from "./settings.js"; import { toReminderStatus } from "./validation.js"; @@ -27,7 +28,7 @@ export async function upsertAutoQuoteReminder( const existing = await findOpenProjectReminder(project.id, ownerId); if (existing && existing.ownerId === ownerId) { - await dcUpdateReminder({ + await dcUpdateReminder(exampleDataConnect, { id: existing.id, accountId: project.accountId ?? null, name, @@ -38,7 +39,7 @@ export async function upsertAutoQuoteReminder( return; } - await dcCreateReminder({ + await dcCreateReminder(exampleDataConnect, { id: randomUUID(), ownerId, projectId: project.id, @@ -58,7 +59,7 @@ export async function cancelOpenProjectReminder( return; } - await dcUpdateReminder({ + await dcUpdateReminder(exampleDataConnect, { id: reminder.id, accountId: reminder.accountId ?? null, name: reminder.name, @@ -72,7 +73,9 @@ export async function findOpenProjectReminder( projectId: string, ownerId: string, ) { - const response = await dcListProjectReminders({ projectId }); + const response = await dcListProjectReminders(exampleDataConnect, { + projectId, + }); return ( response.data.reminders.find( (reminder) => diff --git a/functions/plaster-calculator-functions/src/reminders.ts b/functions/plaster-calculator-functions/src/reminders.ts index f1aa67b..f8cd9bd 100644 --- a/functions/plaster-calculator-functions/src/reminders.ts +++ b/functions/plaster-calculator-functions/src/reminders.ts @@ -11,6 +11,7 @@ import { import { onCall } from "firebase-functions/https"; import { requireAuth } from "./auth.js"; +import { exampleDataConnect } from "./data-connect.js"; import { toReminder } from "./mappers.js"; import { requireOwnedAccount, @@ -39,7 +40,9 @@ export const listDueReminders = onCall< Promise<{ reminders: Reminder[] }> >(async (request) => { const auth = requireAuth(request); - const response = await dcListDueReminders({ ownerId: auth.uid }); + const response = await dcListDueReminders(exampleDataConnect, { + ownerId: auth.uid, + }); return { reminders: response.data.reminders.map(toReminder) }; }); @@ -50,7 +53,9 @@ export const listProjectReminders = onCall< const auth = requireAuth(request); const projectId = readRequiredString(request.data.projectId, "Project ID"); await requireOwnedProject(projectId, auth.uid); - const response = await dcListProjectReminders({ projectId }); + const response = await dcListProjectReminders(exampleDataConnect, { + projectId, + }); return { reminders: response.data.reminders .filter((reminder) => reminder.ownerId === auth.uid) @@ -73,7 +78,7 @@ export const createReminder = onCall>( } const reminderId = randomUUID(); - await dcCreateReminder({ + await dcCreateReminder(exampleDataConnect, { id: reminderId, ownerId: auth.uid, projectId: project.id, @@ -103,7 +108,7 @@ export const updateReminder = onCall>( await requireOwnedAccount(accountId, auth.uid); } - await dcUpdateReminder({ + await dcUpdateReminder(exampleDataConnect, { id: reminder.id, accountId, name: hasField(data, "name") @@ -132,7 +137,7 @@ export const completeReminder = onCall>( readRequiredString(request.data.reminderId, "Reminder ID"), auth.uid, ); - await dcUpdateReminder({ + await dcUpdateReminder(exampleDataConnect, { id: reminder.id, accountId: reminder.accountId ?? null, name: reminder.name, @@ -151,7 +156,7 @@ export const cancelReminder = onCall>( readRequiredString(request.data.reminderId, "Reminder ID"), auth.uid, ); - await dcUpdateReminder({ + await dcUpdateReminder(exampleDataConnect, { id: reminder.id, accountId: reminder.accountId ?? null, name: reminder.name, diff --git a/functions/plaster-calculator-functions/src/settings.ts b/functions/plaster-calculator-functions/src/settings.ts index e4b0b68..9c30b9e 100644 --- a/functions/plaster-calculator-functions/src/settings.ts +++ b/functions/plaster-calculator-functions/src/settings.ts @@ -7,6 +7,7 @@ import { import { onCall } from "firebase-functions/https"; import { requireAuth } from "./auth.js"; +import { exampleDataConnect } from "./data-connect.js"; import { readOptionalBoolean, readOptionalPositiveInteger, @@ -41,7 +42,7 @@ export const updateSettings = onCall< "Quote follow-up days", ) ?? settings.quoteFollowUpDays; - await upsertUserSettings({ + await upsertUserSettings(exampleDataConnect, { ownerId: auth.uid, quoteFollowUpEnabled, quoteFollowUpDays, @@ -53,7 +54,8 @@ export const updateSettings = onCall< export async function getUserSettingsOrDefault( ownerId: string, ): Promise { - const settings = (await getUserSettings({ ownerId })).data.userSettings; + const settings = (await getUserSettings(exampleDataConnect, { ownerId })) + .data.userSettings; if (!settings) { return { ownerId, diff --git a/functions/plaster-calculator-functions/src/types.ts b/functions/plaster-calculator-functions/src/types.ts index eedfbad..4164585 100644 --- a/functions/plaster-calculator-functions/src/types.ts +++ b/functions/plaster-calculator-functions/src/types.ts @@ -1,12 +1,14 @@ import type { GetAccountByIdData, GetAccountContactByIdData, + ListAccountContactsByAccountIdData, + ListAccountsByOwnerData, +} from "@generated/accounts-data-connector-admin"; +import type { GetFloorplanPageByIdData, GetProjectByIdData, GetProjectDetailsByIdData, GetReminderByIdData, - ListAccountContactsByAccountIdData, - ListAccountsByOwnerData, ListProjectsByAccountData, ListProjectsByOwnerAndSalesStatusData, ListProjectRemindersData, diff --git a/generated/accounts-data-connector-admin/esm/index.esm.js b/generated/accounts-data-connector-admin/esm/index.esm.js new file mode 100644 index 0000000..5a79af6 --- /dev/null +++ b/generated/accounts-data-connector-admin/esm/index.esm.js @@ -0,0 +1,74 @@ +import { validateAdminArgs } from 'firebase-admin/data-connect'; + +export const connectorConfig = { + connector: 'accounts', + serviceId: 'plaster-calculator', + location: 'us-west1' +}; + +export function createAccount(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('CreateAccount', inputVars, inputOpts); +} + +export function updateAccount(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('UpdateAccount', inputVars, inputOpts); +} + +export function deleteAccountContacts(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('DeleteAccountContacts', inputVars, inputOpts); +} + +export function deleteAccount(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('DeleteAccount', inputVars, inputOpts); +} + +export function createAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('CreateAccountContact', inputVars, inputOpts); +} + +export function updateAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('UpdateAccountContact', inputVars, inputOpts); +} + +export function deleteAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('DeleteAccountContact', inputVars, inputOpts); +} + +export function listAccountsByOwner(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('ListAccountsByOwner', inputVars, inputOpts); +} + +export function getAccountById(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('GetAccountById', inputVars, inputOpts); +} + +export function listAccountContactsByAccountId(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('ListAccountContactsByAccountId', inputVars, inputOpts); +} + +export function getAccountContactById(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('GetAccountContactById', inputVars, inputOpts); +} + diff --git a/generated/accounts-data-connector-admin/esm/package.json b/generated/accounts-data-connector-admin/esm/package.json new file mode 100644 index 0000000..7c34deb --- /dev/null +++ b/generated/accounts-data-connector-admin/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} \ No newline at end of file diff --git a/generated/accounts-data-connector-admin/index.cjs.js b/generated/accounts-data-connector-admin/index.cjs.js new file mode 100644 index 0000000..afb0853 --- /dev/null +++ b/generated/accounts-data-connector-admin/index.cjs.js @@ -0,0 +1,86 @@ +const { validateAdminArgs } = require('firebase-admin/data-connect'); + +const connectorConfig = { + connector: 'accounts', + serviceId: 'plaster-calculator', + location: 'us-west1' +}; +exports.connectorConfig = connectorConfig; + +function createAccount(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('CreateAccount', inputVars, inputOpts); +} +exports.createAccount = createAccount; + +function updateAccount(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('UpdateAccount', inputVars, inputOpts); +} +exports.updateAccount = updateAccount; + +function deleteAccountContacts(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('DeleteAccountContacts', inputVars, inputOpts); +} +exports.deleteAccountContacts = deleteAccountContacts; + +function deleteAccount(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('DeleteAccount', inputVars, inputOpts); +} +exports.deleteAccount = deleteAccount; + +function createAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('CreateAccountContact', inputVars, inputOpts); +} +exports.createAccountContact = createAccountContact; + +function updateAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('UpdateAccountContact', inputVars, inputOpts); +} +exports.updateAccountContact = updateAccountContact; + +function deleteAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeMutation('DeleteAccountContact', inputVars, inputOpts); +} +exports.deleteAccountContact = deleteAccountContact; + +function listAccountsByOwner(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('ListAccountsByOwner', inputVars, inputOpts); +} +exports.listAccountsByOwner = listAccountsByOwner; + +function getAccountById(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('GetAccountById', inputVars, inputOpts); +} +exports.getAccountById = getAccountById; + +function listAccountContactsByAccountId(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('ListAccountContactsByAccountId', inputVars, inputOpts); +} +exports.listAccountContactsByAccountId = listAccountContactsByAccountId; + +function getAccountContactById(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('GetAccountContactById', inputVars, inputOpts); +} +exports.getAccountContactById = getAccountContactById; + diff --git a/generated/accounts-data-connector-admin/index.d.ts b/generated/accounts-data-connector-admin/index.d.ts new file mode 100644 index 0000000..6b07da8 --- /dev/null +++ b/generated/accounts-data-connector-admin/index.d.ts @@ -0,0 +1,304 @@ +import { ConnectorConfig, DataConnect, OperationOptions, ExecuteOperationResponse } from 'firebase-admin/data-connect'; + +export const connectorConfig: ConnectorConfig; + +export type TimestampString = string; +export type UUIDString = string; +export type Int64String = string; +export type DateString = string; + + +export interface AccountContact_Key { + id: UUIDString; + __typename?: 'AccountContact_Key'; +} + +export interface Account_Key { + id: UUIDString; + __typename?: 'Account_Key'; +} + +export interface CreateAccountContactData { + accountContact_insert: AccountContact_Key; +} + +export interface CreateAccountContactVariables { + id: UUIDString; + accountId: UUIDString; + name: string; + email?: string | null; + phoneNumber?: string | null; + role?: string | null; +} + +export interface CreateAccountData { + account_insert: Account_Key; +} + +export interface CreateAccountVariables { + id: UUIDString; + ownerId: string; + companyName: string; + businessNumber?: string | null; + phoneNumber?: string | null; +} + +export interface DeleteAccountContactData { + accountContact_delete?: AccountContact_Key | null; +} + +export interface DeleteAccountContactVariables { + id: UUIDString; +} + +export interface DeleteAccountContactsData { + accountContact_deleteMany: number; +} + +export interface DeleteAccountContactsVariables { + accountId: UUIDString; +} + +export interface DeleteAccountData { + account_delete?: Account_Key | null; +} + +export interface DeleteAccountVariables { + id: UUIDString; +} + +export interface FloorplanPage_Key { + id: UUIDString; + __typename?: 'FloorplanPage_Key'; +} + +export interface GetAccountByIdData { + account?: { + id: UUIDString; + ownerId: string; + companyName: string; + businessNumber?: string | null; + phoneNumber?: string | null; + primaryContactId?: UUIDString | null; + createdAt: TimestampString; + updatedAt: TimestampString; + contacts: ({ + id: UUIDString; + accountId: UUIDString; + name: string; + email?: string | null; + phoneNumber?: string | null; + role?: string | null; + createdAt: TimestampString; + updatedAt: TimestampString; + } & AccountContact_Key)[]; + } & Account_Key; +} + +export interface GetAccountByIdVariables { + id: UUIDString; +} + +export interface GetAccountContactByIdData { + accountContact?: { + id: UUIDString; + accountId: UUIDString; + name: string; + email?: string | null; + phoneNumber?: string | null; + role?: string | null; + createdAt: TimestampString; + updatedAt: TimestampString; + } & AccountContact_Key; +} + +export interface GetAccountContactByIdVariables { + accountId: UUIDString; + contactId: UUIDString; +} + +export interface ListAccountContactsByAccountIdData { + accountContacts: ({ + id: UUIDString; + accountId: UUIDString; + name: string; + email?: string | null; + phoneNumber?: string | null; + role?: string | null; + createdAt: TimestampString; + updatedAt: TimestampString; + } & AccountContact_Key)[]; +} + +export interface ListAccountContactsByAccountIdVariables { + accountId: UUIDString; +} + +export interface ListAccountsByOwnerData { + accounts: ({ + id: UUIDString; + ownerId: string; + companyName: string; + businessNumber?: string | null; + phoneNumber?: string | null; + primaryContactId?: UUIDString | null; + createdAt: TimestampString; + updatedAt: TimestampString; + } & Account_Key)[]; +} + +export interface ListAccountsByOwnerVariables { + ownerId: string; +} + +export interface ProjectQuestionnaireAnswer_Key { + id: UUIDString; + __typename?: 'ProjectQuestionnaireAnswer_Key'; +} + +export interface ProjectQuestionnaire_Key { + id: UUIDString; + __typename?: 'ProjectQuestionnaire_Key'; +} + +export interface Project_Key { + id: UUIDString; + __typename?: 'Project_Key'; +} + +export interface QuantitySource_Key { + id: UUIDString; + __typename?: 'QuantitySource_Key'; +} + +export interface QuestionnaireTemplateQuestion_Key { + id: UUIDString; + __typename?: 'QuestionnaireTemplateQuestion_Key'; +} + +export interface QuestionnaireTemplate_Key { + id: UUIDString; + __typename?: 'QuestionnaireTemplate_Key'; +} + +export interface QuoteItemTemplateConfig_Key { + ownerId: string; + templateId: UUIDString; + __typename?: 'QuoteItemTemplateConfig_Key'; +} + +export interface QuoteItemTemplate_Key { + id: UUIDString; + __typename?: 'QuoteItemTemplate_Key'; +} + +export interface QuoteItem_Key { + id: UUIDString; + __typename?: 'QuoteItem_Key'; +} + +export interface Quote_Key { + id: UUIDString; + __typename?: 'Quote_Key'; +} + +export interface Reminder_Key { + id: UUIDString; + __typename?: 'Reminder_Key'; +} + +export interface SupplierQuoteItemPrice_Key { + supplierId: UUIDString; + templateId: UUIDString; + __typename?: 'SupplierQuoteItemPrice_Key'; +} + +export interface Supplier_Key { + id: UUIDString; + __typename?: 'Supplier_Key'; +} + +export interface UpdateAccountContactData { + accountContact_update?: AccountContact_Key | null; +} + +export interface UpdateAccountContactVariables { + id: UUIDString; + name?: string | null; + email?: string | null; + phoneNumber?: string | null; + role?: string | null; +} + +export interface UpdateAccountData { + account_update?: Account_Key | null; +} + +export interface UpdateAccountVariables { + id: UUIDString; + companyName?: string | null; + businessNumber?: string | null; + phoneNumber?: string | null; + primaryContactId?: UUIDString | null; +} + +export interface UserSettings_Key { + ownerId: string; + __typename?: 'UserSettings_Key'; +} + +/** Generated Node Admin SDK operation action function for the 'CreateAccount' Mutation. Allow users to execute without passing in DataConnect. */ +export function createAccount(dc: DataConnect, vars: CreateAccountVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'CreateAccount' Mutation. Allow users to pass in custom DataConnect instances. */ +export function createAccount(vars: CreateAccountVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'UpdateAccount' Mutation. Allow users to execute without passing in DataConnect. */ +export function updateAccount(dc: DataConnect, vars: UpdateAccountVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'UpdateAccount' Mutation. Allow users to pass in custom DataConnect instances. */ +export function updateAccount(vars: UpdateAccountVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'DeleteAccountContacts' Mutation. Allow users to execute without passing in DataConnect. */ +export function deleteAccountContacts(dc: DataConnect, vars: DeleteAccountContactsVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'DeleteAccountContacts' Mutation. Allow users to pass in custom DataConnect instances. */ +export function deleteAccountContacts(vars: DeleteAccountContactsVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'DeleteAccount' Mutation. Allow users to execute without passing in DataConnect. */ +export function deleteAccount(dc: DataConnect, vars: DeleteAccountVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'DeleteAccount' Mutation. Allow users to pass in custom DataConnect instances. */ +export function deleteAccount(vars: DeleteAccountVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'CreateAccountContact' Mutation. Allow users to execute without passing in DataConnect. */ +export function createAccountContact(dc: DataConnect, vars: CreateAccountContactVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'CreateAccountContact' Mutation. Allow users to pass in custom DataConnect instances. */ +export function createAccountContact(vars: CreateAccountContactVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'UpdateAccountContact' Mutation. Allow users to execute without passing in DataConnect. */ +export function updateAccountContact(dc: DataConnect, vars: UpdateAccountContactVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'UpdateAccountContact' Mutation. Allow users to pass in custom DataConnect instances. */ +export function updateAccountContact(vars: UpdateAccountContactVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'DeleteAccountContact' Mutation. Allow users to execute without passing in DataConnect. */ +export function deleteAccountContact(dc: DataConnect, vars: DeleteAccountContactVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'DeleteAccountContact' Mutation. Allow users to pass in custom DataConnect instances. */ +export function deleteAccountContact(vars: DeleteAccountContactVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'ListAccountsByOwner' Query. Allow users to execute without passing in DataConnect. */ +export function listAccountsByOwner(dc: DataConnect, vars: ListAccountsByOwnerVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'ListAccountsByOwner' Query. Allow users to pass in custom DataConnect instances. */ +export function listAccountsByOwner(vars: ListAccountsByOwnerVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'GetAccountById' Query. Allow users to execute without passing in DataConnect. */ +export function getAccountById(dc: DataConnect, vars: GetAccountByIdVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'GetAccountById' Query. Allow users to pass in custom DataConnect instances. */ +export function getAccountById(vars: GetAccountByIdVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'ListAccountContactsByAccountId' Query. Allow users to execute without passing in DataConnect. */ +export function listAccountContactsByAccountId(dc: DataConnect, vars: ListAccountContactsByAccountIdVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'ListAccountContactsByAccountId' Query. Allow users to pass in custom DataConnect instances. */ +export function listAccountContactsByAccountId(vars: ListAccountContactsByAccountIdVariables, options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'GetAccountContactById' Query. Allow users to execute without passing in DataConnect. */ +export function getAccountContactById(dc: DataConnect, vars: GetAccountContactByIdVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'GetAccountContactById' Query. Allow users to pass in custom DataConnect instances. */ +export function getAccountContactById(vars: GetAccountContactByIdVariables, options?: OperationOptions): Promise>; + diff --git a/generated/accounts-data-connector-admin/package.json b/generated/accounts-data-connector-admin/package.json new file mode 100644 index 0000000..48ad3a1 --- /dev/null +++ b/generated/accounts-data-connector-admin/package.json @@ -0,0 +1,25 @@ +{ + "name": "@generated/accounts-data-connector-admin", + "version": "0.0.1", + "author": "Firebase (https://firebase.google.com/)", + "description": "Generated Admin SDK For accounts", + "license": "Apache-2.0", + "engines": { + "node": " >=18.0" + }, + "typings": "index.d.ts", + "module": "esm/index.esm.js", + "main": "index.cjs.js", + "browser": "esm/index.esm.js", + "exports": { + ".": { + "types": "./index.d.ts", + "require": "./index.cjs.js", + "default": "./esm/index.esm.js" + }, + "./package.json": "./package.json" + }, + "peerDependencies": { + "firebase-admin": "^13.4.0" + } +} \ No newline at end of file diff --git a/generated/example-data-connector/esm/index.esm.js b/generated/example-data-connector/esm/index.esm.js index 53f7eeb..0ed6f5b 100644 --- a/generated/example-data-connector/esm/index.esm.js +++ b/generated/example-data-connector/esm/index.esm.js @@ -42,48 +42,6 @@ export function deleteProject(dcOrVarsOrOptions, varsOrOptions, options) { return dcInstance.executeMutation('DeleteProject', inputVars, inputOpts); } -export function createAccount(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('CreateAccount', inputVars, inputOpts); -} - -export function updateAccount(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('UpdateAccount', inputVars, inputOpts); -} - -export function deleteAccountContacts(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('DeleteAccountContacts', inputVars, inputOpts); -} - -export function deleteAccount(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('DeleteAccount', inputVars, inputOpts); -} - -export function createAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('CreateAccountContact', inputVars, inputOpts); -} - -export function updateAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('UpdateAccountContact', inputVars, inputOpts); -} - -export function deleteAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('DeleteAccountContact', inputVars, inputOpts); -} - export function upsertUserSettings(dcOrVarsOrOptions, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); dcInstance.useGen(true); @@ -246,30 +204,6 @@ export function getFloorplanPageById(dcOrVarsOrOptions, varsOrOptions, options) return dcInstance.executeQuery('GetFloorplanPageById', inputVars, inputOpts); } -export function listAccountsByOwner(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('ListAccountsByOwner', inputVars, inputOpts); -} - -export function getAccountById(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('GetAccountById', inputVars, inputOpts); -} - -export function listAccountContactsByAccountId(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('ListAccountContactsByAccountId', inputVars, inputOpts); -} - -export function getAccountContactById(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('GetAccountContactById', inputVars, inputOpts); -} - export function getUserSettings(dcOrVarsOrOptions, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); dcInstance.useGen(true); diff --git a/generated/example-data-connector/index.cjs.js b/generated/example-data-connector/index.cjs.js index 6be115f..272c294 100644 --- a/generated/example-data-connector/index.cjs.js +++ b/generated/example-data-connector/index.cjs.js @@ -49,55 +49,6 @@ function deleteProject(dcOrVarsOrOptions, varsOrOptions, options) { } exports.deleteProject = deleteProject; -function createAccount(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('CreateAccount', inputVars, inputOpts); -} -exports.createAccount = createAccount; - -function updateAccount(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('UpdateAccount', inputVars, inputOpts); -} -exports.updateAccount = updateAccount; - -function deleteAccountContacts(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('DeleteAccountContacts', inputVars, inputOpts); -} -exports.deleteAccountContacts = deleteAccountContacts; - -function deleteAccount(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('DeleteAccount', inputVars, inputOpts); -} -exports.deleteAccount = deleteAccount; - -function createAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('CreateAccountContact', inputVars, inputOpts); -} -exports.createAccountContact = createAccountContact; - -function updateAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('UpdateAccountContact', inputVars, inputOpts); -} -exports.updateAccountContact = updateAccountContact; - -function deleteAccountContact(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeMutation('DeleteAccountContact', inputVars, inputOpts); -} -exports.deleteAccountContact = deleteAccountContact; - function upsertUserSettings(dcOrVarsOrOptions, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); dcInstance.useGen(true); @@ -287,34 +238,6 @@ function getFloorplanPageById(dcOrVarsOrOptions, varsOrOptions, options) { } exports.getFloorplanPageById = getFloorplanPageById; -function listAccountsByOwner(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('ListAccountsByOwner', inputVars, inputOpts); -} -exports.listAccountsByOwner = listAccountsByOwner; - -function getAccountById(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('GetAccountById', inputVars, inputOpts); -} -exports.getAccountById = getAccountById; - -function listAccountContactsByAccountId(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('ListAccountContactsByAccountId', inputVars, inputOpts); -} -exports.listAccountContactsByAccountId = listAccountContactsByAccountId; - -function getAccountContactById(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('GetAccountContactById', inputVars, inputOpts); -} -exports.getAccountContactById = getAccountContactById; - function getUserSettings(dcOrVarsOrOptions, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); dcInstance.useGen(true); diff --git a/generated/example-data-connector/index.d.ts b/generated/example-data-connector/index.d.ts index 78620d7..0761fcb 100644 --- a/generated/example-data-connector/index.d.ts +++ b/generated/example-data-connector/index.d.ts @@ -18,31 +18,6 @@ export interface Account_Key { __typename?: 'Account_Key'; } -export interface CreateAccountContactData { - accountContact_insert: AccountContact_Key; -} - -export interface CreateAccountContactVariables { - id: UUIDString; - accountId: UUIDString; - name: string; - email?: string | null; - phoneNumber?: string | null; - role?: string | null; -} - -export interface CreateAccountData { - account_insert: Account_Key; -} - -export interface CreateAccountVariables { - id: UUIDString; - ownerId: string; - companyName: string; - businessNumber?: string | null; - phoneNumber?: string | null; -} - export interface CreateFloorplanPageData { floorplanPage_insert: FloorplanPage_Key; } @@ -164,30 +139,6 @@ export interface CreateSupplierVariables { name: string; } -export interface DeleteAccountContactData { - accountContact_delete?: AccountContact_Key | null; -} - -export interface DeleteAccountContactVariables { - id: UUIDString; -} - -export interface DeleteAccountContactsData { - accountContact_deleteMany: number; -} - -export interface DeleteAccountContactsVariables { - accountId: UUIDString; -} - -export interface DeleteAccountData { - account_delete?: Account_Key | null; -} - -export interface DeleteAccountVariables { - id: UUIDString; -} - export interface DeleteFloorplanPagesData { floorplanPage_deleteMany: number; } @@ -242,51 +193,6 @@ export interface FloorplanPage_Key { __typename?: 'FloorplanPage_Key'; } -export interface GetAccountByIdData { - account?: { - id: UUIDString; - ownerId: string; - companyName: string; - businessNumber?: string | null; - phoneNumber?: string | null; - primaryContactId?: UUIDString | null; - createdAt: TimestampString; - updatedAt: TimestampString; - contacts: ({ - id: UUIDString; - accountId: UUIDString; - name: string; - email?: string | null; - phoneNumber?: string | null; - role?: string | null; - createdAt: TimestampString; - updatedAt: TimestampString; - } & AccountContact_Key)[]; - } & Account_Key; -} - -export interface GetAccountByIdVariables { - id: UUIDString; -} - -export interface GetAccountContactByIdData { - accountContact?: { - id: UUIDString; - accountId: UUIDString; - name: string; - email?: string | null; - phoneNumber?: string | null; - role?: string | null; - createdAt: TimestampString; - updatedAt: TimestampString; - } & AccountContact_Key; -} - -export interface GetAccountContactByIdVariables { - accountId: UUIDString; - contactId: UUIDString; -} - export interface GetFloorplanPageByIdData { floorplanPage?: { id: UUIDString; @@ -414,40 +320,6 @@ export interface GetUserSettingsVariables { ownerId: string; } -export interface ListAccountContactsByAccountIdData { - accountContacts: ({ - id: UUIDString; - accountId: UUIDString; - name: string; - email?: string | null; - phoneNumber?: string | null; - role?: string | null; - createdAt: TimestampString; - updatedAt: TimestampString; - } & AccountContact_Key)[]; -} - -export interface ListAccountContactsByAccountIdVariables { - accountId: UUIDString; -} - -export interface ListAccountsByOwnerData { - accounts: ({ - id: UUIDString; - ownerId: string; - companyName: string; - businessNumber?: string | null; - phoneNumber?: string | null; - primaryContactId?: UUIDString | null; - createdAt: TimestampString; - updatedAt: TimestampString; - } & Account_Key)[]; -} - -export interface ListAccountsByOwnerVariables { - ownerId: string; -} - export interface ListDueRemindersData { reminders: ({ id: UUIDString; @@ -619,30 +491,6 @@ export interface TouchProjectVariables { processingError?: string | null; } -export interface UpdateAccountContactData { - accountContact_update?: AccountContact_Key | null; -} - -export interface UpdateAccountContactVariables { - id: UUIDString; - name?: string | null; - email?: string | null; - phoneNumber?: string | null; - role?: string | null; -} - -export interface UpdateAccountData { - account_update?: Account_Key | null; -} - -export interface UpdateAccountVariables { - id: UUIDString; - companyName?: string | null; - businessNumber?: string | null; - phoneNumber?: string | null; - primaryContactId?: UUIDString | null; -} - export interface UpdateFloorplanPageAnalysisData { floorplanPage_update?: FloorplanPage_Key | null; } @@ -829,41 +677,6 @@ export function deleteProject(dc: DataConnect, vars: DeleteProjectVariables, opt /** Generated Node Admin SDK operation action function for the 'DeleteProject' Mutation. Allow users to pass in custom DataConnect instances. */ export function deleteProject(vars: DeleteProjectVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'CreateAccount' Mutation. Allow users to execute without passing in DataConnect. */ -export function createAccount(dc: DataConnect, vars: CreateAccountVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'CreateAccount' Mutation. Allow users to pass in custom DataConnect instances. */ -export function createAccount(vars: CreateAccountVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'UpdateAccount' Mutation. Allow users to execute without passing in DataConnect. */ -export function updateAccount(dc: DataConnect, vars: UpdateAccountVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'UpdateAccount' Mutation. Allow users to pass in custom DataConnect instances. */ -export function updateAccount(vars: UpdateAccountVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'DeleteAccountContacts' Mutation. Allow users to execute without passing in DataConnect. */ -export function deleteAccountContacts(dc: DataConnect, vars: DeleteAccountContactsVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'DeleteAccountContacts' Mutation. Allow users to pass in custom DataConnect instances. */ -export function deleteAccountContacts(vars: DeleteAccountContactsVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'DeleteAccount' Mutation. Allow users to execute without passing in DataConnect. */ -export function deleteAccount(dc: DataConnect, vars: DeleteAccountVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'DeleteAccount' Mutation. Allow users to pass in custom DataConnect instances. */ -export function deleteAccount(vars: DeleteAccountVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'CreateAccountContact' Mutation. Allow users to execute without passing in DataConnect. */ -export function createAccountContact(dc: DataConnect, vars: CreateAccountContactVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'CreateAccountContact' Mutation. Allow users to pass in custom DataConnect instances. */ -export function createAccountContact(vars: CreateAccountContactVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'UpdateAccountContact' Mutation. Allow users to execute without passing in DataConnect. */ -export function updateAccountContact(dc: DataConnect, vars: UpdateAccountContactVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'UpdateAccountContact' Mutation. Allow users to pass in custom DataConnect instances. */ -export function updateAccountContact(vars: UpdateAccountContactVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'DeleteAccountContact' Mutation. Allow users to execute without passing in DataConnect. */ -export function deleteAccountContact(dc: DataConnect, vars: DeleteAccountContactVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'DeleteAccountContact' Mutation. Allow users to pass in custom DataConnect instances. */ -export function deleteAccountContact(vars: DeleteAccountContactVariables, options?: OperationOptions): Promise>; - /** Generated Node Admin SDK operation action function for the 'UpsertUserSettings' Mutation. Allow users to execute without passing in DataConnect. */ export function upsertUserSettings(dc: DataConnect, vars: UpsertUserSettingsVariables, options?: OperationOptions): Promise>; /** Generated Node Admin SDK operation action function for the 'UpsertUserSettings' Mutation. Allow users to pass in custom DataConnect instances. */ @@ -999,26 +812,6 @@ export function getFloorplanPageById(dc: DataConnect, vars: GetFloorplanPageById /** Generated Node Admin SDK operation action function for the 'GetFloorplanPageById' Query. Allow users to pass in custom DataConnect instances. */ export function getFloorplanPageById(vars: GetFloorplanPageByIdVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'ListAccountsByOwner' Query. Allow users to execute without passing in DataConnect. */ -export function listAccountsByOwner(dc: DataConnect, vars: ListAccountsByOwnerVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'ListAccountsByOwner' Query. Allow users to pass in custom DataConnect instances. */ -export function listAccountsByOwner(vars: ListAccountsByOwnerVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'GetAccountById' Query. Allow users to execute without passing in DataConnect. */ -export function getAccountById(dc: DataConnect, vars: GetAccountByIdVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'GetAccountById' Query. Allow users to pass in custom DataConnect instances. */ -export function getAccountById(vars: GetAccountByIdVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'ListAccountContactsByAccountId' Query. Allow users to execute without passing in DataConnect. */ -export function listAccountContactsByAccountId(dc: DataConnect, vars: ListAccountContactsByAccountIdVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'ListAccountContactsByAccountId' Query. Allow users to pass in custom DataConnect instances. */ -export function listAccountContactsByAccountId(vars: ListAccountContactsByAccountIdVariables, options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'GetAccountContactById' Query. Allow users to execute without passing in DataConnect. */ -export function getAccountContactById(dc: DataConnect, vars: GetAccountContactByIdVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'GetAccountContactById' Query. Allow users to pass in custom DataConnect instances. */ -export function getAccountContactById(vars: GetAccountContactByIdVariables, options?: OperationOptions): Promise>; - /** Generated Node Admin SDK operation action function for the 'GetUserSettings' Query. Allow users to execute without passing in DataConnect. */ export function getUserSettings(dc: DataConnect, vars: GetUserSettingsVariables, options?: OperationOptions): Promise>; /** Generated Node Admin SDK operation action function for the 'GetUserSettings' Query. Allow users to pass in custom DataConnect instances. */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd48e43..30f5f7f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -249,6 +249,9 @@ importers: functions/plaster-calculator-functions: dependencies: + '@generated/accounts-data-connector-admin': + specifier: workspace:* + version: link:../../generated/accounts-data-connector-admin '@generated/example-data-connector': specifier: workspace:* version: link:../../generated/example-data-connector @@ -278,6 +281,12 @@ importers: specifier: ^6.0.3 version: 6.0.3 + generated/accounts-data-connector-admin: + dependencies: + firebase-admin: + specifier: ^13.4.0 + version: 13.10.0 + generated/example-data-connector: dependencies: firebase-admin: From 263e5dfbfd87861285847470183e41838e4732d0 Mon Sep 17 00:00:00 2001 From: Jimmy Luong Date: Mon, 6 Jul 2026 22:28:05 +1000 Subject: [PATCH 2/2] chore(questionnaires): regenerate data connect SDK output Re-running the SDK generator reordered the generated function declarations; no functional change. Co-Authored-By: Claude Sonnet 5 --- .../esm/index.esm.js | 24 ++++++++-------- .../index.cjs.js | 28 +++++++++---------- .../index.d.ts | 20 ++++++------- .../esm/index.esm.js | 4 +-- .../index.cjs.js | 4 +-- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/generated/questionnaires-data-connector-admin/esm/index.esm.js b/generated/questionnaires-data-connector-admin/esm/index.esm.js index 5bdcc6c..c590d5c 100644 --- a/generated/questionnaires-data-connector-admin/esm/index.esm.js +++ b/generated/questionnaires-data-connector-admin/esm/index.esm.js @@ -6,18 +6,6 @@ export const connectorConfig = { location: 'us-west1' }; -export function listQuestionnaireTemplates(dcOrOptions, options) { - const { dc: dcInstance, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrOptions, options, undefined); - dcInstance.useGen(true); - return dcInstance.executeQuery('ListQuestionnaireTemplates', undefined, inputOpts); -} - -export function getQuestionnaireTemplate(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('GetQuestionnaireTemplate', inputVars, inputOpts); -} - export function createQuestionnaireTemplate(dcOrVarsOrOptions, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); dcInstance.useGen(true); @@ -66,3 +54,15 @@ export function createProjectQuestionnaireAnswer(dcOrVarsOrOptions, varsOrOption return dcInstance.executeMutation('CreateProjectQuestionnaireAnswer', inputVars, inputOpts); } +export function listQuestionnaireTemplates(dcOrOptions, options) { + const { dc: dcInstance, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrOptions, options, undefined); + dcInstance.useGen(true); + return dcInstance.executeQuery('ListQuestionnaireTemplates', undefined, inputOpts); +} + +export function getQuestionnaireTemplate(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('GetQuestionnaireTemplate', inputVars, inputOpts); +} + diff --git a/generated/questionnaires-data-connector-admin/index.cjs.js b/generated/questionnaires-data-connector-admin/index.cjs.js index d806025..a635278 100644 --- a/generated/questionnaires-data-connector-admin/index.cjs.js +++ b/generated/questionnaires-data-connector-admin/index.cjs.js @@ -7,20 +7,6 @@ const connectorConfig = { }; exports.connectorConfig = connectorConfig; -function listQuestionnaireTemplates(dcOrOptions, options) { - const { dc: dcInstance, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrOptions, options, undefined); - dcInstance.useGen(true); - return dcInstance.executeQuery('ListQuestionnaireTemplates', undefined, inputOpts); -} -exports.listQuestionnaireTemplates = listQuestionnaireTemplates; - -function getQuestionnaireTemplate(dcOrVarsOrOptions, varsOrOptions, options) { - const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); - dcInstance.useGen(true); - return dcInstance.executeQuery('GetQuestionnaireTemplate', inputVars, inputOpts); -} -exports.getQuestionnaireTemplate = getQuestionnaireTemplate; - function createQuestionnaireTemplate(dcOrVarsOrOptions, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); dcInstance.useGen(true); @@ -77,3 +63,17 @@ function createProjectQuestionnaireAnswer(dcOrVarsOrOptions, varsOrOptions, opti } exports.createProjectQuestionnaireAnswer = createProjectQuestionnaireAnswer; +function listQuestionnaireTemplates(dcOrOptions, options) { + const { dc: dcInstance, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrOptions, options, undefined); + dcInstance.useGen(true); + return dcInstance.executeQuery('ListQuestionnaireTemplates', undefined, inputOpts); +} +exports.listQuestionnaireTemplates = listQuestionnaireTemplates; + +function getQuestionnaireTemplate(dcOrVarsOrOptions, varsOrOptions, options) { + const { dc: dcInstance, vars: inputVars, options: inputOpts} = validateAdminArgs(connectorConfig, dcOrVarsOrOptions, varsOrOptions, options, true, true); + dcInstance.useGen(true); + return dcInstance.executeQuery('GetQuestionnaireTemplate', inputVars, inputOpts); +} +exports.getQuestionnaireTemplate = getQuestionnaireTemplate; + diff --git a/generated/questionnaires-data-connector-admin/index.d.ts b/generated/questionnaires-data-connector-admin/index.d.ts index 13d3d4c..4d45183 100644 --- a/generated/questionnaires-data-connector-admin/index.d.ts +++ b/generated/questionnaires-data-connector-admin/index.d.ts @@ -206,16 +206,6 @@ export interface UserSettings_Key { __typename?: 'UserSettings_Key'; } -/** Generated Node Admin SDK operation action function for the 'ListQuestionnaireTemplates' Query. Allow users to execute without passing in DataConnect. */ -export function listQuestionnaireTemplates(dc: DataConnect, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'ListQuestionnaireTemplates' Query. Allow users to pass in custom DataConnect instances. */ -export function listQuestionnaireTemplates(options?: OperationOptions): Promise>; - -/** Generated Node Admin SDK operation action function for the 'GetQuestionnaireTemplate' Query. Allow users to execute without passing in DataConnect. */ -export function getQuestionnaireTemplate(dc: DataConnect, vars: GetQuestionnaireTemplateVariables, options?: OperationOptions): Promise>; -/** Generated Node Admin SDK operation action function for the 'GetQuestionnaireTemplate' Query. Allow users to pass in custom DataConnect instances. */ -export function getQuestionnaireTemplate(vars: GetQuestionnaireTemplateVariables, options?: OperationOptions): Promise>; - /** Generated Node Admin SDK operation action function for the 'CreateQuestionnaireTemplate' Mutation. Allow users to execute without passing in DataConnect. */ export function createQuestionnaireTemplate(dc: DataConnect, vars: CreateQuestionnaireTemplateVariables, options?: OperationOptions): Promise>; /** Generated Node Admin SDK operation action function for the 'CreateQuestionnaireTemplate' Mutation. Allow users to pass in custom DataConnect instances. */ @@ -256,3 +246,13 @@ export function createProjectQuestionnaireAnswer(dc: DataConnect, vars: CreatePr /** Generated Node Admin SDK operation action function for the 'CreateProjectQuestionnaireAnswer' Mutation. Allow users to pass in custom DataConnect instances. */ export function createProjectQuestionnaireAnswer(vars: CreateProjectQuestionnaireAnswerVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'ListQuestionnaireTemplates' Query. Allow users to execute without passing in DataConnect. */ +export function listQuestionnaireTemplates(dc: DataConnect, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'ListQuestionnaireTemplates' Query. Allow users to pass in custom DataConnect instances. */ +export function listQuestionnaireTemplates(options?: OperationOptions): Promise>; + +/** Generated Node Admin SDK operation action function for the 'GetQuestionnaireTemplate' Query. Allow users to execute without passing in DataConnect. */ +export function getQuestionnaireTemplate(dc: DataConnect, vars: GetQuestionnaireTemplateVariables, options?: OperationOptions): Promise>; +/** Generated Node Admin SDK operation action function for the 'GetQuestionnaireTemplate' Query. Allow users to pass in custom DataConnect instances. */ +export function getQuestionnaireTemplate(vars: GetQuestionnaireTemplateVariables, options?: OperationOptions): Promise>; + diff --git a/generated/questionnaires-data-connector-web/esm/index.esm.js b/generated/questionnaires-data-connector-web/esm/index.esm.js index 8f7a8e8..eb9915b 100644 --- a/generated/questionnaires-data-connector-web/esm/index.esm.js +++ b/generated/questionnaires-data-connector-web/esm/index.esm.js @@ -111,7 +111,7 @@ listQuestionnaireTemplatesRef.operationName = 'ListQuestionnaireTemplates'; export function listQuestionnaireTemplates(dcOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts } = validateArgsWithOptions(connectorConfig, dcOrOptions, options, undefined,false, false); - return executeQuery(listQuestionnaireTemplatesRef(dcInstance, inputVars), inputOpts && inputOpts.fetchPolicy); + return executeQuery(listQuestionnaireTemplatesRef(dcInstance, inputVars), inputOpts && { fetchPolicy: inputOpts.fetchPolicy }); } export const getQuestionnaireTemplateRef = (dcOrVars, vars) => { @@ -124,6 +124,6 @@ getQuestionnaireTemplateRef.operationName = 'GetQuestionnaireTemplate'; export function getQuestionnaireTemplate(dcOrVars, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts } = validateArgsWithOptions(connectorConfig, dcOrVars, varsOrOptions, options, true, true); - return executeQuery(getQuestionnaireTemplateRef(dcInstance, inputVars), inputOpts && inputOpts.fetchPolicy); + return executeQuery(getQuestionnaireTemplateRef(dcInstance, inputVars), inputOpts && { fetchPolicy: inputOpts.fetchPolicy }); } diff --git a/generated/questionnaires-data-connector-web/index.cjs.js b/generated/questionnaires-data-connector-web/index.cjs.js index c449f77..294abed 100644 --- a/generated/questionnaires-data-connector-web/index.cjs.js +++ b/generated/questionnaires-data-connector-web/index.cjs.js @@ -130,7 +130,7 @@ exports.listQuestionnaireTemplatesRef = listQuestionnaireTemplatesRef; exports.listQuestionnaireTemplates = function listQuestionnaireTemplates(dcOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts } = validateArgsWithOptions(connectorConfig, dcOrOptions, options, undefined,false, false); - return executeQuery(listQuestionnaireTemplatesRef(dcInstance, inputVars), inputOpts && inputOpts.fetchPolicy); + return executeQuery(listQuestionnaireTemplatesRef(dcInstance, inputVars), inputOpts && { fetchPolicy: inputOpts.fetchPolicy }); } ; @@ -145,6 +145,6 @@ exports.getQuestionnaireTemplateRef = getQuestionnaireTemplateRef; exports.getQuestionnaireTemplate = function getQuestionnaireTemplate(dcOrVars, varsOrOptions, options) { const { dc: dcInstance, vars: inputVars, options: inputOpts } = validateArgsWithOptions(connectorConfig, dcOrVars, varsOrOptions, options, true, true); - return executeQuery(getQuestionnaireTemplateRef(dcInstance, inputVars), inputOpts && inputOpts.fetchPolicy); + return executeQuery(getQuestionnaireTemplateRef(dcInstance, inputVars), inputOpts && { fetchPolicy: inputOpts.fetchPolicy }); } ;