@midnames/sdk 0.2.1 → 1.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.
Files changed (55) hide show
  1. package/dist/controller-types.d.ts +104 -0
  2. package/dist/controller-types.js +16 -0
  3. package/dist/core.d.ts +13 -9
  4. package/dist/core.js +158 -67
  5. package/dist/errors.d.ts +20 -0
  6. package/dist/errors.js +39 -0
  7. package/dist/index.d.ts +5 -0
  8. package/dist/index.js +5 -0
  9. package/dist/managed/index.d.ts +3 -9
  10. package/dist/managed/index.js +3 -5
  11. package/dist/managed/index.js.map +1 -1
  12. package/dist/managed/leaf.compact +97 -65
  13. package/dist/managed/managed/leaf/contract/index.d.ts +197 -0
  14. package/dist/managed/managed/leaf/contract/index.js +3094 -0
  15. package/dist/managed/managed/leaf/contract/index.js.map +8 -0
  16. package/dist/managed/utils.d.ts +5 -0
  17. package/dist/managed/utils.js +19 -0
  18. package/dist/managed/utils.js.map +1 -0
  19. package/dist/operations.d.ts +49 -0
  20. package/dist/operations.js +137 -0
  21. package/dist/provider.d.ts +10 -4
  22. package/dist/provider.js +32 -8
  23. package/dist/react/DomainProfileWidget.d.ts +2 -2
  24. package/dist/react/DomainProfileWidget.js +11 -8
  25. package/dist/react/HolographicCard.d.ts +2 -2
  26. package/dist/react/HolographicCard.js +10 -7
  27. package/dist/react/index.d.ts +2 -2
  28. package/dist/react/index.js +1 -2
  29. package/dist/results.d.ts +38 -0
  30. package/dist/results.js +88 -0
  31. package/dist/types.d.ts +7 -41
  32. package/dist/types.js +1 -61
  33. package/dist/utils/address.js +6 -5
  34. package/dist/utils/domain.d.ts +6 -0
  35. package/dist/utils/domain.js +19 -1
  36. package/dist/utils/imageResolver.d.ts +8 -0
  37. package/dist/utils/imageResolver.js +89 -0
  38. package/dist/utils/sanitize.d.ts +6 -0
  39. package/dist/utils/sanitize.js +28 -0
  40. package/exported.md +1 -1
  41. package/managed/index.js +3 -5
  42. package/managed/index.js.map +1 -1
  43. package/managed/leaf.compact +97 -65
  44. package/managed/managed/leaf/contract/index.js +3094 -0
  45. package/managed/managed/leaf/contract/index.js.map +8 -0
  46. package/managed/utils.js +19 -0
  47. package/managed/utils.js.map +1 -0
  48. package/package.json +22 -11
  49. package/dist/managed/managed/leaf/contract/index.cjs +0 -2789
  50. package/dist/managed/managed/leaf/contract/index.cjs.map +0 -8
  51. package/dist/managed/managed/leaf/contract/index.d.cts +0 -146
  52. package/managed/managed/leaf/contract/index.cjs +0 -2789
  53. package/managed/managed/leaf/contract/index.cjs.map +0 -8
  54. package/managed/managed/leaf/contract/index.d.cts +0 -146
  55. package/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,8 @@
