@objectid/oid-provider 1.0.6

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 (189) hide show
  1. package/README.md +67 -0
  2. package/dist/api.d.ts +30 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +41 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/env.d.ts +28 -0
  7. package/dist/env.d.ts.map +1 -0
  8. package/dist/env.js +114 -0
  9. package/dist/env.js.map +1 -0
  10. package/dist/index.d.ts +11 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +12 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/methods/component.d.ts +18 -0
  15. package/dist/methods/component.d.ts.map +1 -0
  16. package/dist/methods/component.js +58 -0
  17. package/dist/methods/component.js.map +1 -0
  18. package/dist/methods/counter.d.ts +43 -0
  19. package/dist/methods/counter.d.ts.map +1 -0
  20. package/dist/methods/counter.js +144 -0
  21. package/dist/methods/counter.js.map +1 -0
  22. package/dist/methods/document.d.ts +90 -0
  23. package/dist/methods/document.d.ts.map +1 -0
  24. package/dist/methods/document.js +332 -0
  25. package/dist/methods/document.js.map +1 -0
  26. package/dist/methods/event.d.ts +26 -0
  27. package/dist/methods/event.d.ts.map +1 -0
  28. package/dist/methods/event.js +107 -0
  29. package/dist/methods/event.js.map +1 -0
  30. package/dist/methods/index.d.ts +7 -0
  31. package/dist/methods/index.d.ts.map +1 -0
  32. package/dist/methods/index.js +7 -0
  33. package/dist/methods/index.js.map +1 -0
  34. package/dist/methods/object.d.ts +74 -0
  35. package/dist/methods/object.d.ts.map +1 -0
  36. package/dist/methods/object.js +293 -0
  37. package/dist/methods/object.js.map +1 -0
  38. package/dist/methods/objectMessages.d.ts +30 -0
  39. package/dist/methods/objectMessages.d.ts.map +1 -0
  40. package/dist/methods/objectMessages.js +144 -0
  41. package/dist/methods/objectMessages.js.map +1 -0
  42. package/dist/methods.d.ts +2 -0
  43. package/dist/methods.d.ts.map +1 -0
  44. package/dist/methods.js +2 -0
  45. package/dist/methods.js.map +1 -0
  46. package/dist/oid/caps.d.ts +8 -0
  47. package/dist/oid/caps.d.ts.map +1 -0
  48. package/dist/oid/caps.js +61 -0
  49. package/dist/oid/caps.js.map +1 -0
  50. package/dist/oid/credit.d.ts +7 -0
  51. package/dist/oid/credit.d.ts.map +1 -0
  52. package/dist/oid/credit.js +48 -0
  53. package/dist/oid/credit.js.map +1 -0
  54. package/dist/oid/graphql.d.ts +4 -0
  55. package/dist/oid/graphql.d.ts.map +1 -0
  56. package/dist/oid/graphql.js +69 -0
  57. package/dist/oid/graphql.js.map +1 -0
  58. package/dist/oid/index.d.ts +92 -0
  59. package/dist/oid/index.d.ts.map +1 -0
  60. package/dist/oid/index.js +378 -0
  61. package/dist/oid/index.js.map +1 -0
  62. package/dist/oid/ownedObjects.d.ts +9 -0
  63. package/dist/oid/ownedObjects.d.ts.map +1 -0
  64. package/dist/oid/ownedObjects.js +38 -0
  65. package/dist/oid/ownedObjects.js.map +1 -0
  66. package/dist/onchain/config.d.ts +37 -0
  67. package/dist/onchain/config.d.ts.map +1 -0
  68. package/dist/onchain/config.js +109 -0
  69. package/dist/onchain/config.js.map +1 -0
  70. package/dist/onchain/defaults.d.ts +13 -0
  71. package/dist/onchain/defaults.d.ts.map +1 -0
  72. package/dist/onchain/defaults.js +17 -0
  73. package/dist/onchain/defaults.js.map +1 -0
  74. package/dist/onchain/getObjects.d.ts +17 -0
  75. package/dist/onchain/getObjects.d.ts.map +1 -0
  76. package/dist/onchain/getObjects.js +112 -0
  77. package/dist/onchain/getObjects.js.map +1 -0
  78. package/dist/onchain/identity.d.ts +2 -0
  79. package/dist/onchain/identity.d.ts.map +1 -0
  80. package/dist/onchain/identity.js +9 -0
  81. package/dist/onchain/identity.js.map +1 -0
  82. package/dist/react/ObjectIdProvider.d.ts +53 -0
  83. package/dist/react/ObjectIdProvider.d.ts.map +1 -0
  84. package/dist/react/ObjectIdProvider.js +431 -0
  85. package/dist/react/ObjectIdProvider.js.map +1 -0
  86. package/dist/react/index.d.ts +4 -0
  87. package/dist/react/index.d.ts.map +1 -0
  88. package/dist/react/index.js +3 -0
  89. package/dist/react/index.js.map +1 -0
  90. package/dist/types/documentData.d.ts +25 -0
  91. package/dist/types/documentData.d.ts.map +1 -0
  92. package/dist/types/documentData.js +2 -0
  93. package/dist/types/documentData.js.map +1 -0
  94. package/dist/types/objectData.d.ts +24 -0
  95. package/dist/types/objectData.d.ts.map +1 -0
  96. package/dist/types/objectData.js +2 -0
  97. package/dist/types/objectData.js.map +1 -0
  98. package/dist/types/types.d.ts +65 -0
  99. package/dist/types/types.d.ts.map +1 -0
  100. package/dist/types/types.js +2 -0
  101. package/dist/types/types.js.map +1 -0
  102. package/dist/utils/geolocation.d.ts +1 -0
  103. package/dist/utils/geolocation.d.ts.map +1 -0
  104. package/dist/utils/geolocation.js +2 -0
  105. package/dist/utils/geolocation.js.map +1 -0
  106. package/dist/utils/getObject.d.ts +3 -0
  107. package/dist/utils/getObject.d.ts.map +1 -0
  108. package/dist/utils/getObject.js +18 -0
  109. package/dist/utils/getObject.js.map +1 -0
  110. package/dist/utils/getObjectData.d.ts +4 -0
  111. package/dist/utils/getObjectData.d.ts.map +1 -0
  112. package/dist/utils/getObjectData.js +26 -0
  113. package/dist/utils/getObjectData.js.map +1 -0
  114. package/dist/utils/graphql.d.ts +3 -0
  115. package/dist/utils/graphql.d.ts.map +1 -0
  116. package/dist/utils/graphql.js +35 -0
  117. package/dist/utils/graphql.js.map +1 -0
  118. package/dist/utils/tx.d.ts +21 -0
  119. package/dist/utils/tx.d.ts.map +1 -0
  120. package/dist/utils/tx.js +125 -0
  121. package/dist/utils/tx.js.map +1 -0
  122. package/dist/utils/url.d.ts +10 -0
  123. package/dist/utils/url.d.ts.map +1 -0
  124. package/dist/utils/url.js +24 -0
  125. package/dist/utils/url.js.map +1 -0
  126. package/dist-cjs/api.js +44 -0
  127. package/dist-cjs/api.js.map +1 -0
  128. package/dist-cjs/env.js +118 -0
  129. package/dist-cjs/env.js.map +1 -0
  130. package/dist-cjs/index.js +44 -0
  131. package/dist-cjs/index.js.map +1 -0
  132. package/dist-cjs/methods/component.js +62 -0
  133. package/dist-cjs/methods/component.js.map +1 -0
  134. package/dist-cjs/methods/counter.js +151 -0
  135. package/dist-cjs/methods/counter.js.map +1 -0
  136. package/dist-cjs/methods/document.js +348 -0
  137. package/dist-cjs/methods/document.js.map +1 -0
  138. package/dist-cjs/methods/event.js +112 -0
  139. package/dist-cjs/methods/event.js.map +1 -0
  140. package/dist-cjs/methods/index.js +23 -0
  141. package/dist-cjs/methods/index.js.map +1 -0
  142. package/dist-cjs/methods/object.js +305 -0
  143. package/dist-cjs/methods/object.js.map +1 -0
  144. package/dist-cjs/methods/objectMessages.js +151 -0
  145. package/dist-cjs/methods/objectMessages.js.map +1 -0
  146. package/dist-cjs/methods.js +18 -0
  147. package/dist-cjs/methods.js.map +1 -0
  148. package/dist-cjs/oid/caps.js +65 -0
  149. package/dist-cjs/oid/caps.js.map +1 -0
  150. package/dist-cjs/oid/credit.js +51 -0
  151. package/dist-cjs/oid/credit.js.map +1 -0
  152. package/dist-cjs/oid/graphql.js +73 -0
  153. package/dist-cjs/oid/graphql.js.map +1 -0
  154. package/dist-cjs/oid/index.js +381 -0
  155. package/dist-cjs/oid/index.js.map +1 -0
  156. package/dist-cjs/oid/ownedObjects.js +41 -0
  157. package/dist-cjs/oid/ownedObjects.js.map +1 -0
  158. package/dist-cjs/onchain/config.js +118 -0
  159. package/dist-cjs/onchain/config.js.map +1 -0
  160. package/dist-cjs/onchain/defaults.js +20 -0
  161. package/dist-cjs/onchain/defaults.js.map +1 -0
  162. package/dist-cjs/onchain/getObjects.js +117 -0
  163. package/dist-cjs/onchain/getObjects.js.map +1 -0
  164. package/dist-cjs/onchain/identity.js +10 -0
  165. package/dist-cjs/onchain/identity.js.map +1 -0
  166. package/dist-cjs/package.json +3 -0
  167. package/dist-cjs/react/ObjectIdProvider.js +437 -0
  168. package/dist-cjs/react/ObjectIdProvider.js.map +1 -0
  169. package/dist-cjs/react/index.js +10 -0
  170. package/dist-cjs/react/index.js.map +1 -0
  171. package/dist-cjs/types/documentData.js +3 -0
  172. package/dist-cjs/types/documentData.js.map +1 -0
  173. package/dist-cjs/types/objectData.js +3 -0
  174. package/dist-cjs/types/objectData.js.map +1 -0
  175. package/dist-cjs/types/types.js +3 -0
  176. package/dist-cjs/types/types.js.map +1 -0
  177. package/dist-cjs/utils/geolocation.js +2 -0
  178. package/dist-cjs/utils/geolocation.js.map +1 -0
  179. package/dist-cjs/utils/getObject.js +21 -0
  180. package/dist-cjs/utils/getObject.js.map +1 -0
  181. package/dist-cjs/utils/getObjectData.js +29 -0
  182. package/dist-cjs/utils/getObjectData.js.map +1 -0
  183. package/dist-cjs/utils/graphql.js +38 -0
  184. package/dist-cjs/utils/graphql.js.map +1 -0
  185. package/dist-cjs/utils/tx.js +128 -0
  186. package/dist-cjs/utils/tx.js.map +1 -0
  187. package/dist-cjs/utils/url.js +27 -0
  188. package/dist-cjs/utils/url.js.map +1 -0
  189. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/onchain/defaults.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,OAAO,EAAE,oEAAoE;IAC7E,OAAO,EAAE,oEAAoE;CAC9E,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAA2B;IACrE,OAAO,EAAE,oEAAoE;IAC7E,OAAO,EAAE,oEAAoE;CAC9E,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IotaObjectData, IotaClient } from "@iota/iota-sdk/client";
