This commit is contained in:
JiriUhlir
2026-06-15 15:36:52 +02:00
parent 54247186cf
commit d648589ac7
3 changed files with 896 additions and 19 deletions
+69
View File
@@ -11,11 +11,14 @@ Node.js TypeScript sluzba pro komunikaci s Google API za AppFactory reverse prox
- `GET /google/discovery/apis`
- `GET /google/discovery/apis/{api}/{version}/rest`
- `POST /google/oauth/token`
- `GET /google/oauth/scopes`
- `GET /google/oauth/authorize-url`
- `POST /google/oauth/service-account-token`
- `POST /google/oauth/revoke`
- `GET /google/oauth/tokeninfo`
- `GET|POST|PATCH|DELETE /google/calendar/...`
- `GET|POST|PUT /google/sheets/...`
- `POST /google/sheets/write-by-url`
- `GET|POST|PATCH|DELETE /google/drive/...`
- `GET|POST /google/gmail/...`
- `GET|POST /google/docs/...`
@@ -37,11 +40,29 @@ Volitelne environment variables:
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`: `clientId` nebo `X-Google-Client-Id`
- `GOOGLE_CLIENT_SECRET`: `clientSecret` nebo `X-Google-Client-Secret`
- `GOOGLE_REDIRECT_URI`: `redirectUri` nebo `X-Google-Redirect-Uri`
- `GOOGLE_SERVICE_ACCOUNT_EMAIL`: `serviceAccountEmail` nebo `X-Google-Service-Account-Email`
- `GOOGLE_PRIVATE_KEY`: `privateKey` nebo `X-Google-Private-Key`
- `GOOGLE_SCOPES`: `scope`, `scopes` nebo `X-Google-Scopes`
- `GOOGLE_ACCESS_TOKEN`: `Authorization: Bearer <token>`, `accessToken`, `accessTokenEnv`, `X-Google-Access-Token`, `X-Google-Access-Token-Env`
- `GOOGLE_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 sluzby
- `X-Google-Access-Token` header
- `X-Google-Access-Token-Env` header, napr. `GOOGLE_ACCESS_TOKEN`
- `X-Google-Api-Key` nebo `X-Google-Api-Key-Env` header
- `accessToken` v body
- `accessTokenEnv` v body, napr. `GOOGLE_ACCESS_TOKEN`
- `GOOGLE_API_KEY`, `apiKey` nebo `apiKeyEnv` pro endpointy podporujici API key
@@ -102,3 +123,51 @@ POST /google/sheets/spreadsheets/{spreadsheetId}/values/append?range=Sheet1!A1
]
}
```
Priklad zapisu do Google Sheets podle URL a nazvu listu:
```json
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
1. Zavolej `GET /google/oauth/scopes` a vyber scopes podle sluzeb.
2. Zavolej `GET /google/oauth/authorize-url?redirectUri=<callback>&scopes=<scopes>`.
3. Otevri `authorizationUrl` z odpovedi v prohlizeci.
4. Google presmeruje na `redirectUri?code=...`.
5. Vymen code pres `POST /google/oauth/token`.
6. Access token posilej jako `Authorization: Bearer <access_token>`.
Priklad vymeny code:
```json
{
"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 jako `primary`.
- `spreadsheetId`: `GET /google/sheets/spreadsheets`, hodnota je `files[].id`.
- `sheetId`: `GET /google/sheets/spreadsheets/{spreadsheetId}/sheets`, hodnota je `sheets[].properties.sheetId`.
- A1 range pro Sheets hodnoty: pouzij `sheets[].properties.title`, napr. `Sheet1!A1:B10`.
- `fileId`: `GET /google/drive/files`, hodnota je `files[].id`.
- `messageId`: `GET /google/gmail/messages`, hodnota je `messages[].id`.
- `documentId`, `presentationId`: u Docs/Slides jde o ID Drive souboru.