Closed m0ar closed 1 year ago
Presumably the Model being used here has accountRelation: SINGLE. We should still probably have a way to create documents via the CLI in Models like those though. @PaulLeCam @jpham2023
I wonder if we should remove these documents:*
commands rather than put more work on them? Theses interactions are supported by GraphiQL so these commands aren't really necessary anyway.
@PaulLeCam Can you provide an example of how to use GraphiQL for what @m0ar is trying to do?
We have the graphql:server
command that can run GraphiQL by setting the --graphiql
flag, and support mutations by providing the --did-private-key
value, so the full command would look like the following:
composedb graphql:server <path-to-runtime-composite.json> --graphiql --did-private-key=<base16-encoded private key string>
Then from the GraphiQL interface, there will be mutations to create documents for all the models included in the composite.
@PaulLeCam Thanks for the tip! I can't seem to get the server running with the graphql:server
command, it instantly crashes:
❯ npx @composedb/cli graphql:server --graphiql --did-private-key="$(<user1_seed.txt)" --ceramic-url="http://localhost:7007" src/__generated__/definition.json
ℹ Using DID did:key:z6MkrcKfxzEbVeFpmPrKHmjQWEDDocgxmfCtCSaZPMDWofS4
✖ Cannot convert undefined or null to object
@PaulLeCam The CLI is swallowing traces, but added some to find the actual error:
TypeError: Cannot convert undefined or null to object
at Function.entries (<anonymous>)
at SchemaBuilder._buildEnums (file:///home/m0ar/dev/desci/desci-composedb/node_modules/@composedb/runtime/dist/schema.js:277:45)
at SchemaBuilder.build (file:///home/m0ar/dev/desci/desci-composedb/node_modules/@composedb/runtime/dist/schema.js:178:14)
at createGraphQLSchema (file:///home/m0ar/dev/desci/desci-composedb/node_modules/@composedb/runtime/dist/schema.js:872:38)
at serveGraphQL (file:///home/m0ar/dev/desci/desci-composedb/node_modules/@composedb/devtools-node/dist/server.js:22:17)
at GraphQLServer.run (file:///home/m0ar/dev/desci/desci-composedb/node_modules/@composedb/cli/dist/commands/graphql/server.js:28:35)
at async GraphQLServer._run (/home/m0ar/dev/desci/desci-composedb/node_modules/@oclif/core/lib/command.js:117:22)
at async Config.runCommand (/home/m0ar/dev/desci/desci-composedb/node_modules/@oclif/core/lib/config/config.js:314:25)
at async run (/home/m0ar/dev/desci/desci-composedb/node_modules/@oclif/core/lib/main.js:89:16)
It's this line in node_modules/@composedb/runtime/dist/schema.js
that gets invoked in build()
, and since .enums
is undefined
, Object.entries
throws. Hope this context helps.
_buildEnums() {
for (const [name, values] of Object.entries(_class_private_field_get(this, _def).enums)){
[...]
}
Fixing this to get around it just hits the same problem in _buildObjects
so idk what's going on here...
Can you make sure you're using the latest version of the CLI and packages (v0.5.0) please? If your runtime composite definition was created with an older version, please also make sure to recreate it with the latest one.
@PaulLeCam I'm on latest. Have tried re-generating without luck.
├── @ceramicnetwork/cli@2.38.0
├── @ceramicnetwork/streamid@2.17.0
├── @composedb/cli@0.5.0
├── @composedb/devtools-node@0.5.0
├── @composedb/devtools@0.5.0
├── @composedb/graphql-scalars@0.5.0
├── @datamodels/identity-profile-basic@0.2.0
├── @didtools/pkh-ethereum@0.4.1
├── @types/react@18.2.21
├── did-session@2.0.1
├── eslint-config-next@13.4.19
├── eslint@8.48.0
├── graphql@16.8.0
├── next@13.4.19
├── react-icons@4.10.1
└── sass@1.66.1
Can you share your encoded and compiled composites please? The enums
object should always be present in the compiled composites so it looks like there a problem with how it's generated.
@PaulLeCam Sure thing! Are these files what you mean? https://gist.github.com/m0ar/ed8ac4961bcfc68cba5f5be3f6783dfd
Yes, thanks!
So here your definition.json
file is the source encoded definition (that contains the signed models), what the server needs is the runtime definition (that contains the necessary data to generate the graph), you need to use composedb composite:compile
to generate this file (see https://composedb.js.org/docs/0.5.x/guides/data-modeling/composites#compiling-composites).
The output should be similar to what you have in your definition.js
file, except as JSON rather than a JS export.
Then it's this runtime JSON file you need to use with the graphql:server
command.
@PaulLeCam All right, got it! FYI, this file format is what is returned by writeEncodedCompositeRuntime
in @composedb/devtools-node
which made the situation a bit confusing as I assumed they would be the same :)
Thanks for the help! :cupcake:
Description
Trying to create a document based on a locally deployed model always errors saying it must not have content:
Using an empty string instead yields the error
SyntaxError: Unexpected end of JSON input
, which makes sense since it isn't valid JSON.Omitting the arg is not valid:
Technical Information
Clarify CLI documentation, or fix a bug :bug: