@struktoai/mirage-browser 0.0.2-alpha.0 → 0.0.3-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -127
- package/dist/aliyun-F2ORS3KZ.js +8 -0
- package/dist/backblaze-HOVWPSV7.js +8 -0
- package/dist/box-VJSE5N7P.js +8 -0
- package/dist/ceph-CQKQ4NWW.js +8 -0
- package/dist/chunk-2H4KUUFP.js +26 -0
- package/dist/chunk-2H4KUUFP.js.map +1 -0
- package/dist/chunk-32VC36P4.js +89 -0
- package/dist/chunk-32VC36P4.js.map +1 -0
- package/dist/{chunk-MSNVGH6T.js → chunk-4YJMDF2S.js} +2 -4
- package/dist/chunk-4YJMDF2S.js.map +1 -0
- package/dist/chunk-54NTYJEO.js +13 -0
- package/dist/chunk-54NTYJEO.js.map +1 -0
- package/dist/chunk-63GZEZW4.js +79 -0
- package/dist/chunk-63GZEZW4.js.map +1 -0
- package/dist/{chunk-UW3D2AF6.js → chunk-6K57U6CM.js} +2 -4
- package/dist/chunk-6K57U6CM.js.map +1 -0
- package/dist/chunk-72GY5B23.js +89 -0
- package/dist/chunk-72GY5B23.js.map +1 -0
- package/dist/{chunk-QYFCHCGX.js → chunk-ATLYBQSC.js} +14 -29
- package/dist/chunk-ATLYBQSC.js.map +1 -0
- package/dist/{chunk-ONQ5JGPR.js → chunk-BUXWUKN7.js} +9 -6
- package/dist/chunk-BUXWUKN7.js.map +1 -0
- package/dist/chunk-CAKSQ2LV.js +85 -0
- package/dist/chunk-CAKSQ2LV.js.map +1 -0
- package/dist/chunk-CO4FMKOF.js +89 -0
- package/dist/chunk-CO4FMKOF.js.map +1 -0
- package/dist/{chunk-5Q5GJUAF.js → chunk-D3JDGGKO.js} +19 -18
- package/dist/chunk-D3JDGGKO.js.map +1 -0
- package/dist/{chunk-DDM2Z7YA.js → chunk-D6HF462C.js} +2 -4
- package/dist/chunk-D6HF462C.js.map +1 -0
- package/dist/{chunk-27UVUTJH.js → chunk-EH2BN4JC.js} +34 -3
- package/dist/chunk-EH2BN4JC.js.map +1 -0
- package/dist/chunk-EUKHGXCE.js +89 -0
- package/dist/chunk-EUKHGXCE.js.map +1 -0
- package/dist/chunk-GHKX2BA3.js +89 -0
- package/dist/chunk-GHKX2BA3.js.map +1 -0
- package/dist/{chunk-FL7YLP7D.js → chunk-HGSTRD7H.js} +10 -8
- package/dist/chunk-HGSTRD7H.js.map +1 -0
- package/dist/chunk-HYUESAQS.js +24 -0
- package/dist/chunk-HYUESAQS.js.map +1 -0
- package/dist/{chunk-ZJ6ROCTP.js → chunk-INLL7LRM.js} +11 -14
- package/dist/chunk-INLL7LRM.js.map +1 -0
- package/dist/chunk-J54OBIJA.js +29 -0
- package/dist/chunk-J54OBIJA.js.map +1 -0
- package/dist/{chunk-DPC7QRYO.js → chunk-JCS5EG5A.js} +9 -6
- package/dist/chunk-JCS5EG5A.js.map +1 -0
- package/dist/chunk-JSAQMYPK.js +26 -0
- package/dist/chunk-JSAQMYPK.js.map +1 -0
- package/dist/{chunk-CZOTICOC.js → chunk-JVTKE6DB.js} +2 -4
- package/dist/chunk-JVTKE6DB.js.map +1 -0
- package/dist/{chunk-3PWPFOPS.js → chunk-MO5DGX42.js} +19 -18
- package/dist/chunk-MO5DGX42.js.map +1 -0
- package/dist/{chunk-LZRPA2P7.js → chunk-N43C6XFP.js} +9 -6
- package/dist/chunk-N43C6XFP.js.map +1 -0
- package/dist/chunk-NMZBJOFW.js +26 -0
- package/dist/chunk-NMZBJOFW.js.map +1 -0
- package/dist/chunk-O5ONB7QT.js +26 -0
- package/dist/chunk-O5ONB7QT.js.map +1 -0
- package/dist/{chunk-LSSB3AEW.js → chunk-RD7ED27I.js} +5 -12
- package/dist/chunk-RD7ED27I.js.map +1 -0
- package/dist/chunk-RJ4RR3BR.js +92 -0
- package/dist/chunk-RJ4RR3BR.js.map +1 -0
- package/dist/chunk-RJ5FBBL6.js +79 -0
- package/dist/chunk-RJ5FBBL6.js.map +1 -0
- package/dist/{chunk-SQQI4A6Y.js → chunk-RZRXEXHM.js} +2 -4
- package/dist/chunk-RZRXEXHM.js.map +1 -0
- package/dist/{chunk-CQJTW45B.js → chunk-SBAUYZJB.js} +2 -4
- package/dist/chunk-SBAUYZJB.js.map +1 -0
- package/dist/chunk-SJB2KXDM.js +2109 -0
- package/dist/chunk-SJB2KXDM.js.map +1 -0
- package/dist/{chunk-33SBWNB4.js → chunk-T43CZ3IZ.js} +9 -8
- package/dist/chunk-T43CZ3IZ.js.map +1 -0
- package/dist/{chunk-LG6GVNOL.js → chunk-TPFH5V4D.js} +2 -4
- package/dist/chunk-TPFH5V4D.js.map +1 -0
- package/dist/{chunk-LUDXUYIA.js → chunk-WEJGUCCL.js} +19 -18
- package/dist/chunk-WEJGUCCL.js.map +1 -0
- package/dist/{chunk-UFXEZ56G.js → chunk-WZ53HLH6.js} +18 -18
- package/dist/chunk-WZ53HLH6.js.map +1 -0
- package/dist/{chunk-VLFE4FGD.js → chunk-XFREXNA2.js} +2 -3
- package/dist/chunk-XFREXNA2.js.map +1 -0
- package/dist/chunk-YEDSFMWK.js +79 -0
- package/dist/chunk-YEDSFMWK.js.map +1 -0
- package/dist/chunk-YGRKFONX.js +26 -0
- package/dist/chunk-YGRKFONX.js.map +1 -0
- package/dist/config-7IZCGWKX.js +11 -0
- package/dist/config-AT74FARJ.js +11 -0
- package/dist/config-C2AYHACT.js +11 -0
- package/dist/{config-U4UI4OKA.js → config-ET26F632.js} +4 -2
- package/dist/config-GHJOYNM6.js +11 -0
- package/dist/config-L55UXIF4.js +11 -0
- package/dist/config-NV5WXP64.js +11 -0
- package/dist/config-V7BLK5WP.js +11 -0
- package/dist/digitalocean-KC7VIWZK.js +8 -0
- package/dist/discord-W3DSEXKN.js +7 -0
- package/dist/dropbox-GI273OVA.js +8 -0
- package/dist/gcs-WRQTU27E.js +8 -0
- package/dist/gdocs-EI2EFVKG.js +8 -0
- package/dist/gdrive-62HD67IP.js +8 -0
- package/dist/github-SWLYD3LS.js +7 -0
- package/dist/github_ci-7P7VGBKM.js +8 -0
- package/dist/gmail-B7HXHZ7D.js +8 -0
- package/dist/gsheets-OTBW2JWG.js +8 -0
- package/dist/gslides-MXSR4HRY.js +8 -0
- package/dist/index.d.ts +342 -166
- package/dist/index.js +264 -373
- package/dist/index.js.map +1 -1
- package/dist/langfuse-FWKU6E3F.js +7 -0
- package/dist/linear-SHVG3XVT.js +7 -0
- package/dist/minio-246KOHBJ.js +8 -0
- package/dist/mongodb-2ITJUDCF.js +7 -0
- package/dist/notion-BOBBSJSG.js +7 -0
- package/dist/oci-T7VREPQW.js +8 -0
- package/dist/opfs-3XNAXR5B.js +7 -0
- package/dist/qingstor-WIC27LS3.js +8 -0
- package/dist/qingstor-WIC27LS3.js.map +1 -0
- package/dist/r2-EAX6KHEI.js +8 -0
- package/dist/r2-EAX6KHEI.js.map +1 -0
- package/dist/{s3-A4XFE6QV.js → s3-GD2WKLWR.js} +2 -2
- package/dist/s3-GD2WKLWR.js.map +1 -0
- package/dist/scaleway-OVFRZBKW.js +8 -0
- package/dist/scaleway-OVFRZBKW.js.map +1 -0
- package/dist/seaweedfs-EOJVO432.js +8 -0
- package/dist/seaweedfs-EOJVO432.js.map +1 -0
- package/dist/slack-RNXMU5OC.js +7 -0
- package/dist/slack-RNXMU5OC.js.map +1 -0
- package/dist/supabase-VSUNLIJ6.js +8 -0
- package/dist/supabase-VSUNLIJ6.js.map +1 -0
- package/dist/tencent-YYM5WUVU.js +8 -0
- package/dist/tencent-YYM5WUVU.js.map +1 -0
- package/dist/trello-MNR3VPTT.js +7 -0
- package/dist/trello-MNR3VPTT.js.map +1 -0
- package/dist/wasabi-K5ANTZ2C.js +8 -0
- package/dist/wasabi-K5ANTZ2C.js.map +1 -0
- package/package.json +3 -3
- package/dist/box-Y2SJWAAO.js +0 -8
- package/dist/chunk-27UVUTJH.js.map +0 -1
- package/dist/chunk-33SBWNB4.js.map +0 -1
- package/dist/chunk-3PWPFOPS.js.map +0 -1
- package/dist/chunk-5Q5GJUAF.js.map +0 -1
- package/dist/chunk-7GZXXXAS.js +0 -24
- package/dist/chunk-7GZXXXAS.js.map +0 -1
- package/dist/chunk-B4SYG2FD.js +0 -24
- package/dist/chunk-B4SYG2FD.js.map +0 -1
- package/dist/chunk-BIZONEJC.js +0 -24
- package/dist/chunk-BIZONEJC.js.map +0 -1
- package/dist/chunk-CQJTW45B.js.map +0 -1
- package/dist/chunk-CZOTICOC.js.map +0 -1
- package/dist/chunk-DDM2Z7YA.js.map +0 -1
- package/dist/chunk-DPC7QRYO.js.map +0 -1
- package/dist/chunk-FL7YLP7D.js.map +0 -1
- package/dist/chunk-GFWWDQUZ.js +0 -24
- package/dist/chunk-GFWWDQUZ.js.map +0 -1
- package/dist/chunk-LG6GVNOL.js.map +0 -1
- package/dist/chunk-LSSB3AEW.js.map +0 -1
- package/dist/chunk-LUDXUYIA.js.map +0 -1
- package/dist/chunk-LZRPA2P7.js.map +0 -1
- package/dist/chunk-ML57VOCK.js +0 -7590
- package/dist/chunk-ML57VOCK.js.map +0 -1
- package/dist/chunk-MSNVGH6T.js.map +0 -1
- package/dist/chunk-NBWTZXH2.js +0 -27
- package/dist/chunk-NBWTZXH2.js.map +0 -1
- package/dist/chunk-ONQ5JGPR.js.map +0 -1
- package/dist/chunk-OPROOV6J.js +0 -24
- package/dist/chunk-OPROOV6J.js.map +0 -1
- package/dist/chunk-QARIHW3I.js +0 -23
- package/dist/chunk-QARIHW3I.js.map +0 -1
- package/dist/chunk-QYFCHCGX.js.map +0 -1
- package/dist/chunk-SQQI4A6Y.js.map +0 -1
- package/dist/chunk-UFXEZ56G.js.map +0 -1
- package/dist/chunk-UW3D2AF6.js.map +0 -1
- package/dist/chunk-VLFE4FGD.js.map +0 -1
- package/dist/chunk-XIURBEVZ.js +0 -24
- package/dist/chunk-XIURBEVZ.js.map +0 -1
- package/dist/chunk-ZJ6ROCTP.js.map +0 -1
- package/dist/config-4FABMWVK.js +0 -9
- package/dist/config-DGIUMGBB.js +0 -9
- package/dist/config-G3TTNXLY.js +0 -9
- package/dist/config-GPCEEKCB.js +0 -9
- package/dist/config-KQ5VR2KZ.js +0 -9
- package/dist/config-LPMMVXLS.js +0 -9
- package/dist/config-VZGK63Z5.js +0 -9
- package/dist/discord-RG6URXXS.js +0 -7
- package/dist/dropbox-P7SOL7GN.js +0 -8
- package/dist/gcs-2QHB4CBT.js +0 -8
- package/dist/gdocs-JNZTOZ33.js +0 -8
- package/dist/gdrive-6MEIVN2F.js +0 -8
- package/dist/github-M7WODJR2.js +0 -7
- package/dist/github_ci-4XELEFSZ.js +0 -8
- package/dist/gmail-AO6A3URH.js +0 -8
- package/dist/gsheets-RFOKXMOJ.js +0 -8
- package/dist/gslides-GTVZPLLB.js +0 -8
- package/dist/langfuse-CDOLELMB.js +0 -7
- package/dist/linear-SXOQGG6B.js +0 -7
- package/dist/mongodb-HA7FAKDJ.js +0 -7
- package/dist/notion-ANZNMM3L.js +0 -7
- package/dist/oci-ML5ZRVZ2.js +0 -8
- package/dist/opfs-57XFMWWE.js +0 -7
- package/dist/r2-56O4Q2J4.js +0 -8
- package/dist/slack-QA7H7WLM.js +0 -7
- package/dist/supabase-NNK2RWG3.js +0 -8
- package/dist/trello-H6PZT2IT.js +0 -7
- /package/dist/{box-Y2SJWAAO.js.map → aliyun-F2ORS3KZ.js.map} +0 -0
- /package/dist/{config-4FABMWVK.js.map → backblaze-HOVWPSV7.js.map} +0 -0
- /package/dist/{config-DGIUMGBB.js.map → box-VJSE5N7P.js.map} +0 -0
- /package/dist/{config-G3TTNXLY.js.map → ceph-CQKQ4NWW.js.map} +0 -0
- /package/dist/{config-GPCEEKCB.js.map → config-7IZCGWKX.js.map} +0 -0
- /package/dist/{config-KQ5VR2KZ.js.map → config-AT74FARJ.js.map} +0 -0
- /package/dist/{config-LPMMVXLS.js.map → config-C2AYHACT.js.map} +0 -0
- /package/dist/{config-U4UI4OKA.js.map → config-ET26F632.js.map} +0 -0
- /package/dist/{config-VZGK63Z5.js.map → config-GHJOYNM6.js.map} +0 -0
- /package/dist/{discord-RG6URXXS.js.map → config-L55UXIF4.js.map} +0 -0
- /package/dist/{dropbox-P7SOL7GN.js.map → config-NV5WXP64.js.map} +0 -0
- /package/dist/{gcs-2QHB4CBT.js.map → config-V7BLK5WP.js.map} +0 -0
- /package/dist/{gdocs-JNZTOZ33.js.map → digitalocean-KC7VIWZK.js.map} +0 -0
- /package/dist/{gdrive-6MEIVN2F.js.map → discord-W3DSEXKN.js.map} +0 -0
- /package/dist/{github-M7WODJR2.js.map → dropbox-GI273OVA.js.map} +0 -0
- /package/dist/{github_ci-4XELEFSZ.js.map → gcs-WRQTU27E.js.map} +0 -0
- /package/dist/{gmail-AO6A3URH.js.map → gdocs-EI2EFVKG.js.map} +0 -0
- /package/dist/{gsheets-RFOKXMOJ.js.map → gdrive-62HD67IP.js.map} +0 -0
- /package/dist/{gslides-GTVZPLLB.js.map → github-SWLYD3LS.js.map} +0 -0
- /package/dist/{langfuse-CDOLELMB.js.map → github_ci-7P7VGBKM.js.map} +0 -0
- /package/dist/{linear-SXOQGG6B.js.map → gmail-B7HXHZ7D.js.map} +0 -0
- /package/dist/{mongodb-HA7FAKDJ.js.map → gsheets-OTBW2JWG.js.map} +0 -0
- /package/dist/{notion-ANZNMM3L.js.map → gslides-MXSR4HRY.js.map} +0 -0
- /package/dist/{oci-ML5ZRVZ2.js.map → langfuse-FWKU6E3F.js.map} +0 -0
- /package/dist/{opfs-57XFMWWE.js.map → linear-SHVG3XVT.js.map} +0 -0
- /package/dist/{r2-56O4Q2J4.js.map → minio-246KOHBJ.js.map} +0 -0
- /package/dist/{s3-A4XFE6QV.js.map → mongodb-2ITJUDCF.js.map} +0 -0
- /package/dist/{slack-QA7H7WLM.js.map → notion-BOBBSJSG.js.map} +0 -0
- /package/dist/{supabase-NNK2RWG3.js.map → oci-T7VREPQW.js.map} +0 -0
- /package/dist/{trello-H6PZT2IT.js.map → opfs-3XNAXR5B.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/github_ci/github_ci.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 GITHUB_CI_COMMANDS,\n GITHUB_CI_PROMPT,\n GITHUB_CI_VFS_OPS,\n GitHubCIAccessor,\n HttpCITransport,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n githubCiRead,\n githubCiReaddir,\n githubCiResolveGlob,\n githubCiStat,\n} from '@struktoai/mirage-core'\nimport { redactGitHubCIConfig, type GitHubCIConfig, type GitHubCIConfigRedacted } from './config.ts'\n\nexport interface GitHubCIResourceState {\n type: string\n config: GitHubCIConfigRedacted\n}\n\nexport class GitHubCIResource implements Resource {\n readonly kind: string = ResourceName.GITHUB_CI\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GITHUB_CI_PROMPT\n readonly config: GitHubCIConfig\n readonly accessor: GitHubCIAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GitHubCIConfig) {\n this.config = config\n const transportOpts: { token: string; baseUrl?: string } = { token: config.token }\n if (config.baseUrl !== undefined) transportOpts.baseUrl = config.baseUrl\n this.accessor = new GitHubCIAccessor({\n transport: new HttpCITransport(transportOpts),\n owner: config.owner,\n repo: config.repo,\n days: config.days ?? 30,\n })\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 GITHUB_CI_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GITHUB_CI_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return githubCiRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return githubCiReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return githubCiStat(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 githubCiResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GitHubCIResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGitHubCIConfig(this.config),\n })\n }\n\n loadState(_state: GitHubCIResourceState): 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,OACK;AAQA,IAAM,mBAAN,MAA2C;AAAA,EACvC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAwB;AAClC,SAAK,SAAS;AACd,UAAM,gBAAqD,EAAE,OAAO,OAAO,MAAM;AACjF,QAAI,OAAO,YAAY,OAAW,eAAc,UAAU,OAAO;AACjE,SAAK,WAAW,IAAI,iBAAiB;AAAA,MACnC,WAAW,IAAI,gBAAgB,aAAa;AAAA,MAC5C,OAAO,OAAO;AAAA,MACd,MAAM,OAAO;AAAA,MACb,MAAM,OAAO,QAAQ;AAAA,IACvB,CAAC;AACD,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,aAAa,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAClD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,gBAAgB,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACrD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,aAAa,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAClD;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,oBAAoB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EACjE;AAAA,EAEA,WAA2C;AACzC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,qBAAqB,KAAK,MAAM;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA8C;AACtD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import {
|
|
2
2
|
S3Resource
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XFREXNA2.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/r2/r2.ts
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
remapCommandsResource,
|
|
8
|
+
remapOpsResource,
|
|
9
|
+
ResourceName
|
|
10
|
+
} from "@struktoai/mirage-core";
|
|
7
11
|
|
|
8
12
|
// src/resource/r2/config.ts
|
|
13
|
+
import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
|
|
14
|
+
var R2ConfigSchema = z.object({
|
|
15
|
+
bucket: z.string(),
|
|
16
|
+
presignedUrlProvider: secretSchema(
|
|
17
|
+
z.custom((value) => typeof value === "function")
|
|
18
|
+
),
|
|
19
|
+
accountId: z.string().optional(),
|
|
20
|
+
region: z.string().optional(),
|
|
21
|
+
endpoint: z.string().optional(),
|
|
22
|
+
defaultContentType: z.string().optional()
|
|
23
|
+
});
|
|
9
24
|
function resolvedR2Endpoint(config) {
|
|
10
25
|
if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
|
|
11
26
|
if (config.accountId !== void 0 && config.accountId !== "") {
|
|
@@ -24,7 +39,7 @@ function r2ToS3Config(config) {
|
|
|
24
39
|
};
|
|
25
40
|
}
|
|
26
41
|
function redactR2Config(config) {
|
|
27
|
-
return
|
|
42
|
+
return redactConfigWithSchema(R2ConfigSchema, config);
|
|
28
43
|
}
|
|
29
44
|
|
|
30
45
|
// src/resource/r2/prompt.ts
|
|
@@ -35,18 +50,6 @@ var R2_BROWSER_PROMPT = `{prefix}
|
|
|
35
50
|
addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
|
|
36
51
|
|
|
37
52
|
// src/resource/r2/r2.ts
|
|
38
|
-
function remapOpsResource(ops, to) {
|
|
39
|
-
return ops.map((op) => op.resource === ResourceName.S3 ? { ...op, resource: to } : op);
|
|
40
|
-
}
|
|
41
|
-
function remapCommandsResource(commands, to) {
|
|
42
|
-
return commands.map((cmd) => {
|
|
43
|
-
if (cmd.resource !== ResourceName.S3) return cmd;
|
|
44
|
-
const proto = Object.getPrototypeOf(cmd);
|
|
45
|
-
const copy = Object.assign(Object.create(proto), cmd);
|
|
46
|
-
Object.assign(copy, { resource: to });
|
|
47
|
-
return copy;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
53
|
var R2Resource = class extends S3Resource {
|
|
51
54
|
kind = ResourceName.R2;
|
|
52
55
|
prompt = R2_BROWSER_PROMPT;
|
|
@@ -68,8 +71,6 @@ var R2Resource = class extends S3Resource {
|
|
|
68
71
|
getState() {
|
|
69
72
|
return Promise.resolve({
|
|
70
73
|
type: this.kind,
|
|
71
|
-
needsOverride: true,
|
|
72
|
-
redactedFields: ["presignedUrlProvider"],
|
|
73
74
|
config: redactR2Config(this.r2Config)
|
|
74
75
|
});
|
|
75
76
|
}
|
|
@@ -85,4 +86,4 @@ export {
|
|
|
85
86
|
R2_BROWSER_PROMPT,
|
|
86
87
|
R2Resource
|
|
87
88
|
};
|
|
88
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-MO5DGX42.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/r2/r2.ts","../src/resource/r2/config.ts","../src/resource/r2/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 { r2ToS3Config, redactR2Config, type R2Config, type R2ConfigRedacted } from './config.ts'\nimport { R2_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface R2ResourceState {\n type: string\n config: R2ConfigRedacted\n}\n\nexport class R2Resource extends S3Resource {\n override readonly kind: string = ResourceName.R2\n override readonly prompt: string = R2_BROWSER_PROMPT\n readonly r2Config: R2Config\n private readonly r2Ops: readonly RegisteredOp[]\n private readonly r2Commands: readonly RegisteredCommand[]\n\n constructor(config: R2Config) {\n super(r2ToS3Config(config))\n this.r2Config = config\n this.r2Ops = remapOpsResource(super.ops(), ResourceName.R2)\n this.r2Commands = remapCommandsResource(super.commands(), ResourceName.R2)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.r2Ops\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.r2Commands\n }\n\n override getState(): Promise<R2ResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactR2Config(this.r2Config),\n })\n }\n\n override loadState(_state: R2ResourceState): 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 R2Config {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n accountId?: string\n region?: string\n endpoint?: string\n defaultContentType?: string\n}\n\nexport interface R2ConfigRedacted extends Omit<R2Config, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const R2ConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n accountId: z.string().optional(),\n region: z.string().optional(),\n endpoint: z.string().optional(),\n defaultContentType: z.string().optional(),\n})\n\nexport function resolvedR2Endpoint(config: R2Config): string | undefined {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n if (config.accountId !== undefined && config.accountId !== '') {\n return `https://${config.accountId}.r2.cloudflarestorage.com`\n }\n return undefined\n}\n\nexport function r2ToS3Config(config: R2Config): S3Config {\n const endpoint = resolvedR2Endpoint(config)\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n region: config.region ?? 'auto',\n ...(endpoint !== undefined ? { endpoint } : {}),\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n }\n}\n\nexport function redactR2Config(config: R2Config): R2ConfigRedacted {\n return redactConfigWithSchema(R2ConfigSchema, config) as unknown as R2ConfigRedacted\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 R2_BROWSER_PROMPT = `{prefix}\n Remote Cloudflare R2 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,iBAAiB,EAAE,OAAO;AAAA,EACrC,QAAQ,EAAE,OAAO;AAAA,EACjB,sBAAsB;AAAA,IACpB,EAAE,OAAsC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA,EACA,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAEM,SAAS,mBAAmB,QAAsC;AACvE,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MAAI,OAAO,cAAc,UAAa,OAAO,cAAc,IAAI;AAC7D,WAAO,WAAW,OAAO,SAAS;AAAA,EACpC;AACA,SAAO;AACT;AAEO,SAAS,aAAa,QAA4B;AACvD,QAAM,WAAW,mBAAmB,MAAM;AAC1C,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,QAAQ,OAAO,UAAU;AAAA,IACzB,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,EACP;AACF;AAEO,SAAS,eAAe,QAAoC;AACjE,SAAO,uBAAuB,gBAAgB,MAAM;AACtD;;;AClDO,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;;;AFgB1B,IAAM,aAAN,cAAyB,WAAW;AAAA,EACvB,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAkB;AAC5B,UAAM,aAAa,MAAM,CAAC;AAC1B,SAAK,WAAW;AAChB,SAAK,QAAQ,iBAAiB,MAAM,IAAI,GAAG,aAAa,EAAE;AAC1D,SAAK,aAAa,sBAAsB,MAAM,SAAS,GAAG,aAAa,EAAE;AAAA,EAC3E;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAqC;AAC5C,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,eAAe,KAAK,QAAQ;AAAA,IACtC,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAAwC;AACzD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -16,10 +16,15 @@ import {
|
|
|
16
16
|
} from "@struktoai/mirage-core";
|
|
17
17
|
|
|
18
18
|
// src/resource/discord/config.ts
|
|
19
|
+
import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
|
|
20
|
+
var DiscordConfigSchema = z.object({
|
|
21
|
+
proxyUrl: z.string(),
|
|
22
|
+
getHeaders: secretSchema(
|
|
23
|
+
z.custom((value) => typeof value === "function")
|
|
24
|
+
).optional()
|
|
25
|
+
});
|
|
19
26
|
function redactDiscordConfig(config) {
|
|
20
|
-
|
|
21
|
-
if (config.getHeaders !== void 0) out.getHeaders = "<REDACTED>";
|
|
22
|
-
return out;
|
|
27
|
+
return redactConfigWithSchema(DiscordConfigSchema, config);
|
|
23
28
|
}
|
|
24
29
|
|
|
25
30
|
// src/resource/discord/discord.ts
|
|
@@ -82,8 +87,6 @@ var DiscordResource = class {
|
|
|
82
87
|
getState() {
|
|
83
88
|
return Promise.resolve({
|
|
84
89
|
type: this.kind,
|
|
85
|
-
needsOverride: true,
|
|
86
|
-
redactedFields: ["getHeaders"],
|
|
87
90
|
config: redactDiscordConfig(this.config)
|
|
88
91
|
});
|
|
89
92
|
}
|
|
@@ -96,4 +99,4 @@ export {
|
|
|
96
99
|
redactDiscordConfig,
|
|
97
100
|
DiscordResource
|
|
98
101
|
};
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
102
|
+
//# sourceMappingURL=chunk-N43C6XFP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/discord/discord.ts","../src/resource/discord/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 BrowserDiscordTransport,\n DISCORD_COMMANDS,\n DISCORD_PROMPT,\n DISCORD_VFS_OPS,\n DISCORD_WRITE_PROMPT,\n DiscordAccessor,\n type FileStat,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n discordRead,\n discordReaddir,\n discordStat,\n resolveDiscordGlob,\n} from '@struktoai/mirage-core'\nimport { redactDiscordConfig, type DiscordConfig, type DiscordConfigRedacted } from './config.ts'\n\nexport interface DiscordResourceState {\n type: string\n config: DiscordConfigRedacted\n}\n\nexport class DiscordResource implements Resource {\n readonly kind: string = ResourceName.DISCORD\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = DISCORD_PROMPT\n readonly writePrompt: string = DISCORD_WRITE_PROMPT\n readonly config: DiscordConfig\n readonly accessor: DiscordAccessor\n readonly index: IndexCacheStore\n\n constructor(config: DiscordConfig) {\n this.config = config\n this.accessor = new DiscordAccessor(\n new BrowserDiscordTransport({\n proxyUrl: config.proxyUrl,\n ...(config.getHeaders !== undefined ? { getHeaders: config.getHeaders } : {}),\n }),\n )\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 DISCORD_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return DISCORD_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return discordRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return discordReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return discordStat(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 resolveDiscordGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<DiscordResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactDiscordConfig(this.config),\n })\n }\n\n loadState(_state: DiscordResourceState): 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'\n\nexport interface DiscordConfig {\n proxyUrl: string\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>\n}\n\nexport interface DiscordConfigRedacted {\n proxyUrl: string\n getHeaders?: '<REDACTED>'\n}\n\nexport const DiscordConfigSchema = z.object({\n proxyUrl: z.string(),\n getHeaders: secretSchema(\n z.custom<DiscordConfig['getHeaders']>((value) => typeof value === 'function'),\n ).optional(),\n})\n\nexport function redactDiscordConfig(config: DiscordConfig): DiscordConfigRedacted {\n return redactConfigWithSchema(DiscordConfigSchema, config) as unknown as DiscordConfigRedacted\n}\n"],"mappings":";AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACnBP,SAAS,wBAAwB,cAAc,SAAS;AAYjD,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY;AAAA,IACV,EAAE,OAAoC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAC9E,EAAE,SAAS;AACb,CAAC;AAEM,SAAS,oBAAoB,QAA8C;AAChF,SAAO,uBAAuB,qBAAqB,MAAM;AAC3D;;;ADMO,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,SAAK,WAAW,IAAI;AAAA,MAClB,IAAI,wBAAwB;AAAA,QAC1B,UAAU,OAAO;AAAA,QACjB,GAAI,OAAO,eAAe,SAAY,EAAE,YAAY,OAAO,WAAW,IAAI,CAAC;AAAA,MAC7E,CAAC;AAAA,IACH;AACA,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,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":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// src/resource/gdrive/config.ts
|
|
2
|
+
import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
|
|
3
|
+
var GDriveConfigSchema = z.object({
|
|
4
|
+
clientId: z.string(),
|
|
5
|
+
clientSecret: secretStr().optional(),
|
|
6
|
+
refreshToken: secretStr()
|
|
7
|
+
});
|
|
8
|
+
function redactGDriveConfig(config) {
|
|
9
|
+
return redactConfigWithSchema(GDriveConfigSchema, config);
|
|
10
|
+
}
|
|
11
|
+
function normalizeGDriveConfig(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
|
+
GDriveConfigSchema,
|
|
23
|
+
redactGDriveConfig,
|
|
24
|
+
normalizeGDriveConfig
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=chunk-NMZBJOFW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/gdrive/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 GDriveConfig {\n clientId: string\n clientSecret?: string\n refreshToken: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nexport interface GDriveConfigRedacted {\n clientId: string\n clientSecret?: '<REDACTED>'\n refreshToken: '<REDACTED>'\n}\n\nexport const GDriveConfigSchema = z.object({\n clientId: z.string(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr(),\n})\n\nexport function redactGDriveConfig(config: GDriveConfig): GDriveConfigRedacted {\n return redactConfigWithSchema(GDriveConfigSchema, config) as unknown as GDriveConfigRedacted\n}\n\nexport function normalizeGDriveConfig(input: Record<string, unknown>): GDriveConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n },\n }) as unknown as GDriveConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAe/D,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,cAAc,UAAU;AAC1B,CAAC;AAEM,SAAS,mBAAmB,QAA4C;AAC7E,SAAO,uBAAuB,oBAAoB,MAAM;AAC1D;AAEO,SAAS,sBAAsB,OAA8C;AAClF,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,26 @@
|
|
|
1
|
+
// src/resource/dropbox/config.ts
|
|
2
|
+
import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
|
|
3
|
+
var DropboxConfigSchema = z.object({
|
|
4
|
+
clientId: z.string(),
|
|
5
|
+
clientSecret: secretStr().optional(),
|
|
6
|
+
refreshToken: secretStr()
|
|
7
|
+
});
|
|
8
|
+
function redactDropboxConfig(config) {
|
|
9
|
+
return redactConfigWithSchema(DropboxConfigSchema, config);
|
|
10
|
+
}
|
|
11
|
+
function normalizeDropboxConfig(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
|
+
DropboxConfigSchema,
|
|
23
|
+
redactDropboxConfig,
|
|
24
|
+
normalizeDropboxConfig
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=chunk-O5ONB7QT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/dropbox/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 DropboxConfig {\n clientId: string\n clientSecret?: string\n refreshToken: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nexport interface DropboxConfigRedacted {\n clientId: string\n clientSecret?: '<REDACTED>'\n refreshToken: '<REDACTED>'\n}\n\nexport const DropboxConfigSchema = z.object({\n clientId: z.string(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr(),\n})\n\nexport function redactDropboxConfig(config: DropboxConfig): DropboxConfigRedacted {\n return redactConfigWithSchema(DropboxConfigSchema, config) as unknown as DropboxConfigRedacted\n}\n\nexport function normalizeDropboxConfig(input: Record<string, unknown>): DropboxConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n },\n }) as unknown as DropboxConfig\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":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
redactGoogleConfig
|
|
3
|
+
} from "./chunk-54NTYJEO.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/gmail/gmail.ts
|
|
6
6
|
import {
|
|
@@ -29,12 +29,7 @@ var GmailResource = class {
|
|
|
29
29
|
index;
|
|
30
30
|
constructor(config) {
|
|
31
31
|
this.config = config;
|
|
32
|
-
const tm = new TokenManager(
|
|
33
|
-
clientId: config.clientId,
|
|
34
|
-
...config.clientSecret !== void 0 ? { clientSecret: config.clientSecret } : {},
|
|
35
|
-
refreshToken: config.refreshToken,
|
|
36
|
-
...config.refreshFn !== void 0 ? { refreshFn: config.refreshFn } : {}
|
|
37
|
-
});
|
|
32
|
+
const tm = new TokenManager(config);
|
|
38
33
|
this.accessor = new GmailAccessor({ tokenManager: tm });
|
|
39
34
|
this.index = new RAMIndexCacheStore({ ttl: 86400 });
|
|
40
35
|
}
|
|
@@ -78,9 +73,7 @@ var GmailResource = class {
|
|
|
78
73
|
getState() {
|
|
79
74
|
return Promise.resolve({
|
|
80
75
|
type: this.kind,
|
|
81
|
-
|
|
82
|
-
redactedFields: ["clientSecret", "refreshToken"],
|
|
83
|
-
config: redactGmailConfig(this.config)
|
|
76
|
+
config: redactGoogleConfig(this.config)
|
|
84
77
|
});
|
|
85
78
|
}
|
|
86
79
|
loadState(_state) {
|
|
@@ -91,4 +84,4 @@ var GmailResource = class {
|
|
|
91
84
|
export {
|
|
92
85
|
GmailResource
|
|
93
86
|
};
|
|
94
|
-
//# sourceMappingURL=chunk-
|
|
87
|
+
//# sourceMappingURL=chunk-RD7ED27I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/gmail/gmail.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 GMAIL_COMMANDS,\n GMAIL_PROMPT,\n GMAIL_WRITE_PROMPT,\n GMAIL_VFS_OPS,\n GmailAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gmailRead,\n gmailReaddir,\n gmailResolveGlob,\n gmailStat,\n} from '@struktoai/mirage-core'\nimport { redactGmailConfig, type GmailConfig, type GmailConfigRedacted } from './config.ts'\n\nexport interface GmailResourceState {\n type: string\n config: GmailConfigRedacted\n}\n\nexport class GmailResource implements Resource {\n readonly kind: string = ResourceName.GMAIL\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GMAIL_PROMPT\n readonly writePrompt: string = GMAIL_WRITE_PROMPT\n readonly config: GmailConfig\n readonly accessor: GmailAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GmailConfig) {\n this.config = config\n const tm = new TokenManager(config)\n this.accessor = new GmailAccessor({ 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 GMAIL_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GMAIL_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gmailRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gmailReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gmailStat(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 gmailResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GmailResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGmailConfig(this.config),\n })\n }\n\n loadState(_state: GmailResourceState): 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,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAqB;AAC/B,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa,MAAM;AAClC,SAAK,WAAW,IAAI,cAAc,EAAE,cAAc,GAAG,CAAC;AACtD,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,UAAU,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,aAAa,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAClD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,UAAU,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC/C;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,iBAAiB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC9D;AAAA,EAEA,WAAwC;AACtC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import {
|
|
2
|
+
S3Resource
|
|
3
|
+
} from "./chunk-XFREXNA2.js";
|
|
4
|
+
|
|
5
|
+
// src/resource/digitalocean/digitalocean.ts
|
|
6
|
+
import {
|
|
7
|
+
remapCommandsResource,
|
|
8
|
+
remapOpsResource,
|
|
9
|
+
ResourceName
|
|
10
|
+
} from "@struktoai/mirage-core";
|
|
11
|
+
|
|
12
|
+
// src/resource/digitalocean/config.ts
|
|
13
|
+
import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
|
|
14
|
+
var DigitalOceanConfigSchema = 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
|
+
});
|
|
23
|
+
function resolvedDigitalOceanEndpoint(config) {
|
|
24
|
+
if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
|
|
25
|
+
if (config.region !== void 0 && config.region !== "") {
|
|
26
|
+
const region = config.region;
|
|
27
|
+
return `https://${region}.digitaloceanspaces.com`;
|
|
28
|
+
}
|
|
29
|
+
return void 0;
|
|
30
|
+
}
|
|
31
|
+
function digitalOceanToS3Config(config) {
|
|
32
|
+
const endpoint = resolvedDigitalOceanEndpoint(config);
|
|
33
|
+
return {
|
|
34
|
+
bucket: config.bucket,
|
|
35
|
+
presignedUrlProvider: config.presignedUrlProvider,
|
|
36
|
+
...config.region !== void 0 ? { region: config.region } : {},
|
|
37
|
+
...endpoint !== void 0 ? { endpoint } : {},
|
|
38
|
+
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function redactDigitalOceanConfig(config) {
|
|
42
|
+
return redactConfigWithSchema(
|
|
43
|
+
DigitalOceanConfigSchema,
|
|
44
|
+
config
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// src/resource/digitalocean/prompt.ts
|
|
49
|
+
var DIGITALOCEAN_BROWSER_PROMPT = `{prefix}
|
|
50
|
+
Remote DigitalOcean Spaces bucket (S3-compatible) accessed via presigned URLs (browser runtime).
|
|
51
|
+
Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.
|
|
52
|
+
Listing operations require the presigner to sign LIST/COPY operations in
|
|
53
|
+
addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
|
|
54
|
+
|
|
55
|
+
// src/resource/digitalocean/digitalocean.ts
|
|
56
|
+
var DigitalOceanResource = class extends S3Resource {
|
|
57
|
+
kind = ResourceName.DIGITALOCEAN;
|
|
58
|
+
prompt = DIGITALOCEAN_BROWSER_PROMPT;
|
|
59
|
+
digitalOceanConfig;
|
|
60
|
+
digitalOceanOps;
|
|
61
|
+
digitalOceanCommands;
|
|
62
|
+
constructor(config) {
|
|
63
|
+
super(digitalOceanToS3Config(config));
|
|
64
|
+
this.digitalOceanConfig = config;
|
|
65
|
+
this.digitalOceanOps = remapOpsResource(super.ops(), ResourceName.DIGITALOCEAN);
|
|
66
|
+
this.digitalOceanCommands = remapCommandsResource(super.commands(), ResourceName.DIGITALOCEAN);
|
|
67
|
+
}
|
|
68
|
+
ops() {
|
|
69
|
+
return this.digitalOceanOps;
|
|
70
|
+
}
|
|
71
|
+
commands() {
|
|
72
|
+
return this.digitalOceanCommands;
|
|
73
|
+
}
|
|
74
|
+
getState() {
|
|
75
|
+
return Promise.resolve({
|
|
76
|
+
type: this.kind,
|
|
77
|
+
config: redactDigitalOceanConfig(this.digitalOceanConfig)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
loadState(_state) {
|
|
81
|
+
return Promise.resolve();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export {
|
|
86
|
+
resolvedDigitalOceanEndpoint,
|
|
87
|
+
digitalOceanToS3Config,
|
|
88
|
+
redactDigitalOceanConfig,
|
|
89
|
+
DIGITALOCEAN_BROWSER_PROMPT,
|
|
90
|
+
DigitalOceanResource
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=chunk-RJ4RR3BR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/digitalocean/digitalocean.ts","../src/resource/digitalocean/config.ts","../src/resource/digitalocean/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 digitalOceanToS3Config,\n redactDigitalOceanConfig,\n type DigitalOceanConfig,\n type DigitalOceanConfigRedacted,\n} from './config.ts'\nimport { DIGITALOCEAN_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface DigitalOceanResourceState {\n type: string\n config: DigitalOceanConfigRedacted\n}\n\nexport class DigitalOceanResource extends S3Resource {\n override readonly kind: string = ResourceName.DIGITALOCEAN\n override readonly prompt: string = DIGITALOCEAN_BROWSER_PROMPT\n readonly digitalOceanConfig: DigitalOceanConfig\n private readonly digitalOceanOps: readonly RegisteredOp[]\n private readonly digitalOceanCommands: readonly RegisteredCommand[]\n\n constructor(config: DigitalOceanConfig) {\n super(digitalOceanToS3Config(config))\n this.digitalOceanConfig = config\n this.digitalOceanOps = remapOpsResource(super.ops(), ResourceName.DIGITALOCEAN)\n this.digitalOceanCommands = remapCommandsResource(super.commands(), ResourceName.DIGITALOCEAN)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.digitalOceanOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.digitalOceanCommands\n }\n\n override getState(): Promise<DigitalOceanResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactDigitalOceanConfig(this.digitalOceanConfig),\n })\n }\n\n override loadState(_state: DigitalOceanResourceState): 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 DigitalOceanConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n region?: string\n endpoint?: string\n defaultContentType?: string\n}\n\nexport interface DigitalOceanConfigRedacted extends Omit<\n DigitalOceanConfig,\n 'presignedUrlProvider'\n> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const DigitalOceanConfigSchema = 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 resolvedDigitalOceanEndpoint(config: DigitalOceanConfig): string | undefined {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n if (config.region !== undefined && config.region !== '') {\n const region = config.region\n return `https://${region}.digitaloceanspaces.com`\n }\n return undefined\n}\n\nexport function digitalOceanToS3Config(config: DigitalOceanConfig): S3Config {\n const endpoint = resolvedDigitalOceanEndpoint(config)\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : {}),\n ...(endpoint !== undefined ? { endpoint } : {}),\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n }\n}\n\nexport function redactDigitalOceanConfig(config: DigitalOceanConfig): DigitalOceanConfigRedacted {\n return redactConfigWithSchema(\n DigitalOceanConfigSchema,\n config,\n ) as unknown as DigitalOceanConfigRedacted\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 DIGITALOCEAN_BROWSER_PROMPT = `{prefix}\n Remote DigitalOcean Spaces 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;AAkBjD,IAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,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,6BAA6B,QAAgD;AAC3F,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MAAI,OAAO,WAAW,UAAa,OAAO,WAAW,IAAI;AACvD,UAAM,SAAS,OAAO;AACtB,WAAO,WAAW,MAAM;AAAA,EAC1B;AACA,SAAO;AACT;AAEO,SAAS,uBAAuB,QAAsC;AAC3E,QAAM,WAAW,6BAA6B,MAAM;AACpD,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,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,EACP;AACF;AAEO,SAAS,yBAAyB,QAAwD;AAC/F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACvDO,IAAM,8BAA8B;AAAA;AAAA;AAAA;AAAA;;;AFqBpC,IAAM,uBAAN,cAAmC,WAAW;AAAA,EACjC,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAA4B;AACtC,UAAM,uBAAuB,MAAM,CAAC;AACpC,SAAK,qBAAqB;AAC1B,SAAK,kBAAkB,iBAAiB,MAAM,IAAI,GAAG,aAAa,YAAY;AAC9E,SAAK,uBAAuB,sBAAsB,MAAM,SAAS,GAAG,aAAa,YAAY;AAAA,EAC/F;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAA+C;AACtD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,yBAAyB,KAAK,kBAAkB;AAAA,IAC1D,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAAkD;AACnE,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import {
|
|
2
|
+
S3Resource
|
|
3
|
+
} from "./chunk-XFREXNA2.js";
|
|
4
|
+
|
|
5
|
+
// src/resource/ceph/ceph.ts
|
|
6
|
+
import {
|
|
7
|
+
remapCommandsResource,
|
|
8
|
+
remapOpsResource,
|
|
9
|
+
ResourceName
|
|
10
|
+
} from "@struktoai/mirage-core";
|
|
11
|
+
|
|
12
|
+
// src/resource/ceph/config.ts
|
|
13
|
+
import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
|
|
14
|
+
var CephConfigSchema = 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 cephToS3Config(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 redactCephConfig(config) {
|
|
33
|
+
return redactConfigWithSchema(CephConfigSchema, config);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// src/resource/ceph/prompt.ts
|
|
37
|
+
var CEPH_BROWSER_PROMPT = `{prefix}
|
|
38
|
+
Remote Ceph Rados Gateway 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/ceph/ceph.ts
|
|
44
|
+
var CephResource = class extends S3Resource {
|
|
45
|
+
kind = ResourceName.CEPH;
|
|
46
|
+
prompt = CEPH_BROWSER_PROMPT;
|
|
47
|
+
cephConfig;
|
|
48
|
+
cephOps;
|
|
49
|
+
cephCommands;
|
|
50
|
+
constructor(config) {
|
|
51
|
+
super(cephToS3Config(config));
|
|
52
|
+
this.cephConfig = config;
|
|
53
|
+
this.cephOps = remapOpsResource(super.ops(), ResourceName.CEPH);
|
|
54
|
+
this.cephCommands = remapCommandsResource(super.commands(), ResourceName.CEPH);
|
|
55
|
+
}
|
|
56
|
+
ops() {
|
|
57
|
+
return this.cephOps;
|
|
58
|
+
}
|
|
59
|
+
commands() {
|
|
60
|
+
return this.cephCommands;
|
|
61
|
+
}
|
|
62
|
+
getState() {
|
|
63
|
+
return Promise.resolve({
|
|
64
|
+
type: this.kind,
|
|
65
|
+
config: redactCephConfig(this.cephConfig)
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
loadState(_state) {
|
|
69
|
+
return Promise.resolve();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export {
|
|
74
|
+
cephToS3Config,
|
|
75
|
+
redactCephConfig,
|
|
76
|
+
CEPH_BROWSER_PROMPT,
|
|
77
|
+
CephResource
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=chunk-RJ5FBBL6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/ceph/ceph.ts","../src/resource/ceph/config.ts","../src/resource/ceph/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 cephToS3Config,\n redactCephConfig,\n type CephConfig,\n type CephConfigRedacted,\n} from './config.ts'\nimport { CEPH_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface CephResourceState {\n type: string\n config: CephConfigRedacted\n}\n\nexport class CephResource extends S3Resource {\n override readonly kind: string = ResourceName.CEPH\n override readonly prompt: string = CEPH_BROWSER_PROMPT\n readonly cephConfig: CephConfig\n private readonly cephOps: readonly RegisteredOp[]\n private readonly cephCommands: readonly RegisteredCommand[]\n\n constructor(config: CephConfig) {\n super(cephToS3Config(config))\n this.cephConfig = config\n this.cephOps = remapOpsResource(super.ops(), ResourceName.CEPH)\n this.cephCommands = remapCommandsResource(super.commands(), ResourceName.CEPH)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.cephOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.cephCommands\n }\n\n override getState(): Promise<CephResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactCephConfig(this.cephConfig),\n })\n }\n\n override loadState(_state: CephResourceState): 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 CephConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n endpoint?: string\n region?: string\n defaultContentType?: string\n}\n\nexport interface CephConfigRedacted extends Omit<CephConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const CephConfigSchema = 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 cephToS3Config(config: CephConfig): 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 redactCephConfig(config: CephConfig): CephConfigRedacted {\n return redactConfigWithSchema(CephConfigSchema, config) as unknown as CephConfigRedacted\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 CEPH_BROWSER_PROMPT = `{prefix}\n Remote Ceph Rados Gateway 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,mBAAmB,EAAE,OAAO;AAAA,EACvC,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,eAAe,QAA8B;AAC3D,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,iBAAiB,QAAwC;AACvE,SAAO,uBAAuB,kBAAkB,MAAM;AACxD;;;ACvCO,IAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;;;AFqB5B,IAAM,eAAN,cAA2B,WAAW;AAAA,EACzB,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAoB;AAC9B,UAAM,eAAe,MAAM,CAAC;AAC5B,SAAK,aAAa;AAClB,SAAK,UAAU,iBAAiB,MAAM,IAAI,GAAG,aAAa,IAAI;AAC9D,SAAK,eAAe,sBAAsB,MAAM,SAAS,GAAG,aAAa,IAAI;AAAA,EAC/E;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAuC;AAC9C,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,iBAAiB,KAAK,UAAU;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA0C;AAC3D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactGSheetsConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YGRKFONX.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/gsheets/gsheets.ts
|
|
6
6
|
import {
|
|
@@ -78,8 +78,6 @@ var GSheetsResource = class {
|
|
|
78
78
|
getState() {
|
|
79
79
|
return Promise.resolve({
|
|
80
80
|
type: this.kind,
|
|
81
|
-
needsOverride: true,
|
|
82
|
-
redactedFields: ["clientSecret", "refreshToken"],
|
|
83
81
|
config: redactGSheetsConfig(this.config)
|
|
84
82
|
});
|
|
85
83
|
}
|
|
@@ -91,4 +89,4 @@ var GSheetsResource = class {
|
|
|
91
89
|
export {
|
|
92
90
|
GSheetsResource
|
|
93
91
|
};
|
|
94
|
-
//# sourceMappingURL=chunk-
|
|
92
|
+
//# sourceMappingURL=chunk-RZRXEXHM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/gsheets/gsheets.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 GSHEETS_COMMANDS,\n GSHEETS_PROMPT,\n GSHEETS_VFS_OPS,\n GSHEETS_WRITE_PROMPT,\n GSheetsAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gsheetsRead,\n gsheetsReaddir,\n gsheetsResolveGlob,\n gsheetsStat,\n} from '@struktoai/mirage-core'\nimport { redactGSheetsConfig, type GSheetsConfig, type GSheetsConfigRedacted } from './config.ts'\n\nexport interface GSheetsResourceState {\n type: string\n config: GSheetsConfigRedacted\n}\n\nexport class GSheetsResource implements Resource {\n readonly kind: string = ResourceName.GSHEETS\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GSHEETS_PROMPT\n readonly writePrompt: string = GSHEETS_WRITE_PROMPT\n readonly config: GSheetsConfig\n readonly accessor: GSheetsAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GSheetsConfig) {\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 GSheetsAccessor({ 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 GSHEETS_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GSHEETS_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gsheetsRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gsheetsReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gsheetsStat(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 gsheetsResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GSheetsResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGSheetsConfig(this.config),\n })\n }\n\n loadState(_state: GSheetsResourceState): 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,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactDropboxConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-O5ONB7QT.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/dropbox/dropbox.ts
|
|
6
6
|
import {
|
|
@@ -76,8 +76,6 @@ var DropboxResource = class {
|
|
|
76
76
|
getState() {
|
|
77
77
|
return Promise.resolve({
|
|
78
78
|
type: this.kind,
|
|
79
|
-
needsOverride: true,
|
|
80
|
-
redactedFields: ["clientSecret", "refreshToken"],
|
|
81
79
|
config: redactDropboxConfig(this.config)
|
|
82
80
|
});
|
|
83
81
|
}
|
|
@@ -89,4 +87,4 @@ var DropboxResource = class {
|
|
|
89
87
|
export {
|
|
90
88
|
DropboxResource
|
|
91
89
|
};
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-SBAUYZJB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/dropbox/dropbox.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 DROPBOX_COMMANDS,\n DROPBOX_PROMPT,\n DROPBOX_VFS_OPS,\n DropboxAccessor,\n DropboxTokenManager,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n dropboxRead,\n dropboxReaddir,\n dropboxResolveGlob,\n dropboxStat,\n} from '@struktoai/mirage-core'\nimport { redactDropboxConfig, type DropboxConfig, type DropboxConfigRedacted } from './config.ts'\n\nexport interface DropboxResourceState {\n type: string\n config: DropboxConfigRedacted\n}\n\nexport class DropboxResource implements Resource {\n readonly kind: string = ResourceName.DROPBOX\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = DROPBOX_PROMPT\n readonly config: DropboxConfig\n readonly accessor: DropboxAccessor\n readonly index: IndexCacheStore\n\n constructor(config: DropboxConfig) {\n this.config = config\n const tm = new DropboxTokenManager({\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 DropboxAccessor({ 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 DROPBOX_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return DROPBOX_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return dropboxRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return dropboxReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return dropboxStat(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 dropboxResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<DropboxResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactDropboxConfig(this.config),\n })\n }\n\n loadState(_state: DropboxResourceState): 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,OACK;AAQA,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,oBAAoB;AAAA,MACjC,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":[]}
|