@keetanetwork/anchor 0.0.13 → 0.0.14

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 (68) hide show
  1. package/lib/certificates.d.ts +83 -21
  2. package/lib/certificates.d.ts.map +1 -1
  3. package/lib/certificates.generated.d.ts +3 -0
  4. package/lib/certificates.generated.d.ts.map +1 -0
  5. package/lib/certificates.generated.js +120 -0
  6. package/lib/certificates.generated.js.map +1 -0
  7. package/lib/certificates.js +579 -117
  8. package/lib/certificates.js.map +1 -1
  9. package/lib/http-server.d.ts +2 -1
  10. package/lib/http-server.d.ts.map +1 -1
  11. package/lib/http-server.js +4 -4
  12. package/lib/http-server.js.map +1 -1
  13. package/lib/resolver.d.ts +2 -1
  14. package/lib/resolver.d.ts.map +1 -1
  15. package/lib/resolver.js.map +1 -1
  16. package/lib/utils/asn1.d.ts +2 -1
  17. package/lib/utils/asn1.d.ts.map +1 -1
  18. package/lib/utils/asn1.js.map +1 -1
  19. package/lib/utils/buffer.d.ts +3 -0
  20. package/lib/utils/buffer.d.ts.map +1 -1
  21. package/lib/utils/buffer.js +26 -0
  22. package/lib/utils/buffer.js.map +1 -1
  23. package/lib/utils/guards.d.ts +14 -0
  24. package/lib/utils/guards.d.ts.map +1 -0
  25. package/lib/utils/guards.js +31 -0
  26. package/lib/utils/guards.js.map +1 -0
  27. package/lib/utils/index.d.ts +3 -1
  28. package/lib/utils/index.d.ts.map +1 -1
  29. package/lib/utils/index.js +3 -1
  30. package/lib/utils/index.js.map +1 -1
  31. package/lib/utils/oid.d.ts +7 -0
  32. package/lib/utils/oid.d.ts.map +1 -0
  33. package/lib/utils/oid.js +22 -0
  34. package/lib/utils/oid.js.map +1 -0
  35. package/lib/utils/signing.d.ts.map +1 -1
  36. package/lib/utils/signing.js +26 -2
  37. package/lib/utils/signing.js.map +1 -1
  38. package/npm-shrinkwrap.json +2 -2
  39. package/package.json +1 -1
  40. package/services/fx/server.js +1 -1
  41. package/services/fx/server.js.map +1 -1
  42. package/services/kyc/client.d.ts.map +1 -1
  43. package/services/kyc/client.js +1 -8
  44. package/services/kyc/client.js.map +1 -1
  45. package/services/kyc/common.d.ts +39 -3
  46. package/services/kyc/common.d.ts.map +1 -1
  47. package/services/kyc/common.generated.d.ts +5 -0
  48. package/services/kyc/common.generated.d.ts.map +1 -0
  49. package/services/kyc/common.generated.js +241 -0
  50. package/services/kyc/common.generated.js.map +1 -0
  51. package/services/kyc/common.js +68 -1
  52. package/services/kyc/common.js.map +1 -1
  53. package/services/kyc/iso20022.generated.d.ts +285 -0
  54. package/services/kyc/iso20022.generated.d.ts.map +1 -0
  55. package/services/kyc/iso20022.generated.js +205 -0
  56. package/services/kyc/iso20022.generated.js.map +1 -0
  57. package/services/kyc/oids.generated.d.ts +83 -0
  58. package/services/kyc/oids.generated.d.ts.map +1 -0
  59. package/services/kyc/oids.generated.js +130 -0
  60. package/services/kyc/oids.generated.js.map +1 -0
  61. package/services/kyc/server.d.ts +141 -0
  62. package/services/kyc/server.d.ts.map +1 -0
  63. package/services/kyc/server.js +183 -0
  64. package/services/kyc/server.js.map +1 -0
  65. package/services/kyc/utils/generate-kyc-schema.d.ts +3 -0
  66. package/services/kyc/utils/generate-kyc-schema.d.ts.map +1 -0
  67. package/services/kyc/utils/generate-kyc-schema.js +1154 -0
  68. package/services/kyc/utils/generate-kyc-schema.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"certificates.js","sourceRoot":"","sources":["../../src/lib/certificates.ts"],"names":[],"mappings":"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","sourcesContent":["import * as KeetaNetClient from '@keetanetwork/keetanet-client';\nimport * as ASN1 from './utils/asn1.js';\nimport { Buffer } from './utils/buffer.js';\nimport crypto from './utils/crypto.js';\nimport { assertNever } from './utils/never.js';\n\n/* ENUM */\ntype AccountKeyAlgorithm = InstanceType<typeof KeetaNetClient.lib.Account>['keyType'];\n\n/**\n * An alias for the KeetaNetAccount type\n */\ntype KeetaNetAccount = ReturnType<typeof KeetaNetClient.lib.Account.fromSeed<AccountKeyAlgorithm>>;\n\n/* -----MOVE TO NODE AND ASN1NAPIRS----- */\nfunction getOID(name: string, oidDB: { [name: string]: string }) {\n\tif (name in oidDB) {\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst oid = oidDB[name as keyof typeof oidDB];\n\t\tif (oid === undefined) {\n\t\t\tthrow(new Error('internal error: OID was undefined'));\n\t\t}\n\n\t\treturn(oid);\n\t} else {\n\t\tthrow(new Error('Unknown algorithm'));\n\t}\n}\n\nfunction lookupByOID(oid: string, oidDB: { [name: string]: string }) {\n\tfor (const [key, value] of Object.entries(oidDB)) {\n\t\tif (key === oid) {\n\t\t\treturn(key);\n\t\t}\n\n\t\tif (value === oid) {\n\t\t\treturn(key);\n\t\t}\n\t}\n\n\tthrow(new Error(`Unknown OID: ${oid}`));\n}\n/* -----END MOVE TO NODE AND ASN1NAPIRS----- */\n\nfunction toJSON(data: unknown): unknown {\n\tconst retval: unknown = JSON.parse(JSON.stringify(data, function(key, convertedValue: unknown) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\tconst value: unknown = this[key];\n\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tif ('publicKeyString' in value && typeof value.publicKeyString === 'object' && value.publicKeyString !== null) {\n\t\t\t\tif ('get' in value.publicKeyString && typeof value.publicKeyString.get === 'function') {\n\t\t\t\t\t/*\n\t\t\t\t\t * If the value has a publicKeyString property that is an\n\t\t\t\t\t * object with a get method, we assume it is a KeetaNetAccount\n\t\t\t\t\t * or similar object and we return the public key string\n\t\t\t\t\t */\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n\t\t\t\t\tconst publicKeyString: unknown = value.publicKeyString.get();\n\t\t\t\t\tif (typeof publicKeyString === 'string') {\n\t\t\t\t\t\treturn(publicKeyString);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\treturn(value.toString('base64'));\n\t\t}\n\t\tif (typeof value === 'bigint') {\n\t\t\treturn(value.toString());\n\t\t}\n\n\t\treturn(convertedValue);\n\t}));\n\n\treturn(retval);\n}\n\n/*\n * Because our public interfaces are ArrayBuffers we often need to convert\n * Buffers to ArrayBuffers -- an alias to the Node function to do that\n */\nconst bufferToArrayBuffer = KeetaNetClient.lib.Utils.Helper.bufferToArrayBuffer.bind(KeetaNetClient.lib.Utils.Helper);\n\n/**\n * Sensitive Attribute Schema\n *\n * ASN.1 Schema:\n * SensitiveAttributes DEFINITIONS ::= BEGIN\n * SensitiveAttribute ::= SEQUENCE {\n * version INTEGER { v1(0) },\n * cipher SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * ivOrNonce OCTET STRING,\n * key OCTET STRING\n * },\n * hashedValue SEQUENCE {\n * encryptedSalt OCTET STRING,\n * algorithm OBJECT IDENTIFIER,\n * value OCTET STRING\n * },\n * encryptedValue OCTET STRING\n * }\n * END\n *\n * https://keeta.notion.site/Keeta-KYC-Certificate-Extensions-13e5da848e588042bdcef81fc40458b7\n *\n * @internal\n */\nconst SensitiveAttributeSchemaInternal: [\n\tversion: 0n,\n\tcipher: [\n\t\talgorithm: typeof ASN1.ValidateASN1.IsOID,\n\t\tiv: typeof ASN1.ValidateASN1.IsOctetString,\n\t\tkey: typeof ASN1.ValidateASN1.IsOctetString\n\t],\n\thashedValue: [\n\t\tencryptedSalt: typeof ASN1.ValidateASN1.IsOctetString,\n\t\talgorithm: typeof ASN1.ValidateASN1.IsOID,\n\t\tvalue: typeof ASN1.ValidateASN1.IsOctetString\n\t],\n\tencryptedValue: typeof ASN1.ValidateASN1.IsOctetString\n] = [\n\t0n,\n\t[\n\t\tASN1.ValidateASN1.IsOID,\n\t\tASN1.ValidateASN1.IsOctetString,\n\t\tASN1.ValidateASN1.IsOctetString\n\t],\n\t[\n\t\tASN1.ValidateASN1.IsOctetString,\n\t\tASN1.ValidateASN1.IsOID,\n\t\tASN1.ValidateASN1.IsOctetString\n\t],\n\tASN1.ValidateASN1.IsOctetString\n];\n\n/**\n * The Sensitive Attribute Schema\n *\n * @internal\n */\ntype SensitiveAttributeSchema = ASN1.SchemaMap<typeof SensitiveAttributeSchemaInternal>;\n\n/*\n * Database of permitted algorithms and their OIDs\n */\nconst sensitiveAttributeOIDDB = {\n\t'aes-256-gcm': '2.16.840.1.101.3.4.1.46',\n\t'aes-256-cbc': '2.16.840.1.101.3.4.1.42',\n\t'sha2-256': '2.16.840.1.101.3.4.2.1',\n\t'sha3-256': '2.16.840.1.101.3.4.2.8'\n};\n\nclass SensitiveAttributeBuilder {\n\treadonly #account: KeetaNetAccount;\n\t#value: Buffer | undefined;\n\n\tconstructor(account: KeetaNetAccount, value?: Buffer | ArrayBuffer | string) {\n\t\tthis.#account = account;\n\n\t\tif (value) {\n\t\t\tthis.set(value);\n\t\t}\n\t}\n\n\tset(value: Buffer | ArrayBuffer | string) {\n\t\tif (Buffer.isBuffer(value)) {\n\t\t\tthis.#value = value;\n\t\t} else if (typeof value === 'string') {\n\t\t\tthis.#value = Buffer.from(value, 'utf-8');\n\t\t} else {\n\t\t\tthis.#value = Buffer.from(value);\n\t\t}\n\n\t\treturn(this);\n\t}\n\n\tasync build() {\n\t\tif (this.#value === undefined) {\n\t\t\tthrow(new Error('Value not set'));\n\t\t}\n\n\t\tconst salt = crypto.randomBytes(32);\n\n\t\tconst hashingAlgorithm = KeetaNetClient.lib.Utils.Hash.HashFunctionName;\n\t\tconst publicKey = Buffer.from(this.#account.publicKey.get());\n\n\t\tconst cipher = 'aes-256-gcm';\n\t\tconst key = crypto.randomBytes(32);\n\t\tconst nonce = crypto.randomBytes(12);\n\t\tconst encryptedKey = await this.#account.encrypt(key);\n\n\t\tfunction encrypt(value: Buffer) {\n\t\t\tconst cipherObject = crypto.createCipheriv(cipher, key, nonce);\n\t\t\tlet retval = cipherObject.update(value);\n\t\t\tretval = Buffer.concat([retval, cipherObject.final()]);\n\t\t\treturn(retval);\n\t\t}\n\n\t\tconst encryptedValue = encrypt(this.#value);\n\t\tconst encryptedSalt = encrypt(salt);\n\n\t\tconst saltedValue = Buffer.concat([salt, publicKey, encryptedValue, this.#value]);\n\t\tconst hashedAndSaltedValue = KeetaNetClient.lib.Utils.Hash.Hash(saltedValue);\n\n\t\tconst attributeStructure: SensitiveAttributeSchema = [\n\t\t\t/* Version */\n\t\t\t0n,\n\t\t\t/* Cipher Details */\n\t\t\t[\n\t\t\t\t/* Algorithm */\n\t\t\t\t{ type: 'oid', oid: getOID(cipher, sensitiveAttributeOIDDB) },\n\t\t\t\t/* IV or Nonce */\n\t\t\t\tnonce,\n\t\t\t\t/* Symmetric key, encrypted with the public key of the account */\n\t\t\t\tBuffer.from(encryptedKey)\n\t\t\t],\n\t\t\t/* Hashed Value */\n\t\t\t[\n\t\t\t\t/* Encrypted Salt */\n\t\t\t\tBuffer.from(encryptedSalt),\n\t\t\t\t/* Hashing Algorithm */\n\t\t\t\t{ type: 'oid', oid: getOID(hashingAlgorithm, sensitiveAttributeOIDDB) },\n\t\t\t\t/* Hash of <Encrypted Salt> || <Public Key> || <Value> */\n\t\t\t\tBuffer.from(hashedAndSaltedValue)\n\t\t\t],\n\t\t\t/* Encrypted Value, encrypted with the Cipher above */\n\t\t\tencryptedValue\n\t\t];\n\t\tconst encodedAttributeObject = ASN1.JStoASN1(attributeStructure);\n\n\t\tconst retval = encodedAttributeObject.toBER();\n\n\t\treturn(retval);\n\t}\n}\n\nclass SensitiveAttribute {\n\treadonly #account: KeetaNetAccount;\n\treadonly #info: ReturnType<SensitiveAttribute['decode']>;\n\n\tconstructor(account: KeetaNetAccount, data: Buffer | ArrayBuffer) {\n\t\tthis.#account = account;\n\t\tthis.#info = this.decode(data);\n\t}\n\n\tprivate decode(data: Buffer | ArrayBuffer) {\n\t\tif (Buffer.isBuffer(data)) {\n\t\t\tdata = bufferToArrayBuffer(data);\n\t\t}\n\n\t\tconst dataObject = new ASN1.BufferStorageASN1(data, SensitiveAttributeSchemaInternal);\n\t\tconst decodedAttribute = dataObject.getASN1();\n\n\t\tconst decodedVersion = decodedAttribute[0] + 1n;\n\t\tif (decodedVersion !== 1n) {\n\t\t\tthrow(new Error(`Unsupported Sensitive Attribute version (${decodedVersion})`));\n\t\t}\n\n\t\treturn({\n\t\t\tversion: decodedVersion,\n\t\t\tpublicKey: this.#account.publicKeyString.get(),\n\t\t\tcipher: {\n\t\t\t\talgorithm: lookupByOID(decodedAttribute[1][0].oid, sensitiveAttributeOIDDB),\n\t\t\t\tiv: decodedAttribute[1][1],\n\t\t\t\tkey: decodedAttribute[1][2]\n\t\t\t},\n\t\t\thashedValue: {\n\t\t\t\tencryptedSalt: decodedAttribute[2][0],\n\t\t\t\talgorithm: lookupByOID(decodedAttribute[2][1].oid, sensitiveAttributeOIDDB),\n\t\t\t\tvalue: decodedAttribute[2][2]\n\t\t\t},\n\t\t\tencryptedValue: decodedAttribute[3]\n\t\t});\n\t}\n\n\tasync #decryptValue(value: Buffer) {\n\t\tconst decryptedKey = await this.#account.decrypt(this.#info.cipher.key);\n\t\tconst algorithm = this.#info.cipher.algorithm;\n\t\tconst iv = this.#info.cipher.iv;\n\n\t\tconst cipher = crypto.createDecipheriv(algorithm, Buffer.from(decryptedKey), iv);\n\t\tconst decryptedValue = cipher.update(value);\n\n\t\treturn(decryptedValue);\n\t}\n\n\t/**\n\t * Get the value of the sensitive attribute\n\t *\n\t * This will decrypt the value using the account's private key\n\t * and return the value as an ArrayBuffer\n\t *\n\t * Since sensitive attributes are binary blobs, this returns an\n\t * ArrayBuffer\n\t */\n\tasync get(): Promise<ArrayBuffer> {\n\t\tconst decryptedValue = await this.#decryptValue(this.#info.encryptedValue);\n\n\t\treturn(bufferToArrayBuffer(decryptedValue));\n\t}\n\n\t/**\n\t * Get the value of the sensitive attribute as a string after being\n\t * interpreted as UTF-8 ( @see SensitiveAttribute.get for more information)\n\t */\n\tasync getString(): Promise<string> {\n\t\tconst value = await this.get();\n\t\treturn(Buffer.from(value).toString('utf-8'));\n\t}\n\n\t/**\n\t * Generate a proof that a sensitive attribute is a given value,\n\t * which can be validated by a third party using the certificate\n\t * and the `validateProof` method\n\t */\n\tasync proove(): Promise<{ value: string; hash: { salt: string }}> {\n\t\tconst value = await this.get();\n\t\tconst salt = await this.#decryptValue(this.#info.hashedValue.encryptedSalt);\n\n\t\treturn({\n\t\t\tvalue: Buffer.from(value).toString('base64'),\n\t\t\thash: {\n\t\t\t\tsalt: salt.toString('base64')\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Validate the proof that a sensitive attribute is a given value\n\t */\n\tasync validateProof(proof: Awaited<ReturnType<this['proove']>>): Promise<boolean> {\n\t\tconst plaintextValue = Buffer.from(proof.value, 'base64');\n\t\tconst proofSaltBuffer = Buffer.from(proof.hash.salt, 'base64');\n\n\t\tconst publicKeyBuffer = Buffer.from(this.#account.publicKey.get());\n\t\tconst encryptedValue = this.#info.encryptedValue;\n\n\t\tconst hashedAndSaltedValue = KeetaNetClient.lib.Utils.Hash.Hash(Buffer.concat([proofSaltBuffer, publicKeyBuffer, encryptedValue, plaintextValue]));\n\t\tconst hashedAndSaltedValueBuffer = Buffer.from(hashedAndSaltedValue);\n\n\t\treturn(this.#info.hashedValue.value.equals(hashedAndSaltedValueBuffer));\n\t}\n\n\ttoJSON(): unknown/* XXX:TODO */ {\n\t\treturn(toJSON(this.#info));\n\t}\n}\n\n/**\n * Database of attributes\n */\nconst CertificateAttributeOIDDB = {\n\t'fullName': '1.3.6.1.4.1.62675.1.0',\n\t'dateOfBirth': '1.3.6.1.4.1.62675.1.1',\n\t'address': '1.3.6.1.4.1.62675.1.2',\n\t'email': '1.3.6.1.4.1.62675.1.3',\n\t'phoneNumber': '1.3.6.1.4.1.62675.1.4'\n};\ntype CertificateAttributeNames = keyof typeof CertificateAttributeOIDDB;\n\ntype BaseCertificateBuilderParams = NonNullable<ConstructorParameters<typeof KeetaNetClient.lib.Utils.Certificate.CertificateBuilder>[0]>;\ntype CertificateBuilderParams = Required<Pick<BaseCertificateBuilderParams, 'issuer' | 'validFrom' | 'validTo' | 'serial' | 'hashLib' | 'issuerDN' | 'subjectDN' | 'isCA'> & {\n\t/**\n\t * The key of the subject -- used for Sensitive Attributes as well\n\t * as the certificate Subject\n\t */\n\tsubject: BaseCertificateBuilderParams['subjectPublicKey'];\n}>;\n\n/**\n * ASN.1 Schema for Certificate KYC Attributes Extension\n *\n * KYCAttributes DEFINITIONS ::= BEGIN\n * KYCAttributes ::= SEQUENCE OF Attribute\n * Attribute ::= SEQUENCE {\n * -- Name of the attribute\n * name OBJECT IDENTIFIER,\n * -- Value of this attribute\n * value CHOICE {\n * -- A plain value, not sensitive\n * plainValue [0] IMPLICIT OCTET STRING,\n * -- A sensitive value, encoded as a SensitiveAttribute in DER encoding\n * sensitiveValue [1] IMPLICIT OCTET STRING\n * }\n * }\n * END\n *\n * https://keeta.notion.site/Keeta-KYC-Certificate-Extensions-13e5da848e588042bdcef81fc40458b7\n *\n */\nconst CertificateKYCAttributeSchemaValidation = {\n\tsequenceOf: [ASN1.ValidateASN1.IsOID, {\n\t\tchoice: [\n\t\t\t{ type: 'context' as const, value: 0 as const, kind: 'implicit' as const, contains: ASN1.ValidateASN1.IsOctetString },\n\t\t\t{ type: 'context' as const, value: 1 as const, kind: 'implicit' as const, contains: ASN1.ValidateASN1.IsOctetString }\n\t\t]\n\t}]\n} satisfies ASN1.Schema;\n\n/** @internal */\ntype CertificateKYCAttributeSchema = ASN1.SchemaMap<typeof CertificateKYCAttributeSchemaValidation>;\n\nexport class CertificateBuilder extends KeetaNetClient.lib.Utils.Certificate.CertificateBuilder {\n\treadonly #attributes: { [name: string]: { sensitive: boolean; value: ArrayBuffer | string }} = {};\n\n\t/**\n\t * Map the parameters from the public interface to the internal\n\t * (Certificate library) interface\n\t */\n\tprivate static mapParams(params?: Partial<CertificateBuilderParams>): Partial<BaseCertificateBuilderParams> {\n\t\tconst paramsCopy = { ...params };\n\t\tlet subjectPublicKey;\n\t\tif (paramsCopy.subject) {\n\t\t\tsubjectPublicKey = paramsCopy.subject;\n\t\t\tdelete(paramsCopy.subject);\n\t\t}\n\t\tconst retval: Partial<BaseCertificateBuilderParams> = paramsCopy;\n\t\tif (subjectPublicKey) {\n\t\t\tretval.subjectPublicKey = subjectPublicKey;\n\t\t}\n\t\treturn(retval);\n\t}\n\n\tconstructor(params?: Partial<CertificateBuilderParams>) {\n\t\tsuper(CertificateBuilder.mapParams(params));\n\t}\n\n\t/**\n\t * Set a KYC Attribute to a given value\n\t */\n\tsetAttribute(name: CertificateAttributeNames, sensitive: boolean, value: ArrayBuffer | string): void {\n\t\tthis.#attributes[name] = { sensitive, value };\n\t}\n\n\tprotected async addExtensions(...args: Parameters<InstanceType<typeof KeetaNetClient.lib.Utils.Certificate.CertificateBuilder>['addExtensions']>): ReturnType<InstanceType<typeof KeetaNetClient.lib.Utils.Certificate.CertificateBuilder>['addExtensions']> {\n\t\tconst retval = await super.addExtensions(...args);\n\n\t\tconst subject = args[0].subjectPublicKey;\n\n\t\t/* Encode the attributes */\n\t\tconst certAttributes: CertificateKYCAttributeSchema = [];\n\t\tfor (const [name, attribute] of Object.entries(this.#attributes)) {\n\t\t\tif (!(name in CertificateAttributeOIDDB)) {\n\t\t\t\tthrow(new Error(`Unknown attribute: ${name}`));\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Since we are iteratively building the certificate, we\n\t\t\t * can assume that the attribute is always present in\n\t\t\t * the object\n\t\t\t */\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tconst nameOID = CertificateAttributeOIDDB[name as keyof typeof CertificateAttributeOIDDB];\n\n\t\t\tlet value: Buffer;\n\t\t\tif (attribute.sensitive) {\n\t\t\t\tconst sensitiveAttribute = new SensitiveAttributeBuilder(subject, attribute.value);\n\t\t\t\tvalue = Buffer.from(await sensitiveAttribute.build());\n\t\t\t} else {\n\t\t\t\tif (typeof attribute.value === 'string') {\n\t\t\t\t\tvalue = Buffer.from(attribute.value, 'utf-8');\n\t\t\t\t} else {\n\t\t\t\t\tvalue = Buffer.from(attribute.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcertAttributes.push([{\n\t\t\t\ttype: 'oid',\n\t\t\t\toid: nameOID\n\t\t\t}, {\n\t\t\t\ttype: 'context',\n\t\t\t\tkind: 'implicit',\n\t\t\t\tvalue: attribute.sensitive ? 1 : 0,\n\t\t\t\tcontains: value\n\t\t\t}]);\n\t\t}\n\n\t\tif (certAttributes.length > 0) {\n\t\t\tretval.push(\n\t\t\t\tKeetaNetClient.lib.Utils.Certificate.CertificateBuilder.extension('1.3.6.1.4.1.62675.0.0', certAttributes)\n\t\t\t);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\t/**\n\t * Create a Certificate object from the builder\n\t *\n\t * The parameters passed in are merged with the parameters passed in\n\t * when constructing the builder\n\t */\n\tasync build(params?: Partial<CertificateBuilderParams>): Promise<Certificate> {\n\t\tconst paramsCopy = CertificateBuilder.mapParams(params);\n\t\tconst certificate = await super.buildDER(paramsCopy);\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst certificateObject = new Certificate(certificate, {\n\t\t\t/**\n\t\t\t * Specify the moment as `null` to avoid validation\n\t\t\t * of the certificate's validity period. We don't\n\t\t\t * care if the certificate is expired or not for\n\t\t\t * the purposes of this builder.\n\t\t\t */\n\t\t\tmoment: null\n\t\t});\n\n\t\treturn(certificateObject);\n\t}\n}\n\nexport class Certificate extends KeetaNetClient.lib.Utils.Certificate.Certificate {\n\tprivate readonly subjectKey: KeetaNetAccount;\n\tstatic readonly Builder: typeof CertificateBuilder = CertificateBuilder;\n\n\t/**\n\t * User KYC Attributes\n\t */\n\treadonly attributes: {\n\t\t[name: string]: {\n\t\t\tsensitive: true;\n\t\t\tvalue: SensitiveAttribute;\n\t\t} | {\n\t\t\tsensitive: false;\n\t\t\tvalue: ArrayBuffer;\n\t\t}\n\t} = {};\n\n\tconstructor(input: ConstructorParameters<typeof KeetaNetClient.lib.Utils.Certificate.Certificate>[0], options?: ConstructorParameters<typeof KeetaNetClient.lib.Utils.Certificate.Certificate>[1] & { subjectKey?: KeetaNetAccount }) {\n\t\tsuper(input, options);\n\n\t\tthis.subjectKey = options?.subjectKey ?? this.subjectPublicKey;\n\n\t\tsuper.finalizeConstruction();\n\t}\n\n\tprotected finalizeConstruction(): void {\n\t\t/* Do nothing, we call the super method in the constructor */\n\t}\n\n\tprotected processExtension(id: string, value: ArrayBuffer): boolean {\n\t\tif (super.processExtension(id, value)) {\n\t\t\treturn(true);\n\t\t}\n\n\t\tif (id === '1.3.6.1.4.1.62675.0.0') {\n\t\t\tconst attributesRaw = new ASN1.BufferStorageASN1(value, CertificateKYCAttributeSchemaValidation).getASN1();\n\n\t\t\tfor (const attribute of attributesRaw) {\n\t\t\t\tconst name = lookupByOID(attribute[0].oid, CertificateAttributeOIDDB);\n\t\t\t\tconst valueKind = attribute[1].value;\n\t\t\t\tconst value = bufferToArrayBuffer(attribute[1].contains);\n\n\t\t\t\tswitch (valueKind) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\t/* Plain Value */\n\t\t\t\t\t\tthis.attributes[name] = { sensitive: false, value: value };\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\t/* Sensitive Value */\n\t\t\t\t\t\tthis.attributes[name] = {\n\t\t\t\t\t\t\tsensitive: true,\n\t\t\t\t\t\t\tvalue: new SensitiveAttribute(this.subjectKey, value)\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tassertNever(valueKind);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn(true);\n\t\t}\n\n\t\treturn(false);\n\t}\n}\n\n/** @internal */\nexport const _Testing = {\n\tSensitiveAttributeBuilder,\n\tSensitiveAttribute\n};\n"]}
