@lukoweb/apitogo 0.1.121 → 0.1.127

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 (53) hide show
  1. package/dist/cli/cli.js +659 -402
  2. package/dist/declarations/cli/platform/client/platform-api.d.ts +6 -0
  3. package/dist/declarations/cli/platform/helpers/dev-portal-manifest.d.ts +2 -0
  4. package/dist/declarations/cli/platform/helpers/publish-preflight.d.ts +2 -0
  5. package/dist/declarations/cli/platform/tools/gateway.d.ts +6 -0
  6. package/dist/declarations/config/local-manifest.d.ts +21 -1
  7. package/dist/declarations/config/validators/ModulesSchema.d.ts +20 -0
  8. package/dist/declarations/config/validators/ZudokuConfig.d.ts +5 -0
  9. package/dist/declarations/lib/authentication/auth-header-nav.d.ts +5 -1
  10. package/dist/declarations/lib/authentication/hook.d.ts +25 -3
  11. package/dist/declarations/lib/authentication/state.d.ts +39 -3
  12. package/dist/declarations/lib/plugins/openapi/processors/injectApitogoGatewayServer.d.ts +1 -1
  13. package/dist/flat-config.d.ts +32 -24
  14. package/docs/cli/go-live.md +21 -20
  15. package/docs/components/slot.mdx +2 -2
  16. package/docs/components.mdx +34 -34
  17. package/docs/concepts/auth-provider-api-identities.md +2 -2
  18. package/docs/configuration/authentication.md +16 -14
  19. package/docs/configuration/build-configuration.mdx +2 -2
  20. package/docs/configuration/make-config.mdx +5 -5
  21. package/docs/configuration/manifest.md +8 -14
  22. package/docs/configuration/navigation.mdx +4 -4
  23. package/docs/configuration/overview.md +6 -7
  24. package/docs/configuration/plans.md +45 -16
  25. package/docs/deploy/vercel.md +3 -4
  26. package/docs/deployment.md +5 -4
  27. package/docs/guides/custom-pages.md +2 -2
  28. package/docs/guides/environment-variables.md +19 -17
  29. package/docs/guides/managing-api-keys-and-identities.md +10 -18
  30. package/docs/mcp/go-live.md +12 -12
  31. package/docs/mcp/overview.md +10 -10
  32. package/docs/mcp/setup.md +9 -9
  33. package/docs/mcp/shape.md +4 -3
  34. package/docs/mcp/tools.md +61 -61
  35. package/docs/plugins.md +2 -2
  36. package/docs/quickstart.md +5 -6
  37. package/package.json +1 -1
  38. package/src/config/apitogo-config-core.ts +7 -1
  39. package/src/config/gateway-limits.ts +7 -2
  40. package/src/config/loader.ts +5 -7
  41. package/src/config/local-manifest.ts +24 -7
  42. package/src/config/resolve-modules.ts +5 -7
  43. package/src/config/validators/ModulesSchema.ts +11 -0
  44. package/src/lib/authentication/auth-header-nav.ts +3 -3
  45. package/src/lib/authentication/providers/dev-portal-auth-pages.tsx +2 -5
  46. package/src/lib/authentication/state.ts +1 -1
  47. package/src/lib/components/Layout.tsx +1 -4
  48. package/src/lib/components/SiteTitle.tsx +3 -1
  49. package/src/lib/plugins/openapi/processors/injectApitogoGatewayServer.ts +9 -3
  50. package/src/vite/config.ts +0 -21
  51. package/src/vite/plugin-api.ts +1 -1
  52. package/src/vite/plugin-modules.ts +1 -2
  53. package/src/vite/plugin-offroot-resolve.ts +2 -6
