@ourofoundation/ouro-js 3.8.3 → 3.8.5

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 (193) hide show
  1. package/.github/workflows/publish.yml +63 -0
  2. package/dist/chunk-33ELNWOX.js +2 -0
  3. package/dist/chunk-33ELNWOX.js.map +1 -0
  4. package/dist/chunk-3PRQXWQP.js +2 -0
  5. package/dist/chunk-3PRQXWQP.js.map +1 -0
  6. package/dist/chunk-4276I2OP.js +2 -0
  7. package/dist/chunk-4276I2OP.js.map +1 -0
  8. package/dist/chunk-4AEKCY33.js +2 -0
  9. package/dist/chunk-4AEKCY33.js.map +1 -0
  10. package/dist/{chunk-KU5AWMS5.cjs → chunk-5PWVQ2XA.cjs} +2 -2
  11. package/dist/{chunk-KU5AWMS5.cjs.map → chunk-5PWVQ2XA.cjs.map} +1 -1
  12. package/dist/{chunk-RMMMRN4X.cjs → chunk-6DNS4QKU.cjs} +2 -2
  13. package/dist/{chunk-RMMMRN4X.cjs.map → chunk-6DNS4QKU.cjs.map} +1 -1
  14. package/dist/{chunk-AIIAIQ6L.cjs → chunk-BR3QVFVE.cjs} +2 -2
  15. package/dist/{chunk-AIIAIQ6L.cjs.map → chunk-BR3QVFVE.cjs.map} +1 -1
  16. package/dist/{chunk-OCG3P3PJ.js → chunk-BWUPF76F.js} +2 -2
  17. package/dist/{chunk-OCG3P3PJ.js.map → chunk-BWUPF76F.js.map} +1 -1
  18. package/dist/{chunk-LXDNBUOU.js → chunk-BYYDLMAE.js} +2 -2
  19. package/dist/{chunk-LXDNBUOU.js.map → chunk-BYYDLMAE.js.map} +1 -1
  20. package/dist/chunk-CZMKRHO4.cjs +2 -0
  21. package/dist/chunk-CZMKRHO4.cjs.map +1 -0
  22. package/dist/chunk-D6JWKEY5.cjs +2 -0
  23. package/dist/chunk-D6JWKEY5.cjs.map +1 -0
  24. package/dist/chunk-DA7VOYUY.js +2 -0
  25. package/dist/{chunk-FGEMQEEM.js.map → chunk-DA7VOYUY.js.map} +1 -1
  26. package/dist/chunk-F7URSDHU.cjs +2 -0
  27. package/dist/chunk-F7URSDHU.cjs.map +1 -0
  28. package/dist/chunk-HJW6XNOY.js +2 -0
  29. package/dist/chunk-HJW6XNOY.js.map +1 -0
  30. package/dist/chunk-J4GKOJZZ.cjs +2 -0
  31. package/dist/chunk-J4GKOJZZ.cjs.map +1 -0
  32. package/dist/chunk-KE53HYHH.cjs +2 -0
  33. package/dist/chunk-KE53HYHH.cjs.map +1 -0
  34. package/dist/chunk-NLU672VS.js +2 -0
  35. package/dist/chunk-NLU672VS.js.map +1 -0
  36. package/dist/chunk-O2BXIKRA.js +2 -0
  37. package/dist/chunk-O2BXIKRA.js.map +1 -0
  38. package/dist/chunk-OC34WU3H.cjs +2 -0
  39. package/dist/chunk-OC34WU3H.cjs.map +1 -0
  40. package/dist/chunk-OMO4474C.cjs +2 -0
  41. package/dist/chunk-OMO4474C.cjs.map +1 -0
  42. package/dist/chunk-PMOXYEAS.js +2 -0
  43. package/dist/{chunk-MKRXM63S.js.map → chunk-PMOXYEAS.js.map} +1 -1
  44. package/dist/chunk-QVMN2EX4.js +2 -0
  45. package/dist/chunk-QVMN2EX4.js.map +1 -0
  46. package/dist/chunk-R52RJPI3.cjs +2 -0
  47. package/dist/chunk-R52RJPI3.cjs.map +1 -0
  48. package/dist/chunk-RO6NRIGU.js +2 -0
  49. package/dist/chunk-RO6NRIGU.js.map +1 -0
  50. package/dist/chunk-SUVNXKE6.js +2 -0
  51. package/dist/chunk-SUVNXKE6.js.map +1 -0
  52. package/dist/chunk-SZW4GHCP.cjs +2 -0
  53. package/dist/chunk-SZW4GHCP.cjs.map +1 -0
  54. package/dist/chunk-UBSYUTZO.cjs +2 -0
  55. package/dist/chunk-UBSYUTZO.cjs.map +1 -0
  56. package/dist/chunk-V352KM56.cjs +2 -0
  57. package/dist/chunk-V352KM56.cjs.map +1 -0
  58. package/dist/{chunk-DSJ23DIB.cjs → chunk-V5W6FOUA.cjs} +2 -2
  59. package/dist/{chunk-DSJ23DIB.cjs.map → chunk-V5W6FOUA.cjs.map} +1 -1
  60. package/dist/chunk-WMCUQQ2Q.cjs +2 -0
  61. package/dist/chunk-WMCUQQ2Q.cjs.map +1 -0
  62. package/dist/{chunk-E2FDUS3B.cjs → chunk-X5KE2IW6.cjs} +2 -2
  63. package/dist/{chunk-E2FDUS3B.cjs.map → chunk-X5KE2IW6.cjs.map} +1 -1
  64. package/dist/chunk-XSZPAZEE.js +2 -0
  65. package/dist/{chunk-PGCNGDPK.js.map → chunk-XSZPAZEE.js.map} +1 -1
  66. package/dist/chunk-Y37HRTGF.js +2 -0
  67. package/dist/chunk-Y37HRTGF.js.map +1 -0
  68. package/dist/chunk-ZM7J5MCU.js +2 -0
  69. package/dist/chunk-ZM7J5MCU.js.map +1 -0
  70. package/dist/index.cjs +1 -1
  71. package/dist/index.d.cts +6 -5
  72. package/dist/index.d.ts +6 -5
  73. package/dist/index.js +1 -1
  74. package/dist/schema/asset-filters.d.cts +2 -2
  75. package/dist/schema/asset-filters.d.ts +2 -2
  76. package/dist/schema/assets.cjs +1 -1
  77. package/dist/schema/assets.d.cts +10 -4
  78. package/dist/schema/assets.d.ts +10 -4
  79. package/dist/schema/assets.js +1 -1
  80. package/dist/schema/comments.cjs +1 -1
  81. package/dist/schema/comments.d.cts +44 -8
  82. package/dist/schema/comments.d.ts +44 -8
  83. package/dist/schema/comments.js +1 -1
  84. package/dist/schema/conversations.cjs +1 -1
  85. package/dist/schema/conversations.d.cts +18 -6
  86. package/dist/schema/conversations.d.ts +18 -6
  87. package/dist/schema/conversations.js +1 -1
  88. package/dist/schema/datasets.cjs +1 -1
  89. package/dist/schema/datasets.d.cts +24 -16
  90. package/dist/schema/datasets.d.ts +24 -16
  91. package/dist/schema/datasets.js +1 -1
  92. package/dist/schema/files.cjs +1 -1
  93. package/dist/schema/files.d.cts +178 -11
  94. package/dist/schema/files.d.ts +178 -11
  95. package/dist/schema/files.js +1 -1
  96. package/dist/schema/notifications.cjs +1 -1
  97. package/dist/schema/notifications.d.cts +21 -1
  98. package/dist/schema/notifications.d.ts +21 -1
  99. package/dist/schema/notifications.js +1 -1
  100. package/dist/schema/organizations.cjs +1 -1
  101. package/dist/schema/organizations.d.cts +3 -1
  102. package/dist/schema/organizations.d.ts +3 -1
  103. package/dist/schema/organizations.js +1 -1
  104. package/dist/schema/posts.cjs +1 -1
  105. package/dist/schema/posts.d.cts +42 -6
  106. package/dist/schema/posts.d.ts +42 -6
  107. package/dist/schema/posts.js +1 -1
  108. package/dist/schema/quests.cjs +1 -1
  109. package/dist/schema/quests.d.cts +94 -21
  110. package/dist/schema/quests.d.ts +94 -21
  111. package/dist/schema/quests.js +1 -1
  112. package/dist/schema/renditions.cjs +2 -0
  113. package/dist/schema/renditions.cjs.map +1 -0
  114. package/dist/schema/renditions.d.cts +196 -0
  115. package/dist/schema/renditions.d.ts +196 -0
  116. package/dist/schema/renditions.js +2 -0
  117. package/dist/schema/renditions.js.map +1 -0
  118. package/dist/schema/services.cjs +1 -1
  119. package/dist/schema/services.d.cts +333 -21
  120. package/dist/schema/services.d.ts +333 -21
  121. package/dist/schema/services.js +1 -1
  122. package/dist/schema/teams.cjs +1 -1
  123. package/dist/schema/teams.d.cts +27 -2
  124. package/dist/schema/teams.d.ts +27 -2
  125. package/dist/schema/teams.js +1 -1
  126. package/dist/schema/users.cjs +1 -1
  127. package/dist/schema/users.d.cts +42 -1
  128. package/dist/schema/users.d.ts +42 -1
  129. package/dist/schema/users.js +1 -1
  130. package/dist/utils/files.cjs +1 -1
  131. package/dist/utils/files.d.cts +2 -1
  132. package/dist/utils/files.d.ts +2 -1
  133. package/dist/utils/files.js +1 -1
  134. package/dist/utils/navigate.cjs +1 -1
  135. package/dist/utils/navigate.js +1 -1
  136. package/dist/utils/quest-submission-helpers.cjs +2 -0
  137. package/dist/utils/quest-submission-helpers.cjs.map +1 -0
  138. package/dist/utils/quest-submission-helpers.d.cts +2 -0
  139. package/dist/utils/quest-submission-helpers.d.ts +2 -0
  140. package/dist/utils/quest-submission-helpers.js +2 -0
  141. package/dist/utils/quest-submission-helpers.js.map +1 -0
  142. package/dist/utils/quest-submission.cjs +1 -1
  143. package/dist/utils/quest-submission.d.cts +69 -59
  144. package/dist/utils/quest-submission.d.ts +69 -59
  145. package/dist/utils/quest-submission.js +1 -1
  146. package/package.json +1 -1
  147. package/tests/file-classification.test.mjs +19 -0
  148. package/tests/files.test.mjs +21 -1
  149. package/tests/navigate.test.mjs +53 -0
  150. package/tests/renditions.test.mjs +111 -0
  151. package/dist/chunk-3DGJ27WL.js +0 -2
  152. package/dist/chunk-3DGJ27WL.js.map +0 -1
  153. package/dist/chunk-3JPOAQ2M.cjs +0 -2
  154. package/dist/chunk-3JPOAQ2M.cjs.map +0 -1
  155. package/dist/chunk-64ZUBBP7.js +0 -2
  156. package/dist/chunk-64ZUBBP7.js.map +0 -1
  157. package/dist/chunk-ADLJ3UUW.cjs +0 -2
  158. package/dist/chunk-ADLJ3UUW.cjs.map +0 -1
  159. package/dist/chunk-CDJH4OT5.js +0 -2
  160. package/dist/chunk-CDJH4OT5.js.map +0 -1
  161. package/dist/chunk-CIEATF7M.cjs +0 -2
  162. package/dist/chunk-CIEATF7M.cjs.map +0 -1
  163. package/dist/chunk-EY4OFSDP.js +0 -2
  164. package/dist/chunk-EY4OFSDP.js.map +0 -1
  165. package/dist/chunk-FGEMQEEM.js +0 -2
  166. package/dist/chunk-KHERHT26.cjs +0 -2
  167. package/dist/chunk-KHERHT26.cjs.map +0 -1
  168. package/dist/chunk-LMRFVO4I.cjs +0 -2
  169. package/dist/chunk-LMRFVO4I.cjs.map +0 -1
  170. package/dist/chunk-MKRXM63S.js +0 -2
  171. package/dist/chunk-MOEVC3KD.cjs +0 -2
  172. package/dist/chunk-MOEVC3KD.cjs.map +0 -1
  173. package/dist/chunk-OU4JKY4M.js +0 -2
  174. package/dist/chunk-OU4JKY4M.js.map +0 -1
  175. package/dist/chunk-PGCNGDPK.js +0 -2
  176. package/dist/chunk-PVUBGWOI.cjs +0 -2
  177. package/dist/chunk-PVUBGWOI.cjs.map +0 -1
  178. package/dist/chunk-RS5H4XDK.js +0 -2
  179. package/dist/chunk-RS5H4XDK.js.map +0 -1
  180. package/dist/chunk-W6KXPYCB.js +0 -2
  181. package/dist/chunk-W6KXPYCB.js.map +0 -1
  182. package/dist/chunk-XEA4DDOE.cjs +0 -2
  183. package/dist/chunk-XEA4DDOE.cjs.map +0 -1
  184. package/dist/chunk-XL2RQ3DZ.cjs +0 -2
  185. package/dist/chunk-XL2RQ3DZ.cjs.map +0 -1
  186. package/dist/chunk-XXFKHRNE.js +0 -2
  187. package/dist/chunk-XXFKHRNE.js.map +0 -1
  188. package/dist/chunk-Y6BK75KP.js +0 -2
  189. package/dist/chunk-Y6BK75KP.js.map +0 -1
  190. package/dist/chunk-YTCAK2AH.cjs +0 -2
  191. package/dist/chunk-YTCAK2AH.cjs.map +0 -1
  192. package/dist/chunk-ZFARY5F4.js +0 -2
  193. package/dist/chunk-ZFARY5F4.js.map +0 -1