1
+ {"version":3,"file":"certificates.js","sourceRoot":"","sources":["../../src/lib/certificates.ts"],"names":[],"mappings":"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","sourcesContent":["import * as util from 'util';\nimport * as KeetaNetClient from '@keetanetwork/keetanet-client';\nimport * as oids from '../services/kyc/oids.generated.js';\nimport * as ASN1 from './utils/asn1.js';\nimport { ASN1toJS } from './utils/asn1.js';\nimport type { ASN1AnyJS, ASN1ContextTag } from './utils/asn1.js';\nimport { arrayBufferLikeToBuffer, arrayBufferToBuffer, Buffer, bufferToArrayBuffer } from './utils/buffer.js';\nimport crypto from './utils/crypto.js';\nimport { assertNever } from './utils/never.js';\nimport type { SensitiveAttributeType, CertificateAttributeValue } from '../services/kyc/iso20022.generated.js';\nimport { CertificateAttributeOIDDB, CertificateAttributeSchema, CertificateAttributeFieldNames } from '../services/kyc/iso20022.generated.js';\nimport { hasIndexSignature, isErrorLike, hasValueProp, isContextTagged } from './utils/guards.js';\nimport { getOID, lookupByOID } from './utils/oid.js';\nimport { convertToJSON as convertToJSONUtil } from './utils/json.js';\nimport { EncryptedContainer } from './encrypted-container.js';\nimport { assertSharableCertificateAttributesContentsSchema } from './certificates.generated.js';\n\n/**\n * Short alias for printing a debug representation of an object\n */\nconst DPO = KeetaNetClient.lib.Utils.Helper.debugPrintableObject.bind(KeetaNetClient.lib.Utils.Helper);\n\n/* ENUM */\ntype AccountKeyAlgorithm = InstanceType<typeof KeetaNetClient.lib.Account>['keyType'];\n\n/**\n * An alias for the KeetaNetAccount type\n */\ntype KeetaNetAccount = ReturnType<typeof KeetaNetClient.lib.Account.fromSeed<AccountKeyAlgorithm>>;\nconst KeetaNetAccount: typeof KeetaNetClient.lib.Account = KeetaNetClient.lib.Account;\n\nfunction toJSON(data: unknown): unknown {\n\treturn(convertToJSONUtil(data));\n}\n\n// Generic type guard to align decoded values with generated attribute types\nfunction isAttributeValue<NAME extends CertificateAttributeNames>(\n\t_name: NAME,\n\t_v: unknown\n): _v is CertificateAttributeValue<NAME> {\n\t// Runtime schema validation is already performed by BufferStorageASN1; this guard\n\t// serves to inform TypeScript of the precise type tied to the attribute name.\n\treturn(true);\n}\n\n// Helper to apply type guard once and return the properly typed value\nfunction asAttributeValue<NAME extends CertificateAttributeNames>(\n\tname: NAME,\n\tv: unknown\n): CertificateAttributeValue<NAME> {\n\tif (!isAttributeValue(name, v)) {\n\t\tthrow(new Error('internal error: decoded value did not match expected type'));\n\t}\n\treturn(v);\n}\n\n/**\n * Sensitive Attribute Schema\n *\n * ASN.1 Schema:\n * SensitiveAttributes DEFINITIONS ::= BEGIN\n * SensitiveAttribute ::= SEQUENCE {\n * version INTEGER { v1(0) },\n * cipher SEQUENCE {\n * algorithm OBJECT IDENTIFIER,\n * ivOrNonce OCTET STRING,\n * key OCTET STRING\n * },\n * hashedValue SEQUENCE {\n * encryptedSalt OCTET STRING,\n * algorithm OBJECT IDENTIFIER,\n * value OCTET STRING\n * },\n * encryptedValue OCTET STRING\n * }\n * END\n *\n * https://keeta.notion.site/Keeta-KYC-Certificate-Extensions-13e5da848e588042bdcef81fc40458b7\n *\n * @internal\n */\nconst SensitiveAttributeSchemaInternal: [\n\tversion: 0n,\n\tcipher: [\n\t\talgorithm: typeof ASN1.ValidateASN1.IsOID,\n\t\tiv: typeof ASN1.ValidateASN1.IsOctetString,\n\t\tkey: typeof ASN1.ValidateASN1.IsOctetString\n\t],\n\thashedValue: [\n\t\tencryptedSalt: typeof ASN1.ValidateASN1.IsOctetString,\n\t\talgorithm: typeof ASN1.ValidateASN1.IsOID,\n\t\tvalue: typeof ASN1.ValidateASN1.IsOctetString\n\t],\n\tencryptedValue: typeof ASN1.ValidateASN1.IsOctetString\n] = [\n\t0n,\n\t[\n\t\tASN1.ValidateASN1.IsOID,\n\t\tASN1.ValidateASN1.IsOctetString,\n\t\tASN1.ValidateASN1.IsOctetString\n\t],\n\t[\n\t\tASN1.ValidateASN1.IsOctetString,\n\t\tASN1.ValidateASN1.IsOID,\n\t\tASN1.ValidateASN1.IsOctetString\n\t],\n\tASN1.ValidateASN1.IsOctetString\n];\n\n/**\n * The Sensitive Attribute Schema Internal\n *\n * @internal\n */\ntype SensitiveAttributeSchema = ASN1.SchemaMap<typeof SensitiveAttributeSchemaInternal>;\n\n/*\n * Database of permitted algorithms and their OIDs\n */\nconst sensitiveAttributeOIDDB = {\n\t'aes-256-gcm': oids.AES_256_GCM,\n\t'aes-256-cbc': oids.AES_256_CBC,\n\t'sha2-256': oids.SHA2_256,\n\t'sha3-256': oids.SHA3_256,\n\t'sha256': oids.SHA2_256,\n\t'aes256-gcm': oids.AES_256_GCM,\n\t'aes256-cbc': oids.AES_256_CBC\n};\n\nfunction assertCertificateAttributeNames(name: string): asserts name is CertificateAttributeNames {\n\tif (!(name in CertificateAttributeOIDDB)) {\n\t\tthrow(new Error(`Unknown attribute name: ${name}`));\n\t}\n}\n\nfunction asCertificateAttributeNames(name: string): CertificateAttributeNames {\n\tassertCertificateAttributeNames(name);\n\treturn(name);\n}\n\nfunction encodeAttribute(name: CertificateAttributeNames, value: unknown): ArrayBuffer {\n\tconst schema = CertificateAttributeSchema[name];\n\tconst fieldNames = CertificateAttributeFieldNames[name];\n\n\t// Date type\n\tif (schema === ASN1.ValidateASN1.IsDate) {\n\t\tif (!(util.types.isDate(value))) {\n\t\t\tthrow(new Error('Expected Date value'));\n\t\t}\n\t\tconst asn1 = ASN1.JStoASN1(value);\n\t\tconst der = asn1.toBER(false);\n\t\treturn(der);\n\t}\n\n\tconst MAX_ASN1_VALUE_DEPTH = 8; // Prevent excessive nesting\n\tconst toASN1Value = (input: unknown, depth = 0): ASN1AnyJS => {\n\t\t// Only allow primitives and raw binary that ASN1.JStoASN1 understands.\n\t\tif (util.types.isDate(input)) {\n\t\t\treturn(input);\n\t\t}\n\t\tif (Buffer.isBuffer(input)) {\n\t\t\treturn(input);\n\t\t}\n\t\tif (input instanceof ArrayBuffer) {\n\t\t\treturn(arrayBufferToBuffer(input));\n\t\t}\n\t\tif (typeof input === 'string') {\n\t\t\treturn({ type: 'string', kind: 'utf8', value: input });\n\t\t}\n\t\t/* XXX: Why are numbers and booleans encoded as strings? */\n\t\tif (typeof input === 'number' || typeof input === 'bigint' || typeof input === 'boolean') {\n\t\t\treturn({ type: 'string', kind: 'utf8', value: String(input) });\n\t\t}\n\n\t\tif (Array.isArray(input)) {\n\t\t\tif (depth >= MAX_ASN1_VALUE_DEPTH) {\n\t\t\t\tthrow(new Error('Exceeded maximum ASN.1 value depth'));\n\t\t\t}\n\n\t\t\treturn(input.map(item => toASN1Value(item, depth + 1)));\n\t\t}\n\n\t\tthrow(new Error(`Unsupported ASN.1 value type: ${typeof input}`));\n\t};\n\n\t// Complex object type\n\tif (fieldNames && hasIndexSignature(value) && !Array.isArray(value)) {\n\t\tconst mappedFields = fieldNames.map((fieldName, idx) => {\n\t\t\tconst fieldValue = value[fieldName];\n\t\t\tif (fieldValue === undefined) {return(undefined);}\n\t\t\tconst tag: ASN1ContextTag = {\n\t\t\t\ttype: 'context',\n\t\t\t\tkind: 'explicit',\n\t\t\t\tvalue: idx,\n\t\t\t\tcontains: toASN1Value(fieldValue)\n\t\t\t};\n\t\t\treturn(tag);\n\t\t}).filter(function(computedValue): computedValue is NonNullable<typeof computedValue> {\n\t\t\treturn(computedValue !== undefined);\n\t\t});\n\n\t\tconst asn1 = ASN1.JStoASN1(mappedFields);\n\t\tconst der = asn1.toBER(false);\n\t\treturn(der);\n\t}\n\n\tthrow(new Error(`Unsupported attribute value for encoding: ${JSON.stringify(DPO(value))}`));\n}\n\n// Prepare a value for inclusion in a SensitiveAttribute: pre-encode complex and date types\nfunction encodeForSensitive(\n\tname: CertificateAttributeNames | undefined,\n\tvalue: SensitiveAttributeType | Buffer | ArrayBuffer\n): Buffer {\n\tif (Buffer.isBuffer(value)) { return(value); }\n\tif (value instanceof ArrayBuffer) { return(arrayBufferToBuffer(value)); }\n\tif (typeof value === 'string') {\n\t\tconst asn1 = ASN1.JStoASN1({ type: 'string', kind: 'utf8', value });\n\t\treturn(arrayBufferToBuffer(asn1.toBER(false)));\n\t}\n\n\tif (value instanceof Date) {\n\t\tconst asn1 = ASN1.JStoASN1(value);\n\t\treturn(arrayBufferToBuffer(asn1.toBER(false)));\n\t}\n\n\tif (typeof value === 'object' && value !== null) {\n\t\tif (!name) { throw(new Error('attributeName required for complex types')); }\n\t\tconst encoded = encodeAttribute(name, value);\n\t\treturn(arrayBufferToBuffer(encoded));\n\t}\n\n\treturn(Buffer.from(String(value), 'utf-8'));\n}\n\nasync function decodeAttribute<NAME extends CertificateAttributeNames>(name: NAME, value: ArrayBuffer): Promise<CertificateAttributeValue<NAME>> {\n\tconst schema = CertificateAttributeSchema[name];\n\t// XXX:TODO Fix depth issue\n\t// @ts-ignore\n\tconst decodedUnknown: unknown = new ASN1.BufferStorageASN1(value, schema).getASN1();\n\tconst fieldNames = CertificateAttributeFieldNames[name];\n\n\tlet candidate: unknown;\n\tif (fieldNames && Array.isArray(decodedUnknown)) {\n\t\tconst arr: unknown[] = decodedUnknown;\n\t\tconst result: { [key: string]: unknown } = {};\n\t\tfor (let i = 0; i < fieldNames.length; i++) {\n\t\t\tconst fieldName = fieldNames[i];\n\t\t\tif (!fieldName) {continue;}\n\n\t\t\tconst fieldValue: unknown = arr[i];\n\t\t\tif (fieldValue === undefined) {continue;}\n\t\t\tif (isErrorLike(fieldValue)) {\n\t\t\t\tthrow(new Error(`Field ${fieldName} contains an error: ${fieldValue.message}`));\n\t\t\t}\n\n\t\t\tif (isContextTagged(fieldValue)) {\n\t\t\t\t// unwrap context tag; prefer nested .value if present\n\t\t\t\tresult[fieldName] = hasValueProp(fieldValue.contains) ? fieldValue.contains.value : fieldValue.contains;\n\t\t\t} else if (hasValueProp(fieldValue)) {\n\t\t\t\tresult[fieldName] = fieldValue.value;\n\t\t\t} else {\n\t\t\t\tresult[fieldName] = fieldValue;\n\t\t\t}\n\t\t}\n\t\tcandidate = result;\n\t} else if (hasValueProp(decodedUnknown)) {\n\t\tcandidate = decodedUnknown.value;\n\t} else {\n\t\tcandidate = decodedUnknown;\n\t}\n\n\treturn(asAttributeValue(name, candidate));\n}\n\nclass SensitiveAttributeBuilder {\n\treadonly #account: KeetaNetAccount;\n\t#value: Buffer | undefined;\n\n\tconstructor(account: KeetaNetAccount) {\n\t\tthis.#account = account;\n\t}\n\n\tset(value: Buffer | ArrayBufferLike): this {\n\t\tthis.#value = Buffer.isBuffer(value) ? value : arrayBufferLikeToBuffer(value);\n\t\treturn(this);\n\t}\n\n\tasync build() {\n\t\tif (this.#value === undefined) {\n\t\t\tthrow(new Error('Value not set'));\n\t\t}\n\n\t\tconst salt = crypto.randomBytes(32);\n\n\t\tconst hashingAlgorithm = KeetaNetClient.lib.Utils.Hash.HashFunctionName;\n\t\tconst publicKey = Buffer.from(this.#account.publicKey.get());\n\n\t\tconst cipher = 'aes-256-gcm';\n\t\tconst key = crypto.randomBytes(32);\n\t\tconst nonce = crypto.randomBytes(12);\n\t\tconst encryptedKey = await this.#account.encrypt(bufferToArrayBuffer(key));\n\n\t\tfunction encrypt(value: Buffer) {\n\t\t\tconst cipherObject = crypto.createCipheriv(cipher, key, nonce);\n\t\t\tlet retval = cipherObject.update(value);\n\t\t\tretval = Buffer.concat([retval, cipherObject.final()]);\n\n\t\t\t/*\n\t\t\t * For AES-GCM, the last 16 bytes are the authentication tag\n\t\t\t */\n\t\t\tif (cipher === 'aes-256-gcm') {\n\t\t\t\tconst getAuthTagFn = Reflect.get(cipherObject, 'getAuthTag');\n\t\t\t\tif (typeof getAuthTagFn === 'function') {\n\t\t\t\t\tconst tag: unknown = getAuthTagFn.call(cipherObject);\n\t\t\t\t\tif (!Buffer.isBuffer(tag)) { throw(new Error('getAuthTag did not return a Buffer')); }\n\t\t\t\t\tretval = Buffer.concat([retval, tag]);\n\t\t\t\t} else {\n\t\t\t\t\tthrow(new Error('getAuthTag is not available on cipherObject'));\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn(retval);\n\t\t}\n\n\t\tconst encryptedValue = encrypt(this.#value);\n\t\tconst encryptedSalt = encrypt(arrayBufferLikeToBuffer(salt));\n\n\t\tconst saltedValue = Buffer.concat([salt, publicKey, encryptedValue, this.#value]);\n\t\tconst hashedAndSaltedValue = KeetaNetClient.lib.Utils.Hash.Hash(saltedValue);\n\n\t\tconst attributeStructure: SensitiveAttributeSchema = [\n\t\t\t/* Version */\n\t\t\t0n,\n\t\t\t/* Cipher Details */\n\t\t\t[\n\t\t\t\t/* Algorithm */\n\t\t\t\t{ type: 'oid', oid: getOID(cipher, sensitiveAttributeOIDDB) },\n\t\t\t\t/* IV or Nonce */\n\t\t\t\tnonce,\n\t\t\t\t/* Symmetric key, encrypted with the public key of the account */\n\t\t\t\tBuffer.from(encryptedKey)\n\t\t\t],\n\t\t\t/* Hashed Value */\n\t\t\t[\n\t\t\t\t/* Encrypted Salt */\n\t\t\t\tBuffer.from(encryptedSalt),\n\t\t\t\t/* Hashing Algorithm */\n\t\t\t\t{ type: 'oid', oid: getOID(hashingAlgorithm, sensitiveAttributeOIDDB) },\n\t\t\t\t/* Hash of <Encrypted Salt> || <Public Key> || <Value> */\n\t\t\t\tBuffer.from(hashedAndSaltedValue)\n\t\t\t],\n\t\t\t/* Encrypted Value, encrypted with the Cipher above */\n\t\t\tencryptedValue\n\t\t];\n\n\t\tconst encodedAttributeObject = ASN1.JStoASN1(attributeStructure);\n\n\t\t// Produce canonical DER as ArrayBuffer\n\t\tconst retval = encodedAttributeObject.toBER(false);\n\t\treturn(retval);\n\t}\n}\n\nclass SensitiveAttribute<T = ArrayBuffer> {\n\treadonly #account: KeetaNetAccount;\n\treadonly #info: ReturnType<SensitiveAttribute<T>['decode']>;\n\treadonly #decoder?: (data: Buffer | ArrayBuffer) => T;\n\n\tconstructor(account: KeetaNetAccount, data: Buffer | ArrayBuffer, decoder?: (data: Buffer | ArrayBuffer) => T) {\n\t\tthis.#account = account;\n\t\tthis.#info = this.decode(data);\n\t\tif (decoder) {\n\t\t\tthis.#decoder = decoder;\n\t\t}\n\t}\n\n\tprivate decode(data: Buffer | ArrayBuffer) {\n\t\tif (Buffer.isBuffer(data)) {\n\t\t\tdata = bufferToArrayBuffer(data);\n\t\t}\n\n\t\tlet decodedAttribute;\n\t\ttry {\n\t\t\tconst dataObject = new ASN1.BufferStorageASN1(data, SensitiveAttributeSchemaInternal);\n\t\t\tdecodedAttribute = dataObject.getASN1();\n\t\t} catch {\n\t\t\tconst js = ASN1toJS(data);\n\t\t\tthrow(new Error(`SensitiveAttribute.decode: unexpected DER shape ${JSON.stringify(DPO(js))}`));\n\t\t}\n\n\t\tconst decodedVersion = decodedAttribute[0] + 1n;\n\t\tif (decodedVersion !== 1n) {\n\t\t\tthrow(new Error(`Unsupported Sensitive Attribute version (${decodedVersion})`));\n\t\t}\n\n\t\treturn({\n\t\t\tversion: decodedVersion,\n\t\t\tpublicKey: this.#account.publicKeyString.get(),\n\t\t\tcipher: {\n\t\t\t\talgorithm: lookupByOID(decodedAttribute[1][0].oid, sensitiveAttributeOIDDB),\n\t\t\t\tiv: decodedAttribute[1][1],\n\t\t\t\tkey: decodedAttribute[1][2]\n\t\t\t},\n\t\t\thashedValue: {\n\t\t\t\tencryptedSalt: decodedAttribute[2][0],\n\t\t\t\talgorithm: lookupByOID(decodedAttribute[2][1].oid, sensitiveAttributeOIDDB),\n\t\t\t\tvalue: decodedAttribute[2][2]\n\t\t\t},\n\t\t\tencryptedValue: decodedAttribute[3]\n\t\t});\n\t}\n\n\tasync #decryptValue(value: Buffer) {\n\t\tconst decryptedKey = await this.#account.decrypt(bufferToArrayBuffer(this.#info.cipher.key));\n\t\tconst algorithm = this.#info.cipher.algorithm;\n\t\tconst iv = this.#info.cipher.iv;\n\n\t\tconst cipher = crypto.createDecipheriv(algorithm, Buffer.from(decryptedKey), iv);\n\n\t\t// For AES-GCM, the last 16 bytes are the authentication tag\n\t\tif (algorithm === 'aes-256-gcm') {\n\t\t\tconst authTag = value.subarray(value.length - 16);\n\t\t\tconst ciphertext = value.subarray(0, value.length - 16);\n\n\t\t\t// XXX:TODO Fix typescript unsafe calls\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\tconst setAuthTagFn = Reflect.get(cipher, 'setAuthTag');\n\t\t\tif (typeof setAuthTagFn === 'function') {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access\n\t\t\t\tsetAuthTagFn.call(cipher, authTag);\n\t\t\t} else {\n\t\t\t\tthrow(new Error('setAuthTag is not available on cipher'));\n\t\t\t}\n\n\t\t\tconst decrypted = cipher.update(ciphertext);\n\t\t\tcipher.final(); // Verify auth tag\n\t\t\treturn(decrypted);\n\t\t}\n\n\t\t// For other algorithms (like CBC), just decrypt normally\n\t\tconst decryptedValue = cipher.update(value);\n\t\tcipher.final();\n\t\treturn(decryptedValue);\n\t}\n\n\t/**\n\t * Get the value of the sensitive attribute\n\t *\n\t * This will decrypt the value using the account's private key\n\t * and return the value as an ArrayBuffer\n\t *\n\t * Since sensitive attributes are binary blobs, this returns an\n\t * ArrayBuffer\n\t */\n\tasync get(): Promise<ArrayBuffer> {\n\t\tconst decryptedValue = await this.#decryptValue(arrayBufferLikeToBuffer(this.#info.encryptedValue));\n\t\treturn(bufferToArrayBuffer(decryptedValue));\n\t}\n\n\tasync getValue(): Promise<T> {\n\t\tconst value = await this.get();\n\t\tif (!this.#decoder) {\n\t\t\t/**\n\t\t\t * TypeScript complains that T may not be the correct\n\t\t\t * type here, but gives us no tools to enforce that it\n\t\t\t * is -- it should always be ArrayBuffer if no decoder\n\t\t\t * is provided, but someone could always specify a\n\t\t\t * type parameter in that case and we cannot check\n\t\t\t * that at runtime since T is only a compile-time type.\n\t\t\t */\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\treturn(value as unknown as T);\n\t\t}\n\t\treturn(this.#decoder(value));\n\t}\n\n\t/**\n\t * Generate a proof that a sensitive attribute is a given value,\n\t * which can be validated by a third party using the certificate\n\t * and the `validateProof` method\n\t */\n\tasync getProof(): Promise<{ value: string; hash: { salt: string }}> {\n\t\tconst value = await this.get();\n\t\tconst salt = await this.#decryptValue(arrayBufferLikeToBuffer(this.#info.hashedValue.encryptedSalt));\n\n\t\treturn({\n\t\t\tvalue: Buffer.from(value).toString('base64'),\n\t\t\thash: {\n\t\t\t\tsalt: salt.toString('base64')\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Validate the proof that a sensitive attribute is a given value\n\t */\n\tasync validateProof(proof: Awaited<ReturnType<this['getProof']>>): Promise<boolean> {\n\t\tconst plaintextValue = Buffer.from(proof.value, 'base64');\n\t\tconst proofSaltBuffer = Buffer.from(proof.hash.salt, 'base64');\n\n\t\tconst publicKeyBuffer = Buffer.from(this.#account.publicKey.get());\n\t\tconst encryptedValue = this.#info.encryptedValue;\n\n\t\tconst hashInput = Buffer.concat([proofSaltBuffer, publicKeyBuffer, encryptedValue, plaintextValue]);\n\t\tconst hashedAndSaltedValue = KeetaNetClient.lib.Utils.Hash.Hash(hashInput);\n\t\tconst hashedAndSaltedValueBuffer = Buffer.from(hashedAndSaltedValue);\n\n\t\treturn(this.#info.hashedValue.value.equals(hashedAndSaltedValueBuffer));\n\t}\n\n\ttoJSON(): unknown/* XXX:TODO */ {\n\t\treturn(toJSON(this.#info));\n\t}\n}\n\n/**\n * Type for certificate attribute names (derived from generated OID database)\n */\ntype CertificateAttributeNames = keyof typeof CertificateAttributeOIDDB;\n\ntype BaseCertificateBuilderParams = NonNullable<ConstructorParameters<typeof KeetaNetClient.lib.Utils.Certificate.CertificateBuilder>[0]>;\ntype CertificateBuilderParams = Required<Pick<BaseCertificateBuilderParams, 'issuer' | 'validFrom' | 'validTo' | 'serial' | 'hashLib' | 'issuerDN' | 'subjectDN' | 'isCA'> & {\n\t/**\n\t * The key of the subject -- used for Sensitive Attributes as well\n\t * as the certificate Subject\n\t */\n\tsubject: BaseCertificateBuilderParams['subjectPublicKey'];\n}>;\n\n/**\n * ASN.1 Schema for Certificate KYC Attributes Extension\n *\n * KYCAttributes DEFINITIONS ::= BEGIN\n * KYCAttributes ::= SEQUENCE OF Attribute\n * Attribute ::= SEQUENCE {\n * -- Name of the attribute\n * name OBJECT IDENTIFIER,\n * -- Value of this attribute\n * value CHOICE {\n * -- A plain value, not sensitive\n * plainValue [0] IMPLICIT OCTET STRING,\n * -- A sensitive value, encoded as a SensitiveAttribute in DER encoding\n * sensitiveValue [1] IMPLICIT OCTET STRING\n * }\n * }\n * END\n *\n * https://keeta.notion.site/Keeta-KYC-Certificate-Extensions-13e5da848e588042bdcef81fc40458b7\n *\n */\nconst CertificateKYCAttributeSchemaValidation = {\n\tsequenceOf: [ASN1.ValidateASN1.IsOID, {\n\t\tchoice: [\n\t\t\t{ type: 'context' as const, value: 0 as const, kind: 'implicit' as const, contains: ASN1.ValidateASN1.IsOctetString },\n\t\t\t{ type: 'context' as const, value: 1 as const, kind: 'implicit' as const, contains: ASN1.ValidateASN1.IsOctetString }\n\t\t]\n\t}]\n} satisfies ASN1.Schema;\n\n/** @internal */\ntype CertificateKYCAttributeSchema = ASN1.SchemaMap<typeof CertificateKYCAttributeSchemaValidation>;\n\n// Attribute input type sourced from generated definitions\ntype CertificateAttributeInput<NAME extends CertificateAttributeNames> = CertificateAttributeValue<NAME>;\n\nexport class CertificateBuilder extends KeetaNetClient.lib.Utils.Certificate.CertificateBuilder {\n\treadonly #attributes: {\n\t\t[name: string]: { sensitive: boolean; value: ArrayBuffer }\n\t} = {};\n\n\t/**\n\t * Map the parameters from the public interface to the internal\n\t * (Certificate library) interface\n\t */\n\tprivate static mapParams(params?: Partial<CertificateBuilderParams>): Partial<BaseCertificateBuilderParams> {\n\t\tconst paramsCopy = { ...params };\n\t\tlet subjectPublicKey;\n\t\tif (paramsCopy.subject) {\n\t\t\tsubjectPublicKey = paramsCopy.subject;\n\t\t\tdelete(paramsCopy.subject);\n\t\t}\n\t\tconst retval: Partial<BaseCertificateBuilderParams> = paramsCopy;\n\t\tif (subjectPublicKey) {\n\t\t\tretval.subjectPublicKey = subjectPublicKey;\n\t\t}\n\t\treturn(retval);\n\t}\n\n\tconstructor(params?: Partial<CertificateBuilderParams>) {\n\t\tsuper(CertificateBuilder.mapParams(params));\n\t}\n\n\t/**\n\t * Set a KYC Attribute to a given value.\n\t * The sensitive flag is required.\n\t *\n\t * If an attribute is marked sensitive, the value is encoded\n\t * into the certificate using a commitment scheme so that the\n\t * value can be proven later without revealing it.\n\t */\n\tsetAttribute<NAME extends CertificateAttributeNames>(name: NAME, sensitive: boolean, value: CertificateAttributeInput<NAME>): void {\n\t\t// Non-sensitive path: only primitive schema (string/date) allowed\n\t\tconst schemaValidator = CertificateAttributeSchema[name];\n\t\tlet encoded: ArrayBuffer;\n\t\tif (value instanceof ArrayBuffer) {\n\t\t\tencoded = value;\n\t\t} else if (name in CertificateAttributeSchema) {\n\t\t\t/* XXX: Why do we have two encoding methods ? */\n\t\t\tencoded = bufferToArrayBuffer(encodeForSensitive(name, value));\n\t\t} else if (schemaValidator === ASN1.ValidateASN1.IsDate) {\n\t\t\tif (!(value instanceof Date)) {\n\t\t\t\tthrow(new Error('Expected Date value'));\n\t\t\t}\n\n\t\t\tencoded = encodeAttribute(name, value);\n\t\t} else if (schemaValidator === ASN1.ValidateASN1.IsString && typeof value === 'string') {\n\t\t\tencoded = encodeAttribute(name, value);\n\t\t} else {\n\t\t\tthrow(new Error('Unsupported non-sensitive value type'));\n\t\t}\n\n\t\tthis.#attributes[name] = {\n\t\t\tsensitive: sensitive,\n\t\t\tvalue: encoded\n\t\t};\n\t}\n\n\tprotected async addExtensions(...args: Parameters<InstanceType<typeof KeetaNetClient.lib.Utils.Certificate.CertificateBuilder>['addExtensions']>): ReturnType<InstanceType<typeof KeetaNetClient.lib.Utils.Certificate.CertificateBuilder>['addExtensions']> {\n\t\tconst retval = await super.addExtensions(...args);\n\n\t\tconst subject = args[0].subjectPublicKey;\n\n\t\t/* Encode the attributes */\n\t\tconst certAttributes: CertificateKYCAttributeSchema = [];\n\t\tfor (const [name, attribute] of Object.entries(this.#attributes)) {\n\t\t\tif (!(name in CertificateAttributeOIDDB)) {\n\t\t\t\tthrow(new Error(`Unknown attribute: ${name}`));\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Since we are iteratively building the certificate, we\n\t\t\t * can assume that the attribute is always present in\n\t\t\t * the object\n\t\t\t */\n\t\t\tassertCertificateAttributeNames(name);\n\t\t\tconst nameOID = CertificateAttributeOIDDB[name];\n\n\t\t\tlet value: Buffer;\n\t\t\tif (attribute.sensitive) {\n\t\t\t\tconst builder = new SensitiveAttributeBuilder(subject);\n\t\t\t\tbuilder.set(attribute.value);\n\t\t\t\tvalue = arrayBufferToBuffer(await builder.build());\n\t\t\t} else {\n\t\t\t\tif (typeof attribute.value === 'string') {\n\t\t\t\t\tvalue = Buffer.from(attribute.value, 'utf-8');\n\t\t\t\t} else {\n\t\t\t\t\tvalue = arrayBufferToBuffer(attribute.value);\n\t\t\t\t}\n\t\t\t} certAttributes.push([{\n\t\t\t\ttype: 'oid',\n\t\t\t\toid: nameOID\n\t\t\t}, {\n\t\t\t\ttype: 'context',\n\t\t\t\tkind: 'implicit',\n\t\t\t\tvalue: attribute.sensitive ? 1 : 0,\n\t\t\t\tcontains: value\n\t\t\t}]);\n\t\t}\n\n\t\tif (certAttributes.length > 0) {\n\t\t\tretval.push(\n\t\t\t\tKeetaNetClient.lib.Utils.Certificate.CertificateBuilder.extension(oids.keeta.KYC_ATTRIBUTES, certAttributes)\n\t\t\t);\n\t\t}\n\n\t\treturn(retval);\n\t}\n\n\t/**\n\t * Create a Certificate object from the builder\n\t *\n\t * The parameters passed in are merged with the parameters passed in\n\t * when constructing the builder\n\t */\n\tasync build(params?: Partial<CertificateBuilderParams>): Promise<Certificate> {\n\t\tconst paramsCopy = CertificateBuilder.mapParams(params);\n\t\tconst certificate = await super.buildDER(paramsCopy);\n\t\t// eslint-disable-next-line @typescript-eslint/no-use-before-define\n\t\tconst certificateObject = new Certificate(certificate, {\n\t\t\t/**\n\t\t\t * Specify the moment as `null` to avoid validation\n\t\t\t * of the certificate's validity period. We don't\n\t\t\t * care if the certificate is expired or not for\n\t\t\t * the purposes of this builder.\n\t\t\t */\n\t\t\tmoment: null\n\t\t});\n\n\t\treturn(certificateObject);\n\t}\n}\n\nexport class Certificate extends KeetaNetClient.lib.Utils.Certificate.Certificate {\n\tprivate readonly subjectKey: KeetaNetAccount;\n\tstatic readonly Builder: typeof CertificateBuilder = CertificateBuilder;\n\tstatic readonly SharableAttributes: typeof SharableCertificateAttributes;\n\n\t/**\n * User KYC Attributes\n */\n\treadonly attributes: {\n\t\t[name in CertificateAttributeNames]?: {\n\t\t\tsensitive: true;\n\t\t\tvalue: SensitiveAttribute<CertificateAttributeValue<name>>;\n\t\t} | {\n\t\t\tsensitive: false;\n\t\t\tvalue: ArrayBuffer;\n\t\t}\n\t} = {};\n\n\tconstructor(input: ConstructorParameters<typeof KeetaNetClient.lib.Utils.Certificate.Certificate>[0], options?: ConstructorParameters<typeof KeetaNetClient.lib.Utils.Certificate.Certificate>[1] & { subjectKey?: KeetaNetAccount }) {\n\t\tsuper(input, options);\n\n\t\tthis.subjectKey = options?.subjectKey ?? this.subjectPublicKey;\n\n\t\tsuper.finalizeConstruction();\n\t}\n\n\tprotected finalizeConstruction(): void {\n\t\t/* Do nothing, we call the super method in the constructor */\n\t}\n\n\tprivate setPlainAttribute<NAME extends CertificateAttributeNames>(name: NAME, value: ArrayBuffer): void {\n\t\t// @ts-ignore\n\t\tthis.attributes[name] = { sensitive: false, value } satisfies typeof this.attributes[NAME];\n\t}\n\n\tprivate setSensitiveAttribute<NAME extends CertificateAttributeNames>(name: NAME, value: ArrayBuffer): void {\n\t\tthis.attributes[name] = {\n\t\t\tsensitive: true,\n\t\t\tvalue: new SensitiveAttribute(this.subjectKey, value, decodeAttribute.bind(null, name))\n\t\t} satisfies typeof this.attributes[NAME];\n\t}\n\n\t/**\n\t * Get the underlying value for an attribute.\n\t *\n\t * If the attribute is sensitive, this will decrypt it using the\n\t * subject's private key, otherwise it will return the value.\n\t */\n\tasync getAttributeValue<NAME extends CertificateAttributeNames>(attributeName: NAME): Promise<CertificateAttributeValue<NAME>> {\n\t\tconst attr = this.attributes[attributeName]?.value;\n\t\tif (!attr) {\n\t\t\tthrow(new Error(`Attribute ${attributeName} is not available`));\n\t\t}\n\n\t\tif (attr instanceof SensitiveAttribute) {\n\t\t\tconst raw = await attr.get();\n\t\t\treturn(await decodeAttribute(attributeName, raw));\n\t\t}\n\n\t\t// Non-sensitive: ArrayBuffer or Buffer\n\t\tif (attr instanceof ArrayBuffer || Buffer.isBuffer(attr)) {\n\t\t\treturn(await decodeAttribute(attributeName, attr));\n\t\t}\n\n\t\tthrow(new Error(`Attribute ${attributeName} is not a supported type`));\n\t}\n\n\tprotected processExtension(id: string, value: ArrayBuffer): boolean {\n\t\tif (super.processExtension(id, value)) {\n\t\t\treturn(true);\n\t\t}\n\n\t\tif (id === oids.keeta.KYC_ATTRIBUTES) {\n\t\t\tconst attributesRaw = new ASN1.BufferStorageASN1(value, CertificateKYCAttributeSchemaValidation).getASN1();\n\n\t\t\tfor (const attribute of attributesRaw) {\n\t\t\t\tconst nameString = lookupByOID(attribute[0].oid, CertificateAttributeOIDDB);\n\t\t\t\tconst name = asCertificateAttributeNames(nameString);\n\t\t\t\tconst valueKind = attribute[1].value;\n\t\t\t\tconst value = bufferToArrayBuffer(attribute[1].contains);\n\n\t\t\t\tswitch (valueKind) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\t/* Plain Value */\n\t\t\t\t\t\tthis.setPlainAttribute(name, value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\t/* Sensitive Value */\n\t\t\t\t\t\tthis.setSensitiveAttribute(name, value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tassertNever(valueKind);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn(true);\n\t\t}\n\n\t\treturn(false);\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace SharableCertificateAttributesTypes {\n\texport type ExportOptions = { format?: 'string' | 'arraybuffer' };\n\texport type ImportOptions = { principals?: Set<KeetaNetAccount> | KeetaNetAccount[] | KeetaNetAccount | null };\n\texport type ContentsSchema = {\n\t\tcertificate: string;\n\t\tattributes: {\n\t\t\t[name: string]: {\n\t\t\t\tsensitive: true;\n\t\t\t\tvalue: Awaited<ReturnType<SensitiveAttribute['getProof']>>;\n\t\t\t} | {\n\t\t\t\tsensitive: false;\n\t\t\t\tvalue: string;\n\t\t\t}\n\t\t};\n\t};\n};\ntype SharableCertificateAttributesExportOptions = SharableCertificateAttributesTypes.ExportOptions;\ntype SharableCertificateAttributesImportOptions = SharableCertificateAttributesTypes.ImportOptions;\ntype SharableCertificateAttributesContentsSchema = SharableCertificateAttributesTypes.ContentsSchema;\n\nexport class SharableCertificateAttributes {\n\t#certificate?: Certificate;\n\t#attributes: {\n\t\t[name: string]: {\n\t\t\tsensitive: boolean;\n\t\t\tvalue: ArrayBuffer;\n\t\t}\n\t} = {};\n\n\tprivate container: EncryptedContainer;\n\tprivate populatedFromInit = false;\n\n\tstatic assertCertificateAttributeName: typeof assertCertificateAttributeNames = assertCertificateAttributeNames;\n\n\tconstructor(input: ArrayBuffer | string, options?: SharableCertificateAttributesImportOptions) {\n\t\tlet containerBuffer: Buffer;\n\t\tif (typeof input === 'string') {\n\t\t\t/*\n\t\t\t * Attempt to decode as PEM, but also if not PEM, then return\n\t\t\t * the lines as-is (base64) after removing whitespace\n\t\t\t */\n\t\t\tconst inputLines = input.split(/\\r?\\n/);\n\t\t\tlet base64Lines: string[] | undefined;\n\t\t\tfor (let beginOffset = 0; beginOffset < inputLines.length; beginOffset++) {\n\t\t\t\tconst line = inputLines[beginOffset]?.trim();\n\t\t\t\tif (line?.startsWith('-----BEGIN ')) {\n\t\t\t\t\tlet endIndex = -1;\n\t\t\t\t\tconst matchingEndLine = line.replace('BEGIN', 'END');\n\t\t\t\t\tfor (let endOffset = beginOffset + 1; endOffset < inputLines.length; endOffset++) {\n\t\t\t\t\t\tconst checkEndLine = inputLines[endOffset]?.trim();\n\t\t\t\t\t\tif (checkEndLine === matchingEndLine) {\n\t\t\t\t\t\t\tendIndex = endOffset;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (endIndex === -1) {\n\t\t\t\t\t\tthrow(new Error('Invalid PEM format: missing END line'));\n\t\t\t\t\t}\n\n\t\t\t\t\tbase64Lines = inputLines.slice(beginOffset + 1, endIndex);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (base64Lines === undefined) {\n\t\t\t\tbase64Lines = inputLines;\n\t\t\t}\n\n\t\t\tbase64Lines = base64Lines.map(function(line) {\n\t\t\t\treturn(line.trim());\n\t\t\t}).filter(function(line) {\n\t\t\t\treturn(line.length > 0);\n\t\t\t});\n\n\t\t\tconst base64Content = base64Lines.join('');\n\t\t\tcontainerBuffer = Buffer.from(base64Content, 'base64');\n\t\t} else {\n\t\t\tcontainerBuffer = arrayBufferToBuffer(input);\n\t\t}\n\n\t\tlet principals = options?.principals;\n\t\tif (KeetaNetAccount.isInstance(principals)) {\n\t\t\tprincipals = [principals];\n\t\t} else if (principals instanceof Set) {\n\t\t\tprincipals = Array.from(principals);\n\t\t} else if (principals === undefined) {\n\t\t\tprincipals = null;\n\t\t}\n\n\t\tthis.container = EncryptedContainer.fromEncodedBuffer(containerBuffer, principals);\n\t}\n\n\t/**\n\t * Create a SharableCertificateAttributes from a Certificate\n\t * and a list of attribute names to include -- if no list is\n\t * provided, all attributes are included.\n\t */\n\tstatic async fromCertificate(certificate: Certificate, attributeNames?: CertificateAttributeNames[]): Promise<SharableCertificateAttributes> {\n\t\tif (attributeNames === undefined) {\n\t\t\t/*\n\t\t\t * We know the keys are whatever the Certificate says they are, so\n\t\t\t * we can cast here safely\n\t\t\t */\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tattributeNames = Object.keys(certificate.attributes) as (keyof typeof certificate.attributes)[];\n\t\t}\n\n\t\tconst attributes: SharableCertificateAttributesContentsSchema['attributes'] = {};\n\t\tfor (const name of attributeNames) {\n\t\t\tconst attr = certificate.attributes[name];\n\t\t\t/**\n\t\t\t * Skip missing attributes\n\t\t\t */\n\t\t\tif (!attr) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (attr.sensitive) {\n\t\t\t\tattributes[name] = {\n\t\t\t\t\tsensitive: true,\n\t\t\t\t\tvalue: await attr.value.getProof()\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tattributes[name] = {\n\t\t\t\t\tsensitive: false,\n\t\t\t\t\tvalue: arrayBufferToBuffer(attr.value).toString('base64')\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tconst contentsString = JSON.stringify({\n\t\t\tcertificate: certificate.toPEM(),\n\t\t\tattributes: attributes\n\t\t} satisfies SharableCertificateAttributesContentsSchema);\n\n\t\tconst temporaryUser = KeetaNetAccount.fromSeed(KeetaNetAccount.generateRandomSeed(), 0);\n\t\tconst contentsBuffer = Buffer.from(contentsString, 'utf-8');\n\t\tconst contentsBufferCompressed = await KeetaNetClient.lib.Utils.Buffer.ZlibDeflateAsync(bufferToArrayBuffer(contentsBuffer));\n\t\tconst container = EncryptedContainer.fromPlaintext(arrayBufferToBuffer(contentsBufferCompressed), [temporaryUser], true);\n\t\tconst containerBuffer = await container.getEncodedBuffer();\n\t\tconst retval = new SharableCertificateAttributes(bufferToArrayBuffer(containerBuffer), { principals: temporaryUser });\n\t\tawait retval.revokeAccess(temporaryUser);\n\t\treturn(retval);\n\t}\n\n\tasync grantAccess(principal: KeetaNetAccount): Promise<this> {\n\t\tawait this.container.grantAccess(principal);\n\t\treturn(this);\n\t}\n\n\tasync revokeAccess(principal: KeetaNetAccount): Promise<this> {\n\t\tawait this.container.revokeAccess(principal);\n\t\treturn(this);\n\t}\n\n\tget principals(): KeetaNetAccount[] {\n\t\treturn(this.container.principals);\n\t}\n\n\tasync #populate(): Promise<void> {\n\t\tif (this.populatedFromInit) {\n\t\t\treturn;\n\t\t}\n\t\tthis.populatedFromInit = true;\n\n\t\tconst contentsBuffer = await this.container.getPlaintext();\n\t\tconst contentsBufferDecompressed = await KeetaNetClient.lib.Utils.Buffer.ZlibInflateAsync(bufferToArrayBuffer(contentsBuffer));\n\t\tconst contentsString = Buffer.from(contentsBufferDecompressed).toString('utf-8');\n\t\tconst contentsJSON: unknown = JSON.parse(contentsString);\n\t\tconst contents = assertSharableCertificateAttributesContentsSchema(contentsJSON);\n\n\t\tthis.#certificate = new Certificate(contents.certificate);\n\t\tconst attributePromises = Object.entries(contents.attributes).map(async ([name, attr]): Promise<[string, { sensitive: boolean; value: ArrayBuffer; }]> => {\n\t\t\t/*\n\t\t\t * Get the corresponding attribute from the certificate\n\t\t\t *\n\t\t\t * We actually do not care if `name` is a known attribute\n\t\t\t * because we are not decoding it here, we are just\n\t\t\t * verifying it matches the certificate\n\t\t\t */\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tconst certAttribute = this.#certificate?.attributes[name as CertificateAttributeNames];\n\n\t\t\tif (!certAttribute) {\n\t\t\t\tthrow(new Error(`Attribute ${name} not found in certificate`));\n\t\t\t}\n\n\t\t\tif (certAttribute.sensitive !== attr.sensitive) {\n\t\t\t\tthrow(new Error(`Attribute ${name} sensitivity mismatch with certificate`));\n\t\t\t}\n\n\t\t\tif (!attr.sensitive) {\n\t\t\t\tif (certAttribute.sensitive) {\n\t\t\t\t\tthrow(new Error(`Attribute ${name} sensitivity mismatch with certificate`));\n\t\t\t\t}\n\n\t\t\t\tconst certValue = certAttribute.value;\n\t\t\t\tconst sharedValue = bufferToArrayBuffer(Buffer.from(attr.value, 'base64'));\n\t\t\t\tif (sharedValue.byteLength !== certValue.byteLength || !Buffer.from(sharedValue).equals(Buffer.from(certValue))) {\n\t\t\t\t\tthrow(new Error(`Attribute ${name} value mismatch with certificate`));\n\t\t\t\t}\n\n\t\t\t\treturn([name, {\n\t\t\t\t\tsensitive: false,\n\t\t\t\t\tvalue: sharedValue\n\t\t\t\t}]);\n\t\t\t}\n\n\t\t\tif (!certAttribute.sensitive) {\n\t\t\t\tthrow(new Error(`Attribute ${name} sensitivity mismatch with certificate`));\n\t\t\t}\n\n\t\t\tif (!(await certAttribute.value.validateProof(attr.value))) {\n\t\t\t\tthrow(new Error(`Attribute ${name} proof validation failed`));\n\t\t\t}\n\n\t\t\tconst attrValue = bufferToArrayBuffer(Buffer.from(attr.value.value, 'base64'));\n\n\t\t\treturn([name, {\n\t\t\t\tsensitive: true,\n\t\t\t\tvalue: attrValue\n\t\t\t}]);\n\t\t});\n\t\tconst resolvedAttributes = await Promise.all(attributePromises);\n\t\tthis.#attributes = Object.fromEntries(resolvedAttributes);\n\t}\n\n\tasync getCertificate(): Promise<Certificate> {\n\t\tawait this.#populate();\n\t\tif (!this.#certificate) {\n\t\t\tthrow(new Error('internal error: certificate not populated'));\n\t\t}\n\t\treturn(this.#certificate);\n\t}\n\n\tasync getAttributeBuffer(name: string): Promise<ArrayBuffer | undefined> {\n\t\tawait this.#populate();\n\t\tconst attr = this.#attributes[name];\n\t\treturn(attr?.value);\n\t}\n\n\tasync getAttribute<NAME extends CertificateAttributeNames>(name: NAME): Promise<CertificateAttributeValue<NAME> | undefined> {\n\t\tconst buffer = await this.getAttributeBuffer(name);\n\t\tif (buffer === undefined) {\n\t\t\treturn(undefined);\n\t\t}\n\n\t\tconst retval = await decodeAttribute(name, buffer);\n\n\t\t/* XXX:TODO: Here is where we would look at a reference value\n\t\t * (e.g., URL+hash) and fetch it, and verify it the hash matches\n\t\t * the fetched value\n\t\t *\n\t\t * The schema for references is not yet defined, so this is\n\t\t * left as a TODO for now.\n\t\t *\n\t\t * The return type would also need to be updated to reflect\n\t\t * that we would map referenced types to something like\n\t\t * { data: ArrayBuffer, contentType: string, source: <url>,\n\t\t * hash: <hash> } (where source and hash should be named\n\t\t * after whatever the actual schema is)\n\t\t */\n\n\t\treturn(retval);\n\t}\n\n\tasync getAttributeNames(includeUnknown: true): Promise<string[]>;\n\tasync getAttributeNames(includeUnknown?: false): Promise<CertificateAttributeNames[]>;\n\tasync getAttributeNames(includeUnknown?: boolean): Promise<string[]> {\n\t\tawait this.#populate();\n\t\tconst names = Object.keys(this.#attributes);\n\n\t\tif (includeUnknown) {\n\t\t\treturn(names);\n\t\t}\n\n\t\tconst knownNames = names.filter(function(name): name is CertificateAttributeNames {\n\t\t\treturn(name in CertificateAttributeOIDDB);\n\t\t});\n\n\t\treturn(knownNames);\n\t}\n\n\texport(options?: Omit<SharableCertificateAttributesExportOptions, 'format'> & { format?: never; }): Promise<ArrayBuffer>;\n\texport(options: (Omit<SharableCertificateAttributesExportOptions, 'format'> & { format: 'arraybuffer' })): Promise<ArrayBuffer>;\n\texport(options: Omit<SharableCertificateAttributesExportOptions, 'format'> & { format: 'string' }): Promise<string>;\n\texport(options?: SharableCertificateAttributesExportOptions): Promise<ArrayBuffer | string>;\n\tasync export(options?: SharableCertificateAttributesExportOptions): Promise<ArrayBuffer | string> {\n\t\toptions = {\n\t\t\tformat: 'arraybuffer',\n\t\t\t...options\n\t\t};\n\n\t\tlet principals: KeetaNetAccount[];\n\t\ttry {\n\t\t\tprincipals = this.container.principals;\n\t\t} catch {\n\t\t\tprincipals = [];\n\t\t}\n\t\tif (principals.length === 0) {\n\t\t\tthrow(new Error('This container has no authorized users (principals); cannot export'));\n\t\t}\n\n\t\tconst retvalBuffer = await this.container.getEncodedBuffer();\n\t\tif (options.format === 'string') {\n\t\t\tconst retvalBase64 = retvalBuffer.toString('base64');\n\t\t\tconst retvalLines = ['-----BEGIN KYC CERTIFICATE PROOF-----'];\n\t\t\tretvalLines.push(...retvalBase64.match(/.{1,64}/g) ?? []);\n\t\t\tretvalLines.push('-----END KYC CERTIFICATE PROOF-----');\n\t\t\treturn(retvalLines.join('\\n'));\n\t\t} else if (options.format === 'arraybuffer') {\n\t\t\treturn(bufferToArrayBuffer(retvalBuffer));\n\t\t} else {\n\t\t\tthrow(new Error(`Unsupported export format: ${String(options.format)}`));\n\t\t}\n\t}\n}\n\n// @ts-ignore\nCertificate.SharableAttributes = SharableCertificateAttributes;\n\n/** @internal */\nexport const _Testing = {\n\tSensitiveAttributeBuilder,\n\tSensitiveAttribute\n};\n"]}
@@ -1,3 +1,4 @@
1
+ import * as http from 'http';
1
2
  import type { JSONSerializable } from './utils/json.js';