1
+ {
2
+ "version": 3,
3
+ "file": "index.js",
4
+ "sourceRoot": "../../../../",
5
+ "sources": ["src/leaf.compact", "compiler/standard-library.compact"],
6
+ "names": [],
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoDA;;;;;;;;;;MAoCA,AAAA,YAGC;;;;;cAH2B,GAAY;;;;;;;;;;;;;;;;;;yCAAZ,GAAY;;;;;;;yEAAZ,GAAY;;;OAGvC;MAED,AAAA,YAKC;;;;;cAL2B,YAAqB;cAAE,UAAmB;cAAE,WAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAAhE,YAAqB,+BAAE,UAAmB,+BAAE,WAAoB;;;;;;;;;8CAAhE,YAAqB;8CAAE,UAAmB;8CAAE,WAAoB;;;OAK3F;MAED,AAAA,wBAYC;;;;;cAXG,YAAuD;cACvD,KAA4D;;;;;;;;;;;;;;;;;;;;;;;;;yCAD5D,YAAuD,gCACvD,KAA4D;;;;;;;;;0DAD5D,YAAuD;0DACvD,KAA4D;;;OAU/D;MAED,AAAA,cAuCC;;;;;cAvC6B,OAAyB;cAAE,QAAiB;cAAE,KAAa;cAAE,UAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAAtF,OAAyB,+BAAE,QAAiB,+BAAE,KAAa,+BAAE,UAAyB;;;;;;;;;gDAAtF,OAAyB;gDAAE,QAAiB;gDAAE,KAAa;gDAAE,UAAyB;;;OAuCnH;MAED,AAAA,mBAOC;;;;;cAPkC,KAA4D;;;;;;;;;;;;;;;;;;0CAA5D,KAA4D;;;;;;;;;qDAA5D,KAA4D;;;OAO9F;MAED,AAAA,YAGC;;;;;cAH2B,GAAmB;cAAE,GAAmB;;;;;;;;;;;yCAAxC,GAAmB,+BAAE,GAAmB;;;;;;;;;8CAAxC,GAAmB;8CAAE,GAAmB;;;OAGnE;MAED,AAAA,WAGC;;;;;cAH0B,GAAmB;;;;;;;;;;;yCAAnB,GAAmB;;;;;;;wEAAnB,GAAmB;;;OAG7C;MAED,AAAA,gBAGC;;;;;;;;;;;;;;;;;;;;;;OAAA;MAED,AAAA,mBA4BC;;;;;cA5BkC,OAAyB;cAAE,QAAiB;cAAE,KAAa;cAAE,UAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAAtF,OAAyB,+BAAE,QAAiB,+BAAE,KAAa,+BAAE,UAAyB;;;;;;;;;qDAAtF,OAAyB;qDAAE,QAAiB;qDAAE,KAAa;qDAAE,UAAyB;;;OA4BxH;MAED,AAAA,YAYC;;;;;cAZ2B,QAAiB;cAAE,UAAyB;;;;;;;;;;;;;;;;;;;;;;;;;yCAA5C,QAAiB,+BAAE,UAAyB;;;;;;;;;8CAA5C,QAAiB;8CAAE,UAAyB;;;OAYvE;MAED,AAAA,oBAIC;;;;;cAJmC,YAAuD;;;;;;;;;;;;;;;;;;yCAAvD,YAAuD;;;;;;;;;sDAAvD,YAAuD;;;OAI1F;MAED,AAAA,eAmBC;;;;;cAnB8B,QAAiB;cAAE,WAA6B;;;;;;;;;;;;;;;;;;;;;;;;;yCAAhD,QAAiB,+BAAE,WAA6B;;;;;;;;;iDAAhD,QAAiB;iDAAE,WAA6B;;;OAmB9E;MAGD,AAAA,YAGC;;;;;cAH2B,WAA6B;;;;;;;;;;;;;;;;;;yCAA7B,WAA6B;;;;;;;;;8CAA7B,WAA6B;;;OAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAjLA;EAzBD;;;;;UACI,eAA+B;UAC/B,iBAAgC;UAChC,QAAmD;UACnD,QAAwB;UACxB,YAAqB;UACrB,YAAqB;UACrB,UAAmB;UACnB,WAAoB;UACpB,KAA4D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAjChE;;;;;;;;;yEAAqD;IACrD;;;;;;;;;yEAAsD;IACtD;;;;;;;;;yEAA8C;IAE9C;;;;;;;;;yEAA+C;IAE/C;;;;;;;;;yEAAyE;IAGzE;;;;;;;;;;yEAAkD;IAGlD;;;;;;;;;;yEAAqE;IAErE;;;;;;;;;;yEAA8D;IAyC9D;;;;;;;;;yEAAoC;IACpC;;;;;;;;;yEAAoC;IACpC;;;;;;;;;yEAAkC;IAClC;;;;;;;;;yEAAmC;UAvB/B,KAAY;IAAZ;;;;;;;2HAAA,KAAY;;yEAAA;IACZ;;;;;;;4HAAyB,eAAa;;yEAAzB;IACb;;;;;;;2HAA2B,iBAAe;;yEAA3B;IACf;;;;;;;2HAAyB,QAAM;;yEAAlB;IACb;;;;;;;4HAAkB,QAAM;;yEAAlB;IACN;;;;;;;2HAAsB,YAAU;;yEAAtB;IACV;;;;;;;2HAAsB,YAAU;;yEAAtB;IACV;;;;;;;2HAAoB,UAAQ;;yEAApB;IACR;;;;;;;2HAAqB,WAAS;;yEAArB;;;gDACT,GAIC,EAJD,IAIC;;yCAHgB,IAAE;8BACX,KAAM,GAAiB,IAAE;8BAAzB,KAAM,GAAuC,IAAE;wBAA/C;;;;;;;;;;+IAAA,KAAM;;;+IAAN,KAAM;;;;;8EAAA;;6BAFd,GAIC;;;mBAJgB,KAAG;;;;;;;GAKvB;EClDD,AAAA;EAUA,AAAA,QAA0B;kCACkB;;EAG5C,AAAA,SAA2B;yEACqC;;EA+QhE,AAAA,6CAA8B,SAAkB,UAAmB;UACjE,qBAAuD;IAAvD;;;;;;;;;;;4HAAA;;;;;;2HAA+D;;;;;;;;;;;;;UAC/D,qBAA2D;IAA3D;;;;;;;;;;;;8HAAA;;8HAAmE;;;;;;;2HAAW;;;;;;;;;;;;;QAE1E;;sBAAqB;8CAAwB;;;;;;;;;;;;;YAC/C,qBAAsD;MAAtD;;;;;;;;;;;8HAAA;;;;;;6HAA8D;;;;;;;;;;;;;;;;EAIlE,AAAA,gDAAiC,SAAkB;UACjD,qBAAsD;IAAtD;;;;;;;;;;;4HAAA;;;;;;2HAA8D;;;;;;;;;;;;;;;EAnUhE,AAAA;;;;;;;;EDwFA,AAAA,eAGC,4BAH2B,GAAY;kEAC7B;;;;;;;;;;;uIAAY;;;;IACnB;;;;;;;2HAAsB,GAAC;;yEAAb;;GACb;EAED,AAAA,eAKC;;kBAL2B,YAAqB;kBAAE,UAAmB;kBAAE,WAAoB;;kEACjF;;;;;;;;;;;uIAAY;;;;IACnB;;;;;;;2HAAsB,YAAU;;yEAAtB;IACV;;;;;;;2HAAoB,UAAQ;;yEAApB;IACR;;;;;;;2HAAqB,WAAS;;yEAArB;;GACZ;EAED,AAAA,2BAYC,4BAXG,YAAuD,EACvD,KAA4D;kEAErD;;;;;;;;;;;uIAAY;;;;;;gDACnB,GAIC,EAJD,IAIC;;yCAHgB,IAAE;8BACX,KAAM,GAAiB,IAAE;8BAAzB,KAAM,GAAuC,IAAE;wBAA/C;;;;;;;;;;+IAAA,KAAM;;;+IAAN,KAAM;;;;;8EAAA;;6BAFd,GAIC;;;mBAJgB,KAAG;IAKhB;;;;;;;2HAAyB,YAAU;;yEAAtB;;GAEpB;EAED,AAAA,iBAuCC;;oBAvC6B,OAAyB;oBAAE,QAAiB;oBAAE,KAAa;oBAAE,UAAyB;;4BACzG,KAAG;4BACH,KAAG;UAEJ,OAKL;;;;qCAJE,KAAY;qCAAE,MAAa;qCAAE,GAAU;;0CAC7B,GAAqB;6CAA9B,KAAG;;qDAAO,GAAC,EAAF,GAAqB,GAAH,KAAG;;4DAAM,MAAI;;;mCACpC,QAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAGP,OAAK;qDAEJ;;;;;;;;;;;4KAAwB,QAAM;;;;0HAAvB;;UAGT,OAAqB,GAAJ,KAAG;QACtB,OAAK;;;wDACa;;;;;;;;;;;6HAAU;wDAAE;;;;;;;;;;;6HAAU;;;qDACzB;;;;;;;;;;;0HAAU;qDAAE;;;;;;;;;;;0HAAU;;uEAA2D;;;;;;;;;;;4IAAY;;wBACrG,OAAK;;;0DACM;;;;;;;;;;;+HAAU;0DAAE;;;;;;;;;;;+HAAQ;;;uDACvB;;;;;;;;;;;4HAAU;uDAAE;;;;;;;;;;;4HAAQ;;yEAA2D;;;;;;;;;;;8IAAY;;;;0DAExF;;;;;;;;;;;+HAAU;0DAAE;;;;;;;;;;;+HAAS;;;uDACxB;;;;;;;;;;;4HAAU;uDAAE;;;;;;;;;;;4HAAS;;yEAA2D;;;;;;;;;;;8IAAY;;;UAGzG,SAAyB,GAAN,OAAK;UACpB,aAGT,YAFG,SAAO,YACE,UAAQ;IAErB;;;;;;;;;;2HAAwB,QAAM;;;2HAAY,aAAW;;;wEAA9C;iCAGF;;;;;;;;;;;wJAAqB,SAAO;;;;sGAAf;;MACd;;;;;;;;;;6HAAqB,SAAO;;;;;;;0EAAf;;IAEjB;;;;;;;;;;+FAAqB,SAAO;;;2HAAkB,QAAM;;;;;wEAAvC;;GAChB;EAED,AAAA,sBAOC,4BAPkC,KAA4D;kEACpF;;;;;;;;;;;uIAAY;;;;;;gDACnB,GAIC,EAJD,IAIC;;yCAHgB,IAAE;8BACX,KAAM,GAAiB,IAAE;8BAAzB,KAAM,GAAuC,IAAE;wBAA/C;;;;;;;;;;+IAAA,KAAM;;;+IAAN,KAAM;;;;;8EAAA;;6BAFd,GAIC;;;mBAJgB,KAAG;;GAKvB;EAED,AAAA,eAGC,4BAH2B,GAAmB,EAAE,GAAmB;mEACzD;;;;;;;;;;;wIAAY;;;;IACnB;;;;;;;;;;2HAAuB,GAAC;;;2HAAW,GAAC;;;wEAA9B;;GACT;EAED,AAAA,cAGC,4BAH0B,GAAmB;mEACnC;;;;;;;;;;;wIAAY;;;;IACnB;;;;;;;;;;2HAAuB,GAAC;;;wEAAlB;;GACT;EAED,AAAA,mBAGC;mEAFU;;;;;;;;;;;wIAAY;;;;IACnB;;;;;;;;;;yEAAM;;GACT;EAED,AAAA,sBA4BC;;yBA5BkC,OAAyB;yBAAE,QAAiB;yBAAE,KAAa;yBAAE,UAAyB;;4BAC9G,KAAG;4BACH,KAAG;UAEJ,OAKL;;;;qCAJE,KAAY;qCAAE,MAAa;qCAAE,GAAU;;0CAC7B,GAAqB;6CAA9B,KAAG;;qDAAO,GAAC,EAAF,GAAqB,GAAH,KAAG;;6DAAM,MAAI;;;mCACpC,QAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAGP,OAAK;qDAEJ;;;;;;;;;;;4KAAwB,QAAM;;;;0HAAvB;;mEACR;;;;;;;;;;;wIAAY;;;;UAEb,SAAyB,GAAN,OAAK;UACxB,aAGL,YAFG,SAAO,YACE,UAAQ;IAGrB;;;;;;;;;;2HAAwB,QAAM;;;2HAAY,aAAW;;;wEAA9C;iCAGF;;;;;;;;;;;wJAAqB,SAAO;;;;sGAAf;;MACd;;;;;;;;;;6HAAqB,SAAO;;;;;;;0EAAf;;IAEjB;;;;;;;;;;+FAAqB,SAAO;;;2HAAkB,QAAM;;;;;wEAAvC;;GAChB;EAED,AAAA,eAYC,4BAZ2B,QAAiB,EAAE,UAAyB;oDAC7D;;;;;;;;;;;2KAAwB,QAAM;;;;yHAAvB;;UAER,cAA+C,2BAAhC;;;;;;;;;;;;;;8IAAwB,QAAM;;;wHAAvB;2CACrB,cAAY;;;;UAEb,UAGL,YAFG,cAAY,kBACH,UAAQ;IAGrB;;;;;;;;;;2HAAwB,QAAM;;;2HAAY,UAAQ;;;wEAA3C;;GACV;EAED,AAAA,uBAIC,4BAJmC,YAAuD;mEAChF;;;;;;;;;;;wIAAY;;;;IAEnB;;;;;;;2HAAyB,YAAU;;yEAAtB;;GAChB;EAED,AAAA,kBAmBC,4BAnB8B,QAAiB,EAAE,WAA6B;oDACpE;;;;;;;;;;;2KAAwB,QAAM;;;;yHAAvB;;UAER,cAA+C,2BAAhC;;;;;;;;;;;;;;8IAAwB,QAAM;;;wHAAvB;2CACrB,cAAY;;;;UAEb,UAGL,YAFY,WAAS,YAClB,cAAY;IAGhB;;;;;;;;;;2HAAwB,QAAM;;;2HAAY,UAAQ;;;wEAA3C;UAGP,KAAa;IAAb;;;;;;;;;;+FAAA,KAAa;;;2HAAwC,QAAM;;;wEAA9C;iCACR;;;;;;;;;;;wJAA8B,WAAS;;;;sGAA1B;;MACd;;;;;;;;;;6HAA8B,WAAS;;;;;;;0EAA1B;;IAEjB;;;;;;;;;;+FAA8B,WAAS;;;2HAAmB,QAAM;;;;;wEAAnD;;GAChB;EAGD,AAAA,eAGC,4BAH2B,WAA6B;mEAC9C;;;;;;;;;;;wIAAY;;;;IACnB;;;;;;;2HAAwB,WAAS;;yEAArB;;GACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAlOD;sCAAA;;;;;;;;;;;2GAAqD;KAAA;IACrD;qCAAA;;;;;;;;;;;0GAAsD;KAAA;IACtD;sCAAA;;;;;;;;;;;2GAA8C;KAAA;IAE9C;qCAAA;;;;;;;;;;;0GAA+C;KAAA;IAE/C;qCAAA;;;;;;;;;;;0GAAyE;KAAA;IAGzE;;;;;uCAAA;;;;;;;;;;;;;;;;4GAAkD;;;;;;uCAAlD;;;;;;;;;;;;4GAAkD;;;;;;;;;;;;;;uCAAlD;;;;;;;;;;;;;;;4GAAkD;;;;;;;;;;;;;;uCAAlD;;;;;;;;;;;;;;;;;4GAAkD;;;;;;;;;KAAA;IAGlD;;;;;uCAAA;;;;;;;;;;;;;;;;4GAAqE;;;;;;uCAArE;;;;;;;;;;;;4GAAqE;;;;;;;;;;;;;;uCAArE;;;;;;;;;;;;;;;4GAAqE;;;;;;;;;;;;;;0EAArE,KAAqE;;;;;;;;;2CAAhB;;;;;;;;;;;sIAArD,KAAqE;;;;;;;;gHAAF;;;;;;2CAAd;;;;;;;;;;;sIAArD,KAAqE;;;;gHAAF;;;;;;;;;;;;;;2CAAd;;;;;;;;;;;sIAArD,KAAqE;;;;;;;gHAAF;;;;;;yFAAnE,KAAqE;;;;;;KAAA;IAErE;;;;;uCAAA;;;;;;;;;;;;;;;;4GAA8D;;;;;;uCAA9D;;;;;;;;;;;;4GAA8D;;;;;;;uCAA9D;;;;;;;;;;;;;;;4GAA8D;;;;;;;uCAA9D;;;;;;;;;;;;;;;;;4GAA8D;;;;;;;;;KAAA;IAyC9D;qCAAA;;;;;;;;;;;0GAAoC;KAAA;IACpC;qCAAA;;;;;;;;;;;0GAAoC;KAAA;IACpC;qCAAA;;;;;;;;;;;0GAAkC;KAAA;IAClC;qCAAA;;;;;;;;;;;0GAAmC;KAAA;;;;;;;;;;"
8
+ }
@@ -0,0 +1,5 @@
1
+ export declare function domainToKey(name: string): {
2
+ key: Uint8Array;
3
+ len: bigint;
4
+ };
5
+ export declare function keyToDomain(key: Uint8Array): string;
@@ -0,0 +1,19 @@
1
+ export function domainToKey(name) {
2
+ const bytes = new TextEncoder().encode(name);
3
+ if (bytes.length === 0 || bytes.length > 32)
4
+ throw new Error(`Domain name must be 1-32 bytes, got ${bytes.length}`);
5
+ const key = new Uint8Array(32).fill(255);
6
+ key.set(bytes);
7
+ return { key, len: BigInt(bytes.length) };
8
+ }
9
+ export function keyToDomain(key) {
10
+ let len = 32;
11
+ for (let i = 0; i < 32; i++) {
12
+ if (key[i] === 255) {
13
+ len = i;
14
+ break;
15
+ }
16
+ }
17
+ return new TextDecoder().decode(key.subarray(0, len));
18
+ }
19
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QACzC,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAe;IACzC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,GAAG,GAAG,CAAC,CAAC;YAAC,MAAM;QAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { CompiledContract } from "@midnight-ntwrk/compact-js";
2
+ import { type ContractProviders } from "@midnight-ntwrk/midnight-js-contracts";
3
+ import { Leaf } from "@midnames/ns";
4
+ import type { Result } from "./results.js";
5
+ export declare const leafContractInstance: CompiledContract.CompiledContract<Leaf.Contract<any, any>, any, never>;
6
+ export declare function buildKvs(fields: Array<[string, string]>): Array<{
7
+ is_some: boolean;
8
+ value: [string, string];
9
+ }>;
10
+ export declare function insertField(domain: string, key: string, value: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
11
+ transactionId: string;
12
+ }>>;
13
+ export declare function clearField(domain: string, key: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
14
+ transactionId: string;
15
+ }>>;
16
+ export declare function clearAllFields(domain: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
17
+ transactionId: string;
18
+ }>>;
19
+ export declare function addMultipleFields(domain: string, fields: Array<[string, string]>, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
20
+ transactionId: string;
21
+ }>>;
22
+ export declare function updateDomainTarget(domain: string, targetAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
23
+ transactionId: string;
24
+ }>>;
25
+ export declare function updateDomainColor(domain: string, color: Uint8Array, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
26
+ transactionId: string;
27
+ }>>;
28
+ export declare function updateDomainCosts(domain: string, costs: {
29
+ short: bigint;
30
+ medium: bigint;
31
+ long: bigint;
32
+ }, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
33
+ transactionId: string;
34
+ }>>;
35
+ export declare function transferDomainOwnership(parentDomain: string, subdomainName: string, newOwnerAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
36
+ transactionId: string;
37
+ }>>;
38
+ export declare function setDomainResolver(parentDomain: string, subdomainName: string, resolverAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
39
+ transactionId: string;
40
+ }>>;
41
+ export declare function registerDomainFor(parentDomain: string, ownerAddress: string, subdomainName: string, resolverAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
42
+ transactionId: string;
43
+ }>>;
44
+ export declare function buyDomainFor(parentDomain: string, ownerAddress: string, subdomainName: string, resolverAddress: string, _paymentAmount: bigint, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
45
+ transactionId: string;
46
+ }>>;
47
+ export declare function changeDomainOwner(domain: string, newOwnerAddress: string, providers: ContractProviders<Leaf.Contract>): Promise<Result<{
48
+ transactionId: string;
49
+ }>>;
@@ -0,0 +1,137 @@
1
+ import { CompiledContract } from "@midnight-ntwrk/compact-js";
2
+ import { findDeployedContract, } from "@midnight-ntwrk/midnight-js-contracts";
3
+ import { ShieldedCoinPublicKey, MidnightBech32m, } from "@midnight-ntwrk/wallet-sdk-address-format";
4
+ import { isWalletAddress } from "./utils/address.js";
5
+ import { getNetworkId } from "@midnight-ntwrk/midnight-js-network-id";
6
+ import { Leaf } from "@midnames/ns";
7
+ import { success, failure } from "./results.js";
8
+ import { NetworkError, InvalidDomainError } from "./errors.js";
9
+ import { normalizeDomain, parseFullDomain, domainToKey } from "./utils/domain.js";
10
+ import { getDomainInfo } from "./core.js";
11
+ function validateDomain(domain) {
12
+ const normalized = normalizeDomain(domain);
13
+ const parsed = parseFullDomain(normalized);
14
+ if (!parsed.isValid) {
15
+ return failure(new InvalidDomainError(domain, "Invalid domain format"));
16
+ }
17
+ return success(normalized);
18
+ }
19
+ // Contract types and instances
20
+ export const leafContractInstance = CompiledContract.make("leaf-contract", Leaf.Contract).pipe(CompiledContract.withVacantWitnesses, CompiledContract.withCompiledFileAssets("./managed/leaf"));
21
+ async function joinLeafContract(providers, contractAddress) {
22
+ return await findDeployedContract(providers, {
23
+ contractAddress,
24
+ compiledContract: leafContractInstance,
25
+ privateStateId: "namespacePrivateState",
26
+ initialPrivateState: { phantom: false },
27
+ });
28
+ }
29
+ // --- Shared helpers ---
30
+ async function withLeafContract(domain, providers, label, fn) {
31
+ const validated = validateDomain(domain);
32
+ if (!validated.success)
33
+ return failure(validated.error);
34
+ try {
35
+ const domainInfoResult = await getDomainInfo(validated.data, {
36
+ provider: providers.publicDataProvider,
37
+ });
38
+ if (!domainInfoResult.success) {
39
+ return failure(domainInfoResult.error);
40
+ }
41
+ const contractAddress = domainInfoResult.data.resolver;
42
+ const contract = await joinLeafContract(providers, contractAddress);
43
+ const result = await fn(contract, domainInfoResult.data);
44
+ return success(result);
45
+ }
46
+ catch (error) {
47
+ return failure(new NetworkError(`Failed to ${label}: ${error instanceof Error ? error.message : String(error)}`, error));
48
+ }
49
+ }
50
+ function txId(result) {
51
+ return { transactionId: result.public.txId };
52
+ }
53
+ export function buildKvs(fields) {
54
+ return Array.from({ length: 10 }, (_, i) => ({
55
+ is_some: i < fields.length,
56
+ value: i < fields.length ? fields[i] : ["", ""],
57
+ }));
58
+ }
59
+ function parseAddressToBytes(address) {
60
+ if (isWalletAddress(address)) {
61
+ const bech32Parsed = MidnightBech32m.parse(address);
62
+ const coinPublicKey = ShieldedCoinPublicKey.codec.decode(getNetworkId(), bech32Parsed);
63
+ return { bytes: new Uint8Array(coinPublicKey.data) };
64
+ }
65
+ else {
66
+ let hexString = address;
67
+ if (address.startsWith("0200")) {
68
+ hexString = address.slice(4);
69
+ }
70
+ const bytes = new Uint8Array(Buffer.from(hexString, "hex"));
71
+ return { bytes: bytes.length === 32 ? bytes : bytes.subarray(-32) };
72
+ }
73
+ }
74
+ function formatTargetForContract(address) {
75
+ const parsed = parseAddressToBytes(address);
76
+ const isLeft = isWalletAddress(address);
77
+ return {
78
+ is_left: isLeft,
79
+ left: isLeft ? parsed : { bytes: new Uint8Array(32) },
80
+ right: isLeft ? { bytes: new Uint8Array(32) } : parsed,
81
+ };
82
+ }
83
+ // --- Domain operations ---
84
+ export async function insertField(domain, key, value, providers) {
85
+ return withLeafContract(domain, providers, "insert field", async (contract) => txId(await contract.callTx.insert_field(key, value)));
86
+ }
87
+ export async function clearField(domain, key, providers) {
88
+ return withLeafContract(domain, providers, "clear field", async (contract) => txId(await contract.callTx.clear_field(key)));
89
+ }
90
+ export async function clearAllFields(domain, providers) {
91
+ return withLeafContract(domain, providers, "clear all fields", async (contract) => txId(await contract.callTx.clear_all_fields()));
92
+ }
93
+ export async function addMultipleFields(domain, fields, providers) {
94
+ if (fields.length === 0) {
95
+ return failure(new NetworkError("No fields provided"));
96
+ }
97
+ if (fields.length > 10) {
98
+ return failure(new NetworkError("Maximum of 10 fields can be added at once"));
99
+ }
100
+ return withLeafContract(domain, providers, "add multiple fields", async (contract) => txId(await contract.callTx.add_multiple_fields(buildKvs(fields))));
101
+ }
102
+ export async function updateDomainTarget(domain, targetAddress, providers) {
103
+ return withLeafContract(domain, providers, "update domain target", async (contract) => txId(await contract.callTx.update_domain_target(formatTargetForContract(targetAddress))));
104
+ }
105
+ export async function updateDomainColor(domain, color, providers) {
106
+ if (color.length !== 32) {
107
+ return failure(new NetworkError("Color must be exactly 32 bytes"));
108
+ }
109
+ return withLeafContract(domain, providers, "update domain color", async (contract) => txId(await contract.callTx.update_color(color)));
110
+ }
111
+ export async function updateDomainCosts(domain, costs, providers) {
112
+ if (costs.short < BigInt(0) || costs.medium < BigInt(0) || costs.long < BigInt(0)) {
113
+ return failure(new NetworkError("Costs must be non-negative"));
114
+ }
115
+ return withLeafContract(domain, providers, "update domain costs", async (contract) => txId(await contract.callTx.update_costs(costs.short, costs.medium, costs.long)));
116
+ }
117
+ export async function transferDomainOwnership(parentDomain, subdomainName, newOwnerAddress, providers) {
118
+ return withLeafContract(parentDomain, providers, "transfer domain ownership", async (contract) => txId(await contract.callTx.transfer_domain(domainToKey(subdomainName).key, parseAddressToBytes(newOwnerAddress))));
119
+ }
120
+ export async function setDomainResolver(parentDomain, subdomainName, resolverAddress, providers) {
121
+ return withLeafContract(parentDomain, providers, "set domain resolver", async (contract) => txId(await contract.callTx.set_resolver(domainToKey(subdomainName).key, parseAddressToBytes(resolverAddress))));
122
+ }
123
+ export async function registerDomainFor(parentDomain, ownerAddress, subdomainName, resolverAddress, providers) {
124
+ return withLeafContract(parentDomain, providers, "register domain", async (contract) => {
125
+ const { key, len } = domainToKey(subdomainName);
126
+ return txId(await contract.callTx.register_domain_for(parseAddressToBytes(ownerAddress), key, len, parseAddressToBytes(resolverAddress)));
127
+ });
128
+ }
129
+ export async function buyDomainFor(parentDomain, ownerAddress, subdomainName, resolverAddress, _paymentAmount, providers) {
130
+ return withLeafContract(parentDomain, providers, "buy domain", async (contract) => {
131
+ const { key, len } = domainToKey(subdomainName);
132
+ return txId(await contract.callTx.register_domain_for(parseAddressToBytes(ownerAddress), key, len, parseAddressToBytes(resolverAddress)));
133
+ });
134
+ }
135
+ export async function changeDomainOwner(domain, newOwnerAddress, providers) {
136
+ return withLeafContract(domain, providers, "change domain owner", async (contract) => txId(await contract.callTx.change_owner(parseAddressToBytes(newOwnerAddress))));
137
+ }
@@ -1,10 +1,16 @@
1
- import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
2
- import { NetworkId } from '@midnight-ntwrk/midnight-js-network-id';
1
+ import type { PublicDataProvider } from "@midnight-ntwrk/midnight-js-types";
2
+ export interface NetworkConfig {
3
+ indexerUrl: string;
4
+ indexerWsUrl: string;
5
+ tldAddress: string;
6
+ }
7
+ export declare const NETWORK_REGISTRY: Record<string, NetworkConfig>;
3
8
  export interface ProviderConfig {
4
9
  indexerUrl?: string;
5
10
  indexerWsUrl?: string;
6
- networkId?: NetworkId;
11
+ networkId?: string;
7
12
  }
