zuplo 6.68.9 → 6.68.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/articles/monetization/meters.mdx +26 -4
- package/docs/articles/monetization/troubleshooting.md +1 -1
- package/docs/articles/troubleshooting-slow-responses.mdx +72 -0
- package/docs/cli/custom-domain-create.mdx +91 -0
- package/docs/cli/custom-domain-delete.mdx +79 -0
- package/docs/cli/custom-domain-list.mdx +59 -0
- package/docs/cli/custom-domain-update.mdx +79 -0
- package/docs/dev-portal/zudoku/configuration/api-catalog.md +2 -2
- package/docs/dev-portal/zudoku/configuration/api-reference.md +9 -4
- package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +2 -2
- package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +4 -13
- package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +17 -16
- package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +1 -1
- package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +165 -44
- package/docs/dev-portal/zudoku/configuration/authentication.md +34 -8
- package/docs/dev-portal/zudoku/configuration/docs.md +1 -2
- package/docs/dev-portal/zudoku/configuration/footer.mdx +3 -3
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +1 -1
- package/docs/dev-portal/zudoku/configuration/oauth-security-schemes.md +122 -0
- package/docs/dev-portal/zudoku/configuration/overview.md +37 -0
- package/docs/dev-portal/zudoku/configuration/site.md +51 -0
- package/docs/dev-portal/zudoku/custom-plugins.md +9 -5
- package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +1 -1
- package/docs/dev-portal/zudoku/markdown/frontmatter.md +20 -9
- package/docs/dev-portal/zudoku/markdown/overview.md +1 -1
- package/package.json +4 -4
|
@@ -43,14 +43,17 @@ Track the total number of API requests:
|
|
|
43
43
|
}
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
Each event contains the subscription ID
|
|
47
|
-
with the quantity to record:
|
|
46
|
+
Each event contains the `subscription` ID linking it to a subscription and a
|
|
47
|
+
`total` field in `data` with the quantity to record:
|
|
48
48
|
|
|
49
49
|
```json
|
|
50
50
|
{
|
|
51
|
+
"id": "5c10fade-1c9e-4d6c-8275-c52c36731d3c",
|
|
52
|
+
"specversion": "1.0",
|
|
51
53
|
"type": "requests",
|
|
52
|
-
"subject": "sub_xxxxxxxx",
|
|
53
54
|
"source": "monetization-policy",
|
|
55
|
+
"subject": "customer-id",
|
|
56
|
+
"subscription": "01KNVXHQG356VA7T7W0V9N21GH",
|
|
54
57
|
"data": {
|
|
55
58
|
"total": 1
|
|
56
59
|
}
|
|
@@ -76,9 +79,12 @@ configured to report 50 tokens per request:
|
|
|
76
79
|
|
|
77
80
|
```json
|
|
78
81
|
{
|
|
82
|
+
"id": "a1b2c3d4-5678-4abc-8def-1234567890ab",
|
|
83
|
+
"specversion": "1.0",
|
|
79
84
|
"type": "tokens",
|
|
80
|
-
"subject": "sub_xxxxxxxx",
|
|
81
85
|
"source": "monetization-policy",
|
|
86
|
+
"subject": "customer-id",
|
|
87
|
+
"subscription": "01KNVXHQG356VA7T7W0V9N21GH",
|
|
82
88
|
"data": {
|
|
83
89
|
"total": 50
|
|
84
90
|
}
|
|
@@ -99,6 +105,22 @@ Track bytes transferred:
|
|
|
99
105
|
}
|
|
100
106
|
```
|
|
101
107
|
|
|
108
|
+
Each event reports the number of bytes transferred:
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
|
|
113
|
+
"specversion": "1.0",
|
|
114
|
+
"type": "data_transfer",
|
|
115
|
+
"source": "monetization-policy",
|
|
116
|
+
"subject": "customer-id",
|
|
117
|
+
"subscription": "01KNVXHQG356VA7T7W0V9N21GH",
|
|
118
|
+
"data": {
|
|
119
|
+
"total": 4096
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
102
124
|
## Naming Consistency
|
|
103
125
|
|
|
104
126
|
The meter `eventType` must match the key used in three places:
|
|
@@ -155,7 +155,7 @@ curl -X POST https://dev.zuplo.com/v3/metering/{bucketId}/meters/{meterIdOrSlug}
|
|
|
155
155
|
-H "Authorization: Bearer {API_KEY}" \
|
|
156
156
|
-H "Content-Type: application/json" \
|
|
157
157
|
-d '{
|
|
158
|
-
"
|
|
158
|
+
"filterSubscription": ["{SUBSCRIPTION_ID}"],
|
|
159
159
|
"from": "2026-03-01T00:00:00Z",
|
|
160
160
|
"to": "2026-03-31T23:59:59Z",
|
|
161
161
|
"windowSize": "DAY"
|
|
@@ -234,6 +234,76 @@ performance. Use it to:
|
|
|
234
234
|
- Spot error rate spikes that may correlate with latency issues
|
|
235
235
|
- Track request volume trends that may indicate capacity-related slowness
|
|
236
236
|
|
|
237
|
+
### OpenTelemetry Tracing
|
|
238
|
+
|
|
239
|
+
For the most detailed view of where time is spent in your request pipeline,
|
|
240
|
+
enable [OpenTelemetry tracing](./opentelemetry.mdx). The OpenTelemetry plugin
|
|
241
|
+
automatically instruments your API and provides span-level timing for each stage
|
|
242
|
+
of the request lifecycle — including inbound policies, the handler, outbound
|
|
243
|
+
policies, and any subrequests made via `fetch` in custom code.
|
|
244
|
+
|
|
245
|
+
<EnterpriseFeature name="OpenTelemetry" />
|
|
246
|
+
|
|
247
|
+
With tracing enabled, you can see exactly how long each policy and handler takes
|
|
248
|
+
to execute, making it straightforward to identify which component is adding
|
|
249
|
+
latency. The plugin also supports W3C trace propagation, so you can follow a
|
|
250
|
+
request all the way from the client through Zuplo to your backend.
|
|
251
|
+
|
|
252
|
+
To get started, add the `OpenTelemetryPlugin` in your `zuplo.runtime.ts` file
|
|
253
|
+
and configure it to export trace data to any OpenTelemetry-compatible service
|
|
254
|
+
such as [Honeycomb](https://honeycomb.io), [Dynatrace](https://dynatrace.com),
|
|
255
|
+
[Jaeger](https://www.jaegertracing.io/), or an
|
|
256
|
+
[OpenTelemetry Collector](https://opentelemetry.io/docs/collector/):
|
|
257
|
+
|
|
258
|
+
```ts title="zuplo.runtime.ts"
|
|
259
|
+
import { OpenTelemetryPlugin } from "@zuplo/otel";
|
|
260
|
+
import { RuntimeExtensions, environment } from "@zuplo/runtime";
|
|
261
|
+
|
|
262
|
+
export function runtimeInit(runtime: RuntimeExtensions) {
|
|
263
|
+
runtime.addPlugin(
|
|
264
|
+
new OpenTelemetryPlugin({
|
|
265
|
+
exporter: {
|
|
266
|
+
url: "https://otel-collector.example.com/v1/traces",
|
|
267
|
+
headers: {
|
|
268
|
+
"api-key": environment.OTEL_API_KEY,
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
service: {
|
|
272
|
+
name: "my-api",
|
|
273
|
+
version: "1.0.0",
|
|
274
|
+
},
|
|
275
|
+
}),
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
You can also add custom spans within your policies to trace specific operations:
|
|
281
|
+
|
|
282
|
+
```ts
|
|
283
|
+
import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
|
|
284
|
+
import { trace } from "@opentelemetry/api";
|
|
285
|
+
|
|
286
|
+
export default async function policy(
|
|
287
|
+
request: ZuploRequest,
|
|
288
|
+
context: ZuploContext,
|
|
289
|
+
) {
|
|
290
|
+
const tracer = trace.getTracer("my-tracer");
|
|
291
|
+
return tracer.startActiveSpan("my-custom-operation", async (span) => {
|
|
292
|
+
span.setAttribute("endpoint", request.url);
|
|
293
|
+
|
|
294
|
+
try {
|
|
295
|
+
// ... policy logic with external calls ...
|
|
296
|
+
return request;
|
|
297
|
+
} finally {
|
|
298
|
+
span.end();
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
For the full configuration reference, including sampling, post-processing, and
|
|
305
|
+
logging, see the [OpenTelemetry documentation](./opentelemetry.mdx).
|
|
306
|
+
|
|
237
307
|
### Logging Integrations
|
|
238
308
|
|
|
239
309
|
For deeper analysis, configure one of Zuplo's
|
|
@@ -290,6 +360,8 @@ back-and-forth diagnostic questions.
|
|
|
290
360
|
|
|
291
361
|
## Related Resources
|
|
292
362
|
|
|
363
|
+
- [OpenTelemetry](./opentelemetry.mdx) — Distributed tracing and logging for
|
|
364
|
+
detailed request lifecycle visibility
|
|
293
365
|
- [Performance Testing Your API Gateway](./performance-testing.mdx) — How to
|
|
294
366
|
benchmark and compare gateway performance accurately
|
|
295
367
|
- [Proactive Monitoring](./monitoring-your-gateway.mdx) — Setting up health
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Zuplo CLI: Custom Domain Create"
|
|
3
|
+
sidebar_label: custom-domain create
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<CliCommand
|
|
7
|
+
command="custom-domain create"
|
|
8
|
+
description="Creates a custom domain in your account"
|
|
9
|
+
options={[
|
|
10
|
+
{
|
|
11
|
+
"name": "hostname",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "The hostname for the custom domain",
|
|
14
|
+
"required": false,
|
|
15
|
+
"deprecated": false,
|
|
16
|
+
"hidden": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "deployment-name",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "The deployment name to assign the custom domain to",
|
|
22
|
+
"required": false,
|
|
23
|
+
"deprecated": false,
|
|
24
|
+
"hidden": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "custom-domain-type",
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "The type of custom domain to create. Defaults to api server-side.",
|
|
30
|
+
"required": false,
|
|
31
|
+
"deprecated": false,
|
|
32
|
+
"hidden": false,
|
|
33
|
+
"choices": [
|
|
34
|
+
"api",
|
|
35
|
+
"dev-portal"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "account",
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "The account name",
|
|
42
|
+
"required": false,
|
|
43
|
+
"deprecated": false,
|
|
44
|
+
"hidden": false
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "output",
|
|
48
|
+
"type": "string",
|
|
49
|
+
"description": "Output format",
|
|
50
|
+
"default": "default",
|
|
51
|
+
"required": false,
|
|
52
|
+
"deprecated": false,
|
|
53
|
+
"hidden": false,
|
|
54
|
+
"alias": [
|
|
55
|
+
"o"
|
|
56
|
+
],
|
|
57
|
+
"choices": [
|
|
58
|
+
"default",
|
|
59
|
+
"json"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
]}
|
|
63
|
+
examples={[
|
|
64
|
+
[
|
|
65
|
+
"$0 custom-domain create --hostname api.example.com",
|
|
66
|
+
"Create an unassigned custom domain"
|
|
67
|
+
],
|
|
68
|
+
[
|
|
69
|
+
"$0 custom-domain create --hostname api.example.com --output json",
|
|
70
|
+
"Create a custom domain and output the result as JSON"
|
|
71
|
+
],
|
|
72
|
+
[
|
|
73
|
+
"$0 custom-domain create \\\n --hostname api.example.com \\\n --deployment-name production-deployment",
|
|
74
|
+
"Create and assign a custom domain to a deployment"
|
|
75
|
+
],
|
|
76
|
+
[
|
|
77
|
+
"$0 custom-domain create \\\n --hostname docs.example.com \\\n --deployment-name production-deployment \\\n --custom-domain-type dev-portal \\\n --account my-account",
|
|
78
|
+
"Create a dev portal custom domain on a specific account"
|
|
79
|
+
]
|
|
80
|
+
]}
|
|
81
|
+
usage="$0 custom-domain create --hostname <hostname> [options]"
|
|
82
|
+
>
|
|
83
|
+
|
|
84
|
+
</CliCommand>
|
|
85
|
+
|
|
86
|
+
## Global options
|
|
87
|
+
|
|
88
|
+
The following global options are available for all commands:
|
|
89
|
+
|
|
90
|
+
- [`--help`](./global-options.mdx#help)
|
|
91
|
+
- [`--api-key`](./global-options.mdx#api-key)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Zuplo CLI: Custom Domain Delete"
|
|
3
|
+
sidebar_label: custom-domain delete
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<CliCommand
|
|
7
|
+
command="custom-domain delete"
|
|
8
|
+
description="Deletes a custom domain in your account"
|
|
9
|
+
options={[
|
|
10
|
+
{
|
|
11
|
+
"name": "hostname",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "The hostname for the custom domain",
|
|
14
|
+
"required": false,
|
|
15
|
+
"deprecated": false,
|
|
16
|
+
"hidden": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "deployment-name",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "The deployment name for assigned domains. Required when the hostname is assigned to multiple deployments.",
|
|
22
|
+
"required": false,
|
|
23
|
+
"deprecated": false,
|
|
24
|
+
"hidden": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "account",
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "The account name",
|
|
30
|
+
"required": false,
|
|
31
|
+
"deprecated": false,
|
|
32
|
+
"hidden": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "output",
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "Output format",
|
|
38
|
+
"default": "default",
|
|
39
|
+
"required": false,
|
|
40
|
+
"deprecated": false,
|
|
41
|
+
"hidden": false,
|
|
42
|
+
"alias": [
|
|
43
|
+
"o"
|
|
44
|
+
],
|
|
45
|
+
"choices": [
|
|
46
|
+
"default",
|
|
47
|
+
"json"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]}
|
|
51
|
+
examples={[
|
|
52
|
+
[
|
|
53
|
+
"$0 custom-domain delete --hostname api.example.com",
|
|
54
|
+
"Delete an unassigned custom domain or auto-resolve a single deployment assignment"
|
|
55
|
+
],
|
|
56
|
+
[
|
|
57
|
+
"$0 custom-domain delete --hostname api.example.com --output json",
|
|
58
|
+
"Delete a custom domain and output the result as JSON"
|
|
59
|
+
],
|
|
60
|
+
[
|
|
61
|
+
"$0 custom-domain delete \\\n --hostname api.example.com \\\n --deployment-name production-deployment",
|
|
62
|
+
"Delete a deployment-assigned custom domain explicitly"
|
|
63
|
+
],
|
|
64
|
+
[
|
|
65
|
+
"$0 custom-domain delete \\\n --hostname docs.example.com \\\n --deployment-name portal-deployment \\\n --account my-account",
|
|
66
|
+
"Delete a custom domain from a specific account"
|
|
67
|
+
]
|
|
68
|
+
]}
|
|
69
|
+
usage="$0 custom-domain delete --hostname <hostname> [options]"
|
|
70
|
+
>
|
|
71
|
+
|
|
72
|
+
</CliCommand>
|
|
73
|
+
|
|
74
|
+
## Global options
|
|
75
|
+
|
|
76
|
+
The following global options are available for all commands:
|
|
77
|
+
|
|
78
|
+
- [`--help`](./global-options.mdx#help)
|
|
79
|
+
- [`--api-key`](./global-options.mdx#api-key)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Zuplo CLI: Custom Domain List"
|
|
3
|
+
sidebar_label: custom-domain list
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<CliCommand
|
|
7
|
+
command="custom-domain list"
|
|
8
|
+
description="Lists the custom domains in your account"
|
|
9
|
+
options={[
|
|
10
|
+
{
|
|
11
|
+
"name": "account",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "The account name",
|
|
14
|
+
"required": false,
|
|
15
|
+
"deprecated": false,
|
|
16
|
+
"hidden": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "output",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "Output format",
|
|
22
|
+
"default": "default",
|
|
23
|
+
"required": false,
|
|
24
|
+
"deprecated": false,
|
|
25
|
+
"hidden": false,
|
|
26
|
+
"alias": [
|
|
27
|
+
"o"
|
|
28
|
+
],
|
|
29
|
+
"choices": [
|
|
30
|
+
"default",
|
|
31
|
+
"json"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
]}
|
|
35
|
+
examples={[
|
|
36
|
+
[
|
|
37
|
+
"$0 custom-domain list",
|
|
38
|
+
"List all custom domains"
|
|
39
|
+
],
|
|
40
|
+
[
|
|
41
|
+
"$0 custom-domain list --output json",
|
|
42
|
+
"List all custom domains as JSON"
|
|
43
|
+
],
|
|
44
|
+
[
|
|
45
|
+
"$0 custom-domain list --account my-account",
|
|
46
|
+
"Explicitly specify the account"
|
|
47
|
+
]
|
|
48
|
+
]}
|
|
49
|
+
usage="$0 custom-domain list [options]"
|
|
50
|
+
>
|
|
51
|
+
|
|
52
|
+
</CliCommand>
|
|
53
|
+
|
|
54
|
+
## Global options
|
|
55
|
+
|
|
56
|
+
The following global options are available for all commands:
|
|
57
|
+
|
|
58
|
+
- [`--help`](./global-options.mdx#help)
|
|
59
|
+
- [`--api-key`](./global-options.mdx#api-key)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Zuplo CLI: Custom Domain Update"
|
|
3
|
+
sidebar_label: custom-domain update
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<CliCommand
|
|
7
|
+
command="custom-domain update"
|
|
8
|
+
description="Updates the deployment assignment for a custom domain"
|
|
9
|
+
options={[
|
|
10
|
+
{
|
|
11
|
+
"name": "hostname",
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "The hostname for the custom domain",
|
|
14
|
+
"required": false,
|
|
15
|
+
"deprecated": false,
|
|
16
|
+
"hidden": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "deployment-name",
|
|
20
|
+
"type": "string",
|
|
21
|
+
"description": "The deployment name to assign the custom domain to. Omit to detach the current assignment.",
|
|
22
|
+
"required": false,
|
|
23
|
+
"deprecated": false,
|
|
24
|
+
"hidden": false
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "account",
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "The account name",
|
|
30
|
+
"required": false,
|
|
31
|
+
"deprecated": false,
|
|
32
|
+
"hidden": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "output",
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "Output format",
|
|
38
|
+
"default": "default",
|
|
39
|
+
"required": false,
|
|
40
|
+
"deprecated": false,
|
|
41
|
+
"hidden": false,
|
|
42
|
+
"alias": [
|
|
43
|
+
"o"
|
|
44
|
+
],
|
|
45
|
+
"choices": [
|
|
46
|
+
"default",
|
|
47
|
+
"json"
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]}
|
|
51
|
+
examples={[
|
|
52
|
+
[
|
|
53
|
+
"$0 custom-domain update \\\n --hostname api.example.com \\\n --deployment-name production-deployment",
|
|
54
|
+
"Reassign a custom domain to a deployment"
|
|
55
|
+
],
|
|
56
|
+
[
|
|
57
|
+
"$0 custom-domain update --hostname api.example.com --output json",
|
|
58
|
+
"Update a custom domain and output the result as JSON"
|
|
59
|
+
],
|
|
60
|
+
[
|
|
61
|
+
"$0 custom-domain update --hostname api.example.com",
|
|
62
|
+
"Detach the current deployment assignment while preserving the stage"
|
|
63
|
+
],
|
|
64
|
+
[
|
|
65
|
+
"$0 custom-domain update \\\n --hostname docs.example.com \\\n --deployment-name portal-deployment \\\n --account my-account",
|
|
66
|
+
"Update a custom domain on a specific account"
|
|
67
|
+
]
|
|
68
|
+
]}
|
|
69
|
+
usage="$0 custom-domain update --hostname <hostname> [options]"
|
|
70
|
+
>
|
|
71
|
+
|
|
72
|
+
</CliCommand>
|
|
73
|
+
|
|
74
|
+
## Global options
|
|
75
|
+
|
|
76
|
+
The following global options are available for all commands:
|
|
77
|
+
|
|
78
|
+
- [`--help`](./global-options.mdx#help)
|
|
79
|
+
- [`--api-key`](./global-options.mdx#api-key)
|
|
@@ -99,8 +99,8 @@ const config = {
|
|
|
99
99
|
catalogs: {
|
|
100
100
|
path: "/catalog",
|
|
101
101
|
label: "API Catalog",
|
|
102
|
-
filterItems: (items, { auth
|
|
103
|
-
return items.filter((
|
|
102
|
+
filterItems: (items, { auth }) => {
|
|
103
|
+
return items.filter((item) => item.tags.includes("public"));
|
|
104
104
|
},
|
|
105
105
|
},
|
|
106
106
|
// ...
|
|
@@ -201,11 +201,12 @@ const config = {
|
|
|
201
201
|
options: {
|
|
202
202
|
examplesLanguage: "shell", // Default language for code examples
|
|
203
203
|
supportedLanguages: [
|
|
204
|
-
{
|
|
205
|
-
{
|
|
204
|
+
{ value: "shell", label: "cURL" },
|
|
205
|
+
{ value: "javascript", label: "JavaScript" },
|
|
206
206
|
],
|
|
207
207
|
disablePlayground: false, // Disable the interactive API playground
|
|
208
208
|
disableSidecar: false, // Disable the sidecar completely
|
|
209
|
+
disableSecurity: true, // Disable security scheme display and playground auth (default)
|
|
209
210
|
showVersionSelect: "if-available", // Control version selector visibility
|
|
210
211
|
expandAllTags: true, // Control initial expanded state of tag categories
|
|
211
212
|
showInfoPage: true, // Show API information page as the index route
|
|
@@ -220,10 +221,13 @@ const config = {
|
|
|
220
221
|
Available options:
|
|
221
222
|
|
|
222
223
|
- `examplesLanguage`: Set default language for code examples
|
|
223
|
-
- `supportedLanguages`: Array of language options for code examples. Each option has `
|
|
224
|
-
|
|
224
|
+
- `supportedLanguages`: Array of language options for code examples. Each option has `value` (code
|
|
225
|
+
identifier) and `label` (display name)
|
|
225
226
|
- `disablePlayground`: Disable the interactive API playground globally
|
|
226
227
|
- `disableSidecar`: Disable the sidecar panel completely
|
|
228
|
+
- `disableSecurity`: Disable OpenAPI security scheme display (auth badges on operations, security
|
|
229
|
+
schemes section on the info page, and the Authorize dialog in the playground). Disabled by default
|
|
230
|
+
(`true`). Set to `false` to enable security scheme support
|
|
227
231
|
- `showVersionSelect`: Control version selector visibility
|
|
228
232
|
- `"if-available"`: Show version selector only when multiple versions exist (default)
|
|
229
233
|
- `"always"`: Always show version selector (disabled if only one version)
|
|
@@ -251,6 +255,7 @@ const config = {
|
|
|
251
255
|
examplesLanguage: "shell", // Default language for code examples
|
|
252
256
|
disablePlayground: false, // Disable the interactive API playground
|
|
253
257
|
disableSidecar: false, // Disable the sidecar completely
|
|
258
|
+
disableSecurity: true, // Disable security scheme display and playground auth (default)
|
|
254
259
|
showVersionSelect: "if-available", // Control version selector visibility
|
|
255
260
|
expandAllTags: false, // Control initial expanded state of tag categories
|
|
256
261
|
showInfoPage: true, // Show API information page as the index route
|
|
@@ -160,8 +160,8 @@ When the prompt parameter is omitted (empty string), Auth0 will:
|
|
|
160
160
|
|
|
161
161
|
2. **CORS Errors**: Add your site's domain to the Allowed Web Origins in Auth0.
|
|
162
162
|
|
|
163
|
-
3. **Authentication Loop**: Check that your Auth0 domain
|
|
164
|
-
trailing slash.
|
|
163
|
+
3. **Authentication Loop**: Check that your Auth0 domain is a plain hostname only (e.g.,
|
|
164
|
+
`your-domain.us.auth0.com`) without a protocol prefix (`https://`) or trailing slash.
|
|
165
165
|
|
|
166
166
|
4. **Token Validation Errors**: Ensure the audience in your Dev Portal configuration matches the
|
|
167
167
|
identifier of the Auth0 API you created.
|
|
@@ -44,9 +44,8 @@ to integrate Azure AD with your Dev Portal documentation site.
|
|
|
44
44
|
- Production: `https://your-site.com/oauth/callback`
|
|
45
45
|
- Preview (wildcard): `https://*.your-domain.com/oauth/callback`
|
|
46
46
|
- Local Development: `http://localhost:3000/oauth/callback`
|
|
47
|
-
-
|
|
48
|
-
|
|
49
|
-
- Enable **Access tokens**
|
|
47
|
+
- **Implicit grant and hybrid flows** should remain **disabled** — Dev Portal uses the more secure
|
|
48
|
+
Authorization Code flow with PKCE
|
|
50
49
|
- Configure **Supported account types** if needed
|
|
51
50
|
- Save your changes
|
|
52
51
|
|
|
@@ -82,14 +81,6 @@ to integrate Azure AD with your Dev Portal documentation site.
|
|
|
82
81
|
};
|
|
83
82
|
```
|
|
84
83
|
|
|
85
|
-
5. **Install Azure AD Dependencies**
|
|
86
|
-
|
|
87
|
-
Add `@azure/msal-browser` to your project dependencies:
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
npm install @azure/msal-browser
|
|
91
|
-
```
|
|
92
|
-
|
|
93
84
|
</Stepper>
|
|
94
85
|
|
|
95
86
|
## Configuration Options
|
|
@@ -217,8 +208,8 @@ Azure AD provides rich user profile data through OpenID Connect:
|
|
|
217
208
|
5. **Token Validation Errors**: Ensure your issuer URL is correct and includes the `/v2.0` endpoint
|
|
218
209
|
for the Microsoft identity platform.
|
|
219
210
|
|
|
220
|
-
6. **Authentication Not Working**:
|
|
221
|
-
|
|
211
|
+
6. **Authentication Not Working**: Verify your issuer URL and client ID are correct, and that your
|
|
212
|
+
app registration is configured as a Single-page application (SPA) with the correct redirect URIs.
|
|
222
213
|
|
|
223
214
|
## Security Best Practices
|
|
224
215
|
|
|
@@ -68,23 +68,23 @@ that provides 10,000 monthly active users.
|
|
|
68
68
|
|
|
69
69
|
4. **Configure Redirect URLs (Optional)**
|
|
70
70
|
|
|
71
|
-
If you need custom redirect behavior,
|
|
72
|
-
|
|
73
|
-
- Add your production, preview, and local development URLs to the allowed redirect URLs
|
|
74
|
-
- Common patterns:
|
|
75
|
-
- Production: `https://your-site.com/oauth/callback`
|
|
76
|
-
- Preview (wildcard): `https://*.your-domain.com/oauth/callback`
|
|
77
|
-
- Local Development: `http://localhost:3000/oauth/callback`
|
|
71
|
+
If you need custom redirect behavior after sign-in or sign-up, you can configure this in your
|
|
72
|
+
Dev Portal config:
|
|
78
73
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
```typescript
|
|
75
|
+
authentication: {
|
|
76
|
+
type: "clerk",
|
|
77
|
+
clerkPubKey: "<your-clerk-publishable-key>",
|
|
78
|
+
jwtTemplateName: "<your-clerk-jwt-template-name>",
|
|
79
|
+
redirectToAfterSignIn: "/docs",
|
|
80
|
+
redirectToAfterSignUp: "/getting-started",
|
|
81
|
+
redirectToAfterSignOut: "/",
|
|
82
|
+
},
|
|
85
83
|
```
|
|
86
84
|
|
|
87
|
-
|
|
85
|
+
You should also ensure your site's domain is added as an allowed origin in the Clerk dashboard.
|
|
86
|
+
|
|
87
|
+
</Stepper>
|
|
88
88
|
|
|
89
89
|
## Troubleshooting
|
|
90
90
|
|
|
@@ -99,8 +99,9 @@ that provides 10,000 monthly active users.
|
|
|
99
99
|
3. **Redirect Issues**: Check that your domain is added to the allowed redirect URLs in Clerk if
|
|
100
100
|
using custom redirects.
|
|
101
101
|
|
|
102
|
-
4. **ReferenceError: can't access lexical declaration 'xxx' before initialization**:
|
|
103
|
-
|
|
102
|
+
4. **ReferenceError: can't access lexical declaration 'xxx' before initialization**: This can happen
|
|
103
|
+
if the Clerk CDN script fails to load. Check your network connectivity and ensure your
|
|
104
|
+
publishable key is valid.
|
|
104
105
|
|
|
105
106
|
## Next Steps
|
|
106
107
|
|
|
@@ -49,7 +49,7 @@ export default {
|
|
|
49
49
|
measurementId: "G-12W6TTNR75",
|
|
50
50
|
// Optional: specify which providers to show in the sign-in UI
|
|
51
51
|
// Available providers: "google", "github", "facebook", "twitter",
|
|
52
|
-
// "microsoft", "apple", "yahoo", "password", "
|
|
52
|
+
// "microsoft", "apple", "yahoo", "password", "emailLink"
|
|
53
53
|
// If not specified, all enabled providers in Firebase will be available
|
|
54
54
|
providers: ["google", "github", "password"],
|
|
55
55
|
// Optional: configure redirect URLs after authentication
|