@nbt-dev/nbt 0.0.1 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +177 -21
- package/README.md +16 -13
- package/TRADEMARKS.md +49 -0
- package/dist/nbt.js +398 -19
- package/package.json +5 -4
- package/stdlib/auth/README.md +83 -0
- package/stdlib/auth/migrations/20260424144652_initial/migration.nbt +48 -0
- package/stdlib/auth/migrations/20260424144652_initial/schema_snapshot.nbt +58 -0
- package/stdlib/auth/migrations/20260521191014_update_user/migration.nbt +3 -0
- package/stdlib/auth/migrations/20260521191014_update_user/schema_snapshot.nbt +59 -0
- package/stdlib/auth/schema.nbt +142 -0
- package/stdlib/calendar/adapters/gohighlevel/tests/fixtures/v2_calendar_pilot.json +12 -0
- package/stdlib/calendar/adapters/gohighlevel/tests/fixtures/webhooks/appointment_changed.json +70 -0
- package/stdlib/calendar/adapters/gohighlevel/tests/fixtures/webhooks/appointment_created.json +72 -0
- package/stdlib/calendar/migrations/20260501210107_initial/migration.nbt +60 -0
- package/stdlib/calendar/migrations/20260501210107_initial/schema_snapshot.nbt +66 -0
- package/stdlib/calendar/migrations/20260513151050_schema_update/migration.nbt +17 -0
- package/stdlib/calendar/migrations/20260513151050_schema_update/schema_snapshot.nbt +83 -0
- package/stdlib/calendar/schema.nbt +86 -0
- package/stdlib/chat/migrations/20260429222411_initial/migration.nbt +59 -0
- package/stdlib/chat/migrations/20260429222411_initial/schema_snapshot.nbt +71 -0
- package/stdlib/chat/migrations/20260430185225_add_messagereaction/migration.nbt +9 -0
- package/stdlib/chat/migrations/20260430185225_add_messagereaction/schema_snapshot.nbt +78 -0
- package/stdlib/chat/migrations/20260518191152_update_message/migration.nbt +3 -0
- package/stdlib/chat/migrations/20260518191152_update_message/schema_snapshot.nbt +81 -0
- package/stdlib/chat/schema.nbt +130 -0
- package/stdlib/crm/adapters/gohighlevel/README.md +85 -0
- package/stdlib/crm/adapters/gohighlevel/tests/README.md +159 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_138fields.json +222 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_140fields.json +219 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_alt.json +212 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_changed.json +102 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_created.json +95 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_full.json +213 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_sparse.json +161 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_update_a.json +197 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/contact_update_b.json +197 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/opportunity_changed.json +85 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/opportunity_created.json +85 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_contact_pilot.json +43 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_contact_with_price_closed.json +7 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_contact_with_price_open.json +7 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_event_appointment_delete.json +1 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_event_calendar_update.json +1 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_event_contact_create.json +1 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_event_opp_status_update.json +1 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_opportunity_pilot.json +16 -0
- package/stdlib/crm/adapters/gohighlevel/tests/fixtures/webhooks/v2_pipelines_pilot.json +137 -0
- package/stdlib/crm/migrations/20260501210107_initial/migration.nbt +63 -0
- package/stdlib/crm/migrations/20260501210107_initial/schema_snapshot.nbt +73 -0
- package/stdlib/crm/migrations/20260513151050_schema_update/migration.nbt +13 -0
- package/stdlib/crm/migrations/20260513151050_schema_update/schema_snapshot.nbt +86 -0
- package/stdlib/crm/schema.nbt +148 -0
- package/stdlib/design/migrations/20260501210107_initial/migration.nbt +19 -0
- package/stdlib/design/migrations/20260501210107_initial/schema_snapshot.nbt +21 -0
- package/stdlib/design/migrations/20260610130000_design_system/migration.nbt +50 -0
- package/stdlib/design/migrations/20260610130000_design_system/schema_snapshot.nbt +80 -0
- package/stdlib/design/schema.nbt +140 -0
- package/stdlib/dns/migrations/20260501210107_initial/migration.nbt +32 -0
- package/stdlib/dns/migrations/20260501210107_initial/schema_snapshot.nbt +36 -0
- package/stdlib/dns/schema.nbt +68 -0
- package/stdlib/email/migrations/20260427235207_initial/migration.nbt +75 -0
- package/stdlib/email/migrations/20260427235207_initial/schema_snapshot.nbt +87 -0
- package/stdlib/email/schema.nbt +145 -0
- package/stdlib/ingest/README.md +29 -0
- package/stdlib/ingest/migrations/20260424144652_initial/migration.nbt +18 -0
- package/stdlib/ingest/migrations/20260424144652_initial/schema_snapshot.nbt +20 -0
- package/stdlib/ingest/migrations/20260429203747_schema_update/migration.nbt +3 -0
- package/stdlib/ingest/migrations/20260429203747_schema_update/schema_snapshot.nbt +21 -0
- package/stdlib/ingest/schema.nbt +37 -0
- package/stdlib/notifications/README.md +118 -0
- package/stdlib/notifications/migrations/20260430204408_initial/migration.nbt +42 -0
- package/stdlib/notifications/migrations/20260430204408_initial/schema_snapshot.nbt +46 -0
- package/stdlib/notifications/schema.nbt +67 -0
- package/stdlib/phone/migrations/20260605205722_initial/migration.nbt +50 -0
- package/stdlib/phone/migrations/20260605205722_initial/schema_snapshot.nbt +56 -0
- package/stdlib/phone/schema.nbt +95 -0
- package/stdlib/registry/migrations/20260602181932_initial/migration.nbt +8 -0
- package/stdlib/registry/migrations/20260602181932_initial/schema_snapshot.nbt +8 -0
- package/stdlib/registry/schema.nbt +20 -0
- package/stdlib/workflows/schema.nbt +44 -0
- package/vendor/linux-x64/cartridges/auth/migrations/20260424144652_initial/migration.nbt +48 -0
- package/vendor/linux-x64/cartridges/auth/migrations/20260424144652_initial/schema_snapshot.nbt +58 -0
- package/vendor/linux-x64/cartridges/auth/migrations/20260521191014_update_user/migration.nbt +3 -0
- package/vendor/linux-x64/cartridges/auth/migrations/20260521191014_update_user/schema_snapshot.nbt +59 -0
- package/vendor/linux-x64/cartridges/auth/schema.nbt +142 -0
- package/vendor/linux-x64/cartridges/calendar/migrations/20260501210107_initial/migration.nbt +60 -0
- package/vendor/linux-x64/cartridges/calendar/migrations/20260501210107_initial/schema_snapshot.nbt +66 -0
- package/vendor/linux-x64/cartridges/calendar/migrations/20260513151050_schema_update/migration.nbt +17 -0
- package/vendor/linux-x64/cartridges/calendar/migrations/20260513151050_schema_update/schema_snapshot.nbt +83 -0
- package/vendor/linux-x64/cartridges/calendar/schema.nbt +86 -0
- package/vendor/linux-x64/cartridges/chat/migrations/20260429222411_initial/migration.nbt +59 -0
- package/vendor/linux-x64/cartridges/chat/migrations/20260429222411_initial/schema_snapshot.nbt +71 -0
- package/vendor/linux-x64/cartridges/chat/migrations/20260430185225_add_messagereaction/migration.nbt +9 -0
- package/vendor/linux-x64/cartridges/chat/migrations/20260430185225_add_messagereaction/schema_snapshot.nbt +78 -0
- package/vendor/linux-x64/cartridges/chat/migrations/20260518191152_update_message/migration.nbt +3 -0
- package/vendor/linux-x64/cartridges/chat/migrations/20260518191152_update_message/schema_snapshot.nbt +81 -0
- package/vendor/linux-x64/cartridges/chat/schema.nbt +130 -0
- package/vendor/linux-x64/cartridges/crm/migrations/20260501210107_initial/migration.nbt +63 -0
- package/vendor/linux-x64/cartridges/crm/migrations/20260501210107_initial/schema_snapshot.nbt +73 -0
- package/vendor/linux-x64/cartridges/crm/migrations/20260513151050_schema_update/migration.nbt +13 -0
- package/vendor/linux-x64/cartridges/crm/migrations/20260513151050_schema_update/schema_snapshot.nbt +86 -0
- package/vendor/linux-x64/cartridges/crm/schema.nbt +148 -0
- package/vendor/linux-x64/cartridges/design/migrations/20260501210107_initial/migration.nbt +19 -0
- package/vendor/linux-x64/cartridges/design/migrations/20260501210107_initial/schema_snapshot.nbt +21 -0
- package/vendor/linux-x64/cartridges/design/migrations/20260610130000_design_system/migration.nbt +50 -0
- package/vendor/linux-x64/cartridges/design/migrations/20260610130000_design_system/schema_snapshot.nbt +80 -0
- package/vendor/linux-x64/cartridges/design/schema.nbt +140 -0
- package/vendor/linux-x64/cartridges/dns/migrations/20260501210107_initial/migration.nbt +32 -0
- package/vendor/linux-x64/cartridges/dns/migrations/20260501210107_initial/schema_snapshot.nbt +36 -0
- package/vendor/linux-x64/cartridges/dns/schema.nbt +68 -0
- package/vendor/linux-x64/cartridges/email/migrations/20260427235207_initial/migration.nbt +75 -0
- package/vendor/linux-x64/cartridges/email/migrations/20260427235207_initial/schema_snapshot.nbt +87 -0
- package/vendor/linux-x64/cartridges/email/schema.nbt +145 -0
- package/vendor/linux-x64/cartridges/ingest/migrations/20260424144652_initial/migration.nbt +18 -0
- package/vendor/linux-x64/cartridges/ingest/migrations/20260424144652_initial/schema_snapshot.nbt +20 -0
- package/vendor/linux-x64/cartridges/ingest/migrations/20260429203747_schema_update/migration.nbt +3 -0
- package/vendor/linux-x64/cartridges/ingest/migrations/20260429203747_schema_update/schema_snapshot.nbt +21 -0
- package/vendor/linux-x64/cartridges/ingest/schema.nbt +37 -0
- package/vendor/linux-x64/cartridges/notifications/migrations/20260430204408_initial/migration.nbt +42 -0
- package/vendor/linux-x64/cartridges/notifications/migrations/20260430204408_initial/schema_snapshot.nbt +46 -0
- package/vendor/linux-x64/cartridges/notifications/schema.nbt +67 -0
- package/vendor/linux-x64/cartridges/phone/migrations/20260605205722_initial/migration.nbt +50 -0
- package/vendor/linux-x64/cartridges/phone/migrations/20260605205722_initial/schema_snapshot.nbt +56 -0
- package/vendor/linux-x64/cartridges/phone/schema.nbt +95 -0
- package/vendor/linux-x64/cartridges/registry/migrations/20260602181932_initial/migration.nbt +8 -0
- package/vendor/linux-x64/cartridges/registry/migrations/20260602181932_initial/schema_snapshot.nbt +8 -0
- package/vendor/linux-x64/cartridges/registry/schema.nbt +20 -0
- package/vendor/linux-x64/cartridges/workflows/schema.nbt +44 -0
- package/vendor/linux-x64/console +0 -0
- package/vendor/linux-x64/nbt +0 -0
- package/contracts/audit/.dist/contract.json +0 -56
- package/contracts/auth/.dist/contract.json +0 -252
- package/contracts/calendar/.dist/contract.json +0 -141
- package/contracts/chat/.dist/contract.json +0 -229
- package/contracts/crm/.dist/contract.json +0 -239
- package/contracts/design/.dist/contract.json +0 -85
- package/contracts/dns/.dist/contract.json +0 -123
- package/contracts/email/.dist/contract.json +0 -267
- package/contracts/embed/.dist/contract.json +0 -137
- package/contracts/ingest/.dist/contract.json +0 -86
- package/contracts/notifications/.dist/contract.json +0 -133
- package/contracts/phone/.dist/contract.json +0 -168
- package/contracts/registry/.dist/contract.json +0 -49
- package/contracts/workflows/.dist/contract.json +0 -106
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import {User} from "auth";
|
|
2
|
+
|
|
3
|
+
export entity Contact {
|
|
4
|
+
id: ulid
|
|
5
|
+
createdAt: DateTime @default(now())
|
|
6
|
+
updatedAt: DateTime @updatedAt
|
|
7
|
+
firstName?: string
|
|
8
|
+
lastName?: string
|
|
9
|
+
fullName?: string
|
|
10
|
+
|
|
11
|
+
phone?: string
|
|
12
|
+
mobile?: string
|
|
13
|
+
email?: string
|
|
14
|
+
|
|
15
|
+
address?: string
|
|
16
|
+
fullAddress?: string
|
|
17
|
+
postalCode?: string
|
|
18
|
+
city?: string
|
|
19
|
+
stateOrProvince?: string
|
|
20
|
+
country?: string
|
|
21
|
+
timezone?: string
|
|
22
|
+
|
|
23
|
+
lat?: float
|
|
24
|
+
lon?: float
|
|
25
|
+
|
|
26
|
+
company?: string
|
|
27
|
+
website?: string
|
|
28
|
+
title?: string
|
|
29
|
+
industry?: string
|
|
30
|
+
source?: string
|
|
31
|
+
notes?: string
|
|
32
|
+
|
|
33
|
+
# custom client usecase specific data goes here
|
|
34
|
+
# for mylocalpro currently custom stuff is:
|
|
35
|
+
# * location deemed insufficient
|
|
36
|
+
data: document
|
|
37
|
+
customData: document
|
|
38
|
+
|
|
39
|
+
deals: Deal[]
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Generic per-appointment lifecycle outcome — neutral over customer domain.
|
|
43
|
+
# Customers project their domain-specific outcome into the (rating, status)
|
|
44
|
+
# pair: solar deployments record `status="won"|"lost"`, therapy clinics
|
|
45
|
+
# record `rating: 1..5`, field-service deployments record both. The
|
|
46
|
+
# `outcomeClass` mapping that drives similarity-weighted aggregation lives
|
|
47
|
+
# in each customer's own lifecycle logic, not on this entity.
|
|
48
|
+
export entity Outcome {
|
|
49
|
+
id: ulid
|
|
50
|
+
createdAt: DateTime @default(now())
|
|
51
|
+
updatedAt: DateTime @updatedAt
|
|
52
|
+
appointmentId: string
|
|
53
|
+
rating?: float
|
|
54
|
+
status?: string
|
|
55
|
+
notes?: string
|
|
56
|
+
recordedAt: DateTime @default(now())
|
|
57
|
+
|
|
58
|
+
@@index([appointmentId])
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export entity Deal {
|
|
62
|
+
id: ulid
|
|
63
|
+
createdAt: DateTime @default(now())
|
|
64
|
+
updatedAt: DateTime @updatedAt
|
|
65
|
+
name: string
|
|
66
|
+
contact: Contact
|
|
67
|
+
value?: float
|
|
68
|
+
currency?: string
|
|
69
|
+
type?: string
|
|
70
|
+
|
|
71
|
+
stage?: string
|
|
72
|
+
|
|
73
|
+
pipeline?: Pipeline
|
|
74
|
+
pipelineStage?: PipelineStage
|
|
75
|
+
|
|
76
|
+
data: document
|
|
77
|
+
customData: document
|
|
78
|
+
|
|
79
|
+
# Append-only suffix — fields below this comment must stay at the end
|
|
80
|
+
# of the entity declaration. Codegen serializes in declaration order;
|
|
81
|
+
# newly-added fields go *after* existing fields so the on-disk byte
|
|
82
|
+
# layout stays forward-compatible (old records deserialize cleanly with
|
|
83
|
+
# trailing fields default-initialised). See the EOF-tolerant deserialize
|
|
84
|
+
# codegen in modules/nbt/codegen_serial.jai.
|
|
85
|
+
|
|
86
|
+
# D09.02 — generic lifecycle status, customer-domain. mylocalpro reacts
|
|
87
|
+
# to `deal.status == "won"` to mark the source Appointment positive.
|
|
88
|
+
status?: string
|
|
89
|
+
|
|
90
|
+
# D09.02 — optional back-reference to the Appointment this Deal
|
|
91
|
+
# originated from. Plain string id (not a relation) so webhook ingest
|
|
92
|
+
# can set it without requiring the Appointment row to exist yet.
|
|
93
|
+
appointmentId?: string
|
|
94
|
+
|
|
95
|
+
# Total contract price for the deal (USD). Resolved at GHL adapter
|
|
96
|
+
# ingest from Contact custom field "Total Contract Price" via
|
|
97
|
+
# CONTACT_LATEST_OPEN_DEAL Field_Mapping resolver. Closed deals lock —
|
|
98
|
+
# adapter writes to status ∈ {won, lost} are rejected to preserve
|
|
99
|
+
# historical pricing without double-storing.
|
|
100
|
+
totalContractPrice?: float
|
|
101
|
+
|
|
102
|
+
# Date the deal closed (won or lost). Resolved at GHL adapter ingest
|
|
103
|
+
# from Contact custom field "Date Sold" via CONTACT_LATEST_OPEN_DEAL.
|
|
104
|
+
# Append-only field — codegen serializes in declaration order, so
|
|
105
|
+
# existing rows deserialize cleanly with this trailing default.
|
|
106
|
+
closedDate?: DateTime
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
entity Pipeline {
|
|
110
|
+
id: ulid
|
|
111
|
+
createdAt: DateTime @default(now())
|
|
112
|
+
updatedAt: DateTime @updatedAt
|
|
113
|
+
name: string
|
|
114
|
+
description?: string
|
|
115
|
+
stages: PipelineStage[]
|
|
116
|
+
|
|
117
|
+
deals: Deal[]
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
entity PipelineStage {
|
|
121
|
+
id: ulid
|
|
122
|
+
createdAt: DateTime @default(now())
|
|
123
|
+
updatedAt: DateTime @updatedAt
|
|
124
|
+
name: string
|
|
125
|
+
order: u32
|
|
126
|
+
pipeline: Pipeline @relation(onDelete: Cascade) # stages are owned by their pipeline
|
|
127
|
+
|
|
128
|
+
deals: Deal[]
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
entity PipelineStageTransition {
|
|
132
|
+
id: ulid
|
|
133
|
+
createdAt: DateTime @default(now())
|
|
134
|
+
updatedAt: DateTime @updatedAt
|
|
135
|
+
# updatedAt is added automatically but means nothing since these are immutable
|
|
136
|
+
# createdAt is equivalent to movedAt
|
|
137
|
+
|
|
138
|
+
fromPipelineId?: string
|
|
139
|
+
toPipelineId: string
|
|
140
|
+
|
|
141
|
+
fromStageId?: string
|
|
142
|
+
toStageId: string
|
|
143
|
+
|
|
144
|
+
movedBy?: User @relation(onDelete: SetNull)
|
|
145
|
+
|
|
146
|
+
@@index([fromPipelineId, toPipelineId, fromStageId, toStageId])
|
|
147
|
+
}
|
|
148
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
migration initial {
|
|
2
|
+
add_entity Design
|
|
3
|
+
add_field Design name string default("")
|
|
4
|
+
add_field Design slug string default("")
|
|
5
|
+
add_field Design description string default("")
|
|
6
|
+
add_field Design headVersionId string default("")
|
|
7
|
+
add_field Design headVersion u32 default(0)
|
|
8
|
+
add_unique Design [slug]
|
|
9
|
+
add_entity DesignVersion
|
|
10
|
+
add_field DesignVersion designId string default("")
|
|
11
|
+
add_field DesignVersion version u32 default(0)
|
|
12
|
+
add_field DesignVersion body document default(0)
|
|
13
|
+
add_field DesignVersion source string default("")
|
|
14
|
+
add_field DesignVersion note string default("")
|
|
15
|
+
add_field DesignVersion createdBy string default("")
|
|
16
|
+
add_field DesignVersion parseErrors string default("")
|
|
17
|
+
add_index DesignVersion [designId]
|
|
18
|
+
add_unique DesignVersion [designId, version]
|
|
19
|
+
}
|
package/vendor/linux-x64/cartridges/design/migrations/20260501210107_initial/schema_snapshot.nbt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
entity Design {
|
|
2
|
+
name: string
|
|
3
|
+
slug: string
|
|
4
|
+
description: string
|
|
5
|
+
headVersionId: string
|
|
6
|
+
headVersion: u32
|
|
7
|
+
@@unique([slug])
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
entity DesignVersion {
|
|
11
|
+
designId: string
|
|
12
|
+
version: u32
|
|
13
|
+
body: document
|
|
14
|
+
source: string
|
|
15
|
+
note: string
|
|
16
|
+
createdBy: string
|
|
17
|
+
parseErrors: string
|
|
18
|
+
@@index([designId])
|
|
19
|
+
@@unique([designId, version])
|
|
20
|
+
}
|
|
21
|
+
|
package/vendor/linux-x64/cartridges/design/migrations/20260610130000_design_system/migration.nbt
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
migration design_system {
|
|
2
|
+
add_field Design designerId string default("")
|
|
3
|
+
add_entity Designer
|
|
4
|
+
add_field Designer name string default("")
|
|
5
|
+
add_field Designer handle string default("")
|
|
6
|
+
add_field Designer url string default("")
|
|
7
|
+
add_field Designer bio string default("")
|
|
8
|
+
add_unique Designer [handle]
|
|
9
|
+
add_entity Token
|
|
10
|
+
add_field Token designId string default("")
|
|
11
|
+
add_field Token name string default("")
|
|
12
|
+
add_field Token kind string default("")
|
|
13
|
+
add_field Token value string default("")
|
|
14
|
+
add_field Token darkValue string default("")
|
|
15
|
+
add_index Token [designId]
|
|
16
|
+
add_unique Token [designId, name]
|
|
17
|
+
add_entity Component
|
|
18
|
+
add_field Component designId string default("")
|
|
19
|
+
add_field Component name string default("")
|
|
20
|
+
add_field Component version u32 default(0)
|
|
21
|
+
add_field Component designerId string default("")
|
|
22
|
+
add_field Component propsSpec string default("")
|
|
23
|
+
add_field Component notes string default("")
|
|
24
|
+
add_index Component [designId]
|
|
25
|
+
add_unique Component [designId, name]
|
|
26
|
+
add_entity Block
|
|
27
|
+
add_field Block designId string default("")
|
|
28
|
+
add_field Block name string default("")
|
|
29
|
+
add_field Block version u32 default(0)
|
|
30
|
+
add_field Block designerId string default("")
|
|
31
|
+
add_field Block components string default("")
|
|
32
|
+
add_field Block slotsSpec string default("")
|
|
33
|
+
add_field Block defaults string default("")
|
|
34
|
+
add_index Block [designId]
|
|
35
|
+
add_unique Block [designId, name]
|
|
36
|
+
add_entity Rule
|
|
37
|
+
add_field Rule designId string default("")
|
|
38
|
+
add_field Rule subject string default("")
|
|
39
|
+
add_field Rule kind string default("")
|
|
40
|
+
add_field Rule rule string default("")
|
|
41
|
+
add_field Rule note string default("")
|
|
42
|
+
add_index Rule [designId]
|
|
43
|
+
add_entity Page
|
|
44
|
+
add_field Page designId string default("")
|
|
45
|
+
add_field Page slug string default("")
|
|
46
|
+
add_field Page title string default("")
|
|
47
|
+
add_field Page blocks string default("")
|
|
48
|
+
add_index Page [designId]
|
|
49
|
+
add_unique Page [designId, slug]
|
|
50
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
entity Design {
|
|
2
|
+
name: string
|
|
3
|
+
slug: string
|
|
4
|
+
description: string
|
|
5
|
+
designerId: string
|
|
6
|
+
headVersionId: string
|
|
7
|
+
headVersion: u32
|
|
8
|
+
@@unique([slug])
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
entity DesignVersion {
|
|
12
|
+
designId: string
|
|
13
|
+
version: u32
|
|
14
|
+
body: document
|
|
15
|
+
source: string
|
|
16
|
+
note: string
|
|
17
|
+
createdBy: string
|
|
18
|
+
parseErrors: string
|
|
19
|
+
@@index([designId])
|
|
20
|
+
@@unique([designId, version])
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
entity Designer {
|
|
24
|
+
name: string
|
|
25
|
+
handle: string
|
|
26
|
+
url: string
|
|
27
|
+
bio: string
|
|
28
|
+
@@unique([handle])
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
entity Token {
|
|
32
|
+
designId: string
|
|
33
|
+
name: string
|
|
34
|
+
kind: string
|
|
35
|
+
value: string
|
|
36
|
+
darkValue: string
|
|
37
|
+
@@index([designId])
|
|
38
|
+
@@unique([designId, name])
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
entity Component {
|
|
42
|
+
designId: string
|
|
43
|
+
name: string
|
|
44
|
+
version: u32
|
|
45
|
+
designerId: string
|
|
46
|
+
propsSpec: string
|
|
47
|
+
notes: string
|
|
48
|
+
@@index([designId])
|
|
49
|
+
@@unique([designId, name])
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
entity Block {
|
|
53
|
+
designId: string
|
|
54
|
+
name: string
|
|
55
|
+
version: u32
|
|
56
|
+
designerId: string
|
|
57
|
+
components: string
|
|
58
|
+
slotsSpec: string
|
|
59
|
+
defaults: string
|
|
60
|
+
@@index([designId])
|
|
61
|
+
@@unique([designId, name])
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
entity Rule {
|
|
65
|
+
designId: string
|
|
66
|
+
subject: string
|
|
67
|
+
kind: string
|
|
68
|
+
rule: string
|
|
69
|
+
note: string
|
|
70
|
+
@@index([designId])
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
entity Page {
|
|
74
|
+
designId: string
|
|
75
|
+
slug: string
|
|
76
|
+
title: string
|
|
77
|
+
blocks: string
|
|
78
|
+
@@index([designId])
|
|
79
|
+
@@unique([designId, slug])
|
|
80
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Published designs are world-readable (a site's frontend stitches itself from
|
|
2
|
+
# them before any session exists); writes stay behind the auth gate.
|
|
3
|
+
@public_route "GET /api/design/Design"
|
|
4
|
+
@public_route "GET /api/design/Designer"
|
|
5
|
+
@public_route "GET /api/design/Token"
|
|
6
|
+
@public_route "GET /api/design/Component"
|
|
7
|
+
@public_route "GET /api/design/Block"
|
|
8
|
+
@public_route "GET /api/design/Rule"
|
|
9
|
+
@public_route "GET /api/design/Page"
|
|
10
|
+
|
|
11
|
+
#--- Entities ---
|
|
12
|
+
# A Design is a named DESIGN.md file. Its body lives in DesignVersion rows so
|
|
13
|
+
# the full revision history is preserved. Design.headVersionId points at the
|
|
14
|
+
# latest version for O(1) current-state reads.
|
|
15
|
+
|
|
16
|
+
entity Design {
|
|
17
|
+
id: ulid
|
|
18
|
+
createdAt: DateTime @default(now())
|
|
19
|
+
updatedAt: DateTime @updatedAt
|
|
20
|
+
name: string
|
|
21
|
+
slug: string
|
|
22
|
+
description: string
|
|
23
|
+
designerId: string # who made this design system
|
|
24
|
+
headVersionId: string
|
|
25
|
+
headVersion: u32
|
|
26
|
+
|
|
27
|
+
@@unique([slug])
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
entity DesignVersion {
|
|
31
|
+
id: ulid
|
|
32
|
+
createdAt: DateTime @default(now())
|
|
33
|
+
updatedAt: DateTime @updatedAt
|
|
34
|
+
designId: string
|
|
35
|
+
version: u32 # domain revision counter (1, 2, 3 …)
|
|
36
|
+
body: document @scope(designId)
|
|
37
|
+
source: string
|
|
38
|
+
note: string
|
|
39
|
+
createdBy: string
|
|
40
|
+
parseErrors: string
|
|
41
|
+
|
|
42
|
+
@@index([designId])
|
|
43
|
+
@@unique([designId, version])
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#--- Design system ---
|
|
47
|
+
# The product thesis: frontends are stitched from REAL designer-made designs.
|
|
48
|
+
# Tokens/Components/Blocks carry designer attribution so anything rendered on a
|
|
49
|
+
# site traces back to the person who designed it. JSON-shaped payloads
|
|
50
|
+
# (propsSpec, slotsSpec, defaults, blocks, rule) are plain JSON strings the
|
|
51
|
+
# renderer parses — no docstore ceremony for prototype-sized payloads.
|
|
52
|
+
|
|
53
|
+
# Attribution-only profile: enough to say "this designer made X". No profile
|
|
54
|
+
# pages, no auth linkage — just the name behind the work.
|
|
55
|
+
entity Designer {
|
|
56
|
+
id: ulid
|
|
57
|
+
createdAt: DateTime @default(now())
|
|
58
|
+
updatedAt: DateTime @updatedAt
|
|
59
|
+
name: string # "Jane Doe"
|
|
60
|
+
handle: string # "jane"
|
|
61
|
+
url: string # portfolio link, may be empty
|
|
62
|
+
bio: string
|
|
63
|
+
|
|
64
|
+
@@unique([handle])
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
entity Token {
|
|
68
|
+
id: ulid
|
|
69
|
+
createdAt: DateTime @default(now())
|
|
70
|
+
updatedAt: DateTime @updatedAt
|
|
71
|
+
designId: string
|
|
72
|
+
name: string # "surface/brand", "text/primary", "font/body", "space/section"
|
|
73
|
+
kind: string # color | font | size | space | radius
|
|
74
|
+
value: string # "#0A0A0A", "Inter", "6rem"
|
|
75
|
+
darkValue: string # empty = same as value
|
|
76
|
+
|
|
77
|
+
@@index([designId])
|
|
78
|
+
@@unique([designId, name])
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
entity Component {
|
|
82
|
+
id: ulid
|
|
83
|
+
createdAt: DateTime @default(now())
|
|
84
|
+
updatedAt: DateTime @updatedAt
|
|
85
|
+
designId: string
|
|
86
|
+
name: string # "button", "nav", "hero", "feature-card", "footer"
|
|
87
|
+
version: u32
|
|
88
|
+
designerId: string # real attribution — the trace-to-designer anchor
|
|
89
|
+
propsSpec: string # JSON: [{"name":"label","type":"string","default":"..."}]
|
|
90
|
+
notes: string
|
|
91
|
+
|
|
92
|
+
@@index([designId])
|
|
93
|
+
@@unique([designId, name])
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
entity Block {
|
|
97
|
+
id: ulid
|
|
98
|
+
createdAt: DateTime @default(now())
|
|
99
|
+
updatedAt: DateTime @updatedAt
|
|
100
|
+
designId: string
|
|
101
|
+
name: string # "nav", "hero", "feature-grid", "cta", "footer"
|
|
102
|
+
version: u32
|
|
103
|
+
designerId: string
|
|
104
|
+
components: string # JSON array of component names this block stitches
|
|
105
|
+
slotsSpec: string # JSON: [{"name":"headline","type":"string"}, ...]
|
|
106
|
+
defaults: string # JSON: default slot content
|
|
107
|
+
|
|
108
|
+
@@index([designId])
|
|
109
|
+
@@unique([designId, name])
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
entity Rule {
|
|
113
|
+
id: ulid
|
|
114
|
+
createdAt: DateTime @default(now())
|
|
115
|
+
updatedAt: DateTime @updatedAt
|
|
116
|
+
designId: string
|
|
117
|
+
subject: string # block/component name, or "page"
|
|
118
|
+
kind: string # ordering | count | pairing
|
|
119
|
+
rule: string # machine-checkable JSON, e.g. {"first":"nav"} / {"max":1,"of":"hero"}
|
|
120
|
+
note: string # designer's human rationale
|
|
121
|
+
|
|
122
|
+
@@index([designId])
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
entity Page {
|
|
126
|
+
id: ulid
|
|
127
|
+
createdAt: DateTime @default(now())
|
|
128
|
+
updatedAt: DateTime @updatedAt
|
|
129
|
+
designId: string
|
|
130
|
+
slug: string # "landing"
|
|
131
|
+
title: string
|
|
132
|
+
blocks: string # JSON: [{"block":"nav","props":{...}}, ...]
|
|
133
|
+
|
|
134
|
+
@@index([designId])
|
|
135
|
+
@@unique([designId, slug])
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
# Behavior (former Design.create/save_version/get_head/list_versions actions +
|
|
139
|
+
# tasks/parse.nbt @task) moved to native/runtime.jai over the generated ORM —
|
|
140
|
+
# see design_register_extra_routes.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
migration initial {
|
|
2
|
+
add_entity DnsProvider
|
|
3
|
+
add_field DnsProvider type string default("")
|
|
4
|
+
add_field DnsProvider label string default("")
|
|
5
|
+
add_field DnsProvider apiToken string default("")
|
|
6
|
+
add_field DnsProvider accountId string default("")
|
|
7
|
+
add_field DnsProvider status string default("")
|
|
8
|
+
add_field DnsProvider lastCheckedAt u64 default(0)
|
|
9
|
+
add_unique DnsProvider [type, label]
|
|
10
|
+
add_entity Domain
|
|
11
|
+
add_field Domain name string default("")
|
|
12
|
+
add_field Domain providerId string default("")
|
|
13
|
+
add_field Domain providerZoneId string default("")
|
|
14
|
+
add_field Domain registrarStatus string default("")
|
|
15
|
+
add_field Domain nameservers string default("")
|
|
16
|
+
add_field Domain addedAt u64 default(0)
|
|
17
|
+
add_index Domain [providerId]
|
|
18
|
+
add_unique Domain [name]
|
|
19
|
+
add_entity DnsRecord
|
|
20
|
+
add_field DnsRecord domainId string default("")
|
|
21
|
+
add_field DnsRecord providerRecordId string default("")
|
|
22
|
+
add_field DnsRecord type string default("")
|
|
23
|
+
add_field DnsRecord name string default("")
|
|
24
|
+
add_field DnsRecord value string default("")
|
|
25
|
+
add_field DnsRecord priority s32 default(0)
|
|
26
|
+
add_field DnsRecord ttl s32 default(0)
|
|
27
|
+
add_field DnsRecord proxied bool default(false)
|
|
28
|
+
add_field DnsRecord managedByCart string default("")
|
|
29
|
+
add_field DnsRecord managedByRef string default("")
|
|
30
|
+
add_index DnsRecord [domainId]
|
|
31
|
+
add_index DnsRecord [managedByCart, managedByRef]
|
|
32
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
entity DnsProvider {
|
|
2
|
+
type: string
|
|
3
|
+
label: string
|
|
4
|
+
apiToken: string
|
|
5
|
+
accountId: string
|
|
6
|
+
status: string
|
|
7
|
+
lastCheckedAt: u64
|
|
8
|
+
@@unique([type, label])
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
entity Domain {
|
|
12
|
+
name: string
|
|
13
|
+
providerId: string
|
|
14
|
+
providerZoneId: string
|
|
15
|
+
registrarStatus: string
|
|
16
|
+
nameservers: string
|
|
17
|
+
addedAt: u64
|
|
18
|
+
@@unique([name])
|
|
19
|
+
@@index([providerId])
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
entity DnsRecord {
|
|
23
|
+
domainId: string
|
|
24
|
+
providerRecordId: string
|
|
25
|
+
type: string
|
|
26
|
+
name: string
|
|
27
|
+
value: string
|
|
28
|
+
priority: s32
|
|
29
|
+
ttl: s32
|
|
30
|
+
proxied: bool
|
|
31
|
+
managedByCart: string
|
|
32
|
+
managedByRef: string
|
|
33
|
+
@@index([domainId])
|
|
34
|
+
@@index([managedByCart, managedByRef])
|
|
35
|
+
}
|
|
36
|
+
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Domains cart — customer DNS + registrar management.
|
|
2
|
+
#
|
|
3
|
+
# Hidden layer. Users see "Domains" in the portal; never "Cloudflare". When
|
|
4
|
+
# the user pastes their CF API token, this cart validates it, stores it, and
|
|
5
|
+
# then owns every DNS record request that touches a domain they've connected.
|
|
6
|
+
#
|
|
7
|
+
# Used by:
|
|
8
|
+
# - Email cart (MailDomain) — writes MX / TXT verify / DKIM CNAMEs for
|
|
9
|
+
# outbound+inbound mail on customer domains.
|
|
10
|
+
# - Future: TLS cart, custom gateway-domains cart.
|
|
11
|
+
#
|
|
12
|
+
# Schema only. All behavior (token verify, CF API calls, DNS record CRUD,
|
|
13
|
+
# TXT verify polling) lives in native/runtime.jai as regular Jai over the
|
|
14
|
+
# generated ORM — see domains_register_extra_routes.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
entity DnsProvider {
|
|
19
|
+
id: ulid
|
|
20
|
+
createdAt: DateTime @default(now())
|
|
21
|
+
updatedAt: DateTime @updatedAt
|
|
22
|
+
type: string # "cloudflare"
|
|
23
|
+
label: string # user-facing name ("my CF account")
|
|
24
|
+
apiToken: string # raw token (TODO: encrypt at rest — same status as phone cart's authToken)
|
|
25
|
+
accountId: string # CF account_id, needed for add_zone + registrar calls (optional)
|
|
26
|
+
status: string # "ACTIVE" | "INVALID" | "DISCONNECTED"
|
|
27
|
+
lastCheckedAt: u64 # ms epoch — updated on connect + test
|
|
28
|
+
|
|
29
|
+
@@unique([type, label])
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
entity Domain {
|
|
33
|
+
id: ulid
|
|
34
|
+
createdAt: DateTime @default(now())
|
|
35
|
+
updatedAt: DateTime @updatedAt
|
|
36
|
+
name: string # "acme.com"
|
|
37
|
+
providerId: string # FK DnsProvider.id — empty if no provider attached (manual DNS)
|
|
38
|
+
providerZoneId: string # CF zone id
|
|
39
|
+
registrarStatus: string # "external" | "cf" | "unknown"
|
|
40
|
+
nameservers: string # JSON array of NS hostnames returned by CF
|
|
41
|
+
addedAt: u64 # ms epoch
|
|
42
|
+
|
|
43
|
+
@@unique([name])
|
|
44
|
+
@@index([providerId])
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# Local mirror of a DNS record. Written whenever the cart calls CF to create /
|
|
48
|
+
# update / delete a record, so other carts can enumerate "what DNS is set up
|
|
49
|
+
# for this domain" without re-hitting CF every time. `managedByCart` lets us
|
|
50
|
+
# know which cart owns the record and may want to clean it up on teardown.
|
|
51
|
+
entity DnsRecord {
|
|
52
|
+
id: ulid
|
|
53
|
+
createdAt: DateTime @default(now())
|
|
54
|
+
updatedAt: DateTime @updatedAt
|
|
55
|
+
domainId: string
|
|
56
|
+
providerRecordId: string # CF record id
|
|
57
|
+
type: string # A, AAAA, MX, TXT, CNAME, NS
|
|
58
|
+
name: string # FQDN
|
|
59
|
+
value: string # target (IP, hostname, TXT value...)
|
|
60
|
+
priority: s32 # MX only; 0 otherwise
|
|
61
|
+
ttl: s32 # 1 = CF auto
|
|
62
|
+
proxied: bool
|
|
63
|
+
managedByCart: string # "email" | "tls" | ... | "" for user-created records
|
|
64
|
+
managedByRef: string # entity id in owning cart (e.g. MailDomain.id)
|
|
65
|
+
|
|
66
|
+
@@index([domainId])
|
|
67
|
+
@@index([managedByCart, managedByRef])
|
|
68
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
migration initial {
|
|
2
|
+
add_entity MailDomain
|
|
3
|
+
add_field MailDomain hostname string default("")
|
|
4
|
+
add_field MailDomain isDefault bool default(false)
|
|
5
|
+
add_field MailDomain domainId string default("")
|
|
6
|
+
add_field MailDomain sendgridParseId string default("")
|
|
7
|
+
add_field MailDomain sendgridDomainAuthId string default("")
|
|
8
|
+
add_field MailDomain verificationToken string default("")
|
|
9
|
+
add_field MailDomain verificationState string default("")
|
|
10
|
+
add_field MailDomain dkimState string default("")
|
|
11
|
+
add_field MailDomain spfState string default("")
|
|
12
|
+
add_field MailDomain createdAt u64 default(0)
|
|
13
|
+
add_field MailDomain verifiedAt u64 default(0)
|
|
14
|
+
add_unique MailDomain [hostname]
|
|
15
|
+
add_entity Inbox
|
|
16
|
+
add_field Inbox name string default("")
|
|
17
|
+
add_field Inbox ownerType string default("")
|
|
18
|
+
add_field Inbox ownerRef string default("")
|
|
19
|
+
add_field Inbox createdAt u64 default(0)
|
|
20
|
+
add_index Inbox [ownerType, ownerRef]
|
|
21
|
+
add_entity MailAddress
|
|
22
|
+
add_field MailAddress mailDomainId string default("")
|
|
23
|
+
add_field MailAddress localPart string default("")
|
|
24
|
+
add_field MailAddress inboxId string default("")
|
|
25
|
+
add_field MailAddress enabled bool default(false)
|
|
26
|
+
add_index MailAddress [mailDomainId]
|
|
27
|
+
add_index MailAddress [inboxId]
|
|
28
|
+
add_unique MailAddress [mailDomainId, localPart]
|
|
29
|
+
add_entity Email
|
|
30
|
+
add_field Email inboxId string default("")
|
|
31
|
+
add_field Email direction string default("")
|
|
32
|
+
add_field Email messageId string default("")
|
|
33
|
+
add_field Email sendgridMessageId string default("")
|
|
34
|
+
add_field Email inReplyTo string default("")
|
|
35
|
+
add_field Email referencesJson string default("")
|
|
36
|
+
add_field Email fromAddr string default("")
|
|
37
|
+
add_field Email fromName string default("")
|
|
38
|
+
add_field Email toAddrsJson string default("")
|
|
39
|
+
add_field Email ccAddrsJson string default("")
|
|
40
|
+
add_field Email bccAddrsJson string default("")
|
|
41
|
+
add_field Email subject string default("")
|
|
42
|
+
add_field Email textBody string default("")
|
|
43
|
+
add_field Email htmlBody string default("")
|
|
44
|
+
add_field Email headersRaw string default("")
|
|
45
|
+
add_field Email spamScore string default("")
|
|
46
|
+
add_field Email receivedAt u64 default(0)
|
|
47
|
+
add_field Email sentAt u64 default(0)
|
|
48
|
+
add_field Email status string default("")
|
|
49
|
+
add_index Email [inboxId, receivedAt]
|
|
50
|
+
add_index Email [sendgridMessageId]
|
|
51
|
+
add_index Email [messageId]
|
|
52
|
+
add_entity EmailAttachment
|
|
53
|
+
add_field EmailAttachment emailId string default("")
|
|
54
|
+
add_field EmailAttachment filename string default("")
|
|
55
|
+
add_field EmailAttachment contentType string default("")
|
|
56
|
+
add_field EmailAttachment sizeBytes u64 default(0)
|
|
57
|
+
add_field EmailAttachment contentB64 string default("")
|
|
58
|
+
add_field EmailAttachment contentId string default("")
|
|
59
|
+
add_index EmailAttachment [emailId]
|
|
60
|
+
add_entity EmailTemplate
|
|
61
|
+
add_field EmailTemplate name string default("")
|
|
62
|
+
add_field EmailTemplate subjectTmpl string default("")
|
|
63
|
+
add_field EmailTemplate textTmpl string default("")
|
|
64
|
+
add_field EmailTemplate htmlTmpl string default("")
|
|
65
|
+
add_unique EmailTemplate [name]
|
|
66
|
+
add_entity EmailEvent
|
|
67
|
+
add_field EmailEvent emailId string default("")
|
|
68
|
+
add_field EmailEvent sendgridMessageId string default("")
|
|
69
|
+
add_field EmailEvent type string default("")
|
|
70
|
+
add_field EmailEvent timestamp u64 default(0)
|
|
71
|
+
add_field EmailEvent reason string default("")
|
|
72
|
+
add_field EmailEvent rawJson string default("")
|
|
73
|
+
add_index EmailEvent [emailId]
|
|
74
|
+
add_index EmailEvent [sendgridMessageId]
|
|
75
|
+
}
|