fix(photon): upgrade spectrum-ts sidecar to v8.0.0

v8 made `richlink` outbound-only; inbound rich links now arrive as
plain `text`. Remove the `getBalloonBundleId`/`toRichlinkMessage`
branches from the iMessage mapper patch and update the fixture,
lockfile, and README accordingly.
This commit is contained in:
underthestars-zhy 2026-06-26 14:55:47 -07:00 committed by Teknium
parent 5636c22828
commit 4345b3e767
5 changed files with 145 additions and 91 deletions

View file

@ -162,7 +162,8 @@ All env vars are documented in `plugin.yaml`. The most important:
(no `^` range) and installed with `npm ci`, because the SDK ships breaking
majors (v2 removed `defineFusorPlatform`; v3 reworked space construction; v5
split it into `@spectrum-ts/*` packages, with `spectrum-ts` as the umbrella
that re-exports them). A floating range or `npm install spectrum-ts@latest`
that re-exports them; v8 made `richlink` outbound-only, so inbound rich links
now arrive as plain `text`). A floating range or `npm install spectrum-ts@latest`
would let a breaking release take down fresh setups silently. Upgrades are
deliberate:

View file

@ -38,7 +38,7 @@
// On SIGINT/SIGTERM the sidecar calls `app.stop()` (3s graceful) before
// exiting. Logs go to stderr; Python supervises restart.
//
// Requires spectrum-ts 7.x — pinned exactly in package.json because the SDK
// Requires spectrum-ts 8.x — pinned exactly in package.json because the SDK
// ships breaking majors; see README "Upgrading spectrum-ts".
//
// Env vars (required):

View file

