@5ss/ai-tools 2.11.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +4 -11
- package/dist/{bedrock-agentcore-browser-a_qOs-NR.js → bedrock-agentcore-browser-o_oqSPMK.js} +2 -2
- package/dist/{bedrock-agentcore-browser-a_qOs-NR.js.map → bedrock-agentcore-browser-o_oqSPMK.js.map} +1 -1
- package/dist/{bedrock-agentcore-code-interpreter-MWK-8RhA.js → bedrock-agentcore-code-interpreter-D4ERRFj1.js} +2 -2
- package/dist/{bedrock-agentcore-code-interpreter-MWK-8RhA.js.map → bedrock-agentcore-code-interpreter-D4ERRFj1.js.map} +1 -1
- package/dist/{cloudflare-browser-B6Yolpin.js → cloudflare-browser-nLJdH5nG.js} +3 -3
- package/dist/{cloudflare-browser-B6Yolpin.js.map → cloudflare-browser-nLJdH5nG.js.map} +1 -1
- package/dist/{cloudflare-email-Dy0KHeDf.js → cloudflare-email-CSRq8mRd.js} +2 -2
- package/dist/{cloudflare-email-Dy0KHeDf.js.map → cloudflare-email-CSRq8mRd.js.map} +1 -1
- package/dist/{cloudflare-sandbox-Dp_uNaqW.js → cloudflare-sandbox-Be7SeS4-.js} +3 -3
- package/dist/{cloudflare-sandbox-Dp_uNaqW.js.map → cloudflare-sandbox-Be7SeS4-.js.map} +1 -1
- package/dist/content-type-E4_Qdoa0.js +19 -0
- package/dist/{content-type-CORxaxcv.js.map → content-type-E4_Qdoa0.js.map} +1 -1
- package/dist/core/index.js +2 -6
- package/dist/core/index.js.map +1 -1
- package/dist/{define-CvpJ_pNP.js → define-ieoksEQ0.js} +1 -6
- package/dist/define-ieoksEQ0.js.map +1 -0
- package/dist/{eventbridge-scheduler-Bh6GqZY2.js → eventbridge-scheduler-BhQaReAz.js} +2 -2
- package/dist/{eventbridge-scheduler-Bh6GqZY2.js.map → eventbridge-scheduler-BhQaReAz.js.map} +1 -1
- package/dist/imessage-CH49-sFn.js +558 -0
- package/dist/imessage-CH49-sFn.js.map +1 -0
- package/dist/index-CZX5OeOF.d.ts.map +1 -1
- package/dist/{mastra-vector-Dhc6XZ8l.js → mastra-vector-B8HjvdMT.js} +2 -2
- package/dist/{mastra-vector-Dhc6XZ8l.js.map → mastra-vector-B8HjvdMT.js.map} +1 -1
- package/dist/modules/artifacts/index.js +3 -3
- package/dist/modules/browser/index.js +3 -3
- package/dist/modules/calendar/index.js +1 -1
- package/dist/modules/code-sandbox/index.js +3 -3
- package/dist/modules/content-type/index.js +2 -2
- package/dist/modules/crypto/index.js +1 -1
- package/dist/modules/document-extract/index.js +2 -2
- package/dist/modules/document-render/index.d.ts +21 -30
- package/dist/modules/document-render/index.d.ts.map +1 -1
- package/dist/modules/document-render/index.js +11 -28
- package/dist/modules/document-render/index.js.map +1 -1
- package/dist/modules/email/index.d.ts +19 -1
- package/dist/modules/email/index.d.ts.map +1 -1
- package/dist/modules/email/index.js +3 -3
- package/dist/modules/email-message/index.js +1 -1
- package/dist/modules/files/index.js +2 -2
- package/dist/modules/image/index.d.ts +4 -1
- package/dist/modules/image/index.d.ts.map +1 -1
- package/dist/modules/image/index.js +25 -4
- package/dist/modules/image/index.js.map +1 -1
- package/dist/modules/messaging/index.d.ts +12 -24
- package/dist/modules/messaging/index.d.ts.map +1 -1
- package/dist/modules/messaging/index.js +28 -43
- package/dist/modules/messaging/index.js.map +1 -1
- package/dist/modules/queue/index.js +2 -2
- package/dist/modules/rag/index.js +2 -2
- package/dist/modules/scheduler/index.js +2 -2
- package/dist/modules/skills/index.js +1 -1
- package/dist/modules/tasks/index.js +1 -1
- package/dist/modules/vector-store/index.js +1 -1
- package/dist/modules/web-fetch/index.js +1 -1
- package/dist/{pinecone-umY4t6OF.js → pinecone-CNnCFmix.js} +2 -2
- package/dist/{pinecone-umY4t6OF.js.map → pinecone-CNnCFmix.js.map} +1 -1
- package/dist/{qdrant-DMp4NhKR.js → qdrant-R_FIcG9d.js} +2 -2
- package/dist/{qdrant-DMp4NhKR.js.map → qdrant-R_FIcG9d.js.map} +1 -1
- package/dist/{resend-BAC38_dA.js → resend-Bu0NFO3h.js} +2 -2
- package/dist/{resend-BAC38_dA.js.map → resend-Bu0NFO3h.js.map} +1 -1
- package/dist/{s3-CsOaPWMP.js → s3-Dj7Teh-A.js} +2 -2
- package/dist/{s3-CsOaPWMP.js.map → s3-Dj7Teh-A.js.map} +1 -1
- package/dist/{slack-Di5BBNpt.js → slack-AjJDNnXJ.js} +2 -2
- package/dist/{slack-Di5BBNpt.js.map → slack-AjJDNnXJ.js.map} +1 -1
- package/dist/{sqs-DCwS1i2N.js → sqs-CjyXjasF.js} +2 -2
- package/dist/{sqs-DCwS1i2N.js.map → sqs-CjyXjasF.js.map} +1 -1
- package/dist/{supabase-vector-Dpp9mmJR.js → supabase-vector-BNoJZuft.js} +2 -2
- package/dist/{supabase-vector-Dpp9mmJR.js.map → supabase-vector-BNoJZuft.js.map} +1 -1
- package/dist/{teams-DYAHNb39.js → teams-CvxYLAi5.js} +2 -2
- package/dist/{teams-DYAHNb39.js.map → teams-CvxYLAi5.js.map} +1 -1
- package/dist/{telegram-DDXWzkfL.js → telegram-B_-Jljk3.js} +2 -2
- package/dist/{telegram-DDXWzkfL.js.map → telegram-B_-Jljk3.js.map} +1 -1
- package/dist/{textract-CPLiB22H.js → textract-CAfnGvua.js} +3 -3
- package/dist/{textract-CPLiB22H.js.map → textract-CAfnGvua.js.map} +1 -1
- package/dist/{vector-store-C3nEO80e.js → vector-store-DDiu3XPg.js} +6 -6
- package/dist/{vector-store-C3nEO80e.js.map → vector-store-DDiu3XPg.js.map} +1 -1
- package/dist/vendors/amazon-sp-api/index.js +339 -2
- package/dist/vendors/amazon-sp-api/index.js.map +1 -1
- package/dist/vendors/bedrock-agentcore-browser/index.js +1 -1
- package/dist/vendors/bedrock-agentcore-code-interpreter/index.js +1 -1
- package/dist/vendors/cloudflare-browser/index.js +1 -1
- package/dist/vendors/cloudflare-email/index.js +1 -1
- package/dist/vendors/cloudflare-sandbox/index.js +1 -1
- package/dist/vendors/eventbridge-scheduler/index.js +1 -1
- package/dist/vendors/imessage/index.d.ts +65 -188
- package/dist/vendors/imessage/index.d.ts.map +1 -1
- package/dist/vendors/imessage/index.js +2 -3
- package/dist/vendors/katana/index.js +1 -1
- package/dist/vendors/mastra-vector/index.js +1 -1
- package/dist/vendors/pinecone/index.js +1 -1
- package/dist/vendors/qdrant/index.js +1 -1
- package/dist/vendors/resend/index.js +1 -1
- package/dist/vendors/s3/index.js +1 -1
- package/dist/vendors/slack/index.js +1 -1
- package/dist/vendors/sqs/index.js +1 -1
- package/dist/vendors/supabase-vector/index.js +1 -1
- package/dist/vendors/teams/index.js +1 -1
- package/dist/vendors/telegram/index.js +1 -1
- package/dist/vendors/textract/index.js +1 -1
- package/dist/vendors/woocommerce/index.js +1 -1
- package/logos/README.md +0 -4
- package/logos/pack-logos.json +0 -5
- package/package.json +4 -55
- package/dist/artifacts-O8g-40Pw.js +0 -404
- package/dist/artifacts-O8g-40Pw.js.map +0 -1
- package/dist/batch-BMM5dXqL.d.ts +0 -22
- package/dist/batch-BMM5dXqL.d.ts.map +0 -1
- package/dist/client-CCKGsTeI.js +0 -743
- package/dist/client-CCKGsTeI.js.map +0 -1
- package/dist/content-type-CORxaxcv.js +0 -49
- package/dist/define-CvpJ_pNP.js.map +0 -1
- package/dist/esm-BDrCssjb.js +0 -957
- package/dist/esm-BDrCssjb.js.map +0 -1
- package/dist/gotenberg-NuJjxyln.js +0 -291
- package/dist/gotenberg-NuJjxyln.js.map +0 -1
- package/dist/imessage-BSAFOI8Z.js +0 -154
- package/dist/imessage-BSAFOI8Z.js.map +0 -1
- package/dist/modules/document/index.d.ts +0 -575
- package/dist/modules/document/index.d.ts.map +0 -1
- package/dist/modules/document/index.js +0 -444
- package/dist/modules/document/index.js.map +0 -1
- package/dist/modules/file-convert/index.d.ts +0 -273
- package/dist/modules/file-convert/index.d.ts.map +0 -1
- package/dist/modules/file-convert/index.js +0 -103
- package/dist/modules/file-convert/index.js.map +0 -1
- package/dist/modules/pdf/index.d.ts +0 -287
- package/dist/modules/pdf/index.d.ts.map +0 -1
- package/dist/modules/pdf/index.js +0 -259
- package/dist/modules/pdf/index.js.map +0 -1
- package/dist/modules/presentation/index.d.ts +0 -247
- package/dist/modules/presentation/index.d.ts.map +0 -1
- package/dist/modules/presentation/index.js +0 -11721
- package/dist/modules/presentation/index.js.map +0 -1
- package/dist/object-artifact-store-BVLietAc.d.ts +0 -7
- package/dist/object-artifact-store-BVLietAc.d.ts.map +0 -1
- package/dist/object-artifact-store-wZ2j9cto.js +0 -28
- package/dist/object-artifact-store-wZ2j9cto.js.map +0 -1
- package/dist/vendors/gotenberg/index.d.ts +0 -306
- package/dist/vendors/gotenberg/index.d.ts.map +0 -1
- package/dist/vendors/gotenberg/index.js +0 -2
- package/logos/document.svg +0 -10
- package/logos/file-convert.svg +0 -9
- package/logos/gotenberg.svg +0 -340
- package/logos/pdf.svg +0 -10
- package/logos/presentation.svg +0 -8
|
@@ -1,12 +1,33 @@
|
|
|
1
1
|
import { t as ToolError } from "../../errors-DoSpNHvs.js";
|
|
2
|
-
import { n as defineModule, r as defineTool } from "../../define-
|
|
2
|
+
import { n as defineModule, r as defineTool } from "../../define-ieoksEQ0.js";
|
|
3
3
|
import { n as requireAuth } from "../../provider-CgDAlg6K.js";
|
|
4
4
|
import { t as artifactRefSchema } from "../../artifact-D064mHfK.js";
|
|
5
|
-
import { m as s3AuthSchema } from "../../s3-
|
|
6
|
-
import { n as extensionFromMediaType, r as mediaTypeFromPath } from "../../content-type-
|
|
7
|
-
import { t as ObjectArtifactStore } from "../../object-artifact-store-wZ2j9cto.js";
|
|
5
|
+
import { m as s3AuthSchema, p as S3Client } from "../../s3-Dj7Teh-A.js";
|
|
6
|
+
import { n as extensionFromMediaType, r as mediaTypeFromPath } from "../../content-type-E4_Qdoa0.js";
|
|
8
7
|
import { z } from "zod";
|
|
9
8
|
import sharp from "sharp";
|
|
9
|
+
//#region src/shared/object-artifact-store.ts
|
|
10
|
+
var ObjectArtifactStore = class {
|
|
11
|
+
#storage;
|
|
12
|
+
constructor(auth, options = {}) {
|
|
13
|
+
this.#storage = new S3Client(auth, options);
|
|
14
|
+
}
|
|
15
|
+
async read(source, maxBytes) {
|
|
16
|
+
if (source.store !== "object") throw new ToolError("This operation requires an object-store artifact", { code: "bad_input" });
|
|
17
|
+
return this.#storage.getBytes(source.key, { maxBytes });
|
|
18
|
+
}
|
|
19
|
+
async write(key, bytes, mediaType, filename) {
|
|
20
|
+
await this.#storage.putBytes(key, bytes, mediaType);
|
|
21
|
+
return artifactRefSchema.parse({
|
|
22
|
+
store: "object",
|
|
23
|
+
key,
|
|
24
|
+
media_type: mediaType,
|
|
25
|
+
filename,
|
|
26
|
+
byte_length: bytes.byteLength
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
10
31
|
//#region src/modules/image/contracts.ts
|
|
11
32
|
const MAX_IMAGE_BYTES = 50 * 1024 * 1024;
|
|
12
33
|
const MAX_IMAGE_DIMENSION = 16384;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["#artifacts","#read","#write"],"sources":["../../../src/modules/image/contracts.ts","../../../src/modules/image/client.ts","../../../src/modules/image/module.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { s3AuthSchema } from '../../vendors/s3'\n\nexport const MAX_IMAGE_BYTES = 50 * 1024 * 1024\nexport const MAX_IMAGE_DIMENSION = 16_384\n\nexport const imageAuthSchema = z.object({\n\tstorage: s3AuthSchema.describe('Object storage for source and output image artifacts')\n})\n\nconst source = artifactRefSchema.describe('Source image artifact')\nconst outputKey = z.string().min(1).max(1_024).describe('Destination object key')\nconst filename = z.string().min(1).max(512).optional().describe('Display filename for the output image')\nconst dimension = z.int().min(1).max(MAX_IMAGE_DIMENSION)\nconst quality = z.int().min(1).max(100).optional().describe('Encoder quality from 1 to 100')\n\nexport const imageMetadataInputSchema = z.object({ source })\n\nexport const imageMetadataSchema = z.object({\n\tformat: z.string(),\n\tmedia_type: z.string().optional(),\n\twidth: z.int().positive(),\n\theight: z.int().positive(),\n\tspace: z.string(),\n\tchannels: z.int().positive(),\n\tdensity: z.number().positive().optional(),\n\thas_alpha: z.boolean(),\n\tpages: z.int().positive().optional()\n})\n\nexport const imageTransformOutputSchema = z.object({\n\tresult: artifactRefSchema.describe('Written image artifact'),\n\timage: imageMetadataSchema\n})\n\nexport const imageResizeInputSchema = z\n\t.object({\n\t\tsource,\n\t\twidth: dimension.optional().describe('Target width in pixels'),\n\t\theight: dimension.optional().describe('Target height in pixels'),\n\t\tfit: z\n\t\t\t.enum(['cover', 'contain', 'fill', 'inside', 'outside'])\n\t\t\t.optional()\n\t\t\t.describe('How the image fits the target box'),\n\t\twithout_enlargement: z.boolean().optional().describe('Prevent enlarging smaller images'),\n\t\toutput_key: outputKey,\n\t\tfilename\n\t})\n\t.refine((input) => input.width !== undefined || input.height !== undefined, {\n\t\tmessage: 'width or height is required',\n\t\tpath: ['width']\n\t})\n\nexport const imageCropInputSchema = z.object({\n\tsource,\n\tleft: z.int().min(0).describe('Left edge in pixels'),\n\ttop: z.int().min(0).describe('Top edge in pixels'),\n\twidth: dimension.describe('Crop width in pixels'),\n\theight: dimension.describe('Crop height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageThumbnailInputSchema = z.object({\n\tsource,\n\twidth: dimension.describe('Maximum thumbnail width in pixels'),\n\theight: dimension.describe('Maximum thumbnail height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageFormatSchema = z.enum(['jpeg', 'png', 'webp', 'avif', 'tiff', 'gif'])\n\nexport const imageConvertInputSchema = z.object({\n\tsource,\n\tformat: imageFormatSchema.describe('Destination image format'),\n\tquality,\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport type ImageAuth = z.infer<typeof imageAuthSchema>\nexport type ImageMetadataInput = z.infer<typeof imageMetadataInputSchema>\nexport type ImageMetadata = z.infer<typeof imageMetadataSchema>\nexport type ImageResizeInput = z.infer<typeof imageResizeInputSchema>\nexport type ImageCropInput = z.infer<typeof imageCropInputSchema>\nexport type ImageThumbnailInput = z.infer<typeof imageThumbnailInputSchema>\nexport type ImageConvertInput = z.infer<typeof imageConvertInputSchema>\nexport type ImageTransformOutput = z.infer<typeof imageTransformOutputSchema>\n","import sharp from 'sharp'\nimport type { Sharp } from 'sharp'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { extensionFromMediaType, mediaTypeFromPath } from '../../shared/content-type'\nimport { ObjectArtifactStore } from '../../shared/object-artifact-store'\nimport type { ObjectArtifactStoreOptions } from '../../shared/object-artifact-store'\nimport type {\n\tImageAuth,\n\tImageConvertInput,\n\tImageCropInput,\n\tImageMetadata,\n\tImageMetadataInput,\n\tImageResizeInput,\n\tImageThumbnailInput,\n\tImageTransformOutput\n} from './contracts'\nimport { MAX_IMAGE_BYTES, imageAuthSchema, imageMetadataSchema, imageTransformOutputSchema } from './contracts'\n\nexport type ImageClientOptions = ObjectArtifactStoreOptions\n\nfunction mediaTypeFor(extension: string): string {\n\treturn mediaTypeFromPath(`image.${extension}`) ?? 'application/octet-stream'\n}\n\nfunction mapMetadata(metadata: Awaited<ReturnType<Sharp['metadata']>>): ImageMetadata {\n\treturn imageMetadataSchema.parse({\n\t\tformat: metadata.format,\n\t\tmedia_type: metadata.mediaType,\n\t\twidth: metadata.width,\n\t\theight: metadata.height,\n\t\tspace: metadata.space,\n\t\tchannels: metadata.channels,\n\t\tdensity: metadata.density,\n\t\thas_alpha: metadata.hasAlpha,\n\t\tpages: metadata.pages\n\t})\n}\n\nexport class ImageClient {\n\treadonly #artifacts: ObjectArtifactStore\n\n\tconstructor(auth: ImageAuth, options: ImageClientOptions = {}) {\n\t\tconst parsed = imageAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid image auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#artifacts = new ObjectArtifactStore(parsed.data.storage, options)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): ImageClient {\n\t\treturn new ImageClient(requireAuth(ctx, imageAuthSchema), {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\tstatic fromAuth(auth: ImageAuth, options: ImageClientOptions = {}): ImageClient {\n\t\treturn new ImageClient(auth, options)\n\t}\n\n\tasync metadata(input: ImageMetadataInput): Promise<ImageMetadata> {\n\t\ttry {\n\t\t\treturn mapMetadata(await sharp(await this.#read(input.source)).metadata())\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to inspect image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n\n\tasync resize(input: ImageResizeInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize({\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height,\n\t\t\t\tfit: input.fit,\n\t\t\t\twithoutEnlargement: input.without_enlargement\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync crop(input: ImageCropInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.extract({\n\t\t\t\tleft: input.left,\n\t\t\t\ttop: input.top,\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync thumbnail(input: ImageThumbnailInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize(input.width, input.height, { fit: 'inside', withoutEnlargement: true })\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync convert(input: ImageConvertInput): Promise<ImageTransformOutput> {\n\t\tlet pipeline = sharp(await this.#read(input.source)).autoOrient()\n\t\tswitch (input.format) {\n\t\t\tcase 'jpeg':\n\t\t\t\tpipeline = pipeline.jpeg({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'png':\n\t\t\t\tpipeline = pipeline.png({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'webp':\n\t\t\t\tpipeline = pipeline.webp({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'avif':\n\t\t\t\tpipeline = pipeline.avif({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'tiff':\n\t\t\t\tpipeline = pipeline.tiff({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'gif':\n\t\t\t\tpipeline = pipeline.gif({ effort: input.quality ? Math.max(1, Math.round(input.quality / 10)) : undefined })\n\t\t}\n\t\treturn this.#write(pipeline, input.output_key, input.filename, input.format)\n\t}\n\n\tasync #read(source: ImageMetadataInput['source']): Promise<Uint8Array> {\n\t\treturn this.#artifacts.read(source, MAX_IMAGE_BYTES)\n\t}\n\n\tasync #write(\n\t\tpipeline: Sharp,\n\t\tkey: string,\n\t\tfilename?: string,\n\t\trequestedExtension?: string\n\t): Promise<ImageTransformOutput> {\n\t\ttry {\n\t\t\tconst { data, info } = await pipeline.toBuffer({ resolveWithObject: true })\n\t\t\tconst extension = requestedExtension ?? info.format\n\t\t\tconst mediaType = mediaTypeFor(extension)\n\t\t\tconst displayName = filename ?? `image.${extensionFromMediaType(mediaType) ?? extension}`\n\t\t\tconst result = await this.#artifacts.write(key, data, mediaType, displayName)\n\t\t\tconst image = mapMetadata(await sharp(data).metadata())\n\t\t\treturn imageTransformOutputSchema.parse({ result, image })\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to transform image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { ImageClient } from './client'\nimport {\n\timageAuthSchema,\n\timageConvertInputSchema,\n\timageCropInputSchema,\n\timageMetadataInputSchema,\n\timageMetadataSchema,\n\timageResizeInputSchema,\n\timageThumbnailInputSchema,\n\timageTransformOutputSchema\n} from './contracts'\n\nexport const imageMetadataTool = defineTool({\n\tid: 'image-metadata',\n\tname: 'inspectImage',\n\tdescription:\n\t\t'Inspect an image artifact and return decoded format, dimensions, color space, channels, and page metadata.',\n\tinputSchema: imageMetadataInputSchema,\n\toutputSchema: imageMetadataSchema,\n\tsideEffect: 'read',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).metadata(input)\n})\n\nexport const imageResizeTool = defineTool({\n\tid: 'image-resize',\n\tname: 'resizeImage',\n\tdescription:\n\t\t'Resize an existing image ArtifactRef to a target width, height, or bounding box while preserving its format. Returns a final image ArtifactRef; use for exact resize requirements rather than general code or document tools.',\n\tinputSchema: imageResizeInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).resize(input)\n})\n\nexport const imageCropTool = defineTool({\n\tid: 'image-crop',\n\tname: 'cropImage',\n\tdescription:\n\t\t'Crop a rectangular pixel region from an existing image ArtifactRef and return a new image ArtifactRef. Use when the crop coordinates are known.',\n\tinputSchema: imageCropInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).crop(input)\n})\n\nexport const imageThumbnailTool = defineTool({\n\tid: 'image-thumbnail',\n\tname: 'createImageThumbnail',\n\tdescription:\n\t\t'Create a thumbnail ArtifactRef that fits within the requested dimensions without enlarging smaller images. Use for previews; use image-resize when exact output dimensions matter.',\n\tinputSchema: imageThumbnailInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).thumbnail(input)\n})\n\nexport const imageConvertTool = defineTool({\n\tid: 'image-convert',\n\tname: 'convertImage',\n\tdescription:\n\t\t'Re-encode an existing image ArtifactRef as JPEG, PNG, WebP, AVIF, TIFF, or GIF and return a new ArtifactRef. Use only when the required output image format differs from the source.',\n\tinputSchema: imageConvertInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).convert(input)\n})\n\nexport const imageModule = defineModule({\n\tid: 'image',\n\ttitle: 'Image',\n\tdescription: 'Inspect, resize, crop, thumbnail, and re-encode image artifacts.',\n\truntime: 'node',\n\tauth: { type: 'custom', schema: imageAuthSchema },\n\tcategories: ['media', 'image'],\n\tclassification: 'standard',\n\ttags: ['resize', 'convert'],\n\ttools: [imageMetadataTool, imageResizeTool, imageCropTool, imageThumbnailTool, imageConvertTool]\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["#storage","#artifacts","#read","#write"],"sources":["../../../src/shared/object-artifact-store.ts","../../../src/modules/image/contracts.ts","../../../src/modules/image/client.ts","../../../src/modules/image/module.ts"],"sourcesContent":["import { ToolError } from '../core/errors'\nimport type { ArtifactRef } from './artifact'\nimport { artifactRefSchema } from './artifact'\nimport { S3Client } from '../vendors/s3'\nimport type { S3Auth, S3ClientOptions } from '../vendors/s3'\n\nexport type ObjectArtifactStoreOptions = S3ClientOptions\n\nexport class ObjectArtifactStore {\n\treadonly #storage: S3Client\n\n\tconstructor(auth: S3Auth, options: ObjectArtifactStoreOptions = {}) {\n\t\tthis.#storage = new S3Client(auth, options)\n\t}\n\n\tasync read(source: ArtifactRef, maxBytes: number): Promise<Uint8Array> {\n\t\tif (source.store !== 'object') {\n\t\t\tthrow new ToolError('This operation requires an object-store artifact', { code: 'bad_input' })\n\t\t}\n\t\treturn this.#storage.getBytes(source.key, { maxBytes })\n\t}\n\n\tasync write(key: string, bytes: Uint8Array, mediaType: string, filename: string): Promise<ArtifactRef> {\n\t\tawait this.#storage.putBytes(key, bytes, mediaType)\n\t\treturn artifactRefSchema.parse({\n\t\t\tstore: 'object',\n\t\t\tkey,\n\t\t\tmedia_type: mediaType,\n\t\t\tfilename,\n\t\t\tbyte_length: bytes.byteLength\n\t\t})\n\t}\n}\n","import { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { s3AuthSchema } from '../../vendors/s3'\n\nexport const MAX_IMAGE_BYTES = 50 * 1024 * 1024\nexport const MAX_IMAGE_DIMENSION = 16_384\n\nexport const imageAuthSchema = z.object({\n\tstorage: s3AuthSchema.describe('Object storage for source and output image artifacts')\n})\n\nconst source = artifactRefSchema.describe('Source image artifact')\nconst outputKey = z.string().min(1).max(1_024).describe('Destination object key')\nconst filename = z.string().min(1).max(512).optional().describe('Display filename for the output image')\nconst dimension = z.int().min(1).max(MAX_IMAGE_DIMENSION)\nconst quality = z.int().min(1).max(100).optional().describe('Encoder quality from 1 to 100')\n\nexport const imageMetadataInputSchema = z.object({ source })\n\nexport const imageMetadataSchema = z.object({\n\tformat: z.string(),\n\tmedia_type: z.string().optional(),\n\twidth: z.int().positive(),\n\theight: z.int().positive(),\n\tspace: z.string(),\n\tchannels: z.int().positive(),\n\tdensity: z.number().positive().optional(),\n\thas_alpha: z.boolean(),\n\tpages: z.int().positive().optional()\n})\n\nexport const imageTransformOutputSchema = z.object({\n\tresult: artifactRefSchema.describe('Written image artifact'),\n\timage: imageMetadataSchema\n})\n\nexport const imageResizeInputSchema = z\n\t.object({\n\t\tsource,\n\t\twidth: dimension.optional().describe('Target width in pixels'),\n\t\theight: dimension.optional().describe('Target height in pixels'),\n\t\tfit: z\n\t\t\t.enum(['cover', 'contain', 'fill', 'inside', 'outside'])\n\t\t\t.optional()\n\t\t\t.describe('How the image fits the target box'),\n\t\twithout_enlargement: z.boolean().optional().describe('Prevent enlarging smaller images'),\n\t\toutput_key: outputKey,\n\t\tfilename\n\t})\n\t.refine((input) => input.width !== undefined || input.height !== undefined, {\n\t\tmessage: 'width or height is required',\n\t\tpath: ['width']\n\t})\n\nexport const imageCropInputSchema = z.object({\n\tsource,\n\tleft: z.int().min(0).describe('Left edge in pixels'),\n\ttop: z.int().min(0).describe('Top edge in pixels'),\n\twidth: dimension.describe('Crop width in pixels'),\n\theight: dimension.describe('Crop height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageThumbnailInputSchema = z.object({\n\tsource,\n\twidth: dimension.describe('Maximum thumbnail width in pixels'),\n\theight: dimension.describe('Maximum thumbnail height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageFormatSchema = z.enum(['jpeg', 'png', 'webp', 'avif', 'tiff', 'gif'])\n\nexport const imageConvertInputSchema = z.object({\n\tsource,\n\tformat: imageFormatSchema.describe('Destination image format'),\n\tquality,\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport type ImageAuth = z.infer<typeof imageAuthSchema>\nexport type ImageMetadataInput = z.infer<typeof imageMetadataInputSchema>\nexport type ImageMetadata = z.infer<typeof imageMetadataSchema>\nexport type ImageResizeInput = z.infer<typeof imageResizeInputSchema>\nexport type ImageCropInput = z.infer<typeof imageCropInputSchema>\nexport type ImageThumbnailInput = z.infer<typeof imageThumbnailInputSchema>\nexport type ImageConvertInput = z.infer<typeof imageConvertInputSchema>\nexport type ImageTransformOutput = z.infer<typeof imageTransformOutputSchema>\n","import sharp from 'sharp'\nimport type { Sharp } from 'sharp'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { extensionFromMediaType, mediaTypeFromPath } from '../../shared/content-type'\nimport { ObjectArtifactStore } from '../../shared/object-artifact-store'\nimport type { ObjectArtifactStoreOptions } from '../../shared/object-artifact-store'\nimport type {\n\tImageAuth,\n\tImageConvertInput,\n\tImageCropInput,\n\tImageMetadata,\n\tImageMetadataInput,\n\tImageResizeInput,\n\tImageThumbnailInput,\n\tImageTransformOutput\n} from './contracts'\nimport { MAX_IMAGE_BYTES, imageAuthSchema, imageMetadataSchema, imageTransformOutputSchema } from './contracts'\n\nexport type ImageClientOptions = ObjectArtifactStoreOptions\n\nfunction mediaTypeFor(extension: string): string {\n\treturn mediaTypeFromPath(`image.${extension}`) ?? 'application/octet-stream'\n}\n\nfunction mapMetadata(metadata: Awaited<ReturnType<Sharp['metadata']>>): ImageMetadata {\n\treturn imageMetadataSchema.parse({\n\t\tformat: metadata.format,\n\t\tmedia_type: metadata.mediaType,\n\t\twidth: metadata.width,\n\t\theight: metadata.height,\n\t\tspace: metadata.space,\n\t\tchannels: metadata.channels,\n\t\tdensity: metadata.density,\n\t\thas_alpha: metadata.hasAlpha,\n\t\tpages: metadata.pages\n\t})\n}\n\nexport class ImageClient {\n\treadonly #artifacts: ObjectArtifactStore\n\n\tconstructor(auth: ImageAuth, options: ImageClientOptions = {}) {\n\t\tconst parsed = imageAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid image auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#artifacts = new ObjectArtifactStore(parsed.data.storage, options)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): ImageClient {\n\t\treturn new ImageClient(requireAuth(ctx, imageAuthSchema), {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\tstatic fromAuth(auth: ImageAuth, options: ImageClientOptions = {}): ImageClient {\n\t\treturn new ImageClient(auth, options)\n\t}\n\n\tasync metadata(input: ImageMetadataInput): Promise<ImageMetadata> {\n\t\ttry {\n\t\t\treturn mapMetadata(await sharp(await this.#read(input.source)).metadata())\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to inspect image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n\n\tasync resize(input: ImageResizeInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize({\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height,\n\t\t\t\tfit: input.fit,\n\t\t\t\twithoutEnlargement: input.without_enlargement\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync crop(input: ImageCropInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.extract({\n\t\t\t\tleft: input.left,\n\t\t\t\ttop: input.top,\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync thumbnail(input: ImageThumbnailInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize(input.width, input.height, { fit: 'inside', withoutEnlargement: true })\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync convert(input: ImageConvertInput): Promise<ImageTransformOutput> {\n\t\tlet pipeline = sharp(await this.#read(input.source)).autoOrient()\n\t\tswitch (input.format) {\n\t\t\tcase 'jpeg':\n\t\t\t\tpipeline = pipeline.jpeg({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'png':\n\t\t\t\tpipeline = pipeline.png({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'webp':\n\t\t\t\tpipeline = pipeline.webp({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'avif':\n\t\t\t\tpipeline = pipeline.avif({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'tiff':\n\t\t\t\tpipeline = pipeline.tiff({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'gif':\n\t\t\t\tpipeline = pipeline.gif({ effort: input.quality ? Math.max(1, Math.round(input.quality / 10)) : undefined })\n\t\t}\n\t\treturn this.#write(pipeline, input.output_key, input.filename, input.format)\n\t}\n\n\tasync #read(source: ImageMetadataInput['source']): Promise<Uint8Array> {\n\t\treturn this.#artifacts.read(source, MAX_IMAGE_BYTES)\n\t}\n\n\tasync #write(\n\t\tpipeline: Sharp,\n\t\tkey: string,\n\t\tfilename?: string,\n\t\trequestedExtension?: string\n\t): Promise<ImageTransformOutput> {\n\t\ttry {\n\t\t\tconst { data, info } = await pipeline.toBuffer({ resolveWithObject: true })\n\t\t\tconst extension = requestedExtension ?? info.format\n\t\t\tconst mediaType = mediaTypeFor(extension)\n\t\t\tconst displayName = filename ?? `image.${extensionFromMediaType(mediaType) ?? extension}`\n\t\t\tconst result = await this.#artifacts.write(key, data, mediaType, displayName)\n\t\t\tconst image = mapMetadata(await sharp(data).metadata())\n\t\t\treturn imageTransformOutputSchema.parse({ result, image })\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to transform image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { ImageClient } from './client'\nimport {\n\timageAuthSchema,\n\timageConvertInputSchema,\n\timageCropInputSchema,\n\timageMetadataInputSchema,\n\timageMetadataSchema,\n\timageResizeInputSchema,\n\timageThumbnailInputSchema,\n\timageTransformOutputSchema\n} from './contracts'\n\nexport const imageMetadataTool = defineTool({\n\tid: 'image-metadata',\n\tname: 'inspectImage',\n\tdescription:\n\t\t'Inspect an image artifact and return decoded format, dimensions, color space, channels, and page metadata.',\n\tinputSchema: imageMetadataInputSchema,\n\toutputSchema: imageMetadataSchema,\n\tsideEffect: 'read',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).metadata(input)\n})\n\nexport const imageResizeTool = defineTool({\n\tid: 'image-resize',\n\tname: 'resizeImage',\n\tdescription:\n\t\t'Resize an existing image ArtifactRef to a target width, height, or bounding box while preserving its format. Returns a final image ArtifactRef; use for exact resize requirements rather than general code or document tools.',\n\tinputSchema: imageResizeInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).resize(input)\n})\n\nexport const imageCropTool = defineTool({\n\tid: 'image-crop',\n\tname: 'cropImage',\n\tdescription:\n\t\t'Crop a rectangular pixel region from an existing image ArtifactRef and return a new image ArtifactRef. Use when the crop coordinates are known.',\n\tinputSchema: imageCropInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).crop(input)\n})\n\nexport const imageThumbnailTool = defineTool({\n\tid: 'image-thumbnail',\n\tname: 'createImageThumbnail',\n\tdescription:\n\t\t'Create a thumbnail ArtifactRef that fits within the requested dimensions without enlarging smaller images. Use for previews; use image-resize when exact output dimensions matter.',\n\tinputSchema: imageThumbnailInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).thumbnail(input)\n})\n\nexport const imageConvertTool = defineTool({\n\tid: 'image-convert',\n\tname: 'convertImage',\n\tdescription:\n\t\t'Re-encode an existing image ArtifactRef as JPEG, PNG, WebP, AVIF, TIFF, or GIF and return a new ArtifactRef. Use only when the required output image format differs from the source.',\n\tinputSchema: imageConvertInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).convert(input)\n})\n\nexport const imageModule = defineModule({\n\tid: 'image',\n\ttitle: 'Image',\n\tdescription: 'Inspect, resize, crop, thumbnail, and re-encode image artifacts.',\n\truntime: 'node',\n\tauth: { type: 'custom', schema: imageAuthSchema },\n\tcategories: ['media', 'image'],\n\tclassification: 'standard',\n\ttags: ['resize', 'convert'],\n\ttools: [imageMetadataTool, imageResizeTool, imageCropTool, imageThumbnailTool, imageConvertTool]\n})\n"],"mappings":"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"}
|
|
@@ -61,14 +61,10 @@ declare const teamsMessagingAuthSchema: z.ZodObject<{
|
|
|
61
61
|
}, z.core.$strip>>;
|
|
62
62
|
}, z.core.$strip>;
|
|
63
63
|
declare const imessageMessagingAuthSchema: z.ZodObject<{
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
server: z.ZodOptional<z.ZodString>;
|
|
69
|
-
spectrum_cloud_url: z.ZodOptional<z.ZodURL>;
|
|
70
|
-
spectrum_imessage_address: z.ZodOptional<z.ZodString>;
|
|
71
|
-
tls: z.ZodOptional<z.ZodBoolean>;
|
|
64
|
+
base_url: z.ZodURL;
|
|
65
|
+
project_id: z.ZodString;
|
|
66
|
+
project_secret: z.ZodString;
|
|
67
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
72
68
|
provider: z.ZodLiteral<"imessage">;
|
|
73
69
|
storage: z.ZodOptional<z.ZodObject<{
|
|
74
70
|
access_key_id: z.ZodString;
|
|
@@ -123,14 +119,10 @@ declare const messagingAuthSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
123
119
|
key_prefix: z.ZodOptional<z.ZodString>;
|
|
124
120
|
}, z.core.$strip>>;
|
|
125
121
|
}, z.core.$strip>, z.ZodObject<{
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
server: z.ZodOptional<z.ZodString>;
|
|
131
|
-
spectrum_cloud_url: z.ZodOptional<z.ZodURL>;
|
|
132
|
-
spectrum_imessage_address: z.ZodOptional<z.ZodString>;
|
|
133
|
-
tls: z.ZodOptional<z.ZodBoolean>;
|
|
122
|
+
base_url: z.ZodURL;
|
|
123
|
+
project_id: z.ZodString;
|
|
124
|
+
project_secret: z.ZodString;
|
|
125
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
134
126
|
provider: z.ZodLiteral<"imessage">;
|
|
135
127
|
storage: z.ZodOptional<z.ZodObject<{
|
|
136
128
|
access_key_id: z.ZodString;
|
|
@@ -584,14 +576,10 @@ declare const messagingModule: ModuleDefinition<{
|
|
|
584
576
|
key_prefix?: string | undefined;
|
|
585
577
|
} | undefined;
|
|
586
578
|
} | {
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
server?: string | undefined;
|
|
592
|
-
spectrum_cloud_url?: string | undefined;
|
|
593
|
-
spectrum_imessage_address?: string | undefined;
|
|
594
|
-
tls?: boolean | undefined;
|
|
579
|
+
base_url: string;
|
|
580
|
+
project_id: string;
|
|
581
|
+
project_secret: string;
|
|
582
|
+
phone?: string | undefined;
|
|
595
583
|
provider: "imessage";
|
|
596
584
|
storage?: {
|
|
597
585
|
access_key_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/messaging/contracts.ts","../../../src/modules/messaging/client.ts","../../../src/modules/messaging/domain.ts","../../../src/modules/messaging/module.ts"],"mappings":";;;;;;cAaa;cAEA,2BAAyB,EAAA;;;;;;;;;;;;;;cAoBzB,6BAA2B,EAAA;;;;;;;;;;;;GAGtC,EAAA,KAAA;cAEW,0BAAwB,EAAA;;;;;;;;;;;;GAGnC,EAAA,KAAA;cAEW,0BAAwB,EAAA;;;;;;;;;;;;;;GAGnC,EAAA,KAAA;cAEW,6BAA2B,EAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/messaging/contracts.ts","../../../src/modules/messaging/client.ts","../../../src/modules/messaging/domain.ts","../../../src/modules/messaging/module.ts"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { d as isImessageDefiniteRejection, f as isImessageOutcomeUnknown, h as imessageAuthSchema, m as MAX_MEDIA_BYTES } from "../../client-CCKGsTeI.js";
|
|
2
1
|
import { t as ToolError } from "../../errors-DoSpNHvs.js";
|
|
3
|
-
import { n as defineModule, r as defineTool } from "../../define-
|
|
2
|
+
import { n as defineModule, r as defineTool } from "../../define-ieoksEQ0.js";
|
|
4
3
|
import { n as requireAuth } from "../../provider-CgDAlg6K.js";
|
|
5
4
|
import { n as bytesToBase64, t as base64ToBytes } from "../../bytes-BxpimpQx.js";
|
|
6
|
-
import { m as s3AuthSchema, p as S3Client } from "../../s3-
|
|
5
|
+
import { m as s3AuthSchema, p as S3Client } from "../../s3-Dj7Teh-A.js";
|
|
7
6
|
import { n as runBatchItems, t as batchResultSchema } from "../../batch-Co1ujeAW.js";
|
|
7
|
+
import { d as ImessageClient, g as imessageAuthSchema, h as MAX_MEDIA_BYTES, m as isImessageOutcomeUnknown, p as isImessageDefiniteRejection } from "../../imessage-CH49-sFn.js";
|
|
8
8
|
import { n as createTypingPulse, t as createLiveMessage } from "../../transport-B4vn-XiQ.js";
|
|
9
|
-
import { A as slackAuthSchema, C as isSlackOutcomeUnknown, S as isSlackDefiniteRejection, b as SlackClient, w as MAX_MEDIA_BYTES$1 } from "../../slack-
|
|
10
|
-
import { _ as isTeamsOutcomeUnknown, b as teamsAuthSchema, g as isTeamsDefiniteRejection, m as TeamsClient, v as MAX_MEDIA_BYTES$2 } from "../../teams-
|
|
11
|
-
import { _ as isTelegramOutcomeUnknown, b as telegramAuthSchema, g as isTelegramDefiniteRejection, m as TelegramClient, v as MAX_MEDIA_BYTES$3 } from "../../telegram-
|
|
9
|
+
import { A as slackAuthSchema, C as isSlackOutcomeUnknown, S as isSlackDefiniteRejection, b as SlackClient, w as MAX_MEDIA_BYTES$1 } from "../../slack-AjJDNnXJ.js";
|
|
10
|
+
import { _ as isTeamsOutcomeUnknown, b as teamsAuthSchema, g as isTeamsDefiniteRejection, m as TeamsClient, v as MAX_MEDIA_BYTES$2 } from "../../teams-CvxYLAi5.js";
|
|
11
|
+
import { _ as isTelegramOutcomeUnknown, b as telegramAuthSchema, g as isTelegramDefiniteRejection, m as TelegramClient, v as MAX_MEDIA_BYTES$3 } from "../../telegram-B_-Jljk3.js";
|
|
12
12
|
import { isError } from "es-toolkit";
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
//#region src/modules/messaging/contracts.ts
|
|
@@ -417,74 +417,56 @@ async function sendMediaBatchSequential(sendOne, input) {
|
|
|
417
417
|
//#region src/modules/messaging/providers/imessage.ts
|
|
418
418
|
/**
|
|
419
419
|
* iMessage provider for the messaging seam.
|
|
420
|
-
* Wraps `ImessageClient` (
|
|
421
|
-
*
|
|
422
|
-
* Vendor client is loaded via dynamic import so edge/browser packaging of the
|
|
423
|
-
* messaging seam does not pull Node-only gRPC peers until iMessage is used.
|
|
420
|
+
* Wraps `ImessageClient` (hosted photon-rest-proxy over HTTP).
|
|
424
421
|
*/
|
|
425
422
|
var ImessageMessagingProvider = class {
|
|
426
|
-
#auth;
|
|
427
|
-
#options;
|
|
428
423
|
#client;
|
|
429
|
-
#ready;
|
|
430
424
|
constructor(auth, options = {}) {
|
|
431
|
-
|
|
432
|
-
this.#
|
|
433
|
-
}
|
|
434
|
-
async #sdk() {
|
|
435
|
-
if (this.#client) return this.#client;
|
|
436
|
-
this.#ready ??= (async () => {
|
|
437
|
-
const { ImessageClient } = await import("../../client-CCKGsTeI.js").then((n) => n.n);
|
|
438
|
-
const { provider: _p, storage: _s, ...vendorAuth } = this.#auth;
|
|
439
|
-
const client = new ImessageClient(vendorAuth, this.#options);
|
|
440
|
-
this.#client = client;
|
|
441
|
-
return client;
|
|
442
|
-
})();
|
|
443
|
-
return this.#ready;
|
|
425
|
+
const { provider: _p, storage: _s, ...vendorAuth } = auth;
|
|
426
|
+
this.#client = new ImessageClient(vendorAuth, options);
|
|
444
427
|
}
|
|
445
428
|
async sendText(input) {
|
|
446
|
-
return { message_id: (await
|
|
429
|
+
return { message_id: (await this.#client.sendText({
|
|
447
430
|
chat_id: input.chat_id,
|
|
448
431
|
text: input.text
|
|
449
432
|
})).message_id };
|
|
450
433
|
}
|
|
451
434
|
async editText(input) {
|
|
452
|
-
return { message_id: (await
|
|
435
|
+
return { message_id: (await this.#client.editText({
|
|
453
436
|
chat_id: input.chat_id,
|
|
454
437
|
message_id: input.message_id,
|
|
455
438
|
text: input.text
|
|
456
|
-
})).message_id
|
|
439
|
+
})).message_id };
|
|
457
440
|
}
|
|
458
441
|
async sendChatAction(input) {
|
|
459
|
-
await
|
|
442
|
+
await this.#client.sendChatAction({
|
|
460
443
|
chat_id: input.chat_id,
|
|
461
444
|
action: input.action
|
|
462
445
|
});
|
|
463
446
|
}
|
|
464
447
|
async stopTyping(input) {
|
|
465
|
-
await
|
|
448
|
+
await this.#client.stopTyping({ chat_id: input.chat_id });
|
|
466
449
|
}
|
|
467
450
|
async setReaction(input) {
|
|
468
|
-
return { message_id: (await
|
|
451
|
+
return { message_id: (await this.#client.setReaction({
|
|
469
452
|
chat_id: input.chat_id,
|
|
470
453
|
message_id: input.message_id,
|
|
471
454
|
emoji: input.emoji
|
|
472
455
|
})).message_id };
|
|
473
456
|
}
|
|
474
457
|
/**
|
|
475
|
-
* Clears via
|
|
476
|
-
* `message_id` is the **target** message guid.
|
|
458
|
+
* Clears via proxy target message_id + emoji (same contract as setReaction).
|
|
477
459
|
*/
|
|
478
460
|
async clearReaction(input) {
|
|
479
461
|
if (!input.emoji) throw new ToolError("iMessage clearReaction requires emoji (same tapback/emoji used when setting)", { code: "bad_input" });
|
|
480
|
-
await
|
|
462
|
+
await this.#client.clearReaction({
|
|
481
463
|
chat_id: input.chat_id,
|
|
482
464
|
message_id: input.message_id,
|
|
483
465
|
emoji: input.emoji
|
|
484
466
|
});
|
|
485
467
|
}
|
|
486
468
|
async sendMedia(input) {
|
|
487
|
-
return { message_id: (await
|
|
469
|
+
return { message_id: (await this.#client.sendMedia({
|
|
488
470
|
chat_id: input.chat_id,
|
|
489
471
|
kind: input.kind,
|
|
490
472
|
body_base64: input.body_base64,
|
|
@@ -497,18 +479,21 @@ var ImessageMessagingProvider = class {
|
|
|
497
479
|
return sendMediaBatchSequential((item) => this.sendMedia(item), input);
|
|
498
480
|
}
|
|
499
481
|
async downloadFile(input) {
|
|
500
|
-
const
|
|
501
|
-
|
|
502
|
-
file_id:
|
|
503
|
-
|
|
482
|
+
const ref = input.chat_id ? {
|
|
483
|
+
chat_id: input.chat_id,
|
|
484
|
+
file_id: input.file_id
|
|
485
|
+
} : splitImessageFileRef(input.file_id);
|
|
486
|
+
return this.#client.downloadFile({
|
|
487
|
+
file_id: ref.file_id,
|
|
488
|
+
...ref.chat_id && { chat_id: ref.chat_id },
|
|
504
489
|
...input.file_name && { file_name: input.file_name }
|
|
505
490
|
});
|
|
506
491
|
}
|
|
507
492
|
async answerCallback(_input) {
|
|
508
|
-
await
|
|
493
|
+
await this.#client.answerCallback({});
|
|
509
494
|
}
|
|
510
495
|
async read(input) {
|
|
511
|
-
await
|
|
496
|
+
await this.#client.read({
|
|
512
497
|
chat_id: input.chat_id,
|
|
513
498
|
...input.message_id && { message_id: input.message_id }
|
|
514
499
|
});
|
|
@@ -835,7 +820,7 @@ var TelegramMessagingProvider = class {
|
|
|
835
820
|
//#endregion
|
|
836
821
|
//#region src/modules/messaging/client.ts
|
|
837
822
|
/**
|
|
838
|
-
* Messaging seam client — picks telegram / slack / teams / imessage from host auth.
|
|
823
|
+
* Messaging seam client — picks telegram / slack / teams / imessage (proxy) from host auth.
|
|
839
824
|
* Resolves ArtifactRef media via optional nested S3 storage before channel calls.
|
|
840
825
|
*/
|
|
841
826
|
function transportOptions(ctx) {
|