8
- export declare function getDefaultProvider(): PublicDataProvider;
13
+ export declare function getNetworkConfig(networkId: string): NetworkConfig;
14
+ export declare function getDefaultProvider(networkId?: string): PublicDataProvider;
9
15
  export declare function setDefaultProvider(provider: PublicDataProvider): void;
10
16
  export declare function createDefaultProvider(config?: ProviderConfig): PublicDataProvider;
package/dist/provider.js CHANGED
@@ -1,13 +1,30 @@
1
- import { NetworkId, setNetworkId } from '@midnight-ntwrk/midnight-js-network-id';
2
- import { indexerPublicDataProvider } from '@midnight-ntwrk/midnight-js-indexer-public-data-provider';
1
+ import { setNetworkId, } from "@midnight-ntwrk/midnight-js-network-id";
2
+ import { indexerPublicDataProvider } from "@midnight-ntwrk/midnight-js-indexer-public-data-provider";
3
+ export const NETWORK_REGISTRY = {
4
+ preview: {
5
+ indexerUrl: "https://indexer.preview.midnight.network/api/v3/graphql",
6
+ indexerWsUrl: "wss://indexer.preview.midnight.network/api/v3/graphql/ws",
7
+ tldAddress: "daa9fc4dfbd42ac9227f8b4358928532da68337689ea3b21b351d607890d9192",
8
+ },
9
+ preprod: {
10
+ indexerUrl: "https://indexer.preprod.midnight.network/api/v3/graphql",
11
+ indexerWsUrl: "wss://indexer.preprod.midnight.network/api/v3/graphql/ws",
12
+ tldAddress: "b00a62ce58c108b86af4670e662fa240844e0206c54009a539c64155d62e6b6a",
13
+ },
14
+ };
15
+ export function getNetworkConfig(networkId) {
16
+ const config = NETWORK_REGISTRY[networkId];
17
+ if (!config) {
18
+ throw new Error(`Unknown network "${networkId}". Known networks: ${Object.keys(NETWORK_REGISTRY).join(", ")}. Use createDefaultProvider() with explicit URLs for custom networks.`);
19
+ }
20
+ return config;
21
+ }
3
22
  let defaultProvider = null;
