jansathi-community-schema 0.24.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/crowdfunding.d.ts +158 -11
- package/dist/crowdfunding.d.ts.map +1 -1
- package/dist/crowdfunding.js +78 -2
- package/dist/crowdfunding.js.map +1 -1
- package/dist/feed.d.ts +58 -4
- package/dist/feed.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/crowdfunding.d.ts
CHANGED
|
@@ -34,16 +34,55 @@ import { z } from 'zod';
|
|
|
34
34
|
* verifier's per-category supporting-doc requirements (medical needs
|
|
35
35
|
* hospital invoice; education needs admission letter; etc.).
|
|
36
36
|
*/
|
|
37
|
-
export declare const CROWDFUNDING_CATEGORY_VALUES: readonly ["medical", "education", "disaster", "
|
|
37
|
+
export declare const CROWDFUNDING_CATEGORY_VALUES: readonly ["medical", "maternity", "senior_care", "special_needs", "education", "memorial", "disaster", "civic", "faith", "sports_talent", "animal_welfare", "environment", "legal_aid", "arts_culture", "self_improvement", "startup_prototype", "other"];
|
|
38
|
+
/**
|
|
39
|
+
* Who the campaign is for — drives the relation chip set and the
|
|
40
|
+
* organization-specific identity asks on the composer. Captured so the
|
|
41
|
+
* verifier can match the campaign narrative to the supporting docs
|
|
42
|
+
* (e.g. an `organization` audience should produce 12A / 80G papers,
|
|
43
|
+
* not a personal hospital bill).
|
|
44
|
+
*/
|
|
45
|
+
export declare const CROWDFUNDING_AUDIENCE_VALUES: readonly ["self", "family", "friend", "community", "organization"];
|
|
46
|
+
export declare const crowdfundingAudienceSchema: z.ZodEnum<{
|
|
47
|
+
self: "self";
|
|
48
|
+
family: "family";
|
|
49
|
+
friend: "friend";
|
|
50
|
+
community: "community";
|
|
51
|
+
organization: "organization";
|
|
52
|
+
}>;
|
|
53
|
+
export type CrowdfundingAudience = z.infer<typeof crowdfundingAudienceSchema>;
|
|
54
|
+
/**
|
|
55
|
+
* Org-registration class — only meaningful when `audience ===
|
|
56
|
+
* 'organization'`. Drives the verifier's expected document set
|
|
57
|
+
* (12A/80G for trust, FCRA-style papers for NGO, etc.).
|
|
58
|
+
*/
|
|
59
|
+
export declare const CROWDFUNDING_ORG_KIND_VALUES: readonly ["ngo", "trust", "society", "section_8", "other"];
|
|
60
|
+
export declare const crowdfundingOrgKindSchema: z.ZodEnum<{
|
|
61
|
+
other: "other";
|
|
62
|
+
ngo: "ngo";
|
|
63
|
+
trust: "trust";
|
|
64
|
+
society: "society";
|
|
65
|
+
section_8: "section_8";
|
|
66
|
+
}>;
|
|
67
|
+
export type CrowdfundingOrgKind = z.infer<typeof crowdfundingOrgKindSchema>;
|
|
38
68
|
export declare const crowdfundingCategorySchema: z.ZodEnum<{
|
|
39
69
|
other: "other";
|
|
70
|
+
environment: "environment";
|
|
40
71
|
education: "education";
|
|
72
|
+
senior_care: "senior_care";
|
|
73
|
+
legal_aid: "legal_aid";
|
|
41
74
|
medical: "medical";
|
|
42
|
-
|
|
75
|
+
maternity: "maternity";
|
|
76
|
+
special_needs: "special_needs";
|
|
43
77
|
memorial: "memorial";
|
|
44
|
-
|
|
78
|
+
disaster: "disaster";
|
|
45
79
|
civic: "civic";
|
|
80
|
+
faith: "faith";
|
|
81
|
+
sports_talent: "sports_talent";
|
|
82
|
+
animal_welfare: "animal_welfare";
|
|
83
|
+
arts_culture: "arts_culture";
|
|
46
84
|
self_improvement: "self_improvement";
|
|
85
|
+
startup_prototype: "startup_prototype";
|
|
47
86
|
}>;
|
|
48
87
|
export type CrowdfundingCategory = z.infer<typeof crowdfundingCategorySchema>;
|
|
49
88
|
/**
|
|
@@ -174,16 +213,43 @@ export declare const crowdfundingFeedItemSchema: z.ZodObject<{
|
|
|
174
213
|
description: z.ZodString;
|
|
175
214
|
category: z.ZodEnum<{
|
|
176
215
|
other: "other";
|
|
216
|
+
environment: "environment";
|
|
177
217
|
education: "education";
|
|
218
|
+
senior_care: "senior_care";
|
|
219
|
+
legal_aid: "legal_aid";
|
|
178
220
|
medical: "medical";
|
|
179
|
-
|
|
221
|
+
maternity: "maternity";
|
|
222
|
+
special_needs: "special_needs";
|
|
180
223
|
memorial: "memorial";
|
|
181
|
-
|
|
224
|
+
disaster: "disaster";
|
|
182
225
|
civic: "civic";
|
|
226
|
+
faith: "faith";
|
|
227
|
+
sports_talent: "sports_talent";
|
|
228
|
+
animal_welfare: "animal_welfare";
|
|
229
|
+
arts_culture: "arts_culture";
|
|
183
230
|
self_improvement: "self_improvement";
|
|
231
|
+
startup_prototype: "startup_prototype";
|
|
184
232
|
}>;
|
|
185
233
|
beneficiaryName: z.ZodString;
|
|
186
234
|
beneficiaryRelation: z.ZodOptional<z.ZodString>;
|
|
235
|
+
audience: z.ZodOptional<z.ZodEnum<{
|
|
236
|
+
self: "self";
|
|
237
|
+
family: "family";
|
|
238
|
+
friend: "friend";
|
|
239
|
+
community: "community";
|
|
240
|
+
organization: "organization";
|
|
241
|
+
}>>;
|
|
242
|
+
categoryOther: z.ZodOptional<z.ZodString>;
|
|
243
|
+
subCauses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
244
|
+
subCauseOther: z.ZodOptional<z.ZodString>;
|
|
245
|
+
organizationKind: z.ZodOptional<z.ZodEnum<{
|
|
246
|
+
other: "other";
|
|
247
|
+
ngo: "ngo";
|
|
248
|
+
trust: "trust";
|
|
249
|
+
society: "society";
|
|
250
|
+
section_8: "section_8";
|
|
251
|
+
}>>;
|
|
252
|
+
organizationKindOther: z.ZodOptional<z.ZodString>;
|
|
187
253
|
images: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
188
254
|
youtubeUrl: z.ZodOptional<z.ZodString>;
|
|
189
255
|
goalAmountInr: z.ZodNumber;
|
|
@@ -306,16 +372,43 @@ export declare const communityCrowdfundingWireSchema: z.ZodObject<{
|
|
|
306
372
|
description: z.ZodString;
|
|
307
373
|
category: z.ZodEnum<{
|
|
308
374
|
other: "other";
|
|
375
|
+
environment: "environment";
|
|
309
376
|
education: "education";
|
|
377
|
+
senior_care: "senior_care";
|
|
378
|
+
legal_aid: "legal_aid";
|
|
310
379
|
medical: "medical";
|
|
311
|
-
|
|
380
|
+
maternity: "maternity";
|
|
381
|
+
special_needs: "special_needs";
|
|
312
382
|
memorial: "memorial";
|
|
313
|
-
|
|
383
|
+
disaster: "disaster";
|
|
314
384
|
civic: "civic";
|
|
385
|
+
faith: "faith";
|
|
386
|
+
sports_talent: "sports_talent";
|
|
387
|
+
animal_welfare: "animal_welfare";
|
|
388
|
+
arts_culture: "arts_culture";
|
|
315
389
|
self_improvement: "self_improvement";
|
|
390
|
+
startup_prototype: "startup_prototype";
|
|
316
391
|
}>;
|
|
317
392
|
beneficiaryName: z.ZodString;
|
|
318
393
|
beneficiaryRelation: z.ZodOptional<z.ZodString>;
|
|
394
|
+
audience: z.ZodOptional<z.ZodEnum<{
|
|
395
|
+
self: "self";
|
|
396
|
+
family: "family";
|
|
397
|
+
friend: "friend";
|
|
398
|
+
community: "community";
|
|
399
|
+
organization: "organization";
|
|
400
|
+
}>>;
|
|
401
|
+
categoryOther: z.ZodOptional<z.ZodString>;
|
|
402
|
+
subCauses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
403
|
+
subCauseOther: z.ZodOptional<z.ZodString>;
|
|
404
|
+
organizationKind: z.ZodOptional<z.ZodEnum<{
|
|
405
|
+
other: "other";
|
|
406
|
+
ngo: "ngo";
|
|
407
|
+
trust: "trust";
|
|
408
|
+
society: "society";
|
|
409
|
+
section_8: "section_8";
|
|
410
|
+
}>>;
|
|
411
|
+
organizationKindOther: z.ZodOptional<z.ZodString>;
|
|
319
412
|
images: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
320
413
|
youtubeUrl: z.ZodOptional<z.ZodString>;
|
|
321
414
|
goalAmountInr: z.ZodNumber;
|
|
@@ -433,16 +526,43 @@ export declare const createCrowdfundingBodySchema: z.ZodObject<{
|
|
|
433
526
|
description: z.ZodString;
|
|
434
527
|
category: z.ZodEnum<{
|
|
435
528
|
other: "other";
|
|
529
|
+
environment: "environment";
|
|
436
530
|
education: "education";
|
|
531
|
+
senior_care: "senior_care";
|
|
532
|
+
legal_aid: "legal_aid";
|
|
437
533
|
medical: "medical";
|
|
438
|
-
|
|
534
|
+
maternity: "maternity";
|
|
535
|
+
special_needs: "special_needs";
|
|
439
536
|
memorial: "memorial";
|
|
440
|
-
|
|
537
|
+
disaster: "disaster";
|
|
441
538
|
civic: "civic";
|
|
539
|
+
faith: "faith";
|
|
540
|
+
sports_talent: "sports_talent";
|
|
541
|
+
animal_welfare: "animal_welfare";
|
|
542
|
+
arts_culture: "arts_culture";
|
|
442
543
|
self_improvement: "self_improvement";
|
|
544
|
+
startup_prototype: "startup_prototype";
|
|
443
545
|
}>;
|
|
444
546
|
beneficiaryName: z.ZodString;
|
|
445
547
|
beneficiaryRelation: z.ZodOptional<z.ZodString>;
|
|
548
|
+
audience: z.ZodOptional<z.ZodEnum<{
|
|
549
|
+
self: "self";
|
|
550
|
+
family: "family";
|
|
551
|
+
friend: "friend";
|
|
552
|
+
community: "community";
|
|
553
|
+
organization: "organization";
|
|
554
|
+
}>>;
|
|
555
|
+
categoryOther: z.ZodOptional<z.ZodString>;
|
|
556
|
+
subCauses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
557
|
+
subCauseOther: z.ZodOptional<z.ZodString>;
|
|
558
|
+
organizationKind: z.ZodOptional<z.ZodEnum<{
|
|
559
|
+
other: "other";
|
|
560
|
+
ngo: "ngo";
|
|
561
|
+
trust: "trust";
|
|
562
|
+
society: "society";
|
|
563
|
+
section_8: "section_8";
|
|
564
|
+
}>>;
|
|
565
|
+
organizationKindOther: z.ZodOptional<z.ZodString>;
|
|
446
566
|
images: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
447
567
|
youtubeUrl: z.ZodOptional<z.ZodString>;
|
|
448
568
|
goalAmountInr: z.ZodNumber;
|
|
@@ -478,16 +598,43 @@ export declare const updateCrowdfundingBodySchema: z.ZodObject<{
|
|
|
478
598
|
description: z.ZodOptional<z.ZodString>;
|
|
479
599
|
category: z.ZodOptional<z.ZodEnum<{
|
|
480
600
|
other: "other";
|
|
601
|
+
environment: "environment";
|
|
481
602
|
education: "education";
|
|
603
|
+
senior_care: "senior_care";
|
|
604
|
+
legal_aid: "legal_aid";
|
|
482
605
|
medical: "medical";
|
|
483
|
-
|
|
606
|
+
maternity: "maternity";
|
|
607
|
+
special_needs: "special_needs";
|
|
484
608
|
memorial: "memorial";
|
|
485
|
-
|
|
609
|
+
disaster: "disaster";
|
|
486
610
|
civic: "civic";
|
|
611
|
+
faith: "faith";
|
|
612
|
+
sports_talent: "sports_talent";
|
|
613
|
+
animal_welfare: "animal_welfare";
|
|
614
|
+
arts_culture: "arts_culture";
|
|
487
615
|
self_improvement: "self_improvement";
|
|
616
|
+
startup_prototype: "startup_prototype";
|
|
488
617
|
}>>;
|
|
489
618
|
beneficiaryName: z.ZodOptional<z.ZodString>;
|
|
490
619
|
beneficiaryRelation: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
620
|
+
audience: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
621
|
+
self: "self";
|
|
622
|
+
family: "family";
|
|
623
|
+
friend: "friend";
|
|
624
|
+
community: "community";
|
|
625
|
+
organization: "organization";
|
|
626
|
+
}>>>;
|
|
627
|
+
categoryOther: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
628
|
+
subCauses: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
629
|
+
subCauseOther: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
630
|
+
organizationKind: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
631
|
+
other: "other";
|
|
632
|
+
ngo: "ngo";
|
|
633
|
+
trust: "trust";
|
|
634
|
+
society: "society";
|
|
635
|
+
section_8: "section_8";
|
|
636
|
+
}>>>;
|
|
637
|
+
organizationKindOther: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
491
638
|
images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
|
|
492
639
|
youtubeUrl: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
493
640
|
goalAmountInr: z.ZodOptional<z.ZodNumber>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crowdfunding.d.ts","sourceRoot":"","sources":["../src/crowdfunding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAwBxB;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"crowdfunding.d.ts","sourceRoot":"","sources":["../src/crowdfunding.ts"],"names":[],"mappings":"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"}
|
package/dist/crowdfunding.js
CHANGED
|
@@ -41,14 +41,57 @@ import { postAuthorSnapshotSchema } from './post.js';
|
|
|
41
41
|
*/
|
|
42
42
|
export const CROWDFUNDING_CATEGORY_VALUES = [
|
|
43
43
|
'medical',
|
|
44
|
+
'maternity',
|
|
45
|
+
'senior_care',
|
|
46
|
+
'special_needs',
|
|
44
47
|
'education',
|
|
45
|
-
'disaster',
|
|
46
48
|
'memorial',
|
|
47
|
-
'
|
|
49
|
+
'disaster',
|
|
48
50
|
'civic',
|
|
51
|
+
'faith',
|
|
52
|
+
'sports_talent',
|
|
53
|
+
'animal_welfare',
|
|
54
|
+
'environment',
|
|
55
|
+
'legal_aid',
|
|
56
|
+
'arts_culture',
|
|
49
57
|
'self_improvement',
|
|
58
|
+
/**
|
|
59
|
+
* Startup / prototype building — distinct from `self_improvement`
|
|
60
|
+
* (which is now strictly skill / coursework). Covers MVP builds,
|
|
61
|
+
* tooling, initial inventory, working capital, registration fees,
|
|
62
|
+
* marketing for genuine first-stage entrepreneurs.
|
|
63
|
+
*/
|
|
64
|
+
'startup_prototype',
|
|
65
|
+
'other',
|
|
66
|
+
];
|
|
67
|
+
/**
|
|
68
|
+
* Who the campaign is for — drives the relation chip set and the
|
|
69
|
+
* organization-specific identity asks on the composer. Captured so the
|
|
70
|
+
* verifier can match the campaign narrative to the supporting docs
|
|
71
|
+
* (e.g. an `organization` audience should produce 12A / 80G papers,
|
|
72
|
+
* not a personal hospital bill).
|
|
73
|
+
*/
|
|
74
|
+
export const CROWDFUNDING_AUDIENCE_VALUES = [
|
|
75
|
+
'self',
|
|
76
|
+
'family',
|
|
77
|
+
'friend',
|
|
78
|
+
'community',
|
|
79
|
+
'organization',
|
|
80
|
+
];
|
|
81
|
+
export const crowdfundingAudienceSchema = z.enum(CROWDFUNDING_AUDIENCE_VALUES);
|
|
82
|
+
/**
|
|
83
|
+
* Org-registration class — only meaningful when `audience ===
|
|
84
|
+
* 'organization'`. Drives the verifier's expected document set
|
|
85
|
+
* (12A/80G for trust, FCRA-style papers for NGO, etc.).
|
|
86
|
+
*/
|
|
87
|
+
export const CROWDFUNDING_ORG_KIND_VALUES = [
|
|
88
|
+
'ngo',
|
|
89
|
+
'trust',
|
|
90
|
+
'society',
|
|
91
|
+
'section_8',
|
|
50
92
|
'other',
|
|
51
93
|
];
|
|
94
|
+
export const crowdfundingOrgKindSchema = z.enum(CROWDFUNDING_ORG_KIND_VALUES);
|
|
52
95
|
export const crowdfundingCategorySchema = z.enum(CROWDFUNDING_CATEGORY_VALUES);
|
|
53
96
|
/**
|
|
54
97
|
* Area scope — drives the required verifier role. A higher-tier
|
|
@@ -147,6 +190,24 @@ export const crowdfundingFeedItemSchema = z.object({
|
|
|
147
190
|
category: crowdfundingCategorySchema,
|
|
148
191
|
beneficiaryName: z.string(),
|
|
149
192
|
beneficiaryRelation: z.string().optional(),
|
|
193
|
+
/** Who the campaign is for. Optional on the wire so historic
|
|
194
|
+
* campaigns created before this field landed still validate. */
|
|
195
|
+
audience: crowdfundingAudienceSchema.optional(),
|
|
196
|
+
/** Optional explainer when `category === 'other'` — the writer's
|
|
197
|
+
* short label for the custom cause (e.g. "Wedding emergency"). */
|
|
198
|
+
categoryOther: z.string().optional(),
|
|
199
|
+
/** Up to 3 sub-causes within the chosen category, e.g.
|
|
200
|
+
* ["Cancer treatment", "ICU / critical care"] for `medical`. */
|
|
201
|
+
subCauses: z.array(z.string()).max(3).optional(),
|
|
202
|
+
/** When one of the picked sub-causes is "Other", this carries the
|
|
203
|
+
* writer's clarification (e.g. "Reconstructive surgery"). */
|
|
204
|
+
subCauseOther: z.string().optional(),
|
|
205
|
+
/** Org-registration class. Only meaningful when
|
|
206
|
+
* `audience === 'organization'`. */
|
|
207
|
+
organizationKind: crowdfundingOrgKindSchema.optional(),
|
|
208
|
+
/** When `organizationKind === 'other'`, the writer's clarification
|
|
209
|
+
* (e.g. "Religious body", "Cooperative"). */
|
|
210
|
+
organizationKindOther: z.string().optional(),
|
|
150
211
|
/** Story images (separate from supporting documents, which are
|
|
151
212
|
* verifier-only). Up to `CROWDFUNDING_MAX_IMAGES`. */
|
|
152
213
|
images: z.array(z.string().url()).max(CROWDFUNDING_MAX_IMAGES).optional(),
|
|
@@ -273,6 +334,21 @@ export const createCrowdfundingBodySchema = z.object({
|
|
|
273
334
|
.trim()
|
|
274
335
|
.max(CROWDFUNDING_BENEFICIARY_RELATION_MAX_CHARS)
|
|
275
336
|
.optional(),
|
|
337
|
+
/** Audience picker — drives the relation chip set + the
|
|
338
|
+
* organization-specific identity sub-steps on the composer. */
|
|
339
|
+
audience: crowdfundingAudienceSchema.optional(),
|
|
340
|
+
/** When `category === 'other'`, the writer's short label for the
|
|
341
|
+
* custom cause. Bounded to keep the database column sane. */
|
|
342
|
+
categoryOther: z.string().trim().max(80).optional(),
|
|
343
|
+
/** Up to 3 sub-causes within the chosen category. */
|
|
344
|
+
subCauses: z.array(z.string().trim().max(60)).max(3).optional(),
|
|
345
|
+
/** Writer's clarification when one of the picked sub-causes is
|
|
346
|
+
* "Other". */
|
|
347
|
+
subCauseOther: z.string().trim().max(80).optional(),
|
|
348
|
+
/** Org-registration class. Only set when `audience === 'organization'`. */
|
|
349
|
+
organizationKind: crowdfundingOrgKindSchema.optional(),
|
|
350
|
+
/** Writer's clarification when `organizationKind === 'other'`. */
|
|
351
|
+
organizationKindOther: z.string().trim().max(80).optional(),
|
|
276
352
|
images: z.array(z.string().url()).max(CROWDFUNDING_MAX_IMAGES).optional(),
|
|
277
353
|
/** Optional YouTube video URL. Validated as a URL here; the
|
|
278
354
|
* client-side validator additionally checks the host/path matches
|
package/dist/crowdfunding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crowdfunding.js","sourceRoot":"","sources":["../src/crowdfunding.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Community crowdfunding wire shapes.\n *\n * A crowdfunding campaign is a verified civic fundraiser surfaced in\n * the feed alongside posts / polls / lost-found / voice-box / donate-\n * item. The model is:\n *\n * 1. Creator drafts a campaign, fills bank + UPI QR + identity tier\n * based on the goal amount, picks an area scope.\n * 2. A leader at the matching scope (or any leader higher up the\n * hierarchy) reviews and approves OR rejects with reason.\n * Approved campaigns transition to ACTIVE and appear in the feed.\n * 3. Donors view the card, tap \"Donate\", pay externally via UPI\n * directly to the creator's bank — the platform never sees the\n * money. After paying, the donor self-attests amount + uploads a\n * receipt screenshot (optional). Without a screenshot the\n * donation enters PENDING state — the donor can upload the\n * receipt later (anytime, from settings → My Donations).\n * 4. The live progress bar shows ONLY verified amount (receipt\n * uploaded). Pending donations are counted separately and\n * surfaced as a secondary \"₹X pending receipt\" note. This is the\n * product decision: the visible progress reflects trust-grounded\n * money, not claims.\n *\n * Privacy: bank account number, IFSC, PAN, Aadhaar last-4, and\n * supporting documents are NEVER on the wire. Only `bankAccountLast4`,\n * `bankAccountHolderName`, and a UPI QR URL surface to donors.\n *\n * @module community-schema/crowdfunding\n */\n\nimport { z } from 'zod';\nimport { areaLineageSnapshotSchema } from './area.js';\nimport {\n CROWDFUNDING_BENEFICIARY_NAME_MAX_CHARS,\n CROWDFUNDING_BENEFICIARY_RELATION_MAX_CHARS,\n CROWDFUNDING_DESCRIPTION_MAX_CHARS,\n CROWDFUNDING_DESCRIPTION_MIN_CHARS,\n CROWDFUNDING_MAX_DONATION_INR,\n CROWDFUNDING_MAX_DURATION_DAYS,\n CROWDFUNDING_MAX_GOAL_INR,\n CROWDFUNDING_MAX_IMAGES,\n CROWDFUNDING_MAX_SUPPORTING_DOCS,\n CROWDFUNDING_MIN_DURATION_DAYS,\n CROWDFUNDING_MIN_GOAL_INR,\n CROWDFUNDING_REJECTION_REASON_MAX_CHARS,\n CROWDFUNDING_REJECTION_REASON_MIN_CHARS,\n CROWDFUNDING_TITLE_MAX_CHARS,\n CROWDFUNDING_TITLE_MIN_CHARS,\n} from './constants.js';\nimport { voteValueSchema } from './engagement.js';\nimport { postAuthorSnapshotSchema } from './post.js';\n\n// ─── Enums ─────────────────────────────────────────────────────────────────\n\n/**\n * Top-level categories — drives the chip + icon on the card and the\n * verifier's per-category supporting-doc requirements (medical needs\n * hospital invoice; education needs admission letter; etc.).\n */\nexport const CROWDFUNDING_CATEGORY_VALUES = [\n 'medical',\n 'education',\n 'disaster',\n 'memorial',\n 'animal_welfare',\n 'civic',\n 'self_improvement',\n 'other',\n] as const;\nexport const crowdfundingCategorySchema = z.enum(CROWDFUNDING_CATEGORY_VALUES);\nexport type CrowdfundingCategory = z.infer<typeof crowdfundingCategorySchema>;\n\n/**\n * Area scope — drives the required verifier role. A higher-tier\n * leader can always verify a lower-tier campaign (escalation path);\n * the reverse is rejected.\n */\nexport const CROWDFUNDING_SCOPE_VALUES = [\n 'local',\n 'district',\n 'state',\n 'national',\n 'global',\n] as const;\nexport const crowdfundingScopeSchema = z.enum(CROWDFUNDING_SCOPE_VALUES);\nexport type CrowdfundingScope = z.infer<typeof crowdfundingScopeSchema>;\n\n/**\n * Lifecycle state. `submitted` is the verifier's queue; `active` is\n * publishable in the feed; the three `closed_*` are terminal end-states\n * with different reasons.\n */\nexport const CROWDFUNDING_STATUS_VALUES = [\n 'draft',\n 'submitted',\n 'rejected',\n 'active',\n 'closed_success',\n 'closed_timeout',\n 'closed_by_creator',\n] as const;\nexport const crowdfundingStatusSchema = z.enum(CROWDFUNDING_STATUS_VALUES);\nexport type CrowdfundingStatus = z.infer<typeof crowdfundingStatusSchema>;\n\n/**\n * Per-donation verification state. `pending` = attested but no\n * receipt. `verified` = receipt uploaded (creator confirmation\n * optional). `disputed` = creator marked \"I didn't receive this\".\n * Only `verified` rolls into the campaign's `verifiedAmountInr`\n * which drives the visible progress bar.\n */\nexport const CROWDFUNDING_DONATION_STATE_VALUES = ['pending', 'verified', 'disputed'] as const;\nexport const crowdfundingDonationStateSchema = z.enum(CROWDFUNDING_DONATION_STATE_VALUES);\nexport type CrowdfundingDonationState = z.infer<typeof crowdfundingDonationStateSchema>;\n\n// ─── Sub-shapes ────────────────────────────────────────────────────────────\n\n/**\n * Per-campaign verification block. `approved` is the only state that\n * lets the campaign go ACTIVE; `pending` keeps it queued; `rejected`\n * is terminal-with-resubmit-allowed.\n */\nexport const crowdfundingVerificationSchema = z.object({\n status: z.enum(['pending', 'approved', 'rejected']),\n /** The leader who acted on this submission (display name —\n * live-joined from User at projection time). */\n verifiedByDisplayName: z.string().optional(),\n verifiedByUserId: z.string().optional(),\n /** When the leader acted. Approved + rejected both stamp this. */\n verifiedAt: z.string().datetime().optional(),\n /** The scope the verifier claimed when acting. A district leader\n * acting on a local campaign records `district` here so the\n * audit log shows the escalation path. */\n verifierScope: crowdfundingScopeSchema.optional(),\n /** Required when `status === 'rejected'`. Why the leader said no. */\n rejectionReason: z.string().optional(),\n});\nexport type CrowdfundingVerification = z.infer<typeof crowdfundingVerificationSchema>;\n\n/**\n * Public-facing payment surface — what the donor sees in the Donate\n * dialog. The full account number, IFSC, PAN, Aadhaar, supporting\n * docs etc. are kept server-side; only what's needed for the donor\n * to send money + recognise the recipient is exposed.\n */\nexport const crowdfundingPaymentSchema = z.object({\n /** GCS URL of the UPI QR code image uploaded by the creator. The\n * Donate dialog renders this for the donor to scan. */\n upiQrUrl: z.string().url(),\n /** Optional VPA — lets the donor tap a one-tap UPI deep link\n * instead of scanning the QR. e.g. \"ravi@okhdfcbank\". */\n upiId: z.string().optional(),\n /** Last 4 digits of the bank account — shown to the donor as\n * reassurance (\"ending in ••1234\"). Full number never surfaces. */\n bankAccountLast4: z.string().length(4),\n /** Account holder's name — must match the verified author display\n * name (penny-drop + UDP cross-check at submission time). */\n bankAccountHolderName: z.string(),\n /** Optional bank short name surfaced on the dialog. */\n bankName: z.string().optional(),\n});\nexport type CrowdfundingPayment = z.infer<typeof crowdfundingPaymentSchema>;\n\n// ─── Wire shape — feed item ────────────────────────────────────────────────\n\n/**\n * The card-renderable wire shape. Mirrors the engagement + author +\n * area-lineage shape of other feed kinds so the existing\n * EngagementBar, AuthorByline, and feed-projection helpers slot in\n * 1:1 without per-kind branches.\n */\nexport const crowdfundingFeedItemSchema = z.object({\n _id: z.string(),\n contentKind: z.literal('crowdfunding'),\n author: postAuthorSnapshotSchema,\n\n // ─── Campaign content ────────────────────────────────────────────\n title: z.string(),\n description: z.string(),\n category: crowdfundingCategorySchema,\n beneficiaryName: z.string(),\n beneficiaryRelation: z.string().optional(),\n /** Story images (separate from supporting documents, which are\n * verifier-only). Up to `CROWDFUNDING_MAX_IMAGES`. */\n images: z.array(z.string().url()).max(CROWDFUNDING_MAX_IMAGES).optional(),\n /** Optional YouTube URL surfaced as a preview/playback embed\n * alongside the story photos. Accepted forms: youtube.com/watch?v=,\n * youtu.be/, youtube.com/shorts/, youtube.com/embed/,\n * m.youtube.com/watch?v=. The wire stores whatever the creator\n * pasted; clients extract the video id themselves at render time. */\n youtubeUrl: z.string().url().optional(),\n\n // ─── Goal + progress ─────────────────────────────────────────────\n goalAmountInr: z.number().int().positive(),\n /** Sum of donations whose `verificationState === 'verified'`\n * (receipt uploaded or creator confirmed). THIS drives the visible\n * progress bar — the product decision is that only trust-grounded\n * money counts visually. */\n verifiedAmountInr: z.number().int().nonnegative(),\n /** Total attested amount — verified + pending + disputed\n * combined. Surfaced as secondary text (\"₹X pending receipt\")\n * so creator + donors can see the full attested pipeline without\n * it inflating the headline progress. */\n attestedAmountInr: z.number().int().nonnegative(),\n /** Distinct donors who attested any state. */\n donorCount: z.number().int().nonnegative(),\n /** Distinct donors whose latest donation is `verified`. The card\n * uses this for \"47 verified supporters\" copy. */\n verifiedDonorCount: z.number().int().nonnegative(),\n\n closesAt: z.string().datetime(),\n\n // ─── Verification surface ────────────────────────────────────────\n scope: crowdfundingScopeSchema,\n verification: crowdfundingVerificationSchema,\n\n // ─── Payment surface (donor-facing) ──────────────────────────────\n payment: crowdfundingPaymentSchema,\n\n // ─── Lifecycle ───────────────────────────────────────────────────\n status: crowdfundingStatusSchema,\n closedAt: z.string().datetime().nullable().optional(),\n\n // ─── Standard engagement (same axis as other kinds) ──────────────\n score: z.number().int(),\n commentCount: z.number().int().nonnegative(),\n repostCount: z.number().int().nonnegative(),\n reactionCounts: z.record(z.string(), z.number().int().nonnegative()),\n\n areaLineage: areaLineageSnapshotSchema,\n /** When set, the campaign is scoped to a topical community and the\n * geo-cascade feed query skips it (mirrors the post + poll\n * community-scoping rule). */\n communityId: z.string().optional(),\n\n createdAt: z.string().datetime(),\n\n viewer: z\n .object({\n vote: voteValueSchema.nullable(),\n reaction: z.string().nullable(),\n bookmarked: z.boolean(),\n isAuthor: z.boolean(),\n reposted: z.boolean(),\n /** The viewer's own donation state on THIS campaign. `null`\n * means they haven't attested anything yet. Populated from\n * the latest CrowdfundingDonation row keyed by\n * (campaignId, viewerUserId). */\n donationState: crowdfundingDonationStateSchema.nullable(),\n /** Amount the viewer last attested, in ₹. Null when no\n * attestation. The card uses this to render the \"You gave\n * ₹500 — upload receipt\" prompt. */\n donationAmountInr: z.number().int().positive().nullable(),\n /** True when the viewer is eligible to verify this campaign\n * (matching-or-higher leader at the campaign's scope, viewing\n * a `submitted` campaign). Renders the in-card Verify CTA. */\n canVerify: z.boolean(),\n })\n .optional(),\n});\nexport type CrowdfundingFeedItem = z.infer<typeof crowdfundingFeedItemSchema>;\n\n// Same shape mirrored as the public \"wire\" alias for parity with the\n// other kinds whose feed envelope === detail envelope.\nexport const communityCrowdfundingWireSchema = crowdfundingFeedItemSchema;\nexport type CommunityCrowdfundingWire = z.infer<typeof communityCrowdfundingWireSchema>;\n\n// ─── Donation wire ─────────────────────────────────────────────────────────\n\n/**\n * Single donation row — surfaced on the campaign's public donor list\n * and on the donor's own \"My Donations\" surface. The full bank /\n * receipt URL stays server-side; the wire carries display info plus\n * the verification state.\n */\nexport const crowdfundingDonationWireSchema = z.object({\n _id: z.string(),\n campaignId: z.string(),\n /** Donor's userId — omitted when `isAnonymous`, so the wire is the\n * privacy boundary not the card. */\n donorUserId: z.string().optional(),\n donorDisplayName: z.string(),\n amountInr: z.number().int().positive(),\n isAnonymous: z.boolean(),\n attestedAt: z.string().datetime(),\n /** When the receipt was uploaded. Absent on pending donations. */\n receiptUploadedAt: z.string().datetime().nullable().optional(),\n /** Signed URL for the receipt screenshot. Visible only to:\n * - the donor (their own row)\n * - the campaign creator\n * - the verifier on review\n * - admin / moderators\n * The list endpoint scrubs this for all other viewers. */\n receiptUrl: z.string().url().nullable().optional(),\n verificationState: crowdfundingDonationStateSchema,\n /** Set when the creator confirmed receipt independently of a\n * receipt upload. e.g. \"I see ₹500 from Ravi in my account\". */\n creatorConfirmed: z.boolean().optional(),\n /** Set when the creator marked \"I didn't receive this\". Donor is\n * notified to upload the receipt; auto-reverts after 7 days. */\n disputeReason: z.string().optional(),\n});\nexport type CrowdfundingDonationWire = z.infer<typeof crowdfundingDonationWireSchema>;\n\n// ─── Create / update / lifecycle bodies ────────────────────────────────────\n\n/**\n * Composer payload. Identity + bank fields are tier-conditional —\n * the server cross-checks the chosen `goalAmountInr` against the\n * provided fields per the tier matrix in constants.ts.\n */\nexport const createCrowdfundingBodySchema = z.object({\n title: z.string().trim().min(CROWDFUNDING_TITLE_MIN_CHARS).max(CROWDFUNDING_TITLE_MAX_CHARS),\n description: z\n .string()\n .trim()\n .min(CROWDFUNDING_DESCRIPTION_MIN_CHARS)\n .max(CROWDFUNDING_DESCRIPTION_MAX_CHARS),\n category: crowdfundingCategorySchema,\n beneficiaryName: z.string().trim().min(2).max(CROWDFUNDING_BENEFICIARY_NAME_MAX_CHARS),\n beneficiaryRelation: z\n .string()\n .trim()\n .max(CROWDFUNDING_BENEFICIARY_RELATION_MAX_CHARS)\n .optional(),\n images: z.array(z.string().url()).max(CROWDFUNDING_MAX_IMAGES).optional(),\n /** Optional YouTube video URL. Validated as a URL here; the\n * client-side validator additionally checks the host/path matches\n * a recognised YouTube shape and extracts the video id for the\n * preview component. */\n youtubeUrl: z.string().url().optional(),\n\n goalAmountInr: z.number().int().min(CROWDFUNDING_MIN_GOAL_INR).max(CROWDFUNDING_MAX_GOAL_INR),\n /** Duration in days. The server resolves `closesAt = now +\n * durationDays * 86400 * 1000` so client clock skew can't push\n * the close-time into the past. */\n durationDays: z\n .number()\n .int()\n .min(CROWDFUNDING_MIN_DURATION_DAYS)\n .max(CROWDFUNDING_MAX_DURATION_DAYS),\n\n scope: crowdfundingScopeSchema,\n\n // ─── Payment fields (server keeps full account + IFSC encrypted;\n // wire only carries last-4 + holder name + optional UPI ID) ──\n upiQrUrl: z.string().url(),\n upiId: z.string().trim().max(50).optional(),\n /** Full bank account number — 9-18 digits per RBI's range. Stored\n * encrypted server-side; never on the public wire. */\n bankAccountNumber: z\n .string()\n .trim()\n .regex(/^[0-9]{9,18}$/),\n bankAccountHolderName: z.string().trim().min(2).max(100),\n /** Indian IFSC code — 4 letters + 0 + 6 alphanumerics. Stored\n * encrypted; truncated on the wire. */\n ifsc: z\n .string()\n .trim()\n .regex(/^[A-Z]{4}0[A-Z0-9]{6}$/),\n bankName: z.string().trim().max(100).optional(),\n\n // ─── Identity (tier-conditional, validated server-side) ──────────\n /** PAN — 5 letters + 4 digits + 1 letter. Required for goal ≥\n * ₹25k (Standard tier). Stored encrypted; never on the wire (the\n * audit log surfaces a masked \"ABCDE****F\" form to verifiers). */\n pan: z\n .string()\n .trim()\n .regex(/^[A-Z]{5}[0-9]{4}[A-Z]$/)\n .optional(),\n /** Aadhaar last-4 only (never the full number — Aadhaar Act\n * restricts storage). Required for goal ≥ ₹2L (Enhanced tier). */\n aadhaarLast4: z\n .string()\n .trim()\n .regex(/^[0-9]{4}$/)\n .optional(),\n /** GCS URLs of supporting documents (hospital invoice / school\n * admission letter / FIR / etc.). Required for goal ≥ ₹2L.\n * Verifier sees these on the review queue; donors do not. */\n supportingDocs: z.array(z.string().url()).max(CROWDFUNDING_MAX_SUPPORTING_DOCS).optional(),\n\n /** Optional community scoping. If set the creator must be an active\n * member; non-members get a 403 server-side. */\n communityId: z.string().optional(),\n});\nexport type CreateCrowdfundingBody = z.infer<typeof createCrowdfundingBodySchema>;\n\n/**\n * Update body — only fields that are safe to change on a `draft` or\n * `rejected` campaign before resubmission. Verification + lifecycle\n * fields cannot be updated through this endpoint. Tier + identity\n * fields stay editable so a rejected campaign can fix what the\n * verifier flagged.\n */\nexport const updateCrowdfundingBodySchema = createCrowdfundingBodySchema.partial();\nexport type UpdateCrowdfundingBody = z.infer<typeof updateCrowdfundingBodySchema>;\n\n/**\n * What the verifier sends when approving. The `verifierScope`\n * lets a higher-tier leader claim their tier at action time (a\n * district leader approving a local campaign records `district`).\n */\nexport const approveCrowdfundingBodySchema = z.object({\n verifierScope: crowdfundingScopeSchema,\n});\nexport type ApproveCrowdfundingBody = z.infer<typeof approveCrowdfundingBodySchema>;\n\n/**\n * Rejection body. Reason is required and surfaces back to the creator\n * so they can fix the gap and resubmit.\n */\nexport const rejectCrowdfundingBodySchema = z.object({\n reason: z\n .string()\n .trim()\n .min(CROWDFUNDING_REJECTION_REASON_MIN_CHARS)\n .max(CROWDFUNDING_REJECTION_REASON_MAX_CHARS),\n});\nexport type RejectCrowdfundingBody = z.infer<typeof rejectCrowdfundingBodySchema>;\n\n// ─── Donation bodies ───────────────────────────────────────────────────────\n\n/**\n * Donor self-attests a donation. Receipt is OPTIONAL — the\n * attestation creates a `pending` row that the donor can attach a\n * receipt to later (anytime, from settings → My Donations) which\n * promotes it to `verified` and counts toward the progress bar.\n */\nexport const attestCrowdfundingDonationBodySchema = z.object({\n amountInr: z.number().int().min(1).max(CROWDFUNDING_MAX_DONATION_INR),\n isAnonymous: z.boolean().default(false),\n /** GCS URL of the receipt screenshot. When omitted the donation\n * enters `pending` state. */\n receiptUrl: z.string().url().optional(),\n});\nexport type AttestCrowdfundingDonationBody = z.infer<typeof attestCrowdfundingDonationBodySchema>;\n\n/**\n * Upload (or re-upload) a receipt for a previously-attested donation.\n * Promotes a `pending` row to `verified`; for an already-`verified`\n * row it replaces the receipt.\n */\nexport const uploadCrowdfundingReceiptBodySchema = z.object({\n receiptUrl: z.string().url(),\n});\nexport type UploadCrowdfundingReceiptBody = z.infer<typeof uploadCrowdfundingReceiptBodySchema>;\n\n// ─── Listing query ─────────────────────────────────────────────────────────\n\nexport const listCrowdfundingDonationsQuerySchema = z.object({\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().max(100).optional(),\n state: crowdfundingDonationStateSchema.optional(),\n});\nexport type ListCrowdfundingDonationsQuery = z.infer<typeof listCrowdfundingDonationsQuerySchema>;\n\n/**\n * Per-donor \"My Donations\" surface — different from the per-campaign\n * donor list. Returns every donation the viewer has attested, across\n * all campaigns, so the donor can spot any row that's still\n * `pending` and upload a receipt.\n */\nexport const listMyCrowdfundingDonationsQuerySchema = z.object({\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().max(100).optional(),\n state: crowdfundingDonationStateSchema.optional(),\n});\nexport type ListMyCrowdfundingDonationsQuery = z.infer<\n typeof listMyCrowdfundingDonationsQuerySchema\n>;\n"]}
|
|
1
|
+
{"version":3,"file":"crowdfunding.js","sourceRoot":"","sources":["../src/crowdfunding.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Community crowdfunding wire shapes.\n *\n * A crowdfunding campaign is a verified civic fundraiser surfaced in\n * the feed alongside posts / polls / lost-found / voice-box / donate-\n * item. The model is:\n *\n * 1. Creator drafts a campaign, fills bank + UPI QR + identity tier\n * based on the goal amount, picks an area scope.\n * 2. A leader at the matching scope (or any leader higher up the\n * hierarchy) reviews and approves OR rejects with reason.\n * Approved campaigns transition to ACTIVE and appear in the feed.\n * 3. Donors view the card, tap \"Donate\", pay externally via UPI\n * directly to the creator's bank — the platform never sees the\n * money. After paying, the donor self-attests amount + uploads a\n * receipt screenshot (optional). Without a screenshot the\n * donation enters PENDING state — the donor can upload the\n * receipt later (anytime, from settings → My Donations).\n * 4. The live progress bar shows ONLY verified amount (receipt\n * uploaded). Pending donations are counted separately and\n * surfaced as a secondary \"₹X pending receipt\" note. This is the\n * product decision: the visible progress reflects trust-grounded\n * money, not claims.\n *\n * Privacy: bank account number, IFSC, PAN, Aadhaar last-4, and\n * supporting documents are NEVER on the wire. Only `bankAccountLast4`,\n * `bankAccountHolderName`, and a UPI QR URL surface to donors.\n *\n * @module community-schema/crowdfunding\n */\n\nimport { z } from 'zod';\nimport { areaLineageSnapshotSchema } from './area.js';\nimport {\n CROWDFUNDING_BENEFICIARY_NAME_MAX_CHARS,\n CROWDFUNDING_BENEFICIARY_RELATION_MAX_CHARS,\n CROWDFUNDING_DESCRIPTION_MAX_CHARS,\n CROWDFUNDING_DESCRIPTION_MIN_CHARS,\n CROWDFUNDING_MAX_DONATION_INR,\n CROWDFUNDING_MAX_DURATION_DAYS,\n CROWDFUNDING_MAX_GOAL_INR,\n CROWDFUNDING_MAX_IMAGES,\n CROWDFUNDING_MAX_SUPPORTING_DOCS,\n CROWDFUNDING_MIN_DURATION_DAYS,\n CROWDFUNDING_MIN_GOAL_INR,\n CROWDFUNDING_REJECTION_REASON_MAX_CHARS,\n CROWDFUNDING_REJECTION_REASON_MIN_CHARS,\n CROWDFUNDING_TITLE_MAX_CHARS,\n CROWDFUNDING_TITLE_MIN_CHARS,\n} from './constants.js';\nimport { voteValueSchema } from './engagement.js';\nimport { postAuthorSnapshotSchema } from './post.js';\n\n// ─── Enums ─────────────────────────────────────────────────────────────────\n\n/**\n * Top-level categories — drives the chip + icon on the card and the\n * verifier's per-category supporting-doc requirements (medical needs\n * hospital invoice; education needs admission letter; etc.).\n */\nexport const CROWDFUNDING_CATEGORY_VALUES = [\n 'medical',\n 'maternity',\n 'senior_care',\n 'special_needs',\n 'education',\n 'memorial',\n 'disaster',\n 'civic',\n 'faith',\n 'sports_talent',\n 'animal_welfare',\n 'environment',\n 'legal_aid',\n 'arts_culture',\n 'self_improvement',\n /**\n * Startup / prototype building — distinct from `self_improvement`\n * (which is now strictly skill / coursework). Covers MVP builds,\n * tooling, initial inventory, working capital, registration fees,\n * marketing for genuine first-stage entrepreneurs.\n */\n 'startup_prototype',\n 'other',\n] as const;\n\n/**\n * Who the campaign is for — drives the relation chip set and the\n * organization-specific identity asks on the composer. Captured so the\n * verifier can match the campaign narrative to the supporting docs\n * (e.g. an `organization` audience should produce 12A / 80G papers,\n * not a personal hospital bill).\n */\nexport const CROWDFUNDING_AUDIENCE_VALUES = [\n 'self',\n 'family',\n 'friend',\n 'community',\n 'organization',\n] as const;\nexport const crowdfundingAudienceSchema = z.enum(CROWDFUNDING_AUDIENCE_VALUES);\nexport type CrowdfundingAudience = z.infer<typeof crowdfundingAudienceSchema>;\n\n/**\n * Org-registration class — only meaningful when `audience ===\n * 'organization'`. Drives the verifier's expected document set\n * (12A/80G for trust, FCRA-style papers for NGO, etc.).\n */\nexport const CROWDFUNDING_ORG_KIND_VALUES = [\n 'ngo',\n 'trust',\n 'society',\n 'section_8',\n 'other',\n] as const;\nexport const crowdfundingOrgKindSchema = z.enum(CROWDFUNDING_ORG_KIND_VALUES);\nexport type CrowdfundingOrgKind = z.infer<typeof crowdfundingOrgKindSchema>;\nexport const crowdfundingCategorySchema = z.enum(CROWDFUNDING_CATEGORY_VALUES);\nexport type CrowdfundingCategory = z.infer<typeof crowdfundingCategorySchema>;\n\n/**\n * Area scope — drives the required verifier role. A higher-tier\n * leader can always verify a lower-tier campaign (escalation path);\n * the reverse is rejected.\n */\nexport const CROWDFUNDING_SCOPE_VALUES = [\n 'local',\n 'district',\n 'state',\n 'national',\n 'global',\n] as const;\nexport const crowdfundingScopeSchema = z.enum(CROWDFUNDING_SCOPE_VALUES);\nexport type CrowdfundingScope = z.infer<typeof crowdfundingScopeSchema>;\n\n/**\n * Lifecycle state. `submitted` is the verifier's queue; `active` is\n * publishable in the feed; the three `closed_*` are terminal end-states\n * with different reasons.\n */\nexport const CROWDFUNDING_STATUS_VALUES = [\n 'draft',\n 'submitted',\n 'rejected',\n 'active',\n 'closed_success',\n 'closed_timeout',\n 'closed_by_creator',\n] as const;\nexport const crowdfundingStatusSchema = z.enum(CROWDFUNDING_STATUS_VALUES);\nexport type CrowdfundingStatus = z.infer<typeof crowdfundingStatusSchema>;\n\n/**\n * Per-donation verification state. `pending` = attested but no\n * receipt. `verified` = receipt uploaded (creator confirmation\n * optional). `disputed` = creator marked \"I didn't receive this\".\n * Only `verified` rolls into the campaign's `verifiedAmountInr`\n * which drives the visible progress bar.\n */\nexport const CROWDFUNDING_DONATION_STATE_VALUES = ['pending', 'verified', 'disputed'] as const;\nexport const crowdfundingDonationStateSchema = z.enum(CROWDFUNDING_DONATION_STATE_VALUES);\nexport type CrowdfundingDonationState = z.infer<typeof crowdfundingDonationStateSchema>;\n\n// ─── Sub-shapes ────────────────────────────────────────────────────────────\n\n/**\n * Per-campaign verification block. `approved` is the only state that\n * lets the campaign go ACTIVE; `pending` keeps it queued; `rejected`\n * is terminal-with-resubmit-allowed.\n */\nexport const crowdfundingVerificationSchema = z.object({\n status: z.enum(['pending', 'approved', 'rejected']),\n /** The leader who acted on this submission (display name —\n * live-joined from User at projection time). */\n verifiedByDisplayName: z.string().optional(),\n verifiedByUserId: z.string().optional(),\n /** When the leader acted. Approved + rejected both stamp this. */\n verifiedAt: z.string().datetime().optional(),\n /** The scope the verifier claimed when acting. A district leader\n * acting on a local campaign records `district` here so the\n * audit log shows the escalation path. */\n verifierScope: crowdfundingScopeSchema.optional(),\n /** Required when `status === 'rejected'`. Why the leader said no. */\n rejectionReason: z.string().optional(),\n});\nexport type CrowdfundingVerification = z.infer<typeof crowdfundingVerificationSchema>;\n\n/**\n * Public-facing payment surface — what the donor sees in the Donate\n * dialog. The full account number, IFSC, PAN, Aadhaar, supporting\n * docs etc. are kept server-side; only what's needed for the donor\n * to send money + recognise the recipient is exposed.\n */\nexport const crowdfundingPaymentSchema = z.object({\n /** GCS URL of the UPI QR code image uploaded by the creator. The\n * Donate dialog renders this for the donor to scan. */\n upiQrUrl: z.string().url(),\n /** Optional VPA — lets the donor tap a one-tap UPI deep link\n * instead of scanning the QR. e.g. \"ravi@okhdfcbank\". */\n upiId: z.string().optional(),\n /** Last 4 digits of the bank account — shown to the donor as\n * reassurance (\"ending in ••1234\"). Full number never surfaces. */\n bankAccountLast4: z.string().length(4),\n /** Account holder's name — must match the verified author display\n * name (penny-drop + UDP cross-check at submission time). */\n bankAccountHolderName: z.string(),\n /** Optional bank short name surfaced on the dialog. */\n bankName: z.string().optional(),\n});\nexport type CrowdfundingPayment = z.infer<typeof crowdfundingPaymentSchema>;\n\n// ─── Wire shape — feed item ────────────────────────────────────────────────\n\n/**\n * The card-renderable wire shape. Mirrors the engagement + author +\n * area-lineage shape of other feed kinds so the existing\n * EngagementBar, AuthorByline, and feed-projection helpers slot in\n * 1:1 without per-kind branches.\n */\nexport const crowdfundingFeedItemSchema = z.object({\n _id: z.string(),\n contentKind: z.literal('crowdfunding'),\n author: postAuthorSnapshotSchema,\n\n // ─── Campaign content ────────────────────────────────────────────\n title: z.string(),\n description: z.string(),\n category: crowdfundingCategorySchema,\n beneficiaryName: z.string(),\n beneficiaryRelation: z.string().optional(),\n /** Who the campaign is for. Optional on the wire so historic\n * campaigns created before this field landed still validate. */\n audience: crowdfundingAudienceSchema.optional(),\n /** Optional explainer when `category === 'other'` — the writer's\n * short label for the custom cause (e.g. \"Wedding emergency\"). */\n categoryOther: z.string().optional(),\n /** Up to 3 sub-causes within the chosen category, e.g.\n * [\"Cancer treatment\", \"ICU / critical care\"] for `medical`. */\n subCauses: z.array(z.string()).max(3).optional(),\n /** When one of the picked sub-causes is \"Other\", this carries the\n * writer's clarification (e.g. \"Reconstructive surgery\"). */\n subCauseOther: z.string().optional(),\n /** Org-registration class. Only meaningful when\n * `audience === 'organization'`. */\n organizationKind: crowdfundingOrgKindSchema.optional(),\n /** When `organizationKind === 'other'`, the writer's clarification\n * (e.g. \"Religious body\", \"Cooperative\"). */\n organizationKindOther: z.string().optional(),\n /** Story images (separate from supporting documents, which are\n * verifier-only). Up to `CROWDFUNDING_MAX_IMAGES`. */\n images: z.array(z.string().url()).max(CROWDFUNDING_MAX_IMAGES).optional(),\n /** Optional YouTube URL surfaced as a preview/playback embed\n * alongside the story photos. Accepted forms: youtube.com/watch?v=,\n * youtu.be/, youtube.com/shorts/, youtube.com/embed/,\n * m.youtube.com/watch?v=. The wire stores whatever the creator\n * pasted; clients extract the video id themselves at render time. */\n youtubeUrl: z.string().url().optional(),\n\n // ─── Goal + progress ─────────────────────────────────────────────\n goalAmountInr: z.number().int().positive(),\n /** Sum of donations whose `verificationState === 'verified'`\n * (receipt uploaded or creator confirmed). THIS drives the visible\n * progress bar — the product decision is that only trust-grounded\n * money counts visually. */\n verifiedAmountInr: z.number().int().nonnegative(),\n /** Total attested amount — verified + pending + disputed\n * combined. Surfaced as secondary text (\"₹X pending receipt\")\n * so creator + donors can see the full attested pipeline without\n * it inflating the headline progress. */\n attestedAmountInr: z.number().int().nonnegative(),\n /** Distinct donors who attested any state. */\n donorCount: z.number().int().nonnegative(),\n /** Distinct donors whose latest donation is `verified`. The card\n * uses this for \"47 verified supporters\" copy. */\n verifiedDonorCount: z.number().int().nonnegative(),\n\n closesAt: z.string().datetime(),\n\n // ─── Verification surface ────────────────────────────────────────\n scope: crowdfundingScopeSchema,\n verification: crowdfundingVerificationSchema,\n\n // ─── Payment surface (donor-facing) ──────────────────────────────\n payment: crowdfundingPaymentSchema,\n\n // ─── Lifecycle ───────────────────────────────────────────────────\n status: crowdfundingStatusSchema,\n closedAt: z.string().datetime().nullable().optional(),\n\n // ─── Standard engagement (same axis as other kinds) ──────────────\n score: z.number().int(),\n commentCount: z.number().int().nonnegative(),\n repostCount: z.number().int().nonnegative(),\n reactionCounts: z.record(z.string(), z.number().int().nonnegative()),\n\n areaLineage: areaLineageSnapshotSchema,\n /** When set, the campaign is scoped to a topical community and the\n * geo-cascade feed query skips it (mirrors the post + poll\n * community-scoping rule). */\n communityId: z.string().optional(),\n\n createdAt: z.string().datetime(),\n\n viewer: z\n .object({\n vote: voteValueSchema.nullable(),\n reaction: z.string().nullable(),\n bookmarked: z.boolean(),\n isAuthor: z.boolean(),\n reposted: z.boolean(),\n /** The viewer's own donation state on THIS campaign. `null`\n * means they haven't attested anything yet. Populated from\n * the latest CrowdfundingDonation row keyed by\n * (campaignId, viewerUserId). */\n donationState: crowdfundingDonationStateSchema.nullable(),\n /** Amount the viewer last attested, in ₹. Null when no\n * attestation. The card uses this to render the \"You gave\n * ₹500 — upload receipt\" prompt. */\n donationAmountInr: z.number().int().positive().nullable(),\n /** True when the viewer is eligible to verify this campaign\n * (matching-or-higher leader at the campaign's scope, viewing\n * a `submitted` campaign). Renders the in-card Verify CTA. */\n canVerify: z.boolean(),\n })\n .optional(),\n});\nexport type CrowdfundingFeedItem = z.infer<typeof crowdfundingFeedItemSchema>;\n\n// Same shape mirrored as the public \"wire\" alias for parity with the\n// other kinds whose feed envelope === detail envelope.\nexport const communityCrowdfundingWireSchema = crowdfundingFeedItemSchema;\nexport type CommunityCrowdfundingWire = z.infer<typeof communityCrowdfundingWireSchema>;\n\n// ─── Donation wire ─────────────────────────────────────────────────────────\n\n/**\n * Single donation row — surfaced on the campaign's public donor list\n * and on the donor's own \"My Donations\" surface. The full bank /\n * receipt URL stays server-side; the wire carries display info plus\n * the verification state.\n */\nexport const crowdfundingDonationWireSchema = z.object({\n _id: z.string(),\n campaignId: z.string(),\n /** Donor's userId — omitted when `isAnonymous`, so the wire is the\n * privacy boundary not the card. */\n donorUserId: z.string().optional(),\n donorDisplayName: z.string(),\n amountInr: z.number().int().positive(),\n isAnonymous: z.boolean(),\n attestedAt: z.string().datetime(),\n /** When the receipt was uploaded. Absent on pending donations. */\n receiptUploadedAt: z.string().datetime().nullable().optional(),\n /** Signed URL for the receipt screenshot. Visible only to:\n * - the donor (their own row)\n * - the campaign creator\n * - the verifier on review\n * - admin / moderators\n * The list endpoint scrubs this for all other viewers. */\n receiptUrl: z.string().url().nullable().optional(),\n verificationState: crowdfundingDonationStateSchema,\n /** Set when the creator confirmed receipt independently of a\n * receipt upload. e.g. \"I see ₹500 from Ravi in my account\". */\n creatorConfirmed: z.boolean().optional(),\n /** Set when the creator marked \"I didn't receive this\". Donor is\n * notified to upload the receipt; auto-reverts after 7 days. */\n disputeReason: z.string().optional(),\n});\nexport type CrowdfundingDonationWire = z.infer<typeof crowdfundingDonationWireSchema>;\n\n// ─── Create / update / lifecycle bodies ────────────────────────────────────\n\n/**\n * Composer payload. Identity + bank fields are tier-conditional —\n * the server cross-checks the chosen `goalAmountInr` against the\n * provided fields per the tier matrix in constants.ts.\n */\nexport const createCrowdfundingBodySchema = z.object({\n title: z.string().trim().min(CROWDFUNDING_TITLE_MIN_CHARS).max(CROWDFUNDING_TITLE_MAX_CHARS),\n description: z\n .string()\n .trim()\n .min(CROWDFUNDING_DESCRIPTION_MIN_CHARS)\n .max(CROWDFUNDING_DESCRIPTION_MAX_CHARS),\n category: crowdfundingCategorySchema,\n beneficiaryName: z.string().trim().min(2).max(CROWDFUNDING_BENEFICIARY_NAME_MAX_CHARS),\n beneficiaryRelation: z\n .string()\n .trim()\n .max(CROWDFUNDING_BENEFICIARY_RELATION_MAX_CHARS)\n .optional(),\n /** Audience picker — drives the relation chip set + the\n * organization-specific identity sub-steps on the composer. */\n audience: crowdfundingAudienceSchema.optional(),\n /** When `category === 'other'`, the writer's short label for the\n * custom cause. Bounded to keep the database column sane. */\n categoryOther: z.string().trim().max(80).optional(),\n /** Up to 3 sub-causes within the chosen category. */\n subCauses: z.array(z.string().trim().max(60)).max(3).optional(),\n /** Writer's clarification when one of the picked sub-causes is\n * \"Other\". */\n subCauseOther: z.string().trim().max(80).optional(),\n /** Org-registration class. Only set when `audience === 'organization'`. */\n organizationKind: crowdfundingOrgKindSchema.optional(),\n /** Writer's clarification when `organizationKind === 'other'`. */\n organizationKindOther: z.string().trim().max(80).optional(),\n images: z.array(z.string().url()).max(CROWDFUNDING_MAX_IMAGES).optional(),\n /** Optional YouTube video URL. Validated as a URL here; the\n * client-side validator additionally checks the host/path matches\n * a recognised YouTube shape and extracts the video id for the\n * preview component. */\n youtubeUrl: z.string().url().optional(),\n\n goalAmountInr: z.number().int().min(CROWDFUNDING_MIN_GOAL_INR).max(CROWDFUNDING_MAX_GOAL_INR),\n /** Duration in days. The server resolves `closesAt = now +\n * durationDays * 86400 * 1000` so client clock skew can't push\n * the close-time into the past. */\n durationDays: z\n .number()\n .int()\n .min(CROWDFUNDING_MIN_DURATION_DAYS)\n .max(CROWDFUNDING_MAX_DURATION_DAYS),\n\n scope: crowdfundingScopeSchema,\n\n // ─── Payment fields (server keeps full account + IFSC encrypted;\n // wire only carries last-4 + holder name + optional UPI ID) ──\n upiQrUrl: z.string().url(),\n upiId: z.string().trim().max(50).optional(),\n /** Full bank account number — 9-18 digits per RBI's range. Stored\n * encrypted server-side; never on the public wire. */\n bankAccountNumber: z\n .string()\n .trim()\n .regex(/^[0-9]{9,18}$/),\n bankAccountHolderName: z.string().trim().min(2).max(100),\n /** Indian IFSC code — 4 letters + 0 + 6 alphanumerics. Stored\n * encrypted; truncated on the wire. */\n ifsc: z\n .string()\n .trim()\n .regex(/^[A-Z]{4}0[A-Z0-9]{6}$/),\n bankName: z.string().trim().max(100).optional(),\n\n // ─── Identity (tier-conditional, validated server-side) ──────────\n /** PAN — 5 letters + 4 digits + 1 letter. Required for goal ≥\n * ₹25k (Standard tier). Stored encrypted; never on the wire (the\n * audit log surfaces a masked \"ABCDE****F\" form to verifiers). */\n pan: z\n .string()\n .trim()\n .regex(/^[A-Z]{5}[0-9]{4}[A-Z]$/)\n .optional(),\n /** Aadhaar last-4 only (never the full number — Aadhaar Act\n * restricts storage). Required for goal ≥ ₹2L (Enhanced tier). */\n aadhaarLast4: z\n .string()\n .trim()\n .regex(/^[0-9]{4}$/)\n .optional(),\n /** GCS URLs of supporting documents (hospital invoice / school\n * admission letter / FIR / etc.). Required for goal ≥ ₹2L.\n * Verifier sees these on the review queue; donors do not. */\n supportingDocs: z.array(z.string().url()).max(CROWDFUNDING_MAX_SUPPORTING_DOCS).optional(),\n\n /** Optional community scoping. If set the creator must be an active\n * member; non-members get a 403 server-side. */\n communityId: z.string().optional(),\n});\nexport type CreateCrowdfundingBody = z.infer<typeof createCrowdfundingBodySchema>;\n\n/**\n * Update body — only fields that are safe to change on a `draft` or\n * `rejected` campaign before resubmission. Verification + lifecycle\n * fields cannot be updated through this endpoint. Tier + identity\n * fields stay editable so a rejected campaign can fix what the\n * verifier flagged.\n */\nexport const updateCrowdfundingBodySchema = createCrowdfundingBodySchema.partial();\nexport type UpdateCrowdfundingBody = z.infer<typeof updateCrowdfundingBodySchema>;\n\n/**\n * What the verifier sends when approving. The `verifierScope`\n * lets a higher-tier leader claim their tier at action time (a\n * district leader approving a local campaign records `district`).\n */\nexport const approveCrowdfundingBodySchema = z.object({\n verifierScope: crowdfundingScopeSchema,\n});\nexport type ApproveCrowdfundingBody = z.infer<typeof approveCrowdfundingBodySchema>;\n\n/**\n * Rejection body. Reason is required and surfaces back to the creator\n * so they can fix the gap and resubmit.\n */\nexport const rejectCrowdfundingBodySchema = z.object({\n reason: z\n .string()\n .trim()\n .min(CROWDFUNDING_REJECTION_REASON_MIN_CHARS)\n .max(CROWDFUNDING_REJECTION_REASON_MAX_CHARS),\n});\nexport type RejectCrowdfundingBody = z.infer<typeof rejectCrowdfundingBodySchema>;\n\n// ─── Donation bodies ───────────────────────────────────────────────────────\n\n/**\n * Donor self-attests a donation. Receipt is OPTIONAL — the\n * attestation creates a `pending` row that the donor can attach a\n * receipt to later (anytime, from settings → My Donations) which\n * promotes it to `verified` and counts toward the progress bar.\n */\nexport const attestCrowdfundingDonationBodySchema = z.object({\n amountInr: z.number().int().min(1).max(CROWDFUNDING_MAX_DONATION_INR),\n isAnonymous: z.boolean().default(false),\n /** GCS URL of the receipt screenshot. When omitted the donation\n * enters `pending` state. */\n receiptUrl: z.string().url().optional(),\n});\nexport type AttestCrowdfundingDonationBody = z.infer<typeof attestCrowdfundingDonationBodySchema>;\n\n/**\n * Upload (or re-upload) a receipt for a previously-attested donation.\n * Promotes a `pending` row to `verified`; for an already-`verified`\n * row it replaces the receipt.\n */\nexport const uploadCrowdfundingReceiptBodySchema = z.object({\n receiptUrl: z.string().url(),\n});\nexport type UploadCrowdfundingReceiptBody = z.infer<typeof uploadCrowdfundingReceiptBodySchema>;\n\n// ─── Listing query ─────────────────────────────────────────────────────────\n\nexport const listCrowdfundingDonationsQuerySchema = z.object({\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().max(100).optional(),\n state: crowdfundingDonationStateSchema.optional(),\n});\nexport type ListCrowdfundingDonationsQuery = z.infer<typeof listCrowdfundingDonationsQuerySchema>;\n\n/**\n * Per-donor \"My Donations\" surface — different from the per-campaign\n * donor list. Returns every donation the viewer has attested, across\n * all campaigns, so the donor can spot any row that's still\n * `pending` and upload a receipt.\n */\nexport const listMyCrowdfundingDonationsQuerySchema = z.object({\n page: z.number().int().positive().optional(),\n limit: z.number().int().positive().max(100).optional(),\n state: crowdfundingDonationStateSchema.optional(),\n});\nexport type ListMyCrowdfundingDonationsQuery = z.infer<\n typeof listMyCrowdfundingDonationsQuerySchema\n>;\n"]}
|
package/dist/feed.d.ts
CHANGED
|
@@ -972,16 +972,43 @@ export declare const feedItemSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
972
972
|
description: z.ZodString;
|
|
973
973
|
category: z.ZodEnum<{
|
|
974
974
|
other: "other";
|
|
975
|
+
environment: "environment";
|
|
975
976
|
education: "education";
|
|
977
|
+
senior_care: "senior_care";
|
|
978
|
+
legal_aid: "legal_aid";
|
|
976
979
|
medical: "medical";
|
|
977
|
-
|
|
980
|
+
maternity: "maternity";
|
|
981
|
+
special_needs: "special_needs";
|
|
978
982
|
memorial: "memorial";
|
|
979
|
-
|
|
983
|
+
disaster: "disaster";
|
|
980
984
|
civic: "civic";
|
|
985
|
+
faith: "faith";
|
|
986
|
+
sports_talent: "sports_talent";
|
|
987
|
+
animal_welfare: "animal_welfare";
|
|
988
|
+
arts_culture: "arts_culture";
|
|
981
989
|
self_improvement: "self_improvement";
|
|
990
|
+
startup_prototype: "startup_prototype";
|
|
982
991
|
}>;
|
|
983
992
|
beneficiaryName: z.ZodString;
|
|
984
993
|
beneficiaryRelation: z.ZodOptional<z.ZodString>;
|
|
994
|
+
audience: z.ZodOptional<z.ZodEnum<{
|
|
995
|
+
self: "self";
|
|
996
|
+
family: "family";
|
|
997
|
+
friend: "friend";
|
|
998
|
+
community: "community";
|
|
999
|
+
organization: "organization";
|
|
1000
|
+
}>>;
|
|
1001
|
+
categoryOther: z.ZodOptional<z.ZodString>;
|
|
1002
|
+
subCauses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1003
|
+
subCauseOther: z.ZodOptional<z.ZodString>;
|
|
1004
|
+
organizationKind: z.ZodOptional<z.ZodEnum<{
|
|
1005
|
+
other: "other";
|
|
1006
|
+
ngo: "ngo";
|
|
1007
|
+
trust: "trust";
|
|
1008
|
+
society: "society";
|
|
1009
|
+
section_8: "section_8";
|
|
1010
|
+
}>>;
|
|
1011
|
+
organizationKindOther: z.ZodOptional<z.ZodString>;
|
|
985
1012
|
images: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
986
1013
|
youtubeUrl: z.ZodOptional<z.ZodString>;
|
|
987
1014
|
goalAmountInr: z.ZodNumber;
|
|
@@ -1602,16 +1629,43 @@ export declare const feedResponseSchema: z.ZodObject<{
|
|
|
1602
1629
|
description: z.ZodString;
|
|
1603
1630
|
category: z.ZodEnum<{
|
|
1604
1631
|
other: "other";
|
|
1632
|
+
environment: "environment";
|
|
1605
1633
|
education: "education";
|
|
1634
|
+
senior_care: "senior_care";
|
|
1635
|
+
legal_aid: "legal_aid";
|
|
1606
1636
|
medical: "medical";
|
|
1607
|
-
|
|
1637
|
+
maternity: "maternity";
|
|
1638
|
+
special_needs: "special_needs";
|
|
1608
1639
|
memorial: "memorial";
|
|
1609
|
-
|
|
1640
|
+
disaster: "disaster";
|
|
1610
1641
|
civic: "civic";
|
|
1642
|
+
faith: "faith";
|
|
1643
|
+
sports_talent: "sports_talent";
|
|
1644
|
+
animal_welfare: "animal_welfare";
|
|
1645
|
+
arts_culture: "arts_culture";
|
|
1611
1646
|
self_improvement: "self_improvement";
|
|
1647
|
+
startup_prototype: "startup_prototype";
|
|
1612
1648
|
}>;
|
|
1613
1649
|
beneficiaryName: z.ZodString;
|
|
1614
1650
|
beneficiaryRelation: z.ZodOptional<z.ZodString>;
|
|
1651
|
+
audience: z.ZodOptional<z.ZodEnum<{
|
|
1652
|
+
self: "self";
|
|
1653
|
+
family: "family";
|
|
1654
|
+
friend: "friend";
|
|
1655
|
+
community: "community";
|
|
1656
|
+
organization: "organization";
|
|
1657
|
+
}>>;
|
|
1658
|
+
categoryOther: z.ZodOptional<z.ZodString>;
|
|
1659
|
+
subCauses: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1660
|
+
subCauseOther: z.ZodOptional<z.ZodString>;
|
|
1661
|
+
organizationKind: z.ZodOptional<z.ZodEnum<{
|
|
1662
|
+
other: "other";
|
|
1663
|
+
ngo: "ngo";
|
|
1664
|
+
trust: "trust";
|
|
1665
|
+
society: "society";
|
|
1666
|
+
section_8: "section_8";
|
|
1667
|
+
}>>;
|
|
1668
|
+
organizationKindOther: z.ZodOptional<z.ZodString>;
|
|
1615
1669
|
images: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1616
1670
|
youtubeUrl: z.ZodOptional<z.ZodString>;
|
|
1617
1671
|
goalAmountInr: z.ZodNumber;
|
package/dist/feed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAShD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,4IAY7B,CAAC;AACX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAAqC,CAAC;AAC1E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,4CAA6C,CAAC;AACnF,eAAO,MAAM,qBAAqB;;;;EAAmC,CAAC;AACtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8DlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,uEAM5B,CAAC;AACX,eAAO,MAAM,sBAAsB;;;;;;EAAoC,CAAC;AACxE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;GAGG;AACH,eAAO,MAAM,4BAA4B,yHAS/B,CAAC;AACX,eAAO,MAAM,yBAAyB;;;;;;;;;EAAuC,CAAC;AAC9E,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;wDAEwD;AACxD,eAAO,MAAM,qBAAqB;;;iBAKhC,CAAC;AACH,eAAO,MAAM,mBAAmB;;iBAA0C,CAAC;AAC3E,eAAO,MAAM,qBAAqB;;;iBAIhC,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgEnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;GAGG;AACH,eAAO,MAAM,yBAAyB,gDAAiD,CAAC;AACxF,eAAO,MAAM,sBAAsB;;;;;EAAoC,CAAC;AACxE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,6EAM1B,CAAC;AACX,eAAO,MAAM,oBAAoB;;;;;;EAAkC,CAAC;AACpE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;4BAG4B;AAC5B,eAAO,MAAM,mBAAmB;;;iBAI9B,CAAC;AAEH,+DAA+D;AAC/D,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AAEH;;;mBAGmB;AACnB,eAAO,MAAM,6BAA6B;;;;;iBAUxC,CAAC;AAEH;;;0DAG0D;AAC1D,eAAO,MAAM,sBAAsB;;;;iBAIjC,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6DjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAOzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAItD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;iBAShC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jansathi-community-schema",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "Shared Zod schemas + TypeScript types for the Jansathi hyperlocal community feature (feed, posts, engagement, social graph, groups, communities).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|