@struktoai/mirage-browser 0.0.3-alpha.0 → 0.0.4
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 +1 -1
- package/dist/aliyun-YEWHEWCL.js +8 -0
- package/dist/backblaze-LWE2HEDK.js +8 -0
- package/dist/box-GTWWIB6F.js +8 -0
- package/dist/ceph-ATSCSVGU.js +8 -0
- package/dist/{chunk-YGRKFONX.js → chunk-23NO22WD.js} +1 -2
- package/dist/{chunk-YGRKFONX.js.map → chunk-23NO22WD.js.map} +1 -1
- package/dist/{chunk-TPFH5V4D.js → chunk-2R7SPBTM.js} +11 -13
- package/dist/chunk-2R7SPBTM.js.map +1 -0
- package/dist/{chunk-UZWJ462U.js → chunk-37WKCB2E.js} +8 -6
- package/dist/chunk-37WKCB2E.js.map +1 -0
- package/dist/{chunk-GHKX2BA3.js → chunk-3FZ3GHZO.js} +6 -4
- package/dist/chunk-3FZ3GHZO.js.map +1 -0
- package/dist/{chunk-SJB2KXDM.js → chunk-4YUYQTRN.js} +649 -424
- package/dist/chunk-4YUYQTRN.js.map +1 -0
- package/dist/{chunk-JCS5EG5A.js → chunk-5ZNWDS5I.js} +10 -12
- package/dist/chunk-5ZNWDS5I.js.map +1 -0
- package/dist/{chunk-N43C6XFP.js → chunk-6BXVYCIC.js} +10 -12
- package/dist/chunk-6BXVYCIC.js.map +1 -0
- package/dist/{chunk-INLL7LRM.js → chunk-6ETIHSTA.js} +10 -11
- package/dist/chunk-6ETIHSTA.js.map +1 -0
- package/dist/{chunk-RZRXEXHM.js → chunk-AAJQ6AQT.js} +11 -13
- package/dist/chunk-AAJQ6AQT.js.map +1 -0
- package/dist/{chunk-CAKSQ2LV.js → chunk-AUKVYHNZ.js} +6 -4
- package/dist/chunk-AUKVYHNZ.js.map +1 -0
- package/dist/{chunk-HGSTRD7H.js → chunk-AUXZEXCG.js} +12 -12
- package/dist/chunk-AUXZEXCG.js.map +1 -0
- package/dist/{chunk-SBAUYZJB.js → chunk-CQERQTAZ.js} +17 -14
- package/dist/chunk-CQERQTAZ.js.map +1 -0
- package/dist/{chunk-XFREXNA2.js → chunk-DC6VA36O.js} +9 -16
- package/dist/chunk-DC6VA36O.js.map +1 -0
- package/dist/{chunk-HYUESAQS.js → chunk-DGP3N4WM.js} +1 -2
- package/dist/{chunk-HYUESAQS.js.map → chunk-DGP3N4WM.js.map} +1 -1
- package/dist/{chunk-WEJGUCCL.js → chunk-DKPDXQML.js} +6 -4
- package/dist/chunk-DKPDXQML.js.map +1 -0
- package/dist/{chunk-2H4KUUFP.js → chunk-DQK6H5LW.js} +1 -2
- package/dist/{chunk-2H4KUUFP.js.map → chunk-DQK6H5LW.js.map} +1 -1
- package/dist/{chunk-T43CZ3IZ.js → chunk-E77ESWWV.js} +13 -13
- package/dist/chunk-E77ESWWV.js.map +1 -0
- package/dist/{chunk-WZ53HLH6.js → chunk-EDS5Q5B7.js} +6 -4
- package/dist/chunk-EDS5Q5B7.js.map +1 -0
- package/dist/{chunk-32VC36P4.js → chunk-EHTYPBGX.js} +6 -4
- package/dist/chunk-EHTYPBGX.js.map +1 -0
- package/dist/{chunk-72GY5B23.js → chunk-GENFT46X.js} +6 -4
- package/dist/chunk-GENFT46X.js.map +1 -0
- package/dist/{chunk-J54OBIJA.js → chunk-GQVJTQXU.js} +6 -2
- package/dist/chunk-GQVJTQXU.js.map +1 -0
- package/dist/{chunk-RJ5FBBL6.js → chunk-GZFNGV55.js} +6 -4
- package/dist/chunk-GZFNGV55.js.map +1 -0
- package/dist/{chunk-RD7ED27I.js → chunk-HPID7BWJ.js} +11 -13
- package/dist/chunk-HPID7BWJ.js.map +1 -0
- package/dist/{chunk-D3JDGGKO.js → chunk-HTQ4GBKM.js} +6 -4
- package/dist/chunk-HTQ4GBKM.js.map +1 -0
- package/dist/{chunk-RJ4RR3BR.js → chunk-JV4T5HNB.js} +6 -4
- package/dist/chunk-JV4T5HNB.js.map +1 -0
- package/dist/{chunk-EH2BN4JC.js → chunk-KL2VFYUV.js} +8 -6
- package/dist/chunk-KL2VFYUV.js.map +1 -0
- package/dist/{chunk-54NTYJEO.js → chunk-LPDLPRPS.js} +1 -3
- package/dist/{chunk-54NTYJEO.js.map → chunk-LPDLPRPS.js.map} +1 -1
- package/dist/{chunk-JVTKE6DB.js → chunk-LW56WZDS.js} +11 -13
- package/dist/chunk-LW56WZDS.js.map +1 -0
- package/dist/{chunk-63GZEZW4.js → chunk-MB4TUUJQ.js} +6 -4
- package/dist/chunk-MB4TUUJQ.js.map +1 -0
- package/dist/{chunk-O5ONB7QT.js → chunk-MQMUOJZ2.js} +8 -4
- package/dist/chunk-MQMUOJZ2.js.map +1 -0
- package/dist/{chunk-6K57U6CM.js → chunk-N5VRBFRT.js} +11 -13
- package/dist/chunk-N5VRBFRT.js.map +1 -0
- package/dist/{chunk-EUKHGXCE.js → chunk-NVGB3B7J.js} +6 -4
- package/dist/chunk-NVGB3B7J.js.map +1 -0
- package/dist/{chunk-D6HF462C.js → chunk-NYTRDAWX.js} +17 -14
- package/dist/chunk-NYTRDAWX.js.map +1 -0
- package/dist/{chunk-MO5DGX42.js → chunk-PCC6EZIE.js} +6 -4
- package/dist/chunk-PCC6EZIE.js.map +1 -0
- package/dist/{chunk-BUXWUKN7.js → chunk-PDZSZ5CB.js} +10 -12
- package/dist/chunk-PDZSZ5CB.js.map +1 -0
- package/dist/{chunk-4YJMDF2S.js → chunk-POJ3IQMQ.js} +14 -14
- package/dist/chunk-POJ3IQMQ.js.map +1 -0
- package/dist/{chunk-ATLYBQSC.js → chunk-PSEXJ5S5.js} +13 -12
- package/dist/chunk-PSEXJ5S5.js.map +1 -0
- package/dist/{chunk-NMZBJOFW.js → chunk-QXJP6TWI.js} +5 -4
- package/dist/chunk-QXJP6TWI.js.map +1 -0
- package/dist/{chunk-YEDSFMWK.js → chunk-TCFD6YJ5.js} +6 -4
- package/dist/chunk-TCFD6YJ5.js.map +1 -0
- package/dist/{chunk-CO4FMKOF.js → chunk-VASFK7V6.js} +6 -4
- package/dist/chunk-VASFK7V6.js.map +1 -0
- package/dist/{chunk-JSAQMYPK.js → chunk-ZLHC2CZ6.js} +1 -2
- package/dist/{chunk-JSAQMYPK.js.map → chunk-ZLHC2CZ6.js.map} +1 -1
- package/dist/config-22T7HJBJ.js +9 -0
- package/dist/config-A56HUM6C.js +9 -0
- package/dist/config-DIWQZBOK.js +9 -0
- package/dist/config-HGJ2MGAC.js +9 -0
- package/dist/{config-ET26F632.js → config-MHBKYS53.js} +2 -4
- package/dist/config-PAHALM2T.js +9 -0
- package/dist/config-PWZXYJOI.js +9 -0
- package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
- package/dist/digitalocean-SQA6MJJQ.js +8 -0
- package/dist/discord-ASNFJP6A.js +7 -0
- package/dist/dropbox-VV2WZE6I.js +8 -0
- package/dist/gcs-2W6DDWM7.js +8 -0
- package/dist/gdocs-QPM7VXXE.js +8 -0
- package/dist/gdrive-KT6R7EVB.js +8 -0
- package/dist/github-3IFZGW6I.js +7 -0
- package/dist/github_ci-CKKF2Y4S.js +8 -0
- package/dist/gmail-HLZIMKQU.js +8 -0
- package/dist/gsheets-HF4YPIEF.js +8 -0
- package/dist/gslides-EV2JJH7I.js +8 -0
- package/dist/index.d.ts +46 -34
- package/dist/index.js +87 -83
- package/dist/index.js.map +1 -1
- package/dist/langfuse-74ZCR6QL.js +7 -0
- package/dist/linear-XABGTU6E.js +7 -0
- package/dist/minio-JPNSX2NP.js +8 -0
- package/dist/mongodb-YZP643ZU.js +7 -0
- package/dist/notion-YJOTGH7J.js +7 -0
- package/dist/oci-R4VYQKGJ.js +8 -0
- package/dist/opfs-4RWMJBCI.js +7 -0
- package/dist/postgres-HPOMN2AR.js +7 -0
- package/dist/qingstor-ZWWK2ZGV.js +8 -0
- package/dist/r2-PZAN2YFG.js +8 -0
- package/dist/{s3-GD2WKLWR.js → s3-CSFY3PLT.js} +2 -2
- package/dist/scaleway-BFROPDBB.js +8 -0
- package/dist/seaweedfs-X6THZT26.js +8 -0
- package/dist/slack-O7BTJ4YR.js +7 -0
- package/dist/supabase-PHN3MIXW.js +8 -0
- package/dist/tencent-JGCJEKHV.js +8 -0
- package/dist/trello-QUDOP3M2.js +7 -0
- package/dist/wasabi-5VMNAFOC.js +8 -0
- package/package.json +2 -3
- package/dist/aliyun-F2ORS3KZ.js +0 -8
- package/dist/backblaze-HOVWPSV7.js +0 -8
- package/dist/box-VJSE5N7P.js +0 -8
- package/dist/ceph-CQKQ4NWW.js +0 -8
- package/dist/chunk-32VC36P4.js.map +0 -1
- package/dist/chunk-4YJMDF2S.js.map +0 -1
- package/dist/chunk-63GZEZW4.js.map +0 -1
- package/dist/chunk-6K57U6CM.js.map +0 -1
- package/dist/chunk-72GY5B23.js.map +0 -1
- package/dist/chunk-ATLYBQSC.js.map +0 -1
- package/dist/chunk-BUXWUKN7.js.map +0 -1
- package/dist/chunk-CAKSQ2LV.js.map +0 -1
- package/dist/chunk-CO4FMKOF.js.map +0 -1
- package/dist/chunk-D3JDGGKO.js.map +0 -1
- package/dist/chunk-D6HF462C.js.map +0 -1
- package/dist/chunk-EH2BN4JC.js.map +0 -1
- package/dist/chunk-EUKHGXCE.js.map +0 -1
- package/dist/chunk-GHKX2BA3.js.map +0 -1
- package/dist/chunk-HGSTRD7H.js.map +0 -1
- package/dist/chunk-INLL7LRM.js.map +0 -1
- package/dist/chunk-J54OBIJA.js.map +0 -1
- package/dist/chunk-JCS5EG5A.js.map +0 -1
- package/dist/chunk-JVTKE6DB.js.map +0 -1
- package/dist/chunk-MO5DGX42.js.map +0 -1
- package/dist/chunk-N43C6XFP.js.map +0 -1
- package/dist/chunk-NMZBJOFW.js.map +0 -1
- package/dist/chunk-O5ONB7QT.js.map +0 -1
- package/dist/chunk-RD7ED27I.js.map +0 -1
- package/dist/chunk-RJ4RR3BR.js.map +0 -1
- package/dist/chunk-RJ5FBBL6.js.map +0 -1
- package/dist/chunk-RZRXEXHM.js.map +0 -1
- package/dist/chunk-SBAUYZJB.js.map +0 -1
- package/dist/chunk-SJB2KXDM.js.map +0 -1
- package/dist/chunk-T43CZ3IZ.js.map +0 -1
- package/dist/chunk-TPFH5V4D.js.map +0 -1
- package/dist/chunk-UZWJ462U.js.map +0 -1
- package/dist/chunk-WEJGUCCL.js.map +0 -1
- package/dist/chunk-WZ53HLH6.js.map +0 -1
- package/dist/chunk-XFREXNA2.js.map +0 -1
- package/dist/chunk-YEDSFMWK.js.map +0 -1
- package/dist/config-7IZCGWKX.js +0 -11
- package/dist/config-AT74FARJ.js +0 -11
- package/dist/config-C2AYHACT.js +0 -11
- package/dist/config-GHJOYNM6.js +0 -11
- package/dist/config-L55UXIF4.js +0 -11
- package/dist/config-V7BLK5WP.js +0 -11
- package/dist/digitalocean-KC7VIWZK.js +0 -8
- package/dist/discord-W3DSEXKN.js +0 -7
- package/dist/dropbox-GI273OVA.js +0 -8
- package/dist/gcs-WRQTU27E.js +0 -8
- package/dist/gdocs-EI2EFVKG.js +0 -8
- package/dist/gdrive-62HD67IP.js +0 -8
- package/dist/github-SWLYD3LS.js +0 -7
- package/dist/github_ci-7P7VGBKM.js +0 -8
- package/dist/gmail-B7HXHZ7D.js +0 -8
- package/dist/gsheets-OTBW2JWG.js +0 -8
- package/dist/gslides-MXSR4HRY.js +0 -8
- package/dist/langfuse-FWKU6E3F.js +0 -7
- package/dist/linear-SHVG3XVT.js +0 -7
- package/dist/minio-246KOHBJ.js +0 -8
- package/dist/mongodb-2ITJUDCF.js +0 -7
- package/dist/notion-BOBBSJSG.js +0 -7
- package/dist/oci-T7VREPQW.js +0 -8
- package/dist/opfs-3XNAXR5B.js +0 -7
- package/dist/postgres-CK4HWZSL.js +0 -7
- package/dist/qingstor-WIC27LS3.js +0 -8
- package/dist/r2-EAX6KHEI.js +0 -8
- package/dist/scaleway-OVFRZBKW.js +0 -8
- package/dist/seaweedfs-EOJVO432.js +0 -8
- package/dist/slack-RNXMU5OC.js +0 -7
- package/dist/supabase-VSUNLIJ6.js +0 -8
- package/dist/tencent-YYM5WUVU.js +0 -8
- package/dist/trello-MNR3VPTT.js +0 -7
- package/dist/wasabi-K5ANTZ2C.js +0 -8
- /package/dist/{aliyun-F2ORS3KZ.js.map → aliyun-YEWHEWCL.js.map} +0 -0
- /package/dist/{backblaze-HOVWPSV7.js.map → backblaze-LWE2HEDK.js.map} +0 -0
- /package/dist/{box-VJSE5N7P.js.map → box-GTWWIB6F.js.map} +0 -0
- /package/dist/{ceph-CQKQ4NWW.js.map → ceph-ATSCSVGU.js.map} +0 -0
- /package/dist/{config-7IZCGWKX.js.map → config-22T7HJBJ.js.map} +0 -0
- /package/dist/{config-AT74FARJ.js.map → config-A56HUM6C.js.map} +0 -0
- /package/dist/{config-C2AYHACT.js.map → config-DIWQZBOK.js.map} +0 -0
- /package/dist/{config-ET26F632.js.map → config-HGJ2MGAC.js.map} +0 -0
- /package/dist/{config-GHJOYNM6.js.map → config-MHBKYS53.js.map} +0 -0
- /package/dist/{config-L55UXIF4.js.map → config-PAHALM2T.js.map} +0 -0
- /package/dist/{config-NV5WXP64.js.map → config-PWZXYJOI.js.map} +0 -0
- /package/dist/{config-V7BLK5WP.js.map → config-UU27ALAA.js.map} +0 -0
- /package/dist/{digitalocean-KC7VIWZK.js.map → digitalocean-SQA6MJJQ.js.map} +0 -0
- /package/dist/{discord-W3DSEXKN.js.map → discord-ASNFJP6A.js.map} +0 -0
- /package/dist/{dropbox-GI273OVA.js.map → dropbox-VV2WZE6I.js.map} +0 -0
- /package/dist/{gcs-WRQTU27E.js.map → gcs-2W6DDWM7.js.map} +0 -0
- /package/dist/{gdocs-EI2EFVKG.js.map → gdocs-QPM7VXXE.js.map} +0 -0
- /package/dist/{gdrive-62HD67IP.js.map → gdrive-KT6R7EVB.js.map} +0 -0
- /package/dist/{github-SWLYD3LS.js.map → github-3IFZGW6I.js.map} +0 -0
- /package/dist/{github_ci-7P7VGBKM.js.map → github_ci-CKKF2Y4S.js.map} +0 -0
- /package/dist/{gmail-B7HXHZ7D.js.map → gmail-HLZIMKQU.js.map} +0 -0
- /package/dist/{gsheets-OTBW2JWG.js.map → gsheets-HF4YPIEF.js.map} +0 -0
- /package/dist/{gslides-MXSR4HRY.js.map → gslides-EV2JJH7I.js.map} +0 -0
- /package/dist/{langfuse-FWKU6E3F.js.map → langfuse-74ZCR6QL.js.map} +0 -0
- /package/dist/{linear-SHVG3XVT.js.map → linear-XABGTU6E.js.map} +0 -0
- /package/dist/{minio-246KOHBJ.js.map → minio-JPNSX2NP.js.map} +0 -0
- /package/dist/{mongodb-2ITJUDCF.js.map → mongodb-YZP643ZU.js.map} +0 -0
- /package/dist/{notion-BOBBSJSG.js.map → notion-YJOTGH7J.js.map} +0 -0
- /package/dist/{oci-T7VREPQW.js.map → oci-R4VYQKGJ.js.map} +0 -0
- /package/dist/{opfs-3XNAXR5B.js.map → opfs-4RWMJBCI.js.map} +0 -0
- /package/dist/{postgres-CK4HWZSL.js.map → postgres-HPOMN2AR.js.map} +0 -0
- /package/dist/{qingstor-WIC27LS3.js.map → qingstor-ZWWK2ZGV.js.map} +0 -0
- /package/dist/{r2-EAX6KHEI.js.map → r2-PZAN2YFG.js.map} +0 -0
- /package/dist/{s3-GD2WKLWR.js.map → s3-CSFY3PLT.js.map} +0 -0
- /package/dist/{scaleway-OVFRZBKW.js.map → scaleway-BFROPDBB.js.map} +0 -0
- /package/dist/{seaweedfs-EOJVO432.js.map → seaweedfs-X6THZT26.js.map} +0 -0
- /package/dist/{slack-RNXMU5OC.js.map → slack-O7BTJ4YR.js.map} +0 -0
- /package/dist/{supabase-VSUNLIJ6.js.map → supabase-PHN3MIXW.js.map} +0 -0
- /package/dist/{tencent-YYM5WUVU.js.map → tencent-JGCJEKHV.js.map} +0 -0
- /package/dist/{trello-MNR3VPTT.js.map → trello-QUDOP3M2.js.map} +0 -0
- /package/dist/{wasabi-K5ANTZ2C.js.map → wasabi-5VMNAFOC.js.map} +0 -0
|
@@ -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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n GMAIL_COMMANDS,\n GMAIL_PROMPT,\n GMAIL_WRITE_PROMPT,\n GMAIL_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 makeResolveGlob,\n gmailStat,\n} from '@struktoai/mirage-core'\nimport { redactGmailConfig, type GmailConfig, type GmailConfigRedacted } from './config.ts'\n\nconst gmailResolveGlob = makeResolveGlob(gmailReaddir)\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 cachesReads: 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_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 glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, 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,SAAS,UAAU,qBAAqB;AACxC;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;AAGP,IAAM,mBAAmB,gBAAgB,YAAY;AAO9C,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,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,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,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":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
S3Resource
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DC6VA36O.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/oci/oci.ts
|
|
6
6
|
import {
|
|
@@ -19,7 +19,8 @@ var OCIConfigSchema = z.object({
|
|
|
19
19
|
namespace: z.string().optional(),
|
|
20
20
|
region: z.string().optional(),
|
|
21
21
|
endpoint: z.string().optional(),
|
|
22
|
-
defaultContentType: z.string().optional()
|
|
22
|
+
defaultContentType: z.string().optional(),
|
|
23
|
+
keyPrefix: z.string().optional()
|
|
23
24
|
});
|
|
24
25
|
function resolvedOciEndpoint(config) {
|
|
25
26
|
if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
|
|
@@ -35,7 +36,8 @@ function ociToS3Config(config) {
|
|
|
35
36
|
presignedUrlProvider: config.presignedUrlProvider,
|
|
36
37
|
...config.region !== void 0 ? { region: config.region } : {},
|
|
37
38
|
...endpoint !== void 0 ? { endpoint } : {},
|
|
38
|
-
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {}
|
|
39
|
+
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {},
|
|
40
|
+
...config.keyPrefix !== void 0 ? { keyPrefix: config.keyPrefix } : {}
|
|
39
41
|
};
|
|
40
42
|
}
|
|
41
43
|
function redactOciConfig(config) {
|
|
@@ -86,4 +88,4 @@ export {
|
|
|
86
88
|
OCI_BROWSER_PROMPT,
|
|
87
89
|
OCIResource
|
|
88
90
|
};
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-HTQ4GBKM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/oci/oci.ts","../src/resource/oci/config.ts","../src/resource/oci/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 { ociToS3Config, redactOciConfig, type OCIConfig, type OCIConfigRedacted } from './config.ts'\nimport { OCI_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface OCIResourceState {\n type: string\n config: OCIConfigRedacted\n}\n\nexport class OCIResource extends S3Resource {\n override readonly kind: string = ResourceName.OCI\n override readonly prompt: string = OCI_BROWSER_PROMPT\n readonly ociConfig: OCIConfig\n private readonly ociOps: readonly RegisteredOp[]\n private readonly ociCommands: readonly RegisteredCommand[]\n\n constructor(config: OCIConfig) {\n super(ociToS3Config(config))\n this.ociConfig = config\n this.ociOps = remapOpsResource(super.ops(), ResourceName.OCI)\n this.ociCommands = remapCommandsResource(super.commands(), ResourceName.OCI)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.ociOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.ociCommands\n }\n\n override getState(): Promise<OCIResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactOciConfig(this.ociConfig),\n })\n }\n\n override loadState(_state: OCIResourceState): 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 OCIConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n namespace?: string\n region?: string\n endpoint?: string\n defaultContentType?: string\n keyPrefix?: string\n}\n\nexport interface OCIConfigRedacted extends Omit<OCIConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nconst OCIConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n namespace: z.string().optional(),\n region: z.string().optional(),\n endpoint: z.string().optional(),\n defaultContentType: z.string().optional(),\n keyPrefix: z.string().optional(),\n})\n\nexport function resolvedOciEndpoint(config: OCIConfig): string | undefined {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n if (\n config.namespace !== undefined &&\n config.namespace !== '' &&\n config.region !== undefined &&\n config.region !== ''\n ) {\n return `https://${config.namespace}.compat.objectstorage.${config.region}.oci.customer-oci.com`\n }\n return undefined\n}\n\nexport function ociToS3Config(config: OCIConfig): S3Config {\n const endpoint = resolvedOciEndpoint(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 ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n }\n}\n\nexport function redactOciConfig(config: OCIConfig): OCIConfigRedacted {\n return redactConfigWithSchema(OCIConfigSchema, config) as unknown as OCIConfigRedacted\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 OCI_BROWSER_PROMPT = `{prefix}\n Remote Oracle Cloud Object Storage 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;AAiBxD,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,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;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,SAAS,oBAAoB,QAAuC;AACzE,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MACE,OAAO,cAAc,UACrB,OAAO,cAAc,MACrB,OAAO,WAAW,UAClB,OAAO,WAAW,IAClB;AACA,WAAO,WAAW,OAAO,SAAS,yBAAyB,OAAO,MAAM;AAAA,EAC1E;AACA,SAAO;AACT;AAEO,SAAS,cAAc,QAA6B;AACzD,QAAM,WAAW,oBAAoB,MAAM;AAC3C,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,IACL,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,gBAAgB,QAAsC;AACpE,SAAO,uBAAuB,iBAAiB,MAAM;AACvD;;;AC1DO,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":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
S3Resource
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DC6VA36O.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/digitalocean/digitalocean.ts
|
|
6
6
|
import {
|
|
@@ -18,7 +18,8 @@ var DigitalOceanConfigSchema = z.object({
|
|
|
18
18
|
),
|
|
19
19
|
region: z.string().optional(),
|
|
20
20
|
endpoint: z.string().optional(),
|
|
21
|
-
defaultContentType: z.string().optional()
|
|
21
|
+
defaultContentType: z.string().optional(),
|
|
22
|
+
keyPrefix: z.string().optional()
|
|
22
23
|
});
|
|
23
24
|
function resolvedDigitalOceanEndpoint(config) {
|
|
24
25
|
if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
|
|
@@ -35,7 +36,8 @@ function digitalOceanToS3Config(config) {
|
|
|
35
36
|
presignedUrlProvider: config.presignedUrlProvider,
|
|
36
37
|
...config.region !== void 0 ? { region: config.region } : {},
|
|
37
38
|
...endpoint !== void 0 ? { endpoint } : {},
|
|
38
|
-
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {}
|
|
39
|
+
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {},
|
|
40
|
+
...config.keyPrefix !== void 0 ? { keyPrefix: config.keyPrefix } : {}
|
|
39
41
|
};
|
|
40
42
|
}
|
|
41
43
|
function redactDigitalOceanConfig(config) {
|
|
@@ -89,4 +91,4 @@ export {
|
|
|
89
91
|
DIGITALOCEAN_BROWSER_PROMPT,
|
|
90
92
|
DigitalOceanResource
|
|
91
93
|
};
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
94
|
+
//# sourceMappingURL=chunk-JV4T5HNB.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 keyPrefix?: string\n}\n\nexport interface DigitalOceanConfigRedacted extends Omit<\n DigitalOceanConfig,\n 'presignedUrlProvider'\n> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nconst 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 keyPrefix: 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 ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\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;AAmBxD,IAAM,2BAA2B,EAAE,OAAO;AAAA,EACxC,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;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,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,IACL,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,yBAAyB,QAAwD;AAC/F,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AC1DO,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":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/resource/mongodb/mongodb.ts
|
|
2
|
+
import { mountKey, mountPrefixOf } from "@struktoai/mirage-core";
|
|
2
3
|
import {
|
|
3
4
|
MONGODB_COMMANDS,
|
|
4
5
|
MONGODB_OPS,
|
|
@@ -10,7 +11,7 @@ import {
|
|
|
10
11
|
PathSpec,
|
|
11
12
|
RAMIndexCacheStore,
|
|
12
13
|
resolveMongoDBConfig,
|
|
13
|
-
|
|
14
|
+
makeResolveGlob,
|
|
14
15
|
ResourceName
|
|
15
16
|
} from "@struktoai/mirage-core";
|
|
16
17
|
|
|
@@ -98,9 +99,10 @@ var HttpMongoDriver = class {
|
|
|
98
99
|
};
|
|
99
100
|
|
|
100
101
|
// src/resource/mongodb/mongodb.ts
|
|
102
|
+
var resolveMongoGlob = makeResolveGlob(mongoReaddir);
|
|
101
103
|
var MongoDBResource = class {
|
|
102
104
|
kind = ResourceName.MONGODB;
|
|
103
|
-
|
|
105
|
+
cachesReads = false;
|
|
104
106
|
indexTtl = 0;
|
|
105
107
|
prompt;
|
|
106
108
|
config;
|
|
@@ -138,12 +140,12 @@ var MongoDBResource = class {
|
|
|
138
140
|
}
|
|
139
141
|
glob(paths, prefix = "") {
|
|
140
142
|
const effective = prefix !== "" ? paths.map(
|
|
141
|
-
(p) => p.
|
|
142
|
-
|
|
143
|
+
(p) => mountPrefixOf(p.virtual, p.resourcePath) !== "" ? p : new PathSpec({
|
|
144
|
+
virtual: p.virtual,
|
|
143
145
|
directory: p.directory,
|
|
144
146
|
...p.pattern !== null ? { pattern: p.pattern } : {},
|
|
145
147
|
resolved: p.resolved,
|
|
146
|
-
prefix
|
|
148
|
+
resourcePath: mountKey(p.virtual, prefix)
|
|
147
149
|
})
|
|
148
150
|
) : paths;
|
|
149
151
|
return resolveMongoGlob(this.accessor, effective, this.index);
|
|
@@ -154,4 +156,4 @@ export {
|
|
|
154
156
|
HttpMongoDriver,
|
|
155
157
|
MongoDBResource
|
|
156
158
|
};
|
|
157
|
-
//# sourceMappingURL=chunk-
|
|
159
|
+
//# sourceMappingURL=chunk-KL2VFYUV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/mongodb/mongodb.ts","../src/resource/mongodb/http_driver.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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n type IndexCacheStore,\n MONGODB_COMMANDS,\n MONGODB_OPS,\n MONGODB_PROMPT,\n MongoDBAccessor,\n type MongoDBConfig,\n type MongoDBConfigResolved,\n type MongoDriver,\n mongoRead,\n mongoReaddir,\n mongoStat,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n resolveMongoDBConfig,\n makeResolveGlob,\n ResourceName,\n} from '@struktoai/mirage-core'\nimport { HttpMongoDriver } from './http_driver.ts'\n\nconst resolveMongoGlob = makeResolveGlob(mongoReaddir)\n\nexport interface MongoDBResourceOptions {\n config: MongoDBConfig\n prefix?: string\n driver?: MongoDriver\n endpoint?: string\n}\n\nexport class MongoDBResource implements Resource {\n readonly kind: string = ResourceName.MONGODB\n readonly cachesReads: boolean = false\n readonly indexTtl: number = 0\n readonly prompt: string\n readonly config: MongoDBConfigResolved\n readonly driver: MongoDriver\n readonly accessor: MongoDBAccessor\n readonly index: IndexCacheStore\n\n constructor(options: MongoDBResourceOptions | MongoDBConfig) {\n const { config, prefix, driver, endpoint } =\n 'config' in options\n ? options\n : { config: options, prefix: undefined, driver: undefined, endpoint: undefined }\n this.config = resolveMongoDBConfig(config)\n this.driver = driver ?? new HttpMongoDriver({ endpoint: endpoint ?? this.config.uri })\n this.accessor = new MongoDBAccessor(this.driver, this.config)\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n this.prompt = MONGODB_PROMPT.replace('{prefix}', prefix ?? '')\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n async close(): Promise<void> {\n await this.driver.close()\n }\n\n ops(): readonly RegisteredOp[] {\n return MONGODB_OPS\n }\n\n commands(): readonly RegisteredCommand[] {\n return MONGODB_COMMANDS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return mongoRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return mongoReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return mongoStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return resolveMongoGlob(this.accessor, effective, this.index)\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 type {\n EntityKind,\n MongoCollectionSpec,\n MongoDriver,\n MongoFindOptions,\n MongoIndexAccess,\n MongoIterOptions,\n} from '@struktoai/mirage-core'\n\nexport interface HttpMongoDriverOptions {\n endpoint: string\n fetchImpl?: typeof fetch\n headers?: Record<string, string>\n}\n\ninterface MongoProxyRequest {\n op:\n | 'listDatabases'\n | 'listCollections'\n | 'listCollectionsDetailed'\n | 'findDocuments'\n | 'iterDocuments'\n | 'countDocuments'\n | 'listIndexes'\n | 'getIndexStats'\n database?: string\n collection?: string\n kind?: EntityKind | null\n nameFilter?: { name?: string }\n filter?: Record<string, unknown>\n options?: MongoFindOptions | MongoIterOptions\n}\n\nexport class HttpMongoDriver implements MongoDriver {\n readonly endpoint: string\n private readonly fetchImpl: typeof fetch\n private readonly headers: Record<string, string>\n\n constructor(options: HttpMongoDriverOptions) {\n this.endpoint = options.endpoint\n this.fetchImpl = options.fetchImpl ?? fetch.bind(globalThis)\n this.headers = options.headers ?? {}\n }\n\n private async post<T>(req: MongoProxyRequest): Promise<T> {\n const r = await this.fetchImpl(this.endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...this.headers },\n body: JSON.stringify(req),\n })\n if (!r.ok) {\n const body = await r.text().catch(() => '')\n throw new Error(`mongo proxy ${req.op} → ${String(r.status)} ${body}`)\n }\n return (await r.json()) as T\n }\n\n listDatabases(): Promise<string[]> {\n return this.post<string[]>({ op: 'listDatabases' })\n }\n\n listCollections(database: string, kind: EntityKind | null = null): Promise<string[]> {\n return this.post<string[]>({ op: 'listCollections', database, kind })\n }\n\n listCollectionsDetailed(\n database: string,\n filter: { name?: string } = {},\n ): Promise<MongoCollectionSpec[]> {\n return this.post<MongoCollectionSpec[]>({\n op: 'listCollectionsDetailed',\n database,\n nameFilter: filter,\n })\n }\n\n async findDocuments<T = Record<string, unknown>>(\n database: string,\n collection: string,\n filter: Record<string, unknown> = {},\n options: MongoFindOptions = {},\n ): Promise<T[]> {\n return this.post<T[]>({\n op: 'findDocuments',\n database,\n collection,\n filter,\n options,\n })\n }\n\n async *iterDocuments<T = Record<string, unknown>>(\n database: string,\n collection: string,\n options: MongoIterOptions = {},\n ): AsyncIterableIterator<T> {\n const docs = await this.post<T[]>({\n op: 'iterDocuments',\n database,\n collection,\n options,\n })\n for (const d of docs) yield d\n }\n\n iterInserts<T = Record<string, unknown>>(\n _database: string,\n _collection: string,\n ): AsyncIterableIterator<T> {\n return {\n next: () =>\n Promise.reject(new Error('iterInserts (tail -f) is not supported by HttpMongoDriver')),\n [Symbol.asyncIterator]() {\n return this\n },\n }\n }\n\n countDocuments(\n database: string,\n collection: string,\n filter: Record<string, unknown> = {},\n ): Promise<number> {\n return this.post<number>({ op: 'countDocuments', database, collection, filter })\n }\n\n listIndexes(database: string, collection: string): Promise<Record<string, unknown>[]> {\n return this.post<Record<string, unknown>[]>({\n op: 'listIndexes',\n database,\n collection,\n })\n }\n\n getIndexStats(database: string, collection: string): Promise<Record<string, MongoIndexAccess>> {\n return this.post<Record<string, MongoIndexAccess>>({\n op: 'getIndexStats',\n database,\n collection,\n })\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";AAcA,SAAS,UAAU,qBAAqB;AACxC;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACWA,IAAM,kBAAN,MAA6C;AAAA,EACzC;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,SAAiC;AAC3C,SAAK,WAAW,QAAQ;AACxB,SAAK,YAAY,QAAQ,aAAa,MAAM,KAAK,UAAU;AAC3D,SAAK,UAAU,QAAQ,WAAW,CAAC;AAAA,EACrC;AAAA,EAEA,MAAc,KAAQ,KAAoC;AACxD,UAAM,IAAI,MAAM,KAAK,UAAU,KAAK,UAAU;AAAA,MAC5C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,oBAAoB,GAAG,KAAK,QAAQ;AAAA,MAC/D,MAAM,KAAK,UAAU,GAAG;AAAA,IAC1B,CAAC;AACD,QAAI,CAAC,EAAE,IAAI;AACT,YAAM,OAAO,MAAM,EAAE,KAAK,EAAE,MAAM,MAAM,EAAE;AAC1C,YAAM,IAAI,MAAM,eAAe,IAAI,EAAE,WAAM,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;AAAA,IACvE;AACA,WAAQ,MAAM,EAAE,KAAK;AAAA,EACvB;AAAA,EAEA,gBAAmC;AACjC,WAAO,KAAK,KAAe,EAAE,IAAI,gBAAgB,CAAC;AAAA,EACpD;AAAA,EAEA,gBAAgB,UAAkB,OAA0B,MAAyB;AACnF,WAAO,KAAK,KAAe,EAAE,IAAI,mBAAmB,UAAU,KAAK,CAAC;AAAA,EACtE;AAAA,EAEA,wBACE,UACA,SAA4B,CAAC,GACG;AAChC,WAAO,KAAK,KAA4B;AAAA,MACtC,IAAI;AAAA,MACJ;AAAA,MACA,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cACJ,UACA,YACA,SAAkC,CAAC,GACnC,UAA4B,CAAC,GACf;AACd,WAAO,KAAK,KAAU;AAAA,MACpB,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,cACL,UACA,YACA,UAA4B,CAAC,GACH;AAC1B,UAAM,OAAO,MAAM,KAAK,KAAU;AAAA,MAChC,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,eAAW,KAAK,KAAM,OAAM;AAAA,EAC9B;AAAA,EAEA,YACE,WACA,aAC0B;AAC1B,WAAO;AAAA,MACL,MAAM,MACJ,QAAQ,OAAO,IAAI,MAAM,2DAA2D,CAAC;AAAA,MACvF,CAAC,OAAO,aAAa,IAAI;AACvB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eACE,UACA,YACA,SAAkC,CAAC,GAClB;AACjB,WAAO,KAAK,KAAa,EAAE,IAAI,kBAAkB,UAAU,YAAY,OAAO,CAAC;AAAA,EACjF;AAAA,EAEA,YAAY,UAAkB,YAAwD;AACpF,WAAO,KAAK,KAAgC;AAAA,MAC1C,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,cAAc,UAAkB,YAA+D;AAC7F,WAAO,KAAK,KAAuC;AAAA,MACjD,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;;;ADxHA,IAAM,mBAAmB,gBAAgB,YAAY;AAS9C,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAiD;AAC3D,UAAM,EAAE,QAAQ,QAAQ,QAAQ,SAAS,IACvC,YAAY,UACR,UACA,EAAE,QAAQ,SAAS,QAAQ,QAAW,QAAQ,QAAW,UAAU,OAAU;AACnF,SAAK,SAAS,qBAAqB,MAAM;AACzC,SAAK,SAAS,UAAU,IAAI,gBAAgB,EAAE,UAAU,YAAY,KAAK,OAAO,IAAI,CAAC;AACrF,SAAK,WAAW,IAAI,gBAAgB,KAAK,QAAQ,KAAK,MAAM;AAC5D,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,SAAS,CAAC;AAC1D,SAAK,SAAS,eAAe,QAAQ,YAAY,UAAU,EAAE;AAAA,EAC/D;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,KAAK,OAAO,MAAM;AAAA,EAC1B;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,WAAyC;AACvC,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,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,CAAC;AAAA,IACP,IACA;AACN,WAAO,iBAAiB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC9D;AACF;","names":[]}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
// src/resource/gmail/config.ts
|
|
2
2
|
import {
|
|
3
|
-
GoogleConfigSchema,
|
|
4
3
|
normalizeGoogleConfig,
|
|
5
4
|
redactGoogleConfig
|
|
6
5
|
} from "@struktoai/mirage-core";
|
|
7
6
|
|
|
8
7
|
export {
|
|
9
|
-
GoogleConfigSchema,
|
|
10
8
|
normalizeGoogleConfig,
|
|
11
9
|
redactGoogleConfig
|
|
12
10
|
};
|
|
13
|
-
//# sourceMappingURL=chunk-
|
|
11
|
+
//# sourceMappingURL=chunk-LPDLPRPS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resource/gmail/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\nexport {\n
|
|
1
|
+
{"version":3,"sources":["../src/resource/gmail/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\nexport {\n normalizeGoogleConfig as normalizeGmailConfig,\n redactGoogleConfig as redactGmailConfig,\n type GoogleConfig as GmailConfig,\n type GoogleConfigRedacted as GmailConfigRedacted,\n} from '@struktoai/mirage-core'\n"],"mappings":";AAcA;AAAA,EAC2B;AAAA,EACH;AAAA,OAGjB;","names":[]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactGitHubCIConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DGP3N4WM.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/github_ci/github_ci.ts
|
|
6
|
+
import { mountKey, mountPrefixOf } from "@struktoai/mirage-core";
|
|
6
7
|
import {
|
|
7
8
|
GITHUB_CI_COMMANDS,
|
|
8
9
|
GITHUB_CI_PROMPT,
|
|
9
|
-
|
|
10
|
+
GITHUB_CI_OPS,
|
|
10
11
|
GitHubCIAccessor,
|
|
11
12
|
HttpCITransport,
|
|
12
13
|
PathSpec,
|
|
@@ -14,12 +15,13 @@ import {
|
|
|
14
15
|
ResourceName,
|
|
15
16
|
githubCiRead,
|
|
16
17
|
githubCiReaddir,
|
|
17
|
-
|
|
18
|
+
makeResolveGlob,
|
|
18
19
|
githubCiStat
|
|
19
20
|
} from "@struktoai/mirage-core";
|
|
21
|
+
var githubCiResolveGlob = makeResolveGlob(githubCiReaddir);
|
|
20
22
|
var GitHubCIResource = class {
|
|
21
23
|
kind = ResourceName.GITHUB_CI;
|
|
22
|
-
|
|
24
|
+
cachesReads = true;
|
|
23
25
|
indexTtl = 86400;
|
|
24
26
|
prompt = GITHUB_CI_PROMPT;
|
|
25
27
|
config;
|
|
@@ -47,7 +49,7 @@ var GitHubCIResource = class {
|
|
|
47
49
|
return GITHUB_CI_COMMANDS;
|
|
48
50
|
}
|
|
49
51
|
ops() {
|
|
50
|
-
return
|
|
52
|
+
return GITHUB_CI_OPS;
|
|
51
53
|
}
|
|
52
54
|
readFile(p) {
|
|
53
55
|
return githubCiRead(this.accessor, p, this.index);
|
|
@@ -58,18 +60,14 @@ var GitHubCIResource = class {
|
|
|
58
60
|
stat(p) {
|
|
59
61
|
return githubCiStat(this.accessor, p, this.index);
|
|
60
62
|
}
|
|
61
|
-
async fingerprint(p) {
|
|
62
|
-
const lookup = await this.index.get(p.original);
|
|
63
|
-
return lookup.entry?.remoteTime ?? null;
|
|
64
|
-
}
|
|
65
63
|
glob(paths, prefix = "") {
|
|
66
64
|
const effective = prefix !== "" ? paths.map(
|
|
67
|
-
(p) => p.
|
|
68
|
-
|
|
65
|
+
(p) => mountPrefixOf(p.virtual, p.resourcePath) !== "" ? p : new PathSpec({
|
|
66
|
+
virtual: p.virtual,
|
|
69
67
|
directory: p.directory,
|
|
70
68
|
...p.pattern !== null ? { pattern: p.pattern } : {},
|
|
71
69
|
resolved: p.resolved,
|
|
72
|
-
prefix
|
|
70
|
+
resourcePath: mountKey(p.virtual, prefix)
|
|
73
71
|
})
|
|
74
72
|
) : paths;
|
|
75
73
|
return githubCiResolveGlob(this.accessor, effective, this.index);
|
|
@@ -88,4 +86,4 @@ var GitHubCIResource = class {
|
|
|
88
86
|
export {
|
|
89
87
|
GitHubCIResource
|
|
90
88
|
};
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-LW56WZDS.js.map
|
|
@@ -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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n GITHUB_CI_COMMANDS,\n GITHUB_CI_PROMPT,\n GITHUB_CI_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 makeResolveGlob,\n githubCiStat,\n} from '@struktoai/mirage-core'\nimport { redactGitHubCIConfig, type GitHubCIConfig, type GitHubCIConfigRedacted } from './config.ts'\n\nconst githubCiResolveGlob = makeResolveGlob(githubCiReaddir)\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 cachesReads: 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_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 glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, 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,SAAS,UAAU,qBAAqB;AACxC;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;AAGP,IAAM,sBAAsB,gBAAgB,eAAe;AAOpD,IAAM,mBAAN,MAA2C;AAAA,EACvC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,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,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,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,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
S3Resource
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DC6VA36O.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/seaweedfs/seaweedfs.ts
|
|
6
6
|
import {
|
|
@@ -18,7 +18,8 @@ var SeaweedFSConfigSchema = z.object({
|
|
|
18
18
|
),
|
|
19
19
|
endpoint: z.string().optional(),
|
|
20
20
|
region: z.string().optional(),
|
|
21
|
-
defaultContentType: z.string().optional()
|
|
21
|
+
defaultContentType: z.string().optional(),
|
|
22
|
+
keyPrefix: z.string().optional()
|
|
22
23
|
});
|
|
23
24
|
function seaweedfsToS3Config(config) {
|
|
24
25
|
return {
|
|
@@ -26,7 +27,8 @@ function seaweedfsToS3Config(config) {
|
|
|
26
27
|
presignedUrlProvider: config.presignedUrlProvider,
|
|
27
28
|
...config.region !== void 0 ? { region: config.region } : {},
|
|
28
29
|
...config.endpoint !== void 0 ? { endpoint: config.endpoint } : {},
|
|
29
|
-
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {}
|
|
30
|
+
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {},
|
|
31
|
+
...config.keyPrefix !== void 0 ? { keyPrefix: config.keyPrefix } : {}
|
|
30
32
|
};
|
|
31
33
|
}
|
|
32
34
|
function redactSeaweedFSConfig(config) {
|
|
@@ -76,4 +78,4 @@ export {
|
|
|
76
78
|
SEAWEEDFS_BROWSER_PROMPT,
|
|
77
79
|
SeaweedFSResource
|
|
78
80
|
};
|
|
79
|
-
//# sourceMappingURL=chunk-
|
|
81
|
+
//# sourceMappingURL=chunk-MB4TUUJQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/seaweedfs/seaweedfs.ts","../src/resource/seaweedfs/config.ts","../src/resource/seaweedfs/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 redactSeaweedFSConfig,\n seaweedfsToS3Config,\n type SeaweedFSConfig,\n type SeaweedFSConfigRedacted,\n} from './config.ts'\nimport { SEAWEEDFS_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface SeaweedFSResourceState {\n type: string\n config: SeaweedFSConfigRedacted\n}\n\nexport class SeaweedFSResource extends S3Resource {\n override readonly kind: string = ResourceName.SEAWEEDFS\n override readonly prompt: string = SEAWEEDFS_BROWSER_PROMPT\n readonly seaweedfsConfig: SeaweedFSConfig\n private readonly seaweedfsOps: readonly RegisteredOp[]\n private readonly seaweedfsCommands: readonly RegisteredCommand[]\n\n constructor(config: SeaweedFSConfig) {\n super(seaweedfsToS3Config(config))\n this.seaweedfsConfig = config\n this.seaweedfsOps = remapOpsResource(super.ops(), ResourceName.SEAWEEDFS)\n this.seaweedfsCommands = remapCommandsResource(super.commands(), ResourceName.SEAWEEDFS)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.seaweedfsOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.seaweedfsCommands\n }\n\n override getState(): Promise<SeaweedFSResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactSeaweedFSConfig(this.seaweedfsConfig),\n })\n }\n\n override loadState(_state: SeaweedFSResourceState): 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 SeaweedFSConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n endpoint?: string\n region?: string\n defaultContentType?: string\n keyPrefix?: string\n}\n\nexport interface SeaweedFSConfigRedacted extends Omit<SeaweedFSConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nconst SeaweedFSConfigSchema = 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 keyPrefix: z.string().optional(),\n})\n\nexport function seaweedfsToS3Config(config: SeaweedFSConfig): 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 ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n }\n}\n\nexport function redactSeaweedFSConfig(config: SeaweedFSConfig): SeaweedFSConfigRedacted {\n return redactConfigWithSchema(SeaweedFSConfigSchema, config) as unknown as SeaweedFSConfigRedacted\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 SEAWEEDFS_BROWSER_PROMPT = `{prefix}\n Remote SeaweedFS bucket (S3-compatible gateway) 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;AAgBxD,IAAM,wBAAwB,EAAE,OAAO;AAAA,EACrC,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;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,SAAS,oBAAoB,QAAmC;AACrE,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,IACL,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,sBAAsB,QAAkD;AACtF,SAAO,uBAAuB,uBAAuB,MAAM;AAC7D;;;AC1CO,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;;;AFqBjC,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAC9B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAyB;AACnC,UAAM,oBAAoB,MAAM,CAAC;AACjC,SAAK,kBAAkB;AACvB,SAAK,eAAe,iBAAiB,MAAM,IAAI,GAAG,aAAa,SAAS;AACxE,SAAK,oBAAoB,sBAAsB,MAAM,SAAS,GAAG,aAAa,SAAS;AAAA,EACzF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAA4C;AACnD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,sBAAsB,KAAK,eAAe;AAAA,IACpD,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA+C;AAChE,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -3,7 +3,10 @@ import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoa
|
|
|
3
3
|
var DropboxConfigSchema = z.object({
|
|
4
4
|
clientId: z.string(),
|
|
5
5
|
clientSecret: secretStr().optional(),
|
|
6
|
-
refreshToken: secretStr()
|
|
6
|
+
refreshToken: secretStr(),
|
|
7
|
+
rootPath: z.string().optional(),
|
|
8
|
+
contentSearch: z.boolean().optional(),
|
|
9
|
+
endpoint: z.string().optional()
|
|
7
10
|
});
|
|
8
11
|
function redactDropboxConfig(config) {
|
|
9
12
|
return redactConfigWithSchema(DropboxConfigSchema, config);
|
|
@@ -13,14 +16,15 @@ function normalizeDropboxConfig(input) {
|
|
|
13
16
|
rename: {
|
|
14
17
|
client_id: "clientId",
|
|
15
18
|
client_secret: "clientSecret",
|
|
16
|
-
refresh_token: "refreshToken"
|
|
19
|
+
refresh_token: "refreshToken",
|
|
20
|
+
root_path: "rootPath",
|
|
21
|
+
content_search: "contentSearch"
|
|
17
22
|
}
|
|
18
23
|
});
|
|
19
24
|
}
|
|
20
25
|
|
|
21
26
|
export {
|
|
22
|
-
DropboxConfigSchema,
|
|
23
27
|
redactDropboxConfig,
|
|
24
28
|
normalizeDropboxConfig
|
|
25
29
|
};
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
30
|
+
//# sourceMappingURL=chunk-MQMUOJZ2.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 rootPath?: string\n contentSearch?: boolean\n endpoint?: 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 rootPath?: string\n contentSearch?: boolean\n endpoint?: string\n}\n\nconst DropboxConfigSchema = z.object({\n clientId: z.string(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr(),\n rootPath: z.string().optional(),\n contentSearch: z.boolean().optional(),\n endpoint: z.string().optional(),\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 root_path: 'rootPath',\n content_search: 'contentSearch',\n },\n }) as unknown as DropboxConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAqBtE,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,cAAc,UAAU;AAAA,EACxB,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,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,MACf,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactGDocsConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DQK6H5LW.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/gdocs/gdocs.ts
|
|
6
|
+
import { mountKey, mountPrefixOf } from "@struktoai/mirage-core";
|
|
6
7
|
import {
|
|
7
8
|
GDOCS_COMMANDS,
|
|
8
9
|
GDOCS_PROMPT,
|
|
9
|
-
|
|
10
|
+
GDOCS_OPS,
|
|
10
11
|
GDOCS_WRITE_PROMPT,
|
|
11
12
|
GDocsAccessor,
|
|
12
13
|
PathSpec,
|
|
@@ -15,12 +16,13 @@ import {
|
|
|
15
16
|
TokenManager,
|
|
16
17
|
gdocsRead,
|
|
17
18
|
gdocsReaddir,
|
|
18
|
-
|
|
19
|
+
makeResolveGlob,
|
|
19
20
|
gdocsStat
|
|
20
21
|
} from "@struktoai/mirage-core";
|
|
22
|
+
var gdocsResolveGlob = makeResolveGlob(gdocsReaddir);
|
|
21
23
|
var GDocsResource = class {
|
|
22
24
|
kind = ResourceName.GDOCS;
|
|
23
|
-
|
|
25
|
+
cachesReads = true;
|
|
24
26
|
indexTtl = 86400;
|
|
25
27
|
prompt = GDOCS_PROMPT;
|
|
26
28
|
writePrompt = GDOCS_WRITE_PROMPT;
|
|
@@ -48,7 +50,7 @@ var GDocsResource = class {
|
|
|
48
50
|
return GDOCS_COMMANDS;
|
|
49
51
|
}
|
|
50
52
|
ops() {
|
|
51
|
-
return
|
|
53
|
+
return GDOCS_OPS;
|
|
52
54
|
}
|
|
53
55
|
readFile(p) {
|
|
54
56
|
return gdocsRead(this.accessor, p, this.index);
|
|
@@ -59,18 +61,14 @@ var GDocsResource = class {
|
|
|
59
61
|
stat(p) {
|
|
60
62
|
return gdocsStat(this.accessor, p, this.index);
|
|
61
63
|
}
|
|
62
|
-
async fingerprint(p) {
|
|
63
|
-
const lookup = await this.index.get(p.original);
|
|
64
|
-
return lookup.entry?.remoteTime ?? null;
|
|
65
|
-
}
|
|
66
64
|
glob(paths, prefix = "") {
|
|
67
65
|
const effective = prefix !== "" ? paths.map(
|
|
68
|
-
(p) => p.
|
|
69
|
-
|
|
66
|
+
(p) => mountPrefixOf(p.virtual, p.resourcePath) !== "" ? p : new PathSpec({
|
|
67
|
+
virtual: p.virtual,
|
|
70
68
|
directory: p.directory,
|
|
71
69
|
...p.pattern !== null ? { pattern: p.pattern } : {},
|
|
72
70
|
resolved: p.resolved,
|
|
73
|
-
prefix
|
|
71
|
+
resourcePath: mountKey(p.virtual, prefix)
|
|
74
72
|
})
|
|
75
73
|
) : paths;
|
|
76
74
|
return gdocsResolveGlob(this.accessor, effective, this.index);
|
|
@@ -89,4 +87,4 @@ var GDocsResource = class {
|
|
|
89
87
|
export {
|
|
90
88
|
GDocsResource
|
|
91
89
|
};
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-N5VRBFRT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/gdocs/gdocs.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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n GDOCS_COMMANDS,\n GDOCS_PROMPT,\n GDOCS_OPS,\n GDOCS_WRITE_PROMPT,\n GDocsAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gdocsRead,\n gdocsReaddir,\n makeResolveGlob,\n gdocsStat,\n} from '@struktoai/mirage-core'\nimport { redactGDocsConfig, type GDocsConfig, type GDocsConfigRedacted } from './config.ts'\n\nconst gdocsResolveGlob = makeResolveGlob(gdocsReaddir)\n\nexport interface GDocsResourceState {\n type: string\n config: GDocsConfigRedacted\n}\n\nexport class GDocsResource implements Resource {\n readonly kind: string = ResourceName.GDOCS\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GDOCS_PROMPT\n readonly writePrompt: string = GDOCS_WRITE_PROMPT\n readonly config: GDocsConfig\n readonly accessor: GDocsAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GDocsConfig) {\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 GDocsAccessor({ 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 GDOCS_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GDOCS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gdocsRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gdocsReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gdocsStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return gdocsResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GDocsResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGDocsConfig(this.config),\n })\n }\n\n loadState(_state: GDocsResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA,SAAS,UAAU,qBAAqB;AACxC;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;AAGP,IAAM,mBAAmB,gBAAgB,YAAY;AAO9C,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,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;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,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,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,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,kBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
S3Resource
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DC6VA36O.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/backblaze/backblaze.ts
|
|
6
6
|
import {
|
|
@@ -18,7 +18,8 @@ var BackblazeConfigSchema = z.object({
|
|
|
18
18
|
),
|
|
19
19
|
region: z.string().optional(),
|
|
20
20
|
endpoint: z.string().optional(),
|
|
21
|
-
defaultContentType: z.string().optional()
|
|
21
|
+
defaultContentType: z.string().optional(),
|
|
22
|
+
keyPrefix: z.string().optional()
|
|
22
23
|
});
|
|
23
24
|
function resolvedBackblazeEndpoint(config) {
|
|
24
25
|
if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
|
|
@@ -35,7 +36,8 @@ function backblazeToS3Config(config) {
|
|
|
35
36
|
presignedUrlProvider: config.presignedUrlProvider,
|
|
36
37
|
...config.region !== void 0 ? { region: config.region } : {},
|
|
37
38
|
...endpoint !== void 0 ? { endpoint } : {},
|
|
38
|
-
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {}
|
|
39
|
+
...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {},
|
|
40
|
+
...config.keyPrefix !== void 0 ? { keyPrefix: config.keyPrefix } : {}
|
|
39
41
|
};
|
|
40
42
|
}
|
|
41
43
|
function redactBackblazeConfig(config) {
|
|
@@ -86,4 +88,4 @@ export {
|
|
|
86
88
|
BACKBLAZE_BROWSER_PROMPT,
|
|
87
89
|
BackblazeResource
|
|
88
90
|
};
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-NVGB3B7J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/backblaze/backblaze.ts","../src/resource/backblaze/config.ts","../src/resource/backblaze/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 backblazeToS3Config,\n redactBackblazeConfig,\n type BackblazeConfig,\n type BackblazeConfigRedacted,\n} from './config.ts'\nimport { BACKBLAZE_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface BackblazeResourceState {\n type: string\n config: BackblazeConfigRedacted\n}\n\nexport class BackblazeResource extends S3Resource {\n override readonly kind: string = ResourceName.BACKBLAZE\n override readonly prompt: string = BACKBLAZE_BROWSER_PROMPT\n readonly backblazeConfig: BackblazeConfig\n private readonly backblazeOps: readonly RegisteredOp[]\n private readonly backblazeCommands: readonly RegisteredCommand[]\n\n constructor(config: BackblazeConfig) {\n super(backblazeToS3Config(config))\n this.backblazeConfig = config\n this.backblazeOps = remapOpsResource(super.ops(), ResourceName.BACKBLAZE)\n this.backblazeCommands = remapCommandsResource(super.commands(), ResourceName.BACKBLAZE)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.backblazeOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.backblazeCommands\n }\n\n override getState(): Promise<BackblazeResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactBackblazeConfig(this.backblazeConfig),\n })\n }\n\n override loadState(_state: BackblazeResourceState): 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 BackblazeConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n region?: string\n endpoint?: string\n defaultContentType?: string\n keyPrefix?: string\n}\n\nexport interface BackblazeConfigRedacted extends Omit<BackblazeConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nconst BackblazeConfigSchema = 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 keyPrefix: z.string().optional(),\n})\n\nexport function resolvedBackblazeEndpoint(config: BackblazeConfig): 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://s3.${region}.backblazeb2.com`\n }\n return undefined\n}\n\nexport function backblazeToS3Config(config: BackblazeConfig): S3Config {\n const endpoint = resolvedBackblazeEndpoint(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 ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n }\n}\n\nexport function redactBackblazeConfig(config: BackblazeConfig): BackblazeConfigRedacted {\n return redactConfigWithSchema(BackblazeConfigSchema, config) as unknown as BackblazeConfigRedacted\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 BACKBLAZE_BROWSER_PROMPT = `{prefix}\n Remote Backblaze B2 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;AAgBxD,IAAM,wBAAwB,EAAE,OAAO;AAAA,EACrC,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;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,SAAS,0BAA0B,QAA6C;AACrF,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MAAI,OAAO,WAAW,UAAa,OAAO,WAAW,IAAI;AACvD,UAAM,SAAS,OAAO;AACtB,WAAO,cAAc,MAAM;AAAA,EAC7B;AACA,SAAO;AACT;AAEO,SAAS,oBAAoB,QAAmC;AACrE,QAAM,WAAW,0BAA0B,MAAM;AACjD,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,IACL,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,sBAAsB,QAAkD;AACtF,SAAO,uBAAuB,uBAAuB,MAAM;AAC7D;;;ACpDO,IAAM,2BAA2B;AAAA;AAAA;AAAA;AAAA;;;AFqBjC,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAC9B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAyB;AACnC,UAAM,oBAAoB,MAAM,CAAC;AACjC,SAAK,kBAAkB;AACvB,SAAK,eAAe,iBAAiB,MAAM,IAAI,GAAG,aAAa,SAAS;AACxE,SAAK,oBAAoB,sBAAsB,MAAM,SAAS,GAAG,aAAa,SAAS;AAAA,EACzF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAA4C;AACnD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,sBAAsB,KAAK,eAAe;AAAA,IACpD,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA+C;AAChE,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
redactBoxConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-GQVJTQXU.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/box/box.ts
|
|
6
|
+
import { mountKey, mountPrefixOf } from "@struktoai/mirage-core";
|
|
6
7
|
import {
|
|
7
8
|
BOX_COMMANDS,
|
|
8
9
|
BOX_PROMPT,
|
|
9
|
-
|
|
10
|
+
BOX_OPS,
|
|
10
11
|
BoxAccessor,
|
|
11
12
|
BoxTokenManager,
|
|
12
13
|
PathSpec,
|
|
@@ -14,12 +15,13 @@ import {
|
|
|
14
15
|
ResourceName,
|
|
15
16
|
boxRead,
|
|
16
17
|
boxReaddir,
|
|
17
|
-
|
|
18
|
+
makeResolveGlob,
|
|
18
19
|
boxStat
|
|
19
20
|
} from "@struktoai/mirage-core";
|
|
21
|
+
var boxResolveGlob = makeResolveGlob(boxReaddir);
|
|
20
22
|
var BoxResource = class {
|
|
21
23
|
kind = ResourceName.BOX;
|
|
22
|
-
|
|
24
|
+
cachesReads = true;
|
|
23
25
|
indexTtl = 86400;
|
|
24
26
|
prompt = BOX_PROMPT;
|
|
25
27
|
config;
|
|
@@ -28,6 +30,7 @@ var BoxResource = class {
|
|
|
28
30
|
constructor(config) {
|
|
29
31
|
this.config = config;
|
|
30
32
|
const tm = new BoxTokenManager({
|
|
33
|
+
...config.endpoint !== void 0 ? { endpoint: config.endpoint } : {},
|
|
31
34
|
...config.clientId !== void 0 ? { clientId: config.clientId } : {},
|
|
32
35
|
...config.clientSecret !== void 0 ? { clientSecret: config.clientSecret } : {},
|
|
33
36
|
...config.refreshToken !== void 0 ? { refreshToken: config.refreshToken } : {},
|
|
@@ -35,7 +38,11 @@ var BoxResource = class {
|
|
|
35
38
|
...config.refreshFn !== void 0 ? { refreshFn: config.refreshFn } : {},
|
|
36
39
|
...config.onRefreshTokenRotated !== void 0 ? { onRefreshTokenRotated: config.onRefreshTokenRotated } : {}
|
|
37
40
|
});
|
|
38
|
-
this.accessor = new BoxAccessor({
|
|
41
|
+
this.accessor = new BoxAccessor({
|
|
42
|
+
tokenManager: tm,
|
|
43
|
+
...config.rootFolderId !== void 0 ? { rootFolderId: config.rootFolderId } : {},
|
|
44
|
+
...config.contentSearch !== void 0 ? { contentSearch: config.contentSearch } : {}
|
|
45
|
+
});
|
|
39
46
|
this.index = new RAMIndexCacheStore({ ttl: 86400 });
|
|
40
47
|
}
|
|
41
48
|
open() {
|
|
@@ -48,7 +55,7 @@ var BoxResource = class {
|
|
|
48
55
|
return BOX_COMMANDS;
|
|
49
56
|
}
|
|
50
57
|
ops() {
|
|
51
|
-
return
|
|
58
|
+
return BOX_OPS;
|
|
52
59
|
}
|
|
53
60
|
readFile(p) {
|
|
54
61
|
return boxRead(this.accessor, p, this.index);
|
|
@@ -59,18 +66,14 @@ var BoxResource = class {
|
|
|
59
66
|
stat(p) {
|
|
60
67
|
return boxStat(this.accessor, p, this.index);
|
|
61
68
|
}
|
|
62
|
-
async fingerprint(p) {
|
|
63
|
-
const lookup = await this.index.get(p.original);
|
|
64
|
-
return lookup.entry?.remoteTime ?? null;
|
|
65
|
-
}
|
|
66
69
|
glob(paths, prefix = "") {
|
|
67
70
|
const effective = prefix !== "" ? paths.map(
|
|
68
|
-
(p) => p.
|
|
69
|
-
|
|
71
|
+
(p) => mountPrefixOf(p.virtual, p.resourcePath) !== "" ? p : new PathSpec({
|
|
72
|
+
virtual: p.virtual,
|
|
70
73
|
directory: p.directory,
|
|
71
74
|
...p.pattern !== null ? { pattern: p.pattern } : {},
|
|
72
75
|
resolved: p.resolved,
|
|
73
|
-
prefix
|
|
76
|
+
resourcePath: mountKey(p.virtual, prefix)
|
|
74
77
|
})
|
|
75
78
|
) : paths;
|
|
76
79
|
return boxResolveGlob(this.accessor, effective, this.index);
|
|
@@ -89,4 +92,4 @@ var BoxResource = class {
|
|
|
89
92
|
export {
|
|
90
93
|
BoxResource
|
|
91
94
|
};
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-NYTRDAWX.js.map
|