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,168 @@
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
+ "/tx": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ get?: never;
14
+ put?: never;
15
+ /** Posts a signed data item to arweave */
16
+ post: {
17
+ parameters: {
18
+ query?: never;
19
+ header?: never;
20
+ path?: never;
21
+ cookie?: never;
22
+ };
23
+ /** @description A signed data item */
24
+ requestBody: {
25
+ content: {
26
+ "application/octet-stream": string;
27
+ };
28
+ };
29
+ responses: {
30
+ /** @description The signed data item was successfully submitted. */
31
+ 200: {
32
+ headers: {
33
+ [name: string]: unknown;
34
+ };
35
+ content: {
36
+ "application/json": components["schemas"]["DataItemPost"];
37
+ };
38
+ };
39
+ /** @description Invalid data item post */
40
+ 400: {
41
+ headers: {
42
+ [name: string]: unknown;
43
+ };
44
+ content?: never;
45
+ };
46
+ /** @description Insufficient balance */
47
+ 402: {
48
+ headers: {
49
+ [name: string]: unknown;
50
+ };
51
+ content?: never;
52
+ };
53
+ };
54
+ };
55
+ delete?: never;
56
+ options?: never;
57
+ head?: never;
58
+ patch?: never;
59
+ trace?: never;
60
+ };
61
+ "/tx/{token}": {
62
+ parameters: {
63
+ query?: never;
64
+ header?: never;
65
+ path?: never;
66
+ cookie?: never;
67
+ };
68
+ get?: never;
69
+ put?: never;
70
+ /** Posts a signed data item to arweave for a specific token */
71
+ post: {
72
+ parameters: {
73
+ query?: never;
74
+ header?: never;
75
+ path: {
76
+ token: "arweave" | "ethereum" | "solana" | "ario" | "base-eth";
77
+ };
78
+ cookie?: never;
79
+ };
80
+ requestBody: {
81
+ content: {
82
+ "application/octet-stream": string;
83
+ };
84
+ };
85
+ responses: {
86
+ /** @description The receipt of the uploaded data item. */
87
+ 200: {
88
+ headers: {
89
+ [name: string]: unknown;
90
+ };
91
+ content: {
92
+ "application/json": components["schemas"]["DataItemPost"];
93
+ };
94
+ };
95
+ /** @description Insufficient balance */
96
+ 402: {
97
+ headers: {
98
+ [name: string]: unknown;
99
+ };
100
+ content?: never;
101
+ };
102
+ };
103
+ };
104
+ delete?: never;
105
+ options?: never;
106
+ head?: never;
107
+ patch?: never;
108
+ trace?: never;
109
+ };
110
+ }
111
+ export type webhooks = Record<string, never>;
112
+ export interface components {
113
+ schemas: {
114
+ DataItemPost: {
115
+ /**
116
+ * @description The id of the data item.
117
+ * @example QpmY8mZmFEC8RxNsgbxSV6e36OF6quIYaPRKzvUco0o
118
+ */
119
+ id?: string;
120
+ /**
121
+ * @description The normalized wallet address that signed data item.
122
+ * @example 8wgRDgvYOrtSaWEIV21g0lTuWDUnTu4_iYj4hmA7PI0
123
+ */
124
+ owner?: string;
125
+ /**
126
+ * @description The Arweave data caches the data item has been posted to.
127
+ * @example [
128
+ * "arweave.net"
129
+ * ]
130
+ */
131
+ dataCaches?: string[];
132
+ /**
133
+ * @description The Arweave fast finality indexes the data item has been posted to.
134
+ * @example [
135
+ * "arweave.net"
136
+ * ]
137
+ */
138
+ fastFinalityIndexes?: string[];
139
+ /**
140
+ * @description The deadline block height for the data item to be posted to Arweave.
141
+ * @example 1310000
142
+ */
143
+ deadlineHeight?: number;
144
+ /**
145
+ * @description The timestamp in millisecond of when the data item was fully uploaded and receipt was signed.
146
+ * @example 1700590909589
147
+ */
148
+ timestamp?: number;
149
+ /**
150
+ * @description The version of the receipt
151
+ * @example 0.1.0
152
+ */
153
+ version?: string;
154
+ /** @description The base64URL signature of the receipt. */
155
+ signature?: string;
156
+ /** @description The public key of the wallet that signed the receipt */
157
+ public?: string;
158
+ };
159
+ };
160
+ responses: never;
161
+ parameters: never;
162
+ requestBodies: never;
163
+ headers: never;
164
+ pathItems: never;
165
+ }
166
+ export type $defs = Record<string, never>;
167
+ export type operations = Record<string, never>;
168
+ //# sourceMappingURL=upload-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-service.d.ts","sourceRoot":"","sources":["../../../tests/types/upload-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=validators.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/validators.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ async function resolveConfig(flagConfigs, parsedFlags, options = {}) {
2
+ const { interactive, shouldBeInteractive } = options;
3
+ const isInteractive = interactive ?? (shouldBeInteractive ? shouldBeInteractive(parsedFlags) : false);
4
+ const resolved = {};
5
+ for (const [key, config] of Object.entries(flagConfigs)) {
6
+ const flagValue = parsedFlags[key];
7
+ if (flagValue !== void 0 && flagValue !== null && flagValue !== "") {
8
+ resolved[key] = config.transform ? config.transform(flagValue) : flagValue;
9
+ continue;
10
+ }
11
+ if (isInteractive && config.prompt) {
12
+ const promptValue = await config.prompt();
13
+ resolved[key] = config.transform ? config.transform(promptValue) : promptValue;
14
+ continue;
15
+ }
16
+ const defaultValue = config.flag.default;
17
+ if (typeof defaultValue === "function") {
18
+ resolved[key] = await defaultValue({});
19
+ } else if (defaultValue === void 0) {
20
+ resolved[key] = flagValue;
21
+ } else {
22
+ resolved[key] = defaultValue;
23
+ }
24
+ }
25
+ return resolved;
26
+ }
27
+ function createFlagConfig(config) {
28
+ return config;
29
+ }
30
+ function extractFlags(flagConfigs) {
31
+ const flags = {};
32
+ for (const [key, config] of Object.entries(flagConfigs)) {
33
+ flags[key] = config.flag;
34
+ }
35
+ return flags;
36
+ }
37
+
38
+ export { createFlagConfig, extractFlags, resolveConfig };
39
+ //# sourceMappingURL=config-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-resolver.js","sources":["../../src/utils/config-resolver.ts"],"sourcesContent":["/**\n * Configuration for a single flag with its associated prompt\n */\nexport type FlagConfig<T = any, F = any> = {\n /** The oclif flag definition */\n flag: F\n /** Optional prompt function to get the value interactively */\n prompt?: () => Promise<T>\n /** Transform function to apply to the resolved value */\n transform?: (value: T) => T\n /** Whether this flag triggers interactive mode when missing */\n triggersInteractive?: boolean\n}\n\n/**\n * Map of flag configurations\n */\nexport type FlagConfigMap = Record<string, FlagConfig<any, any>>\n\n/**\n * Extract the resolved config type from a FlagConfigMap\n * Infers the actual type (string, number, boolean) and optionality from each FlagConfig\n */\nexport type ResolvedConfig<T extends FlagConfigMap> = {\n [K in keyof T]: T[K] extends FlagConfig<infer U, any> ? U : any\n}\n\n/**\n * Options for resolveConfig\n */\nexport interface ResolveConfigOptions {\n /** Whether to run in interactive mode */\n interactive?: boolean\n /** Custom logic to determine if interactive mode should be enabled */\n shouldBeInteractive?: (parsedFlags: Record<string, any>) => boolean\n}\n\n/**\n * Resolves configuration by combining parsed CLI flags with interactive prompts\n *\n * @param flagConfigs - Map of flag names to their configurations\n * @param parsedFlags - Parsed flags from this.parse()\n * @param options - Resolution options\n * @returns Fully resolved configuration object\n *\n * @example\n * ```typescript\n * const config = await resolveConfig(\n * {\n * arnsName: {\n * flag: globalFlags.arnsName,\n * prompt: promptArnsName,\n * triggersInteractive: true,\n * },\n * wallet: {\n * flag: globalFlags.wallet,\n * prompt: async () => (await getWalletConfig()).wallet,\n * },\n * },\n * flags,\n * {\n * shouldBeInteractive: (flags) => !flags['arns-name'],\n * }\n * )\n * ```\n */\nexport async function resolveConfig<T extends FlagConfigMap>(\n flagConfigs: T,\n parsedFlags: Record<string, any>,\n options: ResolveConfigOptions = {},\n): Promise<ResolvedConfig<T>> {\n const { interactive, shouldBeInteractive } = options\n\n // Determine if we should run in interactive mode\n const isInteractive =\n interactive ?? (shouldBeInteractive ? shouldBeInteractive(parsedFlags) : false)\n\n const resolved: Record<string, any> = {}\n\n for (const [key, config] of Object.entries(flagConfigs)) {\n const flagValue = parsedFlags[key]\n\n // If value exists from flags, use it\n if (flagValue !== undefined && flagValue !== null && flagValue !== '') {\n resolved[key] = config.transform ? config.transform(flagValue) : flagValue\n continue\n }\n\n // If interactive mode and prompt exists, use prompt\n if (isInteractive && config.prompt) {\n const promptValue = await config.prompt()\n resolved[key] = config.transform ? config.transform(promptValue) : promptValue\n continue\n }\n\n // Otherwise use the flag's default value (if any)\n const defaultValue = config.flag.default\n if (typeof defaultValue === 'function') {\n resolved[key] = await defaultValue({})\n } else if (defaultValue === undefined) {\n resolved[key] = flagValue // May be undefined\n } else {\n resolved[key] = defaultValue\n }\n }\n\n return resolved as ResolvedConfig<T>\n}\n\n/**\n * Helper to create a flag configuration with proper type inference\n */\nexport function createFlagConfig<T, F = any>(config: FlagConfig<T, F>): FlagConfig<T, F> {\n return config\n}\n\n/**\n * Helper to extract just the flags from a FlagConfigMap for use in command static flags\n */\nexport function extractFlags<T extends FlagConfigMap>(flagConfigs: T): Record<string, any> {\n const flags: Record<string, any> = {}\n for (const [key, config] of Object.entries(flagConfigs)) {\n flags[key] = config.flag\n }\n\n return flags\n}\n"],"names":[],"mappings":"AAkEA,eAAsB,aAAA,CACpB,WAAA,EACA,WAAA,EACA,OAAA,GAAgC,EAAC,EACL;AAC5B,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAI,OAAA;AAG7C,EAAA,MAAM,aAAA,GACJ,WAAA,KAAgB,mBAAA,GAAsB,mBAAA,CAAoB,WAAW,CAAA,GAAI,KAAA,CAAA;AAE3E,EAAA,MAAM,WAAgC,EAAC;AAEvC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AACvD,IAAA,MAAM,SAAA,GAAY,YAAY,GAAG,CAAA;AAGjC,IAAA,IAAI,SAAA,KAAc,MAAA,IAAa,SAAA,KAAc,IAAA,IAAQ,cAAc,EAAA,EAAI;AACrE,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA,CAAO,YAAY,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,GAAI,SAAA;AACjE,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,aAAA,IAAiB,OAAO,MAAA,EAAQ;AAClC,MAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,MAAA,EAAO;AACxC,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,MAAA,CAAO,YAAY,MAAA,CAAO,SAAA,CAAU,WAAW,CAAA,GAAI,WAAA;AACnE,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe,OAAO,IAAA,CAAK,OAAA;AACjC,IAAA,IAAI,OAAO,iBAAiB,UAAA,EAAY;AACtC,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,MAAM,YAAA,CAAa,EAAE,CAAA;AAAA,IACvC,CAAA,MAAA,IAAW,iBAAiB,MAAA,EAAW;AACrC,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,SAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,GAAG,CAAA,GAAI,YAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAKO,SAAS,iBAA6B,MAAA,EAA4C;AACvF,EAAA,OAAO,MAAA;AACT;AAKO,SAAS,aAAsC,WAAA,EAAqC;AACzF,EAAA,MAAM,QAA6B,EAAC;AACpC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AACvD,IAAA,KAAA,CAAM,GAAG,IAAI,MAAA,CAAO,IAAA;AAAA,EACtB;AAEA,EAAA,OAAO,KAAA;AACT;;;;"}
@@ -0,0 +1,6 @@
1
+ const ARWEAVE_TX_ID_REGEX = /^[\w-]{43}$/;
2
+ const TTL_MIN = 60;
3
+ const TTL_MAX = 86400;
4
+
5
+ export { ARWEAVE_TX_ID_REGEX, TTL_MAX, TTL_MIN };
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../src/utils/constants.ts"],"sourcesContent":["export const ARWEAVE_TX_ID_REGEX = /^[\\w-]{43}$/\n\nexport const TTL_MIN = 60\nexport const TTL_MAX = 86_400\n"],"names":[],"mappings":"AAAO,MAAM,mBAAA,GAAsB;AAE5B,MAAM,OAAA,GAAU;AAChB,MAAM,OAAA,GAAU;;;;"}
@@ -0,0 +1,15 @@
1
+ import os from 'node:os';
2
+ import path from 'node:path';
3
+
4
+ function expandPath(filePath) {
5
+ if (filePath.startsWith("~/")) {
6
+ return path.join(os.homedir(), filePath.slice(2));
7
+ }
8
+ if (filePath === "~") {
9
+ return os.homedir();
10
+ }
11
+ return filePath;
12
+ }
13
+
14
+ export { expandPath };
15
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sources":["../../src/utils/path.ts"],"sourcesContent":["import os from 'node:os'\nimport path from 'node:path'\n\n/**\n * Expand tilde (~) to home directory in file paths\n */\nexport function expandPath(filePath: string): string {\n if (filePath.startsWith('~/')) {\n return path.join(os.homedir(), filePath.slice(2))\n }\n\n if (filePath === '~') {\n return os.homedir()\n }\n\n return filePath\n}\n"],"names":[],"mappings":";;;AAMO,SAAS,WAAW,QAAA,EAA0B;AACnD,EAAA,IAAI,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,EAAG;AAC7B,IAAA,OAAO,IAAA,CAAK,KAAK,EAAA,CAAG,OAAA,IAAW,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EAClD;AAEA,EAAA,IAAI,aAAa,GAAA,EAAK;AACpB,IAAA,OAAO,GAAG,OAAA,EAAQ;AAAA,EACpB;AAEA,EAAA,OAAO,QAAA;AACT;;;;"}
@@ -0,0 +1,40 @@
1
+ import { ArweaveSigner } from '@ar.io/sdk';
2
+ import { EthereumSigner } from '@ardrive/turbo-sdk';
3
+
4
+ function createSigner(sigType, deployKey) {
5
+ switch (sigType) {
6
+ case "ethereum": {
7
+ return {
8
+ signer: new EthereumSigner(deployKey),
9
+ token: "ethereum"
10
+ };
11
+ }
12
+ case "polygon": {
13
+ return {
14
+ signer: new EthereumSigner(deployKey),
15
+ token: "pol"
16
+ };
17
+ }
18
+ case "arweave": {
19
+ const jwk = JSON.parse(Buffer.from(deployKey, "base64").toString("utf8"));
20
+ return {
21
+ signer: new ArweaveSigner(jwk),
22
+ token: "arweave"
23
+ };
24
+ }
25
+ case "kyve": {
26
+ return {
27
+ signer: new EthereumSigner(deployKey),
28
+ token: "kyve"
29
+ };
30
+ }
31
+ default: {
32
+ throw new Error(
33
+ `Invalid sig-type provided: ${sigType}. Allowed values are 'arweave', 'ethereum', 'polygon', or 'kyve'.`
34
+ );
35
+ }
36
+ }
37
+ }
38
+
39
+ export { createSigner };
40
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sources":["../../src/utils/signer.ts"],"sourcesContent":["import { ArweaveSigner } from '@ar.io/sdk'\nimport { EthereumSigner } from '@ardrive/turbo-sdk'\n\nimport type { SignerType } from '../types/index.js'\n\nexport function createSigner(sigType: SignerType, deployKey: string) {\n switch (sigType) {\n case 'ethereum': {\n return {\n signer: new EthereumSigner(deployKey),\n token: 'ethereum' as const,\n }\n }\n\n case 'polygon': {\n return {\n signer: new EthereumSigner(deployKey),\n token: 'pol' as const,\n }\n }\n\n case 'arweave': {\n const jwk = JSON.parse(Buffer.from(deployKey, 'base64').toString('utf8'))\n return {\n signer: new ArweaveSigner(jwk),\n token: 'arweave' as const,\n }\n }\n\n case 'kyve': {\n return {\n signer: new EthereumSigner(deployKey),\n token: 'kyve' as const,\n }\n }\n\n default: {\n throw new Error(\n `Invalid sig-type provided: ${sigType}. Allowed values are 'arweave', 'ethereum', 'polygon', or 'kyve'.`,\n )\n }\n }\n}\n"],"names":[],"mappings":";;;AAKO,SAAS,YAAA,CAAa,SAAqB,SAAA,EAAmB;AACnE,EAAA,QAAQ,OAAA;AAAS,IACf,KAAK,UAAA,EAAY;AACf,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAI,cAAA,CAAe,SAAS,CAAA;AAAA,QACpC,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAI,cAAA,CAAe,SAAS,CAAA;AAAA,QACpC,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,IAEA,KAAK,SAAA,EAAW;AACd,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,WAAW,QAAQ,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AACxE,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAI,aAAA,CAAc,GAAG,CAAA;AAAA,QAC7B,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,IAEA,KAAK,MAAA,EAAQ;AACX,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,IAAI,cAAA,CAAe,SAAS,CAAA;AAAA,QACpC,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,IAEA,SAAS;AACP,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,8BAA8B,OAAO,CAAA,iEAAA;AAAA,OACvC;AAAA,IACF;AAAA;AAEJ;;;;"}
@@ -0,0 +1,78 @@
1
+ import { Readable } from 'node:stream';
2
+ import * as mime from 'mime-types';
3
+
4
+ async function uploadFile(turbo, filePath, options) {
5
+ const mimeType = mime.lookup(filePath) || "application/octet-stream";
6
+ const uploadResult = await turbo.uploadFile({
7
+ dataItemOpts: {
8
+ tags: [
9
+ {
10
+ name: "App-Name",
11
+ value: "Permaweb-Deploy"
12
+ },
13
+ {
14
+ name: "anchor",
15
+ value: (/* @__PURE__ */ new Date()).toISOString()
16
+ },
17
+ {
18
+ name: "Content-Type",
19
+ value: mimeType
20
+ }
21
+ ]
22
+ },
23
+ file: filePath,
24
+ ...options?.fundingMode && { fundingMode: options.fundingMode }
25
+ });
26
+ return uploadResult.id;
27
+ }
28
+ async function uploadFolder(turbo, folderPath, options) {
29
+ const uploadResult = await turbo.uploadFolder({
30
+ dataItemOpts: {
31
+ tags: [
32
+ {
33
+ name: "App-Name",
34
+ value: "Permaweb-Deploy"
35
+ },
36
+ {
37
+ name: "anchor",
38
+ value: (/* @__PURE__ */ new Date()).toISOString()
39
+ }
40
+ ]
41
+ },
42
+ folderPath,
43
+ ...options?.fundingMode && { fundingMode: options.fundingMode }
44
+ });
45
+ let txOrManifestId = uploadResult.manifestResponse?.id;
46
+ const origPaths = uploadResult.manifest?.paths || {};
47
+ const newPaths = {};
48
+ let replaceManifest = false;
49
+ for (const [key, value] of Object.entries(origPaths)) {
50
+ newPaths[key] = value;
51
+ if (key.endsWith("/index.html")) {
52
+ const newKey = key.replace(/\/index\.html$/, "");
53
+ newPaths[newKey] = value;
54
+ replaceManifest = true;
55
+ }
56
+ }
57
+ if (replaceManifest && uploadResult.manifest) {
58
+ console.info("Replacing manifest to support directory indexes");
59
+ const newManifest = { ...uploadResult.manifest, paths: newPaths };
60
+ const buffer = Buffer.from(JSON.stringify(newManifest));
61
+ const { id } = await turbo.uploadFile({
62
+ dataItemOpts: {
63
+ tags: [{ name: "Content-Type", value: "application/x.arweave-manifest+json" }]
64
+ },
65
+ fileSizeFactory: () => buffer.length,
66
+ fileStreamFactory: () => Readable.from(buffer),
67
+ ...options?.fundingMode && { fundingMode: options.fundingMode }
68
+ });
69
+ txOrManifestId = id;
70
+ }
71
+ if (!txOrManifestId) {
72
+ throw new Error("Failed to upload folder");
73
+ }
74
+ return txOrManifestId;
75
+ }
76
+
77
+ export { uploadFile, uploadFolder };
78
+ //# sourceMappingURL=uploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploader.js","sources":["../../src/utils/uploader.ts"],"sourcesContent":["import { Readable } from 'node:stream'\n\nimport { OnDemandFunding, type TurboAuthenticatedClient } from '@ardrive/turbo-sdk'\nimport * as mime from 'mime-types'\n\nexport async function uploadFile(\n turbo: TurboAuthenticatedClient,\n filePath: string,\n options?: {\n fundingMode?: OnDemandFunding\n },\n): Promise<string> {\n const mimeType = mime.lookup(filePath) || 'application/octet-stream'\n\n const uploadResult = await turbo.uploadFile({\n dataItemOpts: {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n {\n name: 'anchor',\n value: new Date().toISOString(),\n },\n {\n name: 'Content-Type',\n value: mimeType,\n },\n ],\n },\n file: filePath,\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n return uploadResult.id\n}\n\nexport async function uploadFolder(\n turbo: TurboAuthenticatedClient,\n folderPath: string,\n options?: {\n fundingMode?: OnDemandFunding\n },\n): Promise<string> {\n const uploadResult = await turbo.uploadFolder({\n dataItemOpts: {\n tags: [\n {\n name: 'App-Name',\n value: 'Permaweb-Deploy',\n },\n {\n name: 'anchor',\n value: new Date().toISOString(),\n },\n ],\n },\n folderPath,\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n\n let txOrManifestId = uploadResult.manifestResponse?.id\n\n // Make default folder paths work by adding extra path entries\n const origPaths = uploadResult.manifest?.paths || {}\n const newPaths: Record<string, { id: string }> = {}\n let replaceManifest = false\n\n for (const [key, value] of Object.entries(origPaths)) {\n newPaths[key] = value\n if (key.endsWith('/index.html')) {\n const newKey = key.replace(/\\/index\\.html$/, '')\n newPaths[newKey] = value\n replaceManifest = true\n }\n }\n\n if (replaceManifest && uploadResult.manifest) {\n console.info('Replacing manifest to support directory indexes')\n const newManifest = { ...uploadResult.manifest, paths: newPaths }\n const buffer = Buffer.from(JSON.stringify(newManifest))\n const { id } = await turbo.uploadFile({\n dataItemOpts: {\n tags: [{ name: 'Content-Type', value: 'application/x.arweave-manifest+json' }],\n },\n fileSizeFactory: () => buffer.length,\n fileStreamFactory: () => Readable.from(buffer),\n ...(options?.fundingMode && { fundingMode: options.fundingMode }),\n })\n txOrManifestId = id\n }\n\n if (!txOrManifestId) {\n throw new Error('Failed to upload folder')\n }\n\n return txOrManifestId\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import fs from 'node:fs';
2
+ import { ARIO_MAINNET_PROCESS_ID, ARIO_TESTNET_PROCESS_ID } from '@ar.io/sdk';
3
+ import { TTL_MIN, TTL_MAX, ARWEAVE_TX_ID_REGEX } from './constants.js';
4
+ import { expandPath } from './path.js';
5
+
6
+ function validateTtl(value) {
7
+ const num = Number.parseInt(value, 10);
8
+ if (Number.isNaN(num)) {
9
+ return "TTL must be a valid number";
10
+ }
11
+ if (num < TTL_MIN || num > TTL_MAX) {
12
+ return `TTL must be between ${TTL_MIN} and ${TTL_MAX} seconds`;
13
+ }
14
+ return true;
15
+ }
16
+ function validateUndername(value) {
17
+ if (value.length === 0) {
18
+ return "Undername must not be empty";
19
+ }
20
+ return true;
21
+ }
22
+ function validateArioProcess(value) {
23
+ if (value === "mainnet" || value === "testnet") {
24
+ return true;
25
+ }
26
+ if (!ARWEAVE_TX_ID_REGEX.test(value)) {
27
+ return 'ARIO process must be a valid Arweave transaction ID, "mainnet", or "testnet"';
28
+ }
29
+ return true;
30
+ }
31
+ function validateFileExists(value) {
32
+ const filePath = expandPath(value);
33
+ if (!fs.existsSync(filePath)) {
34
+ return `File ${value} does not exist`;
35
+ }
36
+ return true;
37
+ }
38
+ function validateFolderExists(value) {
39
+ const folderPath = expandPath(value);
40
+ if (!fs.existsSync(folderPath)) {
41
+ return `Folder ${value} does not exist`;
42
+ }
43
+ return true;
44
+ }
45
+ function resolveArioProcess(value) {
46
+ if (value === "mainnet") {
47
+ return ARIO_MAINNET_PROCESS_ID;
48
+ }
49
+ if (value === "testnet") {
50
+ return ARIO_TESTNET_PROCESS_ID;
51
+ }
52
+ return value;
53
+ }
54
+ function validateArnsName(value) {
55
+ if (value.length === 0) {
56
+ return "ArNS name is required";
57
+ }
58
+ return true;
59
+ }
60
+
61
+ export { resolveArioProcess, validateArioProcess, validateArnsName, validateFileExists, validateFolderExists, validateTtl, validateUndername };
62
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sources":["../../src/utils/validators.ts"],"sourcesContent":["import fs from 'node:fs'\n\nimport { ARIO_MAINNET_PROCESS_ID, ARIO_TESTNET_PROCESS_ID } from '@ar.io/sdk'\n\nimport { ARWEAVE_TX_ID_REGEX, TTL_MAX, TTL_MIN } from './constants.js'\nimport { expandPath } from './path.js'\n\n/**\n * Validate TTL seconds\n */\nexport function validateTtl(value: string): string | true {\n const num = Number.parseInt(value, 10)\n if (Number.isNaN(num)) {\n return 'TTL must be a valid number'\n }\n\n if (num < TTL_MIN || num > TTL_MAX) {\n return `TTL must be between ${TTL_MIN} and ${TTL_MAX} seconds`\n }\n\n return true\n}\n\n/**\n * Validate undername\n */\nexport function validateUndername(value: string): string | true {\n if (value.length === 0) {\n return 'Undername must not be empty'\n }\n\n return true\n}\n\n/**\n * Validate ARIO process ID\n */\nexport function validateArioProcess(value: string): string | true {\n // Allow shorthand values\n if (value === 'mainnet' || value === 'testnet') {\n return true\n }\n\n if (!ARWEAVE_TX_ID_REGEX.test(value)) {\n return 'ARIO process must be a valid Arweave transaction ID, \"mainnet\", or \"testnet\"'\n }\n\n return true\n}\n\n/**\n * Validate file path exists\n */\nexport function validateFileExists(value: string): string | true {\n const filePath = expandPath(value)\n if (!fs.existsSync(filePath)) {\n return `File ${value} does not exist`\n }\n\n return true\n}\n\n/**\n * Validate folder path exists\n */\nexport function validateFolderExists(value: string): string | true {\n const folderPath = expandPath(value)\n if (!fs.existsSync(folderPath)) {\n return `Folder ${value} does not exist`\n }\n\n return true\n}\n\n/**\n * Resolve ARIO process from shorthand to actual ID\n */\nexport function resolveArioProcess(value: string): string {\n if (value === 'mainnet') {\n return ARIO_MAINNET_PROCESS_ID\n }\n\n if (value === 'testnet') {\n return ARIO_TESTNET_PROCESS_ID\n }\n\n return value\n}\n\n/**\n * Validate ArNS name is not empty\n */\nexport function validateArnsName(value: string): string | true {\n if (value.length === 0) {\n return 'ArNS name is required'\n }\n\n return true\n}\n"],"names":[],"mappings":";;;;;AAUO,SAAS,YAAY,KAAA,EAA8B;AACxD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AACrC,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG;AACrB,IAAA,OAAO,4BAAA;AAAA,EACT;AAEA,EAAA,IAAI,GAAA,GAAM,OAAA,IAAW,GAAA,GAAM,OAAA,EAAS;AAClC,IAAA,OAAO,CAAA,oBAAA,EAAuB,OAAO,CAAA,KAAA,EAAQ,OAAO,CAAA,QAAA,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,kBAAkB,KAAA,EAA8B;AAC9D,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,6BAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,oBAAoB,KAAA,EAA8B;AAEhE,EAAA,IAAI,KAAA,KAAU,SAAA,IAAa,KAAA,KAAU,SAAA,EAAW;AAC9C,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,IAAA,OAAO,8EAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,mBAAmB,KAAA,EAA8B;AAC/D,EAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,EAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC5B,IAAA,OAAO,QAAQ,KAAK,CAAA,eAAA,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,qBAAqB,KAAA,EAA8B;AACjE,EAAA,MAAM,UAAA,GAAa,WAAW,KAAK,CAAA;AACnC,EAAA,IAAI,CAAC,EAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC9B,IAAA,OAAO,UAAU,KAAK,CAAA,eAAA,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,IAAA;AACT;AAKO,SAAS,mBAAmB,KAAA,EAAuB;AACxD,EAAA,IAAI,UAAU,SAAA,EAAW;AACvB,IAAA,OAAO,uBAAA;AAAA,EACT;AAEA,EAAA,IAAI,UAAU,SAAA,EAAW;AACvB,IAAA,OAAO,uBAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAKO,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO,uBAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,38 +1,108 @@
1
1
  {
2
- "name": "permaweb-deploy",
3
- "version": "2.5.0",
4
- "description": "Permaweb App Deployment Package",
5
- "main": "index.js",
6
- "scripts": {
7
- "build": "babel src --out-dir dist"
8
- },
9
- "bin": {
10
- "permaweb-deploy": "./dist/index.js"
11
- },
12
- "dependencies": {
13
- "@ar.io/sdk": "^3.10.1",
14
- "@ardrive/turbo-sdk": "^1.28.2",
15
- "@permaweb/aoconnect": "^0.0.85",
16
- "mime-types": "^3.0.1",
17
- "yargs": "17.7.2"
18
- },
19
- "devDependencies": {
20
- "@babel/cli": "^7.23.9",
21
- "@babel/core": "^7.23.9",
22
- "@babel/eslint-parser": "^7.23.10",
23
- "@babel/preset-env": "^7.23.9",
24
- "eslint": "^8.35.0",
25
- "eslint-plugin-import": "^2.27.5",
26
- "eslint-plugin-simple-import-sort": "^10.0.0"
27
- },
28
- "repository": {
29
- "type": "git",
30
- "url": "git+https://github.com/permaweb/permaweb-deploy.git"
31
- },
32
- "author": "NickJ202",
33
- "license": "ISC",
34
- "bugs": {
35
- "url": "https://github.com/permaweb/permaweb-deploy/issues"
36
- },
37
- "homepage": "https://github.com/permaweb/permaweb-deploy#readme"
38
- }
2
+ "name": "permaweb-deploy",
3
+ "version": "3.0.0",
4
+ "description": "Permaweb App Deployment Package",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "bin": {
9
+ "permaweb-deploy": "./bin/run.js"
10
+ },
11
+ "oclif": {
12
+ "bin": "permaweb-deploy",
13
+ "dirname": "permaweb-deploy",
14
+ "commands": "./dist/commands",
15
+ "topicSeparator": " ",
16
+ "default": "interactive",
17
+ "topics": {
18
+ "deploy": {
19
+ "description": "Deploy to the permaweb"
20
+ }
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "bin",
26
+ "oclif.manifest.json"
27
+ ],
28
+ "dependencies": {
29
+ "@ar.io/sdk": "^3.10.1",
30
+ "@ardrive/turbo-sdk": "^1.32.0",
31
+ "@inquirer/prompts": "^7.2.0",
32
+ "@oclif/core": "^4.0.30",
33
+ "@permaweb/aoconnect": "^0.0.85",
34
+ "boxen": "^8.0.1",
35
+ "chalk": "^5.3.0",
36
+ "cli-table3": "^0.6.5",
37
+ "mime-types": "^3.0.1",
38
+ "ora": "^8.1.1"
39
+ },
40
+ "devDependencies": {
41
+ "@changesets/cli": "^2.27.10",
42
+ "@commitlint/cli": "^19.6.0",
43
+ "@commitlint/config-conventional": "^19.6.0",
44
+ "@oclif/prettier-config": "^0.2.1",
45
+ "@oclif/test": "^4.1.14",
46
+ "@types/mime-types": "^2.1.4",
47
+ "@types/node": "^22.10.2",
48
+ "@typescript-eslint/eslint-plugin": "^8.18.1",
49
+ "@typescript-eslint/parser": "^8.18.1",
50
+ "@vitest/coverage-v8": "^2.1.8",
51
+ "eslint": "^8.57.1",
52
+ "eslint-config-oclif": "^5.2.1",
53
+ "eslint-config-oclif-typescript": "^3.1.12",
54
+ "eslint-config-prettier": "^9.1.0",
55
+ "eslint-import-resolver-typescript": "^3.7.0",
56
+ "eslint-plugin-import": "^2.31.0",
57
+ "eslint-plugin-prettier": "^5.2.1",
58
+ "eslint-plugin-simple-import-sort": "^12.1.1",
59
+ "husky": "^9.1.7",
60
+ "msw": "^2.11.3",
61
+ "openapi-typescript": "^7.9.1",
62
+ "prettier": "^3.4.2",
63
+ "tsx": "^4.19.2",
64
+ "typescript": "^5.7.2",
65
+ "vite": "^6.0.5",
66
+ "vite-plugin-dts": "^4.3.0",
67
+ "vite-tsconfig-paths": "^5.1.4",
68
+ "vitest": "^2.1.8"
69
+ },
70
+ "publishConfig": {
71
+ "access": "public",
72
+ "registry": "https://registry.npmjs.org/"
73
+ },
74
+ "engines": {
75
+ "node": ">=18.0.0"
76
+ },
77
+ "repository": {
78
+ "type": "git",
79
+ "url": "git+https://github.com/permaweb/permaweb-deploy.git"
80
+ },
81
+ "author": "NickJ202",
82
+ "license": "ISC",
83
+ "bugs": {
84
+ "url": "https://github.com/permaweb/permaweb-deploy/issues"
85
+ },
86
+ "homepage": "https://github.com/permaweb/permaweb-deploy#readme",
87
+ "scripts": {
88
+ "build": "vite build && tsc --emitDeclarationOnly",
89
+ "dev": "./bin/dev.js",
90
+ "test": "vitest",
91
+ "test:run": "vitest run",
92
+ "test:unit": "vitest run src",
93
+ "test:e2e": "vitest run tests/e2e",
94
+ "test:coverage": "vitest run --coverage",
95
+ "lint": "eslint . --ext .ts",
96
+ "lint:fix": "eslint . --ext .ts --fix",
97
+ "format": "prettier --write .",
98
+ "format:check": "prettier --check .",
99
+ "generate:types": "openapi-typescript tests/fixtures/upload-service.openapi.yaml -o tests/types/upload-service.ts && openapi-typescript tests/fixtures/payment-service.openapi.yaml -o tests/types/payment-service.ts",
100
+ "changeset": "changeset",
101
+ "version": "changeset version",
102
+ "version:alpha": "changeset version --snapshot alpha",
103
+ "version:snapshot": "changeset version --snapshot rc",
104
+ "release": "changeset publish",
105
+ "release:alpha": "changeset publish --tag alpha",
106
+ "release:snapshot": "changeset publish --tag rc --no-git-tag"
107
+ }
108
+ }
package/.babelrc DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "presets": ["@babel/preset-env"]
3
- }
package/.editorconfig DELETED
@@ -1,4 +0,0 @@
1
- [*]
2
- max_line_length = 120
3
- indent_style = tab
4
- quote_type = single