@plures/praxis 1.0.3 → 1.1.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.
- package/FRAMEWORK.md +55 -5
- package/README.md +162 -375
- package/core/codegen/docs-generator.ts +5 -2
- package/core/codegen/index.ts +1 -1
- package/core/db-adapter/index.ts +2 -2
- package/core/db-adapter/sync-engine.ts +17 -6
- package/core/logic-engine/engine.ts +1 -1
- package/core/logic-engine/index.ts +2 -2
- package/core/logic-engine/protocol.ts +1 -1
- package/core/logic-engine/psf-adapter.ts +8 -4
- package/core/logic-engine/rules.ts +1 -1
- package/core/schema-engine/compiler.ts +53 -11
- package/core/schema-engine/generator.ts +17 -7
- package/core/schema-engine/index.ts +2 -2
- package/core/schema-engine/psf.ts +12 -3
- package/core/schema-engine/types.ts +3 -11
- package/core/schema-engine/validator.ts +112 -22
- package/dist/browser/engine-BjdqxeXG.d.ts +333 -0
- package/dist/browser/index.d.ts +3004 -0
- package/dist/browser/index.js +2892 -0
- package/dist/{src → browser}/integrations/svelte.d.ts +19 -17
- package/dist/browser/integrations/svelte.js +298 -0
- package/dist/node/auth-STARLY7I.js +207 -0
- package/dist/node/build-Y7OT5VBF.js +144 -0
- package/dist/node/canvas-UERZHJYW.js +362 -0
- package/dist/node/chunk-DSDC2JWZ.js +256 -0
- package/dist/node/chunk-FXQZXAWF.js +175 -0
- package/dist/node/chunk-N5Y37EUV.js +202 -0
- package/dist/node/chunk-QGM4M3NI.js +37 -0
- package/dist/node/chunk-RJMWCNHR.js +175 -0
- package/dist/node/chunk-SRM3OPPM.js +404 -0
- package/dist/node/chunk-UATVJBNV.js +175 -0
- package/dist/node/chunk-UY7YEBE2.js +159 -0
- package/dist/node/chunk-XCY2VIFX.js +143 -0
- package/dist/node/chunk-YXH4Y7ZZ.js +349 -0
- package/dist/node/cli/index.cjs +215139 -0
- package/dist/node/cli/index.d.cts +1 -0
- package/dist/node/cli/index.d.ts +1 -0
- package/dist/node/cli/index.js +690 -0
- package/dist/node/cloud/index.cjs +1043 -0
- package/dist/node/cloud/index.d.cts +864 -0
- package/dist/node/cloud/index.d.ts +864 -0
- package/dist/node/cloud/index.js +456 -0
- package/dist/node/cloud-AXOK4PSN.js +212 -0
- package/dist/node/component.cjs +374 -0
- package/dist/node/component.d.cts +125 -0
- package/dist/{src/core/component/generator.d.ts → node/component.d.ts} +11 -8
- package/dist/node/component.js +9 -0
- package/dist/node/components/index.cjs +216 -0
- package/dist/node/components/index.d.cts +43 -0
- package/dist/{src → node}/components/index.d.ts +8 -8
- package/dist/node/components/index.js +7 -0
- package/dist/node/create-TRLSVCNQ.js +584 -0
- package/dist/node/dev-PMJZUYGE.js +65 -0
- package/dist/node/engine-1iqLe6_P.d.ts +214 -0
- package/dist/node/engine-CVJobhHm.d.cts +214 -0
- package/dist/node/index.cjs +3247 -0
- package/dist/node/index.d.cts +2579 -0
- package/dist/node/index.d.ts +2579 -0
- package/dist/node/index.js +2098 -0
- package/dist/node/integrations/svelte.cjs +330 -0
- package/dist/node/integrations/svelte.d.cts +309 -0
- package/dist/node/integrations/svelte.d.ts +309 -0
- package/dist/node/integrations/svelte.js +300 -0
- package/dist/node/orchestrate-737TCL5H.js +127 -0
- package/dist/{src/core/protocol.d.ts → node/protocol-Qek7ebBl.d.cts} +11 -10
- package/dist/node/protocol-Qek7ebBl.d.ts +122 -0
- package/dist/node/schema.cjs +200 -0
- package/dist/{src/core/schema/types.d.ts → node/schema.d.cts} +30 -29
- package/dist/node/schema.d.ts +371 -0
- package/dist/node/schema.js +9 -0
- package/dist/{src/runtime/terminal-adapter.d.ts → node/terminal-adapter-07HGftGQ.d.ts} +86 -11
- package/dist/node/terminal-adapter-XLtCjjb_.d.cts +231 -0
- package/dist/node/verify-QRYKRIDU.js +210960 -0
- package/docs/MONETIZATION.md +21 -16
- package/docs/REACTIVE_REDESIGN.md +132 -0
- package/docs/README.md +47 -36
- package/docs/SVELTE_INTEGRATION_STRATEGY.md +68 -0
- package/docs/TERMINAL_NODE.md +27 -24
- package/docs/core/building-extensions.md +58 -61
- package/docs/core/cli-usage.md +59 -59
- package/docs/core/code-canvas-sync.md +28 -16
- package/docs/core/logic-engine.md +77 -82
- package/docs/core/pluresdb-integration.md +29 -39
- package/docs/core/schema-model.md +66 -52
- package/docs/core/ui-generation.md +57 -49
- package/docs/core/what-is-praxis.md +32 -15
- package/docs/guides/canvas.md +21 -5
- package/docs/guides/getting-started.md +13 -7
- package/docs/guides/history-state-pattern.md +65 -51
- package/docs/guides/orchestration.md +46 -32
- package/docs/guides/parallel-state-pattern.md +56 -72
- package/docs/guides/svelte-integration.md +45 -53
- package/docs/tutorials/README.md +16 -0
- package/docs/tutorials/ecommerce-cart.md +177 -95
- package/docs/tutorials/first-app.md +26 -41
- package/docs/tutorials/form-builder.md +191 -138
- package/docs/tutorials/todo-pluresdb.md +71 -69
- package/package.json +58 -23
- package/src/__tests__/actors.test.ts +68 -68
- package/src/__tests__/billing.test.ts +32 -32
- package/src/__tests__/canvas-components.test.ts +94 -73
- package/src/__tests__/cli-create.test.ts +28 -28
- package/src/__tests__/cloud.test.ts +36 -36
- package/src/__tests__/code-canvas-integration.test.ts +132 -141
- package/src/__tests__/docs-generator.test.ts +3 -9
- package/src/__tests__/dsl.test.ts +58 -64
- package/src/__tests__/edge-cases.test.ts +106 -108
- package/src/__tests__/engine.test.ts +51 -25
- package/src/__tests__/generators.test.ts +42 -44
- package/src/__tests__/introspection.test.ts +104 -114
- package/src/__tests__/pluresdb.test.ts +189 -187
- package/src/__tests__/protocol.test.ts +15 -15
- package/src/__tests__/provisioning.test.ts +61 -61
- package/src/__tests__/schema.test.ts +7 -11
- package/src/__tests__/state-docs-integration.test.ts +162 -145
- package/src/__tests__/svelte-integration.test.ts +16 -19
- package/src/__tests__/tauri-integration.test.ts +149 -147
- package/src/__tests__/terminal-node.test.ts +12 -7
- package/src/__tests__/unum-integration.test.ts +68 -68
- package/src/adapters/cli.ts +21 -15
- package/src/cli/commands/auth.ts +82 -78
- package/src/cli/commands/build.ts +29 -27
- package/src/cli/commands/canvas.ts +338 -127
- package/src/cli/commands/cloud.ts +47 -47
- package/src/cli/commands/create.ts +59 -47
- package/src/cli/commands/dev.ts +12 -12
- package/src/cli/commands/generate.ts +29 -40
- package/src/cli/commands/orchestrate.ts +24 -24
- package/src/cli/commands/verify.ts +7 -8
- package/src/cli/index.ts +14 -10
- package/src/cloud/README.md +28 -15
- package/src/cloud/auth.ts +55 -70
- package/src/cloud/billing.ts +59 -58
- package/src/cloud/client.ts +29 -35
- package/src/cloud/index.ts +19 -40
- package/src/cloud/marketplace.ts +69 -78
- package/src/cloud/provisioning.ts +42 -51
- package/src/cloud/relay/endpoints.ts +30 -34
- package/src/cloud/relay/health/index.ts +1 -1
- package/src/cloud/relay/stats/index.ts +1 -1
- package/src/cloud/relay/sync/index.ts +1 -1
- package/src/cloud/relay/usage/index.ts +1 -1
- package/src/cloud/sponsors.ts +31 -34
- package/src/cloud/types.ts +4 -4
- package/src/components/README.md +1 -0
- package/src/components/index.ts +3 -4
- package/src/core/actors.ts +7 -7
- package/src/core/component/generator.ts +10 -28
- package/src/core/engine.ts +51 -24
- package/src/core/introspection.ts +37 -35
- package/src/core/logic/generator.ts +62 -62
- package/src/core/pluresdb/adapter.ts +8 -8
- package/src/core/pluresdb/generator.ts +39 -35
- package/src/core/pluresdb/index.ts +9 -12
- package/src/core/pluresdb/schema-registry.ts +22 -25
- package/src/core/pluresdb/store.ts +57 -57
- package/src/core/protocol.ts +14 -14
- package/src/core/reactive-engine.svelte.ts +65 -0
- package/src/core/reactive-engine.ts +67 -0
- package/src/core/rules.ts +4 -4
- package/src/core/schema/loader.common.ts +150 -0
- package/src/core/schema/loader.ts +19 -149
- package/src/core/schema/normalize.ts +34 -51
- package/src/core/schema/types.ts +47 -11
- package/src/dsl/index.ts +8 -8
- package/src/dsl.ts +11 -17
- package/src/examples/advanced-todo/README.md +58 -40
- package/src/examples/advanced-todo/index.ts +3 -3
- package/src/examples/auth-basic/index.ts +30 -30
- package/src/examples/cart/index.ts +50 -50
- package/src/examples/hero-ecommerce/index.ts +130 -157
- package/src/examples/svelte-counter/index.ts +22 -26
- package/src/flows.ts +6 -17
- package/src/index.browser.ts +204 -0
- package/src/index.ts +37 -42
- package/src/integrations/code-canvas.ts +237 -193
- package/src/integrations/pluresdb.ts +55 -35
- package/src/integrations/state-docs.ts +104 -104
- package/src/integrations/svelte.ts +35 -35
- package/src/integrations/tauri.ts +75 -73
- package/src/integrations/unum.ts +68 -61
- package/src/registry.ts +7 -14
- package/src/runtime/terminal-adapter.ts +31 -26
- package/src/step.ts +10 -16
- package/src/types.ts +1 -1
- package/templates/basic-app/README.md +6 -9
- package/templates/fullstack-app/README.md +10 -0
- package/dist/core/codegen/docs-generator.d.ts +0 -123
- package/dist/core/codegen/docs-generator.d.ts.map +0 -1
- package/dist/core/codegen/docs-generator.js +0 -674
- package/dist/core/codegen/docs-generator.js.map +0 -1
- package/dist/core/codegen/index.d.ts +0 -11
- package/dist/core/codegen/index.d.ts.map +0 -1
- package/dist/core/codegen/index.js +0 -13
- package/dist/core/codegen/index.js.map +0 -1
- package/dist/core/codegen/ts-generator.d.ts +0 -8
- package/dist/core/codegen/ts-generator.d.ts.map +0 -1
- package/dist/core/codegen/ts-generator.js +0 -8
- package/dist/core/codegen/ts-generator.js.map +0 -1
- package/dist/core/db-adapter/index.d.ts +0 -18
- package/dist/core/db-adapter/index.d.ts.map +0 -1
- package/dist/core/db-adapter/index.js +0 -23
- package/dist/core/db-adapter/index.js.map +0 -1
- package/dist/core/db-adapter/sync-engine.d.ts +0 -180
- package/dist/core/db-adapter/sync-engine.d.ts.map +0 -1
- package/dist/core/db-adapter/sync-engine.js +0 -342
- package/dist/core/db-adapter/sync-engine.js.map +0 -1
- package/dist/core/logic-engine/engine.d.ts +0 -8
- package/dist/core/logic-engine/engine.d.ts.map +0 -1
- package/dist/core/logic-engine/engine.js +0 -8
- package/dist/core/logic-engine/engine.js.map +0 -1
- package/dist/core/logic-engine/index.d.ts +0 -16
- package/dist/core/logic-engine/index.d.ts.map +0 -1
- package/dist/core/logic-engine/index.js +0 -16
- package/dist/core/logic-engine/index.js.map +0 -1
- package/dist/core/logic-engine/protocol.d.ts +0 -7
- package/dist/core/logic-engine/protocol.d.ts.map +0 -1
- package/dist/core/logic-engine/protocol.js +0 -7
- package/dist/core/logic-engine/protocol.js.map +0 -1
- package/dist/core/logic-engine/psf-adapter.d.ts +0 -88
- package/dist/core/logic-engine/psf-adapter.d.ts.map +0 -1
- package/dist/core/logic-engine/psf-adapter.js +0 -207
- package/dist/core/logic-engine/psf-adapter.js.map +0 -1
- package/dist/core/logic-engine/rules.d.ts +0 -7
- package/dist/core/logic-engine/rules.d.ts.map +0 -1
- package/dist/core/logic-engine/rules.js +0 -7
- package/dist/core/logic-engine/rules.js.map +0 -1
- package/dist/core/schema-engine/compiler.d.ts +0 -198
- package/dist/core/schema-engine/compiler.d.ts.map +0 -1
- package/dist/core/schema-engine/compiler.js +0 -262
- package/dist/core/schema-engine/compiler.js.map +0 -1
- package/dist/core/schema-engine/generator.d.ts +0 -115
- package/dist/core/schema-engine/generator.d.ts.map +0 -1
- package/dist/core/schema-engine/generator.js +0 -506
- package/dist/core/schema-engine/generator.js.map +0 -1
- package/dist/core/schema-engine/index.d.ts +0 -18
- package/dist/core/schema-engine/index.d.ts.map +0 -1
- package/dist/core/schema-engine/index.js +0 -18
- package/dist/core/schema-engine/index.js.map +0 -1
- package/dist/core/schema-engine/psf.d.ts +0 -612
- package/dist/core/schema-engine/psf.d.ts.map +0 -1
- package/dist/core/schema-engine/psf.js +0 -45
- package/dist/core/schema-engine/psf.js.map +0 -1
- package/dist/core/schema-engine/types.d.ts +0 -10
- package/dist/core/schema-engine/types.d.ts.map +0 -1
- package/dist/core/schema-engine/types.js +0 -7
- package/dist/core/schema-engine/types.js.map +0 -1
- package/dist/core/schema-engine/validator.d.ts +0 -140
- package/dist/core/schema-engine/validator.d.ts.map +0 -1
- package/dist/core/schema-engine/validator.js +0 -407
- package/dist/core/schema-engine/validator.js.map +0 -1
- package/dist/src/adapters/cli.d.ts +0 -43
- package/dist/src/adapters/cli.d.ts.map +0 -1
- package/dist/src/adapters/cli.js +0 -126
- package/dist/src/adapters/cli.js.map +0 -1
- package/dist/src/cli/commands/auth.d.ts +0 -26
- package/dist/src/cli/commands/auth.d.ts.map +0 -1
- package/dist/src/cli/commands/auth.js +0 -233
- package/dist/src/cli/commands/auth.js.map +0 -1
- package/dist/src/cli/commands/build.d.ts +0 -23
- package/dist/src/cli/commands/build.d.ts.map +0 -1
- package/dist/src/cli/commands/build.js +0 -162
- package/dist/src/cli/commands/build.js.map +0 -1
- package/dist/src/cli/commands/canvas.d.ts +0 -23
- package/dist/src/cli/commands/canvas.d.ts.map +0 -1
- package/dist/src/cli/commands/canvas.js +0 -215
- package/dist/src/cli/commands/canvas.js.map +0 -1
- package/dist/src/cli/commands/cloud.d.ts +0 -27
- package/dist/src/cli/commands/cloud.d.ts.map +0 -1
- package/dist/src/cli/commands/cloud.js +0 -232
- package/dist/src/cli/commands/cloud.js.map +0 -1
- package/dist/src/cli/commands/create.d.ts +0 -21
- package/dist/src/cli/commands/create.d.ts.map +0 -1
- package/dist/src/cli/commands/create.js +0 -621
- package/dist/src/cli/commands/create.js.map +0 -1
- package/dist/src/cli/commands/dev.d.ts +0 -21
- package/dist/src/cli/commands/dev.d.ts.map +0 -1
- package/dist/src/cli/commands/dev.js +0 -71
- package/dist/src/cli/commands/dev.js.map +0 -1
- package/dist/src/cli/commands/generate.d.ts +0 -25
- package/dist/src/cli/commands/generate.d.ts.map +0 -1
- package/dist/src/cli/commands/generate.js +0 -168
- package/dist/src/cli/commands/generate.js.map +0 -1
- package/dist/src/cli/commands/orchestrate.d.ts +0 -44
- package/dist/src/cli/commands/orchestrate.d.ts.map +0 -1
- package/dist/src/cli/commands/orchestrate.js +0 -150
- package/dist/src/cli/commands/orchestrate.js.map +0 -1
- package/dist/src/cli/commands/verify.d.ts +0 -10
- package/dist/src/cli/commands/verify.d.ts.map +0 -1
- package/dist/src/cli/commands/verify.js +0 -39
- package/dist/src/cli/commands/verify.js.map +0 -1
- package/dist/src/cli/index.d.ts +0 -8
- package/dist/src/cli/index.d.ts.map +0 -1
- package/dist/src/cli/index.js +0 -226
- package/dist/src/cli/index.js.map +0 -1
- package/dist/src/cloud/auth.d.ts +0 -51
- package/dist/src/cloud/auth.d.ts.map +0 -1
- package/dist/src/cloud/auth.js +0 -194
- package/dist/src/cloud/auth.js.map +0 -1
- package/dist/src/cloud/billing.d.ts +0 -184
- package/dist/src/cloud/billing.d.ts.map +0 -1
- package/dist/src/cloud/billing.js +0 -179
- package/dist/src/cloud/billing.js.map +0 -1
- package/dist/src/cloud/client.d.ts +0 -39
- package/dist/src/cloud/client.d.ts.map +0 -1
- package/dist/src/cloud/client.js +0 -176
- package/dist/src/cloud/client.js.map +0 -1
- package/dist/src/cloud/index.d.ts +0 -44
- package/dist/src/cloud/index.d.ts.map +0 -1
- package/dist/src/cloud/index.js +0 -44
- package/dist/src/cloud/index.js.map +0 -1
- package/dist/src/cloud/marketplace.d.ts +0 -166
- package/dist/src/cloud/marketplace.d.ts.map +0 -1
- package/dist/src/cloud/marketplace.js +0 -159
- package/dist/src/cloud/marketplace.js.map +0 -1
- package/dist/src/cloud/provisioning.d.ts +0 -110
- package/dist/src/cloud/provisioning.d.ts.map +0 -1
- package/dist/src/cloud/provisioning.js +0 -148
- package/dist/src/cloud/provisioning.js.map +0 -1
- package/dist/src/cloud/relay/endpoints.d.ts +0 -62
- package/dist/src/cloud/relay/endpoints.d.ts.map +0 -1
- package/dist/src/cloud/relay/endpoints.js +0 -217
- package/dist/src/cloud/relay/endpoints.js.map +0 -1
- package/dist/src/cloud/relay/health/index.d.ts +0 -5
- package/dist/src/cloud/relay/health/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/health/index.js +0 -9
- package/dist/src/cloud/relay/health/index.js.map +0 -1
- package/dist/src/cloud/relay/stats/index.d.ts +0 -5
- package/dist/src/cloud/relay/stats/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/stats/index.js +0 -9
- package/dist/src/cloud/relay/stats/index.js.map +0 -1
- package/dist/src/cloud/relay/sync/index.d.ts +0 -5
- package/dist/src/cloud/relay/sync/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/sync/index.js +0 -9
- package/dist/src/cloud/relay/sync/index.js.map +0 -1
- package/dist/src/cloud/relay/usage/index.d.ts +0 -5
- package/dist/src/cloud/relay/usage/index.d.ts.map +0 -1
- package/dist/src/cloud/relay/usage/index.js +0 -9
- package/dist/src/cloud/relay/usage/index.js.map +0 -1
- package/dist/src/cloud/sponsors.d.ts +0 -81
- package/dist/src/cloud/sponsors.d.ts.map +0 -1
- package/dist/src/cloud/sponsors.js +0 -130
- package/dist/src/cloud/sponsors.js.map +0 -1
- package/dist/src/cloud/types.d.ts +0 -169
- package/dist/src/cloud/types.d.ts.map +0 -1
- package/dist/src/cloud/types.js +0 -7
- package/dist/src/cloud/types.js.map +0 -1
- package/dist/src/components/index.d.ts.map +0 -1
- package/dist/src/components/index.js +0 -17
- package/dist/src/components/index.js.map +0 -1
- package/dist/src/core/actors.d.ts +0 -95
- package/dist/src/core/actors.d.ts.map +0 -1
- package/dist/src/core/actors.js +0 -158
- package/dist/src/core/actors.js.map +0 -1
- package/dist/src/core/component/generator.d.ts.map +0 -1
- package/dist/src/core/component/generator.js +0 -349
- package/dist/src/core/component/generator.js.map +0 -1
- package/dist/src/core/engine.d.ts +0 -92
- package/dist/src/core/engine.d.ts.map +0 -1
- package/dist/src/core/engine.js +0 -199
- package/dist/src/core/engine.js.map +0 -1
- package/dist/src/core/introspection.d.ts +0 -141
- package/dist/src/core/introspection.d.ts.map +0 -1
- package/dist/src/core/introspection.js +0 -208
- package/dist/src/core/introspection.js.map +0 -1
- package/dist/src/core/logic/generator.d.ts +0 -76
- package/dist/src/core/logic/generator.d.ts.map +0 -1
- package/dist/src/core/logic/generator.js +0 -370
- package/dist/src/core/logic/generator.js.map +0 -1
- package/dist/src/core/pluresdb/adapter.d.ts +0 -72
- package/dist/src/core/pluresdb/adapter.d.ts.map +0 -1
- package/dist/src/core/pluresdb/adapter.js +0 -73
- package/dist/src/core/pluresdb/adapter.js.map +0 -1
- package/dist/src/core/pluresdb/generator.d.ts +0 -58
- package/dist/src/core/pluresdb/generator.d.ts.map +0 -1
- package/dist/src/core/pluresdb/generator.js +0 -191
- package/dist/src/core/pluresdb/generator.js.map +0 -1
- package/dist/src/core/pluresdb/index.d.ts +0 -15
- package/dist/src/core/pluresdb/index.d.ts.map +0 -1
- package/dist/src/core/pluresdb/index.js +0 -11
- package/dist/src/core/pluresdb/index.js.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.d.ts +0 -104
- package/dist/src/core/pluresdb/schema-registry.d.ts.map +0 -1
- package/dist/src/core/pluresdb/schema-registry.js +0 -130
- package/dist/src/core/pluresdb/schema-registry.js.map +0 -1
- package/dist/src/core/pluresdb/store.d.ts +0 -199
- package/dist/src/core/pluresdb/store.d.ts.map +0 -1
- package/dist/src/core/pluresdb/store.js +0 -344
- package/dist/src/core/pluresdb/store.js.map +0 -1
- package/dist/src/core/protocol.d.ts.map +0 -1
- package/dist/src/core/protocol.js +0 -46
- package/dist/src/core/protocol.js.map +0 -1
- package/dist/src/core/rules.d.ts +0 -120
- package/dist/src/core/rules.d.ts.map +0 -1
- package/dist/src/core/rules.js +0 -81
- package/dist/src/core/rules.js.map +0 -1
- package/dist/src/core/schema/loader.d.ts +0 -47
- package/dist/src/core/schema/loader.d.ts.map +0 -1
- package/dist/src/core/schema/loader.js +0 -189
- package/dist/src/core/schema/loader.js.map +0 -1
- package/dist/src/core/schema/normalize.d.ts +0 -72
- package/dist/src/core/schema/normalize.d.ts.map +0 -1
- package/dist/src/core/schema/normalize.js +0 -190
- package/dist/src/core/schema/normalize.js.map +0 -1
- package/dist/src/core/schema/types.d.ts.map +0 -1
- package/dist/src/core/schema/types.js +0 -161
- package/dist/src/core/schema/types.js.map +0 -1
- package/dist/src/dsl/index.d.ts +0 -152
- package/dist/src/dsl/index.d.ts.map +0 -1
- package/dist/src/dsl/index.js +0 -132
- package/dist/src/dsl/index.js.map +0 -1
- package/dist/src/dsl.d.ts +0 -124
- package/dist/src/dsl.d.ts.map +0 -1
- package/dist/src/dsl.js +0 -130
- package/dist/src/dsl.js.map +0 -1
- package/dist/src/examples/advanced-todo/index.d.ts +0 -55
- package/dist/src/examples/advanced-todo/index.d.ts.map +0 -1
- package/dist/src/examples/advanced-todo/index.js +0 -222
- package/dist/src/examples/advanced-todo/index.js.map +0 -1
- package/dist/src/examples/auth-basic/index.d.ts +0 -17
- package/dist/src/examples/auth-basic/index.d.ts.map +0 -1
- package/dist/src/examples/auth-basic/index.js +0 -122
- package/dist/src/examples/auth-basic/index.js.map +0 -1
- package/dist/src/examples/cart/index.d.ts +0 -19
- package/dist/src/examples/cart/index.d.ts.map +0 -1
- package/dist/src/examples/cart/index.js +0 -202
- package/dist/src/examples/cart/index.js.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.d.ts +0 -39
- package/dist/src/examples/hero-ecommerce/index.d.ts.map +0 -1
- package/dist/src/examples/hero-ecommerce/index.js +0 -506
- package/dist/src/examples/hero-ecommerce/index.js.map +0 -1
- package/dist/src/examples/svelte-counter/index.d.ts +0 -31
- package/dist/src/examples/svelte-counter/index.d.ts.map +0 -1
- package/dist/src/examples/svelte-counter/index.js +0 -123
- package/dist/src/examples/svelte-counter/index.js.map +0 -1
- package/dist/src/flows.d.ts +0 -125
- package/dist/src/flows.d.ts.map +0 -1
- package/dist/src/flows.js +0 -160
- package/dist/src/flows.js.map +0 -1
- package/dist/src/index.d.ts +0 -77
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -64
- package/dist/src/index.js.map +0 -1
- package/dist/src/integrations/code-canvas.d.ts +0 -265
- package/dist/src/integrations/code-canvas.d.ts.map +0 -1
- package/dist/src/integrations/code-canvas.js +0 -451
- package/dist/src/integrations/code-canvas.js.map +0 -1
- package/dist/src/integrations/pluresdb.d.ts +0 -117
- package/dist/src/integrations/pluresdb.d.ts.map +0 -1
- package/dist/src/integrations/pluresdb.js +0 -117
- package/dist/src/integrations/pluresdb.js.map +0 -1
- package/dist/src/integrations/state-docs.d.ts +0 -191
- package/dist/src/integrations/state-docs.d.ts.map +0 -1
- package/dist/src/integrations/state-docs.js +0 -515
- package/dist/src/integrations/state-docs.js.map +0 -1
- package/dist/src/integrations/svelte.d.ts.map +0 -1
- package/dist/src/integrations/svelte.js +0 -447
- package/dist/src/integrations/svelte.js.map +0 -1
- package/dist/src/integrations/tauri.d.ts +0 -360
- package/dist/src/integrations/tauri.d.ts.map +0 -1
- package/dist/src/integrations/tauri.js +0 -278
- package/dist/src/integrations/tauri.js.map +0 -1
- package/dist/src/integrations/unum.d.ts +0 -159
- package/dist/src/integrations/unum.d.ts.map +0 -1
- package/dist/src/integrations/unum.js +0 -240
- package/dist/src/integrations/unum.js.map +0 -1
- package/dist/src/registry.d.ts +0 -94
- package/dist/src/registry.d.ts.map +0 -1
- package/dist/src/registry.js +0 -181
- package/dist/src/registry.js.map +0 -1
- package/dist/src/runtime/terminal-adapter.d.ts.map +0 -1
- package/dist/src/runtime/terminal-adapter.js +0 -239
- package/dist/src/runtime/terminal-adapter.js.map +0 -1
- package/dist/src/step.d.ts +0 -34
- package/dist/src/step.d.ts.map +0 -1
- package/dist/src/step.js +0 -111
- package/dist/src/step.js.map +0 -1
- package/dist/src/types.d.ts +0 -63
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -6
- package/dist/src/types.js.map +0 -1
- package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts +0 -8
- package/dist/tools/ast-analyzer/src/ast-analyzer.d.ts.map +0 -1
- package/dist/tools/ast-analyzer/src/ast-analyzer.js +0 -119
- package/dist/tools/ast-analyzer/src/ast-analyzer.js.map +0 -1
- package/dist/tools/cli/commands/index.d.ts +0 -7
- package/dist/tools/cli/commands/index.d.ts.map +0 -1
- package/dist/tools/cli/commands/index.js +0 -7
- package/dist/tools/cli/commands/index.js.map +0 -1
- package/dist/tools/cli/index.d.ts +0 -8
- package/dist/tools/cli/index.d.ts.map +0 -1
- package/dist/tools/cli/index.js +0 -9
- package/dist/tools/cli/index.js.map +0 -1
- package/dist/tools/watcher/index.d.ts +0 -105
- package/dist/tools/watcher/index.d.ts.map +0 -1
- package/dist/tools/watcher/index.js +0 -213
- package/dist/tools/watcher/index.js.map +0 -1
- package/dist/ui/canvas/canvas-projection.d.ts +0 -78
- package/dist/ui/canvas/canvas-projection.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-projection.js +0 -416
- package/dist/ui/canvas/canvas-projection.js.map +0 -1
- package/dist/ui/canvas/canvas-state.d.ts +0 -200
- package/dist/ui/canvas/canvas-state.d.ts.map +0 -1
- package/dist/ui/canvas/canvas-state.js +0 -464
- package/dist/ui/canvas/canvas-state.js.map +0 -1
- package/dist/ui/canvas/components/index.d.ts +0 -95
- package/dist/ui/canvas/components/index.d.ts.map +0 -1
- package/dist/ui/canvas/components/index.js +0 -19
- package/dist/ui/canvas/components/index.js.map +0 -1
- package/dist/ui/canvas/index.d.ts +0 -32
- package/dist/ui/canvas/index.d.ts.map +0 -1
- package/dist/ui/canvas/index.js +0 -32
- package/dist/ui/canvas/index.js.map +0 -1
- package/dist/ui/canvas-inspector/src/server.d.ts +0 -2
- package/dist/ui/canvas-inspector/src/server.d.ts.map +0 -1
- package/dist/ui/canvas-inspector/src/server.js +0 -248
- package/dist/ui/canvas-inspector/src/server.js.map +0 -1
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts +0 -5
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.d.ts.map +0 -1
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js +0 -58
- package/dist/ui/canvas-inspector/src/verify-fsm-implementation.js.map +0 -1
- package/dist/ui/svelte-generator/index.d.ts +0 -9
- package/dist/ui/svelte-generator/index.d.ts.map +0 -1
- package/dist/ui/svelte-generator/index.js +0 -11
- package/dist/ui/svelte-generator/index.js.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.d.ts +0 -128
- package/dist/ui/svelte-generator/psf-generator.d.ts.map +0 -1
- package/dist/ui/svelte-generator/psf-generator.js +0 -506
- package/dist/ui/svelte-generator/psf-generator.js.map +0 -1
|
@@ -2,129 +2,129 @@
|
|
|
2
2
|
* Unum Integration Tests
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { describe, it, expect, beforeEach } from
|
|
6
|
-
import { createUnumAdapter, attachUnumToEngine } from
|
|
7
|
-
import { createInMemoryDB } from
|
|
8
|
-
import { createPraxisEngine, PraxisRegistry } from
|
|
9
|
-
|
|
10
|
-
describe(
|
|
11
|
-
describe(
|
|
12
|
-
it(
|
|
5
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
6
|
+
import { createUnumAdapter, attachUnumToEngine } from '../integrations/unum.js';
|
|
7
|
+
import { createInMemoryDB } from '../integrations/pluresdb.js';
|
|
8
|
+
import { createPraxisEngine, PraxisRegistry } from '../index.js';
|
|
9
|
+
|
|
10
|
+
describe('Unum Integration', () => {
|
|
11
|
+
describe('createUnumAdapter', () => {
|
|
12
|
+
it('should create an adapter without identity', async () => {
|
|
13
13
|
const db = createInMemoryDB();
|
|
14
14
|
const adapter = await createUnumAdapter({ db });
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
expect(adapter).toBeDefined();
|
|
17
17
|
expect(adapter.identity).toBeNull();
|
|
18
18
|
});
|
|
19
|
-
|
|
20
|
-
it(
|
|
19
|
+
|
|
20
|
+
it('should create an adapter with identity', async () => {
|
|
21
21
|
const db = createInMemoryDB();
|
|
22
22
|
const adapter = await createUnumAdapter({
|
|
23
23
|
db,
|
|
24
24
|
identity: {
|
|
25
|
-
id:
|
|
26
|
-
name:
|
|
25
|
+
id: 'test-user',
|
|
26
|
+
name: 'Test User',
|
|
27
27
|
createdAt: Date.now(),
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
|
-
|
|
30
|
+
|
|
31
31
|
expect(adapter.identity).toBeDefined();
|
|
32
|
-
expect(adapter.identity?.name).toBe(
|
|
32
|
+
expect(adapter.identity?.name).toBe('Test User');
|
|
33
33
|
});
|
|
34
|
-
|
|
35
|
-
it(
|
|
34
|
+
|
|
35
|
+
it('should set identity', async () => {
|
|
36
36
|
const db = createInMemoryDB();
|
|
37
37
|
const adapter = await createUnumAdapter({ db });
|
|
38
|
-
|
|
39
|
-
const identity = await adapter.setIdentity({ name:
|
|
40
|
-
|
|
41
|
-
expect(identity.name).toBe(
|
|
38
|
+
|
|
39
|
+
const identity = await adapter.setIdentity({ name: 'New User' });
|
|
40
|
+
|
|
41
|
+
expect(identity.name).toBe('New User');
|
|
42
42
|
expect(identity.id).toBeDefined();
|
|
43
43
|
expect(identity.createdAt).toBeDefined();
|
|
44
44
|
});
|
|
45
|
-
|
|
46
|
-
it(
|
|
45
|
+
|
|
46
|
+
it('should get identity by ID', async () => {
|
|
47
47
|
const db = createInMemoryDB();
|
|
48
48
|
const adapter = await createUnumAdapter({ db });
|
|
49
|
-
|
|
50
|
-
const created = await adapter.setIdentity({ name:
|
|
49
|
+
|
|
50
|
+
const created = await adapter.setIdentity({ name: 'Test' });
|
|
51
51
|
const fetched = await adapter.getIdentity(created.id);
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
expect(fetched).toBeDefined();
|
|
54
|
-
expect(fetched?.name).toBe(
|
|
54
|
+
expect(fetched?.name).toBe('Test');
|
|
55
55
|
});
|
|
56
|
-
|
|
57
|
-
it(
|
|
56
|
+
|
|
57
|
+
it('should create a channel', async () => {
|
|
58
58
|
const db = createInMemoryDB();
|
|
59
59
|
const adapter = await createUnumAdapter({ db });
|
|
60
|
-
|
|
61
|
-
const channel = await adapter.createChannel(
|
|
62
|
-
|
|
60
|
+
|
|
61
|
+
const channel = await adapter.createChannel('test-channel');
|
|
62
|
+
|
|
63
63
|
expect(channel).toBeDefined();
|
|
64
|
-
expect(channel.name).toBe(
|
|
64
|
+
expect(channel.name).toBe('test-channel');
|
|
65
65
|
expect(channel.id).toBeDefined();
|
|
66
66
|
});
|
|
67
|
-
|
|
68
|
-
it(
|
|
67
|
+
|
|
68
|
+
it('should join a channel', async () => {
|
|
69
69
|
const db = createInMemoryDB();
|
|
70
70
|
const adapter = await createUnumAdapter({ db });
|
|
71
|
-
|
|
72
|
-
const created = await adapter.createChannel(
|
|
71
|
+
|
|
72
|
+
const created = await adapter.createChannel('test-channel');
|
|
73
73
|
const joined = await adapter.joinChannel(created.id);
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
expect(joined.id).toBe(created.id);
|
|
76
|
-
expect(joined.name).toBe(
|
|
76
|
+
expect(joined.name).toBe('test-channel');
|
|
77
77
|
});
|
|
78
|
-
|
|
79
|
-
it(
|
|
78
|
+
|
|
79
|
+
it('should list channels', async () => {
|
|
80
80
|
const db = createInMemoryDB();
|
|
81
81
|
const adapter = await createUnumAdapter({ db });
|
|
82
|
-
|
|
83
|
-
await adapter.createChannel(
|
|
84
|
-
await adapter.createChannel(
|
|
85
|
-
|
|
82
|
+
|
|
83
|
+
await adapter.createChannel('channel-1');
|
|
84
|
+
await adapter.createChannel('channel-2');
|
|
85
|
+
|
|
86
86
|
const channels = await adapter.listChannels();
|
|
87
|
-
|
|
87
|
+
|
|
88
88
|
expect(channels.length).toBe(2);
|
|
89
89
|
});
|
|
90
|
-
|
|
91
|
-
it(
|
|
90
|
+
|
|
91
|
+
it('should publish messages to channel', async () => {
|
|
92
92
|
const db = createInMemoryDB();
|
|
93
93
|
const adapter = await createUnumAdapter({
|
|
94
94
|
db,
|
|
95
|
-
identity: { id:
|
|
95
|
+
identity: { id: 'user-1', name: 'User 1', createdAt: Date.now() },
|
|
96
96
|
});
|
|
97
|
-
|
|
98
|
-
const channel = await adapter.createChannel(
|
|
99
|
-
|
|
97
|
+
|
|
98
|
+
const channel = await adapter.createChannel('test-channel');
|
|
99
|
+
|
|
100
100
|
const messages: unknown[] = [];
|
|
101
101
|
channel.subscribe((msg) => messages.push(msg));
|
|
102
|
-
|
|
102
|
+
|
|
103
103
|
await channel.publish({
|
|
104
|
-
id:
|
|
104
|
+
id: 'msg-1',
|
|
105
105
|
sender: adapter.identity!,
|
|
106
|
-
content: { text:
|
|
107
|
-
type:
|
|
106
|
+
content: { text: 'Hello!' },
|
|
107
|
+
type: 'text',
|
|
108
108
|
});
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
expect(messages.length).toBe(1);
|
|
111
111
|
});
|
|
112
|
-
|
|
113
|
-
it(
|
|
112
|
+
|
|
113
|
+
it('should disconnect and cleanup', async () => {
|
|
114
114
|
const db = createInMemoryDB();
|
|
115
115
|
const adapter = await createUnumAdapter({ db });
|
|
116
|
-
|
|
117
|
-
await adapter.createChannel(
|
|
116
|
+
|
|
117
|
+
await adapter.createChannel('test-channel');
|
|
118
118
|
await adapter.disconnect();
|
|
119
|
-
|
|
119
|
+
|
|
120
120
|
const channels = await adapter.listChannels();
|
|
121
121
|
expect(channels.length).toBe(0);
|
|
122
122
|
expect(adapter.identity).toBeNull();
|
|
123
123
|
});
|
|
124
124
|
});
|
|
125
|
-
|
|
126
|
-
describe(
|
|
127
|
-
it(
|
|
125
|
+
|
|
126
|
+
describe('attachUnumToEngine', () => {
|
|
127
|
+
it('should attach adapter to engine', async () => {
|
|
128
128
|
const db = createInMemoryDB();
|
|
129
129
|
const adapter = await createUnumAdapter({ db });
|
|
130
130
|
const registry = new PraxisRegistry();
|
|
@@ -132,9 +132,9 @@ describe("Unum Integration", () => {
|
|
|
132
132
|
initialContext: {},
|
|
133
133
|
registry,
|
|
134
134
|
});
|
|
135
|
-
|
|
136
|
-
const cleanup = attachUnumToEngine(engine, adapter,
|
|
137
|
-
|
|
135
|
+
|
|
136
|
+
const cleanup = attachUnumToEngine(engine, adapter, 'test-channel');
|
|
137
|
+
|
|
138
138
|
expect(cleanup).toBeInstanceOf(Function);
|
|
139
139
|
cleanup();
|
|
140
140
|
});
|
package/src/adapters/cli.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
3
|
* Praxis CLI Adapter
|
|
4
|
-
*
|
|
4
|
+
*
|
|
5
5
|
* JSON-based CLI interface for cross-language Praxis engine invocation.
|
|
6
6
|
* Reads JSON from stdin, processes through Praxis engine, outputs JSON to stdout.
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* This enables PowerShell, Python, and other languages to use Praxis.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import * as fs from
|
|
11
|
+
import * as fs from 'fs';
|
|
12
12
|
import {
|
|
13
13
|
createPraxisEngine,
|
|
14
14
|
PraxisRegistry,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
type PraxisStepResult,
|
|
18
18
|
type RuleDescriptor,
|
|
19
19
|
type ConstraintDescriptor,
|
|
20
|
-
} from
|
|
20
|
+
} from '../index.js';
|
|
21
21
|
|
|
22
22
|
interface CLIInput {
|
|
23
23
|
state: PraxisState;
|
|
@@ -44,7 +44,7 @@ interface RegistryConfig {
|
|
|
44
44
|
*/
|
|
45
45
|
function loadRegistryConfig(configPath: string): RegistryConfig {
|
|
46
46
|
try {
|
|
47
|
-
const content = fs.readFileSync(configPath,
|
|
47
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
48
48
|
return JSON.parse(content);
|
|
49
49
|
} catch (error) {
|
|
50
50
|
throw new Error(`Failed to load registry config from ${configPath}: ${error}`);
|
|
@@ -71,7 +71,7 @@ function createRegistryFromConfig<TContext = unknown>(
|
|
|
71
71
|
// Eval the implementation (for demo purposes)
|
|
72
72
|
// In production, load from modules or use a safer evaluation method
|
|
73
73
|
const impl = eval(ruleConfig.impl);
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
const rule: RuleDescriptor<TContext> = {
|
|
76
76
|
id: ruleConfig.id,
|
|
77
77
|
description: ruleConfig.description,
|
|
@@ -92,7 +92,7 @@ function createRegistryFromConfig<TContext = unknown>(
|
|
|
92
92
|
|
|
93
93
|
try {
|
|
94
94
|
const impl = eval(constraintConfig.impl);
|
|
95
|
-
|
|
95
|
+
|
|
96
96
|
const constraint: ConstraintDescriptor<TContext> = {
|
|
97
97
|
id: constraintConfig.id,
|
|
98
98
|
description: constraintConfig.description,
|
|
@@ -134,14 +134,14 @@ function processStep(input: CLIInput): PraxisStepResult {
|
|
|
134
134
|
async function main() {
|
|
135
135
|
try {
|
|
136
136
|
// Read input from stdin
|
|
137
|
-
let inputData =
|
|
138
|
-
|
|
137
|
+
let inputData = '';
|
|
138
|
+
|
|
139
139
|
for await (const chunk of process.stdin) {
|
|
140
140
|
inputData += chunk;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
if (!inputData.trim()) {
|
|
144
|
-
throw new Error(
|
|
144
|
+
throw new Error('No input provided');
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
// Parse input
|
|
@@ -149,7 +149,7 @@ async function main() {
|
|
|
149
149
|
|
|
150
150
|
// Validate input
|
|
151
151
|
if (!input.state || !input.events || !input.configPath) {
|
|
152
|
-
throw new Error(
|
|
152
|
+
throw new Error('Invalid input: must provide state, events, and configPath');
|
|
153
153
|
}
|
|
154
154
|
|
|
155
155
|
// Process step
|
|
@@ -159,10 +159,16 @@ async function main() {
|
|
|
159
159
|
console.log(JSON.stringify(result, null, 2));
|
|
160
160
|
process.exit(0);
|
|
161
161
|
} catch (error) {
|
|
162
|
-
console.error(
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
162
|
+
console.error(
|
|
163
|
+
JSON.stringify(
|
|
164
|
+
{
|
|
165
|
+
error: error instanceof Error ? error.message : String(error),
|
|
166
|
+
stack: error instanceof Error ? error.stack : undefined,
|
|
167
|
+
},
|
|
168
|
+
null,
|
|
169
|
+
2
|
|
170
|
+
)
|
|
171
|
+
);
|
|
166
172
|
process.exit(1);
|
|
167
173
|
}
|
|
168
174
|
}
|
package/src/cli/commands/auth.ts
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Authentication CLI Commands
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* Commands for authenticating with GitHub for Praxis Cloud access.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import * as fs from
|
|
8
|
-
import * as path from
|
|
9
|
-
import * as os from
|
|
10
|
-
import { authenticateWithDeviceFlow } from
|
|
11
|
-
import { createSponsorsClient } from
|
|
12
|
-
import type { AuthResult } from
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import { authenticateWithDeviceFlow } from '../../cloud/auth.js';
|
|
11
|
+
import { createSponsorsClient } from '../../cloud/sponsors.js';
|
|
12
|
+
import type { AuthResult } from '../../cloud/types.js';
|
|
13
13
|
|
|
14
|
-
const AUTH_DIR = path.join(os.homedir(),
|
|
15
|
-
const AUTH_FILE = path.join(AUTH_DIR,
|
|
16
|
-
const GITHUB_CLIENT_ID =
|
|
14
|
+
const AUTH_DIR = path.join(os.homedir(), '.praxis');
|
|
15
|
+
const AUTH_FILE = path.join(AUTH_DIR, 'auth.json');
|
|
16
|
+
const GITHUB_CLIENT_ID = 'Ov23liQxF7P0BqUxVXHk'; // Demo client ID (replace in production)
|
|
17
17
|
|
|
18
18
|
interface StoredAuth {
|
|
19
19
|
token: string;
|
|
@@ -30,11 +30,11 @@ interface StoredAuth {
|
|
|
30
30
|
function loadAuth(): StoredAuth | null {
|
|
31
31
|
try {
|
|
32
32
|
if (fs.existsSync(AUTH_FILE)) {
|
|
33
|
-
const data = fs.readFileSync(AUTH_FILE,
|
|
33
|
+
const data = fs.readFileSync(AUTH_FILE, 'utf-8');
|
|
34
34
|
return JSON.parse(data);
|
|
35
35
|
}
|
|
36
36
|
} catch (error) {
|
|
37
|
-
console.warn(
|
|
37
|
+
console.warn('Failed to load authentication:', error);
|
|
38
38
|
}
|
|
39
39
|
return null;
|
|
40
40
|
}
|
|
@@ -48,12 +48,12 @@ function saveAuth(auth: StoredAuth): void {
|
|
|
48
48
|
if (!fs.existsSync(AUTH_DIR)) {
|
|
49
49
|
fs.mkdirSync(AUTH_DIR, { recursive: true });
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
|
|
52
52
|
// Save with restricted permissions
|
|
53
53
|
fs.writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), { mode: 0o600 });
|
|
54
54
|
console.log(`\n✓ Authentication saved to ${AUTH_FILE}`);
|
|
55
55
|
} catch (error) {
|
|
56
|
-
console.error(
|
|
56
|
+
console.error('Failed to save authentication:', error);
|
|
57
57
|
throw error;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -67,7 +67,7 @@ function deleteAuth(): void {
|
|
|
67
67
|
fs.unlinkSync(AUTH_FILE);
|
|
68
68
|
}
|
|
69
69
|
} catch (error) {
|
|
70
|
-
console.warn(
|
|
70
|
+
console.warn('Failed to delete authentication:', error);
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -75,40 +75,42 @@ function deleteAuth(): void {
|
|
|
75
75
|
* Login command
|
|
76
76
|
*/
|
|
77
77
|
export async function loginCommand(options: { token?: string }): Promise<void> {
|
|
78
|
-
console.log(
|
|
79
|
-
console.log(
|
|
80
|
-
console.log(
|
|
81
|
-
|
|
78
|
+
console.log('\n╔═══════════════════════════════════════════════════╗');
|
|
79
|
+
console.log('║ Praxis Cloud Authentication ║');
|
|
80
|
+
console.log('╚═══════════════════════════════════════════════════╝\n');
|
|
81
|
+
|
|
82
82
|
// Check if already authenticated
|
|
83
83
|
const existingAuth = loadAuth();
|
|
84
84
|
if (existingAuth) {
|
|
85
|
-
console.log(
|
|
85
|
+
console.log('⚠ Already authenticated');
|
|
86
86
|
console.log(` User: ${existingAuth.userLogin}`);
|
|
87
|
-
console.log(
|
|
87
|
+
console.log(
|
|
88
|
+
` Authenticated at: ${new Date(existingAuth.authenticatedAt).toLocaleString()}\n`
|
|
89
|
+
);
|
|
88
90
|
console.log("Run 'praxis logout' to log out first.");
|
|
89
91
|
return;
|
|
90
92
|
}
|
|
91
|
-
|
|
93
|
+
|
|
92
94
|
let authResult: AuthResult;
|
|
93
|
-
|
|
95
|
+
|
|
94
96
|
if (options.token) {
|
|
95
97
|
// Use provided token
|
|
96
|
-
console.log(
|
|
97
|
-
|
|
98
|
+
console.log('🔐 Using provided personal access token...');
|
|
99
|
+
|
|
98
100
|
try {
|
|
99
|
-
const response = await fetch(
|
|
101
|
+
const response = await fetch('https://api.github.com/user', {
|
|
100
102
|
headers: {
|
|
101
103
|
Authorization: `Bearer ${options.token}`,
|
|
102
|
-
Accept:
|
|
104
|
+
Accept: 'application/vnd.github.v3+json',
|
|
103
105
|
},
|
|
104
106
|
});
|
|
105
|
-
|
|
107
|
+
|
|
106
108
|
if (!response.ok) {
|
|
107
109
|
throw new Error(`Invalid token: ${response.statusText}`);
|
|
108
110
|
}
|
|
109
|
-
|
|
110
|
-
const userData = await response.json() as any;
|
|
111
|
-
|
|
111
|
+
|
|
112
|
+
const userData = (await response.json()) as any;
|
|
113
|
+
|
|
112
114
|
authResult = {
|
|
113
115
|
success: true,
|
|
114
116
|
token: options.token,
|
|
@@ -121,42 +123,42 @@ export async function loginCommand(options: { token?: string }): Promise<void> {
|
|
|
121
123
|
},
|
|
122
124
|
};
|
|
123
125
|
} catch (error) {
|
|
124
|
-
console.error(
|
|
126
|
+
console.error('\n✗ Authentication failed');
|
|
125
127
|
console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
126
128
|
process.exit(1);
|
|
127
129
|
}
|
|
128
130
|
} else {
|
|
129
131
|
// Use device flow
|
|
130
|
-
console.log(
|
|
132
|
+
console.log('🔐 Authenticating with GitHub device flow...');
|
|
131
133
|
authResult = await authenticateWithDeviceFlow(GITHUB_CLIENT_ID);
|
|
132
134
|
}
|
|
133
|
-
|
|
135
|
+
|
|
134
136
|
if (!authResult.success || !authResult.token || !authResult.user) {
|
|
135
|
-
console.error(
|
|
137
|
+
console.error('\n✗ Authentication failed');
|
|
136
138
|
process.exit(1);
|
|
137
139
|
}
|
|
138
|
-
|
|
140
|
+
|
|
139
141
|
console.log(`✓ Authenticated as ${authResult.user.login}`);
|
|
140
|
-
|
|
142
|
+
|
|
141
143
|
// Check GitHub Sponsors status
|
|
142
|
-
console.log(
|
|
144
|
+
console.log('\n🔍 Checking GitHub Sponsors status...');
|
|
143
145
|
try {
|
|
144
146
|
const sponsorsClient = createSponsorsClient(authResult.token);
|
|
145
147
|
const subscription = await sponsorsClient.getSubscription(authResult.user.login);
|
|
146
|
-
|
|
148
|
+
|
|
147
149
|
console.log(`✓ Subscription tier: ${subscription.tier}`);
|
|
148
150
|
console.log(` Status: ${subscription.status}`);
|
|
149
151
|
console.log(` Provider: ${subscription.provider}`);
|
|
150
|
-
|
|
151
|
-
if (subscription.tier ===
|
|
152
|
-
console.log(
|
|
153
|
-
console.log(
|
|
152
|
+
|
|
153
|
+
if (subscription.tier === 'free') {
|
|
154
|
+
console.log('\n💡 Upgrade to a paid tier for more features!');
|
|
155
|
+
console.log(' Visit: https://github.com/sponsors/plures');
|
|
154
156
|
}
|
|
155
157
|
} catch (error) {
|
|
156
|
-
console.warn(
|
|
158
|
+
console.warn('\n⚠ Could not check Sponsors status');
|
|
157
159
|
console.warn(` Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
158
160
|
}
|
|
159
|
-
|
|
161
|
+
|
|
160
162
|
// Save authentication
|
|
161
163
|
const storedAuth: StoredAuth = {
|
|
162
164
|
token: authResult.token,
|
|
@@ -166,11 +168,11 @@ export async function loginCommand(options: { token?: string }): Promise<void> {
|
|
|
166
168
|
userEmail: authResult.user.email,
|
|
167
169
|
authenticatedAt: Date.now(),
|
|
168
170
|
};
|
|
169
|
-
|
|
171
|
+
|
|
170
172
|
saveAuth(storedAuth);
|
|
171
|
-
|
|
172
|
-
console.log(
|
|
173
|
-
console.log(
|
|
173
|
+
|
|
174
|
+
console.log('\n✓ Successfully logged in!');
|
|
175
|
+
console.log('\nNext steps:');
|
|
174
176
|
console.log(" • Use 'praxis cloud init' to set up cloud connection");
|
|
175
177
|
console.log(" • Use 'praxis whoami' to check your authentication");
|
|
176
178
|
console.log(" • Use 'praxis cloud status' to check subscription\n");
|
|
@@ -181,18 +183,18 @@ export async function loginCommand(options: { token?: string }): Promise<void> {
|
|
|
181
183
|
*/
|
|
182
184
|
export async function logoutCommand(): Promise<void> {
|
|
183
185
|
const auth = loadAuth();
|
|
184
|
-
|
|
186
|
+
|
|
185
187
|
if (!auth) {
|
|
186
|
-
console.log(
|
|
188
|
+
console.log('\n✗ Not currently logged in');
|
|
187
189
|
console.log(" Run 'praxis login' to authenticate\n");
|
|
188
190
|
return;
|
|
189
191
|
}
|
|
190
|
-
|
|
192
|
+
|
|
191
193
|
console.log(`\nLogging out user: ${auth.userLogin}...`);
|
|
192
|
-
|
|
194
|
+
|
|
193
195
|
deleteAuth();
|
|
194
|
-
|
|
195
|
-
console.log(
|
|
196
|
+
|
|
197
|
+
console.log('✓ Successfully logged out\n');
|
|
196
198
|
}
|
|
197
199
|
|
|
198
200
|
/**
|
|
@@ -200,17 +202,17 @@ export async function logoutCommand(): Promise<void> {
|
|
|
200
202
|
*/
|
|
201
203
|
export async function whoamiCommand(): Promise<void> {
|
|
202
204
|
const auth = loadAuth();
|
|
203
|
-
|
|
205
|
+
|
|
204
206
|
if (!auth) {
|
|
205
|
-
console.log(
|
|
207
|
+
console.log('\n✗ Not currently logged in');
|
|
206
208
|
console.log(" Run 'praxis login' to authenticate\n");
|
|
207
209
|
process.exit(1);
|
|
208
210
|
}
|
|
209
|
-
|
|
210
|
-
console.log(
|
|
211
|
-
console.log(
|
|
212
|
-
console.log(
|
|
213
|
-
|
|
211
|
+
|
|
212
|
+
console.log('\n╔═══════════════════════════════════════════════════╗');
|
|
213
|
+
console.log('║ Current Authentication ║');
|
|
214
|
+
console.log('╚═══════════════════════════════════════════════════╝\n');
|
|
215
|
+
|
|
214
216
|
console.log(`User: ${auth.userLogin}`);
|
|
215
217
|
if (auth.userName) {
|
|
216
218
|
console.log(`Name: ${auth.userName}`);
|
|
@@ -220,49 +222,51 @@ export async function whoamiCommand(): Promise<void> {
|
|
|
220
222
|
}
|
|
221
223
|
console.log(`User ID: ${auth.userId}`);
|
|
222
224
|
console.log(`Authenticated: ${new Date(auth.authenticatedAt).toLocaleString()}`);
|
|
223
|
-
|
|
225
|
+
|
|
224
226
|
// Check token validity
|
|
225
|
-
console.log(
|
|
227
|
+
console.log('\n🔍 Checking token validity...');
|
|
226
228
|
try {
|
|
227
|
-
const response = await fetch(
|
|
229
|
+
const response = await fetch('https://api.github.com/user', {
|
|
228
230
|
headers: {
|
|
229
231
|
Authorization: `Bearer ${auth.token}`,
|
|
230
|
-
Accept:
|
|
232
|
+
Accept: 'application/vnd.github.v3+json',
|
|
231
233
|
},
|
|
232
234
|
});
|
|
233
|
-
|
|
235
|
+
|
|
234
236
|
if (response.ok) {
|
|
235
|
-
console.log(
|
|
236
|
-
|
|
237
|
+
console.log('✓ Token is valid');
|
|
238
|
+
|
|
237
239
|
// Check subscription
|
|
238
|
-
console.log(
|
|
240
|
+
console.log('\n🔍 Checking subscription...');
|
|
239
241
|
const sponsorsClient = createSponsorsClient(auth.token);
|
|
240
242
|
const subscription = await sponsorsClient.getSubscription(auth.userLogin);
|
|
241
|
-
|
|
243
|
+
|
|
242
244
|
console.log(`Tier: ${subscription.tier}`);
|
|
243
245
|
console.log(`Status: ${subscription.status}`);
|
|
244
246
|
console.log(`Provider: ${subscription.provider}`);
|
|
245
|
-
console.log(
|
|
247
|
+
console.log('\nLimits:');
|
|
246
248
|
console.log(` Syncs/month: ${subscription.limits.maxSyncsPerMonth.toLocaleString()}`);
|
|
247
|
-
console.log(
|
|
249
|
+
console.log(
|
|
250
|
+
` Storage: ${(subscription.limits.maxStorageBytes / 1024 / 1024).toFixed(0)} MB`
|
|
251
|
+
);
|
|
248
252
|
console.log(` Apps: ${subscription.limits.maxApps}`);
|
|
249
|
-
console.log(` Team members: ${subscription.limits.maxTeamMembers ??
|
|
253
|
+
console.log(` Team members: ${subscription.limits.maxTeamMembers ?? 'Unlimited'}`);
|
|
250
254
|
console.log(` Support: ${subscription.limits.supportLevel}`);
|
|
251
255
|
} else {
|
|
252
|
-
console.log(
|
|
256
|
+
console.log('✗ Token is invalid or expired');
|
|
253
257
|
console.log(" Run 'praxis login' to re-authenticate");
|
|
254
258
|
}
|
|
255
259
|
} catch (error) {
|
|
256
|
-
console.error(
|
|
260
|
+
console.error('\n✗ Failed to check token validity');
|
|
257
261
|
console.error(` Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
258
262
|
}
|
|
259
|
-
|
|
263
|
+
|
|
260
264
|
console.log();
|
|
261
265
|
}
|
|
262
266
|
|
|
263
267
|
/**
|
|
264
268
|
* Get stored authentication token
|
|
265
|
-
*
|
|
269
|
+
*
|
|
266
270
|
* Used by other commands that need authentication
|
|
267
271
|
*/
|
|
268
272
|
export function getAuthToken(): string | null {
|