@@ -1,5 +1,65 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ type AssetDeclarationPickerFilters = {
4
+ assetType?: string;
5
+ fileType?: string;
6
+ extensions?: string[];
7
+ hasConstraints: boolean;
8
+ };
9
+ type QuestSubmissionItemInput = {
10
+ eval_route_id?: string | null;
11
+ submission_assets?: Record<string, QuestSubmissionAssetDeclaration> | null;
12
+ eval_static_inputs?: KeyedAssetRefs | null;
13
+ expected_asset_type?: string | null;
14
+ };
15
+ type RouteInputDeclarationLike = {
16
+ asset_type?: string | null;
17
+ primary?: boolean;
18
+ input_filter?: string | null;
19
+ filter?: string | null;
20
+ file_extensions?: string[] | null;
21
+ input_file_extensions?: string[] | null;
22
+ label?: string | null;
23
+ };
24
+ type RouteForSubmissionShape = {
25
+ route?: {
26
+ input_assets?: Record<string, RouteInputDeclarationLike> | null;
27
+ input_type?: string | null;
28
+ input_filter?: string | null;
29
+ input_file_extensions?: string[] | null;
30
+ } | null;
31
+ } | null;
32
+ /** Route keyed inputs as a flat map (includes legacy input_type fallback). */
33
+ declare function getRouteInputDeclarationsFromRoute(route: RouteForSubmissionShape): Record<string, RouteInputDeclarationLike>;
34
+ declare function declarationToSubmissionDeclaration(declaration: RouteInputDeclarationLike): QuestSubmissionAssetDeclaration;
35
+ /** Materialize contributor declarations from route inputs minus pinned keys. */
36
+ declare function materializeContributorSubmissionAssets(routeInputs: Record<string, RouteInputDeclarationLike>, pinnedKeys: string[]): Record<string, QuestSubmissionAssetDeclaration>;
37
+ declare function getPrimaryDeclarationKey(declarations: Record<string, QuestSubmissionAssetDeclaration>): string | null;
38
+ declare function getSubmissionAssetShape(item: QuestSubmissionItemInput, route?: RouteForSubmissionShape | null): {
39
+ contributorKeys: string[];
40
+ declarations: Record<string, QuestSubmissionAssetDeclaration>;
41
+ pinned: KeyedAssetRefs;
42
+ };
43
+ declare function declarationToPickerFilters(declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined): AssetDeclarationPickerFilters | null;
44
+ declare function assetMatchesDeclaration(asset: {
45
+ assetType?: string | null;
46
+ asset_type?: string | null;
47
+ asset?: {
48
+ metadata?: Record<string, unknown>;
49
+ } | null;
50
+ } | null | undefined, declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined): boolean;
51
+ declare function getPrimaryAssetRef(refs: KeyedAssetRefs | null | undefined, declarations?: Record<string, QuestSubmissionAssetDeclaration> | null): {
52
+ key: string;
53
+ asset_id: string;
54
+ asset_type: string;
55
+ } | null;
56
+ declare function toRouteInputAssets(refs: KeyedAssetRefs | null | undefined): Record<string, {
57
+ assetId: string;
58
+ assetType: string;
59
+ }>;
60
+ /** @deprecated Use declarationToPickerFilters */
61
+ type EvalSubmissionFilters = AssetDeclarationPickerFilters;
62
+
3
63
  /** Stored on entries and eval_static_inputs after server normalization. */
4
64
  declare const KeyedAssetRefsSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
5
65
  asset_id: z.ZodUUID;
@@ -55,80 +115,30 @@ declare const QuestSubmissionAssetDeclarationSchema: z.ZodObject<{
55
115
  dataset: "dataset";
56
116
  file: "file";
57
117
  post: "post";
118
+ comment: "comment";
58
119
  }>;
120
+ asset_types: z.ZodOptional<z.ZodArray<z.ZodEnum<{
121
+ dataset: "dataset";
122
+ file: "file";
123
+ post: "post";
124
+ comment: "comment";
125
+ }>>>;
59
126
  primary: z.ZodOptional<z.ZodBoolean>;
60
127
  input_filter: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
128
+ audio: "audio";
61
129
  image: "image";
62
130
  video: "video";
63
- audio: "audio";
64
131
  pdf: "pdf";
65
132
  "3d model": "3d model";
66
133
  "atomic structure": "atomic structure";
67
134
  }>>>;
68
135
  file_extensions: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
69
136
  contains_file_extensions: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
137
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
70
138
  required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
71
139
  }, z.core.$catchall<z.ZodAny>>;
72
140
  type KeyedAssetRefs = z.infer<typeof KeyedAssetRefsSchema>;
73
141
  type KeyedAssetInput = z.infer<typeof KeyedAssetInputSchema>;
74
142
  type QuestSubmissionAssetDeclaration = z.infer<typeof QuestSubmissionAssetDeclarationSchema>;
