scriptorium 0.0.1

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 (82) hide show
  1. package/README.md +110 -0
  2. package/bin/scriptorium.js +18 -0
  3. package/build/client/apple-touch-icon.png +0 -0
  4. package/build/client/assets/_layout-D-bxuQBW.js +1 -0
  5. package/build/client/assets/_layout-D2eOWFrG.js +1 -0
  6. package/build/client/assets/_layout-D4m0RbUC.js +1 -0
  7. package/build/client/assets/_layout-DggtTDZp.js +1 -0
  8. package/build/client/assets/ack-yx2DGjj6.js +1 -0
  9. package/build/client/assets/auth-shell-FEL5QDuP.js +1 -0
  10. package/build/client/assets/begin-DP2rzg_V.js +1 -0
  11. package/build/client/assets/begin-l0sNRNKZ.js +1 -0
  12. package/build/client/assets/chunk-EPOLDU6W-B-j6nV8T.js +26 -0
  13. package/build/client/assets/cn-Kn7NbJqM.js +1 -0
  14. package/build/client/assets/confirm-passkey-ntLsS7_k.js +1 -0
  15. package/build/client/assets/entry.client-BkscxSA6.js +5 -0
  16. package/build/client/assets/events-l0sNRNKZ.js +1 -0
  17. package/build/client/assets/file-list-DBDZbrBp.js +1 -0
  18. package/build/client/assets/files-Bzkr7-i7.js +1 -0
  19. package/build/client/assets/files-browser-KNurSsen.js +1 -0
  20. package/build/client/assets/files-cnv1kfgp.js +1 -0
  21. package/build/client/assets/files.browse-9p4xl9MV.js +1 -0
  22. package/build/client/assets/finish-DP2rzg_V.js +1 -0
  23. package/build/client/assets/finish-l0sNRNKZ.js +1 -0
  24. package/build/client/assets/git-CjSY0eSC.js +1 -0
  25. package/build/client/assets/git-T0lLjMNd.js +1 -0
  26. package/build/client/assets/git-browser-DwSOY6QN.js +1 -0
  27. package/build/client/assets/iconify-BDcX0yw8.js +1 -0
  28. package/build/client/assets/index-8zQ7Fizv.js +9 -0
  29. package/build/client/assets/index-BUN6tnpl.js +1 -0
  30. package/build/client/assets/index-BlNoCKAt.js +1 -0
  31. package/build/client/assets/index-g2QB9BbT.js +1 -0
  32. package/build/client/assets/instance-events-provider-DTYnvumj.js +39 -0
  33. package/build/client/assets/instance-route-C25LRYYo.js +1 -0
  34. package/build/client/assets/instances-CzjXhR3c.js +1 -0
  35. package/build/client/assets/instances._instanceId.proxy._-l0sNRNKZ.js +1 -0
  36. package/build/client/assets/instances._instanceId.sessions._sessionId.test-COZIMxji.js +208 -0
  37. package/build/client/assets/instances.new-BZi5xwEV.js +1 -0
  38. package/build/client/assets/login-Bwt79t7_.js +1 -0
  39. package/build/client/assets/logout-l0sNRNKZ.js +1 -0
  40. package/build/client/assets/magic-string.es-DjU5CGuV.js +10 -0
  41. package/build/client/assets/manifest-3c01c628.js +1 -0
  42. package/build/client/assets/message-card-BclR_JqA.css +1 -0
  43. package/build/client/assets/message-card-DJ5C3WNp.js +34 -0
  44. package/build/client/assets/passkeys-DpNQs4bn.js +1 -0
  45. package/build/client/assets/register-DXPj5RLZ.js +1 -0
  46. package/build/client/assets/root-DxD-Skic.css +1 -0
  47. package/build/client/assets/root-DxyfhNRI.js +1 -0
  48. package/build/client/assets/route-handle-DcEil3NY.js +1 -0
  49. package/build/client/assets/safe-area-DTPfLjT-.css +1 -0
  50. package/build/client/assets/safe-area.module-CwCzHS6V.js +1 -0
  51. package/build/client/assets/scroll-indicator-CFaTM_rb.js +12 -0
  52. package/build/client/assets/scroll-indicator-D4qxLVUu.css +1 -0
  53. package/build/client/assets/scrollable-layout-CS-vPTNM.js +1 -0
  54. package/build/client/assets/session-route-oxi4s_Qg.js +1 -0
  55. package/build/client/assets/sessions-provider-D1t07kir.js +1 -0
  56. package/build/client/assets/settings-CameSNIM.js +1 -0
  57. package/build/client/assets/sidebar-DRhB33rT.js +1 -0
  58. package/build/client/assets/use-double-check-CbbarqDt.js +1 -0
  59. package/build/client/assets/webauthn.client-C1ZSQfKs.js +2 -0
  60. package/build/client/dev-sw.js +7 -0
  61. package/build/client/favicon.ico +0 -0
  62. package/build/client/icon-192.png +0 -0
  63. package/build/client/icon-512.png +0 -0
  64. package/build/client/icon-maskable-512.png +0 -0
  65. package/build/client/icon-maskable.svg +8 -0
  66. package/build/client/icon.svg +8 -0
  67. package/build/client/manifest.webmanifest +28 -0
  68. package/build/client/sw.js +73 -0
  69. package/build/runtime/app/lib/runtime-config.server.js +422 -0
  70. package/build/runtime/cli/scriptorium.js +21 -0
  71. package/build/runtime/cli/serve.js +101 -0
  72. package/build/server/index.js +8574 -0
  73. package/docs/config.md +49 -0
  74. package/drizzle/20260312181200_fair_caretaker/migration.sql +54 -0
  75. package/drizzle/20260312181200_fair_caretaker/snapshot.json +484 -0
  76. package/drizzle/20260313000548_windy_paibok/migration.sql +37 -0
  77. package/drizzle/20260313000548_windy_paibok/snapshot.json +617 -0
  78. package/drizzle/20260318120000_session_read_statuses/migration.sql +11 -0
  79. package/drizzle/20260318120000_session_read_statuses/snapshot.json +710 -0
  80. package/drizzle/20260318213224_dear_captain_midlands/migration.sql +24 -0
  81. package/drizzle/20260318213224_dear_captain_midlands/snapshot.json +695 -0
  82. package/package.json +88 -0
