@welshman/app 0.0.1

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 ADDED
@@ -0,0 +1,3 @@
1
+ # @welshman/store [![version](https://badgen.net/npm/v/@welshman/store)](https://npmjs.com/package/@welshman/store)
2
+
3
+ Utilities for dealing with svelte stores when using welshman.
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types.cjs"), exports);
18
+ __exportStar(require("./relay.cjs"), exports);
19
+ __exportStar(require("./session.cjs"), exports);
20
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAAuB;AACvB,8CAAuB;AACvB,gDAAyB"}
@@ -0,0 +1,3 @@
1
+ export * from './types';
2
+ export * from './relay';
3
+ export * from './session';
@@ -0,0 +1,4 @@
1
+ export * from "./types.mjs";
2
+ export * from "./relay.mjs";
3
+ export * from "./session.mjs";
4
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tracker = exports.relay = exports.repository = void 0;
4
+ const util_1 = require("@welshman/util");
5
+ const net_1 = require("@welshman/net");
6
+ exports.repository = new util_1.Repository();
7
+ exports.relay = new util_1.Relay(exports.repository);
8
+ exports.tracker = new net_1.Tracker();
9
+ Object.assign(net_1.NetworkContext, {
10
+ onEvent: (url, event) => exports.tracker.track(event.id, url),
11
+ isDeleted: (url, event) => exports.repository.isDeleted(event),
12
+ });
13
+ //# sourceMappingURL=relay.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.cjs","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":";;;AACA,yCAAgD;AAChD,uCAAqD;AAExC,QAAA,UAAU,GAAG,IAAI,iBAAU,EAAe,CAAA;AAE1C,QAAA,KAAK,GAAG,IAAI,YAAK,CAAC,kBAAU,CAAC,CAAA;AAE7B,QAAA,OAAO,GAAG,IAAI,aAAO,EAAE,CAAA;AAEpC,MAAM,CAAC,MAAM,CAAC,oBAAc,EAAE;IAC5B,OAAO,EAAE,CAAC,GAAW,EAAE,KAAmB,EAAE,EAAE,CAAC,eAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC;IAC3E,SAAS,EAAE,CAAC,GAAW,EAAE,KAAmB,EAAE,EAAE,CAAC,kBAAU,CAAC,SAAS,CAAC,KAAK,CAAC;CAC7E,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import type { HashedEvent } from "@welshman/util";
2
+ import { Repository, Relay } from "@welshman/util";
3
+ import { Tracker } from "@welshman/net";
4
+ export declare const repository: Repository<HashedEvent>;
5
+ export declare const relay: Relay<HashedEvent>;
6
+ export declare const tracker: Tracker;
@@ -0,0 +1,10 @@
1
+ import { Repository, Relay } from "@welshman/util";
2
+ import { NetworkContext, Tracker } from "@welshman/net";
3
+ export const repository = new Repository();
4
+ export const relay = new Relay(repository);
5
+ export const tracker = new Tracker();
6
+ Object.assign(NetworkContext, {
7
+ onEvent: (url, event) => tracker.track(event.id, url),
8
+ isDeleted: (url, event) => repository.isDeleted(event),
9
+ });
10
+ //# sourceMappingURL=relay.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.mjs","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"OACO,EAAC,UAAU,EAAE,KAAK,EAAC,MAAM,gBAAgB;OACzC,EAAC,cAAc,EAAE,OAAO,EAAC,MAAM,eAAe;AAErD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAe,CAAA;AAEvD,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,CAAA;AAE1C,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAEpC,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE;IAC5B,OAAO,EAAE,CAAC,GAAW,EAAE,KAAmB,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC;IAC3E,SAAS,EAAE,CAAC,GAAW,EAAE,KAAmB,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC;CAC7E,CAAC,CAAA"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signer = exports.getSigner = exports.nip46Perms = exports.addSession = exports.getSession = exports.session = exports.sessions = exports.pubkey = void 0;
4
+ const store_1 = require("svelte/store");
5
+ const lib_1 = require("@welshman/lib");
6
+ const util_1 = require("@welshman/util");
7
+ const store_2 = require("@welshman/store");
8
+ const net_1 = require("@welshman/net");
9
+ const signer_1 = require("@welshman/signer");
10
+ exports.pubkey = (0, store_2.withGetter)((0, store_2.synced)("pubkey", null));
11
+ exports.sessions = (0, store_2.withGetter)((0, store_2.synced)("sessions", {}));
12
+ exports.session = (0, store_2.withGetter)((0, store_1.derived)([exports.pubkey, exports.sessions], ([$pubkey, $sessions]) => ($pubkey ? $sessions[$pubkey] : null)));
13
+ const getSession = (pubkey) => exports.sessions.get()[pubkey];
14
+ exports.getSession = getSession;
15
+ const addSession = (session) => {
16
+ exports.sessions.update((0, lib_1.assoc)(session.pubkey, session));
17
+ exports.pubkey.set(session.pubkey);
18
+ };
19
+ exports.addSession = addSession;
20
+ exports.nip46Perms = "sign_event:22242,nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt";
21
+ exports.getSigner = (0, lib_1.memoize)((session) => {
22
+ switch (session === null || session === void 0 ? void 0 : session.method) {
23
+ case "extension":
24
+ return new signer_1.Nip07Signer();
25
+ case "privkey":
26
+ return new signer_1.Nip01Signer(session.secret);
27
+ case "nip46":
28
+ return new signer_1.Nip46Signer(signer_1.Nip46Broker.get(session.pubkey, session.secret, session.handler));
29
+ default:
30
+ return null;
31
+ }
32
+ });
33
+ exports.signer = (0, store_2.withGetter)((0, store_1.derived)(exports.session, exports.getSigner));
34
+ const seenChallenges = new Set();
35
+ Object.assign(net_1.NetworkContext, {
36
+ onAuth: async (url, challenge) => {
37
+ if (seenChallenges.has(challenge) || !exports.signer.get()) {
38
+ return;
39
+ }
40
+ seenChallenges.add(challenge);
41
+ const event = await exports.signer.get().sign((0, util_1.createEvent)(22242, {
42
+ tags: [
43
+ ["relay", url],
44
+ ["challenge", challenge],
45
+ ],
46
+ }));
47
+ net_1.NetworkContext.pool.get(url).send(["AUTH", event]);
48
+ return event;
49
+ },
50
+ });
51
+ //# sourceMappingURL=session.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.cjs","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":";;;AAAA,wCAAoC;AACpC,uCAA4C;AAC5C,yCAA0C;AAC1C,2CAAkD;AAClD,uCAA4C;AAC5C,6CAAmF;AAGtE,QAAA,MAAM,GAAG,IAAA,kBAAU,EAAC,IAAA,cAAM,EAAgB,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;AAE1D,QAAA,QAAQ,GAAG,IAAA,kBAAU,EAAC,IAAA,cAAM,EAA0B,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;AAEtE,QAAA,OAAO,GAAG,IAAA,kBAAU,EAC/B,IAAA,eAAO,EAAC,CAAC,cAAM,EAAE,gBAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC7F,CAAA;AAEM,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,gBAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAA;AAAvD,QAAA,UAAU,cAA6C;AAE7D,MAAM,UAAU,GAAG,CAAC,OAAgB,EAAE,EAAE;IAC7C,gBAAQ,CAAC,MAAM,CAAC,IAAA,WAAK,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC/C,cAAM,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAC,CAAA;AAHY,QAAA,UAAU,cAGtB;AAEY,QAAA,UAAU,GAAG,0EAA0E,CAAA;AAEvF,QAAA,SAAS,GAAG,IAAA,aAAO,EAAC,CAAC,OAAgB,EAAE,EAAE;IACpD,QAAQ,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE;QACvB,KAAK,WAAW;YACd,OAAO,IAAI,oBAAW,EAAE,CAAA;QAC1B,KAAK,SAAS;YACZ,OAAO,IAAI,oBAAW,CAAC,OAAO,CAAC,MAAO,CAAC,CAAA;QACzC,KAAK,OAAO;YACV,OAAO,IAAI,oBAAW,CAAC,oBAAW,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAO,EAAE,OAAO,CAAC,OAAQ,CAAC,CAAC,CAAA;QAC5F;YACE,OAAO,IAAI,CAAA;KACd;AACH,CAAC,CAAC,CAAA;AAEW,QAAA,MAAM,GAAG,IAAA,kBAAU,EAAC,IAAA,eAAO,EAAC,eAAO,EAAE,iBAAS,CAAC,CAAC,CAAA;AAE7D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,CAAA;AAEhC,MAAM,CAAC,MAAM,CAAC,oBAAc,EAAE;IAC5B,MAAM,EAAE,KAAK,EAAE,GAAW,EAAE,SAAiB,EAAE,EAAE;QAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,cAAM,CAAC,GAAG,EAAE,EAAE;YAClD,OAAM;SACP;QAED,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAE7B,MAAM,KAAK,GAAG,MAAM,cAAM,CAAC,GAAG,EAAG,CAAC,IAAI,CACpC,IAAA,kBAAW,EAAC,KAAK,EAAE;YACjB,IAAI,EAAE;gBACJ,CAAC,OAAO,EAAE,GAAG,CAAC;gBACd,CAAC,WAAW,EAAE,SAAS,CAAC;aACzB;SACF,CAAC,CACH,CAAA;QAED,oBAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;QAElD,OAAO,KAAK,CAAA;IACd,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,19 @@
1
+ /// <reference types="svelte" />
2
+ import { Nip46Signer, Nip07Signer, Nip01Signer } from "@welshman/signer";
3
+ import type { Session } from "./types";
4
+ export declare const pubkey: import("svelte/store").Writable<string | null> & {
5
+ get: () => string | null;
6
+ };
7
+ export declare const sessions: import("svelte/store").Writable<Record<string, Session>> & {
8
+ get: () => Record<string, Session>;
9
+ };
10
+ export declare const session: import("svelte/store").Readable<Session | null> & {
11
+ get: () => Session | null;
12
+ };
13
+ export declare const getSession: (pubkey: string) => Session;
14
+ export declare const addSession: (session: Session) => void;
15
+ export declare const nip46Perms = "sign_event:22242,nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt";
16
+ export declare const getSigner: (...args: any[]) => Nip07Signer | Nip01Signer | Nip46Signer | null;
17
+ export declare const signer: import("svelte/store").Readable<Nip07Signer | Nip01Signer | Nip46Signer | null> & {
18
+ get: () => Nip07Signer | Nip01Signer | Nip46Signer | null;
19
+ };
@@ -0,0 +1,46 @@
1
+ import { derived } from "svelte/store";
2
+ import { memoize, assoc } from "@welshman/lib";
3
+ import { createEvent } from "@welshman/util";
4
+ import { withGetter, synced } from "@welshman/store";
5
+ import { NetworkContext } from "@welshman/net";
6
+ import { Nip46Broker, Nip46Signer, Nip07Signer, Nip01Signer } from "@welshman/signer";
7
+ export const pubkey = withGetter(synced("pubkey", null));
8
+ export const sessions = withGetter(synced("sessions", {}));
9
+ export const session = withGetter(derived([pubkey, sessions], ([$pubkey, $sessions]) => ($pubkey ? $sessions[$pubkey] : null)));
10
+ export const getSession = (pubkey) => sessions.get()[pubkey];
11
+ export const addSession = (session) => {
12
+ sessions.update(assoc(session.pubkey, session));
13
+ pubkey.set(session.pubkey);
14
+ };
15
+ export const nip46Perms = "sign_event:22242,nip04_encrypt,nip04_decrypt,nip44_encrypt,nip44_decrypt";
16
+ export const getSigner = memoize((session) => {
17
+ switch (session === null || session === void 0 ? void 0 : session.method) {
18
+ case "extension":
19
+ return new Nip07Signer();
20
+ case "privkey":
21
+ return new Nip01Signer(session.secret);
22
+ case "nip46":
23
+ return new Nip46Signer(Nip46Broker.get(session.pubkey, session.secret, session.handler));
24
+ default:
25
+ return null;
26
+ }
27
+ });
28
+ export const signer = withGetter(derived(session, getSigner));
29
+ const seenChallenges = new Set();
30
+ Object.assign(NetworkContext, {
31
+ onAuth: async (url, challenge) => {
32
+ if (seenChallenges.has(challenge) || !signer.get()) {
33
+ return;
34
+ }
35
+ seenChallenges.add(challenge);
36
+ const event = await signer.get().sign(createEvent(22242, {
37
+ tags: [
38
+ ["relay", url],
39
+ ["challenge", challenge],
40
+ ],
41
+ }));
42
+ NetworkContext.pool.get(url).send(["AUTH", event]);
43
+ return event;
44
+ },
45
+ });
46
+ //# sourceMappingURL=session.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.mjs","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import type { Nip46Handler } from "@welshman/signer";
2
+ import type { RelayProfile } from "@welshman/util";
3
+ export type Session = {
4
+ method: string;
5
+ pubkey: string;
6
+ secret?: string;
7
+ handler?: Nip46Handler;
8
+ };
9
+ export type Relay = RelayProfile;
10
+ export type Handle = {
11
+ pubkey: string;
12
+ nip05: string;
13
+ nip46: string[];
14
+ relays: string[];
15
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@welshman/app",
3
+ "version": "0.0.1",
4
+ "author": "hodlbod",
5
+ "license": "MIT",
6
+ "description": "A collection of svelte stores for use in building nostr client applications.",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "type": "module",
11
+ "files": [
12
+ "build"
13
+ ],
14
+ "types": "./build/src/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./build/src/index.d.ts",
18
+ "import": "./build/src/index.mjs",
19
+ "require": "./build/src/index.cjs"
20
+ }
21
+ },
22
+ "scripts": {
23
+ "pub": "npm run lint && npm run build && npm publish",
24
+ "build": "gts clean && tsc-multi",
25
+ "lint": "gts lint",
26
+ "fix": "gts fix"
27
+ },
28
+ "devDependencies": {
29
+ "gts": "^5.0.1",
30
+ "tsc-multi": "^1.1.0",
31
+ "typescript": "~5.1.6"
32
+ },
33
+ "dependencies": {
34
+ "@welshman/lib": "0.0.15",
35
+ "@welshman/util": "0.0.28",
36
+ "svelte": "^4.2.18"
37
+ }
38
+ }