handoff-app 2.0.0-2 → 2.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.
Files changed (163) hide show
  1. package/README.md +140 -83
  2. package/dist/app-builder/build.js +21 -4
  3. package/dist/app-builder/client-config.js +9 -8
  4. package/dist/cli/auth/browser.d.ts +2 -0
  5. package/dist/cli/auth/browser.js +33 -0
  6. package/dist/cli/auth/device.d.ts +11 -0
  7. package/dist/cli/auth/device.js +155 -0
  8. package/dist/cli/auth/store.d.ts +29 -0
  9. package/dist/cli/auth/store.js +146 -0
  10. package/dist/cli/scaffold.js +20 -154
  11. package/dist/cli.js +1 -1
  12. package/dist/commands/index.js +4 -0
  13. package/dist/commands/login/index.d.ts +8 -0
  14. package/dist/commands/login/index.js +53 -0
  15. package/dist/commands/logout/index.d.ts +7 -0
  16. package/dist/commands/logout/index.js +54 -0
  17. package/dist/config/entries.d.ts +47 -0
  18. package/dist/config/entries.js +162 -0
  19. package/dist/config/index.d.ts +2 -0
  20. package/dist/config/index.js +5 -1
  21. package/dist/config/runtime.d.ts +9 -9
  22. package/dist/config/runtime.js +15 -15
  23. package/dist/registry/auth/access-tokens.d.ts +46 -0
  24. package/dist/registry/auth/access-tokens.js +165 -0
  25. package/dist/registry/auth/action-tokens.d.ts +66 -0
  26. package/dist/registry/auth/action-tokens.js +178 -0
  27. package/dist/registry/auth/crypto.d.ts +4 -0
  28. package/dist/registry/auth/crypto.js +16 -0
  29. package/dist/registry/auth/database.d.ts +7 -0
  30. package/dist/registry/auth/database.js +22 -0
  31. package/dist/registry/auth/device-authorizations.d.ts +51 -0
  32. package/dist/registry/auth/device-authorizations.js +170 -0
  33. package/dist/registry/auth/gravatar.d.ts +1 -0
  34. package/dist/registry/auth/gravatar.js +8 -0
  35. package/dist/registry/auth/index.d.ts +11 -0
  36. package/dist/registry/auth/index.js +72 -0
  37. package/dist/registry/auth/installation.d.ts +42 -0
  38. package/dist/registry/auth/installation.js +105 -0
  39. package/dist/registry/auth/password.d.ts +12 -0
  40. package/dist/registry/auth/password.js +58 -0
  41. package/dist/registry/auth/rate-limits.d.ts +22 -0
  42. package/dist/registry/auth/rate-limits.js +75 -0
  43. package/dist/registry/auth/types.d.ts +26 -0
  44. package/dist/registry/auth/types.js +9 -0
  45. package/dist/registry/auth/user-record.d.ts +13 -0
  46. package/dist/registry/auth/user-record.js +16 -0
  47. package/dist/registry/auth/users.d.ts +31 -0
  48. package/dist/registry/auth/users.js +135 -0
  49. package/dist/registry/auth/validation.d.ts +3 -0
  50. package/dist/registry/auth/validation.js +28 -0
  51. package/dist/registry/checkout/assets.js +4 -2
  52. package/dist/registry/checkout/index.d.ts +1 -1
  53. package/dist/registry/checkout/index.js +101 -23
  54. package/dist/registry/checkout/tokens.js +4 -2
  55. package/dist/registry/connection.d.ts +9 -0
  56. package/dist/registry/connection.js +29 -1
  57. package/dist/registry/db/driver.d.ts +5 -4
  58. package/dist/registry/db/driver.js +5 -4
  59. package/dist/registry/db/index.d.ts +1 -1
  60. package/dist/registry/db/index.js +7 -1
  61. package/dist/registry/db/schema.d.ts +2521 -750
  62. package/dist/registry/db/schema.js +126 -1
  63. package/dist/registry/publish/assets.js +1 -1
  64. package/dist/registry/publish/errors.js +3 -3
  65. package/dist/registry/publish/index.d.ts +1 -1
  66. package/dist/registry/publish/index.js +9 -9
  67. package/dist/registry/publish/tokens.js +1 -1
  68. package/dist/types/config.d.ts +4 -1
  69. package/docs/cli.md +4 -0
  70. package/drizzle/0005_add_registry_auth.sql +95 -0
  71. package/drizzle/meta/0005_snapshot.json +1926 -0
  72. package/drizzle/meta/_journal.json +8 -1
  73. package/package.json +5 -4
  74. package/src/app/components/Auth/AccountLayout.tsx +87 -0
  75. package/src/app/components/Auth/AuthControls.tsx +99 -0
  76. package/src/app/components/Auth/AuthShell.tsx +73 -0
  77. package/src/app/components/Auth/RegistryInstallGate.tsx +23 -0
  78. package/src/app/components/Auth/RegistrySessionProvider.tsx +15 -0
  79. package/src/app/components/Auth/api.ts +20 -0
  80. package/src/app/components/Layout/Header.tsx +2 -0
  81. package/src/app/components/Navigation/MobileNav.tsx +2 -0
  82. package/src/app/lib/auth/api.ts +113 -0
  83. package/src/app/lib/auth/config.ts +175 -0
  84. package/src/app/lib/auth/email.ts +34 -0
  85. package/src/app/lib/docs-api/runtime-config.ts +0 -14
  86. package/src/app/lib/registry-api/auth.ts +29 -46
  87. package/src/app/lib/registry-api/errors.ts +2 -2
  88. package/src/app/lib/registry-api/handler.ts +19 -14
  89. package/src/app/lib/registry-api/token-transfer.ts +1 -1
  90. package/src/app/lib/registry-api/transfer.ts +4 -4
  91. package/src/app/next.config.mjs +12 -3
  92. package/src/app/pages/_app.tsx +10 -4
  93. package/src/app/pages/account/index.tsx +153 -0
  94. package/src/app/pages/account/tokens.tsx +230 -0
  95. package/src/app/pages/account/users.tsx +310 -0
  96. package/src/app/pages/api/account/index.ts +26 -0
  97. package/src/app/pages/api/account/tokens/[id].ts +17 -0
  98. package/src/app/pages/api/account/tokens/index.ts +44 -0
  99. package/src/app/pages/api/admin/users/[id]/[action].ts +89 -0
  100. package/src/app/pages/api/admin/users/index.ts +53 -0
  101. package/src/app/pages/api/auth/[...nextauth].ts +4 -0
  102. package/src/app/pages/api/auth/request-reset.ts +53 -0
  103. package/src/app/pages/api/auth/reset-password.ts +29 -0
  104. package/src/app/pages/api/install.ts +102 -0
  105. package/src/app/pages/api/oauth/device/approve.ts +23 -0
  106. package/src/app/pages/api/oauth/device/index.ts +41 -0
  107. package/src/app/pages/api/oauth/revoke.ts +24 -0
  108. package/src/app/pages/api/oauth/token.ts +31 -0
  109. package/src/app/pages/api/registry/health.ts +4 -3
  110. package/src/app/pages/api/registry/transfer/[kind]/[id].ts +3 -3
  111. package/src/app/pages/api/registry/transfer/assets/[collection].ts +2 -1
  112. package/src/app/pages/api/registry/transfer/assets/blobs/[hash].ts +2 -1
  113. package/src/app/pages/api/registry/transfer/tokens/[...setId].ts +2 -2
  114. package/src/app/pages/cli/device.tsx +143 -0
  115. package/src/app/pages/install.tsx +336 -0
  116. package/src/app/pages/login.tsx +117 -0
  117. package/src/app/pages/reset-password.tsx +159 -0
  118. package/src/app/types/next-auth.d.ts +27 -0
  119. package/src/app-builder/build.ts +22 -5
  120. package/src/app-builder/client-config.ts +10 -9
  121. package/src/cli/auth/browser.ts +29 -0
  122. package/src/cli/auth/device.ts +181 -0
  123. package/src/cli/auth/store.ts +137 -0
  124. package/src/cli/scaffold.ts +20 -197
  125. package/src/cli.ts +1 -1
  126. package/src/commands/index.ts +4 -0
  127. package/src/commands/login/index.ts +48 -0
  128. package/src/commands/logout/index.ts +51 -0
  129. package/src/config/entries.ts +175 -0
  130. package/src/config/index.ts +4 -0
  131. package/src/config/runtime.ts +15 -14
  132. package/src/registry/auth/access-tokens.ts +198 -0
  133. package/src/registry/auth/action-tokens.ts +225 -0
  134. package/src/registry/auth/crypto.ts +13 -0
  135. package/src/registry/auth/database.ts +15 -0
  136. package/src/registry/auth/device-authorizations.ts +223 -0
  137. package/src/registry/auth/gravatar.ts +6 -0
  138. package/src/registry/auth/index.ts +89 -0
  139. package/src/registry/auth/installation.ts +117 -0
  140. package/src/registry/auth/password.ts +46 -0
  141. package/src/registry/auth/rate-limits.ts +84 -0
  142. package/src/registry/auth/types.ts +34 -0
  143. package/src/registry/auth/user-record.ts +25 -0
  144. package/src/registry/auth/users.ts +145 -0
  145. package/src/registry/auth/validation.ts +24 -0
  146. package/src/registry/checkout/assets.ts +4 -2
  147. package/src/registry/checkout/index.ts +114 -24
  148. package/src/registry/checkout/tokens.ts +4 -2
  149. package/src/registry/connection.ts +23 -0
  150. package/src/registry/db/driver.ts +5 -4
  151. package/src/registry/db/index.ts +12 -0
  152. package/src/registry/db/schema.ts +174 -1
  153. package/src/registry/publish/assets.ts +1 -1
  154. package/src/registry/publish/errors.ts +3 -3
  155. package/src/registry/publish/index.ts +9 -9
  156. package/src/registry/publish/tokens.ts +1 -1
  157. package/src/types/config.ts +4 -1
  158. package/templates/default/README.md.tpl +18 -0
  159. package/templates/default/gitignore.tpl +1 -0
  160. package/templates/default/handoff.config.js.tpl +0 -1
  161. package/templates/default/handoff.config.ts.tpl +0 -1
  162. package/templates/default/handoff.config.with-examples.js.tpl +0 -1
  163. package/templates/default/handoff.config.with-examples.ts.tpl +0 -1