@@ -0,0 +1,617 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "sqlite",
4
+ "id": "fa1ab0b8-a183-446f-bfe0-313e9d57c442",
5
+ "prevIds": [
6
+ "d8fe33d6-0884-4785-989a-e1ba4e24e2d9"
7
+ ],
8
+ "ddl": [
9
+ {
10
+ "name": "activation_codes",
11
+ "entityType": "tables"
12
+ },
13
+ {
14
+ "name": "authentication_challenges",
15
+ "entityType": "tables"
16
+ },
17
+ {
18
+ "name": "instances",
19
+ "entityType": "tables"
20
+ },
21
+ {
22
+ "name": "passkeys",
23
+ "entityType": "tables"
24
+ },
25
+ {
26
+ "name": "registration_challenges",
27
+ "entityType": "tables"
28
+ },
29
+ {
30
+ "name": "sessions",
31
+ "entityType": "tables"
32
+ },
33
+ {
34
+ "type": "text",
35
+ "notNull": false,
36
+ "autoincrement": false,
37
+ "default": null,
38
+ "generated": null,
39
+ "name": "id",
40
+ "entityType": "columns",
41
+ "table": "activation_codes"
42
+ },
43
+ {
44
+ "type": "text",
45
+ "notNull": true,
46
+ "autoincrement": false,
47
+ "default": null,
48
+ "generated": null,
49
+ "name": "passkey_id",
50
+ "entityType": "columns",
51
+ "table": "activation_codes"
52
+ },
53
+ {
54
+ "type": "text",
55
+ "notNull": true,
56
+ "autoincrement": false,
57
+ "default": null,
58
+ "generated": null,
59
+ "name": "code_hash",
60
+ "entityType": "columns",
61
+ "table": "activation_codes"
62
+ },
63
+ {
64
+ "type": "text",
65
+ "notNull": true,
66
+ "autoincrement": false,
67
+ "default": null,
68
+ "generated": null,
69
+ "name": "expires_at",
70
+ "entityType": "columns",
71
+ "table": "activation_codes"
72
+ },
73
+ {
74
+ "type": "text",
75
+ "notNull": true,
76
+ "autoincrement": false,
77
+ "default": null,
78
+ "generated": null,
79
+ "name": "created_at",
80
+ "entityType": "columns",
81
+ "table": "activation_codes"
82
+ },
83
+ {
84
+ "type": "text",
85
+ "notNull": false,
86
+ "autoincrement": false,
87
+ "default": null,
88
+ "generated": null,
89
+ "name": "consumed_at",
90
+ "entityType": "columns",
91
+ "table": "activation_codes"
92
+ },
93
+ {
94
+ "type": "integer",
95
+ "notNull": true,
96
+ "autoincrement": false,
97
+ "default": "0",
98
+ "generated": null,
99
+ "name": "attempts",
100
+ "entityType": "columns",
101
+ "table": "activation_codes"
102
+ },
103
+ {
104
+ "type": "text",
105
+ "notNull": false,
106
+ "autoincrement": false,
107
+ "default": null,
108
+ "generated": null,
109
+ "name": "id",
110
+ "entityType": "columns",
111
+ "table": "authentication_challenges"
112
+ },
113
+ {
114
+ "type": "text",
115
+ "notNull": true,
116
+ "autoincrement": false,
117
+ "default": null,
118
+ "generated": null,
119
+ "name": "challenge",
120
+ "entityType": "columns",
121
+ "table": "authentication_challenges"
122
+ },
123
+ {
124
+ "type": "text",
125
+ "notNull": true,
126
+ "autoincrement": false,
127
+ "default": null,
128
+ "generated": null,
129
+ "name": "expires_at",
130
+ "entityType": "columns",
131
+ "table": "authentication_challenges"
132
+ },
133
+ {
134
+ "type": "text",
135
+ "notNull": true,
136
+ "autoincrement": false,
137
+ "default": null,
138
+ "generated": null,
139
+ "name": "created_at",
140
+ "entityType": "columns",
141
+ "table": "authentication_challenges"
142
+ },
143
+ {
144
+ "type": "text",
145
+ "notNull": false,
146
+ "autoincrement": false,
147
+ "default": null,
148
+ "generated": null,
149
+ "name": "id",
150
+ "entityType": "columns",
151
+ "table": "instances"
152
+ },
153
+ {
154
+ "type": "text",
155
+ "notNull": true,
156
+ "autoincrement": false,
157
+ "default": null,
158
+ "generated": null,
159
+ "name": "name",
160
+ "entityType": "columns",
161
+ "table": "instances"
162
+ },
163
+ {
164
+ "type": "text",
165
+ "notNull": true,
166
+ "autoincrement": false,
167
+ "default": null,
168
+ "generated": null,
169
+ "name": "directory",
170
+ "entityType": "columns",
171
+ "table": "instances"
172
+ },
173
+ {
174
+ "type": "integer",
175
+ "notNull": true,
176
+ "autoincrement": false,
177
+ "default": null,
178
+ "generated": null,
179
+ "name": "port",
180
+ "entityType": "columns",
181
+ "table": "instances"
182
+ },
183
+ {
184
+ "type": "text",
185
+ "notNull": true,
186
+ "autoincrement": false,
187
+ "default": null,
188
+ "generated": null,
189
+ "name": "status",
190
+ "entityType": "columns",
191
+ "table": "instances"
192
+ },
193
+ {
194
+ "type": "text",
195
+ "notNull": true,
196
+ "autoincrement": false,
197
+ "default": null,
198
+ "generated": null,
199
+ "name": "created_at",
200
+ "entityType": "columns",
201
+ "table": "instances"
202
+ },
203
+ {
204
+ "type": "text",
205
+ "notNull": true,
206
+ "autoincrement": false,
207
+ "default": null,
208
+ "generated": null,
209
+ "name": "updated_at",
210
+ "entityType": "columns",
211
+ "table": "instances"
212
+ },
213
+ {
214
+ "type": "text",
215
+ "notNull": false,
216
+ "autoincrement": false,
217
+ "default": null,
218
+ "generated": null,
219
+ "name": "last_started_at",
220
+ "entityType": "columns",
221
+ "table": "instances"
222
+ },
223
+ {
224
+ "type": "text",
225
+ "notNull": false,
226
+ "autoincrement": false,
227
+ "default": null,
228
+ "generated": null,
229
+ "name": "last_exit_at",
230
+ "entityType": "columns",
231
+ "table": "instances"
232
+ },
233
+ {
234
+ "type": "text",
235
+ "notNull": false,
236
+ "autoincrement": false,
237
+ "default": null,
238
+ "generated": null,
239
+ "name": "last_error",
240
+ "entityType": "columns",
241
+ "table": "instances"
242
+ },
243
+ {
244
+ "type": "text",
245
+ "notNull": false,
246
+ "autoincrement": false,
247
+ "default": null,
248
+ "generated": null,
249
+ "name": "id",
250
+ "entityType": "columns",
251
+ "table": "passkeys"
252
+ },
253
+ {
254
+ "type": "text",
255
+ "notNull": true,
256
+ "autoincrement": false,
257
+ "default": null,
258
+ "generated": null,
259
+ "name": "webauthn_user_id",
260
+ "entityType": "columns",
261
+ "table": "passkeys"
262
+ },
263
+ {
264
+ "type": "blob",
265
+ "notNull": true,
266
+ "autoincrement": false,
267
+ "default": null,
268
+ "generated": null,
269
+ "name": "public_key",
270
+ "entityType": "columns",
271
+ "table": "passkeys"
272
+ },
273
+ {
274
+ "type": "integer",
275
+ "notNull": true,
276
+ "autoincrement": false,
277
+ "default": null,
278
+ "generated": null,
279
+ "name": "counter",
280
+ "entityType": "columns",
281
+ "table": "passkeys"
282
+ },
283
+ {
284
+ "type": "text",
285
+ "notNull": true,
286
+ "autoincrement": false,
287
+ "default": null,
288
+ "generated": null,
289
+ "name": "device_type",
290
+ "entityType": "columns",
291
+ "table": "passkeys"
292
+ },
293
+ {
294
+ "type": "integer",
295
+ "notNull": true,
296
+ "autoincrement": false,
297
+ "default": null,
298
+ "generated": null,
299
+ "name": "backed_up",
300
+ "entityType": "columns",
301
+ "table": "passkeys"
302
+ },
303
+ {
304
+ "type": "text",
305
+ "notNull": true,
306
+ "autoincrement": false,
307
+ "default": null,
308
+ "generated": null,
309
+ "name": "transports_json",
310
+ "entityType": "columns",
311
+ "table": "passkeys"
312
+ },
313
+ {
314
+ "type": "text",
315
+ "notNull": true,
316
+ "autoincrement": false,
317
+ "default": null,
318
+ "generated": null,
319
+ "name": "label",
320
+ "entityType": "columns",
321
+ "table": "passkeys"
322
+ },
323
+ {
324
+ "type": "text",
325
+ "notNull": true,
326
+ "autoincrement": false,
327
+ "default": null,
328
+ "generated": null,
329
+ "name": "status",
330
+ "entityType": "columns",
331
+ "table": "passkeys"
332
+ },
333
+ {
334
+ "type": "text",
335
+ "notNull": true,
336
+ "autoincrement": false,
337
+ "default": null,
338
+ "generated": null,
339
+ "name": "created_at",
340
+ "entityType": "columns",
341
+ "table": "passkeys"
342
+ },
343
+ {
344
+ "type": "text",
345
+ "notNull": false,
346
+ "autoincrement": false,
347
+ "default": null,
348
+ "generated": null,
349
+ "name": "activated_at",
350
+ "entityType": "columns",
351
+ "table": "passkeys"
352
+ },
353
+ {
354
+ "type": "text",
355
+ "notNull": false,
356
+ "autoincrement": false,
357
+ "default": null,
358
+ "generated": null,
359
+ "name": "revoked_at",
360
+ "entityType": "columns",
361
+ "table": "passkeys"
362
+ },
363
+ {
364
+ "type": "text",
365
+ "notNull": false,
366
+ "autoincrement": false,
367
+ "default": null,
368
+ "generated": null,
369
+ "name": "id",
370
+ "entityType": "columns",
371
+ "table": "registration_challenges"
372
+ },
373
+ {
374
+ "type": "text",
375
+ "notNull": true,
376
+ "autoincrement": false,
377
+ "default": null,
378
+ "generated": null,
379
+ "name": "challenge",
380
+ "entityType": "columns",
381
+ "table": "registration_challenges"
382
+ },
383
+ {
384
+ "type": "text",
385
+ "notNull": true,
386
+ "autoincrement": false,
387
+ "default": null,
388
+ "generated": null,
389
+ "name": "label",
390
+ "entityType": "columns",
391
+ "table": "registration_challenges"
392
+ },
393
+ {
394
+ "type": "text",
395
+ "notNull": true,
396
+ "autoincrement": false,
397
+ "default": null,
398
+ "generated": null,
399
+ "name": "expires_at",
400
+ "entityType": "columns",
401
+ "table": "registration_challenges"
402
+ },
403
+ {
404
+ "type": "text",
405
+ "notNull": true,
406
+ "autoincrement": false,
407
+ "default": null,
408
+ "generated": null,
409
+ "name": "created_at",
410
+ "entityType": "columns",
411
+ "table": "registration_challenges"
412
+ },
413
+ {
414
+ "type": "text",
415
+ "notNull": false,
416
+ "autoincrement": false,
417
+ "default": null,
418
+ "generated": null,
419
+ "name": "id",
420
+ "entityType": "columns",
421
+ "table": "sessions"
422
+ },
423
+ {
424
+ "type": "text",
425
+ "notNull": true,
426
+ "autoincrement": false,
427
+ "default": null,
428
+ "generated": null,
429
+ "name": "passkey_id",
430
+ "entityType": "columns",
431
+ "table": "sessions"
432
+ },
433
+ {
434
+ "type": "text",
435
+ "notNull": true,
436
+ "autoincrement": false,
437
+ "default": null,
438
+ "generated": null,
439
+ "name": "created_at",
440
+ "entityType": "columns",
441
+ "table": "sessions"
442
+ },
443
+ {
444
+ "type": "text",
445
+ "notNull": true,
446
+ "autoincrement": false,
447
+ "default": null,
448
+ "generated": null,
449
+ "name": "expires_at",
450
+ "entityType": "columns",
451
+ "table": "sessions"
452
+ },
453
+ {
454
+ "type": "text",
455
+ "notNull": true,
456
+ "autoincrement": false,
457
+ "default": null,
458
+ "generated": null,
459
+ "name": "last_seen_at",
460
+ "entityType": "columns",
461
+ "table": "sessions"
462
+ },
463
+ {
464
+ "columns": [
465
+ "passkey_id"
466
+ ],
467
+ "tableTo": "passkeys",
468
+ "columnsTo": [
469
+ "id"
470
+ ],
471
+ "onUpdate": "NO ACTION",
472
+ "onDelete": "CASCADE",
473
+ "nameExplicit": false,
474
+ "name": "activation_codes_passkey_id_passkeys_id_fk",
475
+ "entityType": "fks",
476
+ "table": "activation_codes"
477
+ },
478
+ {
479
+ "columns": [
480
+ "passkey_id"
481
+ ],
482
+ "tableTo": "passkeys",
483
+ "columnsTo": [
484
+ "id"
485
+ ],
486
+ "onUpdate": "NO ACTION",
487
+ "onDelete": "CASCADE",
488
+ "nameExplicit": false,
489
+ "name": "sessions_passkey_id_passkeys_id_fk",
490
+ "entityType": "fks",
491
+ "table": "sessions"
492
+ },
493
+ {
494
+ "columns": [
495
+ "id"
496
+ ],
497
+ "nameExplicit": false,
498
+ "name": "activation_codes_pk",
499
+ "table": "activation_codes",
500
+ "entityType": "pks"
501
+ },
502
+ {
503
+ "columns": [
504
+ "id"
505
+ ],
506
+ "nameExplicit": false,
507
+ "name": "authentication_challenges_pk",
508
+ "table": "authentication_challenges",
509
+ "entityType": "pks"
510
+ },
511
+ {
512
+ "columns": [
513
+ "id"
514
+ ],
515
+ "nameExplicit": false,
516
+ "name": "instances_pk",
517
+ "table": "instances",
518
+ "entityType": "pks"
519
+ },
520
+ {
521
+ "columns": [
522
+ "id"
523
+ ],
524
+ "nameExplicit": false,
525
+ "name": "passkeys_pk",
526
+ "table": "passkeys",
527
+ "entityType": "pks"
528
+ },
529
+ {
530
+ "columns": [
531
+ "id"
532
+ ],
533
+ "nameExplicit": false,
534
+ "name": "registration_challenges_pk",
535
+ "table": "registration_challenges",
536
+ "entityType": "pks"
537
+ },
538
+ {
539
+ "columns": [
540
+ "id"
541
+ ],
542
+ "nameExplicit": false,
543
+ "name": "sessions_pk",
544
+ "table": "sessions",
545
+ "entityType": "pks"
546
+ },
547
+ {
548
+ "columns": [
549
+ {
550
+ "value": "passkey_id",
551
+ "isExpression": false
552
+ }
553
+ ],
554
+ "isUnique": false,
555
+ "where": null,
556
+ "origin": "manual",
557
+ "name": "idx_activation_codes_passkey_id",
558
+ "entityType": "indexes",
559
+ "table": "activation_codes"
560
+ },
561
+ {
562
+ "columns": [
563
+ {
564
+ "value": "status",
565
+ "isExpression": false
566
+ }
567
+ ],
568
+ "isUnique": false,
569
+ "where": null,
570
+ "origin": "manual",
571
+ "name": "idx_instances_status",
572
+ "entityType": "indexes",
573
+ "table": "instances"
574
+ },
575
+ {
576
+ "columns": [
577
+ {
578
+ "value": "status",
579
+ "isExpression": false
580
+ }
581
+ ],
582
+ "isUnique": false,
583
+ "where": null,
584
+ "origin": "manual",
585
+ "name": "idx_passkeys_status",
586
+ "entityType": "indexes",
587
+ "table": "passkeys"
588
+ },
589
+ {
590
+ "columns": [
591
+ {
592
+ "value": "expires_at",
593
+ "isExpression": false
594
+ }
595
+ ],
596
+ "isUnique": false,
597
+ "where": null,
598
+ "origin": "manual",
599
+ "name": "idx_sessions_expires_at",
600
+ "entityType": "indexes",
601
+ "table": "sessions"
602
+ },
603
+ {
604
+ "value": "\"status\" in ('starting', 'running', 'stopped', 'error')",
605
+ "name": "instances_status_check",
606
+ "entityType": "checks",
607
+ "table": "instances"
608
+ },
609
+ {
610
+ "value": "\"status\" in ('pending', 'active', 'revoked')",
611
+ "name": "passkeys_status_check",
612
+ "entityType": "checks",
613
+ "table": "passkeys"
614
+ }
615
+ ],
616
+ "renames": []
617
+ }
@@ -0,0 +1,11 @@
1
+ CREATE TABLE `session_read_statuses` (
2
+ `viewer_id` text NOT NULL,
3
+ `instance_id` text NOT NULL,
4
+ `session_id` text NOT NULL,
5
+ `last_read_at` text NOT NULL,
6
+ `created_at` text NOT NULL,
7
+ `updated_at` text NOT NULL,
8
+ CONSTRAINT `session_read_statuses_pk` PRIMARY KEY(`viewer_id`, `instance_id`, `session_id`)
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE INDEX `idx_session_read_statuses_viewer_updated_at` ON `session_read_statuses` (`viewer_id`,`updated_at`);