4
- export function getDefaultProvider() {
23
+ export function getDefaultProvider(networkId = "preview") {
5
24
  if (!defaultProvider) {
6
- const indexerUrl = "https://indexer.testnet-02.midnight.network/api/v1/graphql";
7
- const indexerWsUrl = "wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws";
8
- const networkId = NetworkId.TestNet;
25
+ const net = getNetworkConfig(networkId);
9
26
  setNetworkId(networkId);
10
- defaultProvider = indexerPublicDataProvider(indexerUrl, indexerWsUrl);
27
+ defaultProvider = indexerPublicDataProvider(net.indexerUrl, net.indexerWsUrl);
11
28
  }
12
29
  return defaultProvider;
13
30
  }
@@ -15,7 +32,14 @@ export function setDefaultProvider(provider) {
15
32
  defaultProvider = provider;
16
33
  }
17
34
  export function createDefaultProvider(config = {}) {
18
- const { indexerUrl = "https://indexer.testnet-02.midnight.network/api/v1/graphql", indexerWsUrl = "wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws", networkId = NetworkId.TestNet } = config;
35
+ var _a, _b, _c;
36
+ const networkId = (_a = config.networkId) !== null && _a !== void 0 ? _a : "preview";
37
+ const knownConfig = NETWORK_REGISTRY[networkId];
38
+ const indexerUrl = (_b = config.indexerUrl) !== null && _b !== void 0 ? _b : knownConfig === null || knownConfig === void 0 ? void 0 : knownConfig.indexerUrl;
39
+ const indexerWsUrl = (_c = config.indexerWsUrl) !== null && _c !== void 0 ? _c : knownConfig === null || knownConfig === void 0 ? void 0 : knownConfig.indexerWsUrl;
40
+ if (!indexerUrl || !indexerWsUrl) {
41
+ throw new Error(`No indexer URLs for network "${networkId}". Provide indexerUrl and indexerWsUrl explicitly.`);
42
+ }
19
43
  setNetworkId(networkId);
20
44
  return indexerPublicDataProvider(indexerUrl, indexerWsUrl);
21
45
  }
@@ -1,13 +1,13 @@
1
1
  import React from 'react';
2
2
  import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
3
3
  import type { DomainProfileData } from '../types.js';
4
- import { MidNamesError } from '../types.js';
4
+ import { MidnamesError } from '../errors.js';
5
5
  export type DomainProfileWidgetProps = {
6
6
  fullDomain: string;
7
7
  publicDataProvider?: PublicDataProvider;
8
8
  className?: string;
9
9
  showStatus?: boolean;
10
- onError?: (error: MidNamesError) => void;
10
+ onError?: (error: MidnamesError) => void;
11
11
  variant?: 'full' | 'compact' | 'inline' | 'minimal';
12
12
  showBanner?: boolean;
13
13
  showAvatar?: boolean;
@@ -1,10 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useMemo, useState } from 'react';
3
- import { MidNamesError } from '../types.js';
3
+ import { MidnamesError } from '../errors.js';
4
4
  import { deriveShieldedAddress } from '../utils/address.js';
5
5
  import { Copy, Check } from 'lucide-react';
6
6
  import { getDomainProfile } from '../core.js';
7
7
  import { getDefaultProvider } from '../provider.js';
8
+ import { sanitizeUrl } from '../utils/sanitize.js';
8
9
  function truncate(addr, head = 10, tail = 6) {
9
10
  if (!addr)
10
11
  return 'N/A';
@@ -69,19 +70,19 @@ onFieldClick, onCopySuccess, }) {
69
70
  setData(d.data);
70
71
  }
