## App Developer Experience ### In-Page or Desktop Agent ```typescript const { web5, did } = Web5.connect(); // or with secure AppDataVault() const appDataVault = new AppDataVault(); // ... vault config & setup const { web5, did } = Web5.connect({ appData : appDataVault }); ``` ### Remote Agent ```typescript // Connect by dereferencing a DID and using a transport client based on // the service endpoint URL. const { web5, did } = Web5.connect({ url: 'did:ion:abcd1234' }); // Connect to a specific http/https URL const { web5, did } = Web5.connect({ url: 'https://dwn.yourdomain.com' }); // or with secure AppDataVault() const appDataVault = new AppDataVault(); // ... vault config & setup const { web5, did } = Web5.connect({ appData : appDataVault, url : 'https://dwn.yourdomain.com' }); ``` ### Custom Agent ```typescript // Initalize and configure custom agent // OR // use a TBD provided agent with custom configuration const customAgent = // initialize & configure custom agent // In-page or Desktop Agent const { web5, did } = Web5.connect({ agent: customAgent }); // Remote Agent const { web5, did } = Web5.connect({ agent : customAgent, url : 'https://dwn.yourdomain.com' }); ``` ## `web5` internals ```typescript static async connect(options: Web5ConnectOptions = {}) { // Use specified AppData implementation instance or default. let appData; if (options.appData) { appData = options.appData; } else { appData = new AppData(); // Attempt to load saved app data. const appDataKey = options.appDataKey ?? Web5.APP_DATA_KEY; // If no app data was present, or loading failed, initialize defaults. if (!appData.load(appDataKey)) { appData.initialize(appDataKey); } } if (appData.getStatus() !== appData.STATUS_READY) { throw new Error(`failed to load application data. Status: ${appData.getStatus()}`'`); } let agent; if (options.agent) { // Custom agent specified. agent = options.agent; } else { // Use default agent agent = Web5ProxyAgent.create({ did : appData.getDid(), auk : appData.getPrivateKey(), agentOptions : options.agentOptions, didResolver : Web5.did.resolver }); } // Try connecting to desktop or remote agent. await agent.connect(options.url); // Failed to resolve/reach specified endpoint or user denied connect request. // Fallback to browser in-page: if (!agent.isConnected()) { agent = Web5UserAgent.create({ did : appData.getDid(), auk : appData.getPrivateKey(), agentOptions : options.agentOptions, didResolver : Web5.did.resolver }); } const web5 = new Web5({ agent, appData }); return { web5 } } ``` ## Desktop Agent Internals ```typescript // initialization routines... // instantiate agent const agent = await Web5DesktopAgent.create({ httpServer : options.httpServer, wsServer : options.wsServer, did : appData.getDid(), auk : appData.getPrivateKey(), agentOptions : options.agentOptions, didResolver : Web5.did.resolver }); const web5 = new Web5({ agent, appData }); /** * Optionally, can be overriden but defaults will be used if not: * credentialManager * didManager * dwnManager * identityManager * keyManager * rpcClient * syncManager */ ```