permaweb-deploy 2.5.0 → 3.0.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.
Files changed (79) hide show
  1. package/README.md +311 -83
  2. package/bin/dev.js +5 -0
  3. package/bin/run.js +5 -0
  4. package/dist/commands/deploy.js +227 -0
  5. package/dist/commands/deploy.js.map +1 -0
  6. package/dist/constants/flags.js +190 -0
  7. package/dist/constants/flags.js.map +1 -0
  8. package/dist/index.js +2 -299
  9. package/dist/index.js.map +1 -0
  10. package/dist/prompts/arns.js +89 -0
  11. package/dist/prompts/arns.js.map +1 -0
  12. package/dist/prompts/deployment.js +27 -0
  13. package/dist/prompts/deployment.js.map +1 -0
  14. package/dist/prompts/wallet.js +51 -0
  15. package/dist/prompts/wallet.js.map +1 -0
  16. package/dist/src/commands/deploy.d.ts +9 -0
  17. package/dist/src/commands/deploy.d.ts.map +1 -0
  18. package/dist/src/constants/flags.d.ts +84 -0
  19. package/dist/src/constants/flags.d.ts.map +1 -0
  20. package/dist/src/index.d.ts +2 -0
  21. package/dist/src/index.d.ts.map +1 -0
  22. package/dist/src/prompts/arns.d.ts +13 -0
  23. package/dist/src/prompts/arns.d.ts.map +1 -0
  24. package/dist/src/prompts/deployment.d.ts +6 -0
  25. package/dist/src/prompts/deployment.d.ts.map +1 -0
  26. package/dist/src/prompts/wallet.d.ts +11 -0
  27. package/dist/src/prompts/wallet.d.ts.map +1 -0
  28. package/dist/src/types/index.d.ts +31 -0
  29. package/dist/src/types/index.d.ts.map +1 -0
  30. package/dist/src/utils/__tests__/constants.test.d.ts +2 -0
  31. package/dist/src/utils/__tests__/constants.test.d.ts.map +1 -0
  32. package/dist/src/utils/config-resolver.d.ts +72 -0
  33. package/dist/src/utils/config-resolver.d.ts.map +1 -0
  34. package/dist/src/utils/constants.d.ts +4 -0
  35. package/dist/src/utils/constants.d.ts.map +1 -0
  36. package/dist/src/utils/path.d.ts +5 -0
  37. package/dist/src/utils/path.d.ts.map +1 -0
  38. package/dist/src/utils/signer.d.ts +17 -0
  39. package/dist/src/utils/signer.d.ts.map +1 -0
  40. package/dist/src/utils/uploader.d.ts +8 -0
  41. package/dist/src/utils/uploader.d.ts.map +1 -0
  42. package/dist/src/utils/validators.d.ts +29 -0
  43. package/dist/src/utils/validators.d.ts.map +1 -0
  44. package/dist/tests/constants.d.ts +11 -0
  45. package/dist/tests/constants.d.ts.map +1 -0
  46. package/dist/tests/e2e/deploy-command.test.d.ts +2 -0
  47. package/dist/tests/e2e/deploy-command.test.d.ts.map +1 -0
  48. package/dist/tests/global-setup.d.ts +6 -0
  49. package/dist/tests/global-setup.d.ts.map +1 -0
  50. package/dist/tests/mocks/turbo-handlers.d.ts +105 -0
  51. package/dist/tests/mocks/turbo-handlers.d.ts.map +1 -0
  52. package/dist/tests/setup.d.ts +11 -0
  53. package/dist/tests/setup.d.ts.map +1 -0
  54. package/dist/tests/types/payment-service.d.ts +218 -0
  55. package/dist/tests/types/payment-service.d.ts.map +1 -0
  56. package/dist/tests/types/upload-service.d.ts +168 -0
  57. package/dist/tests/types/upload-service.d.ts.map +1 -0
  58. package/dist/tests/unit/validators.test.d.ts +2 -0
  59. package/dist/tests/unit/validators.test.d.ts.map +1 -0
  60. package/dist/types/index.js +2 -0
  61. package/dist/types/index.js.map +1 -0
  62. package/dist/utils/config-resolver.js +39 -0
  63. package/dist/utils/config-resolver.js.map +1 -0
  64. package/dist/utils/constants.js +6 -0
  65. package/dist/utils/constants.js.map +1 -0
  66. package/dist/utils/path.js +15 -0
  67. package/dist/utils/path.js.map +1 -0
  68. package/dist/utils/signer.js +40 -0
  69. package/dist/utils/signer.js.map +1 -0
  70. package/dist/utils/uploader.js +78 -0
  71. package/dist/utils/uploader.js.map +1 -0
  72. package/dist/utils/validators.js +62 -0
  73. package/dist/utils/validators.js.map +1 -0
  74. package/package.json +107 -37
  75. package/.babelrc +0 -3
  76. package/.editorconfig +0 -4
  77. package/.eslintrc.js +0 -35
  78. package/dist/turbo/index.js +0 -234
  79. package/src/index.js +0 -287