71
72
  else {
72
- setError(new MidNamesError((_b = (_a = d.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'Unknown error', (_d = (_c = d.error) === null || _c === void 0 ? void 0 : _c.code) !== null && _d !== void 0 ? _d : 'UNKNOWN', d.error));
73
+ setError(new MidnamesError((_b = (_a = d.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'Unknown error', (_d = (_c = d.error) === null || _c === void 0 ? void 0 : _c.code) !== null && _d !== void 0 ? _d : 'UNKNOWN', d.error));
73
74
  if (onError)
74
- onError(new MidNamesError((_f = (_e = d.error) === null || _e === void 0 ? void 0 : _e.message) !== null && _f !== void 0 ? _f : 'Unknown error', (_h = (_g = d.error) === null || _g === void 0 ? void 0 : _g.code) !== null && _h !== void 0 ? _h : 'UNKNOWN', d.error));
75
+ onError(new MidnamesError((_f = (_e = d.error) === null || _e === void 0 ? void 0 : _e.message) !== null && _f !== void 0 ? _f : 'Unknown error', (_h = (_g = d.error) === null || _g === void 0 ? void 0 : _g.code) !== null && _h !== void 0 ? _h : 'UNKNOWN', d.error));
75
76
  setData(null);
76
77
  }
77
78
  }
78
79
  })
79
80
  .catch((err) => {
80
81
  if (mounted) {
81
- const midnamesError = err instanceof MidNamesError ? err : new MidNamesError('Unknown error', 'UNKNOWN', err);
82
- setError(midnamesError);
82
+ const midnamesErr = err instanceof MidnamesError ? err : new MidnamesError('Unknown error', 'UNKNOWN', err);
83
+ setError(midnamesErr);
83
84
  if (onError)
84
- onError(midnamesError);
85
+ onError(midnamesErr);
85
86
  }
86
87
  })
87
88
  .finally(() => mounted && setLoading(false));
@@ -91,7 +92,9 @@ onFieldClick, onCopySuccess, }) {
91
92
  }, [publicDataProvider, fullDomain, onError]);
