@struktoai/mirage-browser 0.0.2-alpha.0 → 0.0.2

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 (232) hide show
  1. package/README.md +61 -127
  2. package/dist/aliyun-F2ORS3KZ.js +8 -0
  3. package/dist/backblaze-HOVWPSV7.js +8 -0
  4. package/dist/box-VJSE5N7P.js +8 -0
  5. package/dist/ceph-CQKQ4NWW.js +8 -0
  6. package/dist/chunk-2H4KUUFP.js +26 -0
  7. package/dist/chunk-2H4KUUFP.js.map +1 -0
  8. package/dist/chunk-32VC36P4.js +89 -0
  9. package/dist/chunk-32VC36P4.js.map +1 -0
  10. package/dist/{chunk-MSNVGH6T.js → chunk-4YJMDF2S.js} +2 -4
  11. package/dist/chunk-4YJMDF2S.js.map +1 -0
  12. package/dist/chunk-54NTYJEO.js +13 -0
  13. package/dist/chunk-54NTYJEO.js.map +1 -0
  14. package/dist/chunk-63GZEZW4.js +79 -0
  15. package/dist/chunk-63GZEZW4.js.map +1 -0
  16. package/dist/{chunk-UW3D2AF6.js → chunk-6K57U6CM.js} +2 -4
  17. package/dist/chunk-6K57U6CM.js.map +1 -0
  18. package/dist/chunk-72GY5B23.js +89 -0
  19. package/dist/chunk-72GY5B23.js.map +1 -0
  20. package/dist/{chunk-QYFCHCGX.js → chunk-ATLYBQSC.js} +14 -29
  21. package/dist/chunk-ATLYBQSC.js.map +1 -0
  22. package/dist/{chunk-ONQ5JGPR.js → chunk-BUXWUKN7.js} +9 -6
  23. package/dist/chunk-BUXWUKN7.js.map +1 -0
  24. package/dist/chunk-CAKSQ2LV.js +85 -0
  25. package/dist/chunk-CAKSQ2LV.js.map +1 -0
  26. package/dist/chunk-CO4FMKOF.js +89 -0
  27. package/dist/chunk-CO4FMKOF.js.map +1 -0
  28. package/dist/{chunk-5Q5GJUAF.js → chunk-D3JDGGKO.js} +19 -18
  29. package/dist/chunk-D3JDGGKO.js.map +1 -0
  30. package/dist/{chunk-DDM2Z7YA.js → chunk-D6HF462C.js} +2 -4
  31. package/dist/chunk-D6HF462C.js.map +1 -0
  32. package/dist/{chunk-27UVUTJH.js → chunk-EH2BN4JC.js} +34 -3
  33. package/dist/chunk-EH2BN4JC.js.map +1 -0
  34. package/dist/chunk-EUKHGXCE.js +89 -0
  35. package/dist/chunk-EUKHGXCE.js.map +1 -0
  36. package/dist/chunk-GHKX2BA3.js +89 -0
  37. package/dist/chunk-GHKX2BA3.js.map +1 -0
  38. package/dist/{chunk-FL7YLP7D.js → chunk-HGSTRD7H.js} +10 -8
  39. package/dist/chunk-HGSTRD7H.js.map +1 -0
  40. package/dist/chunk-HYUESAQS.js +24 -0
  41. package/dist/chunk-HYUESAQS.js.map +1 -0
  42. package/dist/{chunk-ZJ6ROCTP.js → chunk-INLL7LRM.js} +11 -14
  43. package/dist/chunk-INLL7LRM.js.map +1 -0
  44. package/dist/chunk-J54OBIJA.js +29 -0
  45. package/dist/chunk-J54OBIJA.js.map +1 -0
  46. package/dist/{chunk-DPC7QRYO.js → chunk-JCS5EG5A.js} +9 -6
  47. package/dist/chunk-JCS5EG5A.js.map +1 -0
  48. package/dist/chunk-JSAQMYPK.js +26 -0
  49. package/dist/chunk-JSAQMYPK.js.map +1 -0
  50. package/dist/{chunk-CZOTICOC.js → chunk-JVTKE6DB.js} +2 -4
  51. package/dist/chunk-JVTKE6DB.js.map +1 -0
  52. package/dist/{chunk-3PWPFOPS.js → chunk-MO5DGX42.js} +19 -18
  53. package/dist/chunk-MO5DGX42.js.map +1 -0
  54. package/dist/{chunk-LZRPA2P7.js → chunk-N43C6XFP.js} +9 -6
  55. package/dist/chunk-N43C6XFP.js.map +1 -0
  56. package/dist/chunk-NMZBJOFW.js +26 -0
  57. package/dist/chunk-NMZBJOFW.js.map +1 -0
  58. package/dist/chunk-O5ONB7QT.js +26 -0
  59. package/dist/chunk-O5ONB7QT.js.map +1 -0
  60. package/dist/{chunk-LSSB3AEW.js → chunk-RD7ED27I.js} +5 -12
  61. package/dist/chunk-RD7ED27I.js.map +1 -0
  62. package/dist/chunk-RJ4RR3BR.js +92 -0
  63. package/dist/chunk-RJ4RR3BR.js.map +1 -0
  64. package/dist/chunk-RJ5FBBL6.js +79 -0
  65. package/dist/chunk-RJ5FBBL6.js.map +1 -0
  66. package/dist/{chunk-SQQI4A6Y.js → chunk-RZRXEXHM.js} +2 -4
  67. package/dist/chunk-RZRXEXHM.js.map +1 -0
  68. package/dist/{chunk-CQJTW45B.js → chunk-SBAUYZJB.js} +2 -4
  69. package/dist/chunk-SBAUYZJB.js.map +1 -0
  70. package/dist/chunk-SJB2KXDM.js +2109 -0
  71. package/dist/chunk-SJB2KXDM.js.map +1 -0
  72. package/dist/{chunk-33SBWNB4.js → chunk-T43CZ3IZ.js} +9 -8
  73. package/dist/chunk-T43CZ3IZ.js.map +1 -0
  74. package/dist/{chunk-LG6GVNOL.js → chunk-TPFH5V4D.js} +2 -4
  75. package/dist/chunk-TPFH5V4D.js.map +1 -0
  76. package/dist/{chunk-LUDXUYIA.js → chunk-WEJGUCCL.js} +19 -18
  77. package/dist/chunk-WEJGUCCL.js.map +1 -0
  78. package/dist/{chunk-UFXEZ56G.js → chunk-WZ53HLH6.js} +18 -18
  79. package/dist/chunk-WZ53HLH6.js.map +1 -0
  80. package/dist/{chunk-VLFE4FGD.js → chunk-XFREXNA2.js} +2 -3
  81. package/dist/chunk-XFREXNA2.js.map +1 -0
  82. package/dist/chunk-YEDSFMWK.js +79 -0
  83. package/dist/chunk-YEDSFMWK.js.map +1 -0
  84. package/dist/chunk-YGRKFONX.js +26 -0
  85. package/dist/chunk-YGRKFONX.js.map +1 -0
  86. package/dist/config-7IZCGWKX.js +11 -0
  87. package/dist/config-AT74FARJ.js +11 -0
  88. package/dist/config-C2AYHACT.js +11 -0
  89. package/dist/{config-U4UI4OKA.js → config-ET26F632.js} +4 -2
  90. package/dist/config-GHJOYNM6.js +11 -0
  91. package/dist/config-L55UXIF4.js +11 -0
  92. package/dist/config-NV5WXP64.js +11 -0
  93. package/dist/config-V7BLK5WP.js +11 -0
  94. package/dist/digitalocean-KC7VIWZK.js +8 -0
  95. package/dist/discord-W3DSEXKN.js +7 -0
  96. package/dist/dropbox-GI273OVA.js +8 -0
  97. package/dist/gcs-WRQTU27E.js +8 -0
  98. package/dist/gdocs-EI2EFVKG.js +8 -0
  99. package/dist/gdrive-62HD67IP.js +8 -0
  100. package/dist/github-SWLYD3LS.js +7 -0
  101. package/dist/github_ci-7P7VGBKM.js +8 -0
  102. package/dist/gmail-B7HXHZ7D.js +8 -0
  103. package/dist/gsheets-OTBW2JWG.js +8 -0
  104. package/dist/gslides-MXSR4HRY.js +8 -0
  105. package/dist/index.d.ts +342 -166
  106. package/dist/index.js +264 -373
  107. package/dist/index.js.map +1 -1
  108. package/dist/langfuse-FWKU6E3F.js +7 -0
  109. package/dist/linear-SHVG3XVT.js +7 -0
  110. package/dist/minio-246KOHBJ.js +8 -0
  111. package/dist/mongodb-2ITJUDCF.js +7 -0
  112. package/dist/notion-BOBBSJSG.js +7 -0
  113. package/dist/oci-T7VREPQW.js +8 -0
  114. package/dist/opfs-3XNAXR5B.js +7 -0
  115. package/dist/qingstor-WIC27LS3.js +8 -0
  116. package/dist/qingstor-WIC27LS3.js.map +1 -0
  117. package/dist/r2-EAX6KHEI.js +8 -0
  118. package/dist/r2-EAX6KHEI.js.map +1 -0
  119. package/dist/{s3-A4XFE6QV.js → s3-GD2WKLWR.js} +2 -2
  120. package/dist/s3-GD2WKLWR.js.map +1 -0
  121. package/dist/scaleway-OVFRZBKW.js +8 -0
  122. package/dist/scaleway-OVFRZBKW.js.map +1 -0
  123. package/dist/seaweedfs-EOJVO432.js +8 -0
  124. package/dist/seaweedfs-EOJVO432.js.map +1 -0
  125. package/dist/slack-RNXMU5OC.js +7 -0
  126. package/dist/slack-RNXMU5OC.js.map +1 -0
  127. package/dist/supabase-VSUNLIJ6.js +8 -0
  128. package/dist/supabase-VSUNLIJ6.js.map +1 -0
  129. package/dist/tencent-YYM5WUVU.js +8 -0
  130. package/dist/tencent-YYM5WUVU.js.map +1 -0
  131. package/dist/trello-MNR3VPTT.js +7 -0
  132. package/dist/trello-MNR3VPTT.js.map +1 -0
  133. package/dist/wasabi-K5ANTZ2C.js +8 -0
  134. package/dist/wasabi-K5ANTZ2C.js.map +1 -0
  135. package/package.json +3 -3
  136. package/dist/box-Y2SJWAAO.js +0 -8
  137. package/dist/chunk-27UVUTJH.js.map +0 -1
  138. package/dist/chunk-33SBWNB4.js.map +0 -1
  139. package/dist/chunk-3PWPFOPS.js.map +0 -1
  140. package/dist/chunk-5Q5GJUAF.js.map +0 -1
  141. package/dist/chunk-7GZXXXAS.js +0 -24
  142. package/dist/chunk-7GZXXXAS.js.map +0 -1
  143. package/dist/chunk-B4SYG2FD.js +0 -24
  144. package/dist/chunk-B4SYG2FD.js.map +0 -1
  145. package/dist/chunk-BIZONEJC.js +0 -24
  146. package/dist/chunk-BIZONEJC.js.map +0 -1
  147. package/dist/chunk-CQJTW45B.js.map +0 -1
  148. package/dist/chunk-CZOTICOC.js.map +0 -1
  149. package/dist/chunk-DDM2Z7YA.js.map +0 -1
  150. package/dist/chunk-DPC7QRYO.js.map +0 -1
  151. package/dist/chunk-FL7YLP7D.js.map +0 -1
  152. package/dist/chunk-GFWWDQUZ.js +0 -24
  153. package/dist/chunk-GFWWDQUZ.js.map +0 -1
  154. package/dist/chunk-LG6GVNOL.js.map +0 -1
  155. package/dist/chunk-LSSB3AEW.js.map +0 -1
  156. package/dist/chunk-LUDXUYIA.js.map +0 -1
  157. package/dist/chunk-LZRPA2P7.js.map +0 -1
  158. package/dist/chunk-ML57VOCK.js +0 -7590
  159. package/dist/chunk-ML57VOCK.js.map +0 -1
  160. package/dist/chunk-MSNVGH6T.js.map +0 -1
  161. package/dist/chunk-NBWTZXH2.js +0 -27
  162. package/dist/chunk-NBWTZXH2.js.map +0 -1
  163. package/dist/chunk-ONQ5JGPR.js.map +0 -1
  164. package/dist/chunk-OPROOV6J.js +0 -24
  165. package/dist/chunk-OPROOV6J.js.map +0 -1
  166. package/dist/chunk-QARIHW3I.js +0 -23
  167. package/dist/chunk-QARIHW3I.js.map +0 -1
  168. package/dist/chunk-QYFCHCGX.js.map +0 -1
  169. package/dist/chunk-SQQI4A6Y.js.map +0 -1
  170. package/dist/chunk-UFXEZ56G.js.map +0 -1
  171. package/dist/chunk-UW3D2AF6.js.map +0 -1
  172. package/dist/chunk-VLFE4FGD.js.map +0 -1
  173. package/dist/chunk-XIURBEVZ.js +0 -24
  174. package/dist/chunk-XIURBEVZ.js.map +0 -1
  175. package/dist/chunk-ZJ6ROCTP.js.map +0 -1
  176. package/dist/config-4FABMWVK.js +0 -9
  177. package/dist/config-DGIUMGBB.js +0 -9
  178. package/dist/config-G3TTNXLY.js +0 -9
  179. package/dist/config-GPCEEKCB.js +0 -9
  180. package/dist/config-KQ5VR2KZ.js +0 -9
  181. package/dist/config-LPMMVXLS.js +0 -9
  182. package/dist/config-VZGK63Z5.js +0 -9
  183. package/dist/discord-RG6URXXS.js +0 -7
  184. package/dist/dropbox-P7SOL7GN.js +0 -8
  185. package/dist/gcs-2QHB4CBT.js +0 -8
  186. package/dist/gdocs-JNZTOZ33.js +0 -8
  187. package/dist/gdrive-6MEIVN2F.js +0 -8
  188. package/dist/github-M7WODJR2.js +0 -7
  189. package/dist/github_ci-4XELEFSZ.js +0 -8
  190. package/dist/gmail-AO6A3URH.js +0 -8
  191. package/dist/gsheets-RFOKXMOJ.js +0 -8
  192. package/dist/gslides-GTVZPLLB.js +0 -8
  193. package/dist/langfuse-CDOLELMB.js +0 -7
  194. package/dist/linear-SXOQGG6B.js +0 -7
  195. package/dist/mongodb-HA7FAKDJ.js +0 -7
  196. package/dist/notion-ANZNMM3L.js +0 -7
  197. package/dist/oci-ML5ZRVZ2.js +0 -8
  198. package/dist/opfs-57XFMWWE.js +0 -7
  199. package/dist/r2-56O4Q2J4.js +0 -8
  200. package/dist/slack-QA7H7WLM.js +0 -7
  201. package/dist/supabase-NNK2RWG3.js +0 -8
  202. package/dist/trello-H6PZT2IT.js +0 -7
  203. /package/dist/{box-Y2SJWAAO.js.map → aliyun-F2ORS3KZ.js.map} +0 -0
  204. /package/dist/{config-4FABMWVK.js.map → backblaze-HOVWPSV7.js.map} +0 -0
  205. /package/dist/{config-DGIUMGBB.js.map → box-VJSE5N7P.js.map} +0 -0
  206. /package/dist/{config-G3TTNXLY.js.map → ceph-CQKQ4NWW.js.map} +0 -0
  207. /package/dist/{config-GPCEEKCB.js.map → config-7IZCGWKX.js.map} +0 -0
  208. /package/dist/{config-KQ5VR2KZ.js.map → config-AT74FARJ.js.map} +0 -0
  209. /package/dist/{config-LPMMVXLS.js.map → config-C2AYHACT.js.map} +0 -0
  210. /package/dist/{config-U4UI4OKA.js.map → config-ET26F632.js.map} +0 -0
  211. /package/dist/{config-VZGK63Z5.js.map → config-GHJOYNM6.js.map} +0 -0
  212. /package/dist/{discord-RG6URXXS.js.map → config-L55UXIF4.js.map} +0 -0
  213. /package/dist/{dropbox-P7SOL7GN.js.map → config-NV5WXP64.js.map} +0 -0
  214. /package/dist/{gcs-2QHB4CBT.js.map → config-V7BLK5WP.js.map} +0 -0
  215. /package/dist/{gdocs-JNZTOZ33.js.map → digitalocean-KC7VIWZK.js.map} +0 -0
  216. /package/dist/{gdrive-6MEIVN2F.js.map → discord-W3DSEXKN.js.map} +0 -0
  217. /package/dist/{github-M7WODJR2.js.map → dropbox-GI273OVA.js.map} +0 -0
  218. /package/dist/{github_ci-4XELEFSZ.js.map → gcs-WRQTU27E.js.map} +0 -0
  219. /package/dist/{gmail-AO6A3URH.js.map → gdocs-EI2EFVKG.js.map} +0 -0
  220. /package/dist/{gsheets-RFOKXMOJ.js.map → gdrive-62HD67IP.js.map} +0 -0
  221. /package/dist/{gslides-GTVZPLLB.js.map → github-SWLYD3LS.js.map} +0 -0
  222. /package/dist/{langfuse-CDOLELMB.js.map → github_ci-7P7VGBKM.js.map} +0 -0
  223. /package/dist/{linear-SXOQGG6B.js.map → gmail-B7HXHZ7D.js.map} +0 -0
  224. /package/dist/{mongodb-HA7FAKDJ.js.map → gsheets-OTBW2JWG.js.map} +0 -0
  225. /package/dist/{notion-ANZNMM3L.js.map → gslides-MXSR4HRY.js.map} +0 -0
  226. /package/dist/{oci-ML5ZRVZ2.js.map → langfuse-FWKU6E3F.js.map} +0 -0
  227. /package/dist/{opfs-57XFMWWE.js.map → linear-SHVG3XVT.js.map} +0 -0
  228. /package/dist/{r2-56O4Q2J4.js.map → minio-246KOHBJ.js.map} +0 -0
  229. /package/dist/{s3-A4XFE6QV.js.map → mongodb-2ITJUDCF.js.map} +0 -0
  230. /package/dist/{slack-QA7H7WLM.js.map → notion-BOBBSJSG.js.map} +0 -0
  231. /package/dist/{supabase-NNK2RWG3.js.map → oci-T7VREPQW.js.map} +0 -0
  232. /package/dist/{trello-H6PZT2IT.js.map → opfs-3XNAXR5B.js.map} +0 -0
