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.
Files changed (26) hide show
  1. package/docs/articles/monetization/meters.mdx +26 -4
  2. package/docs/articles/monetization/troubleshooting.md +1 -1
  3. package/docs/articles/troubleshooting-slow-responses.mdx +72 -0
  4. package/docs/cli/custom-domain-create.mdx +91 -0
  5. package/docs/cli/custom-domain-delete.mdx +79 -0
  6. package/docs/cli/custom-domain-list.mdx +59 -0
  7. package/docs/cli/custom-domain-update.mdx +79 -0
  8. package/docs/dev-portal/zudoku/configuration/api-catalog.md +2 -2
  9. package/docs/dev-portal/zudoku/configuration/api-reference.md +9 -4
  10. package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +2 -2
  11. package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +4 -13
  12. package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +17 -16
  13. package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +1 -1
  14. package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +165 -44
  15. package/docs/dev-portal/zudoku/configuration/authentication.md +34 -8
  16. package/docs/dev-portal/zudoku/configuration/docs.md +1 -2
  17. package/docs/dev-portal/zudoku/configuration/footer.mdx +3 -3
  18. package/docs/dev-portal/zudoku/configuration/navigation.mdx +1 -1
  19. package/docs/dev-portal/zudoku/configuration/oauth-security-schemes.md +122 -0
  20. package/docs/dev-portal/zudoku/configuration/overview.md +37 -0
  21. package/docs/dev-portal/zudoku/configuration/site.md +51 -0
  22. package/docs/dev-portal/zudoku/custom-plugins.md +9 -5
  23. package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +1 -1
  24. package/docs/dev-portal/zudoku/markdown/frontmatter.md +20 -9
  25. package/docs/dev-portal/zudoku/markdown/overview.md +1 -1
  26. 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 as the `subject` and a `total` field
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
- "subject": "{SUBSCRIPTION_ID}",
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: AuthState }) => {
103
- return items.filter((items) => items.tags.includes(auth));
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
- { label: "cURL", language: "shell" },
205
- { label: "JavaScript", language: "javascript" },
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 `label`
224
- (display name) and `language` (code identifier)
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 includes the protocol (`https://`) but no
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
- - Under **Implicit grant and hybrid flows**:
48
- - Enable **ID tokens**
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**: Make sure you have installed `@azure/msal-browser` to your
221
- project.
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, configure the allowed redirect URLs in Clerk:
72
- - Go to **Paths** in your Clerk dashboard
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
- 5. **Install Clerk Dependencies**
80
-
81
- Add `@clerk/clerk-js` to your project dependencies:
82
-
83
- ```bash
84
- npm install @clerk/clerk-js
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
- </Stepper>
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**: Make sure you
103
- have installed Clerk to your project.
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", "phone"
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