@secondlayer/shared 2.1.0 → 3.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +2 -2
  2. package/dist/src/db/index.d.ts +39 -137
  3. package/dist/src/db/index.js.map +2 -2
  4. package/dist/src/db/jsonb.d.ts +5 -1
  5. package/dist/src/db/jsonb.js.map +2 -2
  6. package/dist/src/db/queries/account-spend-caps.d.ts +379 -0
  7. package/dist/src/db/queries/account-spend-caps.js +60 -0
  8. package/dist/src/db/queries/account-spend-caps.js.map +10 -0
  9. package/dist/src/db/queries/account-usage.d.ts +403 -0
  10. package/dist/src/db/queries/account-usage.js +222 -0
  11. package/dist/src/db/queries/account-usage.js.map +11 -0
  12. package/dist/src/db/queries/accounts.d.ts +41 -115
  13. package/dist/src/db/queries/accounts.js +15 -1
  14. package/dist/src/db/queries/accounts.js.map +3 -3
  15. package/dist/src/db/queries/integrity.d.ts +27 -114
  16. package/dist/src/db/queries/projects.d.ts +27 -114
  17. package/dist/src/db/queries/provisioning-audit.d.ts +27 -114
  18. package/dist/src/db/queries/subgraph-gaps.d.ts +27 -114
  19. package/dist/src/db/queries/subgraphs.d.ts +27 -115
  20. package/dist/src/db/queries/subgraphs.js +2 -3
  21. package/dist/src/db/queries/subgraphs.js.map +4 -4
  22. package/dist/src/db/queries/{workflows.d.ts → tenant-compute-addons.d.ts} +50 -149
  23. package/dist/src/db/queries/tenant-compute-addons.js +47 -0
  24. package/dist/src/db/queries/tenant-compute-addons.js.map +10 -0
  25. package/dist/src/db/queries/tenants.d.ts +40 -117
  26. package/dist/src/db/queries/tenants.js +9 -6
  27. package/dist/src/db/queries/tenants.js.map +3 -3
  28. package/dist/src/db/queries/usage.d.ts +28 -139
  29. package/dist/src/db/queries/usage.js +5 -64
  30. package/dist/src/db/queries/usage.js.map +4 -5
  31. package/dist/src/db/schema.d.ts +34 -136
  32. package/dist/src/errors.d.ts +8 -7
  33. package/dist/src/errors.js +11 -12
  34. package/dist/src/errors.js.map +3 -3
  35. package/dist/src/index.d.ts +46 -143
  36. package/dist/src/index.js +11 -12
  37. package/dist/src/index.js.map +4 -4
  38. package/dist/src/node/local-client.d.ts +27 -114
  39. package/dist/src/pricing.d.ts +20 -1
  40. package/dist/src/pricing.js +58 -1
  41. package/dist/src/pricing.js.map +3 -3
  42. package/migrations/0045_drop_marketplace_columns.ts +47 -0
  43. package/migrations/0046_tenant_activity_signal.ts +47 -0
  44. package/migrations/0047_usage_daily_tenant_id.ts +73 -0
  45. package/migrations/0048_tenant_compute_addons.ts +49 -0
  46. package/migrations/0049_accounts_stripe_customer_id.ts +30 -0
  47. package/migrations/0050_account_spend_caps.ts +45 -0
  48. package/migrations/0051_workflow_ai_usage_daily.ts +40 -0
  49. package/migrations/0052_sentries.ts +61 -0
  50. package/migrations/0053_workflow_runtime.ts +88 -0
  51. package/migrations/0054_accounts_plan_hobby.ts +32 -0
  52. package/migrations/0055_ai_usage_account_scope.ts +108 -0
  53. package/migrations/0056_drop_workflow_sentry_residuals.ts +23 -0
  54. package/package.json +26 -14
  55. package/dist/src/db/queries/workflows.js +0 -260
  56. package/dist/src/db/queries/workflows.js.map +0 -12
  57. package/dist/src/lib/plans.d.ts +0 -9
  58. package/dist/src/lib/plans.js +0 -37
  59. package/dist/src/lib/plans.js.map +0 -10
  60. package/dist/src/schemas/workflows.d.ts +0 -70
  61. package/dist/src/schemas/workflows.js +0 -43
  62. package/dist/src/schemas/workflows.js.map +0 -10
