@antseed/web-sdk 0.1.0

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.
@@ -0,0 +1,27 @@
1
+ export interface WebLockLike {
2
+ readonly name: string;
3
+ readonly mode: 'exclusive' | 'shared';
4
+ }
5
+ export interface WebLockManagerLike {
6
+ request<T>(name: string, options: {
7
+ mode: 'exclusive';
8
+ ifAvailable?: boolean;
9
+ }, callback: (lock: WebLockLike | null) => Promise<T> | T): Promise<T>;
10
+ }
11
+ export declare class BuyerAlreadyActiveError extends Error {
12
+ readonly lockName: string;
13
+ readonly code = "buyer_active_in_another_tab";
14
+ constructor(lockName: string);
15
+ }
16
+ export declare class BuyerTabLock {
17
+ readonly name: string;
18
+ private readonly requestPromise;
19
+ private released;
20
+ private releaseHold;
21
+ private constructor();
22
+ static acquire(name: string, manager: WebLockManagerLike, { wait }?: {
23
+ wait?: boolean;
24
+ }): Promise<BuyerTabLock>;
25
+ release(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=tab-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-lock.d.ts","sourceRoot":"","sources":["../src/tab-lock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;CACvC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,CAAC,EACP,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,EACrD,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GACrD,OAAO,CAAC,CAAC,CAAC,CAAC;CACf;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAGpC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAFrC,QAAQ,CAAC,IAAI,iCAAiC;gBAEzB,QAAQ,EAAE,MAAM;CAItC;AAED,qBAAa,YAAY;IAKrB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IALjC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO;WAKM,OAAO,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,kBAAkB,EAC3B,EAAE,IAAY,EAAE,GAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAO,GACxC,OAAO,CAAC,YAAY,CAAC;IAkClB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}
@@ -0,0 +1,54 @@
1
+ export class BuyerAlreadyActiveError extends Error {
2
+ lockName;
3
+ code = 'buyer_active_in_another_tab';
4
+ constructor(lockName) {
5
+ super('This AntSeed buyer is already active in another tab');
6
+ this.lockName = lockName;
7
+ this.name = 'BuyerAlreadyActiveError';
8
+ }
9
+ }
10
+ export class BuyerTabLock {
11
+ name;
12
+ requestPromise;
13
+ released = false;
14
+ releaseHold;
15
+ constructor(name, requestPromise) {
16
+ this.name = name;
17
+ this.requestPromise = requestPromise;
18
+ }
19
+ static async acquire(name, manager, { wait = false } = {}) {
20
+ let acquiredResolve;
21
+ let acquiredReject;
22
+ const acquired = new Promise((resolve, reject) => {
23
+ acquiredResolve = resolve;
24
+ acquiredReject = reject;
25
+ });
26
+ let releaseHold;
27
+ const hold = new Promise((resolve) => {
28
+ releaseHold = resolve;
29
+ });
30
+ const requestPromise = manager.request(name, { mode: 'exclusive', ...(wait ? {} : { ifAvailable: true }) }, async (lock) => {
31
+ if (!lock) {
32
+ acquiredReject(new BuyerAlreadyActiveError(name));
33
+ return;
34
+ }
35
+ acquiredResolve();
36
+ await hold;
37
+ });
38
+ void requestPromise.catch((error) => {
39
+ acquiredReject(error instanceof Error ? error : new Error(String(error)));
40
+ });
41
+ await acquired;
42
+ const result = new BuyerTabLock(name, requestPromise);
43
+ result.releaseHold = releaseHold;
44
+ return result;
45
+ }
46
+ async release() {
47
+ if (this.released)
48
+ return;
49
+ this.released = true;
50
+ this.releaseHold();
51
+ await this.requestPromise;
52
+ }
53
+ }
54
+ //# sourceMappingURL=tab-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-lock.js","sourceRoot":"","sources":["../src/tab-lock.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAG3B;IAFZ,IAAI,GAAG,6BAA6B,CAAC;IAE9C,YAAqB,QAAgB;QACnC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAD1C,aAAQ,GAAR,QAAQ,CAAQ;QAEnC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IAKZ;IACQ;IALX,QAAQ,GAAG,KAAK,CAAC;IACjB,WAAW,CAAc;IAEjC,YACW,IAAY,EACJ,cAAgC;QADxC,SAAI,GAAJ,IAAI,CAAQ;QACJ,mBAAc,GAAd,cAAc,CAAkB;IAChD,CAAC;IAEJ,MAAM,CAAC,KAAK,CAAC,OAAO,CAClB,IAAY,EACZ,OAA2B,EAC3B,EAAE,IAAI,GAAG,KAAK,KAAyB,EAAE;QAEzC,IAAI,eAA4B,CAAC;QACjC,IAAI,cAAuC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrD,eAAe,GAAG,OAAO,CAAC;YAC1B,cAAc,GAAG,MAAM,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,WAAwB,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACzC,WAAW,GAAG,OAAO,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CACpC,IAAI,EACJ,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,EAC7D,KAAK,EAAE,IAAI,EAAE,EAAE;YACb,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,cAAc,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YACD,eAAe,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC;QACb,CAAC,CACF,CAAC;QACF,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC3C,cAAc,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,CAAC;QACf,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,CAAC;IAC5B,CAAC;CACF"}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@antseed/web-sdk",
3
+ "version": "0.1.0",
4
+ "description": "Browser buyer SDK for AntSeed: connect to sellers over WebRTC via a signaling relay, pay with in-browser EIP-712 signatures",
5
+ "type": "module",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "dependencies": {
12
+ "ethers": "~6.16.0",
13
+ "@antseed/buyer-core": "0.1.6",
14
+ "@antseed/protocol": "0.1.4"
15
+ },
16
+ "devDependencies": {
17
+ "@playwright/test": "^1.55.0",
18
+ "@types/node": "^20.11.0",
19
+ "@types/ws": "^8.5.12",
20
+ "esbuild": "^0.25.0",
21
+ "fake-indexeddb": "^6.2.2",
22
+ "node-datachannel": "^0.7.0",
23
+ "typescript": "^5.5.0",
24
+ "vite": "^5.4.0",
25
+ "vitest": "^2.0.0",
26
+ "ws": "^8.18.0",
27
+ "@antseed/node": "0.2.114"
28
+ },
29
+ "scripts": {
30
+ "prebuild": "node ../../scripts/remove-paths.mjs dist",
31
+ "build": "tsc",
32
+ "build:example": "esbuild examples/main.ts --bundle --format=esm --outdir=examples/dist",
33
+ "example": "esbuild examples/main.ts --bundle --format=esm --outdir=examples/dist --servedir=examples --serve=127.0.0.1:8974",
34
+ "test": "vitest run src",
35
+ "test:browser": "playwright test --config browser-e2e/playwright.config.ts",
36
+ "typecheck": "tsc --noEmit"
37
+ }
38
+ }