Openstatus www.openstatus.dev

feat: external monitor name (#1640)

* feat: external monitor name

* fix: deps

* fix: tsconfig

* chore: changelog

* chore: minor updates

* chore: default open on first index only

authored by

Maximilian Kaske and committed by
GitHub
ac5561de 9009d550

+2880 -73
+4
apps/dashboard/src/app/(dashboard)/monitors/[id]/sidebar.tsx
··· 32 32 label: "Overview", 33 33 items: [ 34 34 { 35 + label: "External Name", 36 + value: monitor.externalName || monitor.name, 37 + }, 38 + { 35 39 label: "Status", 36 40 // FIXME: dynamic 37 41 value: <span className="text-success">Normal</span>,
+11 -11
apps/dashboard/src/components/forms/monitor/form-status-pages.tsx
··· 34 34 import { toast } from "sonner"; 35 35 import { z } from "zod"; 36 36 37 - // TODO: add custom name for monitor, shown on status page, requires db migration 38 - 39 37 const schema = z.object({ 40 - // name: z.string().optional(), 41 38 description: z.string().optional(), 39 + externalName: z.string().optional(), 42 40 statusPages: z.array(z.number()), 43 41 }); 44 42 ··· 57 55 const form = useForm<FormValues>({ 58 56 resolver: zodResolver(schema), 59 57 defaultValues: defaultValues ?? { 60 - // name: "", 61 58 description: "", 59 + externalName: "", 62 60 statusPages: [], 63 61 }, 64 62 }); ··· 95 93 <FormCardHeader> 96 94 <FormCardTitle>Status Pages</FormCardTitle> 97 95 <FormCardDescription> 98 - Add status pages to your monitor. 96 + Add status pages to your monitor and configure the external name 97 + and description to be shown on the status page. 99 98 </FormCardDescription> 100 99 </FormCardHeader> 101 100 <FormCardContent className="grid gap-4 sm:grid-cols-3"> 102 - {/* <FormField 101 + <FormField 103 102 control={form.control} 104 - name="name" 103 + name="externalName" 105 104 render={({ field }) => ( 106 105 <FormItem className="sm:col-span-2"> 107 - <FormLabel>Name</FormLabel> 106 + <FormLabel>External Name</FormLabel> 108 107 <FormControl> 109 108 <Input placeholder="OpenStatus API" {...field} /> 110 109 </FormControl> 111 110 <FormDescription> 112 - Name on the status page. If not provided, monitor&apos;s 113 - name will be used. 111 + External name on the status page, the feed or subscribers 112 + notifications. If not provided, monitor&apos;s name will be 113 + used. 114 114 </FormDescription> 115 115 <FormMessage /> 116 116 </FormItem> 117 117 )} 118 - /> */} 118 + /> 119 119 <FormField 120 120 control={form.control} 121 121 name="description"
+2
apps/dashboard/src/components/forms/monitor/update.tsx
··· 196 196 defaultValues={{ 197 197 statusPages: monitor.pages.map(({ id }) => id), 198 198 description: monitor.description, 199 + externalName: monitor.externalName ?? "", 199 200 }} 200 201 onSubmit={async (values) => { 201 202 await updateStatusPagesMutation.mutateAsync({ 202 203 id: Number.parseInt(id), 203 204 statusPages: values.statusPages, 204 205 description: values.description, 206 + externalName: values.externalName, 205 207 }); 206 208 }} 207 209 />
+7 -1
apps/dashboard/src/components/forms/status-page/form-monitors.tsx
··· 79 79 type Monitor = { 80 80 id: number; 81 81 name: string; 82 + externalName: string | null; 82 83 url: string; 83 84 active: boolean | null; 84 85 }; ··· 551 552 className="text-muted-foreground" 552 553 /> 553 554 </SortableItemHandle> 554 - <span className="truncate text-sm">{monitor.name}</span> 555 + <span className="truncate text-sm"> 556 + {monitor.name}{" "} 557 + <span className="text-muted-foreground"> 558 + {monitor.externalName ? `(${monitor.externalName})` : ""} 559 + </span> 560 + </span> 555 561 </div> 556 562 <div className="self-center truncate text-muted-foreground text-sm"> 557 563 {monitor.url}
+3 -1
apps/server/src/routes/v1/maintenances/post.ts
··· 142 142 status: "maintenance", 143 143 message: _maintenance.message, 144 144 date: _maintenance.from.toISOString(), 145 - monitors: _page.monitorsToPages.map((i) => i.monitor.name), 145 + monitors: _page.monitorsToPages.map( 146 + (i) => i.monitor.externalName || i.monitor.name, 147 + ), 146 148 }); 147 149 } 148 150 }
+7 -2
apps/server/src/routes/v1/monitors/schema.ts
··· 148 148 description: "Where we should monitor it", 149 149 }), 150 150 name: z.string().openapi({ 151 + example: "documenso-web", 152 + description: "The name of the monitor", 153 + }), 154 + externalName: z.string().nullish().openapi({ 151 155 example: "Documenso", 152 - description: "The name of the monitor", 156 + description: 157 + "The external name of the monitor, used to display on the status page or in the external notifications", 153 158 }), 154 - description: z.string().optional().openapi({ 159 + description: z.string().nullish().openapi({ 155 160 example: "Documenso website", 156 161 description: "The description of your monitor", 157 162 }),
+1 -1
apps/server/src/routes/v1/statusReportUpdates/post.ts
··· 123 123 message: _statusReportUpdate.message, 124 124 date: _statusReportUpdate.date.toISOString(), 125 125 monitors: _statusReport.monitorsToStatusReports.map( 126 - (i) => i.monitor.name, 126 + (i) => i.monitor.externalName || i.monitor.name, 127 127 ), 128 128 }); 129 129 }
+1 -1
apps/server/src/routes/v1/statusReports/post.ts
··· 183 183 message: _newStatusReportUpdate.message, 184 184 date: _newStatusReportUpdate.date.toISOString(), 185 185 monitors: _statusReport.monitorsToStatusReports.map( 186 - (i) => i.monitor.name, 186 + (i) => i.monitor.externalName || i.monitor.name, 187 187 ), 188 188 }); 189 189 }
+1 -1
apps/server/src/routes/v1/statusReports/update/post.ts
··· 124 124 message: _statusReportUpdate.message, 125 125 date: _statusReportUpdate.date.toISOString(), 126 126 monitors: _statusReportWithRelations.monitorsToStatusReports.map( 127 - (monitor) => monitor.monitor.name, 127 + (monitor) => monitor.monitor.externalName || monitor.monitor.name, 128 128 ), 129 129 }); 130 130 }
+8 -1
apps/status-page/src/app/(status-page)/[domain]/(public)/page.tsx
··· 96 96 // REMINDER: if we are using the custom configuration, we need to use the pageWithCustomConfiguration 97 97 const page = pageWithCustomConfiguration ?? pageInitial; 98 98 99 + const firstGroupIndex = useMemo( 100 + () => page.trackers.findIndex((tracker) => tracker.type === "group"), 101 + [page.trackers], 102 + ); 103 + 99 104 return ( 100 105 <div className="flex flex-col gap-6"> 101 106 <Status variant={page.status}> ··· 188 193 {/* NOTE: check what gap feels right */} 189 194 {page.trackers.length > 0 ? ( 190 195 <StatusContent className="gap-5"> 191 - {page.trackers.map((tracker) => { 196 + {page.trackers.map((tracker, index) => { 192 197 if (tracker.type === "monitor") { 193 198 const monitor = tracker.monitor; 194 199 const { data, uptime } = ··· 211 216 key={`group-${tracker.groupId}`} 212 217 title={tracker.groupName} 213 218 status={tracker.status} 219 + // NOTE: we only want to open the first group if it is the first one 220 + defaultOpen={firstGroupIndex === index && index === 0} 214 221 > 215 222 {tracker.monitors.map((monitor) => { 216 223 const { data, uptime } =
+30 -27
apps/status-page/src/app/not-found.tsx
··· 3 3 import Link from "next/link"; 4 4 import { useRouter } from "next/navigation"; 5 5 6 + import { ThemeProvider } from "@/components/themes/theme-provider"; 6 7 import { Button } from "@/components/ui/button"; 7 8 8 9 export default function NotFound() { 9 10 const router = useRouter(); 10 11 11 12 return ( 12 - <main className="flex min-h-screen w-full flex-col space-y-6 bg-background p-4 md:p-8"> 13 - <div className="flex flex-1 flex-col items-center justify-center gap-8"> 14 - <div className="mx-auto max-w-xl border bg-card text-center"> 15 - <div className="flex flex-col gap-4 p-6 sm:p-12"> 16 - <div className="flex flex-col gap-1"> 17 - <p className="font-mono text-foreground">404 Page not found</p> 18 - <h2 className="font-cal text-2xl text-foreground"> 19 - Oops, something went wrong. 20 - </h2> 21 - <p className="text-muted-foreground text-sm sm:text-base"> 22 - The page you are looking for doesn&apos;t exist. 23 - </p> 24 - </div> 25 - <div className="flex flex-col items-center justify-center gap-4 sm:flex-row"> 26 - <Button 27 - variant="outline" 28 - size="lg" 29 - onClick={router.back} 30 - className="cursor-pointer" 31 - > 32 - Go Back 33 - </Button> 34 - <Button size="lg" asChild> 35 - <Link href="/">Home</Link> 36 - </Button> 13 + <ThemeProvider attribute="class" enableSystem disableTransitionOnChange> 14 + <main className="flex min-h-screen w-full flex-col space-y-6 bg-background p-4 md:p-8"> 15 + <div className="flex flex-1 flex-col items-center justify-center gap-8"> 16 + <div className="mx-auto max-w-xl border bg-card text-center"> 17 + <div className="flex flex-col gap-4 p-6 sm:p-12"> 18 + <div className="flex flex-col gap-1"> 19 + <p className="font-mono text-foreground">404 Page not found</p> 20 + <h2 className="font-cal text-2xl text-foreground"> 21 + Oops, something went wrong. 22 + </h2> 23 + <p className="text-muted-foreground text-sm sm:text-base"> 24 + The page you are looking for doesn&apos;t exist. 25 + </p> 26 + </div> 27 + <div className="flex flex-col items-center justify-center gap-4 sm:flex-row"> 28 + <Button 29 + variant="outline" 30 + size="lg" 31 + onClick={router.back} 32 + className="cursor-pointer" 33 + > 34 + Go Back 35 + </Button> 36 + <Button size="lg" asChild> 37 + <Link href="/">Home</Link> 38 + </Button> 39 + </div> 37 40 </div> 38 41 </div> 39 42 </div> 40 - </div> 41 - </main> 43 + </main> 44 + </ThemeProvider> 42 45 ); 43 46 }
+16 -1
apps/status-page/src/components/status-page/status-tracker-group.tsx
··· 1 + "use client"; 2 + 1 3 import { 2 4 Collapsible, 3 5 CollapsibleContent, 4 6 CollapsibleTrigger, 5 7 } from "@/components/ui/collapsible"; 6 8 import { cn } from "@/lib/utils"; 9 + import { useEffect, useState } from "react"; 7 10 import type { VariantType } from "./floating-button"; 8 11 import { StatusMonitorIcon, StatusMonitorStatus } from "./status-monitor"; 9 12 ··· 12 15 title, 13 16 status, 14 17 className, 18 + defaultOpen = false, 15 19 ...props 16 20 }: React.ComponentProps<typeof CollapsibleTrigger> & { 17 21 title: string; 18 22 status?: VariantType; 19 23 children?: React.ReactNode; 24 + defaultOpen?: boolean; 20 25 }) { 26 + const [mounted, setMounted] = useState(false); 27 + 28 + useEffect(() => { 29 + setMounted(true); 30 + }, []); 31 + 21 32 return ( 22 33 <Collapsible 34 + defaultOpen={defaultOpen} 23 35 className={cn( 24 36 "-mx-3", 25 37 "rounded-lg border border-transparent bg-muted/50 hover:border-border/50 data-[state=open]:border-border/50 data-[state=open]:bg-muted/50", ··· 42 54 </div> 43 55 </CollapsibleTrigger> 44 56 <CollapsibleContent 57 + data-animate={mounted} 45 58 className={cn( 46 59 "flex flex-col gap-3 border-border/50 border-t px-3 py-2", 47 - "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down", 60 + "overflow-hidden", 61 + // REMINDER: otherwise, if defaultOpen is true, the animation will be triggered and we have a layout shift 62 + "data-[animate=true]:data-[state=closed]:animate-collapsible-up data-[animate=true]:data-[state=open]:animate-collapsible-down", 48 63 )} 49 64 > 50 65 {children}
+1 -1
apps/status-page/src/components/status-page/status-tracker.tsx
··· 322 322 ) { 323 323 return ( 324 324 <Link 325 - key={event.id} 325 + key={`${event.id}-${event.type}`} 326 326 href={`${prefix ? `/${prefix}` : ""}/events/${ 327 327 event.type 328 328 }/${event.id}`}
apps/web/public/assets/changelog/monitor-external-name.png

This is a binary file and will not be displayed.

+10
apps/web/src/content/pages/changelog/monitor-external-name.mdx
··· 1 + --- 2 + title: "Monitor External Name" 3 + description: "Differentiate between internal and external naming for status page" 4 + image: "/assets/changelog/monitor-external-name.png" 5 + publishedAt: "2025-12-19" 6 + author: "openstatus" 7 + category: "statuspage" 8 + --- 9 + 10 + You can now customize the external name for monitors, which will be displayed on status pages, in reports, and to email subscribers. This allows you to differentiate between internal monitor names and the names shown to your users.
+2 -2
packages/api/src/router/email/index.ts
··· 75 75 date: new Date(_statusReportUpdate.date).toISOString(), 76 76 monitors: 77 77 _statusReportUpdate.statusReport.monitorsToStatusReports.map( 78 - (i) => i.monitor.name, 78 + (i) => i.monitor.externalName || i.monitor.name, 79 79 ), 80 80 }); 81 81 } ··· 121 121 message: _maintenance.message, 122 122 date: new Date(_maintenance.from).toISOString(), 123 123 monitors: _maintenance.maintenancesToMonitors.map( 124 - (i) => i.monitor.name, 124 + (i) => i.monitor.externalName || i.monitor.name, 125 125 ), 126 126 }); 127 127 }
+41 -12
packages/api/src/router/monitor.ts
··· 1202 1202 z.object({ 1203 1203 id: z.number(), 1204 1204 statusPages: z.array(z.number()), 1205 - // TODO: add custom name for monitor, shown on status page, requires db migration 1206 1205 description: z.string().optional(), 1206 + externalName: z.string().optional(), 1207 1207 }), 1208 1208 ) 1209 1209 .mutation(async ({ ctx, input }) => { ··· 1222 1222 } 1223 1223 1224 1224 await ctx.db.transaction(async (tx) => { 1225 - await tx 1226 - .delete(monitorsToPages) 1227 - .where(and(eq(monitorsToPages.monitorId, input.id))); 1225 + // REMINDER: why do we need to do this complex logic instead of just deleting and inserting? 1226 + // Because we need to preserve the group information when updating the status pages. 1227 + 1228 + const existingEntries = await tx.query.monitorsToPages.findMany({ 1229 + where: eq(monitorsToPages.monitorId, input.id), 1230 + }); 1231 + 1232 + const existingPageIds = new Set( 1233 + existingEntries.map((entry) => entry.pageId), 1234 + ); 1235 + const inputPageIds = new Set(input.statusPages); 1236 + 1237 + const pageIdsToDelete = existingEntries 1238 + .filter((entry) => !inputPageIds.has(entry.pageId)) 1239 + .map((entry) => entry.pageId); 1240 + 1241 + const pageIdsToInsert = input.statusPages.filter( 1242 + (pageId) => !existingPageIds.has(pageId), 1243 + ); 1244 + 1245 + if (pageIdsToDelete.length > 0) { 1246 + await tx 1247 + .delete(monitorsToPages) 1248 + .where( 1249 + and( 1250 + eq(monitorsToPages.monitorId, input.id), 1251 + inArray(monitorsToPages.pageId, pageIdsToDelete), 1252 + ), 1253 + ); 1254 + } 1228 1255 1229 - if (input.statusPages.length > 0) { 1256 + if (pageIdsToInsert.length > 0) { 1230 1257 await tx.insert(monitorsToPages).values( 1231 - input.statusPages.map((pageId) => ({ 1258 + pageIdsToInsert.map((pageId) => ({ 1232 1259 monitorId: input.id, 1233 1260 pageId, 1234 1261 })), 1235 1262 ); 1236 1263 } 1237 1264 1238 - if (input.description) { 1239 - await tx 1240 - .update(monitor) 1241 - .set({ description: input.description, updatedAt: new Date() }) 1242 - .where(and(eq(monitor.id, input.id))); 1243 - } 1265 + await tx 1266 + .update(monitor) 1267 + .set({ 1268 + description: input.description, 1269 + externalName: input.externalName, 1270 + updatedAt: new Date(), 1271 + }) 1272 + .where(and(eq(monitor.id, input.id))); 1244 1273 }); 1245 1274 }), 1246 1275
+4 -2
packages/api/src/router/statusPage.ts
··· 7 7 page, 8 8 pageConfigurationSchema, 9 9 pageSubscriber, 10 + selectMaintenancePageSchema, 10 11 selectPublicMonitorSchema, 11 12 selectPublicPageSchemaWithRelation, 13 + selectStatusReportPageSchema, 12 14 selectWorkspaceSchema, 13 15 statusReport, 14 16 } from "@openstatus/db/src/schema"; ··· 345 347 346 348 if (!_maintenance) return null; 347 349 348 - return _maintenance; 350 + return selectMaintenancePageSchema.parse(_maintenance); 349 351 }), 350 352 351 353 getUptime: publicProcedure ··· 561 563 562 564 if (!_report) return null; 563 565 564 - return _report; 566 + return selectStatusReportPageSchema.parse(_report); 565 567 }), 566 568 567 569 getNoopReport: publicProcedure.query(async () => {
+1
packages/db/drizzle/0050_damp_xorn.sql
··· 1 + ALTER TABLE `monitor` ADD `external_name` text;
+2703
packages/db/drizzle/meta/0050_snapshot.json
··· 1 + { 2 + "version": "6", 3 + "dialect": "sqlite", 4 + "id": "d7863fda-51fb-4d7c-b9e6-fd1943ad5d71", 5 + "prevId": "7fd60946-e536-4fb1-863b-877d0d01dcc9", 6 + "tables": { 7 + "workspace": { 8 + "name": "workspace", 9 + "columns": { 10 + "id": { 11 + "name": "id", 12 + "type": "integer", 13 + "primaryKey": true, 14 + "notNull": true, 15 + "autoincrement": false 16 + }, 17 + "slug": { 18 + "name": "slug", 19 + "type": "text", 20 + "primaryKey": false, 21 + "notNull": true, 22 + "autoincrement": false 23 + }, 24 + "name": { 25 + "name": "name", 26 + "type": "text", 27 + "primaryKey": false, 28 + "notNull": false, 29 + "autoincrement": false 30 + }, 31 + "stripe_id": { 32 + "name": "stripe_id", 33 + "type": "text(256)", 34 + "primaryKey": false, 35 + "notNull": false, 36 + "autoincrement": false 37 + }, 38 + "subscription_id": { 39 + "name": "subscription_id", 40 + "type": "text", 41 + "primaryKey": false, 42 + "notNull": false, 43 + "autoincrement": false 44 + }, 45 + "plan": { 46 + "name": "plan", 47 + "type": "text", 48 + "primaryKey": false, 49 + "notNull": false, 50 + "autoincrement": false 51 + }, 52 + "ends_at": { 53 + "name": "ends_at", 54 + "type": "integer", 55 + "primaryKey": false, 56 + "notNull": false, 57 + "autoincrement": false 58 + }, 59 + "paid_until": { 60 + "name": "paid_until", 61 + "type": "integer", 62 + "primaryKey": false, 63 + "notNull": false, 64 + "autoincrement": false 65 + }, 66 + "limits": { 67 + "name": "limits", 68 + "type": "text", 69 + "primaryKey": false, 70 + "notNull": true, 71 + "autoincrement": false, 72 + "default": "'{}'" 73 + }, 74 + "created_at": { 75 + "name": "created_at", 76 + "type": "integer", 77 + "primaryKey": false, 78 + "notNull": false, 79 + "autoincrement": false, 80 + "default": "(strftime('%s', 'now'))" 81 + }, 82 + "updated_at": { 83 + "name": "updated_at", 84 + "type": "integer", 85 + "primaryKey": false, 86 + "notNull": false, 87 + "autoincrement": false, 88 + "default": "(strftime('%s', 'now'))" 89 + }, 90 + "dsn": { 91 + "name": "dsn", 92 + "type": "text", 93 + "primaryKey": false, 94 + "notNull": false, 95 + "autoincrement": false 96 + } 97 + }, 98 + "indexes": { 99 + "workspace_slug_unique": { 100 + "name": "workspace_slug_unique", 101 + "columns": [ 102 + "slug" 103 + ], 104 + "isUnique": true 105 + }, 106 + "workspace_stripe_id_unique": { 107 + "name": "workspace_stripe_id_unique", 108 + "columns": [ 109 + "stripe_id" 110 + ], 111 + "isUnique": true 112 + }, 113 + "workspace_id_dsn_unique": { 114 + "name": "workspace_id_dsn_unique", 115 + "columns": [ 116 + "id", 117 + "dsn" 118 + ], 119 + "isUnique": true 120 + } 121 + }, 122 + "foreignKeys": {}, 123 + "compositePrimaryKeys": {}, 124 + "uniqueConstraints": {}, 125 + "checkConstraints": {} 126 + }, 127 + "account": { 128 + "name": "account", 129 + "columns": { 130 + "user_id": { 131 + "name": "user_id", 132 + "type": "integer", 133 + "primaryKey": false, 134 + "notNull": true, 135 + "autoincrement": false 136 + }, 137 + "type": { 138 + "name": "type", 139 + "type": "text", 140 + "primaryKey": false, 141 + "notNull": true, 142 + "autoincrement": false 143 + }, 144 + "provider": { 145 + "name": "provider", 146 + "type": "text", 147 + "primaryKey": false, 148 + "notNull": true, 149 + "autoincrement": false 150 + }, 151 + "provider_account_id": { 152 + "name": "provider_account_id", 153 + "type": "text", 154 + "primaryKey": false, 155 + "notNull": true, 156 + "autoincrement": false 157 + }, 158 + "refresh_token": { 159 + "name": "refresh_token", 160 + "type": "text", 161 + "primaryKey": false, 162 + "notNull": false, 163 + "autoincrement": false 164 + }, 165 + "access_token": { 166 + "name": "access_token", 167 + "type": "text", 168 + "primaryKey": false, 169 + "notNull": false, 170 + "autoincrement": false 171 + }, 172 + "expires_at": { 173 + "name": "expires_at", 174 + "type": "integer", 175 + "primaryKey": false, 176 + "notNull": false, 177 + "autoincrement": false 178 + }, 179 + "token_type": { 180 + "name": "token_type", 181 + "type": "text", 182 + "primaryKey": false, 183 + "notNull": false, 184 + "autoincrement": false 185 + }, 186 + "scope": { 187 + "name": "scope", 188 + "type": "text", 189 + "primaryKey": false, 190 + "notNull": false, 191 + "autoincrement": false 192 + }, 193 + "id_token": { 194 + "name": "id_token", 195 + "type": "text", 196 + "primaryKey": false, 197 + "notNull": false, 198 + "autoincrement": false 199 + }, 200 + "session_state": { 201 + "name": "session_state", 202 + "type": "text", 203 + "primaryKey": false, 204 + "notNull": false, 205 + "autoincrement": false 206 + } 207 + }, 208 + "indexes": {}, 209 + "foreignKeys": { 210 + "account_user_id_user_id_fk": { 211 + "name": "account_user_id_user_id_fk", 212 + "tableFrom": "account", 213 + "tableTo": "user", 214 + "columnsFrom": [ 215 + "user_id" 216 + ], 217 + "columnsTo": [ 218 + "id" 219 + ], 220 + "onDelete": "cascade", 221 + "onUpdate": "no action" 222 + } 223 + }, 224 + "compositePrimaryKeys": { 225 + "account_provider_provider_account_id_pk": { 226 + "columns": [ 227 + "provider", 228 + "provider_account_id" 229 + ], 230 + "name": "account_provider_provider_account_id_pk" 231 + } 232 + }, 233 + "uniqueConstraints": {}, 234 + "checkConstraints": {} 235 + }, 236 + "session": { 237 + "name": "session", 238 + "columns": { 239 + "session_token": { 240 + "name": "session_token", 241 + "type": "text", 242 + "primaryKey": true, 243 + "notNull": true, 244 + "autoincrement": false 245 + }, 246 + "user_id": { 247 + "name": "user_id", 248 + "type": "integer", 249 + "primaryKey": false, 250 + "notNull": true, 251 + "autoincrement": false 252 + }, 253 + "expires": { 254 + "name": "expires", 255 + "type": "integer", 256 + "primaryKey": false, 257 + "notNull": true, 258 + "autoincrement": false 259 + } 260 + }, 261 + "indexes": {}, 262 + "foreignKeys": { 263 + "session_user_id_user_id_fk": { 264 + "name": "session_user_id_user_id_fk", 265 + "tableFrom": "session", 266 + "tableTo": "user", 267 + "columnsFrom": [ 268 + "user_id" 269 + ], 270 + "columnsTo": [ 271 + "id" 272 + ], 273 + "onDelete": "cascade", 274 + "onUpdate": "no action" 275 + } 276 + }, 277 + "compositePrimaryKeys": {}, 278 + "uniqueConstraints": {}, 279 + "checkConstraints": {} 280 + }, 281 + "user": { 282 + "name": "user", 283 + "columns": { 284 + "id": { 285 + "name": "id", 286 + "type": "integer", 287 + "primaryKey": true, 288 + "notNull": true, 289 + "autoincrement": false 290 + }, 291 + "tenant_id": { 292 + "name": "tenant_id", 293 + "type": "text(256)", 294 + "primaryKey": false, 295 + "notNull": false, 296 + "autoincrement": false 297 + }, 298 + "first_name": { 299 + "name": "first_name", 300 + "type": "text", 301 + "primaryKey": false, 302 + "notNull": false, 303 + "autoincrement": false, 304 + "default": "''" 305 + }, 306 + "last_name": { 307 + "name": "last_name", 308 + "type": "text", 309 + "primaryKey": false, 310 + "notNull": false, 311 + "autoincrement": false, 312 + "default": "''" 313 + }, 314 + "photo_url": { 315 + "name": "photo_url", 316 + "type": "text", 317 + "primaryKey": false, 318 + "notNull": false, 319 + "autoincrement": false, 320 + "default": "''" 321 + }, 322 + "name": { 323 + "name": "name", 324 + "type": "text", 325 + "primaryKey": false, 326 + "notNull": false, 327 + "autoincrement": false 328 + }, 329 + "email": { 330 + "name": "email", 331 + "type": "text", 332 + "primaryKey": false, 333 + "notNull": false, 334 + "autoincrement": false, 335 + "default": "''" 336 + }, 337 + "emailVerified": { 338 + "name": "emailVerified", 339 + "type": "integer", 340 + "primaryKey": false, 341 + "notNull": false, 342 + "autoincrement": false 343 + }, 344 + "created_at": { 345 + "name": "created_at", 346 + "type": "integer", 347 + "primaryKey": false, 348 + "notNull": false, 349 + "autoincrement": false, 350 + "default": "(strftime('%s', 'now'))" 351 + }, 352 + "updated_at": { 353 + "name": "updated_at", 354 + "type": "integer", 355 + "primaryKey": false, 356 + "notNull": false, 357 + "autoincrement": false, 358 + "default": "(strftime('%s', 'now'))" 359 + } 360 + }, 361 + "indexes": { 362 + "user_tenant_id_unique": { 363 + "name": "user_tenant_id_unique", 364 + "columns": [ 365 + "tenant_id" 366 + ], 367 + "isUnique": true 368 + } 369 + }, 370 + "foreignKeys": {}, 371 + "compositePrimaryKeys": {}, 372 + "uniqueConstraints": {}, 373 + "checkConstraints": {} 374 + }, 375 + "users_to_workspaces": { 376 + "name": "users_to_workspaces", 377 + "columns": { 378 + "user_id": { 379 + "name": "user_id", 380 + "type": "integer", 381 + "primaryKey": false, 382 + "notNull": true, 383 + "autoincrement": false 384 + }, 385 + "workspace_id": { 386 + "name": "workspace_id", 387 + "type": "integer", 388 + "primaryKey": false, 389 + "notNull": true, 390 + "autoincrement": false 391 + }, 392 + "role": { 393 + "name": "role", 394 + "type": "text", 395 + "primaryKey": false, 396 + "notNull": true, 397 + "autoincrement": false, 398 + "default": "'member'" 399 + }, 400 + "created_at": { 401 + "name": "created_at", 402 + "type": "integer", 403 + "primaryKey": false, 404 + "notNull": false, 405 + "autoincrement": false, 406 + "default": "(strftime('%s', 'now'))" 407 + } 408 + }, 409 + "indexes": {}, 410 + "foreignKeys": { 411 + "users_to_workspaces_user_id_user_id_fk": { 412 + "name": "users_to_workspaces_user_id_user_id_fk", 413 + "tableFrom": "users_to_workspaces", 414 + "tableTo": "user", 415 + "columnsFrom": [ 416 + "user_id" 417 + ], 418 + "columnsTo": [ 419 + "id" 420 + ], 421 + "onDelete": "no action", 422 + "onUpdate": "no action" 423 + }, 424 + "users_to_workspaces_workspace_id_workspace_id_fk": { 425 + "name": "users_to_workspaces_workspace_id_workspace_id_fk", 426 + "tableFrom": "users_to_workspaces", 427 + "tableTo": "workspace", 428 + "columnsFrom": [ 429 + "workspace_id" 430 + ], 431 + "columnsTo": [ 432 + "id" 433 + ], 434 + "onDelete": "no action", 435 + "onUpdate": "no action" 436 + } 437 + }, 438 + "compositePrimaryKeys": { 439 + "users_to_workspaces_user_id_workspace_id_pk": { 440 + "columns": [ 441 + "user_id", 442 + "workspace_id" 443 + ], 444 + "name": "users_to_workspaces_user_id_workspace_id_pk" 445 + } 446 + }, 447 + "uniqueConstraints": {}, 448 + "checkConstraints": {} 449 + }, 450 + "verification_token": { 451 + "name": "verification_token", 452 + "columns": { 453 + "identifier": { 454 + "name": "identifier", 455 + "type": "text", 456 + "primaryKey": false, 457 + "notNull": true, 458 + "autoincrement": false 459 + }, 460 + "token": { 461 + "name": "token", 462 + "type": "text", 463 + "primaryKey": false, 464 + "notNull": true, 465 + "autoincrement": false 466 + }, 467 + "expires": { 468 + "name": "expires", 469 + "type": "integer", 470 + "primaryKey": false, 471 + "notNull": true, 472 + "autoincrement": false 473 + } 474 + }, 475 + "indexes": {}, 476 + "foreignKeys": {}, 477 + "compositePrimaryKeys": { 478 + "verification_token_identifier_token_pk": { 479 + "columns": [ 480 + "identifier", 481 + "token" 482 + ], 483 + "name": "verification_token_identifier_token_pk" 484 + } 485 + }, 486 + "uniqueConstraints": {}, 487 + "checkConstraints": {} 488 + }, 489 + "status_report_to_monitors": { 490 + "name": "status_report_to_monitors", 491 + "columns": { 492 + "monitor_id": { 493 + "name": "monitor_id", 494 + "type": "integer", 495 + "primaryKey": false, 496 + "notNull": true, 497 + "autoincrement": false 498 + }, 499 + "status_report_id": { 500 + "name": "status_report_id", 501 + "type": "integer", 502 + "primaryKey": false, 503 + "notNull": true, 504 + "autoincrement": false 505 + }, 506 + "created_at": { 507 + "name": "created_at", 508 + "type": "integer", 509 + "primaryKey": false, 510 + "notNull": false, 511 + "autoincrement": false, 512 + "default": "(strftime('%s', 'now'))" 513 + } 514 + }, 515 + "indexes": {}, 516 + "foreignKeys": { 517 + "status_report_to_monitors_monitor_id_monitor_id_fk": { 518 + "name": "status_report_to_monitors_monitor_id_monitor_id_fk", 519 + "tableFrom": "status_report_to_monitors", 520 + "tableTo": "monitor", 521 + "columnsFrom": [ 522 + "monitor_id" 523 + ], 524 + "columnsTo": [ 525 + "id" 526 + ], 527 + "onDelete": "cascade", 528 + "onUpdate": "no action" 529 + }, 530 + "status_report_to_monitors_status_report_id_status_report_id_fk": { 531 + "name": "status_report_to_monitors_status_report_id_status_report_id_fk", 532 + "tableFrom": "status_report_to_monitors", 533 + "tableTo": "status_report", 534 + "columnsFrom": [ 535 + "status_report_id" 536 + ], 537 + "columnsTo": [ 538 + "id" 539 + ], 540 + "onDelete": "cascade", 541 + "onUpdate": "no action" 542 + } 543 + }, 544 + "compositePrimaryKeys": { 545 + "status_report_to_monitors_monitor_id_status_report_id_pk": { 546 + "columns": [ 547 + "monitor_id", 548 + "status_report_id" 549 + ], 550 + "name": "status_report_to_monitors_monitor_id_status_report_id_pk" 551 + } 552 + }, 553 + "uniqueConstraints": {}, 554 + "checkConstraints": {} 555 + }, 556 + "status_report": { 557 + "name": "status_report", 558 + "columns": { 559 + "id": { 560 + "name": "id", 561 + "type": "integer", 562 + "primaryKey": true, 563 + "notNull": true, 564 + "autoincrement": false 565 + }, 566 + "status": { 567 + "name": "status", 568 + "type": "text", 569 + "primaryKey": false, 570 + "notNull": true, 571 + "autoincrement": false 572 + }, 573 + "title": { 574 + "name": "title", 575 + "type": "text(256)", 576 + "primaryKey": false, 577 + "notNull": true, 578 + "autoincrement": false 579 + }, 580 + "workspace_id": { 581 + "name": "workspace_id", 582 + "type": "integer", 583 + "primaryKey": false, 584 + "notNull": false, 585 + "autoincrement": false 586 + }, 587 + "page_id": { 588 + "name": "page_id", 589 + "type": "integer", 590 + "primaryKey": false, 591 + "notNull": false, 592 + "autoincrement": false 593 + }, 594 + "created_at": { 595 + "name": "created_at", 596 + "type": "integer", 597 + "primaryKey": false, 598 + "notNull": false, 599 + "autoincrement": false, 600 + "default": "(strftime('%s', 'now'))" 601 + }, 602 + "updated_at": { 603 + "name": "updated_at", 604 + "type": "integer", 605 + "primaryKey": false, 606 + "notNull": false, 607 + "autoincrement": false, 608 + "default": "(strftime('%s', 'now'))" 609 + } 610 + }, 611 + "indexes": {}, 612 + "foreignKeys": { 613 + "status_report_workspace_id_workspace_id_fk": { 614 + "name": "status_report_workspace_id_workspace_id_fk", 615 + "tableFrom": "status_report", 616 + "tableTo": "workspace", 617 + "columnsFrom": [ 618 + "workspace_id" 619 + ], 620 + "columnsTo": [ 621 + "id" 622 + ], 623 + "onDelete": "no action", 624 + "onUpdate": "no action" 625 + }, 626 + "status_report_page_id_page_id_fk": { 627 + "name": "status_report_page_id_page_id_fk", 628 + "tableFrom": "status_report", 629 + "tableTo": "page", 630 + "columnsFrom": [ 631 + "page_id" 632 + ], 633 + "columnsTo": [ 634 + "id" 635 + ], 636 + "onDelete": "cascade", 637 + "onUpdate": "no action" 638 + } 639 + }, 640 + "compositePrimaryKeys": {}, 641 + "uniqueConstraints": {}, 642 + "checkConstraints": {} 643 + }, 644 + "status_report_update": { 645 + "name": "status_report_update", 646 + "columns": { 647 + "id": { 648 + "name": "id", 649 + "type": "integer", 650 + "primaryKey": true, 651 + "notNull": true, 652 + "autoincrement": false 653 + }, 654 + "status": { 655 + "name": "status", 656 + "type": "text", 657 + "primaryKey": false, 658 + "notNull": true, 659 + "autoincrement": false 660 + }, 661 + "date": { 662 + "name": "date", 663 + "type": "integer", 664 + "primaryKey": false, 665 + "notNull": true, 666 + "autoincrement": false 667 + }, 668 + "message": { 669 + "name": "message", 670 + "type": "text", 671 + "primaryKey": false, 672 + "notNull": true, 673 + "autoincrement": false 674 + }, 675 + "status_report_id": { 676 + "name": "status_report_id", 677 + "type": "integer", 678 + "primaryKey": false, 679 + "notNull": true, 680 + "autoincrement": false 681 + }, 682 + "created_at": { 683 + "name": "created_at", 684 + "type": "integer", 685 + "primaryKey": false, 686 + "notNull": false, 687 + "autoincrement": false, 688 + "default": "(strftime('%s', 'now'))" 689 + }, 690 + "updated_at": { 691 + "name": "updated_at", 692 + "type": "integer", 693 + "primaryKey": false, 694 + "notNull": false, 695 + "autoincrement": false, 696 + "default": "(strftime('%s', 'now'))" 697 + } 698 + }, 699 + "indexes": {}, 700 + "foreignKeys": { 701 + "status_report_update_status_report_id_status_report_id_fk": { 702 + "name": "status_report_update_status_report_id_status_report_id_fk", 703 + "tableFrom": "status_report_update", 704 + "tableTo": "status_report", 705 + "columnsFrom": [ 706 + "status_report_id" 707 + ], 708 + "columnsTo": [ 709 + "id" 710 + ], 711 + "onDelete": "cascade", 712 + "onUpdate": "no action" 713 + } 714 + }, 715 + "compositePrimaryKeys": {}, 716 + "uniqueConstraints": {}, 717 + "checkConstraints": {} 718 + }, 719 + "integration": { 720 + "name": "integration", 721 + "columns": { 722 + "id": { 723 + "name": "id", 724 + "type": "integer", 725 + "primaryKey": true, 726 + "notNull": true, 727 + "autoincrement": false 728 + }, 729 + "name": { 730 + "name": "name", 731 + "type": "text(256)", 732 + "primaryKey": false, 733 + "notNull": true, 734 + "autoincrement": false 735 + }, 736 + "workspace_id": { 737 + "name": "workspace_id", 738 + "type": "integer", 739 + "primaryKey": false, 740 + "notNull": false, 741 + "autoincrement": false 742 + }, 743 + "credential": { 744 + "name": "credential", 745 + "type": "text", 746 + "primaryKey": false, 747 + "notNull": false, 748 + "autoincrement": false 749 + }, 750 + "external_id": { 751 + "name": "external_id", 752 + "type": "text", 753 + "primaryKey": false, 754 + "notNull": true, 755 + "autoincrement": false 756 + }, 757 + "created_at": { 758 + "name": "created_at", 759 + "type": "integer", 760 + "primaryKey": false, 761 + "notNull": false, 762 + "autoincrement": false, 763 + "default": "(strftime('%s', 'now'))" 764 + }, 765 + "updated_at": { 766 + "name": "updated_at", 767 + "type": "integer", 768 + "primaryKey": false, 769 + "notNull": false, 770 + "autoincrement": false, 771 + "default": "(strftime('%s', 'now'))" 772 + }, 773 + "data": { 774 + "name": "data", 775 + "type": "text", 776 + "primaryKey": false, 777 + "notNull": true, 778 + "autoincrement": false 779 + } 780 + }, 781 + "indexes": {}, 782 + "foreignKeys": { 783 + "integration_workspace_id_workspace_id_fk": { 784 + "name": "integration_workspace_id_workspace_id_fk", 785 + "tableFrom": "integration", 786 + "tableTo": "workspace", 787 + "columnsFrom": [ 788 + "workspace_id" 789 + ], 790 + "columnsTo": [ 791 + "id" 792 + ], 793 + "onDelete": "no action", 794 + "onUpdate": "no action" 795 + } 796 + }, 797 + "compositePrimaryKeys": {}, 798 + "uniqueConstraints": {}, 799 + "checkConstraints": {} 800 + }, 801 + "page": { 802 + "name": "page", 803 + "columns": { 804 + "id": { 805 + "name": "id", 806 + "type": "integer", 807 + "primaryKey": true, 808 + "notNull": true, 809 + "autoincrement": false 810 + }, 811 + "workspace_id": { 812 + "name": "workspace_id", 813 + "type": "integer", 814 + "primaryKey": false, 815 + "notNull": true, 816 + "autoincrement": false 817 + }, 818 + "title": { 819 + "name": "title", 820 + "type": "text", 821 + "primaryKey": false, 822 + "notNull": true, 823 + "autoincrement": false 824 + }, 825 + "description": { 826 + "name": "description", 827 + "type": "text", 828 + "primaryKey": false, 829 + "notNull": true, 830 + "autoincrement": false 831 + }, 832 + "icon": { 833 + "name": "icon", 834 + "type": "text(256)", 835 + "primaryKey": false, 836 + "notNull": false, 837 + "autoincrement": false, 838 + "default": "''" 839 + }, 840 + "slug": { 841 + "name": "slug", 842 + "type": "text(256)", 843 + "primaryKey": false, 844 + "notNull": true, 845 + "autoincrement": false 846 + }, 847 + "custom_domain": { 848 + "name": "custom_domain", 849 + "type": "text(256)", 850 + "primaryKey": false, 851 + "notNull": true, 852 + "autoincrement": false 853 + }, 854 + "published": { 855 + "name": "published", 856 + "type": "integer", 857 + "primaryKey": false, 858 + "notNull": false, 859 + "autoincrement": false, 860 + "default": false 861 + }, 862 + "force_theme": { 863 + "name": "force_theme", 864 + "type": "text", 865 + "primaryKey": false, 866 + "notNull": true, 867 + "autoincrement": false, 868 + "default": "'system'" 869 + }, 870 + "password": { 871 + "name": "password", 872 + "type": "text(256)", 873 + "primaryKey": false, 874 + "notNull": false, 875 + "autoincrement": false 876 + }, 877 + "password_protected": { 878 + "name": "password_protected", 879 + "type": "integer", 880 + "primaryKey": false, 881 + "notNull": false, 882 + "autoincrement": false, 883 + "default": false 884 + }, 885 + "homepage_url": { 886 + "name": "homepage_url", 887 + "type": "text(256)", 888 + "primaryKey": false, 889 + "notNull": false, 890 + "autoincrement": false 891 + }, 892 + "contact_url": { 893 + "name": "contact_url", 894 + "type": "text(256)", 895 + "primaryKey": false, 896 + "notNull": false, 897 + "autoincrement": false 898 + }, 899 + "legacy_page": { 900 + "name": "legacy_page", 901 + "type": "integer", 902 + "primaryKey": false, 903 + "notNull": true, 904 + "autoincrement": false, 905 + "default": true 906 + }, 907 + "configuration": { 908 + "name": "configuration", 909 + "type": "text", 910 + "primaryKey": false, 911 + "notNull": false, 912 + "autoincrement": false 913 + }, 914 + "show_monitor_values": { 915 + "name": "show_monitor_values", 916 + "type": "integer", 917 + "primaryKey": false, 918 + "notNull": false, 919 + "autoincrement": false, 920 + "default": true 921 + }, 922 + "created_at": { 923 + "name": "created_at", 924 + "type": "integer", 925 + "primaryKey": false, 926 + "notNull": false, 927 + "autoincrement": false, 928 + "default": "(strftime('%s', 'now'))" 929 + }, 930 + "updated_at": { 931 + "name": "updated_at", 932 + "type": "integer", 933 + "primaryKey": false, 934 + "notNull": false, 935 + "autoincrement": false, 936 + "default": "(strftime('%s', 'now'))" 937 + } 938 + }, 939 + "indexes": { 940 + "page_slug_unique": { 941 + "name": "page_slug_unique", 942 + "columns": [ 943 + "slug" 944 + ], 945 + "isUnique": true 946 + } 947 + }, 948 + "foreignKeys": { 949 + "page_workspace_id_workspace_id_fk": { 950 + "name": "page_workspace_id_workspace_id_fk", 951 + "tableFrom": "page", 952 + "tableTo": "workspace", 953 + "columnsFrom": [ 954 + "workspace_id" 955 + ], 956 + "columnsTo": [ 957 + "id" 958 + ], 959 + "onDelete": "cascade", 960 + "onUpdate": "no action" 961 + } 962 + }, 963 + "compositePrimaryKeys": {}, 964 + "uniqueConstraints": {}, 965 + "checkConstraints": {} 966 + }, 967 + "monitor": { 968 + "name": "monitor", 969 + "columns": { 970 + "id": { 971 + "name": "id", 972 + "type": "integer", 973 + "primaryKey": true, 974 + "notNull": true, 975 + "autoincrement": false 976 + }, 977 + "job_type": { 978 + "name": "job_type", 979 + "type": "text", 980 + "primaryKey": false, 981 + "notNull": true, 982 + "autoincrement": false, 983 + "default": "'http'" 984 + }, 985 + "periodicity": { 986 + "name": "periodicity", 987 + "type": "text", 988 + "primaryKey": false, 989 + "notNull": true, 990 + "autoincrement": false, 991 + "default": "'other'" 992 + }, 993 + "status": { 994 + "name": "status", 995 + "type": "text", 996 + "primaryKey": false, 997 + "notNull": true, 998 + "autoincrement": false, 999 + "default": "'active'" 1000 + }, 1001 + "active": { 1002 + "name": "active", 1003 + "type": "integer", 1004 + "primaryKey": false, 1005 + "notNull": false, 1006 + "autoincrement": false, 1007 + "default": false 1008 + }, 1009 + "regions": { 1010 + "name": "regions", 1011 + "type": "text", 1012 + "primaryKey": false, 1013 + "notNull": true, 1014 + "autoincrement": false, 1015 + "default": "''" 1016 + }, 1017 + "url": { 1018 + "name": "url", 1019 + "type": "text(2048)", 1020 + "primaryKey": false, 1021 + "notNull": true, 1022 + "autoincrement": false 1023 + }, 1024 + "name": { 1025 + "name": "name", 1026 + "type": "text(256)", 1027 + "primaryKey": false, 1028 + "notNull": true, 1029 + "autoincrement": false, 1030 + "default": "''" 1031 + }, 1032 + "external_name": { 1033 + "name": "external_name", 1034 + "type": "text", 1035 + "primaryKey": false, 1036 + "notNull": false, 1037 + "autoincrement": false 1038 + }, 1039 + "description": { 1040 + "name": "description", 1041 + "type": "text", 1042 + "primaryKey": false, 1043 + "notNull": true, 1044 + "autoincrement": false, 1045 + "default": "''" 1046 + }, 1047 + "headers": { 1048 + "name": "headers", 1049 + "type": "text", 1050 + "primaryKey": false, 1051 + "notNull": false, 1052 + "autoincrement": false, 1053 + "default": "''" 1054 + }, 1055 + "body": { 1056 + "name": "body", 1057 + "type": "text", 1058 + "primaryKey": false, 1059 + "notNull": false, 1060 + "autoincrement": false, 1061 + "default": "''" 1062 + }, 1063 + "method": { 1064 + "name": "method", 1065 + "type": "text", 1066 + "primaryKey": false, 1067 + "notNull": false, 1068 + "autoincrement": false, 1069 + "default": "'GET'" 1070 + }, 1071 + "workspace_id": { 1072 + "name": "workspace_id", 1073 + "type": "integer", 1074 + "primaryKey": false, 1075 + "notNull": false, 1076 + "autoincrement": false 1077 + }, 1078 + "timeout": { 1079 + "name": "timeout", 1080 + "type": "integer", 1081 + "primaryKey": false, 1082 + "notNull": true, 1083 + "autoincrement": false, 1084 + "default": 45000 1085 + }, 1086 + "degraded_after": { 1087 + "name": "degraded_after", 1088 + "type": "integer", 1089 + "primaryKey": false, 1090 + "notNull": false, 1091 + "autoincrement": false 1092 + }, 1093 + "assertions": { 1094 + "name": "assertions", 1095 + "type": "text", 1096 + "primaryKey": false, 1097 + "notNull": false, 1098 + "autoincrement": false 1099 + }, 1100 + "otel_endpoint": { 1101 + "name": "otel_endpoint", 1102 + "type": "text", 1103 + "primaryKey": false, 1104 + "notNull": false, 1105 + "autoincrement": false 1106 + }, 1107 + "otel_headers": { 1108 + "name": "otel_headers", 1109 + "type": "text", 1110 + "primaryKey": false, 1111 + "notNull": false, 1112 + "autoincrement": false 1113 + }, 1114 + "public": { 1115 + "name": "public", 1116 + "type": "integer", 1117 + "primaryKey": false, 1118 + "notNull": false, 1119 + "autoincrement": false, 1120 + "default": false 1121 + }, 1122 + "retry": { 1123 + "name": "retry", 1124 + "type": "integer", 1125 + "primaryKey": false, 1126 + "notNull": false, 1127 + "autoincrement": false, 1128 + "default": 3 1129 + }, 1130 + "follow_redirects": { 1131 + "name": "follow_redirects", 1132 + "type": "integer", 1133 + "primaryKey": false, 1134 + "notNull": false, 1135 + "autoincrement": false, 1136 + "default": true 1137 + }, 1138 + "created_at": { 1139 + "name": "created_at", 1140 + "type": "integer", 1141 + "primaryKey": false, 1142 + "notNull": false, 1143 + "autoincrement": false, 1144 + "default": "(strftime('%s', 'now'))" 1145 + }, 1146 + "updated_at": { 1147 + "name": "updated_at", 1148 + "type": "integer", 1149 + "primaryKey": false, 1150 + "notNull": false, 1151 + "autoincrement": false, 1152 + "default": "(strftime('%s', 'now'))" 1153 + }, 1154 + "deleted_at": { 1155 + "name": "deleted_at", 1156 + "type": "integer", 1157 + "primaryKey": false, 1158 + "notNull": false, 1159 + "autoincrement": false 1160 + } 1161 + }, 1162 + "indexes": {}, 1163 + "foreignKeys": { 1164 + "monitor_workspace_id_workspace_id_fk": { 1165 + "name": "monitor_workspace_id_workspace_id_fk", 1166 + "tableFrom": "monitor", 1167 + "tableTo": "workspace", 1168 + "columnsFrom": [ 1169 + "workspace_id" 1170 + ], 1171 + "columnsTo": [ 1172 + "id" 1173 + ], 1174 + "onDelete": "no action", 1175 + "onUpdate": "no action" 1176 + } 1177 + }, 1178 + "compositePrimaryKeys": {}, 1179 + "uniqueConstraints": {}, 1180 + "checkConstraints": {} 1181 + }, 1182 + "monitors_to_pages": { 1183 + "name": "monitors_to_pages", 1184 + "columns": { 1185 + "monitor_id": { 1186 + "name": "monitor_id", 1187 + "type": "integer", 1188 + "primaryKey": false, 1189 + "notNull": true, 1190 + "autoincrement": false 1191 + }, 1192 + "page_id": { 1193 + "name": "page_id", 1194 + "type": "integer", 1195 + "primaryKey": false, 1196 + "notNull": true, 1197 + "autoincrement": false 1198 + }, 1199 + "created_at": { 1200 + "name": "created_at", 1201 + "type": "integer", 1202 + "primaryKey": false, 1203 + "notNull": false, 1204 + "autoincrement": false, 1205 + "default": "(strftime('%s', 'now'))" 1206 + }, 1207 + "order": { 1208 + "name": "order", 1209 + "type": "integer", 1210 + "primaryKey": false, 1211 + "notNull": false, 1212 + "autoincrement": false, 1213 + "default": 0 1214 + }, 1215 + "monitor_group_id": { 1216 + "name": "monitor_group_id", 1217 + "type": "integer", 1218 + "primaryKey": false, 1219 + "notNull": false, 1220 + "autoincrement": false 1221 + }, 1222 + "group_order": { 1223 + "name": "group_order", 1224 + "type": "integer", 1225 + "primaryKey": false, 1226 + "notNull": false, 1227 + "autoincrement": false, 1228 + "default": 0 1229 + } 1230 + }, 1231 + "indexes": {}, 1232 + "foreignKeys": { 1233 + "monitors_to_pages_monitor_id_monitor_id_fk": { 1234 + "name": "monitors_to_pages_monitor_id_monitor_id_fk", 1235 + "tableFrom": "monitors_to_pages", 1236 + "tableTo": "monitor", 1237 + "columnsFrom": [ 1238 + "monitor_id" 1239 + ], 1240 + "columnsTo": [ 1241 + "id" 1242 + ], 1243 + "onDelete": "cascade", 1244 + "onUpdate": "no action" 1245 + }, 1246 + "monitors_to_pages_page_id_page_id_fk": { 1247 + "name": "monitors_to_pages_page_id_page_id_fk", 1248 + "tableFrom": "monitors_to_pages", 1249 + "tableTo": "page", 1250 + "columnsFrom": [ 1251 + "page_id" 1252 + ], 1253 + "columnsTo": [ 1254 + "id" 1255 + ], 1256 + "onDelete": "cascade", 1257 + "onUpdate": "no action" 1258 + }, 1259 + "monitors_to_pages_monitor_group_id_monitor_group_id_fk": { 1260 + "name": "monitors_to_pages_monitor_group_id_monitor_group_id_fk", 1261 + "tableFrom": "monitors_to_pages", 1262 + "tableTo": "monitor_group", 1263 + "columnsFrom": [ 1264 + "monitor_group_id" 1265 + ], 1266 + "columnsTo": [ 1267 + "id" 1268 + ], 1269 + "onDelete": "cascade", 1270 + "onUpdate": "no action" 1271 + } 1272 + }, 1273 + "compositePrimaryKeys": { 1274 + "monitors_to_pages_monitor_id_page_id_pk": { 1275 + "columns": [ 1276 + "monitor_id", 1277 + "page_id" 1278 + ], 1279 + "name": "monitors_to_pages_monitor_id_page_id_pk" 1280 + } 1281 + }, 1282 + "uniqueConstraints": {}, 1283 + "checkConstraints": {} 1284 + }, 1285 + "page_subscriber": { 1286 + "name": "page_subscriber", 1287 + "columns": { 1288 + "id": { 1289 + "name": "id", 1290 + "type": "integer", 1291 + "primaryKey": true, 1292 + "notNull": true, 1293 + "autoincrement": false 1294 + }, 1295 + "email": { 1296 + "name": "email", 1297 + "type": "text", 1298 + "primaryKey": false, 1299 + "notNull": true, 1300 + "autoincrement": false 1301 + }, 1302 + "page_id": { 1303 + "name": "page_id", 1304 + "type": "integer", 1305 + "primaryKey": false, 1306 + "notNull": true, 1307 + "autoincrement": false 1308 + }, 1309 + "token": { 1310 + "name": "token", 1311 + "type": "text", 1312 + "primaryKey": false, 1313 + "notNull": false, 1314 + "autoincrement": false 1315 + }, 1316 + "accepted_at": { 1317 + "name": "accepted_at", 1318 + "type": "integer", 1319 + "primaryKey": false, 1320 + "notNull": false, 1321 + "autoincrement": false 1322 + }, 1323 + "expires_at": { 1324 + "name": "expires_at", 1325 + "type": "integer", 1326 + "primaryKey": false, 1327 + "notNull": false, 1328 + "autoincrement": false 1329 + }, 1330 + "created_at": { 1331 + "name": "created_at", 1332 + "type": "integer", 1333 + "primaryKey": false, 1334 + "notNull": false, 1335 + "autoincrement": false, 1336 + "default": "(strftime('%s', 'now'))" 1337 + }, 1338 + "updated_at": { 1339 + "name": "updated_at", 1340 + "type": "integer", 1341 + "primaryKey": false, 1342 + "notNull": false, 1343 + "autoincrement": false, 1344 + "default": "(strftime('%s', 'now'))" 1345 + } 1346 + }, 1347 + "indexes": {}, 1348 + "foreignKeys": { 1349 + "page_subscriber_page_id_page_id_fk": { 1350 + "name": "page_subscriber_page_id_page_id_fk", 1351 + "tableFrom": "page_subscriber", 1352 + "tableTo": "page", 1353 + "columnsFrom": [ 1354 + "page_id" 1355 + ], 1356 + "columnsTo": [ 1357 + "id" 1358 + ], 1359 + "onDelete": "cascade", 1360 + "onUpdate": "no action" 1361 + } 1362 + }, 1363 + "compositePrimaryKeys": {}, 1364 + "uniqueConstraints": {}, 1365 + "checkConstraints": {} 1366 + }, 1367 + "notification": { 1368 + "name": "notification", 1369 + "columns": { 1370 + "id": { 1371 + "name": "id", 1372 + "type": "integer", 1373 + "primaryKey": true, 1374 + "notNull": true, 1375 + "autoincrement": false 1376 + }, 1377 + "name": { 1378 + "name": "name", 1379 + "type": "text", 1380 + "primaryKey": false, 1381 + "notNull": true, 1382 + "autoincrement": false 1383 + }, 1384 + "provider": { 1385 + "name": "provider", 1386 + "type": "text", 1387 + "primaryKey": false, 1388 + "notNull": true, 1389 + "autoincrement": false 1390 + }, 1391 + "data": { 1392 + "name": "data", 1393 + "type": "text", 1394 + "primaryKey": false, 1395 + "notNull": false, 1396 + "autoincrement": false, 1397 + "default": "'{}'" 1398 + }, 1399 + "workspace_id": { 1400 + "name": "workspace_id", 1401 + "type": "integer", 1402 + "primaryKey": false, 1403 + "notNull": false, 1404 + "autoincrement": false 1405 + }, 1406 + "created_at": { 1407 + "name": "created_at", 1408 + "type": "integer", 1409 + "primaryKey": false, 1410 + "notNull": false, 1411 + "autoincrement": false, 1412 + "default": "(strftime('%s', 'now'))" 1413 + }, 1414 + "updated_at": { 1415 + "name": "updated_at", 1416 + "type": "integer", 1417 + "primaryKey": false, 1418 + "notNull": false, 1419 + "autoincrement": false, 1420 + "default": "(strftime('%s', 'now'))" 1421 + } 1422 + }, 1423 + "indexes": {}, 1424 + "foreignKeys": { 1425 + "notification_workspace_id_workspace_id_fk": { 1426 + "name": "notification_workspace_id_workspace_id_fk", 1427 + "tableFrom": "notification", 1428 + "tableTo": "workspace", 1429 + "columnsFrom": [ 1430 + "workspace_id" 1431 + ], 1432 + "columnsTo": [ 1433 + "id" 1434 + ], 1435 + "onDelete": "no action", 1436 + "onUpdate": "no action" 1437 + } 1438 + }, 1439 + "compositePrimaryKeys": {}, 1440 + "uniqueConstraints": {}, 1441 + "checkConstraints": {} 1442 + }, 1443 + "notification_trigger": { 1444 + "name": "notification_trigger", 1445 + "columns": { 1446 + "id": { 1447 + "name": "id", 1448 + "type": "integer", 1449 + "primaryKey": true, 1450 + "notNull": true, 1451 + "autoincrement": false 1452 + }, 1453 + "monitor_id": { 1454 + "name": "monitor_id", 1455 + "type": "integer", 1456 + "primaryKey": false, 1457 + "notNull": false, 1458 + "autoincrement": false 1459 + }, 1460 + "notification_id": { 1461 + "name": "notification_id", 1462 + "type": "integer", 1463 + "primaryKey": false, 1464 + "notNull": false, 1465 + "autoincrement": false 1466 + }, 1467 + "cron_timestamp": { 1468 + "name": "cron_timestamp", 1469 + "type": "integer", 1470 + "primaryKey": false, 1471 + "notNull": true, 1472 + "autoincrement": false 1473 + } 1474 + }, 1475 + "indexes": { 1476 + "notification_id_monitor_id_crontimestampe": { 1477 + "name": "notification_id_monitor_id_crontimestampe", 1478 + "columns": [ 1479 + "notification_id", 1480 + "monitor_id", 1481 + "cron_timestamp" 1482 + ], 1483 + "isUnique": true 1484 + } 1485 + }, 1486 + "foreignKeys": { 1487 + "notification_trigger_monitor_id_monitor_id_fk": { 1488 + "name": "notification_trigger_monitor_id_monitor_id_fk", 1489 + "tableFrom": "notification_trigger", 1490 + "tableTo": "monitor", 1491 + "columnsFrom": [ 1492 + "monitor_id" 1493 + ], 1494 + "columnsTo": [ 1495 + "id" 1496 + ], 1497 + "onDelete": "cascade", 1498 + "onUpdate": "no action" 1499 + }, 1500 + "notification_trigger_notification_id_notification_id_fk": { 1501 + "name": "notification_trigger_notification_id_notification_id_fk", 1502 + "tableFrom": "notification_trigger", 1503 + "tableTo": "notification", 1504 + "columnsFrom": [ 1505 + "notification_id" 1506 + ], 1507 + "columnsTo": [ 1508 + "id" 1509 + ], 1510 + "onDelete": "cascade", 1511 + "onUpdate": "no action" 1512 + } 1513 + }, 1514 + "compositePrimaryKeys": {}, 1515 + "uniqueConstraints": {}, 1516 + "checkConstraints": {} 1517 + }, 1518 + "notifications_to_monitors": { 1519 + "name": "notifications_to_monitors", 1520 + "columns": { 1521 + "monitor_id": { 1522 + "name": "monitor_id", 1523 + "type": "integer", 1524 + "primaryKey": false, 1525 + "notNull": true, 1526 + "autoincrement": false 1527 + }, 1528 + "notification_id": { 1529 + "name": "notification_id", 1530 + "type": "integer", 1531 + "primaryKey": false, 1532 + "notNull": true, 1533 + "autoincrement": false 1534 + }, 1535 + "created_at": { 1536 + "name": "created_at", 1537 + "type": "integer", 1538 + "primaryKey": false, 1539 + "notNull": false, 1540 + "autoincrement": false, 1541 + "default": "(strftime('%s', 'now'))" 1542 + } 1543 + }, 1544 + "indexes": {}, 1545 + "foreignKeys": { 1546 + "notifications_to_monitors_monitor_id_monitor_id_fk": { 1547 + "name": "notifications_to_monitors_monitor_id_monitor_id_fk", 1548 + "tableFrom": "notifications_to_monitors", 1549 + "tableTo": "monitor", 1550 + "columnsFrom": [ 1551 + "monitor_id" 1552 + ], 1553 + "columnsTo": [ 1554 + "id" 1555 + ], 1556 + "onDelete": "cascade", 1557 + "onUpdate": "no action" 1558 + }, 1559 + "notifications_to_monitors_notification_id_notification_id_fk": { 1560 + "name": "notifications_to_monitors_notification_id_notification_id_fk", 1561 + "tableFrom": "notifications_to_monitors", 1562 + "tableTo": "notification", 1563 + "columnsFrom": [ 1564 + "notification_id" 1565 + ], 1566 + "columnsTo": [ 1567 + "id" 1568 + ], 1569 + "onDelete": "cascade", 1570 + "onUpdate": "no action" 1571 + } 1572 + }, 1573 + "compositePrimaryKeys": { 1574 + "notifications_to_monitors_monitor_id_notification_id_pk": { 1575 + "columns": [ 1576 + "monitor_id", 1577 + "notification_id" 1578 + ], 1579 + "name": "notifications_to_monitors_monitor_id_notification_id_pk" 1580 + } 1581 + }, 1582 + "uniqueConstraints": {}, 1583 + "checkConstraints": {} 1584 + }, 1585 + "monitor_status": { 1586 + "name": "monitor_status", 1587 + "columns": { 1588 + "monitor_id": { 1589 + "name": "monitor_id", 1590 + "type": "integer", 1591 + "primaryKey": false, 1592 + "notNull": true, 1593 + "autoincrement": false 1594 + }, 1595 + "region": { 1596 + "name": "region", 1597 + "type": "text", 1598 + "primaryKey": false, 1599 + "notNull": true, 1600 + "autoincrement": false, 1601 + "default": "''" 1602 + }, 1603 + "status": { 1604 + "name": "status", 1605 + "type": "text", 1606 + "primaryKey": false, 1607 + "notNull": true, 1608 + "autoincrement": false, 1609 + "default": "'active'" 1610 + }, 1611 + "created_at": { 1612 + "name": "created_at", 1613 + "type": "integer", 1614 + "primaryKey": false, 1615 + "notNull": false, 1616 + "autoincrement": false, 1617 + "default": "(strftime('%s', 'now'))" 1618 + }, 1619 + "updated_at": { 1620 + "name": "updated_at", 1621 + "type": "integer", 1622 + "primaryKey": false, 1623 + "notNull": false, 1624 + "autoincrement": false, 1625 + "default": "(strftime('%s', 'now'))" 1626 + } 1627 + }, 1628 + "indexes": { 1629 + "monitor_status_idx": { 1630 + "name": "monitor_status_idx", 1631 + "columns": [ 1632 + "monitor_id", 1633 + "region" 1634 + ], 1635 + "isUnique": false 1636 + } 1637 + }, 1638 + "foreignKeys": { 1639 + "monitor_status_monitor_id_monitor_id_fk": { 1640 + "name": "monitor_status_monitor_id_monitor_id_fk", 1641 + "tableFrom": "monitor_status", 1642 + "tableTo": "monitor", 1643 + "columnsFrom": [ 1644 + "monitor_id" 1645 + ], 1646 + "columnsTo": [ 1647 + "id" 1648 + ], 1649 + "onDelete": "cascade", 1650 + "onUpdate": "no action" 1651 + } 1652 + }, 1653 + "compositePrimaryKeys": { 1654 + "monitor_status_monitor_id_region_pk": { 1655 + "columns": [ 1656 + "monitor_id", 1657 + "region" 1658 + ], 1659 + "name": "monitor_status_monitor_id_region_pk" 1660 + } 1661 + }, 1662 + "uniqueConstraints": {}, 1663 + "checkConstraints": {} 1664 + }, 1665 + "invitation": { 1666 + "name": "invitation", 1667 + "columns": { 1668 + "id": { 1669 + "name": "id", 1670 + "type": "integer", 1671 + "primaryKey": true, 1672 + "notNull": true, 1673 + "autoincrement": false 1674 + }, 1675 + "email": { 1676 + "name": "email", 1677 + "type": "text", 1678 + "primaryKey": false, 1679 + "notNull": true, 1680 + "autoincrement": false 1681 + }, 1682 + "role": { 1683 + "name": "role", 1684 + "type": "text", 1685 + "primaryKey": false, 1686 + "notNull": true, 1687 + "autoincrement": false, 1688 + "default": "'member'" 1689 + }, 1690 + "workspace_id": { 1691 + "name": "workspace_id", 1692 + "type": "integer", 1693 + "primaryKey": false, 1694 + "notNull": true, 1695 + "autoincrement": false 1696 + }, 1697 + "token": { 1698 + "name": "token", 1699 + "type": "text", 1700 + "primaryKey": false, 1701 + "notNull": true, 1702 + "autoincrement": false 1703 + }, 1704 + "expires_at": { 1705 + "name": "expires_at", 1706 + "type": "integer", 1707 + "primaryKey": false, 1708 + "notNull": true, 1709 + "autoincrement": false 1710 + }, 1711 + "created_at": { 1712 + "name": "created_at", 1713 + "type": "integer", 1714 + "primaryKey": false, 1715 + "notNull": false, 1716 + "autoincrement": false, 1717 + "default": "(strftime('%s', 'now'))" 1718 + }, 1719 + "accepted_at": { 1720 + "name": "accepted_at", 1721 + "type": "integer", 1722 + "primaryKey": false, 1723 + "notNull": false, 1724 + "autoincrement": false 1725 + } 1726 + }, 1727 + "indexes": {}, 1728 + "foreignKeys": {}, 1729 + "compositePrimaryKeys": {}, 1730 + "uniqueConstraints": {}, 1731 + "checkConstraints": {} 1732 + }, 1733 + "incident": { 1734 + "name": "incident", 1735 + "columns": { 1736 + "id": { 1737 + "name": "id", 1738 + "type": "integer", 1739 + "primaryKey": true, 1740 + "notNull": true, 1741 + "autoincrement": false 1742 + }, 1743 + "title": { 1744 + "name": "title", 1745 + "type": "text", 1746 + "primaryKey": false, 1747 + "notNull": true, 1748 + "autoincrement": false, 1749 + "default": "''" 1750 + }, 1751 + "summary": { 1752 + "name": "summary", 1753 + "type": "text", 1754 + "primaryKey": false, 1755 + "notNull": true, 1756 + "autoincrement": false, 1757 + "default": "''" 1758 + }, 1759 + "status": { 1760 + "name": "status", 1761 + "type": "text", 1762 + "primaryKey": false, 1763 + "notNull": true, 1764 + "autoincrement": false, 1765 + "default": "'triage'" 1766 + }, 1767 + "monitor_id": { 1768 + "name": "monitor_id", 1769 + "type": "integer", 1770 + "primaryKey": false, 1771 + "notNull": false, 1772 + "autoincrement": false 1773 + }, 1774 + "workspace_id": { 1775 + "name": "workspace_id", 1776 + "type": "integer", 1777 + "primaryKey": false, 1778 + "notNull": false, 1779 + "autoincrement": false 1780 + }, 1781 + "started_at": { 1782 + "name": "started_at", 1783 + "type": "integer", 1784 + "primaryKey": false, 1785 + "notNull": true, 1786 + "autoincrement": false, 1787 + "default": "(strftime('%s', 'now'))" 1788 + }, 1789 + "acknowledged_at": { 1790 + "name": "acknowledged_at", 1791 + "type": "integer", 1792 + "primaryKey": false, 1793 + "notNull": false, 1794 + "autoincrement": false 1795 + }, 1796 + "acknowledged_by": { 1797 + "name": "acknowledged_by", 1798 + "type": "integer", 1799 + "primaryKey": false, 1800 + "notNull": false, 1801 + "autoincrement": false 1802 + }, 1803 + "resolved_at": { 1804 + "name": "resolved_at", 1805 + "type": "integer", 1806 + "primaryKey": false, 1807 + "notNull": false, 1808 + "autoincrement": false 1809 + }, 1810 + "resolved_by": { 1811 + "name": "resolved_by", 1812 + "type": "integer", 1813 + "primaryKey": false, 1814 + "notNull": false, 1815 + "autoincrement": false 1816 + }, 1817 + "incident_screenshot_url": { 1818 + "name": "incident_screenshot_url", 1819 + "type": "text", 1820 + "primaryKey": false, 1821 + "notNull": false, 1822 + "autoincrement": false 1823 + }, 1824 + "recovery_screenshot_url": { 1825 + "name": "recovery_screenshot_url", 1826 + "type": "text", 1827 + "primaryKey": false, 1828 + "notNull": false, 1829 + "autoincrement": false 1830 + }, 1831 + "auto_resolved": { 1832 + "name": "auto_resolved", 1833 + "type": "integer", 1834 + "primaryKey": false, 1835 + "notNull": false, 1836 + "autoincrement": false, 1837 + "default": false 1838 + }, 1839 + "created_at": { 1840 + "name": "created_at", 1841 + "type": "integer", 1842 + "primaryKey": false, 1843 + "notNull": false, 1844 + "autoincrement": false, 1845 + "default": "(strftime('%s', 'now'))" 1846 + }, 1847 + "updated_at": { 1848 + "name": "updated_at", 1849 + "type": "integer", 1850 + "primaryKey": false, 1851 + "notNull": false, 1852 + "autoincrement": false, 1853 + "default": "(strftime('%s', 'now'))" 1854 + } 1855 + }, 1856 + "indexes": { 1857 + "incident_monitor_id_started_at_unique": { 1858 + "name": "incident_monitor_id_started_at_unique", 1859 + "columns": [ 1860 + "monitor_id", 1861 + "started_at" 1862 + ], 1863 + "isUnique": true 1864 + } 1865 + }, 1866 + "foreignKeys": { 1867 + "incident_monitor_id_monitor_id_fk": { 1868 + "name": "incident_monitor_id_monitor_id_fk", 1869 + "tableFrom": "incident", 1870 + "tableTo": "monitor", 1871 + "columnsFrom": [ 1872 + "monitor_id" 1873 + ], 1874 + "columnsTo": [ 1875 + "id" 1876 + ], 1877 + "onDelete": "set default", 1878 + "onUpdate": "no action" 1879 + }, 1880 + "incident_workspace_id_workspace_id_fk": { 1881 + "name": "incident_workspace_id_workspace_id_fk", 1882 + "tableFrom": "incident", 1883 + "tableTo": "workspace", 1884 + "columnsFrom": [ 1885 + "workspace_id" 1886 + ], 1887 + "columnsTo": [ 1888 + "id" 1889 + ], 1890 + "onDelete": "no action", 1891 + "onUpdate": "no action" 1892 + }, 1893 + "incident_acknowledged_by_user_id_fk": { 1894 + "name": "incident_acknowledged_by_user_id_fk", 1895 + "tableFrom": "incident", 1896 + "tableTo": "user", 1897 + "columnsFrom": [ 1898 + "acknowledged_by" 1899 + ], 1900 + "columnsTo": [ 1901 + "id" 1902 + ], 1903 + "onDelete": "no action", 1904 + "onUpdate": "no action" 1905 + }, 1906 + "incident_resolved_by_user_id_fk": { 1907 + "name": "incident_resolved_by_user_id_fk", 1908 + "tableFrom": "incident", 1909 + "tableTo": "user", 1910 + "columnsFrom": [ 1911 + "resolved_by" 1912 + ], 1913 + "columnsTo": [ 1914 + "id" 1915 + ], 1916 + "onDelete": "no action", 1917 + "onUpdate": "no action" 1918 + } 1919 + }, 1920 + "compositePrimaryKeys": {}, 1921 + "uniqueConstraints": {}, 1922 + "checkConstraints": {} 1923 + }, 1924 + "monitor_tag": { 1925 + "name": "monitor_tag", 1926 + "columns": { 1927 + "id": { 1928 + "name": "id", 1929 + "type": "integer", 1930 + "primaryKey": true, 1931 + "notNull": true, 1932 + "autoincrement": false 1933 + }, 1934 + "workspace_id": { 1935 + "name": "workspace_id", 1936 + "type": "integer", 1937 + "primaryKey": false, 1938 + "notNull": true, 1939 + "autoincrement": false 1940 + }, 1941 + "name": { 1942 + "name": "name", 1943 + "type": "text", 1944 + "primaryKey": false, 1945 + "notNull": true, 1946 + "autoincrement": false 1947 + }, 1948 + "color": { 1949 + "name": "color", 1950 + "type": "text", 1951 + "primaryKey": false, 1952 + "notNull": true, 1953 + "autoincrement": false 1954 + }, 1955 + "created_at": { 1956 + "name": "created_at", 1957 + "type": "integer", 1958 + "primaryKey": false, 1959 + "notNull": false, 1960 + "autoincrement": false, 1961 + "default": "(strftime('%s', 'now'))" 1962 + }, 1963 + "updated_at": { 1964 + "name": "updated_at", 1965 + "type": "integer", 1966 + "primaryKey": false, 1967 + "notNull": false, 1968 + "autoincrement": false, 1969 + "default": "(strftime('%s', 'now'))" 1970 + } 1971 + }, 1972 + "indexes": {}, 1973 + "foreignKeys": { 1974 + "monitor_tag_workspace_id_workspace_id_fk": { 1975 + "name": "monitor_tag_workspace_id_workspace_id_fk", 1976 + "tableFrom": "monitor_tag", 1977 + "tableTo": "workspace", 1978 + "columnsFrom": [ 1979 + "workspace_id" 1980 + ], 1981 + "columnsTo": [ 1982 + "id" 1983 + ], 1984 + "onDelete": "cascade", 1985 + "onUpdate": "no action" 1986 + } 1987 + }, 1988 + "compositePrimaryKeys": {}, 1989 + "uniqueConstraints": {}, 1990 + "checkConstraints": {} 1991 + }, 1992 + "monitor_tag_to_monitor": { 1993 + "name": "monitor_tag_to_monitor", 1994 + "columns": { 1995 + "monitor_id": { 1996 + "name": "monitor_id", 1997 + "type": "integer", 1998 + "primaryKey": false, 1999 + "notNull": true, 2000 + "autoincrement": false 2001 + }, 2002 + "monitor_tag_id": { 2003 + "name": "monitor_tag_id", 2004 + "type": "integer", 2005 + "primaryKey": false, 2006 + "notNull": true, 2007 + "autoincrement": false 2008 + }, 2009 + "created_at": { 2010 + "name": "created_at", 2011 + "type": "integer", 2012 + "primaryKey": false, 2013 + "notNull": false, 2014 + "autoincrement": false, 2015 + "default": "(strftime('%s', 'now'))" 2016 + } 2017 + }, 2018 + "indexes": {}, 2019 + "foreignKeys": { 2020 + "monitor_tag_to_monitor_monitor_id_monitor_id_fk": { 2021 + "name": "monitor_tag_to_monitor_monitor_id_monitor_id_fk", 2022 + "tableFrom": "monitor_tag_to_monitor", 2023 + "tableTo": "monitor", 2024 + "columnsFrom": [ 2025 + "monitor_id" 2026 + ], 2027 + "columnsTo": [ 2028 + "id" 2029 + ], 2030 + "onDelete": "cascade", 2031 + "onUpdate": "no action" 2032 + }, 2033 + "monitor_tag_to_monitor_monitor_tag_id_monitor_tag_id_fk": { 2034 + "name": "monitor_tag_to_monitor_monitor_tag_id_monitor_tag_id_fk", 2035 + "tableFrom": "monitor_tag_to_monitor", 2036 + "tableTo": "monitor_tag", 2037 + "columnsFrom": [ 2038 + "monitor_tag_id" 2039 + ], 2040 + "columnsTo": [ 2041 + "id" 2042 + ], 2043 + "onDelete": "cascade", 2044 + "onUpdate": "no action" 2045 + } 2046 + }, 2047 + "compositePrimaryKeys": { 2048 + "monitor_tag_to_monitor_monitor_id_monitor_tag_id_pk": { 2049 + "columns": [ 2050 + "monitor_id", 2051 + "monitor_tag_id" 2052 + ], 2053 + "name": "monitor_tag_to_monitor_monitor_id_monitor_tag_id_pk" 2054 + } 2055 + }, 2056 + "uniqueConstraints": {}, 2057 + "checkConstraints": {} 2058 + }, 2059 + "application": { 2060 + "name": "application", 2061 + "columns": { 2062 + "id": { 2063 + "name": "id", 2064 + "type": "integer", 2065 + "primaryKey": true, 2066 + "notNull": true, 2067 + "autoincrement": false 2068 + }, 2069 + "name": { 2070 + "name": "name", 2071 + "type": "text", 2072 + "primaryKey": false, 2073 + "notNull": false, 2074 + "autoincrement": false 2075 + }, 2076 + "dsn": { 2077 + "name": "dsn", 2078 + "type": "text", 2079 + "primaryKey": false, 2080 + "notNull": false, 2081 + "autoincrement": false 2082 + }, 2083 + "workspace_id": { 2084 + "name": "workspace_id", 2085 + "type": "integer", 2086 + "primaryKey": false, 2087 + "notNull": false, 2088 + "autoincrement": false 2089 + }, 2090 + "created_at": { 2091 + "name": "created_at", 2092 + "type": "integer", 2093 + "primaryKey": false, 2094 + "notNull": false, 2095 + "autoincrement": false, 2096 + "default": "(strftime('%s', 'now'))" 2097 + }, 2098 + "updated_at": { 2099 + "name": "updated_at", 2100 + "type": "integer", 2101 + "primaryKey": false, 2102 + "notNull": false, 2103 + "autoincrement": false, 2104 + "default": "(strftime('%s', 'now'))" 2105 + } 2106 + }, 2107 + "indexes": { 2108 + "application_dsn_unique": { 2109 + "name": "application_dsn_unique", 2110 + "columns": [ 2111 + "dsn" 2112 + ], 2113 + "isUnique": true 2114 + } 2115 + }, 2116 + "foreignKeys": { 2117 + "application_workspace_id_workspace_id_fk": { 2118 + "name": "application_workspace_id_workspace_id_fk", 2119 + "tableFrom": "application", 2120 + "tableTo": "workspace", 2121 + "columnsFrom": [ 2122 + "workspace_id" 2123 + ], 2124 + "columnsTo": [ 2125 + "id" 2126 + ], 2127 + "onDelete": "no action", 2128 + "onUpdate": "no action" 2129 + } 2130 + }, 2131 + "compositePrimaryKeys": {}, 2132 + "uniqueConstraints": {}, 2133 + "checkConstraints": {} 2134 + }, 2135 + "maintenance": { 2136 + "name": "maintenance", 2137 + "columns": { 2138 + "id": { 2139 + "name": "id", 2140 + "type": "integer", 2141 + "primaryKey": true, 2142 + "notNull": true, 2143 + "autoincrement": false 2144 + }, 2145 + "title": { 2146 + "name": "title", 2147 + "type": "text(256)", 2148 + "primaryKey": false, 2149 + "notNull": true, 2150 + "autoincrement": false 2151 + }, 2152 + "message": { 2153 + "name": "message", 2154 + "type": "text", 2155 + "primaryKey": false, 2156 + "notNull": true, 2157 + "autoincrement": false 2158 + }, 2159 + "from": { 2160 + "name": "from", 2161 + "type": "integer", 2162 + "primaryKey": false, 2163 + "notNull": true, 2164 + "autoincrement": false 2165 + }, 2166 + "to": { 2167 + "name": "to", 2168 + "type": "integer", 2169 + "primaryKey": false, 2170 + "notNull": true, 2171 + "autoincrement": false 2172 + }, 2173 + "workspace_id": { 2174 + "name": "workspace_id", 2175 + "type": "integer", 2176 + "primaryKey": false, 2177 + "notNull": false, 2178 + "autoincrement": false 2179 + }, 2180 + "page_id": { 2181 + "name": "page_id", 2182 + "type": "integer", 2183 + "primaryKey": false, 2184 + "notNull": false, 2185 + "autoincrement": false 2186 + }, 2187 + "created_at": { 2188 + "name": "created_at", 2189 + "type": "integer", 2190 + "primaryKey": false, 2191 + "notNull": false, 2192 + "autoincrement": false, 2193 + "default": "(strftime('%s', 'now'))" 2194 + }, 2195 + "updated_at": { 2196 + "name": "updated_at", 2197 + "type": "integer", 2198 + "primaryKey": false, 2199 + "notNull": false, 2200 + "autoincrement": false, 2201 + "default": "(strftime('%s', 'now'))" 2202 + } 2203 + }, 2204 + "indexes": {}, 2205 + "foreignKeys": { 2206 + "maintenance_workspace_id_workspace_id_fk": { 2207 + "name": "maintenance_workspace_id_workspace_id_fk", 2208 + "tableFrom": "maintenance", 2209 + "tableTo": "workspace", 2210 + "columnsFrom": [ 2211 + "workspace_id" 2212 + ], 2213 + "columnsTo": [ 2214 + "id" 2215 + ], 2216 + "onDelete": "no action", 2217 + "onUpdate": "no action" 2218 + }, 2219 + "maintenance_page_id_page_id_fk": { 2220 + "name": "maintenance_page_id_page_id_fk", 2221 + "tableFrom": "maintenance", 2222 + "tableTo": "page", 2223 + "columnsFrom": [ 2224 + "page_id" 2225 + ], 2226 + "columnsTo": [ 2227 + "id" 2228 + ], 2229 + "onDelete": "cascade", 2230 + "onUpdate": "no action" 2231 + } 2232 + }, 2233 + "compositePrimaryKeys": {}, 2234 + "uniqueConstraints": {}, 2235 + "checkConstraints": {} 2236 + }, 2237 + "maintenance_to_monitor": { 2238 + "name": "maintenance_to_monitor", 2239 + "columns": { 2240 + "maintenance_id": { 2241 + "name": "maintenance_id", 2242 + "type": "integer", 2243 + "primaryKey": false, 2244 + "notNull": true, 2245 + "autoincrement": false 2246 + }, 2247 + "monitor_id": { 2248 + "name": "monitor_id", 2249 + "type": "integer", 2250 + "primaryKey": false, 2251 + "notNull": true, 2252 + "autoincrement": false 2253 + }, 2254 + "created_at": { 2255 + "name": "created_at", 2256 + "type": "integer", 2257 + "primaryKey": false, 2258 + "notNull": false, 2259 + "autoincrement": false, 2260 + "default": "(strftime('%s', 'now'))" 2261 + } 2262 + }, 2263 + "indexes": {}, 2264 + "foreignKeys": { 2265 + "maintenance_to_monitor_maintenance_id_maintenance_id_fk": { 2266 + "name": "maintenance_to_monitor_maintenance_id_maintenance_id_fk", 2267 + "tableFrom": "maintenance_to_monitor", 2268 + "tableTo": "maintenance", 2269 + "columnsFrom": [ 2270 + "maintenance_id" 2271 + ], 2272 + "columnsTo": [ 2273 + "id" 2274 + ], 2275 + "onDelete": "cascade", 2276 + "onUpdate": "no action" 2277 + }, 2278 + "maintenance_to_monitor_monitor_id_monitor_id_fk": { 2279 + "name": "maintenance_to_monitor_monitor_id_monitor_id_fk", 2280 + "tableFrom": "maintenance_to_monitor", 2281 + "tableTo": "monitor", 2282 + "columnsFrom": [ 2283 + "monitor_id" 2284 + ], 2285 + "columnsTo": [ 2286 + "id" 2287 + ], 2288 + "onDelete": "cascade", 2289 + "onUpdate": "no action" 2290 + } 2291 + }, 2292 + "compositePrimaryKeys": { 2293 + "maintenance_to_monitor_maintenance_id_monitor_id_pk": { 2294 + "columns": [ 2295 + "maintenance_id", 2296 + "monitor_id" 2297 + ], 2298 + "name": "maintenance_to_monitor_maintenance_id_monitor_id_pk" 2299 + } 2300 + }, 2301 + "uniqueConstraints": {}, 2302 + "checkConstraints": {} 2303 + }, 2304 + "check": { 2305 + "name": "check", 2306 + "columns": { 2307 + "id": { 2308 + "name": "id", 2309 + "type": "integer", 2310 + "primaryKey": true, 2311 + "notNull": true, 2312 + "autoincrement": true 2313 + }, 2314 + "regions": { 2315 + "name": "regions", 2316 + "type": "text", 2317 + "primaryKey": false, 2318 + "notNull": true, 2319 + "autoincrement": false, 2320 + "default": "''" 2321 + }, 2322 + "url": { 2323 + "name": "url", 2324 + "type": "text(4096)", 2325 + "primaryKey": false, 2326 + "notNull": true, 2327 + "autoincrement": false 2328 + }, 2329 + "headers": { 2330 + "name": "headers", 2331 + "type": "text", 2332 + "primaryKey": false, 2333 + "notNull": false, 2334 + "autoincrement": false, 2335 + "default": "''" 2336 + }, 2337 + "body": { 2338 + "name": "body", 2339 + "type": "text", 2340 + "primaryKey": false, 2341 + "notNull": false, 2342 + "autoincrement": false, 2343 + "default": "''" 2344 + }, 2345 + "method": { 2346 + "name": "method", 2347 + "type": "text", 2348 + "primaryKey": false, 2349 + "notNull": false, 2350 + "autoincrement": false, 2351 + "default": "'GET'" 2352 + }, 2353 + "count_requests": { 2354 + "name": "count_requests", 2355 + "type": "integer", 2356 + "primaryKey": false, 2357 + "notNull": false, 2358 + "autoincrement": false, 2359 + "default": 1 2360 + }, 2361 + "workspace_id": { 2362 + "name": "workspace_id", 2363 + "type": "integer", 2364 + "primaryKey": false, 2365 + "notNull": false, 2366 + "autoincrement": false 2367 + }, 2368 + "created_at": { 2369 + "name": "created_at", 2370 + "type": "integer", 2371 + "primaryKey": false, 2372 + "notNull": false, 2373 + "autoincrement": false, 2374 + "default": "(strftime('%s', 'now'))" 2375 + } 2376 + }, 2377 + "indexes": {}, 2378 + "foreignKeys": { 2379 + "check_workspace_id_workspace_id_fk": { 2380 + "name": "check_workspace_id_workspace_id_fk", 2381 + "tableFrom": "check", 2382 + "tableTo": "workspace", 2383 + "columnsFrom": [ 2384 + "workspace_id" 2385 + ], 2386 + "columnsTo": [ 2387 + "id" 2388 + ], 2389 + "onDelete": "no action", 2390 + "onUpdate": "no action" 2391 + } 2392 + }, 2393 + "compositePrimaryKeys": {}, 2394 + "uniqueConstraints": {}, 2395 + "checkConstraints": {} 2396 + }, 2397 + "monitor_run": { 2398 + "name": "monitor_run", 2399 + "columns": { 2400 + "id": { 2401 + "name": "id", 2402 + "type": "integer", 2403 + "primaryKey": true, 2404 + "notNull": true, 2405 + "autoincrement": false 2406 + }, 2407 + "workspace_id": { 2408 + "name": "workspace_id", 2409 + "type": "integer", 2410 + "primaryKey": false, 2411 + "notNull": false, 2412 + "autoincrement": false 2413 + }, 2414 + "monitor_id": { 2415 + "name": "monitor_id", 2416 + "type": "integer", 2417 + "primaryKey": false, 2418 + "notNull": false, 2419 + "autoincrement": false 2420 + }, 2421 + "runned_at": { 2422 + "name": "runned_at", 2423 + "type": "integer", 2424 + "primaryKey": false, 2425 + "notNull": false, 2426 + "autoincrement": false 2427 + }, 2428 + "created_at": { 2429 + "name": "created_at", 2430 + "type": "integer", 2431 + "primaryKey": false, 2432 + "notNull": false, 2433 + "autoincrement": false, 2434 + "default": "(strftime('%s', 'now'))" 2435 + } 2436 + }, 2437 + "indexes": {}, 2438 + "foreignKeys": { 2439 + "monitor_run_workspace_id_workspace_id_fk": { 2440 + "name": "monitor_run_workspace_id_workspace_id_fk", 2441 + "tableFrom": "monitor_run", 2442 + "tableTo": "workspace", 2443 + "columnsFrom": [ 2444 + "workspace_id" 2445 + ], 2446 + "columnsTo": [ 2447 + "id" 2448 + ], 2449 + "onDelete": "no action", 2450 + "onUpdate": "no action" 2451 + }, 2452 + "monitor_run_monitor_id_monitor_id_fk": { 2453 + "name": "monitor_run_monitor_id_monitor_id_fk", 2454 + "tableFrom": "monitor_run", 2455 + "tableTo": "monitor", 2456 + "columnsFrom": [ 2457 + "monitor_id" 2458 + ], 2459 + "columnsTo": [ 2460 + "id" 2461 + ], 2462 + "onDelete": "no action", 2463 + "onUpdate": "no action" 2464 + } 2465 + }, 2466 + "compositePrimaryKeys": {}, 2467 + "uniqueConstraints": {}, 2468 + "checkConstraints": {} 2469 + }, 2470 + "private_location": { 2471 + "name": "private_location", 2472 + "columns": { 2473 + "id": { 2474 + "name": "id", 2475 + "type": "integer", 2476 + "primaryKey": true, 2477 + "notNull": true, 2478 + "autoincrement": false 2479 + }, 2480 + "name": { 2481 + "name": "name", 2482 + "type": "text", 2483 + "primaryKey": false, 2484 + "notNull": true, 2485 + "autoincrement": false 2486 + }, 2487 + "token": { 2488 + "name": "token", 2489 + "type": "text", 2490 + "primaryKey": false, 2491 + "notNull": true, 2492 + "autoincrement": false 2493 + }, 2494 + "last_seen_at": { 2495 + "name": "last_seen_at", 2496 + "type": "integer", 2497 + "primaryKey": false, 2498 + "notNull": false, 2499 + "autoincrement": false 2500 + }, 2501 + "workspace_id": { 2502 + "name": "workspace_id", 2503 + "type": "integer", 2504 + "primaryKey": false, 2505 + "notNull": false, 2506 + "autoincrement": false 2507 + }, 2508 + "created_at": { 2509 + "name": "created_at", 2510 + "type": "integer", 2511 + "primaryKey": false, 2512 + "notNull": false, 2513 + "autoincrement": false, 2514 + "default": "(strftime('%s', 'now'))" 2515 + }, 2516 + "updated_at": { 2517 + "name": "updated_at", 2518 + "type": "integer", 2519 + "primaryKey": false, 2520 + "notNull": false, 2521 + "autoincrement": false, 2522 + "default": "(strftime('%s', 'now'))" 2523 + } 2524 + }, 2525 + "indexes": {}, 2526 + "foreignKeys": { 2527 + "private_location_workspace_id_workspace_id_fk": { 2528 + "name": "private_location_workspace_id_workspace_id_fk", 2529 + "tableFrom": "private_location", 2530 + "tableTo": "workspace", 2531 + "columnsFrom": [ 2532 + "workspace_id" 2533 + ], 2534 + "columnsTo": [ 2535 + "id" 2536 + ], 2537 + "onDelete": "no action", 2538 + "onUpdate": "no action" 2539 + } 2540 + }, 2541 + "compositePrimaryKeys": {}, 2542 + "uniqueConstraints": {}, 2543 + "checkConstraints": {} 2544 + }, 2545 + "private_location_to_monitor": { 2546 + "name": "private_location_to_monitor", 2547 + "columns": { 2548 + "private_location_id": { 2549 + "name": "private_location_id", 2550 + "type": "integer", 2551 + "primaryKey": false, 2552 + "notNull": false, 2553 + "autoincrement": false 2554 + }, 2555 + "monitor_id": { 2556 + "name": "monitor_id", 2557 + "type": "integer", 2558 + "primaryKey": false, 2559 + "notNull": false, 2560 + "autoincrement": false 2561 + }, 2562 + "created_at": { 2563 + "name": "created_at", 2564 + "type": "integer", 2565 + "primaryKey": false, 2566 + "notNull": false, 2567 + "autoincrement": false, 2568 + "default": "(strftime('%s', 'now'))" 2569 + }, 2570 + "deleted_at": { 2571 + "name": "deleted_at", 2572 + "type": "integer", 2573 + "primaryKey": false, 2574 + "notNull": false, 2575 + "autoincrement": false 2576 + } 2577 + }, 2578 + "indexes": {}, 2579 + "foreignKeys": { 2580 + "private_location_to_monitor_private_location_id_private_location_id_fk": { 2581 + "name": "private_location_to_monitor_private_location_id_private_location_id_fk", 2582 + "tableFrom": "private_location_to_monitor", 2583 + "tableTo": "private_location", 2584 + "columnsFrom": [ 2585 + "private_location_id" 2586 + ], 2587 + "columnsTo": [ 2588 + "id" 2589 + ], 2590 + "onDelete": "cascade", 2591 + "onUpdate": "no action" 2592 + }, 2593 + "private_location_to_monitor_monitor_id_monitor_id_fk": { 2594 + "name": "private_location_to_monitor_monitor_id_monitor_id_fk", 2595 + "tableFrom": "private_location_to_monitor", 2596 + "tableTo": "monitor", 2597 + "columnsFrom": [ 2598 + "monitor_id" 2599 + ], 2600 + "columnsTo": [ 2601 + "id" 2602 + ], 2603 + "onDelete": "cascade", 2604 + "onUpdate": "no action" 2605 + } 2606 + }, 2607 + "compositePrimaryKeys": {}, 2608 + "uniqueConstraints": {}, 2609 + "checkConstraints": {} 2610 + }, 2611 + "monitor_group": { 2612 + "name": "monitor_group", 2613 + "columns": { 2614 + "id": { 2615 + "name": "id", 2616 + "type": "integer", 2617 + "primaryKey": true, 2618 + "notNull": true, 2619 + "autoincrement": false 2620 + }, 2621 + "workspace_id": { 2622 + "name": "workspace_id", 2623 + "type": "integer", 2624 + "primaryKey": false, 2625 + "notNull": true, 2626 + "autoincrement": false 2627 + }, 2628 + "page_id": { 2629 + "name": "page_id", 2630 + "type": "integer", 2631 + "primaryKey": false, 2632 + "notNull": true, 2633 + "autoincrement": false 2634 + }, 2635 + "name": { 2636 + "name": "name", 2637 + "type": "text", 2638 + "primaryKey": false, 2639 + "notNull": true, 2640 + "autoincrement": false 2641 + }, 2642 + "created_at": { 2643 + "name": "created_at", 2644 + "type": "integer", 2645 + "primaryKey": false, 2646 + "notNull": false, 2647 + "autoincrement": false, 2648 + "default": "(strftime('%s', 'now'))" 2649 + }, 2650 + "updated_at": { 2651 + "name": "updated_at", 2652 + "type": "integer", 2653 + "primaryKey": false, 2654 + "notNull": false, 2655 + "autoincrement": false, 2656 + "default": "(strftime('%s', 'now'))" 2657 + } 2658 + }, 2659 + "indexes": {}, 2660 + "foreignKeys": { 2661 + "monitor_group_workspace_id_workspace_id_fk": { 2662 + "name": "monitor_group_workspace_id_workspace_id_fk", 2663 + "tableFrom": "monitor_group", 2664 + "tableTo": "workspace", 2665 + "columnsFrom": [ 2666 + "workspace_id" 2667 + ], 2668 + "columnsTo": [ 2669 + "id" 2670 + ], 2671 + "onDelete": "cascade", 2672 + "onUpdate": "no action" 2673 + }, 2674 + "monitor_group_page_id_page_id_fk": { 2675 + "name": "monitor_group_page_id_page_id_fk", 2676 + "tableFrom": "monitor_group", 2677 + "tableTo": "page", 2678 + "columnsFrom": [ 2679 + "page_id" 2680 + ], 2681 + "columnsTo": [ 2682 + "id" 2683 + ], 2684 + "onDelete": "cascade", 2685 + "onUpdate": "no action" 2686 + } 2687 + }, 2688 + "compositePrimaryKeys": {}, 2689 + "uniqueConstraints": {}, 2690 + "checkConstraints": {} 2691 + } 2692 + }, 2693 + "views": {}, 2694 + "enums": {}, 2695 + "_meta": { 2696 + "schemas": {}, 2697 + "tables": {}, 2698 + "columns": {} 2699 + }, 2700 + "internal": { 2701 + "indexes": {} 2702 + } 2703 + }
+7
packages/db/drizzle/meta/_journal.json
··· 351 351 "when": 1761901661043, 352 352 "tag": "0049_sloppy_inhumans", 353 353 "breakpoints": true 354 + }, 355 + { 356 + "idx": 50, 357 + "version": "6", 358 + "when": 1765567734101, 359 + "tag": "0050_damp_xorn", 360 + "breakpoints": true 354 361 } 355 362 ] 356 363 }
+1
packages/db/src/schema/monitors/monitor.ts
··· 35 35 url: text("url", { length: 2048 }).notNull(), // URI 36 36 37 37 name: text("name", { length: 256 }).default("").notNull(), 38 + externalName: text("external_name"), 38 39 description: text("description").default("").notNull(), 39 40 40 41 headers: text("headers").default(""),
+19 -7
packages/db/src/schema/shared.ts
··· 13 13 14 14 // TODO: create a 'public-status' schema with all the different types and validations 15 15 16 - export const selectPublicMonitorSchema = selectMonitorSchema.omit({ 16 + // Base schema without transform so it can be extended 17 + const selectPublicMonitorBaseSchema = selectMonitorSchema.omit({ 17 18 body: true, 18 19 headers: true, 19 20 method: true, 20 21 otelEndpoint: true, 21 22 otelHeaders: true, 22 23 }); 24 + 25 + export const selectPublicMonitorSchema = 26 + selectPublicMonitorBaseSchema.transform((data) => ({ 27 + ...data, 28 + name: data.externalName || data.name, 29 + })); 23 30 24 31 export const selectStatusReportPageSchema = selectStatusReportSchema.extend({ 25 32 statusReportUpdates: z.array(selectStatusReportUpdateSchema).default([]), ··· 85 92 id: true, 86 93 }); 87 94 88 - const selectPublicMonitorWithStatusSchema = selectPublicMonitorSchema.extend({ 89 - status: z.enum(["success", "degraded", "error", "info"]).default("success"), 90 - monitorGroupId: z.number().nullable().optional(), 91 - order: z.number().default(0).optional(), 92 - groupOrder: z.number().default(0).optional(), 93 - }); 95 + const selectPublicMonitorWithStatusSchema = selectPublicMonitorBaseSchema 96 + .extend({ 97 + status: z.enum(["success", "degraded", "error", "info"]).default("success"), 98 + monitorGroupId: z.number().nullable().optional(), 99 + order: z.number().default(0).optional(), 100 + groupOrder: z.number().default(0).optional(), 101 + }) 102 + .transform((data) => ({ 103 + ...data, 104 + name: data.externalName || data.name, 105 + })); 94 106 95 107 const trackersSchema = z 96 108 .array(
-2
pnpm-lock.yaml
··· 1778 1778 specifier: 5.9.3 1779 1779 version: 5.9.3 1780 1780 1781 - packages/react/dist: {} 1782 - 1783 1781 packages/regions: 1784 1782 dependencies: 1785 1783 zod: