zuplo 6.68.9 → 6.68.10

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.
@@ -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"
@@ -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,8 +201,8 @@ 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
@@ -220,8 +220,8 @@ const config = {
220
220
  Available options:
221
221
 
222
222
  - `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)
223
+ - `supportedLanguages`: Array of language options for code examples. Each option has `value` (code
224
+ identifier) and `label` (display name)
225
225
  - `disablePlayground`: Disable the interactive API playground globally
226
226
  - `disableSidecar`: Disable the sidecar panel completely
227
227
  - `showVersionSelect`: Control version selector visibility
@@ -15,8 +15,8 @@ authentication provider you use.
15
15
 
16
16
  ## Authentication Providers
17
17
 
18
- Dev Portal supports Clerk, Auth0, Supabase, Azure B2C, and any OpenID provider that supports the OpenID
19
- Connect protocol.
18
+ Dev Portal supports Clerk, Auth0, Supabase, Firebase, Azure B2C, and any OpenID provider that supports
19
+ the OpenID Connect protocol (including PingFederate).
20
20
 
21
21
  Not seeing your authentication provider? [Let us know](https://github.com/zuplo/zudoku/issues)
22
22
 
@@ -96,6 +96,32 @@ When configuring your OpenID provider, you will need to set the following:
96
96
  By default, the scopes "openid", "profile", and "email" are requested. You can customize these by
97
97
  providing your own array of scopes.
98
98
 
99
+ ### Firebase
100
+
101
+ For Firebase authentication, you will need your Firebase project configuration. You can find this in
102
+ the Firebase console under Project Settings.
103
+
104
+ ```typescript title="zudoku.config.ts"
105
+ {
106
+ // ...
107
+ authentication: {
108
+ type: "firebase",
109
+ apiKey: "<your-firebase-api-key>",
110
+ authDomain: "<your-project>.firebaseapp.com",
111
+ projectId: "<your-project-id>",
112
+ appId: "<your-app-id>",
113
+ providers: ["google", "github", "password"], // Optional
114
+ },
115
+ // ...
116
+ }
117
+ ```
118
+
119
+ The `providers` option configures which sign-in methods are available. Supported providers include:
120
+ `google`, `facebook`, `twitter`, `github`, `microsoft`, `apple`, `yahoo`, `password`, `phone`, and
121
+ `emailLink`.
122
+
123
+ For detailed setup instructions, see the [Firebase setup guide](./authentication-firebase.md).
124
+
99
125
  ### Supabase
100
126
 
101
127
  To use Supabase as your authentication provider, supply your project's URL, API key, and the OAuth
@@ -149,8 +149,7 @@ docs: {
149
149
 
150
150
  #### `showLastModified`
151
151
 
152
- **Type:** `boolean`
153
- **Default:** `false`
152
+ **Type:** `boolean` **Default:** `true`
154
153
 
155
154
  Whether to show the last modified date by default.
156
155
 
@@ -14,7 +14,7 @@ copyright notice, and logo.
14
14
 
15
15
  ## Basic Configuration
16
16
 
17
- The footer is configured in your `zudoku.config.tsx` file under the `page.footer` property:
17
+ The footer is configured in your `zudoku.config.tsx` file under the `site.footer` property:
18
18
 
19
19
  ```tsx
20
20
  const config: ZudokuConfig = {
@@ -90,8 +90,8 @@ footer: {
90
90
  href: "https://github.com/yourusername",
91
91
  },
92
92
  {
93
- icon: "twitter",
94
- href: "https://twitter.com/yourhandle",
93
+ icon: "x",
94
+ href: "https://x.com/yourhandle",
95
95
  label: "Follow us", // optional label text
96
96
  },
97
97
  ];
@@ -92,6 +92,7 @@ type NavigationLink = {
92
92
  to: string;
93
93
  label: string;
94
94
  icon?: string; // Lucide icon name
95
+ target?: "_self" | "_blank";
95
96
  badge?: {
96
97
  label: string;
97
98
  color: "green" | "blue" | "yellow" | "red" | "purple" | "indigo" | "gray" | "outline";
@@ -103,7 +104,6 @@ type NavigationLink = {
103
104
  | "always"
104
105
  | "hide"
105
106
  | ((params: { context: ZudokuContext; auth: UseAuthReturn }) => boolean);
106
- target?: "_self" | "_blank";
107
107
  };
108
108
  ```
109
109
  </details>
@@ -179,6 +179,43 @@ below.
179
179
  }
180
180
  ```
181
181
 
182
+ ### `header`
183
+
184
+ Configures the header navigation and placement of header elements (navigation, search, auth).
185
+
186
+ ```ts
187
+ {
188
+ header: {
189
+ navigation: [
190
+ { label: "Docs", id: "docs" },
191
+ { label: "API", id: "api" },
192
+ ],
193
+ placements: {
194
+ navigation: "start", // "start" | "center" | "end"
195
+ search: "end", // "start" | "center" | "end"
196
+ auth: "end", // "start" | "center" | "end" | "navigation"
197
+ },
198
+ }
199
+ }
200
+ ```
201
+
202
+ ### `defaults`
203
+
204
+ Sets global default options for APIs that apply to all API configurations. Individual API options
205
+ will override these defaults when specified.
206
+
207
+ ```ts
208
+ {
209
+ defaults: {
210
+ apis: {
211
+ examplesLanguage: "shell",
212
+ disablePlayground: false,
213
+ showVersionSelect: "if-available",
214
+ },
215
+ }
216
+ }
217
+ ```
218
+
182
219
  ### `docs`
183
220
 
184
221
  Configures where your non API reference documentation can be found in your folder structure. The
@@ -70,6 +70,18 @@ The `reloadDocument` option controls whether clicking the logo triggers a full p
70
70
  the default) or uses client-side SPA navigation (`false`). A full reload is useful when your landing
71
71
  page is served by a different system (e.g. a CMS) outside of Zudoku.
72
72
 
73
+ #### Direction (RTL/LTR)
74
+
75
+ Set the text direction for your site. This is useful for right-to-left languages:
76
+
77
+ ```tsx title=zudoku.config.tsx
78
+ {
79
+ site: {
80
+ dir: "rtl", // "ltr" (default) or "rtl"
81
+ }
82
+ }
83
+ ```
84
+
73
85
  #### Colors & Theme
74
86
 
75
87
  We allow you to fully customize all colors, borders, etc - read more about it in
@@ -156,11 +156,15 @@ const navigationPlugin: ZudokuPlugin = {
156
156
  },
157
157
  ];
158
158
  },
