@haneullabs/haneulns 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +505 -0
  2. package/README.md +9 -0
  3. package/dist/cjs/constants.d.ts +11 -0
  4. package/dist/cjs/constants.js +120 -0
  5. package/dist/cjs/constants.js.map +7 -0
  6. package/dist/cjs/haneulns-client.d.ts +40 -0
  7. package/dist/cjs/haneulns-client.js +261 -0
  8. package/dist/cjs/haneulns-client.js.map +7 -0
  9. package/dist/cjs/haneulns-transaction.d.ts +105 -0
  10. package/dist/cjs/haneulns-transaction.js +465 -0
  11. package/dist/cjs/haneulns-transaction.js.map +7 -0
  12. package/dist/cjs/helpers.d.ts +18 -0
  13. package/dist/cjs/helpers.js +63 -0
  14. package/dist/cjs/helpers.js.map +7 -0
  15. package/dist/cjs/index.d.ts +5 -0
  16. package/dist/cjs/index.js +39 -0
  17. package/dist/cjs/index.js.map +7 -0
  18. package/dist/cjs/package.json +5 -0
  19. package/dist/cjs/pyth/PriceServiceConnection.d.ts +26 -0
  20. package/dist/cjs/pyth/PriceServiceConnection.js +68 -0
  21. package/dist/cjs/pyth/PriceServiceConnection.js.map +7 -0
  22. package/dist/cjs/pyth/pyth-helpers.d.ts +7 -0
  23. package/dist/cjs/pyth/pyth-helpers.js +36 -0
  24. package/dist/cjs/pyth/pyth-helpers.js.map +7 -0
  25. package/dist/cjs/pyth/pyth.d.ts +66 -0
  26. package/dist/cjs/pyth/pyth.js +270 -0
  27. package/dist/cjs/pyth/pyth.js.map +7 -0
  28. package/dist/cjs/types.d.ts +89 -0
  29. package/dist/cjs/types.js +17 -0
  30. package/dist/cjs/types.js.map +7 -0
  31. package/dist/esm/constants.d.ts +11 -0
  32. package/dist/esm/constants.js +100 -0
  33. package/dist/esm/constants.js.map +7 -0
  34. package/dist/esm/haneulns-client.d.ts +40 -0
  35. package/dist/esm/haneulns-client.js +249 -0
  36. package/dist/esm/haneulns-client.js.map +7 -0
  37. package/dist/esm/haneulns-transaction.d.ts +105 -0
  38. package/dist/esm/haneulns-transaction.js +445 -0
  39. package/dist/esm/haneulns-transaction.js.map +7 -0
  40. package/dist/esm/helpers.d.ts +18 -0
  41. package/dist/esm/helpers.js +43 -0
  42. package/dist/esm/helpers.js.map +7 -0
  43. package/dist/esm/index.d.ts +5 -0
  44. package/dist/esm/index.js +28 -0
  45. package/dist/esm/index.js.map +7 -0
  46. package/dist/esm/package.json +5 -0
  47. package/dist/esm/pyth/PriceServiceConnection.d.ts +26 -0
  48. package/dist/esm/pyth/PriceServiceConnection.js +38 -0
  49. package/dist/esm/pyth/PriceServiceConnection.js.map +7 -0
  50. package/dist/esm/pyth/pyth-helpers.d.ts +7 -0
  51. package/dist/esm/pyth/pyth-helpers.js +16 -0
  52. package/dist/esm/pyth/pyth-helpers.js.map +7 -0
  53. package/dist/esm/pyth/pyth.d.ts +66 -0
  54. package/dist/esm/pyth/pyth.js +250 -0
  55. package/dist/esm/pyth/pyth.js.map +7 -0
  56. package/dist/esm/types.d.ts +89 -0
  57. package/dist/esm/types.js +1 -0
  58. package/dist/esm/types.js.map +7 -0
  59. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  60. package/dist/tsconfig.tsbuildinfo +1 -0
  61. package/package.json +63 -0
  62. package/src/constants.ts +106 -0
  63. package/src/haneulns-client.ts +368 -0
  64. package/src/haneulns-transaction.ts +555 -0
  65. package/src/helpers.ts +52 -0
  66. package/src/index.ts +16 -0
  67. package/src/pyth/PriceServiceConnection.ts +48 -0
  68. package/src/pyth/pyth-helpers.ts +23 -0
  69. package/src/pyth/pyth.ts +312 -0
  70. package/src/types.ts +111 -0
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var haneulns_client_exports = {};
20
+ __export(haneulns_client_exports, {
21
+ HaneulnsClient: () => HaneulnsClient
22
+ });
23
+ module.exports = __toCommonJS(haneulns_client_exports);
24
+ var import_utils = require("@haneullabs/haneul/utils");
25
+ var import_constants = require("./constants.js");
26
+ var import_helpers = require("./helpers.js");
27
+ var import_pyth = require("./pyth/pyth.js");
28
+ class HaneulnsClient {
29
+ constructor(config) {
30
+ this.client = config.client;
31
+ this.network = config.network || "mainnet";
32
+ if (this.network === "mainnet") {
33
+ this.config = import_constants.mainPackage.mainnet;
34
+ } else if (this.network === "testnet") {
35
+ this.config = import_constants.mainPackage.testnet;
36
+ } else {
37
+ throw new Error("Invalid network");
38
+ }
39
+ }
40
+ /**
41
+ * Returns the price list for HaneulNS names in the base asset.
42
+ */
43
+ // Format:
44
+ // {
45
+ // [ 3, 3 ] => 500000000,
46
+ // [ 4, 4 ] => 100000000,
47
+ // [ 5, 63 ] => 20000000
48
+ // }
49
+ async getPriceList() {
50
+ if (!this.config.haneulns) throw new Error("Suins object ID is not set");
51
+ if (!this.config.packageId) throw new Error("Price list config not found");
52
+ const priceList = await this.client.getDynamicFieldObject({
53
+ parentId: this.config.haneulns,
54
+ name: {
55
+ type: (0, import_helpers.getConfigType)(
56
+ this.config.packageIdV1,
57
+ (0, import_helpers.getPricelistConfigType)(this.config.packageIdPricing)
58
+ ),
59
+ value: { dummy_field: false }
60
+ }
61
+ });
62
+ if (!priceList?.data?.content || priceList.data.content.dataType !== "moveObject" || !("fields" in priceList.data.content)) {
63
+ throw new Error("Price list not found or content is invalid");
64
+ }
65
+ const fields = priceList.data.content.fields;
66
+ if (!fields.value || !fields.value.fields || !fields.value.fields.pricing) {
67
+ throw new Error("Pricing fields not found in the price list");
68
+ }
69
+ const contentArray = fields.value.fields.pricing.fields.contents;
70
+ const priceMap = /* @__PURE__ */ new Map();
71
+ for (const entry of contentArray) {
72
+ const keyFields = entry.fields.key.fields;
73
+ const key = [Number(keyFields.pos0), Number(keyFields.pos1)];
74
+ const value = Number(entry.fields.value);
75
+ priceMap.set(key, value);
76
+ }
77
+ return priceMap;
78
+ }
79
+ /**
80
+ * Returns the renewal price list for HaneulNS names in the base asset.
81
+ */
82
+ // Format:
83
+ // {
84
+ // [ 3, 3 ] => 500000000,
85
+ // [ 4, 4 ] => 100000000,
86
+ // [ 5, 63 ] => 20000000
87
+ // }
88
+ async getRenewalPriceList() {
89
+ if (!this.config.haneulns) throw new Error("Suins object ID is not set");
90
+ if (!this.config.packageId) throw new Error("Price list config not found");
91
+ const priceList = await this.client.getDynamicFieldObject({
92
+ parentId: this.config.haneulns,
93
+ name: {
94
+ type: (0, import_helpers.getConfigType)(
95
+ this.config.packageIdV1,
96
+ (0, import_helpers.getRenewalPricelistConfigType)(this.config.packageIdPricing)
97
+ ),
98
+ value: { dummy_field: false }
99
+ }
100
+ });
101
+ if (!priceList || !priceList.data || !priceList.data.content || priceList.data.content.dataType !== "moveObject" || !("fields" in priceList.data.content)) {
102
+ throw new Error("Price list not found or content structure is invalid");
103
+ }
104
+ const fields = priceList.data.content.fields;
105
+ if (!fields.value || !fields.value.fields || !fields.value.fields.config || !fields.value.fields.config.fields.pricing || !fields.value.fields.config.fields.pricing.fields.contents) {
106
+ throw new Error("Pricing fields not found in the price list");
107
+ }
108
+ const contentArray = fields.value.fields.config.fields.pricing.fields.contents;
109
+ const priceMap = /* @__PURE__ */ new Map();
110
+ for (const entry of contentArray) {
111
+ const keyFields = entry.fields.key.fields;
112
+ const key = [Number(keyFields.pos0), Number(keyFields.pos1)];
113
+ const value = Number(entry.fields.value);
114
+ priceMap.set(key, value);
115
+ }
116
+ return priceMap;
117
+ }
118
+ /**
119
+ * Returns the coin discount list for HaneulNS names.
120
+ */
121
+ // Format:
122
+ // {
123
+ // 'b48aac3f53bab328e1eb4c5b3c34f55e760f2fb3f2305ee1a474878d80f650f0::TESTUSDC::TESTUSDC' => 0,
124
+ // '0000000000000000000000000000000000000000000000000000000000000002::haneul::HANEUL' => 0,
125
+ // 'b48aac3f53bab328e1eb4c5b3c34f55e760f2fb3f2305ee1a474878d80f650f0::TESTNS::TESTNS' => 25
126
+ // }
127
+ async getCoinTypeDiscount() {
128
+ if (!this.config.haneulns) throw new Error("Suins object ID is not set");
129
+ if (!this.config.packageId) throw new Error("Price list config not found");
130
+ const dfValue = await this.client.getDynamicFieldObject({
131
+ parentId: this.config.haneulns,
132
+ name: {
133
+ type: (0, import_helpers.getConfigType)(
134
+ this.config.packageIdV1,
135
+ (0, import_helpers.getCoinDiscountConfigType)(this.config.payments.packageId)
136
+ ),
137
+ value: { dummy_field: false }
138
+ }
139
+ });
140
+ if (!dfValue || !dfValue.data || !dfValue.data.content || dfValue.data.content.dataType !== "moveObject" || !("fields" in dfValue.data.content)) {
141
+ throw new Error("dfValue not found or content structure is invalid");
142
+ }
143
+ const fields = dfValue.data.content.fields;
144
+ if (!fields.value || !fields.value.fields || !fields.value.fields.base_currency || !fields.value.fields.base_currency.fields || !fields.value.fields.base_currency.fields.name || !fields.value.fields.currencies || !fields.value.fields.currencies.fields || !fields.value.fields.currencies.fields.contents) {
145
+ throw new Error("Required fields are missing in dfValue");
146
+ }
147
+ const content = fields.value.fields;
148
+ const currencyDiscounts = content.currencies.fields.contents;
149
+ const discountMap = /* @__PURE__ */ new Map();
150
+ for (const entry of currencyDiscounts) {
151
+ const key = entry.fields.key.fields.name;
152
+ const value = Number(entry.fields.value.fields.discount_percentage);
153
+ discountMap.set(key, value);
154
+ }
155
+ return discountMap;
156
+ }
157
+ async getNameRecord(name) {
158
+ if (!(0, import_utils.isValidHaneulNSName)(name)) throw new Error("Invalid HaneulNS name");
159
+ if (!this.config.registryTableId) throw new Error("Suins package ID is not set");
160
+ const nameRecord = await this.client.getDynamicFieldObject({
161
+ parentId: this.config.registryTableId,
162
+ name: {
163
+ type: (0, import_helpers.getDomainType)(this.config.packageIdV1),
164
+ value: (0, import_utils.normalizeHaneulNSName)(name, "dot").split(".").reverse()
165
+ }
166
+ });
167
+ const fields = nameRecord.data?.content;
168
+ if (nameRecord.error?.code === "dynamicFieldNotFound") return null;
169
+ if (nameRecord.error || !fields || fields.dataType !== "moveObject")
170
+ throw new Error("Name record not found. This domain is not registered.");
171
+ const content = fields.fields;
172
+ const data = {};
173
+ content.value.fields.data.fields.contents.forEach((item) => {
174
+ data[item.fields.key] = item.fields.value;
175
+ });
176
+ return {
177
+ name,
178
+ nftId: content.value.fields?.nft_id,
179
+ targetAddress: content.value.fields?.target_address,
180
+ expirationTimestampMs: content.value.fields?.expiration_timestamp_ms,
181
+ data,
182
+ avatar: data.avatar,
183
+ contentHash: data.content_hash,
184
+ walrusSiteId: data.walrus_site_id
185
+ };
186
+ }
187
+ /**
188
+ * Calculates the registration or renewal price for an SLD (Second Level Domain).
189
+ * It expects a domain name, the number of years and a `SuinsPriceList` object,
190
+ * as returned from `haneulnsClient.getPriceList()` function, or `haneulns.getRenewalPriceList()` function.
191
+ *
192
+ * It throws an error:
193
+ * 1. if the name is a subdomain
194
+ * 2. if the name is not a valid HaneulNS name
195
+ * 3. if the years are not between 1 and 5
196
+ */
197
+ async calculatePrice({
198
+ name,
199
+ years,
200
+ isRegistration = true
201
+ }) {
202
+ if (!(0, import_utils.isValidHaneulNSName)(name)) {
203
+ throw new Error("Invalid HaneulNS name");
204
+ }
205
+ (0, import_helpers.validateYears)(years);
206
+ if ((0, import_helpers.isSubName)(name)) {
207
+ throw new Error("Subdomains do not have a registration fee");
208
+ }
209
+ const length = (0, import_utils.normalizeHaneulNSName)(name, "dot").split(".")[0].length;
210
+ const priceList = await this.getPriceList();
211
+ const renewalPriceList = await this.getRenewalPriceList();
212
+ let yearsRemain = years;
213
+ let price = 0;
214
+ if (isRegistration) {
215
+ for (const [[minLength, maxLength], pricePerYear] of priceList.entries()) {
216
+ if (length >= minLength && length <= maxLength) {
217
+ price += pricePerYear;
218
+ yearsRemain -= 1;
219
+ break;
220
+ }
221
+ }
222
+ }
223
+ for (const [[minLength, maxLength], pricePerYear] of renewalPriceList.entries()) {
224
+ if (length >= minLength && length <= maxLength) {
225
+ price += yearsRemain * pricePerYear;
226
+ break;
227
+ }
228
+ }
229
+ return price;
230
+ }
231
+ async getPriceInfoObject(tx, feed, feeCoin) {
232
+ const endpoint = this.network === "testnet" ? "https://hermes-beta.pyth.network" : "https://hermes.pyth.network";
233
+ const connection = new import_pyth.HaneulPriceServiceConnection(endpoint);
234
+ const priceIDs = [
235
+ feed
236
+ // ASSET/USD price ID
237
+ ];
238
+ const priceUpdateData = await connection.getPriceFeedsUpdateData(priceIDs);
239
+ const wormholeStateId = this.config.pyth.wormholeStateId;
240
+ const pythStateId = this.config.pyth.pythStateId;
241
+ const client = new import_pyth.HaneulPythClient(this.client, pythStateId, wormholeStateId);
242
+ return await client.updatePriceFeeds(tx, priceUpdateData, priceIDs, feeCoin);
243
+ }
244
+ async getPythBaseUpdateFee() {
245
+ const pythStateId = this.config.pyth.pythStateId;
246
+ const wormholeStateId = this.config.pyth.wormholeStateId;
247
+ const client = new import_pyth.HaneulPythClient(this.client, pythStateId, wormholeStateId);
248
+ return await client.getBaseUpdateFee();
249
+ }
250
+ async getObjectType(objectId) {
251
+ const objectResponse = await this.client.getObject({
252
+ id: objectId,
253
+ options: { showType: true }
254
+ });
255
+ if (objectResponse && objectResponse.data && objectResponse.data.type) {
256
+ return objectResponse.data.type;
257
+ }
258
+ throw new Error(`Type information not found for object ID: ${objectId}`);
259
+ }
260
+ }
261
+ //# sourceMappingURL=haneulns-client.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/haneulns-client.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\nimport type { HaneulClient } from '@haneullabs/haneul/client';\nimport type { Transaction, TransactionObjectArgument } from '@haneullabs/haneul/transactions';\nimport { isValidHaneulNSName, normalizeHaneulNSName } from '@haneullabs/haneul/utils';\n\nimport { mainPackage } from './constants.js';\nimport {\n\tgetCoinDiscountConfigType,\n\tgetConfigType,\n\tgetDomainType,\n\tgetPricelistConfigType,\n\tgetRenewalPricelistConfigType,\n\tisSubName,\n\tvalidateYears,\n} from './helpers.js';\nimport { HaneulPriceServiceConnection, HaneulPythClient } from './pyth/pyth.js';\nimport type {\n\tCoinTypeDiscount,\n\tNameRecord,\n\tNetwork,\n\tPackageInfo,\n\tHaneulnsClientConfig,\n\tSuinsPriceList,\n} from './types.js';\n\n/// The HaneulnsClient is the main entry point for the Haneulns SDK.\n/// It allows you to interact with HaneulNS.\nexport class HaneulnsClient {\n\tclient: HaneulClient;\n\tnetwork: Network;\n\tconfig: PackageInfo;\n\n\tconstructor(config: HaneulnsClientConfig) {\n\t\tthis.client = config.client;\n\t\tthis.network = config.network || 'mainnet';\n\n\t\tif (this.network === 'mainnet') {\n\t\t\tthis.config = mainPackage.mainnet;\n\t\t} else if (this.network === 'testnet') {\n\t\t\tthis.config = mainPackage.testnet;\n\t\t} else {\n\t\t\tthrow new Error('Invalid network');\n\t\t}\n\t}\n\n\t/**\n\t * Returns the price list for HaneulNS names in the base asset.\n\t */\n\n\t// Format:\n\t// {\n\t// \t[ 3, 3 ] => 500000000,\n\t// \t[ 4, 4 ] => 100000000,\n\t// \t[ 5, 63 ] => 20000000\n\t// }\n\tasync getPriceList(): Promise<SuinsPriceList> {\n\t\tif (!this.config.haneulns) throw new Error('Suins object ID is not set');\n\t\tif (!this.config.packageId) throw new Error('Price list config not found');\n\n\t\tconst priceList = await this.client.getDynamicFieldObject({\n\t\t\tparentId: this.config.haneulns,\n\t\t\tname: {\n\t\t\t\ttype: getConfigType(\n\t\t\t\t\tthis.config.packageIdV1,\n\t\t\t\t\tgetPricelistConfigType(this.config.packageIdPricing),\n\t\t\t\t),\n\t\t\t\tvalue: { dummy_field: false },\n\t\t\t},\n\t\t});\n\n\t\t// Ensure the content exists and is a MoveStruct with expected fields\n\t\tif (\n\t\t\t!priceList?.data?.content ||\n\t\t\tpriceList.data.content.dataType !== 'moveObject' ||\n\t\t\t!('fields' in priceList.data.content)\n\t\t) {\n\t\t\tthrow new Error('Price list not found or content is invalid');\n\t\t}\n\n\t\t// Safely extract fields\n\t\tconst fields = priceList.data.content.fields as Record<string, any>;\n\t\tif (!fields.value || !fields.value.fields || !fields.value.fields.pricing) {\n\t\t\tthrow new Error('Pricing fields not found in the price list');\n\t\t}\n\n\t\tconst contentArray = fields.value.fields.pricing.fields.contents;\n\t\tconst priceMap = new Map();\n\n\t\tfor (const entry of contentArray) {\n\t\t\tconst keyFields = entry.fields.key.fields;\n\t\t\tconst key = [Number(keyFields.pos0), Number(keyFields.pos1)]; // Convert keys to numbers\n\t\t\tconst value = Number(entry.fields.value); // Convert value to a number\n\n\t\t\tpriceMap.set(key, value);\n\t\t}\n\n\t\treturn priceMap;\n\t}\n\n\t/**\n\t * Returns the renewal price list for HaneulNS names in the base asset.\n\t */\n\n\t// Format:\n\t// {\n\t// \t[ 3, 3 ] => 500000000,\n\t// \t[ 4, 4 ] => 100000000,\n\t// \t[ 5, 63 ] => 20000000\n\t// }\n\tasync getRenewalPriceList(): Promise<SuinsPriceList> {\n\t\tif (!this.config.haneulns) throw new Error('Suins object ID is not set');\n\t\tif (!this.config.packageId) throw new Error('Price list config not found');\n\n\t\tconst priceList = await this.client.getDynamicFieldObject({\n\t\t\tparentId: this.config.haneulns,\n\t\t\tname: {\n\t\t\t\ttype: getConfigType(\n\t\t\t\t\tthis.config.packageIdV1,\n\t\t\t\t\tgetRenewalPricelistConfigType(this.config.packageIdPricing),\n\t\t\t\t),\n\t\t\t\tvalue: { dummy_field: false },\n\t\t\t},\n\t\t});\n\n\t\tif (\n\t\t\t!priceList ||\n\t\t\t!priceList.data ||\n\t\t\t!priceList.data.content ||\n\t\t\tpriceList.data.content.dataType !== 'moveObject' ||\n\t\t\t!('fields' in priceList.data.content)\n\t\t) {\n\t\t\tthrow new Error('Price list not found or content structure is invalid');\n\t\t}\n\n\t\t// Safely extract fields\n\t\tconst fields = priceList.data.content.fields as Record<string, any>;\n\t\tif (\n\t\t\t!fields.value ||\n\t\t\t!fields.value.fields ||\n\t\t\t!fields.value.fields.config ||\n\t\t\t!fields.value.fields.config.fields.pricing ||\n\t\t\t!fields.value.fields.config.fields.pricing.fields.contents\n\t\t) {\n\t\t\tthrow new Error('Pricing fields not found in the price list');\n\t\t}\n\n\t\tconst contentArray = fields.value.fields.config.fields.pricing.fields.contents;\n\t\tconst priceMap = new Map();\n\n\t\tfor (const entry of contentArray) {\n\t\t\tconst keyFields = entry.fields.key.fields;\n\t\t\tconst key = [Number(keyFields.pos0), Number(keyFields.pos1)]; // Convert keys to numbers\n\t\t\tconst value = Number(entry.fields.value); // Convert value to a number\n\n\t\t\tpriceMap.set(key, value);\n\t\t}\n\n\t\treturn priceMap;\n\t}\n\n\t/**\n\t * Returns the coin discount list for HaneulNS names.\n\t */\n\n\t// Format:\n\t// {\n\t// \t'b48aac3f53bab328e1eb4c5b3c34f55e760f2fb3f2305ee1a474878d80f650f0::TESTUSDC::TESTUSDC' => 0,\n\t// \t'0000000000000000000000000000000000000000000000000000000000000002::haneul::HANEUL' => 0,\n\t// \t'b48aac3f53bab328e1eb4c5b3c34f55e760f2fb3f2305ee1a474878d80f650f0::TESTNS::TESTNS' => 25\n\t// }\n\tasync getCoinTypeDiscount(): Promise<CoinTypeDiscount> {\n\t\tif (!this.config.haneulns) throw new Error('Suins object ID is not set');\n\t\tif (!this.config.packageId) throw new Error('Price list config not found');\n\n\t\tconst dfValue = await this.client.getDynamicFieldObject({\n\t\t\tparentId: this.config.haneulns,\n\t\t\tname: {\n\t\t\t\ttype: getConfigType(\n\t\t\t\t\tthis.config.packageIdV1,\n\t\t\t\t\tgetCoinDiscountConfigType(this.config.payments.packageId),\n\t\t\t\t),\n\t\t\t\tvalue: { dummy_field: false },\n\t\t\t},\n\t\t});\n\n\t\tif (\n\t\t\t!dfValue ||\n\t\t\t!dfValue.data ||\n\t\t\t!dfValue.data.content ||\n\t\t\tdfValue.data.content.dataType !== 'moveObject' ||\n\t\t\t!('fields' in dfValue.data.content)\n\t\t) {\n\t\t\tthrow new Error('dfValue not found or content structure is invalid');\n\t\t}\n\n\t\t// Safely extract fields\n\t\tconst fields = dfValue.data.content.fields as Record<string, any>;\n\t\tif (\n\t\t\t!fields.value ||\n\t\t\t!fields.value.fields ||\n\t\t\t!fields.value.fields.base_currency ||\n\t\t\t!fields.value.fields.base_currency.fields ||\n\t\t\t!fields.value.fields.base_currency.fields.name ||\n\t\t\t!fields.value.fields.currencies ||\n\t\t\t!fields.value.fields.currencies.fields ||\n\t\t\t!fields.value.fields.currencies.fields.contents\n\t\t) {\n\t\t\tthrow new Error('Required fields are missing in dfValue');\n\t\t}\n\n\t\t// Safely extract content\n\t\tconst content = fields.value.fields;\n\t\tconst currencyDiscounts = content.currencies.fields.contents;\n\t\tconst discountMap = new Map();\n\n\t\tfor (const entry of currencyDiscounts) {\n\t\t\tconst key = entry.fields.key.fields.name;\n\t\t\tconst value = Number(entry.fields.value.fields.discount_percentage);\n\n\t\t\tdiscountMap.set(key, value);\n\t\t}\n\n\t\treturn discountMap;\n\t}\n\n\tasync getNameRecord(name: string): Promise<NameRecord | null> {\n\t\tif (!isValidHaneulNSName(name)) throw new Error('Invalid HaneulNS name');\n\t\tif (!this.config.registryTableId) throw new Error('Suins package ID is not set');\n\n\t\tconst nameRecord = await this.client.getDynamicFieldObject({\n\t\t\tparentId: this.config.registryTableId,\n\t\t\tname: {\n\t\t\t\ttype: getDomainType(this.config.packageIdV1),\n\t\t\t\tvalue: normalizeHaneulNSName(name, 'dot').split('.').reverse(),\n\t\t\t},\n\t\t});\n\n\t\tconst fields = nameRecord.data?.content;\n\n\t\t// in case the name record is not found, return null\n\t\tif (nameRecord.error?.code === 'dynamicFieldNotFound') return null;\n\n\t\tif (nameRecord.error || !fields || fields.dataType !== 'moveObject')\n\t\t\tthrow new Error('Name record not found. This domain is not registered.');\n\t\tconst content = fields.fields as Record<string, any>;\n\n\t\tconst data: Record<string, string> = {};\n\t\tcontent.value.fields.data.fields.contents.forEach((item: any) => {\n\t\t\t// @ts-ignore-next-line\n\t\t\tdata[item.fields.key as string] = item.fields.value;\n\t\t});\n\n\t\treturn {\n\t\t\tname,\n\t\t\tnftId: content.value.fields?.nft_id,\n\t\t\ttargetAddress: content.value.fields?.target_address!,\n\t\t\texpirationTimestampMs: content.value.fields?.expiration_timestamp_ms,\n\t\t\tdata,\n\t\t\tavatar: data.avatar,\n\t\t\tcontentHash: data.content_hash,\n\t\t\twalrusSiteId: data.walrus_site_id,\n\t\t};\n\t}\n\n\t/**\n\t * Calculates the registration or renewal price for an SLD (Second Level Domain).\n\t * It expects a domain name, the number of years and a `SuinsPriceList` object,\n\t * as returned from `haneulnsClient.getPriceList()` function, or `haneulns.getRenewalPriceList()` function.\n\t *\n\t * It throws an error:\n\t * 1. if the name is a subdomain\n\t * 2. if the name is not a valid HaneulNS name\n\t * 3. if the years are not between 1 and 5\n\t */\n\tasync calculatePrice({\n\t\tname,\n\t\tyears,\n\t\tisRegistration = true,\n\t}: {\n\t\tname: string;\n\t\tyears: number;\n\t\tisRegistration?: boolean;\n\t}) {\n\t\tif (!isValidHaneulNSName(name)) {\n\t\t\tthrow new Error('Invalid HaneulNS name');\n\t\t}\n\t\tvalidateYears(years);\n\n\t\tif (isSubName(name)) {\n\t\t\tthrow new Error('Subdomains do not have a registration fee');\n\t\t}\n\n\t\tconst length = normalizeHaneulNSName(name, 'dot').split('.')[0].length;\n\t\tconst priceList = await this.getPriceList();\n\t\tconst renewalPriceList = await this.getRenewalPriceList();\n\t\tlet yearsRemain = years;\n\t\tlet price = 0;\n\n\t\tif (isRegistration) {\n\t\t\tfor (const [[minLength, maxLength], pricePerYear] of priceList.entries()) {\n\t\t\t\tif (length >= minLength && length <= maxLength) {\n\t\t\t\t\tprice += pricePerYear; // Registration is always 1 year\n\t\t\t\t\tyearsRemain -= 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const [[minLength, maxLength], pricePerYear] of renewalPriceList.entries()) {\n\t\t\tif (length >= minLength && length <= maxLength) {\n\t\t\t\tprice += yearsRemain * pricePerYear;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn price;\n\t}\n\n\tasync getPriceInfoObject(tx: Transaction, feed: string, feeCoin?: TransactionObjectArgument) {\n\t\t// Initialize connection to the Haneul Price Service\n\t\tconst endpoint =\n\t\t\tthis.network === 'testnet'\n\t\t\t\t? 'https://hermes-beta.pyth.network'\n\t\t\t\t: 'https://hermes.pyth.network';\n\t\tconst connection = new HaneulPriceServiceConnection(endpoint);\n\n\t\t// List of price feed IDs\n\t\tconst priceIDs = [\n\t\t\tfeed, // ASSET/USD price ID\n\t\t];\n\n\t\t// Fetch price feed update data\n\t\tconst priceUpdateData = await connection.getPriceFeedsUpdateData(priceIDs);\n\n\t\t// Initialize Sui Client and Pyth Client\n\t\tconst wormholeStateId = this.config.pyth.wormholeStateId;\n\t\tconst pythStateId = this.config.pyth.pythStateId;\n\n\t\tconst client = new HaneulPythClient(this.client, pythStateId, wormholeStateId);\n\n\t\treturn await client.updatePriceFeeds(tx, priceUpdateData, priceIDs, feeCoin); // returns priceInfoObjectIds\n\t}\n\n\tasync getPythBaseUpdateFee(): Promise<number> {\n\t\tconst pythStateId = this.config.pyth.pythStateId;\n\t\tconst wormholeStateId = this.config.pyth.wormholeStateId;\n\n\t\tconst client = new HaneulPythClient(this.client, pythStateId, wormholeStateId);\n\t\treturn await client.getBaseUpdateFee();\n\t}\n\n\tasync getObjectType(objectId: string) {\n\t\t// Fetch the object details from the Haneul client\n\t\tconst objectResponse = await this.client.getObject({\n\t\t\tid: objectId,\n\t\t\toptions: { showType: true },\n\t\t});\n\n\t\t// Extract and return the type if available\n\t\tif (objectResponse && objectResponse.data && objectResponse.data.type) {\n\t\t\treturn objectResponse.data.type;\n\t\t}\n\n\t\t// Throw an error if the type is not found\n\t\tthrow new Error(`Type information not found for object ID: ${objectId}`);\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,105 @@
1
+ import type { Transaction, TransactionObjectArgument, TransactionObjectInput } from '@haneullabs/haneul/transactions';
2
+ import type { HaneulnsClient } from './haneulns-client.js';
3
+ import type { DiscountInfo, ReceiptParams, RegistrationParams, RenewalParams } from './types.js';
4
+ export declare class HaneulnsTransaction {
5
+ haneulnsClient: HaneulnsClient;
6
+ transaction: Transaction;
7
+ constructor(client: HaneulnsClient, transaction: Transaction);
8
+ /**
9
+ * Registers a domain for a number of years.
10
+ */
11
+ register(params: RegistrationParams): TransactionObjectArgument;
12
+ /**
13
+ * Renews an NFT for a number of years.
14
+ */
15
+ renew(params: RenewalParams): void;
16
+ initRegistration(domain: string): TransactionObjectArgument;
17
+ initRenewal(nft: TransactionObjectInput, years: number): TransactionObjectArgument;
18
+ calculatePrice(baseAmount: TransactionObjectArgument, paymentType: string, priceInfoObjectId: string): TransactionObjectArgument;
19
+ handleBasePayment(paymentIntent: TransactionObjectArgument, payment: TransactionObjectArgument, paymentType: string): TransactionObjectArgument;
20
+ handlePayment(paymentIntent: TransactionObjectArgument, payment: TransactionObjectArgument, paymentType: string, priceInfoObjectId: string, maxAmount?: bigint): TransactionObjectArgument;
21
+ finalizeRegister(receipt: TransactionObjectArgument): TransactionObjectArgument;
22
+ finalizeRenew(receipt: TransactionObjectArgument, nft: TransactionObjectInput): TransactionObjectArgument;
23
+ calculatePriceAfterDiscount(paymentIntent: TransactionObjectArgument, paymentType: string): TransactionObjectArgument;
24
+ generateReceipt(params: ReceiptParams): TransactionObjectArgument;
25
+ /**
26
+ * Applies a coupon to the payment intent.
27
+ */
28
+ applyCoupon(intent: TransactionObjectArgument, couponCode: string): TransactionObjectArgument;
29
+ /**
30
+ * Applies a discount to the payment intent.
31
+ */
32
+ applyDiscount(intent: TransactionObjectArgument, discountInfo: DiscountInfo): void;
33
+ /**
34
+ * Creates a subdomain.
35
+ */
36
+ createSubName({ parentNft, name, expirationTimestampMs, allowChildCreation, allowTimeExtension, }: {
37
+ parentNft: TransactionObjectInput;
38
+ name: string;
39
+ expirationTimestampMs: number;
40
+ allowChildCreation: boolean;
41
+ allowTimeExtension: boolean;
42
+ }): import("@haneullabs/haneul/transactions").TransactionResult;
43
+ /**
44
+ * Builds the PTB to create a leaf subdomain.
45
+ * Parent can be a `HaneulnsRegistration` or a `SubDomainRegistration` object.
46
+ * Can be passed in as an ID or a TransactionArgument.
47
+ */
48
+ createLeafSubName({ parentNft, name, targetAddress, }: {
49
+ parentNft: TransactionObjectInput;
50
+ name: string;
51
+ targetAddress: string;
52
+ }): void;
53
+ /**
54
+ * Removes a leaf subname.
55
+ */
56
+ removeLeafSubName({ parentNft, name }: {
57
+ parentNft: TransactionObjectInput;
58
+ name: string;
59
+ }): void;
60
+ /**
61
+ * Sets the target address of an NFT.
62
+ */
63
+ setTargetAddress({ nft, // Can be string or argument
64
+ address, isSubname, }: {
65
+ nft: TransactionObjectInput;
66
+ address?: string;
67
+ isSubname?: boolean;
68
+ }): void;
69
+ /**
70
+ * Sets a default name for the user.
71
+ */
72
+ setDefault(name: string): void;
73
+ /**
74
+ * Edits the setup of a subname.
75
+ */
76
+ editSetup({ parentNft, name, allowChildCreation, allowTimeExtension, }: {
77
+ parentNft: TransactionObjectInput;
78
+ name: string;
79
+ allowChildCreation: boolean;
80
+ allowTimeExtension: boolean;
81
+ }): void;
82
+ /**
83
+ * Extends the expiration of a subname.
84
+ */
85
+ extendExpiration({ nft, expirationTimestampMs, }: {
86
+ nft: TransactionObjectInput;
87
+ expirationTimestampMs: number;
88
+ }): void;
89
+ /**
90
+ * Sets the user data of an NFT.
91
+ */
92
+ setUserData({ nft, value, key, isSubname, }: {
93
+ nft: TransactionObjectInput;
94
+ value: string;
95
+ key: string;
96
+ isSubname?: boolean;
97
+ }): void;
98
+ /**
99
+ * Burns an expired NFT to collect storage rebates.
100
+ */
101
+ burnExpired({ nft, isSubname }: {
102
+ nft: TransactionObjectInput;
103
+ isSubname?: boolean;
104
+ }): void;
105
+ }