@@ -60,10 +60,6 @@ interface SubgraphsTable {
60
60
  handler_code: string | null;
61
61
  source_code: string | null;
62
62
  project_id: string | null;
63
- is_public: Generated<boolean>;
64
- tags: Generated<string[]>;
65
- description: string | null;
66
- forked_from_id: string | null;
67
63
  created_at: Generated<Date>;
68
64
  updated_at: Generated<Date>;
69
65
  }
@@ -98,6 +94,7 @@ interface AccountsTable {
98
94
  bio: string | null;
99
95
  avatar_url: string | null;
100
96
  slug: string | null;
97
+ stripe_customer_id: string | null;
101
98
  created_at: Generated<Date>;
102
99
  }
103
100
  interface SessionsTable {
@@ -123,6 +120,7 @@ interface MagicLinksTable {
123
120
  }
124
121
  interface UsageDailyTable {
125
122
  account_id: string;
123
+ tenant_id: string | null;
126
124
  date: string;
127
125
  api_requests: Generated<number>;
128
126
  deliveries: Generated<number>;
@@ -249,83 +247,6 @@ interface ChatMessagesTable {
249
247
  metadata: unknown | null;
250
248
  created_at: Generated<Date>;
251
249
  }
252
- interface WorkflowDefinitionsTable {
253
- id: Generated<string>;
254
- name: string;
255
- version: Generated<string>;
256
- status: Generated<string>;
257
- trigger_type: string;
258
- trigger_config: unknown;
259
- handler_path: string;
260
- source_code: string | null;
261
- retries_config: unknown | null;
262
- timeout_ms: number | null;
263
- api_key_id: string;
264
- project_id: string | null;
265
- created_at: Generated<Date>;
266
- updated_at: Generated<Date>;
267
- }
268
- interface WorkflowRunsTable {
269
- id: Generated<string>;
270
- definition_id: string;
271
- status: Generated<string>;
272
- trigger_type: string;
273
- trigger_data: unknown | null;
274
- dedup_key: string | null;
275
- error: string | null;
276
- started_at: Date | null;
277
- completed_at: Date | null;
278
- duration_ms: number | null;
279
- total_ai_tokens: Generated<number>;
280
- created_at: Generated<Date>;
281
- }
282
- interface WorkflowStepsTable {
283
- id: Generated<string>;
284
- run_id: string;
285
- step_index: number;
286
- step_id: string;
287
- step_type: string;
288
- status: Generated<string>;
289
- input: unknown | null;
290
- output: unknown | null;
291
- error: string | null;
292
- retry_count: Generated<number>;
293
- ai_tokens_used: Generated<number>;
294
- started_at: Date | null;
295
- completed_at: Date | null;
296
- duration_ms: number | null;
297
- memo_key: string | null;
298
- parent_step_id: string | null;
299
- created_at: Generated<Date>;
300
- }
301
- interface WorkflowQueueTable {
302
- id: Generated<string>;
303
- run_id: string;
304
- status: Generated<string>;
305
- attempts: Generated<number>;
306
- max_attempts: Generated<number>;
307
- scheduled_for: Generated<Date>;
308
- locked_at: Date | null;
309
- locked_by: string | null;
310
- error: string | null;
311
- created_at: Generated<Date>;
312
- completed_at: Date | null;
313
- }
314
- interface WorkflowSchedulesTable {
315
- id: Generated<string>;
316
- definition_id: string;
317
- cron_expr: string;
318
- timezone: Generated<string>;
319
- next_run_at: Date;
320
- last_run_at: Date | null;
321
- enabled: Generated<boolean>;
322
- created_at: Generated<Date>;
323
- }
324
- interface WorkflowCursorsTable {
325
- name: string;
326
- block_height: Generated<number>;
327
- updated_at: Generated<Date>;
328
- }
329
250
  interface Database {
330
251
  blocks: BlocksTable;
331
252
  transactions: TransactionsTable;
@@ -351,16 +272,10 @@ interface Database {
351
272
  team_invitations: TeamInvitationsTable;
352
273
  chat_sessions: ChatSessionsTable;
353
274
  chat_messages: ChatMessagesTable;
354
- workflow_definitions: WorkflowDefinitionsTable;
355
- workflow_runs: WorkflowRunsTable;
356
- workflow_steps: WorkflowStepsTable;
357
- workflow_queue: WorkflowQueueTable;
358
- workflow_schedules: WorkflowSchedulesTable;
359
- workflow_cursors: WorkflowCursorsTable;
360
- workflow_signer_secrets: WorkflowSignerSecretsTable;
361
- workflow_budgets: WorkflowBudgetsTable;
362
275
  tenants: TenantsTable;
363
276
  tenant_usage_monthly: TenantUsageMonthlyTable;
277
+ tenant_compute_addons: TenantComputeAddonsTable;
278
+ account_spend_caps: AccountSpendCapsTable;
364
279
  provisioning_audit_log: ProvisioningAuditLogTable;
365
280
  }
366
281
  type TenantStatus = "provisioning" | "active" | "suspended" | "error" | "deleted";
@@ -383,9 +298,9 @@ interface TenantsTable {
383
298
  service_key_enc: Buffer;
384
299
  api_url_internal: string;
385
300
  api_url_public: string;
386
- trial_ends_at: Date;
387
301
  suspended_at: Date | null;
388
302
  last_health_check_at: Date | null;
303
+ last_active_at: Generated<Date>;
389
304
  service_gen: Generated<number>;
390
305
  anon_gen: Generated<number>;
391
306
  project_id: string | null;
@@ -403,6 +318,28 @@ interface TenantUsageMonthlyTable {
403
318
  first_at: Generated<Date>;
404
319
  last_at: Generated<Date>;
405
320
  }
321
+ interface TenantComputeAddonsTable {
322
+ id: Generated<string>;
323
+ tenant_id: string;
324
+ memory_mb_delta: Generated<number>;
325
+ cpu_delta: Generated<number | string>;
326
+ storage_mb_delta: Generated<number>;
327
+ effective_from: Generated<Date>;
328
+ effective_until: Date | null;
329
+ stripe_subscription_item_id: string | null;
330
+ created_at: Generated<Date>;
331
+ }
332
+ interface AccountSpendCapsTable {
333
+ account_id: string;
334
+ monthly_cap_cents: number | null;
335
+ compute_cap_cents: number | null;
336
+ storage_cap_cents: number | null;
337
+ ai_cap_cents: number | null;
338
+ alert_threshold_pct: Generated<number>;
339
+ alert_sent_at: Date | null;
340
+ frozen_at: Date | null;
341
+ updated_at: Generated<Date>;
342
+ }
406
343
  type ProvisioningAuditEvent = "provision.start" | "provision.success" | "provision.failure" | "suspend" | "resume" | "resize" | "keys.rotate" | "bastion.key.upload" | "bastion.key.revoke" | "teardown";
407
344
  type ProvisioningAuditStatus = "ok" | "error";
408
345
  interface ProvisioningAuditLogTable {
@@ -417,30 +354,6 @@ interface ProvisioningAuditLogTable {
417
354
  error: string | null;
418
355
  created_at: Generated<Date>;
419
356
  }
420
- interface WorkflowBudgetsTable {
421
- id: Generated<string>;
422
- workflow_definition_id: string;
423
- /** Period key: "daily:YYYY-MM-DD" | "weekly:YYYY-Www" | "per-run:<uuid>". */
424
- period: string;
425
- ai_usd_used: Generated<string>;
426
- ai_tokens_used: Generated<string>;
427
- chain_microstx_used: Generated<string>;
428
- chain_tx_count: Generated<number>;
429
- run_count: Generated<number>;
430
- step_count: Generated<number>;
431
- reset_at: Date;
432
- created_at: Generated<Date>;
433
- updated_at: Generated<Date>;
434
- }
435
- interface WorkflowSignerSecretsTable {
436
- id: Generated<string>;
437
- account_id: string;
438
- name: string;
439
- /** AES-GCM ciphertext bytes produced by the runner's KMS on write. */
440
- encrypted_value: Buffer;
441
- created_at: Generated<Date>;
442
- updated_at: Generated<Date>;
443
- }
444
357
  type Project = Selectable<ProjectsTable>;
445
358
  type TeamInvitation = Selectable<TeamInvitationsTable>;
446
359
  declare function getProjectsByAccount(db: Kysely<Database>, accountId: string): Promise<Project[]>;
@@ -60,10 +60,6 @@ interface SubgraphsTable {
60
60
  handler_code: string | null;
61
61
  source_code: string | null;
62
62
  project_id: string | null;
63
- is_public: Generated<boolean>;
64
- tags: Generated<string[]>;
65
- description: string | null;
66
- forked_from_id: string | null;
67
63
  created_at: Generated<Date>;
68
64
  updated_at: Generated<Date>;
69
65
  }
@@ -98,6 +94,7 @@ interface AccountsTable {
98
94
  bio: string | null;
99
95
  avatar_url: string | null;
100
96
  slug: string | null;
97
+ stripe_customer_id: string | null;
101
98
  created_at: Generated<Date>;
102
99
  }
103
100
  interface SessionsTable {
@@ -123,6 +120,7 @@ interface MagicLinksTable {
123
120
  }
124
121
  interface UsageDailyTable {
125
122
  account_id: string;
123
+ tenant_id: string | null;
126
124
  date: string;
127
125
  api_requests: Generated<number>;
128
126
  deliveries: Generated<number>;
@@ -249,83 +247,6 @@ interface ChatMessagesTable {
249
247
  metadata: unknown | null;
250
248
  created_at: Generated<Date>;
251
249
  }
252
- interface WorkflowDefinitionsTable {
253
- id: Generated<string>;
254
- name: string;
255
- version: Generated<string>;
256
- status: Generated<string>;
257
- trigger_type: string;
258
- trigger_config: unknown;
259
- handler_path: string;
260
- source_code: string | null;
261
- retries_config: unknown | null;
262
- timeout_ms: number | null;
263
- api_key_id: string;
264
- project_id: string | null;
265
- created_at: Generated<Date>;
266
- updated_at: Generated<Date>;
267
- }
268
- interface WorkflowRunsTable {
269
- id: Generated<string>;
270
- definition_id: string;
271
- status: Generated<string>;
272
- trigger_type: string;
273
- trigger_data: unknown | null;
274
- dedup_key: string | null;
275
- error: string | null;
276
- started_at: Date | null;
277
- completed_at: Date | null;
278
- duration_ms: number | null;
279
- total_ai_tokens: Generated<number>;
280
- created_at: Generated<Date>;
281
- }
282
- interface WorkflowStepsTable {
283
- id: Generated<string>;
284
- run_id: string;
285
- step_index: number;
286
- step_id: string;
287
- step_type: string;
288
- status: Generated<string>;
289
- input: unknown | null;
290
- output: unknown | null;
291
- error: string | null;
292
- retry_count: Generated<number>;
293
- ai_tokens_used: Generated<number>;
294
- started_at: Date | null;
295
- completed_at: Date | null;
296
- duration_ms: number | null;
297
- memo_key: string | null;
298
- parent_step_id: string | null;
299
- created_at: Generated<Date>;
300
- }
301
- interface WorkflowQueueTable {
302
- id: Generated<string>;
303
- run_id: string;
304
- status: Generated<string>;
305
- attempts: Generated<number>;
306
- max_attempts: Generated<number>;
307
- scheduled_for: Generated<Date>;
308
- locked_at: Date | null;
309
- locked_by: string | null;
310
- error: string | null;
311
- created_at: Generated<Date>;
312
- completed_at: Date | null;
313
- }
314
- interface WorkflowSchedulesTable {
315
- id: Generated<string>;
316
- definition_id: string;
317
- cron_expr: string;
318
- timezone: Generated<string>;
319
- next_run_at: Date;
320
- last_run_at: Date | null;
321
- enabled: Generated<boolean>;
322
- created_at: Generated<Date>;
323
- }
324
- interface WorkflowCursorsTable {
325
- name: string;
326
- block_height: Generated<number>;
327
- updated_at: Generated<Date>;
328
- }
329
250
  interface Database {
330
251
  blocks: BlocksTable;
331
252
  transactions: TransactionsTable;
@@ -351,16 +272,10 @@ interface Database {
351
272
  team_invitations: TeamInvitationsTable;
352
273
  chat_sessions: ChatSessionsTable;
353
274
  chat_messages: ChatMessagesTable;
354
- workflow_definitions: WorkflowDefinitionsTable;
355
- workflow_runs: WorkflowRunsTable;
356
- workflow_steps: WorkflowStepsTable;
357
- workflow_queue: WorkflowQueueTable;
358
- workflow_schedules: WorkflowSchedulesTable;
359
- workflow_cursors: WorkflowCursorsTable;
360
- workflow_signer_secrets: WorkflowSignerSecretsTable;
361
- workflow_budgets: WorkflowBudgetsTable;
362
275
  tenants: TenantsTable;
363
276
  tenant_usage_monthly: TenantUsageMonthlyTable;
277
+ tenant_compute_addons: TenantComputeAddonsTable;
278
+ account_spend_caps: AccountSpendCapsTable;
364
279
  provisioning_audit_log: ProvisioningAuditLogTable;
365
280
  }
366
281
  type TenantStatus = "provisioning" | "active" | "suspended" | "error" | "deleted";
@@ -383,9 +298,9 @@ interface TenantsTable {
383
298
  service_key_enc: Buffer;
384
299
  api_url_internal: string;
385
300
  api_url_public: string;
386
- trial_ends_at: Date;
387
301
  suspended_at: Date | null;
388
302
  last_health_check_at: Date | null;
303
+ last_active_at: Generated<Date>;
389
304
  service_gen: Generated<number>;
390
305
  anon_gen: Generated<number>;
391
306
  project_id: string | null;
@@ -403,6 +318,28 @@ interface TenantUsageMonthlyTable {
403
318
  first_at: Generated<Date>;
404
319
  last_at: Generated<Date>;
405
320
  }
321
+ interface TenantComputeAddonsTable {
322
+ id: Generated<string>;
323
+ tenant_id: string;
324
+ memory_mb_delta: Generated<number>;
325
+ cpu_delta: Generated<number | string>;
326
+ storage_mb_delta: Generated<number>;
327
+ effective_from: Generated<Date>;
328
+ effective_until: Date | null;
329
+ stripe_subscription_item_id: string | null;
330
+ created_at: Generated<Date>;
331
+ }
332
+ interface AccountSpendCapsTable {
333
+ account_id: string;
334
+ monthly_cap_cents: number | null;
335
+ compute_cap_cents: number | null;
336
+ storage_cap_cents: number | null;
337
+ ai_cap_cents: number | null;
338
+ alert_threshold_pct: Generated<number>;
339
+ alert_sent_at: Date | null;
340
+ frozen_at: Date | null;
341
+ updated_at: Generated<Date>;
342
+ }
406
343
  type ProvisioningAuditEvent = "provision.start" | "provision.success" | "provision.failure" | "suspend" | "resume" | "resize" | "keys.rotate" | "bastion.key.upload" | "bastion.key.revoke" | "teardown";
407
344
  type ProvisioningAuditStatus = "ok" | "error";
408
345
  interface ProvisioningAuditLogTable {
@@ -418,30 +355,6 @@ interface ProvisioningAuditLogTable {
418
355
  created_at: Generated<Date>;
419
356
  }
420
357
  type ProvisioningAuditLog = Selectable<ProvisioningAuditLogTable>;
421
- interface WorkflowBudgetsTable {
422
- id: Generated<string>;
423
- workflow_definition_id: string;
424
- /** Period key: "daily:YYYY-MM-DD" | "weekly:YYYY-Www" | "per-run:<uuid>". */
425
- period: string;
426
- ai_usd_used: Generated<string>;
427
- ai_tokens_used: Generated<string>;
428
- chain_microstx_used: Generated<string>;
429
- chain_tx_count: Generated<number>;
430
- run_count: Generated<number>;
431
- step_count: Generated<number>;
432
- reset_at: Date;
433
- created_at: Generated<Date>;
434
- updated_at: Generated<Date>;
435
- }
436
- interface WorkflowSignerSecretsTable {
437
- id: Generated<string>;
438
- account_id: string;
439
- name: string;
440
- /** AES-GCM ciphertext bytes produced by the runner's KMS on write. */
441
- encrypted_value: Buffer;
442
- created_at: Generated<Date>;
443
- updated_at: Generated<Date>;
444
- }
445
358
  /**
446
359
  * Provisioning audit trail — every lifecycle event that mutates a tenant
447
360
  * lands here. Write on both happy and sad paths so we can reconstruct
@@ -60,10 +60,6 @@ interface SubgraphsTable {
60
60
  handler_code: string | null;
61
61
  source_code: string | null;
62
62
  project_id: string | null;
63
- is_public: Generated<boolean>;
64
- tags: Generated<string[]>;
65
- description: string | null;
66
- forked_from_id: string | null;
67
63
  created_at: Generated<Date>;
68
64
  updated_at: Generated<Date>;
69
65
  }
@@ -98,6 +94,7 @@ interface AccountsTable {
98
94
  bio: string | null;
99
95
  avatar_url: string | null;
100
96
  slug: string | null;
97
+ stripe_customer_id: string | null;
101
98
  created_at: Generated<Date>;
102
99
  }
103
100
  interface SessionsTable {
@@ -123,6 +120,7 @@ interface MagicLinksTable {
123
120
  }
124
121
  interface UsageDailyTable {
125
122
  account_id: string;
123
+ tenant_id: string | null;
126
124
  date: string;
127
125
  api_requests: Generated<number>;
128
126
  deliveries: Generated<number>;
@@ -249,83 +247,6 @@ interface ChatMessagesTable {
249
247
  metadata: unknown | null;
250
248
  created_at: Generated<Date>;
251
249
  }
252
- interface WorkflowDefinitionsTable {
253
- id: Generated<string>;
254
- name: string;
255
- version: Generated<string>;
256
- status: Generated<string>;
257
- trigger_type: string;
258
- trigger_config: unknown;
259
- handler_path: string;
260
- source_code: string | null;
261
- retries_config: unknown | null;
262
- timeout_ms: number | null;
263
- api_key_id: string;
264
- project_id: string | null;
265
- created_at: Generated<Date>;
266
- updated_at: Generated<Date>;
267
- }
268
- interface WorkflowRunsTable {
269
- id: Generated<string>;
270
- definition_id: string;
271
- status: Generated<string>;
272
- trigger_type: string;
273
- trigger_data: unknown | null;
274
- dedup_key: string | null;
275
- error: string | null;
276
- started_at: Date | null;
277
- completed_at: Date | null;
278
- duration_ms: number | null;
279
- total_ai_tokens: Generated<number>;
280
- created_at: Generated<Date>;
281
- }
282
- interface WorkflowStepsTable {
283
- id: Generated<string>;
284
- run_id: string;
285
- step_index: number;
286
- step_id: string;
287
- step_type: string;
288
- status: Generated<string>;
289
- input: unknown | null;
290
- output: unknown | null;
291
- error: string | null;
292
- retry_count: Generated<number>;
293
- ai_tokens_used: Generated<number>;
294
- started_at: Date | null;
295
- completed_at: Date | null;
296
- duration_ms: number | null;
297
- memo_key: string | null;
298
- parent_step_id: string | null;
299
- created_at: Generated<Date>;
300
- }
301
- interface WorkflowQueueTable {
302
- id: Generated<string>;
303
- run_id: string;
304
- status: Generated<string>;
305
- attempts: Generated<number>;
306
- max_attempts: Generated<number>;
307
- scheduled_for: Generated<Date>;
308
- locked_at: Date | null;
309
- locked_by: string | null;
310
- error: string | null;
311
- created_at: Generated<Date>;
312
- completed_at: Date | null;
313
- }
314
- interface WorkflowSchedulesTable {
315
- id: Generated<string>;
316
- definition_id: string;
317
- cron_expr: string;
318
- timezone: Generated<string>;
319
- next_run_at: Date;
320
- last_run_at: Date | null;
321
- enabled: Generated<boolean>;
322
- created_at: Generated<Date>;
323
- }
324
- interface WorkflowCursorsTable {
325
- name: string;
326
- block_height: Generated<number>;
327
- updated_at: Generated<Date>;
328
- }
329
250
  interface Database {
330
251
  blocks: BlocksTable;
331
252
  transactions: TransactionsTable;
@@ -351,16 +272,10 @@ interface Database {
351
272
  team_invitations: TeamInvitationsTable;
352
273
  chat_sessions: ChatSessionsTable;
353
274
  chat_messages: ChatMessagesTable;
354
- workflow_definitions: WorkflowDefinitionsTable;
355
- workflow_runs: WorkflowRunsTable;
356
- workflow_steps: WorkflowStepsTable;
357
- workflow_queue: WorkflowQueueTable;
358
- workflow_schedules: WorkflowSchedulesTable;
359
- workflow_cursors: WorkflowCursorsTable;
360
- workflow_signer_secrets: WorkflowSignerSecretsTable;
361
- workflow_budgets: WorkflowBudgetsTable;
362
275
  tenants: TenantsTable;
363
276
  tenant_usage_monthly: TenantUsageMonthlyTable;
277
+ tenant_compute_addons: TenantComputeAddonsTable;
278
+ account_spend_caps: AccountSpendCapsTable;
364
279
  provisioning_audit_log: ProvisioningAuditLogTable;
365
280
  }
366
281
  type TenantStatus = "provisioning" | "active" | "suspended" | "error" | "deleted";
@@ -383,9 +298,9 @@ interface TenantsTable {
383
298
  service_key_enc: Buffer;
384
299
  api_url_internal: string;
385
300
  api_url_public: string;
386
- trial_ends_at: Date;
387
301
  suspended_at: Date | null;
388
302
  last_health_check_at: Date | null;
303
+ last_active_at: Generated<Date>;
389
304
  service_gen: Generated<number>;
390
305
  anon_gen: Generated<number>;
391
306
  project_id: string | null;
@@ -403,6 +318,28 @@ interface TenantUsageMonthlyTable {
403
318
  first_at: Generated<Date>;
404
319
  last_at: Generated<Date>;
405
320
  }
321
+ interface TenantComputeAddonsTable {
322
+ id: Generated<string>;
323
+ tenant_id: string;
324
+ memory_mb_delta: Generated<number>;
325
+ cpu_delta: Generated<number | string>;
326
+ storage_mb_delta: Generated<number>;
327
+ effective_from: Generated<Date>;
328
+ effective_until: Date | null;
329
+ stripe_subscription_item_id: string | null;
330
+ created_at: Generated<Date>;
331
+ }
332
+ interface AccountSpendCapsTable {
333
+ account_id: string;
334
+ monthly_cap_cents: number | null;
335
+ compute_cap_cents: number | null;
336
+ storage_cap_cents: number | null;
337
+ ai_cap_cents: number | null;
338
+ alert_threshold_pct: Generated<number>;
339
+ alert_sent_at: Date | null;
340
+ frozen_at: Date | null;
341
+ updated_at: Generated<Date>;
342
+ }
406
343
  type ProvisioningAuditEvent = "provision.start" | "provision.success" | "provision.failure" | "suspend" | "resume" | "resize" | "keys.rotate" | "bastion.key.upload" | "bastion.key.revoke" | "teardown";
407
344
  type ProvisioningAuditStatus = "ok" | "error";
408
345
  interface ProvisioningAuditLogTable {
@@ -417,30 +354,6 @@ interface ProvisioningAuditLogTable {
417
354
  error: string | null;
418
355
  created_at: Generated<Date>;
419
356
  }
420
- interface WorkflowBudgetsTable {
421
- id: Generated<string>;
422
- workflow_definition_id: string;
423
- /** Period key: "daily:YYYY-MM-DD" | "weekly:YYYY-Www" | "per-run:<uuid>". */
424
- period: string;
425
- ai_usd_used: Generated<string>;
426
- ai_tokens_used: Generated<string>;
427
- chain_microstx_used: Generated<string>;
428
- chain_tx_count: Generated<number>;
429
- run_count: Generated<number>;
430
- step_count: Generated<number>;
431
- reset_at: Date;
432
- created_at: Generated<Date>;
433
- updated_at: Generated<Date>;
434
- }
435
- interface WorkflowSignerSecretsTable {
436
- id: Generated<string>;
437
- account_id: string;
438
- name: string;
439
- /** AES-GCM ciphertext bytes produced by the runner's KMS on write. */
440
- encrypted_value: Buffer;
441
- created_at: Generated<Date>;
442
- updated_at: Generated<Date>;
443
- }
444
357
  interface GapRange {
445
358
  start: number;
446
359
  end: number;