@opendatalabs/vana-sdk 3.22.0-pr.208.28eb140 → 3.22.0-pr.208.e9c19e9

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.
@@ -32908,9 +32908,11 @@ function canonicalJsonBytes(value) {
32908
32908
  return textEncoder.encode(JSON.stringify(sortJsonKeys(value)));
32909
32909
  }
32910
32910
  function canonicalJobRequestBytes(request) {
32911
+ validateJobRequest(request);
32911
32912
  return canonicalJsonBytes(request);
32912
32913
  }
32913
32914
  function requestPlaintext(envelope) {
32915
+ validateRequestEnvelope(envelope);
32914
32916
  return canonicalJsonBytes(envelope);
32915
32917
  }
32916
32918
  function resultPlaintext(result) {
@@ -32943,42 +32945,99 @@ function parseObject(plaintext, kind) {
32943
32945
  throw new JobEnvelopeError(`Invalid ${kind}: malformed JSON`);
32944
32946
  }
32945
32947
  }
32948
+ function isPlainObject2(value) {
32949
+ if (value === null || typeof value !== "object") return false;
32950
+ const prototype = Object.getPrototypeOf(value);
32951
+ return prototype === Object.prototype || prototype === null;
32952
+ }
32953
+ function requirePlainObject(value, field, kind) {
32954
+ if (!isPlainObject2(value)) {
32955
+ throw new JobEnvelopeError(`Invalid ${kind}: invalid ${field}`);
32956
+ }
32957
+ }
32958
+ function requireExactKeys(value, expectedKeys, kind) {
32959
+ for (const key of expectedKeys) {
32960
+ if (!Object.hasOwn(value, key) || value[key] === void 0) {
32961
+ throw new JobEnvelopeError(`Invalid ${kind}: missing ${key}`);
32962
+ }
32963
+ }
32964
+ const expected = new Set(expectedKeys);
32965
+ for (const key of Reflect.ownKeys(value)) {
32966
+ if (!expected.has(key)) {
32967
+ throw new JobEnvelopeError(
32968
+ `Invalid ${kind}: unknown field ${String(key)}`
32969
+ );
32970
+ }
32971
+ }
32972
+ }
32946
32973
  function requireString(value, field, kind) {
32947
32974
  if (typeof value !== "string" || value.length === 0) {
32948
32975
  throw new JobEnvelopeError(`Invalid ${kind}: missing ${field}`);
32949
32976
  }
32950
32977
  }
