ceramicstudio / js-composedb

ComposeDB is a decentralized GraphQL database built on Ceramic Network
https://composedb.js.org
Other
91 stars 35 forks source link

CLI command `document:create` fails due to deterministic genesis commit constrains #166

Closed m0ar closed 1 year ago

m0ar commented 1 year ago

Description

Trying to create a document based on a locally deployed model always errors saying it must not have content:

❯ npx @composedb/cli --version
@composedb/cli/0.5.0 linux-x64 node-v16.13.1

❯ npx @composedb/cli document:create \
  kjzl6hvfrbw6c7jrhoqzxi7set6yaz3zxg4rbhs6j23okxx1ifk217ermjd3e6l \
  "{}"  \
  -c http://localhost:7007 \
  --did-private-key="$(<keyfile)"

ℹ Using DID did:key:z6Mkn1YLPvknNdqJX1imbNoR22SdTggVKwwRskzbDGLHBG2H
✖ HTTP request to 'http://localhost:7007/api/v0/streams' failed with status 'Internal Server Error': 
  {"error":"Deterministic genesis commits for ModelInstanceDocuments 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:

 ›   Error: Missing 1 required arg:
 ›   content  Content of the created model instance document (JSON encoded as string)

Technical Information

Clarify CLI documentation, or fix a bug :bug:

stbrody commented 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

PaulLeCam commented 1 year ago

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.

oed commented 1 year ago

@PaulLeCam Can you provide an example of how to use GraphiQL for what @m0ar is trying to do?

PaulLeCam commented 1 year ago

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.

m0ar commented 1 year ago

@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
This is the runtime composite, which works fine with GraphiQL when running with `devtools-node` inside my webapp: ```json { "version": "1.0", "models": { "kjzl6hvfrbw6c7jrhoqzxi7set6yaz3zxg4rbhs6j23okxx1ifk217ermjd3e6l": [ { "jws": { "payload": "AXESIFfLTHHz0jS3hcr7f4Na74QQnVdnBjG6R_yO8opojCr4", "signatures": [ { "signature": "7BhZZFDVypNT9LI95YOVdBApxVr5kwVPsq36A5o1iQhlI2USlrIxyoBfKr1z0nSUeZU8IPu0PE7OYFVcM1LIDg", "protected": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJII3o2TWtuMVlMUHZrbk5kcUpYMWltYk5vUjIyU2RUZ2dWS3d3UnNremJER0xIQkcySCJ9" } ], "link": "bafyreicxznghd46sgs3ylsx3p6bvv34eccovozyggg5ep7eo6kfgrdbk7a" }, "linkedBlock": "omRkYXRhp2RuYW1lZ1Byb2ZpbGVldmlld3OhZW93bmVyoWR0eXBlb2RvY3VtZW50QWNjb3VudGZzY2hlbWGlZHR5cGVmb2JqZWN0ZyRzY2hlbWF4LGh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1haHJlcXVpcmVkgWtkaXNwbGF5TmFtZWpwcm9wZXJ0aWVzomVvcmNpZKJkdHlwZWZzdHJpbmdpbWF4TGVuZ3RoGGRrZGlzcGxheU5hbWWiZHR5cGVmc3RyaW5naW1heExlbmd0aBj6dGFkZGl0aW9uYWxQcm9wZXJ0aWVz9Gd2ZXJzaW9uYzEuMGlyZWxhdGlvbnOga2Rlc2NyaXB0aW9ucUFuIGF1dGhvciBwcm9maWxlb2FjY291bnRSZWxhdGlvbqFkdHlwZWZzaW5nbGVmaGVhZGVyo2NzZXBlbW9kZWxlbW9kZWxSzgEEAXFxCwAJaG1vZGVsLXYxa2NvbnRyb2xsZXJzgXg4ZGlkOmtleTp6Nk1rbjFZTFB2a25OZHFKWDFpbWJOb1IyMlNkVGdnVkt3d1Jza3piREdMSEJHMkg=" } ], "kjzl6hvfrbw6cb83zf34oxsxpysbfs8i0282m8t1s16d9almesve1uw68jzx9ut": [ { "jws": { "payload": "AXESIBI3NnyvdC6-qTH_zupTdI-jLGUy1GIIf3GPeFEM7HMS", "signatures": [ { "signature": "SnKS0Bp9GeQW7yGmCEtE6b4RtkauifS8KCuvy6bdqGrs5Mu1uVTmdr0cMjx4OqXx0ToJirNPg9BGTqFQM6pKAg", "protected": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJII3o2TWtuMVlMUHZrbk5kcUpYMWltYk5vUjIyU2RUZ2dWS3d3UnNremJER0xIQkcySCJ9" } ], "link": "bafyreiasg43hzl3uf27ksmp7z3vfg5epumwgkmwumieh64mppbiqz3dtci" }, "linkedBlock": "omRkYXRhp2RuYW1lblJlc2VhcmNoT2JqZWN0ZXZpZXdzoWVvd25lcqFkdHlwZW9kb2N1bWVudEFjY291bnRmc2NoZW1hpmR0eXBlZm9iamVjdGUkZGVmc6FxSW50ZXJQbGFuZXRhcnlDSUSjZHR5cGVmc3RyaW5nZXRpdGxlcUludGVyUGxhbmV0YXJ5Q0lEaW1heExlbmd0aBhkZyRzY2hlbWF4LGh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1haHJlcXVpcmVkgmV0aXRsZWhtYW5pZmVzdGpwcm9wZXJ0aWVzomV0aXRsZaJkdHlwZWZzdHJpbmdpbWF4TGVuZ3RoGPpobWFuaWZlc3ShZCRyZWZ4GSMvJGRlZnMvSW50ZXJQbGFuZXRhcnlDSUR0YWRkaXRpb25hbFByb3BlcnRpZXP0Z3ZlcnNpb25jMS4waXJlbGF0aW9uc6BrZGVzY3JpcHRpb25xQSByZXNlYXJjaCBvYmplY3RvYWNjb3VudFJlbGF0aW9uoWR0eXBlZGxpc3RmaGVhZGVyo2NzZXBlbW9kZWxlbW9kZWxSzgEEAXFxCwAJaG1vZGVsLXYxa2NvbnRyb2xsZXJzgXg4ZGlkOmtleTp6Nk1rbjFZTFB2a25OZHFKWDFpbWJOb1IyMlNkVGdnVkt3d1Jza3piREdMSEJHMkg=" } ], "kjzl6hvfrbw6c9bjzxorpubsfu4cua0z4zqda10wa4qnqe6naqvoxwina5e7sa0": [ { "jws": { "payload": "AXESIPAHTsBhq7PChvCkkrs5HOt0Xiht_5OjE56I5bPH89ki", "signatures": [ { "signature": "K4PiHcfPkir1oR21x0ylmM3FIdfPnr8-Q833AGIWTYBZpCnVqYjsH6560GcsxE0fWQ1v_BZHajvvJG614abnAw", "protected": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJII3o2TWtuMVlMUHZrbk5kcUpYMWltYk5vUjIyU2RUZ2dWS3d3UnNremJER0xIQkcySCJ9" } ], "link": "bafyreihqa5hmaynlwpbin4fesk5tshhlorpcq3p7sorrhhui4wz4p46zei" }, "linkedBlock": "omRkYXRhp2RuYW1lbE9yZ2FuaXphdGlvbmV2aWV3c6FmYXV0aG9yoWR0eXBlb2RvY3VtZW50QWNjb3VudGZzY2hlbWGmZHR5cGVmb2JqZWN0ZSRkZWZzoWpHcmFwaFFMRElEpGR0eXBlZnN0cmluZ2V0aXRsZWpHcmFwaFFMRElEZ3BhdHRlcm54j15kaWQ6W2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0rOlthLXpBLVowLTkuISMkJSYnKitcLz0/Xl9ge3x9fi1dKjo/W2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0qOj9bYS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXSokaW1heExlbmd0aBhkZyRzY2hlbWF4LGh0dHBzOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LzIwMjAtMTIvc2NoZW1haHJlcXVpcmVkgWRuYW1lanByb3BlcnRpZXOiZG5hbWWiZHR5cGVmc3RyaW5naW1heExlbmd0aBj6Z21lbWJlcnOjZHR5cGVlYXJyYXllaXRlbXOhZCRyZWZyIy8kZGVmcy9HcmFwaFFMRElEaG1heEl0ZW1zGgABhqB0YWRkaXRpb25hbFByb3BlcnRpZXP0Z3ZlcnNpb25jMS4waXJlbGF0aW9uc6BrZGVzY3JpcHRpb25vQW4gb3JnYW5pemF0aW9ub2FjY291bnRSZWxhdGlvbqFkdHlwZWRsaXN0ZmhlYWRlcqNjc2VwZW1vZGVsZW1vZGVsUs4BBAFxcQsACWhtb2RlbC12MWtjb250cm9sbGVyc4F4OGRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJI" } ], "kjzl6hvfrbw6c9m63sg067cgekv8nharkqtxjz1ngkvtq2o5gkvfjdddu1wauxr": [ { "jws": { "payload": "AXESIM1TrhEWcscFrHcf-t7erivC6N3BfsOO0KaKOzR7PrEO", "signatures": [ { "signature": "i7gm3Tb4-lV3oWeAP6LQLCmhHrxjMKQ7yR3ee7FPW5ulje99m_r_lwRtzL66fbUL7MtenUmnlqNxPf_pZqSjDg", "protected": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJII3o2TWtuMVlMUHZrbk5kcUpYMWltYk5vUjIyU2RUZ2dWS3d3UnNremJER0xIQkcySCJ9" } ], "link": "bafyreignkoxbcftsy4c2y5y77lpn5lrlylun3ql6yohnbjukhm2hwpvrby" }, "linkedBlock": "omRkYXRhp2RuYW1laVN0YXRlbWVudGV2aWV3c6FqbWFpbnRhaW5lcqFkdHlwZW9kb2N1bWVudEFjY291bnRmc2NoZW1hpWR0eXBlZm9iamVjdGckc2NoZW1heCxodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYWhyZXF1aXJlZIJldGl0bGVrZGVzY3JpcHRpb25qcHJvcGVydGllc6JldGl0bGWiZHR5cGVmc3RyaW5naW1heExlbmd0aBhka2Rlc2NyaXB0aW9uomR0eXBlZnN0cmluZ2ltYXhMZW5ndGgZA+h0YWRkaXRpb25hbFByb3BlcnRpZXP0Z3ZlcnNpb25jMS4waXJlbGF0aW9uc6BrZGVzY3JpcHRpb254IEEgcmV1c2FibGUgYXR0ZXN0YXRpb24gc3RhdGVtZW50b2FjY291bnRSZWxhdGlvbqFkdHlwZWRsaXN0ZmhlYWRlcqNjc2VwZW1vZGVsZW1vZGVsUs4BBAFxcQsACWhtb2RlbC12MWtjb250cm9sbGVyc4F4OGRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJI" } ], "kjzl6hvfrbw6c8ebt6gngknodti2lkv9181o1m2php6w8klcdveafnar3tkah2q": [ { "jws": { "payload": "AXESIFsuVylUPOmgjtuwZq5ntUzA1405Nuv-7MsjfDmhJNFh", "signatures": [ { "signature": "utlXZnk81z_sMpHEXRrqEyiUIevX2cxJYL_LVRXkcOuEn2V7h9xq4DvI08Y_hOx_d_kwWdBd-rVX3PEJi-acAg", "protected": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJII3o2TWtuMVlMUHZrbk5kcUpYMWltYk5vUjIyU2RUZ2dWS3d3UnNremJER0xIQkcySCJ9" } ], "link": "bafyreic3fzlssvb45gqi5w5qm2xgpnkmydly2ojw5p7ozszdpq42cjgrme" }, "linkedBlock": "omRkYXRhp2RuYW1lb1VzZXJBdHRlc3RhdGlvbmV2aWV3c6Jmc291cmNloWR0eXBlb2RvY3VtZW50QWNjb3VudGlzdGF0ZW1lbnSjZHR5cGVwcmVsYXRpb25Eb2N1bWVudGVtb2RlbHg/a2p6bDZodmZyYnc2YzltNjNzZzA2N2NnZWt2OG5oYXJrcXR4anoxbmdrdnRxMm81Z2t2ZmpkZGR1MXdhdXhyaHByb3BlcnR5a3N0YXRlbWVudElkZnNjaGVtYaZkdHlwZWZvYmplY3RlJGRlZnOiakdyYXBoUUxESUSkZHR5cGVmc3RyaW5nZXRpdGxlakdyYXBoUUxESURncGF0dGVybniPXmRpZDpbYS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXSs6W2EtekEtWjAtOS4hIyQlJicqK1wvPT9eX2B7fH1+LV0qOj9bYS16QS1aMC05LiEjJCUmJyorXC89P15fYHt8fX4tXSo6P1thLXpBLVowLTkuISMkJSYnKitcLz0/Xl9ge3x9fi1dKiRpbWF4TGVuZ3RoGGRvQ2VyYW1pY1N0cmVhbUlEo2R0eXBlZnN0cmluZ2V0aXRsZW9DZXJhbWljU3RyZWFtSURpbWF4TGVuZ3RoGGRnJHNjaGVtYXgsaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWFocmVxdWlyZWSCZnRhcmdldGtzdGF0ZW1lbnRJZGpwcm9wZXJ0aWVzo2Z0YXJnZXShZCRyZWZyIy8kZGVmcy9HcmFwaFFMRElEZ3Jldm9rZWShZHR5cGVnYm9vbGVhbmtzdGF0ZW1lbnRJZKFkJHJlZncjLyRkZWZzL0NlcmFtaWNTdHJlYW1JRHRhZGRpdGlvbmFsUHJvcGVydGllc/RndmVyc2lvbmMxLjBpcmVsYXRpb25zomZ0YXJnZXShZHR5cGVnYWNjb3VudGtzdGF0ZW1lbnRJZKJkdHlwZWhkb2N1bWVudGVtb2RlbHg/a2p6bDZodmZyYnc2YzltNjNzZzA2N2NnZWt2OG5oYXJrcXR4anoxbmdrdnRxMm81Z2t2ZmpkZGR1MXdhdXhya2Rlc2NyaXB0aW9ucFVzZXIgYXR0ZXN0YXRpb25vYWNjb3VudFJlbGF0aW9uoWR0eXBlZGxpc3RmaGVhZGVyo2NzZXBlbW9kZWxlbW9kZWxSzgEEAXFxCwAJaG1vZGVsLXYxa2NvbnRyb2xsZXJzgXg4ZGlkOmtleTp6Nk1rbjFZTFB2a25OZHFKWDFpbWJOb1IyMlNkVGdnVkt3d1Jza3piREdMSEJHMkg=" } ], "kjzl6hvfrbw6caoka8lrrc0ntvqd2vs6h4mztd6eszk748avqdgifong027rac9": [ { "jws": { "payload": "AXESIHDtrOB-HYoZRbL8dqHmjuVQMawbQX-nKkuQo7noZDAB", "signatures": [ { "signature": "VO8BSGEph0ANOjNEUwshRqPqwGE0woQlAKujgCNByf5cXrA4Xailym2KETO7HhUCJ4JN-O0Kf6RTzVfQBx9XBg", "protected": "eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJII3o2TWtuMVlMUHZrbk5kcUpYMWltYk5vUjIyU2RUZ2dWS3d3UnNremJER0xIQkcySCJ9" } ], "link": "bafyreidq5wwoa7q5rimulmx4o2q6ndxfkay2yg2bp6tsus4quo46qzbqae" }, "linkedBlock": "omRkYXRhp2RuYW1leBlSZXNlYXJjaE9iamVjdEF0dGVzdGF0aW9uZXZpZXdzo2Zzb3VyY2WhZHR5cGVvZG9jdW1lbnRBY2NvdW50ZnRhcmdldKNkdHlwZXByZWxhdGlvbkRvY3VtZW50ZW1vZGVseD9ranpsNmh2ZnJidzZjYjgzemYzNG94c3hweXNiZnM4aTAyODJtOHQxczE2ZDlhbG1lc3ZlMXV3Njhqeng5dXRocHJvcGVydHlodGFyZ2V0SWRpc3RhdGVtZW50o2R0eXBlcHJlbGF0aW9uRG9jdW1lbnRlbW9kZWx4P2tqemw2aHZmcmJ3NmM5bTYzc2cwNjdjZ2VrdjhuaGFya3F0eGp6MW5na3Z0cTJvNWdrdmZqZGRkdTF3YXV4cmhwcm9wZXJ0eWtzdGF0ZW1lbnRJZGZzY2hlbWGmZHR5cGVmb2JqZWN0ZSRkZWZzoW9DZXJhbWljU3RyZWFtSUSjZHR5cGVmc3RyaW5nZXRpdGxlb0NlcmFtaWNTdHJlYW1JRGltYXhMZW5ndGgYZGckc2NoZW1heCxodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYWhyZXF1aXJlZIJodGFyZ2V0SWRrc3RhdGVtZW50SWRqcHJvcGVydGllc6NncmV2b2tlZKFkdHlwZWdib29sZWFuaHRhcmdldElkoWQkcmVmdyMvJGRlZnMvQ2VyYW1pY1N0cmVhbUlEa3N0YXRlbWVudElkoWQkcmVmdyMvJGRlZnMvQ2VyYW1pY1N0cmVhbUlEdGFkZGl0aW9uYWxQcm9wZXJ0aWVz9Gd2ZXJzaW9uYzEuMGlyZWxhdGlvbnOiaHRhcmdldElkomR0eXBlaGRvY3VtZW50ZW1vZGVseD9ranpsNmh2ZnJidzZjYjgzemYzNG94c3hweXNiZnM4aTAyODJtOHQxczE2ZDlhbG1lc3ZlMXV3Njhqeng5dXRrc3RhdGVtZW50SWSiZHR5cGVoZG9jdW1lbnRlbW9kZWx4P2tqemw2aHZmcmJ3NmM5bTYzc2cwNjdjZ2VrdjhuaGFya3F0eGp6MW5na3Z0cTJvNWdrdmZqZGRkdTF3YXV4cmtkZXNjcmlwdGlvbngbUmVzZWFyY2ggb2JqZWN0IGF0dGVzdGF0aW9ub2FjY291bnRSZWxhdGlvbqFkdHlwZWRsaXN0ZmhlYWRlcqNjc2VwZW1vZGVsZW1vZGVsUs4BBAFxcQsACWhtb2RlbC12MWtjb250cm9sbGVyc4F4OGRpZDprZXk6ejZNa24xWUxQdmtuTmRxSlgxaW1iTm9SMjJTZFRnZ1ZLd3dSc2t6YkRHTEhCRzJI" } ] }, "indices": { "Profile": [ { "fields": [ { "path": [ "orcid" ] } ] } ], "ResearchObject": [ { "fields": [ { "path": [ "title" ] } ] } ], "Organization": [ { "fields": [ { "path": [ "name" ] } ] } ], "Statement": [ { "fields": [ { "path": [ "title" ] } ] } ], "kjzl6hvfrbw6c9m63sg067cgekv8nharkqtxjz1ngkvtq2o5gkvfjdddu1wauxr": [], "UserAttestation": [ { "fields": [ { "path": [ "revoked" ] } ] }, { "fields": [ { "path": [ "statementId" ] } ] } ], "kjzl6hvfrbw6cb83zf34oxsxpysbfs8i0282m8t1s16d9almesve1uw68jzx9ut": [], "ResearchObjectAttestation": [ { "fields": [ { "path": [ "revoked" ] } ] }, { "fields": [ { "path": [ "targetId" ] } ] }, { "fields": [ { "path": [ "statementId" ] } ] } ], "kjzl6hvfrbw6caoka8lrrc0ntvqd2vs6h4mztd6eszk748avqdgifong027rac9": [], "kjzl6hvfrbw6c8ebt6gngknodti2lkv9181o1m2php6w8klcdveafnar3tkah2q": [], "kjzl6hvfrbw6c7jrhoqzxi7set6yaz3zxg4rbhs6j23okxx1ifk217ermjd3e6l": [] }, "aliases": {}, "views": { "account": {}, "root": {}, "models": { "kjzl6hvfrbw6c9m63sg067cgekv8nharkqtxjz1ngkvtq2o5gkvfjdddu1wauxr": {}, "kjzl6hvfrbw6cb83zf34oxsxpysbfs8i0282m8t1s16d9almesve1uw68jzx9ut": { "attestations": { "type": "relationFrom", "model": "kjzl6hvfrbw6caoka8lrrc0ntvqd2vs6h4mztd6eszk748avqdgifong027rac9", "property": "targetId" } }, "kjzl6hvfrbw6caoka8lrrc0ntvqd2vs6h4mztd6eszk748avqdgifong027rac9": {}, "kjzl6hvfrbw6c8ebt6gngknodti2lkv9181o1m2php6w8klcdveafnar3tkah2q": {}, "kjzl6hvfrbw6c7jrhoqzxi7set6yaz3zxg4rbhs6j23okxx1ifk217ermjd3e6l": { "researchObjects": { "type": "relationFrom", "model": "kjzl6hvfrbw6cb83zf34oxsxpysbfs8i0282m8t1s16d9almesve1uw68jzx9ut", "property": "owner" }, "recievedAttestations": { "type": "relationFrom", "model": "kjzl6hvfrbw6c8ebt6gngknodti2lkv9181o1m2php6w8klcdveafnar3tkah2q", "property": "targetId" } } } } } ```
m0ar commented 1 year ago

@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)
m0ar commented 1 year ago

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...

PaulLeCam commented 1 year ago

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.

m0ar commented 1 year ago

@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
PaulLeCam commented 1 year ago

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.

m0ar commented 1 year ago

@PaulLeCam Sure thing! Are these files what you mean? https://gist.github.com/m0ar/ed8ac4961bcfc68cba5f5be3f6783dfd

PaulLeCam commented 1 year ago

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.

m0ar commented 1 year ago

@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: