@ar.io/deploy 0.1.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 (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +695 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.js +5 -0
  5. package/dist/chunks/cache-C1tEeUx2.js +6 -0
  6. package/dist/chunks/cache-C1tEeUx2.js.map +1 -0
  7. package/dist/chunks/display-DRcjDj9k.js +104 -0
  8. package/dist/chunks/display-DRcjDj9k.js.map +1 -0
  9. package/dist/chunks/upload-workflow-DSS5FIa5.js +204 -0
  10. package/dist/chunks/upload-workflow-DSS5FIa5.js.map +1 -0
  11. package/dist/chunks/uploader-B2tC-1Qw.js +472 -0
  12. package/dist/chunks/uploader-B2tC-1Qw.js.map +1 -0
  13. package/dist/commands/deploy.js +187 -0
  14. package/dist/commands/deploy.js.map +1 -0
  15. package/dist/commands/upload.js +122 -0
  16. package/dist/commands/upload.js.map +1 -0
  17. package/dist/constants/flags.js +241 -0
  18. package/dist/constants/flags.js.map +1 -0
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/prompts/arns.js +80 -0
  22. package/dist/prompts/arns.js.map +1 -0
  23. package/dist/prompts/deployment.js +27 -0
  24. package/dist/prompts/deployment.js.map +1 -0
  25. package/dist/prompts/wallet.js +52 -0
  26. package/dist/prompts/wallet.js.map +1 -0
  27. package/dist/src/commands/deploy.d.ts +9 -0
  28. package/dist/src/commands/deploy.d.ts.map +1 -0
  29. package/dist/src/commands/upload.d.ts +9 -0
  30. package/dist/src/commands/upload.d.ts.map +1 -0
  31. package/dist/src/constants/cache.d.ts +4 -0
  32. package/dist/src/constants/cache.d.ts.map +1 -0
  33. package/dist/src/constants/flags.d.ts +122 -0
  34. package/dist/src/constants/flags.d.ts.map +1 -0
  35. package/dist/src/index.d.ts +2 -0
  36. package/dist/src/index.d.ts.map +1 -0
  37. package/dist/src/prompts/arns.d.ts +13 -0
  38. package/dist/src/prompts/arns.d.ts.map +1 -0
  39. package/dist/src/prompts/deployment.d.ts +6 -0
  40. package/dist/src/prompts/deployment.d.ts.map +1 -0
  41. package/dist/src/prompts/wallet.d.ts +11 -0
  42. package/dist/src/prompts/wallet.d.ts.map +1 -0
  43. package/dist/src/types/index.d.ts +31 -0
  44. package/dist/src/types/index.d.ts.map +1 -0
  45. package/dist/src/utils/__tests__/cache.test.d.ts +2 -0
  46. package/dist/src/utils/__tests__/cache.test.d.ts.map +1 -0
  47. package/dist/src/utils/__tests__/constants.test.d.ts +2 -0
  48. package/dist/src/utils/__tests__/constants.test.d.ts.map +1 -0
  49. package/dist/src/utils/__tests__/display.test.d.ts +2 -0
  50. package/dist/src/utils/__tests__/display.test.d.ts.map +1 -0
  51. package/dist/src/utils/cache.d.ts +48 -0
  52. package/dist/src/utils/cache.d.ts.map +1 -0
  53. package/dist/src/utils/chalk.d.ts +9 -0
  54. package/dist/src/utils/chalk.d.ts.map +1 -0
  55. package/dist/src/utils/config-resolver.d.ts +72 -0
  56. package/dist/src/utils/config-resolver.d.ts.map +1 -0
  57. package/dist/src/utils/constants.d.ts +4 -0
  58. package/dist/src/utils/constants.d.ts.map +1 -0
  59. package/dist/src/utils/deploy-key.d.ts +15 -0
  60. package/dist/src/utils/deploy-key.d.ts.map +1 -0
  61. package/dist/src/utils/display.d.ts +7 -0
  62. package/dist/src/utils/display.d.ts.map +1 -0
  63. package/dist/src/utils/path.d.ts +5 -0
  64. package/dist/src/utils/path.d.ts.map +1 -0
  65. package/dist/src/utils/signer.d.ts +19 -0
  66. package/dist/src/utils/signer.d.ts.map +1 -0
  67. package/dist/src/utils/solana.d.ts +29 -0
  68. package/dist/src/utils/solana.d.ts.map +1 -0
  69. package/dist/src/utils/upload-types.d.ts +35 -0
  70. package/dist/src/utils/upload-types.d.ts.map +1 -0
  71. package/dist/src/utils/uploader.d.ts +50 -0
  72. package/dist/src/utils/uploader.d.ts.map +1 -0
  73. package/dist/src/utils/validators.d.ts +21 -0
  74. package/dist/src/utils/validators.d.ts.map +1 -0
  75. package/dist/src/workflows/upload-workflow.d.ts +28 -0
  76. package/dist/src/workflows/upload-workflow.d.ts.map +1 -0
  77. package/dist/tests/constants.d.ts +11 -0
  78. package/dist/tests/constants.d.ts.map +1 -0
  79. package/dist/tests/e2e/deploy-command.test.d.ts +2 -0
  80. package/dist/tests/e2e/deploy-command.test.d.ts.map +1 -0
  81. package/dist/tests/global-setup.d.ts +6 -0
  82. package/dist/tests/global-setup.d.ts.map +1 -0
  83. package/dist/tests/mocks/turbo-handlers.d.ts +106 -0
  84. package/dist/tests/mocks/turbo-handlers.d.ts.map +1 -0
  85. package/dist/tests/setup.d.ts +11 -0
  86. package/dist/tests/setup.d.ts.map +1 -0
  87. package/dist/tests/types/payment-service.d.ts +218 -0
  88. package/dist/tests/types/payment-service.d.ts.map +1 -0
  89. package/dist/tests/types/upload-service.d.ts +168 -0
  90. package/dist/tests/types/upload-service.d.ts.map +1 -0
  91. package/dist/tests/unit/deploy-key.test.d.ts +2 -0
  92. package/dist/tests/unit/deploy-key.test.d.ts.map +1 -0
  93. package/dist/tests/unit/signer.test.d.ts +2 -0
  94. package/dist/tests/unit/signer.test.d.ts.map +1 -0
  95. package/dist/tests/unit/solana.test.d.ts +2 -0
  96. package/dist/tests/unit/solana.test.d.ts.map +1 -0
  97. package/dist/tests/unit/uploader-tags.test.d.ts +2 -0
  98. package/dist/tests/unit/uploader-tags.test.d.ts.map +1 -0
  99. package/dist/tests/unit/validators.test.d.ts +2 -0
  100. package/dist/tests/unit/validators.test.d.ts.map +1 -0
  101. package/dist/types/index.js +2 -0
  102. package/dist/types/index.js.map +1 -0
  103. package/dist/utils/config-resolver.js +39 -0
  104. package/dist/utils/config-resolver.js.map +1 -0
  105. package/dist/utils/constants.js +6 -0
  106. package/dist/utils/constants.js.map +1 -0
  107. package/dist/utils/path.js +15 -0
  108. package/dist/utils/path.js.map +1 -0
  109. package/dist/utils/signer.js +45 -0
  110. package/dist/utils/signer.js.map +1 -0
  111. package/dist/utils/uploader.js +5 -0
  112. package/dist/utils/uploader.js.map +1 -0
  113. package/dist/utils/validators.js +43 -0
  114. package/dist/utils/validators.js.map +1 -0
  115. package/dist/workflows/upload-workflow.js +9 -0
  116. package/dist/workflows/upload-workflow.js.map +1 -0
  117. package/package.json +116 -0
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Encode the contents of a wallet file into the deploy-key string used
3
+ * throughout the CLI, based on the signer type:
4
+ * - arweave: base64-encoded JWK JSON
5
+ * - solana: base58 secret key derived from a solana-keygen id.json byte array
6
+ * - ethereum/polygon/kyve: trimmed hex private key
7
+ */
8
+ export declare function deployKeyFromWalletFile(sigType: string, content: string): string;
9
+ /**
10
+ * Encode a private-key string into the deploy-key string used throughout the
11
+ * CLI, based on the signer type (see {@link deployKeyFromWalletFile}). For
12
+ * Solana this is a base58-encoded secret key.
13
+ */
14
+ export declare function deployKeyFromPrivateKey(sigType: string, privateKey: string): string;
15
+ //# sourceMappingURL=deploy-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-key.d.ts","sourceRoot":"","sources":["../../../src/utils/deploy-key.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUhF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAUnF"}
@@ -0,0 +1,7 @@
1
+ import type { UploadCost, UploadSize } from './upload-types.js';
2
+ export type DisplayRow = [label: string, value: string];
3
+ export declare function formatUploadSize(size: UploadSize): string;
4
+ export declare function formatUploadCost(cost: UploadCost): string;
5
+ export declare function formatDisplayRows(rows: DisplayRow[]): string;
6
+ export declare function formatUploadError(message: string, title?: string): string;
7
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../src/utils/display.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;AAEvD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEzD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,CAE5D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,MAAM,CAyBlF"}
@@ -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,19 @@
1
+ import { ArweaveSigner, EthereumSigner, HexSolanaSigner } from '@ardrive/turbo-sdk';
2
+ import type { SignerType } from '../types/index.js';
3
+ export declare function createSigner(sigType: SignerType, deployKey: string): {
4
+ signer: EthereumSigner;
5
+ token: "ethereum";
6
+ } | {
7
+ signer: EthereumSigner;
8
+ token: "pol";
9
+ } | {
10
+ signer: ArweaveSigner;
11
+ token: "arweave";
12
+ } | {
13
+ signer: EthereumSigner;
14
+ token: "kyve";
15
+ } | {
16
+ signer: HexSolanaSigner;
17
+ token: "solana";
18
+ };
19
+ //# 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,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEnD,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;EA4ClE"}
@@ -0,0 +1,29 @@
1
+ import { type Address, type KeyPairSigner } from '@solana/kit';
2
+ type ClusterProgramIds = Partial<Record<'antProgramId' | 'arnsProgramId' | 'coreProgramId' | 'garProgramId', Address>>;
3
+ export type SolanaCluster = 'devnet' | 'mainnet';
4
+ /**
5
+ * Normalize a Solana private key provided as a string. We accept a base58
6
+ * encoded 64-byte secret key (the format wallets like Phantom export), which is
7
+ * exactly what arbundles' HexSolanaSigner expects, so we just trim it.
8
+ */
9
+ export declare function solanaDeployKeyFromString(input: string): string;
10
+ /**
11
+ * Convert a `solana-keygen` JSON wallet (a JSON array of 64 bytes, e.g.
12
+ * ~/.config/solana/id.json) into the base58 secret-key string used as the
13
+ * deploy key throughout the CLI.
14
+ */
15
+ export declare function solanaDeployKeyFromFile(content: string): string;
16
+ /**
17
+ * Build a Solana `TransactionSigner` from the base58 deploy key, used to sign
18
+ * ArNS/ANT program transactions.
19
+ */
20
+ export declare function createSolanaArnsSigner(deployKey: string): Promise<KeyPairSigner>;
21
+ export declare function createArioRpc(cluster: SolanaCluster, rpcUrl?: string): import("@solana/kit").Rpc<import("@solana/kit").RequestAirdropApi & import("@solana/kit").GetAccountInfoApi & import("@solana/kit").GetBalanceApi & import("@solana/kit").GetBlockApi & import("@solana/kit").GetBlockCommitmentApi & import("@solana/kit").GetBlockHeightApi & import("@solana/kit").GetBlockProductionApi & import("@solana/kit").GetBlocksApi & import("@solana/kit").GetBlocksWithLimitApi & import("@solana/kit").GetBlockTimeApi & import("@solana/kit").GetClusterNodesApi & import("@solana/kit").GetEpochInfoApi & import("@solana/kit").GetEpochScheduleApi & import("@solana/kit").GetFeeForMessageApi & import("@solana/kit").GetFirstAvailableBlockApi & import("@solana/kit").GetGenesisHashApi & import("@solana/kit").GetHealthApi & import("@solana/kit").GetHighestSnapshotSlotApi & import("@solana/kit").GetIdentityApi & import("@solana/kit").GetInflationGovernorApi & import("@solana/kit").GetInflationRateApi & import("@solana/kit").GetInflationRewardApi & import("@solana/kit").GetLargestAccountsApi & import("@solana/kit").GetLatestBlockhashApi & import("@solana/kit").GetLeaderScheduleApi & import("@solana/kit").GetMaxRetransmitSlotApi & import("@solana/kit").GetMaxShredInsertSlotApi & import("@solana/kit").GetMinimumBalanceForRentExemptionApi & import("@solana/kit").GetMultipleAccountsApi & import("@solana/kit").GetProgramAccountsApi & import("@solana/kit").GetRecentPerformanceSamplesApi & import("@solana/kit").GetRecentPrioritizationFeesApi & import("@solana/kit").GetSignaturesForAddressApi & import("@solana/kit").GetSignatureStatusesApi & import("@solana/kit").GetSlotApi & import("@solana/kit").GetSlotLeaderApi & import("@solana/kit").GetSlotLeadersApi & import("@solana/kit").GetStakeMinimumDelegationApi & import("@solana/kit").GetSupplyApi & import("@solana/kit").GetTokenAccountBalanceApi & import("@solana/kit").GetTokenAccountsByDelegateApi & import("@solana/kit").GetTokenAccountsByOwnerApi & import("@solana/kit").GetTokenLargestAccountsApi & import("@solana/kit").GetTokenSupplyApi & import("@solana/kit").GetTransactionApi & import("@solana/kit").GetTransactionCountApi & import("@solana/kit").GetVersionApi & import("@solana/kit").GetVoteAccountsApi & import("@solana/kit").IsBlockhashValidApi & import("@solana/kit").MinimumLedgerSlotApi & import("@solana/kit").SendTransactionApi & import("@solana/kit").SimulateTransactionApi>;
22
+ export declare function createArioRpcSubscriptions(cluster: SolanaCluster, rpcUrl?: string): import("@solana/kit").RpcSubscriptions<import("@solana/kit").SolanaRpcSubscriptionsApi>;
23
+ /**
24
+ * Program-id overrides to pass to `ARIO.init` / `SolanaANTWriteable`. Mainnet
25
+ * uses the SDK defaults (empty object); devnet must pass explicit ids.
26
+ */
27
+ export declare function clusterProgramIds(cluster: SolanaCluster): ClusterProgramIds;
28
+ export {};
29
+ //# sourceMappingURL=solana.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.d.ts","sourceRoot":"","sources":["../../../src/utils/solana.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EAIZ,KAAK,aAAa,EACnB,MAAM,aAAa,CAAA;AAGpB,KAAK,iBAAiB,GAAG,OAAO,CAC9B,MAAM,CAAC,cAAc,GAAG,eAAe,GAAG,eAAe,GAAG,cAAc,EAAE,OAAO,CAAC,CACrF,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEhD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAe/D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAEhF;AAcD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,o0EAEpE;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,MAAM,2FAEjF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAW3E"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Shared upload client/result types used by the Turbo upload path.
3
+ *
4
+ * These describe the minimal surface the uploader and workflow rely on,
5
+ * independent of any specific bundler implementation.
6
+ */
7
+ export interface UploadFileArgs {
8
+ dataItemOpts?: {
9
+ tags?: Array<{
10
+ name: string;
11
+ value: string;
12
+ }>;
13
+ };
14
+ file?: string | Buffer;
15
+ fileSizeFactory?: () => number;
16
+ fileStreamFactory?: () => unknown;
17
+ fundingMode?: unknown;
18
+ }
19
+ export interface UploadClient {
20
+ uploadFile: (args: UploadFileArgs) => Promise<UploadClientResult>;
21
+ }
22
+ export interface UploadClientResult {
23
+ cost?: UploadCost;
24
+ id?: string;
25
+ size?: UploadSize;
26
+ }
27
+ export interface UploadCost {
28
+ amount: bigint;
29
+ token: string;
30
+ }
31
+ export interface UploadSize {
32
+ payloadBytes: number;
33
+ signedBytes?: number;
34
+ }
35
+ //# sourceMappingURL=upload-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-types.d.ts","sourceRoot":"","sources":["../../../src/utils/upload-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAA;IAChE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAA;IACjC,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAA;CAClE;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB"}
@@ -0,0 +1,50 @@
1
+ import { OnDemandFunding } from '@ardrive/turbo-sdk';
2
+ import { type TransactionCache } from './cache.js';
3
+ import type { UploadClient, UploadCost, UploadSize } from './upload-types.js';
4
+ type DataItemTag = {
5
+ name: string;
6
+ value: string;
7
+ };
8
+ /**
9
+ * Provenance tags stamped on every uploaded data item. In CI (GitHub Actions)
10
+ * the deploying commit SHA is attached as a GIT-HASH tag; locally, where
11
+ * GITHUB_SHA is unset, it is omitted.
12
+ */
13
+ export declare function provenanceTags(): DataItemTag[];
14
+ export interface UploadResult {
15
+ cacheHit: boolean;
16
+ cost?: UploadCost;
17
+ size?: UploadSize;
18
+ transactionId: string;
19
+ updatedCache?: TransactionCache;
20
+ }
21
+ export interface FolderUploadResult extends UploadResult {
22
+ /** Number of files that were cache hits (not re-uploaded) */
23
+ cacheHits: number;
24
+ /** Total number of files in the folder */
25
+ totalFiles: number;
26
+ /** Number of files that were uploaded */
27
+ uploaded: number;
28
+ }
29
+ export declare function uploadFile(turbo: UploadClient, filePath: string, options?: {
30
+ cache?: TransactionCache;
31
+ fundingMode?: OnDemandFunding;
32
+ }): Promise<UploadResult>;
33
+ /**
34
+ * Upload a folder with per-file deduplication.
35
+ * Each file is checked against the cache individually, and only uncached files are uploaded.
36
+ * A manifest is then constructed and uploaded to create the folder structure.
37
+ *
38
+ * @param turbo - Upload client used for file and manifest uploads.
39
+ * @param folderPath - Folder to upload.
40
+ * @param options - Upload options for caching, concurrency, funding, and failure handling.
41
+ * @returns Folder upload result including manifest transaction ID and cache stats.
42
+ */
43
+ export declare function uploadFolder(turbo: UploadClient, folderPath: string, options?: {
44
+ cache?: TransactionCache;
45
+ concurrency?: number;
46
+ fundingMode?: OnDemandFunding;
47
+ throwOnFailure?: boolean;
48
+ }): Promise<FolderUploadResult>;
49
+ export {};
50
+ //# sourceMappingURL=uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/utils/uploader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAIpD,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE7E,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAElD;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,WAAW,EAAE,CAO9C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,WAAW,CAAC,EAAE,eAAe,CAAA;CAC9B,GACA,OAAO,CAAC,YAAY,CAAC,CA4DvB;AAYD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,eAAe,CAAA;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,GACA,OAAO,CAAC,kBAAkB,CAAC,CAiJ7B"}
@@ -0,0 +1,21 @@
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 file path exists
11
+ */
12
+ export declare function validateFileExists(value: string): string | true;
13
+ /**
14
+ * Validate folder path exists
15
+ */
16
+ export declare function validateFolderExists(value: string): string | true;
17
+ /**
18
+ * Validate ArNS name is not empty
19
+ */
20
+ export declare function validateArnsName(value: string): string | true;
21
+ //# sourceMappingURL=validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../../src/utils/validators.ts"],"names":[],"mappings":"AAKA;;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,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,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM7D"}
@@ -0,0 +1,28 @@
1
+ import type { UploadCost, UploadSize } from '../utils/upload-types.js';
2
+ export interface UploadWorkflowConfig {
3
+ 'dedupe-cache-max-entries': number;
4
+ 'deploy-file'?: string;
5
+ 'deploy-folder': string;
6
+ 'max-token-amount'?: string;
7
+ 'on-demand'?: string;
8
+ 'sig-type': string;
9
+ uploader?: string;
10
+ }
11
+ export interface UploadWorkflowIo {
12
+ error: (msg: string) => never;
13
+ }
14
+ export interface UploadWorkflowResult {
15
+ cost?: UploadCost;
16
+ size?: UploadSize;
17
+ transactionId: string;
18
+ }
19
+ /**
20
+ * Sign in to Turbo and upload a file or folder.
21
+ *
22
+ * @param deployKey - Wallet material (base64 JWK or hex private key per sig-type)
23
+ * @param config - Upload paths, dedupe, bundler service URL, on-demand payment
24
+ * @param io - Error handler (must exit the process)
25
+ * @returns Transaction ID or folder manifest ID
26
+ */
27
+ export declare function runUploadWorkflow(deployKey: string, config: UploadWorkflowConfig, io: UploadWorkflowIo): Promise<UploadWorkflowResult>;
28
+ //# sourceMappingURL=upload-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-workflow.d.ts","sourceRoot":"","sources":["../../../src/workflows/upload-workflow.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAgB,UAAU,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAGpF,MAAM,WAAW,oBAAoB;IACnC,0BAA0B,EAAE,MAAM,CAAA;IAClC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAeD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAA;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,oBAAoB,EAC5B,EAAE,EAAE,gBAAgB,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAkL/B"}
@@ -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,106 @@
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 balanceWinc - Balance amount in winc (default: low balance)
95
+ * @param costWinc - Upload cost in winc (default: higher than balance)
96
+ * @returns Array of MSW handlers for insufficient balance scenario
97
+ */
98
+ export declare function mockInsufficientBalance(balanceWinc?: string, costWinc?: string): import("msw").HttpHandler[];
99
+ /**
100
+ * Helper to create on-demand funding success
101
+ * @param winc - Amount topped up in winc
102
+ * @returns MSW handler for on-demand funding success
103
+ */
104
+ export declare function mockOnDemandFundingSuccess(winc?: string): import("msw").HttpHandler;
105
+ export {};
106
+ //# 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;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,SAAQ,EAAE,QAAQ,SAAY,+BAchF;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 (turbo-gateway.com/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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"}