@@ -106,6 +106,8 @@ export interface GatewayPlanDto {
106
106
  displayName: string;
107
107
  isActive: boolean;
108
108
  priceAmount?: number;
109
+ pricingModel?: "fixed" | "custom";
110
+ priceLabel?: string | null;
109
111
  priceCurrency?: string;
110
112
  billingPeriod?: string;
111
113
  limitsJson?: string | null;
@@ -120,6 +122,8 @@ export interface CreateGatewayPlanRequest {
120
122
  limitsJson?: string | null;
121
123
  includedActionKeys: string[];
122
124
  priceAmount?: number;
125
+ pricingModel?: "fixed" | "custom";
126
+ priceLabel?: string;
123
127
  priceCurrency?: string;
124
128
  billingPeriod?: string;
125
129
  sortOrder?: number;
@@ -325,6 +329,8 @@ export interface UpdateGatewayPlanRequest {
325
329
  limitsJson?: string | null;
326
330
  includedActionKeys: string[];
327
331
  priceAmount?: number;
332
+ pricingModel?: "fixed" | "custom";
333
+ priceLabel?: string;
328
334
  priceCurrency?: string;
329
335
  billingPeriod?: string;
330
336
  sortOrder?: number;
@@ -7,6 +7,8 @@ export interface ManifestPlanInput {
7
7
  sku: string;
8
8
  displayName: string;
9
9
  priceAmount?: number;
10
+ pricingModel?: "fixed" | "custom";
11
+ priceLabel?: string;
10
12
  priceCurrency?: string;
11
13
  billingPeriod?: "month" | "year" | "monthly" | "annual";
12
14
  limits?: GatewayLimits;
@@ -5,6 +5,8 @@ export interface PublishPlanInput {
5
5
  sku: string;
6
6
  displayName: string;
7
7
  priceAmount?: number;
8
+ pricingModel?: string;
9
+ priceLabel?: string;
8
10
  priceCurrency?: string;
9
11
  billingPeriod?: string;
10
12
  limits?: GatewayLimits;
@@ -42,6 +42,8 @@ export declare function handleCreateGatewayPlan(client: PlatformApiClient, confi
42
42
  limitsJson?: string;
43
43
  includedActionKeys?: string[];
44
44
  priceAmount?: number;
45
+ pricingModel?: "fixed" | "custom";
46
+ priceLabel?: string;
45
47
  priceCurrency?: string;
46
48
  billingPeriod?: string;
47
49
  sortOrder?: number;
@@ -59,6 +61,8 @@ export declare function handleUpdateGatewayPlan(client: PlatformApiClient, confi
59
61
  limitsJson?: string;
60
62
  includedActionKeys?: string[];
61
63
  priceAmount?: number;
64
+ pricingModel?: "fixed" | "custom";
65
+ priceLabel?: string;
62
66
  priceCurrency?: string;
63
67
  billingPeriod?: string;
64
68
  sortOrder?: number;
@@ -71,6 +75,8 @@ export declare function handlePatchGatewayPlan(client: PlatformApiClient, config
71
75
  limitsJson?: string | null;
72
76
  includedActionKeys?: string[];
73
77
  priceAmount?: number;
78
+ pricingModel?: "fixed" | "custom";
79
+ priceLabel?: string;
74
80
  priceCurrency?: string;
75
81
  billingPeriod?: string;
76
82
  sortOrder?: number;
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
- import { type GatewayLimits } from "./gateway-limits.js";
3
2
  import { APITOGO_CONFIG_FILENAME } from "./apitogo-config-loader.js";
3
+ import { type GatewayLimits } from "./gateway-limits.js";
4
4
  import { type LandingManifestInput } from "./landing-manifest.js";
5
5
  export declare const APITOGO_MANIFEST_BASE_FILENAME = "apitogo.json";
6
6
  export declare const APITOGO_MANIFEST_ENV_FILES: {
@@ -9,11 +9,21 @@ export declare const APITOGO_MANIFEST_ENV_FILES: {
9
9
  };
10
10
  export { APITOGO_CONFIG_FILENAME };
11
11
  export type ApitogoManifestEnv = keyof typeof APITOGO_MANIFEST_ENV_FILES;
12
+ export declare const PlanPricingModelSchema: z.ZodEnum<{
13
+ fixed: "fixed";
14
+ custom: "custom";
15
+ }>;
16
+ export type PlanPricingModel = z.infer<typeof PlanPricingModelSchema>;
12
17
  export declare const ALLOWED_RUNTIME_VERSIONS: readonly ["DOTNET_10", "DOTNET_9", "DOTNET_8", "NODE_24_LTS", "NODE_22_LTS", "PYTHON_314", "PYTHON_313", "PYTHON_312", "PYTHON_311", "PYTHON_310"];
13
18
  export declare const ManifestPlanInputSchema: z.ZodObject<{
14
19
  sku: z.ZodString;
15
20
  displayName: z.ZodString;
16
21
  priceAmount: z.ZodDefault<z.ZodNumber>;
22
+ pricingModel: z.ZodOptional<z.ZodEnum<{
23
+ fixed: "fixed";
24
+ custom: "custom";
25
+ }>>;
26
+ priceLabel: z.ZodOptional<z.ZodString>;
17
27
  priceCurrency: z.ZodOptional<z.ZodString>;
18
28
  billingPeriod: z.ZodOptional<z.ZodEnum<{
19
29
  month: "month";
@@ -34,6 +44,9 @@ export declare const ManifestPlanInputSchema: z.ZodObject<{
34
44
  limitsJson: z.ZodOptional<z.ZodString>;
35
45
  includedActionKeys: z.ZodOptional<z.ZodArray<z.ZodString>>;
36
46
  }, z.core.$strip>;
47
+ export declare function isPlanCustomPriced(plan: {
48
+ pricingModel?: string | null;
49
+ }): boolean;
37
50
  export declare function isPlanFree(plan: {
38
51
  priceAmount?: number;
39
52
  }): boolean;
@@ -68,6 +81,11 @@ export declare const DevPortalLocalManifestSchema: z.ZodObject<{
68
81
  sku: z.ZodString;
69
82
  displayName: z.ZodString;
70
83
  priceAmount: z.ZodDefault<z.ZodNumber>;
84
+ pricingModel: z.ZodOptional<z.ZodEnum<{
85
+ fixed: "fixed";
86
+ custom: "custom";
87
+ }>>;
88
+ priceLabel: z.ZodOptional<z.ZodString>;
71
89
  priceCurrency: z.ZodOptional<z.ZodString>;
72
90
  billingPeriod: z.ZodOptional<z.ZodEnum<{
73
91
  month: "month";
@@ -230,6 +248,8 @@ export type DevPortalPreviewPlan = {
230
248
  sku: string;
231
249
  displayName: string;
232
250
  priceAmount: number;
251
+ pricingModel: PlanPricingModel;
252
+ priceLabel?: string;
233
253
  priceCurrency: string;
234
254
  billingPeriod: string;
235
255
  limits: GatewayLimits | null;
@@ -388,6 +388,11 @@ declare const PlanCatalogItemSchema: z.ZodObject<{
388
388
  sku: z.ZodString;
389
389
  displayName: z.ZodString;
390
390
  priceAmount: z.ZodDefault<z.ZodNumber>;
391
+ pricingModel: z.ZodOptional<z.ZodEnum<{
392
+ fixed: "fixed";
393
+ custom: "custom";
394
+ }>>;
395
+ priceLabel: z.ZodOptional<z.ZodString>;
391
396
  priceCurrency: z.ZodOptional<z.ZodString>;
392
397
  billingPeriod: z.ZodOptional<z.ZodString>;
393
398
  limits: z.ZodOptional<z.ZodObject<{
@@ -421,6 +426,11 @@ export declare const PlansModuleSchema: z.ZodObject<{
421
426
  sku: z.ZodString;
422
427
  displayName: z.ZodString;
423
428
  priceAmount: z.ZodDefault<z.ZodNumber>;
429
+ pricingModel: z.ZodOptional<z.ZodEnum<{
430
+ fixed: "fixed";
431
+ custom: "custom";
432
+ }>>;
433
+ priceLabel: z.ZodOptional<z.ZodString>;
424
434
  priceCurrency: z.ZodOptional<z.ZodString>;
425
435
  billingPeriod: z.ZodOptional<z.ZodString>;
426
436
  limits: z.ZodOptional<z.ZodObject<{
@@ -507,6 +517,11 @@ export declare const UserPanelModuleSchema: z.ZodObject<{
507
517
  sku: z.ZodString;
508
518
  displayName: z.ZodString;
509
519
  priceAmount: z.ZodDefault<z.ZodNumber>;
520
+ pricingModel: z.ZodOptional<z.ZodEnum<{
521
+ fixed: "fixed";
522
+ custom: "custom";
523
+ }>>;
524
+ priceLabel: z.ZodOptional<z.ZodString>;
510
525
  priceCurrency: z.ZodOptional<z.ZodString>;
511
526
  billingPeriod: z.ZodOptional<z.ZodString>;
512
527
  limits: z.ZodOptional<z.ZodObject<{
@@ -705,6 +720,11 @@ export declare const ModulesSchema: z.ZodOptional<z.ZodObject<{
705
720
  sku: z.ZodString;
706
721
  displayName: z.ZodString;
707
722
  priceAmount: z.ZodDefault<z.ZodNumber>;
723
+ pricingModel: z.ZodOptional<z.ZodEnum<{
724
+ fixed: "fixed";
725
+ custom: "custom";
726
+ }>>;
727
+ priceLabel: z.ZodOptional<z.ZodString>;
708
728
  priceCurrency: z.ZodOptional<z.ZodString>;
709
729
  billingPeriod: z.ZodOptional<z.ZodString>;
710
730
  limits: z.ZodOptional<z.ZodObject<{
@@ -7039,6 +7039,11 @@ export declare const ZudokuConfig: z.ZodObject<{
7039
7039
  sku: z.ZodString;
7040
7040
  displayName: z.ZodString;
7041
7041
  priceAmount: z.ZodDefault<z.ZodNumber>;
7042
+ pricingModel: z.ZodOptional<z.ZodEnum<{
7043
+ fixed: "fixed";
7044
+ custom: "custom";
7045
+ }>>;
7046
+ priceLabel: z.ZodOptional<z.ZodString>;
7042
7047
  priceCurrency: z.ZodOptional<z.ZodString>;
7043
7048
  billingPeriod: z.ZodOptional<z.ZodString>;
7044
7049
  limits: z.ZodOptional<z.ZodObject<{
@@ -7,4 +7,8 @@ export declare const LOGIN_HEADER_NAV_ITEM: {
7
7
  display: "anon";
8
8
  };
9
9
  export declare function withoutLoginNavigation(navigation: HeaderNavigation): HeaderNavigation;
10
- export declare function applyAuthenticationHeaderNav<T extends ZudokuConfig>(config: T): T;
10
+ export declare function applyAuthenticationHeaderNav<T extends ZudokuConfig & {
11
+ __meta?: {
12
+ authenticationEnabled?: boolean;
13
+ };
14
+ }>(config: T): T;
@@ -4,10 +4,32 @@ export declare const useRefreshUserProfile: ({ refetchOnWindowFocus, }?: {
4
4
  refetchOnWindowFocus?: boolean | "always";
5
5
  }) => import("@tanstack/react-query").UseQueryResult<boolean | undefined, Error>;
6
6
  export declare const useVerifiedEmail: () => {
7
- email: any;
8
- isVerified: any;
7
+ email: string | undefined;
8
+ isVerified: boolean | undefined;
9
9
  supportsEmailVerification: boolean;
10
10
  refresh: () => undefined;
11
11
  requestEmailVerification: (options?: AuthActionOptions) => Promise<void>;
12
12
  };
13
- export declare const useAuth: () => any;
13
+ export declare const useAuth: () => {
14
+ isBackendAvailable: boolean;
15
+ authMode: import("./state.js").AuthMode;
16
+ isDemoSession: boolean;
17
+ isDemoMode: boolean;
18
+ hasDistinctSignUpFlow: boolean;
19
+ login: (options?: AuthActionOptions) => Promise<void>;
20
+ logout: () => Promise<void>;
21
+ signup: (options?: AuthActionOptions) => Promise<void>;
22
+ requestEmailVerification: (options?: AuthActionOptions) => Promise<void>;
23
+ isAuthenticated: boolean;
24
+ isPending: boolean;
25
+ sessionChecked: boolean;
26
+ profile: import("./state.js").UserProfile | null;
27
+ providerData: import("./state.js").ProviderData | null;
28
+ setAuthenticationPending: () => void;
29
+ setLoggedOut: () => void;
30
+ setLoggedIn: (args: {
31
+ profile: import("./state.js").UserProfile;
32
+ providerData: import("./state.js").ProviderData;
33
+ }) => void;
34
+ isAuthEnabled: boolean;
35
+ };
@@ -21,9 +21,45 @@ type AuthStateStore = ReturnType<typeof createAuthStateStore>;
21
21
  declare global {
22
22
  var __APITOGO_AUTH_STATE: AuthStateStore | undefined;
23
23
  }
24
- declare function createAuthStateStore(): AuthStateStore;
25
- export declare const authState: any;
26
- export declare const useAuthState: any;
24
+ declare function createAuthStateStore(): import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<AuthState>, "setState" | "persist"> & {
25
+ setState(partial: AuthState | Partial<AuthState> | ((state: AuthState) => AuthState | Partial<AuthState>), replace?: false | undefined): unknown;
26
+ setState(state: AuthState | ((state: AuthState) => AuthState), replace: true): unknown;
27
+ persist: {
28
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<AuthState, unknown, unknown>>) => void;
29
+ clearStorage: () => void;
30
+ rehydrate: () => Promise<void> | void;
31
+ hasHydrated: () => boolean;
32
+ onHydrate: (fn: (state: AuthState) => void) => () => void;
33
+ onFinishHydration: (fn: (state: AuthState) => void) => () => void;
34
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<AuthState, unknown, unknown>>;
35
+ };
36
+ }>;
37
+ export declare const authState: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<AuthState>, "setState" | "persist"> & {
38
+ setState(partial: AuthState | Partial<AuthState> | ((state: AuthState) => AuthState | Partial<AuthState>), replace?: false | undefined): unknown;
39
+ setState(state: AuthState | ((state: AuthState) => AuthState), replace: true): unknown;
40
+ persist: {
41
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<AuthState, unknown, unknown>>) => void;
42
+ clearStorage: () => void;
43
+ rehydrate: () => Promise<void> | void;
44
+ hasHydrated: () => boolean;
45
+ onHydrate: (fn: (state: AuthState) => void) => () => void;
46
+ onFinishHydration: (fn: (state: AuthState) => void) => () => void;
47
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<AuthState, unknown, unknown>>;
48
+ };
49
+ }>;
50
+ export declare const useAuthState: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<AuthState>, "setState" | "persist"> & {
51
+ setState(partial: AuthState | Partial<AuthState> | ((state: AuthState) => AuthState | Partial<AuthState>), replace?: false | undefined): unknown;
52
+ setState(state: AuthState | ((state: AuthState) => AuthState), replace: true): unknown;
53
+ persist: {
54
+ setOptions: (options: Partial<import("zustand/middleware").PersistOptions<AuthState, unknown, unknown>>) => void;
55
+ clearStorage: () => void;
56
+ rehydrate: () => Promise<void> | void;
57
+ hasHydrated: () => boolean;
58
+ onHydrate: (fn: (state: AuthState) => void) => () => void;
59
+ onFinishHydration: (fn: (state: AuthState) => void) => () => void;
60
+ getOptions: () => Partial<import("zustand/middleware").PersistOptions<AuthState, unknown, unknown>>;
61
+ };
62
+ }>;
27
63
  export declare const waitForAuthStateHydration: () => Promise<void>;
28
64
  export interface UserProfile {
29
65
  sub: string;
@@ -1,4 +1,4 @@
1
- import type { Processor } from "../../../config/validators/BuildSchema.js";
1
+ import type { Processor } from "../../../../config/validators/BuildSchema.js";
2
2
  export declare const APITOGO_GATEWAY_URL_ENV = "APITOGO_GATEWAY_URL";
3
3
  export declare function injectApitogoGatewayServer(options?: {
4
4
  gatewayUrl?: string;
@@ -68,6 +68,14 @@ export type _Schema37 = {
68
68
  sku: string
69
69
  displayName: string
70
70
  priceAmount?: number
71
+ /**
72
+ * "custom" shows a contact-sales form instead of checkout; priceAmount must be 0.
73
+ */
74
+ pricingModel?: ("fixed" | "custom")
75
+ /**
76
+ * Text shown instead of the price, e.g. "Custom".
77
+ */
78
+ priceLabel?: string
71
79
  priceCurrency?: string
72
80
  billingPeriod?: string
73
81
  limits?: {
@@ -86,31 +94,31 @@ export type _Schema37 = {
86
94
  limitsJson?: string
87
95
  includedActionKeys?: string[]
88
96
  }[]
89
- export type _Schema38 = ({
97
+ export type _Schema40 = ({
90
98
  type: "url"
91
- input: (string | _Schema39[])
92
- server?: _Schema40
93
- path?: _Schema41
94
- categories?: _Schema42
95
- options?: _Schema44
99
+ input: (string | _Schema41[])
100
+ server?: _Schema42
101
+ path?: _Schema43
102
+ categories?: _Schema44
103
+ options?: _Schema46
96
104
  } | {
97
105
  type: "file"
98
- input: (string | (string | _Schema39)[])
99
- server?: _Schema40
100
- path?: _Schema41
101
- categories?: _Schema42
102
- options?: _Schema44
106
+ input: (string | (string | _Schema41)[])
107
+ server?: _Schema42
108
+ path?: _Schema43
109
+ categories?: _Schema44
110
+ options?: _Schema46
103
111
  } | {
104
112
  type: "raw"
105
113
  input: string
106
- server?: _Schema40
107
- path?: _Schema41
108
- categories?: _Schema42
109
- options?: _Schema44
114
+ server?: _Schema42
115
+ path?: _Schema43
116
+ categories?: _Schema44
117
+ options?: _Schema46
110
118
  })
111
- export type _Schema40 = string
112
- export type _Schema41 = string
113
- export type _Schema42 = {
119
+ export type _Schema42 = string
120
+ export type _Schema43 = string
121
+ export type _Schema44 = {
114
122
  label: string
115
123
  tags: string[]
116
124
  }[]
@@ -412,8 +420,8 @@ export interface FlatZudokuConfig {
412
420
  landing?: _Schema16
413
421
  userPanel?: _Schema25
414
422
  }
415
- apis?: (_Schema38 | _Schema38[])
416
- catalogs?: (_Schema45 | _Schema45[])
423
+ apis?: (_Schema40 | _Schema40[])
424
+ catalogs?: (_Schema47 | _Schema47[])
417
425
  apiKeys?: {
418
426
  enabled: boolean
419
427
  getConsumers?: unknown
@@ -441,7 +449,7 @@ export interface FlatZudokuConfig {
441
449
  }
442
450
  enableStatusPages?: boolean
443
451
  defaults?: {
444
- apis: _Schema44
452
+ apis: _Schema46
445
453
  examplesLanguage?: string
446
454
  }
447
455
  __pluginDirs?: string[]
@@ -731,12 +739,12 @@ export interface _Schema36 {
731
739
  description?: string
732
740
  }[]
733
741
  }
734
- export interface _Schema39 {
742
+ export interface _Schema41 {
735
743
  path: string
736
744
  input: string
737
745
  label?: string
738
746
  }
739
- export interface _Schema44 {
747
+ export interface _Schema46 {
740
748
  examplesLanguage?: string
741
749
  supportedLanguages?: {
742
750
  value: string
@@ -753,7 +761,7 @@ export interface _Schema44 {
753
761
  transformExamples?: unknown
754
762
  generateCodeSnippet?: unknown
755
763
  }
756
- export interface _Schema45 {
764
+ export interface _Schema47 {
757
765
  path: string
758
766
  label: string
759
767
  items?: string[]
@@ -49,7 +49,8 @@ npx apitogo status
49
49
  - Creates or links the platform project
50
50
  - Provisions modules and syncs gateway plans
51
51
  - Deploys the API hub (when configured)
52
- - Updates the portal backend (including auth API URL in `.env`) and builds + deploys the portal frontend
52
+ - Updates the portal backend (including auth API URL in `.env`) and builds + deploys the portal
53
+ frontend
53
54
 
54
55
  If deploy is blocked, fix the reported checklist (missing secrets, plan, OpenAPI). Do not invent
55
56
  credentials.
@@ -69,24 +70,24 @@ npx apitogo deploy --only apihub,portal-frontend
69
70
  npx apitogo deploy --only portal-frontend --force
70
71
  ```
71
72
 
72
- | Resource | What it updates |
73
- | ---------------- | ---------------------------------------------------- |
74
- | `apihub` | Gateway plans/baseline, API hub package + deploy |
75
- | `portal-backend` | Dev-portal module settings and plan catalog |
76
- | `portal-frontend` | Site build + Static Web App deploy |
73
+ | Resource | What it updates |
74
+ | ----------------- | ------------------------------------------------ |
75
+ | `apihub` | Gateway plans/baseline, API hub package + deploy |
76
+ | `portal-backend` | Dev-portal module settings and plan catalog |
77
+ | `portal-frontend` | Site build + Static Web App deploy |
77
78
 
78
79
  Omit `--only` to apply all three. Use `--force` to redeploy even when hashes match.
79
80
 
80
81
  ## Other deploy flags
81
82
 
82
- | Flag | Purpose |
83
- | ---- | ------- |
84
- | `--project-id` | Override project GUID |
85
- | `--project-name` | Display name when creating a project |
83
+ | Flag | Purpose |
84
+ | ----------------- | ------------------------------------- |
85
+ | `--project-id` | Override project GUID |
86
+ | `--project-name` | Display name when creating a project |
86
87
  | `--platform-plan` | `free` \| `starter` \| `professional` |
87
- | `--resume-from` | Resume publish ledger from step id |
88
- | `--no-wait` | Do not wait for long-running jobs |
89
- | `--json` | Print raw JSON result only |
88
+ | `--resume-from` | Resume publish ledger from step id |
89
+ | `--no-wait` | Do not wait for long-running jobs |
90
+ | `--json` | Print raw JSON result only |
90
91
 
91
92
  Resume state is stored in `.apitogo/publish-state.json`.
92
93
 
@@ -100,17 +101,17 @@ npx apitogo teardown --yes # delete the platform project
100
101
 
101
102
  ## Platform plan vs API plans
102
103
 
103
- | Kind | Meaning | How |
104
- | ---------------- | ------------------------------------------- | ---------------------- |
105
- | Platform hosting | Free / Starter / Professional on APItoGo | `--platform-plan` |
104
+ | Kind | Meaning | How |
105
+ | ---------------- | ------------------------------------------- | ------------------------------------------------------------------ |
106
+ | Platform hosting | Free / Starter / Professional on APItoGo | `--platform-plan` |
106
107
  | Gateway / API | End-user SKUs and rate limits on `/pricing` | `apitogo.config.json` — [Gateway plans](../configuration/plans.md) |
107
108
 
108
109
  ## CLI deploy vs MCP publish
109
110
 
110
- | Path | Use when |
111
- | ----------------------- | -------------------------------------------------- |
112
- | `npx apitogo deploy` | Terminal, CI, scripts — full product go-live |
113
- | MCP `publish_dev_portal` | Agent-driven go-live with the same engine |
111
+ | Path | Use when |
112
+ | ------------------------ | -------------------------------------------- |
113
+ | `npx apitogo deploy` | Terminal, CI, scripts — full product go-live |
114
+ | MCP `publish_dev_portal` | Agent-driven go-live with the same engine |
114
115
 
115
116
  ## Related
116
117
 
@@ -97,8 +97,8 @@ declare module "@lukoweb/apitogo" {
97
97
  ## Integration with Configuration
98
98
 
99
99
  The Slot component works with configuration-based slots. Content defined in your
100
- `apitogo.config.json` and content injected via `Slot.Source` components will be combined according to
101
- the `type` parameter.
100
+ `apitogo.config.json` and content injected via `Slot.Source` components will be combined according
101
+ to the `type` parameter.
102
102
 
103
103
  ```tsx
104
104
  // In your site config
@@ -9,50 +9,50 @@ Use these components in MDX pages and custom React pages. Import from `@lukoweb/
9
9
 
10
10
  ## General
11
11
 
12
- | Component | Import | Description |
13
- | --------- | ------ | ----------- |
14
- | [Alert](/docs/components/alert) | `@lukoweb/apitogo/ui/Alert` | Important messages with severity levels |
15
- | [Callout](/docs/components/callout) | `@lukoweb/apitogo/ui/Callout` | Highlight notes, tips, and warnings |
16
- | [Badge](/docs/components/badge) | `@lukoweb/apitogo/ui/Badge` | Status labels and tags |
17
- | [Card](/docs/components/card) | `@lukoweb/apitogo/ui/Card` | Grouped content with header, body, and footer |
18
- | [Dialog](/docs/components/dialog) | `@lukoweb/apitogo/ui/Dialog` | Modal dialogs that require attention |
19
- | [Icons](/docs/components/icons) | `@lukoweb/apitogo/icons` | Lucide icons re-exported for MDX and React |
20
- | [Markdown](/docs/components/markdown) | `@lukoweb/apitogo/components` | Render markdown with syntax highlighting |
21
- | [Tooltip](/docs/components/tooltip) | `@lukoweb/apitogo/ui/Tooltip` | Hover or focus hints |
12
+ | Component | Import | Description |
13
+ | ----------------------------------------- | ----------------------------- | ------------------------------------------------ |
14
+ | [Alert](/docs/components/alert) | `@lukoweb/apitogo/ui/Alert` | Important messages with severity levels |
15
+ | [Callout](/docs/components/callout) | `@lukoweb/apitogo/ui/Callout` | Highlight notes, tips, and warnings |
16
+ | [Badge](/docs/components/badge) | `@lukoweb/apitogo/ui/Badge` | Status labels and tags |
17
+ | [Card](/docs/components/card) | `@lukoweb/apitogo/ui/Card` | Grouped content with header, body, and footer |
18
+ | [Dialog](/docs/components/dialog) | `@lukoweb/apitogo/ui/Dialog` | Modal dialogs that require attention |
19
+ | [Icons](/docs/components/icons) | `@lukoweb/apitogo/icons` | Lucide icons re-exported for MDX and React |
20
+ | [Markdown](/docs/components/markdown) | `@lukoweb/apitogo/components` | Render markdown with syntax highlighting |
21
+ | [Tooltip](/docs/components/tooltip) | `@lukoweb/apitogo/ui/Tooltip` | Hover or focus hints |
22
22
  | [Typography](/docs/components/typography) | `@lukoweb/apitogo/components` | Prose styling for headings, lists, and body text |
23
23
 
24
24
  ## Documentation
25
25
 
26
- | Component | Import | Description |
27
- | --------- | ------ | ----------- |
28
- | [CodeTabs](/docs/components/code-tabs) | MDX built-in | Tabbed code examples (languages or package managers) |
29
- | [Mermaid](/docs/components/mermaid) | `@lukoweb/apitogo/mermaid` | Client-rendered Mermaid diagrams |
30
- | [API Playground](/docs/components/playground) | MDX built-in | Try API requests from the docs |
31
- | [Secret](/docs/components/secret) | `@lukoweb/apitogo/ui/Secret` | Mask and reveal API keys |
32
- | [Stepper](/docs/components/stepper) | MDX built-in | Numbered multi-step guides |
33
- | [Syntax Highlight](/docs/components/syntax-highlight) | `@lukoweb/apitogo/ui/SyntaxHighlight` | Highlighted code with line numbers and copy |
26
+ | Component | Import | Description |
27
+ | ----------------------------------------------------- | ------------------------------------- | ---------------------------------------------------- |
28
+ | [CodeTabs](/docs/components/code-tabs) | MDX built-in | Tabbed code examples (languages or package managers) |
29
+ | [Mermaid](/docs/components/mermaid) | `@lukoweb/apitogo/mermaid` | Client-rendered Mermaid diagrams |
30
+ | [API Playground](/docs/components/playground) | MDX built-in | Try API requests from the docs |
31
+ | [Secret](/docs/components/secret) | `@lukoweb/apitogo/ui/Secret` | Mask and reveal API keys |
32
+ | [Stepper](/docs/components/stepper) | MDX built-in | Numbered multi-step guides |
33
+ | [Syntax Highlight](/docs/components/syntax-highlight) | `@lukoweb/apitogo/ui/SyntaxHighlight` | Highlighted code with line numbers and copy |
34
34
 
35
35
  ## Form
36
36
 
37
- | Component | Import | Description |
38
- | --------- | ------ | ----------- |
39
- | [Button](/docs/components/button) | `@lukoweb/apitogo/ui/Button` | Actions with variants and sizes |
40
- | [Checkbox](/docs/components/checkbox) | `@lukoweb/apitogo/ui/Checkbox` | Boolean checkbox input |
41
- | [Input](/docs/components/input) | `@lukoweb/apitogo/ui/Input` | Single-line text input |
42
- | [Label](/docs/components/label) | `@lukoweb/apitogo/ui/Label` | Accessible form labels |
43
- | [Select](/docs/components/select) | `@lukoweb/apitogo/ui/Select` | Choose from a list of options |
44
- | [Slider](/docs/components/slider) | `@lukoweb/apitogo/ui/Slider` | Numeric range input |
45
- | [Switch](/docs/components/switch) | `@lukoweb/apitogo/ui/Switch` | Boolean toggle |
46
- | [Textarea](/docs/components/textarea) | `@lukoweb/apitogo/ui/Textarea` | Multiline text input |
37
+ | Component | Import | Description |
38
+ | ------------------------------------- | ------------------------------ | ------------------------------- |
39
+ | [Button](/docs/components/button) | `@lukoweb/apitogo/ui/Button` | Actions with variants and sizes |
40
+ | [Checkbox](/docs/components/checkbox) | `@lukoweb/apitogo/ui/Checkbox` | Boolean checkbox input |
41
+ | [Input](/docs/components/input) | `@lukoweb/apitogo/ui/Input` | Single-line text input |
42
+ | [Label](/docs/components/label) | `@lukoweb/apitogo/ui/Label` | Accessible form labels |
43
+ | [Select](/docs/components/select) | `@lukoweb/apitogo/ui/Select` | Choose from a list of options |
44
+ | [Slider](/docs/components/slider) | `@lukoweb/apitogo/ui/Slider` | Numeric range input |
45
+ | [Switch](/docs/components/switch) | `@lukoweb/apitogo/ui/Switch` | Boolean toggle |
46
+ | [Textarea](/docs/components/textarea) | `@lukoweb/apitogo/ui/Textarea` | Multiline text input |
47
47
 
48
48
  ## Utility
49
49
 
50
- | Component | Import | Description |
51
- | --------- | ------ | ----------- |
52
- | [ClientOnly](/docs/components/client-only) | `@lukoweb/apitogo/components` | Render children only on the client |
53
- | [Head](/docs/components/head) | `@lukoweb/apitogo/components` | Set title, meta, and link tags |
54
- | [Link](/docs/components/link) | `@lukoweb/apitogo/components` | Client-side and external navigation |
55
- | [Slot](/docs/components/slot) | `@lukoweb/apitogo/components` | Inject content into layout slots |
50
+ | Component | Import | Description |
51
+ | ------------------------------------------ | ----------------------------- | ----------------------------------- |
52
+ | [ClientOnly](/docs/components/client-only) | `@lukoweb/apitogo/components` | Render children only on the client |
53
+ | [Head](/docs/components/head) | `@lukoweb/apitogo/components` | Set title, meta, and link tags |
54
+ | [Link](/docs/components/link) | `@lukoweb/apitogo/components` | Client-side and external navigation |
55
+ | [Slot](/docs/components/slot) | `@lukoweb/apitogo/components` | Inject content into layout slots |
56
56
 
57
57
  ## shadcn/ui
58
58
 
@@ -4,8 +4,8 @@ sidebar_label: Authentication and Identities
4
4
  ---
5
5
 
6
6
  When building an API documentation portal, you often need a way for users to authenticate API
7
- requests — API keys and other identities — separately from how they sign in to the portal.
8
- APIToGo splits **portal authentication** from **API identities**.
7
+ requests — API keys and other identities — separately from how they sign in to the portal. APIToGo
8
+ splits **portal authentication** from **API identities**.
9
9
 
10
10
  ## Authentication Providers and API Identities
11
11