75
- type AssetDeclarationPickerFilters = {
76
- assetType?: string;
77
- fileType?: string;
78
- extensions?: string[];
79
- hasConstraints: boolean;
80
- };
81
- type QuestSubmissionItemInput = {
82
- eval_route_id?: string | null;
83
- submission_assets?: Record<string, QuestSubmissionAssetDeclaration> | null;
84
- eval_static_inputs?: KeyedAssetRefs | null;
85
- expected_asset_type?: string | null;
86
- };
87
- type RouteInputDeclarationLike = {
88
- asset_type?: string | null;
89
- primary?: boolean;
90
- input_filter?: string | null;
91
- filter?: string | null;
92
- file_extensions?: string[] | null;
93
- input_file_extensions?: string[] | null;
94
- };
95
- type RouteForSubmissionShape = {
96
- route?: {
97
- input_assets?: Record<string, RouteInputDeclarationLike> | null;
98
- input_type?: string | null;
99
- input_filter?: string | null;
100
- input_file_extensions?: string[] | null;
101
- } | null;
102
- } | null;
103
- /** Route keyed inputs as a flat map (includes legacy input_type fallback). */
104
- declare function getRouteInputDeclarationsFromRoute(route: RouteForSubmissionShape): Record<string, RouteInputDeclarationLike>;
105
- declare function declarationToSubmissionDeclaration(declaration: RouteInputDeclarationLike): QuestSubmissionAssetDeclaration;
106
- /** Materialize contributor declarations from route inputs minus pinned keys. */
107
- declare function materializeContributorSubmissionAssets(routeInputs: Record<string, RouteInputDeclarationLike>, pinnedKeys: string[]): Record<string, QuestSubmissionAssetDeclaration>;
108
- declare function getPrimaryDeclarationKey(declarations: Record<string, QuestSubmissionAssetDeclaration>): string | null;
109
- declare function getSubmissionAssetShape(item: QuestSubmissionItemInput, route?: RouteForSubmissionShape | null): {
110
- contributorKeys: string[];
111
- declarations: Record<string, QuestSubmissionAssetDeclaration>;
112
- pinned: KeyedAssetRefs;
113
- };
114
- declare function declarationToPickerFilters(declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined): AssetDeclarationPickerFilters | null;
115
- declare function assetMatchesDeclaration(asset: {
116
- assetType?: string | null;
117
- asset_type?: string | null;
118
- asset?: {
119
- metadata?: Record<string, unknown>;
120
- } | null;
121
- } | null | undefined, declaration: RouteInputDeclarationLike | QuestSubmissionAssetDeclaration | null | undefined): boolean;
122
- declare function getPrimaryAssetRef(refs: KeyedAssetRefs | null | undefined, declarations?: Record<string, QuestSubmissionAssetDeclaration> | null): {
123
- key: string;
124
- asset_id: string;
125
- asset_type: string;
126
- } | null;
127
- declare function toRouteInputAssets(refs: KeyedAssetRefs | null | undefined): Record<string, {
128
- assetId: string;
129
- assetType: string;
130
- }>;
131
- /** @deprecated Use declarationToPickerFilters */
132
- type EvalSubmissionFilters = AssetDeclarationPickerFilters;
133
143
 
134
144
  export { type AssetDeclarationPickerFilters, type EvalSubmissionFilters, type KeyedAssetInput, KeyedAssetInputSchema, KeyedAssetInputValueSchema, type KeyedAssetRefs, KeyedAssetRefsSchema, type QuestSubmissionAssetDeclaration, QuestSubmissionAssetDeclarationSchema, type QuestSubmissionItemInput, type RouteForSubmissionShape, type RouteInputDeclarationLike, assetMatchesDeclaration, declarationToPickerFilters, declarationToSubmissionDeclaration, getPrimaryAssetRef, getPrimaryDeclarationKey, getRouteInputDeclarationsFromRoute, getSubmissionAssetShape, materializeContributorSubmissionAssets, toRouteInputAssets };
@@ -1,2 +1,2 @@
1
- export{c as KeyedAssetInputSchema,b as KeyedAssetInputValueSchema,a as KeyedAssetRefsSchema,d as QuestSubmissionAssetDeclarationSchema,k as assetMatchesDeclaration,j as declarationToPickerFilters,f as declarationToSubmissionDeclaration,l as getPrimaryAssetRef,h as getPrimaryDeclarationKey,e as getRouteInputDeclarationsFromRoute,i as getSubmissionAssetShape,g as materializeContributorSubmissionAssets,m as toRouteInputAssets}from'../chunk-64ZUBBP7.js';import'../chunk-RS5H4XDK.js';import'../chunk-OU4JKY4M.js';import'../chunk-PGCNGDPK.js';import'../chunk-Y6BK75KP.js';import'../chunk-OCG3P3PJ.js';import'../chunk-CDJH4OT5.js';import'../chunk-33C7IDRP.js';import'../chunk-DUBPWSCA.js';import'../chunk-42ADEGDM.js';//# sourceMappingURL=quest-submission.js.map
1
+ export{c as KeyedAssetInputSchema,b as KeyedAssetInputValueSchema,a as KeyedAssetRefsSchema,d as QuestSubmissionAssetDeclarationSchema}from'../chunk-SUVNXKE6.js';export{g as assetMatchesDeclaration,f as declarationToPickerFilters,b as declarationToSubmissionDeclaration,h as getPrimaryAssetRef,d as getPrimaryDeclarationKey,a as getRouteInputDeclarationsFromRoute,e as getSubmissionAssetShape,c as materializeContributorSubmissionAssets,i as toRouteInputAssets}from'../chunk-HJW6XNOY.js';import'../chunk-4276I2OP.js';import'../chunk-QVMN2EX4.js';import'../chunk-XSZPAZEE.js';import'../chunk-ZM7J5MCU.js';import'../chunk-BWUPF76F.js';import'../chunk-NLU672VS.js';import'../chunk-33C7IDRP.js';import'../chunk-DUBPWSCA.js';import'../chunk-42ADEGDM.js';//# sourceMappingURL=quest-submission.js.map
2
2
  //# sourceMappingURL=quest-submission.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ourofoundation/ouro-js",
3
- "version": "3.8.3",
3
+ "version": "3.8.5",
4
4
  "description": "Interact with the Ouro platform in browser and node.js environments",
5
5
  "module": "./dist/index.js",
6
6
  "main": "./dist/index.cjs",
@@ -0,0 +1,19 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { getFileClassification, getFileTypeName } from "../dist/index.js";
5
+
6
+ test("Ouro-specific formats get a readable name", () => {
7
+ assert.equal(getFileTypeName("phasediagram"), "phase diagram");
8
+ assert.equal(getFileTypeName(".PhaseDiagram"), "phase diagram");
9
+ assert.equal(getFileTypeName("json"), null);
10
+ assert.equal(
11
+ getFileClassification("application/json", "phasediagram"),
12
+ "phase diagram"
13
+ );
14
+ });
15
+
16
+ test("other files keep their MIME category or extension", () => {
17
+ assert.equal(getFileClassification("image/png", "png"), "image");
18
+ assert.equal(getFileClassification("application/json", "json"), ".json");
19
+ });
@@ -1,7 +1,7 @@
1
1
  import assert from "node:assert/strict";
2
2
  import test from "node:test";
3
3
 
4
- import { CreateFileSchema } from "../dist/index.js";
4
+ import { CreateFileSchema, updateFileSchema } from "../dist/index.js";
5
5
 
