@struktoai/mirage-browser 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +63 -129
- 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/box/box.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 BOX_COMMANDS,\n BOX_PROMPT,\n BOX_VFS_OPS,\n BoxAccessor,\n BoxTokenManager,\n type FileStat,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n boxRead,\n boxReaddir,\n boxResolveGlob,\n boxStat,\n} from '@struktoai/mirage-core'\nimport { redactBoxConfig, type BoxConfig, type BoxConfigRedacted } from './config.ts'\n\nexport interface BoxResourceState {\n type: string\n config: BoxConfigRedacted\n}\n\nexport class BoxResource implements Resource {\n readonly kind: string = ResourceName.BOX\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = BOX_PROMPT\n readonly config: BoxConfig\n readonly accessor: BoxAccessor\n readonly index: IndexCacheStore\n\n constructor(config: BoxConfig) {\n this.config = config\n const tm = new BoxTokenManager({\n ...(config.clientId !== undefined ? { clientId: config.clientId } : {}),\n ...(config.clientSecret !== undefined ? { clientSecret: config.clientSecret } : {}),\n ...(config.refreshToken !== undefined ? { refreshToken: config.refreshToken } : {}),\n ...(config.accessToken !== undefined ? { accessToken: config.accessToken } : {}),\n ...(config.refreshFn !== undefined ? { refreshFn: config.refreshFn } : {}),\n ...(config.onRefreshTokenRotated !== undefined\n ? { onRefreshTokenRotated: config.onRefreshTokenRotated }\n : {}),\n })\n this.accessor = new BoxAccessor({ 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 BOX_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return BOX_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return boxRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return boxReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return boxStat(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 boxResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<BoxResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactBoxConfig(this.config),\n })\n }\n\n loadState(_state: BoxResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQA,IAAM,cAAN,MAAsC;AAAA,EAClC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAmB;AAC7B,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,gBAAgB;AAAA,MAC7B,GAAI,OAAO,aAAa,SAAY,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,MACrE,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACjF,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACjF,GAAI,OAAO,gBAAgB,SAAY,EAAE,aAAa,OAAO,YAAY,IAAI,CAAC;AAAA,MAC9E,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,MACxE,GAAI,OAAO,0BAA0B,SACjC,EAAE,uBAAuB,OAAO,sBAAsB,IACtD,CAAC;AAAA,IACP,CAAC;AACD,SAAK,WAAW,IAAI,YAAY,EAAE,cAAc,GAAG,CAAC;AACpD,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,QAAQ,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC7C;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,QAAQ,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC7C;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,eAAe,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC5D;AAAA,EAEA,WAAsC;AACpC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,gBAAgB,KAAK,MAAM;AAAA,IACrC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAAyC;AACjD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -39,8 +39,15 @@ var HttpMongoDriver = class {
|
|
|
39
39
|
listDatabases() {
|
|
40
40
|
return this.post({ op: "listDatabases" });
|
|
41
41
|
}
|
|
42
|
-
listCollections(database) {
|
|
43
|
-
return this.post({ op: "listCollections", database });
|
|
42
|
+
listCollections(database, kind = null) {
|
|
43
|
+
return this.post({ op: "listCollections", database, kind });
|
|
44
|
+
}
|
|
45
|
+
listCollectionsDetailed(database, filter = {}) {
|
|
46
|
+
return this.post({
|
|
47
|
+
op: "listCollectionsDetailed",
|
|
48
|
+
database,
|
|
49
|
+
nameFilter: filter
|
|
50
|
+
});
|
|
44
51
|
}
|
|
45
52
|
async findDocuments(database, collection, filter = {}, options = {}) {
|
|
46
53
|
return this.post({
|
|
@@ -51,6 +58,23 @@ var HttpMongoDriver = class {
|
|
|
51
58
|
options
|
|
52
59
|
});
|
|
53
60
|
}
|
|
61
|
+
async *iterDocuments(database, collection, options = {}) {
|
|
62
|
+
const docs = await this.post({
|
|
63
|
+
op: "iterDocuments",
|
|
64
|
+
database,
|
|
65
|
+
collection,
|
|
66
|
+
options
|
|
67
|
+
});
|
|
68
|
+
for (const d of docs) yield d;
|
|
69
|
+
}
|
|
70
|
+
iterInserts(_database, _collection) {
|
|
71
|
+
return {
|
|
72
|
+
next: () => Promise.reject(new Error("iterInserts (tail -f) is not supported by HttpMongoDriver")),
|
|
73
|
+
[Symbol.asyncIterator]() {
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
54
78
|
countDocuments(database, collection, filter = {}) {
|
|
55
79
|
return this.post({ op: "countDocuments", database, collection, filter });
|
|
56
80
|
}
|
|
@@ -61,6 +85,13 @@ var HttpMongoDriver = class {
|
|
|
61
85
|
collection
|
|
62
86
|
});
|
|
63
87
|
}
|
|
88
|
+
getIndexStats(database, collection) {
|
|
89
|
+
return this.post({
|
|
90
|
+
op: "getIndexStats",
|
|
91
|
+
database,
|
|
92
|
+
collection
|
|
93
|
+
});
|
|
94
|
+
}
|
|
64
95
|
close() {
|
|
65
96
|
return Promise.resolve();
|
|
66
97
|
}
|
|
@@ -123,4 +154,4 @@ export {
|
|
|
123
154
|
HttpMongoDriver,
|
|
124
155
|
MongoDBResource
|
|
125
156
|
};
|
|
126
|
-
//# sourceMappingURL=chunk-
|
|
157
|
+
//# sourceMappingURL=chunk-EH2BN4JC.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 {\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 resolveMongoGlob,\n ResourceName,\n} from '@struktoai/mirage-core'\nimport { HttpMongoDriver } from './http_driver.ts'\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 isRemote: boolean = true\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 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 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":"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","names":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
S3Resource
|
|
3
|
+
} from "./chunk-XFREXNA2.js";
|
|
4
|
+
|
|
5
|
+
// src/resource/backblaze/backblaze.ts
|
|
6
|
+
import {
|
|
7
|
+
remapCommandsResource,
|
|
8
|
+
remapOpsResource,
|
|
9
|
+
ResourceName
|
|
10
|
+
} from "@struktoai/mirage-core";
|
|
11
|
+
|
|
12
|
+
// src/resource/backblaze/config.ts
|
|
13
|
+
import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
|
|
14
|
+
var BackblazeConfigSchema = 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 resolvedBackblazeEndpoint(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://s3.${region}.backblazeb2.com`;
|
|
28
|
+
}
|
|
29
|
+
return void 0;
|
|
30
|
+
}
|
|
31
|
+
function backblazeToS3Config(config) {
|
|
32
|
+
const endpoint = resolvedBackblazeEndpoint(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 redactBackblazeConfig(config) {
|
|
42
|
+
return redactConfigWithSchema(BackblazeConfigSchema, config);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/resource/backblaze/prompt.ts
|
|
46
|
+
var BACKBLAZE_BROWSER_PROMPT = `{prefix}
|
|
47
|
+
Remote Backblaze B2 bucket (S3-compatible) accessed via presigned URLs (browser runtime).
|
|
48
|
+
Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.
|
|
49
|
+
Listing operations require the presigner to sign LIST/COPY operations in
|
|
50
|
+
addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
|
|
51
|
+
|
|
52
|
+
// src/resource/backblaze/backblaze.ts
|
|
53
|
+
var BackblazeResource = class extends S3Resource {
|
|
54
|
+
kind = ResourceName.BACKBLAZE;
|
|
55
|
+
prompt = BACKBLAZE_BROWSER_PROMPT;
|
|
56
|
+
backblazeConfig;
|
|
57
|
+
backblazeOps;
|
|
58
|
+
backblazeCommands;
|
|
59
|
+
constructor(config) {
|
|
60
|
+
super(backblazeToS3Config(config));
|
|
61
|
+
this.backblazeConfig = config;
|
|
62
|
+
this.backblazeOps = remapOpsResource(super.ops(), ResourceName.BACKBLAZE);
|
|
63
|
+
this.backblazeCommands = remapCommandsResource(super.commands(), ResourceName.BACKBLAZE);
|
|
64
|
+
}
|
|
65
|
+
ops() {
|
|
66
|
+
return this.backblazeOps;
|
|
67
|
+
}
|
|
68
|
+
commands() {
|
|
69
|
+
return this.backblazeCommands;
|
|
70
|
+
}
|
|
71
|
+
getState() {
|
|
72
|
+
return Promise.resolve({
|
|
73
|
+
type: this.kind,
|
|
74
|
+
config: redactBackblazeConfig(this.backblazeConfig)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
loadState(_state) {
|
|
78
|
+
return Promise.resolve();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export {
|
|
83
|
+
resolvedBackblazeEndpoint,
|
|
84
|
+
backblazeToS3Config,
|
|
85
|
+
redactBackblazeConfig,
|
|
86
|
+
BACKBLAZE_BROWSER_PROMPT,
|
|
87
|
+
BackblazeResource
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=chunk-EUKHGXCE.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}\n\nexport interface BackblazeConfigRedacted extends Omit<BackblazeConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const 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})\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 }\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;AAejD,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,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,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,EACP;AACF;AAEO,SAAS,sBAAsB,QAAkD;AACtF,SAAO,uBAAuB,uBAAuB,MAAM;AAC7D;;;ACjDO,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":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import {
|
|
2
|
+
S3Resource
|
|
3
|
+
} from "./chunk-XFREXNA2.js";
|
|
4
|
+
|
|
5
|
+
// src/resource/aliyun/aliyun.ts
|
|
6
|
+
import {
|
|
7
|
+
remapCommandsResource,
|
|
8
|
+
remapOpsResource,
|
|
9
|
+
ResourceName
|
|
10
|
+
} from "@struktoai/mirage-core";
|
|
11
|
+
|
|
12
|
+
// src/resource/aliyun/config.ts
|
|
13
|
+
import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
|
|
14
|
+
var AliyunConfigSchema = 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 resolvedAliyunEndpoint(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://s3.oss-${region}.aliyuncs.com`;
|
|
28
|
+
}
|
|
29
|
+
return void 0;
|
|
30
|
+
}
|
|
31
|
+
function aliyunToS3Config(config) {
|
|
32
|
+
const endpoint = resolvedAliyunEndpoint(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 redactAliyunConfig(config) {
|
|
42
|
+
return redactConfigWithSchema(AliyunConfigSchema, config);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/resource/aliyun/prompt.ts
|
|
46
|
+
var ALIYUN_BROWSER_PROMPT = `{prefix}
|
|
47
|
+
Remote Alibaba Cloud OSS bucket (S3-compatible) accessed via presigned URLs (browser runtime).
|
|
48
|
+
Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.
|
|
49
|
+
Listing operations require the presigner to sign LIST/COPY operations in
|
|
50
|
+
addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
|
|
51
|
+
|
|
52
|
+
// src/resource/aliyun/aliyun.ts
|
|
53
|
+
var AliyunResource = class extends S3Resource {
|
|
54
|
+
kind = ResourceName.ALIYUN;
|
|
55
|
+
prompt = ALIYUN_BROWSER_PROMPT;
|
|
56
|
+
aliyunConfig;
|
|
57
|
+
aliyunOps;
|
|
58
|
+
aliyunCommands;
|
|
59
|
+
constructor(config) {
|
|
60
|
+
super(aliyunToS3Config(config));
|
|
61
|
+
this.aliyunConfig = config;
|
|
62
|
+
this.aliyunOps = remapOpsResource(super.ops(), ResourceName.ALIYUN);
|
|
63
|
+
this.aliyunCommands = remapCommandsResource(super.commands(), ResourceName.ALIYUN);
|
|
64
|
+
}
|
|
65
|
+
ops() {
|
|
66
|
+
return this.aliyunOps;
|
|
67
|
+
}
|
|
68
|
+
commands() {
|
|
69
|
+
return this.aliyunCommands;
|
|
70
|
+
}
|
|
71
|
+
getState() {
|
|
72
|
+
return Promise.resolve({
|
|
73
|
+
type: this.kind,
|
|
74
|
+
config: redactAliyunConfig(this.aliyunConfig)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
loadState(_state) {
|
|
78
|
+
return Promise.resolve();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export {
|
|
83
|
+
resolvedAliyunEndpoint,
|
|
84
|
+
aliyunToS3Config,
|
|
85
|
+
redactAliyunConfig,
|
|
86
|
+
ALIYUN_BROWSER_PROMPT,
|
|
87
|
+
AliyunResource
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=chunk-GHKX2BA3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/aliyun/aliyun.ts","../src/resource/aliyun/config.ts","../src/resource/aliyun/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 aliyunToS3Config,\n redactAliyunConfig,\n type AliyunConfig,\n type AliyunConfigRedacted,\n} from './config.ts'\nimport { ALIYUN_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface AliyunResourceState {\n type: string\n config: AliyunConfigRedacted\n}\n\nexport class AliyunResource extends S3Resource {\n override readonly kind: string = ResourceName.ALIYUN\n override readonly prompt: string = ALIYUN_BROWSER_PROMPT\n readonly aliyunConfig: AliyunConfig\n private readonly aliyunOps: readonly RegisteredOp[]\n private readonly aliyunCommands: readonly RegisteredCommand[]\n\n constructor(config: AliyunConfig) {\n super(aliyunToS3Config(config))\n this.aliyunConfig = config\n this.aliyunOps = remapOpsResource(super.ops(), ResourceName.ALIYUN)\n this.aliyunCommands = remapCommandsResource(super.commands(), ResourceName.ALIYUN)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.aliyunOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.aliyunCommands\n }\n\n override getState(): Promise<AliyunResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactAliyunConfig(this.aliyunConfig),\n })\n }\n\n override loadState(_state: AliyunResourceState): 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 AliyunConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n region?: string\n endpoint?: string\n defaultContentType?: string\n}\n\nexport interface AliyunConfigRedacted extends Omit<AliyunConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport const AliyunConfigSchema = 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 resolvedAliyunEndpoint(config: AliyunConfig): 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.oss-${region}.aliyuncs.com`\n }\n return undefined\n}\n\nexport function aliyunToS3Config(config: AliyunConfig): S3Config {\n const endpoint = resolvedAliyunEndpoint(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 redactAliyunConfig(config: AliyunConfig): AliyunConfigRedacted {\n return redactConfigWithSchema(AliyunConfigSchema, config) as unknown as AliyunConfigRedacted\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 ALIYUN_BROWSER_PROMPT = `{prefix}\n Remote Alibaba Cloud OSS 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,qBAAqB,EAAE,OAAO;AAAA,EACzC,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,uBAAuB,QAA0C;AAC/E,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MAAI,OAAO,WAAW,UAAa,OAAO,WAAW,IAAI;AACvD,UAAM,SAAS,OAAO;AACtB,WAAO,kBAAkB,MAAM;AAAA,EACjC;AACA,SAAO;AACT;AAEO,SAAS,iBAAiB,QAAgC;AAC/D,QAAM,WAAW,uBAAuB,MAAM;AAC9C,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,mBAAmB,QAA4C;AAC7E,SAAO,uBAAuB,oBAAoB,MAAM;AAC1D;;;ACjDO,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;;;AFqB9B,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAC3B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAsB;AAChC,UAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAK,eAAe;AACpB,SAAK,YAAY,iBAAiB,MAAM,IAAI,GAAG,aAAa,MAAM;AAClE,SAAK,iBAAiB,sBAAsB,MAAM,SAAS,GAAG,aAAa,MAAM;AAAA,EACnF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAmB,KAAK,YAAY;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA4C;AAC7D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -16,12 +16,16 @@ import {
|
|
|
16
16
|
} from "@struktoai/mirage-core";
|
|
17
17
|
|
|
18
18
|
// src/resource/trello/config.ts
|
|
19
|
+
import { redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
|
|
20
|
+
var TrelloConfigSchema = z.object({
|
|
21
|
+
apiKey: secretStr(),
|
|
22
|
+
apiToken: secretStr(),
|
|
23
|
+
workspaceId: z.string().optional(),
|
|
24
|
+
boardIds: z.array(z.string()).optional(),
|
|
25
|
+
baseUrl: z.string().optional()
|
|
26
|
+
});
|
|
19
27
|
function redactTrelloConfig(config) {
|
|
20
|
-
|
|
21
|
-
if (config.workspaceId !== void 0) out.workspaceId = config.workspaceId;
|
|
22
|
-
if (config.boardIds !== void 0) out.boardIds = config.boardIds;
|
|
23
|
-
if (config.baseUrl !== void 0) out.baseUrl = config.baseUrl;
|
|
24
|
-
return out;
|
|
28
|
+
return redactConfigWithSchema(TrelloConfigSchema, config);
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
// src/resource/trello/trello.ts
|
|
@@ -90,8 +94,6 @@ var TrelloResource = class {
|
|
|
90
94
|
getState() {
|
|
91
95
|
return Promise.resolve({
|
|
92
96
|
type: this.kind,
|
|
93
|
-
needsOverride: true,
|
|
94
|
-
redactedFields: ["apiKey", "apiToken"],
|
|
95
97
|
config: redactTrelloConfig(this.config)
|
|
96
98
|
});
|
|
97
99
|
}
|
|
@@ -104,4 +106,4 @@ export {
|
|
|
104
106
|
redactTrelloConfig,
|
|
105
107
|
TrelloResource
|
|
106
108
|
};
|
|
107
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-HGSTRD7H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/trello/trello.ts","../src/resource/trello/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n HttpTrelloTransport,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolveTrelloGlob,\n TRELLO_COMMANDS,\n TRELLO_PROMPT,\n TRELLO_VFS_OPS,\n TRELLO_WRITE_PROMPT,\n TrelloAccessor,\n type TrelloReaddirFilter,\n trelloRead,\n trelloReaddir,\n trelloStat,\n} from '@struktoai/mirage-core'\nimport { redactTrelloConfig, type TrelloConfig, type TrelloConfigRedacted } from './config.ts'\n\nexport interface TrelloResourceState {\n type: string\n config: TrelloConfigRedacted\n}\n\nexport class TrelloResource implements Resource {\n readonly kind: string = ResourceName.TRELLO\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = TRELLO_PROMPT\n readonly writePrompt: string = TRELLO_WRITE_PROMPT\n readonly config: TrelloConfig\n readonly accessor: TrelloAccessor\n readonly index: IndexCacheStore\n\n constructor(config: TrelloConfig) {\n this.config = config\n const transportOpts: { apiKey: string; apiToken: string; baseUrl?: string } = {\n apiKey: config.apiKey,\n apiToken: config.apiToken,\n }\n if (config.baseUrl !== undefined) transportOpts.baseUrl = config.baseUrl\n this.accessor = new TrelloAccessor(new HttpTrelloTransport(transportOpts))\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return TRELLO_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return TRELLO_VFS_OPS\n }\n\n private filter(): TrelloReaddirFilter {\n const out: TrelloReaddirFilter = {}\n if (this.config.workspaceId !== undefined) out.workspaceId = this.config.workspaceId\n if (this.config.boardIds !== undefined) out.boardIds = this.config.boardIds\n return out\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return trelloRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return trelloReaddir(this.accessor, p, this.index, this.filter())\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return trelloStat(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 resolveTrelloGlob(this.accessor, effective, this.index, this.filter())\n }\n\n getState(): Promise<TrelloResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactTrelloConfig(this.config),\n })\n }\n\n loadState(_state: TrelloResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface TrelloConfig {\n apiKey: string\n apiToken: string\n workspaceId?: string\n boardIds?: readonly string[]\n baseUrl?: string\n}\n\nexport interface TrelloConfigRedacted {\n apiKey: '<REDACTED>'\n apiToken: '<REDACTED>'\n workspaceId?: string\n boardIds?: readonly string[]\n baseUrl?: string\n}\n\nexport const TrelloConfigSchema = z.object({\n apiKey: secretStr(),\n apiToken: secretStr(),\n workspaceId: z.string().optional(),\n boardIds: z.array(z.string()).optional(),\n baseUrl: z.string().optional(),\n})\n\nexport function redactTrelloConfig(config: TrelloConfig): TrelloConfigRedacted {\n return redactConfigWithSchema(TrelloConfigSchema, config) as unknown as TrelloConfigRedacted\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// src/resource/github_ci/config.ts
|
|
2
|
+
import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
|
|
3
|
+
var GitHubCIConfigSchema = z.object({
|
|
4
|
+
token: secretStr(),
|
|
5
|
+
owner: z.string(),
|
|
6
|
+
repo: z.string(),
|
|
7
|
+
days: z.number().optional(),
|
|
8
|
+
baseUrl: z.string().optional()
|
|
9
|
+
});
|
|
10
|
+
function redactGitHubCIConfig(config) {
|
|
11
|
+
return redactConfigWithSchema(GitHubCIConfigSchema, config);
|
|
12
|
+
}
|
|
13
|
+
function normalizeGitHubCIConfig(input) {
|
|
14
|
+
return normalizeFields(input, {
|
|
15
|
+
rename: { base_url: "baseUrl" }
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
GitHubCIConfigSchema,
|
|
21
|
+
redactGitHubCIConfig,
|
|
22
|
+
normalizeGitHubCIConfig
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=chunk-HYUESAQS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/github_ci/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 GitHubCIConfig {\n token: string\n owner: string\n repo: string\n days?: number\n baseUrl?: string\n}\n\nexport interface GitHubCIConfigRedacted {\n token: '<REDACTED>'\n owner: string\n repo: string\n days?: number\n baseUrl?: string\n}\n\nexport const GitHubCIConfigSchema = z.object({\n token: secretStr(),\n owner: z.string(),\n repo: z.string(),\n days: z.number().optional(),\n baseUrl: z.string().optional(),\n})\n\nexport function redactGitHubCIConfig(config: GitHubCIConfig): GitHubCIConfigRedacted {\n return redactConfigWithSchema(GitHubCIConfigSchema, config) as unknown as GitHubCIConfigRedacted\n}\n\nexport function normalizeGitHubCIConfig(input: Record<string, unknown>): GitHubCIConfig {\n return normalizeFields(input, {\n rename: { base_url: 'baseUrl' },\n }) as unknown as GitHubCIConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAkB/D,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,OAAO,UAAU;AAAA,EACjB,OAAO,EAAE,OAAO;AAAA,EAChB,MAAM,EAAE,OAAO;AAAA,EACf,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,SAAS,EAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAEM,SAAS,qBAAqB,QAAgD;AACnF,SAAO,uBAAuB,sBAAsB,MAAM;AAC5D;AAEO,SAAS,wBAAwB,OAAgD;AACtF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ,EAAE,UAAU,UAAU;AAAA,EAChC,CAAC;AACH;","names":[]}
|
|
@@ -15,18 +15,17 @@ import {
|
|
|
15
15
|
} from "@struktoai/mirage-core";
|
|
16
16
|
|
|
17
17
|
// src/resource/langfuse/config.ts
|
|
18
|
+
import { redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
|
|
19
|
+
var LangfuseConfigSchema = z.object({
|
|
20
|
+
publicKey: z.string(),
|
|
21
|
+
secretKey: secretStr(),
|
|
22
|
+
host: z.string().optional(),
|
|
23
|
+
defaultTraceLimit: z.number().optional(),
|
|
24
|
+
defaultSearchLimit: z.number().optional(),
|
|
25
|
+
defaultFromTimestamp: z.string().optional()
|
|
26
|
+
});
|
|
18
27
|
function redactLangfuseConfig(config) {
|
|
19
|
-
|
|
20
|
-
publicKey: config.publicKey,
|
|
21
|
-
secretKey: "<REDACTED>"
|
|
22
|
-
};
|
|
23
|
-
if (config.host !== void 0) out.host = config.host;
|
|
24
|
-
if (config.defaultTraceLimit !== void 0) out.defaultTraceLimit = config.defaultTraceLimit;
|
|
25
|
-
if (config.defaultSearchLimit !== void 0) out.defaultSearchLimit = config.defaultSearchLimit;
|
|
26
|
-
if (config.defaultFromTimestamp !== void 0) {
|
|
27
|
-
out.defaultFromTimestamp = config.defaultFromTimestamp;
|
|
28
|
-
}
|
|
29
|
-
return out;
|
|
28
|
+
return redactConfigWithSchema(LangfuseConfigSchema, config);
|
|
30
29
|
}
|
|
31
30
|
|
|
32
31
|
// src/resource/langfuse/langfuse.ts
|
|
@@ -97,8 +96,6 @@ var LangfuseResource = class {
|
|
|
97
96
|
getState() {
|
|
98
97
|
return Promise.resolve({
|
|
99
98
|
type: this.kind,
|
|
100
|
-
needsOverride: true,
|
|
101
|
-
redactedFields: ["secretKey"],
|
|
102
99
|
config: redactLangfuseConfig(this.config)
|
|
103
100
|
});
|
|
104
101
|
}
|
|
@@ -111,4 +108,4 @@ export {
|
|
|
111
108
|
redactLangfuseConfig,
|
|
112
109
|
LangfuseResource
|
|
113
110
|
};
|
|
114
|
-
//# sourceMappingURL=chunk-
|
|
111
|
+
//# sourceMappingURL=chunk-INLL7LRM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/langfuse/langfuse.ts","../src/resource/langfuse/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n HttpLangfuseTransport,\n type IndexCacheStore,\n LANGFUSE_COMMANDS,\n LANGFUSE_PROMPT,\n LANGFUSE_VFS_OPS,\n LangfuseAccessor,\n langfuseRead,\n langfuseReaddir,\n langfuseStat,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolveLangfuseGlob,\n} from '@struktoai/mirage-core'\nimport { redactLangfuseConfig, type LangfuseConfig, type LangfuseConfigRedacted } from './config.ts'\n\nexport interface LangfuseResourceState {\n type: string\n config: LangfuseConfigRedacted\n}\n\nexport class LangfuseResource implements Resource {\n readonly kind: string = ResourceName.LANGFUSE\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = LANGFUSE_PROMPT\n readonly config: LangfuseConfig\n readonly accessor: LangfuseAccessor\n readonly index: IndexCacheStore\n\n constructor(config: LangfuseConfig) {\n this.config = config\n const transportOpts: { publicKey: string; secretKey: string; host?: string } = {\n publicKey: config.publicKey,\n secretKey: config.secretKey,\n }\n if (config.host !== undefined) transportOpts.host = config.host\n const accessorConfig: {\n defaultTraceLimit?: number\n defaultSearchLimit?: number\n defaultFromTimestamp?: string\n } = {}\n if (config.defaultTraceLimit !== undefined) {\n accessorConfig.defaultTraceLimit = config.defaultTraceLimit\n }\n if (config.defaultSearchLimit !== undefined) {\n accessorConfig.defaultSearchLimit = config.defaultSearchLimit\n }\n if (config.defaultFromTimestamp !== undefined) {\n accessorConfig.defaultFromTimestamp = config.defaultFromTimestamp\n }\n this.accessor = new LangfuseAccessor(new HttpLangfuseTransport(transportOpts), accessorConfig)\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 LANGFUSE_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return LANGFUSE_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return langfuseRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return langfuseReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return langfuseStat(this.accessor, p, this.index)\n }\n\n fingerprint(_p: PathSpec): Promise<string | null> {\n return Promise.resolve(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 resolveLangfuseGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<LangfuseResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactLangfuseConfig(this.config),\n })\n }\n\n loadState(_state: LangfuseResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface LangfuseConfig {\n publicKey: string\n secretKey: string\n host?: string\n defaultTraceLimit?: number\n defaultSearchLimit?: number\n defaultFromTimestamp?: string\n}\n\nexport interface LangfuseConfigRedacted {\n publicKey: string\n secretKey: '<REDACTED>'\n host?: string\n defaultTraceLimit?: number\n defaultSearchLimit?: number\n defaultFromTimestamp?: string\n}\n\nexport const LangfuseConfigSchema = z.object({\n publicKey: z.string(),\n secretKey: secretStr(),\n host: z.string().optional(),\n defaultTraceLimit: z.number().optional(),\n defaultSearchLimit: z.number().optional(),\n defaultFromTimestamp: z.string().optional(),\n})\n\nexport function redactLangfuseConfig(config: LangfuseConfig): LangfuseConfigRedacted {\n return redactConfigWithSchema(LangfuseConfigSchema, config) as unknown as LangfuseConfigRedacted\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// src/resource/box/config.ts
|
|
2
|
+
import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
|
|
3
|
+
var BoxConfigSchema = z.object({
|
|
4
|
+
clientId: z.string().optional(),
|
|
5
|
+
clientSecret: secretStr().optional(),
|
|
6
|
+
refreshToken: secretStr().optional(),
|
|
7
|
+
accessToken: secretStr().optional()
|
|
8
|
+
});
|
|
9
|
+
function redactBoxConfig(config) {
|
|
10
|
+
return redactConfigWithSchema(BoxConfigSchema, config);
|
|
11
|
+
}
|
|
12
|
+
function normalizeBoxConfig(input) {
|
|
13
|
+
return normalizeFields(input, {
|
|
14
|
+
rename: {
|
|
15
|
+
client_id: "clientId",
|
|
16
|
+
client_secret: "clientSecret",
|
|
17
|
+
refresh_token: "refreshToken",
|
|
18
|
+
access_token: "accessToken",
|
|
19
|
+
developer_token: "accessToken"
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
BoxConfigSchema,
|
|
26
|
+
redactBoxConfig,
|
|
27
|
+
normalizeBoxConfig
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=chunk-J54OBIJA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/box/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 BoxConfig {\n clientId?: string\n clientSecret?: string\n refreshToken?: string\n accessToken?: string\n refreshFn?: (\n refreshToken: string,\n ) => Promise<{ accessToken: string; refreshToken: string; expiresIn: number }>\n onRefreshTokenRotated?: (newRefreshToken: string) => void | Promise<void>\n}\n\nexport interface BoxConfigRedacted {\n clientId?: string\n clientSecret?: '<REDACTED>'\n refreshToken?: '<REDACTED>'\n accessToken?: '<REDACTED>'\n}\n\nexport const BoxConfigSchema = z.object({\n clientId: z.string().optional(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr().optional(),\n accessToken: secretStr().optional(),\n})\n\nexport function redactBoxConfig(config: BoxConfig): BoxConfigRedacted {\n return redactConfigWithSchema(BoxConfigSchema, config) as unknown as BoxConfigRedacted\n}\n\nexport function normalizeBoxConfig(input: Record<string, unknown>): BoxConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n access_token: 'accessToken',\n developer_token: 'accessToken',\n },\n }) as unknown as BoxConfig\n}\n"],"mappings":";AAcA,SAAS,iBAAiB,wBAAwB,WAAW,SAAS;AAoB/D,IAAM,kBAAkB,EAAE,OAAO;AAAA,EACtC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,aAAa,UAAU,EAAE,SAAS;AACpC,CAAC;AAEM,SAAS,gBAAgB,QAAsC;AACpE,SAAO,uBAAuB,iBAAiB,MAAM;AACvD;AAEO,SAAS,mBAAmB,OAA2C;AAC5E,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,eAAe;AAAA,MACf,eAAe;AAAA,MACf,cAAc;AAAA,MACd,iBAAiB;AAAA,IACnB;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -16,10 +16,15 @@ import {
|
|
|
16
16
|
} from "@struktoai/mirage-core";
|
|
17
17
|
|
|
18
18
|
// src/resource/slack/config.ts
|
|
19
|
+
import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
|
|
20
|
+
var SlackConfigSchema = z.object({
|
|
21
|
+
proxyUrl: z.string(),
|
|
22
|
+
getHeaders: secretSchema(
|
|
23
|
+
z.custom((value) => typeof value === "function")
|
|
24
|
+
).optional()
|
|
25
|
+
});
|
|
19
26
|
function redactSlackConfig(config) {
|
|
20
|
-
|
|
21
|
-
if (config.getHeaders !== void 0) out.getHeaders = "<REDACTED>";
|
|
22
|
-
return out;
|
|
27
|
+
return redactConfigWithSchema(SlackConfigSchema, config);
|
|
23
28
|
}
|
|
24
29
|
|
|
25
30
|
// src/resource/slack/slack.ts
|
|
@@ -82,8 +87,6 @@ var SlackResource = class {
|
|
|
82
87
|
getState() {
|
|
83
88
|
return Promise.resolve({
|
|
84
89
|
type: this.kind,
|
|
85
|
-
needsOverride: true,
|
|
86
|
-
redactedFields: ["getHeaders"],
|
|
87
90
|
config: redactSlackConfig(this.config)
|
|
88
91
|
});
|
|
89
92
|
}
|
|
@@ -96,4 +99,4 @@ export {
|
|
|
96
99
|
redactSlackConfig,
|
|
97
100
|
SlackResource
|
|
98
101
|
};
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
102
|
+
//# sourceMappingURL=chunk-JCS5EG5A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/slack/slack.ts","../src/resource/slack/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 BrowserSlackTransport,\n type FileStat,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolveSlackGlob,\n SLACK_COMMANDS,\n SLACK_PROMPT,\n SLACK_VFS_OPS,\n SLACK_WRITE_PROMPT,\n SlackAccessor,\n slackRead,\n slackReaddir,\n slackStat,\n} from '@struktoai/mirage-core'\nimport { redactSlackConfig, type SlackConfig, type SlackConfigRedacted } from './config.ts'\n\nexport interface SlackResourceState {\n type: string\n config: SlackConfigRedacted\n}\n\nexport class SlackResource implements Resource {\n readonly kind: string = ResourceName.SLACK\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = SLACK_PROMPT\n readonly writePrompt: string = SLACK_WRITE_PROMPT\n readonly config: SlackConfig\n readonly accessor: SlackAccessor\n readonly index: IndexCacheStore\n\n constructor(config: SlackConfig) {\n this.config = config\n this.accessor = new SlackAccessor(\n new BrowserSlackTransport({\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 SLACK_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return SLACK_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return slackRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return slackReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return slackStat(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 resolveSlackGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<SlackResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactSlackConfig(this.config),\n })\n }\n\n loadState(_state: SlackResourceState): 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 SlackConfig {\n proxyUrl: string\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>\n}\n\nexport interface SlackConfigRedacted {\n proxyUrl: string\n getHeaders?: '<REDACTED>'\n}\n\nexport const SlackConfigSchema = z.object({\n proxyUrl: z.string(),\n getHeaders: secretSchema(\n z.custom<SlackConfig['getHeaders']>((value) => typeof value === 'function'),\n ).optional(),\n})\n\nexport function redactSlackConfig(config: SlackConfig): SlackConfigRedacted {\n return redactConfigWithSchema(SlackConfigSchema, config) as unknown as SlackConfigRedacted\n}\n"],"mappings":";AAcA;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACnBP,SAAS,wBAAwB,cAAc,SAAS;AAYjD,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACxC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY;AAAA,IACV,EAAE,OAAkC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAC5E,EAAE,SAAS;AACb,CAAC;AAEM,SAAS,kBAAkB,QAA0C;AAC1E,SAAO,uBAAuB,mBAAmB,MAAM;AACzD;;;ADMO,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,SAAK,WAAW,IAAI;AAAA,MAClB,IAAI,sBAAsB;AAAA,QACxB,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,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,kBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// src/resource/gslides/config.ts
|
|
2
|
+
import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
|
|
3
|
+
var GSlidesConfigSchema = z.object({
|
|
4
|
+
clientId: z.string(),
|
|
5
|
+
clientSecret: secretStr().optional(),
|
|
6
|
+
refreshToken: secretStr()
|
|
7
|
+
});
|
|
8
|
+
function redactGSlidesConfig(config) {
|
|
9
|
+
return redactConfigWithSchema(GSlidesConfigSchema, config);
|
|
10
|
+
}
|
|
11
|
+
function normalizeGSlidesConfig(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
|
+
GSlidesConfigSchema,
|
|
23
|
+
redactGSlidesConfig,
|
|
24
|
+
normalizeGSlidesConfig
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=chunk-JSAQMYPK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resource/gslides/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 GSlidesConfig {\n clientId: string\n clientSecret?: string\n refreshToken: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nexport interface GSlidesConfigRedacted {\n clientId: string\n clientSecret?: '<REDACTED>'\n refreshToken: '<REDACTED>'\n}\n\nexport const GSlidesConfigSchema = z.object({\n clientId: z.string(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr(),\n})\n\nexport function redactGSlidesConfig(config: GSlidesConfig): GSlidesConfigRedacted {\n return redactConfigWithSchema(GSlidesConfigSchema, config) as unknown as GSlidesConfigRedacted\n}\n\nexport function normalizeGSlidesConfig(input: Record<string, unknown>): GSlidesConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n },\n }) as unknown as GSlidesConfig\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
2
|
redactGitHubCIConfig
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HYUESAQS.js";
|
|
4
4
|
|
|
5
5
|
// src/resource/github_ci/github_ci.ts
|
|
6
6
|
import {
|
|
@@ -77,8 +77,6 @@ var GitHubCIResource = class {
|
|
|
77
77
|
getState() {
|
|
78
78
|
return Promise.resolve({
|
|
79
79
|
type: this.kind,
|
|
80
|
-
needsOverride: true,
|
|
81
|
-
redactedFields: ["token"],
|
|
82
80
|
config: redactGitHubCIConfig(this.config)
|
|
83
81
|
});
|
|
84
82
|
}
|
|
@@ -90,4 +88,4 @@ var GitHubCIResource = class {
|
|
|
90
88
|
export {
|
|
91
89
|
GitHubCIResource
|
|
92
90
|
};
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-JVTKE6DB.js.map
|