lecodes-sdk 0.19.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 (367) hide show
  1. package/README.md +114 -0
  2. package/dist/global.d.ts +503 -0
  3. package/dist/host.d.ts +61 -0
  4. package/dist/inject.js +4730 -0
  5. package/dist/types/animate/animate.d.ts +20 -0
  6. package/dist/types/animate/bezier.d.ts +2 -0
  7. package/dist/types/animate/easings.d.ts +21 -0
  8. package/dist/types/canvas/Canvas.d.ts +168 -0
  9. package/dist/types/core/Aspect.d.ts +171 -0
  10. package/dist/types/core/InspectorUI.d.ts +88 -0
  11. package/dist/types/core/StateMachine.d.ts +81 -0
  12. package/dist/types/core/color.d.ts +13 -0
  13. package/dist/types/core/compWrite.d.ts +11 -0
  14. package/dist/types/core/events.d.ts +11 -0
  15. package/dist/types/core/fields.d.ts +58 -0
  16. package/dist/types/core/registry.d.ts +7 -0
  17. package/dist/types/core/signals.d.ts +29 -0
  18. package/dist/types/core/time.d.ts +31 -0
  19. package/dist/types/g2/Camera2D.d.ts +19 -0
  20. package/dist/types/g2/CharacterController2D.d.ts +134 -0
  21. package/dist/types/g2/Node2D.d.ts +91 -0
  22. package/dist/types/g2/OneWay2D.d.ts +24 -0
  23. package/dist/types/g2/Physics2D.d.ts +147 -0
  24. package/dist/types/g2/Scene2D.d.ts +72 -0
  25. package/dist/types/g2/Shape2D.d.ts +58 -0
  26. package/dist/types/g2/Sprite.d.ts +51 -0
  27. package/dist/types/g2/SpriteAnimation.d.ts +50 -0
  28. package/dist/types/g2/SpriteSheet.d.ts +69 -0
  29. package/dist/types/g2/Texture2D.d.ts +16 -0
  30. package/dist/types/g2/Tilemap.d.ts +20 -0
  31. package/dist/types/g2/Tileset.d.ts +32 -0
  32. package/dist/types/g2/Trigger2D.d.ts +20 -0
  33. package/dist/types/g2/autotile.d.ts +133 -0
  34. package/dist/types/g2/cells.d.ts +14 -0
  35. package/dist/types/g2/defineScene2d.d.ts +141 -0
  36. package/dist/types/g2/groups2d.d.ts +16 -0
  37. package/dist/types/g2/loop.d.ts +4 -0
  38. package/dist/types/g2/scenarios2d.d.ts +30 -0
  39. package/dist/types/g2/touch.d.ts +2 -0
  40. package/dist/types/gl/Camera.d.ts +79 -0
  41. package/dist/types/gl/CameraPlace.d.ts +26 -0
  42. package/dist/types/gl/CharacterController.d.ts +98 -0
  43. package/dist/types/gl/Gearbox.d.ts +86 -0
  44. package/dist/types/gl/Geometry.d.ts +39 -0
  45. package/dist/types/gl/IK.d.ts +53 -0
  46. package/dist/types/gl/InstancedMesh.d.ts +46 -0
  47. package/dist/types/gl/Light.d.ts +73 -0
  48. package/dist/types/gl/Lightmap.d.ts +85 -0
  49. package/dist/types/gl/Locomotion.d.ts +279 -0
  50. package/dist/types/gl/Material.d.ts +100 -0
  51. package/dist/types/gl/Mesh.d.ts +33 -0
  52. package/dist/types/gl/Model.d.ts +53 -0
  53. package/dist/types/gl/NavAgent.d.ts +99 -0
  54. package/dist/types/gl/NavMesh.d.ts +169 -0
  55. package/dist/types/gl/Node.d.ts +99 -0
  56. package/dist/types/gl/Noise.d.ts +20 -0
  57. package/dist/types/gl/Particles.d.ts +277 -0
  58. package/dist/types/gl/Physics.d.ts +91 -0
  59. package/dist/types/gl/Plane.d.ts +19 -0
  60. package/dist/types/gl/Ragdoll.d.ts +86 -0
  61. package/dist/types/gl/Ray.d.ts +8 -0
  62. package/dist/types/gl/Scene.d.ts +221 -0
  63. package/dist/types/gl/Shape.d.ts +122 -0
  64. package/dist/types/gl/Terrain.d.ts +280 -0
  65. package/dist/types/gl/Texture.d.ts +27 -0
  66. package/dist/types/gl/Trigger.d.ts +10 -0
  67. package/dist/types/gl/Vehicle.d.ts +191 -0
  68. package/dist/types/gl/Wheel.d.ts +95 -0
  69. package/dist/types/gl/animation/AnimationClip.d.ts +60 -0
  70. package/dist/types/gl/animation/Animator.d.ts +219 -0
  71. package/dist/types/gl/animation/Layer.d.ts +31 -0
  72. package/dist/types/gl/animation/Loop.d.ts +17 -0
  73. package/dist/types/gl/animation/Playback.d.ts +36 -0
  74. package/dist/types/gl/animation/core.d.ts +367 -0
  75. package/dist/types/gl/controls.d.ts +19 -0
  76. package/dist/types/gl/physicsEvents.d.ts +1 -0
  77. package/dist/types/gl/scenarios.d.ts +98 -0
  78. package/dist/types/gl/state.d.ts +5 -0
  79. package/dist/types/gl/terrainMesh.d.ts +46 -0
  80. package/dist/types/gl/touch.d.ts +2 -0
  81. package/dist/types/inject.d.ts +123 -0
  82. package/dist/types/math/Mathf.d.ts +39 -0
  83. package/dist/types/math/mat4.d.ts +66 -0
  84. package/dist/types/math/quat.d.ts +53 -0
  85. package/dist/types/math/vec.d.ts +129 -0
  86. package/dist/types/net/codec.d.ts +25 -0
  87. package/dist/types/net/core.d.ts +106 -0
  88. package/dist/types/net/index.d.ts +80 -0
  89. package/dist/types/net/replication.d.ts +101 -0
  90. package/dist/types/plugins/camera.d.ts +25 -0
  91. package/dist/types/plugins/geolocation.d.ts +39 -0
  92. package/dist/types/plugins/oauth.d.ts +25 -0
  93. package/dist/types/plugins/permission.d.ts +1 -0
  94. package/dist/types/plugins/push.d.ts +46 -0
  95. package/dist/types/plugins/qr.d.ts +21 -0
  96. package/dist/types/plugins/service.d.ts +33 -0
  97. package/dist/types/runtime/app.d.ts +67 -0
  98. package/dist/types/runtime/appEvents.d.ts +7 -0
  99. package/dist/types/runtime/channel.d.ts +1 -0
  100. package/dist/types/runtime/clipboard.d.ts +7 -0
  101. package/dist/types/runtime/datetime.d.ts +80 -0
  102. package/dist/types/runtime/device.d.ts +126 -0
  103. package/dist/types/runtime/fetch.d.ts +31 -0
  104. package/dist/types/runtime/files.d.ts +33 -0
  105. package/dist/types/runtime/input.d.ts +121 -0
  106. package/dist/types/runtime/media.d.ts +46 -0
  107. package/dist/types/runtime/misc.d.ts +11 -0
  108. package/dist/types/runtime/net.d.ts +15 -0
  109. package/dist/types/runtime/rpc.d.ts +44 -0
  110. package/dist/types/runtime/service.d.ts +1 -0
  111. package/dist/types/runtime/share.d.ts +2 -0
  112. package/dist/types/runtime/storage.d.ts +5 -0
  113. package/dist/types/runtime/touch.d.ts +56 -0
  114. package/dist/types/scene/defineScene.d.ts +296 -0
  115. package/dist/types/scene/editorPlugins.d.ts +82 -0
  116. package/dist/types/scene/gizmos.d.ts +56 -0
  117. package/dist/types/scene/grammar.d.ts +56 -0
  118. package/dist/types/scene/level.d.ts +98 -0
  119. package/dist/types/scene/material.d.ts +76 -0
  120. package/dist/types/server/auth/appConfig.d.ts +16 -0
  121. package/dist/types/server/auth/global.d.ts +56 -0
  122. package/dist/types/server/auth/models.d.ts +164 -0
  123. package/dist/types/server/auth/types.d.ts +56 -0
  124. package/dist/types/server/channel.d.ts +28 -0
  125. package/dist/types/server/context.d.ts +27 -0
  126. package/dist/types/server/db/defineDb.d.ts +36 -0
  127. package/dist/types/server/db/fields.d.ts +146 -0
  128. package/dist/types/server/db/index.d.ts +6 -0
  129. package/dist/types/server/db/marci/query.d.ts +326 -0
  130. package/dist/types/server/db/types.d.ts +163 -0
  131. package/dist/types/server/errors.d.ts +8 -0
  132. package/dist/types/server/inject.d.ts +5 -0
  133. package/dist/types/ui/NativeView.d.ts +38 -0
  134. package/dist/types/ui/UI.d.ts +27 -0
  135. package/dist/types/ui/UIBottomSheet.d.ts +71 -0
  136. package/dist/types/ui/UIButton.d.ts +30 -0
  137. package/dist/types/ui/UIContainer.d.ts +33 -0
  138. package/dist/types/ui/UIImage.d.ts +35 -0
  139. package/dist/types/ui/UIInput.d.ts +110 -0
  140. package/dist/types/ui/UIModal.d.ts +70 -0
  141. package/dist/types/ui/UINode.d.ts +363 -0
  142. package/dist/types/ui/UIPager.d.ts +123 -0
  143. package/dist/types/ui/UIPopover.d.ts +39 -0
  144. package/dist/types/ui/UIScreen.d.ts +57 -0
  145. package/dist/types/ui/UIScrollable.d.ts +40 -0
  146. package/dist/types/ui/UISpacer.d.ts +9 -0
  147. package/dist/types/ui/UITabs.d.ts +96 -0
  148. package/dist/types/ui/UIText.d.ts +19 -0
  149. package/dist/types/ui/UIVideo.d.ts +28 -0
  150. package/dist/types/ui/UIVirtualizedList.d.ts +97 -0
  151. package/dist/types/ui/UIWidget.d.ts +65 -0
  152. package/dist/types/ui/fonts.d.ts +9 -0
  153. package/dist/types/ui/presentable.d.ts +68 -0
  154. package/dist/types/ui/router.d.ts +40 -0
  155. package/dist/types/ui/theme.d.ts +26 -0
  156. package/dist/types.json +1 -0
  157. package/package.json +46 -0
  158. package/prompts/2d.md +395 -0
  159. package/prompts/3d-scene-files.md +113 -0
  160. package/prompts/3d-scene.md +119 -0
  161. package/prompts/3d.md +303 -0
  162. package/prompts/README.md +142 -0
  163. package/prompts/ar.md +109 -0
  164. package/prompts/canvas.md +27 -0
  165. package/prompts/compose.ts +46 -0
  166. package/prompts/concept.md +49 -0
  167. package/prompts/core-design.md +75 -0
  168. package/prompts/core.md +264 -0
  169. package/prompts/design.md +218 -0
  170. package/prompts/dist/2d-game.md +1530 -0
  171. package/prompts/dist/3d-app.md +1672 -0
  172. package/prompts/dist/ar-app.md +1548 -0
  173. package/prompts/dist/concept.md +49 -0
  174. package/prompts/dist/design.md +498 -0
  175. package/prompts/dist/ui-app.md +1134 -0
  176. package/prompts/index.md +37 -0
  177. package/prompts/intake-prompt.md +33 -0
  178. package/prompts/namer-prompt.md +12 -0
  179. package/prompts/router-prompt.md +50 -0
  180. package/prompts/select.ts +111 -0
  181. package/prompts/ui-design.md +203 -0
  182. package/prompts/ui.md +803 -0
  183. package/src/animate/animate.ts +238 -0
  184. package/src/animate/bezier.ts +138 -0
  185. package/src/animate/easings.ts +126 -0
  186. package/src/bridges.d.ts +1345 -0
  187. package/src/canvas/Canvas.ts +305 -0
  188. package/src/compile/__tests__/assetIconMacro.test.ts +219 -0
  189. package/src/compile/__tests__/assetMacro.test.ts +74 -0
  190. package/src/compile/__tests__/assetName.test.ts +55 -0
  191. package/src/compile/__tests__/compile.test.ts +287 -0
  192. package/src/compile/__tests__/detectEntry.test.ts +132 -0
  193. package/src/compile/__tests__/fontMacro.test.ts +199 -0
  194. package/src/compile/aspectMacro.ts +86 -0
  195. package/src/compile/assetIconMacro.ts +384 -0
  196. package/src/compile/assetMacro.ts +146 -0
  197. package/src/compile/assetName.ts +50 -0
  198. package/src/compile/bundler.ts +287 -0
  199. package/src/compile/compileProject.ts +127 -0
  200. package/src/compile/detectEntry.ts +128 -0
  201. package/src/compile/fontMacro.ts +459 -0
  202. package/src/compile/fontRegistry.ts +78 -0
  203. package/src/compile/header.ts +67 -0
  204. package/src/compile/index.ts +100 -0
  205. package/src/compile/libraryImports.ts +52 -0
  206. package/src/compile/liteMaterial.ts +247 -0
  207. package/src/compile/sceneEditor.ts +88 -0
  208. package/src/compile/serverSplit.ts +233 -0
  209. package/src/compile/serverTypes.ts +227 -0
  210. package/src/compile/sfnt.ts +98 -0
  211. package/src/compile/shaderSchema.ts +202 -0
  212. package/src/compile/shaderTargets.ts +77 -0
  213. package/src/compile/sourcemap.ts +25 -0
  214. package/src/core/Aspect.ts +568 -0
  215. package/src/core/InspectorUI.ts +212 -0
  216. package/src/core/StateMachine.ts +308 -0
  217. package/src/core/__tests__/stateMachine.test.ts +132 -0
  218. package/src/core/color.ts +66 -0
  219. package/src/core/compWrite.ts +42 -0
  220. package/src/core/events.ts +38 -0
  221. package/src/core/fields.ts +120 -0
  222. package/src/core/registry.ts +23 -0
  223. package/src/core/signals.ts +277 -0
  224. package/src/core/time.ts +84 -0
  225. package/src/g2/Camera2D.ts +40 -0
  226. package/src/g2/CharacterController2D.ts +276 -0
  227. package/src/g2/Node2D.ts +267 -0
  228. package/src/g2/OneWay2D.ts +66 -0
  229. package/src/g2/Physics2D.ts +346 -0
  230. package/src/g2/Scene2D.ts +209 -0
  231. package/src/g2/Shape2D.ts +259 -0
  232. package/src/g2/Sprite.ts +89 -0
  233. package/src/g2/SpriteAnimation.ts +171 -0
  234. package/src/g2/SpriteSheet.ts +166 -0
  235. package/src/g2/Texture2D.ts +47 -0
  236. package/src/g2/Tilemap.ts +41 -0
  237. package/src/g2/Tileset.ts +71 -0
  238. package/src/g2/Trigger2D.ts +77 -0
  239. package/src/g2/autotile.ts +433 -0
  240. package/src/g2/cells.ts +91 -0
  241. package/src/g2/defineScene2d.ts +381 -0
  242. package/src/g2/groups2d.ts +106 -0
  243. package/src/g2/loop.ts +50 -0
  244. package/src/g2/scenarios2d.ts +69 -0
  245. package/src/g2/touch.ts +83 -0
  246. package/src/gl/Camera.ts +160 -0
  247. package/src/gl/CameraPlace.ts +52 -0
  248. package/src/gl/CharacterController.ts +238 -0
  249. package/src/gl/Gearbox.ts +212 -0
  250. package/src/gl/Geometry.ts +279 -0
  251. package/src/gl/IK.ts +193 -0
  252. package/src/gl/InstancedMesh.ts +132 -0
  253. package/src/gl/Light.ts +135 -0
  254. package/src/gl/Lightmap.ts +402 -0
  255. package/src/gl/Locomotion.ts +498 -0
  256. package/src/gl/Material.ts +279 -0
  257. package/src/gl/Mesh.ts +83 -0
  258. package/src/gl/Model.ts +124 -0
  259. package/src/gl/NavAgent.ts +337 -0
  260. package/src/gl/NavMesh.ts +397 -0
  261. package/src/gl/Node.ts +350 -0
  262. package/src/gl/Noise.ts +30 -0
  263. package/src/gl/Particles.ts +676 -0
  264. package/src/gl/Physics.ts +222 -0
  265. package/src/gl/Plane.ts +53 -0
  266. package/src/gl/Ragdoll.ts +270 -0
  267. package/src/gl/Ray.ts +16 -0
  268. package/src/gl/Scene.ts +505 -0
  269. package/src/gl/Shape.ts +409 -0
  270. package/src/gl/Terrain.ts +1092 -0
  271. package/src/gl/Texture.ts +63 -0
  272. package/src/gl/Trigger.ts +45 -0
  273. package/src/gl/Vehicle.ts +473 -0
  274. package/src/gl/Wheel.ts +240 -0
  275. package/src/gl/animation/AnimationClip.ts +204 -0
  276. package/src/gl/animation/Animator.ts +329 -0
  277. package/src/gl/animation/Layer.ts +39 -0
  278. package/src/gl/animation/Loop.ts +31 -0
  279. package/src/gl/animation/Playback.ts +52 -0
  280. package/src/gl/animation/core.ts +670 -0
  281. package/src/gl/controls.ts +95 -0
  282. package/src/gl/physicsEvents.ts +20 -0
  283. package/src/gl/scenarios.ts +291 -0
  284. package/src/gl/state.ts +6 -0
  285. package/src/gl/terrainMesh.ts +219 -0
  286. package/src/gl/touch.ts +68 -0
  287. package/src/host.d.ts +61 -0
  288. package/src/inject.ts +203 -0
  289. package/src/math/Mathf.ts +118 -0
  290. package/src/math/mat4.ts +278 -0
  291. package/src/math/quat.ts +232 -0
  292. package/src/math/vec.ts +255 -0
  293. package/src/net/codec.ts +119 -0
  294. package/src/net/core.ts +384 -0
  295. package/src/net/index.ts +181 -0
  296. package/src/net/replication.ts +622 -0
  297. package/src/plugins/camera.ts +81 -0
  298. package/src/plugins/geolocation.ts +123 -0
  299. package/src/plugins/oauth.ts +61 -0
  300. package/src/plugins/permission.ts +7 -0
  301. package/src/plugins/push.ts +132 -0
  302. package/src/plugins/qr.ts +73 -0
  303. package/src/plugins/service.ts +47 -0
  304. package/src/runtime/app.ts +101 -0
  305. package/src/runtime/appEvents.ts +54 -0
  306. package/src/runtime/channel.ts +61 -0
  307. package/src/runtime/clipboard.ts +20 -0
  308. package/src/runtime/datetime.ts +329 -0
  309. package/src/runtime/device.ts +293 -0
  310. package/src/runtime/fetch.ts +77 -0
  311. package/src/runtime/files.ts +108 -0
  312. package/src/runtime/input.ts +175 -0
  313. package/src/runtime/media.ts +111 -0
  314. package/src/runtime/misc.ts +16 -0
  315. package/src/runtime/net.ts +36 -0
  316. package/src/runtime/rpc.ts +218 -0
  317. package/src/runtime/service.ts +83 -0
  318. package/src/runtime/share.ts +9 -0
  319. package/src/runtime/storage.ts +13 -0
  320. package/src/runtime/touch.ts +76 -0
  321. package/src/scene/defineScene.ts +1396 -0
  322. package/src/scene/editorPlugins.ts +110 -0
  323. package/src/scene/gizmos.ts +148 -0
  324. package/src/scene/grammar.ts +120 -0
  325. package/src/scene/level.ts +296 -0
  326. package/src/scene/material.ts +188 -0
  327. package/src/server/auth/appConfig.ts +12 -0
  328. package/src/server/auth/global.ts +80 -0
  329. package/src/server/auth/host.ts +318 -0
  330. package/src/server/auth/models.ts +83 -0
  331. package/src/server/auth/types.ts +50 -0
  332. package/src/server/channel.ts +56 -0
  333. package/src/server/context.ts +36 -0
  334. package/src/server/db/defineDb.ts +237 -0
  335. package/src/server/db/fields.ts +132 -0
  336. package/src/server/db/httpTransport.ts +93 -0
  337. package/src/server/db/index.ts +7 -0
  338. package/src/server/db/marci/query.ts +412 -0
  339. package/src/server/db/types.ts +202 -0
  340. package/src/server/errors.ts +12 -0
  341. package/src/server/host.ts +74 -0
  342. package/src/server/inject.ts +13 -0
  343. package/src/server/runtime.ts +133 -0
  344. package/src/server/validate.ts +87 -0
  345. package/src/ui/NativeView.ts +142 -0
  346. package/src/ui/UI.ts +39 -0
  347. package/src/ui/UIBottomSheet.ts +139 -0
  348. package/src/ui/UIButton.ts +101 -0
  349. package/src/ui/UIContainer.ts +60 -0
  350. package/src/ui/UIImage.ts +83 -0
  351. package/src/ui/UIInput.ts +185 -0
  352. package/src/ui/UIModal.ts +139 -0
  353. package/src/ui/UINode.ts +830 -0
  354. package/src/ui/UIPager.ts +362 -0
  355. package/src/ui/UIPopover.ts +100 -0
  356. package/src/ui/UIScreen.ts +123 -0
  357. package/src/ui/UIScrollable.ts +87 -0
  358. package/src/ui/UISpacer.ts +14 -0
  359. package/src/ui/UITabs.ts +236 -0
  360. package/src/ui/UIText.ts +51 -0
  361. package/src/ui/UIVideo.ts +88 -0
  362. package/src/ui/UIVirtualizedList.ts +241 -0
  363. package/src/ui/UIWidget.ts +127 -0
  364. package/src/ui/fonts.ts +13 -0
  365. package/src/ui/presentable.ts +117 -0
  366. package/src/ui/router.ts +132 -0
  367. package/src/ui/theme.ts +84 -0