6
6
  const successMetadata = {
7
7
  id: "019b7d6d-2cc5-7df8-a575-91ecbfc72fc0",
@@ -69,3 +69,23 @@ test("ZIP preview rows and archive metadata parse together", () => {
69
69
  assert.equal(file.metadata.archive.entry_count, 1);
70
70
  assert.equal(file.preview[0].name, "data.csv");
71
71
  });
72
+
73
+ test("updateFileSchema keeps structure summaries, including unparseable ones", () => {
74
+ const structure = {
75
+ formula: "Fe8Si5W3",
76
+ elements: ["Fe", "Si", "W"],
77
+ num_atoms: 16,
78
+ space_group: { symbol: "P4/mmm", number: 123 },
79
+ crystal_system: "tetragonal",
80
+ lattice: { a: 5.4889, b: 5.4889, c: 6.1547, alpha: 90, beta: 90, gamma: 90 },
81
+ volume: 185.426,
82
+ density: 10.197,
83
+ };
84
+ const cif = { ...successMetadata, name: "x.cif", type: "chemical/x-cif", extension: "cif" };
85
+
86
+ const parsed = updateFileSchema.parse({ metadata: { ...cif, structure } });
87
+ assert.deepEqual(parsed.metadata.structure, structure);
88
+
89
+ const failed = updateFileSchema.parse({ metadata: { ...cif, structure: null } });
90
+ assert.equal(failed.metadata.structure, null);
91
+ });
@@ -0,0 +1,53 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { createNameUrlSlug } from "../dist/index.js";
5
+
6
+ test("createNameUrlSlug keeps plain names unchanged", () => {
7
+ // Pre-existing behaviour must hold for ordinary names so stored slugs
8
+ // keep matching what the function produces.
9
+ const cases = {
10
+ "Crystal structures for composition: SnS 1": "crystal-structures-for-composition-sns-1",
11
+ "POST /generate": "post-generate",
12
+ "Relax a crystal structure": "relax-a-crystal-structure",
13
+ "Li-O-Ti — 3 MatterGen structures (Fm-3m, P4_2/mnm)":
14
+ "li-o-ti-3-mattergen-structures-fm-3m-p4-2-mnm",
15
+ "Café résumé": "cafe-resume",
16
+ " --leading and trailing-- ": "leading-and-trailing",
17
+ };
18
+ for (const [name, slug] of Object.entries(cases)) {
19
+ assert.equal(createNameUrlSlug(name), slug, name);
20
+ }
21
+ });
22
+
23
+ test("createNameUrlSlug keeps decimals readable", () => {
24
+ assert.equal(
25
+ createNameUrlSlug("PbTe (Fm-3m): thermoelectric ZT estimate (ZT_max 1.21 at 700 K)"),
26
+ "pbte-fm-3m-thermoelectric-zt-estimate-zt-max-1-21-at-700-k"
27
+ );
28
+ assert.equal(createNameUrlSlug("Stable Diffusion 3.5"), "stable-diffusion-3-5");
29
+ // Sentence-ending periods and file extensions are still dropped/joined
30
+ assert.equal(createNameUrlSlug("results.zip"), "resultszip");
31
+ assert.equal(createNameUrlSlug("Done."), "done");
32
+ });
33
+
34
+ test("createNameUrlSlug spells out Greek letters", () => {
35
+ assert.equal(
36
+ createNameUrlSlug("PbTe (Fm-3m): simulated XRD pattern (Cu Kα)"),
37
+ "pbte-fm-3m-simulated-xrd-pattern-cu-k-alpha"
38
+ );
39
+ assert.equal(createNameUrlSlug("κ_lat vs T"), "kappa-lat-vs-t");
40
+ assert.equal(createNameUrlSlug("α-Fe"), "alpha-fe");
41
+ assert.equal(createNameUrlSlug("ΔG of formation"), "delta-g-of-formation");
42
+ assert.equal(createNameUrlSlug("10 µm film"), "10-mu-m-film");
43
+ });
44
+
45
+ test("createNameUrlSlug folds superscripts and unicode dashes", () => {
46
+ assert.equal(
47
+ createNameUrlSlug("Magnetic density 0.1 Å⁻³"),
48
+ "magnetic-density-0-1-a-3"
49
+ );
50
+ assert.equal(createNameUrlSlug("n = 1e20 cm⁻³"), "n-1e20-cm-3");
51
+ assert.equal(createNameUrlSlug("Area m²"), "area-m2");
52
+ assert.equal(createNameUrlSlug("Before—after"), "before-after");
53
+ });
@@ -0,0 +1,111 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import {
5
+ AssetRenditionSchema,
6
+ LanguageToolsPreferencesSchema,
7
+ RouteCapabilitiesSchema,
8
+ RouteInputAssetDeclarationSchema,
9
+ } from "../dist/index.js";
10
+
11
+ const id = "019b7d6d-2cc5-7df8-a575-91ecbfc72fc0";
12
+ const otherId = "019b7d6d-2cc5-7df8-a575-91ecbfc72fc1";
13
+
14
+ test("route inputs accept a post and comment union", () => {
15
+ const declaration = RouteInputAssetDeclarationSchema.parse({
16
+ asset_type: "post",
17
+ asset_types: ["post", "comment"],
18
+ primary: true,
19
+ });
20
+
21
+ assert.equal(declaration.asset_type, "post");
22
+ assert.deepEqual(declaration.asset_types, ["post", "comment"]);
23
+ });
24
+
25
+ test("legacy singular route input declarations remain valid", () => {
26
+ const declaration = RouteInputAssetDeclarationSchema.parse({
27
+ asset_type: "post",
28
+ });
29
+
30
+ assert.equal(declaration.asset_type, "post");
31
+ assert.equal(declaration.asset_types, undefined);
32
+ });
33
+
34
+ test("semantic text capabilities parse cache and voice metadata", () => {
35
+ const capabilities = RouteCapabilitiesSchema.parse({
36
+ "text.translate.v1": {
37
+ supported_languages: ["en", "es"],
38
+ cache_version: "2026-09-17",
39
+ structured_content: true,
40
+ },
41
+ "text.speech.v1": {
42
+ supported_languages: ["en-US"],
43
+ voices: [{ id: "alloy", language: "en-US" }],
44
+ cache_scope: "user",
45
+ cache_version: "voice-model-2",
46
+ trusted: true,
47
+ },
48
+ "speech.transcribe.v1": {
49
+ supported_languages: ["*"],
50
+ cache_version: "stt-1",
51
+ },
52
+ });
53
+
54
+ assert.equal(capabilities["text.translate.v1"].cache_scope, "none");
55
+ assert.equal(capabilities["text.translate.v1"].trusted, false);
56
+ assert.equal(capabilities["text.speech.v1"].voices[0].id, "alloy");
57
+ assert.equal(capabilities["speech.transcribe.v1"].cache_scope, "none");
58
+ });
59
+
60
+ test("translation and speech renditions share a status contract", () => {
61
+ const translation = AssetRenditionSchema.parse({
62
+ id,
63
+ asset_id: otherId,
64
+ route_id: id,
65
+ provider_id: otherId,
66
+ kind: "translation",
67
+ status: "success",
68
+ target_language: "es",
69
+ content: {
70
+ json: { type: "doc", content: [] },
71
+ text: "Hola",
72
+ },
73
+ created_at: "2026-09-17T00:00:00.000Z",
74
+ last_updated: "2026-09-17T00:00:00.000Z",
75
+ });
76
+ const speech = AssetRenditionSchema.parse({
77
+ id,
78
+ asset_id: otherId,
79
+ route_id: id,
80
+ provider_id: otherId,
81
+ kind: "speech",
82
+ status: "in-progress",
83
+ language: "en-US",
84
+ created_at: "2026-09-17T00:00:00.000Z",
85
+ last_updated: "2026-09-17T00:00:00.000Z",
86
+ });
87
+
88
+ assert.equal(translation.content.text, "Hola");
89
+ assert.equal(speech.status, "in-progress");
90
+ });
91
+
92
+ test("language tool preferences retain per-provider options", () => {
93
+ const preferences = LanguageToolsPreferencesSchema.parse({
94
+ language: "es-MX",
95
+ translation: {
96
+ route_id: id,
97
+ options: { formality: "informal" },
98
+ },
99
+ speech: {
100
+ route_id: otherId,
101
+ voice: "alloy",
102
+ options: {},
103
+ },
104
+ transcription: {
105
+ route_id: id,
106
+ options: {},
107
+ },
108
+ });
109
+
110
+ assert.equal(preferences.translation.options.formality, "informal");
111
+ });
@@ -1,2 +0,0 @@
1
- import {b,f,h as h$1,a}from'./chunk-PGCNGDPK.js';import {object,boolean,number,optional,string,enum as _enum,uuid,literal,discriminatedUnion}from'zod';var h=object({entry_count:number(),file_count:number(),directory_count:number(),total_uncompressed_size:number(),total_compressed_size:number(),preview_truncated:boolean()}),S=object({id:uuid(),path:string(),bucket:_enum(["public-files","files"]),name:string(),type:string(),extension:string(),size:number(),width:optional(number()),height:optional(number()),archive:optional(h)}),_=object({type:string()}),d=S.extend(b.partial().shape),y=_.extend(b.partial().shape),F=f.extend({asset_type:literal("file").default("file"),metadata:d}),g=discriminatedUnion("state",[h$1.extend({asset_type:literal("file").default("file"),state:literal("success").default("success"),metadata:d}),h$1.extend({asset_type:literal("file").default("file"),state:literal("in-progress"),metadata:y})]).transform(i=>a(i)),M=F.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({last_updated:string().default(()=>new Date().toISOString())}).transform(i=>a(i));export{h as a,F as b,g as c,M as d};//# sourceMappingURL=chunk-3DGJ27WL.js.map
2
- //# sourceMappingURL=chunk-3DGJ27WL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schema/files.ts"],"names":["ZipArchiveMetadataSchema","object","number","boolean","BaseFileMetadataSchema","uuid","string","zodEnum","optional","BaseStubFileMetadataSchema","FileMetadataSchema","AssetMetadataSchema","StubFileMetadataSchema","FileSchema","AssetSchema","literal","CreateFileSchema","discriminatedUnion","CreateAssetSchema","value","normalizeAssetConfigForParsing","updateFileSchema"],"mappings":"2JAqBMA,CAA2BC,CAAAA,MAAAA,CAAO,CACtC,WAAA,CAAaC,MAAO,EAAA,CACpB,WAAYA,MAAO,EAAA,CACnB,eAAiBA,CAAAA,MAAAA,EACjB,CAAA,uBAAA,CAAyBA,QACzB,CAAA,qBAAA,CAAuBA,MAAO,EAAA,CAC9B,iBAAmBC,CAAAA,OAAAA,EACrB,CAAC,CAAA,CAEKC,CAAyBH,CAAAA,MAAAA,CAAO,CACpC,EAAA,CAAII,MACJ,CAAA,IAAA,CAAMC,MAAO,EAAA,CACb,MAAQC,CAAAA,KAAAA,CAAQ,CAAC,cAAgB,CAAA,OAAO,CAAC,CAAA,CACzC,IAAMD,CAAAA,MAAAA,GACN,IAAMA,CAAAA,MAAAA,EACN,CAAA,SAAA,CAAWA,MAAO,EAAA,CAClB,KAAMJ,MAAO,EAAA,CAEb,KAAOM,CAAAA,QAAAA,CAASN,MAAO,EAAC,EACxB,MAAQM,CAAAA,QAAAA,CAASN,MAAO,EAAC,CACzB,CAAA,OAAA,CAASM,SAASR,CAAwB,CAC5C,CAAC,CAAA,CAEKS,CAA6BR,CAAAA,MAAAA,CAAO,CACxC,IAAMK,CAAAA,MAAAA,EACR,CAAC,CAEKI,CAAAA,CAAAA,CAAqBN,EAAuB,MAChDO,CAAAA,CAAAA,CAAoB,OAAQ,EAAA,CAAE,KAChC,CAAA,CAEMC,CAAyBH,CAAAA,CAAAA,CAA2B,MACxDE,CAAAA,CAAAA,CAAoB,OAAQ,EAAA,CAAE,KAChC,CAAA,CAEME,EAAaC,CAAY,CAAA,MAAA,CAAO,CACpC,UAAA,CAAYC,OAAQ,CAAA,MAAM,EAAE,OAAQ,CAAA,MAAM,CAC1C,CAAA,QAAA,CAAUL,CACZ,CAAC,EAEKM,CAAmBC,CAAAA,kBAAAA,CAAmB,OAAS,CAAA,CAKnDC,GAAkB,CAAA,MAAA,CAAO,CACvB,UAAYH,CAAAA,OAAAA,CAAQ,MAAM,CAAA,CAAE,OAAQ,CAAA,MAAM,EAC1C,KAAOA,CAAAA,OAAAA,CAAQ,SAAS,CAAA,CAAE,OAAQ,CAAA,SAAS,EAC3C,QAAUL,CAAAA,CACZ,CAAC,CAAA,CAEDQ,GAAkB,CAAA,MAAA,CAAO,CACvB,UAAYH,CAAAA,OAAAA,CAAQ,MAAM,CAAA,CAAE,OAAQ,CAAA,MAAM,EAC1C,KAAOA,CAAAA,OAAAA,CAAQ,aAAa,CAAA,CAC5B,QAAUH,CAAAA,CACZ,CAAC,CACH,CAAC,CAAE,CAAA,SAAA,CAAWO,CAAUC,EAAAA,CAAAA,CAA+BD,CAAK,CAAC,CAAA,CAEvDE,CAAmBR,CAAAA,CAAAA,CAAW,OAAQ,EAAA,CACzC,KAAK,CACJ,OAAA,CAAS,IACT,CAAA,EAAA,CAAI,IACJ,CAAA,UAAA,CAAY,KACZ,YAAc,CAAA,IAAA,CACd,YAAc,CAAA,IAAA,CACd,IAAM,CAAA,IAAA,CACN,KAAM,IACN,CAAA,IAAA,CAAM,IACN,CAAA,iBAAA,CAAmB,IACrB,CAAC,EACA,MAAO,CAAA,CACN,YAAcP,CAAAA,MAAAA,EAAS,CAAA,OAAA,CAAQ,IAAM,IAAI,IAAA,EAAO,CAAA,WAAA,EAAa,CAC/D,CAAC,CAAA,CACA,SAAWa,CAAAA,CAAAA,EAAUC,CAA+BD,CAAAA,CAAK,CAAC","file":"chunk-3DGJ27WL.js","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 boolean\n} from \"zod\";\n\nimport {\n AssetSchema,\n CreateAssetSchema,\n AssetMetadataSchema,\n normalizeAssetConfigForParsing,\n} from \"./assets\";\n\nconst ZipArchiveMetadataSchema = object({\n entry_count: number(),\n file_count: number(),\n directory_count: number(),\n total_uncompressed_size: number(),\n total_compressed_size: number(),\n preview_truncated: boolean(),\n});\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 archive: optional(ZipArchiveMetadataSchema),\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. Keep `.default()` on this branch only so\n // omitted `state` still creates a ready file. Zod 4.5 treats a defaulted\n // discriminator as claiming `undefined`; two such branches throw\n // `Duplicate discriminator value \"undefined\"` on first parse.\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\"),\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 is_pinned_in_team: true,\n })\n .extend({\n last_updated: string().default(() => new Date().toISOString()),\n })\n .transform((value) => normalizeAssetConfigForParsing(value));\n\nexport {\n FileSchema,\n CreateFileSchema,\n updateFileSchema,\n ZipArchiveMetadataSchema,\n};\nexport type File = z.infer<typeof FileSchema>;\nexport type CreateFile = z.infer<typeof CreateFileSchema>;\nexport type UpdateFile = z.infer<typeof updateFileSchema>;\nexport type ZipArchiveMetadata = z.infer<typeof ZipArchiveMetadataSchema>;\n"]}
@@ -1,2 +0,0 @@
1
- 'use strict';var chunkKU5AWMS5_cjs=require('./chunk-KU5AWMS5.cjs'),chunkYTCAK2AH_cjs=require('./chunk-YTCAK2AH.cjs'),chunkYFEGRZXL_cjs=require('./chunk-YFEGRZXL.cjs'),chunkJRBBNFFI_cjs=require('./chunk-JRBBNFFI.cjs'),uuidv7=require('uuidv7'),zod=require('zod');var s=zod.object({id:zod.uuid(),org_id:zod.uuid(),organization:chunkKU5AWMS5_cjs.c,name:zod.string(),description:zod.optional(zod.nullable(zod.object({text:zod.string(),json:zod.record(zod.string(),zod.any())}))),default_role:chunkYFEGRZXL_cjs.c,visibility:chunkYFEGRZXL_cjs.b,actor_type_policy:zod.optional(zod.nullable(chunkKU5AWMS5_cjs.a)),source_policy:zod.optional(zod.nullable(chunkKU5AWMS5_cjs.b)),userMembership:zod.optional(zod.nullable(zod.object({user_id:zod.uuid(),role:chunkYFEGRZXL_cjs.c}))),memberCount:zod.optional(zod.nullable(zod.number())),members:zod.array(zod.object({user_id:zod.uuid(),role:chunkYFEGRZXL_cjs.c,added_at:zod.string(),user:zod.optional(zod.nullable(chunkYTCAK2AH_cjs.b.partial()))})),created_at:zod.string()}),P=s.extend({id:zod.string().default(()=>uuidv7.uuidv7()),default_role:chunkYFEGRZXL_cjs.c.default("write").refine(d=>d==="read"||d==="write"),visibility:chunkYFEGRZXL_cjs.b.default("public").refine(d=>d==="public"||d==="organization"),created_at:zod.string().default(()=>new Date().toISOString())}).omit({organization:true,userMembership:true,memberCount:true,members:true,created_at:true}),T=s.extend({userMembership:zod.optional(zod.nullable(zod.object({user_id:zod.uuid(),role:chunkYFEGRZXL_cjs.c}))),memberCount:zod.number(),members:zod.array(zod.object({user_id:zod.uuid(),role:chunkYFEGRZXL_cjs.c,added_at:zod.string(),user:zod.optional(zod.nullable(chunkYTCAK2AH_cjs.b.partial()))})),organization:zod.optional(zod.nullable(chunkKU5AWMS5_cjs.c.partial())),assets:zod.optional(zod.nullable(zod.array(zod.record(zod.string(),zod.any())))),users:zod.optional(zod.nullable(zod.array(chunkYTCAK2AH_cjs.b.partial()))),actions:zod.optional(zod.nullable(zod.array(chunkJRBBNFFI_cjs.a)))}),U=zod.array(T.extend({label:zod.string(),value:zod.string()})),j=s.partial().omit({org_id:true,organization:true,created_at:true}).extend({id:zod.uuid()});exports.a=s;exports.b=P;exports.c=T;exports.d=U;exports.e=j;//# sourceMappingURL=chunk-3JPOAQ2M.cjs.map
2
- //# sourceMappingURL=chunk-3JPOAQ2M.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schema/teams.ts"],"names":["TeamSchema","object","uuid","OrganizationsSchema","string","optional","nullable","record","any","RoleSchema","VisibilitySchema","ActorTypePolicySchema","SourcePolicySchema","number","array","ProfileSchema","CreateTeamSchema","uuidv7","v","ReadTeamSchema","zodRecord","ContentActionRefSchema","ReadTeamsSchema","UpdateTeamSchema"],"mappings":"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","file":"chunk-3JPOAQ2M.cjs","sourcesContent":["import { uuidv7 } from \"uuidv7\";\nimport {\n object,\n string,\n uuid,\n number,\n array,\n type z,\n optional,\n nullable,\n any,\n record\n} from \"zod\";\n\nimport { RoleSchema, VisibilitySchema } from \"./common\";\nimport { ContentActionRefSchema } from \"./content-refs\";\nimport { OrganizationsSchema, ActorTypePolicySchema, SourcePolicySchema } from \"./organizations\";\nimport { ProfileSchema } from \"./users\";\nimport { record as zodRecord } from \"zod\";\n\nconst TeamSchema = object({\n id: uuid(),\n org_id: uuid(),\n organization: OrganizationsSchema,\n name: string(),\n description: optional(\n nullable(\n object({\n text: string(),\n json: record(string(), any()),\n })\n )\n ),\n default_role: RoleSchema,\n visibility: VisibilitySchema,\n actor_type_policy: optional(nullable(ActorTypePolicySchema)),\n source_policy: optional(nullable(SourcePolicySchema)),\n userMembership: optional(\n nullable(\n object({\n user_id: uuid(),\n role: RoleSchema,\n })\n )\n ),\n memberCount: optional(nullable(number())),\n members: array(\n object({\n user_id: uuid(),\n role: RoleSchema,\n added_at: string(),\n user: optional(nullable(ProfileSchema.partial())),\n })\n ),\n created_at: string(),\n});\n\nconst CreateTeamSchema = TeamSchema.extend({\n id: string().default(() => uuidv7()),\n default_role: RoleSchema.default(\"write\").refine(\n (v) => v === \"read\" || v === \"write\"\n ),\n visibility: VisibilitySchema.default(\"public\").refine(\n (v) => v === \"public\" || v === \"organization\"\n ),\n created_at: string().default(() => new Date().toISOString()),\n}).omit({\n organization: true,\n userMembership: true,\n memberCount: true,\n members: true,\n created_at: true,\n});\n\nconst ReadTeamSchema = TeamSchema.extend({\n userMembership: optional(\n nullable(\n object({\n user_id: uuid(),\n role: RoleSchema,\n })\n )\n ),\n memberCount: number(),\n members: array(\n object({\n user_id: uuid(),\n role: RoleSchema,\n added_at: string(),\n user: optional(nullable(ProfileSchema.partial())),\n })\n ),\n organization: optional(nullable(OrganizationsSchema.partial())),\n // Enriched fields used for rendering embedded references in description.\n // assets stay loose here — AssetSchema imports TeamSchema (cycle).\n assets: optional(\n nullable(array(zodRecord(string(), any())))\n ),\n users: optional(\n nullable(array(ProfileSchema.partial()))\n ),\n actions: optional(nullable(array(ContentActionRefSchema))),\n});\n\nconst ReadTeamsSchema = array(\n ReadTeamSchema.extend({\n label: string(),\n value: string(),\n })\n);\n\nconst UpdateTeamSchema = TeamSchema.partial()\n .omit({\n org_id: true,\n organization: true,\n created_at: true,\n })\n .extend({\n id: uuid(),\n });\n\nexport {\n TeamSchema,\n CreateTeamSchema,\n ReadTeamSchema,\n ReadTeamsSchema,\n UpdateTeamSchema,\n};\nexport type Team = z.infer<typeof TeamSchema>;\nexport type CreateTeam = z.infer<typeof CreateTeamSchema>;\nexport type ReadTeam = z.infer<typeof ReadTeamSchema>;\nexport type ReadTeams = z.infer<typeof ReadTeamsSchema>;\nexport type UpdateTeam = z.infer<typeof UpdateTeamSchema>;\n"]}
@@ -1,2 +0,0 @@
1
- import {e}from'./chunk-RS5H4XDK.js';import {a}from'./chunk-33C7IDRP.js';import {record,string,object,uuid,union,optional,boolean}from'zod';function _(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})),T=union([uuid(),object({asset_id:uuid(),asset_type:optional(a)})]),E=record(string(),T),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 K(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(_(t)){let i=Object.entries(t).filter(([,r])=>_(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 Q(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 j(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=Q(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=K(s),l=Object.keys(t),u=j(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,d;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 p=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=p.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((d=(u=p.file_type)!=null?u:p.type)!=null?d:"").toLowerCase().split("/")[0],c=t.fileType.toLowerCase();if(o&&c&&!o.includes(c)&&o!==c)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,T as b,E as c,q as d,K as e,Q as f,j as g,L as h,B as i,F as j,V as k,M as l,$ as m};//# sourceMappingURL=chunk-64ZUBBP7.js.map
2
- //# sourceMappingURL=chunk-64ZUBBP7.js.map
@@ -1 +0,0 @@
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":"2IAeA,SAASA,CAAcC,CAAAA,CAAAA,CAAkD,CACvE,OAAO,CAAA,CAAQA,GAAU,OAAOA,CAAAA,EAAU,UAAY,CAAC,KAAA,CAAM,QAAQA,CAAK,CAC5E,CAEA,SAASC,CAAAA,CAAuBD,EAAiD,CAC/E,GAAI,CAACA,CAAO,CAAA,OAAO,KAEnB,IAAME,CAAAA,CADaF,EAAM,OAAQ,CAAA,MAAA,CAAQ,EAAE,CAAE,CAAA,IAAA,GAAO,WAAY,EAAA,CACxC,QAAQ,YAAc,CAAA,EAAE,EAChD,OAAI,CAACE,GAAQ,OAAQ,CAAA,IAAA,CAAKA,CAAI,CAAKA,EAAAA,CAAAA,CAAK,OAAS,EAAW,CAAA,IAAA,CACrDA,CACT,CAEA,SAASC,EACPH,CACU,CAAA,CACV,IAAMI,CAAY,CAAA,KAAA,CAAM,QAAQJ,CAAK,CAAA,CACjCA,EACA,OAAOA,CAAAA,EAAU,SACfA,CAAM,CAAA,KAAA,CAAM,QAAQ,CACpB,CAAA,GACN,OAAO,KAAA,CAAM,KACX,IAAI,GAAA,CACFI,CACG,CAAA,GAAA,CAAKC,GAAUJ,CAAuBI,CAAAA,CAAK,CAAC,CAC5C,CAAA,MAAA,CAAQA,GAA2B,CAAQA,CAAAA,CAAM,CACtD,CACF,CACF,CAGaC,IAAAA,CAAAA,CAAuBC,OAClCC,MAAO,EAAA,CACPC,OAAO,CACL,QAAA,CAAUC,MACV,CAAA,UAAA,CAAYC,CACd,CAAC,CACH,EAGaC,CAA6BC,CAAAA,KAAAA,CAAM,CAC9CH,IAAK,EAAA,CACLD,OAAO,CACL,QAAA,CAAUC,MACV,CAAA,UAAA,CAAYI,SAASH,CAAe,CACtC,CAAC,CACH,CAAC,EAEYI,CAAwBR,CAAAA,MAAAA,CACnCC,QACAI,CAAAA,CACF,EAEaI,CACXC,CAAAA,CAAAA,CAAiC,OAAO,CACtC,QAAA,CAAUH,SAASI,OAAQ,EAAC,EAAE,OAAQ,CAAA,IAAI,CAC5C,CAAC,EAwCH,SAASC,CACPC,CAAAA,CAAAA,CACU,CACV,OAAOjB,CAAAA,CAAwB,CAC7B,GAAI,KAAA,CAAM,QAAQiB,CAAY,CAAA,eAAe,EACzCA,CAAY,CAAA,eAAA,CACZ,EACJ,CAAA,GAAI,MAAM,OAAQA,CAAAA,CAAAA,CAAY,qBAAqB,CAC/CA,CAAAA,CAAAA,CAAY,sBACZ,EACN,CAAE,CAAA,IAAA,CAAK,GAAG,CAAC,CACb,CAEA,SAASC,CAAAA,CACPD,EACoB,CACpB,OAAOA,EAAY,YAAgBA,EAAAA,CAAAA,CAAY,QAAU,MAC3D,CAGO,SAASE,CACdC,CAAAA,CAAAA,CAC2C,CApI7C,IAAAC,CAAAA,CAqIE,IAAMC,CAASF,CAAAA,CAAAA,EAAA,YAAAA,CAAO,CAAA,KAAA,CACtB,GAAI,CAACE,CAAAA,CAAQ,OAAO,EAAC,CAErB,IAAMC,CAASD,CAAAA,CAAAA,CAAO,aACtB,GAAI1B,CAAAA,CAAc2B,CAAM,CAAG,CAAA,CACzB,IAAMC,CAAU,CAAA,MAAA,CAAO,QAAQD,CAAM,CAAA,CAAE,OAAO,CAAC,EAAG1B,CAAK,CAAA,GACrDD,EAAcC,CAAK,CACrB,EACA,GAAI2B,CAAAA,CAAQ,OAAS,CACnB,CAAA,OAAO,OAAO,WAAYA,CAAAA,CAAO,CAErC,CAEA,OAAIF,EAAO,UACF,CAAA,CACL,CAACA,CAAO,CAAA,UAAU,EAAG,CACnB,UAAA,CAAYA,EAAO,UACnB,CAAA,OAAA,CAAS,KACT,YAAcA,CAAAA,CAAAA,CAAO,aACrB,qBAAuBD,CAAAA,CAAAA,CAAAA,CAAAC,EAAO,qBAAP,GAAA,IAAA,CAAAD,EAAgC,IACzD,CACF,CAGK,CAAA,EACT,CAEO,SAASI,EACdR,CACiC,CAAA,CACjC,IAAMS,CAAaV,CAAAA,CAAAA,CAA0BC,CAAW,CAClDU,CAAAA,CAAAA,CAAST,EAAsBD,CAAW,CAAA,CAChD,OAAO,CACL,UAAA,CAAYA,EAAY,UACxB,CAAA,OAAA,CAASA,EAAY,OACrB,CAAA,YAAA,CAAeU,GAAA,IAAAA,CAAAA,CAAAA,CAAU,KACzB,eAAiBD,CAAAA,CAAAA,CAAW,OAAS,CAAIA,CAAAA,CAAAA,CAAa,KACtD,QAAU,CAAA,IACZ,CACF,CAGO,SAASE,EACdC,CACAC,CAAAA,CAAAA,CACiD,CACjD,IAAMC,CAAAA,CAAS,IAAI,GAAID,CAAAA,CAAU,EAC3BE,CAAuD,CAAA,GAC7D,IAAW,GAAA,CAACC,EAAKhB,CAAW,CAAA,GAAK,OAAO,OAAQY,CAAAA,CAAW,EACrDE,CAAO,CAAA,GAAA,CAAIE,CAAG,CAClBD,GAAAA,CAAAA,CAAIC,CAAG,CAAIR,CAAAA,CAAAA,CAAmCR,CAAW,CAE3D,CAAA,CAAA,OAAOe,CACT,CAEO,SAASE,EACdC,CACe,CAAA,CACf,IAAMX,CAAU,CAAA,MAAA,CAAO,QAAQW,CAAY,CAAA,CAC3C,GAAI,CAACX,CAAAA,CAAQ,OAAQ,OAAO,IAAA,CAC5B,IAAMY,CAAUZ,CAAAA,CAAAA,CAAQ,IAAK,CAAA,CAAC,EAAGa,CAAC,IAAMA,CAAE,CAAA,OAAA,GAAY,IAAI,CAC1D,CAAA,OAAID,EAAgBA,CAAQ,CAAA,CAAC,GACzBZ,CAAQ,CAAA,MAAA,GAAW,EAAUA,CAAQ,CAAA,CAAC,EAAE,CAAC,CAAA,CAE/C,CAEO,SAASc,CAAAA,CACdC,EACAnB,CAKA,CAAA,CA9MF,IAAAC,CAAAmB,CAAAA,CAAAA,CA+ME,IAAMT,CAAyBV,CAAAA,CAAAA,CAAAA,CAAAkB,EAAK,kBAAL,GAAA,IAAA,CAAAlB,EAA2B,EAAC,CAE3D,GAAIkB,CAAK,CAAA,aAAA,EAAiBnB,EAAO,CAC/B,IAAMS,EAAcV,CAAmCC,CAAAA,CAAK,EACtDU,CAAa,CAAA,MAAA,CAAO,KAAKC,CAAM,CAAA,CAC/BU,EAAeb,CACnBC,CAAAA,CAAAA,CACAC,CACF,CACA,CAAA,OAAO,CACL,eAAiB,CAAA,MAAA,CAAO,KAAKW,CAAY,CAAA,CACzC,aAAcA,CACd,CAAA,MAAA,CAAAV,CACF,CACF,CAEA,IAAMI,CAAeK,CAAAA,CAAAA,CAAAA,CAAAD,EAAK,iBAAL,GAAA,IAAA,CAAAC,EAA0B,EAAC,CAChD,OAAO,CACL,eAAA,CAAiB,OAAO,IAAKL,CAAAA,CAAY,EACzC,YAAAA,CAAAA,CAAAA,CACA,OAAAJ,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,CA7QX,IAAAI,EAAAmB,CAAAQ,CAAAA,CAAAA,CAAAC,EAAAC,CAAAC,CAAAA,CAAAA,CA8QE,GAAI,CAAClC,CAAAA,EAAe,CAAC8B,CAAO,CAAA,OAAO,MACnC,IAAMH,CAAAA,CAAUF,EAA2BzB,CAAW,CAAA,CACtD,GAAI,CAAC2B,CAAAA,CAAS,OAAO,KAErB,CAAA,IAAMD,GAAYtB,CAAA0B,CAAAA,CAAAA,CAAM,SAAN,GAAA,IAAA,CAAA1B,EAAmB0B,CAAM,CAAA,UAAA,CAC3C,GAAIH,CAAQ,CAAA,SAAA,EAAaD,IAAcC,CAAQ,CAAA,SAAA,CAAW,OAAO,MAEjE,CAAA,GAAIA,EAAQ,SAAc,GAAA,MAAA,CAAQ,CAChC,IAAMQ,CAAAA,CAAAA,CAAWJ,GAAAR,CAAAO,CAAAA,CAAAA,CAAM,QAAN,IAAAP,CAAAA,MAAAA,CAAAA,CAAAA,CAAa,WAAb,IAAAQ,CAAAA,CAAAA,CAAyB,EAC1C,CAAA,GAAIJ,EAAQ,UAAcA,EAAAA,CAAAA,CAAQ,WAAW,MAAS,CAAA,CAAA,CAAG,CACvD,IAAMS,CAAAA,CAAM,QAAOJ,CAAAG,CAAAA,CAAAA,CAAS,YAAT,IAAAH,CAAAA,CAAAA,CAAsB,EAAE,CAAE,CAAA,WAAA,GAC7C,GAAI,CAACI,GAAO,CAACT,CAAAA,CAAQ,WAAW,QAASS,CAAAA,CAAG,EAAG,OAAO,MACxD,CACA,GAAIT,CAAAA,CAAQ,SAAU,CACpB,IAAMU,EAAO,MAAOH,CAAAA,CAAAA,CAAAA,CAAAA,CAAAD,EAAAE,CAAS,CAAA,SAAA,GAAT,KAAAF,CAAsBE,CAAAA,CAAAA,CAAS,OAA/B,IAAAD,CAAAA,CAAAA,CAAuC,EAAE,CAC1D,CAAA,WAAA,GACA,KAAM,CAAA,GAAG,EAAE,CAAC,CAAA,CACTI,EAAWX,CAAQ,CAAA,QAAA,CAAS,aAClC,CAAA,GAAIU,GAAQC,CAAY,EAAA,CAACD,EAAK,QAASC,CAAAA,CAAQ,GAAKD,CAASC,GAAAA,CAAAA,CAC3D,OAAO,MAEX,CACF,CAEA,OAAO,KACT,CAEO,SAASC,CAAAA,CACdC,EACAtB,CAC8D,CAAA,CAC9D,GAAI,CAACsB,CAAAA,EAAQ,CAAC,MAAO,CAAA,IAAA,CAAKA,CAAI,CAAE,CAAA,MAAA,CAAQ,OAAO,IAC/C,CAAA,IAAMxB,EACHE,CAAgBD,EAAAA,CAAAA,CAAyBC,CAAY,CACtD,EAAA,MAAA,CAAO,KAAKsB,CAAI,CAAA,CAAE,CAAC,CACfC,CAAAA,CAAAA,CAAMD,EAAKxB,CAAG,CAAA,CACpB,OAAKyB,CACE,CAAA,CAAE,IAAAzB,CAAK,CAAA,QAAA,CAAUyB,EAAI,QAAU,CAAA,UAAA,CAAYA,EAAI,UAAW,CAAA,CADhD,IAEnB,CAEO,SAASC,EACdF,CACwD,CAAA,CACxD,OAAKA,CACE,CAAA,MAAA,CAAO,YACZ,MAAO,CAAA,OAAA,CAAQA,CAAI,CAAE,CAAA,GAAA,CAAI,CAAC,CAACxB,CAAAA,CAAKyB,CAAG,CAAM,GAAA,CACvCzB,EACA,CAAE,OAAA,CAASyB,EAAI,QAAU,CAAA,SAAA,CAAWA,EAAI,UAAW,CACrD,CAAC,CACH,CAAA,CANkB,EAOpB","file":"chunk-64ZUBBP7.js","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 = materializeContributorSubmissionAssets(\n routeInputs,\n pinnedKeys\n );\n return {\n contributorKeys: Object.keys(materialized),\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 +0,0 @@
1
- 'use strict';var chunkXEA4DDOE_cjs=require('./chunk-XEA4DDOE.cjs'),chunkYFEGRZXL_cjs=require('./chunk-YFEGRZXL.cjs'),zod=require('zod');function _(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:chunkYFEGRZXL_cjs.a})),T=zod.union([zod.uuid(),zod.object({asset_id:zod.uuid(),asset_type:zod.optional(chunkYFEGRZXL_cjs.a)})]),E=zod.record(zod.string(),T),q=chunkXEA4DDOE_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 K(e){var n;let s=e==null?void 0:e.route;if(!s)return {};let t=s.input_assets;if(_(t)){let i=Object.entries(t).filter(([,r])=>_(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 Q(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 j(e,s){let t=new Set(s),n={};for(let[i,r]of Object.entries(e))t.has(i)||(n[i]=Q(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=K(s),l=Object.keys(t),u=j(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,d;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 p=(a=(r=e.asset)==null?void 0:r.metadata)!=null?a:{};if(t.extensions&&t.extensions.length>0){let o=String((l=p.extension)!=null?l:"").toLowerCase();if(!o||!t.extensions.includes(o))return false}if(t.fileType){let o=String((d=(u=p.file_type)!=null?u:p.type)!=null?d:"").toLowerCase().split("/")[0],c=t.fileType.toLowerCase();if(o&&c&&!o.includes(c)&&o!==c)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=T;exports.c=E;exports.d=q;exports.e=K;exports.f=Q;exports.g=j;exports.h=L;exports.i=B;exports.j=F;exports.k=V;exports.l=M;exports.m=$;//# sourceMappingURL=chunk-ADLJ3UUW.cjs.map
2
- //# sourceMappingURL=chunk-ADLJ3UUW.cjs.map
@@ -1 +0,0 @@
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-ADLJ3UUW.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 = materializeContributorSubmissionAssets(\n routeInputs,\n pinnedKeys\n );\n return {\n contributorKeys: Object.keys(materialized),\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 +0,0 @@
1
- import {enum as _enum,object,string,optional,uuid,nullable,array,boolean,number}from'zod';var d=_enum(["base","agent","verified"]),f=object({id:uuid(),user_id:uuid(),username:optional(nullable(string())),name:optional(nullable(string())),first_name:optional(nullable(string())),last_name:optional(nullable(string())),avatar_path:optional(nullable(string())),bio:optional(nullable(string())),is_provisioned:optional(boolean()),claimed_at:optional(nullable(string())),urls:optional(array(object({value:string().url()}))),post_id:optional(nullable(uuid())),actor_type:d,plan_type:_enum(["free","gold"]),last_active:string()}),c=f.extend({isFollowing:boolean(),isFollowed:boolean(),isSelf:boolean(),followers:number().default(0),following:number().default(0),totalXp:number().default(0),level:number().default(1)}),u=f.partial().omit({id:true,user_id:true,last_active:true,is_provisioned:true,claimed_at:true,actor_type:true});export{d as a,f as b,c,u as d};//# sourceMappingURL=chunk-CDJH4OT5.js.map
2
- //# sourceMappingURL=chunk-CDJH4OT5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/schema/users.ts"],"names":["ActorTypeSchema","zodEnum","ProfileSchema","object","uuid","optional","nullable","string","boolean","array","ReadProfileSchema","number","UpdateProfileSchema"],"mappings":"0FAaMA,IAAAA,CAAAA,CAAkBC,KAAQ,CAAA,CAAC,OAAQ,OAAS,CAAA,UAAU,CAAC,CAEvDC,CAAAA,CAAAA,CAAgBC,OAAO,CAC3B,EAAA,CAAIC,MACJ,CAAA,OAAA,CAASA,MACT,CAAA,QAAA,CAAUC,SAASC,QAASC,CAAAA,MAAAA,EAAQ,CAAC,CAAA,CACrC,IAAMF,CAAAA,QAAAA,CAASC,SAASC,MAAO,EAAC,CAAC,CACjC,CAAA,UAAA,CAAYF,SAASC,QAASC,CAAAA,MAAAA,EAAQ,CAAC,CAAA,CACvC,UAAWF,QAASC,CAAAA,QAAAA,CAASC,QAAQ,CAAC,EACtC,WAAaF,CAAAA,QAAAA,CAASC,SAASC,MAAO,EAAC,CAAC,CACxC,CAAA,GAAA,CAAKF,SAASC,QAASC,CAAAA,MAAAA,EAAQ,CAAC,CAAA,CAChC,eAAgBF,QAASG,CAAAA,OAAAA,EAAS,CAClC,CAAA,UAAA,CAAYH,SAASC,QAASC,CAAAA,MAAAA,EAAQ,CAAC,CAAA,CACvC,IAAMF,CAAAA,QAAAA,CACJI,MACEN,MAAO,CAAA,CACL,MAAOI,MAAO,EAAA,CAAE,KAClB,CAAC,CACH,CACF,CAAA,CACA,QAASF,QAASC,CAAAA,QAAAA,CAASF,MAAM,CAAC,EAClC,UAAYJ,CAAAA,CAAAA,CACZ,UAAWC,KAAQ,CAAA,CAAC,OAAQ,MAAM,CAAC,EACnC,WAAaM,CAAAA,MAAAA,EACf,CAAC,CAAA,CAEKG,EAAoBR,CAAc,CAAA,MAAA,CAAO,CAC7C,WAAaM,CAAAA,OAAAA,GACb,UAAYA,CAAAA,OAAAA,GACZ,MAAQA,CAAAA,OAAAA,EACR,CAAA,SAAA,CAAWG,QAAS,CAAA,OAAA,CAAQ,CAAC,CAC7B,CAAA,SAAA,CAAWA,QAAS,CAAA,OAAA,CAAQ,CAAC,CAC7B,CAAA,OAAA,CAASA,QAAS,CAAA,OAAA,CAAQ,CAAC,CAC3B,CAAA,KAAA,CAAOA,QAAS,CAAA,OAAA,CAAQ,CAAC,CAC3B,CAAC,EAEKC,CAAsBV,CAAAA,CAAAA,CAAc,SAAU,CAAA,IAAA,CAAK,CACvD,EAAI,CAAA,IAAA,CACJ,QAAS,IACT,CAAA,WAAA,CAAa,KACb,cAAgB,CAAA,IAAA,CAChB,WAAY,IACZ,CAAA,UAAA,CAAY,IAEd,CAAC","file":"chunk-CDJH4OT5.js","sourcesContent":["import {\n object,\n string,\n number,\n array,\n boolean,\n enum as zodEnum,\n type z,\n optional,\n nullable,\n uuid\n} from \"zod\";\n\nconst ActorTypeSchema = zodEnum([\"base\", \"agent\", \"verified\"]);\n\nconst ProfileSchema = object({\n id: uuid(),\n user_id: uuid(),\n username: optional(nullable(string())),\n name: optional(nullable(string())),\n first_name: optional(nullable(string())),\n last_name: optional(nullable(string())),\n avatar_path: optional(nullable(string())),\n bio: optional(nullable(string())),\n is_provisioned: optional(boolean()),\n claimed_at: optional(nullable(string())),\n urls: optional(\n array(\n object({\n value: string().url(),\n })\n )\n ),\n post_id: optional(nullable(uuid())),\n actor_type: ActorTypeSchema,\n plan_type: zodEnum([\"free\", \"gold\"]),\n last_active: string(),\n});\n\nconst ReadProfileSchema = ProfileSchema.extend({\n isFollowing: boolean(),\n isFollowed: boolean(),\n isSelf: boolean(),\n followers: number().default(0),\n following: number().default(0),\n totalXp: number().default(0),\n level: number().default(1),\n});\n\nconst UpdateProfileSchema = ProfileSchema.partial().omit({\n id: true,\n user_id: true,\n last_active: true,\n is_provisioned: true,\n claimed_at: true,\n actor_type: true,\n // username: true, // once set, users cannot update their username\n});\n\nexport { ActorTypeSchema, ProfileSchema, ReadProfileSchema, UpdateProfileSchema };\nexport type ActorType = z.infer<typeof ActorTypeSchema>;\nexport type Profile = z.infer<typeof ProfileSchema>;\nexport type UpdateProfile = z.infer<typeof UpdateProfileSchema>;\nexport type ReadProfile = z.infer<typeof ReadProfileSchema>;\n"]}
@@ -1,2 +0,0 @@
1
- 'use strict';var chunkADLJ3UUW_cjs=require('./chunk-ADLJ3UUW.cjs'),chunkRMMMRN4X_cjs=require('./chunk-RMMMRN4X.cjs'),chunkYFEGRZXL_cjs=require('./chunk-YFEGRZXL.cjs'),zod=require('zod');var w=zod.enum(["closable","continuous"]),E=zod.enum(["draft","open","closed","cancelled"]),l=zod.enum(["pending","in_progress","done","skipped"]),I=zod.enum(["btc","usd"]),q=zod.enum(["skipped","running","passed","failed","errored"]),k=zod.enum(["submitted","accepted","rejected"]),C=zod.enum(["desc","asc"]),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())}),d=zod.object({json:zod.object({type:zod.literal("doc"),content:zod.array(T)}),text:zod.string()}),A=zod.object({id:zod.uuid(),quest_id:zod.uuid(),description:d,status:l.default("pending"),auto_skipped:zod.optional(zod.nullable(zod.string().or(zod.any()))),status_before_auto_skip:zod.optional(zod.nullable(l)),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(chunkYFEGRZXL_cjs.a)),reward_xp:zod.number().int().nonnegative().default(0),reward_currency:I.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_categories_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())),leaderboard_enabled:zod.optional(zod.boolean()).default(false),leaderboard_order:zod.optional(C).default("desc"),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkADLJ3UUW_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkADLJ3UUW_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()}),R=A,x=zod.object({description:zod.union([zod.string().min(1,{message:"Item description cannot be empty"}),d]),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(chunkYFEGRZXL_cjs.a)),reward_xp:zod.optional(zod.number().int().nonnegative()).default(0),reward_currency:zod.optional(I).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_categories_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())),leaderboard_enabled:zod.optional(zod.boolean()).default(false),leaderboard_order:zod.optional(C).default("desc"),submission_assets:zod.optional(zod.nullable(zod.record(zod.string(),chunkADLJ3UUW_cjs.d))),eval_static_inputs:zod.optional(zod.nullable(chunkADLJ3UUW_cjs.a)),notes:zod.optional(zod.nullable(zod.string()))}),U=zod.union([zod.string().min(1,{message:"Item description cannot be empty"}).transform(u=>x.parse({description:u})),x]),j=zod.object({type:w.default("closable"),status:E.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),closed_at:zod.optional(zod.nullable(zod.string()))}),O=chunkRMMMRN4X_cjs.f.extend({asset_type:zod.literal("quest").default("quest"),metadata:zod.optional(zod.nullable(chunkRMMMRN4X_cjs.b.partial())),quest:zod.optional(j.partial()),items:zod.optional(zod.array(R.partial())),progress:zod.optional(zod.object({total:zod.number(),resolved:zod.number(),remaining:zod.number(),items:zod.optional(zod.array(zod.object({id:zod.string(),status:l,waiting_on:zod.optional(zod.nullable(zod.string())),waiting_until:zod.optional(zod.nullable(zod.string())),waiting_check_every:zod.optional(zod.nullable(zod.string()))}).partial()))}))}),Z=chunkRMMMRN4X_cjs.h.extend({asset_type:zod.literal("quest").default("quest"),name:zod.optional(zod.nullable(zod.string())).default(null),description:zod.optional(zod.nullable(d)),type:w.default("closable"),status:E.default("open"),max_xp_per_contributor:zod.optional(zod.nullable(zod.number().int().nonnegative())),items:zod.optional(zod.array(U)).default([])}).transform(u=>chunkRMMMRN4X_cjs.a(u)),F=O.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,is_pinned_in_team:true}).extend({asset_type:zod.literal("quest").default("quest"),last_updated:zod.string().default(()=>new Date().toISOString())}).transform(u=>chunkRMMMRN4X_cjs.a(u)),M=x.partial().extend({status:zod.optional(l)}),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(chunkYFEGRZXL_cjs.a)),assets:zod.optional(zod.nullable(chunkADLJ3UUW_cjs.a)),description:zod.optional(zod.nullable(d)),review:zod.optional(zod.nullable(d)),status:k,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_category_scores:zod.optional(zod.nullable(zod.record(zod.string(),zod.number()))),eval_status:zod.optional(zod.nullable(q)),created_at:zod.string(),updated_at:zod.string()}),P=zod.object({item_id:zod.uuid(),assets:zod.optional(zod.nullable(chunkADLJ3UUW_cjs.c)),description:zod.optional(zod.nullable(zod.union([zod.string(),d])))}),G=zod.object({status:zod.enum(["accepted","rejected"]),review:zod.optional(zod.nullable(zod.union([zod.string(),d])))});exports.a=w;exports.b=E;exports.c=l;exports.d=I;exports.e=q;exports.f=k;exports.g=C;exports.h=A;exports.i=R;exports.j=x;exports.k=U;exports.l=O;exports.m=Z;exports.n=F;exports.o=M;exports.p=N;exports.q=P;exports.r=G;//# sourceMappingURL=chunk-CIEATF7M.cjs.map
2
- //# sourceMappingURL=chunk-CIEATF7M.cjs.map