alchemy 0.1.16 → 0.1.18

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 (250) hide show
  1. package/lib/$.d.ts +12 -0
  2. package/lib/$.d.ts.map +1 -0
  3. package/lib/$.js +42 -0
  4. package/lib/$.js.map +1 -0
  5. package/lib/alchemize.d.ts +47 -0
  6. package/lib/alchemize.d.ts.map +1 -0
  7. package/lib/alchemize.js +116 -0
  8. package/lib/alchemize.js.map +1 -0
  9. package/lib/apply.d.ts +23 -0
  10. package/lib/apply.d.ts.map +1 -1
  11. package/lib/apply.js +4 -0
  12. package/lib/apply.js.map +1 -1
  13. package/lib/aws/account-id.d.ts +5 -0
  14. package/lib/aws/account-id.d.ts.map +1 -0
  15. package/lib/aws/account-id.js +10 -0
  16. package/lib/aws/account-id.js.map +1 -0
  17. package/lib/aws/bucket.d.ts +21 -0
  18. package/lib/aws/bucket.d.ts.map +1 -0
  19. package/lib/aws/bucket.js +114 -0
  20. package/lib/aws/bucket.js.map +1 -0
  21. package/lib/aws/function.d.ts +53 -0
  22. package/lib/aws/function.d.ts.map +1 -0
  23. package/lib/aws/function.js +195 -0
  24. package/lib/aws/function.js.map +1 -0
  25. package/lib/aws/index.d.ts +9 -0
  26. package/lib/aws/index.d.ts.map +1 -0
  27. package/lib/aws/index.js +9 -0
  28. package/lib/aws/index.js.map +1 -0
  29. package/lib/aws/oidc/github-oidc-provider.d.ts +11 -0
  30. package/lib/aws/oidc/github-oidc-provider.d.ts.map +1 -0
  31. package/lib/aws/oidc/github-oidc-provider.js +22 -0
  32. package/lib/aws/oidc/github-oidc-provider.js.map +1 -0
  33. package/lib/aws/oidc/index.d.ts +3 -0
  34. package/lib/aws/oidc/index.d.ts.map +1 -0
  35. package/lib/aws/oidc/index.js +3 -0
  36. package/lib/aws/oidc/index.js.map +1 -0
  37. package/lib/aws/oidc/oidc-provider.d.ts +60 -0
  38. package/lib/aws/oidc/oidc-provider.d.ts.map +1 -0
  39. package/lib/aws/oidc/oidc-provider.js +140 -0
  40. package/lib/aws/oidc/oidc-provider.js.map +1 -0
  41. package/lib/aws/policy.d.ts +46 -0
  42. package/lib/aws/policy.d.ts.map +1 -0
  43. package/lib/aws/policy.js +139 -0
  44. package/lib/aws/policy.js.map +1 -0
  45. package/lib/aws/queue.d.ts +62 -0
  46. package/lib/aws/queue.d.ts.map +1 -0
  47. package/lib/aws/queue.js +167 -0
  48. package/lib/aws/queue.js.map +1 -0
  49. package/lib/aws/role.d.ts +27 -0
  50. package/lib/aws/role.d.ts.map +1 -0
  51. package/lib/aws/role.js +197 -0
  52. package/lib/aws/role.js.map +1 -0
  53. package/lib/aws/ses.d.ts +75 -0
  54. package/lib/aws/ses.d.ts.map +1 -0
  55. package/lib/aws/ses.js +189 -0
  56. package/lib/aws/ses.js.map +1 -0
  57. package/lib/aws/table.d.ts +26 -0
  58. package/lib/aws/table.d.ts.map +1 -0
  59. package/lib/aws/table.js +154 -0
  60. package/lib/aws/table.js.map +1 -0
  61. package/lib/cloudflare/api.d.ts +88 -0
  62. package/lib/cloudflare/api.d.ts.map +1 -0
  63. package/lib/cloudflare/api.js +184 -0
  64. package/lib/cloudflare/api.js.map +1 -0
  65. package/lib/cloudflare/asset-manifest.d.ts +15 -0
  66. package/lib/cloudflare/asset-manifest.d.ts.map +1 -0
  67. package/lib/cloudflare/asset-manifest.js +2 -0
  68. package/lib/cloudflare/asset-manifest.js.map +1 -0
  69. package/lib/cloudflare/auth.d.ts +52 -0
  70. package/lib/cloudflare/auth.d.ts.map +1 -0
  71. package/lib/cloudflare/auth.js +114 -0
  72. package/lib/cloudflare/auth.js.map +1 -0
  73. package/lib/cloudflare/bindings.d.ts +261 -0
  74. package/lib/cloudflare/bindings.d.ts.map +1 -0
  75. package/lib/cloudflare/bindings.js +2 -0
  76. package/lib/cloudflare/bindings.js.map +1 -0
  77. package/lib/cloudflare/bound.d.ts +8 -0
  78. package/lib/cloudflare/bound.d.ts.map +1 -0
  79. package/lib/cloudflare/bound.js +2 -0
  80. package/lib/cloudflare/bound.js.map +1 -0
  81. package/lib/cloudflare/bucket.d.ts +54 -0
  82. package/lib/cloudflare/bucket.d.ts.map +1 -0
  83. package/lib/cloudflare/bucket.js +120 -0
  84. package/lib/cloudflare/bucket.js.map +1 -0
  85. package/lib/cloudflare/durable-object-namespace.d.ts +20 -0
  86. package/lib/cloudflare/durable-object-namespace.d.ts.map +1 -0
  87. package/lib/cloudflare/durable-object-namespace.js +21 -0
  88. package/lib/cloudflare/durable-object-namespace.js.map +1 -0
  89. package/lib/cloudflare/generate-asset-manifest.d.ts +3 -0
  90. package/lib/cloudflare/generate-asset-manifest.d.ts.map +1 -0
  91. package/lib/cloudflare/generate-asset-manifest.js +69 -0
  92. package/lib/cloudflare/generate-asset-manifest.js.map +1 -0
  93. package/lib/cloudflare/index.d.ts +8 -0
  94. package/lib/cloudflare/index.d.ts.map +1 -0
  95. package/lib/cloudflare/index.js +8 -0
  96. package/lib/cloudflare/index.js.map +1 -0
  97. package/lib/cloudflare/kv-namespace.d.ts +64 -0
  98. package/lib/cloudflare/kv-namespace.d.ts.map +1 -0
  99. package/lib/cloudflare/kv-namespace.js +114 -0
  100. package/lib/cloudflare/kv-namespace.js.map +1 -0
  101. package/lib/cloudflare/state.d.ts +83 -0
  102. package/lib/cloudflare/state.d.ts.map +1 -0
  103. package/lib/cloudflare/state.js +109 -0
  104. package/lib/cloudflare/state.js.map +1 -0
  105. package/lib/cloudflare/static-site-router.d.ts +19 -0
  106. package/lib/cloudflare/static-site-router.d.ts.map +1 -0
  107. package/lib/cloudflare/static-site-router.js +110 -0
  108. package/lib/cloudflare/static-site-router.js.map +1 -0
  109. package/lib/cloudflare/static-site.d.ts +166 -0
  110. package/lib/cloudflare/static-site.d.ts.map +1 -0
  111. package/lib/cloudflare/static-site.js +161 -0
  112. package/lib/cloudflare/static-site.js.map +1 -0
  113. package/lib/cloudflare/types.d.ts +52 -0
  114. package/lib/cloudflare/types.d.ts.map +1 -0
  115. package/lib/cloudflare/types.js +21 -0
  116. package/lib/cloudflare/types.js.map +1 -0
  117. package/lib/cloudflare/upload-asset-manifest.d.ts +12 -0
  118. package/lib/cloudflare/upload-asset-manifest.d.ts.map +1 -0
  119. package/lib/cloudflare/upload-asset-manifest.js +55 -0
  120. package/lib/cloudflare/upload-asset-manifest.js.map +1 -0
  121. package/lib/cloudflare/worker-metadata.d.ts +130 -0
  122. package/lib/cloudflare/worker-metadata.d.ts.map +1 -0
  123. package/lib/cloudflare/worker-metadata.js +2 -0
  124. package/lib/cloudflare/worker-metadata.js.map +1 -0
  125. package/lib/cloudflare/worker-migration.d.ts +110 -0
  126. package/lib/cloudflare/worker-migration.d.ts.map +1 -0
  127. package/lib/cloudflare/worker-migration.js +11 -0
  128. package/lib/cloudflare/worker-migration.js.map +1 -0
  129. package/lib/cloudflare/worker.d.ts +114 -0
  130. package/lib/cloudflare/worker.d.ts.map +1 -0
  131. package/lib/cloudflare/worker.js +419 -0
  132. package/lib/cloudflare/worker.js.map +1 -0
  133. package/lib/destroy.d.ts +19 -0
  134. package/lib/encrypt.d.ts +17 -0
  135. package/lib/encrypt.d.ts.map +1 -0
  136. package/lib/encrypt.js +45 -0
  137. package/lib/encrypt.js.map +1 -0
  138. package/lib/error.d.ts +2 -0
  139. package/lib/error.d.ts.map +1 -0
  140. package/lib/error.js +13 -0
  141. package/lib/error.js.map +1 -0
  142. package/lib/esbuild.d.ts +152 -0
  143. package/lib/esbuild.d.ts.map +1 -0
  144. package/lib/esbuild.js +67 -0
  145. package/lib/esbuild.js.map +1 -0
  146. package/lib/fs.d.ts +12 -0
  147. package/lib/fs.d.ts.map +1 -0
  148. package/lib/fs.js +41 -0
  149. package/lib/fs.js.map +1 -0
  150. package/lib/github/client.d.ts +34 -0
  151. package/lib/github/client.d.ts.map +1 -0
  152. package/lib/github/client.js +91 -0
  153. package/lib/github/client.js.map +1 -0
  154. package/lib/github/index.d.ts +2 -0
  155. package/lib/github/index.d.ts.map +1 -0
  156. package/lib/github/index.js +2 -0
  157. package/lib/github/index.js.map +1 -0
  158. package/lib/github/secret.d.ts +47 -0
  159. package/lib/github/secret.d.ts.map +1 -0
  160. package/lib/github/secret.js +99 -0
  161. package/lib/github/secret.js.map +1 -0
  162. package/lib/global.d.ts +16 -0
  163. package/lib/global.d.ts.map +1 -0
  164. package/lib/global.js +42 -0
  165. package/lib/global.js.map +1 -0
  166. package/lib/index.d.ts +11 -0
  167. package/lib/index.d.ts.map +1 -0
  168. package/lib/index.js +10 -0
  169. package/lib/index.js.map +1 -0
  170. package/lib/input.d.ts +7 -0
  171. package/lib/input.d.ts.map +1 -0
  172. package/lib/input.js +2 -0
  173. package/lib/input.js.map +1 -0
  174. package/lib/main.d.ts +3 -0
  175. package/lib/main.d.ts.map +1 -0
  176. package/lib/main.js +32 -0
  177. package/lib/main.js.map +1 -0
  178. package/lib/output.d.ts +25 -0
  179. package/lib/output.d.ts.map +1 -0
  180. package/lib/output.js +23 -0
  181. package/lib/output.js.map +1 -0
  182. package/lib/print.d.ts +7 -0
  183. package/lib/print.d.ts.map +1 -0
  184. package/lib/print.js +10 -0
  185. package/lib/print.js.map +1 -0
  186. package/lib/resource.d.ts +71 -0
  187. package/lib/resource.d.ts.map +1 -0
  188. package/lib/resource.js +276 -0
  189. package/lib/resource.js.map +1 -0
  190. package/lib/scope.d.ts +18 -0
  191. package/lib/scope.d.ts.map +1 -0
  192. package/lib/scope.js +30 -0
  193. package/lib/scope.js.map +1 -0
  194. package/lib/secret.d.ts +12 -0
  195. package/lib/secret.d.ts.map +1 -0
  196. package/lib/secret.js +30 -0
  197. package/lib/secret.js.map +1 -0
  198. package/lib/serde.d.ts +3 -0
  199. package/lib/serde.d.ts.map +1 -0
  200. package/lib/serde.js +37 -0
  201. package/lib/serde.js.map +1 -0
  202. package/lib/slug.d.ts +2 -0
  203. package/lib/slug.d.ts.map +1 -0
  204. package/lib/slug.js +4 -0
  205. package/lib/slug.js.map +1 -0
  206. package/lib/state.d.ts +40 -0
  207. package/lib/state.d.ts.map +1 -0
  208. package/lib/state.js +74 -0
  209. package/lib/state.js.map +1 -0
  210. package/lib/stripe/index.d.ts +4 -0
  211. package/lib/stripe/index.d.ts.map +1 -0
  212. package/lib/stripe/index.js +4 -0
  213. package/lib/stripe/index.js.map +1 -0
  214. package/lib/stripe/price.d.ts +109 -0
  215. package/lib/stripe/price.d.ts.map +1 -0
  216. package/lib/stripe/price.js +112 -0
  217. package/lib/stripe/price.js.map +1 -0
  218. package/lib/stripe/product.d.ts +86 -0
  219. package/lib/stripe/product.d.ts.map +1 -0
  220. package/lib/stripe/product.js +90 -0
  221. package/lib/stripe/product.js.map +1 -0
  222. package/lib/stripe/webhook.d.ts +73 -0
  223. package/lib/stripe/webhook.d.ts.map +1 -0
  224. package/lib/stripe/webhook.js +94 -0
  225. package/lib/stripe/webhook.js.map +1 -0
  226. package/lib/utils/content-type.d.ts +8 -0
  227. package/lib/utils/content-type.d.ts.map +1 -0
  228. package/lib/utils/content-type.js +41 -0
  229. package/lib/utils/content-type.js.map +1 -0
  230. package/lib/utils/retry.d.ts +13 -0
  231. package/lib/utils/retry.d.ts.map +1 -0
  232. package/lib/utils/retry.js +32 -0
  233. package/lib/utils/retry.js.map +1 -0
  234. package/package.json +3 -6
  235. package/src/alchemize.ts +9 -0
  236. package/src/apply.ts +3 -0
  237. package/src/cloudflare/bindings.ts +9 -1
  238. package/src/cloudflare/bound.ts +18 -0
  239. package/src/cloudflare/bucket.ts +240 -0
  240. package/src/cloudflare/index.ts +1 -0
  241. package/src/cloudflare/static-site.ts +14 -2
  242. package/src/cloudflare/worker.ts +84 -59
  243. package/src/encrypt.ts +79 -0
  244. package/src/github/secret.ts +34 -33
  245. package/src/index.ts +1 -0
  246. package/src/input.ts +13 -10
  247. package/src/output.ts +13 -9
  248. package/src/secret.ts +41 -0
  249. package/src/serde.ts +46 -0
  250. package/src/state.ts +3 -2