2
3
  import type { Logger } from './log/index.js';
3
4
  export declare const AssertHTTPErrorData: (input: unknown) => {
@@ -6,7 +7,7 @@ export declare const AssertHTTPErrorData: (input: unknown) => {
6
7
  contentType?: string;
7
8
  };
8
9
  export type Routes = {
9
- [route: string]: (urlParams: Map<string, string>, postData: JSONSerializable | undefined) => Promise<{
10
+ [route: string]: (urlParams: Map<string, string>, postData: JSONSerializable | undefined, requestHeaders: http.IncomingHttpHeaders) => Promise<{
10
11
  output: string;
11
12
  statusCode?: number;
12
13
  contentType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/lib/http-server.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAAkF,CAAC;AAOpM,MAAM,MAAM,MAAM,GAAG;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;SAAE,CAAC;KAAE,CAAC,CAAC;CAClN,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC3C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8BAAsB,wBAAwB,CAAC,UAAU,SAAS,2BAA2B,GAAG,2BAA2B,CAAE,YAAW,QAAQ,CAAC,2BAA2B,CAAC;;IAC5K,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAKxD,MAAM,EAAE,UAAU;IAM9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAElE,OAAO,CAAC,MAAM,CAAC,UAAU;IA2BzB,OAAO,CAAC,MAAM,CAAC,SAAS;IA2BxB,OAAO,CAAC,MAAM,CAAC,OAAO;YAsGR,IAAI;IA6KlB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;;;OAIG;IACH,IAAI,GAAG,IAAI,MAAM,CAMhB;IAED,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/lib/http-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,eAAO,MAAM,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAAkF,CAAC;AAOpM,MAAM,MAAM,MAAM,GAAG;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,gBAAgB,GAAG,SAAS,EAAE,cAAc,EAAE,IAAI,CAAC,mBAAmB,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;SAAE,CAAC;KAAE,CAAC,CAAC;CAC5P,CAAC;AAEF,MAAM,WAAW,2BAA2B;IAC3C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8BAAsB,wBAAwB,CAAC,UAAU,SAAS,2BAA2B,GAAG,2BAA2B,CAAE,YAAW,QAAQ,CAAC,2BAA2B,CAAC;;IAC5K,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAKxD,MAAM,EAAE,UAAU;IAM9B,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAElE,OAAO,CAAC,MAAM,CAAC,UAAU;IA2BzB,OAAO,CAAC,MAAM,CAAC,SAAS;IA2BxB,OAAO,CAAC,MAAM,CAAC,OAAO;YAsGR,IAAI;IA6KlB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5B;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B;;;;OAIG;IACH,IAAI,GAAG,IAAI,MAAM,CAMhB;IAED,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
@@ -248,10 +248,10 @@ export class KeetaNetAnchorHTTPServer {
248
248
  /**
249
249
  * Call the route handler
250
250
  */
251
- result = await route(params, postData);
251
+ result = await route(params, postData, request.headers);
252
252
  }
253
253
  else {
254
- result = await route(params, undefined);
254
+ result = await route(params, undefined, request.headers);
255
255
  }
256
256
  generatedResult = true;
257
257
  }
@@ -266,7 +266,7 @@ export class KeetaNetAnchorHTTPServer {
266
266
  const errorHandlerRoute = routes['ERROR'];
267
267
  if (errorHandlerRoute !== undefined) {
268
268
  if (KeetaAnchorUserError.isInstance(err)) {
269
- result = await errorHandlerRoute(new Map(), err.asErrorResponse('application/json'));
269
+ result = await errorHandlerRoute(new Map(), err.asErrorResponse('application/json'), request.headers);
270
270
  generatedResult = true;
271
271
  }
272
272
  else {
@@ -274,7 +274,7 @@ export class KeetaNetAnchorHTTPServer {
274
274
  error: JSON.stringify({ ok: false, error: 'Internal Server Error' }),
275
275
  statusCode: 500,
276
276
  contentType: 'application/json'
277
- });
277
+ }, request.headers);
278
278
  generatedResult = true;
279
279
  }
280
280
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/lib/http-server.ts"],"names":[],"mappings":"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","sourcesContent":["import * as http from 'http';\nimport {\n\tKeetaAnchorUserError\n} from './error.js';\nimport type { JSONSerializable } from './utils/json.js';\nimport type { Logger } from './log/index.js';\nimport { Log } from './log/index.js';\nimport { createAssert } from 'typia';\n\nexport const AssertHTTPErrorData: (input: unknown) => { error: string; statusCode?: number; contentType?: string; } = createAssert<{ error: string; statusCode?: number; contentType?: string; }>();\n\n/**\n * The maximum size of a request (128KiB)\n */\nconst MAX_REQUEST_SIZE = 1024 * 128;\n\nexport type Routes = {\n\t[route: string]: (urlParams: Map<string, string>, postData: JSONSerializable | undefined) => Promise<{ output: string; statusCode?: number; contentType?: string; headers?: { [headerName: string]: string; }; }>;\n};\n\nexport interface KeetaAnchorHTTPServerConfig {\n\t/**\n\t * The port for the HTTP server to listen on (default is an ephemeral port).\n\t */\n\tport?: number;\n\n\t/**\n\t * Enable debug logging\n\t */\n\tlogger?: Logger;\n};\n\nexport abstract class KeetaNetAnchorHTTPServer<ConfigType extends KeetaAnchorHTTPServerConfig = KeetaAnchorHTTPServerConfig> implements Required<KeetaAnchorHTTPServerConfig> {\n\treadonly port: NonNullable<KeetaAnchorHTTPServerConfig['port']>;\n\treadonly logger: NonNullable<KeetaAnchorHTTPServerConfig['logger']>;\n\t#serverPromise?: Promise<void>;\n\t#server?: http.Server;\n\treadonly #config: ConfigType;\n\n\tconstructor(config: ConfigType) {\n\t\tthis.#config = { ...config };\n\t\tthis.port = config.port ?? 0;\n\t\tthis.logger = config.logger ?? new Log();\n\t}\n\n\tprotected abstract initRoutes(config: ConfigType): Promise<Routes>;\n\n\tprivate static routeMatch(requestURL: URL, routeURL: URL): ({ match: true; params: Map<string, string> } | { match: false }) {\n\t\tconst requestURLPaths = requestURL.pathname.split('/');\n\t\tconst routeURLPaths = routeURL.pathname.split('/');\n\n\t\tif (requestURLPaths.length !== routeURLPaths.length) {\n\t\t\treturn({ match: false });\n\t\t}\n\n\t\tconst params = new Map<string, string>();\n\t\tfor (let partIndex = 0; partIndex < requestURLPaths.length; partIndex++) {\n\t\t\tconst requestPath = requestURLPaths[partIndex];\n\t\t\tconst routePath = routeURLPaths[partIndex];\n\n\t\t\tif (routePath === undefined || requestPath === undefined) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\n\t\t\tif (routePath.startsWith(':')) {\n\t\t\t\tparams.set(routePath.slice(1), requestPath);\n\t\t\t} else if (requestPath !== routePath) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\t\t}\n\n\t\treturn({ match: true, params: params });\n\t}\n\n\tprivate static routeFind(method: string, requestURL: URL, routes: Routes): { route: Routes[keyof Routes]; params: Map<string, string> } | null {\n\t\tfor (const routeKey in routes) {\n\t\t\tconst route = routes[routeKey];\n\t\t\tif (route === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst [routeMethod, ...routePathParts] = routeKey.split(' ');\n\t\t\tconst routePath = `/${routePathParts.join(' ')}`.replace(/^\\/+/, '/');\n\n\t\t\tif (method !== routeMethod) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst routeURL = new URL(routePath, 'http://localhost');\n\t\t\tconst matchResult = this.routeMatch(requestURL, routeURL);\n\t\t\tif (matchResult.match) {\n\t\t\t\treturn({\n\t\t\t\t\troute: route,\n\t\t\t\t\tparams: matchResult.params\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn(null);\n\t}\n\n\tprivate static addCORS(routes: Routes): Routes {\n\t\tconst newRoutes: Routes = {};\n\n\t\tconst validMethods = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD']);\n\n\t\tconst methodsByPath: { [key: string]: Set<string>; } = {};\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!validMethods.has(method)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!(path in methodsByPath)) {\n\t\t\t\tmethodsByPath[path] = new Set<string>();\n\t\t\t}\n\n\t\t\tif (methodsByPath[path] === undefined) {\n\t\t\t\tthrow(new Error(`internal error: methodsByPath missing path for ${path}`));\n\t\t\t}\n\n\t\t\tmethodsByPath[path].add(method);\n\t\t}\n\n\t\tconst seenPaths = new Set<string>();\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tconst routeHandler = routes[routeKey];\n\t\t\tif (routeHandler === undefined) {\n\t\t\t\tthrow(new Error(`internal error: routeHandler missing for routeKey ${routeKey}`));\n\t\t\t}\n\n\t\t\tif (method !== 'ERROR') {\n\t\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\t\tnewRoutes[routeKey] = routeHandler;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!validMethods.has(method)) {\n\t\t\t\t\tnewRoutes[routeKey] = routeHandler;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst validMethodsForPath = methodsByPath[path];\n\n\t\t\tlet validMethodsForPathParts: string[] = [];\n\t\t\tif (validMethodsForPath !== undefined) {\n\t\t\t\tvalidMethodsForPath.add('OPTIONS');\n\t\t\t\tvalidMethodsForPathParts = Array.from(validMethodsForPath);\n\t\t\t} else {\n\t\t\t\tvalidMethodsForPathParts = [...Array.from(validMethods), 'OPTIONS'];\n\t\t\t}\n\n\t\t\tnewRoutes[routeKey] = async function(...args: Parameters<typeof routes[keyof typeof routes]>) {\n\t\t\t\tconst retval = await routeHandler(...args);\n\n\t\t\t\t/* Add CORS headers to the response for the original route handler */\n\t\t\t\tif (retval.contentType === 'application/json' || retval.contentType === undefined) {\n\t\t\t\t\tif (!('headers' in retval) || retval.headers === undefined) {\n\t\t\t\t\t\tretval.headers = {};\n\t\t\t\t\t}\n\t\t\t\t\tretval.headers['Access-Control-Allow-Origin'] = '*';\n\t\t\t\t}\n\n\t\t\t\treturn(retval);\n\t\t\t};\n\n\t\t\tif (!seenPaths.has(path) && path !== '' && path !== undefined) {\n\t\t\t\tconst corsRouteKey = `OPTIONS ${path}`;\n\n\t\t\t\tnewRoutes[corsRouteKey] = async function() {\n\t\t\t\t\treturn({\n\t\t\t\t\t\toutput: '',\n\t\t\t\t\t\tstatusCode: 204,\n\t\t\t\t\t\tcontentType: 'text/plain',\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Access-Control-Allow-Origin': '*',\n\t\t\t\t\t\t\t'Access-Control-Allow-Methods': validMethodsForPathParts.join(', '),\n\t\t\t\t\t\t\t'Access-Control-Allow-Headers': 'Content-Type',\n\t\t\t\t\t\t\t'Access-Control-Max-Age': '86400'\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tseenPaths.add(path);\n\t\t\t}\n\t\t}\n\n\t\treturn(newRoutes);\n\t}\n\n\tprivate async main(onSetPort?: (port: number) => void): Promise<void> {\n\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Starting HTTP server...');\n\n\t\tconst port = this.port;\n\n\t\tconst routes = KeetaNetAnchorHTTPServer.addCORS({\n\t\t\tERROR: async function(_ignore_params, postData) {\n\t\t\t\tconst errorInfo = AssertHTTPErrorData(postData);\n\n\t\t\t\tconst retval = {\n\t\t\t\t\toutput: errorInfo.error,\n\t\t\t\t\tstatusCode: errorInfo.statusCode ?? 400,\n\t\t\t\t\tcontentType: errorInfo.contentType ?? 'text/plain'\n\t\t\t\t};\n\n\t\t\t\treturn(retval);\n\t\t\t},\n\t\t\t...(await this.initRoutes(this.#config))\n\t\t});\n\n\t\tconst server = new http.Server(async (request, response) => {\n\t\t\tconst url = new URL(request.url ?? '/', `http://${request.headers.host ?? 'localhost'}`);\n\t\t\tconst method = request.method ?? 'GET';\n\n\t\t\t/*\n\t\t\t * Lookup the route based on the request\n\t\t\t */\n\t\t\tconst requestedRouteAndParams = KeetaNetAnchorHTTPServer.routeFind(method, url, routes);\n\t\t\tif (requestedRouteAndParams === null) {\n\t\t\t\tresponse.statusCode = 404;\n\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\tresponse.write('Not Found');\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Extract the route handler and the parameters from\n\t\t\t * the request\n\t\t\t */\n\t\t\tconst { route, params } = requestedRouteAndParams;\n\n\t\t\t/**\n\t\t\t * Attempt to run the route, catch any errors\n\t\t\t */\n\t\t\tlet result: Awaited<ReturnType<typeof route>> | undefined = undefined;\n\t\t\tlet generatedResult = false;\n\t\t\ttry {\n\t\t\t\t/**\n\t\t\t\t * If POST'ing, read and parse the POST data\n\t\t\t\t */\n\t\t\t\tlet postData: JSONSerializable | undefined;\n\t\t\t\tif (request.method === 'POST') {\n\t\t\t\t\tconst data = await request.map(function(chunk) {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\t\treturn(Buffer.from(chunk));\n\t\t\t\t\t}).reduce(function(prev, curr) {\n\t\t\t\t\t\tif (prev.length > MAX_REQUEST_SIZE) {\n\t\t\t\t\t\t\tthrow(new Error('Request too large'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!Buffer.isBuffer(curr)) {\n\t\t\t\t\t\t\tthrow(new Error(`internal error: Current item is not a buffer -- ${typeof curr}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn(Buffer.concat([prev, curr]));\n\t\t\t\t\t}, Buffer.from(''));\n\n\t\t\t\t\tif (request.headers['content-type'] === 'application/json') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t\tpostData = JSON.parse(data.toString('utf-8'));\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tthrow(new Error('Invalid JSON data'));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Unsupported content type'));\n\t\t\t\t\t}\n\t\t\t\t\t/**\n\t\t\t\t\t * Call the route handler\n\t\t\t\t\t */\n\t\t\t\t\tresult = await route(params, postData);\n\t\t\t\t} else {\n\t\t\t\t\tresult = await route(params, undefined);\n\t\t\t\t}\n\n\t\t\t\tgeneratedResult = true;\n\t\t\t} catch (err) {\n\t\t\t\t/**\n\t\t\t\t * If an error occurs, log it and return an error page\n\t\t\t\t */\n\t\t\t\tthis.logger?.error('KeetaAnchorHTTP.Server', err);\n\n\t\t\t\t/**\n\t\t\t\t * If it is a user error, provide a user-friendly error page\n\t\t\t\t */\n\t\t\t\tconst errorHandlerRoute = routes['ERROR'];\n\t\t\t\tif (errorHandlerRoute !== undefined) {\n\t\t\t\t\tif (KeetaAnchorUserError.isInstance(err)) {\n\t\t\t\t\t\tresult = await errorHandlerRoute(new Map(), err.asErrorResponse('application/json'));\n\t\t\t\t\t\tgeneratedResult = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = await errorHandlerRoute(new Map(), {\n\t\t\t\t\t\t\terror: JSON.stringify({ ok: false, error: 'Internal Server Error' }),\n\t\t\t\t\t\t\tstatusCode: 500,\n\t\t\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t\t\t});\n\t\t\t\t\t\tgeneratedResult = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!generatedResult) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Otherwise provide a generic error page\n\t\t\t\t\t */\n\t\t\t\t\tresponse.statusCode = 500;\n\t\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\t\tresponse.write('Internal Server Error');\n\t\t\t\t\tresponse.end();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result === undefined) {\n\t\t\t\tthrow(new Error('internal error: No result'));\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Write the response to the client\n\t\t\t */\n\t\t\tresponse.statusCode = result.statusCode ?? 200;\n\n\t\t\tfor (const headerKey in result.headers ?? {}) {\n\t\t\t\tconst headerValue = result.headers?.[headerKey];\n\t\t\t\tif (headerValue !== undefined) {\n\t\t\t\t\tresponse.setHeader(headerKey, headerValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresponse.setHeader('Content-Type', result.contentType ?? 'application/json');\n\t\t\tresponse.write(result.output);\n\t\t\tresponse.end();\n\t\t});\n\t\tthis.#server = server;\n\n\t\t/**\n\t\t * Create a promise to wait for the server to close\n\t\t */\n\t\tconst waiter = new Promise<void>((resolve) => {\n\t\t\tserver.on('close', () => {\n\t\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Server closed');\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\n\t\t/**\n\t\t * Start listening on the port\n\t\t */\n\t\tserver.listen(port, () => {\n\t\t\tconst address = server.address();\n\t\t\tif (address !== null && typeof address === 'object') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis.port = address.port;\n\t\t\t\tonSetPort?.(this.port);\n\t\t\t}\n\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Listening on port:', this.port);\n\t\t});\n\n\t\t/**\n\t\t * Wait for the server to close\n\t\t */\n\t\tawait waiter;\n\t}\n\n\t/**\n\t * Start the HTTP server and wait for it to be fully initialized.\n\t */\n\tasync start(): Promise<void> {\n\t\t/*\n\t\t * Start the server and wait for it to be initialized before returning\n\t\t */\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tthis.#serverPromise = this.main(function() {\n\t\t\t\tresolve();\n\t\t\t}).catch(function(error: unknown) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Wait for the server to terminate. This will only resolve once the\n\t * server has been stopped.\n\t */\n\tasync wait(): Promise<void> {\n\t\tawait this.#serverPromise;\n\t}\n\n\t/**\n\t * Stop the HTTP server and wait for it to be fully terminated.\n\t */\n\tasync stop(): Promise<void> {\n\t\tthis.#server?.close();\n\t\t// @ts-ignore\n\t\tthis.#server = undefined;\n\t\tawait this.wait();\n\t}\n\n\t/**\n\t * Get the URL of the server, which can be used to make requests to\n\t * it. This will use \"localhost\" as the hostname and the port that\n\t * the server is listening on.\n\t */\n\tget url(): string {\n\t\tif (this.port === 0 || this.#server === undefined) {\n\t\t\tthrow(new Error('Server not started'));\n\t\t}\n\n\t\treturn(`http://localhost:${this.port}`);\n\t}\n\n\t[Symbol.asyncDispose](): Promise<void> {\n\t\treturn(this.stop());\n\t}\n}\n"]}
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/lib/http-server.ts"],"names":[],"mappings":"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","sourcesContent":["import * as http from 'http';\nimport {\n\tKeetaAnchorUserError\n} from './error.js';\nimport type { JSONSerializable } from './utils/json.js';\nimport type { Logger } from './log/index.js';\nimport { Log } from './log/index.js';\nimport { createAssert } from 'typia';\n\nexport const AssertHTTPErrorData: (input: unknown) => { error: string; statusCode?: number; contentType?: string; } = createAssert<{ error: string; statusCode?: number; contentType?: string; }>();\n\n/**\n * The maximum size of a request (128KiB)\n */\nconst MAX_REQUEST_SIZE = 1024 * 128;\n\nexport type Routes = {\n\t[route: string]: (urlParams: Map<string, string>, postData: JSONSerializable | undefined, requestHeaders: http.IncomingHttpHeaders) => Promise<{ output: string; statusCode?: number; contentType?: string; headers?: { [headerName: string]: string; }; }>;\n};\n\nexport interface KeetaAnchorHTTPServerConfig {\n\t/**\n\t * The port for the HTTP server to listen on (default is an ephemeral port).\n\t */\n\tport?: number;\n\n\t/**\n\t * Enable debug logging\n\t */\n\tlogger?: Logger;\n};\n\nexport abstract class KeetaNetAnchorHTTPServer<ConfigType extends KeetaAnchorHTTPServerConfig = KeetaAnchorHTTPServerConfig> implements Required<KeetaAnchorHTTPServerConfig> {\n\treadonly port: NonNullable<KeetaAnchorHTTPServerConfig['port']>;\n\treadonly logger: NonNullable<KeetaAnchorHTTPServerConfig['logger']>;\n\t#serverPromise?: Promise<void>;\n\t#server?: http.Server;\n\treadonly #config: ConfigType;\n\n\tconstructor(config: ConfigType) {\n\t\tthis.#config = { ...config };\n\t\tthis.port = config.port ?? 0;\n\t\tthis.logger = config.logger ?? new Log();\n\t}\n\n\tprotected abstract initRoutes(config: ConfigType): Promise<Routes>;\n\n\tprivate static routeMatch(requestURL: URL, routeURL: URL): ({ match: true; params: Map<string, string> } | { match: false }) {\n\t\tconst requestURLPaths = requestURL.pathname.split('/');\n\t\tconst routeURLPaths = routeURL.pathname.split('/');\n\n\t\tif (requestURLPaths.length !== routeURLPaths.length) {\n\t\t\treturn({ match: false });\n\t\t}\n\n\t\tconst params = new Map<string, string>();\n\t\tfor (let partIndex = 0; partIndex < requestURLPaths.length; partIndex++) {\n\t\t\tconst requestPath = requestURLPaths[partIndex];\n\t\t\tconst routePath = routeURLPaths[partIndex];\n\n\t\t\tif (routePath === undefined || requestPath === undefined) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\n\t\t\tif (routePath.startsWith(':')) {\n\t\t\t\tparams.set(routePath.slice(1), requestPath);\n\t\t\t} else if (requestPath !== routePath) {\n\t\t\t\treturn({ match: false });\n\t\t\t}\n\t\t}\n\n\t\treturn({ match: true, params: params });\n\t}\n\n\tprivate static routeFind(method: string, requestURL: URL, routes: Routes): { route: Routes[keyof Routes]; params: Map<string, string> } | null {\n\t\tfor (const routeKey in routes) {\n\t\t\tconst route = routes[routeKey];\n\t\t\tif (route === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst [routeMethod, ...routePathParts] = routeKey.split(' ');\n\t\t\tconst routePath = `/${routePathParts.join(' ')}`.replace(/^\\/+/, '/');\n\n\t\t\tif (method !== routeMethod) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst routeURL = new URL(routePath, 'http://localhost');\n\t\t\tconst matchResult = this.routeMatch(requestURL, routeURL);\n\t\t\tif (matchResult.match) {\n\t\t\t\treturn({\n\t\t\t\t\troute: route,\n\t\t\t\t\tparams: matchResult.params\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn(null);\n\t}\n\n\tprivate static addCORS(routes: Routes): Routes {\n\t\tconst newRoutes: Routes = {};\n\n\t\tconst validMethods = new Set(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD']);\n\n\t\tconst methodsByPath: { [key: string]: Set<string>; } = {};\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!validMethods.has(method)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!(path in methodsByPath)) {\n\t\t\t\tmethodsByPath[path] = new Set<string>();\n\t\t\t}\n\n\t\t\tif (methodsByPath[path] === undefined) {\n\t\t\t\tthrow(new Error(`internal error: methodsByPath missing path for ${path}`));\n\t\t\t}\n\n\t\t\tmethodsByPath[path].add(method);\n\t\t}\n\n\t\tconst seenPaths = new Set<string>();\n\t\tfor (const routeKey in routes) {\n\t\t\tconst methodAndPath = routeKey.split(' ');\n\t\t\tconst method = methodAndPath[0];\n\t\t\tconst path = methodAndPath.slice(1).join(' ');\n\n\t\t\tconst routeHandler = routes[routeKey];\n\t\t\tif (routeHandler === undefined) {\n\t\t\t\tthrow(new Error(`internal error: routeHandler missing for routeKey ${routeKey}`));\n\t\t\t}\n\n\t\t\tif (method !== 'ERROR') {\n\t\t\t\tif (method === undefined || path === undefined) {\n\t\t\t\t\tnewRoutes[routeKey] = routeHandler;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!validMethods.has(method)) {\n\t\t\t\t\tnewRoutes[routeKey] = routeHandler;\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst validMethodsForPath = methodsByPath[path];\n\n\t\t\tlet validMethodsForPathParts: string[] = [];\n\t\t\tif (validMethodsForPath !== undefined) {\n\t\t\t\tvalidMethodsForPath.add('OPTIONS');\n\t\t\t\tvalidMethodsForPathParts = Array.from(validMethodsForPath);\n\t\t\t} else {\n\t\t\t\tvalidMethodsForPathParts = [...Array.from(validMethods), 'OPTIONS'];\n\t\t\t}\n\n\t\t\tnewRoutes[routeKey] = async function(...args: Parameters<typeof routes[keyof typeof routes]>) {\n\t\t\t\tconst retval = await routeHandler(...args);\n\n\t\t\t\t/* Add CORS headers to the response for the original route handler */\n\t\t\t\tif (retval.contentType === 'application/json' || retval.contentType === undefined) {\n\t\t\t\t\tif (!('headers' in retval) || retval.headers === undefined) {\n\t\t\t\t\t\tretval.headers = {};\n\t\t\t\t\t}\n\t\t\t\t\tretval.headers['Access-Control-Allow-Origin'] = '*';\n\t\t\t\t}\n\n\t\t\t\treturn(retval);\n\t\t\t};\n\n\t\t\tif (!seenPaths.has(path) && path !== '' && path !== undefined) {\n\t\t\t\tconst corsRouteKey = `OPTIONS ${path}`;\n\n\t\t\t\tnewRoutes[corsRouteKey] = async function() {\n\t\t\t\t\treturn({\n\t\t\t\t\t\toutput: '',\n\t\t\t\t\t\tstatusCode: 204,\n\t\t\t\t\t\tcontentType: 'text/plain',\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t'Access-Control-Allow-Origin': '*',\n\t\t\t\t\t\t\t'Access-Control-Allow-Methods': validMethodsForPathParts.join(', '),\n\t\t\t\t\t\t\t'Access-Control-Allow-Headers': 'Content-Type',\n\t\t\t\t\t\t\t'Access-Control-Max-Age': '86400'\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tseenPaths.add(path);\n\t\t\t}\n\t\t}\n\n\t\treturn(newRoutes);\n\t}\n\n\tprivate async main(onSetPort?: (port: number) => void): Promise<void> {\n\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Starting HTTP server...');\n\n\t\tconst port = this.port;\n\n\t\tconst routes = KeetaNetAnchorHTTPServer.addCORS({\n\t\t\tERROR: async function(_ignore_params, postData) {\n\t\t\t\tconst errorInfo = AssertHTTPErrorData(postData);\n\n\t\t\t\tconst retval = {\n\t\t\t\t\toutput: errorInfo.error,\n\t\t\t\t\tstatusCode: errorInfo.statusCode ?? 400,\n\t\t\t\t\tcontentType: errorInfo.contentType ?? 'text/plain'\n\t\t\t\t};\n\n\t\t\t\treturn(retval);\n\t\t\t},\n\t\t\t...(await this.initRoutes(this.#config))\n\t\t});\n\n\t\tconst server = new http.Server(async (request, response) => {\n\t\t\tconst url = new URL(request.url ?? '/', `http://${request.headers.host ?? 'localhost'}`);\n\t\t\tconst method = request.method ?? 'GET';\n\n\t\t\t/*\n\t\t\t * Lookup the route based on the request\n\t\t\t */\n\t\t\tconst requestedRouteAndParams = KeetaNetAnchorHTTPServer.routeFind(method, url, routes);\n\t\t\tif (requestedRouteAndParams === null) {\n\t\t\t\tresponse.statusCode = 404;\n\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\tresponse.write('Not Found');\n\t\t\t\tresponse.end();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Extract the route handler and the parameters from\n\t\t\t * the request\n\t\t\t */\n\t\t\tconst { route, params } = requestedRouteAndParams;\n\n\t\t\t/**\n\t\t\t * Attempt to run the route, catch any errors\n\t\t\t */\n\t\t\tlet result: Awaited<ReturnType<typeof route>> | undefined = undefined;\n\t\t\tlet generatedResult = false;\n\t\t\ttry {\n\t\t\t\t/**\n\t\t\t\t * If POST'ing, read and parse the POST data\n\t\t\t\t */\n\t\t\t\tlet postData: JSONSerializable | undefined;\n\t\t\t\tif (request.method === 'POST') {\n\t\t\t\t\tconst data = await request.map(function(chunk) {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\t\treturn(Buffer.from(chunk));\n\t\t\t\t\t}).reduce(function(prev, curr) {\n\t\t\t\t\t\tif (prev.length > MAX_REQUEST_SIZE) {\n\t\t\t\t\t\t\tthrow(new Error('Request too large'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!Buffer.isBuffer(curr)) {\n\t\t\t\t\t\t\tthrow(new Error(`internal error: Current item is not a buffer -- ${typeof curr}`));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn(Buffer.concat([prev, curr]));\n\t\t\t\t\t}, Buffer.from(''));\n\n\t\t\t\t\tif (request.headers['content-type'] === 'application/json') {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t\tpostData = JSON.parse(data.toString('utf-8'));\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\tthrow(new Error('Invalid JSON data'));\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Unsupported content type'));\n\t\t\t\t\t}\n\t\t\t\t\t/**\n\t\t\t\t\t * Call the route handler\n\t\t\t\t\t */\n\t\t\t\t\tresult = await route(params, postData, request.headers);\n\t\t\t\t} else {\n\t\t\t\t\tresult = await route(params, undefined, request.headers);\n\t\t\t\t}\n\n\t\t\t\tgeneratedResult = true;\n\t\t\t} catch (err) {\n\t\t\t\t/**\n\t\t\t\t * If an error occurs, log it and return an error page\n\t\t\t\t */\n\t\t\t\tthis.logger?.error('KeetaAnchorHTTP.Server', err);\n\n\t\t\t\t/**\n\t\t\t\t * If it is a user error, provide a user-friendly error page\n\t\t\t\t */\n\t\t\t\tconst errorHandlerRoute = routes['ERROR'];\n\t\t\t\tif (errorHandlerRoute !== undefined) {\n\t\t\t\t\tif (KeetaAnchorUserError.isInstance(err)) {\n\t\t\t\t\t\tresult = await errorHandlerRoute(new Map(), err.asErrorResponse('application/json'), request.headers);\n\t\t\t\t\t\tgeneratedResult = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = await errorHandlerRoute(new Map(), {\n\t\t\t\t\t\t\terror: JSON.stringify({ ok: false, error: 'Internal Server Error' }),\n\t\t\t\t\t\t\tstatusCode: 500,\n\t\t\t\t\t\t\tcontentType: 'application/json'\n\t\t\t\t\t\t}, request.headers);\n\t\t\t\t\t\tgeneratedResult = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!generatedResult) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Otherwise provide a generic error page\n\t\t\t\t\t */\n\t\t\t\t\tresponse.statusCode = 500;\n\t\t\t\t\tresponse.setHeader('Content-Type', 'text/plain');\n\t\t\t\t\tresponse.write('Internal Server Error');\n\t\t\t\t\tresponse.end();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (result === undefined) {\n\t\t\t\tthrow(new Error('internal error: No result'));\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Write the response to the client\n\t\t\t */\n\t\t\tresponse.statusCode = result.statusCode ?? 200;\n\n\t\t\tfor (const headerKey in result.headers ?? {}) {\n\t\t\t\tconst headerValue = result.headers?.[headerKey];\n\t\t\t\tif (headerValue !== undefined) {\n\t\t\t\t\tresponse.setHeader(headerKey, headerValue);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresponse.setHeader('Content-Type', result.contentType ?? 'application/json');\n\t\t\tresponse.write(result.output);\n\t\t\tresponse.end();\n\t\t});\n\t\tthis.#server = server;\n\n\t\t/**\n\t\t * Create a promise to wait for the server to close\n\t\t */\n\t\tconst waiter = new Promise<void>((resolve) => {\n\t\t\tserver.on('close', () => {\n\t\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Server closed');\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\n\t\t/**\n\t\t * Start listening on the port\n\t\t */\n\t\tserver.listen(port, () => {\n\t\t\tconst address = server.address();\n\t\t\tif (address !== null && typeof address === 'object') {\n\t\t\t\t// @ts-ignore\n\t\t\t\tthis.port = address.port;\n\t\t\t\tonSetPort?.(this.port);\n\t\t\t}\n\t\t\tthis.logger?.debug('KeetaAnchorHTTP.Server', 'Listening on port:', this.port);\n\t\t});\n\n\t\t/**\n\t\t * Wait for the server to close\n\t\t */\n\t\tawait waiter;\n\t}\n\n\t/**\n\t * Start the HTTP server and wait for it to be fully initialized.\n\t */\n\tasync start(): Promise<void> {\n\t\t/*\n\t\t * Start the server and wait for it to be initialized before returning\n\t\t */\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tthis.#serverPromise = this.main(function() {\n\t\t\t\tresolve();\n\t\t\t}).catch(function(error: unknown) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n\t\t\t\treject(error);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * Wait for the server to terminate. This will only resolve once the\n\t * server has been stopped.\n\t */\n\tasync wait(): Promise<void> {\n\t\tawait this.#serverPromise;\n\t}\n\n\t/**\n\t * Stop the HTTP server and wait for it to be fully terminated.\n\t */\n\tasync stop(): Promise<void> {\n\t\tthis.#server?.close();\n\t\t// @ts-ignore\n\t\tthis.#server = undefined;\n\t\tawait this.wait();\n\t}\n\n\t/**\n\t * Get the URL of the server, which can be used to make requests to\n\t * it. This will use \"localhost\" as the hostname and the port that\n\t * the server is listening on.\n\t */\n\tget url(): string {\n\t\tif (this.port === 0 || this.#server === undefined) {\n\t\t\tthrow(new Error('Server not started'));\n\t\t}\n\n\t\treturn(`http://localhost:${this.port}`);\n\t}\n\n\t[Symbol.asyncDispose](): Promise<void> {\n\t\treturn(this.stop());\n\t}\n}\n"]}
package/lib/resolver.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import * as KeetaNetClient from '@keetanetwork/keetanet-client';
2
+ import type { GenericAccount as KeetaNetGenericAccount } from '@keetanetwork/keetanet-client/lib/account.js';
2
3
  import * as CurrencyInfo from '@keetanetwork/currency-info';
3
4
  import type { Logger } from './log/index.ts';
4
5
  import type { JSONSerializable } from './utils/json.ts';
@@ -311,7 +312,7 @@ type ResolverConfig = {
311
312
  * contain the authoritative information for resolving in its
312
313
  * Metadata.
313
314
  */
314
- root: KeetaNetAccount;
315
+ root: KeetaNetGenericAccount;
315
316
  /**
316
317
  * A KeetaNet Client to access the network using.
317
318
  */
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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"}