@vinaverse/server 0.0.0-stage → 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/README.md +165 -2
  2. package/dist/api.cjs +528 -0
  3. package/dist/api.cjs.map +1 -0
  4. package/dist/api.d.cts +453 -0
  5. package/dist/api.d.ts +453 -0
  6. package/dist/api.js +516 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/chunk-FEEJNQXV.js +64 -0
  9. package/dist/chunk-FEEJNQXV.js.map +1 -0
  10. package/dist/chunk-GTPMQKGX.js +277 -0
  11. package/dist/chunk-GTPMQKGX.js.map +1 -0
  12. package/dist/chunk-NPXO6SMZ.js +84 -0
  13. package/dist/chunk-NPXO6SMZ.js.map +1 -0
  14. package/dist/chunk-SDJFZPHJ.js +141 -0
  15. package/dist/chunk-SDJFZPHJ.js.map +1 -0
  16. package/dist/express.cjs +397 -0
  17. package/dist/express.cjs.map +1 -0
  18. package/dist/express.d.cts +43 -0
  19. package/dist/express.d.ts +43 -0
  20. package/dist/express.js +87 -0
  21. package/dist/express.js.map +1 -0
  22. package/dist/fastify.cjs +363 -0
  23. package/dist/fastify.cjs.map +1 -0
  24. package/dist/fastify.d.cts +62 -0
  25. package/dist/fastify.d.ts +62 -0
  26. package/dist/fastify.js +54 -0
  27. package/dist/fastify.js.map +1 -0
  28. package/dist/hono.cjs +421 -0
  29. package/dist/hono.cjs.map +1 -0
  30. package/dist/hono.d.cts +21 -0
  31. package/dist/hono.d.ts +21 -0
  32. package/dist/hono.js +34 -0
  33. package/dist/hono.js.map +1 -0
  34. package/dist/index.cjs +1481 -0
  35. package/dist/index.cjs.map +1 -0
  36. package/dist/index.d.cts +196 -0
  37. package/dist/index.d.ts +196 -0
  38. package/dist/index.js +920 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/lambda.cjs +405 -0
  41. package/dist/lambda.cjs.map +1 -0
  42. package/dist/lambda.d.cts +53 -0
  43. package/dist/lambda.d.ts +53 -0
  44. package/dist/lambda.js +86 -0
  45. package/dist/lambda.js.map +1 -0
  46. package/dist/nonces-scwljZwl.d.cts +92 -0
  47. package/dist/nonces-scwljZwl.d.ts +92 -0
  48. package/dist/provider-BqfTvF3g.d.ts +2016 -0
  49. package/dist/provider-Miaa9V7I.d.cts +2016 -0
  50. package/dist/stores.cjs +315 -0
  51. package/dist/stores.cjs.map +1 -0
  52. package/dist/stores.d.cts +52 -0
  53. package/dist/stores.d.ts +52 -0
  54. package/dist/stores.js +306 -0
  55. package/dist/stores.js.map +1 -0
  56. package/dist/testing.cjs +135 -0
  57. package/dist/testing.cjs.map +1 -0
  58. package/dist/testing.d.cts +29 -0
  59. package/dist/testing.d.ts +29 -0
  60. package/dist/testing.js +49 -0
  61. package/dist/testing.js.map +1 -0
  62. package/dist/vinaverse-v1.d-BVc4uyUd.d.cts +3460 -0
  63. package/dist/vinaverse-v1.d-BVc4uyUd.d.ts +3460 -0
  64. package/package.json +226 -4
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/testing.ts"],"names":[],"mappings":"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","file":"testing.js","sourcesContent":["// For the tenant's own tests: sign a body the way Vinaverse does, so a test can\n// deliver a webhook to its route without the Vinaverse API.\n//\n// import { signWebhook } from '@vinaverse/server/testing';\n// const header = await signWebhook({ body, secret });\nimport { bytesToHex, concat, hmacKey, utf8 } from './internal/bytes.js';\nimport { toolSigningString } from './tools/signature.js';\nimport { subtleCrypto, webCrypto } from './webhooks/crypto.js';\n\nexport interface SignWebhookOptions {\n /** The exact body to send. */\n body: string | Uint8Array;\n /** One signing secret, or several (one `v1` each, as during a rotation). */\n secret: string | readonly string[];\n /** The signature's time; default now. */\n timestamp?: Date;\n}\n\n/** The `Vinaverse-Signature` header value for `body`. */\nexport async function signWebhook(\n options: SignWebhookOptions,\n): Promise<string> {\n const t = Math.floor((options.timestamp ?? new Date()).getTime() / 1000);\n const body =\n typeof options.body === 'string' ? utf8(options.body) : options.body;\n const message = concat(utf8(`${t}.`), body);\n const subtle = await subtleCrypto();\n const secrets =\n typeof options.secret === 'string' ? [options.secret] : options.secret;\n const parts = [`t=${t}`];\n for (const secret of secrets) {\n const key = await hmacKey(secret, 'sign');\n const mac = new Uint8Array(await subtle.sign('HMAC', key, message));\n parts.push(`v1=${bytesToHex(mac)}`);\n }\n return parts.join(',');\n}\n\nexport interface SignToolCallOptions {\n /** The tool signing secret, or several (one `v2` each, as during a rotation). */\n secret: string | readonly string[];\n method: string;\n /** The request target as it will be sent: path and query, percent-escaped. */\n target: string;\n /** The session's delegated token. */\n token: string;\n /** The exact body, if any. */\n body?: string | Uint8Array | undefined;\n /** The signature's time; default now. */\n timestamp?: Date;\n /** The nonce; default a fresh one (32 URL-safe characters). */\n nonce?: string;\n}\n\n/** The `Vinaverse-Signature` value (signature v2) Vinaverse would send with this tool call. */\nexport async function signToolCall(\n options: SignToolCallOptions,\n): Promise<string> {\n const t = Math.floor((options.timestamp ?? new Date()).getTime() / 1000);\n const n = options.nonce ?? (await freshNonce());\n const body =\n typeof options.body === 'string' ? utf8(options.body) : options.body;\n const message = await toolSigningString({\n t,\n n,\n method: options.method,\n target: options.target,\n token: options.token,\n body,\n });\n const subtle = await subtleCrypto();\n const secrets =\n typeof options.secret === 'string' ? [options.secret] : options.secret;\n const parts = [`t=${t}`, `n=${n}`];\n for (const secret of secrets) {\n const key = await hmacKey(secret, 'sign');\n parts.push(\n `v2=${bytesToHex(new Uint8Array(await subtle.sign('HMAC', key, message)))}`,\n );\n }\n return parts.join(',');\n}\n\nasync function freshNonce(): Promise<string> {\n const random = (await webCrypto()).getRandomValues(new Uint8Array(24));\n return btoa(String.fromCharCode(...random))\n .replaceAll('+', '-')\n .replaceAll('/', '_')\n .replaceAll('=', '');\n}\n"]}