@volter/twin-standard 1.0.74 → 1.0.76
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/client-sdks/bun.lock +49 -2
- package/client-sdks/package.json +3 -2
- package/dist/client-sdks/bun.lock +49 -2
- package/dist/client-sdks/package.json +3 -2
- package/dist/src/clients/resend.d.ts +2 -0
- package/dist/src/clients/resend.js +61 -0
- package/package.json +2 -2
- package/src/clients/resend.ts +59 -0
package/client-sdks/bun.lock
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"@sentry/browser": "10.38.0",
|
|
9
9
|
"@sentry/core": "10.38.0",
|
|
10
10
|
"@sentry/node": "10.38.0",
|
|
11
|
+
"resend": "6.6.0",
|
|
11
12
|
"sentry-browser-postiz": "npm:@sentry/browser@10.56.0",
|
|
12
13
|
"sentry-browser-twenty": "npm:@sentry/browser@10.59.0",
|
|
13
14
|
"sentry-node-cal": "npm:@sentry/node@9.46.0",
|
|
@@ -124,11 +125,13 @@
|
|
|
124
125
|
|
|
125
126
|
"@sentry/server-utils": ["@sentry/server-utils@10.73.0", "", { "dependencies": { "@sentry/conventions": "^0.16.0", "@sentry/core": "10.73.0" } }, "sha512-QskripdKFbM/+gipC6mpa2crLwL7+VbkX84IpHg2z9UlYQ1kNKd3aMT+Qk9NLRSw/zu1rSIAvlbWfx4D3rgNAA=="],
|
|
126
127
|
|
|
128
|
+
"@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="],
|
|
129
|
+
|
|
127
130
|
"@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="],
|
|
128
131
|
|
|
129
132
|
"@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="],
|
|
130
133
|
|
|
131
|
-
"@types/node": ["@types/node@
|
|
134
|
+
"@types/node": ["@types/node@22.20.5", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA=="],
|
|
132
135
|
|
|
133
136
|
"@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="],
|
|
134
137
|
|
|
@@ -154,6 +157,10 @@
|
|
|
154
157
|
|
|
155
158
|
"es-module-lexer": ["es-module-lexer@3.0.2", "", {}, "sha512-BuIB67FngDSyQ/dpQNOZybwdEBDUGJQvOqwWr4ha/ufYiqzuEwPkKO2zLhRAgay28tStRIHUeWmszZAJo3GCOg=="],
|
|
156
159
|
|
|
160
|
+
"es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="],
|
|
161
|
+
|
|
162
|
+
"fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="],
|
|
163
|
+
|
|
157
164
|
"forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="],
|
|
158
165
|
|
|
159
166
|
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
|
|
@@ -186,8 +193,14 @@
|
|
|
186
193
|
|
|
187
194
|
"postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="],
|
|
188
195
|
|
|
196
|
+
"querystringify": ["querystringify@2.2.0", "", {}, "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="],
|
|
197
|
+
|
|
189
198
|
"require-in-the-middle": ["require-in-the-middle@8.0.1", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3" } }, "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ=="],
|
|
190
199
|
|
|
200
|
+
"requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="],
|
|
201
|
+
|
|
202
|
+
"resend": ["resend@6.6.0", "", { "dependencies": { "svix": "1.76.1" }, "peerDependencies": { "@react-email/render": "*" }, "optionalPeers": ["@react-email/render"] }, "sha512-d1WoOqSxj5x76JtQMrieNAG1kZkh4NU4f+Je1yq4++JsDpLddhEwnJlNfvkCzvUuZy9ZquWmMMAm2mENd2JvRw=="],
|
|
203
|
+
|
|
191
204
|
"resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="],
|
|
192
205
|
|
|
193
206
|
"semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="],
|
|
@@ -208,7 +221,13 @@
|
|
|
208
221
|
|
|
209
222
|
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
|
|
210
223
|
|
|
211
|
-
"
|
|
224
|
+
"svix": ["svix@1.76.1", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "@types/node": "^22.7.5", "es6-promise": "^4.2.8", "fast-sha256": "^1.3.0", "url-parse": "^1.5.10", "uuid": "^10.0.0" } }, "sha512-CRuDWBTgYfDnBLRaZdKp9VuoPcNUq9An14c/k+4YJ15Qc5Grvf66vp0jvTltd4t7OIRj+8lM1DAgvSgvf7hdLw=="],
|
|
225
|
+
|
|
226
|
+
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
|
227
|
+
|
|
228
|
+
"url-parse": ["url-parse@1.5.10", "", { "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ=="],
|
|
229
|
+
|
|
230
|
+
"uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],
|
|
212
231
|
|
|
213
232
|
"xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="],
|
|
214
233
|
|
|
@@ -232,6 +251,14 @@
|
|
|
232
251
|
|
|
233
252
|
"@sentry/server-utils/@sentry/core": ["@sentry/core@10.73.0", "", { "dependencies": { "@sentry/conventions": "^0.16.0" } }, "sha512-FLO1UgH19RyasVpofu612WCOgb2nEH0dZy+R72d7p65XU9i0wxlMKm3+sgfwKmiSJp1Qhilaaxs4Jg6BbiM5HA=="],
|
|
234
253
|
|
|
254
|
+
"@types/connect/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
255
|
+
|
|
256
|
+
"@types/mysql/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
257
|
+
|
|
258
|
+
"@types/pg/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
259
|
+
|
|
260
|
+
"@types/tedious/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
261
|
+
|
|
235
262
|
"sentry-browser-postiz/@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@10.56.0", "", { "dependencies": { "@sentry/core": "10.56.0" } }, "sha512-I8tZWAFg8SZpD8BFUpglEtSTzhZjacmcThB5/Mlq/iFiiT8mBPG4ZWDWssSfmIBKvZywJZJ83uDA0+uiJU73Tw=="],
|
|
236
263
|
|
|
237
264
|
"sentry-browser-postiz/@sentry-internal/feedback": ["@sentry-internal/feedback@10.56.0", "", { "dependencies": { "@sentry/core": "10.56.0" } }, "sha512-fkRR9JroESTIlErkht3OrH4DXKd/DbPozr2KLdX7boMo31hPu4cL9fuqzwOrwyDPRq9B4j+qEgIWB8JrTbgvmg=="],
|
|
@@ -388,6 +415,14 @@
|
|
|
388
415
|
|
|
389
416
|
"@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.207.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ=="],
|
|
390
417
|
|
|
418
|
+
"@types/connect/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
419
|
+
|
|
420
|
+
"@types/mysql/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
421
|
+
|
|
422
|
+
"@types/pg/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
423
|
+
|
|
424
|
+
"@types/tedious/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
425
|
+
|
|
391
426
|
"sentry-node-cal-web/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="],
|
|
392
427
|
|
|
393
428
|
"sentry-node-cal-web/@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="],
|
|
@@ -432,6 +467,18 @@
|
|
|
432
467
|
|
|
433
468
|
"sentry-node-cal-web/@prisma/instrumentation/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.5.2", "", { "dependencies": { "cjs-module-lexer": "^2.2.0", "es-module-lexer": "^3.0.2", "module-details-from-path": "^1.0.4" } }, "sha512-WseIA/4o56+GYO3RmlOPvejYi771OFeJEeK/ejROsr9bdjW+E5NXTOD1Di8TL40Qgg3JJX9aa97Hf8iiSVIKZw=="],
|
|
434
469
|
|
|
470
|
+
"sentry-node-cal/@opentelemetry/instrumentation-mysql/@types/mysql/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
471
|
+
|
|
472
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
473
|
+
|
|
435
474
|
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg-pool/@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="],
|
|
475
|
+
|
|
476
|
+
"sentry-node-cal/@opentelemetry/instrumentation-mysql/@types/mysql/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
477
|
+
|
|
478
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg-pool/@types/pg/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
479
|
+
|
|
480
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
481
|
+
|
|
482
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg-pool/@types/pg/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
436
483
|
}
|
|
437
484
|
}
|
package/client-sdks/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "twin-standard-client-sdks",
|
|
3
3
|
"private": true,
|
|
4
|
-
"description": "The demanded applications' exact
|
|
4
|
+
"description": "The demanded applications' exact SDK versions driven by the standard's client cases. Installed separately for assessment, never by the repository install or a release.",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@sentry/browser": "10.38.0",
|
|
7
7
|
"@sentry/core": "10.38.0",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"sentry-node-cal": "npm:@sentry/node@9.46.0",
|
|
12
12
|
"sentry-node-cal-web": "npm:@sentry/node@10.33.0",
|
|
13
13
|
"sentry-node-postiz": "npm:@sentry/node@10.56.0",
|
|
14
|
-
"sentry-node-twenty": "npm:@sentry/node@10.73.0"
|
|
14
|
+
"sentry-node-twenty": "npm:@sentry/node@10.73.0",
|
|
15
|
+
"resend": "6.6.0"
|
|
15
16
|
}
|
|
16
17
|
}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"@sentry/browser": "10.38.0",
|
|
9
9
|
"@sentry/core": "10.38.0",
|
|
10
10
|
"@sentry/node": "10.38.0",
|
|
11
|
+
"resend": "6.6.0",
|
|
11
12
|
"sentry-browser-postiz": "npm:@sentry/browser@10.56.0",
|
|
12
13
|
"sentry-browser-twenty": "npm:@sentry/browser@10.59.0",
|
|
13
14
|
"sentry-node-cal": "npm:@sentry/node@9.46.0",
|
|
@@ -124,11 +125,13 @@
|
|
|
124
125
|
|
|
125
126
|
"@sentry/server-utils": ["@sentry/server-utils@10.73.0", "", { "dependencies": { "@sentry/conventions": "^0.16.0", "@sentry/core": "10.73.0" } }, "sha512-QskripdKFbM/+gipC6mpa2crLwL7+VbkX84IpHg2z9UlYQ1kNKd3aMT+Qk9NLRSw/zu1rSIAvlbWfx4D3rgNAA=="],
|
|
126
127
|
|
|
128
|
+
"@stablelib/base64": ["@stablelib/base64@1.0.1", "", {}, "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ=="],
|
|
129
|
+
|
|
127
130
|
"@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="],
|
|
128
131
|
|
|
129
132
|
"@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="],
|
|
130
133
|
|
|
131
|
-
"@types/node": ["@types/node@
|
|
134
|
+
"@types/node": ["@types/node@22.20.5", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA=="],
|
|
132
135
|
|
|
133
136
|
"@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="],
|
|
134
137
|
|
|
@@ -154,6 +157,10 @@
|
|
|
154
157
|
|
|
155
158
|
"es-module-lexer": ["es-module-lexer@3.0.2", "", {}, "sha512-BuIB67FngDSyQ/dpQNOZybwdEBDUGJQvOqwWr4ha/ufYiqzuEwPkKO2zLhRAgay28tStRIHUeWmszZAJo3GCOg=="],
|
|
156
159
|
|
|
160
|
+
"es6-promise": ["es6-promise@4.2.8", "", {}, "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="],
|
|
161
|
+
|
|
162
|
+
"fast-sha256": ["fast-sha256@1.3.0", "", {}, "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ=="],
|
|
163
|
+
|
|
157
164
|
"forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="],
|
|
158
165
|
|
|
159
166
|
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
|
|
@@ -186,8 +193,14 @@
|
|
|
186
193
|
|
|
187
194
|
"postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="],
|
|
188
195
|
|
|
196
|
+
"querystringify": ["querystringify@2.2.0", "", {}, "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="],
|
|
197
|
+
|
|
189
198
|
"require-in-the-middle": ["require-in-the-middle@8.0.1", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3" } }, "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ=="],
|
|
190
199
|
|
|
200
|
+
"requires-port": ["requires-port@1.0.0", "", {}, "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="],
|
|
201
|
+
|
|
202
|
+
"resend": ["resend@6.6.0", "", { "dependencies": { "svix": "1.76.1" }, "peerDependencies": { "@react-email/render": "*" }, "optionalPeers": ["@react-email/render"] }, "sha512-d1WoOqSxj5x76JtQMrieNAG1kZkh4NU4f+Je1yq4++JsDpLddhEwnJlNfvkCzvUuZy9ZquWmMMAm2mENd2JvRw=="],
|
|
203
|
+
|
|
191
204
|
"resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="],
|
|
192
205
|
|
|
193
206
|
"semver": ["semver@7.8.5", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="],
|
|
@@ -208,7 +221,13 @@
|
|
|
208
221
|
|
|
209
222
|
"supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
|
|
210
223
|
|
|
211
|
-
"
|
|
224
|
+
"svix": ["svix@1.76.1", "", { "dependencies": { "@stablelib/base64": "^1.0.0", "@types/node": "^22.7.5", "es6-promise": "^4.2.8", "fast-sha256": "^1.3.0", "url-parse": "^1.5.10", "uuid": "^10.0.0" } }, "sha512-CRuDWBTgYfDnBLRaZdKp9VuoPcNUq9An14c/k+4YJ15Qc5Grvf66vp0jvTltd4t7OIRj+8lM1DAgvSgvf7hdLw=="],
|
|
225
|
+
|
|
226
|
+
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
|
227
|
+
|
|
228
|
+
"url-parse": ["url-parse@1.5.10", "", { "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ=="],
|
|
229
|
+
|
|
230
|
+
"uuid": ["uuid@10.0.0", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],
|
|
212
231
|
|
|
213
232
|
"xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="],
|
|
214
233
|
|
|
@@ -232,6 +251,14 @@
|
|
|
232
251
|
|
|
233
252
|
"@sentry/server-utils/@sentry/core": ["@sentry/core@10.73.0", "", { "dependencies": { "@sentry/conventions": "^0.16.0" } }, "sha512-FLO1UgH19RyasVpofu612WCOgb2nEH0dZy+R72d7p65XU9i0wxlMKm3+sgfwKmiSJp1Qhilaaxs4Jg6BbiM5HA=="],
|
|
234
253
|
|
|
254
|
+
"@types/connect/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
255
|
+
|
|
256
|
+
"@types/mysql/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
257
|
+
|
|
258
|
+
"@types/pg/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
259
|
+
|
|
260
|
+
"@types/tedious/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
261
|
+
|
|
235
262
|
"sentry-browser-postiz/@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@10.56.0", "", { "dependencies": { "@sentry/core": "10.56.0" } }, "sha512-I8tZWAFg8SZpD8BFUpglEtSTzhZjacmcThB5/Mlq/iFiiT8mBPG4ZWDWssSfmIBKvZywJZJ83uDA0+uiJU73Tw=="],
|
|
236
263
|
|
|
237
264
|
"sentry-browser-postiz/@sentry-internal/feedback": ["@sentry-internal/feedback@10.56.0", "", { "dependencies": { "@sentry/core": "10.56.0" } }, "sha512-fkRR9JroESTIlErkht3OrH4DXKd/DbPozr2KLdX7boMo31hPu4cL9fuqzwOrwyDPRq9B4j+qEgIWB8JrTbgvmg=="],
|
|
@@ -388,6 +415,14 @@
|
|
|
388
415
|
|
|
389
416
|
"@prisma/instrumentation/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.207.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ=="],
|
|
390
417
|
|
|
418
|
+
"@types/connect/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
419
|
+
|
|
420
|
+
"@types/mysql/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
421
|
+
|
|
422
|
+
"@types/pg/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
423
|
+
|
|
424
|
+
"@types/tedious/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
425
|
+
|
|
391
426
|
"sentry-node-cal-web/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="],
|
|
392
427
|
|
|
393
428
|
"sentry-node-cal-web/@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="],
|
|
@@ -432,6 +467,18 @@
|
|
|
432
467
|
|
|
433
468
|
"sentry-node-cal-web/@prisma/instrumentation/@opentelemetry/instrumentation/import-in-the-middle": ["import-in-the-middle@3.5.2", "", { "dependencies": { "cjs-module-lexer": "^2.2.0", "es-module-lexer": "^3.0.2", "module-details-from-path": "^1.0.4" } }, "sha512-WseIA/4o56+GYO3RmlOPvejYi771OFeJEeK/ejROsr9bdjW+E5NXTOD1Di8TL40Qgg3JJX9aa97Hf8iiSVIKZw=="],
|
|
434
469
|
|
|
470
|
+
"sentry-node-cal/@opentelemetry/instrumentation-mysql/@types/mysql/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
471
|
+
|
|
472
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
473
|
+
|
|
435
474
|
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg-pool/@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="],
|
|
475
|
+
|
|
476
|
+
"sentry-node-cal/@opentelemetry/instrumentation-mysql/@types/mysql/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
477
|
+
|
|
478
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg-pool/@types/pg/@types/node": ["@types/node@26.6.4", "", { "dependencies": { "undici-types": "~8.9.0" } }, "sha512-ldVPDCzj7fsaGZrLB0NuHuTvJcsNasysBAqMolr/cgxrLd1xbqxIr3XJiPnHHJUCxj5sNF1vnRj9aWnrVh5Jcg=="],
|
|
479
|
+
|
|
480
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
481
|
+
|
|
482
|
+
"sentry-node-cal/@opentelemetry/instrumentation-pg/@types/pg-pool/@types/pg/@types/node/undici-types": ["undici-types@8.9.0", "", {}, "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg=="],
|
|
436
483
|
}
|
|
437
484
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "twin-standard-client-sdks",
|
|
3
3
|
"private": true,
|
|
4
|
-
"description": "The demanded applications' exact
|
|
4
|
+
"description": "The demanded applications' exact SDK versions driven by the standard's client cases. Installed separately for assessment, never by the repository install or a release.",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@sentry/browser": "10.38.0",
|
|
7
7
|
"@sentry/core": "10.38.0",
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
"sentry-node-cal": "npm:@sentry/node@9.46.0",
|
|
12
12
|
"sentry-node-cal-web": "npm:@sentry/node@10.33.0",
|
|
13
13
|
"sentry-node-postiz": "npm:@sentry/node@10.56.0",
|
|
14
|
-
"sentry-node-twenty": "npm:@sentry/node@10.73.0"
|
|
14
|
+
"sentry-node-twenty": "npm:@sentry/node@10.73.0",
|
|
15
|
+
"resend": "6.6.0"
|
|
15
16
|
}
|
|
16
17
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Dub's demanded Resend SDK pin, unchanged, using the enclosing World's vendor routing.
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { standardPackageFile } from "../package-file.js";
|
|
4
|
+
const SEND = 'https://resend.com/docs/api-reference/emails/send-email';
|
|
5
|
+
const GET = 'https://resend.com/docs/api-reference/emails/retrieve-email';
|
|
6
|
+
const BATCH = 'https://resend.com/docs/api-reference/emails/send-batch-emails';
|
|
7
|
+
const ERRORS = 'https://resend.com/docs/api-reference/errors';
|
|
8
|
+
const sdk = createRequire(new URL('package.json', standardPackageFile('client-sdks/')));
|
|
9
|
+
const client = (c) => new (sdk('resend').Resend)(c.env.RESEND_API_KEY ?? '');
|
|
10
|
+
const mail = (subject) => ({ from: 'World <onboarding@resend.dev>', to: ['owner@world.test'], subject, text: 'Synthetic SDK case', html: '<p>Synthetic SDK case</p>', replyTo: ['reply@world.test'] });
|
|
11
|
+
export const cases = [
|
|
12
|
+
{
|
|
13
|
+
id: 'email-send-and-read',
|
|
14
|
+
asks: 'sending an email returns its id; reading that id preserves the sender, recipients, subject, bodies and reply address',
|
|
15
|
+
source: `${SEND} "Send an email"; ${GET} "Retrieve a single sent email."`,
|
|
16
|
+
async run(c) {
|
|
17
|
+
const resend = client(c);
|
|
18
|
+
const sent = await resend.emails.send(mail('SDK single email'));
|
|
19
|
+
if (sent.error || !sent.data?.id)
|
|
20
|
+
return [`emails.send failed: ${JSON.stringify(sent.error)}`];
|
|
21
|
+
const got = await resend.emails.get(sent.data.id);
|
|
22
|
+
if (got.error || !got.data)
|
|
23
|
+
return [`emails.get failed: ${JSON.stringify(got.error)}`];
|
|
24
|
+
const wanted = { id: sent.data.id, from: 'World <onboarding@resend.dev>', to: ['owner@world.test'], subject: 'SDK single email', text: 'Synthetic SDK case', html: '<p>Synthetic SDK case</p>', reply_to: ['reply@world.test'] };
|
|
25
|
+
return Object.entries(wanted).flatMap(([key, value]) => JSON.stringify(got.data[key]) === JSON.stringify(value) ? [] : [`emails.get ${key} differs from the email sent`]);
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'batch-send-and-read',
|
|
30
|
+
asks: 'a batch returns a distinct id for each email and each id reads the corresponding subject',
|
|
31
|
+
source: `${BATCH} "Trigger up to 100 batch emails at once."`,
|
|
32
|
+
async run(c) {
|
|
33
|
+
const resend = client(c);
|
|
34
|
+
const subjects = ['SDK batch one', 'SDK batch two'];
|
|
35
|
+
const sent = await resend.batch.send(subjects.map(mail));
|
|
36
|
+
if (sent.error || !Array.isArray(sent.data?.data))
|
|
37
|
+
return [`batch.send failed: ${JSON.stringify(sent.error)}`];
|
|
38
|
+
const ids = sent.data.data.map((row) => row.id);
|
|
39
|
+
if (ids.length !== subjects.length || new Set(ids).size !== subjects.length || ids.some((id) => typeof id !== 'string' || !id))
|
|
40
|
+
return ['batch.send did not return two distinct email ids'];
|
|
41
|
+
const failures = [];
|
|
42
|
+
for (const [index, id] of ids.entries()) {
|
|
43
|
+
const got = await resend.emails.get(id);
|
|
44
|
+
if (got.error || got.data?.id !== id || got.data?.subject !== subjects[index])
|
|
45
|
+
failures.push(`batch email ${index + 1} did not read back its id and subject`);
|
|
46
|
+
}
|
|
47
|
+
return failures;
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'missing-required-field',
|
|
52
|
+
asks: 'a missing sender returns data=null and the documented 422 missing_required_field error through the SDK',
|
|
53
|
+
source: `${ERRORS} "The request body is missing one or more required fields."`,
|
|
54
|
+
async run(c) {
|
|
55
|
+
const resend = client(c);
|
|
56
|
+
const { from: _from, ...withoutSender } = mail('SDK refused email');
|
|
57
|
+
const answer = await resend.emails.send(withoutSender);
|
|
58
|
+
return answer.data === null && answer.error?.statusCode === 422 && answer.error?.name === 'missing_required_field' ? [] : [`missing sender returned ${JSON.stringify(answer)}`];
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volter/twin-standard",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.76",
|
|
4
4
|
"description": "The Protocol 3 standard for Volter twin packs: the criteria a pack is graded by, the grader, the gate a pack repository and the twin catalog run on every change and submission, and the spec derivation the grade checks against. Pin a version: every place a pack is judged judges by that standard.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"twin",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"yaml": "2.9.0"
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
|
-
"@volter/world-core": "3.0.
|
|
78
|
+
"@volter/world-core": "3.0.84",
|
|
79
79
|
"@volter/world-runtime": "*",
|
|
80
80
|
"playwright": "^1.63.0"
|
|
81
81
|
},
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Dub's demanded Resend SDK pin, unchanged, using the enclosing World's vendor routing.
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { standardPackageFile } from '../package-file.ts';
|
|
4
|
+
import type { ClientCase, ClientContext } from './harness.ts';
|
|
5
|
+
|
|
6
|
+
const SEND = 'https://resend.com/docs/api-reference/emails/send-email';
|
|
7
|
+
const GET = 'https://resend.com/docs/api-reference/emails/retrieve-email';
|
|
8
|
+
const BATCH = 'https://resend.com/docs/api-reference/emails/send-batch-emails';
|
|
9
|
+
const ERRORS = 'https://resend.com/docs/api-reference/errors';
|
|
10
|
+
const sdk = createRequire(new URL('package.json', standardPackageFile('client-sdks/')));
|
|
11
|
+
const client = (c: ClientContext) => new (sdk('resend').Resend)(c.env.RESEND_API_KEY ?? '');
|
|
12
|
+
const mail = (subject: string) => ({ from: 'World <onboarding@resend.dev>', to: ['owner@world.test'], subject, text: 'Synthetic SDK case', html: '<p>Synthetic SDK case</p>', replyTo: ['reply@world.test'] });
|
|
13
|
+
|
|
14
|
+
export const cases: ClientCase[] = [
|
|
15
|
+
{
|
|
16
|
+
id: 'email-send-and-read',
|
|
17
|
+
asks: 'sending an email returns its id; reading that id preserves the sender, recipients, subject, bodies and reply address',
|
|
18
|
+
source: `${SEND} "Send an email"; ${GET} "Retrieve a single sent email."`,
|
|
19
|
+
async run(c) {
|
|
20
|
+
const resend = client(c);
|
|
21
|
+
const sent = await resend.emails.send(mail('SDK single email'));
|
|
22
|
+
if (sent.error || !sent.data?.id) return [`emails.send failed: ${JSON.stringify(sent.error)}`];
|
|
23
|
+
const got = await resend.emails.get(sent.data.id);
|
|
24
|
+
if (got.error || !got.data) return [`emails.get failed: ${JSON.stringify(got.error)}`];
|
|
25
|
+
const wanted = { id: sent.data.id, from: 'World <onboarding@resend.dev>', to: ['owner@world.test'], subject: 'SDK single email', text: 'Synthetic SDK case', html: '<p>Synthetic SDK case</p>', reply_to: ['reply@world.test'] };
|
|
26
|
+
return Object.entries(wanted).flatMap(([key, value]) => JSON.stringify(got.data[key]) === JSON.stringify(value) ? [] : [`emails.get ${key} differs from the email sent`]);
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: 'batch-send-and-read',
|
|
31
|
+
asks: 'a batch returns a distinct id for each email and each id reads the corresponding subject',
|
|
32
|
+
source: `${BATCH} "Trigger up to 100 batch emails at once."`,
|
|
33
|
+
async run(c) {
|
|
34
|
+
const resend = client(c);
|
|
35
|
+
const subjects = ['SDK batch one', 'SDK batch two'];
|
|
36
|
+
const sent = await resend.batch.send(subjects.map(mail));
|
|
37
|
+
if (sent.error || !Array.isArray(sent.data?.data)) return [`batch.send failed: ${JSON.stringify(sent.error)}`];
|
|
38
|
+
const ids = sent.data.data.map((row: { id: string }) => row.id);
|
|
39
|
+
if (ids.length !== subjects.length || new Set(ids).size !== subjects.length || ids.some((id: unknown) => typeof id !== 'string' || !id)) return ['batch.send did not return two distinct email ids'];
|
|
40
|
+
const failures: string[] = [];
|
|
41
|
+
for (const [index, id] of ids.entries()) {
|
|
42
|
+
const got = await resend.emails.get(id);
|
|
43
|
+
if (got.error || got.data?.id !== id || got.data?.subject !== subjects[index]) failures.push(`batch email ${index + 1} did not read back its id and subject`);
|
|
44
|
+
}
|
|
45
|
+
return failures;
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: 'missing-required-field',
|
|
50
|
+
asks: 'a missing sender returns data=null and the documented 422 missing_required_field error through the SDK',
|
|
51
|
+
source: `${ERRORS} "The request body is missing one or more required fields."`,
|
|
52
|
+
async run(c) {
|
|
53
|
+
const resend = client(c);
|
|
54
|
+
const { from: _from, ...withoutSender } = mail('SDK refused email');
|
|
55
|
+
const answer = await resend.emails.send(withoutSender);
|
|
56
|
+
return answer.data === null && answer.error?.statusCode === 422 && answer.error?.name === 'missing_required_field' ? [] : [`missing sender returned ${JSON.stringify(answer)}`];
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
];
|