1import type * as firebaseappcheck from "@distilled.cloud/gcp/firebaseappcheck_v1";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { RuntimeContext } from "../../RuntimeContext.ts";
5import type { AppsDebugToken } from "./AppsDebugToken.ts";
6
7export interface ExchangeDebugTokenRequest {
8 /**
9 * When true, the attestation is limited-use (replay protection).
10 * @default false
11 */
12 limitedUse?: boolean;
13}
14
15/**
16 * Runtime binding for App Check `apps.exchangeDebugToken`.
17 *
18 * Bind this operation to an {@link AppsDebugToken} in a Function/Action
19 * init phase. Provide {@link ExchangeDebugTokenHttp}. The secret is read
20 * from Alchemy state (`token` is never returned by get).
21 *
22 * ### Exchanging a Debug Token
23 * **Example:** Mint a session App Check token
24 * ```typescript
25 * const exchange = yield* GCP.FirebaseAppCheck.ExchangeDebugToken(debug);
26 * const { token, ttl } = yield* exchange();
27 * ```
28 *
29 * **Example:** Limited-use token
30 * ```typescript
31 * const exchange = yield* GCP.FirebaseAppCheck.ExchangeDebugToken(debug);
32 * const { token } = yield* exchange({ limitedUse: true });
33 * ```
34 *
35 * @binding
36 * @category FirebaseAppCheck
37 */
38export interface ExchangeDebugToken extends Binding.Service<
39 ExchangeDebugToken,
40 "GCP.FirebaseAppCheck.ExchangeDebugToken",
41 (
42 debugToken: AppsDebugToken,
43 ) => Effect.Effect<
44 (
45 request?: ExchangeDebugTokenRequest,
46 ) => Effect.Effect<
47 firebaseappcheck.GoogleFirebaseAppcheckV1AppCheckToken,
48 firebaseappcheck.ExchangeDebugTokenProjectsAppsError,
49 RuntimeContext
50 >
51 >
52> {}
53
54export const ExchangeDebugToken = Binding.Service<ExchangeDebugToken>(
55 "GCP.FirebaseAppCheck.ExchangeDebugToken",
56);