@struktoai/mirage-browser 0.0.1-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +230 -0
  2. package/dist/box-Y2SJWAAO.js +8 -0
  3. package/dist/box-Y2SJWAAO.js.map +1 -0
  4. package/dist/chunk-27UVUTJH.js +126 -0
  5. package/dist/chunk-27UVUTJH.js.map +1 -0
  6. package/dist/chunk-33SBWNB4.js +103 -0
  7. package/dist/chunk-33SBWNB4.js.map +1 -0
  8. package/dist/chunk-3PWPFOPS.js +88 -0
  9. package/dist/chunk-3PWPFOPS.js.map +1 -0
  10. package/dist/chunk-5Q5GJUAF.js +88 -0
  11. package/dist/chunk-5Q5GJUAF.js.map +1 -0
  12. package/dist/chunk-7GZXXXAS.js +24 -0
  13. package/dist/chunk-7GZXXXAS.js.map +1 -0
  14. package/dist/chunk-B4SYG2FD.js +24 -0
  15. package/dist/chunk-B4SYG2FD.js.map +1 -0
  16. package/dist/chunk-BIZONEJC.js +24 -0
  17. package/dist/chunk-BIZONEJC.js.map +1 -0
  18. package/dist/chunk-CQJTW45B.js +92 -0
  19. package/dist/chunk-CQJTW45B.js.map +1 -0
  20. package/dist/chunk-CZOTICOC.js +93 -0
  21. package/dist/chunk-CZOTICOC.js.map +1 -0
  22. package/dist/chunk-DDM2Z7YA.js +94 -0
  23. package/dist/chunk-DDM2Z7YA.js.map +1 -0
  24. package/dist/chunk-DPC7QRYO.js +99 -0
  25. package/dist/chunk-DPC7QRYO.js.map +1 -0
  26. package/dist/chunk-FL7YLP7D.js +107 -0
  27. package/dist/chunk-FL7YLP7D.js.map +1 -0
  28. package/dist/chunk-GFWWDQUZ.js +24 -0
  29. package/dist/chunk-GFWWDQUZ.js.map +1 -0
  30. package/dist/chunk-LG6GVNOL.js +94 -0
  31. package/dist/chunk-LG6GVNOL.js.map +1 -0
  32. package/dist/chunk-LSSB3AEW.js +94 -0
  33. package/dist/chunk-LSSB3AEW.js.map +1 -0
  34. package/dist/chunk-LUDXUYIA.js +89 -0
  35. package/dist/chunk-LUDXUYIA.js.map +1 -0
  36. package/dist/chunk-LZRPA2P7.js +99 -0
  37. package/dist/chunk-LZRPA2P7.js.map +1 -0
  38. package/dist/chunk-ML57VOCK.js +7590 -0
  39. package/dist/chunk-ML57VOCK.js.map +1 -0
  40. package/dist/chunk-MSNVGH6T.js +92 -0
  41. package/dist/chunk-MSNVGH6T.js.map +1 -0
  42. package/dist/chunk-NBWTZXH2.js +27 -0
  43. package/dist/chunk-NBWTZXH2.js.map +1 -0
  44. package/dist/chunk-ONQ5JGPR.js +96 -0
  45. package/dist/chunk-ONQ5JGPR.js.map +1 -0
  46. package/dist/chunk-OPROOV6J.js +24 -0
  47. package/dist/chunk-OPROOV6J.js.map +1 -0
  48. package/dist/chunk-QARIHW3I.js +23 -0
  49. package/dist/chunk-QARIHW3I.js.map +1 -0
  50. package/dist/chunk-QYFCHCGX.js +144 -0
  51. package/dist/chunk-QYFCHCGX.js.map +1 -0
  52. package/dist/chunk-SQQI4A6Y.js +94 -0
  53. package/dist/chunk-SQQI4A6Y.js.map +1 -0
  54. package/dist/chunk-UFXEZ56G.js +79 -0
  55. package/dist/chunk-UFXEZ56G.js.map +1 -0
  56. package/dist/chunk-UW3D2AF6.js +94 -0
  57. package/dist/chunk-UW3D2AF6.js.map +1 -0
  58. package/dist/chunk-UZWJ462U.js +93 -0
  59. package/dist/chunk-UZWJ462U.js.map +1 -0
  60. package/dist/chunk-VLFE4FGD.js +178 -0
  61. package/dist/chunk-VLFE4FGD.js.map +1 -0
  62. package/dist/chunk-XIURBEVZ.js +24 -0
  63. package/dist/chunk-XIURBEVZ.js.map +1 -0
  64. package/dist/chunk-ZJ6ROCTP.js +114 -0
  65. package/dist/chunk-ZJ6ROCTP.js.map +1 -0
  66. package/dist/config-4FABMWVK.js +9 -0
  67. package/dist/config-4FABMWVK.js.map +1 -0
  68. package/dist/config-DGIUMGBB.js +9 -0
  69. package/dist/config-DGIUMGBB.js.map +1 -0
  70. package/dist/config-G3TTNXLY.js +9 -0
  71. package/dist/config-G3TTNXLY.js.map +1 -0
  72. package/dist/config-GPCEEKCB.js +9 -0
  73. package/dist/config-GPCEEKCB.js.map +1 -0
  74. package/dist/config-KQ5VR2KZ.js +9 -0
  75. package/dist/config-KQ5VR2KZ.js.map +1 -0
  76. package/dist/config-LPMMVXLS.js +9 -0
  77. package/dist/config-LPMMVXLS.js.map +1 -0
  78. package/dist/config-U4UI4OKA.js +9 -0
  79. package/dist/config-U4UI4OKA.js.map +1 -0
  80. package/dist/config-VZGK63Z5.js +9 -0
  81. package/dist/config-VZGK63Z5.js.map +1 -0
  82. package/dist/discord-RG6URXXS.js +7 -0
  83. package/dist/discord-RG6URXXS.js.map +1 -0
  84. package/dist/dropbox-P7SOL7GN.js +8 -0
  85. package/dist/dropbox-P7SOL7GN.js.map +1 -0
  86. package/dist/gcs-2QHB4CBT.js +8 -0
  87. package/dist/gcs-2QHB4CBT.js.map +1 -0
  88. package/dist/gdocs-JNZTOZ33.js +8 -0
  89. package/dist/gdocs-JNZTOZ33.js.map +1 -0
  90. package/dist/gdrive-6MEIVN2F.js +8 -0
  91. package/dist/gdrive-6MEIVN2F.js.map +1 -0
  92. package/dist/github-M7WODJR2.js +7 -0
  93. package/dist/github-M7WODJR2.js.map +1 -0
  94. package/dist/github_ci-4XELEFSZ.js +8 -0
  95. package/dist/github_ci-4XELEFSZ.js.map +1 -0
  96. package/dist/gmail-AO6A3URH.js +8 -0
  97. package/dist/gmail-AO6A3URH.js.map +1 -0
  98. package/dist/gsheets-RFOKXMOJ.js +8 -0
  99. package/dist/gsheets-RFOKXMOJ.js.map +1 -0
  100. package/dist/gslides-GTVZPLLB.js +8 -0
  101. package/dist/gslides-GTVZPLLB.js.map +1 -0
  102. package/dist/index.d.ts +1127 -0
  103. package/dist/index.js +743 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/langfuse-CDOLELMB.js +7 -0
  106. package/dist/langfuse-CDOLELMB.js.map +1 -0
  107. package/dist/linear-SXOQGG6B.js +7 -0
  108. package/dist/linear-SXOQGG6B.js.map +1 -0
  109. package/dist/mongodb-HA7FAKDJ.js +7 -0
  110. package/dist/mongodb-HA7FAKDJ.js.map +1 -0
  111. package/dist/notion-ANZNMM3L.js +7 -0
  112. package/dist/notion-ANZNMM3L.js.map +1 -0
  113. package/dist/oci-ML5ZRVZ2.js +8 -0
  114. package/dist/oci-ML5ZRVZ2.js.map +1 -0
  115. package/dist/opfs-57XFMWWE.js +7 -0
  116. package/dist/opfs-57XFMWWE.js.map +1 -0
  117. package/dist/postgres-CK4HWZSL.js +7 -0
  118. package/dist/postgres-CK4HWZSL.js.map +1 -0
  119. package/dist/r2-56O4Q2J4.js +8 -0
  120. package/dist/r2-56O4Q2J4.js.map +1 -0
  121. package/dist/s3-A4XFE6QV.js +9 -0
  122. package/dist/s3-A4XFE6QV.js.map +1 -0
  123. package/dist/slack-QA7H7WLM.js +7 -0
  124. package/dist/slack-QA7H7WLM.js.map +1 -0
  125. package/dist/supabase-NNK2RWG3.js +8 -0
  126. package/dist/supabase-NNK2RWG3.js.map +1 -0
  127. package/dist/trello-H6PZT2IT.js +7 -0
  128. package/dist/trello-H6PZT2IT.js.map +1 -0
  129. package/package.json +74 -0
