anhedral 0.8.5 → 0.9.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 (126) hide show
  1. package/README.md +140 -34
  2. package/assets/anhedral-cli-init-technical.svg +8 -8
  3. package/assets/anhedral-cli-init.svg +9 -9
  4. package/assets/security/LICENSES.txt +63 -0
  5. package/assets/security/audit-deps.mjs +295 -0
  6. package/assets/security/braces-regression.mjs +102 -0
  7. package/assets/security/braces@3.0.3.patch +285 -0
  8. package/assets/security/decode-uri-component@0.2.2.patch +149 -0
  9. package/assets/security/decoder-regression.mjs +37 -0
  10. package/assets/security/forge-regression.mjs +46 -0
  11. package/assets/security/manifest.json +53 -0
  12. package/assets/security/node-forge@1.4.0.patch +26 -0
  13. package/dist/access.d.ts +10 -0
  14. package/dist/access.js +93 -0
  15. package/dist/auth-schema-snapshot.d.ts +346 -0
  16. package/dist/auth-schema-snapshot.js +347 -0
  17. package/dist/auth-schema.d.ts +1 -0
  18. package/dist/auth-schema.js +57 -0
  19. package/dist/bin.js +353 -10
  20. package/dist/bounded-file.d.ts +2 -0
  21. package/dist/bounded-file.js +30 -0
  22. package/dist/capabilities.d.ts +19 -33
  23. package/dist/capabilities.js +73 -71
  24. package/dist/cloudflare.d.ts +14 -0
  25. package/dist/cloudflare.js +66 -0
  26. package/dist/command.js +12 -3
  27. package/dist/delivery.d.ts +118 -0
  28. package/dist/delivery.js +611 -0
  29. package/dist/dependencies.d.ts +22 -0
  30. package/dist/dependencies.js +109 -67
  31. package/dist/dependency-order.d.ts +2 -0
  32. package/dist/dependency-order.js +24 -0
  33. package/dist/index.d.ts +18 -1
  34. package/dist/index.js +12 -1
  35. package/dist/managed-hosting.d.ts +49 -0
  36. package/dist/managed-hosting.js +373 -0
  37. package/dist/management.d.ts +3 -0
  38. package/dist/management.js +47 -0
  39. package/dist/platforms/desktop.d.ts +2 -2
  40. package/dist/platforms/desktop.js +22 -12
  41. package/dist/platforms/extension.d.ts +2 -2
  42. package/dist/platforms/extension.js +12 -4
  43. package/dist/platforms/mobile.d.ts +2 -2
  44. package/dist/platforms/mobile.js +13 -7
  45. package/dist/pnpm-policy.d.ts +4 -0
  46. package/dist/pnpm-policy.js +66 -0
  47. package/dist/project-state.d.ts +28 -0
  48. package/dist/project-state.js +226 -0
  49. package/dist/provider-readiness.d.ts +30 -0
  50. package/dist/provider-readiness.js +87 -0
  51. package/dist/provision.d.ts +46 -0
  52. package/dist/provision.js +197 -0
  53. package/dist/readiness.d.ts +4 -1
  54. package/dist/readiness.js +80 -8
  55. package/dist/registry/add.d.ts +22 -0
  56. package/dist/registry/add.js +198 -0
  57. package/dist/registry/bootstrap.d.ts +2 -0
  58. package/dist/registry/bootstrap.js +14 -0
  59. package/dist/registry/commands.d.ts +2 -0
  60. package/dist/registry/commands.js +99 -0
  61. package/dist/registry/context.d.ts +3 -0
  62. package/dist/registry/context.js +21 -0
  63. package/dist/registry/options.d.ts +2 -0
  64. package/dist/registry/options.js +65 -0
  65. package/dist/registry/receipt.d.ts +3 -0
  66. package/dist/registry/receipt.js +73 -0
  67. package/dist/registry/remote.d.ts +25 -0
  68. package/dist/registry/remote.js +168 -0
  69. package/dist/registry/resolve.d.ts +10 -0
  70. package/dist/registry/resolve.js +98 -0
  71. package/dist/registry/types.d.ts +64 -0
  72. package/dist/registry/usage.d.ts +1 -0
  73. package/dist/registry/usage.js +38 -0
  74. package/dist/render.js +3 -3
  75. package/dist/repository.d.ts +24 -0
  76. package/dist/repository.js +96 -0
  77. package/dist/scaffold/api.d.ts +2 -0
  78. package/dist/scaffold/api.js +13 -0
  79. package/dist/scaffold/auth.d.ts +3 -0
  80. package/dist/scaffold/auth.js +95 -0
  81. package/dist/scaffold/bootstrap.d.ts +2 -0
  82. package/dist/scaffold/bootstrap.js +34 -0
  83. package/dist/scaffold/compose.d.ts +4 -0
  84. package/dist/scaffold/compose.js +34 -0
  85. package/dist/scaffold/database.d.ts +2 -0
  86. package/dist/scaffold/database.js +43 -0
  87. package/dist/scaffold/documentation.d.ts +3 -0
  88. package/dist/scaffold/documentation.js +91 -0
  89. package/dist/scaffold/environment.d.ts +2 -0
  90. package/dist/scaffold/environment.js +5 -0
  91. package/dist/scaffold/files.d.ts +25 -0
  92. package/dist/scaffold/files.js +108 -0
  93. package/dist/scaffold/integrations.d.ts +3 -0
  94. package/dist/scaffold/integrations.js +7 -0
  95. package/dist/scaffold/services.d.ts +5 -0
  96. package/dist/scaffold/services.js +84 -0
  97. package/dist/scaffold/web.d.ts +2 -0
  98. package/dist/scaffold/web.js +102 -0
  99. package/dist/scaffold/workspace.d.ts +3 -0
  100. package/dist/scaffold/workspace.js +150 -0
  101. package/dist/security-backports.d.ts +3 -0
  102. package/dist/security-backports.js +26 -0
  103. package/dist/stack-registry.d.ts +80 -0
  104. package/dist/stack-registry.js +424 -0
  105. package/dist/standard.d.ts +6 -17
  106. package/dist/standard.js +41 -585
  107. package/dist/transaction.js +46 -26
  108. package/dist/util.js +12 -2
  109. package/dist/vercel.d.ts +98 -0
  110. package/dist/vercel.js +796 -0
  111. package/dist/version.d.ts +1 -1
  112. package/dist/version.js +1 -1
  113. package/dist/vinext.d.ts +1 -0
  114. package/dist/vinext.js +83 -0
  115. package/dist/workspace-graph.d.ts +7 -0
  116. package/dist/workspace-graph.js +73 -0
  117. package/docs/application-stack-standard.md +75 -674
  118. package/docs/delivery-workflow.md +83 -0
  119. package/docs/managed-hosting-architecture.md +87 -0
  120. package/docs/sponsorships.md +25 -0
  121. package/package.json +23 -28
  122. package/dist/project.d.ts +0 -4
  123. package/dist/standard-products.d.ts +0 -2
  124. package/dist/standard-products.js +0 -6
  125. /package/assets/{images/svg/logo-white-subtract.svg → anhedral-mark.svg} +0 -0
  126. /package/dist/{project.js → registry/types.js} +0 -0
