@playcademy/sdk 0.1.18 → 0.2.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/index.d.ts CHANGED
@@ -1,12 +1,7 @@
1
- import { AUTH_PROVIDER_IDS } from '@playcademy/constants';
2
- import { InferSelectModel } from 'drizzle-orm';
3
- import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
4
- import * as drizzle_zod from 'drizzle-zod';
5
- import { z } from 'zod';
6
1
  import * as _playcademy_realtime_server_types from '@playcademy/realtime/server/types';
2
+ import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
7
3
  import * as _playcademy_timeback_types from '@playcademy/timeback/types';
8
- import { OrganizationConfig, CourseConfig, ComponentConfig, ResourceConfig, ComponentResourceConfig } from '@playcademy/timeback/types';
9
- import { SchemaInfo } from '@playcademy/cloudflare';
4
+ import { AUTH_PROVIDER_IDS } from '@playcademy/constants';
10
5
 
11
6
  /**
12
7
  * Base error class for Cademy SDK specific errors.
@@ -246,6 +241,21 @@ declare class ConnectionMonitor {
246
241
  private _setState;
247
242
  }
248
243
 
244
+ /**
245
+ * OAuth 2.0 implementation for the Playcademy SDK
246
+ */
247
+
248
+ /**
249
+ * Parses an OAuth state parameter to extract CSRF token and any encoded data.
250
+ *
251
+ * @param state - The OAuth state parameter to parse
252
+ * @returns Object containing CSRF token and optional decoded data
253
+ */
254
+ declare function parseOAuthState(state: string): {
255
+ csrfToken: string;
256
+ data?: Record<string, string>;
257
+ };
258
+
249
259
  declare const users: drizzle_orm_pg_core.PgTableWithColumns<{
250
260
  name: "user";
251
261
  schema: undefined;
@@ -457,36 +467,13 @@ declare const users: drizzle_orm_pg_core.PgTableWithColumns<{
457
467
  };
458
468
  dialect: "pg";
459
469
  }>;
