@1mtx/did-api-contract 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -25,16 +25,27 @@ __export(index_exports, {
25
25
  CheckinSubmitRequestSchema: () => CheckinSubmitRequestSchema,
26
26
  CheckinSubmitResponseSchema: () => CheckinSubmitResponseSchema,
27
27
  CreateEventSchema: () => CreateEventSchema,
28
+ CreateInvitationSchema: () => CreateInvitationSchema,
29
+ CreateOrganisationSchema: () => CreateOrganisationSchema,
28
30
  EventDetailResponseSchema: () => EventDetailResponseSchema,
29
31
  EventDiscoverSchema: () => EventDiscoverSchema,
30
32
  EventPublicInfoSchema: () => EventPublicInfoSchema,
31
33
  EventResponseSchema: () => EventResponseSchema,
34
+ InvitationResponseSchema: () => InvitationResponseSchema,
35
+ IssueVCSchema: () => IssueVCSchema,
36
+ JoinInvitationSchema: () => JoinInvitationSchema,
37
+ MemberResponseSchema: () => MemberResponseSchema,
38
+ OrgDetailResponseSchema: () => OrgDetailResponseSchema,
39
+ OrgListItemSchema: () => OrgListItemSchema,
40
+ OrgResponseSchema: () => OrgResponseSchema,
32
41
  ParticipantSchema: () => ParticipantSchema,
33
42
  SUPPORTED_FIELDS: () => SUPPORTED_FIELDS,
34
43
  TrackScanRequestSchema: () => TrackScanRequestSchema,
35
44
  TrackScanResponseSchema: () => TrackScanResponseSchema,
36
45
  TurnCredentialsResponseSchema: () => TurnCredentialsResponseSchema,
37
46
  UpdateEventSchema: () => UpdateEventSchema,
47
+ UpdateMemberRoleSchema: () => UpdateMemberRoleSchema,
48
+ UpdateOrganisationSchema: () => UpdateOrganisationSchema,
38
49
  UploadPresignedUrlSchema: () => UploadPresignedUrlSchema,
39
50
  VerifyRequestSchema: () => VerifyRequestSchema,
40
51
  VerifyResponseSchema: () => VerifyResponseSchema,
@@ -44,12 +55,17 @@ __export(index_exports, {
44
55
  checkinContract: () => checkinContract,
45
56
  contract: () => contract,
46
57
  eventsContract: () => eventsContract,
58
+ orgCredentialsContract: () => orgCredentialsContract,
59
+ orgCrudContract: () => orgCrudContract,
60
+ orgInvitationsContract: () => orgInvitationsContract,
61
+ orgMembersContract: () => orgMembersContract,
62
+ organisationsContract: () => organisationsContract,
47
63
  trackingContract: () => trackingContract,
48
64
  turnContract: () => turnContract,
49
65
  uploadsContract: () => uploadsContract
50
66
  });
51
67
  module.exports = __toCommonJS(index_exports);
52
- var import_core8 = require("@ts-rest/core");
68
+ var import_core9 = require("@ts-rest/core");
53
69
 
54
70
  // src/v1/auth.ts
55
71
  var import_core = require("@ts-rest/core");
@@ -57,7 +73,7 @@ var import_zod = require("zod");
57
73
  var c = (0, import_core.initContract)();
58
74
  var AuthScheme = import_zod.z.enum(["eip191"]);
59
75
  var VerifyRequestSchema = import_zod.z.object({
60
- did: import_zod.z.string().min(1).describe("DID of the authenticating user (e.g. `did:ethr:0xABC...`)"),
76
+ did: import_zod.z.string().min(1).describe("DID of the authenticating user (e.g. `did:ethr:0xABC...` or `did:vbsn:0xABC...`)"),
61
77
  signature: import_zod.z.string().min(1).describe(
62
78
  "Hex signature of the `message` string, produced by the scheme specified in the message"
63
79
  ),
@@ -90,7 +106,7 @@ var authContract = c.router({
90
106
  "|----------|-------|",
91
107
  '| **Signing scheme** | ECDSA secp256k1 (`scheme: "eip191"`) |',
92
108
  "| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r\u2016s\u2016v`, hex-encoded with `0x` prefix) |",
93
- "| **DID method** | `did:ethr` \u2014 the Ethereum address in the DID must match the signer |",
109
+ "| **DID method** | `did:ethr` or `did:vbsn` \u2014 the Ethereum address in the DID must match the signer |",
94
110
  "| **Message encoding** | UTF-8 JSON string |",
95
111
  "",
96
112
  "### Steps",
@@ -460,7 +476,8 @@ var appConfigContract = c7.router({
460
476
  path: "/v1/config/app",
461
477
  responses: {
462
478
  200: import_zod7.z.object({
463
- demoMode: import_zod7.z.object({ enabled: import_zod7.z.boolean() })
479
+ demoMode: import_zod7.z.object({ enabled: import_zod7.z.boolean() }),
480
+ publicEvents: import_zod7.z.object({ enabled: import_zod7.z.boolean() })
464
481
  })
465
482
  },
466
483
  summary: "Get app configuration (public)",
@@ -468,17 +485,322 @@ var appConfigContract = c7.router({
468
485
  }
469
486
  });
470
487
 
471
- // src/index.ts
488
+ // src/v1/organisations.ts
489
+ var import_core8 = require("@ts-rest/core");
490
+ var import_zod8 = require("zod");
472
491
  var c8 = (0, import_core8.initContract)();
473
- var contract = c8.router({
474
- v1: c8.router({
492
+ var SECURITY2 = [{ bearerAuth: [] }];
493
+ var CreateOrganisationSchema = import_zod8.z.object({
494
+ name: import_zod8.z.string().min(1).max(255),
495
+ description: import_zod8.z.string().optional(),
496
+ verifiablePresentation: import_zod8.z.record(import_zod8.z.unknown())
497
+ });
498
+ var UpdateOrganisationSchema = import_zod8.z.object({
499
+ name: import_zod8.z.string().min(1).max(255).optional(),
500
+ description: import_zod8.z.string().nullable().optional(),
501
+ avatarUrl: import_zod8.z.string().nullable().optional()
502
+ });
503
+ var OrgResponseSchema = import_zod8.z.object({
504
+ id: import_zod8.z.string(),
505
+ name: import_zod8.z.string(),
506
+ description: import_zod8.z.string().nullable(),
507
+ avatarUrl: import_zod8.z.string().nullable(),
508
+ didUri: import_zod8.z.string().nullable(),
509
+ memberCount: import_zod8.z.number(),
510
+ createdAt: import_zod8.z.string(),
511
+ updatedAt: import_zod8.z.string()
512
+ });
513
+ var OrgListItemSchema = OrgResponseSchema.extend({
514
+ role: import_zod8.z.enum(["OWNER", "ADMIN", "ISSUER", "MEMBER"])
515
+ });
516
+ var OrgDetailResponseSchema = OrgListItemSchema.extend({
517
+ members: import_zod8.z.array(import_zod8.z.object({
518
+ id: import_zod8.z.string(),
519
+ userId: import_zod8.z.string(),
520
+ displayName: import_zod8.z.string().nullable(),
521
+ role: import_zod8.z.enum(["OWNER", "ADMIN", "ISSUER", "MEMBER"]),
522
+ joinedAt: import_zod8.z.string()
523
+ }))
524
+ });
525
+ var MemberResponseSchema = import_zod8.z.object({
526
+ id: import_zod8.z.string(),
527
+ userId: import_zod8.z.string(),
528
+ displayName: import_zod8.z.string().nullable(),
529
+ role: import_zod8.z.enum(["OWNER", "ADMIN", "ISSUER", "MEMBER"]),
530
+ joinedAt: import_zod8.z.string()
531
+ });
532
+ var UpdateMemberRoleSchema = import_zod8.z.object({
533
+ role: import_zod8.z.enum(["ADMIN", "ISSUER", "MEMBER"])
534
+ });
535
+ var CreateInvitationSchema = import_zod8.z.object({
536
+ expiresInDays: import_zod8.z.number().int().positive().default(7).optional()
537
+ });
538
+ var InvitationResponseSchema = import_zod8.z.object({
539
+ id: import_zod8.z.string(),
540
+ orgId: import_zod8.z.string(),
541
+ orgName: import_zod8.z.string(),
542
+ token: import_zod8.z.string(),
543
+ status: import_zod8.z.enum(["PENDING", "SUBMITTED", "ACCEPTED", "DECLINED", "EXPIRED"]),
544
+ inviteeDisplayName: import_zod8.z.string().nullable(),
545
+ createdAt: import_zod8.z.string(),
546
+ expiresAt: import_zod8.z.string()
547
+ });
548
+ var JoinInvitationSchema = import_zod8.z.object({
549
+ verifiablePresentation: import_zod8.z.record(import_zod8.z.unknown())
550
+ });
551
+ var IssueVCSchema = import_zod8.z.object({
552
+ holderDid: import_zod8.z.string(),
553
+ credentialSubject: import_zod8.z.record(import_zod8.z.unknown()),
554
+ type: import_zod8.z.array(import_zod8.z.string()).optional()
555
+ });
556
+ var ErrorSchema = import_zod8.z.object({ message: import_zod8.z.string() });
557
+ var VpRequestResponseSchema = import_zod8.z.object({
558
+ vpRequest: import_zod8.z.record(import_zod8.z.unknown()),
559
+ expiresAt: import_zod8.z.string()
560
+ });
561
+ var orgCrudContract = c8.router({
562
+ createVpRequest: {
563
+ method: "POST",
564
+ path: "/v1/organisations/vp-request",
565
+ body: import_zod8.z.object({}),
566
+ responses: {
567
+ 200: VpRequestResponseSchema,
568
+ 401: ErrorSchema
569
+ },
570
+ summary: "Get VP request for creating an organisation",
571
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
572
+ },
573
+ create: {
574
+ method: "POST",
575
+ path: "/v1/organisations",
576
+ body: CreateOrganisationSchema,
577
+ responses: {
578
+ 201: OrgResponseSchema,
579
+ 400: ErrorSchema,
580
+ 401: ErrorSchema
581
+ },
582
+ summary: "Create a new organisation (requires CCCD VP)",
583
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
584
+ },
585
+ list: {
586
+ method: "GET",
587
+ path: "/v1/organisations",
588
+ responses: {
589
+ 200: import_zod8.z.array(OrgListItemSchema),
590
+ 401: ErrorSchema
591
+ },
592
+ summary: "List user's organisations",
593
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
594
+ },
595
+ getById: {
596
+ method: "GET",
597
+ path: "/v1/organisations/:orgId",
598
+ responses: {
599
+ 200: OrgDetailResponseSchema,
600
+ 401: ErrorSchema,
601
+ 403: ErrorSchema,
602
+ 404: ErrorSchema
603
+ },
604
+ summary: "Get organisation details (members only)",
605
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
606
+ },
607
+ update: {
608
+ method: "PATCH",
609
+ path: "/v1/organisations/:orgId",
610
+ body: UpdateOrganisationSchema,
611
+ responses: {
612
+ 200: OrgResponseSchema,
613
+ 400: ErrorSchema,
614
+ 401: ErrorSchema,
615
+ 403: ErrorSchema,
616
+ 404: ErrorSchema
617
+ },
618
+ summary: "Update organisation details (owner/admin only)",
619
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
620
+ },
621
+ delete: {
622
+ method: "DELETE",
623
+ path: "/v1/organisations/:orgId",
624
+ body: c8.noBody(),
625
+ responses: {
626
+ 204: import_zod8.z.undefined(),
627
+ 401: ErrorSchema,
628
+ 403: ErrorSchema,
629
+ 404: ErrorSchema
630
+ },
631
+ summary: "Delete organisation (owner only)",
632
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
633
+ }
634
+ });
635
+ var orgMembersContract = c8.router({
636
+ listMembers: {
637
+ method: "GET",
638
+ path: "/v1/organisations/:orgId/members",
639
+ responses: {
640
+ 200: import_zod8.z.array(MemberResponseSchema),
641
+ 401: ErrorSchema,
642
+ 403: ErrorSchema
643
+ },
644
+ summary: "List organisation members",
645
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
646
+ },
647
+ updateMemberRole: {
648
+ method: "PATCH",
649
+ path: "/v1/organisations/:orgId/members/:memberId",
650
+ body: UpdateMemberRoleSchema,
651
+ responses: {
652
+ 200: MemberResponseSchema,
653
+ 400: ErrorSchema,
654
+ 401: ErrorSchema,
655
+ 403: ErrorSchema,
656
+ 404: ErrorSchema
657
+ },
658
+ summary: "Update member role (owner/admin only)",
659
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
660
+ },
661
+ removeMember: {
662
+ method: "DELETE",
663
+ path: "/v1/organisations/:orgId/members/:memberId",
664
+ body: c8.noBody(),
665
+ responses: {
666
+ 204: import_zod8.z.undefined(),
667
+ 400: ErrorSchema,
668
+ 401: ErrorSchema,
669
+ 403: ErrorSchema,
670
+ 404: ErrorSchema
671
+ },
672
+ summary: "Remove member from organisation (owner/admin only)",
673
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
674
+ }
675
+ });
676
+ var orgInvitationsContract = c8.router({
677
+ createInvitation: {
678
+ method: "POST",
679
+ path: "/v1/organisations/:orgId/invitations",
680
+ body: CreateInvitationSchema,
681
+ responses: {
682
+ 201: InvitationResponseSchema,
683
+ 401: ErrorSchema,
684
+ 403: ErrorSchema
685
+ },
686
+ summary: "Create invitation (owner/admin only)",
687
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
688
+ },
689
+ listInvitations: {
690
+ method: "GET",
691
+ path: "/v1/organisations/:orgId/invitations",
692
+ responses: {
693
+ 200: import_zod8.z.array(InvitationResponseSchema),
694
+ 401: ErrorSchema,
695
+ 403: ErrorSchema
696
+ },
697
+ summary: "List pending invitations (owner/admin only)",
698
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
699
+ },
700
+ joinVpRequest: {
701
+ method: "POST",
702
+ path: "/v1/organisations/invitations/:token/vp-request",
703
+ body: import_zod8.z.object({}),
704
+ responses: {
705
+ 200: VpRequestResponseSchema,
706
+ 401: ErrorSchema,
707
+ 404: ErrorSchema,
708
+ 410: ErrorSchema
709
+ },
710
+ summary: "Get VP request for joining via invitation",
711
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
712
+ },
713
+ joinInvitation: {
714
+ method: "POST",
715
+ path: "/v1/organisations/invitations/:token/join",
716
+ body: JoinInvitationSchema,
717
+ responses: {
718
+ 200: import_zod8.z.object({ message: import_zod8.z.string() }),
719
+ 400: ErrorSchema,
720
+ 401: ErrorSchema,
721
+ 410: ErrorSchema
722
+ },
723
+ summary: "Invitee submits CCCD VP to join",
724
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
725
+ },
726
+ acceptInvitation: {
727
+ method: "POST",
728
+ path: "/v1/organisations/:orgId/invitations/:invitationId/accept",
729
+ body: import_zod8.z.object({}),
730
+ responses: {
731
+ 200: import_zod8.z.object({ message: import_zod8.z.string(), memberId: import_zod8.z.string() }),
732
+ 401: ErrorSchema,
733
+ 403: ErrorSchema,
734
+ 409: ErrorSchema
735
+ },
736
+ summary: "Accept invitation (owner/admin only)",
737
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
738
+ },
739
+ declineInvitation: {
740
+ method: "POST",
741
+ path: "/v1/organisations/:orgId/invitations/:invitationId/decline",
742
+ body: import_zod8.z.object({}),
743
+ responses: {
744
+ 200: import_zod8.z.object({ message: import_zod8.z.string() }),
745
+ 401: ErrorSchema,
746
+ 403: ErrorSchema,
747
+ 409: ErrorSchema
748
+ },
749
+ summary: "Decline invitation (owner/admin only)",
750
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
751
+ }
752
+ });
753
+ var orgCredentialsContract = c8.router({
754
+ issueVC: {
755
+ method: "POST",
756
+ path: "/v1/organisations/:orgId/credentials/issue",
757
+ body: IssueVCSchema,
758
+ responses: {
759
+ 201: import_zod8.z.record(import_zod8.z.unknown()),
760
+ 400: ErrorSchema,
761
+ 401: ErrorSchema,
762
+ 403: ErrorSchema
763
+ },
764
+ summary: "Issue VC on behalf of organisation (owner/admin/issuer)",
765
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
766
+ },
767
+ listIssuedCredentials: {
768
+ method: "GET",
769
+ path: "/v1/organisations/:orgId/credentials",
770
+ responses: {
771
+ 200: import_zod8.z.array(import_zod8.z.object({
772
+ id: import_zod8.z.string(),
773
+ holderDid: import_zod8.z.string(),
774
+ issuingMemberId: import_zod8.z.string(),
775
+ credentialJson: import_zod8.z.record(import_zod8.z.unknown()),
776
+ issuedAt: import_zod8.z.string()
777
+ })),
778
+ 401: ErrorSchema,
779
+ 403: ErrorSchema
780
+ },
781
+ summary: "List issued credentials (owner/admin only)",
782
+ metadata: { openApiTags: ["Organisations"], openApiSecurity: SECURITY2 }
783
+ }
784
+ });
785
+ var organisationsContract = c8.router({
786
+ crud: orgCrudContract,
787
+ members: orgMembersContract,
788
+ invitations: orgInvitationsContract,
789
+ credentials: orgCredentialsContract
790
+ });
791
+
792
+ // src/index.ts
793
+ var c9 = (0, import_core9.initContract)();
794
+ var contract = c9.router({
795
+ v1: c9.router({
475
796
  auth: authContract,
476
797
  events: eventsContract,
477
798
  checkin: checkinContract,
478
799
  turn: turnContract,
479
800
  uploads: uploadsContract,
480
801
  tracking: trackingContract,
481
- config: appConfigContract
802
+ config: appConfigContract,
803
+ organisations: organisationsContract
482
804
  })
483
805
  });
484
806
  // Annotate the CommonJS export names for ESM import in node:
@@ -488,16 +810,27 @@ var contract = c8.router({
488
810
  CheckinSubmitRequestSchema,
489
811
  CheckinSubmitResponseSchema,
490
812
  CreateEventSchema,
813
+ CreateInvitationSchema,
814
+ CreateOrganisationSchema,
491
815
  EventDetailResponseSchema,
492
816
  EventDiscoverSchema,
493
817
  EventPublicInfoSchema,
494
818
  EventResponseSchema,
819
+ InvitationResponseSchema,
820
+ IssueVCSchema,
821
+ JoinInvitationSchema,
822
+ MemberResponseSchema,
823
+ OrgDetailResponseSchema,
824
+ OrgListItemSchema,
825
+ OrgResponseSchema,
495
826
  ParticipantSchema,
496
827
  SUPPORTED_FIELDS,
497
828
  TrackScanRequestSchema,
498
829
  TrackScanResponseSchema,
499
830
  TurnCredentialsResponseSchema,
500
831
  UpdateEventSchema,
832
+ UpdateMemberRoleSchema,
833
+ UpdateOrganisationSchema,
501
834
  UploadPresignedUrlSchema,
502
835
  VerifyRequestSchema,
503
836
  VerifyResponseSchema,
@@ -507,6 +840,11 @@ var contract = c8.router({
507
840
  checkinContract,
508
841
  contract,
509
842
  eventsContract,
843
+ orgCredentialsContract,
844
+ orgCrudContract,
845
+ orgInvitationsContract,
846
+ orgMembersContract,
847
+ organisationsContract,
510
848
  trackingContract,
511
849
  turnContract,
512
850
  uploadsContract
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/v1/auth.ts","../src/v1/events.ts","../src/v1/checkin.ts","../src/v1/turn.ts","../src/v1/uploads.ts","../src/v1/tracking.ts","../src/v1/config.ts"],"sourcesContent":["import { initContract } from '@ts-rest/core';\nimport { authContract } from './v1/auth';\nimport { eventsContract } from './v1/events';\nimport { checkinContract } from './v1/checkin';\nimport { turnContract } from './v1/turn';\nimport { uploadsContract } from './v1/uploads';\nimport { trackingContract } from './v1/tracking';\nimport { appConfigContract } from './v1/config';\n\nexport * from './v1';\n\nconst c = initContract();\n\nexport const contract = c.router({\n v1: c.router({\n auth: authContract,\n events: eventsContract,\n checkin: checkinContract,\n turn: turnContract,\n uploads: uploadsContract,\n tracking: trackingContract,\n config: appConfigContract,\n }),\n});\n\nexport type Contract = typeof contract;\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const AuthScheme = z.enum(['eip191']);\nexport type AuthScheme = z.infer<typeof AuthScheme>;\n\nexport const VerifyRequestSchema = z.object({\n did: z.string().min(1).describe('DID of the authenticating user (e.g. `did:ethr:0xABC...`)'),\n signature: z\n .string()\n .min(1)\n .describe(\n 'Hex signature of the `message` string, produced by the scheme specified in the message',\n ),\n message: z\n .string()\n .min(1)\n .describe(\n 'Canonical JSON string that was signed. Must be `JSON.stringify({ domain, did, issuedAt, scheme })` where `issuedAt` is an ISO-8601 UTC timestamp within the last 60 seconds and `scheme` is the signing scheme used.',\n ),\n});\n\nexport const VerifyResponseSchema = z.object({\n accessToken: z.string(),\n});\n\nexport const authContract = c.router({\n verify: {\n method: 'POST',\n path: '/v1/auth/verify',\n body: VerifyRequestSchema,\n responses: {\n 200: VerifyResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Verify DID signature and receive JWT',\n description: [\n '## Authentication Flow (1-turn)',\n '',\n 'The client constructs a JSON message, signs it with their Ethereum private key, and submits everything in a single request.',\n '',\n '### Crypto Suite',\n '',\n '| Property | Value |',\n '|----------|-------|',\n '| **Signing scheme** | ECDSA secp256k1 (`scheme: \"eip191\"`) |',\n '| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r‖s‖v`, hex-encoded with `0x` prefix) |',\n '| **DID method** | `did:ethr` — the Ethereum address in the DID must match the signer |',\n '| **Message encoding** | UTF-8 JSON string |',\n '',\n '### Steps',\n '',\n '1. **Build the message** — a canonical JSON string:',\n ' ```json',\n ' {\"domain\":\"1Matrix Events\",\"did\":\"did:ethr:0xYOUR_ADDRESS\",\"issuedAt\":\"2026-02-25T12:00:00.000Z\",\"scheme\":\"eip191\"}',\n ' ```',\n ' Use the `buildAuthMessage(did)` helper from `@1mtx/did-api-contract`, or construct it manually.',\n '',\n '2. **Sign the message** using EIP-191 `personal_sign`:',\n ' ```ts',\n ' // ethers.js v6',\n ' const signature = await wallet.signMessage(message);',\n ' ```',\n '',\n '3. **POST** `{ did, signature, message }` to this endpoint.',\n '',\n '### Validation Rules',\n '',\n '- `issuedAt` must be within **60 seconds in the past** or **5 seconds in the future** (clock tolerance).',\n '- `domain` must equal `\"1Matrix Events\"`.',\n '- `did` in the message must match the `did` in the request body.',\n '- `scheme` must be a supported value (currently only `\"eip191\"`).',\n '- No extra JSON keys beyond `domain`, `did`, `issuedAt`, `scheme` are allowed.',\n '',\n '### Error Codes',\n '',\n '| Status | Reason |',\n '|--------|--------|',\n '| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |',\n '| `401` | Message expired, DID mismatch, invalid or non-matching signature |',\n ].join('\\n'),\n metadata: { openApiTags: ['Auth'], openApiSecurity: [] },\n },\n});\n\n/**\n * Builds the canonical JSON string to be signed by the client.\n *\n * Usage:\n * const message = buildAuthMessage(did);\n * const signature = await wallet.signMessage(message);\n * // POST /v1/auth/verify { did, signature, message }\n */\nexport function buildAuthMessage(\n did: string,\n scheme: AuthScheme = 'eip191',\n domain = '1Matrix Events',\n issuedAt: string = new Date().toISOString(),\n): string {\n return JSON.stringify({ domain, did, issuedAt, scheme });\n}\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const SUPPORTED_FIELDS = [\n 'documentNumber',\n 'fullName',\n 'dateOfBirth',\n 'gender',\n 'nationality',\n 'ethnicity',\n 'hometown',\n 'permanentAddress',\n 'identifyingMarks',\n 'issueDate',\n 'expiryDate',\n 'fatherName',\n 'motherName',\n 'photo',\n] as const;\n\nexport type SupportedField = (typeof SUPPORTED_FIELDS)[number];\n\nexport const CreateEventSchema = z.object({\n name: z.string().min(1).max(255).describe('Tên sự kiện'),\n coverImageId: z.string().optional().describe('ID ảnh bìa sự kiện'),\n description: z.string().optional().describe('Mô tả sự kiện'),\n maxGuests: z.number().int().positive().describe('Số lượng khách tối đa'),\n startDateTime: z.string().datetime().describe('Thời gian bắt đầu sự kiện'),\n endDateTime: z.string().datetime().describe('Thời gian kết thúc sự kiện'),\n requestedFields: z.array(z.enum(SUPPORTED_FIELDS)).min(1).describe('Các trường dữ liệu yêu cầu xác thực'),\n});\n\nexport const UpdateEventSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n coverImageId: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n maxGuests: z.number().int().positive().optional(),\n startDateTime: z.string().datetime().optional(),\n endDateTime: z.string().datetime().optional(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']).optional(),\n});\n\nexport const ParticipantSchema = z.object({\n id: z.string(),\n holderDid: z.string(),\n disclosedFields: z.record(z.unknown()),\n checkedInAt: z.string(),\n});\n\nexport const EventResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n thumbnailUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n startDateTime: z.string(),\n endDateTime: z.string().nullable(),\n userId: z.string(),\n requestedFields: z.array(z.string()),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n participantCount: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const EventDetailResponseSchema = EventResponseSchema.extend({\n participants: z.array(ParticipantSchema),\n vpRequest: z.record(z.unknown()),\n});\n\nexport const EventDiscoverSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n thumbnailUrl: z.string().nullable(),\n description: z.string().nullable(),\n startDateTime: z.string(),\n endDateTime: z.string().nullable(),\n participantCount: z.number(),\n});\n\nconst SECURITY = [{ bearerAuth: [] }];\n\nexport const eventsContract = c.router({\n discover: {\n method: 'GET',\n path: '/v1/events/public/discover',\n responses: {\n 200: z.array(EventDiscoverSchema),\n },\n summary: 'List public events for discovery (public)',\n metadata: { openApiTags: ['Events'], openApiSecurity: [] },\n },\n create: {\n method: 'POST',\n path: '/v1/events',\n body: CreateEventSchema,\n responses: {\n 201: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Create a new event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n list: {\n method: 'GET',\n path: '/v1/events',\n responses: {\n 200: z.array(EventResponseSchema),\n 401: z.object({ message: z.string() }),\n },\n summary: \"List authenticated organiser's events\",\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getById: {\n method: 'GET',\n path: '/v1/events/:id',\n responses: {\n 200: EventDetailResponseSchema,\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event details including participants (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n update: {\n method: 'PATCH',\n path: '/v1/events/:id',\n body: UpdateEventSchema,\n responses: {\n 200: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Update event fields (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n delete: {\n method: 'DELETE',\n path: '/v1/events/:id',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Delete event and all related data (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getCredentials: {\n method: 'GET',\n path: '/v1/events/:id/credentials',\n responses: {\n 200: z.array(z.record(z.unknown())),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'List issued VCs for event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const EventPublicInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n thumbnailUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n startDateTime: z.string(),\n endDateTime: z.string().nullable(),\n currentGuests: z.number(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n});\n\nexport const CheckinInfoResponseSchema = z.object({\n event: EventPublicInfoSchema,\n vpRequest: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitRequestSchema = z.object({\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitResponseSchema = z.object({\n success: z.literal(true),\n credential: z.record(z.unknown()),\n});\n\nexport const checkinContract = c.router({\n info: {\n method: 'GET',\n path: '/v1/checkin/:eventId/info',\n responses: {\n 200: CheckinInfoResponseSchema,\n 400: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event info and VP request for check-in (public)',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [] },\n },\n submit: {\n method: 'POST',\n path: '/v1/checkin/:eventId/submit',\n body: CheckinSubmitRequestSchema,\n responses: {\n 200: CheckinSubmitResponseSchema,\n 400: z.object({ message: z.string(), errors: z.array(z.string()).optional() }),\n 401: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n 409: z.object({ message: z.string() }),\n },\n summary: 'Submit VP for event check-in — issues participation VC on success',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n myCheckins: {\n method: 'GET',\n path: '/v1/checkin/my',\n responses: {\n 200: z.array(\n z.object({\n id: z.string(),\n eventId: z.string(),\n checkedInAt: z.string(),\n disclosedFields: z.record(z.unknown()),\n event: EventPublicInfoSchema,\n }),\n ),\n 401: z.object({ message: z.string() }),\n },\n summary: 'List authenticated user check-ins',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nconst IceServerSchema = z.object({\n urls: z.union([z.string(), z.array(z.string())]),\n username: z.string().optional(),\n credential: z.string().optional(),\n});\n\nexport const TurnCredentialsResponseSchema = z.object({\n iceServers: z.array(IceServerSchema),\n});\n\nexport const turnContract = c.router({\n credentials: {\n method: 'GET',\n path: '/v1/turn/credentials',\n responses: {\n 200: TurnCredentialsResponseSchema,\n 401: z.object({ message: z.string() }),\n 502: z.object({ message: z.string() }),\n },\n summary: 'Get Cloudflare TURN credentials for WebRTC (authenticated)',\n metadata: { openApiTags: ['TURN'] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const UploadPresignedUrlSchema = z.object({\n fileId: z.string(),\n original: z.object({\n uploadUrl: z.string(),\n key: z.string(),\n publicUrl: z.string(),\n }),\n resize: z.object({\n uploadUrl: z.string(),\n key: z.string(),\n publicUrl: z.string(),\n }),\n});\n\nexport const uploadsContract = c.router(\n {\n generatePresignedUrls: {\n method: 'POST',\n path: '/urls',\n body: z.object({}),\n responses: {\n 201: UploadPresignedUrlSchema,\n },\n summary: 'Generate pre-signed URLs for event image upload',\n metadata: { openApiTags: ['Uploads'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n },\n {\n pathPrefix: '/v1/uploads',\n },\n);\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const TrackScanRequestSchema = z.object({\n platform: z.string(),\n appVersion: z.string().optional(),\n});\n\nexport const TrackScanResponseSchema = z.object({\n id: z.string(),\n});\n\nexport const trackingContract = c.router({\n scan: {\n method: 'POST',\n path: '/v1/tracking/scan',\n body: TrackScanRequestSchema,\n responses: {\n 201: TrackScanResponseSchema,\n 401: z.object({ message: z.string() }),\n },\n summary: 'Record a successful NFC scan event',\n metadata: { openApiTags: ['Tracking'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const appConfigContract = c.router({\n appConfig: {\n method: 'GET',\n path: '/v1/config/app',\n responses: {\n 200: z.object({\n demoMode: z.object({ enabled: z.boolean() }),\n }),\n },\n summary: 'Get app configuration (public)',\n metadata: { openApiTags: ['Config'], openApiSecurity: [] },\n },\n});\n"],"mappings":"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","names":["import_core","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","c"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/v1/auth.ts","../src/v1/events.ts","../src/v1/checkin.ts","../src/v1/turn.ts","../src/v1/uploads.ts","../src/v1/tracking.ts","../src/v1/config.ts","../src/v1/organisations.ts"],"sourcesContent":["import { initContract } from '@ts-rest/core';\nimport { authContract } from './v1/auth';\nimport { eventsContract } from './v1/events';\nimport { checkinContract } from './v1/checkin';\nimport { turnContract } from './v1/turn';\nimport { uploadsContract } from './v1/uploads';\nimport { trackingContract } from './v1/tracking';\nimport { appConfigContract } from './v1/config';\nimport { organisationsContract } from './v1/organisations';\n\nexport * from './v1';\n\nconst c = initContract();\n\nexport const contract = c.router({\n v1: c.router({\n auth: authContract,\n events: eventsContract,\n checkin: checkinContract,\n turn: turnContract,\n uploads: uploadsContract,\n tracking: trackingContract,\n config: appConfigContract,\n organisations: organisationsContract,\n }),\n});\n\nexport type Contract = typeof contract;\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const AuthScheme = z.enum(['eip191']);\nexport type AuthScheme = z.infer<typeof AuthScheme>;\n\nexport const VerifyRequestSchema = z.object({\n did: z.string().min(1).describe('DID of the authenticating user (e.g. `did:ethr:0xABC...` or `did:vbsn:0xABC...`)'),\n signature: z\n .string()\n .min(1)\n .describe(\n 'Hex signature of the `message` string, produced by the scheme specified in the message',\n ),\n message: z\n .string()\n .min(1)\n .describe(\n 'Canonical JSON string that was signed. Must be `JSON.stringify({ domain, did, issuedAt, scheme })` where `issuedAt` is an ISO-8601 UTC timestamp within the last 60 seconds and `scheme` is the signing scheme used.',\n ),\n});\n\nexport const VerifyResponseSchema = z.object({\n accessToken: z.string(),\n});\n\nexport const authContract = c.router({\n verify: {\n method: 'POST',\n path: '/v1/auth/verify',\n body: VerifyRequestSchema,\n responses: {\n 200: VerifyResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Verify DID signature and receive JWT',\n description: [\n '## Authentication Flow (1-turn)',\n '',\n 'The client constructs a JSON message, signs it with their Ethereum private key, and submits everything in a single request.',\n '',\n '### Crypto Suite',\n '',\n '| Property | Value |',\n '|----------|-------|',\n '| **Signing scheme** | ECDSA secp256k1 (`scheme: \"eip191\"`) |',\n '| **Signature format** | [EIP-191](https://eips.ethereum.org/EIPS/eip-191) `personal_sign` (65-byte `r‖s‖v`, hex-encoded with `0x` prefix) |',\n '| **DID method** | `did:ethr` or `did:vbsn` — the Ethereum address in the DID must match the signer |',\n '| **Message encoding** | UTF-8 JSON string |',\n '',\n '### Steps',\n '',\n '1. **Build the message** — a canonical JSON string:',\n ' ```json',\n ' {\"domain\":\"1Matrix Events\",\"did\":\"did:ethr:0xYOUR_ADDRESS\",\"issuedAt\":\"2026-02-25T12:00:00.000Z\",\"scheme\":\"eip191\"}',\n ' ```',\n ' Use the `buildAuthMessage(did)` helper from `@1mtx/did-api-contract`, or construct it manually.',\n '',\n '2. **Sign the message** using EIP-191 `personal_sign`:',\n ' ```ts',\n ' // ethers.js v6',\n ' const signature = await wallet.signMessage(message);',\n ' ```',\n '',\n '3. **POST** `{ did, signature, message }` to this endpoint.',\n '',\n '### Validation Rules',\n '',\n '- `issuedAt` must be within **60 seconds in the past** or **5 seconds in the future** (clock tolerance).',\n '- `domain` must equal `\"1Matrix Events\"`.',\n '- `did` in the message must match the `did` in the request body.',\n '- `scheme` must be a supported value (currently only `\"eip191\"`).',\n '- No extra JSON keys beyond `domain`, `did`, `issuedAt`, `scheme` are allowed.',\n '',\n '### Error Codes',\n '',\n '| Status | Reason |',\n '|--------|--------|',\n '| `400` | Invalid message format (bad JSON, extra keys, wrong domain) |',\n '| `401` | Message expired, DID mismatch, invalid or non-matching signature |',\n ].join('\\n'),\n metadata: { openApiTags: ['Auth'], openApiSecurity: [] },\n },\n});\n\n/**\n * Builds the canonical JSON string to be signed by the client.\n *\n * Usage:\n * const message = buildAuthMessage(did);\n * const signature = await wallet.signMessage(message);\n * // POST /v1/auth/verify { did, signature, message }\n */\nexport function buildAuthMessage(\n did: string,\n scheme: AuthScheme = 'eip191',\n domain = '1Matrix Events',\n issuedAt: string = new Date().toISOString(),\n): string {\n return JSON.stringify({ domain, did, issuedAt, scheme });\n}\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const SUPPORTED_FIELDS = [\n 'documentNumber',\n 'fullName',\n 'dateOfBirth',\n 'gender',\n 'nationality',\n 'ethnicity',\n 'hometown',\n 'permanentAddress',\n 'identifyingMarks',\n 'issueDate',\n 'expiryDate',\n 'fatherName',\n 'motherName',\n 'photo',\n] as const;\n\nexport type SupportedField = (typeof SUPPORTED_FIELDS)[number];\n\nexport const CreateEventSchema = z.object({\n name: z.string().min(1).max(255).describe('Tên sự kiện'),\n coverImageId: z.string().optional().describe('ID ảnh bìa sự kiện'),\n description: z.string().optional().describe('Mô tả sự kiện'),\n maxGuests: z.number().int().positive().describe('Số lượng khách tối đa'),\n startDateTime: z.string().datetime().describe('Thời gian bắt đầu sự kiện'),\n endDateTime: z.string().datetime().describe('Thời gian kết thúc sự kiện'),\n requestedFields: z.array(z.enum(SUPPORTED_FIELDS)).min(1).describe('Các trường dữ liệu yêu cầu xác thực'),\n});\n\nexport const UpdateEventSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n coverImageId: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n maxGuests: z.number().int().positive().optional(),\n startDateTime: z.string().datetime().optional(),\n endDateTime: z.string().datetime().optional(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']).optional(),\n});\n\nexport const ParticipantSchema = z.object({\n id: z.string(),\n holderDid: z.string(),\n disclosedFields: z.record(z.unknown()),\n checkedInAt: z.string(),\n});\n\nexport const EventResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n thumbnailUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n startDateTime: z.string(),\n endDateTime: z.string().nullable(),\n userId: z.string(),\n requestedFields: z.array(z.string()),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n participantCount: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const EventDetailResponseSchema = EventResponseSchema.extend({\n participants: z.array(ParticipantSchema),\n vpRequest: z.record(z.unknown()),\n});\n\nexport const EventDiscoverSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n thumbnailUrl: z.string().nullable(),\n description: z.string().nullable(),\n startDateTime: z.string(),\n endDateTime: z.string().nullable(),\n participantCount: z.number(),\n});\n\nconst SECURITY = [{ bearerAuth: [] }];\n\nexport const eventsContract = c.router({\n discover: {\n method: 'GET',\n path: '/v1/events/public/discover',\n responses: {\n 200: z.array(EventDiscoverSchema),\n },\n summary: 'List public events for discovery (public)',\n metadata: { openApiTags: ['Events'], openApiSecurity: [] },\n },\n create: {\n method: 'POST',\n path: '/v1/events',\n body: CreateEventSchema,\n responses: {\n 201: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n },\n summary: 'Create a new event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n list: {\n method: 'GET',\n path: '/v1/events',\n responses: {\n 200: z.array(EventResponseSchema),\n 401: z.object({ message: z.string() }),\n },\n summary: \"List authenticated organiser's events\",\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getById: {\n method: 'GET',\n path: '/v1/events/:id',\n responses: {\n 200: EventDetailResponseSchema,\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event details including participants (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n update: {\n method: 'PATCH',\n path: '/v1/events/:id',\n body: UpdateEventSchema,\n responses: {\n 200: EventResponseSchema,\n 400: z.object({ message: z.string() }),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Update event fields (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n delete: {\n method: 'DELETE',\n path: '/v1/events/:id',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Delete event and all related data (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n getCredentials: {\n method: 'GET',\n path: '/v1/events/:id/credentials',\n responses: {\n 200: z.array(z.record(z.unknown())),\n 401: z.object({ message: z.string() }),\n 403: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'List issued VCs for event (organiser only)',\n metadata: { openApiTags: ['Events'], openApiSecurity: SECURITY },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const EventPublicInfoSchema = z.object({\n id: z.string(),\n name: z.string(),\n coverImageUrl: z.string().nullable(),\n thumbnailUrl: z.string().nullable(),\n description: z.string().nullable(),\n maxGuests: z.number(),\n startDateTime: z.string(),\n endDateTime: z.string().nullable(),\n currentGuests: z.number(),\n status: z.enum(['ACTIVE', 'CANCELLED', 'COMPLETED']),\n});\n\nexport const CheckinInfoResponseSchema = z.object({\n event: EventPublicInfoSchema,\n vpRequest: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitRequestSchema = z.object({\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const CheckinSubmitResponseSchema = z.object({\n success: z.literal(true),\n credential: z.record(z.unknown()),\n});\n\nexport const checkinContract = c.router({\n info: {\n method: 'GET',\n path: '/v1/checkin/:eventId/info',\n responses: {\n 200: CheckinInfoResponseSchema,\n 400: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n },\n summary: 'Get event info and VP request for check-in (public)',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [] },\n },\n submit: {\n method: 'POST',\n path: '/v1/checkin/:eventId/submit',\n body: CheckinSubmitRequestSchema,\n responses: {\n 200: CheckinSubmitResponseSchema,\n 400: z.object({ message: z.string(), errors: z.array(z.string()).optional() }),\n 401: z.object({ message: z.string() }),\n 404: z.object({ message: z.string() }),\n 409: z.object({ message: z.string() }),\n },\n summary: 'Submit VP for event check-in — issues participation VC on success',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n myCheckins: {\n method: 'GET',\n path: '/v1/checkin/my',\n responses: {\n 200: z.array(\n z.object({\n id: z.string(),\n eventId: z.string(),\n checkedInAt: z.string(),\n disclosedFields: z.record(z.unknown()),\n event: EventPublicInfoSchema,\n }),\n ),\n 401: z.object({ message: z.string() }),\n },\n summary: 'List authenticated user check-ins',\n metadata: { openApiTags: ['Check-in'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nconst IceServerSchema = z.object({\n urls: z.union([z.string(), z.array(z.string())]),\n username: z.string().optional(),\n credential: z.string().optional(),\n});\n\nexport const TurnCredentialsResponseSchema = z.object({\n iceServers: z.array(IceServerSchema),\n});\n\nexport const turnContract = c.router({\n credentials: {\n method: 'GET',\n path: '/v1/turn/credentials',\n responses: {\n 200: TurnCredentialsResponseSchema,\n 401: z.object({ message: z.string() }),\n 502: z.object({ message: z.string() }),\n },\n summary: 'Get Cloudflare TURN credentials for WebRTC (authenticated)',\n metadata: { openApiTags: ['TURN'] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const UploadPresignedUrlSchema = z.object({\n fileId: z.string(),\n original: z.object({\n uploadUrl: z.string(),\n key: z.string(),\n publicUrl: z.string(),\n }),\n resize: z.object({\n uploadUrl: z.string(),\n key: z.string(),\n publicUrl: z.string(),\n }),\n});\n\nexport const uploadsContract = c.router(\n {\n generatePresignedUrls: {\n method: 'POST',\n path: '/urls',\n body: z.object({}),\n responses: {\n 201: UploadPresignedUrlSchema,\n },\n summary: 'Generate pre-signed URLs for event image upload',\n metadata: { openApiTags: ['Uploads'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n },\n {\n pathPrefix: '/v1/uploads',\n },\n);\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const TrackScanRequestSchema = z.object({\n platform: z.string(),\n appVersion: z.string().optional(),\n});\n\nexport const TrackScanResponseSchema = z.object({\n id: z.string(),\n});\n\nexport const trackingContract = c.router({\n scan: {\n method: 'POST',\n path: '/v1/tracking/scan',\n body: TrackScanRequestSchema,\n responses: {\n 201: TrackScanResponseSchema,\n 401: z.object({ message: z.string() }),\n },\n summary: 'Record a successful NFC scan event',\n metadata: { openApiTags: ['Tracking'], openApiSecurity: [{ bearerAuth: [] }] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nexport const appConfigContract = c.router({\n appConfig: {\n method: 'GET',\n path: '/v1/config/app',\n responses: {\n 200: z.object({\n demoMode: z.object({ enabled: z.boolean() }),\n publicEvents: z.object({ enabled: z.boolean() }),\n }),\n },\n summary: 'Get app configuration (public)',\n metadata: { openApiTags: ['Config'], openApiSecurity: [] },\n },\n});\n","import { initContract } from '@ts-rest/core';\nimport { z } from 'zod';\n\nconst c = initContract();\n\nconst SECURITY = [{ bearerAuth: [] }];\n\n// --- Zod Schemas ---\n\nexport const CreateOrganisationSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().optional(),\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const UpdateOrganisationSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n description: z.string().nullable().optional(),\n avatarUrl: z.string().nullable().optional(),\n});\n\nexport const OrgResponseSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullable(),\n avatarUrl: z.string().nullable(),\n didUri: z.string().nullable(),\n memberCount: z.number(),\n createdAt: z.string(),\n updatedAt: z.string(),\n});\n\nexport const OrgListItemSchema = OrgResponseSchema.extend({\n role: z.enum(['OWNER', 'ADMIN', 'ISSUER', 'MEMBER']),\n});\n\nexport const OrgDetailResponseSchema = OrgListItemSchema.extend({\n members: z.array(z.object({\n id: z.string(),\n userId: z.string(),\n displayName: z.string().nullable(),\n role: z.enum(['OWNER', 'ADMIN', 'ISSUER', 'MEMBER']),\n joinedAt: z.string(),\n })),\n});\n\nexport const MemberResponseSchema = z.object({\n id: z.string(),\n userId: z.string(),\n displayName: z.string().nullable(),\n role: z.enum(['OWNER', 'ADMIN', 'ISSUER', 'MEMBER']),\n joinedAt: z.string(),\n});\n\nexport const UpdateMemberRoleSchema = z.object({\n role: z.enum(['ADMIN', 'ISSUER', 'MEMBER']),\n});\n\nexport const CreateInvitationSchema = z.object({\n expiresInDays: z.number().int().positive().default(7).optional(),\n});\n\nexport const InvitationResponseSchema = z.object({\n id: z.string(),\n orgId: z.string(),\n orgName: z.string(),\n token: z.string(),\n status: z.enum(['PENDING', 'SUBMITTED', 'ACCEPTED', 'DECLINED', 'EXPIRED']),\n inviteeDisplayName: z.string().nullable(),\n createdAt: z.string(),\n expiresAt: z.string(),\n});\n\nexport const JoinInvitationSchema = z.object({\n verifiablePresentation: z.record(z.unknown()),\n});\n\nexport const IssueVCSchema = z.object({\n holderDid: z.string(),\n credentialSubject: z.record(z.unknown()),\n type: z.array(z.string()).optional(),\n});\n\nconst ErrorSchema = z.object({ message: z.string() });\n\n// --- Sub-contracts ---\n\nconst VpRequestResponseSchema = z.object({\n vpRequest: z.record(z.unknown()),\n expiresAt: z.string(),\n});\n\nexport const orgCrudContract = c.router({\n createVpRequest: {\n method: 'POST',\n path: '/v1/organisations/vp-request',\n body: z.object({}),\n responses: {\n 200: VpRequestResponseSchema,\n 401: ErrorSchema,\n },\n summary: 'Get VP request for creating an organisation',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n create: {\n method: 'POST',\n path: '/v1/organisations',\n body: CreateOrganisationSchema,\n responses: {\n 201: OrgResponseSchema,\n 400: ErrorSchema,\n 401: ErrorSchema,\n },\n summary: 'Create a new organisation (requires CCCD VP)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n list: {\n method: 'GET',\n path: '/v1/organisations',\n responses: {\n 200: z.array(OrgListItemSchema),\n 401: ErrorSchema,\n },\n summary: \"List user's organisations\",\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n getById: {\n method: 'GET',\n path: '/v1/organisations/:orgId',\n responses: {\n 200: OrgDetailResponseSchema,\n 401: ErrorSchema,\n 403: ErrorSchema,\n 404: ErrorSchema,\n },\n summary: 'Get organisation details (members only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n update: {\n method: 'PATCH',\n path: '/v1/organisations/:orgId',\n body: UpdateOrganisationSchema,\n responses: {\n 200: OrgResponseSchema,\n 400: ErrorSchema,\n 401: ErrorSchema,\n 403: ErrorSchema,\n 404: ErrorSchema,\n },\n summary: 'Update organisation details (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n delete: {\n method: 'DELETE',\n path: '/v1/organisations/:orgId',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 401: ErrorSchema,\n 403: ErrorSchema,\n 404: ErrorSchema,\n },\n summary: 'Delete organisation (owner only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n});\n\nexport const orgMembersContract = c.router({\n listMembers: {\n method: 'GET',\n path: '/v1/organisations/:orgId/members',\n responses: {\n 200: z.array(MemberResponseSchema),\n 401: ErrorSchema,\n 403: ErrorSchema,\n },\n summary: 'List organisation members',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n updateMemberRole: {\n method: 'PATCH',\n path: '/v1/organisations/:orgId/members/:memberId',\n body: UpdateMemberRoleSchema,\n responses: {\n 200: MemberResponseSchema,\n 400: ErrorSchema,\n 401: ErrorSchema,\n 403: ErrorSchema,\n 404: ErrorSchema,\n },\n summary: 'Update member role (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n removeMember: {\n method: 'DELETE',\n path: '/v1/organisations/:orgId/members/:memberId',\n body: c.noBody(),\n responses: {\n 204: z.undefined(),\n 400: ErrorSchema,\n 401: ErrorSchema,\n 403: ErrorSchema,\n 404: ErrorSchema,\n },\n summary: 'Remove member from organisation (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n});\n\nexport const orgInvitationsContract = c.router({\n createInvitation: {\n method: 'POST',\n path: '/v1/organisations/:orgId/invitations',\n body: CreateInvitationSchema,\n responses: {\n 201: InvitationResponseSchema,\n 401: ErrorSchema,\n 403: ErrorSchema,\n },\n summary: 'Create invitation (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n listInvitations: {\n method: 'GET',\n path: '/v1/organisations/:orgId/invitations',\n responses: {\n 200: z.array(InvitationResponseSchema),\n 401: ErrorSchema,\n 403: ErrorSchema,\n },\n summary: 'List pending invitations (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n joinVpRequest: {\n method: 'POST',\n path: '/v1/organisations/invitations/:token/vp-request',\n body: z.object({}),\n responses: {\n 200: VpRequestResponseSchema,\n 401: ErrorSchema,\n 404: ErrorSchema,\n 410: ErrorSchema,\n },\n summary: 'Get VP request for joining via invitation',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n joinInvitation: {\n method: 'POST',\n path: '/v1/organisations/invitations/:token/join',\n body: JoinInvitationSchema,\n responses: {\n 200: z.object({ message: z.string() }),\n 400: ErrorSchema,\n 401: ErrorSchema,\n 410: ErrorSchema,\n },\n summary: 'Invitee submits CCCD VP to join',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n acceptInvitation: {\n method: 'POST',\n path: '/v1/organisations/:orgId/invitations/:invitationId/accept',\n body: z.object({}),\n responses: {\n 200: z.object({ message: z.string(), memberId: z.string() }),\n 401: ErrorSchema,\n 403: ErrorSchema,\n 409: ErrorSchema,\n },\n summary: 'Accept invitation (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n declineInvitation: {\n method: 'POST',\n path: '/v1/organisations/:orgId/invitations/:invitationId/decline',\n body: z.object({}),\n responses: {\n 200: z.object({ message: z.string() }),\n 401: ErrorSchema,\n 403: ErrorSchema,\n 409: ErrorSchema,\n },\n summary: 'Decline invitation (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n});\n\nexport const orgCredentialsContract = c.router({\n issueVC: {\n method: 'POST',\n path: '/v1/organisations/:orgId/credentials/issue',\n body: IssueVCSchema,\n responses: {\n 201: z.record(z.unknown()),\n 400: ErrorSchema,\n 401: ErrorSchema,\n 403: ErrorSchema,\n },\n summary: 'Issue VC on behalf of organisation (owner/admin/issuer)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n listIssuedCredentials: {\n method: 'GET',\n path: '/v1/organisations/:orgId/credentials',\n responses: {\n 200: z.array(z.object({\n id: z.string(),\n holderDid: z.string(),\n issuingMemberId: z.string(),\n credentialJson: z.record(z.unknown()),\n issuedAt: z.string(),\n })),\n 401: ErrorSchema,\n 403: ErrorSchema,\n },\n summary: 'List issued credentials (owner/admin only)',\n metadata: { openApiTags: ['Organisations'], openApiSecurity: SECURITY },\n },\n});\n\n// Combined router for registration in the main contract\nexport const organisationsContract = c.router({\n crud: orgCrudContract,\n members: orgMembersContract,\n invitations: orgInvitationsContract,\n credentials: orgCredentialsContract,\n});\n"],"mappings":"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","names":["import_core","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","import_core","import_zod","c","SECURITY","c"]}