@phala/cloud 0.0.12 → 0.1.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/actions/{add_compose_hash.d.ts → blockchains/add_compose_hash.d.ts} +6 -7
  2. package/dist/actions/{deploy_app_auth.d.ts → blockchains/deploy_app_auth.d.ts} +6 -7
  3. package/dist/actions/{commit_cvm_compose_file_update.d.ts → cvms/commit_cvm_compose_file_update.d.ts} +25 -13
  4. package/dist/actions/{commit_cvm_provision.d.ts → cvms/commit_cvm_provision.d.ts} +139 -13
  5. package/dist/actions/cvms/get_cvm_compose_file.d.ts +225 -0
  6. package/dist/actions/{get_cvm_info.d.ts → cvms/get_cvm_info.d.ts} +21 -12
  7. package/dist/actions/{get_cvm_list.d.ts → cvms/get_cvm_list.d.ts} +187 -39
  8. package/dist/actions/{provision_cvm.d.ts → cvms/provision_cvm.d.ts} +75 -20
  9. package/dist/actions/cvms/provision_cvm_compose_file_update.d.ts +768 -0
  10. package/dist/actions/get_available_nodes.d.ts +319 -7
  11. package/dist/actions/get_current_user.d.ts +35 -7
  12. package/dist/actions/index.d.ts +17 -18
  13. package/dist/actions/kms/get_app_env_encrypt_pubkey.d.ts +66 -0
  14. package/dist/actions/kms/get_kms_info.d.ts +55 -0
  15. package/dist/actions/{get_kms_list.d.ts → kms/get_kms_list.d.ts} +44 -8
  16. package/dist/actions/list-instance-types.d.ts +69 -10
  17. package/dist/actions/workspaces/get_workspace.d.ts +33 -8
  18. package/dist/actions/workspaces/list_workspaces.d.ts +92 -7
  19. package/dist/chunk-O5QBIXBA.mjs +1128 -0
  20. package/dist/client.d.ts +16 -1
  21. package/dist/create-client.d.ts +311 -0
  22. package/dist/create-client.js +1143 -0
  23. package/dist/create-client.mjs +74 -0
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.js +504 -722
  26. package/dist/index.mjs +135 -1351
  27. package/dist/parse_dotenv.d.ts +0 -1
  28. package/dist/types/app_compose.d.ts +0 -1
  29. package/dist/types/client.d.ts +0 -1
  30. package/dist/types/common.d.ts +17 -4
  31. package/dist/types/cvm_info.d.ts +34 -35
  32. package/dist/types/index.d.ts +0 -1
  33. package/dist/types/kms_info.d.ts +0 -1
  34. package/dist/types/supported_chains.d.ts +0 -1
  35. package/dist/utils/as-hex.d.ts +0 -1
  36. package/dist/utils/client-factories.d.ts +0 -1
  37. package/dist/utils/define-action.d.ts +61 -0
  38. package/dist/utils/get_compose_hash.d.ts +0 -1
  39. package/dist/utils/get_error_message.d.ts +0 -1
  40. package/dist/utils/index.d.ts +0 -1
  41. package/dist/utils/network.d.ts +0 -1
  42. package/dist/utils/transaction.d.ts +0 -1
  43. package/dist/utils/validate-parameters.d.ts +5 -5
  44. package/package.json +70 -66
  45. package/dist/actions/add_compose_hash.d.ts.map +0 -1
  46. package/dist/actions/commit_cvm_compose_file_update.d.ts.map +0 -1
  47. package/dist/actions/commit_cvm_provision.d.ts.map +0 -1
  48. package/dist/actions/deploy_app_auth.d.ts.map +0 -1
  49. package/dist/actions/get_app_env_encrypt_pubkey.d.ts +0 -30
  50. package/dist/actions/get_app_env_encrypt_pubkey.d.ts.map +0 -1
  51. package/dist/actions/get_available_nodes.d.ts.map +0 -1
  52. package/dist/actions/get_current_user.d.ts.map +0 -1
  53. package/dist/actions/get_cvm_compose_file.d.ts +0 -122
  54. package/dist/actions/get_cvm_compose_file.d.ts.map +0 -1
  55. package/dist/actions/get_cvm_info.d.ts.map +0 -1
  56. package/dist/actions/get_cvm_list.d.ts.map +0 -1
  57. package/dist/actions/get_kms_info.d.ts +0 -34
  58. package/dist/actions/get_kms_info.d.ts.map +0 -1
  59. package/dist/actions/get_kms_list.d.ts.map +0 -1
  60. package/dist/actions/index.d.ts.map +0 -1
  61. package/dist/actions/list-instance-types.d.ts.map +0 -1
  62. package/dist/actions/provision_cvm.d.ts.map +0 -1
  63. package/dist/actions/provision_cvm_compose_file_update.d.ts +0 -413
  64. package/dist/actions/provision_cvm_compose_file_update.d.ts.map +0 -1
  65. package/dist/actions/workspaces/get_workspace.d.ts.map +0 -1
  66. package/dist/actions/workspaces/list_workspaces.d.ts.map +0 -1
  67. package/dist/client.d.ts.map +0 -1
  68. package/dist/index.d.ts.map +0 -1
  69. package/dist/parse_dotenv.d.ts.map +0 -1
  70. package/dist/types/app_compose.d.ts.map +0 -1
  71. package/dist/types/client.d.ts.map +0 -1
  72. package/dist/types/common.d.ts.map +0 -1
  73. package/dist/types/cvm_info.d.ts.map +0 -1
  74. package/dist/types/index.d.ts.map +0 -1
  75. package/dist/types/kms_info.d.ts.map +0 -1
  76. package/dist/types/supported_chains.d.ts.map +0 -1
  77. package/dist/utils/as-hex.d.ts.map +0 -1
  78. package/dist/utils/client-factories.d.ts.map +0 -1
  79. package/dist/utils/get_compose_hash.d.ts.map +0 -1
  80. package/dist/utils/get_error_message.d.ts.map +0 -1
  81. package/dist/utils/index.d.ts.map +0 -1
  82. package/dist/utils/network.d.ts.map +0 -1
  83. package/dist/utils/transaction.d.ts.map +0 -1
  84. package/dist/utils/validate-parameters.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -44,11 +44,18 @@ __export(index_exports, {
44
44
  CvmNodeSchema: () => CvmNodeSchema,
45
45
  DeployAppAuthRequestSchema: () => DeployAppAuthRequestSchema,
46
46
  DeployAppAuthSchema: () => DeployAppAuthSchema,
47
+ GetAppEnvEncryptPubKeyRequestSchema: () => GetAppEnvEncryptPubKeyRequestSchema,
47
48
  GetAppEnvEncryptPubKeySchema: () => GetAppEnvEncryptPubKeySchema,
49
+ GetCvmComposeFileRequestSchema: () => GetCvmComposeFileRequestSchema,
50
+ GetCvmInfoRequestSchema: () => GetCvmInfoRequestSchema,
51
+ GetCvmListRequestSchema: () => GetCvmListRequestSchema,
48
52
  GetCvmListSchema: () => GetCvmListSchema,
53
+ GetKmsInfoRequestSchema: () => GetKmsInfoRequestSchema,
54
+ GetKmsListRequestSchema: () => GetKmsListRequestSchema,
49
55
  GetKmsListSchema: () => GetKmsListSchema,
50
56
  InstanceTypeSchema: () => InstanceTypeSchema,
51
57
  KmsInfoSchema: () => KmsInfoSchema,
58
+ ListInstanceTypesRequestSchema: () => ListInstanceTypesRequestSchema,
52
59
  ListWorkspacesSchema: () => ListWorkspacesSchema,
53
60
  ManagedUserSchema: () => ManagedUserSchema,
54
61
  NetworkError: () => NetworkError,
@@ -77,6 +84,8 @@ __export(index_exports, {
77
84
  createClientsFromPrivateKey: () => createClientsFromPrivateKey,
78
85
  createNetworkClients: () => createNetworkClients,
79
86
  createTransactionTracker: () => createTransactionTracker,
87
+ defineAction: () => defineAction,
88
+ defineSimpleAction: () => defineSimpleAction,
80
89
  deployAppAuth: () => deployAppAuth,
81
90
  encryptEnvVars: () => import_encrypt_env_vars2.encryptEnvVars,
82
91
  estimateTransactionGas: () => estimateTransactionGas,
@@ -423,6 +432,28 @@ var Client = class {
423
432
  async safeDelete(request, options) {
424
433
  return this.safeRequest(() => this.delete(request, options));
425
434
  }
435
+ /**
436
+ * Extend client with additional actions
437
+ *
438
+ * @example
439
+ * ```typescript
440
+ * const client = createClient({ apiKey: 'xxx' })
441
+ * .extend(publicActions)
442
+ * .extend(cvmActions)
443
+ *
444
+ * await client.getCurrentUser() // Method call instead of function call
445
+ * ```
446
+ */
447
+ extend(actions) {
448
+ const actionsObj = typeof actions === "function" ? actions(this) : actions;
449
+ const extended = Object.create(this);
450
+ for (const [key, action] of Object.entries(actionsObj)) {
451
+ if (typeof action === "function") {
452
+ extended[key] = (...args) => action(this, ...args);
453
+ }
454
+ }
455
+ return extended;
456
+ }
426
457
  };
427
458
  function createClient(config = {}) {
428
459
  return new Client(config);
@@ -545,6 +576,357 @@ var CvmLegacyDetailSchema = import_zod3.z.object({
545
576
  // src/actions/get_current_user.ts
546
577
  var import_zod4 = require("zod");
547
578
 
579
+ // src/utils/validate-parameters.ts
580
+ function validateActionParameters(parameters) {
581
+ if (parameters?.schema !== void 0 && parameters?.schema !== false) {
582
+ if (typeof parameters.schema !== "object" || parameters.schema === null || !("parse" in parameters.schema) || typeof parameters.schema.parse !== "function") {
583
+ throw new Error("Invalid schema: must be a Zod schema object, false, or undefined");
584
+ }
585
+ }
586
+ }
587
+ function safeValidateActionParameters(parameters) {
588
+ if (parameters?.schema !== void 0 && parameters?.schema !== false) {
589
+ if (typeof parameters.schema !== "object" || parameters.schema === null || !("parse" in parameters.schema) || typeof parameters.schema.parse !== "function") {
590
+ return {
591
+ success: false,
592
+ error: {
593
+ name: "ZodError",
594
+ message: "Invalid schema: must be a Zod schema object, false, or undefined",
595
+ issues: [
596
+ {
597
+ code: "invalid_type",
598
+ expected: "object",
599
+ received: typeof parameters.schema,
600
+ path: ["schema"],
601
+ message: "Invalid schema: must be a Zod schema object, false, or undefined"
602
+ }
603
+ ]
604
+ }
605
+ };
606
+ }
607
+ }
608
+ return void 0;
609
+ }
610
+
611
+ // src/utils/define-action.ts
612
+ function defineSimpleAction(schema, fn) {
613
+ function action(client, parameters) {
614
+ return _actionImpl(client, parameters);
615
+ }
616
+ async function _actionImpl(client, parameters) {
617
+ validateActionParameters(parameters);
618
+ const response = await fn(client);
619
+ if (parameters?.schema === false) {
620
+ return response;
621
+ }
622
+ const actualSchema = parameters?.schema || schema;
623
+ return actualSchema.parse(response);
624
+ }
625
+ function safeAction(client, parameters) {
626
+ return _safeActionImpl(client, parameters);
627
+ }
628
+ async function _safeActionImpl(client, parameters) {
629
+ const parameterValidationError = safeValidateActionParameters(parameters);
630
+ if (parameterValidationError) {
631
+ return parameterValidationError;
632
+ }
633
+ const httpResult = await (async () => {
634
+ try {
635
+ const data = await fn(client);
636
+ return { success: true, data };
637
+ } catch (error) {
638
+ if (error && typeof error === "object" && "isRequestError" in error) {
639
+ return { success: false, error };
640
+ }
641
+ if (error && typeof error === "object" && "issues" in error) {
642
+ return { success: false, error };
643
+ }
644
+ return {
645
+ success: false,
646
+ error: {
647
+ name: "Error",
648
+ message: error instanceof Error ? error.message : String(error)
649
+ }
650
+ };
651
+ }
652
+ })();
653
+ if (!httpResult.success) {
654
+ return httpResult;
655
+ }
656
+ if (parameters?.schema === false) {
657
+ return { success: true, data: httpResult.data };
658
+ }
659
+ const actualSchema = parameters?.schema || schema;
660
+ return actualSchema.safeParse(httpResult.data);
661
+ }
662
+ return {
663
+ action,
664
+ safeAction
665
+ };
666
+ }
667
+ function defineAction(schema, fn) {
668
+ function action(client, ...args) {
669
+ const [params, parameters] = args;
670
+ return _actionImpl(client, params, parameters);
671
+ }
672
+ async function _actionImpl(client, params, parameters) {
673
+ validateActionParameters(parameters);
674
+ const response = await fn(client, params);
675
+ if (parameters?.schema === false) {
676
+ return response;
677
+ }
678
+ const actualSchema = parameters?.schema || schema;
679
+ return actualSchema.parse(response);
680
+ }
681
+ function safeAction(client, ...args) {
682
+ const [params, parameters] = args;
683
+ return _safeActionImpl(client, params, parameters);
684
+ }
685
+ async function _safeActionImpl(client, params, parameters) {
686
+ const parameterValidationError = safeValidateActionParameters(parameters);
687
+ if (parameterValidationError) {
688
+ return parameterValidationError;
689
+ }
690
+ const httpResult = await (async () => {
691
+ try {
692
+ const data = await fn(client, params);
693
+ return { success: true, data };
694
+ } catch (error) {
695
+ if (error && typeof error === "object" && "isRequestError" in error) {
696
+ return { success: false, error };
697
+ }
698
+ if (error && typeof error === "object" && "issues" in error) {
699
+ return { success: false, error };
700
+ }
701
+ return {
702
+ success: false,
703
+ error: {
704
+ name: "Error",
705
+ message: error instanceof Error ? error.message : String(error)
706
+ }
707
+ };
708
+ }
709
+ })();
710
+ if (!httpResult.success) {
711
+ return httpResult;
712
+ }
713
+ if (parameters?.schema === false) {
714
+ return { success: true, data: httpResult.data };
715
+ }
716
+ const actualSchema = parameters?.schema || schema;
717
+ return actualSchema.safeParse(httpResult.data);
718
+ }
719
+ return {
720
+ action,
721
+ safeAction
722
+ };
723
+ }
724
+
725
+ // src/actions/get_current_user.ts
726
+ var CurrentUserSchema = import_zod4.z.object({
727
+ username: import_zod4.z.string(),
728
+ email: import_zod4.z.string(),
729
+ credits: import_zod4.z.number(),
730
+ granted_credits: import_zod4.z.number(),
731
+ avatar: import_zod4.z.string(),
732
+ team_name: import_zod4.z.string(),
733
+ team_tier: import_zod4.z.string()
734
+ }).passthrough();
735
+ var { action: getCurrentUser, safeAction: safeGetCurrentUser } = defineSimpleAction(
736
+ CurrentUserSchema,
737
+ async (client) => {
738
+ return await client.get("/auth/me");
739
+ }
740
+ );
741
+
742
+ // src/actions/get_available_nodes.ts
743
+ var import_zod5 = require("zod");
744
+ var AvailableOSImageSchema = import_zod5.z.object({
745
+ name: import_zod5.z.string(),
746
+ is_dev: import_zod5.z.boolean(),
747
+ version: import_zod5.z.union([
748
+ import_zod5.z.tuple([import_zod5.z.number(), import_zod5.z.number(), import_zod5.z.number()]),
749
+ import_zod5.z.tuple([import_zod5.z.number(), import_zod5.z.number(), import_zod5.z.number(), import_zod5.z.number()])
750
+ ]),
751
+ os_image_hash: import_zod5.z.string().nullable().optional()
752
+ }).passthrough();
753
+ var TeepodCapacitySchema = import_zod5.z.object({
754
+ teepod_id: import_zod5.z.number(),
755
+ name: import_zod5.z.string(),
756
+ listed: import_zod5.z.boolean(),
757
+ resource_score: import_zod5.z.number(),
758
+ remaining_vcpu: import_zod5.z.number(),
759
+ remaining_memory: import_zod5.z.number(),
760
+ remaining_cvm_slots: import_zod5.z.number(),
761
+ images: import_zod5.z.array(AvailableOSImageSchema),
762
+ support_onchain_kms: import_zod5.z.boolean().optional(),
763
+ fmspc: import_zod5.z.string().nullable().optional(),
764
+ device_id: import_zod5.z.string().nullable().optional(),
765
+ region_identifier: import_zod5.z.string().nullable().optional(),
766
+ default_kms: import_zod5.z.string().nullable().optional(),
767
+ kms_list: import_zod5.z.array(import_zod5.z.string()).default([])
768
+ }).passthrough();
769
+ var ResourceThresholdSchema = import_zod5.z.object({
770
+ max_instances: import_zod5.z.number().nullable().optional(),
771
+ max_vcpu: import_zod5.z.number().nullable().optional(),
772
+ max_memory: import_zod5.z.number().nullable().optional(),
773
+ max_disk: import_zod5.z.number().nullable().optional()
774
+ }).passthrough();
775
+ var AvailableNodesSchema = import_zod5.z.object({
776
+ tier: import_zod5.z.string(),
777
+ // TeamTier is string enum
778
+ capacity: ResourceThresholdSchema,
779
+ nodes: import_zod5.z.array(TeepodCapacitySchema),
780
+ kms_list: import_zod5.z.array(KmsInfoSchema)
781
+ }).passthrough();
782
+ var { action: getAvailableNodes, safeAction: safeGetAvailableNodes } = defineSimpleAction(
783
+ AvailableNodesSchema,
784
+ async (client) => {
785
+ return await client.get("/teepods/available");
786
+ }
787
+ );
788
+
789
+ // src/actions/cvms/provision_cvm.ts
790
+ var import_zod6 = require("zod");
791
+ var ProvisionCvmSchema = import_zod6.z.object({
792
+ app_id: import_zod6.z.string().nullable().optional(),
793
+ app_env_encrypt_pubkey: import_zod6.z.string().nullable().optional(),
794
+ compose_hash: import_zod6.z.string(),
795
+ fmspc: import_zod6.z.string().nullable().optional(),
796
+ device_id: import_zod6.z.string().nullable().optional(),
797
+ os_image_hash: import_zod6.z.string().nullable().optional(),
798
+ teepod_id: import_zod6.z.number().nullable().optional(),
799
+ // Will be transformed to node_id
800
+ node_id: import_zod6.z.number().nullable().optional(),
801
+ kms_id: import_zod6.z.string().nullable().optional()
802
+ }).passthrough().transform((data) => {
803
+ if ("teepod_id" in data && data.teepod_id !== void 0) {
804
+ const { teepod_id, ...rest } = data;
805
+ return { ...rest, node_id: teepod_id };
806
+ }
807
+ return data;
808
+ });
809
+ var ProvisionCvmRequestSchema = import_zod6.z.object({
810
+ node_id: import_zod6.z.number().optional(),
811
+ // recommended
812
+ teepod_id: import_zod6.z.number().optional(),
813
+ // deprecated, for compatibility
814
+ name: import_zod6.z.string(),
815
+ image: import_zod6.z.string(),
816
+ vcpu: import_zod6.z.number(),
817
+ memory: import_zod6.z.number(),
818
+ disk_size: import_zod6.z.number(),
819
+ compose_file: import_zod6.z.object({
820
+ allowed_envs: import_zod6.z.array(import_zod6.z.string()).optional(),
821
+ pre_launch_script: import_zod6.z.string().optional(),
822
+ docker_compose_file: import_zod6.z.string().optional(),
823
+ name: import_zod6.z.string().optional(),
824
+ kms_enabled: import_zod6.z.boolean().optional(),
825
+ public_logs: import_zod6.z.boolean().optional(),
826
+ public_sysinfo: import_zod6.z.boolean().optional(),
827
+ gateway_enabled: import_zod6.z.boolean().optional(),
828
+ // recommended
829
+ tproxy_enabled: import_zod6.z.boolean().optional()
830
+ // deprecated, for compatibility
831
+ }),
832
+ listed: import_zod6.z.boolean().optional(),
833
+ instance_type: import_zod6.z.string().nullable().optional(),
834
+ kms_id: import_zod6.z.string().optional(),
835
+ env_keys: import_zod6.z.array(import_zod6.z.string()).optional()
836
+ }).passthrough();
837
+ function autofillComposeFileName(appCompose) {
838
+ if (appCompose.compose_file && !appCompose.compose_file.name) {
839
+ return {
840
+ ...appCompose,
841
+ compose_file: {
842
+ ...appCompose.compose_file,
843
+ name: appCompose.name
844
+ }
845
+ };
846
+ }
847
+ return appCompose;
848
+ }
849
+ function handleGatewayCompatibility(appCompose) {
850
+ if (!appCompose.compose_file) {
851
+ return appCompose;
852
+ }
853
+ const composeFile = { ...appCompose.compose_file };
854
+ if (typeof composeFile.gateway_enabled === "boolean" && typeof composeFile.tproxy_enabled === "boolean") {
855
+ delete composeFile.tproxy_enabled;
856
+ } else if (typeof composeFile.tproxy_enabled === "boolean" && typeof composeFile.gateway_enabled === "undefined") {
857
+ composeFile.gateway_enabled = composeFile.tproxy_enabled;
858
+ delete composeFile.tproxy_enabled;
859
+ if (typeof window !== "undefined" ? window.console : globalThis.console) {
860
+ console.warn(
861
+ "[phala/cloud] tproxy_enabled is deprecated, please use gateway_enabled instead. See docs for migration."
862
+ );
863
+ }
864
+ }
865
+ return {
866
+ ...appCompose,
867
+ compose_file: composeFile
868
+ };
869
+ }
870
+ var { action: provisionCvm, safeAction: safeProvisionCvm } = defineAction(ProvisionCvmSchema, async (client, appCompose) => {
871
+ const body = handleGatewayCompatibility(autofillComposeFileName(appCompose));
872
+ let requestBody = { ...body };
873
+ if (typeof body.node_id === "number") {
874
+ requestBody = { ...body, teepod_id: body.node_id };
875
+ delete requestBody.node_id;
876
+ } else if (typeof body.teepod_id === "number") {
877
+ console.warn("[phala/cloud] teepod_id is deprecated, please use node_id instead.");
878
+ }
879
+ return await client.post("/cvms/provision", requestBody);
880
+ });
881
+
882
+ // src/actions/cvms/commit_cvm_provision.ts
883
+ var import_zod7 = require("zod");
884
+ var CommitCvmProvisionSchema = import_zod7.z.object({
885
+ id: import_zod7.z.number(),
886
+ name: import_zod7.z.string(),
887
+ status: import_zod7.z.string(),
888
+ teepod_id: import_zod7.z.number(),
889
+ teepod: import_zod7.z.object({
890
+ id: import_zod7.z.number(),
891
+ name: import_zod7.z.string()
892
+ }).nullable(),
893
+ user_id: import_zod7.z.number().nullable(),
894
+ app_id: import_zod7.z.string().nullable(),
895
+ vm_uuid: import_zod7.z.string().nullable(),
896
+ instance_id: import_zod7.z.string().nullable(),
897
+ app_url: import_zod7.z.string().nullable(),
898
+ base_image: import_zod7.z.string().nullable(),
899
+ vcpu: import_zod7.z.number(),
900
+ memory: import_zod7.z.number(),
901
+ disk_size: import_zod7.z.number(),
902
+ manifest_version: import_zod7.z.number().nullable(),
903
+ version: import_zod7.z.string().nullable(),
904
+ runner: import_zod7.z.string().nullable(),
905
+ docker_compose_file: import_zod7.z.string().nullable(),
906
+ features: import_zod7.z.array(import_zod7.z.string()).nullable(),
907
+ created_at: import_zod7.z.string(),
908
+ encrypted_env_pubkey: import_zod7.z.string().nullable().optional(),
909
+ app_auth_contract_address: import_zod7.z.string().nullable().optional(),
910
+ deployer_address: import_zod7.z.string().nullable().optional()
911
+ }).passthrough();
912
+ var CommitCvmProvisionRequestSchema = import_zod7.z.object({
913
+ encrypted_env: import_zod7.z.string().optional().nullable(),
914
+ app_id: import_zod7.z.string(),
915
+ compose_hash: import_zod7.z.string().optional(),
916
+ kms_id: import_zod7.z.string().optional(),
917
+ contract_address: import_zod7.z.string().optional(),
918
+ deployer_address: import_zod7.z.string().optional(),
919
+ env_keys: import_zod7.z.array(import_zod7.z.string()).optional().nullable()
920
+ }).passthrough();
921
+ var { action: commitCvmProvision, safeAction: safeCommitCvmProvision } = defineAction(CommitCvmProvisionSchema, async (client, payload) => {
922
+ return await client.post("/cvms", payload);
923
+ });
924
+
925
+ // src/actions/blockchains/deploy_app_auth.ts
926
+ var import_zod8 = require("zod");
927
+ var import_viem3 = require("viem");
928
+ var import_accounts2 = require("viem/accounts");
929
+
548
930
  // src/utils/index.ts
549
931
  var import_encrypt_env_vars = require("@phala/dstack-sdk/encrypt-env-vars");
550
932
 
@@ -578,38 +960,6 @@ function asHex(value) {
578
960
  throw new Error(`Invalid hex value: ${value}`);
579
961
  }
580
962
 
581
- // src/utils/validate-parameters.ts
582
- function validateActionParameters(parameters) {
583
- if (parameters?.schema !== void 0 && parameters?.schema !== false) {
584
- if (typeof parameters.schema !== "object" || parameters.schema === null || !("parse" in parameters.schema) || typeof parameters.schema.parse !== "function") {
585
- throw new Error("Invalid schema: must be a Zod schema object, false, or undefined");
586
- }
587
- }
588
- }
589
- function safeValidateActionParameters(parameters) {
590
- if (parameters?.schema !== void 0 && parameters?.schema !== false) {
591
- if (typeof parameters.schema !== "object" || parameters.schema === null || !("parse" in parameters.schema) || typeof parameters.schema.parse !== "function") {
592
- return {
593
- success: false,
594
- error: {
595
- name: "ZodError",
596
- message: "Invalid schema: must be a Zod schema object, false, or undefined",
597
- issues: [
598
- {
599
- code: "invalid_type",
600
- expected: "object",
601
- received: typeof parameters.schema,
602
- path: ["schema"],
603
- message: "Invalid schema: must be a Zod schema object, false, or undefined"
604
- }
605
- ]
606
- }
607
- };
608
- }
609
- }
610
- return void 0;
611
- }
612
-
613
963
  // src/utils/network.ts
614
964
  var NetworkError = class extends Error {
615
965
  constructor(message, code, details) {
@@ -1139,370 +1489,77 @@ async function createClientsFromBrowser(chain, rpcUrl) {
1139
1489
  if (error instanceof WalletError || error instanceof NetworkError) {
1140
1490
  throw error;
1141
1491
  }
1142
- throw new WalletError(
1143
- `Failed to connect browser wallet: ${error instanceof Error ? error.message : "Unknown error"}`,
1144
- "BROWSER_CONNECTION_FAILED",
1145
- error
1146
- );
1147
- }
1148
- }
1149
- async function switchToNetwork(provider, chainId) {
1150
- try {
1151
- await provider.request({
1152
- method: "wallet_switchEthereumChain",
1153
- params: [{ chainId: `0x${chainId.toString(16)}` }]
1154
- });
1155
- } catch (error) {
1156
- const errorObj = error;
1157
- if (errorObj.code === 4902) {
1158
- throw new NetworkError(
1159
- `Network ${chainId} not found in wallet. Please add it manually.`,
1160
- "NETWORK_NOT_FOUND",
1161
- error
1162
- );
1163
- }
1164
- throw new NetworkError(
1165
- `Failed to switch network: ${errorObj.message || "Unknown error"}`,
1166
- "NETWORK_SWITCH_FAILED",
1167
- error
1168
- );
1169
- }
1170
- }
1171
- async function addNetwork(provider, config) {
1172
- try {
1173
- await provider.request({
1174
- method: "wallet_addEthereumChain",
1175
- params: [
1176
- {
1177
- chainId: `0x${config.chainId.toString(16)}`,
1178
- chainName: config.name,
1179
- rpcUrls: [config.rpcUrl],
1180
- blockExplorerUrls: config.blockExplorer ? [config.blockExplorer] : void 0,
1181
- nativeCurrency: {
1182
- name: "ETH",
1183
- symbol: "ETH",
1184
- decimals: 18
1185
- }
1186
- }
1187
- ]
1188
- });
1189
- } catch (error) {
1190
- const errorObj = error;
1191
- throw new NetworkError(
1192
- `Failed to add network: ${errorObj.message || "Unknown error"}`,
1193
- "NETWORK_ADD_FAILED",
1194
- error
1195
- );
1196
- }
1197
- }
1198
- async function autoCreateClients(chain, options = {}) {
1199
- const { privateKey, rpcUrl, preferBrowser = false } = options;
1200
- if (privateKey) {
1201
- return createClientsFromPrivateKey(chain, privateKey, rpcUrl);
1202
- }
1203
- if (isBrowser() && (preferBrowser || !privateKey)) {
1204
- return createClientsFromBrowser(chain, rpcUrl);
1205
- }
1206
- throw new WalletError(
1207
- "No wallet connection method available. Provide a private key for server-side usage or use in browser environment.",
1208
- "NO_CONNECTION_METHOD"
1209
- );
1210
- }
1211
-
1212
- // src/actions/get_current_user.ts
1213
- var CurrentUserSchema = import_zod4.z.object({
1214
- username: import_zod4.z.string(),
1215
- email: import_zod4.z.string(),
1216
- credits: import_zod4.z.number(),
1217
- granted_credits: import_zod4.z.number(),
1218
- avatar: import_zod4.z.string(),
1219
- team_name: import_zod4.z.string(),
1220
- team_tier: import_zod4.z.string()
1221
- }).passthrough();
1222
- async function getCurrentUser(client, parameters) {
1223
- validateActionParameters(parameters);
1224
- const response = await client.get("/auth/me");
1225
- if (parameters?.schema === false) {
1226
- return response;
1227
- }
1228
- const schema = parameters?.schema || CurrentUserSchema;
1229
- return schema.parse(response);
1230
- }
1231
- async function safeGetCurrentUser(client, parameters) {
1232
- const parameterValidationError = safeValidateActionParameters(parameters);
1233
- if (parameterValidationError) {
1234
- return parameterValidationError;
1235
- }
1236
- const httpResult = await client.safeGet("/auth/me");
1237
- if (!httpResult.success) {
1238
- return httpResult;
1239
- }
1240
- if (parameters?.schema === false) {
1241
- return { success: true, data: httpResult.data };
1242
- }
1243
- const schema = parameters?.schema || CurrentUserSchema;
1244
- return schema.safeParse(httpResult.data);
1245
- }
1246
-
1247
- // src/actions/get_available_nodes.ts
1248
- var import_zod5 = require("zod");
1249
- var AvailableOSImageSchema = import_zod5.z.object({
1250
- name: import_zod5.z.string(),
1251
- is_dev: import_zod5.z.boolean(),
1252
- version: import_zod5.z.union([
1253
- import_zod5.z.tuple([import_zod5.z.number(), import_zod5.z.number(), import_zod5.z.number()]),
1254
- import_zod5.z.tuple([import_zod5.z.number(), import_zod5.z.number(), import_zod5.z.number(), import_zod5.z.number()])
1255
- ]),
1256
- os_image_hash: import_zod5.z.string().nullable().optional()
1257
- }).passthrough();
1258
- var TeepodCapacitySchema = import_zod5.z.object({
1259
- teepod_id: import_zod5.z.number(),
1260
- name: import_zod5.z.string(),
1261
- listed: import_zod5.z.boolean(),
1262
- resource_score: import_zod5.z.number(),
1263
- remaining_vcpu: import_zod5.z.number(),
1264
- remaining_memory: import_zod5.z.number(),
1265
- remaining_cvm_slots: import_zod5.z.number(),
1266
- images: import_zod5.z.array(AvailableOSImageSchema),
1267
- support_onchain_kms: import_zod5.z.boolean().optional(),
1268
- fmspc: import_zod5.z.string().nullable().optional(),
1269
- device_id: import_zod5.z.string().nullable().optional(),
1270
- region_identifier: import_zod5.z.string().nullable().optional(),
1271
- default_kms: import_zod5.z.string().nullable().optional(),
1272
- kms_list: import_zod5.z.array(import_zod5.z.string()).default([])
1273
- }).passthrough();
1274
- var ResourceThresholdSchema = import_zod5.z.object({
1275
- max_instances: import_zod5.z.number().nullable().optional(),
1276
- max_vcpu: import_zod5.z.number().nullable().optional(),
1277
- max_memory: import_zod5.z.number().nullable().optional(),
1278
- max_disk: import_zod5.z.number().nullable().optional()
1279
- }).passthrough();
1280
- var AvailableNodesSchema = import_zod5.z.object({
1281
- tier: import_zod5.z.string(),
1282
- // TeamTier is string enum
1283
- capacity: ResourceThresholdSchema,
1284
- nodes: import_zod5.z.array(TeepodCapacitySchema),
1285
- kms_list: import_zod5.z.array(KmsInfoSchema)
1286
- }).passthrough();
1287
- async function getAvailableNodes(client, parameters) {
1288
- const response = await client.get("/teepods/available");
1289
- if (parameters?.schema === false) {
1290
- return response;
1291
- }
1292
- const schema = parameters?.schema || AvailableNodesSchema;
1293
- return schema.parse(response);
1294
- }
1295
- async function safeGetAvailableNodes(client, parameters) {
1296
- const httpResult = await client.safeGet("/teepods/available");
1297
- if (!httpResult.success) {
1298
- return httpResult;
1299
- }
1300
- if (parameters?.schema === false) {
1301
- return { success: true, data: httpResult.data };
1302
- }
1303
- const schema = parameters?.schema || AvailableNodesSchema;
1304
- return schema.safeParse(httpResult.data);
1305
- }
1306
-
1307
- // src/actions/provision_cvm.ts
1308
- var import_zod6 = require("zod");
1309
- var ProvisionCvmSchema = import_zod6.z.object({
1310
- app_id: import_zod6.z.string().nullable().optional(),
1311
- app_env_encrypt_pubkey: import_zod6.z.string().nullable().optional(),
1312
- compose_hash: import_zod6.z.string(),
1313
- fmspc: import_zod6.z.string().nullable().optional(),
1314
- device_id: import_zod6.z.string().nullable().optional(),
1315
- os_image_hash: import_zod6.z.string().nullable().optional(),
1316
- node_id: import_zod6.z.number().nullable().optional(),
1317
- // Transformed from teepod_id in response
1318
- kms_id: import_zod6.z.string().nullable().optional()
1319
- }).passthrough();
1320
- var ProvisionCvmRequestSchema = import_zod6.z.object({
1321
- node_id: import_zod6.z.number().optional(),
1322
- // recommended
1323
- teepod_id: import_zod6.z.number().optional(),
1324
- // deprecated, for compatibility
1325
- name: import_zod6.z.string(),
1326
- image: import_zod6.z.string(),
1327
- vcpu: import_zod6.z.number(),
1328
- memory: import_zod6.z.number(),
1329
- disk_size: import_zod6.z.number(),
1330
- compose_file: import_zod6.z.object({
1331
- allowed_envs: import_zod6.z.array(import_zod6.z.string()).optional(),
1332
- pre_launch_script: import_zod6.z.string().optional(),
1333
- docker_compose_file: import_zod6.z.string().optional(),
1334
- name: import_zod6.z.string().optional(),
1335
- kms_enabled: import_zod6.z.boolean().optional(),
1336
- public_logs: import_zod6.z.boolean().optional(),
1337
- public_sysinfo: import_zod6.z.boolean().optional(),
1338
- gateway_enabled: import_zod6.z.boolean().optional(),
1339
- // recommended
1340
- tproxy_enabled: import_zod6.z.boolean().optional()
1341
- // deprecated, for compatibility
1342
- }),
1343
- listed: import_zod6.z.boolean().optional(),
1344
- instance_type: import_zod6.z.string().nullable().optional(),
1345
- kms_id: import_zod6.z.string().optional(),
1346
- env_keys: import_zod6.z.array(import_zod6.z.string()).optional()
1347
- }).passthrough();
1348
- function autofillComposeFileName(appCompose) {
1349
- if (appCompose.compose_file && !appCompose.compose_file.name) {
1350
- return {
1351
- ...appCompose,
1352
- compose_file: {
1353
- ...appCompose.compose_file,
1354
- name: appCompose.name
1355
- }
1356
- };
1357
- }
1358
- return appCompose;
1359
- }
1360
- function handleGatewayCompatibility(appCompose) {
1361
- if (!appCompose.compose_file) {
1362
- return appCompose;
1363
- }
1364
- const composeFile = { ...appCompose.compose_file };
1365
- if (typeof composeFile.gateway_enabled === "boolean" && typeof composeFile.tproxy_enabled === "boolean") {
1366
- delete composeFile.tproxy_enabled;
1367
- } else if (typeof composeFile.tproxy_enabled === "boolean" && typeof composeFile.gateway_enabled === "undefined") {
1368
- composeFile.gateway_enabled = composeFile.tproxy_enabled;
1369
- delete composeFile.tproxy_enabled;
1370
- if (typeof window !== "undefined" ? window.console : globalThis.console) {
1371
- console.warn(
1372
- "[phala/cloud] tproxy_enabled is deprecated, please use gateway_enabled instead. See docs for migration."
1373
- );
1374
- }
1375
- }
1376
- return {
1377
- ...appCompose,
1378
- compose_file: composeFile
1379
- };
1380
- }
1381
- function transformResponse(data, isDefaultSchema) {
1382
- if (!isDefaultSchema || !data || typeof data !== "object") {
1383
- return data;
1384
- }
1385
- if (data && typeof data === "object" && "teepod_id" in data) {
1386
- const { teepod_id, ...rest } = data;
1387
- return { ...rest, node_id: teepod_id };
1388
- }
1389
- return data;
1390
- }
1391
- async function provisionCvm(client, appCompose, parameters) {
1392
- validateActionParameters(parameters);
1393
- const body = handleGatewayCompatibility(autofillComposeFileName(appCompose));
1394
- let requestBody = { ...body };
1395
- if (typeof body.node_id === "number") {
1396
- requestBody = { ...body, teepod_id: body.node_id };
1397
- delete requestBody.node_id;
1398
- } else if (typeof body.teepod_id === "number") {
1399
- console.warn("[phala/cloud] teepod_id is deprecated, please use node_id instead.");
1400
- }
1401
- const response = await client.post("/cvms/provision", requestBody);
1402
- const isDefaultSchema = parameters?.schema === void 0;
1403
- const transformedData = transformResponse(response, isDefaultSchema);
1404
- if (parameters?.schema === false) {
1405
- return transformedData;
1492
+ throw new WalletError(
1493
+ `Failed to connect browser wallet: ${error instanceof Error ? error.message : "Unknown error"}`,
1494
+ "BROWSER_CONNECTION_FAILED",
1495
+ error
1496
+ );
1406
1497
  }
1407
- const usedSchema = parameters?.schema || ProvisionCvmSchema;
1408
- return usedSchema.parse(transformedData);
1409
1498
  }
1410
- async function safeProvisionCvm(client, appCompose, parameters) {
1411
- const parameterValidationError = safeValidateActionParameters(parameters);
1412
- if (parameterValidationError) {
1413
- return parameterValidationError;
1414
- }
1415
- const schema = parameters?.schema;
1416
- const body = handleGatewayCompatibility(autofillComposeFileName(appCompose));
1417
- let requestBody = { ...body };
1418
- if (typeof body.node_id === "number") {
1419
- requestBody = { ...body, teepod_id: body.node_id };
1420
- delete requestBody.node_id;
1421
- } else if (typeof body.teepod_id === "number") {
1422
- console.warn("[phala/cloud] teepod_id is deprecated, please use node_id instead.");
1423
- }
1424
- const httpResult = await client.safePost("/cvms/provision", requestBody);
1425
- if (!httpResult.success) {
1426
- return httpResult;
1427
- }
1428
- if (schema === false) {
1429
- return { success: true, data: httpResult.data };
1499
+ async function switchToNetwork(provider, chainId) {
1500
+ try {
1501
+ await provider.request({
1502
+ method: "wallet_switchEthereumChain",
1503
+ params: [{ chainId: `0x${chainId.toString(16)}` }]
1504
+ });
1505
+ } catch (error) {
1506
+ const errorObj = error;
1507
+ if (errorObj.code === 4902) {
1508
+ throw new NetworkError(
1509
+ `Network ${chainId} not found in wallet. Please add it manually.`,
1510
+ "NETWORK_NOT_FOUND",
1511
+ error
1512
+ );
1513
+ }
1514
+ throw new NetworkError(
1515
+ `Failed to switch network: ${errorObj.message || "Unknown error"}`,
1516
+ "NETWORK_SWITCH_FAILED",
1517
+ error
1518
+ );
1430
1519
  }
1431
- const isDefaultSchema = !schema;
1432
- const usedSchema = schema || ProvisionCvmSchema;
1433
- const transformResult = usedSchema.safeParse(transformResponse(httpResult.data, isDefaultSchema));
1434
- return transformResult;
1435
1520
  }
1436
-
1437
- // src/actions/commit_cvm_provision.ts
1438
- var import_zod7 = require("zod");
1439
- var CommitCvmProvisionSchema = import_zod7.z.object({
1440
- id: import_zod7.z.number(),
1441
- name: import_zod7.z.string(),
1442
- status: import_zod7.z.string(),
1443
- teepod_id: import_zod7.z.number(),
1444
- teepod: import_zod7.z.object({
1445
- id: import_zod7.z.number(),
1446
- name: import_zod7.z.string()
1447
- }).nullable(),
1448
- user_id: import_zod7.z.number().nullable(),
1449
- app_id: import_zod7.z.string().nullable(),
1450
- vm_uuid: import_zod7.z.string().nullable(),
1451
- instance_id: import_zod7.z.string().nullable(),
1452
- app_url: import_zod7.z.string().nullable(),
1453
- base_image: import_zod7.z.string().nullable(),
1454
- vcpu: import_zod7.z.number(),
1455
- memory: import_zod7.z.number(),
1456
- disk_size: import_zod7.z.number(),
1457
- manifest_version: import_zod7.z.number().nullable(),
1458
- version: import_zod7.z.string().nullable(),
1459
- runner: import_zod7.z.string().nullable(),
1460
- docker_compose_file: import_zod7.z.string().nullable(),
1461
- features: import_zod7.z.array(import_zod7.z.string()).nullable(),
1462
- created_at: import_zod7.z.string(),
1463
- encrypted_env_pubkey: import_zod7.z.string().nullable().optional(),
1464
- app_auth_contract_address: import_zod7.z.string().nullable().optional(),
1465
- deployer_address: import_zod7.z.string().nullable().optional()
1466
- }).passthrough();
1467
- var CommitCvmProvisionRequestSchema = import_zod7.z.object({
1468
- encrypted_env: import_zod7.z.string().optional().nullable(),
1469
- app_id: import_zod7.z.string(),
1470
- compose_hash: import_zod7.z.string().optional(),
1471
- kms_id: import_zod7.z.string().optional(),
1472
- contract_address: import_zod7.z.string().optional(),
1473
- deployer_address: import_zod7.z.string().optional(),
1474
- env_keys: import_zod7.z.array(import_zod7.z.string()).optional().nullable()
1475
- }).passthrough();
1476
- async function commitCvmProvision(client, payload, parameters) {
1477
- validateActionParameters(parameters);
1478
- const response = await client.post("/cvms", payload);
1479
- if (parameters?.schema === false) {
1480
- return response;
1521
+ async function addNetwork(provider, config) {
1522
+ try {
1523
+ await provider.request({
1524
+ method: "wallet_addEthereumChain",
1525
+ params: [
1526
+ {
1527
+ chainId: `0x${config.chainId.toString(16)}`,
1528
+ chainName: config.name,
1529
+ rpcUrls: [config.rpcUrl],
1530
+ blockExplorerUrls: config.blockExplorer ? [config.blockExplorer] : void 0,
1531
+ nativeCurrency: {
1532
+ name: "ETH",
1533
+ symbol: "ETH",
1534
+ decimals: 18
1535
+ }
1536
+ }
1537
+ ]
1538
+ });
1539
+ } catch (error) {
1540
+ const errorObj = error;
1541
+ throw new NetworkError(
1542
+ `Failed to add network: ${errorObj.message || "Unknown error"}`,
1543
+ "NETWORK_ADD_FAILED",
1544
+ error
1545
+ );
1481
1546
  }
1482
- const schema = parameters?.schema || CommitCvmProvisionSchema;
1483
- return schema.parse(response);
1484
1547
  }
1485
- async function safeCommitCvmProvision(client, payload, parameters) {
1486
- const parameterValidationError = safeValidateActionParameters(parameters);
1487
- if (parameterValidationError) {
1488
- return parameterValidationError;
1489
- }
1490
- const httpResult = await client.safePost("/cvms", payload);
1491
- if (!httpResult.success) {
1492
- return httpResult;
1548
+ async function autoCreateClients(chain, options = {}) {
1549
+ const { privateKey, rpcUrl, preferBrowser = false } = options;
1550
+ if (privateKey) {
1551
+ return createClientsFromPrivateKey(chain, privateKey, rpcUrl);
1493
1552
  }
1494
- if (parameters?.schema === false) {
1495
- return { success: true, data: httpResult.data };
1553
+ if (isBrowser() && (preferBrowser || !privateKey)) {
1554
+ return createClientsFromBrowser(chain, rpcUrl);
1496
1555
  }
1497
- const schema = parameters?.schema || CommitCvmProvisionSchema;
1498
- const validationResult = schema.safeParse(httpResult.data);
1499
- return validationResult;
1556
+ throw new WalletError(
1557
+ "No wallet connection method available. Provide a private key for server-side usage or use in browser environment.",
1558
+ "NO_CONNECTION_METHOD"
1559
+ );
1500
1560
  }
1501
1561
 
1502
- // src/actions/deploy_app_auth.ts
1503
- var import_zod8 = require("zod");
1504
- var import_viem3 = require("viem");
1505
- var import_accounts2 = require("viem/accounts");
1562
+ // src/actions/blockchains/deploy_app_auth.ts
1506
1563
  var kmsAuthAbi = [
1507
1564
  {
1508
1565
  inputs: [
@@ -1830,7 +1887,7 @@ async function safeDeployAppAuth(request, parameters) {
1830
1887
  }
1831
1888
  }
1832
1889
 
1833
- // src/actions/add_compose_hash.ts
1890
+ // src/actions/blockchains/add_compose_hash.ts
1834
1891
  var import_zod9 = require("zod");
1835
1892
  var import_viem4 = require("viem");
1836
1893
  var import_accounts3 = require("viem/accounts");
@@ -2091,7 +2148,7 @@ async function safeAddComposeHash(request, parameters) {
2091
2148
  }
2092
2149
  }
2093
2150
 
2094
- // src/actions/get_cvm_compose_file.ts
2151
+ // src/actions/cvms/get_cvm_compose_file.ts
2095
2152
  var import_zod11 = require("zod");
2096
2153
 
2097
2154
  // src/types/app_compose.ts
@@ -2109,7 +2166,7 @@ var LooseAppComposeSchema = import_zod10.z.object({
2109
2166
  pre_launch_script: import_zod10.z.string().optional()
2110
2167
  }).passthrough();
2111
2168
 
2112
- // src/actions/get_cvm_compose_file.ts
2169
+ // src/actions/cvms/get_cvm_compose_file.ts
2113
2170
  var GetCvmComposeFileRequestSchema = import_zod11.z.object({
2114
2171
  id: import_zod11.z.string().optional(),
2115
2172
  uuid: import_zod11.z.string().regex(/^[0-9a-f]{8}[-]?[0-9a-f]{4}[-]?4[0-9a-f]{3}[-]?[89ab][0-9a-f]{3}[-]?[0-9a-f]{12}$/i).optional(),
@@ -2128,32 +2185,12 @@ var GetCvmComposeFileRequestSchema = import_zod11.z.object({
2128
2185
  cvmId: data.id || data.uuid || data.app_id || data.instance_id,
2129
2186
  _raw: data
2130
2187
  }));
2131
- async function getCvmComposeFile(client, request, parameters) {
2188
+ var { action: getCvmComposeFile, safeAction: safeGetCvmComposeFile } = defineAction(LooseAppComposeSchema, async (client, request) => {
2132
2189
  const validatedRequest = GetCvmComposeFileRequestSchema.parse(request);
2133
- const response = await client.get(`/cvms/${validatedRequest.cvmId}/compose_file`);
2134
- if (parameters?.schema === false) {
2135
- return response;
2136
- }
2137
- const schema = parameters?.schema || LooseAppComposeSchema;
2138
- return schema.parse(response);
2139
- }
2140
- async function safeGetCvmComposeFile(client, request, parameters) {
2141
- const requestValidation = GetCvmComposeFileRequestSchema.safeParse(request);
2142
- if (!requestValidation.success) {
2143
- return requestValidation;
2144
- }
2145
- const httpResult = await client.safeGet(`/cvms/${requestValidation.data.cvmId}/compose_file`);
2146
- if (!httpResult.success) {
2147
- return httpResult;
2148
- }
2149
- if (parameters?.schema === false) {
2150
- return { success: true, data: httpResult.data };
2151
- }
2152
- const schema = parameters?.schema || LooseAppComposeSchema;
2153
- return schema.safeParse(httpResult.data);
2154
- }
2190
+ return await client.get(`/cvms/${validatedRequest.cvmId}/compose_file`);
2191
+ });
2155
2192
 
2156
- // src/actions/provision_cvm_compose_file_update.ts
2193
+ // src/actions/cvms/provision_cvm_compose_file_update.ts
2157
2194
  var import_zod12 = require("zod");
2158
2195
  var ProvisionCvmComposeFileUpdateRequestSchema = import_zod12.z.object({
2159
2196
  id: import_zod12.z.string().optional(),
@@ -2183,38 +2220,15 @@ var ProvisionCvmComposeFileUpdateResultSchema = import_zod12.z.object({
2183
2220
  compose_hash: import_zod12.z.string(),
2184
2221
  kms_info: KmsInfoSchema.nullable().optional()
2185
2222
  }).passthrough();
2186
- async function provisionCvmComposeFileUpdate(client, request, parameters) {
2223
+ var { action: provisionCvmComposeFileUpdate, safeAction: safeProvisionCvmComposeFileUpdate } = defineAction(ProvisionCvmComposeFileUpdateResultSchema, async (client, request) => {
2187
2224
  const validatedRequest = ProvisionCvmComposeFileUpdateRequestSchema.parse(request);
2188
- const response = await client.post(
2225
+ return await client.post(
2189
2226
  `/cvms/${validatedRequest.cvmId}/compose_file/provision`,
2190
2227
  validatedRequest.request
2191
2228
  );
2192
- if (parameters?.schema === false) {
2193
- return response;
2194
- }
2195
- const schema = parameters?.schema || ProvisionCvmComposeFileUpdateResultSchema;
2196
- return schema.parse(response);
2197
- }
2198
- async function safeProvisionCvmComposeFileUpdate(client, request, parameters) {
2199
- const requestValidation = ProvisionCvmComposeFileUpdateRequestSchema.safeParse(request);
2200
- if (!requestValidation.success) {
2201
- return requestValidation;
2202
- }
2203
- const httpResult = await client.safePost(
2204
- `/cvms/${requestValidation.data.cvmId}/compose_file/provision`,
2205
- requestValidation.data.request
2206
- );
2207
- if (!httpResult.success) {
2208
- return httpResult;
2209
- }
2210
- if (parameters?.schema === false) {
2211
- return { success: true, data: httpResult.data };
2212
- }
2213
- const schema = parameters?.schema || ProvisionCvmComposeFileUpdateResultSchema;
2214
- return schema.safeParse(httpResult.data);
2215
- }
2229
+ });
2216
2230
 
2217
- // src/actions/commit_cvm_compose_file_update.ts
2231
+ // src/actions/cvms/commit_cvm_compose_file_update.ts
2218
2232
  var import_zod13 = require("zod");
2219
2233
  var CommitCvmComposeFileUpdateRequestSchema = import_zod13.z.object({
2220
2234
  id: import_zod13.z.string().optional(),
@@ -2243,40 +2257,19 @@ var CommitCvmComposeFileUpdateRequestSchema = import_zod13.z.object({
2243
2257
  _raw: data
2244
2258
  }));
2245
2259
  var CommitCvmComposeFileUpdateSchema = import_zod13.z.any().transform(() => void 0);
2246
- async function commitCvmComposeFileUpdate(client, request, parameters) {
2247
- const validatedRequest = CommitCvmComposeFileUpdateRequestSchema.parse(request);
2248
- const response = await client.patch(`/cvms/${validatedRequest.cvmId}/compose_file`, {
2249
- compose_hash: validatedRequest.compose_hash,
2250
- encrypted_env: validatedRequest.encrypted_env,
2251
- env_keys: validatedRequest.env_keys
2252
- });
2253
- if (parameters?.schema === false) {
2254
- return response;
2255
- }
2256
- const schema = parameters?.schema || CommitCvmComposeFileUpdateSchema;
2257
- return schema.parse(response);
2258
- }
2259
- async function safeCommitCvmComposeFileUpdate(client, request, parameters) {
2260
- const requestValidation = CommitCvmComposeFileUpdateRequestSchema.safeParse(request);
2261
- if (!requestValidation.success) {
2262
- return requestValidation;
2263
- }
2264
- const httpResult = await client.safePatch(`/cvms/${requestValidation.data.cvmId}/compose_file`, {
2265
- compose_hash: requestValidation.data.compose_hash,
2266
- encrypted_env: requestValidation.data.encrypted_env,
2267
- env_keys: requestValidation.data.env_keys
2268
- });
2269
- if (!httpResult.success) {
2270
- return httpResult;
2271
- }
2272
- if (parameters?.schema === false) {
2273
- return { success: true, data: httpResult.data };
2260
+ var { action: commitCvmComposeFileUpdate, safeAction: safeCommitCvmComposeFileUpdate } = defineAction(
2261
+ CommitCvmComposeFileUpdateSchema,
2262
+ async (client, request) => {
2263
+ const validatedRequest = CommitCvmComposeFileUpdateRequestSchema.parse(request);
2264
+ return await client.patch(`/cvms/${validatedRequest.cvmId}/compose_file`, {
2265
+ compose_hash: validatedRequest.compose_hash,
2266
+ encrypted_env: validatedRequest.encrypted_env,
2267
+ env_keys: validatedRequest.env_keys
2268
+ });
2274
2269
  }
2275
- const schema = parameters?.schema || CommitCvmComposeFileUpdateSchema;
2276
- return schema.safeParse(httpResult.data);
2277
- }
2270
+ );
2278
2271
 
2279
- // src/actions/get_app_env_encrypt_pubkey.ts
2272
+ // src/actions/kms/get_app_env_encrypt_pubkey.ts
2280
2273
  var import_zod14 = require("zod");
2281
2274
  var GetAppEnvEncryptPubKeyRequestSchema = import_zod14.z.object({
2282
2275
  kms: import_zod14.z.string().min(1, "KMS ID or slug is required"),
@@ -2289,41 +2282,12 @@ var GetAppEnvEncryptPubKeySchema = import_zod14.z.object({
2289
2282
  public_key: import_zod14.z.string(),
2290
2283
  signature: import_zod14.z.string()
2291
2284
  }).strict();
2292
- var getAppEnvEncryptPubKey = async (client, payload, parameters) => {
2285
+ var { action: getAppEnvEncryptPubKey, safeAction: safeGetAppEnvEncryptPubKey } = defineAction(GetAppEnvEncryptPubKeySchema, async (client, payload) => {
2293
2286
  const validatedRequest = GetAppEnvEncryptPubKeyRequestSchema.parse(payload);
2294
- validateActionParameters(parameters);
2295
- const response = await client.get(
2296
- `/kms/${validatedRequest.kms}/pubkey/${validatedRequest.app_id}`
2297
- );
2298
- if (parameters?.schema === false) {
2299
- return response;
2300
- }
2301
- const schema = parameters?.schema || GetAppEnvEncryptPubKeySchema;
2302
- return schema.parse(response);
2303
- };
2304
- var safeGetAppEnvEncryptPubKey = async (client, payload, parameters) => {
2305
- const requestValidation = GetAppEnvEncryptPubKeyRequestSchema.safeParse(payload);
2306
- if (!requestValidation.success) {
2307
- return requestValidation;
2308
- }
2309
- const parameterValidationError = safeValidateActionParameters(parameters);
2310
- if (parameterValidationError) {
2311
- return parameterValidationError;
2312
- }
2313
- const httpResult = await client.safeGet(
2314
- `/kms/${requestValidation.data.kms}/pubkey/${requestValidation.data.app_id}`
2315
- );
2316
- if (!httpResult.success) {
2317
- return httpResult;
2318
- }
2319
- if (parameters?.schema === false) {
2320
- return { success: true, data: httpResult.data };
2321
- }
2322
- const schema = parameters?.schema || GetAppEnvEncryptPubKeySchema;
2323
- return schema.safeParse(httpResult.data);
2324
- };
2287
+ return await client.get(`/kms/${validatedRequest.kms}/pubkey/${validatedRequest.app_id}`);
2288
+ });
2325
2289
 
2326
- // src/actions/get_cvm_info.ts
2290
+ // src/actions/cvms/get_cvm_info.ts
2327
2291
  var import_zod15 = require("zod");
2328
2292
  var GetCvmInfoRequestSchema = import_zod15.z.object({
2329
2293
  id: import_zod15.z.string().optional(),
@@ -2343,41 +2307,12 @@ var GetCvmInfoRequestSchema = import_zod15.z.object({
2343
2307
  cvmId: data.id || data.uuid || data.app_id || data.instance_id,
2344
2308
  _raw: data
2345
2309
  }));
2346
- async function getCvmInfo(client, request, parameters) {
2310
+ var { action: getCvmInfo, safeAction: safeGetCvmInfo } = defineAction(CvmLegacyDetailSchema, async (client, request) => {
2347
2311
  const validatedRequest = GetCvmInfoRequestSchema.parse(request);
2348
- validateActionParameters(parameters);
2349
- const response = await client.get(`/cvms/${validatedRequest.cvmId}`);
2350
- if (parameters?.schema === false) {
2351
- return response;
2352
- }
2353
- const schema = parameters?.schema || CvmLegacyDetailSchema;
2354
- return schema.parse(response);
2355
- }
2356
- async function safeGetCvmInfo(client, request, parameters) {
2357
- const requestValidation = GetCvmInfoRequestSchema.safeParse(request);
2358
- if (!requestValidation.success) {
2359
- return requestValidation;
2360
- }
2361
- const parameterValidationError = safeValidateActionParameters(parameters);
2362
- if (parameterValidationError) {
2363
- return parameterValidationError;
2364
- }
2365
- const httpResult = await client.safeGet(`/cvms/${requestValidation.data.cvmId}`);
2366
- if (!httpResult.success) {
2367
- return httpResult;
2368
- }
2369
- if (parameters?.schema === false) {
2370
- return {
2371
- success: true,
2372
- data: httpResult.data
2373
- };
2374
- }
2375
- const schema = parameters?.schema || CvmLegacyDetailSchema;
2376
- const validationResult = schema.safeParse(httpResult.data);
2377
- return validationResult;
2378
- }
2312
+ return await client.get(`/cvms/${validatedRequest.cvmId}`);
2313
+ });
2379
2314
 
2380
- // src/actions/get_cvm_list.ts
2315
+ // src/actions/cvms/get_cvm_list.ts
2381
2316
  var import_zod16 = require("zod");
2382
2317
  var GetCvmListRequestSchema = import_zod16.z.object({
2383
2318
  page: import_zod16.z.number().int().min(1).optional(),
@@ -2391,77 +2326,22 @@ var GetCvmListSchema = import_zod16.z.object({
2391
2326
  page_size: import_zod16.z.number(),
2392
2327
  pages: import_zod16.z.number()
2393
2328
  }).strict();
2394
- async function getCvmList(client, request, parameters) {
2329
+ var { action: getCvmList, safeAction: safeGetCvmList } = defineAction(GetCvmListSchema, async (client, request) => {
2395
2330
  const validatedRequest = GetCvmListRequestSchema.parse(request ?? {});
2396
- validateActionParameters(parameters);
2397
- const response = await client.get("/cvms/paginated", { params: validatedRequest });
2398
- if (parameters?.schema === false) {
2399
- return response;
2400
- }
2401
- const schema = parameters?.schema || GetCvmListSchema;
2402
- return schema.parse(response);
2403
- }
2404
- async function safeGetCvmList(client, request, parameters) {
2405
- const requestValidation = GetCvmListRequestSchema.safeParse(request ?? {});
2406
- if (!requestValidation.success) {
2407
- return requestValidation;
2408
- }
2409
- const parameterValidationError = safeValidateActionParameters(parameters);
2410
- if (parameterValidationError) {
2411
- return parameterValidationError;
2412
- }
2413
- const httpResult = await client.safeGet("/cvms/paginated", { params: requestValidation.data });
2414
- if (!httpResult.success) {
2415
- return httpResult;
2416
- }
2417
- if (parameters?.schema === false) {
2418
- return {
2419
- success: true,
2420
- data: httpResult.data
2421
- };
2422
- }
2423
- const schema = parameters?.schema || GetCvmListSchema;
2424
- const validationResult = schema.safeParse(httpResult.data);
2425
- return validationResult;
2426
- }
2331
+ return await client.get("/cvms/paginated", { params: validatedRequest });
2332
+ });
2427
2333
 
2428
- // src/actions/get_kms_info.ts
2334
+ // src/actions/kms/get_kms_info.ts
2429
2335
  var import_zod17 = require("zod");
2430
2336
  var GetKmsInfoRequestSchema = import_zod17.z.object({
2431
2337
  kms_id: import_zod17.z.string().min(1, "KMS ID is required")
2432
2338
  });
2433
- async function getKmsInfo(client, request, parameters) {
2339
+ var { action: getKmsInfo, safeAction: safeGetKmsInfo } = defineAction(KmsInfoSchema, async (client, request) => {
2434
2340
  const validatedRequest = GetKmsInfoRequestSchema.parse(request);
2435
- validateActionParameters(parameters);
2436
- const response = await client.get(`/kms/${validatedRequest.kms_id}`);
2437
- if (parameters?.schema === false) {
2438
- return response;
2439
- }
2440
- const schema = parameters?.schema || KmsInfoSchema;
2441
- return schema.parse(response);
2442
- }
2443
- async function safeGetKmsInfo(client, request, parameters) {
2444
- const requestValidation = GetKmsInfoRequestSchema.safeParse(request);
2445
- if (!requestValidation.success) {
2446
- return requestValidation;
2447
- }
2448
- const parameterValidationError = safeValidateActionParameters(parameters);
2449
- if (parameterValidationError) {
2450
- return parameterValidationError;
2451
- }
2452
- const httpResult = await client.safeGet(`/kms/${requestValidation.data.kms_id}`);
2453
- if (!httpResult.success) {
2454
- return httpResult;
2455
- }
2456
- if (parameters?.schema === false) {
2457
- return { success: true, data: httpResult.data };
2458
- }
2459
- const schema = parameters?.schema || KmsInfoSchema;
2460
- const validationResult = schema.safeParse(httpResult.data);
2461
- return validationResult;
2462
- }
2341
+ return await client.get(`/kms/${validatedRequest.kms_id}`);
2342
+ });
2463
2343
 
2464
- // src/actions/get_kms_list.ts
2344
+ // src/actions/kms/get_kms_list.ts
2465
2345
  var import_zod18 = require("zod");
2466
2346
  var GetKmsListRequestSchema = import_zod18.z.object({
2467
2347
  page: import_zod18.z.number().int().min(1).optional(),
@@ -2475,39 +2355,10 @@ var GetKmsListSchema = import_zod18.z.object({
2475
2355
  page_size: import_zod18.z.number(),
2476
2356
  pages: import_zod18.z.number()
2477
2357
  }).strict();
2478
- async function getKmsList(client, request, parameters) {
2358
+ var { action: getKmsList, safeAction: safeGetKmsList } = defineAction(GetKmsListSchema, async (client, request) => {
2479
2359
  const validatedRequest = GetKmsListRequestSchema.parse(request ?? {});
2480
- validateActionParameters(parameters);
2481
- const response = await client.get("/kms", { params: validatedRequest });
2482
- if (parameters?.schema === false) {
2483
- return response;
2484
- }
2485
- const schema = parameters?.schema || GetKmsListSchema;
2486
- return schema.parse(response);
2487
- }
2488
- async function safeGetKmsList(client, request, parameters) {
2489
- const requestValidation = GetKmsListRequestSchema.safeParse(request ?? {});
2490
- if (!requestValidation.success) {
2491
- return requestValidation;
2492
- }
2493
- const parameterValidationError = safeValidateActionParameters(parameters);
2494
- if (parameterValidationError) {
2495
- return parameterValidationError;
2496
- }
2497
- const httpResult = await client.safeGet("/kms", { params: requestValidation.data });
2498
- if (!httpResult.success) {
2499
- return httpResult;
2500
- }
2501
- if (parameters?.schema === false) {
2502
- return {
2503
- success: true,
2504
- data: httpResult.data
2505
- };
2506
- }
2507
- const schema = parameters?.schema || GetKmsListSchema;
2508
- const validationResult = schema.safeParse(httpResult.data);
2509
- return validationResult;
2510
- }
2360
+ return await client.get("/kms", { params: validatedRequest });
2361
+ });
2511
2362
 
2512
2363
  // src/actions/workspaces/list_workspaces.ts
2513
2364
  var import_zod19 = require("zod");
@@ -2528,64 +2379,18 @@ var ListWorkspacesSchema = import_zod19.z.object({
2528
2379
  data: import_zod19.z.array(WorkspaceResponseSchema),
2529
2380
  pagination: PaginationMetadataSchema
2530
2381
  }).passthrough();
2531
- async function listWorkspaces(client, parameters) {
2532
- validateActionParameters(parameters);
2533
- const queryParams = new URLSearchParams();
2534
- if (parameters?.cursor) queryParams.append("cursor", parameters.cursor);
2535
- if (parameters?.limit) queryParams.append("limit", parameters.limit.toString());
2536
- const url = queryParams.toString() ? `/workspaces?${queryParams.toString()}` : "/workspaces";
2537
- const response = await client.get(url);
2538
- if (parameters?.schema === false) {
2539
- return response;
2540
- }
2541
- const schema = parameters?.schema || ListWorkspacesSchema;
2542
- return schema.parse(response);
2543
- }
2544
- async function safeListWorkspaces(client, parameters) {
2545
- const parameterValidationError = safeValidateActionParameters(parameters);
2546
- if (parameterValidationError) {
2547
- return parameterValidationError;
2548
- }
2382
+ var { action: listWorkspaces, safeAction: safeListWorkspaces } = defineAction(ListWorkspacesSchema, async (client, request) => {
2549
2383
  const queryParams = new URLSearchParams();
2550
- if (parameters?.cursor) queryParams.append("cursor", parameters.cursor);
2551
- if (parameters?.limit) queryParams.append("limit", parameters.limit.toString());
2384
+ if (request?.cursor) queryParams.append("cursor", request.cursor);
2385
+ if (request?.limit) queryParams.append("limit", request.limit.toString());
2552
2386
  const url = queryParams.toString() ? `/workspaces?${queryParams.toString()}` : "/workspaces";
2553
- const httpResult = await client.safeGet(url);
2554
- if (!httpResult.success) {
2555
- return httpResult;
2556
- }
2557
- if (parameters?.schema === false) {
2558
- return { success: true, data: httpResult.data };
2559
- }
2560
- const schema = parameters?.schema || ListWorkspacesSchema;
2561
- return schema.safeParse(httpResult.data);
2562
- }
2387
+ return await client.get(url);
2388
+ });
2563
2389
 
2564
2390
  // src/actions/workspaces/get_workspace.ts
2565
- async function getWorkspace(client, teamSlug, parameters) {
2566
- validateActionParameters(parameters);
2567
- const response = await client.get(`/workspaces/${teamSlug}`);
2568
- if (parameters?.schema === false) {
2569
- return response;
2570
- }
2571
- const schema = parameters?.schema || WorkspaceResponseSchema;
2572
- return schema.parse(response);
2573
- }
2574
- async function safeGetWorkspace(client, teamSlug, parameters) {
2575
- const parameterValidationError = safeValidateActionParameters(parameters);
2576
- if (parameterValidationError) {
2577
- return parameterValidationError;
2578
- }
2579
- const httpResult = await client.safeGet(`/workspaces/${teamSlug}`);
2580
- if (!httpResult.success) {
2581
- return httpResult;
2582
- }
2583
- if (parameters?.schema === false) {
2584
- return { success: true, data: httpResult.data };
2585
- }
2586
- const schema = parameters?.schema || WorkspaceResponseSchema;
2587
- return schema.safeParse(httpResult.data);
2588
- }
2391
+ var { action: getWorkspace, safeAction: safeGetWorkspace } = defineAction(WorkspaceResponseSchema, async (client, teamSlug) => {
2392
+ return await client.get(`/workspaces/${teamSlug}`);
2393
+ });
2589
2394
 
2590
2395
  // src/actions/list-instance-types.ts
2591
2396
  var import_zod20 = require("zod");
@@ -2611,45 +2416,13 @@ var PaginatedInstanceTypesSchema = import_zod20.z.object({
2611
2416
  page_size: import_zod20.z.number(),
2612
2417
  pages: import_zod20.z.number()
2613
2418
  }).strict();
2614
- async function listInstanceTypes(client, request, parameters) {
2419
+ var { action: listInstanceTypes, safeAction: safeListInstanceTypes } = defineAction(PaginatedInstanceTypesSchema, async (client, request) => {
2615
2420
  const validatedRequest = ListInstanceTypesRequestSchema.parse(request ?? {});
2616
- validateActionParameters(parameters);
2617
2421
  const queryParams = new URLSearchParams();
2618
2422
  queryParams.append("page", validatedRequest.page.toString());
2619
2423
  queryParams.append("page_size", validatedRequest.page_size.toString());
2620
- const response = await client.get(`/api/instance-types?${queryParams.toString()}`);
2621
- if (parameters?.schema === false) {
2622
- return response;
2623
- }
2624
- const schema = parameters?.schema || PaginatedInstanceTypesSchema;
2625
- return schema.parse(response);
2626
- }
2627
- async function safeListInstanceTypes(client, request, parameters) {
2628
- const requestValidation = ListInstanceTypesRequestSchema.safeParse(request ?? {});
2629
- if (!requestValidation.success) {
2630
- return requestValidation;
2631
- }
2632
- const parameterValidationError = safeValidateActionParameters(parameters);
2633
- if (parameterValidationError) {
2634
- return parameterValidationError;
2635
- }
2636
- const queryParams = new URLSearchParams();
2637
- queryParams.append("page", requestValidation.data.page.toString());
2638
- queryParams.append("page_size", requestValidation.data.page_size.toString());
2639
- const httpResult = await client.safeGet(`/api/instance-types?${queryParams.toString()}`);
2640
- if (!httpResult.success) {
2641
- return httpResult;
2642
- }
2643
- if (parameters?.schema === false) {
2644
- return {
2645
- success: true,
2646
- data: httpResult.data
2647
- };
2648
- }
2649
- const schema = parameters?.schema || PaginatedInstanceTypesSchema;
2650
- const validationResult = schema.safeParse(httpResult.data);
2651
- return validationResult;
2652
- }
2424
+ return await client.get(`/api/instance-types?${queryParams.toString()}`);
2425
+ });
2653
2426
 
2654
2427
  // src/parse_dotenv.ts
2655
2428
  var LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/gm;
@@ -2702,11 +2475,18 @@ var import_verify_env_encrypt_public_key = require("@phala/dstack-sdk/verify-env
2702
2475
  CvmNodeSchema,
2703
2476
  DeployAppAuthRequestSchema,
2704
2477
  DeployAppAuthSchema,
2478
+ GetAppEnvEncryptPubKeyRequestSchema,
2705
2479
  GetAppEnvEncryptPubKeySchema,
2480
+ GetCvmComposeFileRequestSchema,
2481
+ GetCvmInfoRequestSchema,
2482
+ GetCvmListRequestSchema,
2706
2483
  GetCvmListSchema,
2484
+ GetKmsInfoRequestSchema,
2485
+ GetKmsListRequestSchema,
2707
2486
  GetKmsListSchema,
2708
2487
  InstanceTypeSchema,
2709
2488
  KmsInfoSchema,
2489
+ ListInstanceTypesRequestSchema,
2710
2490
  ListWorkspacesSchema,
2711
2491
  ManagedUserSchema,
2712
2492
  NetworkError,
@@ -2735,6 +2515,8 @@ var import_verify_env_encrypt_public_key = require("@phala/dstack-sdk/verify-env
2735
2515
  createClientsFromPrivateKey,
2736
2516
  createNetworkClients,
2737
2517
  createTransactionTracker,
2518
+ defineAction,
2519
+ defineSimpleAction,
2738
2520
  deployAppAuth,
2739
2521
  encryptEnvVars,
2740
2522
  estimateTransactionGas,