460
-
461
- type GameMetadata = {
462
- description?: string;
463
- emoji?: string;
464
- [key: string]: unknown;
465
- };
466
- /**
467
- * DNS validation records for custom hostname
468
- * Structure for the validationRecords JSON field in game_custom_hostnames table
469
- */
470
- type CustomHostnameValidationRecords = {
471
- /** TXT record for ownership verification */
472
- ownership?: {
473
- name?: string;
474
- value?: string;
475
- type?: string;
476
- };
477
- /** TXT records for SSL certificate validation */
478
- ssl?: Array<{
479
- txt_name?: string;
480
- txt_value?: string;
481
- }>;
482
- };
483
- declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
484
- name: "games";
470
+ declare const items: drizzle_orm_pg_core.PgTableWithColumns<{
471
+ name: "items";
485
472
  schema: undefined;
486
473
  columns: {
487
474
  id: drizzle_orm_pg_core.PgColumn<{
488
475
  name: "id";
489
- tableName: "games";
476
+ tableName: "items";
490
477
  dataType: "string";
491
478
  columnType: "PgUUID";
492
479
  data: string;
@@ -501,14 +488,14 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
501
488
  identity: undefined;
502
489
  generated: undefined;
503
490
  }, {}, {}>;
504
- developerId: drizzle_orm_pg_core.PgColumn<{
505
- name: "developer_id";
506
- tableName: "games";
491
+ slug: drizzle_orm_pg_core.PgColumn<{
492
+ name: "slug";
493
+ tableName: "items";
507
494
  dataType: "string";
508
495
  columnType: "PgText";
509
496
  data: string;
510
497
  driverParam: string;
511
- notNull: false;
498
+ notNull: true;
512
499
  hasDefault: false;
513
500
  isPrimaryKey: false;
514
501
  isAutoincrement: false;
@@ -518,30 +505,28 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
518
505
  identity: undefined;
519
506
  generated: undefined;
520
507
  }, {}, {}>;
521
- slug: drizzle_orm_pg_core.PgColumn<{
522
- name: "slug";
523
- tableName: "games";
508
+ gameId: drizzle_orm_pg_core.PgColumn<{
509
+ name: "game_id";
510
+ tableName: "items";
524
511
  dataType: "string";
525
- columnType: "PgVarchar";
512
+ columnType: "PgUUID";
526
513
  data: string;
527
514
  driverParam: string;
528
- notNull: true;
515
+ notNull: false;
529
516
  hasDefault: false;
530
517
  isPrimaryKey: false;
531
518
  isAutoincrement: false;
532
519
  hasRuntimeDefault: false;
533
- enumValues: [string, ...string[]];
520
+ enumValues: undefined;
534
521
  baseColumn: never;
535
522
  identity: undefined;
536
523
  generated: undefined;
537
- }, {}, {
538
- length: 255;
539
- }>;
524
+ }, {}, {}>;
540
525
  displayName: drizzle_orm_pg_core.PgColumn<{
541
526
  name: "display_name";
542
- tableName: "games";
527
+ tableName: "items";
543
528
  dataType: "string";
544
- columnType: "PgVarchar";
529
+ columnType: "PgText";
545
530
  data: string;
546
531
  driverParam: string;
547
532
  notNull: true;
@@ -553,17 +538,15 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
553
538
  baseColumn: never;
554
539
  identity: undefined;
555
540
  generated: undefined;
556
- }, {}, {
557
- length: 255;
558
- }>;
559
- version: drizzle_orm_pg_core.PgColumn<{
560
- name: "version";
561
- tableName: "games";
541
+ }, {}, {}>;
542
+ description: drizzle_orm_pg_core.PgColumn<{
543
+ name: "description";
544
+ tableName: "items";
562
545
  dataType: "string";
563
- columnType: "PgVarchar";
546
+ columnType: "PgText";
564
547
  data: string;
565
548
  driverParam: string;
566
- notNull: true;
549
+ notNull: false;
567
550
  hasDefault: false;
568
551
  isPrimaryKey: false;
569
552
  isAutoincrement: false;
@@ -572,29 +555,44 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
572
555
  baseColumn: never;
573
556
  identity: undefined;
574
557
  generated: undefined;
575
- }, {}, {
576
- length: 50;
577
- }>;
578
- gameType: drizzle_orm_pg_core.PgColumn<{
579
- name: "game_type";
580
- tableName: "games";
558
+ }, {}, {}>;
559
+ type: drizzle_orm_pg_core.PgColumn<{
560
+ name: "type";
561
+ tableName: "items";
581
562
  dataType: "string";
582
563
  columnType: "PgEnumColumn";
583
- data: "hosted" | "external";
564
+ data: "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "accessory" | "other";
584
565
  driverParam: string;
585
566
  notNull: true;
586
567
  hasDefault: true;
587
568
  isPrimaryKey: false;
588
569
  isAutoincrement: false;
589
570
  hasRuntimeDefault: false;
590
- enumValues: ["hosted", "external"];
571
+ enumValues: ["currency", "badge", "trophy", "collectible", "consumable", "unlock", "upgrade", "accessory", "other"];
572
+ baseColumn: never;
573
+ identity: undefined;
574
+ generated: undefined;
575
+ }, {}, {}>;
576
+ isPlaceable: drizzle_orm_pg_core.PgColumn<{
577
+ name: "is_placeable";
578
+ tableName: "items";
579
+ dataType: "boolean";
580
+ columnType: "PgBoolean";
581
+ data: boolean;
582
+ driverParam: boolean;
583
+ notNull: true;
584
+ hasDefault: true;
585
+ isPrimaryKey: false;
586
+ isAutoincrement: false;
587
+ hasRuntimeDefault: false;
588
+ enumValues: undefined;
591
589
  baseColumn: never;
592
590
  identity: undefined;
593
591
  generated: undefined;
594
592
  }, {}, {}>;
595
- deploymentUrl: drizzle_orm_pg_core.PgColumn<{
596
- name: "deployment_url";
597
- tableName: "games";
593
+ imageUrl: drizzle_orm_pg_core.PgColumn<{
594
+ name: "image_url";
595
+ tableName: "items";
598
596
  dataType: "string";
599
597
  columnType: "PgText";
600
598
  data: string;
@@ -609,66 +607,90 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
609
607
  identity: undefined;
610
608
  generated: undefined;
611
609
  }, {}, {}>;
612
- externalUrl: drizzle_orm_pg_core.PgColumn<{
613
- name: "external_url";
614
- tableName: "games";
615
- dataType: "string";
616
- columnType: "PgText";
617
- data: string;
618
- driverParam: string;
610
+ metadata: drizzle_orm_pg_core.PgColumn<{
611
+ name: "metadata";
612
+ tableName: "items";
613
+ dataType: "json";
614
+ columnType: "PgJsonb";
615
+ data: unknown;
616
+ driverParam: unknown;
619
617
  notNull: false;
620
- hasDefault: false;
618
+ hasDefault: true;
621
619
  isPrimaryKey: false;
622
620
  isAutoincrement: false;
623
621
  hasRuntimeDefault: false;
624
- enumValues: [string, ...string[]];
622
+ enumValues: undefined;
625
623
  baseColumn: never;
626
624
  identity: undefined;
627
625
  generated: undefined;
628
626
  }, {}, {}>;
629
- platform: drizzle_orm_pg_core.PgColumn<{
630
- name: "platform";
631
- tableName: "games";
632
- dataType: "string";
633
- columnType: "PgEnumColumn";
634
- data: "web" | "godot" | "unity";
627
+ createdAt: drizzle_orm_pg_core.PgColumn<{
628
+ name: "created_at";
629
+ tableName: "items";
630
+ dataType: "date";
631
+ columnType: "PgTimestamp";
632
+ data: Date;
635
633
  driverParam: string;
636
634
  notNull: true;
637
635
  hasDefault: true;
638
636
  isPrimaryKey: false;
639
637
  isAutoincrement: false;
640
638
  hasRuntimeDefault: false;
641
- enumValues: ["web", "godot", "unity"];
639
+ enumValues: undefined;
642
640
  baseColumn: never;
643
641
  identity: undefined;
644
642
  generated: undefined;
645
643
  }, {}, {}>;
646
- mapElementId: drizzle_orm_pg_core.PgColumn<{
647
- name: "map_element_id";
648
- tableName: "games";
644
+ };
645
+ dialect: "pg";
646
+ }>;
647
+ declare const inventoryItems: drizzle_orm_pg_core.PgTableWithColumns<{
648
+ name: "inventory_items";
649
+ schema: undefined;
650
+ columns: {
651
+ id: drizzle_orm_pg_core.PgColumn<{
652
+ name: "id";
653
+ tableName: "inventory_items";
649
654
  dataType: "string";
650
655
  columnType: "PgUUID";
651
656
  data: string;
652
657
  driverParam: string;
653
- notNull: false;
658
+ notNull: true;
659
+ hasDefault: true;
660
+ isPrimaryKey: true;
661
+ isAutoincrement: false;
662
+ hasRuntimeDefault: false;
663
+ enumValues: undefined;
664
+ baseColumn: never;
665
+ identity: undefined;
666
+ generated: undefined;
667
+ }, {}, {}>;
668
+ userId: drizzle_orm_pg_core.PgColumn<{
669
+ name: "user_id";
670
+ tableName: "inventory_items";
671
+ dataType: "string";
672
+ columnType: "PgText";
673
+ data: string;
674
+ driverParam: string;
675
+ notNull: true;
654
676
  hasDefault: false;
655
677
  isPrimaryKey: false;
656
678
  isAutoincrement: false;
657
679
  hasRuntimeDefault: false;
658
- enumValues: undefined;
680
+ enumValues: [string, ...string[]];
659
681
  baseColumn: never;
660
682
  identity: undefined;
661
683
  generated: undefined;
662
684
  }, {}, {}>;
663
- metadata: drizzle_orm_pg_core.PgColumn<{
664
- name: "metadata";
665
- tableName: "games";
666
- dataType: "json";
667
- columnType: "PgJsonb";
668
- data: GameMetadata;
669
- driverParam: unknown;
685
+ itemId: drizzle_orm_pg_core.PgColumn<{
686
+ name: "item_id";
687
+ tableName: "inventory_items";
688
+ dataType: "string";
689
+ columnType: "PgUUID";
690
+ data: string;
691
+ driverParam: string;
670
692
  notNull: true;
671
- hasDefault: true;
693
+ hasDefault: false;
672
694
  isPrimaryKey: false;
673
695
  isAutoincrement: false;
674
696
  hasRuntimeDefault: false;
@@ -676,17 +698,15 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
676
698
  baseColumn: never;
677
699
  identity: undefined;
678
700
  generated: undefined;
679
- }, {}, {
680
- $type: GameMetadata;
681
- }>;
682
- createdAt: drizzle_orm_pg_core.PgColumn<{
683
- name: "created_at";
684
- tableName: "games";
685
- dataType: "date";
686
- columnType: "PgTimestamp";
687
- data: Date;
688
- driverParam: string;
689
- notNull: false;
701
+ }, {}, {}>;
702
+ quantity: drizzle_orm_pg_core.PgColumn<{
703
+ name: "quantity";
704
+ tableName: "inventory_items";
705
+ dataType: "number";
706
+ columnType: "PgInteger";
707
+ data: number;
708
+ driverParam: string | number;
709
+ notNull: true;
690
710
  hasDefault: true;
691
711
  isPrimaryKey: false;
692
712
  isAutoincrement: false;
@@ -698,7 +718,7 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
698
718
  }, {}, {}>;
699
719
  updatedAt: drizzle_orm_pg_core.PgColumn<{
700
720
  name: "updated_at";
701
- tableName: "games";
721
+ tableName: "inventory_items";
702
722
  dataType: "date";
703
723
  columnType: "PgTimestamp";
704
724
  data: Date;
@@ -716,18 +736,13 @@ declare const games: drizzle_orm_pg_core.PgTableWithColumns<{
716
736
  };
717
737
  dialect: "pg";
718
738
  }>;
719
- /**
720
- * Custom hostnames table
721
- *
722
- * Stores custom domain mappings for games with SSL provisioning via Cloudflare.
723
- */
724
- declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
725
- name: "game_custom_hostnames";
739
+ declare const gameTimebackIntegrations: drizzle_orm_pg_core.PgTableWithColumns<{
740
+ name: "game_timeback_integrations";
726
741
  schema: undefined;
727
742
  columns: {
728
743
  id: drizzle_orm_pg_core.PgColumn<{
729
744
  name: "id";
730
- tableName: "game_custom_hostnames";
745
+ tableName: "game_timeback_integrations";
731
746
  dataType: "string";
732
747
  columnType: "PgUUID";
733
748
  data: string;
@@ -744,7 +759,7 @@ declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
744
759
  }, {}, {}>;
745
760
  gameId: drizzle_orm_pg_core.PgColumn<{
746
761
  name: "game_id";
747
- tableName: "game_custom_hostnames";
762
+ tableName: "game_timeback_integrations";
748
763
  dataType: "string";
749
764
  columnType: "PgUUID";
750
765
  data: string;
@@ -759,9 +774,9 @@ declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
759
774
  identity: undefined;
760
775
  generated: undefined;
761
776
  }, {}, {}>;
762
- userId: drizzle_orm_pg_core.PgColumn<{
763
- name: "user_id";
764
- tableName: "game_custom_hostnames";
777
+ courseId: drizzle_orm_pg_core.PgColumn<{
778
+ name: "course_id";
779
+ tableName: "game_timeback_integrations";
765
780
  dataType: "string";
766
781
  columnType: "PgText";
767
782
  data: string;
@@ -776,26 +791,26 @@ declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
776
791
  identity: undefined;
777
792
  generated: undefined;
778
793
  }, {}, {}>;
779
- hostname: drizzle_orm_pg_core.PgColumn<{
780
- name: "hostname";
781
- tableName: "game_custom_hostnames";
782
- dataType: "string";
783
- columnType: "PgText";
784
- data: string;
785
- driverParam: string;
794
+ grade: drizzle_orm_pg_core.PgColumn<{
795
+ name: "grade";
796
+ tableName: "game_timeback_integrations";
797
+ dataType: "number";
798
+ columnType: "PgInteger";
799
+ data: number;
800
+ driverParam: string | number;
786
801
  notNull: true;
787
802
  hasDefault: false;
788
803
  isPrimaryKey: false;
789
804
  isAutoincrement: false;
790
805
  hasRuntimeDefault: false;
791
- enumValues: [string, ...string[]];
806
+ enumValues: undefined;
792
807
  baseColumn: never;
793
808
  identity: undefined;
794
809
  generated: undefined;
795
810
  }, {}, {}>;
796
- cloudflareId: drizzle_orm_pg_core.PgColumn<{
797
- name: "cloudflare_id";
798
- tableName: "game_custom_hostnames";
811
+ subject: drizzle_orm_pg_core.PgColumn<{
812
+ name: "subject";
813
+ tableName: "game_timeback_integrations";
799
814
  dataType: "string";
800
815
  columnType: "PgText";
801
816
  data: string;
@@ -810,64 +825,30 @@ declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
810
825
  identity: undefined;
811
826
  generated: undefined;
812
827
  }, {}, {}>;
813
- environment: drizzle_orm_pg_core.PgColumn<{
814
- name: "environment";
815
- tableName: "game_custom_hostnames";
816
- dataType: "string";
817
- columnType: "PgEnumColumn";
818
- data: "staging" | "production";
819
- driverParam: string;
820
- notNull: true;
821
- hasDefault: true;
822
- isPrimaryKey: false;
823
- isAutoincrement: false;
824
- hasRuntimeDefault: false;
825
- enumValues: ["staging", "production"];
826
- baseColumn: never;
827
- identity: undefined;
828
- generated: undefined;
829
- }, {}, {}>;
830
- status: drizzle_orm_pg_core.PgColumn<{
831
- name: "status";
832
- tableName: "game_custom_hostnames";
833
- dataType: "string";
834
- columnType: "PgEnumColumn";
835
- data: "pending" | "pending_validation" | "pending_deployment" | "pending_deletion" | "active" | "blocked" | "deleted";
836
- driverParam: string;
837
- notNull: true;
838
- hasDefault: true;
828
+ totalXp: drizzle_orm_pg_core.PgColumn<{
829
+ name: "total_xp";
830
+ tableName: "game_timeback_integrations";
831
+ dataType: "number";
832
+ columnType: "PgInteger";
833
+ data: number;
834
+ driverParam: string | number;
835
+ notNull: false;
836
+ hasDefault: false;
839
837
  isPrimaryKey: false;
840
838
  isAutoincrement: false;
841
839
  hasRuntimeDefault: false;
842
- enumValues: ["pending", "pending_validation", "pending_deployment", "pending_deletion", "active", "blocked", "deleted"];
840
+ enumValues: undefined;
843
841
  baseColumn: never;
844
842
  identity: undefined;
845
843
  generated: undefined;
846
844
  }, {}, {}>;
847
- sslStatus: drizzle_orm_pg_core.PgColumn<{
848
- name: "ssl_status";
849
- tableName: "game_custom_hostnames";
850
- dataType: "string";
851
- columnType: "PgEnumColumn";
852
- data: "pending_validation" | "pending_deployment" | "active" | "deleted" | "initializing" | "pending_issuance";
845
+ lastVerifiedAt: drizzle_orm_pg_core.PgColumn<{
846
+ name: "last_verified_at";
847
+ tableName: "game_timeback_integrations";
848
+ dataType: "date";
849
+ columnType: "PgTimestamp";
850
+ data: Date;
853
851
  driverParam: string;
854
- notNull: true;
855
- hasDefault: true;
856
- isPrimaryKey: false;
857
- isAutoincrement: false;
858
- hasRuntimeDefault: false;
859
- enumValues: ["initializing", "pending_validation", "pending_issuance", "pending_deployment", "active", "deleted"];
860
- baseColumn: never;
861
- identity: undefined;
862
- generated: undefined;
863
- }, {}, {}>;
864
- validationRecords: drizzle_orm_pg_core.PgColumn<{
865
- name: "validation_records";
866
- tableName: "game_custom_hostnames";
867
- dataType: "json";
868
- columnType: "PgJsonb";
869
- data: CustomHostnameValidationRecords;
870
- driverParam: unknown;
871
852
  notNull: false;
872
853
  hasDefault: false;
873
854
  isPrimaryKey: false;
@@ -877,12 +858,10 @@ declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
877
858
  baseColumn: never;
878
859
  identity: undefined;
879
860
  generated: undefined;
880
- }, {}, {
881
- $type: CustomHostnameValidationRecords;
882
- }>;
861
+ }, {}, {}>;
883
862
  createdAt: drizzle_orm_pg_core.PgColumn<{
884
863
  name: "created_at";
885
- tableName: "game_custom_hostnames";
864
+ tableName: "game_timeback_integrations";
886
865
  dataType: "date";
887
866
  columnType: "PgTimestamp";
888
867
  data: Date;
@@ -899,7 +878,7 @@ declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
899
878
  }, {}, {}>;
900
879
  updatedAt: drizzle_orm_pg_core.PgColumn<{
901
880
  name: "updated_at";
902
- tableName: "game_custom_hostnames";
881
+ tableName: "game_timeback_integrations";
903
882
  dataType: "date";
904
883
  columnType: "PgTimestamp";
905
884
  data: Date;
@@ -917,2293 +896,10 @@ declare const gameCustomHostnames: drizzle_orm_pg_core.PgTableWithColumns<{
917
896
  };
918
897
  dialect: "pg";
919
898
  }>;
920
- declare const items: drizzle_orm_pg_core.PgTableWithColumns<{
921
- name: "items";
922
- schema: undefined;
923
- columns: {
924
- id: drizzle_orm_pg_core.PgColumn<{
925
- name: "id";
926
- tableName: "items";
927
- dataType: "string";
928
- columnType: "PgUUID";
929
- data: string;
930
- driverParam: string;
931
- notNull: true;
932
- hasDefault: true;
933
- isPrimaryKey: true;
934
- isAutoincrement: false;
935
- hasRuntimeDefault: false;
936
- enumValues: undefined;
937
- baseColumn: never;
938
- identity: undefined;
939
- generated: undefined;
940
- }, {}, {}>;
941
- slug: drizzle_orm_pg_core.PgColumn<{
942
- name: "slug";
943
- tableName: "items";
944
- dataType: "string";
945
- columnType: "PgText";
946
- data: string;
947
- driverParam: string;
948
- notNull: true;
949
- hasDefault: false;
950
- isPrimaryKey: false;
951
- isAutoincrement: false;
952
- hasRuntimeDefault: false;
953
- enumValues: [string, ...string[]];
954
- baseColumn: never;
955
- identity: undefined;
956
- generated: undefined;
957
- }, {}, {}>;
958
- gameId: drizzle_orm_pg_core.PgColumn<{
959
- name: "game_id";
960
- tableName: "items";
961
- dataType: "string";
962
- columnType: "PgUUID";
963
- data: string;
964
- driverParam: string;
965
- notNull: false;
966
- hasDefault: false;
967
- isPrimaryKey: false;
968
- isAutoincrement: false;
969
- hasRuntimeDefault: false;
970
- enumValues: undefined;
971
- baseColumn: never;
972
- identity: undefined;
973
- generated: undefined;
974
- }, {}, {}>;
975
- displayName: drizzle_orm_pg_core.PgColumn<{
976
- name: "display_name";
977
- tableName: "items";
978
- dataType: "string";
979
- columnType: "PgText";
980
- data: string;
981
- driverParam: string;
982
- notNull: true;
983
- hasDefault: false;
984
- isPrimaryKey: false;
985
- isAutoincrement: false;
986
- hasRuntimeDefault: false;
987
- enumValues: [string, ...string[]];
988
- baseColumn: never;
989
- identity: undefined;
990
- generated: undefined;
991
- }, {}, {}>;
992
- description: drizzle_orm_pg_core.PgColumn<{
993
- name: "description";
994
- tableName: "items";
995
- dataType: "string";
996
- columnType: "PgText";
997
- data: string;
998
- driverParam: string;
999
- notNull: false;
1000
- hasDefault: false;
1001
- isPrimaryKey: false;
1002
- isAutoincrement: false;
1003
- hasRuntimeDefault: false;
1004
- enumValues: [string, ...string[]];
1005
- baseColumn: never;
1006
- identity: undefined;
1007
- generated: undefined;
1008
- }, {}, {}>;
1009
- type: drizzle_orm_pg_core.PgColumn<{
1010
- name: "type";
1011
- tableName: "items";
1012
- dataType: "string";
1013
- columnType: "PgEnumColumn";
1014
- data: "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "accessory" | "other";
1015
- driverParam: string;
1016
- notNull: true;
1017
- hasDefault: true;
1018
- isPrimaryKey: false;
1019
- isAutoincrement: false;
1020
- hasRuntimeDefault: false;
1021
- enumValues: ["currency", "badge", "trophy", "collectible", "consumable", "unlock", "upgrade", "accessory", "other"];
1022
- baseColumn: never;
1023
- identity: undefined;
1024
- generated: undefined;
1025
- }, {}, {}>;
1026
- isPlaceable: drizzle_orm_pg_core.PgColumn<{
1027
- name: "is_placeable";
1028
- tableName: "items";
1029
- dataType: "boolean";
1030
- columnType: "PgBoolean";
1031
- data: boolean;
1032
- driverParam: boolean;
1033
- notNull: true;
1034
- hasDefault: true;
1035
- isPrimaryKey: false;
1036
- isAutoincrement: false;
1037
- hasRuntimeDefault: false;
1038
- enumValues: undefined;
1039
- baseColumn: never;
1040
- identity: undefined;
1041
- generated: undefined;
1042
- }, {}, {}>;
1043
- imageUrl: drizzle_orm_pg_core.PgColumn<{
1044
- name: "image_url";
1045
- tableName: "items";
1046
- dataType: "string";
1047
- columnType: "PgText";
1048
- data: string;
1049
- driverParam: string;
1050
- notNull: false;
1051
- hasDefault: false;
1052
- isPrimaryKey: false;
1053
- isAutoincrement: false;
1054
- hasRuntimeDefault: false;
1055
- enumValues: [string, ...string[]];
1056
- baseColumn: never;
1057
- identity: undefined;
1058
- generated: undefined;
1059
- }, {}, {}>;
1060
- metadata: drizzle_orm_pg_core.PgColumn<{
1061
- name: "metadata";
1062
- tableName: "items";
1063
- dataType: "json";
1064
- columnType: "PgJsonb";
1065
- data: unknown;
1066
- driverParam: unknown;
1067
- notNull: false;
1068
- hasDefault: true;
1069
- isPrimaryKey: false;
1070
- isAutoincrement: false;
1071
- hasRuntimeDefault: false;
1072
- enumValues: undefined;
1073
- baseColumn: never;
1074
- identity: undefined;
1075
- generated: undefined;
1076
- }, {}, {}>;
1077
- createdAt: drizzle_orm_pg_core.PgColumn<{
1078
- name: "created_at";
1079
- tableName: "items";
1080
- dataType: "date";
1081
- columnType: "PgTimestamp";
1082
- data: Date;
1083
- driverParam: string;
1084
- notNull: true;
1085
- hasDefault: true;
1086
- isPrimaryKey: false;
1087
- isAutoincrement: false;
1088
- hasRuntimeDefault: false;
1089
- enumValues: undefined;
1090
- baseColumn: never;
1091
- identity: undefined;
1092
- generated: undefined;
1093
- }, {}, {}>;
1094
- };
1095
- dialect: "pg";
1096
- }>;
1097
- declare const inventoryItems: drizzle_orm_pg_core.PgTableWithColumns<{
1098
- name: "inventory_items";
1099
- schema: undefined;
1100
- columns: {
1101
- id: drizzle_orm_pg_core.PgColumn<{
1102
- name: "id";
1103
- tableName: "inventory_items";
1104
- dataType: "string";
1105
- columnType: "PgUUID";
1106
- data: string;
1107
- driverParam: string;
1108
- notNull: true;
1109
- hasDefault: true;
1110
- isPrimaryKey: true;
1111
- isAutoincrement: false;
1112
- hasRuntimeDefault: false;
1113
- enumValues: undefined;
1114
- baseColumn: never;
1115
- identity: undefined;
1116
- generated: undefined;
1117
- }, {}, {}>;
1118
- userId: drizzle_orm_pg_core.PgColumn<{
1119
- name: "user_id";
1120
- tableName: "inventory_items";
1121
- dataType: "string";
1122
- columnType: "PgText";
1123
- data: string;
1124
- driverParam: string;
1125
- notNull: true;
1126
- hasDefault: false;
1127
- isPrimaryKey: false;
1128
- isAutoincrement: false;
1129
- hasRuntimeDefault: false;
1130
- enumValues: [string, ...string[]];
1131
- baseColumn: never;
1132
- identity: undefined;
1133
- generated: undefined;
1134
- }, {}, {}>;
1135
- itemId: drizzle_orm_pg_core.PgColumn<{
1136
- name: "item_id";
1137
- tableName: "inventory_items";
1138
- dataType: "string";
1139
- columnType: "PgUUID";
1140
- data: string;
1141
- driverParam: string;
1142
- notNull: true;
1143
- hasDefault: false;
1144
- isPrimaryKey: false;
1145
- isAutoincrement: false;
1146
- hasRuntimeDefault: false;
1147
- enumValues: undefined;
1148
- baseColumn: never;
1149
- identity: undefined;
1150
- generated: undefined;
1151
- }, {}, {}>;
1152
- quantity: drizzle_orm_pg_core.PgColumn<{
1153
- name: "quantity";
1154
- tableName: "inventory_items";
1155
- dataType: "number";
1156
- columnType: "PgInteger";
1157
- data: number;
1158
- driverParam: string | number;
1159
- notNull: true;
1160
- hasDefault: true;
1161
- isPrimaryKey: false;
1162
- isAutoincrement: false;
1163
- hasRuntimeDefault: false;
1164
- enumValues: undefined;
1165
- baseColumn: never;
1166
- identity: undefined;
1167
- generated: undefined;
1168
- }, {}, {}>;
1169
- updatedAt: drizzle_orm_pg_core.PgColumn<{
1170
- name: "updated_at";
1171
- tableName: "inventory_items";
1172
- dataType: "date";
1173
- columnType: "PgTimestamp";
1174
- data: Date;
1175
- driverParam: string;
1176
- notNull: false;
1177
- hasDefault: true;
1178
- isPrimaryKey: false;
1179
- isAutoincrement: false;
1180
- hasRuntimeDefault: false;
1181
- enumValues: undefined;
1182
- baseColumn: never;
1183
- identity: undefined;
1184
- generated: undefined;
1185
- }, {}, {}>;
1186
- };
1187
- dialect: "pg";
1188
- }>;
1189
- declare const shopListings: drizzle_orm_pg_core.PgTableWithColumns<{
1190
- name: "shop_listings";
1191
- schema: undefined;
1192
- columns: {
1193
- id: drizzle_orm_pg_core.PgColumn<{
1194
- name: "id";
1195
- tableName: "shop_listings";
1196
- dataType: "string";
1197
- columnType: "PgUUID";
1198
- data: string;
1199
- driverParam: string;
1200
- notNull: true;
1201
- hasDefault: true;
1202
- isPrimaryKey: true;
1203
- isAutoincrement: false;
1204
- hasRuntimeDefault: false;
1205
- enumValues: undefined;
1206
- baseColumn: never;
1207
- identity: undefined;
1208
- generated: undefined;
1209
- }, {}, {}>;
1210
- itemId: drizzle_orm_pg_core.PgColumn<{
1211
- name: "item_id";
1212
- tableName: "shop_listings";
1213
- dataType: "string";
1214
- columnType: "PgUUID";
1215
- data: string;
1216
- driverParam: string;
1217
- notNull: true;
1218
- hasDefault: false;
1219
- isPrimaryKey: false;
1220
- isAutoincrement: false;
1221
- hasRuntimeDefault: false;
1222
- enumValues: undefined;
1223
- baseColumn: never;
1224
- identity: undefined;
1225
- generated: undefined;
1226
- }, {}, {}>;
1227
- currencyId: drizzle_orm_pg_core.PgColumn<{
1228
- name: "currency_id";
1229
- tableName: "shop_listings";
1230
- dataType: "string";
1231
- columnType: "PgUUID";
1232
- data: string;
1233
- driverParam: string;
1234
- notNull: true;
1235
- hasDefault: false;
1236
- isPrimaryKey: false;
1237
- isAutoincrement: false;
1238
- hasRuntimeDefault: false;
1239
- enumValues: undefined;
1240
- baseColumn: never;
1241
- identity: undefined;
1242
- generated: undefined;
1243
- }, {}, {}>;
1244
- price: drizzle_orm_pg_core.PgColumn<{
1245
- name: "price";
1246
- tableName: "shop_listings";
1247
- dataType: "number";
1248
- columnType: "PgInteger";
1249
- data: number;
1250
- driverParam: string | number;
1251
- notNull: true;
1252
- hasDefault: false;
1253
- isPrimaryKey: false;
1254
- isAutoincrement: false;
1255
- hasRuntimeDefault: false;
1256
- enumValues: undefined;
1257
- baseColumn: never;
1258
- identity: undefined;
1259
- generated: undefined;
1260
- }, {}, {}>;
1261
- sellBackPercentage: drizzle_orm_pg_core.PgColumn<{
1262
- name: "sell_back_percentage";
1263
- tableName: "shop_listings";
1264
- dataType: "number";
1265
- columnType: "PgInteger";
1266
- data: number;
1267
- driverParam: string | number;
1268
- notNull: false;
1269
- hasDefault: false;
1270
- isPrimaryKey: false;
1271
- isAutoincrement: false;
1272
- hasRuntimeDefault: false;
1273
- enumValues: undefined;
1274
- baseColumn: never;
1275
- identity: undefined;
1276
- generated: undefined;
1277
- }, {}, {}>;
1278
- stock: drizzle_orm_pg_core.PgColumn<{
1279
- name: "stock";
1280
- tableName: "shop_listings";
1281
- dataType: "number";
1282
- columnType: "PgInteger";
1283
- data: number;
1284
- driverParam: string | number;
1285
- notNull: false;
1286
- hasDefault: false;
1287
- isPrimaryKey: false;
1288
- isAutoincrement: false;
1289
- hasRuntimeDefault: false;
1290
- enumValues: undefined;
1291
- baseColumn: never;
1292
- identity: undefined;
1293
- generated: undefined;
1294
- }, {}, {}>;
1295
- isActive: drizzle_orm_pg_core.PgColumn<{
1296
- name: "is_active";
1297
- tableName: "shop_listings";
1298
- dataType: "boolean";
1299
- columnType: "PgBoolean";
1300
- data: boolean;
1301
- driverParam: boolean;
1302
- notNull: true;
1303
- hasDefault: true;
1304
- isPrimaryKey: false;
1305
- isAutoincrement: false;
1306
- hasRuntimeDefault: false;
1307
- enumValues: undefined;
1308
- baseColumn: never;
1309
- identity: undefined;
1310
- generated: undefined;
1311
- }, {}, {}>;
1312
- availableFrom: drizzle_orm_pg_core.PgColumn<{
1313
- name: "available_from";
1314
- tableName: "shop_listings";
1315
- dataType: "date";
1316
- columnType: "PgTimestamp";
1317
- data: Date;
1318
- driverParam: string;
1319
- notNull: false;
1320
- hasDefault: false;
1321
- isPrimaryKey: false;
1322
- isAutoincrement: false;
1323
- hasRuntimeDefault: false;
1324
- enumValues: undefined;
1325
- baseColumn: never;
1326
- identity: undefined;
1327
- generated: undefined;
1328
- }, {}, {}>;
1329
- availableUntil: drizzle_orm_pg_core.PgColumn<{
1330
- name: "available_until";
1331
- tableName: "shop_listings";
1332
- dataType: "date";
1333
- columnType: "PgTimestamp";
1334
- data: Date;
1335
- driverParam: string;
1336
- notNull: false;
1337
- hasDefault: false;
1338
- isPrimaryKey: false;
1339
- isAutoincrement: false;
1340
- hasRuntimeDefault: false;
1341
- enumValues: undefined;
1342
- baseColumn: never;
1343
- identity: undefined;
1344
- generated: undefined;
1345
- }, {}, {}>;
1346
- createdAt: drizzle_orm_pg_core.PgColumn<{
1347
- name: "created_at";
1348
- tableName: "shop_listings";
1349
- dataType: "date";
1350
- columnType: "PgTimestamp";
1351
- data: Date;
1352
- driverParam: string;
1353
- notNull: true;
1354
- hasDefault: true;
1355
- isPrimaryKey: false;
1356
- isAutoincrement: false;
1357
- hasRuntimeDefault: false;
1358
- enumValues: undefined;
1359
- baseColumn: never;
1360
- identity: undefined;
1361
- generated: undefined;
1362
- }, {}, {}>;
1363
- updatedAt: drizzle_orm_pg_core.PgColumn<{
1364
- name: "updated_at";
1365
- tableName: "shop_listings";
1366
- dataType: "date";
1367
- columnType: "PgTimestamp";
1368
- data: Date;
1369
- driverParam: string;
1370
- notNull: false;
1371
- hasDefault: true;
1372
- isPrimaryKey: false;
1373
- isAutoincrement: false;
1374
- hasRuntimeDefault: false;
1375
- enumValues: undefined;
1376
- baseColumn: never;
1377
- identity: undefined;
1378
- generated: undefined;
1379
- }, {}, {}>;
1380
- };
1381
- dialect: "pg";
1382
- }>;
1383
- declare const mapElements: drizzle_orm_pg_core.PgTableWithColumns<{
1384
- name: "map_elements";
1385
- schema: undefined;
1386
- columns: {
1387
- id: drizzle_orm_pg_core.PgColumn<{
1388
- name: "id";
1389
- tableName: "map_elements";
1390
- dataType: "string";
1391
- columnType: "PgUUID";
1392
- data: string;
1393
- driverParam: string;
1394
- notNull: true;
1395
- hasDefault: true;
1396
- isPrimaryKey: true;
1397
- isAutoincrement: false;
1398
- hasRuntimeDefault: false;
1399
- enumValues: undefined;
1400
- baseColumn: never;
1401
- identity: undefined;
1402
- generated: undefined;
1403
- }, {}, {}>;
1404
- mapId: drizzle_orm_pg_core.PgColumn<{
1405
- name: "map_id";
1406
- tableName: "map_elements";
1407
- dataType: "string";
1408
- columnType: "PgUUID";
1409
- data: string;
1410
- driverParam: string;
1411
- notNull: false;
1412
- hasDefault: false;
1413
- isPrimaryKey: false;
1414
- isAutoincrement: false;
1415
- hasRuntimeDefault: false;
1416
- enumValues: undefined;
1417
- baseColumn: never;
1418
- identity: undefined;
1419
- generated: undefined;
1420
- }, {}, {}>;
1421
- elementSlug: drizzle_orm_pg_core.PgColumn<{
1422
- name: "element_slug";
1423
- tableName: "map_elements";
1424
- dataType: "string";
1425
- columnType: "PgVarchar";
1426
- data: string;
1427
- driverParam: string;
1428
- notNull: true;
1429
- hasDefault: false;
1430
- isPrimaryKey: false;
1431
- isAutoincrement: false;
1432
- hasRuntimeDefault: false;
1433
- enumValues: [string, ...string[]];
1434
- baseColumn: never;
1435
- identity: undefined;
1436
- generated: undefined;
1437
- }, {}, {
1438
- length: 255;
1439
- }>;
1440
- interactionType: drizzle_orm_pg_core.PgColumn<{
1441
- name: "interaction_type";
1442
- tableName: "map_elements";
1443
- dataType: "string";
1444
- columnType: "PgEnumColumn";
1445
- data: "game_entry" | "game_registry" | "info" | "teleport" | "door_in" | "door_out" | "npc_interaction" | "quest_trigger";
1446
- driverParam: string;
1447
- notNull: true;
1448
- hasDefault: false;
1449
- isPrimaryKey: false;
1450
- isAutoincrement: false;
1451
- hasRuntimeDefault: false;
1452
- enumValues: ["game_entry", "game_registry", "info", "teleport", "door_in", "door_out", "npc_interaction", "quest_trigger"];
1453
- baseColumn: never;
1454
- identity: undefined;
1455
- generated: undefined;
1456
- }, {}, {}>;
1457
- gameId: drizzle_orm_pg_core.PgColumn<{
1458
- name: "game_id";
1459
- tableName: "map_elements";
1460
- dataType: "string";
1461
- columnType: "PgUUID";
1462
- data: string;
1463
- driverParam: string;
1464
- notNull: false;
1465
- hasDefault: false;
1466
- isPrimaryKey: false;
1467
- isAutoincrement: false;
1468
- hasRuntimeDefault: false;
1469
- enumValues: undefined;
1470
- baseColumn: never;
1471
- identity: undefined;
1472
- generated: undefined;
1473
- }, {}, {}>;
1474
- metadata: drizzle_orm_pg_core.PgColumn<{
1475
- name: "metadata";
1476
- tableName: "map_elements";
1477
- dataType: "json";
1478
- columnType: "PgJsonb";
1479
- data: Record<string, unknown>;
1480
- driverParam: unknown;
1481
- notNull: false;
1482
- hasDefault: true;
1483
- isPrimaryKey: false;
1484
- isAutoincrement: false;
1485
- hasRuntimeDefault: false;
1486
- enumValues: undefined;
1487
- baseColumn: never;
1488
- identity: undefined;
1489
- generated: undefined;
1490
- }, {}, {
1491
- $type: Record<string, unknown>;
1492
- }>;
1493
- };
1494
- dialect: "pg";
1495
- }>;
1496
- declare const mapObjects: drizzle_orm_pg_core.PgTableWithColumns<{
1497
- name: "map_objects";
1498
- schema: undefined;
1499
- columns: {
1500
- id: drizzle_orm_pg_core.PgColumn<{
1501
- name: "id";
1502
- tableName: "map_objects";
1503
- dataType: "string";
1504
- columnType: "PgUUID";
1505
- data: string;
1506
- driverParam: string;
1507
- notNull: true;
1508
- hasDefault: true;
1509
- isPrimaryKey: true;
1510
- isAutoincrement: false;
1511
- hasRuntimeDefault: false;
1512
- enumValues: undefined;
1513
- baseColumn: never;
1514
- identity: undefined;
1515
- generated: undefined;
1516
- }, {}, {}>;
1517
- userId: drizzle_orm_pg_core.PgColumn<{
1518
- name: "user_id";
1519
- tableName: "map_objects";
1520
- dataType: "string";
1521
- columnType: "PgText";
1522
- data: string;
1523
- driverParam: string;
1524
- notNull: true;
1525
- hasDefault: false;
1526
- isPrimaryKey: false;
1527
- isAutoincrement: false;
1528
- hasRuntimeDefault: false;
1529
- enumValues: [string, ...string[]];
1530
- baseColumn: never;
1531
- identity: undefined;
1532
- generated: undefined;
1533
- }, {}, {}>;
1534
- mapId: drizzle_orm_pg_core.PgColumn<{
1535
- name: "map_id";
1536
- tableName: "map_objects";
1537
- dataType: "string";
1538
- columnType: "PgUUID";
1539
- data: string;
1540
- driverParam: string;
1541
- notNull: true;
1542
- hasDefault: false;
1543
- isPrimaryKey: false;
1544
- isAutoincrement: false;
1545
- hasRuntimeDefault: false;
1546
- enumValues: undefined;
1547
- baseColumn: never;
1548
- identity: undefined;
1549
- generated: undefined;
1550
- }, {}, {}>;
1551
- itemId: drizzle_orm_pg_core.PgColumn<{
1552
- name: "item_id";
1553
- tableName: "map_objects";
1554
- dataType: "string";
1555
- columnType: "PgUUID";
1556
- data: string;
1557
- driverParam: string;
1558
- notNull: true;
1559
- hasDefault: false;
1560
- isPrimaryKey: false;
1561
- isAutoincrement: false;
1562
- hasRuntimeDefault: false;
1563
- enumValues: undefined;
1564
- baseColumn: never;
1565
- identity: undefined;
1566
- generated: undefined;
1567
- }, {}, {}>;
1568
- worldX: drizzle_orm_pg_core.PgColumn<{
1569
- name: "world_x";
1570
- tableName: "map_objects";
1571
- dataType: "number";
1572
- columnType: "PgDoublePrecision";
1573
- data: number;
1574
- driverParam: string | number;
1575
- notNull: true;
1576
- hasDefault: false;
1577
- isPrimaryKey: false;
1578
- isAutoincrement: false;
1579
- hasRuntimeDefault: false;
1580
- enumValues: undefined;
1581
- baseColumn: never;
1582
- identity: undefined;
1583
- generated: undefined;
1584
- }, {}, {}>;
1585
- worldY: drizzle_orm_pg_core.PgColumn<{
1586
- name: "world_y";
1587
- tableName: "map_objects";
1588
- dataType: "number";
1589
- columnType: "PgDoublePrecision";
1590
- data: number;
1591
- driverParam: string | number;
1592
- notNull: true;
1593
- hasDefault: false;
1594
- isPrimaryKey: false;
1595
- isAutoincrement: false;
1596
- hasRuntimeDefault: false;
1597
- enumValues: undefined;
1598
- baseColumn: never;
1599
- identity: undefined;
1600
- generated: undefined;
1601
- }, {}, {}>;
1602
- rotation: drizzle_orm_pg_core.PgColumn<{
1603
- name: "rotation";
1604
- tableName: "map_objects";
1605
- dataType: "number";
1606
- columnType: "PgInteger";
1607
- data: number;
1608
- driverParam: string | number;
1609
- notNull: true;
1610
- hasDefault: true;
1611
- isPrimaryKey: false;
1612
- isAutoincrement: false;
1613
- hasRuntimeDefault: false;
1614
- enumValues: undefined;
1615
- baseColumn: never;
1616
- identity: undefined;
1617
- generated: undefined;
1618
- }, {}, {}>;
1619
- scale: drizzle_orm_pg_core.PgColumn<{
1620
- name: "scale";
1621
- tableName: "map_objects";
1622
- dataType: "number";
1623
- columnType: "PgDoublePrecision";
1624
- data: number;
1625
- driverParam: string | number;
1626
- notNull: true;
1627
- hasDefault: true;
1628
- isPrimaryKey: false;
1629
- isAutoincrement: false;
1630
- hasRuntimeDefault: false;
1631
- enumValues: undefined;
1632
- baseColumn: never;
1633
- identity: undefined;
1634
- generated: undefined;
1635
- }, {}, {}>;
1636
- createdAt: drizzle_orm_pg_core.PgColumn<{
1637
- name: "created_at";
1638
- tableName: "map_objects";
1639
- dataType: "date";
1640
- columnType: "PgTimestamp";
1641
- data: Date;
1642
- driverParam: string;
1643
- notNull: true;
1644
- hasDefault: true;
1645
- isPrimaryKey: false;
1646
- isAutoincrement: false;
1647
- hasRuntimeDefault: false;
1648
- enumValues: undefined;
1649
- baseColumn: never;
1650
- identity: undefined;
1651
- generated: undefined;
1652
- }, {}, {}>;
1653
- };
1654
- dialect: "pg";
1655
- }>;
1656
-
1657
- declare const userLevels: drizzle_orm_pg_core.PgTableWithColumns<{
1658
- name: "user_levels";
1659
- schema: undefined;
1660
- columns: {
1661
- userId: drizzle_orm_pg_core.PgColumn<{
1662
- name: "user_id";
1663
- tableName: "user_levels";
1664
- dataType: "string";
1665
- columnType: "PgText";
1666
- data: string;
1667
- driverParam: string;
1668
- notNull: true;
1669
- hasDefault: false;
1670
- isPrimaryKey: true;
1671
- isAutoincrement: false;
1672
- hasRuntimeDefault: false;
1673
- enumValues: [string, ...string[]];
1674
- baseColumn: never;
1675
- identity: undefined;
1676
- generated: undefined;
1677
- }, {}, {}>;
1678
- currentLevel: drizzle_orm_pg_core.PgColumn<{
1679
- name: "current_level";
1680
- tableName: "user_levels";
1681
- dataType: "number";
1682
- columnType: "PgInteger";
1683
- data: number;
1684
- driverParam: string | number;
1685
- notNull: true;
1686
- hasDefault: true;
1687
- isPrimaryKey: false;
1688
- isAutoincrement: false;
1689
- hasRuntimeDefault: false;
1690
- enumValues: undefined;
1691
- baseColumn: never;
1692
- identity: undefined;
1693
- generated: undefined;
1694
- }, {}, {}>;
1695
- currentXp: drizzle_orm_pg_core.PgColumn<{
1696
- name: "current_xp";
1697
- tableName: "user_levels";
1698
- dataType: "number";
1699
- columnType: "PgDoublePrecision";
1700
- data: number;
1701
- driverParam: string | number;
1702
- notNull: true;
1703
- hasDefault: true;
1704
- isPrimaryKey: false;
1705
- isAutoincrement: false;
1706
- hasRuntimeDefault: false;
1707
- enumValues: undefined;
1708
- baseColumn: never;
1709
- identity: undefined;
1710
- generated: undefined;
1711
- }, {}, {}>;
1712
- totalXP: drizzle_orm_pg_core.PgColumn<{
1713
- name: "total_xp";
1714
- tableName: "user_levels";
1715
- dataType: "number";
1716
- columnType: "PgDoublePrecision";
1717
- data: number;
1718
- driverParam: string | number;
1719
- notNull: true;
1720
- hasDefault: true;
1721
- isPrimaryKey: false;
1722
- isAutoincrement: false;
1723
- hasRuntimeDefault: false;
1724
- enumValues: undefined;
1725
- baseColumn: never;
1726
- identity: undefined;
1727
- generated: undefined;
1728
- }, {}, {}>;
1729
- lastLevelUpAt: drizzle_orm_pg_core.PgColumn<{
1730
- name: "last_level_up_at";
1731
- tableName: "user_levels";
1732
- dataType: "date";
1733
- columnType: "PgTimestamp";
1734
- data: Date;
1735
- driverParam: string;
1736
- notNull: false;
1737
- hasDefault: false;
1738
- isPrimaryKey: false;
1739
- isAutoincrement: false;
1740
- hasRuntimeDefault: false;
1741
- enumValues: undefined;
1742
- baseColumn: never;
1743
- identity: undefined;
1744
- generated: undefined;
1745
- }, {}, {}>;
1746
- createdAt: drizzle_orm_pg_core.PgColumn<{
1747
- name: "created_at";
1748
- tableName: "user_levels";
1749
- dataType: "date";
1750
- columnType: "PgTimestamp";
1751
- data: Date;
1752
- driverParam: string;
1753
- notNull: true;
1754
- hasDefault: true;
1755
- isPrimaryKey: false;
1756
- isAutoincrement: false;
1757
- hasRuntimeDefault: false;
1758
- enumValues: undefined;
1759
- baseColumn: never;
1760
- identity: undefined;
1761
- generated: undefined;
1762
- }, {}, {}>;
1763
- updatedAt: drizzle_orm_pg_core.PgColumn<{
1764
- name: "updated_at";
1765
- tableName: "user_levels";
1766
- dataType: "date";
1767
- columnType: "PgTimestamp";
1768
- data: Date;
1769
- driverParam: string;
1770
- notNull: false;
1771
- hasDefault: true;
1772
- isPrimaryKey: false;
1773
- isAutoincrement: false;
1774
- hasRuntimeDefault: false;
1775
- enumValues: undefined;
1776
- baseColumn: never;
1777
- identity: undefined;
1778
- generated: undefined;
1779
- }, {}, {}>;
1780
- };
1781
- dialect: "pg";
1782
- }>;
1783
- declare const levelConfigs: drizzle_orm_pg_core.PgTableWithColumns<{
1784
- name: "level_configs";
1785
- schema: undefined;
1786
- columns: {
1787
- id: drizzle_orm_pg_core.PgColumn<{
1788
- name: "id";
1789
- tableName: "level_configs";
1790
- dataType: "string";
1791
- columnType: "PgUUID";
1792
- data: string;
1793
- driverParam: string;
1794
- notNull: true;
1795
- hasDefault: true;
1796
- isPrimaryKey: true;
1797
- isAutoincrement: false;
1798
- hasRuntimeDefault: false;
1799
- enumValues: undefined;
1800
- baseColumn: never;
1801
- identity: undefined;
1802
- generated: undefined;
1803
- }, {}, {}>;
1804
- level: drizzle_orm_pg_core.PgColumn<{
1805
- name: "level";
1806
- tableName: "level_configs";
1807
- dataType: "number";
1808
- columnType: "PgInteger";
1809
- data: number;
1810
- driverParam: string | number;
1811
- notNull: true;
1812
- hasDefault: false;
1813
- isPrimaryKey: false;
1814
- isAutoincrement: false;
1815
- hasRuntimeDefault: false;
1816
- enumValues: undefined;
1817
- baseColumn: never;
1818
- identity: undefined;
1819
- generated: undefined;
1820
- }, {}, {}>;
1821
- xpRequired: drizzle_orm_pg_core.PgColumn<{
1822
- name: "xp_required";
1823
- tableName: "level_configs";
1824
- dataType: "number";
1825
- columnType: "PgInteger";
1826
- data: number;
1827
- driverParam: string | number;
1828
- notNull: true;
1829
- hasDefault: false;
1830
- isPrimaryKey: false;
1831
- isAutoincrement: false;
1832
- hasRuntimeDefault: false;
1833
- enumValues: undefined;
1834
- baseColumn: never;
1835
- identity: undefined;
1836
- generated: undefined;
1837
- }, {}, {}>;
1838
- creditsReward: drizzle_orm_pg_core.PgColumn<{
1839
- name: "credits_reward";
1840
- tableName: "level_configs";
1841
- dataType: "number";
1842
- columnType: "PgInteger";
1843
- data: number;
1844
- driverParam: string | number;
1845
- notNull: true;
1846
- hasDefault: true;
1847
- isPrimaryKey: false;
1848
- isAutoincrement: false;
1849
- hasRuntimeDefault: false;
1850
- enumValues: undefined;
1851
- baseColumn: never;
1852
- identity: undefined;
1853
- generated: undefined;
1854
- }, {}, {}>;
1855
- createdAt: drizzle_orm_pg_core.PgColumn<{
1856
- name: "created_at";
1857
- tableName: "level_configs";
1858
- dataType: "date";
1859
- columnType: "PgTimestamp";
1860
- data: Date;
1861
- driverParam: string;
1862
- notNull: true;
1863
- hasDefault: true;
1864
- isPrimaryKey: false;
1865
- isAutoincrement: false;
1866
- hasRuntimeDefault: false;
1867
- enumValues: undefined;
1868
- baseColumn: never;
1869
- identity: undefined;
1870
- generated: undefined;
1871
- }, {}, {}>;
1872
- };
1873
- dialect: "pg";
1874
- }>;
1875
- declare const characterComponents: drizzle_orm_pg_core.PgTableWithColumns<{
1876
- name: "character_components";
1877
- schema: undefined;
1878
- columns: {
1879
- id: drizzle_orm_pg_core.PgColumn<{
1880
- name: "id";
1881
- tableName: "character_components";
1882
- dataType: "string";
1883
- columnType: "PgUUID";
1884
- data: string;
1885
- driverParam: string;
1886
- notNull: true;
1887
- hasDefault: true;
1888
- isPrimaryKey: true;
1889
- isAutoincrement: false;
1890
- hasRuntimeDefault: false;
1891
- enumValues: undefined;
1892
- baseColumn: never;
1893
- identity: undefined;
1894
- generated: undefined;
1895
- }, {}, {}>;
1896
- componentType: drizzle_orm_pg_core.PgColumn<{
1897
- name: "component_type";
1898
- tableName: "character_components";
1899
- dataType: "string";
1900
- columnType: "PgEnumColumn";
1901
- data: "accessory" | "body" | "outfit" | "hairstyle" | "eyes";
1902
- driverParam: string;
1903
- notNull: true;
1904
- hasDefault: false;
1905
- isPrimaryKey: false;
1906
- isAutoincrement: false;
1907
- hasRuntimeDefault: false;
1908
- enumValues: ["body", "outfit", "hairstyle", "eyes", "accessory"];
1909
- baseColumn: never;
1910
- identity: undefined;
1911
- generated: undefined;
1912
- }, {}, {}>;
1913
- slug: drizzle_orm_pg_core.PgColumn<{
1914
- name: "slug";
1915
- tableName: "character_components";
1916
- dataType: "string";
1917
- columnType: "PgVarchar";
1918
- data: string;
1919
- driverParam: string;
1920
- notNull: true;
1921
- hasDefault: false;
1922
- isPrimaryKey: false;
1923
- isAutoincrement: false;
1924
- hasRuntimeDefault: false;
1925
- enumValues: [string, ...string[]];
1926
- baseColumn: never;
1927
- identity: undefined;
1928
- generated: undefined;
1929
- }, {}, {
1930
- length: 128;
1931
- }>;
1932
- displayName: drizzle_orm_pg_core.PgColumn<{
1933
- name: "display_name";
1934
- tableName: "character_components";
1935
- dataType: "string";
1936
- columnType: "PgVarchar";
1937
- data: string;
1938
- driverParam: string;
1939
- notNull: true;
1940
- hasDefault: false;
1941
- isPrimaryKey: false;
1942
- isAutoincrement: false;
1943
- hasRuntimeDefault: false;
1944
- enumValues: [string, ...string[]];
1945
- baseColumn: never;
1946
- identity: undefined;
1947
- generated: undefined;
1948
- }, {}, {
1949
- length: 128;
1950
- }>;
1951
- slot: drizzle_orm_pg_core.PgColumn<{
1952
- name: "slot";
1953
- tableName: "character_components";
1954
- dataType: "string";
1955
- columnType: "PgVarchar";
1956
- data: string;
1957
- driverParam: string;
1958
- notNull: true;
1959
- hasDefault: false;
1960
- isPrimaryKey: false;
1961
- isAutoincrement: false;
1962
- hasRuntimeDefault: false;
1963
- enumValues: [string, ...string[]];
1964
- baseColumn: never;
1965
- identity: undefined;
1966
- generated: undefined;
1967
- }, {}, {
1968
- length: 64;
1969
- }>;
1970
- spriteSheetId: drizzle_orm_pg_core.PgColumn<{
1971
- name: "sprite_sheet_id";
1972
- tableName: "character_components";
1973
- dataType: "string";
1974
- columnType: "PgUUID";
1975
- data: string;
1976
- driverParam: string;
1977
- notNull: true;
1978
- hasDefault: false;
1979
- isPrimaryKey: false;
1980
- isAutoincrement: false;
1981
- hasRuntimeDefault: false;
1982
- enumValues: undefined;
1983
- baseColumn: never;
1984
- identity: undefined;
1985
- generated: undefined;
1986
- }, {}, {}>;
1987
- unlockLevel: drizzle_orm_pg_core.PgColumn<{
1988
- name: "unlock_level";
1989
- tableName: "character_components";
1990
- dataType: "number";
1991
- columnType: "PgInteger";
1992
- data: number;
1993
- driverParam: string | number;
1994
- notNull: true;
1995
- hasDefault: true;
1996
- isPrimaryKey: false;
1997
- isAutoincrement: false;
1998
- hasRuntimeDefault: false;
1999
- enumValues: undefined;
2000
- baseColumn: never;
2001
- identity: undefined;
2002
- generated: undefined;
2003
- }, {}, {}>;
2004
- variant: drizzle_orm_pg_core.PgColumn<{
2005
- name: "variant";
2006
- tableName: "character_components";
2007
- dataType: "number";
2008
- columnType: "PgInteger";
2009
- data: number;
2010
- driverParam: string | number;
2011
- notNull: true;
2012
- hasDefault: true;
2013
- isPrimaryKey: false;
2014
- isAutoincrement: false;
2015
- hasRuntimeDefault: false;
2016
- enumValues: undefined;
2017
- baseColumn: never;
2018
- identity: undefined;
2019
- generated: undefined;
2020
- }, {}, {}>;
2021
- createdAt: drizzle_orm_pg_core.PgColumn<{
2022
- name: "created_at";
2023
- tableName: "character_components";
2024
- dataType: "date";
2025
- columnType: "PgTimestamp";
2026
- data: Date;
2027
- driverParam: string;
2028
- notNull: true;
2029
- hasDefault: true;
2030
- isPrimaryKey: false;
2031
- isAutoincrement: false;
2032
- hasRuntimeDefault: false;
2033
- enumValues: undefined;
2034
- baseColumn: never;
2035
- identity: undefined;
2036
- generated: undefined;
2037
- }, {}, {}>;
2038
- updatedAt: drizzle_orm_pg_core.PgColumn<{
2039
- name: "updated_at";
2040
- tableName: "character_components";
2041
- dataType: "date";
2042
- columnType: "PgTimestamp";
2043
- data: Date;
2044
- driverParam: string;
2045
- notNull: true;
2046
- hasDefault: true;
2047
- isPrimaryKey: false;
2048
- isAutoincrement: false;
2049
- hasRuntimeDefault: false;
2050
- enumValues: undefined;
2051
- baseColumn: never;
2052
- identity: undefined;
2053
- generated: undefined;
2054
- }, {}, {}>;
2055
- };
2056
- dialect: "pg";
2057
- }>;
2058
- declare const playerCharacters: drizzle_orm_pg_core.PgTableWithColumns<{
2059
- name: "player_characters";
2060
- schema: undefined;
2061
- columns: {
2062
- id: drizzle_orm_pg_core.PgColumn<{
2063
- name: "id";
2064
- tableName: "player_characters";
2065
- dataType: "string";
2066
- columnType: "PgUUID";
2067
- data: string;
2068
- driverParam: string;
2069
- notNull: true;
2070
- hasDefault: true;
2071
- isPrimaryKey: true;
2072
- isAutoincrement: false;
2073
- hasRuntimeDefault: false;
2074
- enumValues: undefined;
2075
- baseColumn: never;
2076
- identity: undefined;
2077
- generated: undefined;
2078
- }, {}, {}>;
2079
- userId: drizzle_orm_pg_core.PgColumn<{
2080
- name: "user_id";
2081
- tableName: "player_characters";
2082
- dataType: "string";
2083
- columnType: "PgText";
2084
- data: string;
2085
- driverParam: string;
2086
- notNull: true;
2087
- hasDefault: false;
2088
- isPrimaryKey: false;
2089
- isAutoincrement: false;
2090
- hasRuntimeDefault: false;
2091
- enumValues: [string, ...string[]];
2092
- baseColumn: never;
2093
- identity: undefined;
2094
- generated: undefined;
2095
- }, {}, {}>;
2096
- bodyComponentId: drizzle_orm_pg_core.PgColumn<{
2097
- name: "body_component_id";
2098
- tableName: "player_characters";
2099
- dataType: "string";
2100
- columnType: "PgUUID";
2101
- data: string;
2102
- driverParam: string;
2103
- notNull: true;
2104
- hasDefault: false;
2105
- isPrimaryKey: false;
2106
- isAutoincrement: false;
2107
- hasRuntimeDefault: false;
2108
- enumValues: undefined;
2109
- baseColumn: never;
2110
- identity: undefined;
2111
- generated: undefined;
2112
- }, {}, {}>;
2113
- eyesComponentId: drizzle_orm_pg_core.PgColumn<{
2114
- name: "eyes_component_id";
2115
- tableName: "player_characters";
2116
- dataType: "string";
2117
- columnType: "PgUUID";
2118
- data: string;
2119
- driverParam: string;
2120
- notNull: true;
2121
- hasDefault: false;
2122
- isPrimaryKey: false;
2123
- isAutoincrement: false;
2124
- hasRuntimeDefault: false;
2125
- enumValues: undefined;
2126
- baseColumn: never;
2127
- identity: undefined;
2128
- generated: undefined;
2129
- }, {}, {}>;
2130
- hairstyleComponentId: drizzle_orm_pg_core.PgColumn<{
2131
- name: "hairstyle_component_id";
2132
- tableName: "player_characters";
2133
- dataType: "string";
2134
- columnType: "PgUUID";
2135
- data: string;
2136
- driverParam: string;
2137
- notNull: true;
2138
- hasDefault: false;
2139
- isPrimaryKey: false;
2140
- isAutoincrement: false;
2141
- hasRuntimeDefault: false;
2142
- enumValues: undefined;
2143
- baseColumn: never;
2144
- identity: undefined;
2145
- generated: undefined;
2146
- }, {}, {}>;
2147
- outfitComponentId: drizzle_orm_pg_core.PgColumn<{
2148
- name: "outfit_component_id";
2149
- tableName: "player_characters";
2150
- dataType: "string";
2151
- columnType: "PgUUID";
2152
- data: string;
2153
- driverParam: string;
2154
- notNull: true;
2155
- hasDefault: false;
2156
- isPrimaryKey: false;
2157
- isAutoincrement: false;
2158
- hasRuntimeDefault: false;
2159
- enumValues: undefined;
2160
- baseColumn: never;
2161
- identity: undefined;
2162
- generated: undefined;
2163
- }, {}, {}>;
2164
- createdAt: drizzle_orm_pg_core.PgColumn<{
2165
- name: "created_at";
2166
- tableName: "player_characters";
2167
- dataType: "date";
2168
- columnType: "PgTimestamp";
2169
- data: Date;
2170
- driverParam: string;
2171
- notNull: true;
2172
- hasDefault: true;
2173
- isPrimaryKey: false;
2174
- isAutoincrement: false;
2175
- hasRuntimeDefault: false;
2176
- enumValues: undefined;
2177
- baseColumn: never;
2178
- identity: undefined;
2179
- generated: undefined;
2180
- }, {}, {}>;
2181
- updatedAt: drizzle_orm_pg_core.PgColumn<{
2182
- name: "updated_at";
2183
- tableName: "player_characters";
2184
- dataType: "date";
2185
- columnType: "PgTimestamp";
2186
- data: Date;
2187
- driverParam: string;
2188
- notNull: true;
2189
- hasDefault: true;
2190
- isPrimaryKey: false;
2191
- isAutoincrement: false;
2192
- hasRuntimeDefault: false;
2193
- enumValues: undefined;
2194
- baseColumn: never;
2195
- identity: undefined;
2196
- generated: undefined;
2197
- }, {}, {}>;
2198
- };
2199
- dialect: "pg";
2200
- }>;
2201
- declare const playerCharacterAccessories: drizzle_orm_pg_core.PgTableWithColumns<{
2202
- name: "player_character_accessories";
2203
- schema: undefined;
2204
- columns: {
2205
- id: drizzle_orm_pg_core.PgColumn<{
2206
- name: "id";
2207
- tableName: "player_character_accessories";
2208
- dataType: "string";
2209
- columnType: "PgUUID";
2210
- data: string;
2211
- driverParam: string;
2212
- notNull: true;
2213
- hasDefault: true;
2214
- isPrimaryKey: true;
2215
- isAutoincrement: false;
2216
- hasRuntimeDefault: false;
2217
- enumValues: undefined;
2218
- baseColumn: never;
2219
- identity: undefined;
2220
- generated: undefined;
2221
- }, {}, {}>;
2222
- playerCharacterId: drizzle_orm_pg_core.PgColumn<{
2223
- name: "player_character_id";
2224
- tableName: "player_character_accessories";
2225
- dataType: "string";
2226
- columnType: "PgUUID";
2227
- data: string;
2228
- driverParam: string;
2229
- notNull: true;
2230
- hasDefault: false;
2231
- isPrimaryKey: false;
2232
- isAutoincrement: false;
2233
- hasRuntimeDefault: false;
2234
- enumValues: undefined;
2235
- baseColumn: never;
2236
- identity: undefined;
2237
- generated: undefined;
2238
- }, {}, {}>;
2239
- accessoryComponentId: drizzle_orm_pg_core.PgColumn<{
2240
- name: "accessory_component_id";
2241
- tableName: "player_character_accessories";
2242
- dataType: "string";
2243
- columnType: "PgUUID";
2244
- data: string;
2245
- driverParam: string;
2246
- notNull: true;
2247
- hasDefault: false;
2248
- isPrimaryKey: false;
2249
- isAutoincrement: false;
2250
- hasRuntimeDefault: false;
2251
- enumValues: undefined;
2252
- baseColumn: never;
2253
- identity: undefined;
2254
- generated: undefined;
2255
- }, {}, {}>;
2256
- slot: drizzle_orm_pg_core.PgColumn<{
2257
- name: "slot";
2258
- tableName: "player_character_accessories";
2259
- dataType: "string";
2260
- columnType: "PgVarchar";
2261
- data: string;
2262
- driverParam: string;
2263
- notNull: true;
2264
- hasDefault: false;
2265
- isPrimaryKey: false;
2266
- isAutoincrement: false;
2267
- hasRuntimeDefault: false;
2268
- enumValues: [string, ...string[]];
2269
- baseColumn: never;
2270
- identity: undefined;
2271
- generated: undefined;
2272
- }, {}, {
2273
- length: 64;
2274
- }>;
2275
- equippedAt: drizzle_orm_pg_core.PgColumn<{
2276
- name: "equipped_at";
2277
- tableName: "player_character_accessories";
2278
- dataType: "date";
2279
- columnType: "PgTimestamp";
2280
- data: Date;
2281
- driverParam: string;
2282
- notNull: true;
2283
- hasDefault: true;
2284
- isPrimaryKey: false;
2285
- isAutoincrement: false;
2286
- hasRuntimeDefault: false;
2287
- enumValues: undefined;
2288
- baseColumn: never;
2289
- identity: undefined;
2290
- generated: undefined;
2291
- }, {}, {}>;
2292
- updatedAt: drizzle_orm_pg_core.PgColumn<{
2293
- name: "updated_at";
2294
- tableName: "player_character_accessories";
2295
- dataType: "date";
2296
- columnType: "PgTimestamp";
2297
- data: Date;
2298
- driverParam: string;
2299
- notNull: true;
2300
- hasDefault: true;
2301
- isPrimaryKey: false;
2302
- isAutoincrement: false;
2303
- hasRuntimeDefault: false;
2304
- enumValues: undefined;
2305
- baseColumn: never;
2306
- identity: undefined;
2307
- generated: undefined;
2308
- }, {}, {}>;
2309
- };
2310
- dialect: "pg";
2311
- }>;
2312
- declare const gameTimebackIntegrations: drizzle_orm_pg_core.PgTableWithColumns<{
2313
- name: "game_timeback_integrations";
2314
- schema: undefined;
2315
- columns: {
2316
- id: drizzle_orm_pg_core.PgColumn<{
2317
- name: "id";
2318
- tableName: "game_timeback_integrations";
2319
- dataType: "string";
2320
- columnType: "PgUUID";
2321
- data: string;
2322
- driverParam: string;
2323
- notNull: true;
2324
- hasDefault: true;
2325
- isPrimaryKey: true;
2326
- isAutoincrement: false;
2327
- hasRuntimeDefault: false;
2328
- enumValues: undefined;
2329
- baseColumn: never;
2330
- identity: undefined;
2331
- generated: undefined;
2332
- }, {}, {}>;
2333
- gameId: drizzle_orm_pg_core.PgColumn<{
2334
- name: "game_id";
2335
- tableName: "game_timeback_integrations";
2336
- dataType: "string";
2337
- columnType: "PgUUID";
2338
- data: string;
2339
- driverParam: string;
2340
- notNull: true;
2341
- hasDefault: false;
2342
- isPrimaryKey: false;
2343
- isAutoincrement: false;
2344
- hasRuntimeDefault: false;
2345
- enumValues: undefined;
2346
- baseColumn: never;
2347
- identity: undefined;
2348
- generated: undefined;
2349
- }, {}, {}>;
2350
- courseId: drizzle_orm_pg_core.PgColumn<{
2351
- name: "course_id";
2352
- tableName: "game_timeback_integrations";
2353
- dataType: "string";
2354
- columnType: "PgText";
2355
- data: string;
2356
- driverParam: string;
2357
- notNull: true;
2358
- hasDefault: false;
2359
- isPrimaryKey: false;
2360
- isAutoincrement: false;
2361
- hasRuntimeDefault: false;
2362
- enumValues: [string, ...string[]];
2363
- baseColumn: never;
2364
- identity: undefined;
2365
- generated: undefined;
2366
- }, {}, {}>;
2367
- lastVerifiedAt: drizzle_orm_pg_core.PgColumn<{
2368
- name: "last_verified_at";
2369
- tableName: "game_timeback_integrations";
2370
- dataType: "date";
2371
- columnType: "PgTimestamp";
2372
- data: Date;
2373
- driverParam: string;
2374
- notNull: false;
2375
- hasDefault: false;
2376
- isPrimaryKey: false;
2377
- isAutoincrement: false;
2378
- hasRuntimeDefault: false;
2379
- enumValues: undefined;
2380
- baseColumn: never;
2381
- identity: undefined;
2382
- generated: undefined;
2383
- }, {}, {}>;
2384
- createdAt: drizzle_orm_pg_core.PgColumn<{
2385
- name: "created_at";
2386
- tableName: "game_timeback_integrations";
2387
- dataType: "date";
2388
- columnType: "PgTimestamp";
2389
- data: Date;
2390
- driverParam: string;
2391
- notNull: true;
2392
- hasDefault: true;
2393
- isPrimaryKey: false;
2394
- isAutoincrement: false;
2395
- hasRuntimeDefault: false;
2396
- enumValues: undefined;
2397
- baseColumn: never;
2398
- identity: undefined;
2399
- generated: undefined;
2400
- }, {}, {}>;
2401
- updatedAt: drizzle_orm_pg_core.PgColumn<{
2402
- name: "updated_at";
2403
- tableName: "game_timeback_integrations";
2404
- dataType: "date";
2405
- columnType: "PgTimestamp";
2406
- data: Date;
2407
- driverParam: string;
2408
- notNull: true;
2409
- hasDefault: true;
2410
- isPrimaryKey: false;
2411
- isAutoincrement: false;
2412
- hasRuntimeDefault: false;
2413
- enumValues: undefined;
2414
- baseColumn: never;
2415
- identity: undefined;
2416
- generated: undefined;
2417
- }, {}, {}>;
2418
- };
2419
- dialect: "pg";
2420
- }>;
2421
-
2422
- declare const achievementScopeEnum: drizzle_orm_pg_core.PgEnum<["daily", "weekly", "monthly", "yearly", "game", "global", "map", "level", "event"]>;
2423
- declare const notifications: drizzle_orm_pg_core.PgTableWithColumns<{
2424
- name: "notifications";
2425
- schema: undefined;
2426
- columns: {
2427
- id: drizzle_orm_pg_core.PgColumn<{
2428
- name: "id";
2429
- tableName: "notifications";
2430
- dataType: "string";
2431
- columnType: "PgUUID";
2432
- data: string;
2433
- driverParam: string;
2434
- notNull: true;
2435
- hasDefault: true;
2436
- isPrimaryKey: true;
2437
- isAutoincrement: false;
2438
- hasRuntimeDefault: false;
2439
- enumValues: undefined;
2440
- baseColumn: never;
2441
- identity: undefined;
2442
- generated: undefined;
2443
- }, {}, {}>;
2444
- userId: drizzle_orm_pg_core.PgColumn<{
2445
- name: "user_id";
2446
- tableName: "notifications";
2447
- dataType: "string";
2448
- columnType: "PgText";
2449
- data: string;
2450
- driverParam: string;
2451
- notNull: true;
2452
- hasDefault: false;
2453
- isPrimaryKey: false;
2454
- isAutoincrement: false;
2455
- hasRuntimeDefault: false;
2456
- enumValues: [string, ...string[]];
2457
- baseColumn: never;
2458
- identity: undefined;
2459
- generated: undefined;
2460
- }, {}, {}>;
2461
- type: drizzle_orm_pg_core.PgColumn<{
2462
- name: "type";
2463
- tableName: "notifications";
2464
- dataType: "string";
2465
- columnType: "PgVarchar";
2466
- data: string;
2467
- driverParam: string;
2468
- notNull: true;
2469
- hasDefault: false;
2470
- isPrimaryKey: false;
2471
- isAutoincrement: false;
2472
- hasRuntimeDefault: false;
2473
- enumValues: [string, ...string[]];
2474
- baseColumn: never;
2475
- identity: undefined;
2476
- generated: undefined;
2477
- }, {}, {
2478
- length: 50;
2479
- }>;
2480
- title: drizzle_orm_pg_core.PgColumn<{
2481
- name: "title";
2482
- tableName: "notifications";
2483
- dataType: "string";
2484
- columnType: "PgVarchar";
2485
- data: string;
2486
- driverParam: string;
2487
- notNull: true;
2488
- hasDefault: false;
2489
- isPrimaryKey: false;
2490
- isAutoincrement: false;
2491
- hasRuntimeDefault: false;
2492
- enumValues: [string, ...string[]];
2493
- baseColumn: never;
2494
- identity: undefined;
2495
- generated: undefined;
2496
- }, {}, {
2497
- length: 255;
2498
- }>;
2499
- message: drizzle_orm_pg_core.PgColumn<{
2500
- name: "message";
2501
- tableName: "notifications";
2502
- dataType: "string";
2503
- columnType: "PgText";
2504
- data: string;
2505
- driverParam: string;
2506
- notNull: true;
2507
- hasDefault: false;
2508
- isPrimaryKey: false;
2509
- isAutoincrement: false;
2510
- hasRuntimeDefault: false;
2511
- enumValues: [string, ...string[]];
2512
- baseColumn: never;
2513
- identity: undefined;
2514
- generated: undefined;
2515
- }, {}, {}>;
2516
- data: drizzle_orm_pg_core.PgColumn<{
2517
- name: "data";
2518
- tableName: "notifications";
2519
- dataType: "json";
2520
- columnType: "PgJsonb";
2521
- data: unknown;
2522
- driverParam: unknown;
2523
- notNull: true;
2524
- hasDefault: true;
2525
- isPrimaryKey: false;
2526
- isAutoincrement: false;
2527
- hasRuntimeDefault: false;
2528
- enumValues: undefined;
2529
- baseColumn: never;
2530
- identity: undefined;
2531
- generated: undefined;
2532
- }, {}, {}>;
2533
- priority: drizzle_orm_pg_core.PgColumn<{
2534
- name: "priority";
2535
- tableName: "notifications";
2536
- dataType: "string";
2537
- columnType: "PgEnumColumn";
2538
- data: "low" | "normal" | "high" | "urgent";
2539
- driverParam: string;
2540
- notNull: true;
2541
- hasDefault: true;
2542
- isPrimaryKey: false;
2543
- isAutoincrement: false;
2544
- hasRuntimeDefault: false;
2545
- enumValues: ["low", "normal", "high", "urgent"];
2546
- baseColumn: never;
2547
- identity: undefined;
2548
- generated: undefined;
2549
- }, {}, {}>;
2550
- status: drizzle_orm_pg_core.PgColumn<{
2551
- name: "status";
2552
- tableName: "notifications";
2553
- dataType: "string";
2554
- columnType: "PgEnumColumn";
2555
- data: "pending" | "delivered" | "seen" | "clicked" | "dismissed" | "expired";
2556
- driverParam: string;
2557
- notNull: true;
2558
- hasDefault: true;
2559
- isPrimaryKey: false;
2560
- isAutoincrement: false;
2561
- hasRuntimeDefault: false;
2562
- enumValues: ["pending", "delivered", "seen", "clicked", "dismissed", "expired"];
2563
- baseColumn: never;
2564
- identity: undefined;
2565
- generated: undefined;
2566
- }, {}, {}>;
2567
- createdAt: drizzle_orm_pg_core.PgColumn<{
2568
- name: "created_at";
2569
- tableName: "notifications";
2570
- dataType: "date";
2571
- columnType: "PgTimestamp";
2572
- data: Date;
2573
- driverParam: string;
2574
- notNull: true;
2575
- hasDefault: true;
2576
- isPrimaryKey: false;
2577
- isAutoincrement: false;
2578
- hasRuntimeDefault: false;
2579
- enumValues: undefined;
2580
- baseColumn: never;
2581
- identity: undefined;
2582
- generated: undefined;
2583
- }, {}, {}>;
2584
- deliveredAt: drizzle_orm_pg_core.PgColumn<{
2585
- name: "delivered_at";
2586
- tableName: "notifications";
2587
- dataType: "date";
2588
- columnType: "PgTimestamp";
2589
- data: Date;
2590
- driverParam: string;
2591
- notNull: false;
2592
- hasDefault: false;
2593
- isPrimaryKey: false;
2594
- isAutoincrement: false;
2595
- hasRuntimeDefault: false;
2596
- enumValues: undefined;
2597
- baseColumn: never;
2598
- identity: undefined;
2599
- generated: undefined;
2600
- }, {}, {}>;
2601
- seenAt: drizzle_orm_pg_core.PgColumn<{
2602
- name: "seen_at";
2603
- tableName: "notifications";
2604
- dataType: "date";
2605
- columnType: "PgTimestamp";
2606
- data: Date;
2607
- driverParam: string;
2608
- notNull: false;
2609
- hasDefault: false;
2610
- isPrimaryKey: false;
2611
- isAutoincrement: false;
2612
- hasRuntimeDefault: false;
2613
- enumValues: undefined;
2614
- baseColumn: never;
2615
- identity: undefined;
2616
- generated: undefined;
2617
- }, {}, {}>;
2618
- clickedAt: drizzle_orm_pg_core.PgColumn<{
2619
- name: "clicked_at";
2620
- tableName: "notifications";
2621
- dataType: "date";
2622
- columnType: "PgTimestamp";
2623
- data: Date;
2624
- driverParam: string;
2625
- notNull: false;
2626
- hasDefault: false;
2627
- isPrimaryKey: false;
2628
- isAutoincrement: false;
2629
- hasRuntimeDefault: false;
2630
- enumValues: undefined;
2631
- baseColumn: never;
2632
- identity: undefined;
2633
- generated: undefined;
2634
- }, {}, {}>;
2635
- expiresAt: drizzle_orm_pg_core.PgColumn<{
2636
- name: "expires_at";
2637
- tableName: "notifications";
2638
- dataType: "date";
2639
- columnType: "PgTimestamp";
2640
- data: Date;
2641
- driverParam: string;
2642
- notNull: false;
2643
- hasDefault: false;
2644
- isPrimaryKey: false;
2645
- isAutoincrement: false;
2646
- hasRuntimeDefault: false;
2647
- enumValues: undefined;
2648
- baseColumn: never;
2649
- identity: undefined;
2650
- generated: undefined;
2651
- }, {}, {}>;
2652
- method: drizzle_orm_pg_core.PgColumn<{
2653
- name: "method";
2654
- tableName: "notifications";
2655
- dataType: "string";
2656
- columnType: "PgVarchar";
2657
- data: string;
2658
- driverParam: string;
2659
- notNull: false;
2660
- hasDefault: false;
2661
- isPrimaryKey: false;
2662
- isAutoincrement: false;
2663
- hasRuntimeDefault: false;
2664
- enumValues: [string, ...string[]];
2665
- baseColumn: never;
2666
- identity: undefined;
2667
- generated: undefined;
2668
- }, {}, {
2669
- length: 50;
2670
- }>;
2671
- clickUrl: drizzle_orm_pg_core.PgColumn<{
2672
- name: "click_url";
2673
- tableName: "notifications";
2674
- dataType: "string";
2675
- columnType: "PgText";
2676
- data: string;
2677
- driverParam: string;
2678
- notNull: false;
2679
- hasDefault: false;
2680
- isPrimaryKey: false;
2681
- isAutoincrement: false;
2682
- hasRuntimeDefault: false;
2683
- enumValues: [string, ...string[]];
2684
- baseColumn: never;
2685
- identity: undefined;
2686
- generated: undefined;
2687
- }, {}, {}>;
2688
- metadata: drizzle_orm_pg_core.PgColumn<{
2689
- name: "metadata";
2690
- tableName: "notifications";
2691
- dataType: "json";
2692
- columnType: "PgJsonb";
2693
- data: unknown;
2694
- driverParam: unknown;
2695
- notNull: true;
2696
- hasDefault: true;
2697
- isPrimaryKey: false;
2698
- isAutoincrement: false;
2699
- hasRuntimeDefault: false;
2700
- enumValues: undefined;
2701
- baseColumn: never;
2702
- identity: undefined;
2703
- generated: undefined;
2704
- }, {}, {}>;
2705
- };
2706
- dialect: "pg";
2707
- }>;
2708
- declare const DeveloperStatusResponseSchema: z.ZodObject<{
2709
- status: z.ZodEnum<["none", "pending", "approved"]>;
2710
- }, "strip", z.ZodTypeAny, {
2711
- status: "none" | "pending" | "approved";
2712
- }, {
2713
- status: "none" | "pending" | "approved";
2714
- }>;
2715
- declare const UpsertGameMetadataSchema: z.ZodEffects<z.ZodObject<{
2716
- displayName: z.ZodString;
2717
- mapElementId: z.ZodNullable<z.ZodOptional<z.ZodString>>;
2718
- platform: z.ZodEnum<["web", "godot", "unity"]>;
2719
- metadata: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
2720
- gameType: z.ZodDefault<z.ZodOptional<z.ZodEnum<["hosted", "external"]>>>;
2721
- externalUrl: z.ZodOptional<z.ZodString>;
2722
- }, "strip", z.ZodTypeAny, {
2723
- displayName: string;
2724
- gameType: "hosted" | "external";
2725
- platform: "web" | "godot" | "unity";
2726
- metadata: Record<string, unknown>;
2727
- externalUrl?: string | undefined;
2728
- mapElementId?: string | null | undefined;
2729
- }, {
2730
- displayName: string;
2731
- platform: "web" | "godot" | "unity";
2732
- gameType?: "hosted" | "external" | undefined;
2733
- externalUrl?: string | undefined;
2734
- mapElementId?: string | null | undefined;
2735
- metadata?: Record<string, unknown> | undefined;
2736
- }>, {
2737
- displayName: string;
2738
- gameType: "hosted" | "external";
2739
- platform: "web" | "godot" | "unity";
2740
- metadata: Record<string, unknown>;
2741
- externalUrl?: string | undefined;
2742
- mapElementId?: string | null | undefined;
2743
- }, {
2744
- displayName: string;
2745
- platform: "web" | "godot" | "unity";
2746
- gameType?: "hosted" | "external" | undefined;
2747
- externalUrl?: string | undefined;
2748
- mapElementId?: string | null | undefined;
2749
- metadata?: Record<string, unknown> | undefined;
2750
- }>;
2751
- /**
2752
- * Simplified game manifest for Cloudflare Workers deployments
2753
- *
2754
- * The manifest is auto-generated by build tools (Godot plugin, Vite plugin, etc.)
2755
- * and provides minimal metadata about the build.
2756
- *
2757
- * Fields:
2758
- * - version: Manifest schema version (for future migrations)
2759
- * - platform: Auto-detected by build tool (e.g., 'web', 'godot@4.3', 'unity@2023')
2760
- * - createdAt: Build timestamp (ISO 8601)
2761
- *
2762
- * Note: With unified Cloudflare Workers deployments, the worker handles all routing
2763
- * internally, so we no longer need bootMode, entryPoint, or styles fields.
2764
- */
2765
- declare const ManifestV1Schema: z.ZodObject<{
2766
- version: z.ZodString;
2767
- platform: z.ZodString;
2768
- createdAt: z.ZodString;
2769
- }, "strip", z.ZodTypeAny, {
2770
- createdAt: string;
2771
- version: string;
2772
- platform: string;
2773
- }, {
2774
- createdAt: string;
2775
- version: string;
2776
- platform: string;
2777
- }>;
2778
- declare const InsertItemSchema: drizzle_zod.BuildSchema<"insert", {
2779
- id: drizzle_orm_pg_core.PgColumn<{
2780
- name: "id";
2781
- tableName: "items";
2782
- dataType: "string";
2783
- columnType: "PgUUID";
2784
- data: string;
2785
- driverParam: string;
2786
- notNull: true;
2787
- hasDefault: true;
2788
- isPrimaryKey: true;
2789
- isAutoincrement: false;
2790
- hasRuntimeDefault: false;
2791
- enumValues: undefined;
2792
- baseColumn: never;
2793
- identity: undefined;
2794
- generated: undefined;
2795
- }, {}, {}>;
2796
- slug: drizzle_orm_pg_core.PgColumn<{
2797
- name: "slug";
2798
- tableName: "items";
2799
- dataType: "string";
2800
- columnType: "PgText";
2801
- data: string;
2802
- driverParam: string;
2803
- notNull: true;
2804
- hasDefault: false;
2805
- isPrimaryKey: false;
2806
- isAutoincrement: false;
2807
- hasRuntimeDefault: false;
2808
- enumValues: [string, ...string[]];
2809
- baseColumn: never;
2810
- identity: undefined;
2811
- generated: undefined;
2812
- }, {}, {}>;
2813
- gameId: drizzle_orm_pg_core.PgColumn<{
2814
- name: "game_id";
2815
- tableName: "items";
2816
- dataType: "string";
2817
- columnType: "PgUUID";
2818
- data: string;
2819
- driverParam: string;
2820
- notNull: false;
2821
- hasDefault: false;
2822
- isPrimaryKey: false;
2823
- isAutoincrement: false;
2824
- hasRuntimeDefault: false;
2825
- enumValues: undefined;
2826
- baseColumn: never;
2827
- identity: undefined;
2828
- generated: undefined;
2829
- }, {}, {}>;
2830
- displayName: drizzle_orm_pg_core.PgColumn<{
2831
- name: "display_name";
2832
- tableName: "items";
2833
- dataType: "string";
2834
- columnType: "PgText";
2835
- data: string;
2836
- driverParam: string;
2837
- notNull: true;
2838
- hasDefault: false;
2839
- isPrimaryKey: false;
2840
- isAutoincrement: false;
2841
- hasRuntimeDefault: false;
2842
- enumValues: [string, ...string[]];
2843
- baseColumn: never;
2844
- identity: undefined;
2845
- generated: undefined;
2846
- }, {}, {}>;
2847
- description: drizzle_orm_pg_core.PgColumn<{
2848
- name: "description";
2849
- tableName: "items";
2850
- dataType: "string";
2851
- columnType: "PgText";
2852
- data: string;
2853
- driverParam: string;
2854
- notNull: false;
2855
- hasDefault: false;
2856
- isPrimaryKey: false;
2857
- isAutoincrement: false;
2858
- hasRuntimeDefault: false;
2859
- enumValues: [string, ...string[]];
2860
- baseColumn: never;
2861
- identity: undefined;
2862
- generated: undefined;
2863
- }, {}, {}>;
2864
- type: drizzle_orm_pg_core.PgColumn<{
2865
- name: "type";
2866
- tableName: "items";
2867
- dataType: "string";
2868
- columnType: "PgEnumColumn";
2869
- data: "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "accessory" | "other";
2870
- driverParam: string;
2871
- notNull: true;
2872
- hasDefault: true;
2873
- isPrimaryKey: false;
2874
- isAutoincrement: false;
2875
- hasRuntimeDefault: false;
2876
- enumValues: ["currency", "badge", "trophy", "collectible", "consumable", "unlock", "upgrade", "accessory", "other"];
2877
- baseColumn: never;
2878
- identity: undefined;
2879
- generated: undefined;
2880
- }, {}, {}>;
2881
- isPlaceable: drizzle_orm_pg_core.PgColumn<{
2882
- name: "is_placeable";
2883
- tableName: "items";
2884
- dataType: "boolean";
2885
- columnType: "PgBoolean";
2886
- data: boolean;
2887
- driverParam: boolean;
2888
- notNull: true;
2889
- hasDefault: true;
2890
- isPrimaryKey: false;
2891
- isAutoincrement: false;
2892
- hasRuntimeDefault: false;
2893
- enumValues: undefined;
2894
- baseColumn: never;
2895
- identity: undefined;
2896
- generated: undefined;
2897
- }, {}, {}>;
2898
- imageUrl: drizzle_orm_pg_core.PgColumn<{
2899
- name: "image_url";
2900
- tableName: "items";
2901
- dataType: "string";
2902
- columnType: "PgText";
2903
- data: string;
2904
- driverParam: string;
2905
- notNull: false;
2906
- hasDefault: false;
2907
- isPrimaryKey: false;
2908
- isAutoincrement: false;
2909
- hasRuntimeDefault: false;
2910
- enumValues: [string, ...string[]];
2911
- baseColumn: never;
2912
- identity: undefined;
2913
- generated: undefined;
2914
- }, {}, {}>;
2915
- metadata: drizzle_orm_pg_core.PgColumn<{
2916
- name: "metadata";
2917
- tableName: "items";
2918
- dataType: "json";
2919
- columnType: "PgJsonb";
2920
- data: unknown;
2921
- driverParam: unknown;
2922
- notNull: false;
2923
- hasDefault: true;
2924
- isPrimaryKey: false;
2925
- isAutoincrement: false;
2926
- hasRuntimeDefault: false;
2927
- enumValues: undefined;
2928
- baseColumn: never;
2929
- identity: undefined;
2930
- generated: undefined;
2931
- }, {}, {}>;
2932
- createdAt: drizzle_orm_pg_core.PgColumn<{
2933
- name: "created_at";
2934
- tableName: "items";
2935
- dataType: "date";
2936
- columnType: "PgTimestamp";
2937
- data: Date;
2938
- driverParam: string;
2939
- notNull: true;
2940
- hasDefault: true;
2941
- isPrimaryKey: false;
2942
- isAutoincrement: false;
2943
- hasRuntimeDefault: false;
2944
- enumValues: undefined;
2945
- baseColumn: never;
2946
- identity: undefined;
2947
- generated: undefined;
2948
- }, {}, {}>;
2949
- }, {
2950
- imageUrl: z.ZodNullable<z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>>;
2951
- metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2952
- }>;
2953
- declare const UpdateItemSchema: z.ZodObject<Omit<{
2954
- id: z.ZodOptional<z.ZodString>;
2955
- slug: z.ZodOptional<z.ZodString>;
2956
- gameId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2957
- displayName: z.ZodOptional<z.ZodString>;
2958
- description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2959
- type: z.ZodOptional<z.ZodEnum<["currency", "badge", "trophy", "collectible", "consumable", "unlock", "upgrade", "accessory", "other"]>>;
2960
- isPlaceable: z.ZodOptional<z.ZodBoolean>;
2961
- imageUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2962
- metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
2963
- createdAt: z.ZodOptional<z.ZodDate>;
2964
- }, "id" | "createdAt">, "strip", z.ZodTypeAny, {
2965
- slug?: string | undefined;
2966
- description?: string | null | undefined;
2967
- displayName?: string | undefined;
2968
- metadata?: Record<string, unknown> | undefined;
2969
- gameId?: string | null | undefined;
2970
- type?: "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "accessory" | "other" | undefined;
2971
- isPlaceable?: boolean | undefined;
2972
- imageUrl?: string | null | undefined;
2973
- }, {
2974
- slug?: string | undefined;
2975
- description?: string | null | undefined;
2976
- displayName?: string | undefined;
2977
- metadata?: Record<string, unknown> | undefined;
2978
- gameId?: string | null | undefined;
2979
- type?: "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "accessory" | "other" | undefined;
2980
- isPlaceable?: boolean | undefined;
2981
- imageUrl?: string | null | undefined;
2982
- }>;
2983
- declare const InsertCurrencySchema: z.ZodObject<Omit<{
2984
- id: z.ZodOptional<z.ZodString>;
2985
- itemId: z.ZodString;
2986
- symbol: z.ZodOptional<z.ZodNullable<z.ZodString>>;
2987
- isPrimary: z.ZodDefault<z.ZodBoolean>;
2988
- createdAt: z.ZodOptional<z.ZodDate>;
2989
- updatedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
2990
- }, "id" | "createdAt" | "updatedAt">, "strip", z.ZodTypeAny, {
2991
- itemId: string;
2992
- isPrimary: boolean;
2993
- symbol?: string | null | undefined;
2994
- }, {
2995
- itemId: string;
2996
- symbol?: string | null | undefined;
2997
- isPrimary?: boolean | undefined;
2998
- }>;
2999
- declare const UpdateCurrencySchema: z.ZodObject<{
3000
- symbol: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
3001
- itemId: z.ZodOptional<z.ZodString>;
3002
- isPrimary: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
3003
- }, "strip", z.ZodTypeAny, {
3004
- symbol?: string | null | undefined;
3005
- itemId?: string | undefined;
3006
- isPrimary?: boolean | undefined;
3007
- }, {
3008
- symbol?: string | null | undefined;
3009
- itemId?: string | undefined;
3010
- isPrimary?: boolean | undefined;
3011
- }>;
3012
- declare const InsertShopListingSchema: z.ZodObject<Omit<{
3013
- id: z.ZodOptional<z.ZodString>;
3014
- itemId: z.ZodString;
3015
- currencyId: z.ZodString;
3016
- price: z.ZodNumber;
3017
- sellBackPercentage: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
3018
- stock: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
3019
- isActive: z.ZodDefault<z.ZodBoolean>;
3020
- availableFrom: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
3021
- availableUntil: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
3022
- createdAt: z.ZodOptional<z.ZodDate>;
3023
- updatedAt: z.ZodOptional<z.ZodNullable<z.ZodDate>>;
3024
- }, "id" | "createdAt" | "updatedAt">, "strip", z.ZodTypeAny, {
3025
- isActive: boolean;
3026
- itemId: string;
3027
- currencyId: string;
3028
- price: number;
3029
- sellBackPercentage?: number | null | undefined;
3030
- stock?: number | null | undefined;
3031
- availableFrom?: Date | null | undefined;
3032
- availableUntil?: Date | null | undefined;
3033
- }, {
3034
- itemId: string;
3035
- currencyId: string;
3036
- price: number;
3037
- isActive?: boolean | undefined;
3038
- sellBackPercentage?: number | null | undefined;
3039
- stock?: number | null | undefined;
3040
- availableFrom?: Date | null | undefined;
3041
- availableUntil?: Date | null | undefined;
3042
- }>;
3043
- declare const UpdateShopListingSchema: z.ZodObject<{
3044
- isActive: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
3045
- itemId: z.ZodOptional<z.ZodString>;
3046
- currencyId: z.ZodOptional<z.ZodString>;
3047
- price: z.ZodOptional<z.ZodNumber>;
3048
- sellBackPercentage: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
3049
- stock: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodNumber>>>;
3050
- availableFrom: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodDate>>>;
3051
- availableUntil: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodDate>>>;
3052
- }, "strip", z.ZodTypeAny, {
3053
- isActive?: boolean | undefined;
3054
- itemId?: string | undefined;
3055
- currencyId?: string | undefined;
3056
- price?: number | undefined;
3057
- sellBackPercentage?: number | null | undefined;
3058
- stock?: number | null | undefined;
3059
- availableFrom?: Date | null | undefined;
3060
- availableUntil?: Date | null | undefined;
3061
- }, {
3062
- isActive?: boolean | undefined;
3063
- itemId?: string | undefined;
3064
- currencyId?: string | undefined;
3065
- price?: number | undefined;
3066
- sellBackPercentage?: number | null | undefined;
3067
- stock?: number | null | undefined;
3068
- availableFrom?: Date | null | undefined;
3069
- availableUntil?: Date | null | undefined;
3070
- }>;
3071
-
3072
- declare enum AchievementCompletionType {
3073
- TIME_PLAYED_SESSION = "time_played_session",
3074
- INTERACTION = "interaction",
3075
- LEADERBOARD_RANK = "leaderboard_rank",
3076
- FIRST_SCORE = "first_score",
3077
- PERSONAL_BEST = "personal_best"
3078
- }
3079
- type AchievementScopeType = (typeof achievementScopeEnum.enumValues)[number];
3080
- /**
3081
- * Current-scope achievement with computed status and window metadata
3082
- */
3083
- interface AchievementCurrent {
3084
- id: string;
3085
- title: string;
3086
- description?: string | null;
3087
- scope: AchievementScopeType;
3088
- rewardCredits: number;
3089
- limit: number;
3090
- completionType: AchievementCompletionType;
3091
- completionConfig: Record<string, unknown>;
3092
- target: Record<string, unknown>;
3093
- active: boolean;
3094
- createdAt?: Date;
3095
- updatedAt?: Date;
3096
- status: 'available' | 'completed';
3097
- scopeKey: string;
3098
- windowStart: string;
3099
- windowEnd: string;
3100
- }
3101
- /**
3102
- * Achievement claim history entry
3103
- * Used in GET /api/achievements/history
3104
- */
3105
- interface AchievementHistoryEntry {
3106
- achievementId: string;
3107
- title: string;
3108
- rewardCredits: number;
3109
- createdAt: string;
3110
- scopeKey: string;
3111
- }
3112
- /**
3113
- * Achievement progress submission response
3114
- * Used in POST /api/achievements/progress
3115
- */
3116
- interface AchievementProgressResponse {
3117
- achievementId: string;
3118
- status: 'completed' | 'already_completed';
3119
- rewardCredits: number;
3120
- scopeKey: string;
3121
- createdAt: string;
3122
- }
3123
-
3124
- declare enum NotificationType {
3125
- ACHIEVEMENT = "achievement",
3126
- SYSTEM = "system",
3127
- PROMO = "promo"
3128
- }
3129
- declare enum NotificationStatus {
3130
- PENDING = "pending",
3131
- DELIVERED = "delivered",
3132
- SEEN = "seen",
3133
- CLICKED = "clicked",
3134
- DISMISSED = "dismissed",
3135
- EXPIRED = "expired"
3136
- }
3137
- type Notification = InferSelectModel<typeof notifications>;
3138
- interface NotificationStats {
3139
- total: number;
3140
- delivered: number;
3141
- seen: number;
3142
- clicked: number;
3143
- dismissed: number;
3144
- expired: number;
3145
- clickThroughRate: number;
3146
- }
3147
-
3148
- type CharacterComponent = typeof characterComponents.$inferSelect;
3149
- type PlayerCharacter = typeof playerCharacters.$inferSelect & {
3150
- accessories?: PlayerCharacterAccessory[];
3151
- };
3152
- type PlayerCharacterAccessory = typeof playerCharacterAccessories.$inferSelect;
3153
- type GameRow = typeof games.$inferSelect;
3154
- type BaseGame = Omit<GameRow, 'gameType' | 'deploymentUrl' | 'externalUrl'>;
3155
- type HostedGame = BaseGame & {
3156
- gameType: 'hosted';
3157
- deploymentUrl: string;
3158
- externalUrl: null;
3159
- };
3160
- type ExternalGame = BaseGame & {
3161
- gameType: 'external';
3162
- deploymentUrl: null;
3163
- externalUrl: string;
3164
- };
3165
- type Game = HostedGame | ExternalGame;
3166
- type GameStateData = Record<string, unknown>;
3167
- type GameCustomHostname = typeof gameCustomHostnames.$inferSelect;
3168
- type UpsertGameMetadataInput = z.infer<typeof UpsertGameMetadataSchema>;
3169
899
  type Item = typeof items.$inferSelect;
3170
900
  type InventoryItem = typeof inventoryItems.$inferSelect;
3171
- type ShopListing = typeof shopListings.$inferSelect;
3172
- type InsertItemInput = z.infer<typeof InsertItemSchema>;
3173
- type UpdateItemInput = z.infer<typeof UpdateItemSchema>;
3174
- type InsertCurrencyInput = z.infer<typeof InsertCurrencySchema>;
3175
- type UpdateCurrencyInput = z.infer<typeof UpdateCurrencySchema>;
3176
- type InsertShopListingInput = z.infer<typeof InsertShopListingSchema>;
3177
- type UpdateShopListingInput = z.infer<typeof UpdateShopListingSchema>;
3178
- interface PlaceableItemMetadata {
3179
- tilesWide?: number;
3180
- tilesHigh?: number;
3181
- flippable?: boolean;
3182
- [key: string]: unknown;
3183
- }
3184
- type MapElement = typeof mapElements.$inferSelect;
3185
- type MapObject = typeof mapObjects.$inferSelect;
3186
- interface MapData {
3187
- id: string;
3188
- identifier: string;
3189
- displayName: string;
3190
- description?: string;
3191
- metadata?: Record<string, unknown>;
3192
- }
3193
- interface CreateMapObjectData {
3194
- itemId: string;
3195
- worldX: number;
3196
- worldY: number;
3197
- width?: number;
3198
- height?: number;
3199
- rotation?: number;
3200
- scale?: number;
3201
- metadata?: Record<string, unknown>;
3202
- }
3203
901
 
3204
902
  type User = typeof users.$inferSelect;
3205
- type DeveloperStatusResponse = z.infer<typeof DeveloperStatusResponseSchema>;
3206
- type DeveloperStatusValue = DeveloperStatusResponse['status'];
3207
903
  /**
3208
904
  * User data with authentication provider information.
3209
905
  * Returned by the /users/me endpoint with additional auth context.
@@ -3212,12 +908,6 @@ type AuthenticatedUser = User & {
3212
908
  /** Whether the user authenticated via Timeback SSO */
3213
909
  hasTimebackAccount: boolean;
3214
910
  };
3215
-
3216
- /**
3217
- * Cross-Domain Composite Types
3218
- * Types that combine data from multiple domains
3219
- */
3220
- type ManifestV1 = z.infer<typeof ManifestV1Schema>;
3221
911
  /**
3222
912
  * Basic user information in the shape of the claims from identity providers
3223
913
  */
@@ -3239,191 +929,9 @@ interface UserInfo {
3239
929
  /** Additional user attributes from the identity provider */
3240
930
  [key: string]: unknown;
3241
931
  }
3242
- /**
3243
- * Character-related Composite Types
3244
- * Types that combine character component data with sprite sheet information
3245
- */
3246
- type CharacterComponentWithSpriteUrl = CharacterComponent & {
3247
- spriteSheetUrl: string;
3248
- };
3249
932
  type InventoryItemWithItem = Omit<InventoryItem, 'itemId'> & {
3250
933
  item: Item;
3251
934
  };
3252
- /**
3253
- * Game with optional manifest metadata from build tools
3254
- */
3255
- type FetchedGame = (HostedGame | ExternalGame | GameRow) & {
3256
- manifest?: ManifestV1;
3257
- };
3258
- /**
3259
- * Map-related Composite Types
3260
- * Types that combine map, game, and item data for rendering and interaction
3261
- */
3262
- interface MapElementWithGame extends MapElement {
3263
- game: Pick<Game, 'id' | 'displayName'> | null;
3264
- }
3265
- interface MapObjectWithItem extends MapObject {
3266
- item: Pick<Item, 'id' | 'slug' | 'displayName' | 'description' | 'imageUrl' | 'isPlaceable'> & {
3267
- metadata: PlaceableItemMetadata;
3268
- };
3269
- }
3270
- /**
3271
- * Shop-related Composite Types
3272
- * Types that combine inventory, currency, and shop listing data for commerce operations
3273
- */
3274
- interface ShopDisplayItem extends Omit<Item, 'createdAt'> {
3275
- listingId: string;
3276
- shopPrice: number;
3277
- currencyId: string;
3278
- currencySymbol?: string | null;
3279
- currencyDisplayName?: string | null;
3280
- currencyImageUrl?: string | null;
3281
- stock?: number | null;
3282
- sellBackPercentage?: number | null;
3283
- }
3284
- interface ShopCurrency {
3285
- id: string;
3286
- symbol: string | null;
3287
- isPrimary: boolean;
3288
- displayName?: string | null;
3289
- imageUrl?: string | null;
3290
- }
3291
- interface ShopViewResponse {
3292
- shopItems: ShopDisplayItem[];
3293
- currencies: ShopCurrency[];
3294
- }
3295
- /**
3296
- * Leaderboard Composite Types
3297
- * Types that combine leaderboard, user, and game data
3298
- */
3299
- interface GameLeaderboardEntry {
3300
- rank: number;
3301
- userId: string;
3302
- username: string;
3303
- userImage?: string | null;
3304
- score: number;
3305
- achievedAt: Date;
3306
- metadata?: Record<string, unknown>;
3307
- gameId: string;
3308
- gameTitle: string;
3309
- gameSlug: string;
3310
- }
3311
-
3312
- type UserLevel = typeof userLevels.$inferSelect;
3313
- type LevelConfig = typeof levelConfigs.$inferSelect;
3314
- interface LeaderboardOptions {
3315
- timeframe?: 'all_time' | 'monthly' | 'weekly' | 'daily';
3316
- limit?: number;
3317
- offset?: number;
3318
- gameId?: string;
3319
- }
3320
- interface LeaderboardEntry {
3321
- rank: number;
3322
- userId: string;
3323
- username: string;
3324
- userImage?: string | null;
3325
- score: number;
3326
- achievedAt: Date;
3327
- metadata?: Record<string, unknown>;
3328
- gameId?: string;
3329
- gameTitle?: string;
3330
- gameSlug?: string;
3331
- }
3332
- interface UserRankResponse {
3333
- rank: number;
3334
- score: number;
3335
- userId: string;
3336
- }
3337
- interface UserScore$1 {
3338
- id: string;
3339
- score: number;
3340
- achievedAt: Date;
3341
- metadata?: Record<string, unknown>;
3342
- gameId: string;
3343
- gameTitle: string;
3344
- gameSlug: string;
3345
- }
3346
- interface SpriteTemplateData {
3347
- tileSize: number;
3348
- tileHeight: number;
3349
- columns: number;
3350
- rows: number;
3351
- spacing: number;
3352
- animations: {
3353
- base_right: {
3354
- row: number;
3355
- frameStart: number;
3356
- numFrames: number;
3357
- fps: number;
3358
- };
3359
- base_up: {
3360
- row: number;
3361
- frameStart: number;
3362
- numFrames: number;
3363
- fps: number;
3364
- };
3365
- base_left: {
3366
- row: number;
3367
- frameStart: number;
3368
- numFrames: number;
3369
- fps: number;
3370
- };
3371
- base_down: {
3372
- row: number;
3373
- frameStart: number;
3374
- numFrames: number;
3375
- fps: number;
3376
- };
3377
- idle_right: {
3378
- row: number;
3379
- frameStart: number;
3380
- numFrames: number;
3381
- fps: number;
3382
- };
3383
- walk_right: {
3384
- row: number;
3385
- frameStart: number;
3386
- numFrames: number;
3387
- fps: number;
3388
- };
3389
- idle_up: {
3390
- row: number;
3391
- frameStart: number;
3392
- numFrames: number;
3393
- fps: number;
3394
- };
3395
- walk_up: {
3396
- row: number;
3397
- frameStart: number;
3398
- numFrames: number;
3399
- fps: number;
3400
- };
3401
- idle_left: {
3402
- row: number;
3403
- frameStart: number;
3404
- numFrames: number;
3405
- fps: number;
3406
- };
3407
- walk_left: {
3408
- row: number;
3409
- frameStart: number;
3410
- numFrames: number;
3411
- fps: number;
3412
- };
3413
- idle_down: {
3414
- row: number;
3415
- frameStart: number;
3416
- numFrames: number;
3417
- fps: number;
3418
- };
3419
- walk_down: {
3420
- row: number;
3421
- frameStart: number;
3422
- numFrames: number;
3423
- fps: number;
3424
- };
3425
- };
3426
- }
3427
935
  type GameTimebackIntegration = typeof gameTimebackIntegrations.$inferSelect;
3428
936
  type TodayXpResponse = {
3429
937
  xp: number;
@@ -3488,246 +996,130 @@ type TimebackSetupRequest = {
3488
996
  };
3489
997
  verbose?: boolean;
3490
998
  };
3491
- type TimebackSetupResponse = {
3492
- integration: GameTimebackIntegration;
3493
- courseId: string;
3494
- verbose?: {
3495
- course: unknown;
3496
- component: unknown;
3497
- resource: unknown;
3498
- componentResource: unknown;
3499
- };
999
+ /**
1000
+ * Minimal course configuration for TimeBack integration (used in user-facing config).
1001
+ *
1002
+ * NOTE: Per-course overrides (title, courseCode, level, metadata) are defined
1003
+ * in @playcademy/sdk/server as TimebackCourseConfigWithOverrides.
1004
+ * This base type only includes the minimal required fields.
1005
+ *
1006
+ * For totalXp, use metadata.metrics.totalXp (aligns with upstream TimeBack structure).
1007
+ */
1008
+ type TimebackCourseConfig = {
1009
+ subject: string;
1010
+ grade: number;
3500
1011
  };
3501
- type TimebackVerifyResponse = {
3502
- status: 'success' | 'error';
3503
- integration: GameTimebackIntegration;
3504
- resources: {
3505
- course: {
3506
- found: boolean;
3507
- data?: unknown;
1012
+ /**
1013
+ * Derived course configuration after merging base + per-course overrides + templating.
1014
+ * This is what the CLI sends to the Platform API in PlatformTimebackSetupRequest.
1015
+ */
1016
+ type DerivedPlatformCourseConfig = TimebackCourseConfig & {
1017
+ title: string;
1018
+ courseCode: string;
1019
+ level: string;
1020
+ metadata?: Record<string, unknown>;
1021
+ totalXp?: number | null;
1022
+ masterableUnits?: number | null;
1023
+ };
1024
+ type PlatformTimebackSetupRequest = {
1025
+ gameId: string;
1026
+ courses: DerivedPlatformCourseConfig[];
1027
+ baseConfig: {
1028
+ organization: {
1029
+ name: string;
1030
+ type: string;
1031
+ identifier: string;
3508
1032
  };
3509
1033
  component: {
3510
- found: boolean;
3511
- data?: unknown;
1034
+ title: string;
1035
+ titleSuffix?: string;
1036
+ sortOrder: number;
1037
+ prerequisites: string[];
1038
+ prerequisiteCriteria: string;
3512
1039
  };
3513
1040
  resource: {
3514
- found: boolean;
3515
- data?: unknown;
1041
+ title: string;
1042
+ titleSuffix?: string;
1043
+ vendorResourceId: string;
1044
+ vendorId: string;
1045
+ applicationId: string;
1046
+ roles: string[];
1047
+ importance: string;
1048
+ metadata: {
1049
+ type?: string;
1050
+ launchUrl?: string;
1051
+ toolProvider?: string;
1052
+ instructionalMethod?: string;
1053
+ language?: string;
1054
+ [key: string]: unknown;
1055
+ };
3516
1056
  };
3517
1057
  componentResource: {
3518
- found: boolean;
3519
- data?: unknown;
1058
+ title: string;
1059
+ titleSuffix?: string;
1060
+ sortOrder: number;
1061
+ lessonType: string | null;
1062
+ };
1063
+ };
1064
+ verbose?: boolean;
1065
+ };
1066
+ type PlatformTimebackSetupResponse = {
1067
+ integrations: GameTimebackIntegration[];
1068
+ verbose?: Array<{
1069
+ integration: GameTimebackIntegration;
1070
+ config: {
1071
+ course: unknown;
1072
+ component: unknown;
1073
+ resource: unknown;
1074
+ componentResource: unknown;
3520
1075
  };
1076
+ }>;
1077
+ };
1078
+ type TimebackVerificationResources = {
1079
+ course: {
1080
+ found: boolean;
1081
+ data?: unknown;
1082
+ };
1083
+ component: {
1084
+ found: boolean;
1085
+ data?: unknown;
1086
+ };
1087
+ resource: {
1088
+ found: boolean;
1089
+ data?: unknown;
1090
+ };
1091
+ componentResource: {
1092
+ found: boolean;
1093
+ data?: unknown;
3521
1094
  };
1095
+ };
1096
+ type TimebackVerifyCourseResult = {
1097
+ integration: GameTimebackIntegration;
1098
+ resources: TimebackVerificationResources;
1099
+ status: 'success' | 'error';
3522
1100
  errors?: string[];
3523
1101
  };
1102
+ type TimebackVerifyAllResponse = {
1103
+ status: 'success' | 'error';
1104
+ results: TimebackVerifyCourseResult[];
1105
+ };
3524
1106
  type EndActivityResponse = {
3525
1107
  status: 'ok';
3526
1108
  courseId: string;
3527
- xpAwarded: number;
3528
- };
3529
-
3530
- /**
3531
- * OAuth 2.0 implementation for the Playcademy SDK
3532
- */
3533
-
3534
- /**
3535
- * Parses an OAuth state parameter to extract CSRF token and any encoded data.
3536
- *
3537
- * @param state - The OAuth state parameter to parse
3538
- * @returns Object containing CSRF token and optional decoded data
3539
- */
3540
- declare function parseOAuthState(state: string): {
3541
- csrfToken: string;
3542
- data?: Record<string, string>;
3543
- };
3544
-
3545
- /**
3546
- * Response type for the realtime token API
3547
- */
3548
- interface RealtimeTokenResponse {
3549
- token: string;
3550
- }
3551
-
3552
- /**
3553
- * Cache configuration types for runtime customization
3554
- */
3555
- /**
3556
- * Runtime configuration for TTL cache behavior
3557
- */
3558
- interface TTLCacheConfig {
3559
- /** Time-to-live in milliseconds. Set to 0 to disable caching for this call. */
3560
- ttl?: number;
3561
- /** Force refresh, bypassing cache */
3562
- force?: boolean;
3563
- /** Skip cache and fetch fresh data (alias for force) */
3564
- skipCache?: boolean;
3565
- }
3566
- /**
3567
- * Runtime configuration for cooldown cache behavior
3568
- */
3569
- interface CooldownCacheConfig {
3570
- /** Cooldown period in milliseconds. Set to 0 to disable cooldown for this call. */
3571
- cooldown?: number;
3572
- /** Force refresh, bypassing cooldown */
3573
- force?: boolean;
3574
- }
3575
-
3576
- interface CharacterComponentsOptions {
3577
- /**
3578
- * Optional level filter for components
3579
- * When provided, only components available at this level or below are returned
3580
- */
3581
- level?: number;
3582
- /**
3583
- * Whether to bypass the cache and force a fresh API request
3584
- * Default: false (use cache when available)
3585
- */
3586
- skipCache?: boolean;
3587
- }
3588
- interface CreateCharacterData {
3589
- bodyComponentId: string;
3590
- eyesComponentId: string;
3591
- hairstyleComponentId: string;
3592
- outfitComponentId: string;
3593
- }
3594
- interface UpdateCharacterData {
3595
- bodyComponentId?: string;
3596
- eyesComponentId?: string;
3597
- hairstyleComponentId?: string;
3598
- outfitComponentId?: string;
3599
- }
3600
-
3601
- interface ScoreSubmission {
3602
- id: string;
3603
- score: number;
3604
- achievedAt: Date;
3605
- }
3606
-
3607
- /**
3608
- * Combined response type for summary method
3609
- */
3610
- type XpSummaryResponse = {
3611
- today: TodayXpResponse;
3612
- total: TotalXpResponse;
3613
- };
3614
-
3615
- /**
3616
- * @fileoverview Server SDK Type Definitions
3617
- *
3618
- * TypeScript type definitions for the server-side Playcademy SDK.
3619
- * Includes configuration types, client state, and re-exported TimeBack types.
3620
- */
3621
-
3622
- /**
3623
- * TimeBack integration configuration for Playcademy config file
3624
- */
3625
- interface TimebackIntegrationConfig {
3626
- /** Organization overrides */
3627
- organization?: Partial<OrganizationConfig>;
3628
- /** Course configuration (subjects and grades REQUIRED) */
3629
- course: CourseConfig;
3630
- /** Component overrides */
3631
- component?: Partial<ComponentConfig>;
3632
- /** Resource overrides */
3633
- resource?: Partial<ResourceConfig>;
3634
- /** Component-Resource link overrides */
3635
- componentResource?: Partial<ComponentResourceConfig>;
3636
- }
3637
- /**
3638
- * Custom API routes integration
3639
- */
3640
- interface CustomRoutesIntegration {
3641
- /** Directory for custom API routes (defaults to 'server/api') */
3642
- directory?: string;
3643
- }
3644
- /**
3645
- * Database integration
3646
- */
3647
- interface DatabaseIntegration {
3648
- /** Database directory (defaults to 'db') */
3649
- directory?: string;
3650
- }
3651
- /**
3652
- * Integrations configuration
3653
- * All backend features (database, custom routes, external services) are configured here
3654
- */
3655
- interface IntegrationsConfig {
3656
- /** TimeBack integration (optional) */
3657
- timeback?: TimebackIntegrationConfig;
3658
- /** Custom API routes (optional) */
3659
- customRoutes?: CustomRoutesIntegration | boolean;
3660
- /** Database (optional) */
3661
- database?: DatabaseIntegration | boolean;
3662
- /** Key-Value storage (optional) */
3663
- kv?: boolean;
3664
- /** Bucket storage (optional) */
3665
- bucket?: boolean;
3666
- /** Authentication (optional) */
3667
- auth?: boolean;
3668
- }
3669
- /**
3670
- * Unified Playcademy configuration
3671
- * Used for playcademy.config.{js,json}
3672
- */
3673
- interface PlaycademyConfig {
3674
- /** Game name */
3675
- name: string;
3676
- /** Game description */
3677
- description?: string;
3678
- /** Game emoji icon */
3679
- emoji?: string;
3680
- /** Build command to run before deployment */
3681
- buildCommand?: string[];
3682
- /** Path to build output */
3683
- buildPath?: string;
3684
- /** Game type */
3685
- gameType?: 'hosted' | 'external';
3686
- /** External URL (for external games) */
3687
- externalUrl?: string;
3688
- /** Game platform */
3689
- platform?: 'web' | 'unity' | 'godot';
3690
- /** Integrations (database, custom routes, external services) */
3691
- integrations?: IntegrationsConfig;
3692
- }
3693
-
3694
- /**
3695
- * Resource bindings for backend deployment
3696
- * Provider-agnostic abstraction for cloud resources
3697
- */
3698
- interface BackendResourceBindings {
3699
- /** SQL database instances to create and bind (maps to D1 on Cloudflare) */
3700
- database?: string[];
3701
- /** Key-value store namespaces to create and bind (maps to KV on Cloudflare) */
3702
- keyValue?: string[];
3703
- /** Object storage buckets to bind (maps to R2 on Cloudflare) */
3704
- bucket?: string[];
3705
- }
3706
- /**
3707
- * Backend deployment bundle for uploading to Playcademy platform
3708
- */
3709
- interface BackendDeploymentBundle {
3710
- /** Bundled JavaScript code ready for deployment */
3711
- code: string;
3712
- /** Game configuration */
3713
- config: PlaycademyConfig;
3714
- /** Optional resource bindings (database, storage, etc.) */
3715
- bindings?: BackendResourceBindings;
3716
- /** Optional schema information for database setup */
3717
- schema?: SchemaInfo;
3718
- /** Optional game secrets */
3719
- secrets?: Record<string, string>;
3720
- }
3721
-
3722
- interface UserScore {
3723
- id: string;
3724
- score: number;
3725
- achievedAt: Date;
3726
- metadata?: Record<string, unknown>;
3727
- gameId: string;
3728
- gameTitle: string;
3729
- gameSlug: string;
3730
- }
1109
+ xpAwarded: number;
1110
+ masteredUnits?: number;
1111
+ pctCompleteApp?: number;
1112
+ scoreStatus?: string;
1113
+ inProgress?: string;
1114
+ };
1115
+
1116
+ /**
1117
+ * Combined response type for summary method
1118
+ */
1119
+ type XpSummaryResponse = {
1120
+ today: TodayXpResponse;
1121
+ total: TotalXpResponse;
1122
+ };
3731
1123
 
3732
1124
  /**
3733
1125
  * Auto-initializes a PlaycademyClient with context from the environment.
@@ -3753,12 +1145,12 @@ interface UserScore {
3753
1145
  * const client = await PlaycademyClient.init({ baseUrl: 'https://custom.api.com' })
3754
1146
  * ```
3755
1147
  */
3756
- declare function init(options?: {
1148
+ declare function init<T extends PlaycademyClient = PlaycademyClient>(this: new (...args: ConstructorParameters<typeof PlaycademyClient>) => T, options?: {
3757
1149
  baseUrl?: string;
3758
1150
  allowedParentOrigins?: string[];
3759
1151
  onDisconnect?: DisconnectHandler;
3760
1152
  enableConnectionMonitoring?: boolean;
3761
- }): Promise<PlaycademyClient>;
1153
+ }): Promise<T>;
3762
1154
 
3763
1155
  /**
3764
1156
  * Authenticates a user with email and password.
@@ -3812,6 +1204,17 @@ declare class PlaycademyClient {
3812
1204
  private authContext?;
3813
1205
  private initPayload?;
3814
1206
  private connectionManager?;
1207
+ /**
1208
+ * Internal session manager for automatic session lifecycle.
1209
+ *
1210
+ * This manager handles starting and ending game sessions automatically.
1211
+ * Game developers don't need to call these methods directly - they're managed
1212
+ * by the SDK during initialization and cleanup.
1213
+ *
1214
+ * @private
1215
+ * @internal
1216
+ */
1217
+ private _sessionManager;
3815
1218
  /**
3816
1219
  * Creates a new PlaycademyClient instance.
3817
1220
  *
@@ -4057,32 +1460,6 @@ declare class PlaycademyClient {
4057
1460
  * 3. autoStartSession is enabled (defaults to false)
4058
1461
  */
4059
1462
  private _initializeInternalSession;
4060
- /** Platform API authentication methods (login, logout) */
4061
- auth: {
4062
- login: (credentials: {
4063
- email: string;
4064
- password: string;
4065
- }) => Promise<{
4066
- success: boolean;
4067
- token?: string;
4068
- user?: {
4069
- id: string;
4070
- email: string;
4071
- };
4072
- expiresAt?: string;
4073
- error?: string;
4074
- }>;
4075
- logout: () => Promise<void>;
4076
- apiKeys: {
4077
- create: (options?: {
4078
- name?: string;
4079
- expiresIn?: number | null;
4080
- permissions?: Record<string, string[]>;
4081
- }) => Promise<BetterAuthApiKeyResponse>;
4082
- list: () => Promise<BetterAuthApiKey[]>;
4083
- revoke: (keyId: string) => Promise<void>;
4084
- };
4085
- };
4086
1463
  /** Identity provider connection methods (connect external accounts) */
4087
1464
  identity: {
4088
1465
  connect: (options: AuthOptions) => Promise<AuthResult>;
@@ -4125,26 +1502,6 @@ declare class PlaycademyClient {
4125
1502
  arrayBuffer: (path: string) => Promise<ArrayBuffer>;
4126
1503
  };
4127
1504
  };
4128
- /** Game management methods (fetch, list, saveState, loadState, sessions) */
4129
- games: {
4130
- fetch: (gameIdOrSlug: string, options?: TTLCacheConfig) => Promise<FetchedGame>;
4131
- list: (options?: TTLCacheConfig) => Promise<Array<Game>>;
4132
- saveState: (state: Record<string, unknown>) => Promise<void>;
4133
- loadState: () => Promise<GameStateData>;
4134
- startSession: (gameId?: string) => Promise<StartSessionResponse>;
4135
- endSession: (sessionId: string, gameId?: string) => Promise<void>;
4136
- token: {
4137
- create: (gameId: string, options?: {
4138
- apply?: boolean;
4139
- }) => Promise<GameTokenResponse>;
4140
- };
4141
- leaderboard: {
4142
- get: (gameId: string, options?: {
4143
- limit?: number;
4144
- offset?: number;
4145
- }) => Promise<LeaderboardEntry[]>;
4146
- };
4147
- };
4148
1505
  /** User methods (me, inventory management) */
4149
1506
  users: {
4150
1507
  me: () => Promise<AuthenticatedUser>;
@@ -4155,258 +1512,6 @@ declare class PlaycademyClient {
4155
1512
  quantity: (identifier: string) => Promise<number>;
4156
1513
  has: (identifier: string, minQuantity?: number) => Promise<boolean>;
4157
1514
  };
4158
- scores: {
4159
- get: (userIdOrOptions?: string | {
4160
- limit?: number;
4161
- gameId?: string;
4162
- }, options?: {
4163
- limit?: number;
4164
- gameId?: string;
4165
- }) => Promise<UserScore[]>;
4166
- };
4167
- };
4168
- /** Developer tools (auth, games, keys management) */
4169
- dev: {
4170
- status: {
4171
- apply: () => Promise<void>;
4172
- get: () => Promise<DeveloperStatusValue>;
4173
- };
4174
- games: {
4175
- deploy: (slug: string, options: {
4176
- metadata?: UpsertGameMetadataInput;
4177
- file?: File | Blob | null;
4178
- backend?: BackendDeploymentBundle;
4179
- hooks?: DevUploadHooks;
4180
- }) => Promise<Game>;
4181
- seed: (slug: string, code: string, environment?: "staging" | "production") => Promise<{
4182
- success: boolean;
4183
- deploymentId: string;
4184
- executedAt: string;
4185
- }>;
4186
- upsert: (slug: string, metadata: UpsertGameMetadataInput) => Promise<Game>;
4187
- delete: (gameId: string) => Promise<void>;
4188
- secrets: {
4189
- set: (slug: string, secrets: Record<string, string>) => Promise<string[]>;
4190
- list: (slug: string) => Promise<string[]>;
4191
- get: (slug: string) => Promise<Record<string, string>>;
4192
- delete: (slug: string, key: string) => Promise<void>;
4193
- };
4194
- database: {
4195
- reset: (slug: string, schema?: {
4196
- sql: string;
4197
- hash: string;
4198
- }) => Promise<{
4199
- success: boolean;
4200
- deploymentId: string;
4201
- resetAt: string;
4202
- schemaPushed: boolean;
4203
- }>;
4204
- };
4205
- bucket: {
4206
- list: (slug: string, prefix?: string) => Promise<BucketFile[]>;
4207
- get: (slug: string, key: string) => Promise<ArrayBuffer>;
4208
- put: (slug: string, key: string, content: Blob | ArrayBuffer | Uint8Array, contentType?: string) => Promise<void>;
4209
- delete: (slug: string, key: string) => Promise<void>;
4210
- };
4211
- domains: {
4212
- add: (slug: string, hostname: string) => Promise<GameCustomHostname>;
4213
- list: (slug: string) => Promise<GameCustomHostname[]>;
4214
- status: (slug: string, hostname: string, refresh?: boolean) => Promise<GameCustomHostname>;
4215
- delete: (slug: string, hostname: string) => Promise<void>;
4216
- };
4217
- };
4218
- items: {
4219
- create: (gameId: string, slug: string, itemData: Omit<InsertItemInput, "slug" | "gameId">) => Promise<Item>;
4220
- update: (gameId: string, itemId: string, updates: UpdateItemInput) => Promise<Item>;
4221
- list: (gameId: string) => Promise<Array<Item>>;
4222
- get: (gameId: string, slug: string) => Promise<Item>;
4223
- delete: (gameId: string, itemId: string) => Promise<void>;
4224
- shop: {
4225
- create: (gameId: string, itemId: string, listingData: Omit<InsertShopListingInput, "itemId">) => Promise<ShopListing>;
4226
- get: (gameId: string, itemId: string) => Promise<ShopListing | null>;
4227
- update: (gameId: string, itemId: string, updates: UpdateShopListingInput) => Promise<ShopListing>;
4228
- delete: (gameId: string, itemId: string) => Promise<void>;
4229
- list: (gameId: string) => Promise<Array<ShopListing & {
4230
- item: Item;
4231
- }>>;
4232
- };
4233
- };
4234
- };
4235
- /** Map methods (elements) */
4236
- maps: {
4237
- get: (identifier: string, options?: TTLCacheConfig) => Promise<MapData>;
4238
- elements: (mapId: string, options?: TTLCacheConfig) => Promise<MapElementWithGame[]>;
4239
- objects: {
4240
- list: (mapId: string) => Promise<MapObjectWithItem[]>;
4241
- create: (mapId: string, objectData: CreateMapObjectData) => Promise<MapObjectWithItem>;
4242
- delete: (mapId: string, objectId: string) => Promise<void>;
4243
- };
4244
- };
4245
- /** Admin methods (games, items, currencies, shop listings) */
4246
- admin: {
4247
- games: {
4248
- pauseGame: (gameId: string) => Promise<void>;
4249
- resumeGame: (gameId: string) => Promise<void>;
4250
- };
4251
- items: {
4252
- create: (props: InsertItemInput) => Promise<{
4253
- id: string;
4254
- createdAt: Date;
4255
- gameId: string | null;
4256
- slug: string;
4257
- displayName: string;
4258
- metadata: unknown;
4259
- description: string | null;
4260
- type: "accessory" | "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "other";
4261
- isPlaceable: boolean;
4262
- imageUrl: string | null;
4263
- }>;
4264
- get: (itemId: string) => Promise<{
4265
- id: string;
4266
- createdAt: Date;
4267
- gameId: string | null;
4268
- slug: string;
4269
- displayName: string;
4270
- metadata: unknown;
4271
- description: string | null;
4272
- type: "accessory" | "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "other";
4273
- isPlaceable: boolean;
4274
- imageUrl: string | null;
4275
- }>;
4276
- list: () => Promise<{
4277
- id: string;
4278
- createdAt: Date;
4279
- gameId: string | null;
4280
- slug: string;
4281
- displayName: string;
4282
- metadata: unknown;
4283
- description: string | null;
4284
- type: "accessory" | "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "other";
4285
- isPlaceable: boolean;
4286
- imageUrl: string | null;
4287
- }[]>;
4288
- update: (itemId: string, props: UpdateItemInput) => Promise<{
4289
- id: string;
4290
- createdAt: Date;
4291
- gameId: string | null;
4292
- slug: string;
4293
- displayName: string;
4294
- metadata: unknown;
4295
- description: string | null;
4296
- type: "accessory" | "currency" | "badge" | "trophy" | "collectible" | "consumable" | "unlock" | "upgrade" | "other";
4297
- isPlaceable: boolean;
4298
- imageUrl: string | null;
4299
- }>;
4300
- delete: (itemId: string) => Promise<void>;
4301
- };
4302
- currencies: {
4303
- create: (props: InsertCurrencyInput) => Promise<{
4304
- symbol: string | null;
4305
- id: string;
4306
- createdAt: Date;
4307
- updatedAt: Date | null;
4308
- itemId: string;
4309
- isPrimary: boolean;
4310
- }>;
4311
- get: (currencyId: string) => Promise<{
4312
- symbol: string | null;
4313
- id: string;
4314
- createdAt: Date;
4315
- updatedAt: Date | null;
4316
- itemId: string;
4317
- isPrimary: boolean;
4318
- }>;
4319
- list: () => Promise<{
4320
- symbol: string | null;
4321
- id: string;
4322
- createdAt: Date;
4323
- updatedAt: Date | null;
4324
- itemId: string;
4325
- isPrimary: boolean;
4326
- }[]>;
4327
- update: (currencyId: string, props: UpdateCurrencyInput) => Promise<{
4328
- symbol: string | null;
4329
- id: string;
4330
- createdAt: Date;
4331
- updatedAt: Date | null;
4332
- itemId: string;
4333
- isPrimary: boolean;
4334
- }>;
4335
- delete: (currencyId: string) => Promise<void>;
4336
- };
4337
- shopListings: {
4338
- create: (props: InsertShopListingInput) => Promise<{
4339
- id: string;
4340
- createdAt: Date;
4341
- updatedAt: Date | null;
4342
- itemId: string;
4343
- currencyId: string;
4344
- price: number;
4345
- sellBackPercentage: number | null;
4346
- stock: number | null;
4347
- isActive: boolean;
4348
- availableFrom: Date | null;
4349
- availableUntil: Date | null;
4350
- }>;
4351
- get: (listingId: string) => Promise<{
4352
- id: string;
4353
- createdAt: Date;
4354
- updatedAt: Date | null;
4355
- itemId: string;
4356
- currencyId: string;
4357
- price: number;
4358
- sellBackPercentage: number | null;
4359
- stock: number | null;
4360
- isActive: boolean;
4361
- availableFrom: Date | null;
4362
- availableUntil: Date | null;
4363
- }>;
4364
- list: () => Promise<{
4365
- id: string;
4366
- createdAt: Date;
4367
- updatedAt: Date | null;
4368
- itemId: string;
4369
- currencyId: string;
4370
- price: number;
4371
- sellBackPercentage: number | null;
4372
- stock: number | null;
4373
- isActive: boolean;
4374
- availableFrom: Date | null;
4375
- availableUntil: Date | null;
4376
- }[]>;
4377
- update: (listingId: string, props: UpdateShopListingInput) => Promise<{
4378
- id: string;
4379
- createdAt: Date;
4380
- updatedAt: Date | null;
4381
- itemId: string;
4382
- currencyId: string;
4383
- price: number;
4384
- sellBackPercentage: number | null;
4385
- stock: number | null;
4386
- isActive: boolean;
4387
- availableFrom: Date | null;
4388
- availableUntil: Date | null;
4389
- }>;
4390
- delete: (listingId: string) => Promise<void>;
4391
- };
4392
- };
4393
- /** Shop methods (view) */
4394
- shop: {
4395
- view: () => Promise<ShopViewResponse>;
4396
- };
4397
- /** Level methods (levels) */
4398
- levels: {
4399
- get: () => Promise<UserLevel>;
4400
- progress: (options?: CooldownCacheConfig) => Promise<{
4401
- level: number;
4402
- currentXp: number;
4403
- xpToNextLevel: number;
4404
- totalXP: number;
4405
- }>;
4406
- config: {
4407
- list: () => Promise<LevelConfig[]>;
4408
- get: (level: number) => Promise<LevelConfig | null>;
4409
- };
4410
1515
  };
4411
1516
  /** TimeBack XP methods (today, total, history) */
4412
1517
  timeback: {
@@ -4415,10 +1520,10 @@ declare class PlaycademyClient {
4415
1520
  resumeActivity: () => void;
4416
1521
  endActivity: (data: _playcademy_timeback_types.EndActivityScoreData) => Promise<EndActivityResponse>;
4417
1522
  management: {
4418
- setup: (request: TimebackSetupRequest) => Promise<TimebackSetupResponse>;
4419
- verify: (gameId: string) => Promise<TimebackVerifyResponse>;
1523
+ setup: (request: PlatformTimebackSetupRequest) => Promise<PlatformTimebackSetupResponse>;
1524
+ verify: (gameId: string) => Promise<TimebackVerifyAllResponse>;
4420
1525
  cleanup: (gameId: string) => Promise<void>;
4421
- get: (gameId: string) => Promise<GameTimebackIntegration | null>;
1526
+ get: (gameId: string) => Promise<GameTimebackIntegration[]>;
4422
1527
  getConfig: (gameId: string) => Promise<TimebackSetupRequest["config"]>;
4423
1528
  };
4424
1529
  xp: {
@@ -4437,51 +1542,15 @@ declare class PlaycademyClient {
4437
1542
  }) => Promise<XpSummaryResponse>;
4438
1543
  };
4439
1544
  };
4440
- /** Telemetry methods (pushMetrics) */
4441
- telemetry: {
4442
- pushMetrics: (metrics: Record<string, number>) => Promise<void>;
4443
- };
4444
1545
  /** Credits methods (credits management) */
4445
1546
  credits: {
4446
1547
  balance: () => Promise<number>;
4447
1548
  add: (amount: number) => Promise<number>;
4448
1549
  spend: (amount: number) => Promise<number>;
4449
1550
  };
4450
- /** Platform-wide leaderboard methods (fetch, getUserRank) */
4451
- leaderboard: {
4452
- fetch: (options?: LeaderboardOptions) => Promise<GameLeaderboardEntry[]>;
4453
- getUserRank: (gameId: string, userId: string) => Promise<UserRankResponse>;
4454
- };
4455
1551
  /** Platform-wide scores methods (submit, getUserScores) */
4456
1552
  scores: {
4457
1553
  submit: (gameId: string, score: number, metadata?: Record<string, unknown>) => Promise<ScoreSubmission>;
4458
- getByUser: (gameId: string, userId: string, options?: {
4459
- limit?: number;
4460
- }) => Promise<UserScore$1[]>;
4461
- };
4462
- /** Character methods (get, create, update, components) */
4463
- character: {
4464
- get: (userId?: string) => Promise<PlayerCharacter | null>;
4465
- create: (characterData: CreateCharacterData) => Promise<PlayerCharacter>;
4466
- update: (updates: UpdateCharacterData) => Promise<PlayerCharacter>;
4467
- components: {
4468
- list: (options?: CharacterComponentsOptions & TTLCacheConfig) => Promise<CharacterComponentWithSpriteUrl[]>;
4469
- clearCache: (key?: string) => void;
4470
- getCacheKeys: () => string[];
4471
- };
4472
- accessories: {
4473
- equip: (slot: string, componentId: string) => Promise<PlayerCharacterAccessory>;
4474
- remove: (slot: string) => Promise<{
4475
- success: boolean;
4476
- }>;
4477
- list: () => Promise<PlayerCharacterAccessory[]>;
4478
- };
4479
- };
4480
- /** Sprites methods (templates) */
4481
- sprites: {
4482
- templates: {
4483
- get: (slug: string) => Promise<SpriteTemplateData>;
4484
- };
4485
1554
  };
4486
1555
  /** Realtime methods (token) */
4487
1556
  realtime: {
@@ -4490,36 +1559,6 @@ declare class PlaycademyClient {
4490
1559
  };
4491
1560
  open(channel?: string, url?: string): Promise<_playcademy_realtime_server_types.RealtimeChannel>;
4492
1561
  };
4493
- /** Achievements methods (list, history, progress) */
4494
- achievements: {
4495
- list: (options?: TTLCacheConfig) => Promise<AchievementCurrent[]>;
4496
- history: {
4497
- list: (queryOptions?: {
4498
- limit?: number;
4499
- }, cacheOptions?: TTLCacheConfig) => Promise<AchievementHistoryEntry[]>;
4500
- };
4501
- progress: {
4502
- submit: (achievementId: string) => Promise<AchievementProgressResponse>;
4503
- };
4504
- };
4505
- /** Notifications methods (list, update status, stats) */
4506
- notifications: {
4507
- list: (queryOptions?: {
4508
- status?: NotificationStatus;
4509
- type?: NotificationType;
4510
- limit?: number;
4511
- offset?: number;
4512
- }, cacheOptions?: TTLCacheConfig) => Promise<Notification[]>;
4513
- markAsSeen: (notificationId: string) => Promise<Notification>;
4514
- markAsClicked: (notificationId: string) => Promise<Notification>;
4515
- dismiss: (notificationId: string) => Promise<Notification>;
4516
- stats: {
4517
- get: (queryOptions?: {
4518
- from?: string;
4519
- to?: string;
4520
- }, cacheOptions?: TTLCacheConfig) => Promise<NotificationStats>;
4521
- };
4522
- };
4523
1562
  /** Backend methods for calling custom game API routes */
4524
1563
  backend: {
4525
1564
  get<T = unknown>(path: string, headers?: Record<string, string>): Promise<T>;
@@ -4541,6 +1580,9 @@ declare class PlaycademyClient {
4541
1580
  };
4542
1581
  }
4543
1582
 
1583
+ /**
1584
+ * Core client configuration and lifecycle types
1585
+ */
4544
1586
  type TokenType = 'session' | 'apiKey' | 'gameJwt';
4545
1587
  interface ClientConfig {
4546
1588
  baseUrl: string;
@@ -4573,45 +1615,48 @@ interface DisconnectContext {
4573
1615
  duration?: number;
4574
1616
  }) => void;
4575
1617
  }
4576
- type AuthProviderType = (typeof AUTH_PROVIDER_IDS)[keyof typeof AUTH_PROVIDER_IDS];
4577
- interface AuthOptions {
4578
- /** The identity provider to use for authentication */
4579
- provider: AuthProviderType;
4580
- /** The OAuth callback URL where your server handles the callback */
4581
- callbackUrl: string;
4582
- /** Authentication mode - auto detects best option based on context */
4583
- mode?: 'auto' | 'popup' | 'redirect';
4584
- /** Callback for authentication state changes */
4585
- onStateChange?: (state: AuthStateUpdate) => void;
4586
- /** Custom OAuth configuration (for users embedding the SDK outside of the Playcademy platform) */
4587
- oauth?: {
4588
- clientId: string;
4589
- authorizationEndpoint?: string;
4590
- tokenEndpoint?: string;
4591
- scope?: string;
1618
+ type GameContextPayload = {
1619
+ token: string;
1620
+ baseUrl: string;
1621
+ realtimeUrl: string;
1622
+ gameId: string;
1623
+ forwardKeys?: string[];
1624
+ };
1625
+ interface ClientEvents {
1626
+ authChange: {
1627
+ token: string | null;
1628
+ };
1629
+ inventoryChange: {
1630
+ itemId: string;
1631
+ delta: number;
1632
+ newTotal: number;
1633
+ };
1634
+ levelUp: {
1635
+ oldLevel: number;
1636
+ newLevel: number;
1637
+ creditsAwarded: number;
1638
+ };
1639
+ xpGained: {
1640
+ amount: number;
1641
+ totalXP: number;
1642
+ leveledUp: boolean;
1643
+ };
1644
+ connectionChange: {
1645
+ state: 'online' | 'offline' | 'degraded';
1646
+ reason: string;
4592
1647
  };
4593
- /**
4594
- * Optional custom data to encode in OAuth state parameter.
4595
- * By default, the SDK automatically includes playcademy_user_id and game_id.
4596
- * Use this to add additional custom data if needed.
4597
- */
4598
- stateData?: Record<string, string>;
4599
1648
  }
4600
- interface AuthStateUpdate {
4601
- /** Current status of the authentication flow */
4602
- status: 'opening_popup' | 'exchanging_token' | 'complete' | 'error';
4603
- /** Human-readable message about the current state */
1649
+
1650
+ /**
1651
+ * Event and message payload types for SDK messaging system
1652
+ */
1653
+
1654
+ interface DisplayAlertPayload {
4604
1655
  message: string;
4605
- /** Error details if status is 'error' */
4606
- error?: Error;
4607
- }
4608
- interface AuthResult {
4609
- /** Whether authentication was successful */
4610
- success: boolean;
4611
- /** User information if authentication was successful */
4612
- user?: UserInfo;
4613
- /** Error if authentication failed */
4614
- error?: Error;
1656
+ options?: {
1657
+ type?: 'info' | 'warning' | 'error';
1658
+ duration?: number;
1659
+ };
4615
1660
  }
4616
1661
  /**
4617
1662
  * Authentication state change event payload.
@@ -4669,24 +1714,6 @@ interface KeyEventPayload {
4669
1714
  /** Event type */
4670
1715
  type: 'keydown' | 'keyup';
4671
1716
  }
4672
- interface DisplayAlertPayload {
4673
- message: string;
4674
- options?: {
4675
- type?: 'info' | 'warning' | 'error';
4676
- duration?: number;
4677
- };
4678
- }
4679
- /**
4680
- * Display alert payload.
4681
- * Request from game to show platform-level alert.
4682
- */
4683
- interface DisplayAlertPayload {
4684
- message: string;
4685
- options?: {
4686
- type?: 'info' | 'warning' | 'error';
4687
- duration?: number;
4688
- };
4689
- }
4690
1717
  /**
4691
1718
  * Connection state payload.
4692
1719
  * Broadcast from platform to games when connection changes.
@@ -4695,37 +1722,10 @@ interface ConnectionStatePayload {
4695
1722
  state: 'online' | 'offline' | 'degraded';
4696
1723
  reason: string;
4697
1724
  }
4698
- interface ClientEvents {
4699
- authChange: {
4700
- token: string | null;
4701
- };
4702
- inventoryChange: {
4703
- itemId: string;
4704
- delta: number;
4705
- newTotal: number;
4706
- };
4707
- levelUp: {
4708
- oldLevel: number;
4709
- newLevel: number;
4710
- creditsAwarded: number;
4711
- };
4712
- xpGained: {
4713
- amount: number;
4714
- totalXP: number;
4715
- leveledUp: boolean;
4716
- };
4717
- connectionChange: {
4718
- state: 'online' | 'offline' | 'degraded';
4719
- reason: string;
4720
- };
4721
- }
4722
- type GameContextPayload = {
4723
- token: string;
4724
- baseUrl: string;
4725
- realtimeUrl: string;
4726
- gameId: string;
4727
- forwardKeys?: string[];
4728
- };
1725
+
1726
+ /**
1727
+ * SDK-specific API response types
1728
+ */
4729
1729
  type LoginResponse = {
4730
1730
  token: string;
4731
1731
  };
@@ -4733,12 +1733,74 @@ type GameTokenResponse = {
4733
1733
  token: string;
4734
1734
  exp: number;
4735
1735
  };
4736
- type StartSessionResponse = {
4737
- sessionId: string;
4738
- };
4739
1736
  type InventoryMutationResponse = {
4740
1737
  newTotal: number;
4741
1738
  };
1739
+
1740
+ /**
1741
+ * Realtime namespace types
1742
+ */
1743
+ /**
1744
+ * Response type for the realtime token API
1745
+ */
1746
+ interface RealtimeTokenResponse {
1747
+ token: string;
1748
+ }
1749
+
1750
+ /**
1751
+ * Scores namespace types
1752
+ */
1753
+ interface ScoreSubmission {
1754
+ id: string;
1755
+ score: number;
1756
+ achievedAt: Date;
1757
+ }
1758
+
1759
+ /**
1760
+ * Authentication namespace types
1761
+ */
1762
+
1763
+ type AuthProviderType = (typeof AUTH_PROVIDER_IDS)[keyof typeof AUTH_PROVIDER_IDS];
1764
+ interface AuthOptions {
1765
+ /** The identity provider to use for authentication */
1766
+ provider: AuthProviderType;
1767
+ /** The OAuth callback URL where your server handles the callback */
1768
+ callbackUrl: string;
1769
+ /** Authentication mode - auto detects best option based on context */
1770
+ mode?: 'auto' | 'popup' | 'redirect';
1771
+ /** Callback for authentication state changes */
1772
+ onStateChange?: (state: AuthStateUpdate) => void;
1773
+ /** Custom OAuth configuration (for users embedding the SDK outside of the Playcademy platform) */
1774
+ oauth?: {
1775
+ clientId: string;
1776
+ authorizationEndpoint?: string;
1777
+ tokenEndpoint?: string;
1778
+ scope?: string;
1779
+ };
1780
+ /**
1781
+ * Optional custom data to encode in OAuth state parameter.
1782
+ * By default, the SDK automatically includes playcademy_user_id and game_id.
1783
+ * Use this to add additional custom data if needed.
1784
+ */
1785
+ stateData?: Record<string, string>;
1786
+ }
1787
+ interface AuthStateUpdate {
1788
+ /** Current status of the authentication flow */
1789
+ status: 'opening_popup' | 'exchanging_token' | 'complete' | 'error';
1790
+ /** Human-readable message about the current state */
1791
+ message: string;
1792
+ /** Error details if status is 'error' */
1793
+ error?: Error;
1794
+ }
1795
+ interface AuthResult {
1796
+ /** Whether authentication was successful */
1797
+ success: boolean;
1798
+ /** User information if authentication was successful */
1799
+ user?: UserInfo;
1800
+ /** Error if authentication failed */
1801
+ error?: Error;
1802
+ }
1803
+
4742
1804
  type DevUploadEvent = {
4743
1805
  type: 'init';
4744
1806
  } | {
@@ -4762,41 +1824,6 @@ type DevUploadHooks = {
4762
1824
  onEvent?: (e: DevUploadEvent) => void;
4763
1825
  onClose?: () => void;
4764
1826
  };
4765
- /**
4766
- * Better-auth API key creation response
4767
- */
4768
- interface BetterAuthApiKeyResponse {
4769
- apiKey: string;
4770
- key: {
4771
- id: string;
4772
- name: string | null;
4773
- expiresAt: string | null;
4774
- createdAt: string;
4775
- };
4776
- }
4777
- /**
4778
- * Better-auth API key list item
4779
- */
4780
- interface BetterAuthApiKey {
4781
- id: string;
4782
- name: string | null;
4783
- start: string;
4784
- enabled: boolean;
4785
- expiresAt: string | null;
4786
- createdAt: string;
4787
- updatedAt: string;
4788
- lastRequest: string | null;
4789
- requestCount: number;
4790
- }
4791
- /**
4792
- * Bucket file metadata
4793
- */
4794
- interface BucketFile {
4795
- key: string;
4796
- size: number;
4797
- uploaded: string;
4798
- contentType?: string;
4799
- }
4800
1827
 
4801
1828
  /**
4802
1829
  * Connection Manager