<Self>(): <
ApiId extends string,
Groups extends HttpApiGroup.Constraint,
const Name extends string,
const MK extends string = "metrics"
>(
key: Name,
api: HttpApiType.HttpApi<ApiId, Groups>,
config?: HttpApiClientTagConfig & { readonly metricsKey?: MK }
) => StampedHttpApiClientTag<Self, Groups, MK>Class factory: Hyperlink Tag for an HttpApi client — no baked .layer.
Pair with httpApiClientLayer.
export const const HttpApiClient: <Self>() => <
ApiId extends string,
Groups extends HttpApiGroup.Constraint,
Name extends string,
MK extends string = "metrics"
>(
key: Name,
api: HttpApiType.HttpApi<ApiId, Groups>,
config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
) => StampedHttpApiClientTag<Self, Groups, MK>
Class factory: Hyperlink Tag for an HttpApi client — no baked .layer.
Pair with
httpApiClientLayer
.
HttpApiClient = <function (type parameter) Self in <Self>(): <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}) => StampedHttpApiClientTag<Self, Groups, MK>
Self>() =>
<
function (type parameter) ApiId in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
ApiId extends string,
function (type parameter) Groups in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
Groups extends import HttpApiGroupHttpApiGroup.Constraint,
const function (type parameter) Name in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
Name extends string,
const function (type parameter) MK in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
MK extends string = "metrics",
>(
key: const Name extends stringkey: function (type parameter) Name in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
Name,
api: HttpApi.HttpApi<ApiId, Groups>(parameter) api: {
identifier: Id;
groups: GroupMap<Groups>;
annotations: Context.Context<never>;
add: (...groups: A) => HttpApi.HttpApi<ApiId, Groups | A[number]>;
addHttpApi: (api: HttpApi.HttpApi<Id2, Groups2>) => HttpApi.HttpApi<ApiId, Groups | Groups2>;
prefix: (prefix: Prefix) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddPrefix<Groups, Prefix>>;
middleware: (middleware: Context.Key<I, S>) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddMiddleware<Groups, I>>;
annotate: (tag: Context.Key<I, S>, value: S) => HttpApi.HttpApi<ApiId, Groups>;
annotateMerge: (context: Context.Context<I>) => HttpApi.HttpApi<ApiId, Groups>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
api: import HttpApiTypeHttpApiType.interface HttpApi<out Id extends string, in out Groups extends HttpApiGroup.Constraint = never>An HttpApi is a collection of HTTP API groups and endpoints that represents a
portion of your domain.
When to use
Use when endpoint implementations can be provided with HttpApiBuilder.group, and the
completed API can be registered with HttpApiBuilder.layer.
HttpApi<function (type parameter) ApiId in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
ApiId, function (type parameter) Groups in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
Groups>,
config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config: HttpApiClientTagConfig & { readonly metricsKey?: MK | undefinedmetricsKey?: function (type parameter) MK in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
MK } = {},
): type StampedHttpApiClientTag<
Self,
Groups extends HttpApiGroup.Constraint,
MK extends string
> = Hyperlink.HyperlinkTag<
Self,
Hyperlink.Spec,
HttpApiClientShape<Groups, MK>
> & {
readonly [tagConfigSym]: {
readonly api: HttpApiType.HttpApi<
string,
Groups
>
readonly concurrency: number | undefined
readonly rateLimit:
| GateRateLimitOptions
| undefined
readonly adaptive: NormalizedAdaptive
readonly metricsKey: MK
readonly windowMs: Duration.Input | undefined
}
}
StampedHttpApiClientTag<function (type parameter) Self in <Self>(): <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}) => StampedHttpApiClientTag<Self, Groups, MK>
Self, function (type parameter) Groups in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
Groups, function (type parameter) MK in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
MK> => {
const const adaptive: NormalizedAdaptiveadaptive = const normalizeAdaptive: (
adaptive:
| boolean
| HttpApiClientAdaptiveOptions
| undefined
) => NormalizedAdaptive
normalizeAdaptive(config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.adaptive?: boolean | HttpApiClientAdaptiveOptionsOpt-in Effect adaptiveConsume / adaptiveFeedback on 429 + Retry-After.
Default off. Requires rateLimit.
adaptive);
if (const adaptive: NormalizedAdaptiveadaptive.enabled: booleanenabled && config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.rateLimit?: GateRateLimitOptions | undefinedrateLimit === var undefinedundefined) {
throw new constructor AdaptiveRequiresRateLimit<{
readonly tagKey: string;
}>(args: {
readonly tagKey: string;
}): AdaptiveRequiresRateLimit
Thrown when
HttpApiClientTagConfig.adaptive
is set without rateLimit.
AdaptiveRequiresRateLimit({ tagKey: stringtagKey: key: const Name extends stringkey });
}
const const metricsKey: const MK extends string = "metrics"metricsKey = (config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.metricsKey?: MK | undefinedConst nest path — default "metrics". Must not collide with an HttpApi group id.
metricsKey ?? "metrics") as function (type parameter) MK in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
MK;
assertNoMetricsKeyCollision<ApiId, Groups>(api: HttpApi.HttpApi<ApiId, Groups>, metricsKey: string): voidAssert no HttpApi group identifier equals metricsKey.
assertNoMetricsKeyCollision(api: HttpApi.HttpApi<ApiId, Groups>(parameter) api: {
identifier: Id;
groups: GroupMap<Groups>;
annotations: Context.Context<never>;
add: (...groups: A) => HttpApi.HttpApi<ApiId, Groups | A[number]>;
addHttpApi: (api: HttpApi.HttpApi<Id2, Groups2>) => HttpApi.HttpApi<ApiId, Groups | Groups2>;
prefix: (prefix: Prefix) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddPrefix<Groups, Prefix>>;
middleware: (middleware: Context.Key<I, S>) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddMiddleware<Groups, I>>;
annotate: (tag: Context.Key<I, S>, value: S) => HttpApi.HttpApi<ApiId, Groups>;
annotateMerge: (context: Context.Context<I>) => HttpApi.HttpApi<ApiId, Groups>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
api, const metricsKey: const MK extends string = "metrics"metricsKey);
const const spec: Hyperlink.Specspec = buildHttpApiClientSpec<ApiId extends string, Groups extends HttpApiGroup.Constraint>(api: HttpApiType.HttpApi<ApiId, Groups>, metricsKey: string): Hyperlink.SpecBuild a Spec: each non-topLevel group → nested bare locals; topLevel endpoints
on the root; nest under metricsKey.
buildHttpApiClientSpec(api: HttpApi.HttpApi<ApiId, Groups>(parameter) api: {
identifier: Id;
groups: GroupMap<Groups>;
annotations: Context.Context<never>;
add: (...groups: A) => HttpApi.HttpApi<ApiId, Groups | A[number]>;
addHttpApi: (api: HttpApi.HttpApi<Id2, Groups2>) => HttpApi.HttpApi<ApiId, Groups | Groups2>;
prefix: (prefix: Prefix) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddPrefix<Groups, Prefix>>;
middleware: (middleware: Context.Key<I, S>) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddMiddleware<Groups, I>>;
annotate: (tag: Context.Key<I, S>, value: S) => HttpApi.HttpApi<ApiId, Groups>;
annotateMerge: (context: Context.Context<I>) => HttpApi.HttpApi<ApiId, Groups>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
api, const metricsKey: const MK extends string = "metrics"metricsKey);
// Licensed boundary: reflect-built Spec matches Client locals + nest — see
// test/gate-http-api-client.test-d.ts.
const const tag: Hyperlink.HyperlinkTag<
Self,
never,
never
>
const tag: {
description: string | undefined;
key: Identifier;
of: (this: void, self: never) => never;
context: (self: never) => Context.Context<Self>;
use: (f: (service: never) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, Self | R>;
useSync: (f: (service: never) => A) => Effect.Effect<A, never, Self>;
Identifier: Identifier;
Service: Shape;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
tag = import HyperlinkHyperlink.Tag<Self, HttpApiClientShape<Groups, MK>>(): InterfaceTagBuilder<Self, HttpApiClientShape<Groups, MK>> (+2 overloads)
export Tag
Interface-driven solo: I is SSOT; bare
local
takes its type from I.
Tag<function (type parameter) Self in <Self>(): <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}) => StampedHttpApiClientTag<Self, Groups, MK>
Self, type HttpApiClientShape<
Groups extends HttpApiGroup.Constraint,
MK extends string
> = Simplify<
{
readonly [Group in Extract<
Groups,
{
readonly topLevel: false
}
> as HttpApiGroup.Identifier<Group>]: EffectHttpApiClient.Client.GroupByEndpoint<
Group,
never,
never
>
} & EffectHttpApiClient.Client.TopLevelMethods<
Groups,
never,
never
>
> & { readonly [K in MK]: HttpApiClientMetrics }
HttpApiClientShape<function (type parameter) Groups in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
Groups, function (type parameter) MK in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
MK>>()(
key: const Name extends stringkey,
const spec: Hyperlink.Specspec as never,
{ kind?: string | undefinedkind: const httpApiClientKind: "hyperlink-ts/Gate/HttpApiClient"Kind stamped on
HttpApiClient
Tags for dashboard classification.
httpApiClientKind, description?: string | undefineddescription: config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.description?: string | undefineddescription },
);
const const stamped: Hyperlink.HyperlinkTag<
Self,
never,
never
>
const stamped: {
description: string | undefined;
key: Identifier;
of: (this: void, self: never) => never;
context: (self: never) => Context.Context<Self>;
use: (f: (service: never) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, Self | R>;
useSync: (f: (service: never) => A) => Effect.Effect<A, never, Self>;
Identifier: Identifier;
Service: Shape;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
stamped = stampGateMetricsMetadata<Hyperlink.HyperlinkTag<Self, never, never>>(tag: Hyperlink.HyperlinkTag<Self, never, never>, meta: {
readonly rateLimitKey?: string | undefined;
readonly metricsKey?: string | undefined;
}): Hyperlink.HyperlinkTag<Self, never, never>
Stamp stable limiter metadata on a gate tag (widget discovery — not nest path).
stampGateMetricsMetadata(const tag: Hyperlink.HyperlinkTag<
Self,
never,
never
>
const tag: {
description: string | undefined;
key: Identifier;
of: (this: void, self: never) => never;
context: (self: never) => Context.Context<Self>;
use: (f: (service: never) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, Self | R>;
useSync: (f: (service: never) => A) => Effect.Effect<A, never, Self>;
Identifier: Identifier;
Service: Shape;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
tag, {
metricsKey?: string | undefinedmetricsKey,
rateLimitKey?: string | undefinedrateLimitKey:
config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.rateLimit?: GateRateLimitOptions | undefinedrateLimit === var undefinedundefined
? var undefinedundefined
: (config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.rateLimit?: GateRateLimitOptionsrateLimit.key?: string | undefinedShared limit bucket (default: gate name / service id).
key ?? key: const Name extends stringkey),
});
return var Object: ObjectConstructorProvides functionality common to all JavaScript objects.
Object.ObjectConstructor.assign<Hyperlink.HyperlinkTag<Self, never, never>, {
[tagConfigSym]: {
api: HttpApi.HttpApi<ApiId, Groups>;
concurrency: number | undefined;
rateLimit: GateRateLimitOptions | undefined;
adaptive: NormalizedAdaptive;
metricsKey: MK;
windowMs: Duration.Input | undefined;
};
}>(target: Hyperlink.HyperlinkTag<Self, never, never>, source: {
[tagConfigSym]: {
api: HttpApi.HttpApi<ApiId, Groups>;
concurrency: number | undefined;
rateLimit: GateRateLimitOptions | undefined;
adaptive: NormalizedAdaptive;
metricsKey: MK;
windowMs: Duration.Input | undefined;
};
}): Hyperlink.HyperlinkTag<...> & {
[tagConfigSym]: {
api: HttpApi.HttpApi<ApiId, Groups>;
concurrency: number | undefined;
rateLimit: GateRateLimitOptions | undefined;
adaptive: NormalizedAdaptive;
metricsKey: MK;
windowMs: Duration.Input | undefined;
};
} (+3 overloads)
Copy the values of all of the enumerable own properties from one or more source objects to a
target object. Returns the target object.
assign(const stamped: Hyperlink.HyperlinkTag<
Self,
never,
never
>
const stamped: {
description: string | undefined;
key: Identifier;
of: (this: void, self: never) => never;
context: (self: never) => Context.Context<Self>;
use: (f: (service: never) => Effect.Effect<A, E, R>) => Effect.Effect<A, E, Self | R>;
useSync: (f: (service: never) => A) => Effect.Effect<A, never, Self>;
Identifier: Identifier;
Service: Shape;
stack: string | undefined;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
toString: () => string;
toJSON: () => unknown;
}
stamped, {
[const tagConfigSym: typeof tagConfigSymStamped mint config on an
HttpApiClient
Tag.
tagConfigSym]: {
api: HttpApi.HttpApi<ApiId, Groups>(property) api: {
identifier: Id;
groups: GroupMap<Groups>;
annotations: Context.Context<never>;
add: (...groups: A) => HttpApi.HttpApi<ApiId, Groups | A[number]>;
addHttpApi: (api: HttpApi.HttpApi<Id2, Groups2>) => HttpApi.HttpApi<ApiId, Groups | Groups2>;
prefix: (prefix: Prefix) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddPrefix<Groups, Prefix>>;
middleware: (middleware: Context.Key<I, S>) => HttpApi.HttpApi<ApiId, HttpApiGroup.AddMiddleware<Groups, I>>;
annotate: (tag: Context.Key<I, S>, value: S) => HttpApi.HttpApi<ApiId, Groups>;
annotateMerge: (context: Context.Context<I>) => HttpApi.HttpApi<ApiId, Groups>;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
api,
concurrency: number | undefinedconcurrency: config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.concurrency?: number | undefinedconcurrency,
rateLimit: GateRateLimitOptions | undefinedrateLimit: config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.rateLimit?: GateRateLimitOptions | undefinedrateLimit,
adaptive: NormalizedAdaptiveadaptive,
metricsKey: const MK extends string = "metrics"metricsKey,
windowMs: Duration.Input | undefinedwindowMs: config: HttpApiClientTagConfig & {
readonly metricsKey?: MK
}
config.HttpApiClientTagConfig.windowMs?: Duration.InputUsage window cadence (absorbed ApiMetrics).
windowMs,
},
}) as unknown as type StampedHttpApiClientTag<
Self,
Groups extends HttpApiGroup.Constraint,
MK extends string
> = Hyperlink.HyperlinkTag<
Self,
Hyperlink.Spec,
HttpApiClientShape<Groups, MK>
> & {
readonly [tagConfigSym]: {
readonly api: HttpApiType.HttpApi<
string,
Groups
>
readonly concurrency: number | undefined
readonly rateLimit:
| GateRateLimitOptions
| undefined
readonly adaptive: NormalizedAdaptive
readonly metricsKey: MK
readonly windowMs: Duration.Input | undefined
}
}
StampedHttpApiClientTag<function (type parameter) Self in <Self>(): <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}) => StampedHttpApiClientTag<Self, Groups, MK>
Self, function (type parameter) Groups in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
Groups, function (type parameter) MK in <ApiId extends string, Groups extends HttpApiGroup.Constraint, const Name extends string, const MK extends string = "metrics">(key: Name, api: HttpApiType.HttpApi<ApiId, Groups>, config?: HttpApiClientTagConfig & {
readonly metricsKey?: MK;
}): StampedHttpApiClientTag<Self, Groups, MK>
MK>;
};