@@ -0,0 +1,82 @@
1
+ import type { InspectorUI } from "../core/InspectorUI";
2
+ /** A geometry hit under the viewport pointer, handed to tools. Physics builds raycast the scene's
3
+ * meshes (precise); otherwise (and on misses) the hit falls back to the ground plane (y = 0). */
4
+ export type EditorRayHit = {
5
+ point: [number, number, number];
6
+ normal: [number, number, number];
7
+ /** Absolute path of the scene-file node the hit belongs to ("city/in1/pt1") — null for
8
+ * ground-plane fallback hits. */
9
+ node: string | null;
10
+ };
11
+ /**
12
+ * The editor scripting API handed to windows and tools. Nodes are addressed by ABSOLUTE PATH —
13
+ * '/'-joined names from the scene root; a root node's path is its bare name. Doc-op methods write
14
+ * the scene DOCUMENT through the editor's normal commit path (undo, file, live patching all
15
+ * included); they return false / no-op when the document can't take the edit (sibling-name
16
+ * collision, unknown path).
17
+ */
18
+ export type EditorApi = {
19
+ /** The currently selected node path (or `path::part` key for asset internals), null when
20
+ * nothing is selected. */
21
+ readonly selection: string | null;
22
+ select(path: string | null): void;
23
+ /** The scene document's nodes: absolute path, sibling-unique display name, source kind
24
+ * (mesh / model / light / group / …). */
25
+ nodes(): {
26
+ path: string;
27
+ name: string;
28
+ kind: string;
29
+ }[];
30
+ /** First unused "base", "base2", "base3", … name among the SIBLINGS under `parentPath`
31
+ * (scene root when omitted). */
32
+ uniqueName(base: string, parentPath?: string): string;
33
+ /** Add a ROOT node from plain def data (scene-file grammar; a string `model` value means an
34
+ * asset path). `name` may not contain '/' or ':'. One undo step unless grouped by `transact`. */
35
+ addNode(name: string, def: Record<string, unknown>): boolean;
36
+ /** Write one def prop (transforms apply live; anything else patches/re-runs the node). */
37
+ setProp(path: string, key: string, value: unknown): boolean;
38
+ removeNode(path: string): void;
39
+ /** Duplicate a node; returns the copy's path (null when it can't). */
40
+ duplicate(path: string): string | null;
41
+ /** Raycast the scene under a viewport pixel (same hit rules as tool clicks). */
42
+ raycast(screenX: number, screenY: number): EditorRayHit | null;
43
+ /** Group every doc edit inside `fn` into ONE undo step. */
44
+ transact(fn: () => void): void;
45
+ /** Read one def prop of a node as document data (`asset()` refs come as `{ $asset: "./x" }`);
46
+ * undefined when the node or key doesn't exist. */
47
+ getProp(path: string, key: string): unknown;
48
+ /** Write a BINARY asset file for a node (a terrain's `.terrain`, a baked mask…). `ref` = the
49
+ * node's existing def-relative `asset()` ref to overwrite, or null to create `./<name>` at the
50
+ * project root (a free name is picked on collisions). Resolves to the ref to store in the node's
51
+ * def (`{ $asset: ref }` via `setProp`), null when the host can't write files. Not a doc edit —
52
+ * it is not undoable; keep the doc pointing at the file. */
53
+ writeAsset(path: string, ref: string | null, name: string, bytes: Uint8Array): Promise<string | null>;
54
+ };
55
+ export type EditorWindowFn = (ui: InspectorUI, editor: EditorApi) => void;
56
+ export type EditorToolHooks = {
57
+ /** CSS cursor for the viewport while this tool is active (default "crosshair"). */
58
+ cursor?: string;
59
+ /** A short glyph (one character / emoji) for the tool's toolbar button — tools without one all
60
+ * share the generic wand icon, so any editor with two or more tools should set it. */
61
+ icon?: string;
62
+ /** A viewport click while the tool is active — `hit` is the raycast result under the pointer.
63
+ * Viewport clicks route to the tool while it is active. */
64
+ onViewportClick?(hit: EditorRayHit, editor: EditorApi): void;
65
+ /** Drag tools (brushes): a primary-button drag in the viewport routes here instead of orbiting
66
+ * the camera — start / every pointer move (with the hit under it, null while off-world) /
67
+ * release. A tool with `onDragStart` gets NO `onViewportClick` for the same gesture. */
68
+ onDragStart?(hit: EditorRayHit, editor: EditorApi): void;
69
+ onDrag?(hit: EditorRayHit | null, editor: EditorApi): void;
70
+ onDragEnd?(editor: EditorApi): void;
71
+ /** The pointer moved over the viewport with no button down (throttled to the frame) — draw a
72
+ * brush cursor through `Gizmos`; null when nothing is under it. */
73
+ onHover?(hit: EditorRayHit | null, editor: EditorApi): void;
74
+ };
75
+ /** Register an editor panel — a collapsible overlay docked over the viewport (the inspector rail
76
+ * stays selection-scoped). A window that emits `ui.toolButton` for a tool becomes that tool's
77
+ * settings panel: activating the tool expands and highlights it. `render` re-runs immediate-mode
78
+ * on every interaction — same protocol as `static inspector` cards. */
79
+ export declare const registerEditorWindow: (title: string, render: EditorWindowFn) => void;
80
+ /** Register a viewport tool — a toolbar entry beside move/rotate/scale (activate it there or via
81
+ * `ui.toolButton(label, name)`). While active, viewport clicks arrive as raycast hits. */
82
+ export declare const registerEditorTool: (name: string, hooks: EditorToolHooks) => void;
@@ -0,0 +1,56 @@
1
+ import { type Mat4Like } from "../math/mat4";
2
+ import type { Vec3Like } from "../math/vec";
3
+ /** The anchor of a gizmo call: any object with an engine entity id (a `Node`). */
4
+ export type GizmoAnchor = {
5
+ readonly id: number;
6
+ };
7
+ export type GizmoStyle = {
8
+ /** CSS hex color (`#rgb` / `#rrggbb`); default a neutral light gray. */
9
+ color?: string;
10
+ /** 0..1, default 1. */
11
+ alpha?: number;
12
+ /** Anchor: points are in this node's LOCAL frame (scale ignored); the lines follow the node
13
+ * live, are pickable (a click selects the node) and turn the selection accent when it is
14
+ * selected. Omit for world-space lines (not pickable). */
15
+ node?: GizmoAnchor | null;
16
+ };
17
+ /** One color batch of LINES (flat `[x,y,z, x,y,z]` per segment) — what a host hands the engine.
18
+ * With `entityId` the segments are in that entity's local frame (see GizmoStyle.node). */
19
+ export type GizmoBatch = {
20
+ color: string;
21
+ alpha: number;
22
+ segments: number[];
23
+ entityId?: number;
24
+ };
25
+ /** The per-run collector (owned by the scene loader's EditorRun). Batches are keyed by style so a
26
+ * hundred same-colored segments cost one draw. */
27
+ export declare class GizmoBuffer {
28
+ batches: GizmoBatch[];
29
+ private _byStyle;
30
+ clear(): void;
31
+ segments(style: GizmoStyle | undefined): number[];
32
+ }
33
+ /**
34
+ * Editor-only line drawing, available inside generator `rebuild()`, `make()` factories and editor
35
+ * tool hooks. Points are WORLD space. Drawn by the scene editor's viewport overlay (depth-test
36
+ * off — a path through a wall is still a path); invisible everywhere else.
37
+ */
38
+ export declare const Gizmos: {
39
+ /** One segment from `a` to `b`. */
40
+ line(a: Vec3Like, b: Vec3Like, style?: GizmoStyle): void;
41
+ /** Consecutive segments through `points`; `closed` joins the last point back to the first. */
42
+ polyline(points: readonly Vec3Like[], style?: GizmoStyle & {
43
+ closed?: boolean;
44
+ }): void;
45
+ /** A wireframe camera frustum looking down −Z: the four edges from the origin to a rect
46
+ * `length` metres ahead sized by `fov` (vertical, degrees) × `aspect` (default 16:9), plus an
47
+ * "up" fin above the rect. Anchor it (`{ node }`) for a camera node's marker — the frustum
48
+ * then follows the node's pose; `matrix` places an unanchored one in world space. */
49
+ frustum(fov: number, style?: GizmoStyle & {
50
+ aspect?: number;
51
+ length?: number;
52
+ matrix?: Mat4Like;
53
+ }): void;
54
+ /** A three-axis cross centred on `p` (a point marker); `size` = half extent, default 0.1. */
55
+ cross(p: Vec3Like, size?: number, style?: GizmoStyle): void;
56
+ };
@@ -0,0 +1,56 @@
1
+ import type { Aspect, AspectCtor } from "../core/Aspect";
2
+ import type { Node } from "../gl/Node";
3
+ /** One aspect to attach, created by `use(Ctor, props)`. */
4
+ export type AspectEntry<A extends Aspect<any, any> = Aspect<any, any>> = {
5
+ ctor: AspectCtor<A>;
6
+ props?: Partial<A>;
7
+ };
8
+ /** Reference an aspect in a scene file: `aspects: [use(Physics, { motion: 'static' })]`. Props are
9
+ * typechecked against the aspect's fields, exactly like `node.aspect(Ctor, props)`. */
10
+ export declare const use: <A extends Aspect<any, any>>(ctor: AspectCtor<A>, props?: Partial<A>) => AspectEntry<A>;
11
+ /** A `make(fn, args)` source entry — see {@link make}. `N` is the node family the factory returns
12
+ * (3D `Node` by default; a `.scene2d.ts` file's factories return `Node2D`). */
13
+ export type MakeEntry<A extends Record<string, unknown> = Record<string, unknown>, N = Node> = {
14
+ fn: (args: A) => N | Promise<N>;
15
+ args?: A;
16
+ };
17
+ /**
18
+ * A code-created source in a scene file: `tower: { make: make(buildTower, { floors: 5 }), … }`.
19
+ * The factory runs after every scene node exists (so `ref()` args resolve, forward references
20
+ * included) and its returned subtree mounts under the def node — the def's transform stays
21
+ * editor-owned, so moving the node never re-calls the factory. Args must be literal data (same
22
+ * grammar as aspect props); in the editor they edit as fields, and an arg change re-CALLS the
23
+ * factory live — the code is already in the bundle, so no compile happens. Keep factories pure
24
+ * builders: same args → same subtree, no side effects outside the returned nodes.
25
+ */
26
+ export declare const make: <A extends Record<string, unknown>, N>(fn: (args: A) => N | Promise<N>, args?: A) => MakeEntry<A, N>;
27
+ /**
28
+ * Reference another scene node by PATH in an aspect's props:
29
+ * `use(Road, { from: ref('pointA'), to: ref('lane/pointB') })`. Resolves to the live node when
30
+ * aspects attach — after EVERY node of the scene exists, so declaration order doesn't matter.
31
+ * Resolution is scoped upward from the host node (like variable scoping): the host's own children
32
+ * first, then its siblings, then each ancestor's scope up to the scene root. The FIRST segment
33
+ * binds the scope; the remaining segments descend from there. Refs address def nodes only (no
34
+ * `::`/`name[i]` asset-internal segments); an unknown path resolves to `null` (type your aspect
35
+ * field `Node | null`). Scene files only — hand-written code passes nodes directly:
36
+ * `node.aspect(Road, { from: nodes.pointA })`.
37
+ */
38
+ export declare const ref: <T = Node>(path: string) => T;
39
+ export declare const isNodeRef: (v: unknown) => v is {
40
+ $ref: string;
41
+ };
42
+ /** Resolve one ref string against a path-keyed nodes record, scoped upward from `hostPath` (own
43
+ * children → parent's scope (siblings + the host itself) → each ancestor scope → root, `""`).
44
+ * The ref's FIRST segment binds the scope — a match there is final even when the rest of the
45
+ * path doesn't exist (lexical shadowing). Returns the target's ABSOLUTE path, or null.
46
+ * `Object.hasOwn`, not indexing: a node named `constructor` must not resolve via the prototype. */
47
+ export declare const resolveRefPath: (nodes: Record<string, unknown>, hostPath: string, ref: string) => string | null;
48
+ /** Swap `ref()` markers in aspect props for the live nodes (top level + one array level deep),
49
+ * resolved scoped-upward from `hostPath` ("" = root scope only — the 2D flat-map case). */
50
+ export declare const resolveRefs: <N>(props: Record<string, unknown> | undefined, nodes: Record<string, N>, hostPath?: string) => Record<string, unknown> | undefined;
51
+ /** ABSOLUTE paths of the nodes a props record's ref() values resolve to (editor dep tracking).
52
+ * An unresolved ref contributes no dep — the handle re-derives deps after structural changes. */
53
+ export declare const collectRefDeps: (props: Record<string, unknown>, nodes: Record<string, unknown>, hostPath: string) => Set<string>;
54
+ /** The edit-mode flag an editor host sets before running the bundle (shared by both formats). */
55
+ export declare const EDIT_FLAG = "__lecodesSceneEdit";
56
+ export declare const isEditMode: () => boolean;
@@ -0,0 +1,98 @@
1
+ import { Node } from "../gl/Node";
2
+ import { type Vec3Like } from "../math/vec";
3
+ /** One placement handed to a `build` function (all coordinates local to the group). */
4
+ export type LevelSpot = {
5
+ /** 0-based placement index. */
6
+ index: number;
7
+ /** Local position the node will be placed at (before jitter was already applied). */
8
+ position: [number, number, number];
9
+ /** Yaw in degrees the node will face (already resolved from the `yaw` option). */
10
+ yaw: number;
11
+ /** Deterministic per-call random stream (seeded) — use for per-spot variation. */
12
+ rng: () => number;
13
+ };
14
+ /** What to place: a GLB url (loaded once, cloned per spot), or a builder function. A builder
15
+ * returning `null` skips that spot (thin a line, punch a gap in a grid). */
16
+ export type LevelBuild = string | ((spot: LevelSpot) => Node | null | Promise<Node | null>);
17
+ /** Static collision for url builds: 'mesh' = exact triangles, 'convex' = convex hull,
18
+ * 'box' = auto box from the mesh bounds, 'none' (default) = no collider. */
19
+ export type LevelCollider = "mesh" | "convex" | "box" | "none";
20
+ type PlaceCommon = {
21
+ build: LevelBuild;
22
+ /** Static Shape+Physics attached to url-built nodes (default 'none'). Function builds attach
23
+ * their own aspects instead. */
24
+ collider?: LevelCollider;
25
+ /** Facing: degrees, 'random', 'face' (forward +Z toward the helper's direction), or 'align'
26
+ * (the model's X length-axis along the direction — what fence/wall panels want). Each helper
27
+ * picks its natural default. */
28
+ yaw?: number | "random" | "face" | "align";
29
+ /** Random XZ offset per spot, meters: a radius, or [maxX, maxZ]. */
30
+ jitter?: number | [number, number];
31
+ /** Seed for the deterministic random stream (default 1). */
32
+ seed?: number;
33
+ /** Child name prefix (default: the url's basename, else 'item'). */
34
+ name?: string;
35
+ };
36
+ export type LevelLineOptions = PlaceCommon & {
37
+ from: Vec3Like;
38
+ to: Vec3Like;
39
+ /** Fixed number of placements (endpoints included when count > 1)… */
40
+ count?: number;
41
+ /** …or a spacing in meters (placements from `from` toward `to`, last one ≤ `to`). */
42
+ step?: number;
43
+ };
44
+ export type LevelGridOptions = PlaceCommon & {
45
+ /** Grid center (default [0,0,0]). */
46
+ center?: Vec3Like;
47
+ cols: number;
48
+ rows: number;
49
+ /** Cell size in meters: one number or [alongX, alongZ]. */
50
+ spacing: number | [number, number];
51
+ };
52
+ export type LevelRingOptions = PlaceCommon & {
53
+ /** Ring center (default [0,0,0]). */
54
+ center?: Vec3Like;
55
+ radius: number;
56
+ count: number;
57
+ /** Start angle in degrees (default 0 = +X). */
58
+ start?: number;
59
+ /** Arc to cover in degrees (default 360 = full ring, end exclusive). */
60
+ arc?: number;
61
+ /** 'face' orientation for rings: toward the center ('in', default) or away ('out'). */
62
+ facing?: "in" | "out";
63
+ };
64
+ export type LevelScatterOptions = PlaceCommon & {
65
+ /** Rectangle center (default [0,0,0]). */
66
+ center?: Vec3Like;
67
+ /** Rectangle extent in meters: [sizeX, sizeZ] or one number for a square. */
68
+ size: number | [number, number];
69
+ count: number;
70
+ /** Minimum distance between any two placements (rejection-sampled; the helper places as many
71
+ * as fit within the attempt budget and logs when it falls short). */
72
+ minSpacing?: number;
73
+ /** Keep-out circles `{ x, z, r }` (local), or a predicate — return true to REJECT a point. */
74
+ avoid?: {
75
+ x: number;
76
+ z: number;
77
+ r: number;
78
+ }[] | ((x: number, z: number) => boolean);
79
+ /** Y for every placement (default 0 — scatter is planar; vary height in a build fn). */
80
+ y?: number;
81
+ };
82
+ export type LevelPlaceOptions = PlaceCommon & {
83
+ /** Explicit spots: [x, y, z] or [x, y, z, yawDegrees]. */
84
+ at: (readonly number[])[];
85
+ };
86
+ /** Procedural level building — see the module header. All helpers return a Promise<Node> group to
87
+ * return from a `make()` factory (or add to a scene from plain code). */
88
+ export declare const Level: {
89
+ line: (opts: LevelLineOptions) => Promise<Node>;
90
+ grid: (opts: LevelGridOptions) => Promise<Node>;
91
+ ring: (opts: LevelRingOptions) => Promise<Node>;
92
+ scatter: (opts: LevelScatterOptions) => Promise<Node>;
93
+ place: (opts: LevelPlaceOptions) => Promise<Node>;
94
+ /** The seeded PRNG the helpers use (mulberry32) — for custom generators that must stay
95
+ * deterministic alongside them. */
96
+ rng: (seed: number) => (() => number);
97
+ };
98
+ export {};
@@ -0,0 +1,76 @@
1
+ import type { ColorInput } from "../core/color";
2
+ import { Material, type LitMaterialOptions, type UnlitMaterialOptions } from "../gl/Material";
3
+ import type { Node } from "../gl/Node";
4
+ /** A shader parameter value as scene files write it: number, boolean, `#colour`, texture URL
5
+ * (`asset('./x.png')`), or a numeric vector. */
6
+ export type MaterialParamValue = number | boolean | string | number[];
7
+ type WithMapUrl<T> = Omit<T, "map"> & {
8
+ /** Base-colour texture — a `Texture`, a `Canvas`, or `asset('./x.png')` (a URL string). */
9
+ map?: LitMaterialOptions["map"] | string;
10
+ };
11
+ export type LitMaterialDef = WithMapUrl<LitMaterialOptions>;
12
+ export type UnlitMaterialDef = WithMapUrl<UnlitMaterialOptions>;
13
+ /** A custom Filament shader (`asset('./x.mat')` — compiled by the platform / `lecodes shaders`)
14
+ * plus its parameter values. */
15
+ export type ShaderMaterialDef = {
16
+ shader: string;
17
+ params?: Record<string, MaterialParamValue>;
18
+ };
19
+ export type MaterialDef = {
20
+ lit: LitMaterialDef;
21
+ } | {
22
+ unlit: UnlitMaterialDef;
23
+ } | {
24
+ shadow: ColorInput;
25
+ } | ShaderMaterialDef
26
+ /** A material asset (`import m from './x.material'`) — one shared instance. */
27
+ | MaterialHandle
28
+ /** A code-level Material instance — valid at runtime; the editor shows it read-only. */
29
+ | Material;
30
+ /** The data forms of MaterialDef (everything but a live instance / handle). */
31
+ export type MaterialData = Exclude<MaterialDef, MaterialHandle | Material>;
32
+ /** Push one parameter into a live material. Textures load asynchronously — the returned promise
33
+ * settles once the value is applied (immediately for scalars). */
34
+ export declare const applyMaterialParam: (material: Material, name: string, value: MaterialParamValue | null) => Promise<void>;
35
+ /** Build a live Material from a data def. Resolves once every texture it names has loaded. */
36
+ export declare const createMaterialFromData: (def: MaterialData) => Promise<Material>;
37
+ /**
38
+ * A material asset: the default export of a `*.material.ts` file. `load()` yields ONE shared
39
+ * `Material` (cached); scene files hand the handle to `material:` and the loader resolves it.
40
+ * The editor edits the asset live through `setParam` / `reset` — every node the handle was
41
+ * applied to follows (`_users`).
42
+ */
43
+ export declare class MaterialHandle {
44
+ def: MaterialData;
45
+ private _instance;
46
+ private _loading;
47
+ /** Every (node, slot) this handle was applied to through a scene — the editor re-assigns them
48
+ * when the asset's shader changes. */
49
+ readonly _users: Set<{
50
+ node: Node;
51
+ slot: number;
52
+ }>;
53
+ constructor(def: MaterialData);
54
+ /** The shared material instance (built on first use). */
55
+ load(): Promise<Material>;
56
+ /** The live instance, if built yet. */
57
+ get material(): Material | null;
58
+ /** Editor: assign this material to `node`'s `slot`, remembering the user. */
59
+ _applyTo(node: Node, slot: number): Promise<Material>;
60
+ /** Editor: one parameter value, applied live to the shared instance (a texture loads in). */
61
+ setParam(name: string, value: MaterialParamValue | null): void;
62
+ /** Editor: replace the whole definition (a shader/kind switch) — rebuilds the instance and
63
+ * re-assigns every user. */
64
+ reset(def: MaterialData): Promise<Material>;
65
+ }
66
+ /** Resolve any `material:` value to a live Material (a handle's shared instance, a data def's
67
+ * fresh one, a code instance as is). */
68
+ export declare const resolveMaterialDef: (def: MaterialDef) => Promise<Material>;
69
+ /** Resolve and assign a `material:` value to one slot of a node (tracking handle users). */
70
+ export declare const assignMaterialDef: (node: Node, slot: number, def: MaterialDef) => Promise<Material>;
71
+ /**
72
+ * Define a material as data — the default export of a `*.material.ts` file. Import it into scene
73
+ * files (`material: handle`) or code (`const m = await handle.load()`).
74
+ */
75
+ export declare const defineMaterial: (def: MaterialData) => MaterialHandle;
76
+ export {};
@@ -0,0 +1,16 @@
1
+ /**
2
+ * The project's `app.json` subset the server runtime reads (name, auth providers).
3
+ *
4
+ * This module is a placeholder the COMPILER REPLACES: `compileServerBundle({ app })` puts a module with the
5
+ * real values at this same path in chisel's file map (project files win over SDK files), so every SDK module
6
+ * that imports `app` gets the project's config as a plain dependency — no globals, no evaluation-order games.
7
+ * Outside a compiled bundle (tests, tooling) `globalThis.__lecodesApp` can stand in.
8
+ */
9
+ export type AuthProvider = "email" | "google" | "apple" | "yandex" | "vk";
10
+ export type AppConfig = {
11
+ name?: string;
12
+ auth?: {
13
+ providers?: AuthProvider[];
14
+ };
15
+ };
16
+ export declare const app: AppConfig;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * The `auth` server global (docs/backend-plan.md §3.4) — the BUNDLE side. State (`auth.user`,
3
+ * `auth.session`) is read from the current request, which the host resolved before the endpoint ran;
4
+ * operations (`auth.email.*`, `auth.oauth.url`, `signIn/signOut`, `sessions`) forward to the host's
5
+ * `AuthOps` on `globalThis.__lecodesAuth` (a seam: the compiled bundle carries its own SDK copy). Nothing
6
+ * here touches the db or a secret; `auth.model.*` are pure schema factories.
7
+ */
8
+ import type { Model, Query } from "../db/types";
9
+ import { type AuthProvider, type SessionFields, type UserFields } from "./models";
10
+ import type { AuthUser, OAuthCredential } from "./types";
11
+ /** The schema of the two built-in models, for typing `auth.sessions` (developer extras aren't visible here). */
12
+ type AuthSchema = {
13
+ User: Model<UserFields>;
14
+ Session: Model<SessionFields>;
15
+ };
16
+ export declare const auth: {
17
+ /** The signed-in user (built-in fields; custom ones via `db.user`) or `null`. Request-scoped. */
18
+ readonly user: AuthUser | null;
19
+ /** The device session — exists from the first request, before any login. */
20
+ readonly session: {
21
+ readonly id: number;
22
+ };
23
+ /**
24
+ * The signed-in user, or `throw new ApiError(401)`; with `match`, every given field must equal the user's
25
+ * (`{ role: "admin" }`, `{ plan: "pro" }`) or it's a 403.
26
+ */
27
+ requireUser(match?: Record<string, unknown>): AuthUser;
28
+ email: {
29
+ /** Emails a 6-digit code to `email` (always resolves — no "email exists" oracle; rate-limited). Needs `"email"` in app.json providers. */
30
+ sendCode: (email: string) => Promise<void>;
31
+ /** The only email sign-in: checks the code sent to this device session, finds/creates the `User`, binds the session. */
32
+ verify: (email: string, code: string) => Promise<AuthUser>;
33
+ };
34
+ oauth: {
35
+ /** A one-time sign-in URL for the platform's OAuth broker (`"google" | "apple" | "yandex" | "vk"`), bound to this device session — open it in the browser. */
36
+ url: (provider: Exclude<AuthProvider, "email">) => Promise<string>;
37
+ /**
38
+ * Sign in with a credential a NATIVE provider SDK produced in the app (client `OAuth.signIn(provider)`):
39
+ * the platform verifies it with the provider, finds/links/creates the `User`, binds this session. The
40
+ * in-app counterpart of the browser broker — same accounts either way.
41
+ */
42
+ signIn: (provider: Exclude<AuthProvider, "email">, credential: OAuthCredential) => Promise<AuthUser>;
43
+ };
44
+ /** Escape hatch for developer-verified identities (Telegram initData, SSO): binds this session to `userId`. */
45
+ signIn: (userId: number) => Promise<AuthUser>;
46
+ /** Unbinds the user; the device stays a guest with the same `session.id` (token rotated). */
47
+ signOut: () => Promise<void>;
48
+ /** The current user's sessions ("my devices"): a `db.session` query — `await`, `.select()`, `.where(...).updateMany({ revoked: true })`. */
49
+ readonly sessions: Query<AuthSchema, "Session">;
50
+ /** Schema-time factories — see ./models.ts. */
51
+ model: {
52
+ user: <E extends import("../db/types").Fields = {}>(extra?: E) => import("./models").AuthModel<UserFields & E>;
53
+ session: <E extends import("../db/types").Fields = {}>(extra?: E) => import("./models").AuthModel<SessionFields & E>;
54
+ };
55
+ };
56
+ export type { AuthUser };
@@ -0,0 +1,164 @@
1
+ /**
2
+ * `auth.model.user({...})` / `auth.model.session()` — the ONLY place auth touches the schema
3
+ * (docs/backend-plan.md §3.4 / decision 10). Both return ordinary `model(...)`s: the developer registers
4
+ * them in `defineDb({ User, Session, … })` under exactly those keys (other models relate to them with
5
+ * `t.one("User")` / `t.one("Session")`), and `defineDb` adds `Session` itself when it isn't declared —
6
+ * a device session exists from the first request, before any login, so every project db has one.
7
+ *
8
+ * Provider identity columns (`googleId`, `appleId`) follow `app.json` `auth.providers`, which the
9
+ * compiler hands the server bundle through ./appConfig.ts (a module it replaces at compile time).
10
+ */
11
+ import { type Field } from "../db/fields";
12
+ import type { Fields, Model } from "../db/types";
13
+ import { type AppConfig, type AuthProvider } from "./appConfig";
14
+ export type { AppConfig, AuthProvider };
15
+ /** The project's `app.json` subset: the compiled-in module, else the test/tooling seam, else empty. */
16
+ export declare const appConfig: () => AppConfig;
17
+ export declare const enabledProviders: () => AuthProvider[];
18
+ /** The model name the auth runtime binds to. */
19
+ export declare const AUTH_USER_MODEL = "User";
20
+ export declare const AUTH_SESSION_MODEL = "Session";
21
+ /** Marker on the two auth models (`model()` objects are otherwise plain). */
22
+ export type AuthModelKind = "user" | "session";
23
+ export type AuthModel<F extends Fields> = Model<F> & {
24
+ readonly __auth: AuthModelKind;
25
+ };
26
+ /** Built-in `User` fields (what `auth.user` is typed with). */
27
+ export declare const userFields: () => {
28
+ email: Field<string, {
29
+ kind: "scalar";
30
+ scalar: "string";
31
+ optional: true;
32
+ hasDefault: false;
33
+ array: false;
34
+ isId: false;
35
+ model: "";
36
+ }>;
37
+ name: Field<string, {
38
+ kind: "scalar";
39
+ scalar: "string";
40
+ optional: true;
41
+ hasDefault: false;
42
+ array: false;
43
+ isId: false;
44
+ model: "";
45
+ }>;
46
+ avatar: Field<string, {
47
+ kind: "scalar";
48
+ scalar: "string";
49
+ optional: true;
50
+ hasDefault: false;
51
+ array: false;
52
+ isId: false;
53
+ model: "";
54
+ }>;
55
+ /** Plain string column, `"user"` by default — `auth.requireUser({ role: "admin" })` is field equality. */
56
+ role: Field<string, {
57
+ kind: "scalar";
58
+ scalar: "string";
59
+ optional: false;
60
+ hasDefault: true;
61
+ array: false;
62
+ isId: false;
63
+ model: "";
64
+ }>;
65
+ createdAt: Field<number, {
66
+ kind: "scalar";
67
+ scalar: "date";
68
+ optional: false;
69
+ hasDefault: true;
70
+ array: false;
71
+ isId: false;
72
+ model: "";
73
+ }>;
74
+ };
75
+ export type UserFields = ReturnType<typeof userFields>;
76
+ /** Built-in `Session` fields. `user` is added by `defineDb` when a `User` model exists (schema-time, so a
77
+ * db without an auth user model has sessions without a user column). */
78
+ export declare const sessionFields: () => {
79
+ /** sha256 of the bearer token the device holds — the token itself is never stored. */
80
+ tokenHash: Field<string, import("../db/fields").Meta<{
81
+ kind: "scalar";
82
+ scalar: "string";
83
+ }>>;
84
+ createdAt: Field<number, {
85
+ kind: "scalar";
86
+ scalar: "date";
87
+ optional: false;
88
+ hasDefault: true;
89
+ array: false;
90
+ isId: false;
91
+ model: "";
92
+ }>;
93
+ lastSeenAt: Field<number, {
94
+ kind: "scalar";
95
+ scalar: "date";
96
+ optional: false;
97
+ hasDefault: true;
98
+ array: false;
99
+ isId: false;
100
+ model: "";
101
+ }>;
102
+ revoked: Field<boolean, {
103
+ kind: "scalar";
104
+ scalar: "bool";
105
+ optional: false;
106
+ hasDefault: true;
107
+ array: false;
108
+ isId: false;
109
+ model: "";
110
+ }>;
111
+ pendingEmail: Field<string, {
112
+ kind: "scalar";
113
+ scalar: "string";
114
+ optional: true;
115
+ hasDefault: false;
116
+ array: false;
117
+ isId: false;
118
+ model: "";
119
+ }>;
120
+ codeHash: Field<string, {
121
+ kind: "scalar";
122
+ scalar: "string";
123
+ optional: true;
124
+ hasDefault: false;
125
+ array: false;
126
+ isId: false;
127
+ model: "";
128
+ }>;
129
+ codeExpires: Field<number, {
130
+ kind: "scalar";
131
+ scalar: "date";
132
+ optional: true;
133
+ hasDefault: false;
134
+ array: false;
135
+ isId: false;
136
+ model: "";
137
+ }>;
138
+ codeAttempts: Field<number, {
139
+ kind: "scalar";
140
+ scalar: "int";
141
+ optional: false;
142
+ hasDefault: true;
143
+ array: false;
144
+ isId: false;
145
+ model: "";
146
+ }>;
147
+ };
148
+ export type SessionFields = ReturnType<typeof sessionFields> & {
149
+ user: ReturnType<typeof sessionUserField>;
150
+ };
151
+ export declare const sessionUserField: () => Field<never, {
152
+ kind: "one";
153
+ scalar: "";
154
+ optional: true;
155
+ hasDefault: false;
156
+ array: false;
157
+ isId: false;
158
+ model: "User";
159
+ }>;
160
+ /** `auth.model.user({...extra})` — the built-in user (+ provider ids from app.json) plus the developer's fields. */
161
+ export declare const authUserModel: <E extends Fields = {}>(extra?: E) => AuthModel<UserFields & E>;
162
+ /** `auth.model.session({...extra})` — declare it only to relate to sessions (`t.one("Session")`) or to add fields. */
163
+ export declare const authSessionModel: <E extends Fields = {}>(extra?: E) => AuthModel<SessionFields & E>;
164
+ export declare const isAuthModel: (m: unknown, kind?: AuthModelKind) => m is AuthModel<any>;