@@ -0,0 +1,152 @@
1
+ import * as esbuild from "esbuild";
2
+ export interface BundleProps {
3
+ /**
4
+ * Entry point for the bundle
5
+ */
6
+ entryPoint: string;
7
+ /**
8
+ * Output directory for the bundle
9
+ */
10
+ outdir?: string;
11
+ /**
12
+ * Output filename for the bundle
13
+ */
14
+ outfile?: string;
15
+ /**
16
+ * Bundle format (iife, cjs, esm)
17
+ */
18
+ format?: "iife" | "cjs" | "esm";
19
+ /**
20
+ * Target environment (e.g., 'node16', 'es2020')
21
+ */
22
+ target?: string | string[];
23
+ /**
24
+ * Whether to minify the output
25
+ */
26
+ minify?: boolean;
27
+ /**
28
+ * Whether to generate sourcemaps
29
+ */
30
+ sourcemap?: boolean | "inline" | "external" | "both";
31
+ /**
32
+ * External packages to exclude from bundle
33
+ */
34
+ external?: string[];
35
+ /**
36
+ * Platform to target (browser, node, neutral)
37
+ */
38
+ platform?: "browser" | "node" | "neutral";
39
+ /**
40
+ * Additional esbuild options
41
+ */
42
+ options?: Partial<esbuild.BuildOptions>;
43
+ }
44
+ export interface BundleOutput {
45
+ /**
46
+ * Path to the bundled file
47
+ */
48
+ path: string;
49
+ /**
50
+ * SHA-256 hash of the bundle contents
51
+ */
52
+ hash: string;
53
+ }
54
+ declare const Bundle_base: import("./resource").Provider<string, [props: BundleProps], BundleOutput>;
55
+ export declare class Bundle extends Bundle_base {
56
+ /**
57
+ * Get the metafile from the last build
58
+ */
59
+ getMetafile(ctx: {
60
+ get<T>(key: string): Promise<T | undefined>;
61
+ }): Promise<esbuild.Metafile | undefined>;
62
+ /**
63
+ * Get the hash from the last build
64
+ */
65
+ getHash(ctx: {
66
+ get<T>(key: string): Promise<T | undefined>;
67
+ }): Promise<string | undefined>;
68
+ }
69
+ export declare function bundle(props: BundleProps): Promise<esbuild.BuildResult<{
70
+ bundle: boolean;
71
+ splitting?: boolean;
72
+ preserveSymlinks?: boolean;
73
+ outfile: string;
74
+ metafile: boolean;
75
+ outdir?: string;
76
+ outbase?: string;
77
+ external: string[];
78
+ packages?: "bundle" | "external";
79
+ alias?: Record<string, string>;
80
+ loader?: {
81
+ [ext: string]: esbuild.Loader;
82
+ };
83
+ resolveExtensions?: string[];
84
+ mainFields?: string[];
85
+ conditions?: string[];
86
+ write: boolean;
87
+ allowOverwrite?: boolean;
88
+ tsconfig?: string;
89
+ outExtension?: {
90
+ [ext: string]: string;
91
+ };
92
+ publicPath?: string;
93
+ entryNames?: string;
94
+ chunkNames?: string;
95
+ assetNames?: string;
96
+ inject?: string[];
97
+ banner?: {
98
+ [type: string]: string;
99
+ };
100
+ footer?: {
101
+ [type: string]: string;
102
+ };
103
+ entryPoints: string[] | Record<string, string> | {
104
+ in: string;
105
+ out: string;
106
+ }[];
107
+ stdin?: esbuild.StdinOptions;
108
+ plugins?: esbuild.Plugin[];
109
+ absWorkingDir?: string;
110
+ nodePaths?: string[];
111
+ sourcemap: boolean | "linked" | "inline" | "external" | "both";
112
+ legalComments?: "none" | "inline" | "eof" | "linked" | "external";
113
+ sourceRoot?: string;
114
+ sourcesContent?: boolean;
115
+ format: esbuild.Format;
116
+ globalName?: string;
117
+ target: string | string[];
118
+ supported?: Record<string, boolean>;
119
+ platform: esbuild.Platform;
120
+ mangleProps?: RegExp;
121
+ reserveProps?: RegExp;
122
+ mangleQuoted?: boolean;
123
+ mangleCache?: Record<string, string | false>;
124
+ drop?: esbuild.Drop[];
125
+ dropLabels?: string[];
126
+ minify: boolean;
127
+ minifyWhitespace?: boolean;
128
+ minifyIdentifiers?: boolean;
129
+ minifySyntax?: boolean;
130
+ lineLimit?: number;
131
+ charset?: esbuild.Charset;
132
+ treeShaking?: boolean;
133
+ ignoreAnnotations?: boolean;
134
+ jsx?: "transform" | "preserve" | "automatic";
135
+ jsxFactory?: string;
136
+ jsxFragment?: string;
137
+ jsxImportSource?: string;
138
+ jsxDev?: boolean;
139
+ jsxSideEffects?: boolean;
140
+ define?: {
141
+ [key: string]: string;
142
+ };
143
+ pure?: string[];
144
+ keepNames?: boolean;
145
+ color?: boolean;
146
+ logLevel?: esbuild.LogLevel;
147
+ logLimit?: number;
148
+ logOverride?: Record<string, esbuild.LogLevel>;
149
+ tsconfigRaw?: string | esbuild.TsconfigRaw;
150
+ }>>;
151
+ export {};
152
+ //# sourceMappingURL=esbuild.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esbuild.d.ts","sourceRoot":"","sources":["../src/esbuild.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAMnC,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IAChC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;IACrD;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;;AAED,qBAAa,MAAO,SAAQ,WAkC3B;IACC;;OAEG;IACU,WAAW,CAAC,GAAG,EAAE;QAC5B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC7C;IAID;;OAEG;IACU,OAAO,CAAC,GAAG,EAAE;QAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAA;KAAE;CAG1E;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiB9C"}
package/lib/esbuild.js ADDED
@@ -0,0 +1,67 @@
1
+ import * as esbuild from "esbuild";
2
+ import crypto from "node:crypto";
3
+ import fs from "node:fs";
4
+ import path from "node:path";
5
+ import { Resource } from "./resource";
6
+ export class Bundle extends Resource("esbuild::Bundle", {
7
+ alwaysUpdate: true,
8
+ }, async (ctx, props) => {
9
+ // Determine output path
10
+ const outputPath = getOutputPath(props);
11
+ // Ensure output directory exists
12
+ await fs.promises.mkdir(path.dirname(outputPath), { recursive: true });
13
+ if (ctx.event === "delete") {
14
+ await fs.promises.unlink(outputPath).catch(() => { });
15
+ // Also clean up sourcemap if it exists
16
+ await fs.promises.unlink(outputPath + ".map").catch(() => { });
17
+ return { path: outputPath, hash: "" };
18
+ }
19
+ const result = await bundle(props);
20
+ // Calculate hash of the output
21
+ const contents = await fs.promises.readFile(outputPath);
22
+ const hash = crypto.createHash("sha256").update(contents).digest("hex");
23
+ // Store metadata in context
24
+ await ctx.set("metafile", result.metafile);
25
+ await ctx.set("hash", hash);
26
+ // Return output info
27
+ return {
28
+ path: outputPath,
29
+ hash,
30
+ };
31
+ }) {
32
+ /**
33
+ * Get the metafile from the last build
34
+ */
35
+ async getMetafile(ctx) {
36
+ return ctx.get("metafile");
37
+ }
38
+ /**
39
+ * Get the hash from the last build
40
+ */
41
+ async getHash(ctx) {
42
+ return ctx.get("hash");
43
+ }
44
+ }
45
+ export async function bundle(props) {
46
+ const outputPath = getOutputPath(props);
47
+ // Build the bundle
48
+ return await esbuild.build({
49
+ entryPoints: [props.entryPoint],
50
+ outfile: outputPath,
51
+ bundle: true,
52
+ format: props.format,
53
+ target: props.target,
54
+ minify: props.minify,
55
+ sourcemap: props.sourcemap,
56
+ external: props.external,
57
+ platform: props.platform,
58
+ metafile: true,
59
+ write: true,
60
+ ...props.options,
61
+ });
62
+ }
63
+ function getOutputPath(props) {
64
+ return (props.outfile ||
65
+ path.join(props.outdir || "dist", path.basename(props.entryPoint, path.extname(props.entryPoint)) + ".js"));
66
+ }
67
+ //# sourceMappingURL=esbuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esbuild.js","sourceRoot":"","sources":["../src/esbuild.ts"],"names":[],"mappings":"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"}
package/lib/fs.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ declare const File_base: import("./resource").Provider<"fs::File", [filePath: string, content: string], string>;
2
+ export declare class File extends File_base {
3
+ }
4
+ declare const Folder_base: import("./resource").Provider<"fs::Folder", [dirPath: string], {
5
+ path: string;
6
+ }>;
7
+ export declare class Folder extends Folder_base {
8
+ file(filePath: string, content: string): File;
9
+ }
10
+ export declare function rm(filePath: string): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":";AAMA,qBAAa,IAAK,SAAQ,SAWzB;CAAG;;UAI4C,MAAM;;AAFtD,qBAAa,MAAO,SAAQ,WAa3B;IACQ,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAG9C;AAED,wBAAsB,EAAE,CAAC,QAAQ,EAAE,MAAM,iBAQxC"}
package/lib/fs.js ADDED
@@ -0,0 +1,41 @@
1
+ import fs from "node:fs";
2
+ import { unlink } from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { ignore } from "./error";
5
+ import { Resource } from "./resource";
6
+ export class File extends Resource("fs::File", async (ctx, filePath, content) => {
7
+ if (ctx.event === "delete") {
8
+ await ignore("ENOENT", () => fs.promises.unlink(filePath));
9
+ }
10
+ else {
11
+ await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
12
+ await fs.promises.writeFile(filePath, content);
13
+ }
14
+ return filePath;
15
+ }) {
16
+ }
17
+ export class Folder extends Resource("fs::Folder", async (ctx, dirPath) => {
18
+ if (ctx.event === "delete") {
19
+ // we just do a best effort attempt
20
+ await ignore(["ENOENT", "ENOTEMPTY"], () => fs.promises.rmdir(dirPath));
21
+ }
22
+ else {
23
+ await ignore("EEXIST", () => fs.promises.mkdir(dirPath, { recursive: true }));
24
+ }
25
+ return { path: dirPath };
26
+ }) {
27
+ file(filePath, content) {
28
+ return new File(path.basename(filePath), filePath, content);
29
+ }
30
+ }
31
+ export async function rm(filePath) {
32
+ try {
33
+ await unlink(filePath);
34
+ }
35
+ catch (error) {
36
+ if (error.code !== "ENOENT") {
37
+ throw error;
38
+ }
39
+ }
40
+ }
41
+ //# sourceMappingURL=fs.js.map
package/lib/fs.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,MAAM,OAAO,IAAK,SAAQ,QAAQ,CAChC,UAAU,EACV,KAAK,EAAE,GAAG,EAAE,QAAgB,EAAE,OAAe,EAAE,EAAE;IAC/C,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CACF;CAAG;AAEJ,MAAM,OAAO,MAAO,SAAQ,QAAQ,CAClC,YAAY,EACZ,KAAK,EAAE,GAAG,EAAE,OAAe,EAA6B,EAAE;IACxD,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3B,mCAAmC;QACnC,MAAM,MAAM,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,CAC1B,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC,CACF;IACQ,IAAI,CAAC,QAAgB,EAAE,OAAe;QAC3C,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC,QAAgB;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Octokit } from "@octokit/rest";
2
+ /**
3
+ * Try to get a GitHub token from the GitHub CLI
4
+ */
5
+ export declare function getGitHubTokenFromCLI(): Promise<string | null>;
6
+ /**
7
+ * Get GitHub authentication token with the following priority:
8
+ * 1. Explicit token provided in props
9
+ * 2. GITHUB_ACCESS_TOKEN environment variable (for actions with admin permissions)
10
+ * 3. GITHUB_TOKEN environment variable
11
+ * 4. GitHub CLI token (if gh is installed and authenticated)
12
+ *
13
+ * @param token Optional token to use
14
+ * @returns The resolved token or null if not available
15
+ */
16
+ export declare function getGitHubToken(token?: string): Promise<string | null>;
17
+ /**
18
+ * Create an authenticated Octokit client
19
+ *
20
+ * @param options Options for creating the client
21
+ * @returns An authenticated Octokit client
22
+ */
23
+ export declare function createGitHubClient(options?: {
24
+ token?: string;
25
+ }): Promise<Octokit>;
26
+ /**
27
+ * Verifies GitHub authentication and provides helpful error messages
28
+ *
29
+ * @param octokit Octokit client
30
+ * @param owner Repository owner
31
+ * @param repo Repository name
32
+ */
33
+ export declare function verifyGitHubAuth(octokit: Octokit, owner: string, repo: string): Promise<void>;
34
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/github/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAOxC;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAYpE;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO3E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -0,0 +1,91 @@
1
+ import { Octokit } from "@octokit/rest";
2
+ import { exec } from "child_process";
3
+ import { promisify } from "util";
4
+ // Convert exec to promise-based
5
+ const execAsync = promisify(exec);
6
+ /**
7
+ * Try to get a GitHub token from the GitHub CLI
8
+ */
9
+ export async function getGitHubTokenFromCLI() {
10
+ try {
11
+ // Check if GitHub CLI is installed
12
+ const { stdout: ghVersion } = await execAsync("gh --version");
13
+ if (!ghVersion)
14
+ return null;
15
+ // Get the auth token
16
+ const { stdout: token } = await execAsync("gh auth token");
17
+ return token?.trim() || null;
18
+ }
19
+ catch (error) {
20
+ return null;
21
+ }
22
+ }
23
+ /**
24
+ * Get GitHub authentication token with the following priority:
25
+ * 1. Explicit token provided in props
26
+ * 2. GITHUB_ACCESS_TOKEN environment variable (for actions with admin permissions)
27
+ * 3. GITHUB_TOKEN environment variable
28
+ * 4. GitHub CLI token (if gh is installed and authenticated)
29
+ *
30
+ * @param token Optional token to use
31
+ * @returns The resolved token or null if not available
32
+ */
33
+ export async function getGitHubToken(token) {
34
+ return (token ||
35
+ process.env.GITHUB_ACCESS_TOKEN ||
36
+ process.env.GITHUB_TOKEN ||
37
+ (await getGitHubTokenFromCLI()));
38
+ }
39
+ /**
40
+ * Create an authenticated Octokit client
41
+ *
42
+ * @param options Options for creating the client
43
+ * @returns An authenticated Octokit client
44
+ */
45
+ export async function createGitHubClient(options = {}) {
46
+ const token = await getGitHubToken(options.token);
47
+ return new Octokit({
48
+ auth: token,
49
+ });
50
+ }
51
+ /**
52
+ * Verifies GitHub authentication and provides helpful error messages
53
+ *
54
+ * @param octokit Octokit client
55
+ * @param owner Repository owner
56
+ * @param repo Repository name
57
+ */
58
+ export async function verifyGitHubAuth(octokit, owner, repo) {
59
+ try {
60
+ // Make a test request to check authentication
61
+ await octokit.rest.repos.get({
62
+ owner,
63
+ repo,
64
+ });
65
+ }
66
+ catch (error) {
67
+ if (error.status === 401) {
68
+ console.error("\n⚠️ GitHub authentication failed. Please try one of the following:");
69
+ console.error("1. Run 'gh auth login' to authenticate with the GitHub CLI");
70
+ console.error("2. Set the GITHUB_TOKEN environment variable with a personal access token");
71
+ console.error("3. Pass a token directly to the constructor");
72
+ console.error("\nTo create a token, visit: https://github.com/settings/tokens");
73
+ console.error("Required scopes: 'repo' for private repos or 'public_repo' for public repos\n");
74
+ throw new Error("GitHub authentication failed");
75
+ }
76
+ else if (error.status === 403) {
77
+ console.error("\n⚠️ Insufficient permissions. You need admin access to the repository.");
78
+ console.error("Make sure your token has the 'repo' scope for private repos or 'public_repo' for public repos\n");
79
+ throw new Error("Insufficient GitHub permissions");
80
+ }
81
+ else if (error.status === 404) {
82
+ console.error(`\n⚠️ Repository not found: ${owner}/${repo}`);
83
+ console.error("Make sure the repository exists and you have access to it\n");
84
+ throw new Error("GitHub repository not found");
85
+ }
86
+ else {
87
+ throw error;
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/github/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,gCAAgC;AAChC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,qBAAqB;QACrB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC;QAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAc;IACjD,OAAO,CACL,KAAK;QACL,OAAO,CAAC,GAAG,CAAC,mBAAmB;QAC/B,OAAO,CAAC,GAAG,CAAC,YAAY;QACxB,CAAC,MAAM,qBAAqB,EAAE,CAAC,CAChC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAA8B,EAAE;IAEhC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAElD,OAAO,IAAI,OAAO,CAAC;QACjB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgB,EAChB,KAAa,EACb,IAAY;IAEZ,IAAI,CAAC;QACH,8CAA8C;QAC9C,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAC3B,KAAK;YACL,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CACX,qEAAqE,CACtE,CAAC;YACF,OAAO,CAAC,KAAK,CACX,4DAA4D,CAC7D,CAAC;YACF,OAAO,CAAC,KAAK,CACX,2EAA2E,CAC5E,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CACX,gEAAgE,CACjE,CAAC;YACF,OAAO,CAAC,KAAK,CACX,+EAA+E,CAChF,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CACX,yEAAyE,CAC1E,CAAC;YACF,OAAO,CAAC,KAAK,CACX,iGAAiG,CAClG,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,8BAA8B,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,KAAK,CACX,6DAA6D,CAC9D,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./secret";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./secret";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/github/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { Secret } from "../secret";
2
+ /**
3
+ * Properties for creating or updating a GitHub Secret
4
+ */
5
+ export interface GitHubSecretProps {
6
+ /**
7
+ * Repository owner (user or organization)
8
+ */
9
+ owner: string;
10
+ /**
11
+ * Repository name
12
+ */
13
+ repository: string;
14
+ /**
15
+ * Secret name
16
+ */
17
+ name: string;
18
+ /**
19
+ * Secret value (will be stored securely on GitHub)
20
+ */
21
+ value: Secret;
22
+ /**
23
+ * Optional GitHub API token (overrides environment variable)
24
+ */
25
+ token?: string;
26
+ }
27
+ /**
28
+ * Output returned after Secret creation/update
29
+ */
30
+ export interface GitHubSecretOutput extends Omit<GitHubSecretProps, "value"> {
31
+ /**
32
+ * The ID of the resource
33
+ */
34
+ id: string;
35
+ /**
36
+ * Time at which the object was created/updated
37
+ */
38
+ updatedAt: string;
39
+ }
40
+ declare const GitHubSecret_base: import("../resource").Provider<"github::Secret", [props: GitHubSecretProps], GitHubSecretOutput>;
41
+ /**
42
+ * Resource for managing GitHub repository secrets
43
+ */
44
+ export declare class GitHubSecret extends GitHubSecret_base {
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=secret.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.d.ts","sourceRoot":"","sources":["../../src/github/secret.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC1E;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBA4FjC;CAAG"}
@@ -0,0 +1,99 @@
1
+ import sodium from "libsodium-wrappers";
2
+ import { Resource } from "../resource";
3
+ import { createGitHubClient, verifyGitHubAuth } from "./client";
4
+ /**
5
+ * Resource for managing GitHub repository secrets
6
+ */
7
+ export class GitHubSecret extends Resource("github::Secret", async (ctx, props) => {
8
+ // Create authenticated Octokit client - will automatically handle token resolution
9
+ const octokit = await createGitHubClient({ token: props.token });
10
+ // Verify authentication and permissions
11
+ if (!ctx.quiet) {
12
+ await verifyGitHubAuth(octokit, props.owner, props.repository);
13
+ }
14
+ if (ctx.event === "delete") {
15
+ if (ctx.output?.id) {
16
+ try {
17
+ // Delete the secret
18
+ await octokit.rest.actions.deleteRepoSecret({
19
+ owner: props.owner,
20
+ repo: props.repository,
21
+ secret_name: props.name,
22
+ });
23
+ }
24
+ catch (error) {
25
+ // Ignore 404 errors (secret already deleted)
26
+ if (error.status === 404) {
27
+ console.log("Secret doesn't exist, ignoring");
28
+ }
29
+ else {
30
+ throw error;
31
+ }
32
+ }
33
+ }
34
+ // Return void (a deleted resource has no content)
35
+ return undefined;
36
+ }
37
+ else {
38
+ try {
39
+ // Get the repository's public key for encrypting secrets
40
+ const { data: publicKey } = await octokit.rest.actions.getRepoPublicKey({
41
+ owner: props.owner,
42
+ repo: props.repository,
43
+ });
44
+ // Encrypt the secret value using libsodium
45
+ const encryptedValue = await encryptString(props.value.unencrypted, publicKey.key);
46
+ // Create or update the secret with the encrypted value and key_id
47
+ const response = await octokit.rest.actions.createOrUpdateRepoSecret({
48
+ owner: props.owner,
49
+ repo: props.repository,
50
+ secret_name: props.name,
51
+ encrypted_value: encryptedValue,
52
+ key_id: publicKey.key_id,
53
+ });
54
+ // GitHub doesn't return the secret details on create/update, so we need to construct it
55
+ const output = {
56
+ id: `${props.owner}/${props.repository}/${props.name}`,
57
+ owner: props.owner,
58
+ repository: props.repository,
59
+ name: props.name,
60
+ token: props.token,
61
+ updatedAt: new Date().toISOString(),
62
+ };
63
+ return output;
64
+ }
65
+ catch (error) {
66
+ if (error.status === 403 &&
67
+ error.message?.includes("Must have admin rights")) {
68
+ console.error("\n⚠️ Error creating/updating GitHub secret: You must have admin rights to the repository.");
69
+ console.error("Make sure your GitHub token has the required permissions (repo scope for private repos).\n");
70
+ }
71
+ else {
72
+ console.error("Error creating/updating GitHub secret:", error.message);
73
+ }
74
+ throw error;
75
+ }
76
+ }
77
+ }) {
78
+ }
79
+ /**
80
+ * Encrypt a value for GitHub using libsodium
81
+ * Based on GitHub's documentation for encrypting secrets
82
+ *
83
+ * @param value - The secret value to encrypt
84
+ * @param publicKey - The base64-encoded public key from GitHub
85
+ * @returns The base64-encoded encrypted value
86
+ */
87
+ async function encryptString(value, publicKey) {
88
+ // Initialize libsodium
89
+ await sodium.ready;
90
+ // Convert the public key from base64 to binary
91
+ const binKey = sodium.from_base64(publicKey, sodium.base64_variants.ORIGINAL);
92
+ // Convert the message to a Uint8Array
93
+ const binMessage = sodium.from_string(value);
94
+ // Encrypt the message with the public key using libsodium's sealed box
95
+ const encryptedBin = sodium.crypto_box_seal(binMessage, binKey);
96
+ // Convert the encrypted message to base64
97
+ return sodium.to_base64(encryptedBin, sodium.base64_variants.ORIGINAL);
98
+ }
99
+ //# sourceMappingURL=secret.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret.js","sourceRoot":"","sources":["../../src/github/secret.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Provider } from "./resource";
2
+ import { FileSystemStateStore } from "./state";
3
+ export interface Config {
4
+ defaultStage?: string;
5
+ stateStore?: new (dir: string) => FileSystemStateStore;
6
+ }
7
+ export declare const config: Config;
8
+ export declare const defaultStage: string;
9
+ export declare const defaultStateStore: typeof FileSystemStateStore;
10
+ export declare const providers: Map<string, Provider<string, any[], any>>;
11
+ export declare const deletions: {
12
+ id: string;
13
+ data: Record<string, any>;
14
+ inputs: any[];
15
+ }[];
16
+ //# sourceMappingURL=global.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.d.ts","sourceRoot":"","sources":["../src/global.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAE/C,MAAM,WAAW,MAAM;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,oBAAoB,CAAC;CACxD;AAoCD,eAAO,MAAM,MAAM,EAAE,MAGpB,CAAC;AAEF,eAAO,MAAM,YAAY,QAAgC,CAAC;AAE1D,eAAO,MAAM,iBAAiB,6BAA4C,CAAC;AAE3E,eAAO,MAAM,SAAS,2CAGnB,CAAC;AAEJ,eAAO,MAAM,SAAS,EAAE;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,EAAE,CAAC;CACf,EAAO,CAAC"}