diff --git a/src/puter-js/src/index.js b/src/puter-js/src/index.js index 9c9b47a8..05c550e6 100644 --- a/src/puter-js/src/index.js +++ b/src/puter-js/src/index.js @@ -60,6 +60,38 @@ window.puter = (function() { // debug flag debugMode = false; + /** + * Puter.js Modules + * + * These are the modules you see on docs.puter.com; for example: + * - puter.fs + * - puter.kv + * - puter.ui + * + * initSubmodules is called from the constructor of this class. + */ + initSubmodules = function(){ + // Util + this.util = new Util(); + + this.registerModule('auth', Auth); + this.registerModule('os', OS); + this.registerModule('fs', PuterJSFileSystemModule); + this.registerModule('ui', UI, { + appInstanceID: this.appInstanceID, + parentInstanceID: this.parentInstanceID, + }); + this.registerModule('hosting', Hosting); + this.registerModule('email', Email); + this.registerModule('apps', Apps); + this.registerModule('ai', AI); + this.registerModule('kv', KV); + this.registerModule('drivers', Drivers); + + // Path + this.path = path; + } + // -------------------------------------------- // Constructor // -------------------------------------------- @@ -70,7 +102,8 @@ window.puter = (function() { this.modules_ = []; // "services" in puter.js are used by modules and may interact with each other const context = new putility.libs.context.Context() - .follow(this, ['env', 'util']); + .follow(this, ['env', 'util', 'authToken', 'APIOrigin', 'appID']); + this.services = new putility.system.ServiceManager({ context }); this.context = context; context.services = this.services; @@ -264,50 +297,12 @@ window.puter = (function() { } - registerModule (name, instance) { + registerModule (name, cls, parameters = {}) { + const instance = new cls(this.context, parameters); this.modules_.push(name); this[name] = instance; } - // Initialize submodules - initSubmodules = function(){ - // Util - this.util = new Util(); - - // Auth - this.registerModule('auth', - new Auth(this.authToken, this.APIOrigin, this.appID, this.env)); - // OS - this.registerModule('os', - new OS(this.authToken, this.APIOrigin, this.appID, this.env)); - // FileSystem - this.registerModule('fs', - new PuterJSFileSystemModule(this.authToken, this.APIOrigin, this.appID, this.context)); - // UI - this.registerModule('ui', - new UI(this.appInstanceID, this.parentInstanceID, this.appID, this.env, this.util)); - // Hosting - this.registerModule('hosting', - new Hosting(this.authToken, this.APIOrigin, this.appID, this.env)); - // Email - this.registerModule('email', - new Email(this.authToken, this.APIOrigin, this.appID)); - // Apps - this.registerModule('apps', - new Apps(this.authToken, this.APIOrigin, this.appID, this.env)); - // AI - this.registerModule('ai', - new AI(this.authToken, this.APIOrigin, this.appID, this.env)); - // Key-Value Store - this.registerModule('kv', - new KV(this.authToken, this.APIOrigin, this.appID, this.env)); - // Drivers - this.registerModule('drivers', - new Drivers(this.authToken, this.APIOrigin, this.appID, this.env)); - // Path - this.path = path; - } - updateSubmodules() { // Update submodules with new auth token and API origin for ( const name of this.modules_ ) { diff --git a/src/puter-js/src/modules/AI.js b/src/puter-js/src/modules/AI.js index 6b287021..84d9b3e4 100644 --- a/src/puter-js/src/modules/AI.js +++ b/src/puter-js/src/modules/AI.js @@ -9,10 +9,10 @@ class AI{ * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; } /** diff --git a/src/puter-js/src/modules/Apps.js b/src/puter-js/src/modules/Apps.js index 2a9d12b0..c3cf3457 100644 --- a/src/puter-js/src/modules/Apps.js +++ b/src/puter-js/src/modules/Apps.js @@ -9,10 +9,10 @@ class Apps{ * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; } /** diff --git a/src/puter-js/src/modules/Auth.js b/src/puter-js/src/modules/Auth.js index 0e4efc92..d218d8ee 100644 --- a/src/puter-js/src/modules/Auth.js +++ b/src/puter-js/src/modules/Auth.js @@ -14,10 +14,10 @@ class Auth{ * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; } /** diff --git a/src/puter-js/src/modules/Drivers.js b/src/puter-js/src/modules/Drivers.js index cb29a096..1d37b4b4 100644 --- a/src/puter-js/src/modules/Drivers.js +++ b/src/puter-js/src/modules/Drivers.js @@ -92,14 +92,15 @@ class Drivers { * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; // Driver-specific this.drivers_ = {}; + // TODO: replace with `context` from constructor and test site login this.context = {}; Object.defineProperty(this.context, 'authToken', { get: () => this.authToken, diff --git a/src/puter-js/src/modules/Email.js b/src/puter-js/src/modules/Email.js index 4f754d33..d1720abb 100644 --- a/src/puter-js/src/modules/Email.js +++ b/src/puter-js/src/modules/Email.js @@ -9,10 +9,10 @@ class Email{ * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; } /** diff --git a/src/puter-js/src/modules/FileSystem/index.js b/src/puter-js/src/modules/FileSystem/index.js index eabe0325..86ef2b55 100644 --- a/src/puter-js/src/modules/FileSystem/index.js +++ b/src/puter-js/src/modules/FileSystem/index.js @@ -63,11 +63,11 @@ export class PuterJSFileSystemModule extends AdvancedBase { * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID, context) { + constructor (context) { super(); - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; this.context = context; // Connect socket. this.initializeSocket(); diff --git a/src/puter-js/src/modules/Hosting.js b/src/puter-js/src/modules/Hosting.js index 349257e2..a8bc410b 100644 --- a/src/puter-js/src/modules/Hosting.js +++ b/src/puter-js/src/modules/Hosting.js @@ -10,10 +10,10 @@ class Hosting{ * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; } /** diff --git a/src/puter-js/src/modules/KV.js b/src/puter-js/src/modules/KV.js index 5fe95875..7cc51f3a 100644 --- a/src/puter-js/src/modules/KV.js +++ b/src/puter-js/src/modules/KV.js @@ -12,10 +12,10 @@ class KV{ * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; } /** diff --git a/src/puter-js/src/modules/OS.js b/src/puter-js/src/modules/OS.js index a436e58a..4b66b0f3 100644 --- a/src/puter-js/src/modules/OS.js +++ b/src/puter-js/src/modules/OS.js @@ -9,10 +9,10 @@ class OS{ * @param {string} APIOrigin - Origin of the API server. Used to build the API endpoint URLs. * @param {string} appID - ID of the app to use. */ - constructor (authToken, APIOrigin, appID) { - this.authToken = authToken; - this.APIOrigin = APIOrigin; - this.appID = appID; + constructor (context) { + this.authToken = context.authToken; + this.APIOrigin = context.APIOrigin; + this.appID = context.appID; } /** diff --git a/src/puter-js/src/modules/UI.js b/src/puter-js/src/modules/UI.js index 01e2596b..1b395540 100644 --- a/src/puter-js/src/modules/UI.js +++ b/src/puter-js/src/modules/UI.js @@ -44,6 +44,15 @@ class AppConnection extends EventListener { this.#isOpen = true; this.#usesSDK = usesSDK; + this.log = globalThis.puter.log.fields({ + category: 'ipc', + }); + this.log.fields({ + constructor_appInstanceID: appInstanceID, + puter_appInstanceID: puter.appInstanceID, + targetAppInstanceID, + }).info(`AppConnection created to ${targetAppInstanceID}`, this); + // TODO: Set this.#puterOrigin to the puter origin window.addEventListener('message', event => { @@ -208,7 +217,7 @@ class UI extends EventListener { return ret; } - constructor (appInstanceID, parentInstanceID, appID, env, util) { + constructor (context, { appInstanceID, parentInstanceID }) { const eventNames = [ 'localeChanged', 'themeChanged', @@ -218,9 +227,9 @@ class UI extends EventListener { this.#eventNames = eventNames; this.appInstanceID = appInstanceID; this.parentInstanceID = parentInstanceID; - this.appID = appID; - this.env = env; - this.util = util; + this.appID = context.appID; + this.env = context.env; + this.util = context.util; if(this.env === 'app'){ this.messageTarget = window.parent;