@ -9,7 +9,7 @@
"version": "0.4.0",
"hasInstallScript": true,
"dependencies": {
"spectrum-ts": "7.0.0"
"spectrum-ts": "8.0.0"
},
"engines": {
"node": ">=18.17"
@ -96,9 +96,9 @@
}
},
"node_modules/@opentelemetry/core": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.8.0.tgz",
"integrity": "sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
@ -129,6 +129,21 @@
"@opentelemetry/api": "^1.3.0"
}
},
"node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/core": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/exporter-trace-otlp-http": {
"version": "0.218.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.218.0.tgz",
@ -148,6 +163,21 @@
"@opentelemetry/api": "^1.3.0"
}
},
"node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.1.tgz",
@ -197,6 +227,21 @@
"@opentelemetry/api": "^1.3.0"
}
},
"node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/otlp-transformer": {
"version": "0.218.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.218.0.tgz",
@ -217,6 +262,21 @@
"@opentelemetry/api": "^1.3.0"
}
},
"node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.1.tgz",
@ -266,21 +326,6 @@
"@opentelemetry/api": ">=1.3.0 <1.10.0"
}
},
"node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.8.0.tgz",
"integrity": "sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/sdk-logs": {
"version": "0.218.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.218.0.tgz",
@ -299,6 +344,21 @@
"@opentelemetry/api": ">=1.4.0 <1.10.0"
}
},
"node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.1.tgz",
@ -331,6 +391,21 @@
"@opentelemetry/api": ">=1.9.0 <1.10.0"
}
},
"node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.1.tgz",
"integrity": "sha512-QAqIj32AtK6+pEVNG7EOVxHdE06RP+FM5qpiEJ4RtDcFIqKUZHYhl7/7UY5efhwmwNAg7j8QbJVBLxMerc0+gw==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.1.tgz",
@ -364,21 +439,6 @@
"@opentelemetry/api": ">=1.3.0 <1.10.0"
}
},
"node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.8.0.tgz",
"integrity": "sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==",
"license": "Apache-2.0",
"dependencies": {
"@opentelemetry/semantic-conventions": "^1.29.0"
},
"engines": {
"node": "^18.19.0 || >=20.6.0"
},
"peerDependencies": {
"@opentelemetry/api": ">=1.0.0 <1.10.0"
}
},
"node_modules/@opentelemetry/semantic-conventions": {
"version": "1.41.1",
"resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz",
@ -437,19 +497,21 @@
}
},
"node_modules/@photon-ai/otel": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@photon-ai/otel/-/otel-1.0.0.tgz",
"integrity": "sha512-5fACVHN7BtGS+phglVAxun5QLckNUSS4p750oCxR//m9JNVzFQMoLFWfC6DnWBP/W0/+B2yP75+3NMVLodEJEg==",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@photon-ai/otel/-/otel-1.1.0.tgz",
"integrity": "sha512-v6Ai5Anws+gkjzZQirXpuF6VtS4DmSnpx9o208R2mhwqONNp2iqwQx4400C6r8oyqv7mz65tkkTd083kG5/kng==",
"license": "MIT",
"dependencies": {
"@opentelemetry/api": "^1.9.1",
"@opentelemetry/api-logs": "^0.218.0",
"@opentelemetry/context-async-hooks": "^2.7.1",
"@opentelemetry/core": "^2.7.1",
"@opentelemetry/exporter-logs-otlp-http": "^0.218.0",
"@opentelemetry/exporter-trace-otlp-http": "^0.218.0",
"@opentelemetry/resources": "^2.7.1",
"@opentelemetry/sdk-logs": "^0.218.0",
"@opentelemetry/sdk-trace-base": "^2.7.1"
"@opentelemetry/sdk-trace-base": "^2.7.1",
"@opentelemetry/semantic-conventions": "^1.41.1"
},
"engines": {
"node": ">=20"
@ -516,9 +578,9 @@
"license": "MIT"
},
"node_modules/@spectrum-ts/core": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/core/-/core-7.0.0.tgz",
"integrity": "sha512-zZmXHeVmoM8RBgGSlVW46njM/vNM2M35NQOTHu8vzufWp25eOT3ERIry1AX2vbri7X34Le3V9W1lwuQYZ+hufw==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/core/-/core-8.0.0.tgz",
"integrity": "sha512-qcMcx1Vf/hVKzyGkbNfrVf6q7t4Zsnr65Riq843W1ButJQnUf8MhCPwnSOavWYkd8IVXL4XSndqMMdOP9xPJeg==",
"license": "MIT",
"dependencies": {
"@photon-ai/otel": "^1.0.0",
@ -541,9 +603,9 @@
}
},
"node_modules/@spectrum-ts/imessage": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/imessage/-/imessage-7.0.0.tgz",
"integrity": "sha512-j3btkqaxvq21QZRQUCHcamM/8md4bTxa1TWuACToxju3VUl0dafyLDLk6g1Y27DFn3ivo+8ZyLRNi4MiI7HwiA==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/imessage/-/imessage-8.0.0.tgz",
"integrity": "sha512-HjWoAZqXxuRsiY33aiJs4g6u/R8HE4V0/rtDd0wE2b+Hq/U0owDuc6T0+cLjrM/rC03jvVkTCnKSMeJWF+mYUA==",
"license": "MIT",
"dependencies": {
"@photon-ai/advanced-imessage": "^0.12.0",
@ -554,28 +616,28 @@
"zod": "^4.2.1"
},
"peerDependencies": {
"@spectrum-ts/core": "^7.0.0",
"@spectrum-ts/core": "^8.0.0",
"typescript": "^5 || ^6.0.0"
}
},
"node_modules/@spectrum-ts/slack": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/slack/-/slack-7.0.0.tgz",
"integrity": "sha512-sDNBUE6oObEuu9qgUVyX47sJ4uB6EbNYlMH09KBjBCYOrnYvuNox2n1I7xnKu3c2zKV3hSQluP7b9+1o3jubTA==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/slack/-/slack-8.0.0.tgz",
"integrity": "sha512-UHLL0xxThDUBPYGbT2ms9Xq5B8dSQy3SoRZX88a04i649UebnjKg9cPU2amxA8gzRcARkQrfLFtq0CFz1jXcfw==",
"license": "MIT",
"dependencies": {
"@photon-ai/slack": "^0.2.0",
"zod": "^4.2.1"
},
"peerDependencies": {
"@spectrum-ts/core": "^7.0.0",
"@spectrum-ts/core": "^8.0.0",
"typescript": "^5 || ^6.0.0"
}
},
"node_modules/@spectrum-ts/telegram": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/telegram/-/telegram-7.0.0.tgz",
"integrity": "sha512-W+OGwH4S7aOMZ7/KHwsVZsGbs+9MqEUK83g10kJmOpVQxVR7Bp9jkQTBvNJlP++ilJhb5ETow+67ky+fMA1yfA==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/telegram/-/telegram-8.0.0.tgz",
"integrity": "sha512-pvF9LrXdcewDthh89viu2lQxcxmmeXfu8MZpymIJSpP66SjCbTwhIbWkVFQbrJbBjLcB3UdyXdQv3dNoquEcRQ==",
"license": "MIT",
"dependencies": {
"@photon-ai/telegram-ts": "10.0.0",
@ -583,27 +645,27 @@
"zod": "^4.2.1"
},
"peerDependencies": {
"@spectrum-ts/core": "^7.0.0",
"@spectrum-ts/core": "^8.0.0",
"typescript": "^5 || ^6.0.0"
}
},
"node_modules/@spectrum-ts/terminal": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/terminal/-/terminal-7.0.0.tgz",
"integrity": "sha512-2fSqdcRogOdk+B+pDVnMj7cdRTlvcFjS6haK/77yjRXhkwx+99hLrTe3skmU/jIVUXTC3Ujy67x0A4R2D3X4Vw==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/terminal/-/terminal-8.0.0.tgz",
"integrity": "sha512-VOyirdioTMAuR7+QNsWt708hG2ZVwt4qhyn/6CXbhnqM/V2FbEu5vNkbOlrxNj4o3y4Lr1mWMih2Fb3udJd+Nw==",
"license": "MIT",
"dependencies": {
"zod": "^4.2.1"
},
"peerDependencies": {
"@spectrum-ts/core": "^7.0.0",
"@spectrum-ts/core": "^8.0.0",
"typescript": "^5 || ^6.0.0"
}
},
"node_modules/@spectrum-ts/whatsapp-business": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/whatsapp-business/-/whatsapp-business-7.0.0.tgz",
"integrity": "sha512-3EPP7bUn9RgURus3J1RCOAyfXSDJ5KehD5mMPfTQysZRyRBM5ePDU6w11p4/DiosLk+5X0hXaA9G9uz1gmNZxQ==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@spectrum-ts/whatsapp-business/-/whatsapp-business-8.0.0.tgz",
"integrity": "sha512-O4mlJi/YtFpnNsiqMo5aReC/nKg66voPp0botJW+MUWZpMlon4/tJ8uVXTUwzQFwOmNRjifVTSD+R/Tll3Kvaw==",
"license": "MIT",
"dependencies": {
"@photon-ai/whatsapp-business": "^0.1.1",
@ -611,7 +673,7 @@
"zod": "^4.2.1"
},
"peerDependencies": {
"@spectrum-ts/core": "^7.0.0",
"@spectrum-ts/core": "^8.0.0",
"typescript": "^5 || ^6.0.0"
}
},
@ -1299,15 +1361,15 @@
}
},
"node_modules/open-graph-scraper": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/open-graph-scraper/-/open-graph-scraper-6.11.0.tgz",
"integrity": "sha512-KkO3qMMzJj9KYGtCl19dRtncb+RuBiG/P9BgukcAG4p2w9wSAWTE90vL6/xqth1K9ThkYF/+xfTGrVvU79TJtQ==",
"version": "6.12.0",
"resolved": "https://registry.npmjs.org/open-graph-scraper/-/open-graph-scraper-6.12.0.tgz",
"integrity": "sha512-x0fS3eHxdCox+rFBhQSVe+qBznSPn1pspp8A4BoaVEkiECZEwagEb8z06swLfaFFE2gefj1BvEBeJmdeGTDnYw==",
"license": "MIT",
"dependencies": {
"chardet": "^2.1.1",
"cheerio": "^1.1.2",
"iconv-lite": "^0.7.0",
"undici": "^7.16.0"
"chardet": "^2.2.0",
"cheerio": "^1.2.0",
"iconv-lite": "^0.7.2",
"undici": "^7.28.0"
},
"engines": {
"node": ">=20.0.0"
@ -1541,17 +1603,17 @@
}
},
"node_modules/spectrum-ts": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/spectrum-ts/-/spectrum-ts-7.0.0.tgz",
"integrity": "sha512-YdfU5CEZKQL7feyyQylwbzwG+f7Kk4h7OZxztok5iNdYGY1dTpUvJrTpkkLCwXOewsJR9M2n4os5hmJvUWeO6g==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/spectrum-ts/-/spectrum-ts-8.0.0.tgz",
"integrity": "sha512-MY/GeqWZ+aptIpG6q0385eSizxiqNo0bAEvEfSqI1ObifhsLTbxnak1ibOpfKIJF38+gR6x9hf50WXetPE36Xw==",
"license": "MIT",
"dependencies": {
"@spectrum-ts/core": "7.0.0",
"@spectrum-ts/imessage": "7.0.0",
"@spectrum-ts/slack": "7.0.0",
"@spectrum-ts/telegram": "7.0.0",
"@spectrum-ts/terminal": "7.0.0",
"@spectrum-ts/whatsapp-business": "7.0.0"
"@spectrum-ts/core": "8.0.0",
"@spectrum-ts/imessage": "8.0.0",
"@spectrum-ts/slack": "8.0.0",
"@spectrum-ts/telegram": "8.0.0",
"@spectrum-ts/terminal": "8.0.0",
"@spectrum-ts/whatsapp-business": "8.0.0"
}
},
"node_modules/string_decoder": {

View file

@ -13,7 +13,7 @@
"node": ">=18.17"
},
"dependencies": {
"spectrum-ts": "7.0.0"
"spectrum-ts": "8.0.0"
},
"overrides": {
"protobufjs": "8.6.1",