holosphere 2.0.0-alpha2 → 2.0.0-alpha5

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 (98) hide show
  1. package/dist/2019-D2OG2idw.js +6680 -0
  2. package/dist/2019-D2OG2idw.js.map +1 -0
  3. package/dist/2019-EION3wKo.cjs +8 -0
  4. package/dist/2019-EION3wKo.cjs.map +1 -0
  5. package/dist/_commonjsHelpers-C37NGDzP.cjs +2 -0
  6. package/dist/_commonjsHelpers-C37NGDzP.cjs.map +1 -0
  7. package/dist/_commonjsHelpers-CUmg6egw.js +7 -0
  8. package/dist/_commonjsHelpers-CUmg6egw.js.map +1 -0
  9. package/dist/browser-BSniCNqO.js +3058 -0
  10. package/dist/browser-BSniCNqO.js.map +1 -0
  11. package/dist/browser-Cq59Ij19.cjs +2 -0
  12. package/dist/browser-Cq59Ij19.cjs.map +1 -0
  13. package/dist/cjs/holosphere.cjs +1 -1
  14. package/dist/esm/holosphere.js +50 -53
  15. package/dist/index-BG8FStkt.cjs +12 -0
  16. package/dist/index-BG8FStkt.cjs.map +1 -0
  17. package/dist/index-Bbey4GkP.js +37869 -0
  18. package/dist/index-Bbey4GkP.js.map +1 -0
  19. package/dist/index-Cp3xctq8.js +15104 -0
  20. package/dist/index-Cp3xctq8.js.map +1 -0
  21. package/dist/index-hfVGRwSr.cjs +5 -0
  22. package/dist/index-hfVGRwSr.cjs.map +1 -0
  23. package/dist/indexeddb-storage-BD70pN7q.cjs +2 -0
  24. package/dist/indexeddb-storage-BD70pN7q.cjs.map +1 -0
  25. package/dist/{indexeddb-storage-CMW4qRQS.js → indexeddb-storage-Bjg84U5R.js} +49 -13
  26. package/dist/indexeddb-storage-Bjg84U5R.js.map +1 -0
  27. package/dist/{memory-storage-DQzcAZlf.js → memory-storage-CD0XFayE.js} +6 -2
  28. package/dist/memory-storage-CD0XFayE.js.map +1 -0
  29. package/dist/{memory-storage-DmePEP2q.cjs → memory-storage-DmMyJtOo.cjs} +2 -2
  30. package/dist/memory-storage-DmMyJtOo.cjs.map +1 -0
  31. package/dist/{secp256k1-vOXp40Fx.js → secp256k1-69sS9O-P.js} +2 -393
  32. package/dist/secp256k1-69sS9O-P.js.map +1 -0
  33. package/dist/secp256k1-TcN6vWGh.cjs +12 -0
  34. package/dist/secp256k1-TcN6vWGh.cjs.map +1 -0
  35. package/docs/CONTRACTS.md +797 -0
  36. package/examples/demo.html +47 -0
  37. package/package.json +10 -5
  38. package/src/contracts/abis/Appreciative.json +1280 -0
  39. package/src/contracts/abis/AppreciativeFactory.json +101 -0
  40. package/src/contracts/abis/Bundle.json +1435 -0
  41. package/src/contracts/abis/BundleFactory.json +106 -0
  42. package/src/contracts/abis/Holon.json +881 -0
  43. package/src/contracts/abis/Holons.json +330 -0
  44. package/src/contracts/abis/Managed.json +1262 -0
  45. package/src/contracts/abis/ManagedFactory.json +149 -0
  46. package/src/contracts/abis/Membrane.json +261 -0
  47. package/src/contracts/abis/Splitter.json +1624 -0
  48. package/src/contracts/abis/SplitterFactory.json +220 -0
  49. package/src/contracts/abis/TestToken.json +321 -0
  50. package/src/contracts/abis/Zoned.json +1461 -0
  51. package/src/contracts/abis/ZonedFactory.json +154 -0
  52. package/src/contracts/chain-manager.js +375 -0
  53. package/src/contracts/deployer.js +443 -0
  54. package/src/contracts/event-listener.js +507 -0
  55. package/src/contracts/holon-contracts.js +344 -0
  56. package/src/contracts/index.js +83 -0
  57. package/src/contracts/networks.js +224 -0
  58. package/src/contracts/operations.js +670 -0
  59. package/src/contracts/queries.js +589 -0
  60. package/src/core/holosphere.js +453 -1
  61. package/src/crypto/nostr-utils.js +263 -0
  62. package/src/federation/handshake.js +455 -0
  63. package/src/federation/hologram.js +1 -1
  64. package/src/hierarchical/upcast.js +6 -5
  65. package/src/index.js +463 -1939
  66. package/src/lib/ai-methods.js +308 -0
  67. package/src/lib/contract-methods.js +293 -0
  68. package/src/lib/errors.js +23 -0
  69. package/src/lib/federation-methods.js +238 -0
  70. package/src/lib/index.js +26 -0
  71. package/src/spatial/h3-operations.js +2 -2
  72. package/src/storage/backends/gundb-backend.js +377 -46
  73. package/src/storage/global-tables.js +28 -1
  74. package/src/storage/gun-auth.js +303 -0
  75. package/src/storage/gun-federation.js +776 -0
  76. package/src/storage/gun-references.js +198 -0
  77. package/src/storage/gun-schema.js +291 -0
  78. package/src/storage/gun-wrapper.js +347 -31
  79. package/src/storage/indexeddb-storage.js +49 -11
  80. package/src/storage/memory-storage.js +5 -0
  81. package/src/storage/nostr-async.js +194 -37
  82. package/src/storage/nostr-client.js +580 -51
  83. package/src/storage/persistent-storage.js +6 -1
  84. package/src/storage/unified-storage.js +119 -0
  85. package/src/subscriptions/manager.js +1 -1
  86. package/types/index.d.ts +133 -0
  87. package/dist/index-CDfIuXew.js +0 -15974
  88. package/dist/index-CDfIuXew.js.map +0 -1
  89. package/dist/index-ifOgtDvd.cjs +0 -3
  90. package/dist/index-ifOgtDvd.cjs.map +0 -1
  91. package/dist/indexeddb-storage-CMW4qRQS.js.map +0 -1
  92. package/dist/indexeddb-storage-DLZOgetM.cjs +0 -2
  93. package/dist/indexeddb-storage-DLZOgetM.cjs.map +0 -1
  94. package/dist/memory-storage-DQzcAZlf.js.map +0 -1
  95. package/dist/memory-storage-DmePEP2q.cjs.map +0 -1
  96. package/dist/secp256k1-CP0ZkpAx.cjs +0 -13
  97. package/dist/secp256k1-CP0ZkpAx.cjs.map +0 -1
  98. package/dist/secp256k1-vOXp40Fx.js.map +0 -1
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Federation Methods Mixin
3
+ * Cross-Holosphere federation and Nostr discovery operations
4
+ */
5
+
6
+ import * as registry from '../federation/registry.js';
7
+ import * as discovery from '../federation/discovery.js';
8
+ import * as federation from '../federation/hologram.js';
9
+ import * as storage from '../storage/unified-storage.js';
10
+ import * as nostrAsync from '../storage/nostr-async.js';
11
+ import * as crypto from '../crypto/secp256k1.js';
12
+ import { ValidationError, AuthorizationError } from './errors.js';
13
+ import { sha256 } from '@noble/hashes/sha256';
14
+ import { bytesToHex } from '@noble/hashes/utils';
15
+
16
+ /**
17
+ * Mixin that adds federation methods to a HoloSphere class
18
+ * @param {Class} Base - Base class to extend
19
+ * @returns {Class} Extended class with federation methods
20
+ */
21
+ export function withFederationMethods(Base) {
22
+ return class extends Base {
23
+ // === Cross-Holosphere Federation ===
24
+
25
+ async addFederatedHolosphere(pubKey, options = {}) {
26
+ if (!pubKey || typeof pubKey !== 'string') {
27
+ throw new ValidationError('pubKey must be a valid public key string');
28
+ }
29
+ return registry.addFederatedPartner(
30
+ this.client,
31
+ this.config.appName,
32
+ pubKey,
33
+ options
34
+ );
35
+ }
36
+
37
+ async removeFederatedHolosphere(pubKey) {
38
+ return registry.removeFederatedPartner(
39
+ this.client,
40
+ this.config.appName,
41
+ pubKey
42
+ );
43
+ }
44
+
45
+ async getFederatedHolospheres() {
46
+ return registry.getFederatedAuthors(
47
+ this.client,
48
+ this.config.appName
49
+ );
50
+ }
51
+
52
+ async getFederationRegistry() {
53
+ return registry.getFederationRegistry(
54
+ this.client,
55
+ this.config.appName
56
+ );
57
+ }
58
+
59
+ async storeInboundCapability(partnerPubKey, capabilityInfo) {
60
+ return registry.storeInboundCapability(
61
+ this.client,
62
+ this.config.appName,
63
+ partnerPubKey,
64
+ capabilityInfo
65
+ );
66
+ }
67
+
68
+ async readFromFederatedSource(sourcePubKey, holonId, lensName, dataId = null) {
69
+ const capabilityEntry = await registry.getCapabilityForAuthor(
70
+ this.client,
71
+ this.config.appName,
72
+ sourcePubKey,
73
+ { holonId, lensName, dataId }
74
+ );
75
+
76
+ if (!capabilityEntry) {
77
+ throw new AuthorizationError('No valid capability for federated source', 'read');
78
+ }
79
+
80
+ const isValid = await this.verifyCapability(
81
+ capabilityEntry.token,
82
+ 'read',
83
+ { holonId, lensName, dataId }
84
+ );
85
+
86
+ if (!isValid) {
87
+ throw new AuthorizationError('Capability verification failed', 'read');
88
+ }
89
+
90
+ if (dataId) {
91
+ const path = storage.buildPath(this.config.appName, holonId, lensName, dataId);
92
+ return nostrAsync.nostrGet(this.client, path, 30000, {
93
+ authors: [sourcePubKey],
94
+ includeAuthor: true,
95
+ });
96
+ } else {
97
+ const path = storage.buildPath(this.config.appName, holonId, lensName);
98
+ return nostrAsync.nostrGetAll(this.client, path, 30000, {
99
+ authors: [sourcePubKey],
100
+ includeAuthor: true,
101
+ });
102
+ }
103
+ }
104
+
105
+ async createCrossHolosphereHologram(sourcePubKey, sourceHolon, lensName, dataId, targetHolon, options = {}) {
106
+ const { embedCapability = true } = options;
107
+
108
+ const capabilityEntry = await registry.getCapabilityForAuthor(
109
+ this.client,
110
+ this.config.appName,
111
+ sourcePubKey,
112
+ { holonId: sourceHolon, lensName, dataId }
113
+ );
114
+
115
+ if (!capabilityEntry) {
116
+ throw new AuthorizationError('No valid capability for cross-holosphere hologram', 'read');
117
+ }
118
+
119
+ const hologram = federation.createHologram(
120
+ sourceHolon,
121
+ targetHolon,
122
+ lensName,
123
+ dataId,
124
+ this.config.appName,
125
+ {
126
+ authorPubKey: sourcePubKey,
127
+ capability: embedCapability ? capabilityEntry.token : null,
128
+ }
129
+ );
130
+
131
+ const targetPath = storage.buildPath(this.config.appName, targetHolon, lensName, dataId);
132
+ await storage.write(this.client, targetPath, hologram);
133
+
134
+ return hologram;
135
+ }
136
+
137
+ async issueCapabilityForFederation(targetPubKey, scope, permissions, options = {}) {
138
+ const { expiresIn = 3600000, trackInRegistry = true } = options;
139
+
140
+ const token = await crypto.issueCapability(
141
+ permissions,
142
+ scope,
143
+ targetPubKey,
144
+ {
145
+ expiresIn,
146
+ issuerKey: this.client.privateKey,
147
+ }
148
+ );
149
+
150
+ if (trackInRegistry) {
151
+ const partner = await registry.getFederatedPartner(
152
+ this.client,
153
+ this.config.appName,
154
+ targetPubKey
155
+ );
156
+
157
+ if (!partner) {
158
+ await registry.addFederatedPartner(
159
+ this.client,
160
+ this.config.appName,
161
+ targetPubKey,
162
+ { addedVia: 'capability_issued' }
163
+ );
164
+ }
165
+
166
+ await registry.storeOutboundCapability(
167
+ this.client,
168
+ this.config.appName,
169
+ targetPubKey,
170
+ {
171
+ tokenHash: await this._hashToken(token),
172
+ scope,
173
+ permissions,
174
+ expires: Date.now() + expiresIn,
175
+ }
176
+ );
177
+ }
178
+
179
+ return token;
180
+ }
181
+
182
+ async _hashToken(token) {
183
+ const encoder = new TextEncoder();
184
+ return bytesToHex(sha256(encoder.encode(token)));
185
+ }
186
+
187
+ // === Nostr Discovery Protocol ===
188
+
189
+ async sendFederationRequest(targetPubKey, options = {}) {
190
+ return discovery.sendFederationRequest(
191
+ this.client,
192
+ this.config.appName,
193
+ targetPubKey,
194
+ options
195
+ );
196
+ }
197
+
198
+ async subscribeFederationRequests(callback) {
199
+ return discovery.subscribeFederationRequests(this.client, callback);
200
+ }
201
+
202
+ async acceptFederationRequest(request, options = {}) {
203
+ return discovery.acceptFederationRequest(
204
+ this.client,
205
+ this.config.appName,
206
+ request,
207
+ options
208
+ );
209
+ }
210
+
211
+ async declineFederationRequest(request, reason = '') {
212
+ return discovery.declineFederationRequest(
213
+ this.client,
214
+ this.config.appName,
215
+ request,
216
+ reason
217
+ );
218
+ }
219
+
220
+ async subscribeFederationAcceptances(callback) {
221
+ return discovery.subscribeFederationAcceptances(
222
+ this.client,
223
+ this.config.appName,
224
+ callback
225
+ );
226
+ }
227
+
228
+ async subscribeFederationDeclines(callback) {
229
+ return discovery.subscribeFederationDeclines(this.client, callback);
230
+ }
231
+
232
+ async getPendingFederationRequests(options = {}) {
233
+ return discovery.getPendingFederationRequests(this.client, options);
234
+ }
235
+ };
236
+ }
237
+
238
+ export default withFederationMethods;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * HoloSphere Library Modules
3
+ * Mixins for extending the base HoloSphere class
4
+ */
5
+
6
+ export { withAIMethods } from './ai-methods.js';
7
+ export { withContractMethods } from './contract-methods.js';
8
+ export { withFederationMethods } from './federation-methods.js';
9
+ export { AuthorizationError, ValidationError } from './errors.js';
10
+
11
+ /**
12
+ * Compose multiple mixins into a single class
13
+ * @param {Class} BaseClass - Base class to extend
14
+ * @param {...Function} mixins - Mixin functions to apply
15
+ * @returns {Class} Composed class
16
+ */
17
+ export function compose(BaseClass, ...mixins) {
18
+ return mixins.reduce((acc, mixin) => mixin(acc), BaseClass);
19
+ }
20
+
21
+ export default {
22
+ withAIMethods,
23
+ withContractMethods,
24
+ withFederationMethods,
25
+ compose
26
+ };
@@ -92,8 +92,8 @@ export function getChildren(holonId) {
92
92
  */
93
93
  export function isValidH3(holonId) {
94
94
  if (typeof holonId !== 'string') return false;
95
- if (holonId.length < 15) return false;
96
- if (!holonId.startsWith('8')) return false;
95
+ // H3 indexes are 15-character hex strings, but can vary slightly
96
+ // Use h3-js isValidCell for proper validation
97
97
  return isValidCell(holonId);
98
98
  }
99
99