@@ -52,3 +52,21 @@ It reads `DATABASE_URL` from the environment and applies the migrations bundled
52
52
  with Handoff. It runs on its own, separate from build and start, so use it as a
53
53
  release step (for example in CI/CD). Static deployments don't use a database and
54
54
  can skip it.
55
+
56
+ ### One-time installation
57
+
58
+ Configure `AUTH_SECRET` and the canonical `AUTH_URL`, run migrations, deploy, and
59
+ then open `/install` immediately. The browser installer verifies the deployment
60
+ and transactionally creates the first administrator; it never runs migrations.
61
+ The first visitor can claim an uninstalled registry, so do not leave a new
62
+ deployment unattended.
63
+
64
+ After installation, sign in and run:
65
+
66
+ ```bash
67
+ handoff-app login --url https://registry.example.com
68
+ ```
69
+
70
+ Approve the device in the browser before publishing or checking out. CI should
71
+ use a user-issued access token from Account settings. The former fixed
72
+ `HANDOFF_REGISTRY_API_TOKEN` is not accepted.
@@ -11,6 +11,7 @@ public/api
11
11
 
12
12
  # Environment
13
13
  .env
14
+ .handoff/
14
15
 
15
16
  # Deployment
16
17
  .vercel
@@ -70,7 +70,6 @@ const config = {
70
70
  // mode: "registry",
71
71
  // registry: {
72
72
  // databaseUrlEnv: "DATABASE_URL",
73
- // apiTokenEnv: "HANDOFF_REGISTRY_API_TOKEN",
74
73
  // database: { driver: "pg" }, // 'pg' | 'neon'
75
74
  // },
76
75
  // },
@@ -68,7 +68,6 @@ export default defineConfig({
68
68
  // mode: "registry",
69
69
  // registry: {
70
70
  // databaseUrlEnv: "DATABASE_URL",
71
- // apiTokenEnv: "HANDOFF_REGISTRY_API_TOKEN",
72
71
  // database: { driver: "pg" }, // 'pg' | 'neon'
73
72
  // },
74
73
  // },
@@ -69,7 +69,6 @@ const config = {
69
69
  // mode: "registry",
70
70
  // registry: {
71
71
  // databaseUrlEnv: "DATABASE_URL",
72
- // apiTokenEnv: "HANDOFF_REGISTRY_API_TOKEN",
73
72
  // database: { driver: "pg" }, // 'pg' | 'neon'
74
73
  // },
75
74
  // },
@@ -67,7 +67,6 @@ export default defineConfig({
67
67
  // mode: "registry",
68
68
  // registry: {
69
69
  // databaseUrlEnv: "DATABASE_URL",
70
- // apiTokenEnv: "HANDOFF_REGISTRY_API_TOKEN",
71
70
  // database: { driver: "pg" }, // 'pg' | 'neon'
72
71
  // },
73
72
  // },