@@ -0,0 +1,347 @@
1
+ // Generated by drizzle-kit 0.31.11 from the pinned Better Auth core schema.
2
+ export const betterAuthSqliteSnapshot = {
3
+ version: '6',
4
+ dialect: 'sqlite',
5
+ id: 'b0e40d2d-45e2-4317-9f1b-ec413de82c9f',
6
+ prevId: '00000000-0000-0000-0000-000000000000',
7
+ tables: {
8
+ account: {
9
+ name: 'account',
10
+ columns: {
11
+ id: {
12
+ name: 'id',
13
+ type: 'text',
14
+ primaryKey: true,
15
+ notNull: true,
16
+ autoincrement: false,
17
+ },
18
+ account_id: {
19
+ name: 'account_id',
20
+ type: 'text',
21
+ primaryKey: false,
22
+ notNull: true,
23
+ autoincrement: false,
24
+ },
25
+ provider_id: {
26
+ name: 'provider_id',
27
+ type: 'text',
28
+ primaryKey: false,
29
+ notNull: true,
30
+ autoincrement: false,
31
+ },
32
+ user_id: {
33
+ name: 'user_id',
34
+ type: 'text',
35
+ primaryKey: false,
36
+ notNull: true,
37
+ autoincrement: false,
38
+ },
39
+ access_token: {
40
+ name: 'access_token',
41
+ type: 'text',
42
+ primaryKey: false,
43
+ notNull: false,
44
+ autoincrement: false,
45
+ },
46
+ refresh_token: {
47
+ name: 'refresh_token',
48
+ type: 'text',
49
+ primaryKey: false,
50
+ notNull: false,
51
+ autoincrement: false,
52
+ },
53
+ id_token: {
54
+ name: 'id_token',
55
+ type: 'text',
56
+ primaryKey: false,
57
+ notNull: false,
58
+ autoincrement: false,
59
+ },
60
+ access_token_expires_at: {
61
+ name: 'access_token_expires_at',
62
+ type: 'integer',
63
+ primaryKey: false,
64
+ notNull: false,
65
+ autoincrement: false,
66
+ },
67
+ refresh_token_expires_at: {
68
+ name: 'refresh_token_expires_at',
69
+ type: 'integer',
70
+ primaryKey: false,
71
+ notNull: false,
72
+ autoincrement: false,
73
+ },
74
+ scope: {
75
+ name: 'scope',
76
+ type: 'text',
77
+ primaryKey: false,
78
+ notNull: false,
79
+ autoincrement: false,
80
+ },
81
+ password: {
82
+ name: 'password',
83
+ type: 'text',
84
+ primaryKey: false,
85
+ notNull: false,
86
+ autoincrement: false,
87
+ },
88
+ created_at: {
89
+ name: 'created_at',
90
+ type: 'integer',
91
+ primaryKey: false,
92
+ notNull: true,
93
+ autoincrement: false,
94
+ },
95
+ updated_at: {
96
+ name: 'updated_at',
97
+ type: 'integer',
98
+ primaryKey: false,
99
+ notNull: true,
100
+ autoincrement: false,
101
+ },
102
+ },
103
+ indexes: {
104
+ account_user_id_idx: {
105
+ name: 'account_user_id_idx',
106
+ columns: ['user_id'],
107
+ isUnique: false,
108
+ },
109
+ },
110
+ foreignKeys: {
111
+ account_user_id_user_id_fk: {
112
+ name: 'account_user_id_user_id_fk',
113
+ tableFrom: 'account',
114
+ tableTo: 'user',
115
+ columnsFrom: ['user_id'],
116
+ columnsTo: ['id'],
117
+ onDelete: 'cascade',
118
+ onUpdate: 'no action',
119
+ },
120
+ },
121
+ compositePrimaryKeys: {},
122
+ uniqueConstraints: {},
123
+ checkConstraints: {},
124
+ },
125
+ session: {
126
+ name: 'session',
127
+ columns: {
128
+ id: {
129
+ name: 'id',
130
+ type: 'text',
131
+ primaryKey: true,
132
+ notNull: true,
133
+ autoincrement: false,
134
+ },
135
+ expires_at: {
136
+ name: 'expires_at',
137
+ type: 'integer',
138
+ primaryKey: false,
139
+ notNull: true,
140
+ autoincrement: false,
141
+ },
142
+ token: {
143
+ name: 'token',
144
+ type: 'text',
145
+ primaryKey: false,
146
+ notNull: true,
147
+ autoincrement: false,
148
+ },
149
+ created_at: {
150
+ name: 'created_at',
151
+ type: 'integer',
152
+ primaryKey: false,
153
+ notNull: true,
154
+ autoincrement: false,
155
+ },
156
+ updated_at: {
157
+ name: 'updated_at',
158
+ type: 'integer',
159
+ primaryKey: false,
160
+ notNull: true,
161
+ autoincrement: false,
162
+ },
163
+ ip_address: {
164
+ name: 'ip_address',
165
+ type: 'text',
166
+ primaryKey: false,
167
+ notNull: false,
168
+ autoincrement: false,
169
+ },
170
+ user_agent: {
171
+ name: 'user_agent',
172
+ type: 'text',
173
+ primaryKey: false,
174
+ notNull: false,
175
+ autoincrement: false,
176
+ },
177
+ user_id: {
178
+ name: 'user_id',
179
+ type: 'text',
180
+ primaryKey: false,
181
+ notNull: true,
182
+ autoincrement: false,
183
+ },
184
+ },
185
+ indexes: {
186
+ session_token_unique: {
187
+ name: 'session_token_unique',
188
+ columns: ['token'],
189
+ isUnique: true,
190
+ },
191
+ session_user_id_idx: {
192
+ name: 'session_user_id_idx',
193
+ columns: ['user_id'],
194
+ isUnique: false,
195
+ },
196
+ },
197
+ foreignKeys: {
198
+ session_user_id_user_id_fk: {
199
+ name: 'session_user_id_user_id_fk',
200
+ tableFrom: 'session',
201
+ tableTo: 'user',
202
+ columnsFrom: ['user_id'],
203
+ columnsTo: ['id'],
204
+ onDelete: 'cascade',
205
+ onUpdate: 'no action',
206
+ },
207
+ },
208
+ compositePrimaryKeys: {},
209
+ uniqueConstraints: {},
210
+ checkConstraints: {},
211
+ },
212
+ user: {
213
+ name: 'user',
214
+ columns: {
215
+ id: {
216
+ name: 'id',
217
+ type: 'text',
218
+ primaryKey: true,
219
+ notNull: true,
220
+ autoincrement: false,
221
+ },
222
+ name: {
223
+ name: 'name',
224
+ type: 'text',
225
+ primaryKey: false,
226
+ notNull: true,
227
+ autoincrement: false,
228
+ },
229
+ email: {
230
+ name: 'email',
231
+ type: 'text',
232
+ primaryKey: false,
233
+ notNull: true,
234
+ autoincrement: false,
235
+ },
236
+ email_verified: {
237
+ name: 'email_verified',
238
+ type: 'integer',
239
+ primaryKey: false,
240
+ notNull: true,
241
+ autoincrement: false,
242
+ default: false,
243
+ },
244
+ image: {
245
+ name: 'image',
246
+ type: 'text',
247
+ primaryKey: false,
248
+ notNull: false,
249
+ autoincrement: false,
250
+ },
251
+ created_at: {
252
+ name: 'created_at',
253
+ type: 'integer',
254
+ primaryKey: false,
255
+ notNull: true,
256
+ autoincrement: false,
257
+ },
258
+ updated_at: {
259
+ name: 'updated_at',
260
+ type: 'integer',
261
+ primaryKey: false,
262
+ notNull: true,
263
+ autoincrement: false,
264
+ },
265
+ },
266
+ indexes: {
267
+ user_email_unique: {
268
+ name: 'user_email_unique',
269
+ columns: ['email'],
270
+ isUnique: true,
271
+ },
272
+ },
273
+ foreignKeys: {},
274
+ compositePrimaryKeys: {},
275
+ uniqueConstraints: {},
276
+ checkConstraints: {},
277
+ },
278
+ verification: {
279
+ name: 'verification',
280
+ columns: {
281
+ id: {
282
+ name: 'id',
283
+ type: 'text',
284
+ primaryKey: true,
285
+ notNull: true,
286
+ autoincrement: false,
287
+ },
288
+ identifier: {
289
+ name: 'identifier',
290
+ type: 'text',
291
+ primaryKey: false,
292
+ notNull: true,
293
+ autoincrement: false,
294
+ },
295
+ value: {
296
+ name: 'value',
297
+ type: 'text',
298
+ primaryKey: false,
299
+ notNull: true,
300
+ autoincrement: false,
301
+ },
302
+ expires_at: {
303
+ name: 'expires_at',
304
+ type: 'integer',
305
+ primaryKey: false,
306
+ notNull: true,
307
+ autoincrement: false,
308
+ },
309
+ created_at: {
310
+ name: 'created_at',
311
+ type: 'integer',
312
+ primaryKey: false,
313
+ notNull: true,
314
+ autoincrement: false,
315
+ },
316
+ updated_at: {
317
+ name: 'updated_at',
318
+ type: 'integer',
319
+ primaryKey: false,
320
+ notNull: true,
321
+ autoincrement: false,
322
+ },
323
+ },
324
+ indexes: {
325
+ verification_identifier_idx: {
326
+ name: 'verification_identifier_idx',
327
+ columns: ['identifier'],
328
+ isUnique: false,
329
+ },
330
+ },
331
+ foreignKeys: {},
332
+ compositePrimaryKeys: {},
333
+ uniqueConstraints: {},
334
+ checkConstraints: {},
335
+ },
336
+ },
337
+ views: {},
338
+ enums: {},
339
+ _meta: {
340
+ schemas: {},
341
+ tables: {},
342
+ columns: {},
343
+ },
344
+ internal: {
345
+ indexes: {},
346
+ },
347
+ };
@@ -0,0 +1 @@
1
+ export declare function writeBetterAuthSchema(root: string, postgres: boolean): void;
@@ -0,0 +1,57 @@
1
+ import path from 'node:path';
2
+ import { betterAuthSqliteSnapshot } from './auth-schema-snapshot.js';
3
+ import { writeFile } from './util.js';
4
+ // Better Auth 1.7.7 core user/session/account/verification schema, without plugins.
5
+ // Product plugins/additional fields require a reviewed schema regeneration/migration.
6
+ export function writeBetterAuthSchema(root, postgres) {
7
+ const table = postgres ? 'pgTable' : 'sqliteTable';
8
+ const date = (column) => postgres
9
+ ? `timestamp('${column}', { withTimezone: true })`
10
+ : `integer('${column}', { mode: 'timestamp_ms' })`;
11
+ const bool = postgres
12
+ ? "boolean('email_verified')"
13
+ : "integer('email_verified', { mode: 'boolean' })";
14
+ const updated = `${date('updated_at')}.notNull().$defaultFn(() => new Date()).$onUpdate(() => new Date())`;
15
+ const created = `${date('created_at')}.notNull().$defaultFn(() => new Date())`;
16
+ const schema = `import { ${table}, text, ${postgres ? 'timestamp, boolean' : 'integer'}, index } from 'drizzle-orm/${postgres ? 'pg-core' : 'sqlite-core'}';
17
+ export const user = ${table}('user', {
18
+ id: text('id').primaryKey(), name: text('name').notNull(), email: text('email').notNull().unique(),
19
+ emailVerified: ${bool}.notNull().default(false), image: text('image'), createdAt: ${created}, updatedAt: ${updated},
20
+ });
21
+ export const session = ${table}('session', {
22
+ id: text('id').primaryKey(), expiresAt: ${date('expires_at')}.notNull(), token: text('token').notNull().unique(),
23
+ createdAt: ${created}, updatedAt: ${updated}, ipAddress: text('ip_address'), userAgent: text('user_agent'),
24
+ userId: text('user_id').notNull().references(() => user.id, { onDelete: 'cascade' }),
25
+ }, (table) => [index('session_user_id_idx').on(table.userId)]);
26
+ export const account = ${table}('account', {
27
+ id: text('id').primaryKey(), accountId: text('account_id').notNull(), providerId: text('provider_id').notNull(),
28
+ userId: text('user_id').notNull().references(() => user.id, { onDelete: 'cascade' }),
29
+ accessToken: text('access_token'), refreshToken: text('refresh_token'), idToken: text('id_token'),
30
+ accessTokenExpiresAt: ${date('access_token_expires_at')}, refreshTokenExpiresAt: ${date('refresh_token_expires_at')},
31
+ scope: text('scope'), password: text('password'), createdAt: ${created}, updatedAt: ${updated},
32
+ }, (table) => [index('account_user_id_idx').on(table.userId)]);
33
+ export const verification = ${table}('verification', {
34
+ id: text('id').primaryKey(), identifier: text('identifier').notNull(), value: text('value').notNull(),
35
+ expiresAt: ${date('expires_at')}.notNull(), createdAt: ${created}, updatedAt: ${updated},
36
+ }, (table) => [index('verification_identifier_idx').on(table.identifier)]);
37
+ `;
38
+ writeFile(path.join(root, 'packages/db/src/schema.ts'), schema);
39
+ if (!postgres) {
40
+ writeFile(path.join(root, 'packages/db/migrations/meta/0000_snapshot.json'), JSON.stringify(betterAuthSqliteSnapshot, null, 2) + '\n');
41
+ writeFile(path.join(root, 'packages/db/migrations/meta/_journal.json'), JSON.stringify({
42
+ version: '7',
43
+ dialect: 'sqlite',
44
+ entries: [
45
+ {
46
+ idx: 0,
47
+ version: '6',
48
+ when: 1791504000000,
49
+ tag: '0000_better_auth',
50
+ breakpoints: true,
51
+ },
52
+ ],
53
+ }, null, 2) + '\n');
54
+ }
55
+ if (!postgres)
56
+ writeFile(path.join(root, 'packages/db/migrations/0000_better_auth.sql'), 'CREATE TABLE `account` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`account_id` text NOT NULL,\n\t`provider_id` text NOT NULL,\n\t`user_id` text NOT NULL,\n\t`access_token` text,\n\t`refresh_token` text,\n\t`id_token` text,\n\t`access_token_expires_at` integer,\n\t`refresh_token_expires_at` integer,\n\t`scope` text,\n\t`password` text,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL,\n\tFOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade\n);\n--> statement-breakpoint\nCREATE INDEX `account_user_id_idx` ON `account` (`user_id`);--> statement-breakpoint\nCREATE TABLE `session` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`expires_at` integer NOT NULL,\n\t`token` text NOT NULL,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL,\n\t`ip_address` text,\n\t`user_agent` text,\n\t`user_id` text NOT NULL,\n\tFOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX `session_token_unique` ON `session` (`token`);--> statement-breakpoint\nCREATE INDEX `session_user_id_idx` ON `session` (`user_id`);--> statement-breakpoint\nCREATE TABLE `user` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`name` text NOT NULL,\n\t`email` text NOT NULL,\n\t`email_verified` integer DEFAULT false NOT NULL,\n\t`image` text,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL\n);\n--> statement-breakpoint\nCREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);--> statement-breakpoint\nCREATE TABLE `verification` (\n\t`id` text PRIMARY KEY NOT NULL,\n\t`identifier` text NOT NULL,\n\t`value` text NOT NULL,\n\t`expires_at` integer NOT NULL,\n\t`created_at` integer NOT NULL,\n\t`updated_at` integer NOT NULL\n);\n--> statement-breakpoint\nCREATE INDEX `verification_identifier_idx` ON `verification` (`identifier`);');
57
+ }