92
93
  const fieldsMap = useMemo(() => {
93
94
  const m = {};
94
- ((data === null || data === void 0 ? void 0 : data.fields) || []).forEach(([k, v]) => (m[k.toLowerCase()] = v));
95
+ if (data === null || data === void 0 ? void 0 : data.fields) {
96
+ data.fields.forEach((v, k) => (m[k.toLowerCase()] = v));
97
+ }
95
98
  return m;
96
99
  }, [data]);
97
100
  const displayName = fieldsMap['name'] || fieldsMap['displayname'] || fieldsMap['handle'] || '';
@@ -162,5 +165,5 @@ onFieldClick, onCopySuccess, }) {
162
165
  if (error && !loading) {
163
166
  return (_jsx("div", { className: cardClasses, children: _jsxs("div", { className: "midnames-error", children: [_jsx("div", { className: "midnames-error-title", children: "Error loading domain" }), _jsx("div", { className: "midnames-error-message", children: error.message }), _jsxs("div", { className: "midnames-error-code", children: ["Code: ", error.code] })] }) }));
164
167
  }
165
- return (_jsxs("div", { className: cardClasses, children: [showBanner && bannerUrl && _jsx("img", { src: bannerUrl, alt: "", className: "midnames-banner" }), _jsxs("div", { className: "midnames-header", children: [showAvatar && (_jsx("div", { className: "midnames-avatar", children: avatarUrl ? (_jsx("img", { src: avatarUrl, alt: "", onError: (e) => (e.currentTarget.style.display = 'none') })) : (_jsx("span", { children: (_c = (_b = (_a = (displayName || (data === null || data === void 0 ? void 0 : data.fullDomain) || '?')[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : '?' })) })), _jsxs("div", { className: "midnames-ident", children: [_jsx("div", { className: "midnames-name", children: displayName || (data === null || data === void 0 ? void 0 : data.fullDomain) || fullDomain }), variant !== 'minimal' && _jsx("div", { className: "midnames-domain", children: (data === null || data === void 0 ? void 0 : data.fullDomain) || fullDomain })] }), showStatus && (_jsx("div", { className: `midnames-status midnames-status-${status}`, children: loading ? 'Checking…' : status === 'registered' ? 'Registered' : status === 'available' ? 'Available' : status === 'error' ? 'Error' : 'Unknown' }))] }), showBio && bio && _jsx("p", { className: "midnames-bio", children: bio }), showDomainInfo && fieldsToShow.length > 0 && (_jsx("div", { className: "midnames-grid", children: fieldsToShow.map((field) => (_jsxs("div", { className: "midnames-box", children: [_jsx("div", { className: "midnames-box-label", children: field.label }), _jsx(CopyableValue, { value: field.value, className: "midnames-box-value", showCopy: showCopyButtons, onCopySuccess: onCopySuccess, onFieldClick: onFieldClick, fieldName: field.fieldName })] }, field.key))) })), showSocialLinks && (website || twitter || github || location) && (_jsxs("div", { className: "midnames-links", children: [website && (_jsx("a", { className: "midnames-chip", href: website.startsWith('http') ? website : `https://${website}`, target: "_blank", rel: "noreferrer", children: website.replace(/^https?:\/\//, '') })), twitter && (_jsxs("a", { className: "midnames-chip", href: `https://x.com/${twitter}`, target: "_blank", rel: "noreferrer", children: ["@", twitter] })), github && (_jsx("a", { className: "midnames-chip", href: `https://github.com/${github}`, target: "_blank", rel: "noreferrer", children: github })), location && _jsx("span", { className: "midnames-chip", children: location })] })), renderActions && (_jsx("div", { className: "midnames-actions", children: renderActions(data) }))] }));
168
+ return (_jsxs("div", { className: cardClasses, children: [showBanner && bannerUrl && _jsx("img", { src: sanitizeUrl(bannerUrl), alt: "", className: "midnames-banner" }), _jsxs("div", { className: "midnames-header", children: [showAvatar && (_jsx("div", { className: "midnames-avatar", children: avatarUrl ? (_jsx("img", { src: sanitizeUrl(avatarUrl), alt: "", onError: (e) => (e.currentTarget.style.display = 'none') })) : (_jsx("span", { children: (_c = (_b = (_a = (displayName || (data === null || data === void 0 ? void 0 : data.fullDomain) || '?')[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : '?' })) })), _jsxs("div", { className: "midnames-ident", children: [_jsx("div", { className: "midnames-name", children: displayName || (data === null || data === void 0 ? void 0 : data.fullDomain) || fullDomain }), variant !== 'minimal' && _jsx("div", { className: "midnames-domain", children: (data === null || data === void 0 ? void 0 : data.fullDomain) || fullDomain })] }), showStatus && (_jsx("div", { className: `midnames-status midnames-status-${status}`, children: loading ? 'Checking…' : status === 'registered' ? 'Registered' : status === 'available' ? 'Available' : status === 'error' ? 'Error' : 'Unknown' }))] }), showBio && bio && _jsx("p", { className: "midnames-bio", children: bio }), showDomainInfo && fieldsToShow.length > 0 && (_jsx("div", { className: "midnames-grid", children: fieldsToShow.map((field) => (_jsxs("div", { className: "midnames-box", children: [_jsx("div", { className: "midnames-box-label", children: field.label }), _jsx(CopyableValue, { value: field.value, className: "midnames-box-value", showCopy: showCopyButtons, onCopySuccess: onCopySuccess, onFieldClick: onFieldClick, fieldName: field.fieldName })] }, field.key))) })), showSocialLinks && (website || twitter || github || location) && (_jsxs("div", { className: "midnames-links", children: [website && (_jsx("a", { className: "midnames-chip", href: sanitizeUrl(website.startsWith('http') ? website : `https://${website}`), target: "_blank", rel: "noreferrer", children: website.replace(/^https?:\/\//, '') })), twitter && (_jsxs("a", { className: "midnames-chip", href: `https://x.com/${twitter}`, target: "_blank", rel: "noreferrer", children: ["@", twitter] })), github && (_jsx("a", { className: "midnames-chip", href: `https://github.com/${github}`, target: "_blank", rel: "noreferrer", children: github })), location && _jsx("span", { className: "midnames-chip", children: location })] })), renderActions && (_jsx("div", { className: "midnames-actions", children: renderActions(data) }))] }));
166
169
  }
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type { PublicDataProvider } from '@midnight-ntwrk/midnight-js-types';
3
- import { MidNamesError } from '../types.js';
3
+ import { MidnamesError } from '../errors.js';
4
4
  /**
5
5
  * HolographicCard props
6
6
  */
@@ -30,7 +30,7 @@ export interface HolographicCardProps {
30
30
  /** Callback function called when the contact button is clicked */
31
31
  onContactClick?: () => void;
32
32
  /** Callback function called when an error occurs */
33
- onError?: (error: MidNamesError) => void;
33
+ onError?: (error: MidnamesError) => void;
34
34
  }
35
35
  declare const HolographicCard: React.NamedExoticComponent<HolographicCardProps>;
36
36
  export default HolographicCard;
@@ -1,8 +1,9 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useEffect, useRef, useCallback, useMemo, useState } from 'react';
3
- import { MidNamesError } from '../types.js';
3
+ import { MidnamesError } from '../errors.js';
4
4
  import { getDomainProfile } from '../core.js';
5
5
  import { getDefaultProvider } from '../provider.js';
6
+ import { sanitizeUrl } from '../utils/sanitize.js';
6
7
  const DEFAULT_BEHIND_GRADIENT = 'radial-gradient(farthest-side circle at var(--midnames-holo-pointer-x) var(--midnames-holo-pointer-y),hsla(266,100%,90%,var(--midnames-holo-card-opacity)) 4%,hsla(266,50%,80%,calc(var(--midnames-holo-card-opacity)*0.75)) 10%,hsla(266,25%,70%,calc(var(--midnames-holo-card-opacity)*0.5)) 50%,hsla(266,0%,60%,0) 100%),radial-gradient(35% 52% at 55% 20%,#00ffaac4 0%,#073aff00 100%),radial-gradient(100% 100% at 50% 50%,#00c1ffff 1%,#073aff00 76%),conic-gradient(from 124deg at 50% 50%,#c137ffff 0%,#07c6ffff 40%,#07c6ffff 60%,#c137ffff 100%)';
7
8
  const DEFAULT_INNER_GRADIENT = 'linear-gradient(145deg,#60496e8c 0%,#71C4FF44 100%)';
8
9
  const ANIMATION_CONFIG = {
@@ -37,7 +38,7 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
37
38
  setData(result.data);
38
39
  }
39
40
  else {
40
- const err = new MidNamesError((_b = (_a = result.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'Unknown error', (_d = (_c = result.error) === null || _c === void 0 ? void 0 : _c.code) !== null && _d !== void 0 ? _d : 'UNKNOWN', result.error);
41
+ const err = new MidnamesError((_b = (_a = result.error) === null || _a === void 0 ? void 0 : _a.message) !== null && _b !== void 0 ? _b : 'Unknown error', (_d = (_c = result.error) === null || _c === void 0 ? void 0 : _c.code) !== null && _d !== void 0 ? _d : 'UNKNOWN', result.error);
41
42
  setError(err);
42
43
  if (onError)
43
44
  onError(err);
@@ -47,10 +48,10 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
47
48
  })
48
49
  .catch((err) => {
49
50
  if (mounted) {
50
- const midnamesError = err instanceof MidNamesError ? err : new MidNamesError('Unknown error', 'UNKNOWN', err);
51
- setError(midnamesError);
51
+ const midnamesErr = err instanceof MidnamesError ? err : new MidnamesError('Unknown error', 'UNKNOWN', err);
52
+ setError(midnamesErr);
52
53
  if (onError)
53
- onError(midnamesError);
54
+ onError(midnamesErr);
54
55
  }
55
56
  })
56
57
  .finally(() => mounted && setLoading(false));
@@ -61,7 +62,9 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
61
62
  // Extract fields from domain data
62
63
  const fieldsMap = useMemo(() => {
63
64
  const m = {};
64
- ((data === null || data === void 0 ? void 0 : data.fields) || []).forEach(([k, v]) => (m[k.toLowerCase()] = v));
65
+ if (data === null || data === void 0 ? void 0 : data.fields) {
66
+ data.fields.forEach((v, k) => (m[k.toLowerCase()] = v));
67
+ }
65
68
  return m;
66
69
  }, [data]);
67
70
  const displayName = fieldsMap['name'] || fieldsMap['displayname'] || fieldsMap['handle'] || '';
@@ -186,7 +189,7 @@ const HolographicCardComponent = ({ domain, publicDataProvider, behindGradient,
186
189
  '--midnames-holo-behind-gradient': showBehindGradient ? (behindGradient !== null && behindGradient !== void 0 ? behindGradient : DEFAULT_BEHIND_GRADIENT) : 'none',
187
190
  '--midnames-holo-inner-gradient': innerGradient !== null && innerGradient !== void 0 ? innerGradient : DEFAULT_INNER_GRADIENT,
188
191
  }), [showBehindGradient, behindGradient, innerGradient]);
189
- return (_jsx("div", { ref: wrapRef, className: `midnames-holo-card-wrapper ${className}`.trim(), style: cardStyle, children: _jsx("section", { ref: cardRef, className: "midnames-holo-card", children: _jsxs("div", { className: "midnames-holo-inside", children: [_jsx("div", { className: "midnames-holo-shine" }), _jsx("div", { className: "midnames-holo-glare" }), _jsxs("div", { className: "midnames-holo-content midnames-holo-avatar-content", children: [loading && (_jsx("div", { className: "midnames-holo-loading", children: "Loading domain..." })), error && !loading && (_jsxs("div", { className: "midnames-holo-error", children: [_jsx("div", { children: "Failed to load domain" }), _jsx("div", { style: { fontSize: '12px', opacity: 0.8, marginTop: '8px' }, children: error.message })] })), avatarUrl && !loading && !error && (_jsx("img", { className: "midnames-holo-avatar", src: avatarUrl, alt: `${displayName || domain} avatar`, loading: "lazy", onError: (e) => { e.target.style.display = 'none'; } })), showUserInfo && !loading && !error && (displayName || handle || contactText) && (_jsxs("div", { className: "midnames-holo-user-info", children: [_jsxs("div", { className: "midnames-holo-user-details", children: [_jsx("div", { className: "midnames-holo-mini-avatar", children: _jsx("img", { src: avatarUrl || '', alt: "mini", loading: "lazy", onError: (e) => { e.target.style.display = 'none'; } }) }), _jsxs("div", { className: "midnames-holo-user-text", children: [displayName && _jsx("div", { className: "midnames-holo-handle", children: displayName }), handle && _jsxs("div", { className: "midnames-holo-status", children: ["@", handle] }), _jsx("div", { className: "midnames-holo-status", children: domain })] })] }), _jsx("button", { className: "midnames-holo-contact-btn", onClick: onContactClick, type: "button", children: contactText })] }))] })] }) }) }));
192
+ return (_jsx("div", { ref: wrapRef, className: `midnames-holo-card-wrapper ${className}`.trim(), style: cardStyle, children: _jsx("section", { ref: cardRef, className: "midnames-holo-card", children: _jsxs("div", { className: "midnames-holo-inside", children: [_jsx("div", { className: "midnames-holo-shine" }), _jsx("div", { className: "midnames-holo-glare" }), _jsxs("div", { className: "midnames-holo-content midnames-holo-avatar-content", children: [loading && (_jsx("div", { className: "midnames-holo-loading", children: "Loading domain..." })), error && !loading && (_jsxs("div", { className: "midnames-holo-error", children: [_jsx("div", { children: "Failed to load domain" }), _jsx("div", { style: { fontSize: '12px', opacity: 0.8, marginTop: '8px' }, children: error.message })] })), avatarUrl && !loading && !error && (_jsx("img", { className: "midnames-holo-avatar", src: sanitizeUrl(avatarUrl), alt: `${displayName || domain} avatar`, loading: "lazy", onError: (e) => { e.target.style.display = 'none'; } })), showUserInfo && !loading && !error && (displayName || handle || contactText) && (_jsxs("div", { className: "midnames-holo-user-info", children: [_jsxs("div", { className: "midnames-holo-user-details", children: [_jsx("div", { className: "midnames-holo-mini-avatar", children: _jsx("img", { src: sanitizeUrl(avatarUrl), alt: "mini", loading: "lazy", onError: (e) => { e.target.style.display = 'none'; } }) }), _jsxs("div", { className: "midnames-holo-user-text", children: [displayName && _jsx("div", { className: "midnames-holo-handle", children: displayName }), handle && _jsxs("div", { className: "midnames-holo-status", children: ["@", handle] }), _jsx("div", { className: "midnames-holo-status", children: domain })] })] }), _jsx("button", { className: "midnames-holo-contact-btn", onClick: onContactClick, type: "button", children: contactText })] }))] })] }) }) }));
190
193
  };
191
194
  const HolographicCard = React.memo(HolographicCardComponent);
192
195
  export default HolographicCard;
@@ -1,3 +1,3 @@
1
- export * from './DomainProfileWidget.js';
1
+ export { DomainProfileWidget } from './DomainProfileWidget.js';
2
+ export type { DomainProfileWidgetProps } from './DomainProfileWidget.js';
2
3
  export { default as HolographicCard } from './HolographicCard.js';
3
- export { CopyableValue } from './DomainProfileWidget.js';
@@ -1,3 +1,2 @@
1
- export * from './DomainProfileWidget.js';
1
+ export { DomainProfileWidget } from './DomainProfileWidget.js';
2
2
  export { default as HolographicCard } from './HolographicCard.js';
3
- export { CopyableValue } from './DomainProfileWidget.js';
@@ -0,0 +1,38 @@
1
+ import { MidnamesError } from "./errors.js";
2
+ export type Result<T, E = MidnamesError> = {
3
+ success: true;
4
+ data: T;
5
+ error?: never;
6
+ } | {
7
+ success: false;
8
+ data?: never;
9
+ error: E;
10
+ };
11
+ export declare function success<T, E = MidnamesError>(data: T): Result<T, E>;
12
+ export declare function failure<E = MidnamesError>(error: E): Result<never, E>;
13
+ export declare function match<T, E, U>(result: Result<T, E>, patterns: {
14
+ success: (data: T) => U;
15
+ error: (error: E) => U;
16
+ }): U;
17
+ export declare function map<T, U, E>(result: Result<T, E>, fn: (data: T) => U): Result<U, E>;
18
+ export declare function flatMap<T, U, E>(result: Result<T, E>, fn: (data: T) => Result<U, E>): Result<U, E>;
19
+ export declare function mapError<T, E, F>(result: Result<T, E>, fn: (error: E) => F): Result<T, F>;
20
+ export declare function recover<T, E>(result: Result<T, E>, fn: (error: E) => T): Result<T, never>;
21
+ export declare function wrapAsync<T>(asyncFn: () => Promise<T>): Promise<Result<T>>;
22
+ export declare class ResultChain<T, E = MidnamesError> {
23
+ private result;
24
+ constructor(result: Result<T, E>);
25
+ map<U>(fn: (data: T) => U): ResultChain<U, E>;
26
+ flatMap<U>(fn: (data: T) => Result<U, E>): ResultChain<U, E>;
27
+ mapError<F>(fn: (error: E) => F): ResultChain<T, F>;
28
+ recover(fn: (error: E) => T): ResultChain<T, never>;
29
+ match<U>(patterns: {
30
+ success: (data: T) => U;
31
+ error: (error: E) => U;
32
+ }): U;
33
+ unwrap(): Result<T, E>;
34
+ }
35
+ export declare function chain<T, E = MidnamesError>(result: Result<T, E>): ResultChain<T, E>;
36
+ export declare function combine<T extends readonly unknown[], E>(results: {
37
+ [K in keyof T]: Result<T[K], E>;
38
+ }): Result<T, E>;
@@ -0,0 +1,88 @@
1
+ import { MidnamesError } from "./errors.js";
2
+ // Helper functions for Result type
3
+ export function success(data) {
4
+ return { success: true, data };
5
+ }
6
+ export function failure(error) {
7
+ return { success: false, error };
8
+ }
9
+ // Enhanced pattern matching for Results
10
+ export function match(result, patterns) {
11
+ if (result.success) {
12
+ return patterns.success(result.data);
13
+ }
14
+ else {
15
+ return patterns.error(result.error);
16
+ }
17
+ }
18
+ // Transform success value, keep error unchanged
19
+ export function map(result, fn) {
20
+ return result.success
21
+ ? success(fn(result.data))
22
+ : result;
23
+ }
24
+ // Chain operations that can fail
25
+ export function flatMap(result, fn) {
26
+ return result.success ? fn(result.data) : result;
27
+ }
28
+ // Transform error, keep success unchanged
29
+ export function mapError(result, fn) {
30
+ return result.success ? result : failure(fn(result.error));
31
+ }
32
+ // Recover from error with a fallback value
33
+ export function recover(result, fn) {
34
+ return result.success ? result : success(fn(result.error));
35
+ }
36
+ // Async result helpers
37
+ export async function wrapAsync(asyncFn) {
38
+ try {
39
+ const data = await asyncFn();
40
+ return success(data);
41
+ }
42
+ catch (error) {
43
+ if (error instanceof MidnamesError) {
44
+ return failure(error);
45
+ }
46
+ return failure(new MidnamesError(error instanceof Error ? error.message : String(error), "UNKNOWN_ERROR", error));
47
+ }
48
+ }
49
+ // Chainable Result class for fluent API
50
+ export class ResultChain {
51
+ constructor(result) {
52
+ this.result = result;
53
+ }
54
+ map(fn) {
55
+ return new ResultChain(map(this.result, fn));
56
+ }
57
+ flatMap(fn) {
58
+ return new ResultChain(flatMap(this.result, fn));
59
+ }
60
+ mapError(fn) {
61
+ return new ResultChain(mapError(this.result, fn));
62
+ }
63
+ recover(fn) {
64
+ return new ResultChain(recover(this.result, fn));
65
+ }
66
+ match(patterns) {
67
+ return match(this.result, patterns);
68
+ }
69
+ unwrap() {
70
+ return this.result;
71
+ }
72
+ }
73
+ // Helper function to start chain
74
+ export function chain(result) {
75
+ return new ResultChain(result);
76
+ }
77
+ // Combine multiple Results
78
+ export function combine(results) {
79
+ const data = [];
80
+ for (let i = 0; i < results.length; i++) {
81
+ const result = results[i];
82
+ if (!result.success) {
83
+ return result;
84
+ }
85
+ data[i] = result.data;
86
+ }
87
+ return success(data);
88
+ }