@@ -0,0 +1,11 @@
1
+ export interface WalletConfig {
2
+ method: 'env' | 'file' | 'string';
3
+ privateKey?: string;
4
+ wallet?: string;
5
+ }
6
+ export declare function promptWalletMethod(): Promise<string>;
7
+ export declare function promptWalletFile(): Promise<string>;
8
+ export declare function promptPrivateKey(): Promise<string>;
9
+ export declare function promptSignerType(): Promise<string>;
10
+ export declare function getWalletConfig(): Promise<WalletConfig>;
11
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/prompts/wallet.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS1D;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAMxD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAKxD;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC,CAWxD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,YAAY,CAAC,CAY7D"}
@@ -0,0 +1,31 @@
1
+ import type { Flag } from '@oclif/core/lib/interfaces';
2
+ export type SignerType = 'arweave' | 'ethereum' | 'kyve' | 'polygon';
3
+ export interface DeployOptions {
4
+ 'ario-process': string;
5
+ 'arns-name': string;
6
+ 'deploy-file': string;
7
+ 'deploy-folder': string;
8
+ 'private-key': string;
9
+ 'sig-type': SignerType;
10
+ 'ttl-seconds': string;
11
+ undername: string;
12
+ wallet: string;
13
+ }
14
+ export type DeployFlags = Partial<Record<keyof DeployOptions, Flag<string>>>;
15
+ export interface UploadResult {
16
+ id: string;
17
+ manifest?: {
18
+ paths: Record<string, {
19
+ id: string;
20
+ }>;
21
+ };
22
+ manifestResponse?: {
23
+ id: string;
24
+ };
25
+ }
26
+ export interface ArnsRecord {
27
+ processId: string;
28
+ type: string;
29
+ undernames?: string[];
30
+ }
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAA;AAEtD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;AAEpE,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,UAAU,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAE5E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE;QACT,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KACtC,CAAA;IACD,gBAAgB,CAAC,EAAE;QACjB,EAAE,EAAE,MAAM,CAAA;KACX,CAAA;CACF;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=constants.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.test.d.ts","sourceRoot":"","sources":["../../../../src/utils/__tests__/constants.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Configuration for a single flag with its associated prompt
3
+ */
4
+ export type FlagConfig<T = any, F = any> = {
5
+ /** The oclif flag definition */
6
+ flag: F;
7
+ /** Optional prompt function to get the value interactively */
8
+ prompt?: () => Promise<T>;
9
+ /** Transform function to apply to the resolved value */
10
+ transform?: (value: T) => T;
11
+ /** Whether this flag triggers interactive mode when missing */
12
+ triggersInteractive?: boolean;
13
+ };
14
+ /**
15
+ * Map of flag configurations
16
+ */
17
+ export type FlagConfigMap = Record<string, FlagConfig<any, any>>;
18
+ /**
19
+ * Extract the resolved config type from a FlagConfigMap
20
+ * Infers the actual type (string, number, boolean) and optionality from each FlagConfig
21
+ */
22
+ export type ResolvedConfig<T extends FlagConfigMap> = {
23
+ [K in keyof T]: T[K] extends FlagConfig<infer U, any> ? U : any;
24
+ };
25
+ /**
26
+ * Options for resolveConfig
27
+ */
28
+ export interface ResolveConfigOptions {
29
+ /** Whether to run in interactive mode */
30
+ interactive?: boolean;
31
+ /** Custom logic to determine if interactive mode should be enabled */
32
+ shouldBeInteractive?: (parsedFlags: Record<string, any>) => boolean;
33
+ }
34
+ /**
35
+ * Resolves configuration by combining parsed CLI flags with interactive prompts
36
+ *
37
+ * @param flagConfigs - Map of flag names to their configurations
38
+ * @param parsedFlags - Parsed flags from this.parse()
39
+ * @param options - Resolution options
40
+ * @returns Fully resolved configuration object
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const config = await resolveConfig(
45
+ * {
46
+ * arnsName: {
47
+ * flag: globalFlags.arnsName,
48
+ * prompt: promptArnsName,
49
+ * triggersInteractive: true,
50
+ * },
51
+ * wallet: {
52
+ * flag: globalFlags.wallet,
53
+ * prompt: async () => (await getWalletConfig()).wallet,
54
+ * },
55
+ * },
56
+ * flags,
57
+ * {
58
+ * shouldBeInteractive: (flags) => !flags['arns-name'],
59
+ * }
60
+ * )
61
+ * ```
62
+ */
63
+ export declare function resolveConfig<T extends FlagConfigMap>(flagConfigs: T, parsedFlags: Record<string, any>, options?: ResolveConfigOptions): Promise<ResolvedConfig<T>>;
64
+ /**
65
+ * Helper to create a flag configuration with proper type inference
66
+ */
67
+ export declare function createFlagConfig<T, F = any>(config: FlagConfig<T, F>): FlagConfig<T, F>;
68
+ /**
69
+ * Helper to extract just the flags from a FlagConfigMap for use in command static flags
70
+ */
71
+ export declare function extractFlags<T extends FlagConfigMap>(flagConfigs: T): Record<string, any>;
72
+ //# sourceMappingURL=config-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-resolver.d.ts","sourceRoot":"","sources":["../../../src/utils/config-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI;IACzC,gCAAgC;IAChC,IAAI,EAAE,CAAC,CAAA;IACP,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAA;IACzB,wDAAwD;IACxD,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAA;IAC3B,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;AAEhE;;;GAGG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,aAAa,IAAI;KACnD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;CAChE,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,sEAAsE;IACtE,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAA;CACpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,aAAa,CAAC,CAAC,SAAS,aAAa,EACzD,WAAW,EAAE,CAAC,EACd,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAqC5B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAEvF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAOzF"}
@@ -0,0 +1,4 @@
1
+ export declare const ARWEAVE_TX_ID_REGEX: RegExp;
2
+ export declare const TTL_MIN = 60;
3
+ export declare const TTL_MAX = 86400;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,QAAgB,CAAA;AAEhD,eAAO,MAAM,OAAO,KAAK,CAAA;AACzB,eAAO,MAAM,OAAO,QAAS,CAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Expand tilde (~) to home directory in file paths
3
+ */
4
+ export declare function expandPath(filePath: string): string;
5
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/utils/path.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUnD"}
@@ -0,0 +1,17 @@
1
+ import { ArweaveSigner } from '@ar.io/sdk';
2
+ import { EthereumSigner } from '@ardrive/turbo-sdk';
3
+ import type { SignerType } from '../types/index.js';
4
+ export declare function createSigner(sigType: SignerType, deployKey: string): {
5
+ signer: EthereumSigner;
6
+ token: "ethereum";
7
+ } | {
8
+ signer: EthereumSigner;
9
+ token: "pol";
10
+ } | {
11
+ signer: ArweaveSigner;
12
+ token: "arweave";
13
+ } | {
14
+ signer: EthereumSigner;
15
+ token: "kyve";
16
+ };
17
+ //# sourceMappingURL=signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../../src/utils/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;EAqClE"}
@@ -0,0 +1,8 @@
1
+ import { OnDemandFunding, type TurboAuthenticatedClient } from '@ardrive/turbo-sdk';
2
+ export declare function uploadFile(turbo: TurboAuthenticatedClient, filePath: string, options?: {
3
+ fundingMode?: OnDemandFunding;
4
+ }): Promise<string>;
5
+ export declare function uploadFolder(turbo: TurboAuthenticatedClient, folderPath: string, options?: {
6
+ fundingMode?: OnDemandFunding;
7
+ }): Promise<string>;
8
+ //# sourceMappingURL=uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/utils/uploader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,KAAK,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAGnF,wBAAsB,UAAU,CAC9B,KAAK,EAAE,wBAAwB,EAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,GACA,OAAO,CAAC,MAAM,CAAC,CAyBjB;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,wBAAwB,EAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,GACA,OAAO,CAAC,MAAM,CAAC,CAsDjB"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Validate TTL seconds
3
+ */
4
+ export declare function validateTtl(value: string): string | true;
5
+ /**
6
+ * Validate undername
7
+ */
8
+ export declare function validateUndername(value: string): string | true;
9
+ /**
10
+ * Validate ARIO process ID
11
+ */
12
+ export declare function validateArioProcess(value: string): string | true;
13
+ /**
14
+ * Validate file path exists
15
+ */
16
+ export declare function validateFileExists(value: string): string | true;
17
+ /**
18
+ * Validate folder path exists
19
+ */
20
+ export declare function validateFolderExists(value: string): string | true;
21
+ /**
22
+ * Resolve ARIO process from shorthand to actual ID
23
+ */
24
+ export declare function resolveArioProcess(value: string): string;
25
+ /**
26
+ * Validate ArNS name is not empty
27
+ */
28
+ export declare function validateArnsName(value: string): string | true;
29
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../src/utils/validators.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWxD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUxD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM7D"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Test Arweave wallet JWK
3
+ * Loaded from fixtures/test_wallet.json
4
+ */
5
+ export declare const TEST_ARWEAVE_WALLET: any;
6
+ /**
7
+ * Test Ethereum private key
8
+ * This is a deterministic test key - DO NOT use for real transactions
9
+ */
10
+ export declare const TEST_ETH_PRIVATE_KEY = "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
11
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../tests/constants.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,mBAAmB,KAE/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,uEACqC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=deploy-command.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-command.test.d.ts","sourceRoot":"","sources":["../../../tests/e2e/deploy-command.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Global setup for Vitest
3
+ * Generates TypeScript types from OpenAPI specs before running tests
4
+ */
5
+ export default function setup(): void;
6
+ //# sourceMappingURL=global-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-setup.d.ts","sourceRoot":"","sources":["../../tests/global-setup.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,SAa5B"}
@@ -0,0 +1,105 @@
1
+ import type { components as PaymentComponents } from '../types/payment-service.js';
2
+ import type { components as UploadComponents } from '../types/upload-service.js';
3
+ /**
4
+ * Type aliases from generated OpenAPI types
5
+ */
6
+ type DataItemPost = UploadComponents['schemas']['DataItemPost'];
7
+ type BalanceResponse = PaymentComponents['schemas']['BalanceResponse'];
8
+ type CreditResponse = PaymentComponents['schemas']['CreditResponse'];
9
+ type CreditedPaymentTx = PaymentComponents['schemas']['CreditedPaymentTx'];
10
+ /**
11
+ * Mock data generators for Turbo API responses
12
+ * Based on actual Turbo SDK types and API responses
13
+ */
14
+ export declare const mockTurboData: {
15
+ balanceResponse: (winc?: string) => BalanceResponse;
16
+ priceResponse: (winc?: string) => CreditResponse;
17
+ topUpResponse: (winc?: string, txId?: string) => CreditedPaymentTx;
18
+ uploadFolderResponse: (manifestId?: string) => {
19
+ fileResponses: {
20
+ dataCaches: string[];
21
+ deadlineHeight: number;
22
+ fastFinalityIndexes: string[];
23
+ id: string;
24
+ owner: string;
25
+ public: string;
26
+ signature: string;
27
+ timestamp: number;
28
+ version: string;
29
+ winc: string;
30
+ }[];
31
+ manifest: {
32
+ index: {
33
+ path: string;
34
+ };
35
+ manifest: string;
36
+ paths: {
37
+ 'index.html': {
38
+ id: string;
39
+ };
40
+ 'style.css': {
41
+ id: string;
42
+ };
43
+ };
44
+ version: string;
45
+ };
46
+ manifestResponse: {
47
+ dataCaches: string[];
48
+ deadlineHeight: number;
49
+ fastFinalityIndexes: string[];
50
+ id: string;
51
+ owner: string;
52
+ public: string;
53
+ signature: string;
54
+ timestamp: number;
55
+ version: string;
56
+ winc: string;
57
+ };
58
+ };
59
+ uploadResponse: (id?: string) => DataItemPost;
60
+ };
61
+ /**
62
+ * Default MSW handlers for Turbo Upload Service
63
+ * Based on OpenAPI spec: https://turbo.ardrive.io/api-docs
64
+ */
65
+ export declare const turboUploadHandlers: import("msw").HttpHandler[];
66
+ /**
67
+ * Default MSW handlers for Turbo Payment Service
68
+ * Based on OpenAPI spec: https://payment.ardrive.io/api-docs
69
+ */
70
+ export declare const turboPaymentHandlers: import("msw").HttpHandler[];
71
+ /**
72
+ * Default MSW handlers for AO/ArNS Service
73
+ */
74
+ export declare const aoHandlers: import("msw").HttpHandler[];
75
+ /**
76
+ * All Turbo API handlers combined
77
+ */
78
+ export declare const turboHandlers: import("msw").HttpHandler[];
79
+ /**
80
+ * Helper to create custom upload response
81
+ * @param txId - The transaction ID to return
82
+ * @returns MSW handler for upload success
83
+ */
84
+ export declare function mockUploadSuccess(txId: string): import("msw").HttpHandler;
85
+ /**
86
+ * Helper to create upload failure response
87
+ * @param status - HTTP status code
88
+ * @param message - Error message
89
+ * @returns MSW handler for upload failure
90
+ */
91
+ export declare function mockUploadFailure(status?: number, message?: string): import("msw").HttpHandler;
92
+ /**
93
+ * Helper to create insufficient balance scenario
94
+ * @param winc - Balance amount in winc
95
+ * @returns MSW handler for insufficient balance
96
+ */
97
+ export declare function mockInsufficientBalance(winc?: string): import("msw").HttpHandler;
98
+ /**
99
+ * Helper to create on-demand funding success
100
+ * @param winc - Amount topped up in winc
101
+ * @returns MSW handler for on-demand funding success
102
+ */
103
+ export declare function mockOnDemandFundingSuccess(winc?: string): import("msw").HttpHandler;
104
+ export {};
105
+ //# sourceMappingURL=turbo-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turbo-handlers.d.ts","sourceRoot":"","sources":["../../../tests/mocks/turbo-handlers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,6BAA6B,CAAA;AAClF,OAAO,KAAK,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEhF;;GAEG;AACH,KAAK,YAAY,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAA;AAC/D,KAAK,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAA;AACtE,KAAK,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,gBAAgB,CAAC,CAAA;AACpE,KAAK,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAA;AAE1E;;;GAGG;AACH,eAAO,MAAM,aAAa;wCAEmB,eAAe;sCAOrB,cAAc;qDAShD,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAoEkD,YAAY;CAWnF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,6BAgH/B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,6BAsChC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,6BA+LtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,6BAAmE,CAAA;AAE7F;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,6BAI7C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAM,EAAE,OAAO,SAAkB,6BAIxE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,SAAQ,6BAInD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,SAAkB,6BAIhE"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MSW Server for mocking HTTP requests in tests
3
+ * Configured to intercept requests to:
4
+ * - Turbo Upload Service (upload.ardrive.io)
5
+ * - Turbo Payment Service (payment.ardrive.io)
6
+ * - AO Compute Unit (cu.ardrive.io)
7
+ * - AO Message Unit (mu.ao-testnet.xyz)
8
+ * - Arweave GraphQL (arweave.net/graphql)
9
+ */
10
+ export declare const server: import("msw/lib/node/index.js").SetupServerApi;
11
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../tests/setup.ts"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,gDAAgC,CAAA"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export interface paths {
6
+ "/balance": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ /** Get Current Balance of winc */
14
+ get: {
15
+ parameters: {
16
+ query?: {
17
+ address?: string;
18
+ };
19
+ header?: never;
20
+ path?: never;
21
+ cookie?: never;
22
+ };
23
+ requestBody?: never;
24
+ responses: {
25
+ /** @description OK */
26
+ 200: {
27
+ headers: {
28
+ [name: string]: unknown;
29
+ };
30
+ content: {
31
+ "application/json": components["schemas"]["BalanceResponse"];
32
+ };
33
+ };
34
+ };
35
+ };
36
+ put?: never;
37
+ post?: never;
38
+ delete?: never;
39
+ options?: never;
40
+ head?: never;
41
+ patch?: never;
42
+ trace?: never;
43
+ };
44
+ "/price/bytes/{byteCount}": {
45
+ parameters: {
46
+ query?: never;
47
+ header?: never;
48
+ path?: never;
49
+ cookie?: never;
50
+ };
51
+ /** Get Amount of Credits in winc for Byte Count */
52
+ get: {
53
+ parameters: {
54
+ query?: never;
55
+ header?: never;
56
+ path: {
57
+ byteCount: number;
58
+ };
59
+ cookie?: never;
60
+ };
61
+ requestBody?: never;
62
+ responses: {
63
+ /** @description OK */
64
+ 200: {
65
+ headers: {
66
+ [name: string]: unknown;
67
+ };
68
+ content: {
69
+ "application/json": components["schemas"]["CreditResponse"];
70
+ };
71
+ };
72
+ };
73
+ };
74
+ put?: never;
75
+ post?: never;
76
+ delete?: never;
77
+ options?: never;
78
+ head?: never;
79
+ patch?: never;
80
+ trace?: never;
81
+ };
82
+ "/price/{type}/{amount}": {
83
+ parameters: {
84
+ query?: never;
85
+ header?: never;
86
+ path?: never;
87
+ cookie?: never;
88
+ };
89
+ /** Get winc for Payment Type and Amount */
90
+ get: {
91
+ parameters: {
92
+ query?: never;
93
+ header?: never;
94
+ path: {
95
+ type: "ario" | "solana" | "base-eth" | "arweave" | "ethereum";
96
+ amount: number;
97
+ };
98
+ cookie?: never;
99
+ };
100
+ requestBody?: never;
101
+ responses: {
102
+ /** @description OK */
103
+ 200: {
104
+ headers: {
105
+ [name: string]: unknown;
106
+ };
107
+ content: {
108
+ "application/json": components["schemas"]["PaymentCreditResponse"];
109
+ };
110
+ };
111
+ };
112
+ };
113
+ put?: never;
114
+ post?: never;
115
+ delete?: never;
116
+ options?: never;
117
+ head?: never;
118
+ patch?: never;
119
+ trace?: never;
120
+ };
121
+ "/account/balance/{token}": {
122
+ parameters: {
123
+ query?: never;
124
+ header?: never;
125
+ path?: never;
126
+ cookie?: never;
127
+ };
128
+ get?: never;
129
+ put?: never;
130
+ /** Post a pending payment transaction */
131
+ post: {
132
+ parameters: {
133
+ query?: never;
134
+ header?: never;
135
+ path: {
136
+ token: "arweave" | "ario" | "solana" | "base-eth";
137
+ };
138
+ cookie?: never;
139
+ };
140
+ requestBody: {
141
+ content: {
142
+ "application/json": {
143
+ tx_id?: string;
144
+ };
145
+ };
146
+ };
147
+ responses: {
148
+ /** @description OK */
149
+ 200: {
150
+ headers: {
151
+ [name: string]: unknown;
152
+ };
153
+ content: {
154
+ "application/json": {
155
+ message?: string;
156
+ creditedTransaction?: components["schemas"]["CreditedPaymentTx"];
157
+ };
158
+ };
159
+ };
160
+ };
161
+ };
162
+ delete?: never;
163
+ options?: never;
164
+ head?: never;
165
+ patch?: never;
166
+ trace?: never;
167
+ };
168
+ }
169
+ export type webhooks = Record<string, never>;
170
+ export interface components {
171
+ schemas: {
172
+ /**
173
+ * @description A big number string representing an amount of credits in winc.
174
+ * @example 332824926
175
+ */
176
+ Winc: string;
177
+ BalanceResponse: {
178
+ /** @description Total winc if all approvals are revoked */
179
+ controlledWinc?: string;
180
+ /** @description Total winc user can spend */
181
+ winc?: string;
182
+ /** @description Total winc including shared credits */
183
+ effectiveBalance?: string;
184
+ };
185
+ CreditResponse: {
186
+ winc?: components["schemas"]["Winc"];
187
+ adjustments?: Record<string, never>[];
188
+ };
189
+ PaymentCreditResponse: {
190
+ winc?: components["schemas"]["Winc"];
191
+ adjustments?: Record<string, never>[];
192
+ fees?: Record<string, never>[];
193
+ actualPaymentAmount?: number;
194
+ quotedPaymentAmount?: number;
195
+ };
196
+ CreditedPaymentTx: {
197
+ transactionId?: string;
198
+ transactionQuantity?: number;
199
+ winstonCreditAmount?: string;
200
+ winc?: string;
201
+ status?: string;
202
+ id?: string;
203
+ quantity?: string;
204
+ owner?: string;
205
+ target?: string;
206
+ block?: number;
207
+ confirmedBlocks?: number;
208
+ };
209
+ };
210
+ responses: never;
211
+ parameters: never;
212
+ requestBodies: never;
213
+ headers: never;
214
+ pathItems: never;
215
+ }
216
+ export type $defs = Record<string, never>;
217
+ export type operations = Record<string, never>;
218
+ //# sourceMappingURL=payment-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-service.d.ts","sourceRoot":"","sources":["../../../tests/types/payment-service.ts"],"names":[],"mappings":"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"}