2
+ import type { ObjectEdge } from "../types/types";
3
+ /**
4
+ * Returns all owned object IDs matching a specific Move type.
5
+ * Paginates through the full owned-objects list for the owner (RPC).
6
+ */
7
+ export declare function getObjectIdsByType(client: IotaClient, owner: string, targetType: string): Promise<string[]>;
8
+ /**
9
+ * Fetches a single object by id (RPC).
10
+ */
11
+ export declare function getObject(client: IotaClient, id: string): Promise<IotaObjectData | null>;
12
+ /**
13
+ * Searches Move objects by type AND owner using GraphQL endpoint.
14
+ * Paginates until completion.
15
+ */
16
+ export declare function searchObjectsByTypeAndOwner(graphqlProvider: string, objectType: string, owner: string): Promise<ObjectEdge[]>;
17
+ //# sourceMappingURL=getObjects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getObjects.d.ts","sourceRoot":"","sources":["../../src/onchain/getObjects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,cAAc,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGlG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqCjH;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAiB9F;AASD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,EAAE,CAAC,CAkDvB"}
@@ -0,0 +1,112 @@
1
+ import { IotaGraphQLClient } from "@iota/iota-sdk/graphql";
2
+ import { graphql } from "@iota/iota-sdk/graphql/schemas/2025.2";
3
+ /**
4
+ * Returns all owned object IDs matching a specific Move type.
5
+ * Paginates through the full owned-objects list for the owner (RPC).
6
+ */
7
+ export async function getObjectIdsByType(client, owner, targetType) {
8
+ const found = [];
9
+ let cursor = null;
10
+ for (;;) {
11
+ const page = await client.getOwnedObjects({
12
+ owner,
13
+ cursor,
14
+ options: {
15
+ showType: true,
16
+ showContent: true, // fallback if .type is missing
17
+ },
18
+ });
19
+ const items = page?.data ?? [];
20
+ for (const item of items) {
21
+ const objId = item.data?.objectId;
22
+ if (!objId)
23
+ continue;
24
+ // Fast path
25
+ if (item.data?.type === targetType) {
26
+ found.push(objId);
27
+ continue;
28
+ }
29
+ // Fallback
30
+ const content = item.data?.content;
31
+ if (content?.type === targetType) {
32
+ found.push(objId);
33
+ }
34
+ }
35
+ if (!page?.hasNextPage || !page.nextCursor)
36
+ break;
37
+ cursor = page.nextCursor;
38
+ }
39
+ return found;
40
+ }
41
+ /**
42
+ * Fetches a single object by id (RPC).
43
+ */
44
+ export async function getObject(client, id) {
45
+ if (!id)
46
+ return null;
47
+ const { data } = await client.getObject({
48
+ id,
49
+ options: {
50
+ showType: true,
51
+ showOwner: false,
52
+ showPreviousTransaction: false,
53
+ showDisplay: true,
54
+ showContent: true,
55
+ showBcs: true,
56
+ showStorageRebate: false,
57
+ },
58
+ });
59
+ return data ?? null;
60
+ }
61
+ /**
62
+ * Searches Move objects by type AND owner using GraphQL endpoint.
63
+ * Paginates until completion.
64
+ */
65
+ export async function searchObjectsByTypeAndOwner(graphqlProvider, objectType, owner) {
66
+ const gqlClient = new IotaGraphQLClient({ url: graphqlProvider });
67
+ const query = graphql(`
68
+ query ObjectsByTypeAndOwner($type: String!, $after: String, $owner: IotaAddress) {
69
+ objects(filter: { type: $type, owner: $owner }, first: 50, after: $after) {
70
+ edges {
71
+ node {
72
+ address
73
+ asMoveObject {
74
+ contents {
75
+ type {
76
+ repr
77
+ }
78
+ data
79
+ }
80
+ }
81
+ }
82
+ }
83
+ pageInfo {
84
+ hasNextPage
85
+ endCursor
86
+ }
87
+ }
88
+ }
89
+ `);
90
+ const edges = [];
91
+ let after = null;
92
+ try {
93
+ for (;;) {
94
+ const res = await gqlClient.query({
95
+ query,
96
+ variables: { type: objectType, after, owner },
97
+ });
98
+ const page = res?.data?.objects;
99
+ if (!page?.edges?.length)
100
+ break;
101
+ edges.push(...page.edges);
102
+ if (!page.pageInfo.hasNextPage || !page.pageInfo.endCursor)
103
+ break;
104
+ after = page.pageInfo.endCursor;
105
+ }
106
+ }
107
+ catch {
108
+ return [];
109
+ }
110
+ return edges;
111
+ }
112
+ //# sourceMappingURL=getObjects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getObjects.js","sourceRoot":"","sources":["../../src/onchain/getObjects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/onchain/identity.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ let _modP = null;
2
+ async function getIdentityMod() {
3
+ if (_modP)
4
+ return _modP;
5
+ _modP = import("@iota/identity-wasm/web");
6
+ return _modP;
7
+ }
8
+ export {};
9
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/onchain/identity.ts"],"names":[],"mappings":"AAIA,IAAI,KAAK,GAAwB,IAAI,CAAC;AAEtC,KAAK,UAAU,cAAc;IAC3B,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,KAAK,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { ObjectIdApi } from "../api";
2
+ import type { ConfigPackageIds, LoadedConfig } from "../onchain/config";
3
+ type Session = {
4
+ network: string;
5
+ seed: string;
6
+ gasBudget?: number;
7
+ };
8
+ type ActiveConfig = LoadedConfig & {
9
+ source: "default" | "object";
10
+ };
11
+ type Ctx = {
12
+ api: ObjectIdApi | null;
13
+ /** Session is set only after connect(). */
14
+ session: Session | null;
15
+ /** The public/shared config for the currently selected network. */
16
+ publicConfig: LoadedConfig | null;
17
+ /** The active config used by the API (public by default, or overridden by applyCfg/applyCfgObject). */
18
+ activeConfig: ActiveConfig | null;
19
+ status: "idle" | "loading" | "ready" | "error";
20
+ error: string | null;
21
+ /** Selected network even before connect(). Defaults to testnet. */
22
+ selectedNetwork: string;
23
+ /** Loads the public config for `network` and makes it active (drops any previous override). */
24
+ selectNetwork: (network: string) => Promise<void>;
25
+ /** Sets seed and network, loads the public config for that network, and initializes the API with it. */
26
+ connect: (session: Session) => Promise<void>;
27
+ /** Clears session, API, and overrides; reloads public config for testnet and makes it active. */
28
+ disconnect: () => Promise<void>;
29
+ /** Reloads public config for current selectedNetwork; if active is public, updates it too. */
30
+ refreshPublicConfig: () => Promise<void>;
31
+ /** Forces active config back to public config (does not delete any on-chain objects). */
32
+ usePublicConfig: () => Promise<void>;
33
+ /**
34
+ * Applies a JSON config by:
35
+ * - creating a PRIVATE (owned) oid_config::Config on-chain
36
+ * - returning the created objectId
37
+ * - setting it as active config (and rebuilding API)
38
+ */
39
+ applyCfg: (json: Record<string, any>) => Promise<string>;
40
+ /** Loads a config objectId and sets it as active config (and rebuilds API). */
41
+ applyCfgObject: (objectId: string) => Promise<string>;
42
+ };
43
+ export type ObjectIDProps = {
44
+ /** Optional. If omitted, the SDK uses DEFAULT_CONFIG_PACKAGE_IDS. */
45
+ configPackageIds?: ConfigPackageIds;
46
+ children: React.ReactNode;
47
+ };
48
+ export declare function ObjectID({ configPackageIds, children }: ObjectIDProps): import("react/jsx-runtime").JSX.Element;
49
+ export declare function useOptionalObjectId(): ObjectIdApi | null;
50
+ export declare function useObjectId(): ObjectIdApi;
51
+ export declare function useObjectIDSession(): Ctx;
52
+ export {};
53
+ //# sourceMappingURL=ObjectIdProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ObjectIdProvider.d.ts","sourceRoot":"","sources":["../../src/react/ObjectIdProvider.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAK1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMxE,KAAK,OAAO,GAAG;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG,YAAY,GAAG;IAEjC,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC9B,CAAC;AAEF,KAAK,GAAG,GAAG;IACT,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IAExB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAExB,mEAAmE;IACnE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAElC,uGAAuG;IACvG,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAElC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IAC/C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,mEAAmE;IACnE,eAAe,EAAE,MAAM,CAAC;IAExB,+FAA+F;IAC/F,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,wGAAwG;IACxG,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,iGAAiG;IACjG,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC,8FAA8F;IAC9F,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC,yFAAyF;IACzF,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;;;;OAKG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzD,+EAA+E;IAC/E,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACvD,CAAC;AAIF,MAAM,MAAM,aAAa,GAAG;IAC1B,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AA0GF,wBAAgB,QAAQ,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,aAAa,2CAoXrE;AAED,wBAAgB,mBAAmB,IAAI,WAAW,GAAG,IAAI,CAIxD;AAED,wBAAgB,WAAW,IAAI,WAAW,CAKzC;AAED,wBAAgB,kBAAkB,QAIjC"}
@@ -0,0 +1,431 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useMemo, useState, useRef } from "react";
3
+ import { getFullnodeUrl, IotaClient } from "@iota/iota-sdk/client";
4
+ import { Ed25519Keypair } from "@iota/iota-sdk/keypairs/ed25519";
5
+ import { Transaction } from "@iota/iota-sdk/transactions";
6
+ import { createObjectIdApi } from "../api";
7
+ import { signAndExecute } from "../utils/tx";
8
+ import { loadPublicConfig, loadConfigJsonByObjectId } from "../onchain/config";
9
+ import { DEFAULT_CONFIG_PACKAGE_IDS } from "../onchain/defaults";
10
+ const C = createContext(undefined);
11
+ function isNonEmptyString(x) {
12
+ return typeof x === "string" && x.trim().length > 0;
13
+ }
14
+ function withTimeout(p, ms = 15_000, label = "operation") {
15
+ return Promise.race([
16
+ p,
17
+ new Promise((_, rej) => setTimeout(() => rej(new Error(`${label} timeout (${ms}ms)`)), ms)),
18
+ ]);
19
+ }
20
+ function cacheKey(network) {
21
+ return `objectid_public_cfg_${network}`;
22
+ }
23
+ function readCachedPublic(network) {
24
+ try {
25
+ const raw = localStorage.getItem(cacheKey(network));
26
+ if (!raw)
27
+ return null;
28
+ const obj = JSON.parse(raw);
29
+ if (!obj || typeof obj !== "object")
30
+ return null;
31
+ if (typeof obj.objectId !== "string" || !obj.objectId)
32
+ return null;
33
+ if (!obj.json || typeof obj.json !== "object")
34
+ return null;
35
+ return { objectId: obj.objectId, json: obj.json };
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ function writeCachedPublic(network, cfg) {
42
+ try {
43
+ localStorage.setItem(cacheKey(network), JSON.stringify({ objectId: cfg.objectId, json: cfg.json }));
44
+ }
45
+ catch {
46
+ // ignore quota / privacy mode
47
+ }
48
+ }
49
+ function mapJsonToProviderConfig(base, j) {
50
+ const objectPackages = j.objectPackages ?? j.object_packages;
51
+ const documentPackages = j.documentPackages ?? j.document_packages;
52
+ if (!Array.isArray(objectPackages) || objectPackages.length === 0) {
53
+ const keys = Object.keys(j ?? {}).join(", ");
54
+ throw new Error(`Missing required field in on-chain config JSON: objectPackages (keys: ${keys})`);
55
+ }
56
+ if (!Array.isArray(documentPackages) || documentPackages.length === 0) {
57
+ const keys = Object.keys(j ?? {}).join(", ");
58
+ throw new Error(`Missing required field in on-chain config JSON: documentPackages (keys: ${keys})`);
59
+ }
60
+ const objectDefaultPackageVersion = j.objectDefaultPackageVersion ?? j.objectDefaultPackageVersione ?? j.object_default_package_version ?? 0;
61
+ const documentDefaultPackageVersion = j.documentDefaultPackageVersion ?? j.documentDefaultPackageVersione ?? j.document_default_package_version ?? 0;
62
+ const graphqlProvider = j.graphqlProvider ?? j.graphql_provider;
63
+ if (!isNonEmptyString(graphqlProvider)) {
64
+ const keys = Object.keys(j ?? {}).join(", ");
65
+ throw new Error(`Missing required field in on-chain config JSON: graphqlProvider (keys: ${keys})`);
66
+ }
67
+ const useGasStation = !!(j.useGasStation ?? j.use_gas_station);
68
+ const gasStation = j.gasStation ?? j.gas_station;
69
+ return {
70
+ network: base.network,
71
+ seed: base.seed,
72
+ gasBudget: base.gasBudget,
73
+ graphqlProvider: String(graphqlProvider),
74
+ objectPackages,
75
+ documentPackages,
76
+ objectDefaultPackageVersion: Number(objectDefaultPackageVersion) || 0,
77
+ documentDefaultPackageVersion: Number(documentDefaultPackageVersion) || 0,
78
+ useGasStation,
79
+ gasStation: gasStation && typeof gasStation === "object" ? gasStation : undefined,
80
+ };
81
+ }
82
+ function hexToU8a(hex) {
83
+ const s = String(hex || "")
84
+ .trim()
85
+ .replace(/^0x/i, "");
86
+ if (!s)
87
+ throw new Error("Missing seed");
88
+ if (s.length % 2 !== 0)
89
+ throw new Error("Seed hex length must be even");
90
+ const bytes = new Uint8Array(s.length / 2);
91
+ for (let i = 0; i < bytes.length; i++) {
92
+ const byte = s.slice(i * 2, i * 2 + 2);
93
+ const v = Number.parseInt(byte, 16);
94
+ if (Number.isNaN(v))
95
+ throw new Error("Invalid seed hex");
96
+ bytes[i] = v;
97
+ }
98
+ return bytes;
99
+ }
100
+ export function ObjectID({ configPackageIds, children }) {
101
+ const effectiveConfigPackageIds = configPackageIds ?? DEFAULT_CONFIG_PACKAGE_IDS;
102
+ const [selectedNetwork, setSelectedNetwork] = useState("testnet");
103
+ const [session, setSession] = useState(null);
104
+ const [publicConfig, setPublicConfig] = useState(null);
105
+ const [activeConfig, setActiveConfig] = useState(null);
106
+ const [api, setApi] = useState(null);
107
+ const [status, setStatus] = useState("idle");
108
+ const [error, setError] = useState(null);
109
+ const clientsRef = useRef({});
110
+ const getClientForNetwork = useCallback((net) => {
111
+ const key = String(net);
112
+ if (!clientsRef.current[key]) {
113
+ clientsRef.current[key] = new IotaClient({ url: getFullnodeUrl(net) });
114
+ }
115
+ return clientsRef.current[key];
116
+ }, []);
117
+ // Load public config at startup (selectedNetwork defaults to testnet).
118
+ // Uses localStorage cache to avoid blocking reloads; refreshes in background.
119
+ useEffect(() => {
120
+ let cancelled = false;
121
+ const net = selectedNetwork;
122
+ // 1) Fast path: cached public config
123
+ const cached = readCachedPublic(net);
124
+ if (cached) {
125
+ setPublicConfig({ source: "default", objectId: cached.objectId, json: cached.json });
126
+ setActiveConfig({ source: "default", objectId: cached.objectId, json: cached.json });
127
+ setStatus("ready");
128
+ setError(null);
129
+ }
130
+ else {
131
+ setStatus("loading");
132
+ setError(null);
133
+ }
134
+ // 2) Refresh from chain (always), but never leave infinite loading
135
+ (async () => {
136
+ try {
137
+ const cfg = await withTimeout(loadPublicConfig(net), 15_000, `loadPublicConfig(${net})`);
138
+ if (cancelled)
139
+ return;
140
+ setPublicConfig(cfg);
141
+ setActiveConfig((prev) => {
142
+ // if active is public OR nothing yet, update active too; if active is object, keep it
143
+ if (!prev || prev.source === "default")
144
+ return { ...cfg, source: "default" };
145
+ return prev;
146
+ });
147
+ writeCachedPublic(net, { objectId: cfg.objectId, json: cfg.json });
148
+ // If we were loading with no cache, mark ready now.
149
+ setStatus("ready");
150
+ setError(null);
151
+ }
152
+ catch (e) {
153
+ if (cancelled)
154
+ return;
155
+ // If we already had cache, keep ready and show no blocking error.
156
+ // If we had no cache and were loading, move to error (not infinite loading).
157
+ setStatus(cached ? "ready" : "error");
158
+ setError(e?.message ?? String(e));
159
+ }
160
+ })();
161
+ return () => {
162
+ cancelled = true;
163
+ };
164
+ // eslint-disable-next-line react-hooks/exhaustive-deps
165
+ }, [selectedNetwork]);
166
+ const buildApi = useCallback((sess, cfgJson) => {
167
+ const gasBudget = Number(sess.gasBudget ?? 10_000_000);
168
+ const providerCfg = mapJsonToProviderConfig({ network: sess.network, seed: sess.seed, gasBudget }, cfgJson);
169
+ return createObjectIdApi(providerCfg);
170
+ }, []);
171
+ const selectNetwork = useCallback(async (network) => {
172
+ setStatus("loading");
173
+ setError(null);
174
+ try {
175
+ const cfg = await loadPublicConfig(network);
176
+ setSelectedNetwork(network);
177
+ setPublicConfig(cfg);
178
+ setActiveConfig({ ...cfg, source: "default" });
179
+ // If already connected, rebuild API using PUBLIC config for the chosen network
180
+ if (session) {
181
+ const nextSession = { ...session, network };
182
+ setSession(nextSession);
183
+ const nextApi = buildApi(nextSession, cfg.json);
184
+ setApi(nextApi);
185
+ }
186
+ setStatus("ready");
187
+ }
188
+ catch (e) {
189
+ setStatus("error");
190
+ setError(e?.message ?? String(e));
191
+ throw e;
192
+ }
193
+ }, [buildApi, session]);
194
+ const connect = useCallback(async (sess) => {
195
+ setStatus("loading");
196
+ setError(null);
197
+ try {
198
+ // Always start from PUBLIC config for chosen network (no auto private cfg)
199
+ const cfg = await loadPublicConfig(sess.network);
200
+ setSelectedNetwork(sess.network);
201
+ setSession(sess);
202
+ setPublicConfig(cfg);
203
+ setActiveConfig({ ...cfg, source: "default" });
204
+ const finalApi = buildApi(sess, cfg.json);
205
+ setApi(finalApi);
206
+ setStatus("ready");
207
+ }
208
+ catch (e) {
209
+ setApi(null);
210
+ setSession(null);
211
+ setPublicConfig(null);
212
+ setActiveConfig(null);
213
+ setStatus("error");
214
+ setError(e?.message ?? String(e));
215
+ throw e;
216
+ }
217
+ }, [buildApi]);
218
+ const disconnect = useCallback(async () => {
219
+ setStatus("loading");
220
+ setError(null);
221
+ try {
222
+ setApi(null);
223
+ setSession(null);
224
+ // Reset to testnet public config
225
+ const cfg = await loadPublicConfig("testnet");
226
+ setSelectedNetwork("testnet");
227
+ setPublicConfig(cfg);
228
+ setActiveConfig({ ...cfg, source: "default" });
229
+ setStatus("ready");
230
+ }
231
+ catch (e) {
232
+ setStatus("error");
233
+ setError(e?.message ?? String(e));
234
+ throw e;
235
+ }
236
+ }, []);
237
+ const refreshPublicConfig = useCallback(async () => {
238
+ setStatus("loading");
239
+ setError(null);
240
+ try {
241
+ const cfg = await loadPublicConfig(selectedNetwork);
242
+ setPublicConfig(cfg);
243
+ // If active is public, refresh active too.
244
+ setActiveConfig((prev) => {
245
+ if (!prev || prev.source === "default")
246
+ return { ...cfg, source: "default" };
247
+ return prev;
248
+ });
249
+ // If connected and active is public, rebuild api.
250
+ if (session) {
251
+ setApi((prevApi) => {
252
+ if (!prevApi)
253
+ return buildApi(session, cfg.json);
254
+ // if active is public, we rebuild; if active is object, keep current api.
255
+ if (!activeConfig || activeConfig.source === "default")
256
+ return buildApi(session, cfg.json);
257
+ return prevApi;
258
+ });
259
+ }
260
+ setStatus("ready");
261
+ }
262
+ catch (e) {
263
+ setStatus("error");
264
+ setError(e?.message ?? String(e));
265
+ throw e;
266
+ }
267
+ }, [activeConfig, buildApi, selectedNetwork, session]);
268
+ const usePublicConfig = useCallback(async () => {
269
+ setStatus("loading");
270
+ setError(null);
271
+ try {
272
+ const cfg = publicConfig ?? (await loadPublicConfig(selectedNetwork));
273
+ setPublicConfig(cfg);
274
+ setActiveConfig({ ...cfg, source: "default" });
275
+ if (session) {
276
+ const nextApi = buildApi(session, cfg.json);
277
+ setApi(nextApi);
278
+ }
279
+ else {
280
+ setApi(null);
281
+ }
282
+ setStatus("ready");
283
+ }
284
+ catch (e) {
285
+ setStatus("error");
286
+ setError(e?.message ?? String(e));
287
+ throw e;
288
+ }
289
+ }, [buildApi, publicConfig, selectedNetwork, session]);
290
+ const applyCfg = useCallback(async (json) => {
291
+ if (!session)
292
+ throw new Error("Not connected");
293
+ const cfgPkg = session.network === "mainnet" ? effectiveConfigPackageIds.mainnet : effectiveConfigPackageIds.testnet;
294
+ if (!cfgPkg)
295
+ throw new Error(`Missing config packageId for network=${session.network}`);
296
+ setStatus("loading");
297
+ setError(null);
298
+ try {
299
+ const s = JSON.stringify(json);
300
+ const bytes = Array.from(new TextEncoder().encode(s));
301
+ const keyPair = Ed25519Keypair.deriveKeypairFromSeed(session.seed);
302
+ const client = new IotaClient({ url: getFullnodeUrl(session.network) });
303
+ const sender = keyPair.toIotaAddress();
304
+ const tx = new Transaction();
305
+ tx.moveCall({
306
+ target: `${cfgPkg}::oid_config::create_user_config`,
307
+ arguments: [tx.pure.vector("u8", bytes)],
308
+ });
309
+ const gasBudget = Number(session.gasBudget ?? 10_000_000);
310
+ tx.setGasBudget(gasBudget);
311
+ tx.setSender(sender);
312
+ const useGasStation = !!(json.useGasStation ?? json.use_gas_station);
313
+ const gasStation = (json.gasStation ?? json.gas_station);
314
+ const r = await signAndExecute(client, keyPair, tx, {
315
+ network: String(session.network),
316
+ gasBudget,
317
+ useGasStation,
318
+ gasStation,
319
+ });
320
+ if (!r.success) {
321
+ throw new Error(`create_user_config failed: ${String(r.error ?? "")}`);
322
+ }
323
+ const createdId = r.txEffect?.effects?.created?.[0]?.reference?.objectId ||
324
+ r.txEffect?.effects?.created?.[0]?.objectId ||
325
+ r?.createdObjectId;
326
+ if (!createdId) {
327
+ throw new Error("create_user_config succeeded but cannot extract created objectId from tx effects");
328
+ }
329
+ // Activate this config and rebuild api
330
+ setActiveConfig({ source: "object", objectId: String(createdId), json });
331
+ const nextApi = buildApi(session, json);
332
+ setApi(nextApi);
333
+ setStatus("ready");
334
+ return String(createdId);
335
+ }
336
+ catch (e) {
337
+ setStatus("error");
338
+ setError(e?.message ?? String(e));
339
+ throw e;
340
+ }
341
+ }, [buildApi, effectiveConfigPackageIds, session]);
342
+ const applyCfgObject = useCallback(async (objectId) => {
343
+ setStatus("loading");
344
+ setError(null);
345
+ try {
346
+ const net = session?.network ?? selectedNetwork;
347
+ const json = await loadConfigJsonByObjectId(net, objectId);
348
+ setActiveConfig({ source: "object", objectId: String(objectId), json });
349
+ if (session) {
350
+ const nextApi = buildApi(session, json);
351
+ setApi(nextApi);
352
+ }
353
+ setStatus("ready");
354
+ return String(objectId);
355
+ }
356
+ catch (e) {
357
+ setStatus("error");
358
+ setError(e?.message ?? String(e));
359
+ throw e;
360
+ }
361
+ }, [buildApi, selectedNetwork, session]);
362
+ const getCfgJsonForNet = useCallback(async (net) => {
363
+ // Se connesso e la rete combacia, usa active/public già in memoria
364
+ if (session?.network === net) {
365
+ const j = activeConfig?.json ?? publicConfig?.json;
366
+ if (j)
367
+ return j;
368
+ }
369
+ // Se non connesso (o rete diversa), usa cache localStorage per quella rete
370
+ const cached = readCachedPublic(net);
371
+ if (cached?.json)
372
+ return cached.json;
373
+ // Fallback: carica on-chain e aggiorna cache
374
+ const cfg = await loadPublicConfig(net);
375
+ writeCachedPublic(net, { objectId: cfg.objectId, json: cfg.json });
376
+ return cfg.json;
377
+ }, [activeConfig, publicConfig, session]);
378
+ const value = useMemo(() => ({
379
+ api,
380
+ session,
381
+ publicConfig,
382
+ activeConfig,
383
+ status,
384
+ error,
385
+ selectedNetwork,
386
+ selectNetwork,
387
+ connect,
388
+ disconnect,
389
+ refreshPublicConfig,
390
+ usePublicConfig,
391
+ applyCfg,
392
+ applyCfgObject,
393
+ }), [
394
+ api,
395
+ session,
396
+ publicConfig,
397
+ activeConfig,
398
+ status,
399
+ error,
400
+ selectedNetwork,
401
+ selectNetwork,
402
+ connect,
403
+ disconnect,
404
+ refreshPublicConfig,
405
+ usePublicConfig,
406
+ applyCfg,
407
+ applyCfgObject,
408
+ ]);
409
+ return _jsx(C.Provider, { value: value, children: children });
410
+ }
411
+ export function useOptionalObjectId() {
412
+ const ctx = useContext(C);
413
+ if (!ctx)
414
+ throw new Error("useOptionalObjectId must be used within ObjectID");
415
+ return ctx.api;
416
+ }
417
+ export function useObjectId() {
418
+ const ctx = useContext(C);
419
+ if (!ctx)
420
+ throw new Error("useObjectId must be used within ObjectID");
421
+ if (!ctx.api)
422
+ throw new Error("ObjectID API not initialized. Call connect({network, seed}) first.");
423
+ return ctx.api;
424
+ }
425
+ export function useObjectIDSession() {
426
+ const ctx = useContext(C);
427
+ if (!ctx)
428
+ throw new Error("useObjectIDSession must be used within ObjectID");
429
+ return ctx;
430
+ }
431
+ //# sourceMappingURL=ObjectIdProvider.js.map