@@ -16,12 +16,15 @@ import {
16
16
  } from "@struktoai/mirage-core";
17
17
 
18
18
  // src/resource/linear/config.ts
19
+ import { redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
20
+ var LinearConfigSchema = z.object({
21
+ apiKey: secretStr(),
22
+ workspace: z.string().optional(),
23
+ teamIds: z.array(z.string()).optional(),
24
+ baseUrl: z.string().optional()
25
+ });
19
26
  function redactLinearConfig(config) {
20
- const out = { apiKey: "<REDACTED>" };
21
- if (config.workspace !== void 0) out.workspace = config.workspace;
22
- if (config.teamIds !== void 0) out.teamIds = config.teamIds;
23
- if (config.baseUrl !== void 0) out.baseUrl = config.baseUrl;
24
- return out;
27
+ return redactConfigWithSchema(LinearConfigSchema, config);
25
28
  }
26
29
 
27
30
  // src/resource/linear/linear.ts
@@ -86,8 +89,6 @@ var LinearResource = class {
86
89
  getState() {
87
90
  return Promise.resolve({
88
91
  type: this.kind,
89
- needsOverride: true,
90
- redactedFields: ["apiKey"],
91
92
  config: redactLinearConfig(this.config)
92
93
  });
93
94
  }
@@ -100,4 +101,4 @@ export {
100
101
  redactLinearConfig,
101
102
  LinearResource
102
103
  };
103
- //# sourceMappingURL=chunk-33SBWNB4.js.map
104
+ //# sourceMappingURL=chunk-T43CZ3IZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/linear/linear.ts","../src/resource/linear/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n HttpLinearTransport,\n type IndexCacheStore,\n LINEAR_COMMANDS,\n LINEAR_PROMPT,\n LINEAR_VFS_OPS,\n LINEAR_WRITE_PROMPT,\n LinearAccessor,\n type LinearReaddirFilter,\n linearRead,\n linearReaddir,\n linearStat,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolveLinearGlob,\n} from '@struktoai/mirage-core'\nimport { redactLinearConfig, type LinearConfig, type LinearConfigRedacted } from './config.ts'\n\nexport interface LinearResourceState {\n type: string\n config: LinearConfigRedacted\n}\n\nexport class LinearResource implements Resource {\n readonly kind: string = ResourceName.LINEAR\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = LINEAR_PROMPT\n readonly writePrompt: string = LINEAR_WRITE_PROMPT\n readonly config: LinearConfig\n readonly accessor: LinearAccessor\n readonly index: IndexCacheStore\n\n constructor(config: LinearConfig) {\n this.config = config\n const transportOpts: { apiKey: string; baseUrl?: string } = { apiKey: config.apiKey }\n if (config.baseUrl !== undefined) transportOpts.baseUrl = config.baseUrl\n this.accessor = new LinearAccessor(new HttpLinearTransport(transportOpts))\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return LINEAR_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return LINEAR_VFS_OPS\n }\n\n private filter(): LinearReaddirFilter {\n const out: LinearReaddirFilter = {}\n if (this.config.teamIds !== undefined) out.teamIds = this.config.teamIds\n return out\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return linearRead(this.accessor, p, this.index, this.filter())\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return linearReaddir(this.accessor, p, this.index, this.filter())\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return linearStat(this.accessor, p, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return resolveLinearGlob(this.accessor, effective, this.index, this.filter())\n }\n\n getState(): Promise<LinearResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactLinearConfig(this.config),\n })\n }\n\n loadState(_state: LinearResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface LinearConfig {\n apiKey: string\n workspace?: string\n teamIds?: readonly string[]\n baseUrl?: string\n}\n\nexport interface LinearConfigRedacted {\n apiKey: '<REDACTED>'\n workspace?: string\n teamIds?: readonly string[]\n baseUrl?: string\n}\n\nexport const LinearConfigSchema = z.object({\n apiKey: secretStr(),\n workspace: z.string().optional(),\n teamIds: z.array(z.string()).optional(),\n baseUrl: z.string().optional(),\n})\n\nexport function redactLinearConfig(config: LinearConfig): LinearConfigRedacted {\n return redactConfigWithSchema(LinearConfigSchema, config) as unknown as LinearConfigRedacted\n}\n"],"mappings":";AAcA;AAAA,EAEE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,OACK;;;ACpBP,SAAS,wBAAwB,WAAW,SAAS;AAgB9C,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,QAAQ,UAAU;AAAA,EAClB,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACtC,SAAS,EAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAEM,SAAS,mBAAmB,QAA4C;AAC7E,SAAO,uBAAuB,oBAAoB,MAAM;AAC1D;;;ADGO,IAAM,iBAAN,MAAyC;AAAA,EACrC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAsB;AAChC,SAAK,SAAS;AACd,UAAM,gBAAsD,EAAE,QAAQ,OAAO,OAAO;AACpF,QAAI,OAAO,YAAY,OAAW,eAAc,UAAU,OAAO;AACjE,SAAK,WAAW,IAAI,eAAe,IAAI,oBAAoB,aAAa,CAAC;AACzE,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,SAAS,CAAC;AAAA,EAC5D;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEQ,SAA8B;AACpC,UAAM,MAA2B,CAAC;AAClC,QAAI,KAAK,OAAO,YAAY,OAAW,KAAI,UAAU,KAAK,OAAO;AACjE,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,EAC/D;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,cAAc,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,EAClE;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,kBAAkB,KAAK,UAAU,WAAW,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,EAC9E;AAAA,EAEA,WAAyC;AACvC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAmB,KAAK,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA4C;AACpD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  redactGSlidesConfig
3
- } from "./chunk-B4SYG2FD.js";
3
+ } from "./chunk-JSAQMYPK.js";
4
4
 
