@stacksjs/types 0.70.380 → 0.71.2

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.
@@ -7,6 +7,7 @@
7
7
  */
8
8
  export declare interface AnalyticsOptions {
9
9
  driver: 'google-analytics' | 'fathom' | 'plausible' | 'self-hosted'
10
+ capturePageviews?: boolean
10
11
  drivers: {
11
12
  googleAnalytics?: {
12
13
  trackingId: string
@@ -0,0 +1,31 @@
1
+ /**
2
+ * One rung of the bid-increment ladder. Below `upTo` cents, bids step by
3
+ * `step` cents; the final rung carries `upTo: null` and applies above all
4
+ * others. Rungs are read in order, so they must stay sorted ascending.
5
+ */
6
+ export declare interface AuctionIncrementTier {
7
+ upTo: number | null
8
+ step: number
9
+ }
10
+ /**
11
+ * **Auction Options**
12
+ *
13
+ * Bidding defaults for the auction part of commerce (Auction / AuctionItem /
14
+ * Bid / Pledge models, the proxy-bidding engine and the settlement report).
15
+ * Configured under `commerce.auction` in `config/commerce.ts`.
16
+ *
17
+ * Individual auctions override the timing fields on their own row - one school
18
+ * runs both a two-week online catalogue and a ninety-minute in-room gala, and
19
+ * neither should have to be the global default.
20
+ *
21
+ * Every amount is integer minor units (cents).
22
+ */
23
+ export declare interface AuctionOptions {
24
+ enabled?: boolean
25
+ currency?: string
26
+ increments?: AuctionIncrementTier[]
27
+ antiSnipeMinutes?: number
28
+ extendOnBidWindowMinutes?: number
29
+ maxExtensions?: number
30
+ }
31
+ export type AuctionConfig = Partial<AuctionOptions>;
package/dist/auth.d.ts CHANGED
@@ -44,6 +44,13 @@ export declare interface AuthOptions {
44
44
  throttle: number
45
45
  url?: string
46
46
  }
47
+ magicLink?: {
48
+ enabled?: boolean
49
+ expire?: number
50
+ confirmInteraction?: boolean
51
+ redirectDefault?: string
52
+ url?: string
53
+ }
47
54
  emailVerification?: {
48
55
  expire?: number
49
56
  url?: string
@@ -1,3 +1,4 @@
1
+ import type { AuctionOptions } from './auction';
1
2
  /**
2
3
  * **Commerce Options**
3
4
  *
@@ -10,5 +11,6 @@ export declare interface CommerceOptions {
10
11
  env?: string[]
11
12
  currency?: string
12
13
  defaultTaxRate?: number
14
+ auction?: AuctionOptions
13
15
  }
14
16
  export type CommerceConfig = Partial<CommerceOptions>;
@@ -14,6 +14,15 @@
14
14
  export declare interface DashboardOptions {
15
15
  enabled?: boolean
16
16
  env?: string[]
17
+ nav?: Array<{
18
+ title: string
19
+ items: Array<{
20
+ label: string
21
+ href: string
22
+ icon?: string
23
+ roles?: string[]
24
+ }>
25
+ }>
17
26
  sections?: {
18
27
  library?: { enabled?: boolean }
19
28
  content?: { enabled?: boolean }
@@ -90,6 +99,7 @@ export declare interface DashboardOptions {
90
99
  export declare interface DashboardModelOptions {
91
100
  enabled?: boolean
92
101
  label?: string
102
+ highlight?: boolean | number
93
103
  icon?: string
94
104
  section?:
95
105
  | 'home'
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Form-builder configuration: user-defined forms (Form / FormField /
3
+ * FormSubmission), runtime validation, conditional visibility, public
4
+ * submit endpoints, uploads, payments and CSV export.
5
+ */
6
+ export declare interface FormsOptions {
7
+ enabled: boolean
8
+ uploads?: {
9
+ disk?: string
10
+ maxSizeMb?: number
11
+ allowedTypes?: string[]
12
+ }
13
+ spam?: {
14
+ honeypot?: boolean
15
+ minSubmitSeconds?: number
16
+ }
17
+ }
18
+ export type FormsConfig = Partial<FormsOptions>;
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from './analytics';
3
3
  export * from './api';
4
4
  export * from './app';
5
5
  export * from './attributes';
6
+ export * from './auction';
6
7
  export * from './auth';
7
8
  export * from './oauth';
8
9
  export * from './auto-imports';
@@ -37,6 +38,7 @@ export * from './errors';
37
38
  export * from './events';
38
39
  export * from './exit-code';
39
40
  export * from './file-systems';
41
+ export * from './forms';
40
42
  export * from './feature-flags';
41
43
  export * from './git';
42
44
  export * from './hashing';
@@ -71,6 +73,7 @@ export * from './search-engine';
71
73
  export * from './security';
72
74
  export * from './server';
73
75
  export * from './services';
76
+ export * from './sites';
74
77
  export * from './settings-config';
75
78
  export * from './sms';
76
79
  export * from './stack-extensions';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- function x(p){return typeof p==="object"&&p!==null&&"id"in p&&"userId"in p&&"clientId"in p&&"scopes"in p}function H(p){return x(p)&&"abilities"in p}function N(p){return typeof p==="object"&&p!==null&&"id"in p&&"name"in p&&"secret"in p&&"redirect"in p}var F;((D)=>{D.Second="* * * * * *";D.FiveSeconds="*/5 * * * * *";D.TenSeconds="*/10 * * * * *";D.ThirtySeconds="*/30 * * * * *";D.Minute="* * * * *";D.TwoMinutes="*/2 * * * *";D.FiveMinutes="*/5 * * * *";D.TenMinutes="*/10 * * * *";D.FifteenMinutes="*/15 * * * *";D.ThirtyMinutes="*/30 * * * *";D.Hour="0 * * * *";D.HalfHour="0,30 * * * *";D.Day="0 0 * * *";D.Week="0 0 * * 0";D.Weekday="0 0 * * 1-5";D.Weekend="0 0 * * 0,6";D.Month="0 0 1 * *";D.Year="0 0 1 1 *"})(F||={});var U;((B)=>{B.Bluesky="bluesky";B.Discord="discord";B.Facebook="facebook";B.GitHub="github";B.Instagram="instagram";B.LinkedIn="linkedin";B.Mastodon="mastodon";B.Slack="slack";B.Twitter="twitter";B.YouTube="youtube"})(U||={});var _;((O)=>{O[O.Success=0]="Success";O[O.FatalError=1]="FatalError";O[O.InvalidArgument=9]="InvalidArgument"})(_||={});import{toString as G}from"@stacksjs/strings";function K(p){if(p===null)return"null";let P=G(p).slice(8,-1).toLowerCase();return typeof p==="object"||typeof p==="function"?P:typeof p}function Q(p){return p}function R(p){return p}var W={development:{default:"sync",connections:{sync:{driver:"sync"}},failed:{driver:"database",table:"failed_jobs"}},production:{default:"redis",connections:{redis:{driver:"redis",prefix:"stacks:queue",concurrency:5,distributedLock:!0,metrics:{enabled:!0},defaultDeadLetterOptions:{enabled:!0,maxRetries:3}}},failed:{driver:"redis",prefix:"stacks:failed"},worker:{concurrency:5,shutdownTimeout:30000}},highPerformance:{default:"redis",connections:{redis:{driver:"redis",prefix:"stacks:queue",concurrency:20,distributedLock:!0,metrics:{enabled:!0,collectInterval:5000},horizontalScaling:{enabled:!0,maxWorkersPerInstance:20,jobsPerWorker:50},defaultDeadLetterOptions:{enabled:!0,maxRetries:5}}},failed:{driver:"redis",prefix:"stacks:failed"},worker:{concurrency:20,shutdownTimeout:60000}},database:{default:"database",connections:{database:{driver:"database",table:"jobs",queue:"default",retryAfter:90}},failed:{driver:"database",table:"failed_jobs"}}};var Z={server:{development:{enabled:!0,mode:"server",debug:!0,server:{host:"localhost",port:6001,scheme:"ws",driver:"bun",rateLimit:{enabled:!1},healthCheck:{enabled:!0,path:"/health"}},channels:{public:!0,private:!0,presence:!0}},production:{enabled:!0,mode:"server",debug:!1,server:{host:"0.0.0.0",port:6001,scheme:"wss",driver:"bun",redis:{enabled:!0,prefix:"stacks:realtime:"},rateLimit:{enabled:!0,maxConnectionsPerIp:100,maxMessagesPerSecond:50,maxPayloadSize:65536},loadManagement:{maxConnections:1e4,backpressureThreshold:1000,messageQueueSize:1e4,gracefulShutdownTimeout:30000},autoScaling:{min:2,max:10,targetCPU:70},healthCheck:{enabled:!0,path:"/health",interval:30},metrics:{enabled:!0,port:9090,path:"/metrics"}},channels:{public:!0,private:!0,presence:!0}},highPerformance:{enabled:!0,mode:"server",server:{driver:"bun",redis:{enabled:!0,cluster:!0},rateLimit:{enabled:!0,maxConnectionsPerIp:500,maxMessagesPerSecond:200,maxPayloadSize:131072},loadManagement:{maxConnections:1e5,backpressureThreshold:5000,messageQueueSize:50000,gracefulShutdownTimeout:60000},autoScaling:{min:4,max:50,targetCPU:60}}},chat:{enabled:!0,mode:"server",server:{driver:"bun",redis:{enabled:!0},rateLimit:{enabled:!0,maxConnectionsPerIp:10,maxMessagesPerSecond:20},loadManagement:{maxConnections:50000}},channels:{public:!0,private:!0,presence:{enabled:!0,maxMembersPerChannel:500,memberInfoTtl:60}}},gaming:{enabled:!0,mode:"server",server:{driver:"bun",redis:{enabled:!0,cluster:!0},rateLimit:{enabled:!0,maxConnectionsPerIp:50,maxMessagesPerSecond:100},loadManagement:{maxConnections:50000,backpressureThreshold:2000,messageQueueSize:20000},autoScaling:{min:2,max:20,targetCPU:50}},channels:{public:!0,private:!0,presence:!0}}},serverless:{development:{enabled:!0,mode:"serverless",debug:!0,serverless:{connectionTimeout:3600,idleTimeout:600,stageName:"dev",memorySize:256,timeout:30},channels:{public:!0,private:!0,presence:!0}},production:{enabled:!0,mode:"serverless",debug:!1,serverless:{connectionTimeout:3600,idleTimeout:600,stageName:"production",memorySize:512,timeout:30,provisionedConcurrency:2},channels:{public:!0,private:!0,presence:!0}},notifications:{enabled:!0,mode:"serverless",serverless:{connectionTimeout:7200,idleTimeout:1800,memorySize:256,timeout:15},channels:{public:!0,private:!0,presence:!1}}}};var f={calendar:{github:"stacksjs/calendar",package:"@stacksjs/calendar",description:"Calendar links, ICS generation, and an STX calendar component"},table:{github:"stacksjs/table",package:"@stacksjs/table",description:"Typed table drivers and an STX data table component"}};export{f as stackExtensionRegistry,H as isPersonalAccessToken,N as isOAuthClient,x as isAccessToken,K as getTypeName,R as defineModels,Q as defineModel,U as SocialLinkIcon,Z as RealtimePresets,W as QueuePresets,_ as ExitCode,F as Every};
2
+ function x(p){return typeof p==="object"&&p!==null&&"id"in p&&"userId"in p&&"clientId"in p&&"scopes"in p}function H(p){return x(p)&&"abilities"in p}function N(p){return typeof p==="object"&&p!==null&&"id"in p&&"name"in p&&"secret"in p&&"redirect"in p}var F;((D)=>{D.Second="* * * * * *";D.FiveSeconds="*/5 * * * * *";D.TenSeconds="*/10 * * * * *";D.ThirtySeconds="*/30 * * * * *";D.Minute="* * * * *";D.TwoMinutes="*/2 * * * *";D.FiveMinutes="*/5 * * * *";D.TenMinutes="*/10 * * * *";D.FifteenMinutes="*/15 * * * *";D.ThirtyMinutes="*/30 * * * *";D.Hour="0 * * * *";D.HalfHour="0,30 * * * *";D.Day="0 0 * * *";D.Week="0 0 * * 0";D.Weekday="0 0 * * 1-5";D.Weekend="0 0 * * 0,6";D.Month="0 0 1 * *";D.Year="0 0 1 1 *"})(F||={});var U;((B)=>{B.Bluesky="bluesky";B.Discord="discord";B.Facebook="facebook";B.GitHub="github";B.Instagram="instagram";B.LinkedIn="linkedin";B.Mastodon="mastodon";B.Slack="slack";B.Twitter="twitter";B.YouTube="youtube"})(U||={});var _;((O)=>{O[O.Success=0]="Success";O[O.FatalError=1]="FatalError";O[O.InvalidArgument=9]="InvalidArgument"})(_||={});import{toString as G}from"@stacksjs/strings";function K(p){if(p===null)return"null";let P=G(p).slice(8,-1).toLowerCase();return typeof p==="object"||typeof p==="function"?P:typeof p}function Q(p){return p}function R(p){return p}var W={development:{default:"sync",connections:{sync:{driver:"sync"}},failed:{driver:"database",table:"failed_jobs"}},production:{default:"redis",connections:{redis:{driver:"redis",prefix:"stacks:queue",concurrency:5,distributedLock:!0,metrics:{enabled:!0},defaultDeadLetterOptions:{enabled:!0,maxRetries:3}}},failed:{driver:"redis",prefix:"stacks:failed"},worker:{concurrency:5,shutdownTimeout:30000}},highPerformance:{default:"redis",connections:{redis:{driver:"redis",prefix:"stacks:queue",concurrency:20,distributedLock:!0,metrics:{enabled:!0,collectInterval:5000},horizontalScaling:{enabled:!0,maxWorkersPerInstance:20,jobsPerWorker:50},defaultDeadLetterOptions:{enabled:!0,maxRetries:5}}},failed:{driver:"redis",prefix:"stacks:failed"},worker:{concurrency:20,shutdownTimeout:60000}},database:{default:"database",connections:{database:{driver:"database",table:"jobs",queue:"default",retryAfter:90}},failed:{driver:"database",table:"failed_jobs"}}};var Z={server:{development:{enabled:!0,mode:"server",debug:!0,server:{host:"localhost",port:6001,scheme:"ws",driver:"bun",rateLimit:{enabled:!1},healthCheck:{enabled:!0,path:"/health"}},channels:{public:!0,private:!0,presence:!0}},production:{enabled:!0,mode:"server",debug:!1,server:{host:"0.0.0.0",port:6001,scheme:"wss",driver:"bun",redis:{enabled:!0,prefix:"stacks:realtime:"},rateLimit:{enabled:!0,maxConnectionsPerIp:100,maxMessagesPerSecond:50,maxPayloadSize:65536},loadManagement:{maxConnections:1e4,backpressureThreshold:1000,messageQueueSize:1e4,gracefulShutdownTimeout:30000},autoScaling:{min:2,max:10,targetCPU:70},healthCheck:{enabled:!0,path:"/health",interval:30},metrics:{enabled:!0,port:9090,path:"/metrics"}},channels:{public:!0,private:!0,presence:!0}},highPerformance:{enabled:!0,mode:"server",server:{driver:"bun",redis:{enabled:!0,cluster:!0},rateLimit:{enabled:!0,maxConnectionsPerIp:500,maxMessagesPerSecond:200,maxPayloadSize:131072},loadManagement:{maxConnections:1e5,backpressureThreshold:5000,messageQueueSize:50000,gracefulShutdownTimeout:60000},autoScaling:{min:4,max:50,targetCPU:60}}},chat:{enabled:!0,mode:"server",server:{driver:"bun",redis:{enabled:!0},rateLimit:{enabled:!0,maxConnectionsPerIp:10,maxMessagesPerSecond:20},loadManagement:{maxConnections:50000}},channels:{public:!0,private:!0,presence:{enabled:!0,maxMembersPerChannel:500,memberInfoTtl:60}}},gaming:{enabled:!0,mode:"server",server:{driver:"bun",redis:{enabled:!0,cluster:!0},rateLimit:{enabled:!0,maxConnectionsPerIp:50,maxMessagesPerSecond:100},loadManagement:{maxConnections:50000,backpressureThreshold:2000,messageQueueSize:20000},autoScaling:{min:2,max:20,targetCPU:50}},channels:{public:!0,private:!0,presence:!0}}},serverless:{development:{enabled:!0,mode:"serverless",debug:!0,serverless:{connectionTimeout:3600,idleTimeout:600,stageName:"dev",memorySize:256,timeout:30},channels:{public:!0,private:!0,presence:!0}},production:{enabled:!0,mode:"serverless",debug:!1,serverless:{connectionTimeout:3600,idleTimeout:600,stageName:"production",memorySize:512,timeout:30,provisionedConcurrency:2},channels:{public:!0,private:!0,presence:!0}},notifications:{enabled:!0,mode:"serverless",serverless:{connectionTimeout:7200,idleTimeout:1800,memorySize:256,timeout:15},channels:{public:!0,private:!0,presence:!1}}}};var A={calendar:{github:"stacksjs/calendar",package:"@stacksjs/calendar",description:"Calendar links, ICS generation, and an STX calendar component"},table:{github:"stacksjs/table",package:"@stacksjs/table",description:"Typed table drivers and an STX data table component"}};export{A as stackExtensionRegistry,H as isPersonalAccessToken,N as isOAuthClient,x as isAccessToken,K as getTypeName,R as defineModels,Q as defineModel,U as SocialLinkIcon,Z as RealtimePresets,W as QueuePresets,_ as ExitCode,F as Every};
package/dist/model.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { DashboardModelOptions } from './dashboard';
1
2
  import type { DeepPartial } from '.';
2
3
  import type { Faker } from '@stacksjs/faker';
3
4
  import type { ModelNames, TableNames } from '@stacksjs/types';
@@ -156,6 +157,7 @@ export declare interface Relations {
156
157
  }
157
158
  export declare interface ApiSettings {
158
159
  uri: string
160
+ prefix: string
159
161
  middleware: ApiMiddleware
160
162
  routes:
161
163
  | {
@@ -186,9 +188,7 @@ export declare interface ModelOptions extends Base {
186
188
  primaryKey?: string
187
189
  autoIncrement?: boolean
188
190
  indexes?: CompositeIndex[]
189
- dashboard?: {
190
- highlight?: boolean | number
191
- }
191
+ dashboard?: DashboardModelOptions
192
192
  traits?: {
193
193
  useUuid?: boolean
194
194
  useTimestamps?: boolean | TimestampOptions
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Multi-site (request-level tenancy) configuration.
3
+ *
4
+ * One Stacks app serving many public web properties, each resolved from the
5
+ * request's Host header: either a subdomain of `baseDomain` or a verified
6
+ * custom domain in `site_domains`. Deploy-level tenancy (`cloud.attachTo`)
7
+ * is a different axis - that is many apps on one box; this is many sites in
8
+ * one app.
9
+ */
10
+ export declare interface SitesOptions {
11
+ enabled: boolean
12
+ baseDomain: string
13
+ platformHosts: string[]
14
+ strict: boolean
15
+ trustProxyHost: boolean
16
+ cacheTtlSeconds: number
17
+ }
18
+ export type SitesConfig = Partial<SitesOptions>;
package/dist/sms.d.ts CHANGED
@@ -34,6 +34,17 @@ export declare interface TwilioConfig {
34
34
  from?: string
35
35
  messagingServiceSid?: string
36
36
  statusCallback?: string
37
+ verifyServiceSid?: string
38
+ }
39
+ export declare interface SmsQuietHoursConfig {
40
+ enabled: boolean
41
+ startHour: number
42
+ endHour: number
43
+ timezone?: string
44
+ }
45
+ export declare interface SmsBulkConfig {
46
+ concurrency?: number
47
+ delayMs?: number
37
48
  }
38
49
  export declare interface VonageConfig {
39
50
  apiKey: string
@@ -89,6 +100,22 @@ export declare interface SmsOptions {
89
100
  templates?: SmsTemplateConfig[]
90
101
  inbox?: SmsInboxConfig
91
102
  maxSpendPerMonth?: number
103
+ quietHours?: SmsQuietHoursConfig
104
+ bulk?: SmsBulkConfig
105
+ }
106
+ export declare interface SmsInboundMessage {
107
+ from: string
108
+ to: string
109
+ body: string
110
+ messageId?: string
111
+ intent: SmsInboundIntent
112
+ keyword?: string
113
+ }
114
+ export declare interface SmsSegmentEstimate {
115
+ encoding: 'gsm-7' | 'ucs-2'
116
+ characters: number
117
+ segments: number
118
+ perSegment: number
92
119
  }
93
120
  // =============================================================================
94
121
  // SMS Driver Interface
@@ -141,4 +168,5 @@ export type SmsStatus = | 'queued'
141
168
  | 'failed'
142
169
  | 'undelivered'
143
170
  | 'unknown';
171
+ export type SmsInboundIntent = 'opt-out' | 'opt-in' | 'help' | 'message';
144
172
  export type SmsConfig = Partial<SmsOptions>;
package/dist/stacks.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AiConfig, AnalyticsConfig, AppConfig, AuthConfig, BinaryConfig, CacheConfig, CloudConfig, CmsConfig, CommerceConfig, CorsConfig, DashboardConfig, DatabaseConfig, DnsConfig, DocsConfig, EmailConfig, ErrorConfig, FeatureFlagsConfig, FilesystemsConfig, GitConfig, HashingConfig, ImagesConfig, LibraryConfig, LoggingConfig, MarketingConfig, MonitoringConfig, NotificationConfig, PaymentConfig, Ports, QueueConfig, RealtimeConfig, SaasConfig, SearchEngineConfig, SecurityConfig, ServerConfig, ServicesConfig, Team, UiConfig } from '.';
1
+ import type { AiConfig, AnalyticsConfig, AppConfig, AuthConfig, BinaryConfig, CacheConfig, CloudConfig, CmsConfig, CommerceConfig, CorsConfig, DashboardConfig, DatabaseConfig, DnsConfig, DocsConfig, EmailConfig, ErrorConfig, FeatureFlagsConfig, FilesystemsConfig, GitConfig, HashingConfig, ImagesConfig, LibraryConfig, LoggingConfig, MarketingConfig, MonitoringConfig, NotificationConfig, PaymentConfig, Ports, QueueConfig, RealtimeConfig, SaasConfig, SearchEngineConfig, FormsConfig, SitesConfig, SecurityConfig, ServerConfig, ServicesConfig, Team, UiConfig } from '.';
2
2
  /**
3
3
  * **Stacks Options**
4
4
  *
@@ -40,6 +40,8 @@ export declare interface StacksOptions {
40
40
  security: SecurityConfig
41
41
  searchEngine: SearchEngineConfig
42
42
  server: ServerConfig
43
+ sites: SitesConfig
44
+ forms: FormsConfig
43
45
  services: ServicesConfig
44
46
  filesystems: FilesystemsConfig
45
47
  team: Team
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/types",
3
3
  "type": "module",
4
- "version": "0.70.380",
4
+ "version": "0.71.2",
5
5
  "description": "The Stacks framework types.",
6
6
  "author": "Chris Breuer",
7
7
  "contributors": [
@@ -60,7 +60,7 @@
60
60
  "@stacksjs/clapp": "^0.2.12",
61
61
  "@stacksjs/stx": "^0.2.184",
62
62
  "@stacksjs/ts-validation": "^0.5.4",
63
- "bun-query-builder": "^0.2.30"
63
+ "bun-query-builder": "^0.2.38"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "meilisearch": "^0.59.0"
@@ -71,8 +71,8 @@
71
71
  }
72
72
  },
73
73
  "devDependencies": {
74
- "@stacksjs/validation": "0.70.380",
75
- "better-dx": "^0.2.17",
74
+ "@stacksjs/validation": "0.71.2",
75
+ "better-dx": "^0.2.23",
76
76
  "meilisearch": "^0.59.0"
77
77
  },
78
78
  "sideEffects": false,