@ourofoundation/ouro-js 3.5.0 → 3.5.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.
Files changed (87) hide show
  1. package/dist/chunk-3UWDQLTN.js +2 -0
  2. package/dist/chunk-3UWDQLTN.js.map +1 -0
  3. package/dist/{chunk-XWXLCG4E.cjs → chunk-6FG474SV.cjs} +2 -2
  4. package/dist/{chunk-XWXLCG4E.cjs.map → chunk-6FG474SV.cjs.map} +1 -1
  5. package/dist/{chunk-BQ5WODME.cjs → chunk-6XQFD2Z2.cjs} +2 -2
  6. package/dist/{chunk-BQ5WODME.cjs.map → chunk-6XQFD2Z2.cjs.map} +1 -1
  7. package/dist/chunk-DC6TYS3A.cjs +2 -0
  8. package/dist/chunk-DC6TYS3A.cjs.map +1 -0
  9. package/dist/{chunk-Z3ALIFYO.js → chunk-EK5P7FST.js} +2 -2
  10. package/dist/{chunk-Z3ALIFYO.js.map → chunk-EK5P7FST.js.map} +1 -1
  11. package/dist/{chunk-QT3A4ULM.cjs → chunk-FRMPLGE4.cjs} +2 -2
  12. package/dist/{chunk-QT3A4ULM.cjs.map → chunk-FRMPLGE4.cjs.map} +1 -1
  13. package/dist/{chunk-6YF2RSXS.js → chunk-G3VMEPTP.js} +2 -2
  14. package/dist/{chunk-6YF2RSXS.js.map → chunk-G3VMEPTP.js.map} +1 -1
  15. package/dist/{chunk-CONKY65O.cjs → chunk-HN7Y7VMJ.cjs} +2 -2
  16. package/dist/{chunk-CONKY65O.cjs.map → chunk-HN7Y7VMJ.cjs.map} +1 -1
  17. package/dist/{chunk-JKTQY4RU.js → chunk-M2JJPDBW.js} +2 -2
  18. package/dist/{chunk-JKTQY4RU.js.map → chunk-M2JJPDBW.js.map} +1 -1
  19. package/dist/chunk-NJQ5YWYJ.cjs +2 -0
  20. package/dist/{chunk-NEINJFFK.cjs.map → chunk-NJQ5YWYJ.cjs.map} +1 -1
  21. package/dist/chunk-OBWPO2QT.cjs +2 -0
  22. package/dist/chunk-OBWPO2QT.cjs.map +1 -0
  23. package/dist/{chunk-JW7FACNZ.cjs → chunk-OFDJA6ZW.cjs} +2 -2
  24. package/dist/{chunk-JW7FACNZ.cjs.map → chunk-OFDJA6ZW.cjs.map} +1 -1
  25. package/dist/chunk-OS542EYD.js +2 -0
  26. package/dist/chunk-OS542EYD.js.map +1 -0
  27. package/dist/{chunk-IP4OVRZB.cjs → chunk-ROMY5WNQ.cjs} +2 -2
  28. package/dist/chunk-ROMY5WNQ.cjs.map +1 -0
  29. package/dist/chunk-SR5UZ4NP.js +2 -0
  30. package/dist/chunk-SR5UZ4NP.js.map +1 -0
  31. package/dist/{chunk-B4225TEG.js → chunk-VJJLRHOX.js} +2 -2
  32. package/dist/{chunk-B4225TEG.js.map → chunk-VJJLRHOX.js.map} +1 -1
  33. package/dist/{chunk-7F26V24D.js → chunk-W5UCZ73B.js} +2 -2
  34. package/dist/{chunk-7F26V24D.js.map → chunk-W5UCZ73B.js.map} +1 -1
  35. package/dist/{chunk-BFBGVGNF.js → chunk-XQQVHVWP.js} +2 -2
  36. package/dist/{chunk-BFBGVGNF.js.map → chunk-XQQVHVWP.js.map} +1 -1
  37. package/dist/index.cjs +1 -1
  38. package/dist/index.d.cts +1 -1
  39. package/dist/index.d.ts +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/schema/assets.cjs +1 -1
  42. package/dist/schema/assets.d.cts +1 -0
  43. package/dist/schema/assets.d.ts +1 -0
  44. package/dist/schema/assets.js +1 -1
  45. package/dist/schema/comments.cjs +1 -1
  46. package/dist/schema/comments.d.cts +4 -0
  47. package/dist/schema/comments.d.ts +4 -0
  48. package/dist/schema/comments.js +1 -1
  49. package/dist/schema/conversations.cjs +1 -1
  50. package/dist/schema/conversations.d.cts +1 -0
  51. package/dist/schema/conversations.d.ts +1 -0
  52. package/dist/schema/conversations.js +1 -1
  53. package/dist/schema/datasets.cjs +1 -1
  54. package/dist/schema/datasets.d.cts +177 -1
  55. package/dist/schema/datasets.d.ts +177 -1
  56. package/dist/schema/datasets.js +1 -1
  57. package/dist/schema/files.cjs +1 -1
  58. package/dist/schema/files.d.cts +4 -0
  59. package/dist/schema/files.d.ts +4 -0
  60. package/dist/schema/files.js +1 -1
  61. package/dist/schema/posts.cjs +1 -1
  62. package/dist/schema/posts.d.cts +7 -2
  63. package/dist/schema/posts.d.ts +7 -2
  64. package/dist/schema/posts.js +1 -1
  65. package/dist/schema/quests.cjs +1 -1
  66. package/dist/schema/quests.d.cts +4 -0
  67. package/dist/schema/quests.d.ts +4 -0
  68. package/dist/schema/quests.js +1 -1
  69. package/dist/schema/services.cjs +1 -1
  70. package/dist/schema/services.d.cts +7 -0
  71. package/dist/schema/services.d.ts +7 -0
  72. package/dist/schema/services.js +1 -1
  73. package/dist/utils/quest-submission.cjs +1 -1
  74. package/dist/utils/quest-submission.js +1 -1
  75. package/package.json +1 -1
  76. package/dist/chunk-G2MXCB7Q.js +0 -2
  77. package/dist/chunk-G2MXCB7Q.js.map +0 -1
  78. package/dist/chunk-IP4OVRZB.cjs.map +0 -1
  79. package/dist/chunk-MH4A7XAY.cjs +0 -2
  80. package/dist/chunk-MH4A7XAY.cjs.map +0 -1
  81. package/dist/chunk-NEINJFFK.cjs +0 -2
  82. package/dist/chunk-U3F23ASS.js +0 -2
  83. package/dist/chunk-U3F23ASS.js.map +0 -1
  84. package/dist/chunk-WUC5AUUJ.cjs +0 -2
  85. package/dist/chunk-WUC5AUUJ.cjs.map +0 -1
  86. package/dist/chunk-Y6AKG4FJ.js +0 -2
  87. package/dist/chunk-Y6AKG4FJ.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import {b,c,d,a as a$1}from'./chunk-SR5UZ4NP.js';import {a}from'./chunk-WRHPQNEL.js';import {object,enum as _enum,uuid,string,number,record,optional,array,literal,nullable,any}from'zod';var S=object({type:string(),size:number(),path:string(),extension:string(),name:string(),id:uuid(),bucket:_enum(["public-files","files"])}),D=record(string(),object({asset_type:optional(a)})),x=object({table_name:string(),schema:literal("datasets").default("datasets"),columns:array(string()),asset_refs:optional(nullable(D))}),g=object({column_name:string(),data_type:string(),fk_constraint_name:optional(nullable(string())),foreign_table_schema:optional(nullable(string())),foreign_table_name:optional(nullable(string())),foreign_column_name:optional(nullable(string())),semantic_type:optional(nullable(literal("asset_ref"))),asset_type:optional(nullable(a))}),F=object({asset_id:uuid(),asset_type:a,name:nullable(string()),web_url:nullable(string())}),v=record(string(),record(string(),F)),f=x.extend(b.partial().shape),R=c.extend({asset_type:literal("dataset").default("dataset"),metadata:f.extend({...S.partial().shape}),preview:array(record(string(),any()))}),C=d.extend({asset_type:literal("dataset").default("dataset"),metadata:f.extend({...S.shape}),preview:array(record(string(),any()))}).transform(o=>a$1(o)),w=d.extend({asset_type:literal("dataset").default("dataset"),metadata:f,preview:array(record(string(),any()))}).transform(o=>a$1(o)),E=R.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true,is_pinned_in_team:true}).extend({asset_type:literal("dataset").default("dataset"),last_updated:string().default(()=>new Date().toISOString())}).transform(o=>a$1(o));export{D as a,g as b,F as c,v as d,R as e,C as f,w as g,E as h};//# sourceMappingURL=chunk-3UWDQLTN.js.map