5
5
  // src/resource/gslides/gslides.ts
6
6
  import {
@@ -78,8 +78,6 @@ var GSlidesResource = class {
78
78
  getState() {
79
79
  return Promise.resolve({
80
80
  type: this.kind,
81
- needsOverride: true,
82
- redactedFields: ["clientSecret", "refreshToken"],
83
81
  config: redactGSlidesConfig(this.config)
84
82
  });
85
83
  }
@@ -91,4 +89,4 @@ var GSlidesResource = class {
91
89
  export {
92
90
  GSlidesResource
93
91
  };
94
- //# sourceMappingURL=chunk-LG6GVNOL.js.map
92
+ //# sourceMappingURL=chunk-TPFH5V4D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gslides/gslides.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n GSLIDES_COMMANDS,\n GSLIDES_PROMPT,\n GSLIDES_VFS_OPS,\n GSLIDES_WRITE_PROMPT,\n GSlidesAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gslidesRead,\n gslidesReaddir,\n gslidesResolveGlob,\n gslidesStat,\n} from '@struktoai/mirage-core'\nimport { redactGSlidesConfig, type GSlidesConfig, type GSlidesConfigRedacted } from './config.ts'\n\nexport interface GSlidesResourceState {\n type: string\n config: GSlidesConfigRedacted\n}\n\nexport class GSlidesResource implements Resource {\n readonly kind: string = ResourceName.GSLIDES\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GSLIDES_PROMPT\n readonly writePrompt: string = GSLIDES_WRITE_PROMPT\n readonly config: GSlidesConfig\n readonly accessor: GSlidesAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GSlidesConfig) {\n this.config = config\n const tm = new TokenManager({\n clientId: config.clientId,\n ...(config.clientSecret !== undefined ? { clientSecret: config.clientSecret } : {}),\n refreshToken: config.refreshToken,\n ...(config.refreshFn !== undefined ? { refreshFn: config.refreshFn } : {}),\n })\n this.accessor = new GSlidesAccessor({ tokenManager: tm })\n this.index = new RAMIndexCacheStore({ ttl: 86_400 })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GSLIDES_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GSLIDES_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gslidesRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gslidesReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gslidesStat(this.accessor, p, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return gslidesResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GSlidesResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGSlidesConfig(this.config),\n })\n }\n\n loadState(_state: GSlidesResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQA,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACjF,cAAc,OAAO;AAAA,MACrB,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IAC1E,CAAC;AACD,SAAK,WAAW,IAAI,gBAAgB,EAAE,cAAc,GAAG,CAAC;AACxD,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,MAAO,CAAC;AAAA,EACrD;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,eAAe,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACpD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,mBAAmB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAChE;AAAA,EAEA,WAA0C;AACxC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1,11 +1,26 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-VLFE4FGD.js";
3
+ } from "./chunk-XFREXNA2.js";
4
4
 
5
5
  // src/resource/supabase/supabase.ts
6
- import { ResourceName } from "@struktoai/mirage-core";
6
+ import {
7
+ remapCommandsResource,
8
+ remapOpsResource,
9
+ ResourceName
10
+ } from "@struktoai/mirage-core";
7
11
 
8
12
  // src/resource/supabase/config.ts
13
+ import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
14
+ var SupabaseConfigSchema = z.object({
15
+ bucket: z.string(),
16
+ presignedUrlProvider: secretSchema(
17
+ z.custom((value) => typeof value === "function")
18
+ ),
19
+ projectRef: z.string().optional(),
20
+ region: z.string().optional(),
21
+ endpoint: z.string().optional(),
22
+ defaultContentType: z.string().optional()
23
+ });
9
24
  function resolvedSupabaseEndpoint(config) {
10
25
  if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
11
26
  if (config.projectRef !== void 0 && config.projectRef !== "") {
@@ -25,7 +40,7 @@ function supabaseToS3Config(config) {
25
40
  };
26
41
  }
27
42
  function redactSupabaseConfig(config) {
28
- return { ...config, presignedUrlProvider: "<REDACTED>" };
43
+ return redactConfigWithSchema(SupabaseConfigSchema, config);
29
44
  }
30
45
 
31
46
  // src/resource/supabase/prompt.ts
@@ -36,18 +51,6 @@ var SUPABASE_BROWSER_PROMPT = `{prefix}
36
51
  addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
37
52
 
38
53
  // src/resource/supabase/supabase.ts
39
- function remapOpsResource(ops, to) {
40
- return ops.map((op) => op.resource === ResourceName.S3 ? { ...op, resource: to } : op);
41
- }
42
- function remapCommandsResource(commands, to) {
43
- return commands.map((cmd) => {
44
- if (cmd.resource !== ResourceName.S3) return cmd;
45
- const proto = Object.getPrototypeOf(cmd);
46
- const copy = Object.assign(Object.create(proto), cmd);
47
- Object.assign(copy, { resource: to });
48
- return copy;
49
- });
50
- }
51
54
  var SupabaseResource = class extends S3Resource {
52
55
  kind = ResourceName.SUPABASE;
53
56
  prompt = SUPABASE_BROWSER_PROMPT;
@@ -69,8 +72,6 @@ var SupabaseResource = class extends S3Resource {
69
72
  getState() {
70
73
  return Promise.resolve({
71
74
  type: this.kind,
72
- needsOverride: true,
73
- redactedFields: ["presignedUrlProvider"],
74
75
  config: redactSupabaseConfig(this.supabaseConfig)
75
76
  });
76
77
  }
@@ -86,4 +87,4 @@ export {
86
87
  SUPABASE_BROWSER_PROMPT,
87
88
  SupabaseResource
88
89
  };
89
- //# sourceMappingURL=chunk-LUDXUYIA.js.map
90
+ //# sourceMappingURL=chunk-WEJGUCCL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/supabase/supabase.ts","../src/resource/supabase/config.ts","../src/resource/supabase/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n remapCommandsResource,\n remapOpsResource,\n ResourceName,\n type RegisteredCommand,\n type RegisteredOp,\n} from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport {\n redactSupabaseConfig,\n supabaseToS3Config,\n type SupabaseConfig,\n type SupabaseConfigRedacted,\n} from './config.ts'\nimport { SUPABASE_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface SupabaseResourceState {\n type: string\n config: SupabaseConfigRedacted\n}\n\nexport class SupabaseResource extends S3Resource {\n override readonly kind: string = ResourceName.SUPABASE\n override readonly prompt: string = SUPABASE_BROWSER_PROMPT\n readonly supabaseConfig: SupabaseConfig\n private readonly supabaseOps: readonly RegisteredOp[]\n private readonly supabaseCommands: readonly RegisteredCommand[]\n\n constructor(config: SupabaseConfig) {\n super(supabaseToS3Config(config))\n this.supabaseConfig = config\n this.supabaseOps = remapOpsResource(super.ops(), ResourceName.SUPABASE)\n this.supabaseCommands = remapCommandsResource(super.commands(), ResourceName.SUPABASE)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.supabaseOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.supabaseCommands\n }\n\n override getState(): Promise<SupabaseResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactSupabaseConfig(this.supabaseConfig),\n })\n }\n\n override loadState(_state: SupabaseResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { redactConfigWithSchema, secretSchema, z } from '@struktoai/mirage-core'\nimport type { S3BrowserPresignedUrlProvider, S3Config } from '../s3/config.ts'\n\nexport interface SupabaseConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n projectRef?: string\n region?: string\n endpoint?: string\n defaultContentType?: string\n}\n\nexport interface SupabaseConfigRedacted extends Omit<SupabaseConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const SupabaseConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n projectRef: z.string().optional(),\n region: z.string().optional(),\n endpoint: z.string().optional(),\n defaultContentType: z.string().optional(),\n})\n\nexport function resolvedSupabaseEndpoint(config: SupabaseConfig): string | undefined {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n if (config.projectRef !== undefined && config.projectRef !== '') {\n return `https://${config.projectRef}.storage.supabase.co/storage/v1/s3`\n }\n return undefined\n}\n\nexport function supabaseToS3Config(config: SupabaseConfig): S3Config {\n const endpoint = resolvedSupabaseEndpoint(config)\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : {}),\n ...(endpoint !== undefined ? { endpoint } : {}),\n forcePathStyle: true,\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n }\n}\n\nexport function redactSupabaseConfig(config: SupabaseConfig): SupabaseConfigRedacted {\n return redactConfigWithSchema(SupabaseConfigSchema, config) as unknown as SupabaseConfigRedacted\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const SUPABASE_BROWSER_PROMPT = `{prefix}\n Remote Supabase Storage bucket accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACNP,SAAS,wBAAwB,cAAc,SAAS;AAgBjD,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,QAAQ,EAAE,OAAO;AAAA,EACjB,sBAAsB;AAAA,IACpB,EAAE,OAAsC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA,EACA,YAAY,EAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,SAAS,yBAAyB,QAA4C;AACnF,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MAAI,OAAO,eAAe,UAAa,OAAO,eAAe,IAAI;AAC/D,WAAO,WAAW,OAAO,UAAU;AAAA,EACrC;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,QAAkC;AACnE,QAAM,WAAW,yBAAyB,MAAM;AAChD,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,GAAI,OAAO,WAAW,SAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/D,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,gBAAgB;AAAA,IAChB,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,EACP;AACF;AAEO,SAAS,qBAAqB,QAAgD;AACnF,SAAO,uBAAuB,sBAAsB,MAAM;AAC5D;;;ACnDO,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;;;AFqBhC,IAAM,mBAAN,cAA+B,WAAW;AAAA,EAC7B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAwB;AAClC,UAAM,mBAAmB,MAAM,CAAC;AAChC,SAAK,iBAAiB;AACtB,SAAK,cAAc,iBAAiB,MAAM,IAAI,GAAG,aAAa,QAAQ;AACtE,SAAK,mBAAmB,sBAAsB,MAAM,SAAS,GAAG,aAAa,QAAQ;AAAA,EACvF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAA2C;AAClD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,qBAAqB,KAAK,cAAc;AAAA,IAClD,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA8C;AAC/D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1,11 +1,25 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-VLFE4FGD.js";
3
+ } from "./chunk-XFREXNA2.js";
4
4
 
5
5
  // src/resource/gcs/gcs.ts
6
- import { ResourceName } from "@struktoai/mirage-core";
6
+ import {
7
+ remapCommandsResource,
8
+ remapOpsResource,
9
+ ResourceName
10
+ } from "@struktoai/mirage-core";
7
11
 
8
12
  // src/resource/gcs/config.ts
13
+ import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
14
+ var GCSConfigSchema = z.object({
15
+ bucket: z.string(),
16
+ presignedUrlProvider: secretSchema(
17
+ z.custom((value) => typeof value === "function")
18
+ ),
19
+ region: z.string().optional(),
20
+ endpoint: z.string().optional(),
21
+ defaultContentType: z.string().optional()
22
+ });
9
23
  function gcsToS3Config(config) {
10
24
  return {
11
25
  bucket: config.bucket,
@@ -16,7 +30,7 @@ function gcsToS3Config(config) {
16
30
  };
17
31
  }
18
32
  function redactGcsConfig(config) {
19
- return { ...config, presignedUrlProvider: "<REDACTED>" };
33
+ return redactConfigWithSchema(GCSConfigSchema, config);
20
34
  }
21
35
 
22
36
  // src/resource/gcs/prompt.ts
@@ -27,18 +41,6 @@ var GCS_BROWSER_PROMPT = `{prefix}
27
41
  addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
28
42
 
29
43
  // src/resource/gcs/gcs.ts
30
- function remapOpsResource(ops, to) {
31
- return ops.map((op) => op.resource === ResourceName.S3 ? { ...op, resource: to } : op);
32
- }
33
- function remapCommandsResource(commands, to) {
34
- return commands.map((cmd) => {
35
- if (cmd.resource !== ResourceName.S3) return cmd;
36
- const proto = Object.getPrototypeOf(cmd);
37
- const copy = Object.assign(Object.create(proto), cmd);
38
- Object.assign(copy, { resource: to });
39
- return copy;
40
- });
41
- }
42
44
  var GCSResource = class extends S3Resource {
43
45
  kind = ResourceName.GCS;
44
46
  prompt = GCS_BROWSER_PROMPT;
@@ -60,8 +62,6 @@ var GCSResource = class extends S3Resource {
60
62
  getState() {
61
63
  return Promise.resolve({
62
64
  type: this.kind,
63
- needsOverride: true,
64
- redactedFields: ["presignedUrlProvider"],
65
65
  config: redactGcsConfig(this.gcsConfig)
66
66
  });
67
67
  }
@@ -76,4 +76,4 @@ export {
76
76
  GCS_BROWSER_PROMPT,
77
77
  GCSResource
78
78
  };
79
- //# sourceMappingURL=chunk-UFXEZ56G.js.map
79
+ //# sourceMappingURL=chunk-WZ53HLH6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gcs/gcs.ts","../src/resource/gcs/config.ts","../src/resource/gcs/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n remapCommandsResource,\n remapOpsResource,\n ResourceName,\n type RegisteredCommand,\n type RegisteredOp,\n} from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport { gcsToS3Config, redactGcsConfig, type GCSConfig, type GCSConfigRedacted } from './config.ts'\nimport { GCS_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface GCSResourceState {\n type: string\n config: GCSConfigRedacted\n}\n\nexport class GCSResource extends S3Resource {\n override readonly kind: string = ResourceName.GCS\n override readonly prompt: string = GCS_BROWSER_PROMPT\n readonly gcsConfig: GCSConfig\n private readonly gcsOps: readonly RegisteredOp[]\n private readonly gcsCommands: readonly RegisteredCommand[]\n\n constructor(config: GCSConfig) {\n super(gcsToS3Config(config))\n this.gcsConfig = config\n this.gcsOps = remapOpsResource(super.ops(), ResourceName.GCS)\n this.gcsCommands = remapCommandsResource(super.commands(), ResourceName.GCS)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.gcsOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.gcsCommands\n }\n\n override getState(): Promise<GCSResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGcsConfig(this.gcsConfig),\n })\n }\n\n override loadState(_state: GCSResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { redactConfigWithSchema, secretSchema, z } from '@struktoai/mirage-core'\nimport type { S3BrowserPresignedUrlProvider, S3Config } from '../s3/config.ts'\n\nexport interface GCSConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n region?: string\n endpoint?: string\n defaultContentType?: string\n}\n\nexport interface GCSConfigRedacted extends Omit<GCSConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const GCSConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n region: z.string().optional(),\n endpoint: z.string().optional(),\n defaultContentType: z.string().optional(),\n})\n\nexport function gcsToS3Config(config: GCSConfig): S3Config {\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : { region: 'auto' }),\n ...(config.endpoint !== undefined\n ? { endpoint: config.endpoint }\n : { endpoint: 'https://storage.googleapis.com' }),\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n }\n}\n\nexport function redactGcsConfig(config: GCSConfig): GCSConfigRedacted {\n return redactConfigWithSchema(GCSConfigSchema, config) as unknown as GCSConfigRedacted\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const GCS_BROWSER_PROMPT = `{prefix}\n Remote Google Cloud Storage bucket accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACNP,SAAS,wBAAwB,cAAc,SAAS;AAejD,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,EACjB,sBAAsB;AAAA,IACpB,EAAE,OAAsC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA,EACA,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,SAAS,cAAc,QAA6B;AACzD,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,GAAI,OAAO,WAAW,SAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,EAAE,QAAQ,OAAO;AAAA,IAC/E,GAAI,OAAO,aAAa,SACpB,EAAE,UAAU,OAAO,SAAS,IAC5B,EAAE,UAAU,iCAAiC;AAAA,IACjD,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,EACP;AACF;AAEO,SAAS,gBAAgB,QAAsC;AACpE,SAAO,uBAAuB,iBAAiB,MAAM;AACvD;;;ACzCO,IAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;;;AFgB3B,IAAM,cAAN,cAA0B,WAAW;AAAA,EACxB,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAmB;AAC7B,UAAM,cAAc,MAAM,CAAC;AAC3B,SAAK,YAAY;AACjB,SAAK,SAAS,iBAAiB,MAAM,IAAI,GAAG,aAAa,GAAG;AAC5D,SAAK,cAAc,sBAAsB,MAAM,SAAS,GAAG,aAAa,GAAG;AAAA,EAC7E;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAsC;AAC7C,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,gBAAgB,KAAK,SAAS;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAAyC;AAC1D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -39,6 +39,7 @@ var S3_BROWSER_PROMPT = `{prefix}
39
39
  Listing operations require the presigner to sign LIST/COPY operations in
40
40
  addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
41
41
  var S3Resource = class {
42
+ supportsSnapshot = true;
42
43
  kind = ResourceName.S3;
43
44
  isRemote = true;
44
45
  indexTtl = 600;
@@ -149,8 +150,6 @@ var S3Resource = class {
149
150
  getState() {
150
151
  return Promise.resolve({
151
152
  type: this.kind,
152
- needsOverride: true,
153
- redactedFields: ["presignedUrlProvider"],
154
153
  config: redactS3Config(this.config)
155
154
  });
156
155
  }
@@ -175,4 +174,4 @@ export {
175
174
  S3_BROWSER_PROMPT,
176
175
  S3Resource
177
176
  };
178
- //# sourceMappingURL=chunk-VLFE4FGD.js.map
177
+ //# sourceMappingURL=chunk-XFREXNA2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/s3/s3.ts","../src/resource/s3/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n copy as copyCore,\n create as createCore,\n du as duCore,\n duAll as duAllCore,\n exists as existsCore,\n type FileStat,\n type FindOptions,\n find as findCore,\n type IndexCacheStore,\n mkdir as mkdirCore,\n PathSpec,\n RAMIndexCacheStore,\n rangeRead as rangeReadCore,\n S3_COMMANDS,\n read as readCore,\n readdir as readdirCore,\n type RegisteredCommand,\n type RegisteredOp,\n rename as renameCore,\n type Resource,\n ResourceName,\n resolveS3Glob as globCore,\n rmR as rmRCore,\n rmdir as rmdirCore,\n S3_OPS,\n S3Accessor,\n stat as statCore,\n stream as streamCore,\n truncate as truncateCore,\n unlink as unlinkCore,\n write as writeCore,\n} from '@struktoai/mirage-core'\nimport { redactConfig, type S3Config, type S3ConfigRedacted } from './config.ts'\n\nexport const S3_BROWSER_PROMPT = `{prefix}\n Remote S3 bucket accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n\nexport interface S3ResourceState {\n type: string\n config: S3ConfigRedacted\n}\n\nexport class S3Resource implements Resource {\n readonly supportsSnapshot: boolean = true\n readonly kind: string = ResourceName.S3\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = S3_BROWSER_PROMPT\n readonly config: S3Config\n readonly accessor: S3Accessor\n readonly index: IndexCacheStore\n\n constructor(config: S3Config) {\n this.config = config\n this.accessor = new S3Accessor(this.config)\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return S3_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return S3_OPS\n }\n\n streamPath(p: PathSpec): AsyncIterable<Uint8Array> {\n return streamCore(this.accessor, p)\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return readCore(this.accessor, p)\n }\n\n writeFile(p: PathSpec, data: Uint8Array): Promise<void> {\n return writeCore(this.accessor, p, data)\n }\n\n async appendFile(p: PathSpec, data: Uint8Array): Promise<void> {\n let existing: Uint8Array\n try {\n existing = await readCore(this.accessor, p)\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') {\n existing = new Uint8Array()\n } else {\n throw err\n }\n }\n const merged = new Uint8Array(existing.byteLength + data.byteLength)\n merged.set(existing, 0)\n merged.set(data, existing.byteLength)\n await writeCore(this.accessor, p, merged)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return readdirCore(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return statCore(this.accessor, p, this.index)\n }\n\n exists(p: PathSpec): Promise<boolean> {\n return existsCore(this.accessor, p)\n }\n\n mkdir(p: PathSpec): Promise<void> {\n return mkdirCore(this.accessor, p)\n }\n\n rmdir(p: PathSpec): Promise<void> {\n return rmdirCore(this.accessor, p)\n }\n\n unlink(p: PathSpec): Promise<void> {\n return unlinkCore(this.accessor, p)\n }\n\n rename(src: PathSpec, dst: PathSpec): Promise<void> {\n return renameCore(this.accessor, src, dst)\n }\n\n truncate(p: PathSpec, length: number): Promise<void> {\n return truncateCore(this.accessor, p, length)\n }\n\n copy(src: PathSpec, dst: PathSpec): Promise<void> {\n return copyCore(this.accessor, src, dst)\n }\n\n rmR(p: PathSpec): Promise<void> {\n return rmRCore(this.accessor, p)\n }\n\n du(p: PathSpec): Promise<number> {\n return duCore(this.accessor, p)\n }\n\n find(p: PathSpec, options: FindOptions = {}): Promise<string[]> {\n return findCore(this.accessor, p, options)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective = prefix\n ? paths.map((p) =>\n p.prefix\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return globCore(this.accessor, effective, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n try {\n const s = await statCore(this.accessor, p, this.index)\n const etag = (s.extra as { etag?: unknown }).etag\n return typeof etag === 'string' && etag !== '' ? etag : null\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') return null\n throw err\n }\n }\n\n getState(): Promise<S3ResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactConfig(this.config),\n })\n }\n\n loadState(_state: S3ResourceState): Promise<void> {\n return Promise.resolve()\n }\n\n // Ignored — duAll is not yet on the public Resource interface, but keeping\n // it around matches the node-side S3Resource.opsMap hook for completeness.\n _duAll(p: PathSpec): Promise<[[string, number][], number]> {\n return duAllCore(this.accessor, p)\n }\n\n _rangeRead(p: PathSpec, offset: number, size: number): Promise<Uint8Array> {\n return rangeReadCore(this.accessor, p, offset, size)\n }\n\n _create(p: PathSpec): Promise<void> {\n return createCore(this.accessor, p)\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport {\n redactS3Config as redactConfig,\n type S3BrowserOperation,\n type S3BrowserPresignedUrlProvider,\n type S3BrowserSignOptions,\n type S3Config,\n type S3ConfigRedacted,\n} from '@struktoai/mirage-core'\n"],"mappings":"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","names":[]}
@@ -0,0 +1,79 @@
1
+ import {
2
+ S3Resource
3
+ } from "./chunk-XFREXNA2.js";
4
+
5
+ // src/resource/minio/minio.ts
6
+ import {
7
+ remapCommandsResource,
8
+ remapOpsResource,
9
+ ResourceName
10
+ } from "@struktoai/mirage-core";
11
+
12
+ // src/resource/minio/config.ts
13
+ import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
14
+ var MinIOConfigSchema = z.object({
15
+ bucket: z.string(),
16
+ presignedUrlProvider: secretSchema(
17
+ z.custom((value) => typeof value === "function")
18
+ ),
19
+ endpoint: z.string().optional(),
20
+ region: z.string().optional(),
21
+ defaultContentType: z.string().optional()
22
+ });
23
+ function minioToS3Config(config) {
24
+ return {
25
+ bucket: config.bucket,
26
+ presignedUrlProvider: config.presignedUrlProvider,
27
+ ...config.region !== void 0 ? { region: config.region } : {},
28
+ ...config.endpoint !== void 0 ? { endpoint: config.endpoint } : {},
29
+ ...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {}
30
+ };
31
+ }
32
+ function redactMinIOConfig(config) {
33
+ return redactConfigWithSchema(MinIOConfigSchema, config);
34
+ }
35
+
36
+ // src/resource/minio/prompt.ts
37
+ var MINIO_BROWSER_PROMPT = `{prefix}
38
+ Remote MinIO bucket (S3-compatible) accessed via presigned URLs (browser runtime).
39
+ Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.
40
+ Listing operations require the presigner to sign LIST/COPY operations in
41
+ addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
42
+
43
+ // src/resource/minio/minio.ts
44
+ var MinIOResource = class extends S3Resource {
45
+ kind = ResourceName.MINIO;
46
+ prompt = MINIO_BROWSER_PROMPT;
47
+ minioConfig;
48
+ minioOps;
49
+ minioCommands;
50
+ constructor(config) {
51
+ super(minioToS3Config(config));
52
+ this.minioConfig = config;
53
+ this.minioOps = remapOpsResource(super.ops(), ResourceName.MINIO);
54
+ this.minioCommands = remapCommandsResource(super.commands(), ResourceName.MINIO);
55
+ }
56
+ ops() {
57
+ return this.minioOps;
58
+ }
59
+ commands() {
60
+ return this.minioCommands;
61
+ }
62
+ getState() {
63
+ return Promise.resolve({
64
+ type: this.kind,
65
+ config: redactMinIOConfig(this.minioConfig)
66
+ });
67
+ }
68
+ loadState(_state) {
69
+ return Promise.resolve();
70
+ }
71
+ };
72
+
73
+ export {
74
+ minioToS3Config,
75
+ redactMinIOConfig,
76
+ MINIO_BROWSER_PROMPT,
77
+ MinIOResource
78
+ };
79
+ //# sourceMappingURL=chunk-YEDSFMWK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/minio/minio.ts","../src/resource/minio/config.ts","../src/resource/minio/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n remapCommandsResource,\n remapOpsResource,\n ResourceName,\n type RegisteredCommand,\n type RegisteredOp,\n} from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport {\n minioToS3Config,\n redactMinIOConfig,\n type MinIOConfig,\n type MinIOConfigRedacted,\n} from './config.ts'\nimport { MINIO_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface MinIOResourceState {\n type: string\n config: MinIOConfigRedacted\n}\n\nexport class MinIOResource extends S3Resource {\n override readonly kind: string = ResourceName.MINIO\n override readonly prompt: string = MINIO_BROWSER_PROMPT\n readonly minioConfig: MinIOConfig\n private readonly minioOps: readonly RegisteredOp[]\n private readonly minioCommands: readonly RegisteredCommand[]\n\n constructor(config: MinIOConfig) {\n super(minioToS3Config(config))\n this.minioConfig = config\n this.minioOps = remapOpsResource(super.ops(), ResourceName.MINIO)\n this.minioCommands = remapCommandsResource(super.commands(), ResourceName.MINIO)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.minioOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.minioCommands\n }\n\n override getState(): Promise<MinIOResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactMinIOConfig(this.minioConfig),\n })\n }\n\n override loadState(_state: MinIOResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { redactConfigWithSchema, secretSchema, z } from '@struktoai/mirage-core'\nimport type { S3BrowserPresignedUrlProvider, S3Config } from '../s3/config.ts'\n\nexport interface MinIOConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n endpoint?: string\n region?: string\n defaultContentType?: string\n}\n\nexport interface MinIOConfigRedacted extends Omit<MinIOConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const MinIOConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n endpoint: z.string().optional(),\n region: z.string().optional(),\n defaultContentType: z.string().optional(),\n})\n\nexport function minioToS3Config(config: MinIOConfig): S3Config {\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : {}),\n ...(config.endpoint !== undefined ? { endpoint: config.endpoint } : {}),\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n }\n}\n\nexport function redactMinIOConfig(config: MinIOConfig): MinIOConfigRedacted {\n return redactConfigWithSchema(MinIOConfigSchema, config) as unknown as MinIOConfigRedacted\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const MINIO_BROWSER_PROMPT = `{prefix}\n Remote MinIO bucket (S3-compatible) accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACNP,SAAS,wBAAwB,cAAc,SAAS;AAejD,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,QAAQ,EAAE,OAAO;AAAA,EACjB,sBAAsB;AAAA,IACpB,EAAE,OAAsC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA,EACA,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,SAAS,gBAAgB,QAA+B;AAC7D,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,GAAI,OAAO,WAAW,SAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/D,GAAI,OAAO,aAAa,SAAY,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,IACrE,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,EACP;AACF;AAEO,SAAS,kBAAkB,QAA0C;AAC1E,SAAO,uBAAuB,mBAAmB,MAAM;AACzD;;;ACvCO,IAAM,uBAAuB;AAAA;AAAA;AAAA;AAAA;;;AFqB7B,IAAM,gBAAN,cAA4B,WAAW;AAAA,EAC1B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAqB;AAC/B,UAAM,gBAAgB,MAAM,CAAC;AAC7B,SAAK,cAAc;AACnB,SAAK,WAAW,iBAAiB,MAAM,IAAI,GAAG,aAAa,KAAK;AAChE,SAAK,gBAAgB,sBAAsB,MAAM,SAAS,GAAG,aAAa,KAAK;AAAA,EACjF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAwC;AAC/C,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,kBAAkB,KAAK,WAAW;AAAA,IAC5C,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA2C;AAC5D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,26 @@
1
+ // src/resource/gsheets/config.ts
2
+ import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
3
+ var GSheetsConfigSchema = z.object({
4
+ clientId: z.string(),
5
+ clientSecret: secretStr().optional(),
6
+ refreshToken: secretStr()
7
+ });
8
+ function redactGSheetsConfig(config) {
9
+ return redactConfigWithSchema(GSheetsConfigSchema, config);
10
+ }
11
+ function normalizeGSheetsConfig(input) {
12
+ return normalizeFields(input, {
13
+ rename: {
14
+ client_id: "clientId",
15
+ client_secret: "clientSecret",
16
+ refresh_token: "refreshToken"
17
+ }
18
+ });
19
+ }
20
+
21
+ export {
22
+ GSheetsConfigSchema,
23
+ redactGSheetsConfig,
24
+ normalizeGSheetsConfig
25
+ };
26
+ //# sourceMappingURL=chunk-YGRKFONX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gsheets/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { normalizeFields, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface GSheetsConfig {\n clientId: string\n clientSecret?: string\n refreshToken: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nexport interface GSheetsConfigRedacted {\n clientId: string\n clientSecret?: '<REDACTED>'\n refreshToken: '<REDACTED>'\n}\n\nexport const GSheetsConfigSchema = z.object({\n clientId: z.string(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr(),\n})\n\nexport function redactGSheetsConfig(config: GSheetsConfig): GSheetsConfigRedacted {\n return redactConfigWithSchema(GSheetsConfigSchema, config) as unknown as GSheetsConfigRedacted\n}\n\nexport function normalizeGSheetsConfig(input: Record<string, unknown>): GSheetsConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n },\n }) as unknown as GSheetsConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAe/D,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,cAAc,UAAU;AAC1B,CAAC;AAEM,SAAS,oBAAoB,QAA8C;AAChF,SAAO,uBAAuB,qBAAqB,MAAM;AAC3D;AAEO,SAAS,uBAAuB,OAA+C;AACpF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,11 @@
1
+ import {
2
+ GDriveConfigSchema,
3
+ normalizeGDriveConfig,
4
+ redactGDriveConfig
5
+ } from "./chunk-NMZBJOFW.js";
6
+ export {
7
+ GDriveConfigSchema,
8
+ normalizeGDriveConfig,
9
+ redactGDriveConfig
10
+ };
11
+ //# sourceMappingURL=config-7IZCGWKX.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ GSlidesConfigSchema,
3
+ normalizeGSlidesConfig,
4
+ redactGSlidesConfig
5
+ } from "./chunk-JSAQMYPK.js";
6
+ export {
7
+ GSlidesConfigSchema,
8
+ normalizeGSlidesConfig,
9
+ redactGSlidesConfig
10
+ };
11
+ //# sourceMappingURL=config-AT74FARJ.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ GDocsConfigSchema,
3
+ normalizeGDocsConfig,
4
+ redactGDocsConfig
5
+ } from "./chunk-2H4KUUFP.js";
6
+ export {
7
+ GDocsConfigSchema,
8
+ normalizeGDocsConfig,
9
+ redactGDocsConfig
10
+ };
11
+ //# sourceMappingURL=config-C2AYHACT.js.map
@@ -1,9 +1,11 @@
1
1
  import {
2
+ GitHubCIConfigSchema,
2
3
  normalizeGitHubCIConfig,
3
4
  redactGitHubCIConfig
4
- } from "./chunk-QARIHW3I.js";
5
+ } from "./chunk-HYUESAQS.js";
5
6
  export {
7
+ GitHubCIConfigSchema,
6
8
  normalizeGitHubCIConfig,
7
9
  redactGitHubCIConfig
8
10
  };
