From 7725a9bc795739037bfa67ea74cbb3cdb1809277 Mon Sep 17 00:00:00 2001 From: Ryu Github Actions Date: Mon, 26 Aug 2024 08:24:33 +0000 Subject: [PATCH] Add compiled assets --- .gitignore | 7 +- .gitignore.prebuild => .gitignore.main | 7 +- dist/demo/electron-demo.d.ts | 2 + dist/demo/electron-demo.d.ts.map | 1 + dist/demo/electron-demo.js | 30 +++++ dist/demo/electron-demo.js.map | 1 + dist/demo/preload.d.ts | 2 + dist/demo/preload.d.ts.map | 1 + dist/demo/preload.js | 10 ++ dist/demo/preload.js.map | 1 + dist/index.d.ts | 17 +++ dist/index.d.ts.map | 1 + dist/index.js | 59 ++++++++++ dist/index.js.map | 1 + dist/types.d.ts | 51 ++++++++ dist/types.d.ts.map | 1 + dist/types.js | 3 + dist/types.js.map | 1 + dist/utils.d.ts | 8 ++ dist/utils.d.ts.map | 1 + dist/utils.js | 116 +++++++++++++++++++ dist/utils.js.map | 1 + prebuilds/darwin-arm64/electron-passkey.node | Bin 0 -> 111008 bytes prebuilds/darwin-x64/electron-passkey.node | Bin 0 -> 66768 bytes 24 files changed, 315 insertions(+), 7 deletions(-) rename .gitignore.prebuild => .gitignore.main (98%) create mode 100644 dist/demo/electron-demo.d.ts create mode 100644 dist/demo/electron-demo.d.ts.map create mode 100644 dist/demo/electron-demo.js create mode 100644 dist/demo/electron-demo.js.map create mode 100644 dist/demo/preload.d.ts create mode 100644 dist/demo/preload.d.ts.map create mode 100644 dist/demo/preload.js create mode 100644 dist/demo/preload.js.map create mode 100644 dist/index.d.ts create mode 100644 dist/index.d.ts.map create mode 100644 dist/index.js create mode 100644 dist/index.js.map create mode 100644 dist/types.d.ts create mode 100644 dist/types.d.ts.map create mode 100644 dist/types.js create mode 100644 dist/types.js.map create mode 100644 dist/utils.d.ts create mode 100644 dist/utils.d.ts.map create mode 100644 dist/utils.js create mode 100644 dist/utils.js.map create mode 100644 prebuilds/darwin-arm64/electron-passkey.node create mode 100644 prebuilds/darwin-x64/electron-passkey.node diff --git a/.gitignore b/.gitignore index 211c841..79fccad 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* -.idea # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -82,7 +81,7 @@ web_modules/ # Nuxt.js build / generate output .nuxt -dist +# dist # Gatsby files .cache/ @@ -115,8 +114,8 @@ dist .yarn/build-state.yml .pnp.* -build -prebuilds +# build +# prebuilds # Mac storage .DS_Store diff --git a/.gitignore.prebuild b/.gitignore.main similarity index 98% rename from .gitignore.prebuild rename to .gitignore.main index 79fccad..211c841 100644 --- a/.gitignore.prebuild +++ b/.gitignore.main @@ -5,6 +5,7 @@ npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* +.idea # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json @@ -81,7 +82,7 @@ web_modules/ # Nuxt.js build / generate output .nuxt -# dist +dist # Gatsby files .cache/ @@ -114,8 +115,8 @@ web_modules/ .yarn/build-state.yml .pnp.* -# build -# prebuilds +build +prebuilds # Mac storage .DS_Store diff --git a/dist/demo/electron-demo.d.ts b/dist/demo/electron-demo.d.ts new file mode 100644 index 0000000..de804c3 --- /dev/null +++ b/dist/demo/electron-demo.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=electron-demo.d.ts.map \ No newline at end of file diff --git a/dist/demo/electron-demo.d.ts.map b/dist/demo/electron-demo.d.ts.map new file mode 100644 index 0000000..edc3513 --- /dev/null +++ b/dist/demo/electron-demo.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"electron-demo.d.ts","sourceRoot":"","sources":["../../src/demo/electron-demo.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/demo/electron-demo.js b/dist/demo/electron-demo.js new file mode 100644 index 0000000..40e6e7b --- /dev/null +++ b/dist/demo/electron-demo.js @@ -0,0 +1,30 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = require("path"); +const electron_1 = require("electron"); +const __1 = __importDefault(require("..")); +// https://github.com/electron/electron/issues/25153 +// app.disableHardwareAcceleration(); +__1.default.getInstance().attachHandlersToMain('google.com', electron_1.ipcMain); +let window; +function createWindow() { + window = new electron_1.BrowserWindow({ + width: 1400, + height: 900, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + preload: (0, path_1.join)(__dirname, 'preload.js'), + }, + }); + window.loadURL('https://thirdweb.com/login?next=%2Fdashboard%2Fconnect%2Fin-app-wallets'); + window.webContents.openDevTools(); + console.log(__1.default.getPackageName()); +} +electron_1.app.on('ready', () => { + setTimeout(createWindow, 500); +}); +//# sourceMappingURL=electron-demo.js.map \ No newline at end of file diff --git a/dist/demo/electron-demo.js.map b/dist/demo/electron-demo.js.map new file mode 100644 index 0000000..eb1ad18 --- /dev/null +++ b/dist/demo/electron-demo.js.map @@ -0,0 +1 @@ +{"version":3,"file":"electron-demo.js","sourceRoot":"","sources":["../../src/demo/electron-demo.ts"],"names":[],"mappings":";;;;;AAAA,+BAA4B;AAC5B,uCAAuD;AACvD,2CAAyB;AAEzB,oDAAoD;AACpD,qCAAqC;AAErC,WAAO,CAAC,WAAW,EAAE,CAAC,oBAAoB,CAAC,YAAY,EAAE,kBAAO,CAAC,CAAC;AAElE,IAAI,MAAqB,CAAC;AAE1B,SAAS,YAAY;IACnB,MAAM,GAAG,IAAI,wBAAa,CAAC;QACzB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,GAAG;QACX,cAAc,EAAE;YACd,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,KAAK;YACvB,OAAO,EAAE,IAAA,WAAI,EAAC,SAAS,EAAE,YAAY,CAAC;SACvC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CACZ,yEAAyE,CAC1E,CAAC;IAEF,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,WAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,cAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IACnB,UAAU,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/demo/preload.d.ts b/dist/demo/preload.d.ts new file mode 100644 index 0000000..d5a3c49 --- /dev/null +++ b/dist/demo/preload.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=preload.d.ts.map \ No newline at end of file diff --git a/dist/demo/preload.d.ts.map b/dist/demo/preload.d.ts.map new file mode 100644 index 0000000..dbccddb --- /dev/null +++ b/dist/demo/preload.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../../src/demo/preload.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/demo/preload.js b/dist/demo/preload.js new file mode 100644 index 0000000..adee99a --- /dev/null +++ b/dist/demo/preload.js @@ -0,0 +1,10 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const electron_1 = require("electron"); +const __1 = __importDefault(require("..")); +navigator.credentials.create = (options) => __1.default.getInstance().attachCreateToRenderer(electron_1.ipcRenderer, options); +navigator.credentials.get = (options) => __1.default.getInstance().attachGetToRenderer(electron_1.ipcRenderer, options); +//# sourceMappingURL=preload.js.map \ No newline at end of file diff --git a/dist/demo/preload.js.map b/dist/demo/preload.js.map new file mode 100644 index 0000000..be7bcde --- /dev/null +++ b/dist/demo/preload.js.map @@ -0,0 +1 @@ +{"version":3,"file":"preload.js","sourceRoot":"","sources":["../../src/demo/preload.ts"],"names":[],"mappings":";;;;;AAAA,uCAAuC;AACvC,2CAAyB;AAEzB,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,CACzC,WAAO,CAAC,WAAW,EAAE,CAAC,sBAAsB,CAAC,sBAAW,EAAE,OAAO,CAAC,CAAC;AACrE,SAAS,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CACtC,WAAO,CAAC,WAAW,EAAE,CAAC,mBAAmB,CAAC,sBAAW,EAAE,OAAO,CAAC,CAAC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..032df0a --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,17 @@ +import type { IpcMain, IpcRenderer } from 'electron'; +declare class Passkey { + private static instance; + private handler; + private platform; + private domain; + private constructor(); + static getInstance(): Passkey; + private handlePasskeyCreate; + private handlePasskeyGet; + attachCreateToRenderer(ipcRenderer: IpcRenderer, options: any): Promise; + attachGetToRenderer(ipcRenderer: IpcRenderer, options: any): Promise; + attachHandlersToMain(domain: string, ipcMain: IpcMain): void; + static getPackageName(): string; +} +export = Passkey; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map new file mode 100644 index 0000000..4ca81a9 --- /dev/null +++ b/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAYrD,cAAM,OAAO;IAEX,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAU;IAEjC,OAAO,CAAC,OAAO,CAAiB;IAEhC,OAAO,CAAC,QAAQ,CAAiB;IAEjC,OAAO,CAAC,MAAM,CAAc;IAE5B,OAAO;IAKP,MAAM,CAAC,WAAW,IAAI,OAAO;IAO7B,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,gBAAgB;IAWlB,sBAAsB,CAC1B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,mBAAmB,CAAC;IAQzB,mBAAmB,CACvB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,mBAAmB,CAAC;IAQ/B,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAW5D,MAAM,CAAC,cAAc,IAAI,MAAM;CAGhC;AAED,SAAS,OAAO,CAAC"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..ef886a9 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,59 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +const node_path_1 = require("node:path"); +const node_os_1 = __importDefault(require("node:os")); +const utils_1 = require("./utils"); +const lib = require('node-gyp-build')((0, node_path_1.join)(__dirname, '..')); +class Passkey { + constructor() { + this.platform = node_os_1.default.platform(); + this.domain = ''; + this.handler = new lib.PasskeyHandler(); // Create an instance of PasskeyHandler + } + // Singleton pattern: ensures only one instance is created + static getInstance() { + if (!Passkey.instance) { + Passkey.instance = new Passkey(); + } + return Passkey.instance; + } + handlePasskeyCreate(options) { + if (this.platform !== 'darwin') { + throw new Error(`electron-passkey is meant for macOS only and should NOT be run on ${this.platform}`); + } + options.publicKey.challenge = (0, utils_1.arrayBufferToBase64)(options.publicKey.challenge); + options.publicKey.rp.id = + this.domain; + options.publicKey.user.id = + (0, utils_1.arrayBufferToBase64)(options.publicKey.user + .id); + return this.handler.HandlePasskeyCreate(JSON.stringify(options)); + } + handlePasskeyGet(options) { + if (this.platform !== 'darwin') { + throw new Error(`electron-passkey is meant for macOS only and should NOT be run on ${this.platform}`); + } + options.publicKey.rpId = this.domain; + return this.handler.HandlePasskeyGet(JSON.stringify(options)); + } + async attachCreateToRenderer(ipcRenderer, options) { + const rawString = await ipcRenderer.invoke(utils_1.PassKeyMethods.createPasskey, options); + return (0, utils_1.mapPublicKey)(rawString, true); + } + async attachGetToRenderer(ipcRenderer, options) { + const rawString = await ipcRenderer.invoke(utils_1.PassKeyMethods.getPasskey, options); + return (0, utils_1.mapPublicKey)(rawString, false); + } + attachHandlersToMain(domain, ipcMain) { + this.domain = domain; + ipcMain.handle(utils_1.PassKeyMethods.createPasskey, (_event, options) => this.handlePasskeyCreate(options)); + ipcMain.handle(utils_1.PassKeyMethods.getPasskey, (_event, options) => this.handlePasskeyGet(options)); + } + static getPackageName() { + return 'electron-passkey'; + } +} +module.exports = Passkey; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 0000000..2872406 --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts new file mode 100644 index 0000000..4efd217 --- /dev/null +++ b/dist/types.d.ts @@ -0,0 +1,51 @@ +export interface PublicKeyCredentialCreationOptions { + rp: { + id: string; + name: string; + }; + user: { + id: ArrayBuffer | string; + name: string; + displayName: string; + }; + challenge: ArrayBuffer | string; + pubKeyCredParams: Array<{ + type: string; + alg: number; + }>; + timeout?: number; + authenticatorSelection?: { + authenticatorAttachment?: 'platform' | 'cross-platform'; + requireResidentKey?: boolean; + userVerification?: 'required' | 'preferred' | 'discouraged'; + }; + attestation?: 'none' | 'indirect' | 'direct' | 'enterprise'; + extensions?: AuthenticationExtensionsClientInputs; +} +type ExtendedAuthenticatorTransport = AuthenticatorTransport | 'smart-card'; +interface CredentialDescriptor { + id: string; + transports: ExtendedAuthenticatorTransport[]; +} +export interface PublicKeyCredentialRequestOptions { + rpId?: string; + challenge: Buffer; + allowCredentials?: Array; + userVerification?: 'required' | 'preferred' | 'discouraged'; + timeout?: number; + extensions?: AuthenticationExtensionsClientInputs; +} +export interface PasskeyOptions { + publicKey: PublicKeyCredentialCreationOptions | PublicKeyCredentialRequestOptions; + mediation?: 'conditional'; + signal?: AbortSignal; +} +export interface PasskeyHandler { + HandlePasskeyCreate(options: string): Promise; + HandlePasskeyGet(options: string): Promise; +} +export interface PasskeyInterface { + PasskeyHandler: new () => PasskeyHandler; +} +export {}; +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/dist/types.d.ts.map b/dist/types.d.ts.map new file mode 100644 index 0000000..03cc98c --- /dev/null +++ b/dist/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kCAAkC;IACjD,EAAE,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,IAAI,EAAE;QACJ,EAAE,EAAE,WAAW,GAAG,MAAM,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE,WAAW,GAAG,MAAM,CAAC;IAChC,gBAAgB,EAAE,KAAK,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE;QACvB,uBAAuB,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAC;QACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;KAC7D,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC5D,UAAU,CAAC,EAAE,oCAAoC,CAAC;CACnD;AAED,KAAK,8BAA8B,GAAG,sBAAsB,GAAG,YAAY,CAAC;AAE5E,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,8BAA8B,EAAE,CAAC;CAC9C;AAED,MAAM,WAAW,iCAAiC;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC/C,gBAAgB,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,CAAC;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,oCAAoC,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EACL,kCAAkC,GAClC,iCAAiC,CAAC;IACtC,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,UAAU,cAAc,CAAC;CAC1C"} \ No newline at end of file diff --git a/dist/types.js b/dist/types.js new file mode 100644 index 0000000..11e638d --- /dev/null +++ b/dist/types.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/types.js.map b/dist/types.js.map new file mode 100644 index 0000000..c768b79 --- /dev/null +++ b/dist/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/dist/utils.d.ts b/dist/utils.d.ts new file mode 100644 index 0000000..8682b40 --- /dev/null +++ b/dist/utils.d.ts @@ -0,0 +1,8 @@ +export declare function arrayBufferToBase64(buffer: ArrayBuffer): string; +export declare function base64ToArrayBuffer(base64: string): ArrayBuffer; +export declare function mapPublicKey(rawString: string, isCreate: boolean): PublicKeyCredential; +export declare enum PassKeyMethods { + createPasskey = "create-passkey", + getPasskey = "get-passkey" +} +//# sourceMappingURL=utils.d.ts.map \ No newline at end of file diff --git a/dist/utils.d.ts.map b/dist/utils.d.ts.map new file mode 100644 index 0000000..ab98195 --- /dev/null +++ b/dist/utils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAQ/D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAQ/D;AAWD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,OAAO,GAChB,mBAAmB,CAgGrB;AAED,oBAAY,cAAc;IACxB,aAAa,mBAAmB;IAChC,UAAU,gBAAgB;CAC3B"} \ No newline at end of file diff --git a/dist/utils.js b/dist/utils.js new file mode 100644 index 0000000..3bcff62 --- /dev/null +++ b/dist/utils.js @@ -0,0 +1,116 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PassKeyMethods = void 0; +exports.arrayBufferToBase64 = arrayBufferToBase64; +exports.base64ToArrayBuffer = base64ToArrayBuffer; +exports.mapPublicKey = mapPublicKey; +function arrayBufferToBase64(buffer) { + let binary = ''; + const bytes = new Uint8Array(buffer); + const len = bytes.byteLength; + for (let i = 0; i < len; i += 1) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); +} +function base64ToArrayBuffer(base64) { + const binaryString = atob(base64); + const len = binaryString.length; + const bytes = new Uint8Array(len); + for (let i = 0; i < len; i += 1) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes.buffer; +} +function parseBuffer(buffer) { + return String.fromCharCode(...new Uint8Array(buffer)); +} +function toBase64url(buffer) { + const txt = btoa(parseBuffer(buffer)); + return txt.replaceAll('+', '-').replaceAll('/', '_'); +} +function mapPublicKey(rawString, isCreate) { + const raw = JSON.parse(rawString); + const mapped = { ...raw }; + mapped.rawId = base64ToArrayBuffer(raw.id); + mapped.getClientExtensionResults = () => raw.clientExtensionResults; + const { response } = raw; + if (isCreate) { + mapped.response.clientDataJSON = base64ToArrayBuffer(mapped.response.clientDataJSON); + mapped.response.attestationObject = base64ToArrayBuffer(mapped.response.attestationObject); + mapped.response = { + ...response, + getAuthenticatorData() { + // Extract authenticator data from attestationObject + const cborData = new Uint8Array(this.attestationObject); + // Example: Assume authenticator data starts at byte 0 + const authenticatorData = cborData.subarray(0, 37); // Adjust length as needed + return authenticatorData.buffer; + }, + getPublicKey() { + // Extract public key from attestationObject + const cborData = new Uint8Array(this.attestationObject); + // Example: Assume public key starts at byte 37 + const publicKeyData = cborData.subarray(37, 69); // Adjust length as needed + return publicKeyData.buffer; + }, + getPublicKeyAlgorithm() { + // Return a dummy COSE algorithm identifier (e.g., -7 for ES256) + return -7; + }, + getTransports() { + // Return an empty array or fetch actual transports from rawJson if available + return raw.transports || []; + }, + }; + mapped.response.toJson = () => { + return { + type: raw.type, + id: raw.id, + rawId: mapped.rawId, // Same as ID, but useful in tests + authenticatorAttachment: raw.authenticatorAttachment, + clientExtensionResults: raw.getClientExtensionResults(), + response: { + attestationObject: toBase64url(response.attestationObject), + authenticatorData: toBase64url(response.getAuthenticatorData()), + clientDataJSON: toBase64url(response.clientDataJSON), + publicKey: toBase64url(response.getPublicKey()), + publicKeyAlgorithm: response.getPublicKeyAlgorithm(), + transports: response.getTransports(), + }, + }; + }; + } + else { + mapped.response.clientDataJSON = base64ToArrayBuffer(mapped.response.clientDataJSON); + mapped.response.authenticatorData = base64ToArrayBuffer(mapped.response.authenticatorData); + mapped.response.signature = base64ToArrayBuffer(mapped.response.signature); + if (mapped.response.userHandle) { + mapped.response.userHandle = base64ToArrayBuffer(mapped.response.userHandle); + } + mapped.response.toJson = () => { + return { + clientExtensionResults: raw.getClientExtensionResults(), + id: raw.id, + rawId: mapped.rawId, + type: raw.type, + authenticatorAttachment: raw.authenticatorAttachment, + response: { + authenticatorData: toBase64url(response.authenticatorData), + clientDataJSON: toBase64url(response.clientDataJSON), + signature: toBase64url(response.signature), + userHandle: response.userHandle + ? toBase64url(response.userHandle) + : undefined, + }, + }; + }; + } + return mapped; +} +var PassKeyMethods; +(function (PassKeyMethods) { + PassKeyMethods["createPasskey"] = "create-passkey"; + PassKeyMethods["getPasskey"] = "get-passkey"; +})(PassKeyMethods || (exports.PassKeyMethods = PassKeyMethods = {})); +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/dist/utils.js.map b/dist/utils.js.map new file mode 100644 index 0000000..2bbeb59 --- /dev/null +++ b/dist/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/prebuilds/darwin-arm64/electron-passkey.node b/prebuilds/darwin-arm64/electron-passkey.node new file mode 100644 index 0000000000000000000000000000000000000000..ac9f108e699ee8b964840166033d3556939f1e79 GIT binary patch literal 111008 zcmeFa4SbZvwLd=3ZUT$E7)=mRl;uSQMIaC$AT1k`AP9y?qEJOQo6Q5+5_ZGx28hra z3$3(r+pML%Xl)HhYm#be`l3h=l`3h`-`B*p<=nR1mHc_VQFB|A0R(n_QMnnZpSRv@Xf(q}vGc3DPvv`snGkH{mnvVV_T&D9kam8a z2Nb_9QWAayp98;5X0*N`5Q(P9Ck`k+^(qhqJ9Ruw==E;!`@QBizu6e|Mt!w*`RbWp zJIhC~BMl#&4At%Gt;S1Y7IL$?*XE)>{qFUf<)Or(X^CGlB=^m#{l>1a^MK zKa%XEFQ*v6Hh!eG_|NN={2IfdXeb>&5Az$#6a?G&#d%SL`2{xlHkf33cKO!Y zyCXXpivkrNYf)@y9-Wp9lZ^BXW3<=X;PXbBH`Rt3yp7RtMt;Yc4GoFbdJYAjmCTC* zu4mlo+2uQKC`LyxcG8bvD?gQ*_{;nvW<%Iqk73QuuWg9px0~f7*vb#)ldfH*eU>dO zT7K=!uTo-#AlN1!V^rYv##yE1*US8-a(fUwFu&SJVz!c6U-x;6(Nv2RR(@Pe983LT z86K~9s2_k`c%oGqM{;kL~RCajg$Bq3U65eoUXA=rlS5R^W(+z^z$7NKj1 z5H%|du@*430r`T;m4-MB;7~L0MMA*83$5FaA)Ow|dn?5eX8N^mHN@R%ke48h%E|wJ zS>!3-tlTfv`Gc?JUY9=`X>L5K4k$Hul#EMVjkq-DD&X?)=pW7Rit!LHlE<;F1YN}t zGn*penGJzjda9ZuQFGIbB{S-p0U;B9M7I`?rVA|k9$d*aVy4PGb7i15>j8#!K%s(ZwdI# zNV-Bws1SQbSr2MQU60)UgJ{j<`unfGdPX5vp6X3wrOq#m|3JOJJdk{)p|H6$)D%RA zfr#lvOU?uSR8CDwIn#{+^e}K4r85(F=3i{(FJ1$bTyGlrW|UZ4U5G1?i|pqK*!w<& z(-IW%XS~%W4NgC!W9NA#Io_T7vvbYMild=jhHaAm3^5kZIk{*gb&P0RK*HPVA&} zOy}Kz-vWLu(#F1;1Db-)lg_c7cOhNz$&Gyy@wekVa%G-or1c@~4$yhVl=XeJK_XuZ^ISdbqT#ZyEAXT~OyfnKrQu zZ7*Vz(bhLg9f?lT@zb2|q%*&B1?ZLD^E)f4?o`)qSL^}QmD2N(maeY&gh_R#x{<9u z4Ep}k++$}#=cCSfsQU%b!G+L8K5Vw2Hdnrt!IZx8OfHaRw945Nct5n|< zmzVXu4O+5Gd`2MDy;D5ez0-K~B>M5IXxDD=%5k);9t~Q2&+9PRd{4fo?-I0^>@)tH z*be9z-zjQ!p^fcyLqSJ0=>LcFVLulkPtW=V?! zGX1Kuz8`UVHPX=j;5DZ6Nu))Fh}dFh{_8bo`m0GM@(&Y?OI{ae`>RRr|3I7luD^fG zX(!nh_3JU6-vy61Ve3kl)Q3iQeg*+P9(caQeWu-cORv4p z>`&Wgs$nNpu$R@an;T(2l^th7t2$s$wth3Za}LVR+;2vAUJZO|zbWV>|D*fO9ncNc z=k!cVzwsNg-|UpSBpr_KJcT&*FX}g+0KM)vpF&*ro0{RVpIxBR%aN9@z7u7?$y`6` zJIBGJ-#G+*rvN$_4P9J>J~O7{>~pHm*nNEa&hfpf{1LHlarytkb&_?wrmW9rsmEUs z$46R-zA8X{ZpLq7&~5E%K4@WamwWz8EfBpaWCnIaEpPH z=_ioxytaeviqaP#z0Enk_a@M^%`WRZFxfcvkl#2~2H*54P2zFO1)c3k>%LIT??(HNM!e-hahT#4 zBJOf|`X+(*l9~%*55xXRU(=CJdX!~;q^wT>R{e2wC$$g!Ly?>0skt!b;Wn7SG?ybJ zy}ge9LvqMEK-WEsh4lOX&iGe>?_MSPR2?sj^^_|7w}Qs(Z0SiY1wzwf z^F_7N(dd{O8`r?LZ-$NEg#KOK0h^coTk5N%tgjB`cHb)cw9TCKJ7TZCYQ%P-ecnPj zN+(vEG2%9J`k|aOHsk0xy)!pqGZRv6=C|P6JzwhsHZwWZW2{mB1a2iG{n;W4BW zr|45{a6#-l7!Sz?HzQw-Y_I&zAmZdBh=%N&Y_1-27RpC@$2V;Xq>dMq^<9g+RMt-D zRLf8KZbQ13^%lfQ))UA_HYtq7FQ;u^%zw{rPi<53X%9ip{^!K8)2lG&-R|f(yHmv8 z#28Qd>PC2i%8S=)bZm#LS3xJq*M-kZQGY5%T;azO<{QWqp&NqbI>{4*FuG_9D=V!&DAF|5(rl{Kdc*;;G^CRbRU( zHbIEL<{MwUpY&D9^6E0*Uh`Z#l__#OeH6Zmxw!*#Z}_Fvm*e^0yyP_i)y1{0Yrzpm z?|kQ_o_n8j%DLVtfi=ceD7PDJPkG2jWZTVEc0xYv0Qw=#(b|!x+v)23JmuHAtQi}_ zcUKEaA;)Csaf$FKdhjhkzM8ZBk1Jam1AoYUyJk#mJnDnbfnoldSbx~{M>d9UbFsfS zVlE;21nM{mw4^^N=W_UZ$TtpUwKzmy^g{A4`JHw>k)On;#tQVfGhFHu^HcCAAN05L z$$pGuZ?DNg8)D6~eF$ub);&V5dG7qY=ykbUR=Z}2<_RwDzlKxFG#7R6b{d_SpYKH- zkNUf(#J>KJI7WQQ_Gzs6G|H(XoauLv1KN;I8)Z80Cipp*~{VY%3!00 zT+@;Kk_K%fX$(a}I)pw82v2fsgdC(F2OfNVN~J@OZy=rQ|GSXu^s1+!7qzCOwwVfh zcCikq|Kb~)hoh6Ieg&O>hpf*+&ieJ91-r4XXmMao0X-C=Tp#+B#MP=g5bp2bf9H9+ z?MhIOA4>ZsS){K4&mT)!@;h6RH=V7t_V@p*l<7pmR{j-v<6|UjWejZP^LW}|D@_?} zg>*u?kh(z|V(d{ih`QE;j(pv2)U`?0b#&)*s4M1OvaUU-Ya7?~ZP1a;Ykk`5P5HWz zN7cKa^A^O@)hnq^d7i#IA-4y*rTh|Sk;~c!U(L`4M?q(oh1%e&aamIP57mM6n2zoX zak|l+(-8kT=J;o~KZ7-xh`oR|IlKMY_L=9yAC(&L&raA7_7$84{IkLS*^vGfWB1-e+AzzRVPke|+y+FT1-l3egZxsB%PLeaR_u+!h^U=pA7{=?vFu!&cc>0WHALgW_ zC$;{jH8=U;{eJ5A`JE>5bLjq_-}yHKFzSTO5!v5mx#;hIM0x4@^g__n`i#b%wB_u) zJ#G22UhpTH|1t2Va<8Wlay?7+d(Htr=Yqb5p)JmXpL4|9Vwq)(m^?HwM(igaqsNFV ztz(2C=egs6m%jB%*z|C5I2V1)I!4e~M`Og!oa8a$9?)6Gh%ZCFiSVHl^Df5Rh}OIL zomapPx)FCu-94-7HpkOqy@({cnEfyNK5ep>|Nb?vw3c#7-f^ z*isZl&VP$8#hl{f=#9b2? zs`XBZ1M3~56ywWA0d4;WcU@; z9dcZbI$6`5q+g^@K>A?*;4=6Qt3Q|v|8MmNnA5%|e=rJVQrYL?51gF$tqzx-15 ze>JB{(_d}?-r8RlQ2(;bsWSDKXFzA|FaHVoqz(6ukK6DqG)|%o=G*M7VlHdEt*q~6C@aTORzBj^{_-6z3qCff@3m#%^;e{S zSpDTBjWw#j9JTb9*5v+@PyOZSv~%b$zeC;LOMe-TI+JaF40W>hm-#&BsX}_c(+R&l z3_bxqd;4(g*O1?K$nlVD3H|%1-j{FRd1BhvGO+Uje;c4_~?*`v6YqOD_VQeZ0&?8jY8Ck5KLL z7QzFV&(OMq#&P~;}D)6@@sFe!CpYpT!-c@uFn4RMc)bVuRuBY zaQa+YSB*A2eHV@PJbA)P`pWP00@pPZIIjom0#S6ruhOq2*)YDipBIS1%$O)*c}ni0ZtOQ> z-zs)LwH3m@BJAnsIno%+7B zmE$SuGlTuZjYzYv!(30PxiHO>u?~5h>09u{Ut<7m>HW)N!oWn~T0R1Z56|Z*pONPrgZDUN8E{H$8*( z^8}ArK<66$pEr6Z>~M4}!Cdfd_FvS8P9Q!BHu);-bR+nBVC(x|rTKJ0rw?$OQ_P(T zn|Dnd6QlWzJ|B7e5}J>;tnRs1JlPMwwI6$f%H|6szdF#izaY}N0_Cu0HQ$o$^~Pw`Uha!x&%k!@J?Vm^^oEOKPa>V#Fe&}WMX~Q9-7VZNS=ZI| zPqXbo*MA(Y{0!EK(ysmsu)Tc^%$uL3wKUqT9(Gm(y4jFDT^pSX?c@x!_W4*3+JxGW z{M^)C0=jc`UJF|If+CWE`q{t#o&2AOji)|kSxkjpgpENzKCHhWkUVt{Dd}p^`2R=*D-e_ysD*0_n-;Z(RWR-~JlbpJqpuLBAoJ80&f!76>c>0>D zo><4pdOpPUgfIC|q?7Mddt9ky^^Ea6iL>C%H94ZXf0bB3{^fC$J&}C6dkn^b0*smD zzm3jUSCRjx@p5$MFTuBGm1jXaWJ^agSJO;R&^!g2c$=XvYq>7p=I{-Kzr+})>z_$C z)Sl^Z+P0}JNYBTKFMQAyDA#U}0zR7jP#th>w0~vuRc;#FEI#v9@Ji?F4Xj0JAAtM@ z)|<9*uAuXF;!kU_Qqn_y=OrW);$ei;Pj&iePH#YH9TS|OPd6r1BRzS}nY{id9jQ7c zryD3!>IX8kQkjtHH|M3dY1(&s6Mc-^||8M1Ve0|^w^i~KZ0}W(#Lk+PxC%1w+8K@<^CSa zJ<2Bc*E7idHqy1+ROZxo`{&WPejn1))uY?l^^qD!%SU=3S3UL>)8*0jIvq05o-6*b z2GvH;>y=2;V=|Q|_ft^bCr}=>T?k>i{o=P^kGlQHHpijfC()h{p$&B({vPqb_^bAU z3p%5ui^(GP6NEIj9DuH0mAY2v4&Oq4H`y}s5RZD!{|rLfJJx$WHzQxV`SHU@zw?u# z0W-GdZ8m zGXb#OH=N5n=2Fm+|Co3V^OykgrW+&sOP!dn41@1K4`TqWH+$q z*IjDFu7w`v(Y`kJA?d7nE83IJs~-Yym!sw0p8o&ue#otFn&vqZ)``FV5Oe6a z?!;UNdTDZs$1g*h{u1wbC?2Cb*E5fMZ9JytCwQD3j`(lEW2cCHX@q!u19-HL@_c8k z?2}_VPe9i+mvT8vzVp^(qoW)1A$kvk)>^b*GX%W*KR&m(2lOW(2iZ*r%`pJaK%Hn@ zsrk&3j_Z+6jtv*VpX@YZ$IieO5l$uBTKq$0TZ=t?&!D^$^Ldp2a*K zPQVyO`7oz`mgdsW@py>wQObk;rJg%6R~?2uSNO@5s8bE}iZQQsV!;WyE@j&R%|vbj&Z4^n5qc;(C6_(b1is ztmj97Cq18l%%tP5^7u=-?E}uL+dEip(y>+UdgM!|+b5B3?Q6FK?jBm+@g)l7dSfN* zcLnVDddyj|t}RvTS~tC8rN+?KiCA}Bh_>{BhQ?_xLYj|~jZ-`S8M2V?8;wV&^&k!Z z+6}`Zb`jbH`vh@(H}K@AT%1NS9^vyVO{aaQ&O>dQLvuv5zw}pV|Es7T=wt7YKZD=7 z7_fb;*S>V>I?sY(mx}zWrh7UTV|*!j?5_K3F}6J97svd>$Kp@jkdJ)QR+jSs_R6jP z^cLh77Jpj6`8Oi8>f3>Q>HKLG(o_9u@_29crB8sbeQij(wwCn=oYiPQx`*P>$IA%q z`F_p$be^9Aw(E>&2GZ9U(ii3sYCOsBeCcmWUsv1e|3mOjSO0v_4>Skbe~xDpom`h% z3Q^ztsV>+%vF@AbH3*HNB{@c~;ii7(>g+~d*|%sOZHey?<1ep$CXe!z_0A1cCd^eGm$Tyk844?)i+;G z`O=IZQl5dvk5iY*@#8DxOWw~u!l)9+Q*L@kk3AT zyo0=PJ*OEz#)HN>evE{UwQd8zS>^uIyGpmDW2epFx{g$B#UK)!T7k#zfE_(YTB zK)Ew1gj_cvOnt9OpPSRXyP)%4=(8Sv(1rKOiH6eX9V(fYtI`O@oU7wA;MXSS4$1E> zxovZXT<|1cNHoo$so}MHA>tR1Og2AFYjMg?dolYlU#@{XpG7`5bV_mZ(F;kZ2xFvE zi;ta(e6(&pL32jz6}8KtI__Ny+0GrbZImvv8PM>M)}jFUFLV* zLGnLG_h!`lgD0FgHv|5UWHVP{ja7-2sZy$7hydz_fFB-W9xDV`1kXF8Mc zbc6n*pgDal&KdCD5ca5L+RIqqQ2C^fzoA^}C+(9B>5Cenk2b{r17UmQH^tZ>^7%#enc%0_x^e;uYznrtugf4Lhq4~e7}Kw)IX&j znRd3M&F{PtA=yIeJ)*=K`v{#s<%kXk-luyFx_EGp(VN?5U>z0{s*$j3}1TSB-Eq1DHnk9^X{zz(I4!C3I?#`_AMyiIhmiZTQvUqT zU*Y`?dQay}C>Qq=hG2a+6ze?uJ3Eff6Il0Cn@++zH_%~U{on8SMb8-VcrV_0-SYc8 zenEQ{FN0Sf^2ogb#4m=dm*Byf!y!NJ6ud>_ANKs{JxPDKNq{jX~bYSf5jPPwaa<&J@fIv-XA^T5RZ!7l1ICT7?1YA)+ZRw*U`_bhoPKl zg(G96TjTHj)eDe+-WN)H7nSm!7<@nW6mgy;TK%&|#$JQWzjKc7JONp|MvA$2$$crM zYni9(V)_0(>HO!E=iUCII>`R^WuCq>2h=*8+M0N3UOz)V56)i z??BmfW~*gi$+ACWlYJq}KG7i_FF@IEf!}?I(_Vt6{Rq?Uwb5S9v}9ZRZFS!c9MzlZ z-;MgY0V{tr8vZEp-czslI`oaDc()&CIM1mwoGX!+Y?Me>EA>;(NJI1>C_i67m+@a(g-K>BmHmkJ*I-rKO>~`PwTlS&EHQ@c}@{~27bN= zzHu1lVSmJX|1KI6kWRjs-hb@I9vb=F*Z94tv)k1P6{G z-%;b+R}s>^ojBd0*-3QksZM7Sbj3{f1%%WO6LiVttp%O?Zwb1qnC>ow*0Fso@{zxP zwy$4~?YsN><=7rTy1j1X53J+uqmn1y&&7LIKC}_dEpl>10ok#J1;h0ImG#}LqVfHyYn{8@i3Re+-?!+ ziu?O-k%#O>&2!cJOZwd`I+a~u-ap_P z0rz&epIg=lgV3yv`@M6giKQ!Np!S9iEv7cAx)!_Pf@&?T)!@E+%YYZ1NPxEwUfFJ@kAJcsh*cFt>!F`%P1 zAAwN!)zREW8oofc*&urPC2UIS1?vF4M%!f33nr&YdKt=kx!tChxA2a7x;5HT(0`a~ zwBvMt2)0h|P}=R?x<+eCqc^N?q~4xJ*uRtBDIJdS2xp+%M`EnQohIA*_4ClpTNt0( zExNfv>*gVGY=zd1U#(xeFb1|EK1S;1*SvmR*ZVE0n_GKnf2e)ut;N{Sfz8~~+mCdb zlhHc|M_@CDuPEur&;9H@0jyuiUlc5lN*_Xg@V+;}`|gDujiW()97U)P+6VNTF0x~9fp*R4wq&6D$oPoQio?Mlqk{}cBf zQKuAoneTEcqhKT6(@tB)fV9(yHh*LH_a401E*r`FXS4~;``%t-K$qAP!Te9%sZ?ut zTBlE?dS4Eoj(IJ;lP6`mRO#WaxE{*;uvc-o{iAtRyDu9%r~WcA=k3X28qJTWocX9T zt-+-}x>+A$k<`b6xIW7JTz~I>{I^5I=4Ulu*7vhCuOT^D-!DKHE1+|$ejWu4l|^&Y zX~;VbGEald^j(dKpg+646m?tzd%=A~r<%uN|3vEjO|0D|FN?nZg0yt)hqg{?zXp5@ zf!6+X|A*ReAL;Zt`p$|2YkDWjOWZen(>WAl+K|q-ow=QT&K$gp;Ou+{`y9QPlhC&p zrdoB4_lTuTtm|iWeJ7UpVLUtRTAWwa16{X6*Y8d?rX8{9zHhQ)8ucF!M3g*xsk6B@+?MKKI}V48ZOJwux$T}Hd6cl1nr$Dt6<|b zy8YAe#=bx`+25ZKQX8c!zXbZVz7NyuEydcC#%g6Ni8`qMl#Yi$Uv7r(+^8G%`;(Zj z>wbSH(j^aBhp`(UdAGm%FzjY&hWwGF{12e5_XS*1 z_uN-!3TpFHQ_+UB$0f#k?&!ihEEu~_T|dp!2ire<)x=!vsh!su#}|ldgYIS(O{9K% z?@c6I0eweA&Uuec+@{i3A-yJF9LAiQ-v2#1u}7sZNBS9^wr-N-QHC_wYiG{|;xO$o z%lxk>+((E%(tCCKy2+AeKJm{}-#(G~52^G*q_^Qa0pyotdbdiy8tL7m#9`_~GJWb4 z$>(xP$GgJ8S7Cnvv>`wt)QNfhq7ss7KA^vCDvK86ghSnciufN79(I1U55~ zcwrA^k_>ylr{tttn@y%%Xu<{k8R zh0pJ-aV~yYz;}`^Pv?93WFF@w@}4}s54Z#4CGFd^ARqcn0pU-BZ!zNCzbNULhmh#z zAZ)`pNjh%BK9a0Y{pFZKVo$4!-nq{26yV{(JK0KhwZG{`8qKw7u7P(}asPVp%X6q6 z$lnEil-Gki4?4u_KGcEM4}^2%;2ThG`VQ3oaL*-*t_EubY2$ZIjh%=0^M_r4{ef>{ zj~#oAQl5jC$7p^}c0&8Bx;&D<8+Fz&>G_9pzFg4xJ%n^u&F(MI9_X)$J0HE?W#|*v zVXtT@{JWYDd>OR#PCMzK32`^xi_!16(>c~%=mRbf?qFbThQ2HBvC_IQQyzMcMc)I- zl;=16Q=H#(u=!S@30fm_G`~gqLL;`||NP_NU`<+>eOIF~_BN z9?@Fkct0+lez7Hv{nI!t=aFS`9vQdhnPka-g(ZHKB|gIvpKXcHv&0u#;vcodmssLU zE%ECu@d`_PwIzPDC4P$~e!C@JYl*M7#6NC{2QBfiCBDTHzrzy$q$U0-OZ+pI_~$I~ z&s*a6TH;@}#P7Gnzh;Rau*AP%iFaD!-?GHNV~PJCOZ@wm_|um74=wQ@S>pd`iT}(J zf6)?u*%JS6OZ+#M_(@Cr_m=pdR2*}pQ-vod$4*`MOoz1L*($wKh_QW`AE3_&iocDx zo8vUUy@unb5HIEUpApBTRp$Q_;=kkg9}vetB-39*`~q}d;&}q`B98wC@e+>z58@RZ zKaRM`ak_I5=J<<+Z zh`0e~MEoB>+|BX(5dSF0zl``Aj(-vHyEu+-Sd6)!Dth*4O%JEMkUdr+9h+_{{=GlgL3&)!fKfv)Y;?HtCg!peb-hlW!91kEq8jENu zYdzv~IqpY%8OLi7U&ry=5O3u8Er@@L<7*Iqh~w3WKh5zQ5y!cwW8#@wX74 z2-}`mS=yIJzIleSYZ|llBk|RP;MWdN&ItYI6AozWQ;2#(S-!=&T;2`++LGX_Zfrlr6cbCPJjOn(Dos|7ja6TkNjs4--Glb#Cs9%?>F+q6d|U#)`?sK-z>wu00M>Hh#B5)Q#BX5RI=|qGDN@gfF%7 z*=3A4WQaDy^@t(bjai_Oc}A6uc)$=fu6>56U&m=9#Ude4o*~L0BdZP17)^2T(9Ja-40Z-&EYzgBibEEeZ%28o+C~>=$J~~Vei01VeVwZu~6Gp*NL%g6AfP7aj8jl&#x)BGl z^=V9f#35cW3J^bS6d=CGQ2=C{gS18ZRXleHPmP49C_S|~MHv*F7_zPzv-rO6m6?>}j{GIMPN=9YJ+)?GP)G3BL?!OpA`^iSxfy zz^G|G8Q%yEwcW-QC960bp&*Nj#J zU)}3ik93FT|>m4T(X3xaz~&o zkL0?ZN5))ir%S#gq-^AWVAiM;!)rw``cwk8;m0?Kl?s0asv@iNiUZX_Jzp_gIP!aq zqI(_GQy*}^*d?zE1x#jY9*n7&9F9l#i#f`7q3+X1z~C3T_CZsN;6hsA9?6Zt2euoa zJqnNJ5XYs~ARFto8*S-AM`yjhKzc>zQDvTs?k}Y`gNmqq)>8Y_pncj6H`?cjQ7QT0 zPZvd`F{BBlvqQQLb0{-@_Ryu0g*~kGMa+3cU8N zD$VfvPnn;IKT%C*cFtZOjC3q>GO84hi07S)rduNGmm z!31wn?U__jr5I0|zIuA8*cu4dg|0N(pqA|ea@p{8IId77g2p>W`ixGdpN1F5(!P{(>ViK@h!?VPDfn_SV*_5zrh!Yh*Wj>LqRf`NOcJ6i-!E6hK0z5dM#-#4>oNw!>Efm*S=3qM0Y6FQ3pZPv z9J*RzHpiQOeIOi(Dq9itzDT|71@W$s)Z*Hn6Fp@~YHyB980V2tEone^GT8x5@&jlb z>dWPun|x?Fj#P(~aZ|zy^x#$NOR4z@yusX5YlbZeH~Sg_brv0ojV5YLy)rPP%j1Gh1+$sA#lw^^%|;eGLUC z>6RP-cRCUFZ7qqy4wP%)wxL9HKk`O?ALJtaQO?qa0MZB|4ZsaX8biT4bcRF)!e-PL z2m(bxDfJ8yF&oz7PqYNiVXIk}Xd-AB$!VM|Qp=!{4b+1u%T2K8o6Rs>BgBD~!JDl& z!)Q=K*ZW}HC5?>@j1-Z;hM+In6gEYq2|80_ihGB|uqX^Uq!U^g+ z!ms*~2NzPJZ) z&TiCxh8w;FULv@`O{Jl&A~R;p$jJI*DBHcs=U-Lj-eQI$klI}rG9&I_DC&kn8bjfz zdyQF34IFfrR4$Lq5XreM8Bv39q03?s?i#+TCHqRoxkDzAY*p{@p{tL}wqhN3Uu7Bz#^ zoU6@9Q$sW&Fc1XM0mFzc4{jm9T3k+3-Y{QsE`v&RfkGSgE0%$xC<-Htr$fb z16~-U7ZZr67vn)F>=n23kv*vjzyP(*-MwW}&k}kTsJ{;Ow z61g7MR3&GS%}OIMxFAgmYEiG?me5A{N}6znnxgJ2gXY#Nh1ZMa zaf2^POQTicn|&BAf>E7-=@N}vCDD~wGe<=z;^k?H*I#e?H_q@2opZMPBOh^Bt}Llu zx@z?e-Wy6vF@?F}3iqU@pt-FP6J(Uz$fZmY8%vkcgi_8=D`=8kx|E!OGJrLDc~cQ8 z4K+3chvga>b@NIrpb~kc`$&ge8V+q*d&5e`D|eS5D^&?`<_RYV#lq&BOq7UdHO6%; zxJs9*{Ap8|7cyZhK<+BctZI%#%}p~`25Q4tPt7dFsd;o4EH1B`A^#W2-VC$*Qc+SxGru$oa6Kgz6;-?p$e6Vf^8k$2axM@+AfUt&reJ1Zr1=u@&083KBZs$d z_f}Nhg30|yK9Nl5nFQU)h595aG_ha9*|sP#NI;08p-CC54lW)$cG9_1R#ZtB{GKS3 z@em0_BrTCqEBEHG zg(>&ouuoTw*A8gkk+$S=0OuedrR8|Kum`yu7k!af17ss!uA?8p)}Q-kA?goc`w`&| zgk5V8N4Rn=@*>7PQq5U$*bvnqteyM%B(4A~KmML6rz&?CaG&p=Lu(Yu9cKv?%#R0rXX&p{@H zd+&i92%V_r2vH%*47|CEb}2&=L>)TSDO`0!#IWMwBIk+WV#xFn!m(_GaQ2Q6#FPw+Qi(GM;$k~PuPK=!(j2GM@CvPHTn<$L-$>1|Z~n-msZ{5Klv)FbZZ1Jso=B8*+7kh@e2-&H0Yd&CoAZryCDc;T&s7Rg;bd)Fgk# z9jl?t%Z$7c6NDQnWAPlqOHK6Cc|_T$yssHwbr6A0v(iB=lCJ%yimrz;(ywgPtYt*_ zMd#j}FXeuD2$H5#GMgnL;@c|u`XnrT3b)UFjE5Ub`f2>*jL)Rs?=wDA{eQxE3~fn2 z&42PCm3&^>8J6%j31SRP4FN3m_oqSC;c@2IL2qH|7DEV z{z5a+^wSuhs}US({7lAYvX5fMXR^OlgOq;@<1@AI7RIm5Am7g!zaj(v68u9Y^t(U> z@xQu$*DyX)|C-PEO!`~Gcp6WvKh6JE##dR9h->_}8K0^CKVdwE)})`N&;71SzAXux z;O}QVreH}wP5(p2XOi!t!-@>Ubka}LuVuW}f4hqZI$S8GUk!&{98#Kx{$zhy4P-Tt z)j(DQSq)@0kkvp|16d7ZHIUUnRs&fLWHpf0Kvn};4P-Tt)j(DQSq)@0kkvp|16d7Z zHIUUnRs&fLWHpf0Kvn};4P-Tt)j(DQSq)@0kkvp|16d7ZHIUUnRs&fLWHpf0Kvn}; z4P-Tt)j(DQSq)@0kkvp|1Mf)#JML52cXPOx!!`~d;qVC#pXcx>hp%wh!{KQT#r=x! z2oA?`IEBMm94_K;8Hd#z)^OOs;WiF;aoEb?101$siBEFIsOJ*5!YS`RI^uoeN>P zXHNAb{m>^-hH$&>wY9_M4C#w9q#t1VS2!H?Z&XU+yXfi4C)w7seUxy1NrXQu8P?wy zNq1kK^3wMUrt(9u{)KJ*u`xHU37sV=bOWLsZG2Dvd2Zh}mV8LaQGJvwLR$eZ)85& z|LJ=FitF#-{#D3fh{HQLyqm+Xa`*~|2KVy|IUK{`JPvQ=a5IM^SiTs;+W-BK;a_t2 zTMkci*vH{bOt0;2FWX%Qhfi~OhQoaJH`6%W#`N8IDi#){qXK}t|gXGtAnt%N{=GS!DFsp&A2C^E+Y9OnDtOl|g$Z8;~fvg6y z8pvuOtAVTrvKq*0Agh6_2C^E+Y9OnDtOl|g$Z8;~fvg6y8pvuOtAVTrvKq*0Agh6_ z2C^E+Y9OnDtOl|g$Z8;~fvg6y8pvuOtAVTrvKq*0Agh6_2C^E+YTzHMfeR*Xt6H*p zN!5~;tHw6Eswat>YfDz2%YPuM8DG+vr!rT`SfguoS);4bUA5$v((00$**B~%X&l?= zZp>@RaW#%zy#&D6s`4ADMjtKlmQ&fW}UckvuOQb+$tqs6#GFLtu{9|1(?sO zCD)gFOIMauRe7h_>slHLM#G_o1~V+ePvk-RfihP%_@e7W;Z122R1$%PNO_{A`2BM! zGb8?RpfMT>iho`0(h%}*6fI9A%10h=giv08{YLMGCSSNtv`j@M zy}m8JK!dL~&=80=d$*Y32=s|eCK$AO>Y5wsK-X03tqlZaom{OKdXn3#0@mLM+f^cl zcVEz2fYNTM^HpvUn@M2A8xWVVpl=gLwyKDC!?tbSMid(g`jiN>MC<6(BEn%`vj}(P zflHFLR8*DuqCU~mZLO<4N5D^3;tMy6mRYF`ZfJ`7Y8%WFS;T;hDw-M^6brAnbSYF0 zl?J0#(QqKRp|rsliLBN=RBS$ObX_&J^`aDUudiBFQH5TO+Nz!}!aZqfrI?D=F)0jI z)qdRcN6F+Fbwhb|iSB6?RT@3El@usY|F4ksv$WCyWe<&-Z)5$ za{jPD6P7Mr(iE&~Ft0PCaARaw6-}FJ(J@*@*agK@RILncARv!S_@>}in3#998EM*N zQtDV~Mio`jIbLsJ;p|#pB;bcFlCGEgE2@y@ulI$$=o^7(WVye*9BB)D4KRHl`Z6Vy z&kLK8z#V4!CO`2%)bp)V}*int)(58UW#8EpgK8h0MaXVHSn71jqzL@acc6_wC(IRk999?HZ z2d39gUVsQs*)b3aZY~-yCA!ywZh+hNCP~%e(8^s8=hl!=(C#>5gBkTguPD$&CqSuD zuer@{Hp<};<+mo~^w)X=!S&LX_9Y<{A?ZJ!p)Dyx(A?^c`obuVYSo^MBX@|@LrJMz z(PqLtk%WoY(YwXh&?If4D=7oqg;b+7)FVkKNx|Je-a1F)S?YZeueIRgaZDhRPz(l| zU>*DiiPjy@LER+9NPFVwut{d-g=DZ(nk1odElBDR-mPI@BO!V%h)Adb7%N$eQ#We_ zt%sq|tVvvOT+;a0+3QJT>JzLSQ7~_XVY3MsH@@|)U?f9?DDB9=faT-gFI0SeU;0A_& z!f+eIBZnz`{lHPs4!h2d_7-RCL#>YEgP8N=%sjshlm8X5j2!|t0^ z{+!{2ZxL+_monV7M&Uye#`k;HD)?&*Px+XFzsGP7!$%o@gW*3iEN)TxuO6YwYiD>F z!@F-)_)XOJ{g|Ou%}+-U&Qd~fP&XBT>Nnbe}dtH zjSBt>!$%tw{5->XK?T18nCxpe!}aJM)Sgqq3V)R0wGjo+#RrxoKC0jvz(jw9;Xg9I zZkxgnyHMpXZdULfhF@U#FvENAQ21_!7j0MY2z-Q%%6pCBc?=)iq3{P8KF;uj0+s*N zClvm6hG*TW;HMcr{wW1d9j)@O+^OI%GyD|8{R|iHQuqLT5y|ri!@pp7)~6MI=@^A? z`;3DB#_%DAAI68ah`x*AOUEfVdbi5Im*FRND|pSt3V(#*A2WQ0;rW*+{H)Ka{9k9d zj^Qce6@K046#f?sH!yt9r3$};;USkPc<((b|6L3}vPZ$!Pf+ds6vJM?sI{hVhTSQFzIXWUInjX{6U6W7(T-AlMKJX@JWXA zz9i)D!ikE15yMLuUd!-f4DVprJxS$nV|Wk4&olfq!#xcDj^PnsR^^2zEBdJne~sal z48I8YvK;uM2ULE?6b08Xyolizh9eBOF}#Q2E{4C(a5uwGGAzET`2Un)H^Xl->|uD~ z5 z8^dof+{JJ|!`%!|zmm&;P?hgx*v;@xhCK|oGhD;)%M7iC`gy%;p|9pm*F}#`KN`{{SJZiKM`uljVGpxUlcgakJ z*WbsR&#?YJo|j?$9lU)yKY#!31jG7!cavr*e)_w1A%^w$?T#?4zh8H0p~|nnE4iFu z{oTJX!}@!Z`xzGe{lNcVSbtCO4ZxRSPNTo0Ibk+n%whER2|Wz!?-QDUM_~@r%ik-E z68@5w`1eY`z_9-Q=W`5q@%K!J&jI~-A>8K~vO(x?or+5M65#7(O#P{~!J7cD$Cp1l zuYF-X-8|LkBMHxl%MDeBz2;EE1u}}`kB_#M6Y2@f5=8} z#S^_=Z`1ml=ryeATWs`JJkjg*Ijz@;Uc;K+O%ePksIcLQUa#kAeNXfnru!n98m9b2e;g0}2qt zc%pxb^J8d|^cvRmcK>0;6aDi{?_hcjYkD`*=|?chZ^aY6-jAaFDUx5ql%LwqF25B| z^m_k__Opmy!-{v^Un6=AYkF*}$REK}z7OF1o_KS&L z!-}olzb1MOYx*NL zdMlpj_5L>PcN4vaHNAcOwBm_g?}yX=IMHi36TKBr^m_lC_S1=8!Y+K=c~c^o=%pE1u}}c?6wL z5WR*q{SF(w6;Jf~{DRIih+e~*-Y<PxSh{gU&yQUc;Jxm#us&p6K=Y2%VP@y@oY? zBSr9|pu&bHdVQWk=PN|7VaiYK54R?N1QWd#PxSiyh0bG$Uc;0>9laG#^!mJp&Toib z!3bmq{Rk%ct$3o>=U-FCD|!uUdb|Bt@kFoB%jo=!%GYovdMlpj_4yi|w-LRDHND;c zS@A@#&*SKPj_5U4Ia3*>yp6K;? zD4mZIy@oTaJkjg(Svs#JdJSiyx8jLj zpXbu~F41dP)59&uAHfwiJkjg(UpfyadJR+lboQt5bROZBoYfyXkFdgY9$|&)eBlb) z`2xY#^96#f=L-Z|&ld=`o-fG!IV7nNbiP2a^?ZR~>-hq~*7F5|t>+5_ThA8=ww^B# zY&~Bf*m}M|us&a)^8_~u#y>hwaBBb|ogY|XIzO<&bberk4barlAO1NIo)1{>$I$){ z!FqpZF8lETN1i#yDaGMQ&)do+2z*czz5*Abq z`TMkjwe}fHfvB6)o!5udE z2R8Uc8~jHb?0{uKIq~u@w!zof;Bp(h&ISiT9 z4gRPNzR?CZ*x+3@_m3PvvVyV8cAYr`+M!M7?n zZts2@ywL_nZ1C;yPhLEYcsAn++pi@U-HI;kg&j7xC=H^CdiA#`CXu_Tjk?&;5AF z-#&ont9ZVK=RrJec=qEtfaf7R2l0Fz&o}TqjHew>2cAwm-^B9>o^Rp#HXicVkKy?a zo?G#(!*d&+5FUHIn~}C157qloJm1BWPGA3j)el*uTc|rHY2F?81_yt6+H>$m;>fJr+b+1mxJXF=KE!VYYOVx<@;rj zbkj1KN%9rP6r8*`Xit^b5>pZrHxccq)O&&U97*>S?MQhw(Vob60qx0rw@@Xgy*-%W zMydUl9$iBd1WQm*Z5r{Z^b#ORGRg6o4(ej@3WEB(M7hDEAa3mvkNh5;!;|4Nz;1V3ak#P zTj&)<6}Y@MPbDs|FE1C@+**nIpc~ERW%3Se7!JAA9S8=Zx1~o_nqm6Z0lonNyQcx( zj6@f14MgipLz^05ued|aoE8qu;W{(=zQ}#nZ&D^Nzjk)Wh@PalS;P;nL#CfyY4dNgEgd6Gqv}8Zf`Ym%JzRw#`iV2e7fAupj>glHTm~P zUN*aYOM1x)2b9b%M@Bwng&7Jco0S1kxIo!HYf5#J0fkwSMuCBCxV)cE5Bw&(tVO(j{Tbi>D#+-UQ*rAeFvOe zou>>_R&_pQC~0U&%94~rVG0Md=HjLNg#r4?gKP-dhO&L8`!CdP$_owVbCMT&gZnV~aXD+k%_$m4p=b3#u_}XJ``5M%6Q(k%jnw*(<%Z^vxW6 z1Yt{PqnWU+fhzMMxdN$+jEes-3z?5KGEKUR%lKOcu$v@{MZGh(!9Uo$q&7f0?_E?~ zABb3ud48Q4#V1xGvu9O?B2n!n!Zar0YX-~L`s!BFBGo&vdnuf!DfL*JteDCzRr9_0 zpiKFes(D^S@xR4J()U+iRr#tUFEOwP$sKW!yn2XKD$3w6()9e<%jGAF{AT(&!|Vkb ze}jo{lhtWuur_TvnXP=SpJylX10u@n-oh^ZpHN(R#fqC6wv^*LC|0XTp7f+R=FF0x z%UD!ci2j3*y~r;<#T_qP+osADvx}t5*NZoN{zHFU3}3*az9oD6z^yxbeico4{U59i z&ZVR|g{q{RLxH+~d}*`iVHS;5Rg)jzXL`S;buQJ?3dAfbYW`D7s`@ZW8l<-r7L`Qt z1-E)Q@kZKQwDrd1$;LpIn6Sfhbe^-kg~++y*VGVAeCdhiCWXbxRzqT?tVAl8A}9MI z8qMr05^}5MTav~hxZ84ew`E>L@&7+v=q=|iYZ=R0>aBvfWm492>**h~N7%jJKeg0Z zHmCbRt!ehG62IS!L=w*7{n=CH(k)fR-qkCr=E`fSgMAN^8A^Azu$U=O46URg%=`e4~dpIvkPdVs0nT_nG z>ZQeMkJN_1S8$c!b`jMVbd$yQsW(QFsxH&$Y)!F=EW{VygHby-dBl zH~AW>L(05Um_=6L>$9uY%iXtBB#t8jb(R*g)d@%OYe0^V>n8UK`f50Rz`9PqiH4JQ zTb7`FKO?Ens{VizX|yQ1V^gi#?6XUSjc7X6*G*&N8}@C*#tshp<%A?{<5LzK%+o&$ z;ir$AleSa2lr{vAgK$)T8y<(-ID`vrHR}@1nPMc!lzIZ5%Bak2FgK7tNJZh@#`t+X zoy?ot==;I)#k@4RGrw$^k{O?RH|wnb&_HtgMFJawzGzbzM>k0=q&$Qzkv?A>+6u?0 z-hi9p#a>o*NkwV77cavtTUA!&O+JiAo0N*{N=x}e()b=W{<(m{S*b~dsY$a_ljfu* z6{RN4PfaRLO2RRr;dT5{ptr zElO2kQL0=;sd5#~OA)mwRn($XQHxSVotvuYxvA36O%-)+s;F~QMV*@}>fBUO=cdXv zFIBF2sdCLr6=Ghh5c5-c%}=e+{32RbRNri086lNV^%BP*-g!k{b55am%j_a!@hoFf zMU`^%lZq|z!g+WTjyRsnZa=+cApgOSl_g8cS9&W~uc}^Ex@sl<*_rr1hLI^l##f=W zhs(%1BV|ShNS~dLJDj+XDW1nJ^OQt|Qu3~m3|xf|+FltYdXJ3Ht(xb;v{e41OWMNd zpI=Hdnz1FKRQ{)9R<9Z`qh*Y|xn%Y7k|ir)H<|fbtuS*gC27WzWv5<_;?hbsLvBkY zy%Q;tUvy7bu;iJjbq3wYcRm}#fi0Ni=uWE@n#QkKP#Mj^ZsF%bGe~RSVB(+UsJpHq zRO@Sqh?z8*ip&f*1%qaIChcg=#5B#1e`qUsO{01VH8r8ODbP?ibHrFyx!l$Z!?=>vxjQ}uyuF+IrbA^I>kz-)q9ln)GG;uq9H_ocz8U-x(pFfcIR z1oB~f&P0G>z@1UdM;Vxan=zTdduLOD@)1xy(hQ7i4=6A(08hdr2KaiwRKXk!+GoU2 zq@y-3!dJ{lxZu9_%palI0+!_y8`Gu#d-*+|%eQ!?>Du}=nCRRk~W3kt=va{eV!o$7cR* zCJyG;FFY?V)8g~{-}N)FF8zS8x${e#$yb%yIA5Js_-dUqb#{XLD}nCXnytnD+f#CP zEqmh|=x5_n^t0}XhPCX};183|?a$7+#@`jR|CfYR38^ZTr2q6-W6^>)(5_D;LZ;I>@GKpSje6Z*K<`atP7Wd-p?tC!W zAU9Jg;7W-2%;Qcz3$Db!^2s|KncVMtX1VJ1lpSGAEz`v<^*+0%O=9};J#ypEdFkyD i>JPMD%#!poUa8bp{$hi`{0r?RYdU^>?w+zAn&|+)%!j-H literal 0 HcmV?d00001 diff --git a/prebuilds/darwin-x64/electron-passkey.node b/prebuilds/darwin-x64/electron-passkey.node new file mode 100644 index 0000000000000000000000000000000000000000..e5e35ce7a5a22c0a98b2c254afecebf8a945c50c GIT binary patch literal 66768 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