insforge 1.2.10 → 1.3.0
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/.claude-plugin/marketplace.json +20 -20
- package/.dockerignore +60 -60
- package/.env.example +83 -77
- package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
- package/.github/ISSUE_TEMPLATE/config.yml +11 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
- package/.github/copilot-instructions.md +146 -146
- package/.github/workflows/build-image.yml +65 -65
- package/.github/workflows/ci-premerge-check.yml +23 -23
- package/.github/workflows/e2e.yml +63 -63
- package/.github/workflows/lint-and-format.yml +32 -32
- package/.prettierignore +64 -64
- package/CHANGELOG.md +44 -44
- package/CLAUDE_PLUGIN.md +104 -104
- package/CODE_OF_CONDUCT.md +128 -128
- package/CONTRIBUTING.md +125 -125
- package/Dockerfile +30 -30
- package/GITHUB_OAUTH_SETUP.md +49 -49
- package/GOOGLE_OAUTH_SETUP.md +148 -148
- package/LICENSE +201 -201
- package/README.md +182 -182
- package/assets/Dark.svg +23 -23
- package/auth/package.json +28 -28
- package/auth/src/lib/broadcastService.ts +117 -115
- package/auth/src/pages/SignInPage.tsx +60 -57
- package/auth/src/pages/SignUpPage.tsx +60 -57
- package/auth/tsconfig.json +32 -32
- package/auth/tsconfig.node.json +11 -11
- package/backend/package.json +78 -75
- package/backend/src/api/routes/ai/index.routes.ts +3 -3
- package/backend/src/api/routes/auth/index.routes.ts +667 -570
- package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
- package/backend/src/api/routes/database/advance.routes.ts +37 -16
- package/backend/src/api/routes/database/index.routes.ts +78 -1
- package/backend/src/api/routes/database/records.routes.ts +10 -10
- package/backend/src/api/routes/database/tables.routes.ts +0 -14
- package/backend/src/api/routes/docs/index.routes.ts +75 -76
- package/backend/src/api/routes/email/index.routes.ts +35 -0
- package/backend/src/api/routes/functions/index.routes.ts +18 -12
- package/backend/src/api/routes/metadata/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
- package/backend/src/api/routes/realtime/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
- package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
- package/backend/src/api/routes/storage/index.routes.ts +18 -12
- package/backend/src/api/routes/usage/index.routes.ts +6 -4
- package/backend/src/infra/database/database.manager.ts +14 -1
- package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
- package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
- package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
- package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
- package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
- package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
- package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
- package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
- package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
- package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
- package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
- package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
- package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
- package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
- package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
- package/backend/src/infra/realtime/realtime.manager.ts +246 -0
- package/backend/src/infra/realtime/webhook-sender.ts +82 -0
- package/backend/src/infra/security/token.manager.ts +219 -125
- package/backend/src/infra/socket/socket.manager.ts +198 -64
- package/backend/src/providers/ai/openrouter.provider.ts +12 -9
- package/backend/src/providers/email/base.provider.ts +4 -7
- package/backend/src/providers/email/cloud.provider.ts +84 -0
- package/backend/src/providers/oauth/apple.provider.ts +266 -0
- package/backend/src/providers/oauth/index.ts +1 -0
- package/backend/src/server.ts +317 -284
- package/backend/src/services/ai/ai-model.service.ts +5 -5
- package/backend/src/services/ai/chat-completion.service.ts +4 -4
- package/backend/src/services/ai/image-generation.service.ts +3 -3
- package/backend/src/services/auth/auth.service.ts +14 -0
- package/backend/src/services/database/database-table.service.ts +0 -9
- package/backend/src/services/database/database.service.ts +127 -0
- package/backend/src/services/email/email.service.ts +5 -7
- package/backend/src/services/realtime/index.ts +3 -0
- package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
- package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
- package/backend/src/services/realtime/realtime-message.service.ts +260 -0
- package/backend/src/types/auth.ts +11 -0
- package/backend/src/types/realtime.ts +18 -0
- package/backend/src/types/socket.ts +7 -31
- package/backend/src/utils/cookies.ts +35 -0
- package/backend/src/utils/s3-config-loader.ts +64 -0
- package/backend/src/utils/seed.ts +301 -298
- package/backend/src/utils/sql-parser.ts +90 -0
- package/backend/tests/README.md +133 -133
- package/backend/tests/cleanup-all-test-data.sh +230 -230
- package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
- package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
- package/backend/tests/local/test-ai-config.sh +129 -129
- package/backend/tests/local/test-ai-usage.sh +80 -80
- package/backend/tests/local/test-auth-router.sh +143 -143
- package/backend/tests/local/test-database-router.sh +222 -222
- package/backend/tests/local/test-e2e.sh +240 -240
- package/backend/tests/local/test-fk-errors.sh +96 -96
- package/backend/tests/local/test-functions.sh +123 -123
- package/backend/tests/local/test-id-field.sh +200 -200
- package/backend/tests/local/test-logs.sh +132 -132
- package/backend/tests/local/test-public-bucket.sh +264 -264
- package/backend/tests/local/test-secrets.sh +249 -249
- package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
- package/backend/tests/local/test-traditional-rest.sh +208 -208
- package/backend/tests/manual/README.md +50 -50
- package/backend/tests/manual/create-large-table-simple.sql +10 -10
- package/backend/tests/manual/seed-large-table.sql +100 -100
- package/backend/tests/manual/setup-large-table-extras.sql +33 -33
- package/backend/tests/manual/test-bulk-upsert.sh +409 -409
- package/backend/tests/manual/test-database-advance.sh +296 -296
- package/backend/tests/manual/test-postgrest-stability.sh +191 -191
- package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
- package/backend/tests/manual/test-rawsql-modes.sh +244 -244
- package/backend/tests/manual/test-universal-storage.sh +263 -263
- package/backend/tests/manual/test-users.sql +17 -17
- package/backend/tests/run-all-tests.sh +139 -139
- package/backend/tests/setup.ts +0 -0
- package/backend/tests/test-config.sh +338 -338
- package/backend/tests/unit/analyze-query.test.ts +697 -0
- package/backend/tsconfig.json +22 -22
- package/claude-plugin/.claude-plugin/plugin.json +24 -24
- package/claude-plugin/README.md +133 -133
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
- package/docker-compose.prod.yml +204 -200
- package/docker-compose.yml +232 -228
- package/docker-init/db/db-init.sql +97 -97
- package/docker-init/db/jwt.sql +5 -5
- package/docker-init/db/postgresql.conf +16 -16
- package/docker-init/logs/vector.yml +236 -236
- package/docs/README.md +44 -44
- package/docs/agent-docs/real-time.md +269 -0
- package/docs/changelog.mdx +119 -67
- package/docs/core-concepts/ai/architecture.mdx +372 -372
- package/docs/core-concepts/ai/sdk.mdx +213 -213
- package/docs/core-concepts/authentication/architecture.mdx +278 -278
- package/docs/core-concepts/authentication/sdk.mdx +414 -414
- package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
- package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
- package/docs/core-concepts/database/architecture.mdx +255 -255
- package/docs/core-concepts/database/sdk.mdx +382 -382
- package/docs/core-concepts/email/architecture.mdx +101 -0
- package/docs/core-concepts/email/sdk.mdx +53 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -105
- package/docs/core-concepts/functions/sdk.mdx +184 -184
- package/docs/core-concepts/realtime/architecture.mdx +446 -0
- package/docs/core-concepts/realtime/sdk.mdx +409 -0
- package/docs/core-concepts/storage/architecture.mdx +243 -243
- package/docs/core-concepts/storage/sdk.mdx +253 -253
- package/docs/deployment/README.md +94 -94
- package/docs/deployment/deploy-to-aws-ec2.md +564 -564
- package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
- package/docs/deployment/deploy-to-render.md +441 -441
- package/docs/deprecated/insforge-auth-api.md +214 -214
- package/docs/deprecated/insforge-auth-sdk.md +99 -99
- package/docs/deprecated/insforge-db-api.md +358 -358
- package/docs/deprecated/insforge-db-sdk.md +139 -139
- package/docs/deprecated/insforge-debug-sdk.md +156 -156
- package/docs/deprecated/insforge-debug.md +64 -64
- package/docs/deprecated/insforge-instructions.md +123 -123
- package/docs/deprecated/insforge-project.md +117 -117
- package/docs/deprecated/insforge-storage-api.md +278 -278
- package/docs/deprecated/insforge-storage-sdk.md +158 -158
- package/docs/docs.json +232 -210
- package/docs/examples/framework-guides/nextjs.mdx +131 -131
- package/docs/examples/framework-guides/nuxt.mdx +165 -165
- package/docs/examples/framework-guides/react.mdx +165 -165
- package/docs/examples/framework-guides/svelte.mdx +153 -153
- package/docs/examples/framework-guides/vue.mdx +159 -159
- package/docs/examples/overview.mdx +67 -67
- package/docs/favicon.svg +19 -19
- package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
- package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
- package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
- package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
- package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
- package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
- package/docs/images/icons/ai.svg +4 -4
- package/docs/images/logos/nextjs.svg +4 -4
- package/docs/images/logos/nuxt.svg +4 -4
- package/docs/images/logos/react.svg +5 -5
- package/docs/images/logos/svelte.svg +4 -4
- package/docs/images/logos/vue.svg +5 -5
- package/docs/insforge-instructions-sdk.md +89 -88
- package/docs/introduction.mdx +45 -45
- package/docs/logo/dark.svg +22 -22
- package/docs/logo/light.svg +20 -20
- package/docs/partnership.mdx +651 -646
- package/docs/quickstart.mdx +82 -82
- package/docs/showcase.mdx +52 -52
- package/docs/snippets/sdk-installation.mdx +21 -21
- package/docs/snippets/service-icons.mdx +27 -27
- package/examples/oauth/frontend-oauth-example.html +250 -250
- package/examples/response-examples.md +443 -443
- package/frontend/components.json +17 -17
- package/frontend/package.json +69 -69
- package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
- package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
- package/frontend/src/assets/icons/checked.svg +3 -3
- package/frontend/src/assets/icons/connected.svg +3 -3
- package/frontend/src/assets/icons/error.svg +3 -3
- package/frontend/src/assets/icons/loader.svg +9 -9
- package/frontend/src/assets/icons/pencil.svg +4 -4
- package/frontend/src/assets/icons/refresh.svg +4 -4
- package/frontend/src/assets/icons/step_active.svg +3 -3
- package/frontend/src/assets/icons/step_inactive.svg +11 -11
- package/frontend/src/assets/icons/warning.svg +3 -3
- package/frontend/src/assets/logos/apple.svg +3 -3
- package/frontend/src/assets/logos/claude_code.svg +3 -3
- package/frontend/src/assets/logos/cline.svg +6 -6
- package/frontend/src/assets/logos/cursor.svg +20 -20
- package/frontend/src/assets/logos/discord.svg +8 -8
- package/frontend/src/assets/logos/facebook.svg +3 -3
- package/frontend/src/assets/logos/gemini.svg +19 -19
- package/frontend/src/assets/logos/github.svg +5 -5
- package/frontend/src/assets/logos/google.svg +13 -13
- package/frontend/src/assets/logos/grok.svg +10 -10
- package/frontend/src/assets/logos/insforge_dark.svg +15 -15
- package/frontend/src/assets/logos/insforge_light.svg +15 -15
- package/frontend/src/assets/logos/instagram.svg +1 -1
- package/frontend/src/assets/logos/linkedin.svg +3 -3
- package/frontend/src/assets/logos/openai.svg +10 -10
- package/frontend/src/assets/logos/roo_code.svg +9 -9
- package/frontend/src/assets/logos/spotify.svg +16 -16
- package/frontend/src/assets/logos/tiktok.svg +5 -5
- package/frontend/src/assets/logos/trae.svg +3 -3
- package/frontend/src/assets/logos/windsurf.svg +10 -10
- package/frontend/src/assets/logos/x.svg +3 -3
- package/frontend/src/components/layout/AppHeader.tsx +9 -10
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
- package/frontend/src/features/auth/helpers.tsx +8 -0
- package/frontend/src/features/auth/{page → pages}/UsersPage.tsx +0 -28
- package/frontend/src/features/database/components/SQLModal.tsx +75 -0
- package/frontend/src/features/database/components/TableForm.tsx +0 -4
- package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
- package/frontend/src/features/database/hooks/useTables.ts +32 -28
- package/frontend/src/features/database/index.ts +1 -0
- package/frontend/src/features/database/{page → pages}/FunctionsPage.tsx +29 -37
- package/frontend/src/features/database/{page → pages}/IndexesPage.tsx +35 -47
- package/frontend/src/features/database/{page → pages}/PoliciesPage.tsx +43 -54
- package/frontend/src/features/database/{page → pages}/TablesPage.tsx +0 -42
- package/frontend/src/features/database/{page → pages}/TriggersPage.tsx +35 -47
- package/frontend/src/features/database/services/advance.service.ts +0 -26
- package/frontend/src/features/database/services/database.service.ts +55 -0
- package/frontend/src/features/database/services/table.service.ts +0 -6
- package/frontend/src/features/functions/{page → pages}/FunctionsPage.tsx +21 -44
- package/frontend/src/features/functions/{page → pages}/SecretsPage.tsx +11 -9
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
- package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
- package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
- package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
- package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
- package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
- package/frontend/src/features/realtime/index.ts +11 -0
- package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
- package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
- package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
- package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
- package/frontend/src/features/storage/{page → pages}/StoragePage.tsx +1 -29
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
- package/frontend/src/features/visualizer/{page → pages}/VisualizerPage.tsx +1 -35
- package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
- package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
- package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
- package/frontend/src/lib/utils/menuItems.ts +24 -0
- package/frontend/src/lib/utils/utils.ts +14 -1
- package/frontend/tsconfig.json +25 -25
- package/frontend/tsconfig.node.json +9 -9
- package/functions/deno.json +24 -24
- package/functions/server.ts +315 -315
- package/i18n/README.ar.md +130 -130
- package/i18n/README.de.md +130 -130
- package/i18n/README.es.md +154 -154
- package/i18n/README.fr.md +134 -134
- package/i18n/README.hi.md +129 -129
- package/i18n/README.ja.md +174 -174
- package/i18n/README.ko.md +136 -136
- package/i18n/README.pt-BR.md +131 -131
- package/i18n/README.ru.md +129 -129
- package/i18n/README.zh-CN.md +133 -133
- package/openapi/ai.yaml +715 -715
- package/openapi/auth.yaml +1244 -1244
- package/openapi/email.yaml +158 -0
- package/openapi/functions.yaml +475 -475
- package/openapi/health.yaml +29 -29
- package/openapi/logs.yaml +223 -223
- package/openapi/metadata.yaml +177 -177
- package/openapi/realtime.yaml +699 -0
- package/openapi/records.yaml +381 -381
- package/openapi/secrets.yaml +370 -370
- package/openapi/storage.yaml +875 -875
- package/openapi/tables.yaml +463 -463
- package/package.json +97 -97
- package/shared-schemas/package.json +31 -31
- package/shared-schemas/src/ai.schema.ts +63 -59
- package/shared-schemas/src/auth-api.schema.ts +352 -339
- package/shared-schemas/src/auth.schema.ts +1 -1
- package/shared-schemas/src/database-api.schema.ts +32 -1
- package/shared-schemas/src/database.schema.ts +39 -0
- package/shared-schemas/src/docs.schema.ts +26 -0
- package/shared-schemas/src/email-api.schema.ts +30 -0
- package/shared-schemas/src/index.ts +4 -0
- package/shared-schemas/src/metadata.schema.ts +9 -0
- package/shared-schemas/src/realtime-api.schema.ts +111 -0
- package/shared-schemas/src/realtime.schema.ts +143 -0
- package/shared-schemas/tsconfig.json +21 -21
- package/tsconfig.json +7 -7
- package/zeabur/README.md +13 -13
- package/zeabur/template.yml +1032 -1032
- package/.cursor/rules/cursor-rules.mdc +0 -94
- package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
- package/test-gemini.sh +0 -35
- package/test-usage-admin.sh +0 -57
- package/test-usage.sh +0 -50
- /package/frontend/src/features/ai/{page → pages}/AIPage.tsx +0 -0
- /package/frontend/src/features/auth/{page → pages}/AuthMethodsPage.tsx +0 -0
- /package/frontend/src/features/auth/{page → pages}/ConfigurationPage.tsx +0 -0
- /package/frontend/src/features/dashboard/{page → pages}/DashboardPage.tsx +0 -0
- /package/frontend/src/features/database/{page → pages}/SQLEditorPage.tsx +0 -0
- /package/frontend/src/features/database/{page → pages}/TemplatesPage.tsx +0 -0
- /package/frontend/src/features/login/{page → pages}/CloudLoginPage.tsx +0 -0
- /package/frontend/src/features/login/{page → pages}/LoginPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/AuditsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/LogsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page → pages}/MCPLogsPage.tsx +0 -0
package/docker-init/db/jwt.sql
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
\set jwt_secret `echo "$JWT_SECRET"`
|
|
2
|
-
\set jwt_exp `echo "$JWT_EXP"`
|
|
3
|
-
|
|
4
|
-
ALTER DATABASE postgres SET "app.settings.jwt_secret" TO :'jwt_secret';
|
|
5
|
-
ALTER DATABASE postgres SET "app.settings.jwt_exp" TO :'jwt_exp';
|
|
1
|
+
\set jwt_secret `echo "$JWT_SECRET"`
|
|
2
|
+
\set jwt_exp `echo "$JWT_EXP"`
|
|
3
|
+
|
|
4
|
+
ALTER DATABASE postgres SET "app.settings.jwt_secret" TO :'jwt_secret';
|
|
5
|
+
ALTER DATABASE postgres SET "app.settings.jwt_exp" TO :'jwt_exp';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# PostgreSQL configuration for InsForge
|
|
2
|
-
# Enable logical replication for Logflare
|
|
3
|
-
|
|
4
|
-
# Listen on all interfaces to allow container connections
|
|
5
|
-
listen_addresses = '*'
|
|
6
|
-
|
|
7
|
-
# Set WAL level to logical for Logflare replication
|
|
8
|
-
wal_level = logical
|
|
9
|
-
|
|
10
|
-
# Set max replication slots (needed for logical replication)
|
|
11
|
-
max_replication_slots = 10
|
|
12
|
-
|
|
13
|
-
# Set max WAL senders
|
|
14
|
-
max_wal_senders = 10
|
|
15
|
-
|
|
16
|
-
# Shared preload libraries (if needed)
|
|
1
|
+
# PostgreSQL configuration for InsForge
|
|
2
|
+
# Enable logical replication for Logflare
|
|
3
|
+
|
|
4
|
+
# Listen on all interfaces to allow container connections
|
|
5
|
+
listen_addresses = '*'
|
|
6
|
+
|
|
7
|
+
# Set WAL level to logical for Logflare replication
|
|
8
|
+
wal_level = logical
|
|
9
|
+
|
|
10
|
+
# Set max replication slots (needed for logical replication)
|
|
11
|
+
max_replication_slots = 10
|
|
12
|
+
|
|
13
|
+
# Set max WAL senders
|
|
14
|
+
max_wal_senders = 10
|
|
15
|
+
|
|
16
|
+
# Shared preload libraries (if needed)
|
|
17
17
|
# shared_preload_libraries = 'pg_stat_statements'
|
|
@@ -1,236 +1,236 @@
|
|
|
1
|
-
api:
|
|
2
|
-
enabled: true
|
|
3
|
-
address: 0.0.0.0:7135
|
|
4
|
-
|
|
5
|
-
sources:
|
|
6
|
-
docker_host:
|
|
7
|
-
type: docker_logs
|
|
8
|
-
exclude_containers:
|
|
9
|
-
- insforge-vector
|
|
10
|
-
include_containers:
|
|
11
|
-
- insforge
|
|
12
|
-
- insforge-deno
|
|
13
|
-
- insforge-postgrest
|
|
14
|
-
- insforge-postgres
|
|
15
|
-
|
|
16
|
-
transforms:
|
|
17
|
-
project_logs:
|
|
18
|
-
type: remap
|
|
19
|
-
inputs:
|
|
20
|
-
- docker_host
|
|
21
|
-
source: |-
|
|
22
|
-
.project = "default"
|
|
23
|
-
.event_message = del(.message)
|
|
24
|
-
# Remove leading slash from container name if present
|
|
25
|
-
container = to_string!(del(.container_name))
|
|
26
|
-
if starts_with(container, "/") {
|
|
27
|
-
.appname = slice!(container, 1)
|
|
28
|
-
} else {
|
|
29
|
-
.appname = container
|
|
30
|
-
}
|
|
31
|
-
del(.container_created_at)
|
|
32
|
-
del(.container_id)
|
|
33
|
-
del(.source_type)
|
|
34
|
-
del(.stream)
|
|
35
|
-
del(.label)
|
|
36
|
-
del(.image)
|
|
37
|
-
del(.host)
|
|
38
|
-
del(.stream)
|
|
39
|
-
|
|
40
|
-
router:
|
|
41
|
-
type: route
|
|
42
|
-
inputs:
|
|
43
|
-
- project_logs
|
|
44
|
-
route:
|
|
45
|
-
insforge: '.appname == "insforge"'
|
|
46
|
-
deno: '.appname == "insforge-deno"'
|
|
47
|
-
rest: '.appname == "insforge-postgrest"'
|
|
48
|
-
db: '.appname == "insforge-postgres"'
|
|
49
|
-
realtime: '.appname == "insforge-realtime"'
|
|
50
|
-
# PostgREST logs with proper parsing
|
|
51
|
-
rest_logs:
|
|
52
|
-
type: remap
|
|
53
|
-
inputs:
|
|
54
|
-
- router.rest
|
|
55
|
-
source: |-
|
|
56
|
-
# .metadata.host = .project
|
|
57
|
-
# Parse PostgREST log format: DD/Mon/YYYY:HH:MM:SS +ZZZZ: message
|
|
58
|
-
parsed, err = parse_regex(.event_message, r'^(?P<time>\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} [+-]\d{4}): (?P<msg>.*)$')
|
|
59
|
-
|
|
60
|
-
if err == null && parsed != null {
|
|
61
|
-
.event_message = parsed.msg
|
|
62
|
-
.metadata.level = "info"
|
|
63
|
-
} else {
|
|
64
|
-
# If parsing fails, keep original message
|
|
65
|
-
.metadata.level = "info"
|
|
66
|
-
}
|
|
67
|
-
# InsForge logs are structured JSON, parse and handle both request logs and application logs
|
|
68
|
-
insforge_logs:
|
|
69
|
-
type: remap
|
|
70
|
-
inputs:
|
|
71
|
-
- router.insforge
|
|
72
|
-
source: |-
|
|
73
|
-
# Remove the [backend] prefix if present
|
|
74
|
-
.event_message = replace!(.event_message, r'^\[backend\] ', "")
|
|
75
|
-
|
|
76
|
-
req, err = parse_json(.event_message)
|
|
77
|
-
if err == null {
|
|
78
|
-
# Set timestamp from log
|
|
79
|
-
if req.timestamp != null {
|
|
80
|
-
.timestamp = to_timestamp!(req.timestamp)
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
# Set log level
|
|
84
|
-
.metadata.level = req.level
|
|
85
|
-
|
|
86
|
-
# Check if this is a request log (has duration field)
|
|
87
|
-
if req.duration != null {
|
|
88
|
-
# Flatten request log fields to top level
|
|
89
|
-
.user_agent = req.userAgent
|
|
90
|
-
.ip = req.ip
|
|
91
|
-
.method = req.method
|
|
92
|
-
.path = req.path
|
|
93
|
-
.protocol = "HTTP/1.1"
|
|
94
|
-
.status_code = req.status
|
|
95
|
-
.size = req.size
|
|
96
|
-
.duration = req.duration
|
|
97
|
-
# Format as nginx-style log line
|
|
98
|
-
.event_message = join!([req.method, req.path, to_string!(req.status), to_string!(req.size), req.duration, "-", req.ip, "-", req.userAgent], " ")
|
|
99
|
-
.log_type = "request"
|
|
100
|
-
} else {
|
|
101
|
-
# This is an application log
|
|
102
|
-
.event_message = join!([req.level, req.message], " - ")
|
|
103
|
-
.log_type = "application"
|
|
104
|
-
if req.error != null {
|
|
105
|
-
.error = req.error
|
|
106
|
-
}
|
|
107
|
-
if req.stack != null {
|
|
108
|
-
.stack = req.stack
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
realtime_logs:
|
|
113
|
-
type: remap
|
|
114
|
-
inputs:
|
|
115
|
-
- router.realtime
|
|
116
|
-
source: |-
|
|
117
|
-
parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
|
|
118
|
-
if err == null {
|
|
119
|
-
.event_message = parsed.msg
|
|
120
|
-
.metadata.level = parsed.level
|
|
121
|
-
}
|
|
122
|
-
deno_logs:
|
|
123
|
-
type: remap
|
|
124
|
-
inputs:
|
|
125
|
-
- router.deno
|
|
126
|
-
source: |-
|
|
127
|
-
parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
|
|
128
|
-
if err == null {
|
|
129
|
-
.event_message = parsed.msg
|
|
130
|
-
.timestamp = to_timestamp!(parsed.time)
|
|
131
|
-
.metadata.level = upcase!(parsed.level)
|
|
132
|
-
# .metadata.host = .project
|
|
133
|
-
}
|
|
134
|
-
# Postgres logs with proper parsing
|
|
135
|
-
db_logs:
|
|
136
|
-
type: remap
|
|
137
|
-
inputs:
|
|
138
|
-
- router.db
|
|
139
|
-
source: |-
|
|
140
|
-
# .metadata.host = "db-default"
|
|
141
|
-
# Parse PostgreSQL log format: YYYY-MM-DD HH:MM:SS.SSS TZ [PID] LEVEL: message
|
|
142
|
-
parsed, err = parse_regex(.event_message, r'^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) (?P<tz>\w+) \[(?P<pid>\d+)\] (?P<level>LOG|ERROR|WARNING|INFO|NOTICE|FATAL|PANIC|STATEMENT|DETAIL): (?P<msg>.*)$')
|
|
143
|
-
|
|
144
|
-
if err == null && parsed != null {
|
|
145
|
-
.metadata.parsed.pid = parsed.pid
|
|
146
|
-
.metadata.level = upcase!(parsed.level)
|
|
147
|
-
.event_message = parsed.msg
|
|
148
|
-
|
|
149
|
-
# Normalize STATEMENT and DETAIL to appropriate log levels
|
|
150
|
-
if .metadata.level == "STATEMENT" {
|
|
151
|
-
.metadata.level = "INFO"
|
|
152
|
-
}
|
|
153
|
-
if .metadata.level == "DETAIL" {
|
|
154
|
-
.metadata.level = "INFO"
|
|
155
|
-
}
|
|
156
|
-
} else {
|
|
157
|
-
# If parsing fails, keep original message and set default severity
|
|
158
|
-
.metadata.level = "LOG"
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
sinks:
|
|
162
|
-
# File sinks - JSONL format for FileProvider (always enabled)
|
|
163
|
-
file_insforge:
|
|
164
|
-
type: 'file'
|
|
165
|
-
inputs:
|
|
166
|
-
- insforge_logs
|
|
167
|
-
path: '/insforge-logs/insforge.logs.jsonl'
|
|
168
|
-
encoding:
|
|
169
|
-
codec: 'json'
|
|
170
|
-
file_deno:
|
|
171
|
-
type: 'file'
|
|
172
|
-
inputs:
|
|
173
|
-
- deno_logs
|
|
174
|
-
path: '/insforge-logs/function.logs.jsonl'
|
|
175
|
-
encoding:
|
|
176
|
-
codec: 'json'
|
|
177
|
-
file_rest:
|
|
178
|
-
type: 'file'
|
|
179
|
-
inputs:
|
|
180
|
-
- rest_logs
|
|
181
|
-
path: '/insforge-logs/postgrest.logs.jsonl'
|
|
182
|
-
encoding:
|
|
183
|
-
codec: 'json'
|
|
184
|
-
file_db:
|
|
185
|
-
type: 'file'
|
|
186
|
-
inputs:
|
|
187
|
-
- db_logs
|
|
188
|
-
path: '/insforge-logs/postgres.logs.jsonl'
|
|
189
|
-
encoding:
|
|
190
|
-
codec: 'json'
|
|
191
|
-
|
|
192
|
-
# CloudWatch sinks (ignored if AWS_REGION not set)
|
|
193
|
-
cw_insforge:
|
|
194
|
-
type: aws_cloudwatch_logs
|
|
195
|
-
inputs:
|
|
196
|
-
- insforge_logs
|
|
197
|
-
region: ${AWS_REGION:-skip}
|
|
198
|
-
group_name: /insforge/local
|
|
199
|
-
stream_name: ${HOSTNAME_OVERRIDE:-local}-insforge-vector
|
|
200
|
-
encoding:
|
|
201
|
-
codec: json
|
|
202
|
-
healthcheck:
|
|
203
|
-
enabled: false
|
|
204
|
-
cw_rest:
|
|
205
|
-
type: aws_cloudwatch_logs
|
|
206
|
-
inputs:
|
|
207
|
-
- rest_logs
|
|
208
|
-
region: ${AWS_REGION:-skip}
|
|
209
|
-
group_name: /insforge/local
|
|
210
|
-
stream_name: ${HOSTNAME_OVERRIDE:-local}-postgrest-vector
|
|
211
|
-
encoding:
|
|
212
|
-
codec: json
|
|
213
|
-
healthcheck:
|
|
214
|
-
enabled: false
|
|
215
|
-
cw_deno:
|
|
216
|
-
type: aws_cloudwatch_logs
|
|
217
|
-
inputs:
|
|
218
|
-
- deno_logs
|
|
219
|
-
region: ${AWS_REGION:-skip}
|
|
220
|
-
group_name: /insforge/local
|
|
221
|
-
stream_name: ${HOSTNAME_OVERRIDE:-local}-function-vector
|
|
222
|
-
encoding:
|
|
223
|
-
codec: json
|
|
224
|
-
healthcheck:
|
|
225
|
-
enabled: false
|
|
226
|
-
cw_db:
|
|
227
|
-
type: aws_cloudwatch_logs
|
|
228
|
-
inputs:
|
|
229
|
-
- db_logs
|
|
230
|
-
region: ${AWS_REGION:-skip}
|
|
231
|
-
group_name: /insforge/local
|
|
232
|
-
stream_name: ${HOSTNAME_OVERRIDE:-local}-postgres-vector
|
|
233
|
-
encoding:
|
|
234
|
-
codec: json
|
|
235
|
-
healthcheck:
|
|
236
|
-
enabled: false
|
|
1
|
+
api:
|
|
2
|
+
enabled: true
|
|
3
|
+
address: 0.0.0.0:7135
|
|
4
|
+
|
|
5
|
+
sources:
|
|
6
|
+
docker_host:
|
|
7
|
+
type: docker_logs
|
|
8
|
+
exclude_containers:
|
|
9
|
+
- insforge-vector
|
|
10
|
+
include_containers:
|
|
11
|
+
- insforge
|
|
12
|
+
- insforge-deno
|
|
13
|
+
- insforge-postgrest
|
|
14
|
+
- insforge-postgres
|
|
15
|
+
|
|
16
|
+
transforms:
|
|
17
|
+
project_logs:
|
|
18
|
+
type: remap
|
|
19
|
+
inputs:
|
|
20
|
+
- docker_host
|
|
21
|
+
source: |-
|
|
22
|
+
.project = "default"
|
|
23
|
+
.event_message = del(.message)
|
|
24
|
+
# Remove leading slash from container name if present
|
|
25
|
+
container = to_string!(del(.container_name))
|
|
26
|
+
if starts_with(container, "/") {
|
|
27
|
+
.appname = slice!(container, 1)
|
|
28
|
+
} else {
|
|
29
|
+
.appname = container
|
|
30
|
+
}
|
|
31
|
+
del(.container_created_at)
|
|
32
|
+
del(.container_id)
|
|
33
|
+
del(.source_type)
|
|
34
|
+
del(.stream)
|
|
35
|
+
del(.label)
|
|
36
|
+
del(.image)
|
|
37
|
+
del(.host)
|
|
38
|
+
del(.stream)
|
|
39
|
+
|
|
40
|
+
router:
|
|
41
|
+
type: route
|
|
42
|
+
inputs:
|
|
43
|
+
- project_logs
|
|
44
|
+
route:
|
|
45
|
+
insforge: '.appname == "insforge"'
|
|
46
|
+
deno: '.appname == "insforge-deno"'
|
|
47
|
+
rest: '.appname == "insforge-postgrest"'
|
|
48
|
+
db: '.appname == "insforge-postgres"'
|
|
49
|
+
realtime: '.appname == "insforge-realtime"'
|
|
50
|
+
# PostgREST logs with proper parsing
|
|
51
|
+
rest_logs:
|
|
52
|
+
type: remap
|
|
53
|
+
inputs:
|
|
54
|
+
- router.rest
|
|
55
|
+
source: |-
|
|
56
|
+
# .metadata.host = .project
|
|
57
|
+
# Parse PostgREST log format: DD/Mon/YYYY:HH:MM:SS +ZZZZ: message
|
|
58
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} [+-]\d{4}): (?P<msg>.*)$')
|
|
59
|
+
|
|
60
|
+
if err == null && parsed != null {
|
|
61
|
+
.event_message = parsed.msg
|
|
62
|
+
.metadata.level = "info"
|
|
63
|
+
} else {
|
|
64
|
+
# If parsing fails, keep original message
|
|
65
|
+
.metadata.level = "info"
|
|
66
|
+
}
|
|
67
|
+
# InsForge logs are structured JSON, parse and handle both request logs and application logs
|
|
68
|
+
insforge_logs:
|
|
69
|
+
type: remap
|
|
70
|
+
inputs:
|
|
71
|
+
- router.insforge
|
|
72
|
+
source: |-
|
|
73
|
+
# Remove the [backend] prefix if present
|
|
74
|
+
.event_message = replace!(.event_message, r'^\[backend\] ', "")
|
|
75
|
+
|
|
76
|
+
req, err = parse_json(.event_message)
|
|
77
|
+
if err == null {
|
|
78
|
+
# Set timestamp from log
|
|
79
|
+
if req.timestamp != null {
|
|
80
|
+
.timestamp = to_timestamp!(req.timestamp)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
# Set log level
|
|
84
|
+
.metadata.level = req.level
|
|
85
|
+
|
|
86
|
+
# Check if this is a request log (has duration field)
|
|
87
|
+
if req.duration != null {
|
|
88
|
+
# Flatten request log fields to top level
|
|
89
|
+
.user_agent = req.userAgent
|
|
90
|
+
.ip = req.ip
|
|
91
|
+
.method = req.method
|
|
92
|
+
.path = req.path
|
|
93
|
+
.protocol = "HTTP/1.1"
|
|
94
|
+
.status_code = req.status
|
|
95
|
+
.size = req.size
|
|
96
|
+
.duration = req.duration
|
|
97
|
+
# Format as nginx-style log line
|
|
98
|
+
.event_message = join!([req.method, req.path, to_string!(req.status), to_string!(req.size), req.duration, "-", req.ip, "-", req.userAgent], " ")
|
|
99
|
+
.log_type = "request"
|
|
100
|
+
} else {
|
|
101
|
+
# This is an application log
|
|
102
|
+
.event_message = join!([req.level, req.message], " - ")
|
|
103
|
+
.log_type = "application"
|
|
104
|
+
if req.error != null {
|
|
105
|
+
.error = req.error
|
|
106
|
+
}
|
|
107
|
+
if req.stack != null {
|
|
108
|
+
.stack = req.stack
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
realtime_logs:
|
|
113
|
+
type: remap
|
|
114
|
+
inputs:
|
|
115
|
+
- router.realtime
|
|
116
|
+
source: |-
|
|
117
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
|
|
118
|
+
if err == null {
|
|
119
|
+
.event_message = parsed.msg
|
|
120
|
+
.metadata.level = parsed.level
|
|
121
|
+
}
|
|
122
|
+
deno_logs:
|
|
123
|
+
type: remap
|
|
124
|
+
inputs:
|
|
125
|
+
- router.deno
|
|
126
|
+
source: |-
|
|
127
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d+:\d+:\d+\.\d+) \[(?P<level>\w+)\] (?P<msg>.*)$')
|
|
128
|
+
if err == null {
|
|
129
|
+
.event_message = parsed.msg
|
|
130
|
+
.timestamp = to_timestamp!(parsed.time)
|
|
131
|
+
.metadata.level = upcase!(parsed.level)
|
|
132
|
+
# .metadata.host = .project
|
|
133
|
+
}
|
|
134
|
+
# Postgres logs with proper parsing
|
|
135
|
+
db_logs:
|
|
136
|
+
type: remap
|
|
137
|
+
inputs:
|
|
138
|
+
- router.db
|
|
139
|
+
source: |-
|
|
140
|
+
# .metadata.host = "db-default"
|
|
141
|
+
# Parse PostgreSQL log format: YYYY-MM-DD HH:MM:SS.SSS TZ [PID] LEVEL: message
|
|
142
|
+
parsed, err = parse_regex(.event_message, r'^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}) (?P<tz>\w+) \[(?P<pid>\d+)\] (?P<level>LOG|ERROR|WARNING|INFO|NOTICE|FATAL|PANIC|STATEMENT|DETAIL): (?P<msg>.*)$')
|
|
143
|
+
|
|
144
|
+
if err == null && parsed != null {
|
|
145
|
+
.metadata.parsed.pid = parsed.pid
|
|
146
|
+
.metadata.level = upcase!(parsed.level)
|
|
147
|
+
.event_message = parsed.msg
|
|
148
|
+
|
|
149
|
+
# Normalize STATEMENT and DETAIL to appropriate log levels
|
|
150
|
+
if .metadata.level == "STATEMENT" {
|
|
151
|
+
.metadata.level = "INFO"
|
|
152
|
+
}
|
|
153
|
+
if .metadata.level == "DETAIL" {
|
|
154
|
+
.metadata.level = "INFO"
|
|
155
|
+
}
|
|
156
|
+
} else {
|
|
157
|
+
# If parsing fails, keep original message and set default severity
|
|
158
|
+
.metadata.level = "LOG"
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
sinks:
|
|
162
|
+
# File sinks - JSONL format for FileProvider (always enabled)
|
|
163
|
+
file_insforge:
|
|
164
|
+
type: 'file'
|
|
165
|
+
inputs:
|
|
166
|
+
- insforge_logs
|
|
167
|
+
path: '/insforge-logs/insforge.logs.jsonl'
|
|
168
|
+
encoding:
|
|
169
|
+
codec: 'json'
|
|
170
|
+
file_deno:
|
|
171
|
+
type: 'file'
|
|
172
|
+
inputs:
|
|
173
|
+
- deno_logs
|
|
174
|
+
path: '/insforge-logs/function.logs.jsonl'
|
|
175
|
+
encoding:
|
|
176
|
+
codec: 'json'
|
|
177
|
+
file_rest:
|
|
178
|
+
type: 'file'
|
|
179
|
+
inputs:
|
|
180
|
+
- rest_logs
|
|
181
|
+
path: '/insforge-logs/postgrest.logs.jsonl'
|
|
182
|
+
encoding:
|
|
183
|
+
codec: 'json'
|
|
184
|
+
file_db:
|
|
185
|
+
type: 'file'
|
|
186
|
+
inputs:
|
|
187
|
+
- db_logs
|
|
188
|
+
path: '/insforge-logs/postgres.logs.jsonl'
|
|
189
|
+
encoding:
|
|
190
|
+
codec: 'json'
|
|
191
|
+
|
|
192
|
+
# CloudWatch sinks (ignored if AWS_REGION not set)
|
|
193
|
+
cw_insforge:
|
|
194
|
+
type: aws_cloudwatch_logs
|
|
195
|
+
inputs:
|
|
196
|
+
- insforge_logs
|
|
197
|
+
region: ${AWS_REGION:-skip}
|
|
198
|
+
group_name: /insforge/local
|
|
199
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-insforge-vector
|
|
200
|
+
encoding:
|
|
201
|
+
codec: json
|
|
202
|
+
healthcheck:
|
|
203
|
+
enabled: false
|
|
204
|
+
cw_rest:
|
|
205
|
+
type: aws_cloudwatch_logs
|
|
206
|
+
inputs:
|
|
207
|
+
- rest_logs
|
|
208
|
+
region: ${AWS_REGION:-skip}
|
|
209
|
+
group_name: /insforge/local
|
|
210
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-postgrest-vector
|
|
211
|
+
encoding:
|
|
212
|
+
codec: json
|
|
213
|
+
healthcheck:
|
|
214
|
+
enabled: false
|
|
215
|
+
cw_deno:
|
|
216
|
+
type: aws_cloudwatch_logs
|
|
217
|
+
inputs:
|
|
218
|
+
- deno_logs
|
|
219
|
+
region: ${AWS_REGION:-skip}
|
|
220
|
+
group_name: /insforge/local
|
|
221
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-function-vector
|
|
222
|
+
encoding:
|
|
223
|
+
codec: json
|
|
224
|
+
healthcheck:
|
|
225
|
+
enabled: false
|
|
226
|
+
cw_db:
|
|
227
|
+
type: aws_cloudwatch_logs
|
|
228
|
+
inputs:
|
|
229
|
+
- db_logs
|
|
230
|
+
region: ${AWS_REGION:-skip}
|
|
231
|
+
group_name: /insforge/local
|
|
232
|
+
stream_name: ${HOSTNAME_OVERRIDE:-local}-postgres-vector
|
|
233
|
+
encoding:
|
|
234
|
+
codec: json
|
|
235
|
+
healthcheck:
|
|
236
|
+
enabled: false
|
package/docs/README.md
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
# Mintlify Starter Kit
|
|
2
|
-
|
|
3
|
-
Use the starter kit to get your docs deployed and ready to customize.
|
|
4
|
-
|
|
5
|
-
Click the green **Use this template** button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with
|
|
6
|
-
|
|
7
|
-
- Guide pages
|
|
8
|
-
- Navigation
|
|
9
|
-
- Customizations
|
|
10
|
-
- API reference pages
|
|
11
|
-
- Use of popular components
|
|
12
|
-
|
|
13
|
-
**[Follow the full quickstart guide](https://starter.mintlify.com/quickstart)**
|
|
14
|
-
|
|
15
|
-
## Development
|
|
16
|
-
|
|
17
|
-
Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview your documentation changes locally. To install, use the following command:
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
npm i -g mint
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
Run the following command at the root of your documentation, where your `docs.json` is located:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
mint dev
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
View your local preview at `http://localhost:3000`.
|
|
30
|
-
|
|
31
|
-
## Publishing changes
|
|
32
|
-
|
|
33
|
-
Install our GitHub app from your [dashboard](https://dashboard.mintlify.com/settings/organization/github-app) to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.
|
|
34
|
-
|
|
35
|
-
## Need help?
|
|
36
|
-
|
|
37
|
-
### Troubleshooting
|
|
38
|
-
|
|
39
|
-
- If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
|
|
40
|
-
- If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
|
|
41
|
-
|
|
42
|
-
### Resources
|
|
43
|
-
- [Mintlify documentation](https://mintlify.com/docs)
|
|
44
|
-
- [Mintlify community](https://mintlify.com/community)
|
|
1
|
+
# Mintlify Starter Kit
|
|
2
|
+
|
|
3
|
+
Use the starter kit to get your docs deployed and ready to customize.
|
|
4
|
+
|
|
5
|
+
Click the green **Use this template** button at the top of this repo to copy the Mintlify starter kit. The starter kit contains examples with
|
|
6
|
+
|
|
7
|
+
- Guide pages
|
|
8
|
+
- Navigation
|
|
9
|
+
- Customizations
|
|
10
|
+
- API reference pages
|
|
11
|
+
- Use of popular components
|
|
12
|
+
|
|
13
|
+
**[Follow the full quickstart guide](https://starter.mintlify.com/quickstart)**
|
|
14
|
+
|
|
15
|
+
## Development
|
|
16
|
+
|
|
17
|
+
Install the [Mintlify CLI](https://www.npmjs.com/package/mint) to preview your documentation changes locally. To install, use the following command:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
npm i -g mint
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Run the following command at the root of your documentation, where your `docs.json` is located:
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
mint dev
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
View your local preview at `http://localhost:3000`.
|
|
30
|
+
|
|
31
|
+
## Publishing changes
|
|
32
|
+
|
|
33
|
+
Install our GitHub app from your [dashboard](https://dashboard.mintlify.com/settings/organization/github-app) to propagate changes from your repo to your deployment. Changes are deployed to production automatically after pushing to the default branch.
|
|
34
|
+
|
|
35
|
+
## Need help?
|
|
36
|
+
|
|
37
|
+
### Troubleshooting
|
|
38
|
+
|
|
39
|
+
- If your dev environment isn't running: Run `mint update` to ensure you have the most recent version of the CLI.
|
|
40
|
+
- If a page loads as a 404: Make sure you are running in a folder with a valid `docs.json`.
|
|
41
|
+
|
|
42
|
+
### Resources
|
|
43
|
+
- [Mintlify documentation](https://mintlify.com/docs)
|
|
44
|
+
- [Mintlify community](https://mintlify.com/community)
|