{ "version": 3, "sources": ["../../src/webauthn-json/convert.ts", "../../src/webauthn-json/basic/schema.ts", "../../src/bin/main.ts"], "sourcesContent": ["// We export these values in order so that they can be used to deduplicate\n// schema definitions in minified JS code.\n\nimport { Schema, SchemaProperty } from \"./schema-format\";\n\n// TODO: Parcel isn't deduplicating these values.\nexport const copyValue = \"copy\";\nexport const convertValue = \"convert\";\n\nexport function convert(\n conversionFn: (v: From) => To,\n schema: Schema,\n input: any,\n): any {\n if (schema === copyValue) {\n return input;\n }\n if (schema === convertValue) {\n return conversionFn(input);\n }\n if (schema instanceof Array) {\n return input.map((v: any) => convert(conversionFn, schema[0], v));\n }\n if (schema instanceof Object) {\n const output: any = {};\n for (const [key, schemaField] of Object.entries(schema)) {\n if (schemaField.derive) {\n const v = schemaField.derive(input);\n if (v !== undefined) {\n input[key] = v;\n }\n }\n\n if (!(key in input)) {\n if (schemaField.required) {\n throw new Error(`Missing key: ${key}`);\n }\n continue;\n }\n // Fields can be null (rather than missing or `undefined`), e.g. the\n // `userHandle` field of the `AuthenticatorAssertionResponse`:\n // https://www.w3.org/TR/webauthn/#iface-authenticatorassertionresponse\n if (input[key] == null) {\n output[key] = null;\n continue;\n }\n output[key] = convert(\n conversionFn,\n schemaField.schema,\n input[key],\n );\n }\n return output;\n }\n}\n\nexport function derived(\n schema: Schema,\n derive: (v: any) => any,\n): SchemaProperty {\n return {\n required: true,\n schema,\n derive,\n };\n}\n\nexport function required(schema: Schema): SchemaProperty {\n return {\n required: true,\n schema,\n };\n}\n\nexport function optional(schema: Schema): SchemaProperty {\n return {\n required: false,\n schema,\n };\n}\n", "import { Schema } from \"../schema-format\";\nimport {\n convertValue as convert,\n copyValue as copy,\n derived,\n optional,\n required,\n} from \"../convert\";\n\n// Shared by `create()` and `get()`.\n\nconst publicKeyCredentialDescriptorSchema: Schema = {\n type: required(copy),\n id: required(convert),\n transports: optional(copy),\n};\n\nconst simplifiedExtensionsSchema: Schema = {\n appid: optional(copy),\n appidExclude: optional(copy),\n credProps: optional(copy),\n};\n\nconst simplifiedClientExtensionResultsSchema = {\n appid: optional(copy),\n appidExclude: optional(copy),\n credProps: optional(copy),\n};\n\n// `navigator.create()` request\n\nexport const credentialCreationOptions: Schema = {\n publicKey: required({\n rp: required(copy),\n user: required({\n id: required(convert),\n name: required(copy),\n displayName: required(copy),\n }),\n\n challenge: required(convert),\n pubKeyCredParams: required(copy),\n\n timeout: optional(copy),\n excludeCredentials: optional([publicKeyCredentialDescriptorSchema]),\n authenticatorSelection: optional(copy),\n attestation: optional(copy),\n extensions: optional(simplifiedExtensionsSchema),\n }),\n signal: optional(copy),\n};\n\n// `navigator.create()` response\n\nexport const publicKeyCredentialWithAttestation: Schema = {\n type: required(copy),\n id: required(copy),\n rawId: required(convert),\n authenticatorAttachment: optional(copy),\n response: required({\n clientDataJSON: required(convert),\n attestationObject: required(convert),\n transports: derived(\n copy,\n (response: any) => response.getTransports?.() || [],\n ),\n }),\n clientExtensionResults: derived(\n simplifiedClientExtensionResultsSchema,\n (pkc: PublicKeyCredential) => pkc.getClientExtensionResults(),\n ),\n};\n\n// `navigator.get()` request\n\nexport const credentialRequestOptions: Schema = {\n mediation: optional(copy),\n publicKey: required({\n challenge: required(convert),\n timeout: optional(copy),\n rpId: optional(copy),\n allowCredentials: optional([publicKeyCredentialDescriptorSchema]),\n userVerification: optional(copy),\n extensions: optional(simplifiedExtensionsSchema),\n }),\n signal: optional(copy),\n};\n\n// `navigator.get()` response\n\nexport const publicKeyCredentialWithAssertion: Schema = {\n type: required(copy),\n id: required(copy),\n rawId: required(convert),\n authenticatorAttachment: optional(copy),\n response: required({\n clientDataJSON: required(convert),\n authenticatorData: required(convert),\n signature: required(convert),\n userHandle: required(convert),\n }),\n clientExtensionResults: derived(\n simplifiedClientExtensionResultsSchema,\n (pkc: PublicKeyCredential) => pkc.getClientExtensionResults(),\n ),\n};\n\nexport const schema: { [s: string]: Schema } = {\n credentialCreationOptions,\n publicKeyCredentialWithAttestation,\n credentialRequestOptions,\n publicKeyCredentialWithAssertion,\n};\n", "/* tslint:disable:no-console no-var-requires */\n\ndeclare const WEBAUTHN_JSON_VERSION: string;\nimport { schema } from \"../webauthn-json\";\n\nconst help = `Usage: ${process.argv[1]} schema`;\n\nconst command = process.argv[2];\nif (command === \"schema\") {\n const schemaWithVersion = { ...schema, version: WEBAUTHN_JSON_VERSION };\n console.log(JSON.stringify(schemaWithVersion, null, \" \"));\n} else {\n console.log(help);\n}\n"], "mappings": "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", "names": ["schema"] }