@nexttylabs/echo 0.4.0 → 0.6.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 (262) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/app/(dashboard)/admin/feedback/[id]/edit/page.tsx +12 -6
  3. package/app/(dashboard)/admin/feedback/new/page.tsx +19 -17
  4. package/app/(dashboard)/admin/layout.tsx +16 -6
  5. package/app/(dashboard)/layout.tsx +4 -2
  6. package/app/(dashboard)/settings/api-keys/page.tsx +13 -3
  7. package/app/(dashboard)/settings/layout.tsx +25 -2
  8. package/app/(dashboard)/settings/organization/page.tsx +8 -9
  9. package/app/(public)/[organizationSlug]/roadmap/page.tsx +19 -1
  10. package/app/api/admin/backup/route.ts +22 -4
  11. package/app/api/auth/register/handler.ts +1 -2
  12. package/app/api/feedback/[id]/comments/[commentId]/route.ts +13 -4
  13. package/app/api/feedback/[id]/reclassify/route.ts +4 -4
  14. package/app/api/organizations/handler.ts +2 -4
  15. package/components/settings/settings-sidebar.tsx +4 -4
  16. package/hooks/use-organization.tsx +116 -0
  17. package/hooks/use-permissions.ts +24 -11
  18. package/lib/auth/config.ts +0 -7
  19. package/lib/auth/organization.ts +20 -0
  20. package/lib/auth/permissions.ts +10 -0
  21. package/lib/db/migrations/0000_needy_leech.sql +335 -0
  22. package/lib/db/migrations/meta/0000_snapshot.json +2186 -1
  23. package/lib/db/migrations/meta/_journal.json +2 -135
  24. package/lib/db/schema/auth.ts +0 -1
  25. package/lib/db/schema/index.ts +0 -1
  26. package/lib/portal/public-context.tsx +5 -0
  27. package/package.json +20 -1
  28. package/.changeset/README.md +0 -21
  29. package/.changeset/config.json +0 -11
  30. package/.changeset/cozy-ghosts-care.md +0 -5
  31. package/.changeset/sharp-lines-stand.md +0 -5
  32. package/.changeset/sour-doodles-eat.md +0 -5
  33. package/.changeset/tender-moose-shop.md +0 -5
  34. package/.github/pull_request_template.md +0 -13
  35. package/.github/workflows/ci.yml +0 -41
  36. package/.github/workflows/publish.yml +0 -44
  37. package/.github/workflows/release.yml +0 -73
  38. package/AGENTS.md +0 -92
  39. package/Dockerfile +0 -57
  40. package/Makefile +0 -77
  41. package/bun.lock +0 -2503
  42. package/components/portal/project-switcher.tsx +0 -20
  43. package/docker-compose.dev.yml +0 -26
  44. package/docker-compose.yml +0 -98
  45. package/docs/architecture.md +0 -259
  46. package/docs/component-inventory.md +0 -261
  47. package/docs/database-migrations.md +0 -76
  48. package/docs/development-guide.md +0 -209
  49. package/docs/e2e-user-flows.csv +0 -31
  50. package/docs/er-diagram-feedback.mmd +0 -138
  51. package/docs/er-diagram.mmd +0 -281
  52. package/docs/i18n-check-report.md +0 -296
  53. package/docs/index.md +0 -214
  54. package/docs/logic-chain.md +0 -94
  55. package/docs/plans/2026-01-02-database-migration-scripts.md +0 -496
  56. package/docs/plans/2026-01-02-user-login-design.md +0 -37
  57. package/docs/plans/2026-01-02-user-login.md +0 -437
  58. package/docs/plans/2026-01-02-user-registration-design.md +0 -47
  59. package/docs/plans/2026-01-02-user-registration.md +0 -628
  60. package/docs/plans/2026-01-03-roles-permissions-design.md +0 -20
  61. package/docs/plans/2026-01-03-roles-permissions.md +0 -266
  62. package/docs/plans/2026-01-05-authentication-middleware.md +0 -207
  63. package/docs/plans/2026-01-05-member-removal.md +0 -186
  64. package/docs/plans/2026-01-05-organization-creation.md +0 -374
  65. package/docs/plans/2026-01-05-rbac-middleware.md +0 -112
  66. package/docs/plans/2026-01-05-role-configuration.md +0 -441
  67. package/docs/plans/2026-01-06-file-upload-support.md +0 -804
  68. package/docs/plans/2026-01-06-permission-check-hook.md +0 -155
  69. package/docs/plans/2026-01-06-resource-ownership-check.md +0 -231
  70. package/docs/plans/2026-01-07-feedback-tracking-link.md +0 -459
  71. package/docs/plans/2026-01-09-logout-redirect-design.md +0 -52
  72. package/docs/plans/2026-01-09-phase2-3-plan.md +0 -654
  73. package/docs/plans/2026-01-09-portal-execution-plan.md +0 -408
  74. package/docs/plans/2026-01-09-project-delete-feature-design.md +0 -163
  75. package/docs/plans/2026-01-09-project-delete-implementation.md +0 -451
  76. package/docs/plans/2026-01-09-project-edit-delete-design.md +0 -52
  77. package/docs/plans/2026-01-09-settings-center-design.md +0 -114
  78. package/docs/plans/2026-01-09-settings-center.md +0 -948
  79. package/docs/plans/2026-01-10-organization-only-design.md +0 -66
  80. package/docs/plans/2026-01-10-organization-only-implementation.md +0 -433
  81. package/docs/plans/2026-01-10-portal-settings-restructure-plan.md +0 -18
  82. package/docs/plans/2026-01-10-project-settings-tabs-design-implementation.md +0 -296
  83. package/docs/plans/2026-01-14-e2e-playwright-feedback.md +0 -173
  84. package/docs/plans/2026-01-15-feedback-management-org-context-design.md +0 -82
  85. package/docs/plans/2026-01-15-feedback-management-org-context-implementation-plan.md +0 -521
  86. package/docs/plans/2026-01-16-admin-feedback-filters-design.md +0 -75
  87. package/docs/plans/2026-01-16-admin-feedback-filters-implementation.md +0 -293
  88. package/docs/plans/2026-01-16-admin-feedback-route-consolidation.md +0 -180
  89. package/docs/plans/2026-01-16-e2e-test-fixes.md +0 -158
  90. package/docs/plans/2026-01-17-admin-feedback-filters.md +0 -214
  91. package/docs/plans/2026-01-17-admin-feedback-improvements.md +0 -453
  92. package/docs/plans/2026-01-18-changesets-design.md +0 -40
  93. package/docs/product_changes.md +0 -37
  94. package/docs/project-overview.md +0 -159
  95. package/docs/project-scan-report.json +0 -104
  96. package/docs/route-role-visibility.md +0 -51
  97. package/docs/source-tree-analysis.md +0 -150
  98. package/docs/testing/delete-project-manual-tests.md +0 -18
  99. package/docs/user-story-tracking.md +0 -191
  100. package/eslint.config.mjs +0 -19
  101. package/lib/db/migrations/.gitkeep +0 -0
  102. package/lib/db/migrations/0000_cynical_gladiator.sql +0 -53
  103. package/lib/db/migrations/0001_wandering_sunfire.sql +0 -27
  104. package/lib/db/migrations/0002_shallow_speedball.sql +0 -1
  105. package/lib/db/migrations/0003_add_org_description.sql +0 -1
  106. package/lib/db/migrations/0003_boring_wild_pack.sql +0 -13
  107. package/lib/db/migrations/0004_windy_tyrannus.sql +0 -27
  108. package/lib/db/migrations/0005_perpetual_doorman.sql +0 -5
  109. package/lib/db/migrations/0006_aberrant_captain_midlands.sql +0 -13
  110. package/lib/db/migrations/0007_clever_captain_cross.sql +0 -14
  111. package/lib/db/migrations/0008_sparkling_pandemic.sql +0 -2
  112. package/lib/db/migrations/0009_happy_black_tom.sql +0 -29
  113. package/lib/db/migrations/0010_kind_junta.sql +0 -8
  114. package/lib/db/migrations/0011_mute_squadron_supreme.sql +0 -25
  115. package/lib/db/migrations/0012_giant_power_man.sql +0 -24
  116. package/lib/db/migrations/0013_damp_titanium_man.sql +0 -17
  117. package/lib/db/migrations/0014_blue_alice.sql +0 -18
  118. package/lib/db/migrations/0015_webhook_tables.sql +0 -41
  119. package/lib/db/migrations/0016_github_integration.sql +0 -30
  120. package/lib/db/migrations/0016_overjoyed_ghost_rider.sql +0 -22
  121. package/lib/db/migrations/0017_slimy_inhumans.sql +0 -6
  122. package/lib/db/migrations/0018_same_spitfire.sql +0 -1
  123. package/lib/db/migrations/0019_jittery_loners.sql +0 -16
  124. package/lib/db/migrations/0019_remove_projects_add_org_settings.sql +0 -14
  125. package/lib/db/migrations/meta/0001_snapshot.json +0 -553
  126. package/lib/db/migrations/meta/0002_snapshot.json +0 -560
  127. package/lib/db/migrations/meta/0003_snapshot.json +0 -650
  128. package/lib/db/migrations/meta/0004_snapshot.json +0 -852
  129. package/lib/db/migrations/meta/0005_snapshot.json +0 -900
  130. package/lib/db/migrations/meta/0006_snapshot.json +0 -1011
  131. package/lib/db/migrations/meta/0007_snapshot.json +0 -1125
  132. package/lib/db/migrations/meta/0008_snapshot.json +0 -1146
  133. package/lib/db/migrations/meta/0009_snapshot.json +0 -1386
  134. package/lib/db/migrations/meta/0010_snapshot.json +0 -1419
  135. package/lib/db/migrations/meta/0011_snapshot.json +0 -1615
  136. package/lib/db/migrations/meta/0012_snapshot.json +0 -1805
  137. package/lib/db/migrations/meta/0013_snapshot.json +0 -1948
  138. package/lib/db/migrations/meta/0014_snapshot.json +0 -2082
  139. package/lib/db/migrations/meta/0015_snapshot.json +0 -2476
  140. package/lib/db/migrations/meta/0016_snapshot.json +0 -2633
  141. package/lib/db/migrations/meta/0017_snapshot.json +0 -2680
  142. package/lib/db/migrations/meta/0018_snapshot.json +0 -2686
  143. package/lib/db/migrations/meta/0019_snapshot.json +0 -2741
  144. package/lib/db/schema/projects.ts +0 -145
  145. package/lib/db/schema/user-profiles.ts +0 -31
  146. package/lib/validations/projects.ts +0 -49
  147. package/next-env.d.ts +0 -6
  148. package/playwright.config.ts +0 -44
  149. package/proxy.test.ts +0 -131
  150. package/proxy.ts +0 -116
  151. package/scripts/backup-db.sh +0 -57
  152. package/scripts/backup-db.ts +0 -24
  153. package/scripts/generate-openapi.ts +0 -22
  154. package/scripts/migration-helper.ts +0 -39
  155. package/scripts/pre-deploy.ts +0 -75
  156. package/scripts/restore-db.sh +0 -60
  157. package/scripts/rollback.ts +0 -72
  158. package/scripts/seed-tags.ts +0 -48
  159. package/tests/api/feedback-bulk.test.ts +0 -47
  160. package/tests/api/feedback-by-id.test.ts +0 -67
  161. package/tests/api/feedback-comments-route-import.test.ts +0 -26
  162. package/tests/api/feedback-create.test.ts +0 -71
  163. package/tests/api/feedback-delete.test.ts +0 -160
  164. package/tests/api/feedback-filter.test.ts +0 -250
  165. package/tests/api/feedback-list.test.ts +0 -234
  166. package/tests/api/feedback-route-assignee-condition.test.ts +0 -32
  167. package/tests/api/feedback-similar.test.ts +0 -46
  168. package/tests/api/feedback-sort.test.ts +0 -261
  169. package/tests/api/feedback-status-enum.test.ts +0 -49
  170. package/tests/api/feedback-status-filter.test.ts +0 -117
  171. package/tests/api/feedback-submit-on-behalf.test.ts +0 -269
  172. package/tests/api/feedback.test.ts +0 -175
  173. package/tests/api/identify-jwt.test.ts +0 -25
  174. package/tests/api/invitation-accept.test.ts +0 -213
  175. package/tests/api/organization-invitations.test.ts +0 -186
  176. package/tests/api/organization-members-list.test.ts +0 -79
  177. package/tests/api/organization-members.test.ts +0 -340
  178. package/tests/api/organizations.test.ts +0 -149
  179. package/tests/api/register.test.ts +0 -112
  180. package/tests/api/upload.test.ts +0 -103
  181. package/tests/api/vote.test.ts +0 -82
  182. package/tests/app/admin-feedback-detail-page.test.tsx +0 -25
  183. package/tests/app/admin-feedback-list-page.test.tsx +0 -25
  184. package/tests/app/admin-feedback-new-page.test.tsx +0 -25
  185. package/tests/app/health-route-helpers.test.ts +0 -27
  186. package/tests/app/login-page.test.ts +0 -26
  187. package/tests/app/portal-page.test.ts +0 -29
  188. package/tests/app/project-portal-overview.test.tsx +0 -25
  189. package/tests/app/widget-page-import.test.ts +0 -25
  190. package/tests/components/create-post-dialog-defaults.test.ts +0 -43
  191. package/tests/components/feedback/duplicate-suggestions-inline.test.tsx +0 -27
  192. package/tests/components/feedback/embedded-feedback-form.test.tsx +0 -96
  193. package/tests/components/feedback/feedback-detail.test.tsx +0 -25
  194. package/tests/components/feedback/feedback-stats.test.tsx +0 -49
  195. package/tests/components/feedback-bulk-actions.test.tsx +0 -39
  196. package/tests/components/feedback-i18n-keys.test.ts +0 -70
  197. package/tests/components/feedback-list-controls-compile.test.ts +0 -25
  198. package/tests/components/feedback-list-controls.test.tsx +0 -204
  199. package/tests/components/feedback-list-item.test.tsx +0 -67
  200. package/tests/components/landing/hero.test.tsx +0 -46
  201. package/tests/components/layout/language-switcher.test.tsx +0 -25
  202. package/tests/components/layout/sidebar.test.tsx +0 -157
  203. package/tests/components/login-form.test.ts +0 -25
  204. package/tests/components/organization-form.test.ts +0 -32
  205. package/tests/components/organization-switcher.test.ts +0 -25
  206. package/tests/components/pagination.test.tsx +0 -43
  207. package/tests/components/portal-overview.test.tsx +0 -25
  208. package/tests/components/profile-form.test.tsx +0 -139
  209. package/tests/components/role-selector.test.ts +0 -31
  210. package/tests/components/status-chart.test.tsx +0 -90
  211. package/tests/e2e/auth.e2e.ts +0 -323
  212. package/tests/e2e/feedback-actions.e2e.ts +0 -471
  213. package/tests/e2e/feedback-attachment.e2e.ts +0 -168
  214. package/tests/e2e/feedback-customer.e2e.ts +0 -226
  215. package/tests/e2e/feedback-management.e2e.ts +0 -565
  216. package/tests/e2e/feedback-submit.e2e.ts +0 -133
  217. package/tests/e2e/feedback-view.e2e.ts +0 -297
  218. package/tests/e2e/fixtures/test-data.ts +0 -235
  219. package/tests/e2e/health-check.e2e.ts +0 -230
  220. package/tests/e2e/helpers/test-utils-helpers.test.ts +0 -43
  221. package/tests/e2e/helpers/test-utils.ts +0 -298
  222. package/tests/e2e/integration-placeholders.e2e.ts +0 -199
  223. package/tests/e2e/organization.e2e.ts +0 -292
  224. package/tests/e2e/permissions.e2e.ts +0 -424
  225. package/tests/e2e/project-widget.e2e.ts +0 -63
  226. package/tests/feedback/filters.test.ts +0 -29
  227. package/tests/hooks/use-permissions.test.ts +0 -52
  228. package/tests/lib/ai/classifier.test.ts +0 -104
  229. package/tests/lib/ai/duplicate-detector.test.ts +0 -234
  230. package/tests/lib/attachments-schema.test.ts +0 -30
  231. package/tests/lib/auth/session.test.ts +0 -49
  232. package/tests/lib/auth-client.test.ts +0 -37
  233. package/tests/lib/auth-config.test.ts +0 -26
  234. package/tests/lib/feedback-prefill.test.ts +0 -52
  235. package/tests/lib/feedback-processor.test.ts +0 -41
  236. package/tests/lib/feedback-schema.test.ts +0 -33
  237. package/tests/lib/file-validator.test.ts +0 -48
  238. package/tests/lib/get-feedback-by-id.test.ts +0 -37
  239. package/tests/lib/invitations.test.ts +0 -35
  240. package/tests/lib/login-schema.test.ts +0 -36
  241. package/tests/lib/org-context.test.ts +0 -95
  242. package/tests/lib/organization-access.test.ts +0 -44
  243. package/tests/lib/organization-member-role-schema.test.ts +0 -41
  244. package/tests/lib/permissions.test.ts +0 -88
  245. package/tests/lib/portal-analytics.test.ts +0 -25
  246. package/tests/lib/portal-contributors.test.ts +0 -25
  247. package/tests/lib/portal-copy.test.ts +0 -27
  248. package/tests/lib/portal-i18n.test.ts +0 -30
  249. package/tests/lib/portal-leaderboard-settings.test.ts +0 -25
  250. package/tests/lib/portal-modules.test.ts +0 -25
  251. package/tests/lib/portal-seo.test.ts +0 -25
  252. package/tests/lib/portal-sharing.test.ts +0 -25
  253. package/tests/lib/portal-sorting.test.ts +0 -25
  254. package/tests/lib/portal-theme.test.ts +0 -25
  255. package/tests/lib/rate-limit.test.ts +0 -142
  256. package/tests/lib/resolve-locale.test.ts +0 -34
  257. package/tests/lib/services/backup.test.ts +0 -145
  258. package/tests/lib/user-organizations.test.ts +0 -42
  259. package/tests/lib/user-role-schema.test.ts +0 -33
  260. package/tests/lib/user-schema.test.ts +0 -25
  261. package/tests/setup.ts +0 -74
  262. package/vercel.json +0 -4
