@enbox/browser 0.3.83 → 0.3.84
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.
- package/README.md +25 -22
- package/dist/browser.mjs +161 -161
- package/dist/browser.mjs.map +4 -4
- package/dist/esm/application.js +37 -0
- package/dist/esm/application.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/types/application.d.ts +26 -0
- package/dist/types/application.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/application.ts +69 -0
- package/src/index.ts +2 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BrowserConnectHandler } from './browser-connect-handler.js';
|
|
2
|
+
import { createConnectionStore, createApplication as createHeadlessApplication } from '@enbox/api';
|
|
3
|
+
const walletOptionsByApplication = new WeakMap();
|
|
4
|
+
/**
|
|
5
|
+
* Create the application and its native browser connection without starting session restoration.
|
|
6
|
+
* The manifest comes from the feature definitions. The application owns connection disposal.
|
|
7
|
+
*/
|
|
8
|
+
export function createApplication(options) {
|
|
9
|
+
var _a;
|
|
10
|
+
const registration = Object.assign({ stores: options.stores }, (options.protocols === undefined ? {} : { protocols: options.protocols }));
|
|
11
|
+
if (typeof options.connection === 'function') {
|
|
12
|
+
if (options.wallet !== undefined || options.connectHandler !== undefined) {
|
|
13
|
+
throw new TypeError('createApplication: a native connection factory owns its connect handler.');
|
|
14
|
+
}
|
|
15
|
+
return createHeadlessApplication(Object.assign(Object.assign({}, registration), { connection: options.connection }));
|
|
16
|
+
}
|
|
17
|
+
if (options.wallet !== undefined && options.connectHandler !== undefined) {
|
|
18
|
+
throw new TypeError('createApplication: choose wallet options or a connectHandler.');
|
|
19
|
+
}
|
|
20
|
+
for (const key of ['application', 'connectHandler', 'auth', 'agent']) {
|
|
21
|
+
if (options.connection !== undefined && Object.hasOwn(options.connection, key)) {
|
|
22
|
+
throw new TypeError(`createApplication: connection.${key} is owned by the application.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const walletOptions = options.connectHandler === undefined ? Object.freeze(Object.assign({}, options.wallet)) : undefined;
|
|
26
|
+
const connectHandler = (_a = options.connectHandler) !== null && _a !== void 0 ? _a : BrowserConnectHandler(walletOptions);
|
|
27
|
+
const application = createHeadlessApplication(Object.assign(Object.assign({}, registration), { connection: (manifest) => createConnectionStore(Object.assign(Object.assign({}, options.connection), { application: manifest, connectHandler })) }));
|
|
28
|
+
if (walletOptions !== undefined) {
|
|
29
|
+
walletOptionsByApplication.set(application, walletOptions);
|
|
30
|
+
}
|
|
31
|
+
return application;
|
|
32
|
+
}
|
|
33
|
+
/** Browser bindings use these defaults when a user supplies per-call wallet options. */
|
|
34
|
+
export function getApplicationWalletOptions(application) {
|
|
35
|
+
return walletOptionsByApplication.get(application);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=application.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/application.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,IAAI,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAmBnG,MAAM,0BAA0B,GAAG,IAAI,OAAO,EAAoD,CAAC;AAEnG;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA0C;;IAE1C,MAAM,YAAY,mBAChB,MAAM,EAAE,OAAO,CAAC,MAAM,IACnB,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAC7E,CAAC;IACF,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzE,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;QAClG,CAAC;QACD,OAAO,yBAAyB,iCAAM,YAAY,KAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAG,CAAC;IACxF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzE,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAC;IACvF,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACrE,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,SAAS,CAAC,iCAAiC,GAAG,+BAA+B,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,MAAM,aAAa,GAAG,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,mBAAM,OAAO,CAAC,MAAM,EAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9G,MAAM,cAAc,GAAG,MAAA,OAAO,CAAC,cAAc,mCAAI,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACtF,MAAM,WAAW,GAAG,yBAAyB,iCACxC,YAAY,KACf,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,qBAAqB,iCAC1C,OAAO,CAAC,UAAU,KACrB,WAAW,EAAE,QAAQ,EACrB,cAAc,IACd,IACF,CAAC;IACH,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAAC,0BAA0B,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAAC,CAAC;IAChG,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,2BAA2B,CAAC,WAA+B;IACzE,OAAO,0BAA0B,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACrD,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
//
|
|
31
31
|
// The high-level Enbox API: DWN records and protocols.
|
|
32
32
|
export * from '@enbox/api';
|
|
33
|
+
export { createApplication, getApplicationWalletOptions } from './application.js';
|
|
33
34
|
// ─── Re-exports from @enbox/auth ────────────────────────────────
|
|
34
35
|
//
|
|
35
36
|
// Authentication lifecycle, session management, connect handlers.
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,mEAAmE;AACnE,EAAE;AACF,uDAAuD;AAEvD,cAAc,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,mEAAmE;AACnE,EAAE;AACF,uDAAuD;AAEvD,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAGlF,mEAAmE;AACnE,EAAE;AACF,kEAAkE;AAElE,cAAc,qBAAqB,CAAC;AAEpC,mEAAmE;AACnE,EAAE;AACF,iEAAiE;AACjE,4DAA4D;AAE5D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGvE,mEAAmE;AACnE,EAAE;AACF,iEAAiE;AAEjE,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEzG,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,iBAAiB,EACjB,iCAAiC,EACjC,kCAAkC,GACnC,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAE/G,OAAO,EAAE,8BAA8B,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExF,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE1G,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAO1E,mEAAmE;AACnE,EAAE;AACF,8DAA8D;AAC9D,yEAAyE;AACzE,0EAA0E;AAC1E,0EAA0E;AAC1E,YAAY;AAEZ,uEAAuE;AACvE,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAkBrF,oEAAoE;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAiB5C,4EAA4E;AAC5E,mCAAmC;AACnC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { BrowserConnectHandlerOptions } from './browser-connect-handler.js';
|
|
2
|
+
import type { ConnectHandler } from '@enbox/auth';
|
|
3
|
+
import type { ApplicationRuntime, ConnectionStoreOptions, CreateApplicationOptions, StoreDefinitions } from '@enbox/api';
|
|
4
|
+
/** Features, native connection settings, and the browser wallet defaults for one application. */
|
|
5
|
+
export type BrowserApplicationOptions<Stores extends StoreDefinitions = StoreDefinitions> = Pick<CreateApplicationOptions<Stores>, 'stores' | 'protocols'> & ({
|
|
6
|
+
/** Supply a native connection factory for custom hosts and tests. */
|
|
7
|
+
connection: CreateApplicationOptions<Stores>['connection'];
|
|
8
|
+
wallet?: never;
|
|
9
|
+
connectHandler?: never;
|
|
10
|
+
} | ({
|
|
11
|
+
connection?: Omit<ConnectionStoreOptions, 'application' | 'connectHandler' | 'auth' | 'agent'>;
|
|
12
|
+
} & ({
|
|
13
|
+
wallet?: BrowserConnectHandlerOptions;
|
|
14
|
+
connectHandler?: never;
|
|
15
|
+
} | {
|
|
16
|
+
connectHandler: ConnectHandler;
|
|
17
|
+
wallet?: never;
|
|
18
|
+
})));
|
|
19
|
+
/**
|
|
20
|
+
* Create the application and its native browser connection without starting session restoration.
|
|
21
|
+
* The manifest comes from the feature definitions. The application owns connection disposal.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createApplication<const Stores extends StoreDefinitions>(options: BrowserApplicationOptions<Stores>): ApplicationRuntime;
|
|
24
|
+
/** Browser bindings use these defaults when a user supplies per-call wallet options. */
|
|
25
|
+
export declare function getApplicationWalletOptions(application: ApplicationRuntime): BrowserConnectHandlerOptions | undefined;
|
|
26
|
+
//# sourceMappingURL=application.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKzH,iGAAiG;AACjG,MAAM,MAAM,yBAAyB,CAAC,MAAM,SAAS,gBAAgB,GAAG,gBAAgB,IACtF,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,GAAG,CAC7D;IACA,qEAAqE;IACrE,UAAU,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,cAAc,CAAC,EAAE,KAAK,CAAC;CACxB,GACC,CAAC;IACD,UAAU,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,aAAa,GAAG,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CAChG,GAAG,CACA;IAAE,MAAM,CAAC,EAAE,4BAA4B,CAAC;IAAC,cAAc,CAAC,EAAE,KAAK,CAAA;CAAE,GACjE;IAAE,cAAc,EAAE,cAAc,CAAC;IAAC,MAAM,CAAC,EAAE,KAAK,CAAA;CAAE,CACrD,CAAC,CACH,CAAC;AAIJ;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,MAAM,SAAS,gBAAgB,EACrE,OAAO,EAAE,yBAAyB,CAAC,MAAM,CAAC,GACzC,kBAAkB,CA+BpB;AAED,wFAAwF;AACxF,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,kBAAkB,GAAG,4BAA4B,GAAG,SAAS,CAErH"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@
|
|
|
27
27
|
* @packageDocumentation
|
|
28
28
|
*/
|
|
29
29
|
export * from '@enbox/api';
|
|
30
|
+
export { createApplication, getApplicationWalletOptions } from './application.js';
|
|
31
|
+
export type { BrowserApplicationOptions } from './application.js';
|
|
30
32
|
export * from '@enbox/auth/browser';
|
|
31
33
|
export { CONNECT_DENIED_TOKEN, ConnectProvider } from '@enbox/connect';
|
|
32
34
|
export type { ConnectApproval, ConnectRequest } from '@enbox/connect';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,cAAc,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@enbox/browser",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.84",
|
|
4
4
|
"description": "Enbox tools and features to use in the browser",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/esm/index.js",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"build": "bun run clean && bun run build:esm && bun run build:browser",
|
|
17
17
|
"lint": "eslint . --max-warnings 0",
|
|
18
18
|
"lint:fix": "eslint . --fix",
|
|
19
|
-
"test:node": "bun test tests/drl-url-parser.spec.ts tests/browser-artifacts.spec.ts tests/browser-connect-handler-node.spec.ts",
|
|
20
|
-
"test:node:coverage": "bun test --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage tests/drl-url-parser.spec.ts tests/browser-artifacts.spec.ts tests/browser-connect-handler-node.spec.ts",
|
|
19
|
+
"test:node": "bun test tests/drl-url-parser.spec.ts tests/browser-artifacts.spec.ts tests/browser-connect-handler-node.spec.ts tests/application.spec.ts",
|
|
20
|
+
"test:node:coverage": "bun test --coverage --coverage-reporter=text --coverage-reporter=lcov --coverage-dir=coverage tests/drl-url-parser.spec.ts tests/browser-artifacts.spec.ts tests/browser-connect-handler-node.spec.ts tests/application.spec.ts",
|
|
21
21
|
"test:browser": "bunx --bun vitest --config vitest.browser.config.ts --run",
|
|
22
22
|
"test:browser:coverage": "bunx --bun vitest --config vitest.browser.config.ts --run --coverage --coverage.provider=istanbul"
|
|
23
23
|
},
|
|
@@ -68,14 +68,14 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@enbox/agent": "0.8.50",
|
|
71
|
-
"@enbox/api": "0.6.
|
|
71
|
+
"@enbox/api": "0.6.91",
|
|
72
72
|
"@enbox/auth": "0.6.96",
|
|
73
73
|
"@enbox/common": "0.1.9",
|
|
74
74
|
"@enbox/connect": "0.1.25",
|
|
75
75
|
"@enbox/crypto": "0.1.12",
|
|
76
76
|
"@enbox/dids": "0.1.14",
|
|
77
77
|
"@enbox/dwn-sdk-js": "0.4.29",
|
|
78
|
-
"@enbox/protocols": "0.2.
|
|
78
|
+
"@enbox/protocols": "0.2.118"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
81
|
"@types/node": "22.19.15",
|
|
@@ -89,5 +89,5 @@
|
|
|
89
89
|
"typescript": "5.9.3",
|
|
90
90
|
"vitest": "4.1.12"
|
|
91
91
|
},
|
|
92
|
-
"gitHead": "
|
|
92
|
+
"gitHead": "87ccef0263d210900aaf0f6e574557a0607bdb29"
|
|
93
93
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { BrowserConnectHandlerOptions } from './browser-connect-handler.js';
|
|
2
|
+
import type { ConnectHandler } from '@enbox/auth';
|
|
3
|
+
import type { ApplicationRuntime, ConnectionStoreOptions, CreateApplicationOptions, StoreDefinitions } from '@enbox/api';
|
|
4
|
+
|
|
5
|
+
import { BrowserConnectHandler } from './browser-connect-handler.js';
|
|
6
|
+
import { createConnectionStore, createApplication as createHeadlessApplication } from '@enbox/api';
|
|
7
|
+
|
|
8
|
+
/** Features, native connection settings, and the browser wallet defaults for one application. */
|
|
9
|
+
export type BrowserApplicationOptions<Stores extends StoreDefinitions = StoreDefinitions> =
|
|
10
|
+
Pick<CreateApplicationOptions<Stores>, 'stores' | 'protocols'> & (
|
|
11
|
+
| {
|
|
12
|
+
/** Supply a native connection factory for custom hosts and tests. */
|
|
13
|
+
connection: CreateApplicationOptions<Stores>['connection'];
|
|
14
|
+
wallet?: never;
|
|
15
|
+
connectHandler?: never;
|
|
16
|
+
}
|
|
17
|
+
| ({
|
|
18
|
+
connection?: Omit<ConnectionStoreOptions, 'application' | 'connectHandler' | 'auth' | 'agent'>;
|
|
19
|
+
} & (
|
|
20
|
+
| { wallet?: BrowserConnectHandlerOptions; connectHandler?: never }
|
|
21
|
+
| { connectHandler: ConnectHandler; wallet?: never }
|
|
22
|
+
))
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
const walletOptionsByApplication = new WeakMap<ApplicationRuntime, BrowserConnectHandlerOptions>();
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Create the application and its native browser connection without starting session restoration.
|
|
29
|
+
* The manifest comes from the feature definitions. The application owns connection disposal.
|
|
30
|
+
*/
|
|
31
|
+
export function createApplication<const Stores extends StoreDefinitions>(
|
|
32
|
+
options: BrowserApplicationOptions<Stores>,
|
|
33
|
+
): ApplicationRuntime {
|
|
34
|
+
const registration = {
|
|
35
|
+
stores: options.stores,
|
|
36
|
+
...(options.protocols === undefined ? {} : { protocols: options.protocols }),
|
|
37
|
+
};
|
|
38
|
+
if (typeof options.connection === 'function') {
|
|
39
|
+
if (options.wallet !== undefined || options.connectHandler !== undefined) {
|
|
40
|
+
throw new TypeError('createApplication: a native connection factory owns its connect handler.');
|
|
41
|
+
}
|
|
42
|
+
return createHeadlessApplication({ ...registration, connection: options.connection });
|
|
43
|
+
}
|
|
44
|
+
if (options.wallet !== undefined && options.connectHandler !== undefined) {
|
|
45
|
+
throw new TypeError('createApplication: choose wallet options or a connectHandler.');
|
|
46
|
+
}
|
|
47
|
+
for (const key of ['application', 'connectHandler', 'auth', 'agent']) {
|
|
48
|
+
if (options.connection !== undefined && Object.hasOwn(options.connection, key)) {
|
|
49
|
+
throw new TypeError(`createApplication: connection.${key} is owned by the application.`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const walletOptions = options.connectHandler === undefined ? Object.freeze({ ...options.wallet }) : undefined;
|
|
53
|
+
const connectHandler = options.connectHandler ?? BrowserConnectHandler(walletOptions);
|
|
54
|
+
const application = createHeadlessApplication({
|
|
55
|
+
...registration,
|
|
56
|
+
connection: (manifest) => createConnectionStore({
|
|
57
|
+
...options.connection,
|
|
58
|
+
application: manifest,
|
|
59
|
+
connectHandler,
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
if (walletOptions !== undefined) { walletOptionsByApplication.set(application, walletOptions); }
|
|
63
|
+
return application;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Browser bindings use these defaults when a user supplies per-call wallet options. */
|
|
67
|
+
export function getApplicationWalletOptions(application: ApplicationRuntime): BrowserConnectHandlerOptions | undefined {
|
|
68
|
+
return walletOptionsByApplication.get(application);
|
|
69
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -32,6 +32,8 @@
|
|
|
32
32
|
// The high-level Enbox API: DWN records and protocols.
|
|
33
33
|
|
|
34
34
|
export * from '@enbox/api';
|
|
35
|
+
export { createApplication, getApplicationWalletOptions } from './application.js';
|
|
36
|
+
export type { BrowserApplicationOptions } from './application.js';
|
|
35
37
|
|
|
36
38
|
// ─── Re-exports from @enbox/auth ────────────────────────────────
|
|
37
39
|
//
|