159
- getSidebar: async (path: string) => {
160
- // Return custom sidebar items
161
- return {
162
- items: [{ id: "custom", label: "Custom Page" }],
163
- };
159
+ getNavigation: async (path: string, context) => {
160
+ // Return custom navigation items
161
+ return [
162
+ {
163
+ type: "link",
164
+ to: "/custom",
165
+ label: "Custom Page",
166
+ },
167
+ ];
164
168
  },
165
169
  };
166
170
  ```
@@ -79,7 +79,7 @@ export default config;
79
79
 
80
80
  Make sure that:
81
81
 
82
- 1. The `path` in each API config matches the `href` in the navigation
82
+ 1. The `path` in each API config matches the `to` in the navigation
83
83
  2. Your OpenAPI files are placed in the correct location as specified in the `input` field
84
84
  3. The `label` in navigation matches what you want to display in the sidebar
85
85
 
@@ -46,9 +46,7 @@ category: Getting Started
46
46
  ---
47
47
  ```
48
48
 
49
- ### `navigation_label`
50
-
51
- _Deprecated (`sidebar_label`)_
49
+ ### `sidebar_label`
52
50
 
53
51
  Sets a custom label for the page in the sidebar navigation, allowing you to use a shorter or
54
52
  different title than the main page title.
@@ -56,23 +54,25 @@ different title than the main page title.
56
54
  ```md
57
55
  ---
58
56
  title: My Very Long Documentation Page Title
59
- navigation_label: Short Title
57
+ sidebar_label: Short Title
60
58
  ---
61
59
  ```
62
60
 
63
- ### `navigation_icon`
61
+ The legacy name `navigation_label` is also supported but `sidebar_label` is preferred.
64
62
 
65
- _Deprecated (`sidebar_icon`)_
63
+ ### `sidebar_icon`
66
64
 
67
65
  Specifies a [Lucide icon](https://lucide.dev/icons) to display next to the page in the sidebar
68
66
  navigation.
69
67
 
70
68
  ```md
71
69
  ---
72
- navigation_icon: compass
70
+ sidebar_icon: compass
73
71
  ---
74
72
  ```
75
73
 
74
+ The legacy name `navigation_icon` is also supported but `sidebar_icon` is preferred.
75
+
76
76
  ### `navigation_display`
77
77
 
78
78
  Specifies the display property of the navigation item. See the
@@ -106,6 +106,17 @@ disable_pager: true
106
106
  ---
107
107
  ```
108
108
 
109
+ ### `showLastModified`
110
+
111
+ Controls whether the last modified date is displayed for this page. Can be used to override the
112
+ [default option](/dev-portal/zudoku/configuration/docs#showlastmodified).
113
+
114
+ ```md
115
+ ---
116
+ showLastModified: false
117
+ ---
118
+ ```
119
+
109
120
  ### `draft`
110
121
 
111
122
  Marks a document as a draft. Draft documents are only visible when running in development mode and
@@ -161,8 +172,8 @@ Here's an example showing multiple frontmatter properties used together:
161
172
  ---
162
173
  title: Advanced Configuration Guide
163
174
  description: Learn how to configure advanced features in Dev Portal category: Configuration
164
- navigation_label: Advanced Config
165
- navigation_icon: settings
175
+ sidebar_label: Advanced Config
176
+ sidebar_icon: settings
166
177
  toc: true
167
178
  disable_pager: false
168
179
  draft: false
@@ -147,7 +147,7 @@ files:
147
147
  ---
148
148
  title: My Page Title
149
149
  description: Page description for SEO
150
- navigation_icon: book
150
+ sidebar_icon: book
151
151
  category: Getting Started
152
152
  ---
153
153
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zuplo",
3
- "version": "6.68.9",
3
+ "version": "6.68.10",
4
4
  "type": "module",
5
5
  "description": "The programmable API Gateway",
6
6
  "author": "Zuplo, Inc.",
@@ -19,9 +19,9 @@
19
19
  "zuplo": "zuplo.js"
20
20
  },
21
21
  "dependencies": {
22
- "@zuplo/cli": "6.68.9",
23
- "@zuplo/core": "6.68.9",
24
- "@zuplo/runtime": "6.68.9",
22
+ "@zuplo/cli": "6.68.10",
23
+ "@zuplo/core": "6.68.10",
24
+ "@zuplo/runtime": "6.68.10",
25
25
  "@zuplo/test": "1.4.0"
26
26
  }
27
27
  }