@@ -1,560 +0,0 @@
1
- {
2
- "id": "1cdc7fa2-598e-4e9a-bfd5-12a7883c77ce",
3
- "prevId": "06611ee0-ebfc-4d8a-850b-c5dd18e693a7",
4
- "version": "7",
5
- "dialect": "postgresql",
6
- "tables": {
7
- "public.account": {
8
- "name": "account",
9
- "schema": "",
10
- "columns": {
11
- "id": {
12
- "name": "id",
13
- "type": "text",
14
- "primaryKey": true,
15
- "notNull": true
16
- },
17
- "account_id": {
18
- "name": "account_id",
19
- "type": "text",
20
- "primaryKey": false,
21
- "notNull": true
22
- },
23
- "provider_id": {
24
- "name": "provider_id",
25
- "type": "text",
26
- "primaryKey": false,
27
- "notNull": true
28
- },
29
- "user_id": {
30
- "name": "user_id",
31
- "type": "text",
32
- "primaryKey": false,
33
- "notNull": true
34
- },
35
- "access_token": {
36
- "name": "access_token",
37
- "type": "text",
38
- "primaryKey": false,
39
- "notNull": false
40
- },
41
- "refresh_token": {
42
- "name": "refresh_token",
43
- "type": "text",
44
- "primaryKey": false,
45
- "notNull": false
46
- },
47
- "id_token": {
48
- "name": "id_token",
49
- "type": "text",
50
- "primaryKey": false,
51
- "notNull": false
52
- },
53
- "access_token_expires_at": {
54
- "name": "access_token_expires_at",
55
- "type": "timestamp",
56
- "primaryKey": false,
57
- "notNull": false
58
- },
59
- "refresh_token_expires_at": {
60
- "name": "refresh_token_expires_at",
61
- "type": "timestamp",
62
- "primaryKey": false,
63
- "notNull": false
64
- },
65
- "scope": {
66
- "name": "scope",
67
- "type": "text",
68
- "primaryKey": false,
69
- "notNull": false
70
- },
71
- "password": {
72
- "name": "password",
73
- "type": "text",
74
- "primaryKey": false,
75
- "notNull": false
76
- },
77
- "created_at": {
78
- "name": "created_at",
79
- "type": "timestamp",
80
- "primaryKey": false,
81
- "notNull": true,
82
- "default": "now()"
83
- },
84
- "updated_at": {
85
- "name": "updated_at",
86
- "type": "timestamp",
87
- "primaryKey": false,
88
- "notNull": true
89
- }
90
- },
91
- "indexes": {
92
- "account_userId_idx": {
93
- "name": "account_userId_idx",
94
- "columns": [
95
- {
96
- "expression": "user_id",
97
- "isExpression": false,
98
- "asc": true,
99
- "nulls": "last"
100
- }
101
- ],
102
- "isUnique": false,
103
- "concurrently": false,
104
- "method": "btree",
105
- "with": {}
106
- }
107
- },
108
- "foreignKeys": {
109
- "account_user_id_user_id_fk": {
110
- "name": "account_user_id_user_id_fk",
111
- "tableFrom": "account",
112
- "tableTo": "user",
113
- "columnsFrom": [
114
- "user_id"
115
- ],
116
- "columnsTo": [
117
- "id"
118
- ],
119
- "onDelete": "cascade",
120
- "onUpdate": "no action"
121
- }
122
- },
123
- "compositePrimaryKeys": {},
124
- "uniqueConstraints": {},
125
- "policies": {},
126
- "checkConstraints": {},
127
- "isRLSEnabled": false
128
- },
129
- "public.session": {
130
- "name": "session",
131
- "schema": "",
132
- "columns": {
133
- "id": {
134
- "name": "id",
135
- "type": "text",
136
- "primaryKey": true,
137
- "notNull": true
138
- },
139
- "expires_at": {
140
- "name": "expires_at",
141
- "type": "timestamp",
142
- "primaryKey": false,
143
- "notNull": true
144
- },
145
- "token": {
146
- "name": "token",
147
- "type": "text",
148
- "primaryKey": false,
149
- "notNull": true
150
- },
151
- "created_at": {
152
- "name": "created_at",
153
- "type": "timestamp",
154
- "primaryKey": false,
155
- "notNull": true,
156
- "default": "now()"
157
- },
158
- "updated_at": {
159
- "name": "updated_at",
160
- "type": "timestamp",
161
- "primaryKey": false,
162
- "notNull": true
163
- },
164
- "ip_address": {
165
- "name": "ip_address",
166
- "type": "text",
167
- "primaryKey": false,
168
- "notNull": false
169
- },
170
- "user_agent": {
171
- "name": "user_agent",
172
- "type": "text",
173
- "primaryKey": false,
174
- "notNull": false
175
- },
176
- "user_id": {
177
- "name": "user_id",
178
- "type": "text",
179
- "primaryKey": false,
180
- "notNull": true
181
- }
182
- },
183
- "indexes": {
184
- "session_userId_idx": {
185
- "name": "session_userId_idx",
186
- "columns": [
187
- {
188
- "expression": "user_id",
189
- "isExpression": false,
190
- "asc": true,
191
- "nulls": "last"
192
- }
193
- ],
194
- "isUnique": false,
195
- "concurrently": false,
196
- "method": "btree",
197
- "with": {}
198
- }
199
- },
200
- "foreignKeys": {
201
- "session_user_id_user_id_fk": {
202
- "name": "session_user_id_user_id_fk",
203
- "tableFrom": "session",
204
- "tableTo": "user",
205
- "columnsFrom": [
206
- "user_id"
207
- ],
208
- "columnsTo": [
209
- "id"
210
- ],
211
- "onDelete": "cascade",
212
- "onUpdate": "no action"
213
- }
214
- },
215
- "compositePrimaryKeys": {},
216
- "uniqueConstraints": {
217
- "session_token_unique": {
218
- "name": "session_token_unique",
219
- "nullsNotDistinct": false,
220
- "columns": [
221
- "token"
222
- ]
223
- }
224
- },
225
- "policies": {},
226
- "checkConstraints": {},
227
- "isRLSEnabled": false
228
- },
229
- "public.user": {
230
- "name": "user",
231
- "schema": "",
232
- "columns": {
233
- "id": {
234
- "name": "id",
235
- "type": "text",
236
- "primaryKey": true,
237
- "notNull": true
238
- },
239
- "name": {
240
- "name": "name",
241
- "type": "text",
242
- "primaryKey": false,
243
- "notNull": true
244
- },
245
- "email": {
246
- "name": "email",
247
- "type": "text",
248
- "primaryKey": false,
249
- "notNull": true
250
- },
251
- "role": {
252
- "name": "role",
253
- "type": "text",
254
- "primaryKey": false,
255
- "notNull": true,
256
- "default": "'customer'"
257
- },
258
- "email_verified": {
259
- "name": "email_verified",
260
- "type": "boolean",
261
- "primaryKey": false,
262
- "notNull": true,
263
- "default": false
264
- },
265
- "image": {
266
- "name": "image",
267
- "type": "text",
268
- "primaryKey": false,
269
- "notNull": false
270
- },
271
- "created_at": {
272
- "name": "created_at",
273
- "type": "timestamp",
274
- "primaryKey": false,
275
- "notNull": true,
276
- "default": "now()"
277
- },
278
- "updated_at": {
279
- "name": "updated_at",
280
- "type": "timestamp",
281
- "primaryKey": false,
282
- "notNull": true,
283
- "default": "now()"
284
- }
285
- },
286
- "indexes": {},
287
- "foreignKeys": {},
288
- "compositePrimaryKeys": {},
289
- "uniqueConstraints": {
290
- "user_email_unique": {
291
- "name": "user_email_unique",
292
- "nullsNotDistinct": false,
293
- "columns": [
294
- "email"
295
- ]
296
- }
297
- },
298
- "policies": {},
299
- "checkConstraints": {},
300
- "isRLSEnabled": false
301
- },
302
- "public.verification": {
303
- "name": "verification",
304
- "schema": "",
305
- "columns": {
306
- "id": {
307
- "name": "id",
308
- "type": "text",
309
- "primaryKey": true,
310
- "notNull": true
311
- },
312
- "identifier": {
313
- "name": "identifier",
314
- "type": "text",
315
- "primaryKey": false,
316
- "notNull": true
317
- },
318
- "value": {
319
- "name": "value",
320
- "type": "text",
321
- "primaryKey": false,
322
- "notNull": true
323
- },
324
- "expires_at": {
325
- "name": "expires_at",
326
- "type": "timestamp",
327
- "primaryKey": false,
328
- "notNull": true
329
- },
330
- "created_at": {
331
- "name": "created_at",
332
- "type": "timestamp",
333
- "primaryKey": false,
334
- "notNull": true,
335
- "default": "now()"
336
- },
337
- "updated_at": {
338
- "name": "updated_at",
339
- "type": "timestamp",
340
- "primaryKey": false,
341
- "notNull": true,
342
- "default": "now()"
343
- }
344
- },
345
- "indexes": {
346
- "verification_identifier_idx": {
347
- "name": "verification_identifier_idx",
348
- "columns": [
349
- {
350
- "expression": "identifier",
351
- "isExpression": false,
352
- "asc": true,
353
- "nulls": "last"
354
- }
355
- ],
356
- "isUnique": false,
357
- "concurrently": false,
358
- "method": "btree",
359
- "with": {}
360
- }
361
- },
362
- "foreignKeys": {},
363
- "compositePrimaryKeys": {},
364
- "uniqueConstraints": {},
365
- "policies": {},
366
- "checkConstraints": {},
367
- "isRLSEnabled": false
368
- },
369
- "public.user_profiles": {
370
- "name": "user_profiles",
371
- "schema": "",
372
- "columns": {
373
- "user_id": {
374
- "name": "user_id",
375
- "type": "text",
376
- "primaryKey": true,
377
- "notNull": true
378
- },
379
- "name": {
380
- "name": "name",
381
- "type": "text",
382
- "primaryKey": false,
383
- "notNull": true
384
- },
385
- "created_at": {
386
- "name": "created_at",
387
- "type": "timestamp",
388
- "primaryKey": false,
389
- "notNull": true,
390
- "default": "now()"
391
- },
392
- "updated_at": {
393
- "name": "updated_at",
394
- "type": "timestamp",
395
- "primaryKey": false,
396
- "notNull": true,
397
- "default": "now()"
398
- }
399
- },
400
- "indexes": {},
401
- "foreignKeys": {
402
- "user_profiles_user_id_user_id_fk": {
403
- "name": "user_profiles_user_id_user_id_fk",
404
- "tableFrom": "user_profiles",
405
- "tableTo": "user",
406
- "columnsFrom": [
407
- "user_id"
408
- ],
409
- "columnsTo": [
410
- "id"
411
- ],
412
- "onDelete": "cascade",
413
- "onUpdate": "no action"
414
- }
415
- },
416
- "compositePrimaryKeys": {},
417
- "uniqueConstraints": {},
418
- "policies": {},
419
- "checkConstraints": {},
420
- "isRLSEnabled": false
421
- },
422
- "public.organizations": {
423
- "name": "organizations",
424
- "schema": "",
425
- "columns": {
426
- "id": {
427
- "name": "id",
428
- "type": "text",
429
- "primaryKey": true,
430
- "notNull": true
431
- },
432
- "name": {
433
- "name": "name",
434
- "type": "text",
435
- "primaryKey": false,
436
- "notNull": true
437
- },
438
- "slug": {
439
- "name": "slug",
440
- "type": "text",
441
- "primaryKey": false,
442
- "notNull": true
443
- },
444
- "created_at": {
445
- "name": "created_at",
446
- "type": "timestamp",
447
- "primaryKey": false,
448
- "notNull": true,
449
- "default": "now()"
450
- },
451
- "updated_at": {
452
- "name": "updated_at",
453
- "type": "timestamp",
454
- "primaryKey": false,
455
- "notNull": true,
456
- "default": "now()"
457
- }
458
- },
459
- "indexes": {},
460
- "foreignKeys": {},
461
- "compositePrimaryKeys": {},
462
- "uniqueConstraints": {
463
- "organizations_slug_unique": {
464
- "name": "organizations_slug_unique",
465
- "nullsNotDistinct": false,
466
- "columns": [
467
- "slug"
468
- ]
469
- }
470
- },
471
- "policies": {},
472
- "checkConstraints": {},
473
- "isRLSEnabled": false
474
- },
475
- "public.organization_members": {
476
- "name": "organization_members",
477
- "schema": "",
478
- "columns": {
479
- "organization_id": {
480
- "name": "organization_id",
481
- "type": "text",
482
- "primaryKey": false,
483
- "notNull": true
484
- },
485
- "user_id": {
486
- "name": "user_id",
487
- "type": "text",
488
- "primaryKey": false,
489
- "notNull": true
490
- },
491
- "role": {
492
- "name": "role",
493
- "type": "text",
494
- "primaryKey": false,
495
- "notNull": true
496
- },
497
- "created_at": {
498
- "name": "created_at",
499
- "type": "timestamp",
500
- "primaryKey": false,
501
- "notNull": true,
502
- "default": "now()"
503
- }
504
- },
505
- "indexes": {},
506
- "foreignKeys": {
507
- "organization_members_organization_id_organizations_id_fk": {
508
- "name": "organization_members_organization_id_organizations_id_fk",
509
- "tableFrom": "organization_members",
510
- "tableTo": "organizations",
511
- "columnsFrom": [
512
- "organization_id"
513
- ],
514
- "columnsTo": [
515
- "id"
516
- ],
517
- "onDelete": "cascade",
518
- "onUpdate": "no action"
519
- },
520
- "organization_members_user_id_user_id_fk": {
521
- "name": "organization_members_user_id_user_id_fk",
522
- "tableFrom": "organization_members",
523
- "tableTo": "user",
524
- "columnsFrom": [
525
- "user_id"
526
- ],
527
- "columnsTo": [
528
- "id"
529
- ],
530
- "onDelete": "cascade",
531
- "onUpdate": "no action"
532
- }
533
- },
534
- "compositePrimaryKeys": {
535
- "organization_members_organization_id_user_id_pk": {
536
- "name": "organization_members_organization_id_user_id_pk",
537
- "columns": [
538
- "organization_id",
539
- "user_id"
540
- ]
541
- }
542
- },
543
- "uniqueConstraints": {},
544
- "policies": {},
545
- "checkConstraints": {},
546
- "isRLSEnabled": false
547
- }
548
- },
549
- "enums": {},
550
- "schemas": {},
551
- "sequences": {},
552
- "roles": {},
553
- "policies": {},
554
- "views": {},
555
- "_meta": {
556
- "columns": {},
557
- "schemas": {},
558
- "tables": {}
559
- }
560
- }