5.7 KiB
google-service
Node.js TypeScript sluzba pro komunikaci s Google API za AppFactory reverse proxy.
Endpointy
GET /GET /healthGET /docsGET /openapi.jsonGET /google/discovery/apisGET /google/discovery/apis/{api}/{version}/restPOST /google/oauth/tokenGET /google/oauth/scopesGET /google/oauth/authorize-urlPOST /google/oauth/service-account-tokenPOST /google/oauth/revokeGET /google/oauth/tokeninfoGET|POST|PATCH|DELETE /google/calendar/...GET|POST|PUT /google/sheets/...POST /google/sheets/write-by-urlGET|POST|PATCH|DELETE /google/drive/...GET|POST /google/gmail/...GET|POST /google/docs/...GET|POST /google/slides/...GET|POST /google/forms/...GET|POST|PATCH|DELETE /google/people/...GET|POST|PATCH|DELETE /google/tasks/...POST /google/request
Konfigurace
Volitelne environment variables:
ROOT_PATH- verejny prefix za AppFactory proxy, napr./apps/google-servicePORT- port aplikace, vychozi hodnota je3000GOOGLE_CLIENT_IDaGOOGLE_CLIENT_SECRET- OAuth client pro authorization code a refresh token flowGOOGLE_SERVICE_ACCOUNT_EMAIL,GOOGLE_PRIVATE_KEY,GOOGLE_SCOPES- service account JWT flowGOOGLE_API_KEY- API key pro Google API, ktere ji podporuji
Secrets se nevraci v zadnem endpointu a neloguji se.
Credentials ve Swaggeru
GET /google/configuration vraci prehled podporovanych env promennych a jejich request alternativ. Nevraci hodnoty secrets.
Env promenne lze nahradit primo v requestu:
GOOGLE_CLIENT_ID:clientIdneboX-Google-Client-IdGOOGLE_CLIENT_SECRET:clientSecretneboX-Google-Client-SecretGOOGLE_REDIRECT_URI:redirectUrineboX-Google-Redirect-UriGOOGLE_SERVICE_ACCOUNT_EMAIL:serviceAccountEmailneboX-Google-Service-Account-EmailGOOGLE_PRIVATE_KEY:privateKeyneboX-Google-Private-KeyGOOGLE_SCOPES:scope,scopesneboX-Google-ScopesGOOGLE_ACCESS_TOKEN:Authorization: Bearer <token>,accessToken,accessTokenEnv,X-Google-Access-Token,X-Google-Access-Token-EnvGOOGLE_API_KEY:apiKey,apiKeyEnv,X-Google-Api-Key,X-Google-Api-Key-Env
Obecne volani Google API
POST /google/request umi volat libovolny HTTPS endpoint na Google domene. Autorizace muze jit pres:
Authorization: Bearer <token>header na requestu do sluzbyX-Google-Access-TokenheaderX-Google-Access-Token-Envheader, napr.GOOGLE_ACCESS_TOKENX-Google-Api-KeyneboX-Google-Api-Key-EnvheaderaccessTokenv bodyaccessTokenEnvv body, napr.GOOGLE_ACCESS_TOKENGOOGLE_API_KEY,apiKeyneboapiKeyEnvpro endpointy podporujici API key
Priklad:
{
"method": "GET",
"baseUrl": "https://www.googleapis.com",
"path": "/drive/v3/files",
"query": {
"pageSize": 10
},
"accessTokenEnv": "GOOGLE_ACCESS_TOKEN"
}
Konkretni Google API wrappery
Sluzba ma konkretni endpointy pro bezne Google produkty, aby klient nemusel skladat cilove Google URL sam:
- Calendar: kalendare, eventy, presun eventu
- Sheets: spreadsheet metadata, batch update, cteni hodnot, update hodnot, append, batch clear
- Drive: soubory, export, opravneni
- Gmail: profil, zpravy, odeslani zpravy, labels
- Docs: vytvoreni dokumentu, nacteni dokumentu, batch update
- Slides: vytvoreni prezentace, nacteni prezentace, batch update
- Forms: vytvoreni formulare, nacteni formulare, batch update, responses
- People: connections, kontakt, vytvoreni/uprava/smazani kontaktu
- Tasks: task lists, tasky, uprava/smazani tasku
Autorizace je stejna jako u obecne proxy: Authorization: Bearer <token>, pripadne accessToken, accessTokenEnv, apiKey nebo apiKeyEnv v JSON body.
Priklad vytvoreni udalosti:
POST /google/calendar/calendars/primary/events
{
"summary": "Schuzka",
"start": {
"dateTime": "2026-06-15T10:00:00+02:00"
},
"end": {
"dateTime": "2026-06-15T11:00:00+02:00"
}
}
Priklad append do Google Sheets:
POST /google/sheets/spreadsheets/{spreadsheetId}/values/append?range=Sheet1!A1
{
"majorDimension": "ROWS",
"values": [
["A", "B", "C"]
]
}
Priklad zapisu do Google Sheets podle URL a nazvu listu:
POST /google/sheets/write-by-url
{
"spreadsheetUrl": "https://docs.google.com/spreadsheets/d/1abcDEFghiJKLmnopQRstuVWXyz/edit#gid=0",
"sheetName": "Objednavky",
"startCell": "A1",
"mode": "append",
"valueInputOption": "USER_ENTERED",
"values": [
["Datum", "Zakaznik", "Castka"],
["2026-06-15", "ACME", 1234]
]
}
mode=append prida radky pod existujici data. mode=update prepise bunky od startCell.
OAuth postup
- Zavolej
GET /google/oauth/scopesa vyber scopes podle sluzeb. - Zavolej
GET /google/oauth/authorize-url?redirectUri=<callback>&scopes=<scopes>. - Otevri
authorizationUrlz odpovedi v prohlizeci. - Google presmeruje na
redirectUri?code=.... - Vymen code pres
POST /google/oauth/token. - Access token posilej jako
Authorization: Bearer <access_token>.
Priklad vymeny code:
{
"grantType": "authorization_code",
"code": "code-from-google-redirect",
"redirectUri": "https://example.test/oauth/callback"
}
Kde vzit ID
calendarId:GET /google/calendar/calendars, hlavni kalendar lze volat jakoprimary.spreadsheetId:GET /google/sheets/spreadsheets, hodnota jefiles[].id.sheetId:GET /google/sheets/spreadsheets/{spreadsheetId}/sheets, hodnota jesheets[].properties.sheetId.- A1 range pro Sheets hodnoty: pouzij
sheets[].properties.title, napr.Sheet1!A1:B10. fileId:GET /google/drive/files, hodnota jefiles[].id.messageId:GET /google/gmail/messages, hodnota jemessages[].id.documentId,presentationId: u Docs/Slides jde o ID Drive souboru.