2
+ //# sourceMappingURL=chunk-3UWDQLTN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema/datasets.ts"],"names":["DatasetFromFileMetadataSchema","object","string","number","uuid","zodEnum","DatasetAssetRefsSchema","record","optional","AssetTypeSchema","BaseDatasetMetadataSchema","literal","array","nullable","EnrichedDatasetSchemaFieldSchema","ResolvedAssetRefSchema","ResolvedAssetRefsSchema","DatasetMetadataSchema","AssetMetadataSchema","DatasetSchema","AssetSchema","any","CreateDatasetFromFileSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","CreateDatasetFromSchemaSchema","updateDatasetSchema"],"mappings":"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","file":"chunk-3UWDQLTN.js","sourcesContent":["import {\n object,\n string,\n uuid,\n number,\n array,\n literal,\n record,\n optional,\n nullable,\n type z,\n any,\n enum as zodEnum\n} from \"zod\";\n\nimport {\n AssetSchema,\n CreateAssetSchema,\n AssetMetadataSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\n\nconst DatasetFromFileMetadataSchema = object({\n type: string(),\n size: number(),\n path: string(),\n extension: string(),\n name: string(),\n id: uuid(), // storage file object id,\n bucket: zodEnum([\"public-files\", \"files\"]),\n});\n\n/**\n * Per-column asset reference declarations.\n *\n * A column becomes an asset reference when the backend adds a real Postgres FK\n * to public.assets(id). The optional asset_type refines validation/display.\n */\nconst DatasetAssetRefsSchema = record(\n string(),\n object({\n asset_type: optional(AssetTypeSchema),\n })\n);\n\nconst BaseDatasetMetadataSchema = object({\n table_name: string(),\n schema: literal(\"datasets\").default(\"datasets\"),\n columns: array(string()),\n asset_refs: optional(nullable(DatasetAssetRefsSchema)),\n});\n\n/**\n * A single column from GET /datasets/:id/schema, enriched server-side.\n *\n * The FK fields come straight from get_table_schema. `semantic_type` is pure\n * inference: \"asset_ref\" when the column has an FK to public.assets. The\n * optional `asset_type` is the declared target-type hint from\n * metadata.asset_refs (display + soft validation only).\n */\nconst EnrichedDatasetSchemaFieldSchema = object({\n column_name: string(),\n data_type: string(),\n fk_constraint_name: optional(nullable(string())),\n foreign_table_schema: optional(nullable(string())),\n foreign_table_name: optional(nullable(string())),\n foreign_column_name: optional(nullable(string())),\n semantic_type: optional(nullable(literal(\"asset_ref\"))),\n asset_type: optional(nullable(AssetTypeSchema)),\n});\n\n/**\n * A resolved asset reference returned in the `resolved_asset_refs` sidecar of\n * GET /datasets/:id/data?resolve_asset_refs=true. Reuses the platform-wide\n * { asset_id, asset_type } vocabulary (see KeyedAssetRefsSchema).\n */\nconst ResolvedAssetRefSchema = object({\n asset_id: uuid(),\n asset_type: AssetTypeSchema,\n name: nullable(string()),\n web_url: nullable(string()),\n});\n\n/** column -> (referenced uuid -> resolved asset). */\nconst ResolvedAssetRefsSchema = record(\n string(),\n record(string(), ResolvedAssetRefSchema)\n);\n\nconst DatasetMetadataSchema = BaseDatasetMetadataSchema.extend(\n AssetMetadataSchema.partial().shape\n);\n\nconst DatasetSchema = AssetSchema.extend({\n asset_type: literal(\"dataset\").default(\"dataset\"),\n metadata: DatasetMetadataSchema.extend({\n ...DatasetFromFileMetadataSchema.partial().shape,\n }),\n preview: array(record(string(), any())),\n});\n\nconst CreateDatasetFromFileSchema = CreateAssetSchema.extend({\n asset_type: literal(\"dataset\").default(\"dataset\"),\n metadata: DatasetMetadataSchema.extend({\n ...DatasetFromFileMetadataSchema.shape,\n }),\n preview: array(record(string(), any())),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst CreateDatasetFromSchemaSchema = CreateAssetSchema.extend({\n asset_type: literal(\"dataset\").default(\"dataset\"),\n metadata: DatasetMetadataSchema,\n preview: array(record(string(), any())),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst updateDatasetSchema = DatasetSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n is_pinned_in_team: true,\n })\n .extend({\n asset_type: literal(\"dataset\").default(\"dataset\"),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport {\n DatasetSchema,\n CreateDatasetFromFileSchema,\n CreateDatasetFromSchemaSchema,\n updateDatasetSchema,\n DatasetAssetRefsSchema,\n EnrichedDatasetSchemaFieldSchema,\n ResolvedAssetRefSchema,\n ResolvedAssetRefsSchema,\n};\nexport type Dataset = z.infer<typeof DatasetSchema>;\nexport type CreateFromFileDataset = z.infer<typeof CreateDatasetFromFileSchema>;\nexport type CreateFromSchemaDataset = z.infer<typeof CreateDatasetFromSchemaSchema>;\nexport type UpdateDataset = z.infer<typeof updateDatasetSchema>;\nexport type DatasetAssetRefs = z.infer<typeof DatasetAssetRefsSchema>;\nexport type EnrichedDatasetSchemaField = z.infer<\n typeof EnrichedDatasetSchemaFieldSchema\n>;\nexport type ResolvedAssetRef = z.infer<typeof ResolvedAssetRefSchema>;\nexport type ResolvedAssetRefs = z.infer<typeof ResolvedAssetRefsSchema>;\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkCONKY65O_cjs=require('./chunk-CONKY65O.cjs'),chunkIP4OVRZB_cjs=require('./chunk-IP4OVRZB.cjs'),chunk43KB23BA_cjs=require('./chunk-43KB23BA.cjs'),zod=require('zod');var E=zod.enum(["closable","continuous"]),w=zod.enum(["draft","open","closed","cancelled"]),f=zod.enum(["pending","in_progress","done","skipped"]),C=zod.enum(["btc","usd"]),I=zod.enum(["skipped","running","passed","failed","errored"]),q=zod.enum(["submitted","accepted","rejected"]),T=zod.object({type:zod.string(),content:zod.optional(zod.array(zod.any())),attrs:zod.optional(zod.record(zod.string(),zod.any())),marks:zod.optional(zod.array(zod.any())),text:zod.optional(zod.string())}),p=zod.object({json:zod.object({type:zod.literal("doc"),content:zod.array(T)}),text:zod.string()}),k=zod.object({id:zod.uuid(),quest_id:zod.uuid(),description:zod.string(),status:f.default("pending"),auto_skipped:zod.optional(zod.nullable(zod.string().or(zod.any()))),status_before_auto_skip:zod.optional(zod.nullable(f)),sort_order:zod.number().default(0),type:zod.string().default("task"),created_by:zod.uuid(),assignee_id:zod.optional(zod.nullable(zod.uuid())),expected_asset_type:zod.optional(zod.nullable(chunk43KB23BA_cjs.a)),reward_xp:zod.number().int().nonnegative().default(0),reward_currency:C.default("btc"),reward_amount:zod.number().int().nonnegative().default(0),child_quest_id:zod.optional(zod.nullable(zod.uuid())),eval_route_id:zod.optional(zod.nullable(zod.uuid())),eval_score_path:zod.optional(zod.nullable(zod.string())),eval_pass_min:zod.optional(zod.nullable(zod.number())),eval_pass_max:zod.optional(zod.nullable(zod.number())),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkCONKY65O_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkCONKY65O_cjs.a)),notes:zod.optional(zod.nullable(zod.string())),contributor_keys:zod.optional(zod.nullable(zod.array(zod.object({key:zod.string(),required:zod.boolean().default(true),filters:zod.object({assetType:zod.optional(zod.string()),fileType:zod.optional(zod.string()),extensions:zod.optional(zod.array(zod.string())),hasConstraints:zod.boolean().default(false)})})))),created_at:zod.string(),updated_at:zod.string()}),A=k,S=zod.object({description:zod.string().min(1,{message:"Item description cannot be empty"}),type:zod.optional(zod.string()).default("task"),sort_order:zod.optional(zod.number().int()),assignee_id:zod.optional(zod.nullable(zod.uuid())),expected_asset_type:zod.optional(zod.nullable(chunk43KB23BA_cjs.a)),reward_xp:zod.optional(zod.number().int().nonnegative()).default(0),reward_currency:zod.optional(C).default("btc"),reward_amount:zod.optional(zod.number().int().nonnegative()).default(0),child_quest_id:zod.optional(zod.nullable(zod.uuid())),eval_route_id:zod.optional(zod.nullable(zod.uuid())),eval_score_path:zod.optional(zod.nullable(zod.string())),eval_pass_min:zod.optional(zod.nullable(zod.number())),eval_pass_max:zod.optional(zod.nullable(zod.number())),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkCONKY65O_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkCONKY65O_cjs.a)),notes:zod.optional(zod.nullable(zod.string()))}),R=zod.union([zod.string().transform(u=>({description:u})),S]).pipe(S),U=zod.object({type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),closed_at:zod.optional(zod.nullable(zod.string()))}),j=chunkIP4OVRZB_cjs.c.extend({asset_type:zod.literal("quest").default("quest"),metadata:zod.optional(zod.nullable(chunkIP4OVRZB_cjs.b.partial())),quest:zod.optional(U.partial()),items:zod.optional(zod.array(A.partial())),progress:zod.optional(zod.object({total:zod.number(),done:zod.number(),remaining:zod.number()}))}),Z=chunkIP4OVRZB_cjs.d.extend({asset_type:zod.literal("quest").default("quest"),name:zod.optional(zod.nullable(zod.string())).default(null),description:zod.optional(zod.nullable(p)),type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),items:zod.optional(zod.array(R)).default([])}).transform(u=>chunkIP4OVRZB_cjs.a(u)),F=j.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true,items:true,progress:true}).extend({asset_type:zod.literal("quest").default("quest"),last_updated:zod.string().default(()=>new Date().toISOString())}).transform(u=>chunkIP4OVRZB_cjs.a(u)),M=S.partial().extend({status:zod.optional(f)}),N=zod.object({id:zod.uuid(),quest_id:zod.uuid(),user_id:zod.uuid(),item_id:zod.optional(zod.nullable(zod.uuid())),asset_id:zod.optional(zod.nullable(zod.uuid())),asset_type:zod.optional(zod.nullable(chunk43KB23BA_cjs.a)),assets:zod.optional(zod.nullable(chunkCONKY65O_cjs.a)),description:zod.optional(zod.nullable(p)),review:zod.optional(zod.nullable(p)),status:q,reviewer_id:zod.optional(zod.nullable(zod.uuid())),reviewed_at:zod.optional(zod.nullable(zod.string())),eval_action_id:zod.optional(zod.nullable(zod.uuid())),eval_score:zod.optional(zod.nullable(zod.number())),eval_status:zod.optional(zod.nullable(I)),created_at:zod.string(),updated_at:zod.string()}),P=zod.object({item_id:zod.uuid(),assets:zod.optional(zod.nullable(chunkCONKY65O_cjs.c)),description:zod.optional(zod.nullable(zod.union([zod.string(),p])))}),G=zod.object({status:zod.enum(["accepted","rejected"]),review:zod.optional(zod.nullable(zod.union([zod.string(),p])))});exports.a=E;exports.b=w;exports.c=f;exports.d=C;exports.e=I;exports.f=q;exports.g=k;exports.h=A;exports.i=S;exports.j=R;exports.k=j;exports.l=Z;exports.m=F;exports.n=M;exports.o=N;exports.p=P;exports.q=G;//# sourceMappingURL=chunk-XWXLCG4E.cjs.map
2
- //# sourceMappingURL=chunk-XWXLCG4E.cjs.map
1
+ 'use strict';var chunkHN7Y7VMJ_cjs=require('./chunk-HN7Y7VMJ.cjs'),chunkROMY5WNQ_cjs=require('./chunk-ROMY5WNQ.cjs'),chunk43KB23BA_cjs=require('./chunk-43KB23BA.cjs'),zod=require('zod');var E=zod.enum(["closable","continuous"]),w=zod.enum(["draft","open","closed","cancelled"]),f=zod.enum(["pending","in_progress","done","skipped"]),C=zod.enum(["btc","usd"]),I=zod.enum(["skipped","running","passed","failed","errored"]),q=zod.enum(["submitted","accepted","rejected"]),T=zod.object({type:zod.string(),content:zod.optional(zod.array(zod.any())),attrs:zod.optional(zod.record(zod.string(),zod.any())),marks:zod.optional(zod.array(zod.any())),text:zod.optional(zod.string())}),p=zod.object({json:zod.object({type:zod.literal("doc"),content:zod.array(T)}),text:zod.string()}),k=zod.object({id:zod.uuid(),quest_id:zod.uuid(),description:zod.string(),status:f.default("pending"),auto_skipped:zod.optional(zod.nullable(zod.string().or(zod.any()))),status_before_auto_skip:zod.optional(zod.nullable(f)),sort_order:zod.number().default(0),type:zod.string().default("task"),created_by:zod.uuid(),assignee_id:zod.optional(zod.nullable(zod.uuid())),expected_asset_type:zod.optional(zod.nullable(chunk43KB23BA_cjs.a)),reward_xp:zod.number().int().nonnegative().default(0),reward_currency:C.default("btc"),reward_amount:zod.number().int().nonnegative().default(0),child_quest_id:zod.optional(zod.nullable(zod.uuid())),eval_route_id:zod.optional(zod.nullable(zod.uuid())),eval_score_path:zod.optional(zod.nullable(zod.string())),eval_pass_min:zod.optional(zod.nullable(zod.number())),eval_pass_max:zod.optional(zod.nullable(zod.number())),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkHN7Y7VMJ_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkHN7Y7VMJ_cjs.a)),notes:zod.optional(zod.nullable(zod.string())),contributor_keys:zod.optional(zod.nullable(zod.array(zod.object({key:zod.string(),required:zod.boolean().default(true),filters:zod.object({assetType:zod.optional(zod.string()),fileType:zod.optional(zod.string()),extensions:zod.optional(zod.array(zod.string())),hasConstraints:zod.boolean().default(false)})})))),created_at:zod.string(),updated_at:zod.string()}),A=k,S=zod.object({description:zod.string().min(1,{message:"Item description cannot be empty"}),type:zod.optional(zod.string()).default("task"),sort_order:zod.optional(zod.number().int()),assignee_id:zod.optional(zod.nullable(zod.uuid())),expected_asset_type:zod.optional(zod.nullable(chunk43KB23BA_cjs.a)),reward_xp:zod.optional(zod.number().int().nonnegative()).default(0),reward_currency:zod.optional(C).default("btc"),reward_amount:zod.optional(zod.number().int().nonnegative()).default(0),child_quest_id:zod.optional(zod.nullable(zod.uuid())),eval_route_id:zod.optional(zod.nullable(zod.uuid())),eval_score_path:zod.optional(zod.nullable(zod.string())),eval_pass_min:zod.optional(zod.nullable(zod.number())),eval_pass_max:zod.optional(zod.nullable(zod.number())),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkHN7Y7VMJ_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkHN7Y7VMJ_cjs.a)),notes:zod.optional(zod.nullable(zod.string()))}),R=zod.union([zod.string().transform(u=>({description:u})),S]).pipe(S),U=zod.object({type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),closed_at:zod.optional(zod.nullable(zod.string()))}),j=chunkROMY5WNQ_cjs.c.extend({asset_type:zod.literal("quest").default("quest"),metadata:zod.optional(zod.nullable(chunkROMY5WNQ_cjs.b.partial())),quest:zod.optional(U.partial()),items:zod.optional(zod.array(A.partial())),progress:zod.optional(zod.object({total:zod.number(),done:zod.number(),remaining:zod.number()}))}),Z=chunkROMY5WNQ_cjs.d.extend({asset_type:zod.literal("quest").default("quest"),name:zod.optional(zod.nullable(zod.string())).default(null),description:zod.optional(zod.nullable(p)),type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),items:zod.optional(zod.array(R)).default([])}).transform(u=>chunkROMY5WNQ_cjs.a(u)),F=j.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true,items:true,progress:true}).extend({asset_type:zod.literal("quest").default("quest"),last_updated:zod.string().default(()=>new Date().toISOString())}).transform(u=>chunkROMY5WNQ_cjs.a(u)),M=S.partial().extend({status:zod.optional(f)}),N=zod.object({id:zod.uuid(),quest_id:zod.uuid(),user_id:zod.uuid(),item_id:zod.optional(zod.nullable(zod.uuid())),asset_id:zod.optional(zod.nullable(zod.uuid())),asset_type:zod.optional(zod.nullable(chunk43KB23BA_cjs.a)),assets:zod.optional(zod.nullable(chunkHN7Y7VMJ_cjs.a)),description:zod.optional(zod.nullable(p)),review:zod.optional(zod.nullable(p)),status:q,reviewer_id:zod.optional(zod.nullable(zod.uuid())),reviewed_at:zod.optional(zod.nullable(zod.string())),eval_action_id:zod.optional(zod.nullable(zod.uuid())),eval_score:zod.optional(zod.nullable(zod.number())),eval_status:zod.optional(zod.nullable(I)),created_at:zod.string(),updated_at:zod.string()}),P=zod.object({item_id:zod.uuid(),assets:zod.optional(zod.nullable(chunkHN7Y7VMJ_cjs.c)),description:zod.optional(zod.nullable(zod.union([zod.string(),p])))}),G=zod.object({status:zod.enum(["accepted","rejected"]),review:zod.optional(zod.nullable(zod.union([zod.string(),p])))});exports.a=E;exports.b=w;exports.c=f;exports.d=C;exports.e=I;exports.f=q;exports.g=k;exports.h=A;exports.i=S;exports.j=R;exports.k=j;exports.l=Z;exports.m=F;exports.n=M;exports.o=N;exports.p=P;exports.q=G;//# sourceMappingURL=chunk-6FG474SV.cjs.map
2
+ //# sourceMappingURL=chunk-6FG474SV.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/quests.ts"],"names":["QuestTypeSchema","zodEnum","QuestStatusSchema","QuestItemStatusSchema","RewardCurrencySchema","EntryEvalStatusSchema","EntryStatusSchema","TipTapNode","object","string","optional","array","any","record","ContentSchema","literal","QuestItemBaseSchema","uuid","nullable","number","AssetTypeSchema","QuestSubmissionAssetDeclarationSchema","KeyedAssetRefsSchema","zodBoolean","QuestItemSchema","CreateQuestItemObjectSchema","CreateQuestItemSchema","union","s","QuestSpecificsSchema","QuestSchema","AssetSchema","AssetMetadataSchema","CreateQuestSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","UpdateQuestSchema","UpdateQuestItemSchema","EntrySchema","CreateEntrySchema","KeyedAssetInputSchema","ReviewEntrySchema"],"mappings":"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","file":"chunk-XWXLCG4E.cjs","sourcesContent":["import {\n object,\n string,\n number,\n array,\n literal,\n record,\n type z,\n any,\n optional,\n nullable,\n union,\n uuid,\n boolean as zodBoolean,\n enum as zodEnum,\n type ZodType,\n} from \"zod\";\n\nimport {\n AssetSchema,\n AssetMetadataSchema,\n CreateAssetSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\nimport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n} from \"../utils/quest-submission\";\n\n// ── Enums ──────────────────────────────────────────────────────────────\n\n/** closable: one active entry per item per user; continuous: unlimited per item */\nconst QuestTypeSchema = zodEnum([\"closable\", \"continuous\"]);\nconst QuestStatusSchema = zodEnum([\"draft\", \"open\", \"closed\", \"cancelled\"]);\n\nconst QuestItemStatusSchema = zodEnum([\n \"pending\",\n \"in_progress\",\n \"done\",\n \"skipped\",\n]);\n\nconst RewardCurrencySchema = zodEnum([\"btc\", \"usd\"]);\n\nconst EntryEvalStatusSchema = zodEnum([\n \"skipped\",\n \"running\",\n \"passed\",\n \"failed\",\n \"errored\",\n]);\n\nconst EntryStatusSchema = zodEnum([\"submitted\", \"accepted\", \"rejected\"]);\n\n// ── Content (TipTap) ───────────────────────────────────────────────────\n// Posts/quests share the same rich description shape: { json, text }.\n// We mirror it locally here so the quest schema doesn't depend on posts.\n\nconst TipTapNode: ZodType<any> = object({\n type: string(),\n content: optional(array(any())),\n attrs: optional(record(string(), any())),\n marks: optional(array(any())),\n text: optional(string()),\n});\n\nconst ContentSchema = object({\n json: object({\n type: literal(\"doc\"),\n content: array(TipTapNode),\n }),\n text: string(),\n});\n\n// ── Quest items ────────────────────────────────────────────────────────\n\nconst QuestItemBaseSchema = object({\n id: uuid(),\n quest_id: uuid(),\n description: string(),\n status: QuestItemStatusSchema.default(\"pending\"),\n auto_skipped: optional(nullable(string().or(any()))),\n status_before_auto_skip: optional(nullable(QuestItemStatusSchema)),\n sort_order: number().default(0),\n type: string().default(\"task\"),\n created_by: uuid(),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: number().int().nonnegative().default(0),\n reward_currency: RewardCurrencySchema.default(\"btc\"),\n reward_amount: number().int().nonnegative().default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n contributor_keys: optional(\n nullable(\n array(\n object({\n key: string(),\n required: zodBoolean().default(true),\n filters: object({\n assetType: optional(string()),\n fileType: optional(string()),\n extensions: optional(array(string())),\n hasConstraints: zodBoolean().default(false),\n }),\n }),\n ),\n ),\n ),\n created_at: string(),\n updated_at: string(),\n});\n\nconst QuestItemSchema = QuestItemBaseSchema;\n\n/**\n * Shape used by `POST /quests/create` (inline items) and\n * `POST /quests/:id/items` (batch add). The controller fills in\n * `quest_id`, `created_by`, and lifecycle-derived fields\n * (`auto_skipped`, `status_before_auto_skip`).\n *\n * Accepts a plain description string as a convenience — it's lifted\n * into `{ description }` by the `union` below.\n */\nconst CreateQuestItemObjectSchema = object({\n description: string().min(1, { message: \"Item description cannot be empty\" }),\n type: optional(string()).default(\"task\"),\n sort_order: optional(number().int()),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: optional(number().int().nonnegative()).default(0),\n reward_currency: optional(RewardCurrencySchema).default(\"btc\"),\n // Amount is in minor units of `reward_currency`: sats for BTC, cents\n // for USD. Both fit in JS numbers comfortably for our reward sizes;\n // the underlying column is `bigint`.\n reward_amount: optional(number().int().nonnegative()).default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n});\n\nconst CreateQuestItemSchema = union([\n string().transform((s) => ({ description: s })),\n CreateQuestItemObjectSchema,\n]).pipe(CreateQuestItemObjectSchema);\n\n// ── Quest ──────────────────────────────────────────────────────────────\n\nconst QuestSpecificsSchema = object({\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n closed_at: optional(nullable(string())),\n});\n\nconst QuestSchema = AssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n metadata: optional(nullable(AssetMetadataSchema.partial())),\n // `read /quests/:id` returns the quest specifics nested under `quest`\n // and hoists items to the top level for convenience.\n quest: optional(QuestSpecificsSchema.partial()),\n items: optional(array(QuestItemSchema.partial())),\n progress: optional(\n object({\n total: number(),\n done: number(),\n remaining: number(),\n }),\n ),\n});\n\n/**\n * Schema used by the backend controller and SDK clients to validate /\n * default the body of `POST /quests/create`. Mirrors how\n * `CreatePostSchema` defaults `org_id`/`team_id` so non-frontend callers\n * don't have to know about `GLOBAL_ORG_ID`.\n *\n * The `items` field accepts either plain strings or full item objects —\n * the backend `createQuestItems`/`createQuest` paths already handle both\n * shapes, and `CreateQuestItemSchema` normalizes strings into\n * `{ description }`.\n */\nconst CreateQuestSchema = CreateAssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n name: optional(nullable(string())).default(null),\n description: optional(nullable(ContentSchema)),\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n items: optional(array(CreateQuestItemSchema)).default([]),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestSchema = QuestSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n items: true,\n progress: true,\n })\n .extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestItemSchema = CreateQuestItemObjectSchema.partial().extend({\n status: optional(QuestItemStatusSchema),\n});\n\n// ── Entries ────────────────────────────────────────────────────────────\n\nconst EntrySchema = object({\n id: uuid(),\n quest_id: uuid(),\n user_id: uuid(),\n item_id: optional(nullable(uuid())),\n asset_id: optional(nullable(uuid())),\n asset_type: optional(nullable(AssetTypeSchema)),\n assets: optional(nullable(KeyedAssetRefsSchema)),\n description: optional(nullable(ContentSchema)),\n review: optional(nullable(ContentSchema)),\n status: EntryStatusSchema,\n reviewer_id: optional(nullable(uuid())),\n reviewed_at: optional(nullable(string())),\n eval_action_id: optional(nullable(uuid())),\n eval_score: optional(nullable(number())),\n eval_status: optional(nullable(EntryEvalStatusSchema)),\n created_at: string(),\n updated_at: string(),\n});\n\nconst CreateEntrySchema = object({\n item_id: uuid(),\n assets: optional(nullable(KeyedAssetInputSchema)),\n description: optional(nullable(union([string(), ContentSchema]))),\n});\n\nconst ReviewEntrySchema = object({\n status: zodEnum([\"accepted\", \"rejected\"]),\n review: optional(nullable(union([string(), ContentSchema]))),\n});\n\n// ── Exports ────────────────────────────────────────────────────────────\n\nexport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n QuestTypeSchema,\n QuestStatusSchema,\n QuestItemStatusSchema,\n RewardCurrencySchema,\n EntryEvalStatusSchema,\n EntryStatusSchema,\n QuestSchema,\n QuestItemSchema,\n QuestItemBaseSchema,\n CreateQuestSchema,\n CreateQuestItemSchema,\n CreateQuestItemObjectSchema,\n UpdateQuestSchema,\n UpdateQuestItemSchema,\n EntrySchema,\n CreateEntrySchema,\n ReviewEntrySchema,\n};\n\nexport type QuestType = z.infer<typeof QuestTypeSchema>;\nexport type QuestStatus = z.infer<typeof QuestStatusSchema>;\nexport type QuestItemStatus = z.infer<typeof QuestItemStatusSchema>;\nexport type RewardCurrency = z.infer<typeof RewardCurrencySchema>;\nexport type EntryEvalStatus = z.infer<typeof EntryEvalStatusSchema>;\nexport type EntryStatus = z.infer<typeof EntryStatusSchema>;\nexport type Quest = z.infer<typeof QuestSchema>;\nexport type QuestItem = z.infer<typeof QuestItemSchema>;\nexport type CreateQuest = z.infer<typeof CreateQuestSchema>;\nexport type CreateQuestItem = z.infer<typeof CreateQuestItemSchema>;\nexport type UpdateQuest = z.infer<typeof UpdateQuestSchema>;\nexport type UpdateQuestItem = z.infer<typeof UpdateQuestItemSchema>;\nexport type Entry = z.infer<typeof EntrySchema>;\nexport type CreateEntry = z.infer<typeof CreateEntrySchema>;\nexport type ReviewEntry = z.infer<typeof ReviewEntrySchema>;\n"]}
1
+ {"version":3,"sources":["../src/schema/quests.ts"],"names":["QuestTypeSchema","zodEnum","QuestStatusSchema","QuestItemStatusSchema","RewardCurrencySchema","EntryEvalStatusSchema","EntryStatusSchema","TipTapNode","object","string","optional","array","any","record","ContentSchema","literal","QuestItemBaseSchema","uuid","nullable","number","AssetTypeSchema","QuestSubmissionAssetDeclarationSchema","KeyedAssetRefsSchema","zodBoolean","QuestItemSchema","CreateQuestItemObjectSchema","CreateQuestItemSchema","union","s","QuestSpecificsSchema","QuestSchema","AssetSchema","AssetMetadataSchema","CreateQuestSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","UpdateQuestSchema","UpdateQuestItemSchema","EntrySchema","CreateEntrySchema","KeyedAssetInputSchema","ReviewEntrySchema"],"mappings":"8LAkCMA,CAAkBC,CAAAA,QAAAA,CAAQ,CAAC,UAAY,CAAA,YAAY,CAAC,CAAA,CACpDC,CAAoBD,CAAAA,QAAAA,CAAQ,CAAC,OAAS,CAAA,MAAA,CAAQ,QAAU,CAAA,WAAW,CAAC,CAAA,CAEpEE,EAAwBF,QAAQ,CAAA,CACpC,SACA,CAAA,aAAA,CACA,MACA,CAAA,SACF,CAAC,CAEKG,CAAAA,CAAAA,CAAuBH,SAAQ,CAAC,KAAA,CAAO,KAAK,CAAC,CAAA,CAE7CI,CAAwBJ,CAAAA,QAAAA,CAAQ,CACpC,SAAA,CACA,UACA,QACA,CAAA,QAAA,CACA,SACF,CAAC,CAAA,CAEKK,EAAoBL,QAAQ,CAAA,CAAC,WAAa,CAAA,UAAA,CAAY,UAAU,CAAC,EAMjEM,CAA2BC,CAAAA,UAAAA,CAAO,CACtC,IAAMC,CAAAA,UAAAA,GACN,OAASC,CAAAA,YAAAA,CAASC,SAAMC,CAAAA,OAAAA,EAAK,CAAC,EAC9B,KAAOF,CAAAA,YAAAA,CAASG,UAAOJ,CAAAA,UAAAA,EAAUG,CAAAA,OAAAA,EAAK,CAAC,CAAA,CACvC,KAAOF,CAAAA,YAAAA,CAASC,SAAMC,CAAAA,OAAAA,EAAK,CAAC,CAAA,CAC5B,KAAMF,YAASD,CAAAA,UAAAA,EAAQ,CACzB,CAAC,CAEKK,CAAAA,CAAAA,CAAgBN,UAAO,CAAA,CAC3B,KAAMA,UAAO,CAAA,CACX,KAAMO,WAAQ,CAAA,KAAK,EACnB,OAASJ,CAAAA,SAAAA,CAAMJ,CAAU,CAC3B,CAAC,CAAA,CACD,KAAME,UAAO,EACf,CAAC,CAIKO,CAAAA,CAAAA,CAAsBR,WAAO,CACjC,EAAA,CAAIS,QAAK,EAAA,CACT,QAAUA,CAAAA,QAAAA,GACV,WAAaR,CAAAA,UAAAA,EACb,CAAA,MAAA,CAAQN,CAAsB,CAAA,OAAA,CAAQ,SAAS,CAC/C,CAAA,YAAA,CAAcO,YAASQ,CAAAA,YAAAA,CAAST,UAAO,EAAA,CAAE,GAAGG,OAAI,EAAC,CAAC,CAAC,CAAA,CACnD,wBAAyBF,YAASQ,CAAAA,YAAAA,CAASf,CAAqB,CAAC,CACjE,CAAA,UAAA,CAAYgB,YAAS,CAAA,OAAA,CAAQ,CAAC,CAAA,CAC9B,IAAMV,CAAAA,UAAAA,GAAS,OAAQ,CAAA,MAAM,CAC7B,CAAA,UAAA,CAAYQ,QAAK,EAAA,CACjB,YAAaP,YAASQ,CAAAA,YAAAA,CAASD,UAAM,CAAC,EACtC,mBAAqBP,CAAAA,YAAAA,CAASQ,YAASE,CAAAA,mBAAe,CAAC,CAAA,CACvD,UAAWD,UAAO,EAAA,CAAE,GAAI,EAAA,CAAE,WAAY,EAAA,CAAE,QAAQ,CAAC,CAAA,CACjD,eAAiBf,CAAAA,CAAAA,CAAqB,OAAQ,CAAA,KAAK,EACnD,aAAee,CAAAA,UAAAA,GAAS,GAAI,EAAA,CAAE,aAAc,CAAA,OAAA,CAAQ,CAAC,CAAA,CACrD,cAAgBT,CAAAA,YAAAA,CAASQ,aAASD,QAAK,EAAC,CAAC,CACzC,CAAA,aAAA,CAAeP,aAASQ,YAASD,CAAAA,QAAAA,EAAM,CAAC,CACxC,CAAA,eAAA,CAAiBP,aAASQ,YAAST,CAAAA,UAAAA,EAAQ,CAAC,CAAA,CAC5C,cAAeC,YAASQ,CAAAA,YAAAA,CAASC,UAAO,EAAC,CAAC,CAAA,CAC1C,cAAeT,YAASQ,CAAAA,YAAAA,CAASC,UAAO,EAAC,CAAC,CAAA,CAC1C,kBAAmBT,YACjBQ,CAAAA,YAAAA,CAASL,UAAOJ,CAAAA,UAAAA,EAAUY,CAAAA,mBAAqC,CAAC,CAClE,CAAA,CACA,mBAAoBX,YAASQ,CAAAA,YAAAA,CAASI,mBAAoB,CAAC,CAAA,CAC3D,KAAOZ,CAAAA,YAAAA,CAASQ,YAAST,CAAAA,UAAAA,EAAQ,CAAC,CAAA,CAClC,iBAAkBC,YAChBQ,CAAAA,YAAAA,CACEP,UACEH,UAAO,CAAA,CACL,GAAKC,CAAAA,UAAAA,EACL,CAAA,QAAA,CAAUc,aAAa,CAAA,OAAA,CAAQ,IAAI,CACnC,CAAA,OAAA,CAASf,WAAO,CACd,SAAA,CAAWE,YAASD,CAAAA,UAAAA,EAAQ,CAAA,CAC5B,SAAUC,YAASD,CAAAA,UAAAA,EAAQ,CAAA,CAC3B,UAAYC,CAAAA,YAAAA,CAASC,UAAMF,UAAO,EAAC,CAAC,CAAA,CACpC,cAAgBc,CAAAA,WAAAA,GAAa,OAAQ,CAAA,KAAK,CAC5C,CAAC,CACH,CAAC,CACH,CACF,CACF,CAAA,CACA,UAAYd,CAAAA,UAAAA,GACZ,UAAYA,CAAAA,UAAAA,EACd,CAAC,CAAA,CAEKe,EAAkBR,CAWlBS,CAAAA,CAAAA,CAA8BjB,UAAO,CAAA,CACzC,WAAaC,CAAAA,UAAAA,GAAS,GAAI,CAAA,CAAA,CAAG,CAAE,OAAS,CAAA,kCAAmC,CAAC,CAC5E,CAAA,IAAA,CAAMC,YAASD,CAAAA,UAAAA,EAAQ,CAAA,CAAE,QAAQ,MAAM,CAAA,CACvC,UAAYC,CAAAA,YAAAA,CAASS,UAAO,EAAA,CAAE,KAAK,CAAA,CACnC,WAAaT,CAAAA,YAAAA,CAASQ,YAASD,CAAAA,QAAAA,EAAM,CAAC,CAAA,CACtC,oBAAqBP,YAASQ,CAAAA,YAAAA,CAASE,mBAAe,CAAC,CAAA,CACvD,SAAWV,CAAAA,YAAAA,CAASS,UAAO,EAAA,CAAE,KAAM,CAAA,WAAA,EAAa,CAAA,CAAE,OAAQ,CAAA,CAAC,EAC3D,eAAiBT,CAAAA,YAAAA,CAASN,CAAoB,CAAA,CAAE,OAAQ,CAAA,KAAK,EAI7D,aAAeM,CAAAA,YAAAA,CAASS,YAAS,CAAA,GAAA,GAAM,WAAY,EAAC,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAA,CAC/D,eAAgBT,YAASQ,CAAAA,YAAAA,CAASD,QAAK,EAAC,CAAC,CAAA,CACzC,cAAeP,YAASQ,CAAAA,YAAAA,CAASD,QAAK,EAAC,CAAC,CAAA,CACxC,gBAAiBP,YAASQ,CAAAA,YAAAA,CAAST,YAAQ,CAAC,EAC5C,aAAeC,CAAAA,YAAAA,CAASQ,YAASC,CAAAA,UAAAA,EAAQ,CAAC,EAC1C,aAAeT,CAAAA,YAAAA,CAASQ,aAASC,UAAO,EAAC,CAAC,CAC1C,CAAA,iBAAA,CAAmBT,YACjBQ,CAAAA,YAAAA,CAASL,UAAOJ,CAAAA,UAAAA,GAAUY,mBAAqC,CAAC,CAClE,CACA,CAAA,kBAAA,CAAoBX,aAASQ,YAASI,CAAAA,mBAAoB,CAAC,CAAA,CAC3D,KAAOZ,CAAAA,YAAAA,CAASQ,aAAST,UAAO,EAAC,CAAC,CACpC,CAAC,CAAA,CAEKiB,EAAwBC,SAAM,CAAA,CAClClB,UAAO,EAAA,CAAE,SAAWmB,CAAAA,CAAAA,GAAO,CAAE,WAAaA,CAAAA,CAAE,EAAE,CAC9CH,CAAAA,CACF,CAAC,CAAE,CAAA,IAAA,CAAKA,CAA2B,CAAA,CAI7BI,CAAuBrB,CAAAA,UAAAA,CAAO,CAClC,IAAMR,CAAAA,CAAAA,CAAgB,QAAQ,UAAU,CAAA,CACxC,OAAQE,CAAkB,CAAA,OAAA,CAAQ,MAAM,CAAA,CACxC,sBAAwBQ,CAAAA,YAAAA,CAASQ,aAASC,UAAO,EAAA,CAAE,KAAM,CAAA,WAAA,EAAa,CAAC,CAAA,CACvE,SAAWT,CAAAA,YAAAA,CAASQ,YAAST,CAAAA,UAAAA,EAAQ,CAAC,CACxC,CAAC,CAAA,CAEKqB,CAAcC,CAAAA,mBAAAA,CAAY,OAAO,CACrC,UAAA,CAAYhB,WAAQ,CAAA,OAAO,CAAE,CAAA,OAAA,CAAQ,OAAO,CAC5C,CAAA,QAAA,CAAUL,aAASQ,YAASc,CAAAA,mBAAAA,CAAoB,SAAS,CAAC,CAG1D,CAAA,KAAA,CAAOtB,YAASmB,CAAAA,CAAAA,CAAqB,SAAS,CAAA,CAC9C,MAAOnB,YAASC,CAAAA,SAAAA,CAAMa,EAAgB,OAAQ,EAAC,CAAC,CAAA,CAChD,QAAUd,CAAAA,YAAAA,CACRF,WAAO,CACL,KAAA,CAAOW,YACP,CAAA,IAAA,CAAMA,YACN,CAAA,SAAA,CAAWA,UAAO,EACpB,CAAC,CACH,CACF,CAAC,CAAA,CAaKc,CAAoBC,CAAAA,mBAAAA,CAAkB,MAAO,CAAA,CACjD,WAAYnB,WAAQ,CAAA,OAAO,CAAE,CAAA,OAAA,CAAQ,OAAO,CAAA,CAC5C,KAAML,YAASQ,CAAAA,YAAAA,CAAST,YAAQ,CAAC,EAAE,OAAQ,CAAA,IAAI,CAC/C,CAAA,WAAA,CAAaC,YAASQ,CAAAA,YAAAA,CAASJ,CAAa,CAAC,CAAA,CAC7C,IAAMd,CAAAA,CAAAA,CAAgB,OAAQ,CAAA,UAAU,EACxC,MAAQE,CAAAA,CAAAA,CAAkB,OAAQ,CAAA,MAAM,CACxC,CAAA,sBAAA,CAAwBQ,aAASQ,YAASC,CAAAA,UAAAA,GAAS,GAAI,EAAA,CAAE,aAAa,CAAC,CACvE,CAAA,KAAA,CAAOT,YAASC,CAAAA,SAAAA,CAAMe,CAAqB,CAAC,CAAA,CAAE,OAAQ,CAAA,EAAE,CAC1D,CAAC,CAAE,CAAA,SAAA,CAAWS,CAAUC,EAAAA,mBAAAA,CAA+BD,CAAK,CAAC,EAEvDE,CAAoBP,CAAAA,CAAAA,CAAY,SACnC,CAAA,IAAA,CAAK,CACJ,OAAS,CAAA,IAAA,CACT,EAAI,CAAA,IAAA,CACJ,UAAY,CAAA,IAAA,CACZ,aAAc,IACd,CAAA,YAAA,CAAc,KACd,IAAM,CAAA,IAAA,CACN,KAAM,IACN,CAAA,IAAA,CAAM,IACN,CAAA,KAAA,CAAO,IACP,CAAA,QAAA,CAAU,IACZ,CAAC,CAAA,CACA,OAAO,CACN,UAAA,CAAYf,YAAQ,OAAO,CAAA,CAAE,OAAQ,CAAA,OAAO,CAC5C,CAAA,YAAA,CAAcN,YAAS,CAAA,OAAA,CAAQ,IAAM,IAAI,IAAK,EAAA,CAAE,aAAa,CAC/D,CAAC,CAAA,CACA,SAAW0B,CAAAA,CAAAA,EAAUC,oBAA+BD,CAAK,CAAC,EAEvDG,CAAwBb,CAAAA,CAAAA,CAA4B,SAAU,CAAA,MAAA,CAAO,CACzE,MAAA,CAAQf,YAASP,CAAAA,CAAqB,CACxC,CAAC,CAAA,CAIKoC,EAAc/B,UAAO,CAAA,CACzB,GAAIS,QAAK,EAAA,CACT,QAAUA,CAAAA,QAAAA,EACV,CAAA,OAAA,CAASA,UACT,CAAA,OAAA,CAASP,aAASQ,YAASD,CAAAA,QAAAA,EAAM,CAAC,CAAA,CAClC,QAAUP,CAAAA,YAAAA,CAASQ,YAASD,CAAAA,QAAAA,EAAM,CAAC,CAAA,CACnC,UAAYP,CAAAA,YAAAA,CAASQ,YAASE,CAAAA,mBAAe,CAAC,CAC9C,CAAA,MAAA,CAAQV,YAASQ,CAAAA,YAAAA,CAASI,mBAAoB,CAAC,EAC/C,WAAaZ,CAAAA,YAAAA,CAASQ,aAASJ,CAAa,CAAC,EAC7C,MAAQJ,CAAAA,YAAAA,CAASQ,YAASJ,CAAAA,CAAa,CAAC,CAAA,CACxC,OAAQR,CACR,CAAA,WAAA,CAAaI,aAASQ,YAASD,CAAAA,QAAAA,EAAM,CAAC,CAAA,CACtC,WAAaP,CAAAA,YAAAA,CAASQ,YAAST,CAAAA,UAAAA,EAAQ,CAAC,CAAA,CACxC,eAAgBC,YAASQ,CAAAA,YAAAA,CAASD,UAAM,CAAC,CACzC,CAAA,UAAA,CAAYP,YAASQ,CAAAA,YAAAA,CAASC,YAAQ,CAAC,CACvC,CAAA,WAAA,CAAaT,YAASQ,CAAAA,YAAAA,CAASb,CAAqB,CAAC,CAAA,CACrD,UAAYI,CAAAA,UAAAA,EACZ,CAAA,UAAA,CAAYA,YACd,CAAC,EAEK+B,CAAoBhC,CAAAA,UAAAA,CAAO,CAC/B,OAASS,CAAAA,QAAAA,EACT,CAAA,MAAA,CAAQP,YAASQ,CAAAA,YAAAA,CAASuB,mBAAqB,CAAC,CAAA,CAChD,WAAa/B,CAAAA,YAAAA,CAASQ,YAASS,CAAAA,SAAAA,CAAM,CAAClB,UAAO,EAAA,CAAGK,CAAa,CAAC,CAAC,CAAC,CAClE,CAAC,CAAA,CAEK4B,EAAoBlC,UAAO,CAAA,CAC/B,OAAQP,QAAQ,CAAA,CAAC,UAAY,CAAA,UAAU,CAAC,CAAA,CACxC,OAAQS,YAASQ,CAAAA,YAAAA,CAASS,SAAM,CAAA,CAAClB,UAAO,EAAA,CAAGK,CAAa,CAAC,CAAC,CAAC,CAC7D,CAAC","file":"chunk-6FG474SV.cjs","sourcesContent":["import {\n object,\n string,\n number,\n array,\n literal,\n record,\n type z,\n any,\n optional,\n nullable,\n union,\n uuid,\n boolean as zodBoolean,\n enum as zodEnum,\n type ZodType,\n} from \"zod\";\n\nimport {\n AssetSchema,\n AssetMetadataSchema,\n CreateAssetSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\nimport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n} from \"../utils/quest-submission\";\n\n// ── Enums ──────────────────────────────────────────────────────────────\n\n/** closable: one active entry per item per user; continuous: unlimited per item */\nconst QuestTypeSchema = zodEnum([\"closable\", \"continuous\"]);\nconst QuestStatusSchema = zodEnum([\"draft\", \"open\", \"closed\", \"cancelled\"]);\n\nconst QuestItemStatusSchema = zodEnum([\n \"pending\",\n \"in_progress\",\n \"done\",\n \"skipped\",\n]);\n\nconst RewardCurrencySchema = zodEnum([\"btc\", \"usd\"]);\n\nconst EntryEvalStatusSchema = zodEnum([\n \"skipped\",\n \"running\",\n \"passed\",\n \"failed\",\n \"errored\",\n]);\n\nconst EntryStatusSchema = zodEnum([\"submitted\", \"accepted\", \"rejected\"]);\n\n// ── Content (TipTap) ───────────────────────────────────────────────────\n// Posts/quests share the same rich description shape: { json, text }.\n// We mirror it locally here so the quest schema doesn't depend on posts.\n\nconst TipTapNode: ZodType<any> = object({\n type: string(),\n content: optional(array(any())),\n attrs: optional(record(string(), any())),\n marks: optional(array(any())),\n text: optional(string()),\n});\n\nconst ContentSchema = object({\n json: object({\n type: literal(\"doc\"),\n content: array(TipTapNode),\n }),\n text: string(),\n});\n\n// ── Quest items ────────────────────────────────────────────────────────\n\nconst QuestItemBaseSchema = object({\n id: uuid(),\n quest_id: uuid(),\n description: string(),\n status: QuestItemStatusSchema.default(\"pending\"),\n auto_skipped: optional(nullable(string().or(any()))),\n status_before_auto_skip: optional(nullable(QuestItemStatusSchema)),\n sort_order: number().default(0),\n type: string().default(\"task\"),\n created_by: uuid(),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: number().int().nonnegative().default(0),\n reward_currency: RewardCurrencySchema.default(\"btc\"),\n reward_amount: number().int().nonnegative().default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n contributor_keys: optional(\n nullable(\n array(\n object({\n key: string(),\n required: zodBoolean().default(true),\n filters: object({\n assetType: optional(string()),\n fileType: optional(string()),\n extensions: optional(array(string())),\n hasConstraints: zodBoolean().default(false),\n }),\n }),\n ),\n ),\n ),\n created_at: string(),\n updated_at: string(),\n});\n\nconst QuestItemSchema = QuestItemBaseSchema;\n\n/**\n * Shape used by `POST /quests/create` (inline items) and\n * `POST /quests/:id/items` (batch add). The controller fills in\n * `quest_id`, `created_by`, and lifecycle-derived fields\n * (`auto_skipped`, `status_before_auto_skip`).\n *\n * Accepts a plain description string as a convenience — it's lifted\n * into `{ description }` by the `union` below.\n */\nconst CreateQuestItemObjectSchema = object({\n description: string().min(1, { message: \"Item description cannot be empty\" }),\n type: optional(string()).default(\"task\"),\n sort_order: optional(number().int()),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: optional(number().int().nonnegative()).default(0),\n reward_currency: optional(RewardCurrencySchema).default(\"btc\"),\n // Amount is in minor units of `reward_currency`: sats for BTC, cents\n // for USD. Both fit in JS numbers comfortably for our reward sizes;\n // the underlying column is `bigint`.\n reward_amount: optional(number().int().nonnegative()).default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n});\n\nconst CreateQuestItemSchema = union([\n string().transform((s) => ({ description: s })),\n CreateQuestItemObjectSchema,\n]).pipe(CreateQuestItemObjectSchema);\n\n// ── Quest ──────────────────────────────────────────────────────────────\n\nconst QuestSpecificsSchema = object({\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n closed_at: optional(nullable(string())),\n});\n\nconst QuestSchema = AssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n metadata: optional(nullable(AssetMetadataSchema.partial())),\n // `read /quests/:id` returns the quest specifics nested under `quest`\n // and hoists items to the top level for convenience.\n quest: optional(QuestSpecificsSchema.partial()),\n items: optional(array(QuestItemSchema.partial())),\n progress: optional(\n object({\n total: number(),\n done: number(),\n remaining: number(),\n }),\n ),\n});\n\n/**\n * Schema used by the backend controller and SDK clients to validate /\n * default the body of `POST /quests/create`. Mirrors how\n * `CreatePostSchema` defaults `org_id`/`team_id` so non-frontend callers\n * don't have to know about `GLOBAL_ORG_ID`.\n *\n * The `items` field accepts either plain strings or full item objects —\n * the backend `createQuestItems`/`createQuest` paths already handle both\n * shapes, and `CreateQuestItemSchema` normalizes strings into\n * `{ description }`.\n */\nconst CreateQuestSchema = CreateAssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n name: optional(nullable(string())).default(null),\n description: optional(nullable(ContentSchema)),\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n items: optional(array(CreateQuestItemSchema)).default([]),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestSchema = QuestSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n items: true,\n progress: true,\n })\n .extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestItemSchema = CreateQuestItemObjectSchema.partial().extend({\n status: optional(QuestItemStatusSchema),\n});\n\n// ── Entries ────────────────────────────────────────────────────────────\n\nconst EntrySchema = object({\n id: uuid(),\n quest_id: uuid(),\n user_id: uuid(),\n item_id: optional(nullable(uuid())),\n asset_id: optional(nullable(uuid())),\n asset_type: optional(nullable(AssetTypeSchema)),\n assets: optional(nullable(KeyedAssetRefsSchema)),\n description: optional(nullable(ContentSchema)),\n review: optional(nullable(ContentSchema)),\n status: EntryStatusSchema,\n reviewer_id: optional(nullable(uuid())),\n reviewed_at: optional(nullable(string())),\n eval_action_id: optional(nullable(uuid())),\n eval_score: optional(nullable(number())),\n eval_status: optional(nullable(EntryEvalStatusSchema)),\n created_at: string(),\n updated_at: string(),\n});\n\nconst CreateEntrySchema = object({\n item_id: uuid(),\n assets: optional(nullable(KeyedAssetInputSchema)),\n description: optional(nullable(union([string(), ContentSchema]))),\n});\n\nconst ReviewEntrySchema = object({\n status: zodEnum([\"accepted\", \"rejected\"]),\n review: optional(nullable(union([string(), ContentSchema]))),\n});\n\n// ── Exports ────────────────────────────────────────────────────────────\n\nexport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n QuestTypeSchema,\n QuestStatusSchema,\n QuestItemStatusSchema,\n RewardCurrencySchema,\n EntryEvalStatusSchema,\n EntryStatusSchema,\n QuestSchema,\n QuestItemSchema,\n QuestItemBaseSchema,\n CreateQuestSchema,\n CreateQuestItemSchema,\n CreateQuestItemObjectSchema,\n UpdateQuestSchema,\n UpdateQuestItemSchema,\n EntrySchema,\n CreateEntrySchema,\n ReviewEntrySchema,\n};\n\nexport type QuestType = z.infer<typeof QuestTypeSchema>;\nexport type QuestStatus = z.infer<typeof QuestStatusSchema>;\nexport type QuestItemStatus = z.infer<typeof QuestItemStatusSchema>;\nexport type RewardCurrency = z.infer<typeof RewardCurrencySchema>;\nexport type EntryEvalStatus = z.infer<typeof EntryEvalStatusSchema>;\nexport type EntryStatus = z.infer<typeof EntryStatusSchema>;\nexport type Quest = z.infer<typeof QuestSchema>;\nexport type QuestItem = z.infer<typeof QuestItemSchema>;\nexport type CreateQuest = z.infer<typeof CreateQuestSchema>;\nexport type CreateQuestItem = z.infer<typeof CreateQuestItemSchema>;\nexport type UpdateQuest = z.infer<typeof UpdateQuestSchema>;\nexport type UpdateQuestItem = z.infer<typeof UpdateQuestItemSchema>;\nexport type Entry = z.infer<typeof EntrySchema>;\nexport type CreateEntry = z.infer<typeof CreateEntrySchema>;\nexport type ReviewEntry = z.infer<typeof ReviewEntrySchema>;\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkIP4OVRZB_cjs=require('./chunk-IP4OVRZB.cjs'),zod=require('zod');var f=zod.object({id:zod.uuid(),path:zod.string(),bucket:zod.enum(["public-files","files"]),name:zod.string(),type:zod.string(),extension:zod.string(),size:zod.number(),width:zod.optional(zod.number()),height:zod.optional(zod.number())}),h=zod.object({type:zod.string()}),p=f.extend(chunkIP4OVRZB_cjs.b.partial().shape),S=h.extend(chunkIP4OVRZB_cjs.b.partial().shape),F=chunkIP4OVRZB_cjs.c.extend({asset_type:zod.literal("file").default("file"),metadata:p}),z=zod.discriminatedUnion("state",[chunkIP4OVRZB_cjs.d.extend({asset_type:zod.literal("file").default("file"),state:zod.literal("success").default("success"),metadata:p}),chunkIP4OVRZB_cjs.d.extend({asset_type:zod.literal("file").default("file"),state:zod.literal("in-progress").default("in-progress"),metadata:S})]).transform(a=>chunkIP4OVRZB_cjs.a(a)),b=F.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true}).extend({last_updated:zod.string().default(()=>new Date().toISOString())}).transform(a=>chunkIP4OVRZB_cjs.a(a));exports.a=F;exports.b=z;exports.c=b;//# sourceMappingURL=chunk-BQ5WODME.cjs.map
2
- //# sourceMappingURL=chunk-BQ5WODME.cjs.map
1
+ 'use strict';var chunkROMY5WNQ_cjs=require('./chunk-ROMY5WNQ.cjs'),zod=require('zod');var f=zod.object({id:zod.uuid(),path:zod.string(),bucket:zod.enum(["public-files","files"]),name:zod.string(),type:zod.string(),extension:zod.string(),size:zod.number(),width:zod.optional(zod.number()),height:zod.optional(zod.number())}),h=zod.object({type:zod.string()}),p=f.extend(chunkROMY5WNQ_cjs.b.partial().shape),S=h.extend(chunkROMY5WNQ_cjs.b.partial().shape),F=chunkROMY5WNQ_cjs.c.extend({asset_type:zod.literal("file").default("file"),metadata:p}),z=zod.discriminatedUnion("state",[chunkROMY5WNQ_cjs.d.extend({asset_type:zod.literal("file").default("file"),state:zod.literal("success").default("success"),metadata:p}),chunkROMY5WNQ_cjs.d.extend({asset_type:zod.literal("file").default("file"),state:zod.literal("in-progress").default("in-progress"),metadata:S})]).transform(a=>chunkROMY5WNQ_cjs.a(a)),b=F.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true}).extend({last_updated:zod.string().default(()=>new Date().toISOString())}).transform(a=>chunkROMY5WNQ_cjs.a(a));exports.a=F;exports.b=z;exports.c=b;//# sourceMappingURL=chunk-6XQFD2Z2.cjs.map
2
+ //# sourceMappingURL=chunk-6XQFD2Z2.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/files.ts"],"names":["BaseFileMetadataSchema","object","uuid","string","zodEnum","number","optional","BaseStubFileMetadataSchema","FileMetadataSchema","AssetMetadataSchema","StubFileMetadataSchema","FileSchema","AssetSchema","literal","CreateFileSchema","discriminatedUnion","CreateAssetSchema","value","normalizeAssetConfigForParsing","updateFileSchema"],"mappings":"sFAoBMA,IAAAA,CAAAA,CAAyBC,WAAO,CACpC,EAAA,CAAIC,UACJ,CAAA,IAAA,CAAMC,YACN,CAAA,MAAA,CAAQC,SAAQ,CAAC,cAAA,CAAgB,OAAO,CAAC,CAAA,CACzC,KAAMD,UAAO,EAAA,CACb,KAAMA,UAAO,EAAA,CACb,UAAWA,UAAO,EAAA,CAClB,IAAME,CAAAA,UAAAA,EAEN,CAAA,KAAA,CAAOC,aAASD,UAAO,EAAC,EACxB,MAAQC,CAAAA,YAAAA,CAASD,YAAQ,CAC3B,CAAC,CAEKE,CAAAA,CAAAA,CAA6BN,WAAO,CACxC,IAAA,CAAME,YACR,CAAC,EAEKK,CAAqBR,CAAAA,CAAAA,CAAuB,MAChDS,CAAAA,mBAAAA,CAAoB,OAAQ,EAAA,CAAE,KAChC,CAEMC,CAAAA,CAAAA,CAAyBH,EAA2B,MACxDE,CAAAA,mBAAAA,CAAoB,SAAU,CAAA,KAChC,EAEME,CAAaC,CAAAA,mBAAAA,CAAY,OAAO,CACpC,UAAA,CAAYC,YAAQ,MAAM,CAAA,CAAE,QAAQ,MAAM,CAAA,CAC1C,QAAUL,CAAAA,CACZ,CAAC,CAAA,CAEKM,EAAmBC,sBAAmB,CAAA,OAAA,CAAS,CAEnDC,mBAAkB,CAAA,MAAA,CAAO,CACvB,UAAYH,CAAAA,WAAAA,CAAQ,MAAM,CAAE,CAAA,OAAA,CAAQ,MAAM,CAC1C,CAAA,KAAA,CAAOA,YAAQ,SAAS,CAAA,CAAE,QAAQ,SAAS,CAAA,CAC3C,SAAUL,CACZ,CAAC,EAEDQ,mBAAkB,CAAA,MAAA,CAAO,CACvB,UAAYH,CAAAA,WAAAA,CAAQ,MAAM,CAAE,CAAA,OAAA,CAAQ,MAAM,CAC1C,CAAA,KAAA,CAAOA,YAAQ,aAAa,CAAA,CAAE,QAAQ,aAAa,CAAA,CACnD,SAAUH,CACZ,CAAC,CACH,CAAC,CAAE,CAAA,SAAA,CAAWO,GAAUC,mBAA+BD,CAAAA,CAAK,CAAC,CAEvDE,CAAAA,CAAAA,CAAmBR,EAAW,OAAQ,EAAA,CACzC,KAAK,CACJ,OAAA,CAAS,KACT,EAAI,CAAA,IAAA,CACJ,WAAY,IACZ,CAAA,YAAA,CAAc,KACd,YAAc,CAAA,IAAA,CACd,IAAM,CAAA,IAAA,CACN,IAAM,CAAA,IAAA,CACN,KAAM,IACR,CAAC,EACA,MAAO,CAAA,CACN,aAAcR,UAAO,EAAA,CAAE,QAAQ,IAAM,IAAI,MAAO,CAAA,WAAA,EAAa,CAC/D,CAAC,EACA,SAAWc,CAAAA,CAAAA,EAAUC,mBAA+BD,CAAAA,CAAK,CAAC","file":"chunk-BQ5WODME.cjs","sourcesContent":["import {\n object,\n string,\n uuid,\n number,\n enum as zodEnum,\n type z,\n optional,\n literal,\n discriminatedUnion,\n nullable\n} from \"zod\";\n\nimport {\n AssetSchema,\n CreateAssetSchema,\n AssetMetadataSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\n\nconst BaseFileMetadataSchema = object({\n id: uuid(), // The id of the file object\n path: string(), // The path of the file in storage\n bucket: zodEnum([\"public-files\", \"files\"]),\n name: string(),\n type: string(),\n extension: string(),\n size: number(),\n // If the file is an image, we store width and height\n width: optional(number()),\n height: optional(number()),\n});\n\nconst BaseStubFileMetadataSchema = object({\n type: string(),\n});\n\nconst FileMetadataSchema = BaseFileMetadataSchema.extend(\n AssetMetadataSchema.partial().shape\n);\n\nconst StubFileMetadataSchema = BaseStubFileMetadataSchema.extend(\n AssetMetadataSchema.partial().shape\n);\n\nconst FileSchema = AssetSchema.extend({\n asset_type: literal(\"file\").default(\"file\"),\n metadata: FileMetadataSchema,\n});\n\nconst CreateFileSchema = discriminatedUnion(\"state\", [\n // Success state, file is ready\n CreateAssetSchema.extend({\n asset_type: literal(\"file\").default(\"file\"),\n state: literal(\"success\").default(\"success\"),\n metadata: FileMetadataSchema,\n }),\n // In-progress state, file is being processed\n CreateAssetSchema.extend({\n asset_type: literal(\"file\").default(\"file\"),\n state: literal(\"in-progress\").default(\"in-progress\"),\n metadata: StubFileMetadataSchema,\n }),\n]).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst updateFileSchema = FileSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n })\n .extend({\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport { FileSchema, CreateFileSchema, updateFileSchema };\nexport type File = z.infer<typeof FileSchema>;\nexport type CreateFile = z.infer<typeof CreateFileSchema>;\nexport type UpdateFile = z.infer<typeof updateFileSchema>;\n"]}
1
+ {"version":3,"sources":["../src/schema/files.ts"],"names":["BaseFileMetadataSchema","object","uuid","string","zodEnum","number","optional","BaseStubFileMetadataSchema","FileMetadataSchema","AssetMetadataSchema","StubFileMetadataSchema","FileSchema","AssetSchema","literal","CreateFileSchema","discriminatedUnion","CreateAssetSchema","value","normalizeAssetConfigForParsing","updateFileSchema"],"mappings":"sFAoBMA,IAAAA,CAAAA,CAAyBC,WAAO,CACpC,EAAA,CAAIC,UACJ,CAAA,IAAA,CAAMC,YACN,CAAA,MAAA,CAAQC,SAAQ,CAAC,cAAA,CAAgB,OAAO,CAAC,CAAA,CACzC,KAAMD,UAAO,EAAA,CACb,KAAMA,UAAO,EAAA,CACb,UAAWA,UAAO,EAAA,CAClB,IAAME,CAAAA,UAAAA,EAEN,CAAA,KAAA,CAAOC,aAASD,UAAO,EAAC,EACxB,MAAQC,CAAAA,YAAAA,CAASD,YAAQ,CAC3B,CAAC,CAEKE,CAAAA,CAAAA,CAA6BN,WAAO,CACxC,IAAA,CAAME,YACR,CAAC,EAEKK,CAAqBR,CAAAA,CAAAA,CAAuB,MAChDS,CAAAA,mBAAAA,CAAoB,OAAQ,EAAA,CAAE,KAChC,CAEMC,CAAAA,CAAAA,CAAyBH,EAA2B,MACxDE,CAAAA,mBAAAA,CAAoB,SAAU,CAAA,KAChC,EAEME,CAAaC,CAAAA,mBAAAA,CAAY,OAAO,CACpC,UAAA,CAAYC,YAAQ,MAAM,CAAA,CAAE,QAAQ,MAAM,CAAA,CAC1C,QAAUL,CAAAA,CACZ,CAAC,CAAA,CAEKM,EAAmBC,sBAAmB,CAAA,OAAA,CAAS,CAEnDC,mBAAkB,CAAA,MAAA,CAAO,CACvB,UAAYH,CAAAA,WAAAA,CAAQ,MAAM,CAAE,CAAA,OAAA,CAAQ,MAAM,CAC1C,CAAA,KAAA,CAAOA,YAAQ,SAAS,CAAA,CAAE,QAAQ,SAAS,CAAA,CAC3C,SAAUL,CACZ,CAAC,EAEDQ,mBAAkB,CAAA,MAAA,CAAO,CACvB,UAAYH,CAAAA,WAAAA,CAAQ,MAAM,CAAE,CAAA,OAAA,CAAQ,MAAM,CAC1C,CAAA,KAAA,CAAOA,YAAQ,aAAa,CAAA,CAAE,QAAQ,aAAa,CAAA,CACnD,SAAUH,CACZ,CAAC,CACH,CAAC,CAAE,CAAA,SAAA,CAAWO,GAAUC,mBAA+BD,CAAAA,CAAK,CAAC,CAEvDE,CAAAA,CAAAA,CAAmBR,EAAW,OAAQ,EAAA,CACzC,KAAK,CACJ,OAAA,CAAS,KACT,EAAI,CAAA,IAAA,CACJ,WAAY,IACZ,CAAA,YAAA,CAAc,KACd,YAAc,CAAA,IAAA,CACd,IAAM,CAAA,IAAA,CACN,IAAM,CAAA,IAAA,CACN,KAAM,IACR,CAAC,EACA,MAAO,CAAA,CACN,aAAcR,UAAO,EAAA,CAAE,QAAQ,IAAM,IAAI,MAAO,CAAA,WAAA,EAAa,CAC/D,CAAC,EACA,SAAWc,CAAAA,CAAAA,EAAUC,mBAA+BD,CAAAA,CAAK,CAAC","file":"chunk-6XQFD2Z2.cjs","sourcesContent":["import {\n object,\n string,\n uuid,\n number,\n enum as zodEnum,\n type z,\n optional,\n literal,\n discriminatedUnion,\n nullable\n} from \"zod\";\n\nimport {\n AssetSchema,\n CreateAssetSchema,\n AssetMetadataSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\n\nconst BaseFileMetadataSchema = object({\n id: uuid(), // The id of the file object\n path: string(), // The path of the file in storage\n bucket: zodEnum([\"public-files\", \"files\"]),\n name: string(),\n type: string(),\n extension: string(),\n size: number(),\n // If the file is an image, we store width and height\n width: optional(number()),\n height: optional(number()),\n});\n\nconst BaseStubFileMetadataSchema = object({\n type: string(),\n});\n\nconst FileMetadataSchema = BaseFileMetadataSchema.extend(\n AssetMetadataSchema.partial().shape\n);\n\nconst StubFileMetadataSchema = BaseStubFileMetadataSchema.extend(\n AssetMetadataSchema.partial().shape\n);\n\nconst FileSchema = AssetSchema.extend({\n asset_type: literal(\"file\").default(\"file\"),\n metadata: FileMetadataSchema,\n});\n\nconst CreateFileSchema = discriminatedUnion(\"state\", [\n // Success state, file is ready\n CreateAssetSchema.extend({\n asset_type: literal(\"file\").default(\"file\"),\n state: literal(\"success\").default(\"success\"),\n metadata: FileMetadataSchema,\n }),\n // In-progress state, file is being processed\n CreateAssetSchema.extend({\n asset_type: literal(\"file\").default(\"file\"),\n state: literal(\"in-progress\").default(\"in-progress\"),\n metadata: StubFileMetadataSchema,\n }),\n]).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst updateFileSchema = FileSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n })\n .extend({\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport { FileSchema, CreateFileSchema, updateFileSchema };\nexport type File = z.infer<typeof FileSchema>;\nexport type CreateFile = z.infer<typeof CreateFileSchema>;\nexport type UpdateFile = z.infer<typeof updateFileSchema>;\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkROMY5WNQ_cjs=require('./chunk-ROMY5WNQ.cjs'),chunk43KB23BA_cjs=require('./chunk-43KB23BA.cjs'),zod=require('zod');var h=zod.lazy(()=>zod.object({type:zod.string(),content:zod.optional(zod.array(h)),attrs:zod.optional(zod.record(zod.string(),zod.any())),marks:zod.optional(zod.array(zod.object({type:zod.string(),attrs:zod.optional(zod.record(zod.string(),zod.any()))}))),text:zod.optional(zod.string())})),c=zod.object({type:zod.literal("doc"),content:zod.array(h)}),P=zod.object({json:c,text:zod.string()}).default({json:{type:"doc",content:[]},text:""}),z=zod.object({}),T=z.extend(chunkROMY5WNQ_cjs.b.partial().shape),m=chunkROMY5WNQ_cjs.c.extend({name:zod.nullable(zod.string()),asset_type:chunk43KB23BA_cjs.a.refine(t=>["post","comment"].includes(t)),metadata:T,preview:c.default({type:"doc",content:[]}),content:P}),A=chunkROMY5WNQ_cjs.d.extend({asset_type:zod.literal("post").default("post"),name:zod.string().optional().nullable().default("").transform(t=>t==null?void 0:t.trim()).transform(t=>t||null),preview:c}).transform(t=>chunkROMY5WNQ_cjs.a(t)),C=m.extend({content:zod.optional(zod.nullable(P.default({json:{type:"doc",content:[]},text:""}))),reactions:zod.array(zod.record(zod.string(),zod.any())).default([]),views:zod.number().default(0),commentCount:zod.number().default(0)}),j=zod.array(C),w=zod.array(m),v=m.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,content:true,organization:true,user:true,team:true,slug:true}).extend({last_updated:zod.string().default(()=>new Date().toISOString())}).transform(t=>chunkROMY5WNQ_cjs.a(t));exports.a=c;exports.b=P;exports.c=m;exports.d=A;exports.e=C;exports.f=j;exports.g=w;exports.h=v;//# sourceMappingURL=chunk-DC6TYS3A.cjs.map
2
+ //# sourceMappingURL=chunk-DC6TYS3A.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema/posts.ts"],"names":["TipTapNode","lazy","object","string","optional","array","record","any","TipTapSchema","literal","ContentSchema","BasePostMetadataSchema","PostMetadataSchema","AssetMetadataSchema","PostSchema","AssetSchema","nullable","AssetTypeSchema","x","CreatePostSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","ReadPostSchema","number","ReadPostsSchema","ListPostsSchema","UpdatePostSchema"],"mappings":"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","file":"chunk-DC6TYS3A.cjs","sourcesContent":["import {\n object,\n string,\n number,\n array,\n lazy,\n literal,\n record,\n type z,\n any,\n optional,\n nullable,\n boolean,\n type ZodType\n} from \"zod\";\n\nimport {\n AssetMetadataSchema,\n AssetSchema,\n CreateAssetSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\n\nconst TipTapNode: ZodType<any> = lazy(() =>\n object({\n type: string(),\n content: optional(array(TipTapNode)),\n attrs: optional(record(string(), any())),\n marks: optional(\n array(\n object({\n type: string(),\n attrs: optional(record(string(), any())),\n })\n )\n ),\n text: optional(string()), // For text nodes\n })\n);\n\nconst TipTapSchema = object({\n type: literal(\"doc\"),\n content: array(TipTapNode),\n});\n\nconst ContentSchema = object({\n json: TipTapSchema,\n text: string(),\n}).default({ json: { type: \"doc\", content: [] }, text: \"\" });\n\nconst BasePostMetadataSchema = object({})\n\nconst PostMetadataSchema = BasePostMetadataSchema.extend(\n AssetMetadataSchema.partial().shape\n);\n\nconst PostSchema = AssetSchema.extend({\n name: nullable(string()),\n asset_type: AssetTypeSchema.refine((x) => [\"post\", \"comment\"].includes(x)),\n metadata: PostMetadataSchema,\n // TODO: make this ContentSchema\n preview: TipTapSchema.default({ type: \"doc\", content: [] }),\n content: ContentSchema,\n\n});\n\nconst CreatePostSchema = CreateAssetSchema.extend({\n asset_type: literal(\"post\").default(\"post\"),\n name: string()\n .optional()\n .nullable()\n .default(\"\")\n .transform((x) => x?.trim())\n .transform((x) => x || null),\n preview: TipTapSchema,\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst ReadPostSchema = PostSchema.extend({\n content: optional(\n nullable(\n ContentSchema.default({\n json: { type: \"doc\", content: [] },\n text: \"\",\n })\n )\n ),\n reactions: array(record(string(), any())).default([]),\n views: number().default(0),\n commentCount: number().default(0),\n // We have this on asset now\n // parent: ConnectionSchema.optional().nullable(),\n});\n\nconst ReadPostsSchema = array(ReadPostSchema);\n\nconst ListPostsSchema = array(PostSchema);\n\nconst UpdatePostSchema = PostSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n content: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n })\n .extend({\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport {\n TipTapSchema,\n ContentSchema,\n PostSchema,\n CreatePostSchema,\n ListPostsSchema,\n ReadPostSchema,\n ReadPostsSchema,\n UpdatePostSchema,\n};\nexport type Post = z.infer<typeof PostSchema>;\nexport type CreatePost = z.infer<typeof CreatePostSchema>;\nexport type ListPosts = z.infer<typeof ListPostsSchema>;\nexport type ReadPost = z.infer<typeof ReadPostSchema>;\nexport type ReadPosts = z.infer<typeof ReadPostsSchema>;\nexport type UpdatePost = z.infer<typeof UpdatePostSchema>;\nexport type Content = z.infer<typeof ContentSchema>;\nexport type TipTap = z.infer<typeof TipTapSchema>;\n"]}
@@ -1,2 +1,2 @@
1
- import {a,d,c as c$1}from'./chunk-JKTQY4RU.js';import {c,b,d as d$1,a as a$2}from'./chunk-G2MXCB7Q.js';import {a as a$1}from'./chunk-WRHPQNEL.js';import {enum as _enum,object,optional,string,array,any,record,literal,number,uuid,nullable,boolean,union}from'zod';var E=_enum(["closable","continuous"]),w=_enum(["draft","open","closed","cancelled"]),f=_enum(["pending","in_progress","done","skipped"]),C=_enum(["btc","usd"]),I=_enum(["skipped","running","passed","failed","errored"]),q=_enum(["submitted","accepted","rejected"]),T=object({type:string(),content:optional(array(any())),attrs:optional(record(string(),any())),marks:optional(array(any())),text:optional(string())}),p=object({json:object({type:literal("doc"),content:array(T)}),text:string()}),k=object({id:uuid(),quest_id:uuid(),description:string(),status:f.default("pending"),auto_skipped:optional(nullable(string().or(any()))),status_before_auto_skip:optional(nullable(f)),sort_order:number().default(0),type:string().default("task"),created_by:uuid(),assignee_id:optional(nullable(uuid())),expected_asset_type:optional(nullable(a$1)),reward_xp:number().int().nonnegative().default(0),reward_currency:C.default("btc"),reward_amount:number().int().nonnegative().default(0),child_quest_id:optional(nullable(uuid())),eval_route_id:optional(nullable(uuid())),eval_score_path:optional(nullable(string())),eval_pass_min:optional(nullable(number())),eval_pass_max:optional(nullable(number())),submission_assets:optional(nullable(record(string(),d))),eval_static_inputs:optional(nullable(a)),notes:optional(nullable(string())),contributor_keys:optional(nullable(array(object({key:string(),required:boolean().default(true),filters:object({assetType:optional(string()),fileType:optional(string()),extensions:optional(array(string())),hasConstraints:boolean().default(false)})})))),created_at:string(),updated_at:string()}),A=k,S=object({description:string().min(1,{message:"Item description cannot be empty"}),type:optional(string()).default("task"),sort_order:optional(number().int()),assignee_id:optional(nullable(uuid())),expected_asset_type:optional(nullable(a$1)),reward_xp:optional(number().int().nonnegative()).default(0),reward_currency:optional(C).default("btc"),reward_amount:optional(number().int().nonnegative()).default(0),child_quest_id:optional(nullable(uuid())),eval_route_id:optional(nullable(uuid())),eval_score_path:optional(nullable(string())),eval_pass_min:optional(nullable(number())),eval_pass_max:optional(nullable(number())),submission_assets:optional(nullable(record(string(),d))),eval_static_inputs:optional(nullable(a)),notes:optional(nullable(string()))}),R=union([string().transform(u=>({description:u})),S]).pipe(S),U=object({type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:optional(nullable(number().int().nonnegative())),closed_at:optional(nullable(string()))}),j=c.extend({asset_type:literal("quest").default("quest"),metadata:optional(nullable(b.partial())),quest:optional(U.partial()),items:optional(array(A.partial())),progress:optional(object({total:number(),done:number(),remaining:number()}))}),Z=d$1.extend({asset_type:literal("quest").default("quest"),name:optional(nullable(string())).default(null),description:optional(nullable(p)),type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:optional(nullable(number().int().nonnegative())),items:optional(array(R)).default([])}).transform(u=>a$2(u)),F=j.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true,items:true,progress:true}).extend({asset_type:literal("quest").default("quest"),last_updated:string().default(()=>new Date().toISOString())}).transform(u=>a$2(u)),M=S.partial().extend({status:optional(f)}),N=object({id:uuid(),quest_id:uuid(),user_id:uuid(),item_id:optional(nullable(uuid())),asset_id:optional(nullable(uuid())),asset_type:optional(nullable(a$1)),assets:optional(nullable(a)),description:optional(nullable(p)),review:optional(nullable(p)),status:q,reviewer_id:optional(nullable(uuid())),reviewed_at:optional(nullable(string())),eval_action_id:optional(nullable(uuid())),eval_score:optional(nullable(number())),eval_status:optional(nullable(I)),created_at:string(),updated_at:string()}),P=object({item_id:uuid(),assets:optional(nullable(c$1)),description:optional(nullable(union([string(),p])))}),G=object({status:_enum(["accepted","rejected"]),review:optional(nullable(union([string(),p])))});export{E as a,w as b,f as c,C as d,I as e,q as f,k as g,A as h,S as i,R as j,j as k,Z as l,F as m,M as n,N as o,P as p,G as q};//# sourceMappingURL=chunk-Z3ALIFYO.js.map
2
- //# sourceMappingURL=chunk-Z3ALIFYO.js.map
1
+ import {a,d,c as c$1}from'./chunk-M2JJPDBW.js';import {c,b,d as d$1,a as a$2}from'./chunk-SR5UZ4NP.js';import {a as a$1}from'./chunk-WRHPQNEL.js';import {enum as _enum,object,optional,string,array,any,record,literal,number,uuid,nullable,boolean,union}from'zod';var E=_enum(["closable","continuous"]),w=_enum(["draft","open","closed","cancelled"]),f=_enum(["pending","in_progress","done","skipped"]),C=_enum(["btc","usd"]),I=_enum(["skipped","running","passed","failed","errored"]),q=_enum(["submitted","accepted","rejected"]),T=object({type:string(),content:optional(array(any())),attrs:optional(record(string(),any())),marks:optional(array(any())),text:optional(string())}),p=object({json:object({type:literal("doc"),content:array(T)}),text:string()}),k=object({id:uuid(),quest_id:uuid(),description:string(),status:f.default("pending"),auto_skipped:optional(nullable(string().or(any()))),status_before_auto_skip:optional(nullable(f)),sort_order:number().default(0),type:string().default("task"),created_by:uuid(),assignee_id:optional(nullable(uuid())),expected_asset_type:optional(nullable(a$1)),reward_xp:number().int().nonnegative().default(0),reward_currency:C.default("btc"),reward_amount:number().int().nonnegative().default(0),child_quest_id:optional(nullable(uuid())),eval_route_id:optional(nullable(uuid())),eval_score_path:optional(nullable(string())),eval_pass_min:optional(nullable(number())),eval_pass_max:optional(nullable(number())),submission_assets:optional(nullable(record(string(),d))),eval_static_inputs:optional(nullable(a)),notes:optional(nullable(string())),contributor_keys:optional(nullable(array(object({key:string(),required:boolean().default(true),filters:object({assetType:optional(string()),fileType:optional(string()),extensions:optional(array(string())),hasConstraints:boolean().default(false)})})))),created_at:string(),updated_at:string()}),A=k,S=object({description:string().min(1,{message:"Item description cannot be empty"}),type:optional(string()).default("task"),sort_order:optional(number().int()),assignee_id:optional(nullable(uuid())),expected_asset_type:optional(nullable(a$1)),reward_xp:optional(number().int().nonnegative()).default(0),reward_currency:optional(C).default("btc"),reward_amount:optional(number().int().nonnegative()).default(0),child_quest_id:optional(nullable(uuid())),eval_route_id:optional(nullable(uuid())),eval_score_path:optional(nullable(string())),eval_pass_min:optional(nullable(number())),eval_pass_max:optional(nullable(number())),submission_assets:optional(nullable(record(string(),d))),eval_static_inputs:optional(nullable(a)),notes:optional(nullable(string()))}),R=union([string().transform(u=>({description:u})),S]).pipe(S),U=object({type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:optional(nullable(number().int().nonnegative())),closed_at:optional(nullable(string()))}),j=c.extend({asset_type:literal("quest").default("quest"),metadata:optional(nullable(b.partial())),quest:optional(U.partial()),items:optional(array(A.partial())),progress:optional(object({total:number(),done:number(),remaining:number()}))}),Z=d$1.extend({asset_type:literal("quest").default("quest"),name:optional(nullable(string())).default(null),description:optional(nullable(p)),type:E.default("closable"),status:w.default("open"),max_xp_per_contributor:optional(nullable(number().int().nonnegative())),items:optional(array(R)).default([])}).transform(u=>a$2(u)),F=j.partial().omit({user_id:true,id:true,created_at:true,last_updated:true,organization:true,user:true,team:true,slug:true,items:true,progress:true}).extend({asset_type:literal("quest").default("quest"),last_updated:string().default(()=>new Date().toISOString())}).transform(u=>a$2(u)),M=S.partial().extend({status:optional(f)}),N=object({id:uuid(),quest_id:uuid(),user_id:uuid(),item_id:optional(nullable(uuid())),asset_id:optional(nullable(uuid())),asset_type:optional(nullable(a$1)),assets:optional(nullable(a)),description:optional(nullable(p)),review:optional(nullable(p)),status:q,reviewer_id:optional(nullable(uuid())),reviewed_at:optional(nullable(string())),eval_action_id:optional(nullable(uuid())),eval_score:optional(nullable(number())),eval_status:optional(nullable(I)),created_at:string(),updated_at:string()}),P=object({item_id:uuid(),assets:optional(nullable(c$1)),description:optional(nullable(union([string(),p])))}),G=object({status:_enum(["accepted","rejected"]),review:optional(nullable(union([string(),p])))});export{E as a,w as b,f as c,C as d,I as e,q as f,k as g,A as h,S as i,R as j,j as k,Z as l,F as m,M as n,N as o,P as p,G as q};//# sourceMappingURL=chunk-EK5P7FST.js.map
2
+ //# sourceMappingURL=chunk-EK5P7FST.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/quests.ts"],"names":["QuestTypeSchema","zodEnum","QuestStatusSchema","QuestItemStatusSchema","RewardCurrencySchema","EntryEvalStatusSchema","EntryStatusSchema","TipTapNode","object","string","optional","array","any","record","ContentSchema","literal","QuestItemBaseSchema","uuid","nullable","number","AssetTypeSchema","QuestSubmissionAssetDeclarationSchema","KeyedAssetRefsSchema","zodBoolean","QuestItemSchema","CreateQuestItemObjectSchema","CreateQuestItemSchema","union","s","QuestSpecificsSchema","QuestSchema","AssetSchema","AssetMetadataSchema","CreateQuestSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","UpdateQuestSchema","UpdateQuestItemSchema","EntrySchema","CreateEntrySchema","KeyedAssetInputSchema","ReviewEntrySchema"],"mappings":"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","file":"chunk-Z3ALIFYO.js","sourcesContent":["import {\n object,\n string,\n number,\n array,\n literal,\n record,\n type z,\n any,\n optional,\n nullable,\n union,\n uuid,\n boolean as zodBoolean,\n enum as zodEnum,\n type ZodType,\n} from \"zod\";\n\nimport {\n AssetSchema,\n AssetMetadataSchema,\n CreateAssetSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\nimport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n} from \"../utils/quest-submission\";\n\n// ── Enums ──────────────────────────────────────────────────────────────\n\n/** closable: one active entry per item per user; continuous: unlimited per item */\nconst QuestTypeSchema = zodEnum([\"closable\", \"continuous\"]);\nconst QuestStatusSchema = zodEnum([\"draft\", \"open\", \"closed\", \"cancelled\"]);\n\nconst QuestItemStatusSchema = zodEnum([\n \"pending\",\n \"in_progress\",\n \"done\",\n \"skipped\",\n]);\n\nconst RewardCurrencySchema = zodEnum([\"btc\", \"usd\"]);\n\nconst EntryEvalStatusSchema = zodEnum([\n \"skipped\",\n \"running\",\n \"passed\",\n \"failed\",\n \"errored\",\n]);\n\nconst EntryStatusSchema = zodEnum([\"submitted\", \"accepted\", \"rejected\"]);\n\n// ── Content (TipTap) ───────────────────────────────────────────────────\n// Posts/quests share the same rich description shape: { json, text }.\n// We mirror it locally here so the quest schema doesn't depend on posts.\n\nconst TipTapNode: ZodType<any> = object({\n type: string(),\n content: optional(array(any())),\n attrs: optional(record(string(), any())),\n marks: optional(array(any())),\n text: optional(string()),\n});\n\nconst ContentSchema = object({\n json: object({\n type: literal(\"doc\"),\n content: array(TipTapNode),\n }),\n text: string(),\n});\n\n// ── Quest items ────────────────────────────────────────────────────────\n\nconst QuestItemBaseSchema = object({\n id: uuid(),\n quest_id: uuid(),\n description: string(),\n status: QuestItemStatusSchema.default(\"pending\"),\n auto_skipped: optional(nullable(string().or(any()))),\n status_before_auto_skip: optional(nullable(QuestItemStatusSchema)),\n sort_order: number().default(0),\n type: string().default(\"task\"),\n created_by: uuid(),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: number().int().nonnegative().default(0),\n reward_currency: RewardCurrencySchema.default(\"btc\"),\n reward_amount: number().int().nonnegative().default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n contributor_keys: optional(\n nullable(\n array(\n object({\n key: string(),\n required: zodBoolean().default(true),\n filters: object({\n assetType: optional(string()),\n fileType: optional(string()),\n extensions: optional(array(string())),\n hasConstraints: zodBoolean().default(false),\n }),\n }),\n ),\n ),\n ),\n created_at: string(),\n updated_at: string(),\n});\n\nconst QuestItemSchema = QuestItemBaseSchema;\n\n/**\n * Shape used by `POST /quests/create` (inline items) and\n * `POST /quests/:id/items` (batch add). The controller fills in\n * `quest_id`, `created_by`, and lifecycle-derived fields\n * (`auto_skipped`, `status_before_auto_skip`).\n *\n * Accepts a plain description string as a convenience — it's lifted\n * into `{ description }` by the `union` below.\n */\nconst CreateQuestItemObjectSchema = object({\n description: string().min(1, { message: \"Item description cannot be empty\" }),\n type: optional(string()).default(\"task\"),\n sort_order: optional(number().int()),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: optional(number().int().nonnegative()).default(0),\n reward_currency: optional(RewardCurrencySchema).default(\"btc\"),\n // Amount is in minor units of `reward_currency`: sats for BTC, cents\n // for USD. Both fit in JS numbers comfortably for our reward sizes;\n // the underlying column is `bigint`.\n reward_amount: optional(number().int().nonnegative()).default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n});\n\nconst CreateQuestItemSchema = union([\n string().transform((s) => ({ description: s })),\n CreateQuestItemObjectSchema,\n]).pipe(CreateQuestItemObjectSchema);\n\n// ── Quest ──────────────────────────────────────────────────────────────\n\nconst QuestSpecificsSchema = object({\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n closed_at: optional(nullable(string())),\n});\n\nconst QuestSchema = AssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n metadata: optional(nullable(AssetMetadataSchema.partial())),\n // `read /quests/:id` returns the quest specifics nested under `quest`\n // and hoists items to the top level for convenience.\n quest: optional(QuestSpecificsSchema.partial()),\n items: optional(array(QuestItemSchema.partial())),\n progress: optional(\n object({\n total: number(),\n done: number(),\n remaining: number(),\n }),\n ),\n});\n\n/**\n * Schema used by the backend controller and SDK clients to validate /\n * default the body of `POST /quests/create`. Mirrors how\n * `CreatePostSchema` defaults `org_id`/`team_id` so non-frontend callers\n * don't have to know about `GLOBAL_ORG_ID`.\n *\n * The `items` field accepts either plain strings or full item objects —\n * the backend `createQuestItems`/`createQuest` paths already handle both\n * shapes, and `CreateQuestItemSchema` normalizes strings into\n * `{ description }`.\n */\nconst CreateQuestSchema = CreateAssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n name: optional(nullable(string())).default(null),\n description: optional(nullable(ContentSchema)),\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n items: optional(array(CreateQuestItemSchema)).default([]),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestSchema = QuestSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n items: true,\n progress: true,\n })\n .extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestItemSchema = CreateQuestItemObjectSchema.partial().extend({\n status: optional(QuestItemStatusSchema),\n});\n\n// ── Entries ────────────────────────────────────────────────────────────\n\nconst EntrySchema = object({\n id: uuid(),\n quest_id: uuid(),\n user_id: uuid(),\n item_id: optional(nullable(uuid())),\n asset_id: optional(nullable(uuid())),\n asset_type: optional(nullable(AssetTypeSchema)),\n assets: optional(nullable(KeyedAssetRefsSchema)),\n description: optional(nullable(ContentSchema)),\n review: optional(nullable(ContentSchema)),\n status: EntryStatusSchema,\n reviewer_id: optional(nullable(uuid())),\n reviewed_at: optional(nullable(string())),\n eval_action_id: optional(nullable(uuid())),\n eval_score: optional(nullable(number())),\n eval_status: optional(nullable(EntryEvalStatusSchema)),\n created_at: string(),\n updated_at: string(),\n});\n\nconst CreateEntrySchema = object({\n item_id: uuid(),\n assets: optional(nullable(KeyedAssetInputSchema)),\n description: optional(nullable(union([string(), ContentSchema]))),\n});\n\nconst ReviewEntrySchema = object({\n status: zodEnum([\"accepted\", \"rejected\"]),\n review: optional(nullable(union([string(), ContentSchema]))),\n});\n\n// ── Exports ────────────────────────────────────────────────────────────\n\nexport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n QuestTypeSchema,\n QuestStatusSchema,\n QuestItemStatusSchema,\n RewardCurrencySchema,\n EntryEvalStatusSchema,\n EntryStatusSchema,\n QuestSchema,\n QuestItemSchema,\n QuestItemBaseSchema,\n CreateQuestSchema,\n CreateQuestItemSchema,\n CreateQuestItemObjectSchema,\n UpdateQuestSchema,\n UpdateQuestItemSchema,\n EntrySchema,\n CreateEntrySchema,\n ReviewEntrySchema,\n};\n\nexport type QuestType = z.infer<typeof QuestTypeSchema>;\nexport type QuestStatus = z.infer<typeof QuestStatusSchema>;\nexport type QuestItemStatus = z.infer<typeof QuestItemStatusSchema>;\nexport type RewardCurrency = z.infer<typeof RewardCurrencySchema>;\nexport type EntryEvalStatus = z.infer<typeof EntryEvalStatusSchema>;\nexport type EntryStatus = z.infer<typeof EntryStatusSchema>;\nexport type Quest = z.infer<typeof QuestSchema>;\nexport type QuestItem = z.infer<typeof QuestItemSchema>;\nexport type CreateQuest = z.infer<typeof CreateQuestSchema>;\nexport type CreateQuestItem = z.infer<typeof CreateQuestItemSchema>;\nexport type UpdateQuest = z.infer<typeof UpdateQuestSchema>;\nexport type UpdateQuestItem = z.infer<typeof UpdateQuestItemSchema>;\nexport type Entry = z.infer<typeof EntrySchema>;\nexport type CreateEntry = z.infer<typeof CreateEntrySchema>;\nexport type ReviewEntry = z.infer<typeof ReviewEntrySchema>;\n"]}
1
+ {"version":3,"sources":["../src/schema/quests.ts"],"names":["QuestTypeSchema","zodEnum","QuestStatusSchema","QuestItemStatusSchema","RewardCurrencySchema","EntryEvalStatusSchema","EntryStatusSchema","TipTapNode","object","string","optional","array","any","record","ContentSchema","literal","QuestItemBaseSchema","uuid","nullable","number","AssetTypeSchema","QuestSubmissionAssetDeclarationSchema","KeyedAssetRefsSchema","zodBoolean","QuestItemSchema","CreateQuestItemObjectSchema","CreateQuestItemSchema","union","s","QuestSpecificsSchema","QuestSchema","AssetSchema","AssetMetadataSchema","CreateQuestSchema","CreateAssetSchema","value","normalizeAssetConfigForParsing","UpdateQuestSchema","UpdateQuestItemSchema","EntrySchema","CreateEntrySchema","KeyedAssetInputSchema","ReviewEntrySchema"],"mappings":"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","file":"chunk-EK5P7FST.js","sourcesContent":["import {\n object,\n string,\n number,\n array,\n literal,\n record,\n type z,\n any,\n optional,\n nullable,\n union,\n uuid,\n boolean as zodBoolean,\n enum as zodEnum,\n type ZodType,\n} from \"zod\";\n\nimport {\n AssetSchema,\n AssetMetadataSchema,\n CreateAssetSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\nimport { AssetTypeSchema } from \"./common\";\nimport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n} from \"../utils/quest-submission\";\n\n// ── Enums ──────────────────────────────────────────────────────────────\n\n/** closable: one active entry per item per user; continuous: unlimited per item */\nconst QuestTypeSchema = zodEnum([\"closable\", \"continuous\"]);\nconst QuestStatusSchema = zodEnum([\"draft\", \"open\", \"closed\", \"cancelled\"]);\n\nconst QuestItemStatusSchema = zodEnum([\n \"pending\",\n \"in_progress\",\n \"done\",\n \"skipped\",\n]);\n\nconst RewardCurrencySchema = zodEnum([\"btc\", \"usd\"]);\n\nconst EntryEvalStatusSchema = zodEnum([\n \"skipped\",\n \"running\",\n \"passed\",\n \"failed\",\n \"errored\",\n]);\n\nconst EntryStatusSchema = zodEnum([\"submitted\", \"accepted\", \"rejected\"]);\n\n// ── Content (TipTap) ───────────────────────────────────────────────────\n// Posts/quests share the same rich description shape: { json, text }.\n// We mirror it locally here so the quest schema doesn't depend on posts.\n\nconst TipTapNode: ZodType<any> = object({\n type: string(),\n content: optional(array(any())),\n attrs: optional(record(string(), any())),\n marks: optional(array(any())),\n text: optional(string()),\n});\n\nconst ContentSchema = object({\n json: object({\n type: literal(\"doc\"),\n content: array(TipTapNode),\n }),\n text: string(),\n});\n\n// ── Quest items ────────────────────────────────────────────────────────\n\nconst QuestItemBaseSchema = object({\n id: uuid(),\n quest_id: uuid(),\n description: string(),\n status: QuestItemStatusSchema.default(\"pending\"),\n auto_skipped: optional(nullable(string().or(any()))),\n status_before_auto_skip: optional(nullable(QuestItemStatusSchema)),\n sort_order: number().default(0),\n type: string().default(\"task\"),\n created_by: uuid(),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: number().int().nonnegative().default(0),\n reward_currency: RewardCurrencySchema.default(\"btc\"),\n reward_amount: number().int().nonnegative().default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n contributor_keys: optional(\n nullable(\n array(\n object({\n key: string(),\n required: zodBoolean().default(true),\n filters: object({\n assetType: optional(string()),\n fileType: optional(string()),\n extensions: optional(array(string())),\n hasConstraints: zodBoolean().default(false),\n }),\n }),\n ),\n ),\n ),\n created_at: string(),\n updated_at: string(),\n});\n\nconst QuestItemSchema = QuestItemBaseSchema;\n\n/**\n * Shape used by `POST /quests/create` (inline items) and\n * `POST /quests/:id/items` (batch add). The controller fills in\n * `quest_id`, `created_by`, and lifecycle-derived fields\n * (`auto_skipped`, `status_before_auto_skip`).\n *\n * Accepts a plain description string as a convenience — it's lifted\n * into `{ description }` by the `union` below.\n */\nconst CreateQuestItemObjectSchema = object({\n description: string().min(1, { message: \"Item description cannot be empty\" }),\n type: optional(string()).default(\"task\"),\n sort_order: optional(number().int()),\n assignee_id: optional(nullable(uuid())),\n expected_asset_type: optional(nullable(AssetTypeSchema)),\n reward_xp: optional(number().int().nonnegative()).default(0),\n reward_currency: optional(RewardCurrencySchema).default(\"btc\"),\n // Amount is in minor units of `reward_currency`: sats for BTC, cents\n // for USD. Both fit in JS numbers comfortably for our reward sizes;\n // the underlying column is `bigint`.\n reward_amount: optional(number().int().nonnegative()).default(0),\n child_quest_id: optional(nullable(uuid())),\n eval_route_id: optional(nullable(uuid())),\n eval_score_path: optional(nullable(string())),\n eval_pass_min: optional(nullable(number())),\n eval_pass_max: optional(nullable(number())),\n submission_assets: optional(\n nullable(record(string(), QuestSubmissionAssetDeclarationSchema)),\n ),\n eval_static_inputs: optional(nullable(KeyedAssetRefsSchema)),\n notes: optional(nullable(string())),\n});\n\nconst CreateQuestItemSchema = union([\n string().transform((s) => ({ description: s })),\n CreateQuestItemObjectSchema,\n]).pipe(CreateQuestItemObjectSchema);\n\n// ── Quest ──────────────────────────────────────────────────────────────\n\nconst QuestSpecificsSchema = object({\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n closed_at: optional(nullable(string())),\n});\n\nconst QuestSchema = AssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n metadata: optional(nullable(AssetMetadataSchema.partial())),\n // `read /quests/:id` returns the quest specifics nested under `quest`\n // and hoists items to the top level for convenience.\n quest: optional(QuestSpecificsSchema.partial()),\n items: optional(array(QuestItemSchema.partial())),\n progress: optional(\n object({\n total: number(),\n done: number(),\n remaining: number(),\n }),\n ),\n});\n\n/**\n * Schema used by the backend controller and SDK clients to validate /\n * default the body of `POST /quests/create`. Mirrors how\n * `CreatePostSchema` defaults `org_id`/`team_id` so non-frontend callers\n * don't have to know about `GLOBAL_ORG_ID`.\n *\n * The `items` field accepts either plain strings or full item objects —\n * the backend `createQuestItems`/`createQuest` paths already handle both\n * shapes, and `CreateQuestItemSchema` normalizes strings into\n * `{ description }`.\n */\nconst CreateQuestSchema = CreateAssetSchema.extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n name: optional(nullable(string())).default(null),\n description: optional(nullable(ContentSchema)),\n type: QuestTypeSchema.default(\"closable\"),\n status: QuestStatusSchema.default(\"open\"),\n max_xp_per_contributor: optional(nullable(number().int().nonnegative())),\n items: optional(array(CreateQuestItemSchema)).default([]),\n}).transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestSchema = QuestSchema.partial()\n .omit({\n user_id: true,\n id: true,\n created_at: true,\n last_updated: true,\n organization: true,\n user: true,\n team: true,\n slug: true,\n items: true,\n progress: true,\n })\n .extend({\n asset_type: literal(\"quest\").default(\"quest\"),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nconst UpdateQuestItemSchema = CreateQuestItemObjectSchema.partial().extend({\n status: optional(QuestItemStatusSchema),\n});\n\n// ── Entries ────────────────────────────────────────────────────────────\n\nconst EntrySchema = object({\n id: uuid(),\n quest_id: uuid(),\n user_id: uuid(),\n item_id: optional(nullable(uuid())),\n asset_id: optional(nullable(uuid())),\n asset_type: optional(nullable(AssetTypeSchema)),\n assets: optional(nullable(KeyedAssetRefsSchema)),\n description: optional(nullable(ContentSchema)),\n review: optional(nullable(ContentSchema)),\n status: EntryStatusSchema,\n reviewer_id: optional(nullable(uuid())),\n reviewed_at: optional(nullable(string())),\n eval_action_id: optional(nullable(uuid())),\n eval_score: optional(nullable(number())),\n eval_status: optional(nullable(EntryEvalStatusSchema)),\n created_at: string(),\n updated_at: string(),\n});\n\nconst CreateEntrySchema = object({\n item_id: uuid(),\n assets: optional(nullable(KeyedAssetInputSchema)),\n description: optional(nullable(union([string(), ContentSchema]))),\n});\n\nconst ReviewEntrySchema = object({\n status: zodEnum([\"accepted\", \"rejected\"]),\n review: optional(nullable(union([string(), ContentSchema]))),\n});\n\n// ── Exports ────────────────────────────────────────────────────────────\n\nexport {\n KeyedAssetRefsSchema,\n KeyedAssetInputSchema,\n QuestSubmissionAssetDeclarationSchema,\n QuestTypeSchema,\n QuestStatusSchema,\n QuestItemStatusSchema,\n RewardCurrencySchema,\n EntryEvalStatusSchema,\n EntryStatusSchema,\n QuestSchema,\n QuestItemSchema,\n QuestItemBaseSchema,\n CreateQuestSchema,\n CreateQuestItemSchema,\n CreateQuestItemObjectSchema,\n UpdateQuestSchema,\n UpdateQuestItemSchema,\n EntrySchema,\n CreateEntrySchema,\n ReviewEntrySchema,\n};\n\nexport type QuestType = z.infer<typeof QuestTypeSchema>;\nexport type QuestStatus = z.infer<typeof QuestStatusSchema>;\nexport type QuestItemStatus = z.infer<typeof QuestItemStatusSchema>;\nexport type RewardCurrency = z.infer<typeof RewardCurrencySchema>;\nexport type EntryEvalStatus = z.infer<typeof EntryEvalStatusSchema>;\nexport type EntryStatus = z.infer<typeof EntryStatusSchema>;\nexport type Quest = z.infer<typeof QuestSchema>;\nexport type QuestItem = z.infer<typeof QuestItemSchema>;\nexport type CreateQuest = z.infer<typeof CreateQuestSchema>;\nexport type CreateQuestItem = z.infer<typeof CreateQuestItemSchema>;\nexport type UpdateQuest = z.infer<typeof UpdateQuestSchema>;\nexport type UpdateQuestItem = z.infer<typeof UpdateQuestItemSchema>;\nexport type Entry = z.infer<typeof EntrySchema>;\nexport type CreateEntry = z.infer<typeof CreateEntrySchema>;\nexport type ReviewEntry = z.infer<typeof ReviewEntrySchema>;\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkIP4OVRZB_cjs=require('./chunk-IP4OVRZB.cjs'),uuidv7=require('uuidv7'),zod=require('zod');var l=chunkIP4OVRZB_cjs.c.extend({asset_type:zod.literal("comment").default("comment"),preview:zod.optional(zod.nullable(zod.object({type:zod.string().refine(t=>t==="doc"),content:zod.array(zod.record(zod.string(),zod.any()))}).default({type:"doc",content:[]})))}),C=l.partial().omit({id:true,user_id:true}).extend({asset_type:zod.literal("comment").default("comment"),id:zod.string().default(()=>uuidv7.uuidv7()),name:zod.string().default(""),created_at:zod.string().default(()=>new Date().toISOString()),last_updated:zod.string().default(()=>new Date().toISOString())}).transform(t=>chunkIP4OVRZB_cjs.a(t));exports.a=l;exports.b=C;//# sourceMappingURL=chunk-QT3A4ULM.cjs.map
2
- //# sourceMappingURL=chunk-QT3A4ULM.cjs.map
1
+ 'use strict';var chunkROMY5WNQ_cjs=require('./chunk-ROMY5WNQ.cjs'),uuidv7=require('uuidv7'),zod=require('zod');var l=chunkROMY5WNQ_cjs.c.extend({asset_type:zod.literal("comment").default("comment"),preview:zod.optional(zod.nullable(zod.object({type:zod.string().refine(t=>t==="doc"),content:zod.array(zod.record(zod.string(),zod.any()))}).default({type:"doc",content:[]})))}),C=l.partial().omit({id:true,user_id:true}).extend({asset_type:zod.literal("comment").default("comment"),id:zod.string().default(()=>uuidv7.uuidv7()),name:zod.string().default(""),created_at:zod.string().default(()=>new Date().toISOString()),last_updated:zod.string().default(()=>new Date().toISOString())}).transform(t=>chunkROMY5WNQ_cjs.a(t));exports.a=l;exports.b=C;//# sourceMappingURL=chunk-FRMPLGE4.cjs.map
2
+ //# sourceMappingURL=chunk-FRMPLGE4.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/comments.ts"],"names":["CommentSchema","AssetSchema","literal","optional","nullable","object","string","x","array","record","any","CreateCommentSchema","uuidv7","value","normalizeAssetConfigForParsing"],"mappings":"+GAeMA,IAAAA,CAAAA,CAAgBC,mBAAY,CAAA,MAAA,CAAO,CACvC,UAAA,CAAYC,WAAQ,CAAA,SAAS,EAAE,OAAQ,CAAA,SAAS,CAChD,CAAA,OAAA,CAASC,YACPC,CAAAA,YAAAA,CACEC,UAAO,CAAA,CACL,IAAMC,CAAAA,UAAAA,EAAS,CAAA,MAAA,CAAQC,CAAMA,EAAAA,CAAAA,GAAM,KAAK,CAAA,CACxC,QAASC,SAAMC,CAAAA,UAAAA,CAAOH,UAAO,EAAA,CAAGI,OAAI,EAAC,CAAC,CACxC,CAAC,CAAA,CAAE,OAAQ,CAAA,CAAE,IAAM,CAAA,KAAA,CAAO,OAAS,CAAA,EAAG,CAAC,CACzC,CACF,CACF,CAAC,CAAA,CAEKC,CAAsBX,CAAAA,CAAAA,CAAc,OAAQ,EAAA,CAC/C,IAAK,CAAA,CACJ,EAAI,CAAA,IAAA,CACJ,OAAS,CAAA,IACX,CAAC,CACA,CAAA,MAAA,CAAO,CACN,UAAA,CAAYE,WAAQ,CAAA,SAAS,CAAE,CAAA,OAAA,CAAQ,SAAS,CAAA,CAChD,EAAII,CAAAA,UAAAA,EAAS,CAAA,OAAA,CAAQ,IAAMM,aAAAA,EAAQ,CACnC,CAAA,IAAA,CAAMN,UAAO,EAAA,CAAE,OAAQ,CAAA,EAAE,CACzB,CAAA,UAAA,CAAYA,UAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,EAAO,CAAA,WAAA,EAAa,CAC3D,CAAA,YAAA,CAAcA,UAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,GAAO,WAAY,EAAC,CAC/D,CAAC,CACA,CAAA,SAAA,CAAWO,CAAUC,EAAAA,mBAAAA,CAA+BD,CAAK,CAAC","file":"chunk-QT3A4ULM.cjs","sourcesContent":["import { uuidv7 } from \"uuidv7\";\nimport {\n object,\n string,\n array,\n type z,\n record,\n any,\n literal,\n optional,\n nullable\n} from \"zod\";\n\nimport { AssetSchema, normalizeAssetConfigForParsing } from \"./assets\";\n\nconst CommentSchema = AssetSchema.extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n preview: optional(\n nullable(\n object({\n type: string().refine((x) => x === \"doc\"),\n content: array(record(string(), any())),\n }).default({ type: \"doc\", content: [] })\n )\n ),\n});\n\nconst CreateCommentSchema = CommentSchema.partial()\n .omit({\n id: true,\n user_id: true,\n })\n .extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n id: string().default(() => uuidv7()),\n name: string().default(\"\"),\n created_at: string().default(() => new Date().toISOString()),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport { CommentSchema, CreateCommentSchema };\nexport type Comment = z.infer<typeof CommentSchema>;\nexport type CreateComment = z.infer<typeof CreateCommentSchema>;\n"]}
1
+ {"version":3,"sources":["../src/schema/comments.ts"],"names":["CommentSchema","AssetSchema","literal","optional","nullable","object","string","x","array","record","any","CreateCommentSchema","uuidv7","value","normalizeAssetConfigForParsing"],"mappings":"+GAeMA,IAAAA,CAAAA,CAAgBC,mBAAY,CAAA,MAAA,CAAO,CACvC,UAAA,CAAYC,WAAQ,CAAA,SAAS,EAAE,OAAQ,CAAA,SAAS,CAChD,CAAA,OAAA,CAASC,YACPC,CAAAA,YAAAA,CACEC,UAAO,CAAA,CACL,IAAMC,CAAAA,UAAAA,EAAS,CAAA,MAAA,CAAQC,CAAMA,EAAAA,CAAAA,GAAM,KAAK,CAAA,CACxC,QAASC,SAAMC,CAAAA,UAAAA,CAAOH,UAAO,EAAA,CAAGI,OAAI,EAAC,CAAC,CACxC,CAAC,CAAA,CAAE,OAAQ,CAAA,CAAE,IAAM,CAAA,KAAA,CAAO,OAAS,CAAA,EAAG,CAAC,CACzC,CACF,CACF,CAAC,CAAA,CAEKC,CAAsBX,CAAAA,CAAAA,CAAc,OAAQ,EAAA,CAC/C,IAAK,CAAA,CACJ,EAAI,CAAA,IAAA,CACJ,OAAS,CAAA,IACX,CAAC,CACA,CAAA,MAAA,CAAO,CACN,UAAA,CAAYE,WAAQ,CAAA,SAAS,CAAE,CAAA,OAAA,CAAQ,SAAS,CAAA,CAChD,EAAII,CAAAA,UAAAA,EAAS,CAAA,OAAA,CAAQ,IAAMM,aAAAA,EAAQ,CACnC,CAAA,IAAA,CAAMN,UAAO,EAAA,CAAE,OAAQ,CAAA,EAAE,CACzB,CAAA,UAAA,CAAYA,UAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,EAAO,CAAA,WAAA,EAAa,CAC3D,CAAA,YAAA,CAAcA,UAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,GAAO,WAAY,EAAC,CAC/D,CAAC,CACA,CAAA,SAAA,CAAWO,CAAUC,EAAAA,mBAAAA,CAA+BD,CAAK,CAAC","file":"chunk-FRMPLGE4.cjs","sourcesContent":["import { uuidv7 } from \"uuidv7\";\nimport {\n object,\n string,\n array,\n type z,\n record,\n any,\n literal,\n optional,\n nullable\n} from \"zod\";\n\nimport { AssetSchema, normalizeAssetConfigForParsing } from \"./assets\";\n\nconst CommentSchema = AssetSchema.extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n preview: optional(\n nullable(\n object({\n type: string().refine((x) => x === \"doc\"),\n content: array(record(string(), any())),\n }).default({ type: \"doc\", content: [] })\n )\n ),\n});\n\nconst CreateCommentSchema = CommentSchema.partial()\n .omit({\n id: true,\n user_id: true,\n })\n .extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n id: string().default(() => uuidv7()),\n name: string().default(\"\"),\n created_at: string().default(() => new Date().toISOString()),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport { CommentSchema, CreateCommentSchema };\nexport type Comment = z.infer<typeof CommentSchema>;\nexport type CreateComment = z.infer<typeof CreateCommentSchema>;\n"]}
@@ -1,2 +1,2 @@
1
- import {c,a}from'./chunk-G2MXCB7Q.js';import {uuidv7}from'uuidv7';import {optional,literal,nullable,object,array,string,record,any}from'zod';var l=c.extend({asset_type:literal("comment").default("comment"),preview:optional(nullable(object({type:string().refine(t=>t==="doc"),content:array(record(string(),any()))}).default({type:"doc",content:[]})))}),C=l.partial().omit({id:true,user_id:true}).extend({asset_type:literal("comment").default("comment"),id:string().default(()=>uuidv7()),name:string().default(""),created_at:string().default(()=>new Date().toISOString()),last_updated:string().default(()=>new Date().toISOString())}).transform(t=>a(t));export{l as a,C as b};//# sourceMappingURL=chunk-6YF2RSXS.js.map
2
- //# sourceMappingURL=chunk-6YF2RSXS.js.map
1
+ import {c,a}from'./chunk-SR5UZ4NP.js';import {uuidv7}from'uuidv7';import {optional,literal,nullable,object,array,string,record,any}from'zod';var l=c.extend({asset_type:literal("comment").default("comment"),preview:optional(nullable(object({type:string().refine(t=>t==="doc"),content:array(record(string(),any()))}).default({type:"doc",content:[]})))}),C=l.partial().omit({id:true,user_id:true}).extend({asset_type:literal("comment").default("comment"),id:string().default(()=>uuidv7()),name:string().default(""),created_at:string().default(()=>new Date().toISOString()),last_updated:string().default(()=>new Date().toISOString())}).transform(t=>a(t));export{l as a,C as b};//# sourceMappingURL=chunk-G3VMEPTP.js.map
2
+ //# sourceMappingURL=chunk-G3VMEPTP.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/comments.ts"],"names":["CommentSchema","AssetSchema","literal","optional","nullable","object","string","x","array","record","any","CreateCommentSchema","uuidv7","value","normalizeAssetConfigForParsing"],"mappings":"6IAeMA,IAAAA,CAAAA,CAAgBC,CAAY,CAAA,MAAA,CAAO,CACvC,UAAA,CAAYC,OAAQ,CAAA,SAAS,EAAE,OAAQ,CAAA,SAAS,CAChD,CAAA,OAAA,CAASC,QACPC,CAAAA,QAAAA,CACEC,MAAO,CAAA,CACL,IAAMC,CAAAA,MAAAA,EAAS,CAAA,MAAA,CAAQC,CAAMA,EAAAA,CAAAA,GAAM,KAAK,CAAA,CACxC,QAASC,KAAMC,CAAAA,MAAAA,CAAOH,MAAO,EAAA,CAAGI,GAAI,EAAC,CAAC,CACxC,CAAC,CAAA,CAAE,OAAQ,CAAA,CAAE,IAAM,CAAA,KAAA,CAAO,OAAS,CAAA,EAAG,CAAC,CACzC,CACF,CACF,CAAC,CAAA,CAEKC,CAAsBX,CAAAA,CAAAA,CAAc,OAAQ,EAAA,CAC/C,IAAK,CAAA,CACJ,EAAI,CAAA,IAAA,CACJ,OAAS,CAAA,IACX,CAAC,CACA,CAAA,MAAA,CAAO,CACN,UAAA,CAAYE,OAAQ,CAAA,SAAS,CAAE,CAAA,OAAA,CAAQ,SAAS,CAAA,CAChD,EAAII,CAAAA,MAAAA,EAAS,CAAA,OAAA,CAAQ,IAAMM,MAAAA,EAAQ,CACnC,CAAA,IAAA,CAAMN,MAAO,EAAA,CAAE,OAAQ,CAAA,EAAE,CACzB,CAAA,UAAA,CAAYA,MAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,EAAO,CAAA,WAAA,EAAa,CAC3D,CAAA,YAAA,CAAcA,MAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,GAAO,WAAY,EAAC,CAC/D,CAAC,CACA,CAAA,SAAA,CAAWO,CAAUC,EAAAA,CAAAA,CAA+BD,CAAK,CAAC","file":"chunk-6YF2RSXS.js","sourcesContent":["import { uuidv7 } from \"uuidv7\";\nimport {\n object,\n string,\n array,\n type z,\n record,\n any,\n literal,\n optional,\n nullable\n} from \"zod\";\n\nimport { AssetSchema, normalizeAssetConfigForParsing } from \"./assets\";\n\nconst CommentSchema = AssetSchema.extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n preview: optional(\n nullable(\n object({\n type: string().refine((x) => x === \"doc\"),\n content: array(record(string(), any())),\n }).default({ type: \"doc\", content: [] })\n )\n ),\n});\n\nconst CreateCommentSchema = CommentSchema.partial()\n .omit({\n id: true,\n user_id: true,\n })\n .extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n id: string().default(() => uuidv7()),\n name: string().default(\"\"),\n created_at: string().default(() => new Date().toISOString()),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport { CommentSchema, CreateCommentSchema };\nexport type Comment = z.infer<typeof CommentSchema>;\nexport type CreateComment = z.infer<typeof CreateCommentSchema>;\n"]}
1
+ {"version":3,"sources":["../src/schema/comments.ts"],"names":["CommentSchema","AssetSchema","literal","optional","nullable","object","string","x","array","record","any","CreateCommentSchema","uuidv7","value","normalizeAssetConfigForParsing"],"mappings":"6IAeMA,IAAAA,CAAAA,CAAgBC,CAAY,CAAA,MAAA,CAAO,CACvC,UAAA,CAAYC,OAAQ,CAAA,SAAS,EAAE,OAAQ,CAAA,SAAS,CAChD,CAAA,OAAA,CAASC,QACPC,CAAAA,QAAAA,CACEC,MAAO,CAAA,CACL,IAAMC,CAAAA,MAAAA,EAAS,CAAA,MAAA,CAAQC,CAAMA,EAAAA,CAAAA,GAAM,KAAK,CAAA,CACxC,QAASC,KAAMC,CAAAA,MAAAA,CAAOH,MAAO,EAAA,CAAGI,GAAI,EAAC,CAAC,CACxC,CAAC,CAAA,CAAE,OAAQ,CAAA,CAAE,IAAM,CAAA,KAAA,CAAO,OAAS,CAAA,EAAG,CAAC,CACzC,CACF,CACF,CAAC,CAAA,CAEKC,CAAsBX,CAAAA,CAAAA,CAAc,OAAQ,EAAA,CAC/C,IAAK,CAAA,CACJ,EAAI,CAAA,IAAA,CACJ,OAAS,CAAA,IACX,CAAC,CACA,CAAA,MAAA,CAAO,CACN,UAAA,CAAYE,OAAQ,CAAA,SAAS,CAAE,CAAA,OAAA,CAAQ,SAAS,CAAA,CAChD,EAAII,CAAAA,MAAAA,EAAS,CAAA,OAAA,CAAQ,IAAMM,MAAAA,EAAQ,CACnC,CAAA,IAAA,CAAMN,MAAO,EAAA,CAAE,OAAQ,CAAA,EAAE,CACzB,CAAA,UAAA,CAAYA,MAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,EAAO,CAAA,WAAA,EAAa,CAC3D,CAAA,YAAA,CAAcA,MAAO,EAAA,CAAE,OAAQ,CAAA,IAAM,IAAI,IAAA,GAAO,WAAY,EAAC,CAC/D,CAAC,CACA,CAAA,SAAA,CAAWO,CAAUC,EAAAA,CAAAA,CAA+BD,CAAK,CAAC","file":"chunk-G3VMEPTP.js","sourcesContent":["import { uuidv7 } from \"uuidv7\";\nimport {\n object,\n string,\n array,\n type z,\n record,\n any,\n literal,\n optional,\n nullable\n} from \"zod\";\n\nimport { AssetSchema, normalizeAssetConfigForParsing } from \"./assets\";\n\nconst CommentSchema = AssetSchema.extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n preview: optional(\n nullable(\n object({\n type: string().refine((x) => x === \"doc\"),\n content: array(record(string(), any())),\n }).default({ type: \"doc\", content: [] })\n )\n ),\n});\n\nconst CreateCommentSchema = CommentSchema.partial()\n .omit({\n id: true,\n user_id: true,\n })\n .extend({\n asset_type: literal(\"comment\").default(\"comment\"),\n id: string().default(() => uuidv7()),\n name: string().default(\"\"),\n created_at: string().default(() => new Date().toISOString()),\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport { CommentSchema, CreateCommentSchema };\nexport type Comment = z.infer<typeof CommentSchema>;\nexport type CreateComment = z.infer<typeof CreateCommentSchema>;\n"]}
@@ -1,2 +1,2 @@
1
- 'use strict';var chunkJW7FACNZ_cjs=require('./chunk-JW7FACNZ.cjs'),chunk43KB23BA_cjs=require('./chunk-43KB23BA.cjs'),zod=require('zod');function m(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function k(e){if(!e)return null;let t=e.replace(/^\.+/,"").trim().toLowerCase().replace(/[^a-z0-9]/g,"");return !t||/^\d+$/.test(t)||t.length>12?null:t}function I(e){let s=Array.isArray(e)?e:typeof e=="string"?e.split(/[\s,]+/):[];return Array.from(new Set(s.map(t=>k(t)).filter(t=>!!t)))}var P=zod.record(zod.string(),zod.object({asset_id:zod.uuid(),asset_type:chunk43KB23BA_cjs.a})),K=zod.union([zod.uuid(),zod.object({asset_id:zod.uuid(),asset_type:zod.optional(chunk43KB23BA_cjs.a)})]),E=zod.record(zod.string(),K),q=chunkJW7FACNZ_cjs.e.extend({required:zod.optional(zod.boolean()).default(true)});function S(e){return I([...Array.isArray(e.file_extensions)?e.file_extensions:[],...Array.isArray(e.input_file_extensions)?e.input_file_extensions:[]].join(","))}function R(e){return e.input_filter||e.filter||void 0}function T(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(m(t)){let i=Object.entries(t).filter(([,r])=>m(r));if(i.length>0)return Object.fromEntries(i)}return s.input_type?{[s.input_type]:{asset_type:s.input_type,primary:true,input_filter:s.input_filter,input_file_extensions:(n=s.input_file_extensions)!=null?n:null}}:{}}function j(e){let s=S(e),t=R(e);return {asset_type:e.asset_type,primary:e.primary,input_filter:t!=null?t:null,file_extensions:s.length>0?s:null,required:true}}function Q(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=j(r));return n}function L(e){let s=Object.entries(e);if(!s.length)return null;let t=s.find(([,n])=>n.primary===true);return t?t[0]:(s.length===1,s[0][0])}function B(e,s){var i,r;let t=(i=e.eval_static_inputs)!=null?i:{};if(e.eval_route_id&&s){let a=T(s),l=Object.keys(t),u=e.submission_assets&&Object.keys(e.submission_assets).length>0?e.submission_assets:Q(a,l);return {contributorKeys:Object.keys(u),declarations:u,pinned:t}}let n=(r=e.submission_assets)!=null?r:{};return {contributorKeys:Object.keys(n),declarations:n,pinned:t}}function F(e){if(!e)return null;let s=e.asset_type||void 0;if(!s)return null;let t={assetType:s,hasConstraints:false};if(s==="file"){let n=S(e);n.length>0&&(t.extensions=n,t.hasConstraints=true);let i=R(e);i&&(t.fileType=i,t.hasConstraints=true);}return t}function V(e,s){var i,r,a,l,u,p;if(!s||!e)return true;let t=F(s);if(!t)return true;let n=(i=e.assetType)!=null?i:e.asset_type;if(t.assetType&&n!==t.assetType)return false;if(t.assetType==="file"){let c=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=c.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((p=(u=c.file_type)!=null?u:c.type)!=null?p:"").toLowerCase().split("/")[0],f=t.fileType.toLowerCase();if(o&&f&&!o.includes(f)&&o!==f)return false}}return true}function M(e,s){if(!e||!Object.keys(e).length)return null;let t=s&&L(s)||Object.keys(e)[0],n=e[t];return n?{key:t,asset_id:n.asset_id,asset_type:n.asset_type}:null}function $(e){return e?Object.fromEntries(Object.entries(e).map(([s,t])=>[s,{assetId:t.asset_id,assetType:t.asset_type}])):{}}exports.a=P;exports.b=K;exports.c=E;exports.d=q;exports.e=T;exports.f=j;exports.g=Q;exports.h=L;exports.i=B;exports.j=F;exports.k=V;exports.l=M;exports.m=$;//# sourceMappingURL=chunk-CONKY65O.cjs.map
2
- //# sourceMappingURL=chunk-CONKY65O.cjs.map
1
+ 'use strict';var chunkOFDJA6ZW_cjs=require('./chunk-OFDJA6ZW.cjs'),chunk43KB23BA_cjs=require('./chunk-43KB23BA.cjs'),zod=require('zod');function m(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function k(e){if(!e)return null;let t=e.replace(/^\.+/,"").trim().toLowerCase().replace(/[^a-z0-9]/g,"");return !t||/^\d+$/.test(t)||t.length>12?null:t}function I(e){let s=Array.isArray(e)?e:typeof e=="string"?e.split(/[\s,]+/):[];return Array.from(new Set(s.map(t=>k(t)).filter(t=>!!t)))}var P=zod.record(zod.string(),zod.object({asset_id:zod.uuid(),asset_type:chunk43KB23BA_cjs.a})),K=zod.union([zod.uuid(),zod.object({asset_id:zod.uuid(),asset_type:zod.optional(chunk43KB23BA_cjs.a)})]),E=zod.record(zod.string(),K),q=chunkOFDJA6ZW_cjs.e.extend({required:zod.optional(zod.boolean()).default(true)});function S(e){return I([...Array.isArray(e.file_extensions)?e.file_extensions:[],...Array.isArray(e.input_file_extensions)?e.input_file_extensions:[]].join(","))}function R(e){return e.input_filter||e.filter||void 0}function T(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(m(t)){let i=Object.entries(t).filter(([,r])=>m(r));if(i.length>0)return Object.fromEntries(i)}return s.input_type?{[s.input_type]:{asset_type:s.input_type,primary:true,input_filter:s.input_filter,input_file_extensions:(n=s.input_file_extensions)!=null?n:null}}:{}}function j(e){let s=S(e),t=R(e);return {asset_type:e.asset_type,primary:e.primary,input_filter:t!=null?t:null,file_extensions:s.length>0?s:null,required:true}}function Q(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=j(r));return n}function L(e){let s=Object.entries(e);if(!s.length)return null;let t=s.find(([,n])=>n.primary===true);return t?t[0]:(s.length===1,s[0][0])}function B(e,s){var i,r;let t=(i=e.eval_static_inputs)!=null?i:{};if(e.eval_route_id&&s){let a=T(s),l=Object.keys(t),u=e.submission_assets&&Object.keys(e.submission_assets).length>0?e.submission_assets:Q(a,l);return {contributorKeys:Object.keys(u),declarations:u,pinned:t}}let n=(r=e.submission_assets)!=null?r:{};return {contributorKeys:Object.keys(n),declarations:n,pinned:t}}function F(e){if(!e)return null;let s=e.asset_type||void 0;if(!s)return null;let t={assetType:s,hasConstraints:false};if(s==="file"){let n=S(e);n.length>0&&(t.extensions=n,t.hasConstraints=true);let i=R(e);i&&(t.fileType=i,t.hasConstraints=true);}return t}function V(e,s){var i,r,a,l,u,p;if(!s||!e)return true;let t=F(s);if(!t)return true;let n=(i=e.assetType)!=null?i:e.asset_type;if(t.assetType&&n!==t.assetType)return false;if(t.assetType==="file"){let c=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=c.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((p=(u=c.file_type)!=null?u:c.type)!=null?p:"").toLowerCase().split("/")[0],f=t.fileType.toLowerCase();if(o&&f&&!o.includes(f)&&o!==f)return false}}return true}function M(e,s){if(!e||!Object.keys(e).length)return null;let t=s&&L(s)||Object.keys(e)[0],n=e[t];return n?{key:t,asset_id:n.asset_id,asset_type:n.asset_type}:null}function $(e){return e?Object.fromEntries(Object.entries(e).map(([s,t])=>[s,{assetId:t.asset_id,assetType:t.asset_type}])):{}}exports.a=P;exports.b=K;exports.c=E;exports.d=q;exports.e=T;exports.f=j;exports.g=Q;exports.h=L;exports.i=B;exports.j=F;exports.k=V;exports.l=M;exports.m=$;//# sourceMappingURL=chunk-HN7Y7VMJ.cjs.map
2
+ //# sourceMappingURL=chunk-HN7Y7VMJ.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/quest-submission.ts"],"names":["isPlainObject","value","normalizeFileExtension","safe","normalizeFileExtensions","rawValues","entry","KeyedAssetRefsSchema","record","string","object","uuid","AssetTypeSchema","KeyedAssetInputValueSchema","union","optional","KeyedAssetInputSchema","QuestSubmissionAssetDeclarationSchema","RouteInputAssetDeclarationSchema","boolean","readDeclarationExtensions","declaration","readDeclarationFilter","getRouteInputDeclarationsFromRoute","route","_a","detail","inputs","entries","declarationToSubmissionDeclaration","extensions","filter","materializeContributorSubmissionAssets","routeInputs","pinnedKeys","pinned","out","key","getPrimaryDeclarationKey","declarations","primary","d","getSubmissionAssetShape","item","_b","materialized","declarationToPickerFilters","assetType","filters","fileType","assetMatchesDeclaration","asset","_c","_d","_e","_f","metadata","ext","type","expected","getPrimaryAssetRef","refs","ref","toRouteInputAssets"],"mappings":"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","file":"chunk-CONKY65O.cjs","sourcesContent":["import {\n object,\n string,\n record,\n optional,\n boolean,\n array,\n uuid,\n union,\n type z,\n} from \"zod\";\n\nimport { AssetTypeSchema } from \"../schema/common\";\nimport { RouteInputAssetDeclarationSchema } from \"../schema/services\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeFileExtension(value: string | null | undefined): string | null {\n if (!value) return null;\n const normalized = value.replace(/^\\.+/, \"\").trim().toLowerCase();\n const safe = normalized.replace(/[^a-z0-9]/g, \"\");\n if (!safe || /^\\d+$/.test(safe) || safe.length > 12) return null;\n return safe;\n}\n\nfunction normalizeFileExtensions(\n value: string | string[] | null | undefined\n): string[] {\n const rawValues = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(/[\\s,]+/)\n : [];\n return Array.from(\n new Set(\n rawValues\n .map((entry) => normalizeFileExtension(entry))\n .filter((entry): entry is string => Boolean(entry))\n )\n );\n}\n\n/** Stored on entries and eval_static_inputs after server normalization. */\nexport const KeyedAssetRefsSchema = record(\n string(),\n object({\n asset_id: uuid(),\n asset_type: AssetTypeSchema,\n })\n);\n\n/** Accepted on POST /quests/:id/entries/create — server fills asset_type. */\nexport const KeyedAssetInputValueSchema = union([\n uuid(),\n object({\n asset_id: uuid(),\n asset_type: optional(AssetTypeSchema),\n }),\n]);\n\nexport const KeyedAssetInputSchema = record(\n string(),\n KeyedAssetInputValueSchema\n);\n\nexport const QuestSubmissionAssetDeclarationSchema =\n RouteInputAssetDeclarationSchema.extend({\n required: optional(boolean()).default(true),\n });\n\nexport type KeyedAssetRefs = z.infer<typeof KeyedAssetRefsSchema>;\nexport type KeyedAssetInput = z.infer<typeof KeyedAssetInputSchema>;\nexport type QuestSubmissionAssetDeclaration = z.infer<\n typeof QuestSubmissionAssetDeclarationSchema\n>;\n\nexport type AssetDeclarationPickerFilters = {\n assetType?: string;\n fileType?: string;\n extensions?: string[];\n hasConstraints: boolean;\n};\n\nexport type QuestSubmissionItemInput = {\n eval_route_id?: string | null;\n submission_assets?: Record<string, QuestSubmissionAssetDeclaration> | null;\n eval_static_inputs?: KeyedAssetRefs | null;\n expected_asset_type?: string | null;\n};\n\nexport type RouteInputDeclarationLike = {\n asset_type?: string | null;\n primary?: boolean;\n input_filter?: string | null;\n filter?: string | null;\n file_extensions?: string[] | null;\n input_file_extensions?: string[] | null;\n};\n\nexport type RouteForSubmissionShape = {\n route?: {\n input_assets?: Record<string, RouteInputDeclarationLike> | null;\n input_type?: string | null;\n input_filter?: string | null;\n input_file_extensions?: string[] | null;\n } | null;\n} | null;\n\nfunction readDeclarationExtensions(\n declaration: RouteInputDeclarationLike\n): string[] {\n return normalizeFileExtensions([\n ...(Array.isArray(declaration.file_extensions)\n ? declaration.file_extensions\n : []),\n ...(Array.isArray(declaration.input_file_extensions)\n ? declaration.input_file_extensions\n : []),\n ].join(\",\"));\n}\n\nfunction readDeclarationFilter(\n declaration: RouteInputDeclarationLike\n): string | undefined {\n return declaration.input_filter || declaration.filter || undefined;\n}\n\n/** Route keyed inputs as a flat map (includes legacy input_type fallback). */\nexport function getRouteInputDeclarationsFromRoute(\n route: RouteForSubmissionShape\n): Record<string, RouteInputDeclarationLike> {\n const detail = route?.route;\n if (!detail) return {};\n\n const inputs = detail.input_assets;\n if (isPlainObject(inputs)) {\n const entries = Object.entries(inputs).filter(([, value]) =>\n isPlainObject(value)\n ) as [string, RouteInputDeclarationLike][];\n if (entries.length > 0) {\n return Object.fromEntries(entries);\n }\n }\n\n if (detail.input_type) {\n return {\n [detail.input_type]: {\n asset_type: detail.input_type,\n primary: true,\n input_filter: detail.input_filter,\n input_file_extensions: detail.input_file_extensions ?? null,\n },\n };\n }\n\n return {};\n}\n\nexport function declarationToSubmissionDeclaration(\n declaration: RouteInputDeclarationLike\n): QuestSubmissionAssetDeclaration {\n const extensions = readDeclarationExtensions(declaration);\n const filter = readDeclarationFilter(declaration);\n return {\n asset_type: declaration.asset_type as QuestSubmissionAssetDeclaration[\"asset_type\"],\n primary: declaration.primary,\n input_filter: (filter ?? null) as QuestSubmissionAssetDeclaration[\"input_filter\"],\n file_extensions: extensions.length > 0 ? extensions : null,\n required: true,\n };\n}\n\n/** Materialize contributor declarations from route inputs minus pinned keys. */\nexport function materializeContributorSubmissionAssets(\n routeInputs: Record<string, RouteInputDeclarationLike>,\n pinnedKeys: string[]\n): Record<string, QuestSubmissionAssetDeclaration> {\n const pinned = new Set(pinnedKeys);\n const out: Record<string, QuestSubmissionAssetDeclaration> = {};\n for (const [key, declaration] of Object.entries(routeInputs)) {\n if (pinned.has(key)) continue;\n out[key] = declarationToSubmissionDeclaration(declaration);\n }\n return out;\n}\n\nexport function getPrimaryDeclarationKey(\n declarations: Record<string, QuestSubmissionAssetDeclaration>\n): string | null {\n const entries = Object.entries(declarations);\n if (!entries.length) return null;\n const primary = entries.find(([, d]) => d.primary === true);\n if (primary) return primary[0];\n if (entries.length === 1) return entries[0][0];\n return entries[0][0];\n}\n\nexport function getSubmissionAssetShape(\n item: QuestSubmissionItemInput,\n route?: RouteForSubmissionShape | null\n): {\n contributorKeys: string[];\n declarations: Record<string, QuestSubmissionAssetDeclaration>;\n pinned: KeyedAssetRefs;\n} {\n const pinned: KeyedAssetRefs = item.eval_static_inputs ?? {};\n\n if (item.eval_route_id && route) {\n const routeInputs = getRouteInputDeclarationsFromRoute(route);\n const pinnedKeys = Object.keys(pinned);\n const materialized =\n item.submission_assets &&\n Object.keys(item.submission_assets).length > 0\n ? item.submission_assets\n : materializeContributorSubmissionAssets(routeInputs, pinnedKeys);\n const contributorKeys = Object.keys(materialized);\n return {\n contributorKeys,\n declarations: materialized,\n pinned,\n };\n }\n\n const declarations = item.submission_assets ?? {};\n return {\n contributorKeys: Object.keys(declarations),\n declarations,\n pinned,\n };\n}\n\nexport function declarationToPickerFilters(\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): AssetDeclarationPickerFilters | null {\n if (!declaration) return null;\n const assetType = declaration.asset_type || undefined;\n if (!assetType) return null;\n\n const filters: AssetDeclarationPickerFilters = {\n assetType,\n hasConstraints: false,\n };\n\n if (assetType === \"file\") {\n const extensions = readDeclarationExtensions(declaration);\n if (extensions.length > 0) {\n filters.extensions = extensions;\n filters.hasConstraints = true;\n }\n const fileType = readDeclarationFilter(declaration);\n if (fileType) {\n filters.fileType = fileType;\n filters.hasConstraints = true;\n }\n }\n\n return filters;\n}\n\nexport function assetMatchesDeclaration(\n asset:\n | {\n assetType?: string | null;\n asset_type?: string | null;\n asset?: { metadata?: Record<string, unknown> } | null;\n }\n | null\n | undefined,\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): boolean {\n if (!declaration || !asset) return true;\n const filters = declarationToPickerFilters(declaration);\n if (!filters) return true;\n\n const assetType = asset.assetType ?? asset.asset_type;\n if (filters.assetType && assetType !== filters.assetType) return false;\n\n if (filters.assetType === \"file\") {\n const metadata = asset.asset?.metadata ?? {};\n if (filters.extensions && filters.extensions.length > 0) {\n const ext = String(metadata.extension ?? \"\").toLowerCase();\n if (!ext || !filters.extensions.includes(ext)) return false;\n }\n if (filters.fileType) {\n const type = String(metadata.file_type ?? metadata.type ?? \"\")\n .toLowerCase()\n .split(\"/\")[0];\n const expected = filters.fileType.toLowerCase();\n if (type && expected && !type.includes(expected) && type !== expected) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function getPrimaryAssetRef(\n refs: KeyedAssetRefs | null | undefined,\n declarations?: Record<string, QuestSubmissionAssetDeclaration> | null\n): { key: string; asset_id: string; asset_type: string } | null {\n if (!refs || !Object.keys(refs).length) return null;\n const key =\n (declarations && getPrimaryDeclarationKey(declarations)) ||\n Object.keys(refs)[0];\n const ref = refs[key];\n if (!ref) return null;\n return { key, asset_id: ref.asset_id, asset_type: ref.asset_type };\n}\n\nexport function toRouteInputAssets(\n refs: KeyedAssetRefs | null | undefined\n): Record<string, { assetId: string; assetType: string }> {\n if (!refs) return {};\n return Object.fromEntries(\n Object.entries(refs).map(([key, ref]) => [\n key,\n { assetId: ref.asset_id, assetType: ref.asset_type },\n ])\n );\n}\n\n/** @deprecated Use declarationToPickerFilters */\nexport type EvalSubmissionFilters = AssetDeclarationPickerFilters;\n"]}
1
+ {"version":3,"sources":["../src/utils/quest-submission.ts"],"names":["isPlainObject","value","normalizeFileExtension","safe","normalizeFileExtensions","rawValues","entry","KeyedAssetRefsSchema","record","string","object","uuid","AssetTypeSchema","KeyedAssetInputValueSchema","union","optional","KeyedAssetInputSchema","QuestSubmissionAssetDeclarationSchema","RouteInputAssetDeclarationSchema","boolean","readDeclarationExtensions","declaration","readDeclarationFilter","getRouteInputDeclarationsFromRoute","route","_a","detail","inputs","entries","declarationToSubmissionDeclaration","extensions","filter","materializeContributorSubmissionAssets","routeInputs","pinnedKeys","pinned","out","key","getPrimaryDeclarationKey","declarations","primary","d","getSubmissionAssetShape","item","_b","materialized","declarationToPickerFilters","assetType","filters","fileType","assetMatchesDeclaration","asset","_c","_d","_e","_f","metadata","ext","type","expected","getPrimaryAssetRef","refs","ref","toRouteInputAssets"],"mappings":"wIAeA,SAASA,EAAcC,CAAkD,CAAA,CACvE,OAAO,CAAQA,CAAAA,CAAAA,EAAU,OAAOA,CAAU,EAAA,QAAA,EAAY,CAAC,KAAM,CAAA,OAAA,CAAQA,CAAK,CAC5E,CAEA,SAASC,CAAuBD,CAAAA,CAAAA,CAAiD,CAC/E,GAAI,CAACA,EAAO,OAAO,IAAA,CAEnB,IAAME,CADaF,CAAAA,CAAAA,CAAM,QAAQ,MAAQ,CAAA,EAAE,EAAE,IAAK,EAAA,CAAE,aAC5B,CAAA,OAAA,CAAQ,aAAc,EAAE,CAAA,CAChD,OAAI,CAACE,CAAAA,EAAQ,QAAQ,IAAKA,CAAAA,CAAI,GAAKA,CAAK,CAAA,MAAA,CAAS,GAAW,IACrDA,CAAAA,CACT,CAEA,SAASC,CAAAA,CACPH,EACU,CACV,IAAMI,EAAY,KAAM,CAAA,OAAA,CAAQJ,CAAK,CACjCA,CAAAA,CAAAA,CACA,OAAOA,CAAU,EAAA,QAAA,CACfA,EAAM,KAAM,CAAA,QAAQ,EACpB,EAAC,CACP,OAAO,KAAM,CAAA,IAAA,CACX,IAAI,GACFI,CAAAA,CAAAA,CACG,IAAKC,CAAUJ,EAAAA,CAAAA,CAAuBI,CAAK,CAAC,CAAA,CAC5C,OAAQA,CAA2B,EAAA,CAAA,CAAQA,CAAM,CACtD,CACF,CACF,CAGO,IAAMC,EAAuBC,UAClCC,CAAAA,UAAAA,GACAC,UAAO,CAAA,CACL,SAAUC,QAAK,EAAA,CACf,WAAYC,mBACd,CAAC,CACH,CAGaC,CAAAA,CAAAA,CAA6BC,UAAM,CAC9CH,QAAAA,GACAD,UAAO,CAAA,CACL,SAAUC,QAAK,EAAA,CACf,WAAYI,YAASH,CAAAA,mBAAe,CACtC,CAAC,CACH,CAAC,CAEYI,CAAAA,CAAAA,CAAwBR,WACnCC,UAAO,EAAA,CACPI,CACF,CAEaI,CAAAA,CAAAA,CACXC,oBAAiC,MAAO,CAAA,CACtC,SAAUH,YAASI,CAAAA,WAAAA,EAAS,CAAE,CAAA,OAAA,CAAQ,IAAI,CAC5C,CAAC,EAwCH,SAASC,CAAAA,CACPC,EACU,CACV,OAAOjB,EAAwB,CAC7B,GAAI,MAAM,OAAQiB,CAAAA,CAAAA,CAAY,eAAe,CACzCA,CAAAA,CAAAA,CAAY,gBACZ,EAAC,CACL,GAAI,KAAM,CAAA,OAAA,CAAQA,EAAY,qBAAqB,CAAA,CAC/CA,EAAY,qBACZ,CAAA,EACN,CAAA,CAAE,IAAK,CAAA,GAAG,CAAC,CACb,CAEA,SAASC,CACPD,CAAAA,CAAAA,CACoB,CACpB,OAAOA,CAAAA,CAAY,cAAgBA,CAAY,CAAA,MAAA,EAAU,MAC3D,CAGO,SAASE,EACdC,CAC2C,CAAA,CApI7C,IAAAC,CAqIE,CAAA,IAAMC,EAASF,CAAA,EAAA,IAAA,CAAA,MAAA,CAAAA,EAAO,KACtB,CAAA,GAAI,CAACE,CAAQ,CAAA,OAAO,EAEpB,CAAA,IAAMC,EAASD,CAAO,CAAA,YAAA,CACtB,GAAI1B,CAAc2B,CAAAA,CAAM,EAAG,CACzB,IAAMC,EAAU,MAAO,CAAA,OAAA,CAAQD,CAAM,CAAE,CAAA,MAAA,CAAO,CAAC,EAAG1B,CAAK,CACrDD,GAAAA,CAAAA,CAAcC,CAAK,CACrB,CAAA,CACA,GAAI2B,CAAQ,CAAA,MAAA,CAAS,EACnB,OAAO,MAAA,CAAO,YAAYA,CAAO,CAErC,CAEA,OAAIF,CAAAA,CAAO,WACF,CACL,CAACA,EAAO,UAAU,EAAG,CACnB,UAAYA,CAAAA,CAAAA,CAAO,WACnB,OAAS,CAAA,IAAA,CACT,aAAcA,CAAO,CAAA,YAAA,CACrB,uBAAuBD,CAAAC,CAAAA,CAAAA,CAAO,wBAAP,IAAAD,CAAAA,CAAAA,CAAgC,IACzD,CACF,CAAA,CAGK,EACT,CAEO,SAASI,CACdR,CAAAA,CAAAA,CACiC,CACjC,IAAMS,CAAAA,CAAaV,EAA0BC,CAAW,CAAA,CAClDU,EAAST,CAAsBD,CAAAA,CAAW,EAChD,OAAO,CACL,WAAYA,CAAY,CAAA,UAAA,CACxB,QAASA,CAAY,CAAA,OAAA,CACrB,aAAeU,CAAA,EAAA,IAAA,CAAAA,EAAU,IACzB,CAAA,eAAA,CAAiBD,EAAW,MAAS,CAAA,CAAA,CAAIA,EAAa,IACtD,CAAA,QAAA,CAAU,IACZ,CACF,CAGO,SAASE,CACdC,CAAAA,CAAAA,CACAC,EACiD,CACjD,IAAMC,EAAS,IAAI,GAAA,CAAID,CAAU,CAC3BE,CAAAA,CAAAA,CAAuD,EAC7D,CAAA,IAAA,GAAW,CAACC,CAAKhB,CAAAA,CAAW,IAAK,MAAO,CAAA,OAAA,CAAQY,CAAW,CACrDE,CAAAA,CAAAA,CAAO,IAAIE,CAAG,CAAA,GAClBD,EAAIC,CAAG,CAAA,CAAIR,EAAmCR,CAAW,CAAA,CAAA,CAE3D,OAAOe,CACT,CAEO,SAASE,CACdC,CAAAA,CAAAA,CACe,CACf,IAAMX,CAAAA,CAAU,OAAO,OAAQW,CAAAA,CAAY,EAC3C,GAAI,CAACX,EAAQ,MAAQ,CAAA,OAAO,KAC5B,IAAMY,CAAAA,CAAUZ,EAAQ,IAAK,CAAA,CAAC,EAAGa,CAAC,CAAA,GAAMA,EAAE,OAAY,GAAA,IAAI,EAC1D,OAAID,CAAAA,CAAgBA,EAAQ,CAAC,CAAA,EACzBZ,EAAQ,MAAW,GAAA,CAAA,CAAUA,EAAQ,CAAC,CAAA,CAAE,CAAC,CAE/C,CAAA,CAEO,SAASc,CACdC,CAAAA,CAAAA,CACAnB,EAKA,CA9MF,IAAAC,EAAAmB,CA+ME,CAAA,IAAMT,GAAyBV,CAAAkB,CAAAA,CAAAA,CAAK,qBAAL,IAAAlB,CAAAA,CAAAA,CAA2B,EAE1D,CAAA,GAAIkB,EAAK,aAAiBnB,EAAAA,CAAAA,CAAO,CAC/B,IAAMS,CAAAA,CAAcV,EAAmCC,CAAK,CAAA,CACtDU,EAAa,MAAO,CAAA,IAAA,CAAKC,CAAM,CAC/BU,CAAAA,CAAAA,CACJF,EAAK,iBACL,EAAA,MAAA,CAAO,KAAKA,CAAK,CAAA,iBAAiB,EAAE,MAAS,CAAA,CAAA,CACzCA,EAAK,iBACLX,CAAAA,CAAAA,CAAuCC,EAAaC,CAAU,CAAA,CAEpE,OAAO,CACL,eAAA,CAFsB,OAAO,IAAKW,CAAAA,CAAY,EAG9C,YAAcA,CAAAA,CAAAA,CACd,OAAAV,CACF,CACF,CAEA,IAAMI,CAAAA,CAAAA,CAAeK,EAAAD,CAAK,CAAA,iBAAA,GAAL,KAAAC,CAA0B,CAAA,GAC/C,OAAO,CACL,gBAAiB,MAAO,CAAA,IAAA,CAAKL,CAAY,CACzC,CAAA,YAAA,CAAAA,EACA,MAAAJ,CAAAA,CACF,CACF,CAEO,SAASW,EACdzB,CACsC,CAAA,CACtC,GAAI,CAACA,CAAAA,CAAa,OAAO,IACzB,CAAA,IAAM0B,EAAY1B,CAAY,CAAA,UAAA,EAAc,OAC5C,GAAI,CAAC0B,EAAW,OAAO,IAAA,CAEvB,IAAMC,CAAyC,CAAA,CAC7C,UAAAD,CACA,CAAA,cAAA,CAAgB,KAClB,CAEA,CAAA,GAAIA,IAAc,MAAQ,CAAA,CACxB,IAAMjB,CAAaV,CAAAA,CAAAA,CAA0BC,CAAW,CACpDS,CAAAA,CAAAA,CAAW,OAAS,CACtBkB,GAAAA,CAAAA,CAAQ,WAAalB,CACrBkB,CAAAA,CAAAA,CAAQ,eAAiB,IAE3B,CAAA,CAAA,IAAMC,EAAW3B,CAAsBD,CAAAA,CAAW,EAC9C4B,CACFD,GAAAA,CAAAA,CAAQ,SAAWC,CACnBD,CAAAA,CAAAA,CAAQ,eAAiB,IAE7B,EAAA,CAEA,OAAOA,CACT,CAEO,SAASE,CACdC,CAAAA,CAAAA,CAQA9B,EACS,CA/QX,IAAAI,EAAAmB,CAAAQ,CAAAA,CAAAA,CAAAC,EAAAC,CAAAC,CAAAA,CAAAA,CAgRE,GAAI,CAAClC,CAAAA,EAAe,CAAC8B,CAAO,CAAA,OAAO,MACnC,IAAMH,CAAAA,CAAUF,EAA2BzB,CAAW,CAAA,CACtD,GAAI,CAAC2B,CAAAA,CAAS,OAAO,KAAA,CAErB,IAAMD,CAAAA,CAAAA,CAAYtB,EAAA0B,CAAM,CAAA,SAAA,GAAN,KAAA1B,CAAmB0B,CAAAA,CAAAA,CAAM,WAC3C,GAAIH,CAAAA,CAAQ,WAAaD,CAAcC,GAAAA,CAAAA,CAAQ,UAAW,OAAO,MAAA,CAEjE,GAAIA,CAAQ,CAAA,SAAA,GAAc,OAAQ,CAChC,IAAMQ,GAAWJ,CAAAR,CAAAA,CAAAA,CAAAA,CAAAO,EAAM,KAAN,GAAA,IAAA,CAAA,MAAA,CAAAP,EAAa,QAAb,GAAA,IAAA,CAAAQ,EAAyB,EAAC,CAC3C,GAAIJ,CAAQ,CAAA,UAAA,EAAcA,EAAQ,UAAW,CAAA,MAAA,CAAS,EAAG,CACvD,IAAMS,EAAM,MAAOJ,CAAAA,CAAAA,CAAAA,CAAAG,EAAS,SAAT,GAAA,IAAA,CAAAH,EAAsB,EAAE,CAAA,CAAE,aAC7C,CAAA,GAAI,CAACI,CAAO,EAAA,CAACT,EAAQ,UAAW,CAAA,QAAA,CAASS,CAAG,CAAG,CAAA,OAAO,MACxD,CACA,GAAIT,EAAQ,QAAU,CAAA,CACpB,IAAMU,CAAO,CAAA,MAAA,CAAA,CAAOH,GAAAD,CAAAE,CAAAA,CAAAA,CAAS,YAAT,IAAAF,CAAAA,CAAAA,CAAsBE,EAAS,IAA/B,GAAA,IAAA,CAAAD,EAAuC,EAAE,CAAA,CAC1D,aACA,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,CAAC,EACTI,CAAWX,CAAAA,CAAAA,CAAQ,SAAS,WAAY,EAAA,CAC9C,GAAIU,CAAQC,EAAAA,CAAAA,EAAY,CAACD,CAAK,CAAA,QAAA,CAASC,CAAQ,CAAKD,EAAAA,CAAAA,GAASC,EAC3D,OAAO,MAEX,CACF,CAEA,OAAO,KACT,CAEO,SAASC,EACdC,CACAtB,CAAAA,CAAAA,CAC8D,CAC9D,GAAI,CAACsB,GAAQ,CAAC,MAAA,CAAO,KAAKA,CAAI,CAAA,CAAE,OAAQ,OAAO,IAAA,CAC/C,IAAMxB,CACHE,CAAAA,CAAAA,EAAgBD,EAAyBC,CAAY,CAAA,EACtD,OAAO,IAAKsB,CAAAA,CAAI,EAAE,CAAC,CAAA,CACfC,EAAMD,CAAKxB,CAAAA,CAAG,EACpB,OAAKyB,CAAAA,CACE,CAAE,GAAAzB,CAAAA,CAAAA,CAAK,SAAUyB,CAAI,CAAA,QAAA,CAAU,WAAYA,CAAI,CAAA,UAAW,EADhD,IAEnB,CAEO,SAASC,CACdF,CAAAA,CAAAA,CACwD,CACxD,OAAKA,CAAAA,CACE,OAAO,WACZ,CAAA,MAAA,CAAO,QAAQA,CAAI,CAAA,CAAE,IAAI,CAAC,CAACxB,EAAKyB,CAAG,CAAA,GAAM,CACvCzB,CACA,CAAA,CAAE,QAASyB,CAAI,CAAA,QAAA,CAAU,UAAWA,CAAI,CAAA,UAAW,CACrD,CAAC,CACH,CANkB,CAAA,EAOpB","file":"chunk-HN7Y7VMJ.cjs","sourcesContent":["import {\n object,\n string,\n record,\n optional,\n boolean,\n array,\n uuid,\n union,\n type z,\n} from \"zod\";\n\nimport { AssetTypeSchema } from \"../schema/common\";\nimport { RouteInputAssetDeclarationSchema } from \"../schema/services\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeFileExtension(value: string | null | undefined): string | null {\n if (!value) return null;\n const normalized = value.replace(/^\\.+/, \"\").trim().toLowerCase();\n const safe = normalized.replace(/[^a-z0-9]/g, \"\");\n if (!safe || /^\\d+$/.test(safe) || safe.length > 12) return null;\n return safe;\n}\n\nfunction normalizeFileExtensions(\n value: string | string[] | null | undefined\n): string[] {\n const rawValues = Array.isArray(value)\n ? value\n : typeof value === \"string\"\n ? value.split(/[\\s,]+/)\n : [];\n return Array.from(\n new Set(\n rawValues\n .map((entry) => normalizeFileExtension(entry))\n .filter((entry): entry is string => Boolean(entry))\n )\n );\n}\n\n/** Stored on entries and eval_static_inputs after server normalization. */\nexport const KeyedAssetRefsSchema = record(\n string(),\n object({\n asset_id: uuid(),\n asset_type: AssetTypeSchema,\n })\n);\n\n/** Accepted on POST /quests/:id/entries/create — server fills asset_type. */\nexport const KeyedAssetInputValueSchema = union([\n uuid(),\n object({\n asset_id: uuid(),\n asset_type: optional(AssetTypeSchema),\n }),\n]);\n\nexport const KeyedAssetInputSchema = record(\n string(),\n KeyedAssetInputValueSchema\n);\n\nexport const QuestSubmissionAssetDeclarationSchema =\n RouteInputAssetDeclarationSchema.extend({\n required: optional(boolean()).default(true),\n });\n\nexport type KeyedAssetRefs = z.infer<typeof KeyedAssetRefsSchema>;\nexport type KeyedAssetInput = z.infer<typeof KeyedAssetInputSchema>;\nexport type QuestSubmissionAssetDeclaration = z.infer<\n typeof QuestSubmissionAssetDeclarationSchema\n>;\n\nexport type AssetDeclarationPickerFilters = {\n assetType?: string;\n fileType?: string;\n extensions?: string[];\n hasConstraints: boolean;\n};\n\nexport type QuestSubmissionItemInput = {\n eval_route_id?: string | null;\n submission_assets?: Record<string, QuestSubmissionAssetDeclaration> | null;\n eval_static_inputs?: KeyedAssetRefs | null;\n expected_asset_type?: string | null;\n};\n\nexport type RouteInputDeclarationLike = {\n asset_type?: string | null;\n primary?: boolean;\n input_filter?: string | null;\n filter?: string | null;\n file_extensions?: string[] | null;\n input_file_extensions?: string[] | null;\n};\n\nexport type RouteForSubmissionShape = {\n route?: {\n input_assets?: Record<string, RouteInputDeclarationLike> | null;\n input_type?: string | null;\n input_filter?: string | null;\n input_file_extensions?: string[] | null;\n } | null;\n} | null;\n\nfunction readDeclarationExtensions(\n declaration: RouteInputDeclarationLike\n): string[] {\n return normalizeFileExtensions([\n ...(Array.isArray(declaration.file_extensions)\n ? declaration.file_extensions\n : []),\n ...(Array.isArray(declaration.input_file_extensions)\n ? declaration.input_file_extensions\n : []),\n ].join(\",\"));\n}\n\nfunction readDeclarationFilter(\n declaration: RouteInputDeclarationLike\n): string | undefined {\n return declaration.input_filter || declaration.filter || undefined;\n}\n\n/** Route keyed inputs as a flat map (includes legacy input_type fallback). */\nexport function getRouteInputDeclarationsFromRoute(\n route: RouteForSubmissionShape\n): Record<string, RouteInputDeclarationLike> {\n const detail = route?.route;\n if (!detail) return {};\n\n const inputs = detail.input_assets;\n if (isPlainObject(inputs)) {\n const entries = Object.entries(inputs).filter(([, value]) =>\n isPlainObject(value)\n ) as [string, RouteInputDeclarationLike][];\n if (entries.length > 0) {\n return Object.fromEntries(entries);\n }\n }\n\n if (detail.input_type) {\n return {\n [detail.input_type]: {\n asset_type: detail.input_type,\n primary: true,\n input_filter: detail.input_filter,\n input_file_extensions: detail.input_file_extensions ?? null,\n },\n };\n }\n\n return {};\n}\n\nexport function declarationToSubmissionDeclaration(\n declaration: RouteInputDeclarationLike\n): QuestSubmissionAssetDeclaration {\n const extensions = readDeclarationExtensions(declaration);\n const filter = readDeclarationFilter(declaration);\n return {\n asset_type: declaration.asset_type as QuestSubmissionAssetDeclaration[\"asset_type\"],\n primary: declaration.primary,\n input_filter: (filter ?? null) as QuestSubmissionAssetDeclaration[\"input_filter\"],\n file_extensions: extensions.length > 0 ? extensions : null,\n required: true,\n };\n}\n\n/** Materialize contributor declarations from route inputs minus pinned keys. */\nexport function materializeContributorSubmissionAssets(\n routeInputs: Record<string, RouteInputDeclarationLike>,\n pinnedKeys: string[]\n): Record<string, QuestSubmissionAssetDeclaration> {\n const pinned = new Set(pinnedKeys);\n const out: Record<string, QuestSubmissionAssetDeclaration> = {};\n for (const [key, declaration] of Object.entries(routeInputs)) {\n if (pinned.has(key)) continue;\n out[key] = declarationToSubmissionDeclaration(declaration);\n }\n return out;\n}\n\nexport function getPrimaryDeclarationKey(\n declarations: Record<string, QuestSubmissionAssetDeclaration>\n): string | null {\n const entries = Object.entries(declarations);\n if (!entries.length) return null;\n const primary = entries.find(([, d]) => d.primary === true);\n if (primary) return primary[0];\n if (entries.length === 1) return entries[0][0];\n return entries[0][0];\n}\n\nexport function getSubmissionAssetShape(\n item: QuestSubmissionItemInput,\n route?: RouteForSubmissionShape | null\n): {\n contributorKeys: string[];\n declarations: Record<string, QuestSubmissionAssetDeclaration>;\n pinned: KeyedAssetRefs;\n} {\n const pinned: KeyedAssetRefs = item.eval_static_inputs ?? {};\n\n if (item.eval_route_id && route) {\n const routeInputs = getRouteInputDeclarationsFromRoute(route);\n const pinnedKeys = Object.keys(pinned);\n const materialized =\n item.submission_assets &&\n Object.keys(item.submission_assets).length > 0\n ? item.submission_assets\n : materializeContributorSubmissionAssets(routeInputs, pinnedKeys);\n const contributorKeys = Object.keys(materialized);\n return {\n contributorKeys,\n declarations: materialized,\n pinned,\n };\n }\n\n const declarations = item.submission_assets ?? {};\n return {\n contributorKeys: Object.keys(declarations),\n declarations,\n pinned,\n };\n}\n\nexport function declarationToPickerFilters(\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): AssetDeclarationPickerFilters | null {\n if (!declaration) return null;\n const assetType = declaration.asset_type || undefined;\n if (!assetType) return null;\n\n const filters: AssetDeclarationPickerFilters = {\n assetType,\n hasConstraints: false,\n };\n\n if (assetType === \"file\") {\n const extensions = readDeclarationExtensions(declaration);\n if (extensions.length > 0) {\n filters.extensions = extensions;\n filters.hasConstraints = true;\n }\n const fileType = readDeclarationFilter(declaration);\n if (fileType) {\n filters.fileType = fileType;\n filters.hasConstraints = true;\n }\n }\n\n return filters;\n}\n\nexport function assetMatchesDeclaration(\n asset:\n | {\n assetType?: string | null;\n asset_type?: string | null;\n asset?: { metadata?: Record<string, unknown> } | null;\n }\n | null\n | undefined,\n declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined\n): boolean {\n if (!declaration || !asset) return true;\n const filters = declarationToPickerFilters(declaration);\n if (!filters) return true;\n\n const assetType = asset.assetType ?? asset.asset_type;\n if (filters.assetType && assetType !== filters.assetType) return false;\n\n if (filters.assetType === \"file\") {\n const metadata = asset.asset?.metadata ?? {};\n if (filters.extensions && filters.extensions.length > 0) {\n const ext = String(metadata.extension ?? \"\").toLowerCase();\n if (!ext || !filters.extensions.includes(ext)) return false;\n }\n if (filters.fileType) {\n const type = String(metadata.file_type ?? metadata.type ?? \"\")\n .toLowerCase()\n .split(\"/\")[0];\n const expected = filters.fileType.toLowerCase();\n if (type && expected && !type.includes(expected) && type !== expected) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function getPrimaryAssetRef(\n refs: KeyedAssetRefs | null | undefined,\n declarations?: Record<string, QuestSubmissionAssetDeclaration> | null\n): { key: string; asset_id: string; asset_type: string } | null {\n if (!refs || !Object.keys(refs).length) return null;\n const key =\n (declarations && getPrimaryDeclarationKey(declarations)) ||\n Object.keys(refs)[0];\n const ref = refs[key];\n if (!ref) return null;\n return { key, asset_id: ref.asset_id, asset_type: ref.asset_type };\n}\n\nexport function toRouteInputAssets(\n refs: KeyedAssetRefs | null | undefined\n): Record<string, { assetId: string; assetType: string }> {\n if (!refs) return {};\n return Object.fromEntries(\n Object.entries(refs).map(([key, ref]) => [\n key,\n { assetId: ref.asset_id, assetType: ref.asset_type },\n ])\n );\n}\n\n/** @deprecated Use declarationToPickerFilters */\nexport type EvalSubmissionFilters = AssetDeclarationPickerFilters;\n"]}
@@ -1,2 +1,2 @@
1
- import {e}from'./chunk-7F26V24D.js';import {a}from'./chunk-WRHPQNEL.js';import {record,string,object,uuid,union,optional,boolean}from'zod';function m(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function k(e){if(!e)return null;let t=e.replace(/^\.+/,"").trim().toLowerCase().replace(/[^a-z0-9]/g,"");return !t||/^\d+$/.test(t)||t.length>12?null:t}function I(e){let s=Array.isArray(e)?e:typeof e=="string"?e.split(/[\s,]+/):[];return Array.from(new Set(s.map(t=>k(t)).filter(t=>!!t)))}var P=record(string(),object({asset_id:uuid(),asset_type:a})),K=union([uuid(),object({asset_id:uuid(),asset_type:optional(a)})]),E=record(string(),K),q=e.extend({required:optional(boolean()).default(true)});function S(e){return I([...Array.isArray(e.file_extensions)?e.file_extensions:[],...Array.isArray(e.input_file_extensions)?e.input_file_extensions:[]].join(","))}function R(e){return e.input_filter||e.filter||void 0}function T(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(m(t)){let i=Object.entries(t).filter(([,r])=>m(r));if(i.length>0)return Object.fromEntries(i)}return s.input_type?{[s.input_type]:{asset_type:s.input_type,primary:true,input_filter:s.input_filter,input_file_extensions:(n=s.input_file_extensions)!=null?n:null}}:{}}function j(e){let s=S(e),t=R(e);return {asset_type:e.asset_type,primary:e.primary,input_filter:t!=null?t:null,file_extensions:s.length>0?s:null,required:true}}function Q(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=j(r));return n}function L(e){let s=Object.entries(e);if(!s.length)return null;let t=s.find(([,n])=>n.primary===true);return t?t[0]:(s.length===1,s[0][0])}function B(e,s){var i,r;let t=(i=e.eval_static_inputs)!=null?i:{};if(e.eval_route_id&&s){let a=T(s),l=Object.keys(t),u=e.submission_assets&&Object.keys(e.submission_assets).length>0?e.submission_assets:Q(a,l);return {contributorKeys:Object.keys(u),declarations:u,pinned:t}}let n=(r=e.submission_assets)!=null?r:{};return {contributorKeys:Object.keys(n),declarations:n,pinned:t}}function F(e){if(!e)return null;let s=e.asset_type||void 0;if(!s)return null;let t={assetType:s,hasConstraints:false};if(s==="file"){let n=S(e);n.length>0&&(t.extensions=n,t.hasConstraints=true);let i=R(e);i&&(t.fileType=i,t.hasConstraints=true);}return t}function V(e,s){var i,r,a,l,u,p;if(!s||!e)return true;let t=F(s);if(!t)return true;let n=(i=e.assetType)!=null?i:e.asset_type;if(t.assetType&&n!==t.assetType)return false;if(t.assetType==="file"){let c=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=c.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((p=(u=c.file_type)!=null?u:c.type)!=null?p:"").toLowerCase().split("/")[0],f=t.fileType.toLowerCase();if(o&&f&&!o.includes(f)&&o!==f)return false}}return true}function M(e,s){if(!e||!Object.keys(e).length)return null;let t=s&&L(s)||Object.keys(e)[0],n=e[t];return n?{key:t,asset_id:n.asset_id,asset_type:n.asset_type}:null}function $(e){return e?Object.fromEntries(Object.entries(e).map(([s,t])=>[s,{assetId:t.asset_id,assetType:t.asset_type}])):{}}export{P as a,K as b,E as c,q as d,T as e,j as f,Q as g,L as h,B as i,F as j,V as k,M as l,$ as m};//# sourceMappingURL=chunk-JKTQY4RU.js.map
2
- //# sourceMappingURL=chunk-JKTQY4RU.js.map
1
+ import {e}from'./chunk-W5UCZ73B.js';import {a}from'./chunk-WRHPQNEL.js';import {record,string,object,uuid,union,optional,boolean}from'zod';function m(e){return !!e&&typeof e=="object"&&!Array.isArray(e)}function k(e){if(!e)return null;let t=e.replace(/^\.+/,"").trim().toLowerCase().replace(/[^a-z0-9]/g,"");return !t||/^\d+$/.test(t)||t.length>12?null:t}function I(e){let s=Array.isArray(e)?e:typeof e=="string"?e.split(/[\s,]+/):[];return Array.from(new Set(s.map(t=>k(t)).filter(t=>!!t)))}var P=record(string(),object({asset_id:uuid(),asset_type:a})),K=union([uuid(),object({asset_id:uuid(),asset_type:optional(a)})]),E=record(string(),K),q=e.extend({required:optional(boolean()).default(true)});function S(e){return I([...Array.isArray(e.file_extensions)?e.file_extensions:[],...Array.isArray(e.input_file_extensions)?e.input_file_extensions:[]].join(","))}function R(e){return e.input_filter||e.filter||void 0}function T(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(m(t)){let i=Object.entries(t).filter(([,r])=>m(r));if(i.length>0)return Object.fromEntries(i)}return s.input_type?{[s.input_type]:{asset_type:s.input_type,primary:true,input_filter:s.input_filter,input_file_extensions:(n=s.input_file_extensions)!=null?n:null}}:{}}function j(e){let s=S(e),t=R(e);return {asset_type:e.asset_type,primary:e.primary,input_filter:t!=null?t:null,file_extensions:s.length>0?s:null,required:true}}function Q(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=j(r));return n}function L(e){let s=Object.entries(e);if(!s.length)return null;let t=s.find(([,n])=>n.primary===true);return t?t[0]:(s.length===1,s[0][0])}function B(e,s){var i,r;let t=(i=e.eval_static_inputs)!=null?i:{};if(e.eval_route_id&&s){let a=T(s),l=Object.keys(t),u=e.submission_assets&&Object.keys(e.submission_assets).length>0?e.submission_assets:Q(a,l);return {contributorKeys:Object.keys(u),declarations:u,pinned:t}}let n=(r=e.submission_assets)!=null?r:{};return {contributorKeys:Object.keys(n),declarations:n,pinned:t}}function F(e){if(!e)return null;let s=e.asset_type||void 0;if(!s)return null;let t={assetType:s,hasConstraints:false};if(s==="file"){let n=S(e);n.length>0&&(t.extensions=n,t.hasConstraints=true);let i=R(e);i&&(t.fileType=i,t.hasConstraints=true);}return t}function V(e,s){var i,r,a,l,u,p;if(!s||!e)return true;let t=F(s);if(!t)return true;let n=(i=e.assetType)!=null?i:e.asset_type;if(t.assetType&&n!==t.assetType)return false;if(t.assetType==="file"){let c=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=c.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((p=(u=c.file_type)!=null?u:c.type)!=null?p:"").toLowerCase().split("/")[0],f=t.fileType.toLowerCase();if(o&&f&&!o.includes(f)&&o!==f)return false}}return true}function M(e,s){if(!e||!Object.keys(e).length)return null;let t=s&&L(s)||Object.keys(e)[0],n=e[t];return n?{key:t,asset_id:n.asset_id,asset_type:n.asset_type}:null}function $(e){return e?Object.fromEntries(Object.entries(e).map(([s,t])=>[s,{assetId:t.asset_id,assetType:t.asset_type}])):{}}export{P as a,K as b,E as c,q as d,T as e,j as f,Q as g,L as h,B as i,F as j,V as k,M as l,$ as m};//# sourceMappingURL=chunk-M2JJPDBW.js.map
2
+ //# sourceMappingURL=chunk-M2JJPDBW.js.map