@@ -0,0 +1,107 @@
1
+ // src/resource/trello/trello.ts
2
+ import {
3
+ HttpTrelloTransport,
4
+ PathSpec,
5
+ RAMIndexCacheStore,
6
+ ResourceName,
7
+ resolveTrelloGlob,
8
+ TRELLO_COMMANDS,
9
+ TRELLO_PROMPT,
10
+ TRELLO_VFS_OPS,
11
+ TRELLO_WRITE_PROMPT,
12
+ TrelloAccessor,
13
+ trelloRead,
14
+ trelloReaddir,
15
+ trelloStat
16
+ } from "@struktoai/mirage-core";
17
+
18
+ // src/resource/trello/config.ts
19
+ function redactTrelloConfig(config) {
20
+ const out = { apiKey: "<REDACTED>", apiToken: "<REDACTED>" };
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;
25
+ }
26
+
27
+ // src/resource/trello/trello.ts
28
+ var TrelloResource = class {
29
+ kind = ResourceName.TRELLO;
30
+ isRemote = true;
31
+ indexTtl = 600;
32
+ prompt = TRELLO_PROMPT;
33
+ writePrompt = TRELLO_WRITE_PROMPT;
34
+ config;
35
+ accessor;
36
+ index;
37
+ constructor(config) {
38
+ this.config = config;
39
+ const transportOpts = {
40
+ apiKey: config.apiKey,
41
+ apiToken: config.apiToken
42
+ };
43
+ if (config.baseUrl !== void 0) transportOpts.baseUrl = config.baseUrl;
44
+ this.accessor = new TrelloAccessor(new HttpTrelloTransport(transportOpts));
45
+ this.index = new RAMIndexCacheStore({ ttl: this.indexTtl });
46
+ }
47
+ open() {
48
+ return Promise.resolve();
49
+ }
50
+ close() {
51
+ return Promise.resolve();
52
+ }
53
+ commands() {
54
+ return TRELLO_COMMANDS;
55
+ }
56
+ ops() {
57
+ return TRELLO_VFS_OPS;
58
+ }
59
+ filter() {
60
+ const out = {};
61
+ if (this.config.workspaceId !== void 0) out.workspaceId = this.config.workspaceId;
62
+ if (this.config.boardIds !== void 0) out.boardIds = this.config.boardIds;
63
+ return out;
64
+ }
65
+ readFile(p) {
66
+ return trelloRead(this.accessor, p, this.index);
67
+ }
68
+ readdir(p) {
69
+ return trelloReaddir(this.accessor, p, this.index, this.filter());
70
+ }
71
+ stat(p) {
72
+ return trelloStat(this.accessor, p, this.index);
73
+ }
74
+ async fingerprint(p) {
75
+ const lookup = await this.index.get(p.original);
76
+ return lookup.entry?.remoteTime ?? null;
77
+ }
78
+ glob(paths, prefix = "") {
79
+ const effective = prefix !== "" ? paths.map(
80
+ (p) => p.prefix !== "" ? p : new PathSpec({
81
+ original: p.original,
82
+ directory: p.directory,
83
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
84
+ resolved: p.resolved,
85
+ prefix
86
+ })
87
+ ) : paths;
88
+ return resolveTrelloGlob(this.accessor, effective, this.index, this.filter());
89
+ }
90
+ getState() {
91
+ return Promise.resolve({
92
+ type: this.kind,
93
+ needsOverride: true,
94
+ redactedFields: ["apiKey", "apiToken"],
95
+ config: redactTrelloConfig(this.config)
96
+ });
97
+ }
98
+ loadState(_state) {
99
+ return Promise.resolve();
100
+ }
101
+ };
102
+
103
+ export {
104
+ redactTrelloConfig,
105
+ TrelloResource
106
+ };
107
+ //# sourceMappingURL=chunk-FL7YLP7D.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 needsOverride: boolean\n redactedFields: readonly 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 needsOverride: true,\n redactedFields: ['apiKey', 'apiToken'],\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\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 function redactTrelloConfig(config: TrelloConfig): TrelloConfigRedacted {\n const out: TrelloConfigRedacted = { apiKey: '<REDACTED>', apiToken: '<REDACTED>' }\n if (config.workspaceId !== undefined) out.workspaceId = config.workspaceId\n if (config.boardIds !== undefined) out.boardIds = config.boardIds\n if (config.baseUrl !== undefined) out.baseUrl = config.baseUrl\n return out\n}\n"],"mappings":";AAcA;AAAA,EAEE;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACJA,SAAS,mBAAmB,QAA4C;AAC7E,QAAM,MAA4B,EAAE,QAAQ,cAAc,UAAU,aAAa;AACjF,MAAI,OAAO,gBAAgB,OAAW,KAAI,cAAc,OAAO;AAC/D,MAAI,OAAO,aAAa,OAAW,KAAI,WAAW,OAAO;AACzD,MAAI,OAAO,YAAY,OAAW,KAAI,UAAU,OAAO;AACvD,SAAO;AACT;;;ADQO,IAAM,iBAAN,MAAyC;AAAA,EACrC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAsB;AAChC,SAAK,SAAS;AACd,UAAM,gBAAwE;AAAA,MAC5E,QAAQ,OAAO;AAAA,MACf,UAAU,OAAO;AAAA,IACnB;AACA,QAAI,OAAO,YAAY,OAAW,eAAc,UAAU,OAAO;AACjE,SAAK,WAAW,IAAI,eAAe,IAAI,oBAAoB,aAAa,CAAC;AACzE,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,SAAS,CAAC;AAAA,EAC5D;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEQ,SAA8B;AACpC,UAAM,MAA2B,CAAC;AAClC,QAAI,KAAK,OAAO,gBAAgB,OAAW,KAAI,cAAc,KAAK,OAAO;AACzE,QAAI,KAAK,OAAO,aAAa,OAAW,KAAI,WAAW,KAAK,OAAO;AACnE,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,cAAc,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,EAClE;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,kBAAkB,KAAK,UAAU,WAAW,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,EAC9E;AAAA,EAEA,WAAyC;AACvC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,UAAU,UAAU;AAAA,MACrC,QAAQ,mBAAmB,KAAK,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA4C;AACpD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,24 @@
1
+ // src/resource/gdocs/config.ts
2
+ import { normalizeFields } from "@struktoai/mirage-core";
3
+ function redactGDocsConfig(config) {
4
+ return {
5
+ clientId: config.clientId,
6
+ ...config.clientSecret !== void 0 ? { clientSecret: "<REDACTED>" } : {},
7
+ refreshToken: "<REDACTED>"
8
+ };
9
+ }
10
+ function normalizeGDocsConfig(input) {
11
+ return normalizeFields(input, {
12
+ rename: {
13
+ client_id: "clientId",
14
+ client_secret: "clientSecret",
15
+ refresh_token: "refreshToken"
16
+ }
17
+ });
18
+ }
19
+
20
+ export {
21
+ redactGDocsConfig,
22
+ normalizeGDocsConfig
23
+ };
24
+ //# sourceMappingURL=chunk-GFWWDQUZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gdocs/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 } from '@struktoai/mirage-core'\n\nexport interface GDocsConfig {\n clientId: string\n clientSecret?: string\n refreshToken: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nexport interface GDocsConfigRedacted {\n clientId: string\n clientSecret?: '<REDACTED>'\n refreshToken: '<REDACTED>'\n}\n\nexport function redactGDocsConfig(config: GDocsConfig): GDocsConfigRedacted {\n return {\n clientId: config.clientId,\n ...(config.clientSecret !== undefined ? { clientSecret: '<REDACTED>' as const } : {}),\n refreshToken: '<REDACTED>',\n }\n}\n\nexport function normalizeGDocsConfig(input: Record<string, unknown>): GDocsConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n },\n }) as unknown as GDocsConfig\n}\n"],"mappings":";AAcA,SAAS,uBAAuB;AAezB,SAAS,kBAAkB,QAA0C;AAC1E,SAAO;AAAA,IACL,UAAU,OAAO;AAAA,IACjB,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,aAAsB,IAAI,CAAC;AAAA,IACnF,cAAc;AAAA,EAChB;AACF;AAEO,SAAS,qBAAqB,OAA6C;AAChF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,94 @@
1
+ import {
2
+ redactGSlidesConfig
3
+ } from "./chunk-B4SYG2FD.js";
4
+
5
+ // src/resource/gslides/gslides.ts
6
+ import {
7
+ GSLIDES_COMMANDS,
8
+ GSLIDES_PROMPT,
9
+ GSLIDES_VFS_OPS,
10
+ GSLIDES_WRITE_PROMPT,
11
+ GSlidesAccessor,
12
+ PathSpec,
13
+ RAMIndexCacheStore,
14
+ ResourceName,
15
+ TokenManager,
16
+ gslidesRead,
17
+ gslidesReaddir,
18
+ gslidesResolveGlob,
19
+ gslidesStat
20
+ } from "@struktoai/mirage-core";
21
+ var GSlidesResource = class {
22
+ kind = ResourceName.GSLIDES;
23
+ isRemote = true;
24
+ indexTtl = 86400;
25
+ prompt = GSLIDES_PROMPT;
26
+ writePrompt = GSLIDES_WRITE_PROMPT;
27
+ config;
28
+ accessor;
29
+ index;
30
+ constructor(config) {
31
+ this.config = config;
32
+ const tm = new TokenManager({
33
+ clientId: config.clientId,
34
+ ...config.clientSecret !== void 0 ? { clientSecret: config.clientSecret } : {},
35
+ refreshToken: config.refreshToken,
36
+ ...config.refreshFn !== void 0 ? { refreshFn: config.refreshFn } : {}
37
+ });
38
+ this.accessor = new GSlidesAccessor({ tokenManager: tm });
39
+ this.index = new RAMIndexCacheStore({ ttl: 86400 });
40
+ }
41
+ open() {
42
+ return Promise.resolve();
43
+ }
44
+ close() {
45
+ return Promise.resolve();
46
+ }
47
+ commands() {
48
+ return GSLIDES_COMMANDS;
49
+ }
50
+ ops() {
51
+ return GSLIDES_VFS_OPS;
52
+ }
53
+ readFile(p) {
54
+ return gslidesRead(this.accessor, p, this.index);
55
+ }
56
+ readdir(p) {
57
+ return gslidesReaddir(this.accessor, p, this.index);
58
+ }
59
+ stat(p) {
60
+ return gslidesStat(this.accessor, p, this.index);
61
+ }
62
+ async fingerprint(p) {
63
+ const lookup = await this.index.get(p.original);
64
+ return lookup.entry?.remoteTime ?? null;
65
+ }
66
+ glob(paths, prefix = "") {
67
+ const effective = prefix !== "" ? paths.map(
68
+ (p) => p.prefix !== "" ? p : new PathSpec({
69
+ original: p.original,
70
+ directory: p.directory,
71
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
72
+ resolved: p.resolved,
73
+ prefix
74
+ })
75
+ ) : paths;
76
+ return gslidesResolveGlob(this.accessor, effective, this.index);
77
+ }
78
+ getState() {
79
+ return Promise.resolve({
80
+ type: this.kind,
81
+ needsOverride: true,
82
+ redactedFields: ["clientSecret", "refreshToken"],
83
+ config: redactGSlidesConfig(this.config)
84
+ });
85
+ }
86
+ loadState(_state) {
87
+ return Promise.resolve();
88
+ }
89
+ };
90
+
91
+ export {
92
+ GSlidesResource
93
+ };
94
+ //# sourceMappingURL=chunk-LG6GVNOL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gslides/gslides.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n GSLIDES_COMMANDS,\n GSLIDES_PROMPT,\n GSLIDES_VFS_OPS,\n GSLIDES_WRITE_PROMPT,\n GSlidesAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gslidesRead,\n gslidesReaddir,\n gslidesResolveGlob,\n gslidesStat,\n} from '@struktoai/mirage-core'\nimport { redactGSlidesConfig, type GSlidesConfig, type GSlidesConfigRedacted } from './config.ts'\n\nexport interface GSlidesResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: GSlidesConfigRedacted\n}\n\nexport class GSlidesResource implements Resource {\n readonly kind: string = ResourceName.GSLIDES\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GSLIDES_PROMPT\n readonly writePrompt: string = GSLIDES_WRITE_PROMPT\n readonly config: GSlidesConfig\n readonly accessor: GSlidesAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GSlidesConfig) {\n this.config = config\n const tm = new TokenManager({\n clientId: config.clientId,\n ...(config.clientSecret !== undefined ? { clientSecret: config.clientSecret } : {}),\n refreshToken: config.refreshToken,\n ...(config.refreshFn !== undefined ? { refreshFn: config.refreshFn } : {}),\n })\n this.accessor = new GSlidesAccessor({ tokenManager: tm })\n this.index = new RAMIndexCacheStore({ ttl: 86_400 })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GSLIDES_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GSLIDES_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gslidesRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gslidesReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gslidesStat(this.accessor, p, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return gslidesResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GSlidesResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['clientSecret', 'refreshToken'],\n config: redactGSlidesConfig(this.config),\n })\n }\n\n loadState(_state: GSlidesResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUA,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACjF,cAAc,OAAO;AAAA,MACrB,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IAC1E,CAAC;AACD,SAAK,WAAW,IAAI,gBAAgB,EAAE,cAAc,GAAG,CAAC;AACxD,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,MAAO,CAAC;AAAA,EACrD;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,eAAe,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACpD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,mBAAmB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAChE;AAAA,EAEA,WAA0C;AACxC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,gBAAgB,cAAc;AAAA,MAC/C,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,94 @@
1
+ import {
2
+ redactGmailConfig
3
+ } from "./chunk-OPROOV6J.js";
4
+
5
+ // src/resource/gmail/gmail.ts
6
+ import {
7
+ GMAIL_COMMANDS,
8
+ GMAIL_PROMPT,
9
+ GMAIL_WRITE_PROMPT,
10
+ GMAIL_VFS_OPS,
11
+ GmailAccessor,
12
+ PathSpec,
13
+ RAMIndexCacheStore,
14
+ ResourceName,
15
+ TokenManager,
16
+ gmailRead,
17
+ gmailReaddir,
18
+ gmailResolveGlob,
19
+ gmailStat
20
+ } from "@struktoai/mirage-core";
21
+ var GmailResource = class {
22
+ kind = ResourceName.GMAIL;
23
+ isRemote = true;
24
+ indexTtl = 86400;
25
+ prompt = GMAIL_PROMPT;
26
+ writePrompt = GMAIL_WRITE_PROMPT;
27
+ config;
28
+ accessor;
29
+ index;
30
+ constructor(config) {
31
+ this.config = config;
32
+ const tm = new TokenManager({
33
+ clientId: config.clientId,
34
+ ...config.clientSecret !== void 0 ? { clientSecret: config.clientSecret } : {},
35
+ refreshToken: config.refreshToken,
36
+ ...config.refreshFn !== void 0 ? { refreshFn: config.refreshFn } : {}
37
+ });
38
+ this.accessor = new GmailAccessor({ tokenManager: tm });
39
+ this.index = new RAMIndexCacheStore({ ttl: 86400 });
40
+ }
41
+ open() {
42
+ return Promise.resolve();
43
+ }
44
+ close() {
45
+ return Promise.resolve();
46
+ }
47
+ commands() {
48
+ return GMAIL_COMMANDS;
49
+ }
50
+ ops() {
51
+ return GMAIL_VFS_OPS;
52
+ }
53
+ readFile(p) {
54
+ return gmailRead(this.accessor, p, this.index);
55
+ }
56
+ readdir(p) {
57
+ return gmailReaddir(this.accessor, p, this.index);
58
+ }
59
+ stat(p) {
60
+ return gmailStat(this.accessor, p, this.index);
61
+ }
62
+ async fingerprint(p) {
63
+ const lookup = await this.index.get(p.original);
64
+ return lookup.entry?.remoteTime ?? null;
65
+ }
66
+ glob(paths, prefix = "") {
67
+ const effective = prefix !== "" ? paths.map(
68
+ (p) => p.prefix !== "" ? p : new PathSpec({
69
+ original: p.original,
70
+ directory: p.directory,
71
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
72
+ resolved: p.resolved,
73
+ prefix
74
+ })
75
+ ) : paths;
76
+ return gmailResolveGlob(this.accessor, effective, this.index);
77
+ }
78
+ getState() {
79
+ return Promise.resolve({
80
+ type: this.kind,
81
+ needsOverride: true,
82
+ redactedFields: ["clientSecret", "refreshToken"],
83
+ config: redactGmailConfig(this.config)
84
+ });
85
+ }
86
+ loadState(_state) {
87
+ return Promise.resolve();
88
+ }
89
+ };
90
+
91
+ export {
92
+ GmailResource
93
+ };
94
+ //# sourceMappingURL=chunk-LSSB3AEW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gmail/gmail.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n GMAIL_COMMANDS,\n GMAIL_PROMPT,\n GMAIL_WRITE_PROMPT,\n GMAIL_VFS_OPS,\n GmailAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gmailRead,\n gmailReaddir,\n gmailResolveGlob,\n gmailStat,\n} from '@struktoai/mirage-core'\nimport { redactGmailConfig, type GmailConfig, type GmailConfigRedacted } from './config.ts'\n\nexport interface GmailResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: GmailConfigRedacted\n}\n\nexport class GmailResource implements Resource {\n readonly kind: string = ResourceName.GMAIL\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GMAIL_PROMPT\n readonly writePrompt: string = GMAIL_WRITE_PROMPT\n readonly config: GmailConfig\n readonly accessor: GmailAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GmailConfig) {\n this.config = config\n const tm = new TokenManager({\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 GmailAccessor({ tokenManager: tm })\n this.index = new RAMIndexCacheStore({ ttl: 86_400 })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GMAIL_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GMAIL_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gmailRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gmailReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gmailStat(this.accessor, p, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return gmailResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GmailResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['clientSecret', 'refreshToken'],\n config: redactGmailConfig(this.config),\n })\n }\n\n loadState(_state: GmailResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUA,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAqB;AAC/B,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;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,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,eAAe;AAAA,MACf,gBAAgB,CAAC,gBAAgB,cAAc;AAAA,MAC/C,QAAQ,kBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,89 @@
1
+ import {
2
+ S3Resource
3
+ } from "./chunk-VLFE4FGD.js";
4
+
5
+ // src/resource/supabase/supabase.ts
6
+ import { ResourceName } from "@struktoai/mirage-core";
7
+
8
+ // src/resource/supabase/config.ts
9
+ function resolvedSupabaseEndpoint(config) {
10
+ if (config.endpoint !== void 0 && config.endpoint !== "") return config.endpoint;
11
+ if (config.projectRef !== void 0 && config.projectRef !== "") {
12
+ return `https://${config.projectRef}.storage.supabase.co/storage/v1/s3`;
13
+ }
14
+ return void 0;
15
+ }
16
+ function supabaseToS3Config(config) {
17
+ const endpoint = resolvedSupabaseEndpoint(config);
18
+ return {
19
+ bucket: config.bucket,
20
+ presignedUrlProvider: config.presignedUrlProvider,
21
+ ...config.region !== void 0 ? { region: config.region } : {},
22
+ ...endpoint !== void 0 ? { endpoint } : {},
23
+ forcePathStyle: true,
24
+ ...config.defaultContentType !== void 0 ? { defaultContentType: config.defaultContentType } : {}
25
+ };
26
+ }
27
+ function redactSupabaseConfig(config) {
28
+ return { ...config, presignedUrlProvider: "<REDACTED>" };
29
+ }
30
+
31
+ // src/resource/supabase/prompt.ts
32
+ var SUPABASE_BROWSER_PROMPT = `{prefix}
33
+ Remote Supabase Storage bucket accessed via presigned URLs (browser runtime).
34
+ Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.
35
+ Listing operations require the presigner to sign LIST/COPY operations in
36
+ addition to GET/PUT/HEAD/DELETE \u2014 see S3BrowserPresignedUrlProvider docs.`;
37
+
38
+ // src/resource/supabase/supabase.ts
39
+ function remapOpsResource(ops, to) {
40
+ return ops.map((op) => op.resource === ResourceName.S3 ? { ...op, resource: to } : op);
41
+ }
42
+ function remapCommandsResource(commands, to) {
43
+ return commands.map((cmd) => {
44
+ if (cmd.resource !== ResourceName.S3) return cmd;
45
+ const proto = Object.getPrototypeOf(cmd);
46
+ const copy = Object.assign(Object.create(proto), cmd);
47
+ Object.assign(copy, { resource: to });
48
+ return copy;
49
+ });
50
+ }
51
+ var SupabaseResource = class extends S3Resource {
52
+ kind = ResourceName.SUPABASE;
53
+ prompt = SUPABASE_BROWSER_PROMPT;
54
+ supabaseConfig;
55
+ supabaseOps;
56
+ supabaseCommands;
57
+ constructor(config) {
58
+ super(supabaseToS3Config(config));
59
+ this.supabaseConfig = config;
60
+ this.supabaseOps = remapOpsResource(super.ops(), ResourceName.SUPABASE);
61
+ this.supabaseCommands = remapCommandsResource(super.commands(), ResourceName.SUPABASE);
62
+ }
63
+ ops() {
64
+ return this.supabaseOps;
65
+ }
66
+ commands() {
67
+ return this.supabaseCommands;
68
+ }
69
+ getState() {
70
+ return Promise.resolve({
71
+ type: this.kind,
72
+ needsOverride: true,
73
+ redactedFields: ["presignedUrlProvider"],
74
+ config: redactSupabaseConfig(this.supabaseConfig)
75
+ });
76
+ }
77
+ loadState(_state) {
78
+ return Promise.resolve();
79
+ }
80
+ };
81
+
82
+ export {
83
+ resolvedSupabaseEndpoint,
84
+ supabaseToS3Config,
85
+ redactSupabaseConfig,
86
+ SUPABASE_BROWSER_PROMPT,
87
+ SupabaseResource
88
+ };
89
+ //# sourceMappingURL=chunk-LUDXUYIA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/supabase/supabase.ts","../src/resource/supabase/config.ts","../src/resource/supabase/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { ResourceName, type RegisteredCommand, type RegisteredOp } from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport {\n redactSupabaseConfig,\n supabaseToS3Config,\n type SupabaseConfig,\n type SupabaseConfigRedacted,\n} from './config.ts'\nimport { SUPABASE_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface SupabaseResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: SupabaseConfigRedacted\n}\n\nfunction remapOpsResource(ops: readonly RegisteredOp[], to: string): RegisteredOp[] {\n return ops.map((op) => (op.resource === ResourceName.S3 ? { ...op, resource: to } : op))\n}\n\nfunction remapCommandsResource(\n commands: readonly RegisteredCommand[],\n to: string,\n): RegisteredCommand[] {\n return commands.map((cmd) => {\n if (cmd.resource !== ResourceName.S3) return cmd\n const proto = Object.getPrototypeOf(cmd) as object\n const copy = Object.assign(Object.create(proto) as RegisteredCommand, cmd)\n Object.assign(copy, { resource: to })\n return copy\n })\n}\n\nexport class SupabaseResource extends S3Resource {\n override readonly kind: string = ResourceName.SUPABASE\n override readonly prompt: string = SUPABASE_BROWSER_PROMPT\n readonly supabaseConfig: SupabaseConfig\n private readonly supabaseOps: readonly RegisteredOp[]\n private readonly supabaseCommands: readonly RegisteredCommand[]\n\n constructor(config: SupabaseConfig) {\n super(supabaseToS3Config(config))\n this.supabaseConfig = config\n this.supabaseOps = remapOpsResource(super.ops(), ResourceName.SUPABASE)\n this.supabaseCommands = remapCommandsResource(super.commands(), ResourceName.SUPABASE)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.supabaseOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.supabaseCommands\n }\n\n override getState(): Promise<SupabaseResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['presignedUrlProvider'],\n config: redactSupabaseConfig(this.supabaseConfig),\n })\n }\n\n override loadState(_state: SupabaseResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { S3BrowserPresignedUrlProvider, S3Config } from '../s3/config.ts'\n\nexport interface SupabaseConfig {\n bucket: string\n presignedUrlProvider: S3BrowserPresignedUrlProvider\n projectRef?: string\n region?: string\n endpoint?: string\n defaultContentType?: string\n}\n\nexport interface SupabaseConfigRedacted extends Omit<SupabaseConfig, 'presignedUrlProvider'> {\n presignedUrlProvider: '<REDACTED>'\n}\n\nexport function resolvedSupabaseEndpoint(config: SupabaseConfig): string | undefined {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n if (config.projectRef !== undefined && config.projectRef !== '') {\n return `https://${config.projectRef}.storage.supabase.co/storage/v1/s3`\n }\n return undefined\n}\n\nexport function supabaseToS3Config(config: SupabaseConfig): S3Config {\n const endpoint = resolvedSupabaseEndpoint(config)\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : {}),\n ...(endpoint !== undefined ? { endpoint } : {}),\n forcePathStyle: true,\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n }\n}\n\nexport function redactSupabaseConfig(config: SupabaseConfig): SupabaseConfigRedacted {\n return { ...config, presignedUrlProvider: '<REDACTED>' }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const SUPABASE_BROWSER_PROMPT = `{prefix}\n Remote Supabase Storage bucket accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n"],"mappings":";;;;;AAcA,SAAS,oBAA+D;;;ACejE,SAAS,yBAAyB,QAA4C;AACnF,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MAAI,OAAO,eAAe,UAAa,OAAO,eAAe,IAAI;AAC/D,WAAO,WAAW,OAAO,UAAU;AAAA,EACrC;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,QAAkC;AACnE,QAAM,WAAW,yBAAyB,MAAM;AAChD,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,GAAI,OAAO,WAAW,SAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/D,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,gBAAgB;AAAA,IAChB,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,EACP;AACF;AAEO,SAAS,qBAAqB,QAAgD;AACnF,SAAO,EAAE,GAAG,QAAQ,sBAAsB,aAAa;AACzD;;;ACvCO,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;;;AFiBvC,SAAS,iBAAiB,KAA8B,IAA4B;AAClF,SAAO,IAAI,IAAI,CAAC,OAAQ,GAAG,aAAa,aAAa,KAAK,EAAE,GAAG,IAAI,UAAU,GAAG,IAAI,EAAG;AACzF;AAEA,SAAS,sBACP,UACA,IACqB;AACrB,SAAO,SAAS,IAAI,CAAC,QAAQ;AAC3B,QAAI,IAAI,aAAa,aAAa,GAAI,QAAO;AAC7C,UAAM,QAAQ,OAAO,eAAe,GAAG;AACvC,UAAM,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,GAAwB,GAAG;AACzE,WAAO,OAAO,MAAM,EAAE,UAAU,GAAG,CAAC;AACpC,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,mBAAN,cAA+B,WAAW;AAAA,EAC7B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAwB;AAClC,UAAM,mBAAmB,MAAM,CAAC;AAChC,SAAK,iBAAiB;AACtB,SAAK,cAAc,iBAAiB,MAAM,IAAI,GAAG,aAAa,QAAQ;AACtE,SAAK,mBAAmB,sBAAsB,MAAM,SAAS,GAAG,aAAa,QAAQ;AAAA,EACvF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAA2C;AAClD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,sBAAsB;AAAA,MACvC,QAAQ,qBAAqB,KAAK,cAAc;AAAA,IAClD,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA8C;AAC/D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,99 @@
1
+ // src/resource/discord/discord.ts
2
+ import {
3
+ BrowserDiscordTransport,
4
+ DISCORD_COMMANDS,
5
+ DISCORD_PROMPT,
6
+ DISCORD_VFS_OPS,
7
+ DISCORD_WRITE_PROMPT,
8
+ DiscordAccessor,
9
+ PathSpec,
10
+ RAMIndexCacheStore,
11
+ ResourceName,
12
+ discordRead,
13
+ discordReaddir,
14
+ discordStat,
15
+ resolveDiscordGlob
16
+ } from "@struktoai/mirage-core";
17
+
18
+ // src/resource/discord/config.ts
19
+ function redactDiscordConfig(config) {
20
+ const out = { proxyUrl: config.proxyUrl };
21
+ if (config.getHeaders !== void 0) out.getHeaders = "<REDACTED>";
22
+ return out;
23
+ }
24
+
25
+ // src/resource/discord/discord.ts
26
+ var DiscordResource = class {
27
+ kind = ResourceName.DISCORD;
28
+ isRemote = true;
29
+ indexTtl = 600;
30
+ prompt = DISCORD_PROMPT;
31
+ writePrompt = DISCORD_WRITE_PROMPT;
32
+ config;
33
+ accessor;
34
+ index;
35
+ constructor(config) {
36
+ this.config = config;
37
+ this.accessor = new DiscordAccessor(
38
+ new BrowserDiscordTransport({
39
+ proxyUrl: config.proxyUrl,
40
+ ...config.getHeaders !== void 0 ? { getHeaders: config.getHeaders } : {}
41
+ })
42
+ );
43
+ this.index = new RAMIndexCacheStore({ ttl: this.indexTtl });
44
+ }
45
+ open() {
46
+ return Promise.resolve();
47
+ }
48
+ close() {
49
+ return Promise.resolve();
50
+ }
51
+ commands() {
52
+ return DISCORD_COMMANDS;
53
+ }
54
+ ops() {
55
+ return DISCORD_VFS_OPS;
56
+ }
57
+ readFile(p) {
58
+ return discordRead(this.accessor, p, this.index);
59
+ }
60
+ readdir(p) {
61
+ return discordReaddir(this.accessor, p, this.index);
62
+ }
63
+ stat(p) {
64
+ return discordStat(this.accessor, p, this.index);
65
+ }
66
+ async fingerprint(p) {
67
+ const lookup = await this.index.get(p.original);
68
+ return lookup.entry?.remoteTime ?? null;
69
+ }
70
+ glob(paths, prefix = "") {
71
+ const effective = prefix !== "" ? paths.map(
72
+ (p) => p.prefix !== "" ? p : new PathSpec({
73
+ original: p.original,
74
+ directory: p.directory,
75
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
76
+ resolved: p.resolved,
77
+ prefix
78
+ })
79
+ ) : paths;
80
+ return resolveDiscordGlob(this.accessor, effective, this.index);
81
+ }
82
+ getState() {
83
+ return Promise.resolve({
84
+ type: this.kind,
85
+ needsOverride: true,
86
+ redactedFields: ["getHeaders"],
87
+ config: redactDiscordConfig(this.config)
88
+ });
89
+ }
90
+ loadState(_state) {
91
+ return Promise.resolve();
92
+ }
93
+ };
94
+
95
+ export {
96
+ redactDiscordConfig,
97
+ DiscordResource
98
+ };
99
+ //# sourceMappingURL=chunk-LZRPA2P7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/discord/discord.ts","../src/resource/discord/config.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n BrowserDiscordTransport,\n DISCORD_COMMANDS,\n DISCORD_PROMPT,\n DISCORD_VFS_OPS,\n DISCORD_WRITE_PROMPT,\n DiscordAccessor,\n type FileStat,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n discordRead,\n discordReaddir,\n discordStat,\n resolveDiscordGlob,\n} from '@struktoai/mirage-core'\nimport { redactDiscordConfig, type DiscordConfig, type DiscordConfigRedacted } from './config.ts'\n\nexport interface DiscordResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: DiscordConfigRedacted\n}\n\nexport class DiscordResource implements Resource {\n readonly kind: string = ResourceName.DISCORD\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = DISCORD_PROMPT\n readonly writePrompt: string = DISCORD_WRITE_PROMPT\n readonly config: DiscordConfig\n readonly accessor: DiscordAccessor\n readonly index: IndexCacheStore\n\n constructor(config: DiscordConfig) {\n this.config = config\n this.accessor = new DiscordAccessor(\n new BrowserDiscordTransport({\n proxyUrl: config.proxyUrl,\n ...(config.getHeaders !== undefined ? { getHeaders: config.getHeaders } : {}),\n }),\n )\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return DISCORD_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return DISCORD_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return discordRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return discordReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return discordStat(this.accessor, p, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return resolveDiscordGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<DiscordResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['getHeaders'],\n config: redactDiscordConfig(this.config),\n })\n }\n\n loadState(_state: DiscordResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport interface DiscordConfig {\n proxyUrl: string\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>\n}\n\nexport interface DiscordConfigRedacted {\n proxyUrl: string\n getHeaders?: '<REDACTED>'\n}\n\nexport function redactDiscordConfig(config: DiscordConfig): DiscordConfigRedacted {\n const out: DiscordConfigRedacted = { proxyUrl: config.proxyUrl }\n if (config.getHeaders !== undefined) out.getHeaders = '<REDACTED>'\n return out\n}\n"],"mappings":";AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACTA,SAAS,oBAAoB,QAA8C;AAChF,QAAM,MAA6B,EAAE,UAAU,OAAO,SAAS;AAC/D,MAAI,OAAO,eAAe,OAAW,KAAI,aAAa;AACtD,SAAO;AACT;;;ADeO,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,SAAK,WAAW,IAAI;AAAA,MAClB,IAAI,wBAAwB;AAAA,QAC1B,UAAU,OAAO;AAAA,QACjB,GAAI,OAAO,eAAe,SAAY,EAAE,YAAY,OAAO,WAAW,IAAI,CAAC;AAAA,MAC7E,CAAC;AAAA,IACH;AACA,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,SAAS,CAAC;AAAA,EAC5D;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,eAAe,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACpD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,mBAAmB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAChE;AAAA,EAEA,WAA0C;AACxC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,YAAY;AAAA,MAC7B,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}