9
- //# sourceMappingURL=config-U4UI4OKA.js.map
11
+ //# sourceMappingURL=config-ET26F632.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ BoxConfigSchema,
3
+ normalizeBoxConfig,
4
+ redactBoxConfig
5
+ } from "./chunk-J54OBIJA.js";
6
+ export {
7
+ BoxConfigSchema,
8
+ normalizeBoxConfig,
9
+ redactBoxConfig
10
+ };
11
+ //# sourceMappingURL=config-GHJOYNM6.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ DropboxConfigSchema,
3
+ normalizeDropboxConfig,
4
+ redactDropboxConfig
5
+ } from "./chunk-O5ONB7QT.js";
6
+ export {
7
+ DropboxConfigSchema,
8
+ normalizeDropboxConfig,
9
+ redactDropboxConfig
10
+ };
11
+ //# sourceMappingURL=config-L55UXIF4.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ GoogleConfigSchema,
3
+ normalizeGoogleConfig,
4
+ redactGoogleConfig
5
+ } from "./chunk-54NTYJEO.js";
6
+ export {
7
+ GoogleConfigSchema as GmailConfigSchema,
8
+ normalizeGoogleConfig as normalizeGmailConfig,
9
+ redactGoogleConfig as redactGmailConfig
10
+ };
11
+ //# sourceMappingURL=config-NV5WXP64.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ GSheetsConfigSchema,
3
+ normalizeGSheetsConfig,
4
+ redactGSheetsConfig
5
+ } from "./chunk-YGRKFONX.js";
6
+ export {
7
+ GSheetsConfigSchema,
8
+ normalizeGSheetsConfig,
9
+ redactGSheetsConfig
10
+ };
11
+ //# sourceMappingURL=config-V7BLK5WP.js.map
@@ -0,0 +1,8 @@
1
+ import {
2
+ DigitalOceanResource
3
+ } from "./chunk-RJ4RR3BR.js";
4
+ import "./chunk-XFREXNA2.js";
5
+ export {
6
+ DigitalOceanResource
7
+ };
8
+ //# sourceMappingURL=digitalocean-KC7VIWZK.js.map
@@ -0,0 +1,7 @@
1
+ import {
2
+ DiscordResource
3
+ } from "./chunk-N43C6XFP.js";
4
+ export {
5
+ DiscordResource
6
+ };
7
+ //# sourceMappingURL=discord-W3DSEXKN.js.map
@@ -0,0 +1,8 @@
1
+ import {
2
+ DropboxResource
3
+ } from "./chunk-SBAUYZJB.js";
4
+ import "./chunk-O5ONB7QT.js";
5
+ export {
6
+ DropboxResource
7
+ };
8
+ //# sourceMappingURL=dropbox-GI273OVA.js.map
@@ -0,0 +1,8 @@
1
+ import {
2
+ GCSResource
3
+ } from "./chunk-WZ53HLH6.js";
4
+ import "./chunk-XFREXNA2.js";
5
+ export {
6
+ GCSResource
7
+ };
8
+ //# sourceMappingURL=gcs-WRQTU27E.js.map
@@ -0,0 +1,8 @@
1
+ import {
2
+ GDocsResource
3
+ } from "./chunk-6K57U6CM.js";
4
+ import "./chunk-2H4KUUFP.js";
5
+ export {
6
+ GDocsResource
7
+ };
8
+ //# sourceMappingURL=gdocs-EI2EFVKG.js.map
@@ -0,0 +1,8 @@
1
+ import {
2
+ GDriveResource
3
+ } from "./chunk-4YJMDF2S.js";
4
+ import "./chunk-NMZBJOFW.js";
5
+ export {
6
+ GDriveResource
7
+ };
8
+ //# sourceMappingURL=gdrive-62HD67IP.js.map
@@ -0,0 +1,7 @@
1
+ import {
2
+ GitHubResource
3
+ } from "./chunk-ATLYBQSC.js";
4
+ export {
5
+ GitHubResource
6
+ };
7
+ //# sourceMappingURL=github-SWLYD3LS.js.map
@@ -0,0 +1,8 @@
1
+ import {
2
+ GitHubCIResource
3
+ } from "./chunk-JVTKE6DB.js";
4
+ import "./chunk-HYUESAQS.js";
5
+ export {
6
+ GitHubCIResource
7
+ };
8
+ //# sourceMappingURL=github_ci-7P7VGBKM.js.map