32951
- function validateRequestEnvelope(value) {
32952
- const request = value.request;
32953
- if (request === null || typeof request !== "object" || Array.isArray(request)) {
32954
- throw new JobEnvelopeError("Invalid job request envelope: missing request");
32955
- }
32956
- const fields = request;
32957
- if (fields.v !== 1) {
32978
+ function validateJobRequest(value) {
32979
+ requirePlainObject(value, "request", "job request");
32980
+ requireExactKeys(
32981
+ value,
32982
+ [
32983
+ "v",
32984
+ "jobId",
32985
+ "owner",
32986
+ "builder",
32987
+ "builderPublicKey",
32988
+ "grantId",
32989
+ "scope",
32990
+ "operation",
32991
+ "pinnedVersion",
32992
+ "deadline"
32993
+ ],
32994
+ "job request"
32995
+ );
32996
+ if (value.v !== JOB_PROTOCOL_VERSION) {
32958
32997
  throw new JobEnvelopeError(
32959
- `Unsupported job request version: ${String(fields.v)}`
32998
+ `Unsupported job request version: ${String(value.v)}`
32960
32999
  );
32961
33000
  }
32962
- for (const field of [
32963
- "jobId",
32964
- "owner",
32965
- "builder",
32966
- "builderPublicKey",
32967
- "grantId",
32968
- "scope",
32969
- "operation",
32970
- "deadline"
32971
- ]) {
32972
- requireString(fields[field], field, "job request");
32973
- }
32974
- if (fields.pinnedVersion !== null && typeof fields.pinnedVersion !== "string") {
33001
+ requireString(value.jobId, "jobId", "job request");
33002
+ if (typeof value.owner !== "string" || !(0, import_viem15.isAddress)(value.owner)) {
33003
+ throw new JobEnvelopeError("Invalid job request: invalid owner");
33004
+ }
33005
+ if (typeof value.builder !== "string" || !(0, import_viem15.isAddress)(value.builder)) {
33006
+ throw new JobEnvelopeError("Invalid job request: invalid builder");
33007
+ }
33008
+ if (typeof value.builderPublicKey !== "string" || !(0, import_viem15.isHex)(value.builderPublicKey)) {
33009
+ throw new JobEnvelopeError("Invalid job request: invalid builderPublicKey");
33010
+ }
33011
+ if (typeof value.grantId !== "string" || !(0, import_viem15.isHex)(value.grantId)) {
33012
+ throw new JobEnvelopeError("Invalid job request: invalid grantId");
33013
+ }
33014
+ requireString(value.scope, "scope", "job request");
33015
+ if (!JOB_OPERATIONS.includes(value.operation)) {
33016
+ throw new JobEnvelopeError("Invalid job request: invalid operation");
33017
+ }
33018
+ if (value.pinnedVersion !== null && typeof value.pinnedVersion !== "string") {
32975
33019
  throw new JobEnvelopeError("Invalid job request: missing pinnedVersion");
32976
33020
  }
33021
+ if (typeof value.deadline !== "string" || !Number.isFinite(Date.parse(value.deadline))) {
33022
+ throw new JobEnvelopeError("Invalid job request: invalid deadline");
33023
+ }
33024
+ return value;
33025
+ }
33026
+ function validateRequestEnvelope(value) {
33027
+ requirePlainObject(value, "envelope", "job request envelope");
33028
+ requireExactKeys(value, ["request", "auth"], "job request envelope");
33029
+ validateJobRequest(value.request);
32977
33030
  requireString(value.auth, "auth", "job request envelope");
32978
33031
  return value;
32979
33032
  }
32980
33033
  function validateResult(value) {
32981
- if (value.v !== 1) {
33034
+ requirePlainObject(value, "result", "job result");
33035
+ requireExactKeys(
33036
+ value,
33037
+ ["v", "jobId", "scope", "version", "contentType", "body"],
33038
+ "job result"
33039
+ );
33040
+ if (value.v !== JOB_PROTOCOL_VERSION) {
32982
33041
  throw new JobEnvelopeError(
32983
33042
  `Unsupported job result version: ${String(value.v)}`
32984
33043
  );
@@ -32994,10 +33053,10 @@ function validateResult(value) {
32994
33053
  }
32995
33054
  return value;
32996
33055
  }
32997
- async function sealJobRequest(e, enclavePublicKey, ecies) {
33056
+ async function sealJobRequest(envelope, enclavePublicKey, ecies) {
32998
33057
  const encrypted = await ecies.encrypt(
32999
33058
  (0, import_viem15.fromHex)(enclavePublicKey, "bytes"),
33000
- requestPlaintext(e)
33059
+ requestPlaintext(envelope)
33001
33060
  );
33002
33061
  return encryptedBytesToBase64(encrypted);
33003
33062
  }
@@ -33010,10 +33069,11 @@ async function openJobRequest(ciphertext, privateKey, ecies) {
33010
33069
  parseObject(plaintext, "job request envelope")
33011
33070
  );
33012
33071
  }
33013
- async function sealJobResult(r, builderPublicKey, ecies) {
33072
+ async function sealJobResult(result, builderPublicKey, ecies) {
33073
+ validateResult(result);
33014
33074
  const encrypted = await ecies.encrypt(
33015
33075
  (0, import_viem15.fromHex)(builderPublicKey, "bytes"),
33016
- resultPlaintext(r)
33076
+ resultPlaintext(result)
33017
33077
  );
33018
33078
  const ciphertext = encryptedBytesToBase64(encrypted);
33019
33079
  const bytes = fromBase64(ciphertext);