@haneullabs/payment-kit 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.
- package/README.md +123 -0
- package/dist/cjs/calls.d.ts +71 -0
- package/dist/cjs/calls.js +207 -0
- package/dist/cjs/calls.js.map +7 -0
- package/dist/cjs/client.d.ts +36 -0
- package/dist/cjs/client.js +123 -0
- package/dist/cjs/client.js.map +7 -0
- package/dist/cjs/constants.d.ts +11 -0
- package/dist/cjs/constants.js +40 -0
- package/dist/cjs/constants.js.map +7 -0
- package/dist/cjs/contracts/payment_kit/config.d.ts +14 -0
- package/dist/cjs/contracts/payment_kit/config.js +50 -0
- package/dist/cjs/contracts/payment_kit/config.js.map +7 -0
- package/dist/cjs/contracts/payment_kit/deps/std/type_name.d.ts +14 -0
- package/dist/cjs/contracts/payment_kit/deps/std/type_name.js +42 -0
- package/dist/cjs/contracts/payment_kit/deps/std/type_name.js.map +7 -0
- package/dist/cjs/contracts/payment_kit/deps/sui/object.d.ts +5 -0
- package/dist/cjs/contracts/payment_kit/deps/sui/object.js +33 -0
- package/dist/cjs/contracts/payment_kit/deps/sui/object.js.map +7 -0
- package/dist/cjs/contracts/payment_kit/deps/sui/vec_map.d.ts +27 -0
- package/dist/cjs/contracts/payment_kit/deps/sui/vec_map.js +45 -0
- package/dist/cjs/contracts/payment_kit/deps/sui/vec_map.js.map +7 -0
- package/dist/cjs/contracts/payment_kit/payment_kit.d.ts +233 -0
- package/dist/cjs/contracts/payment_kit/payment_kit.js +252 -0
- package/dist/cjs/contracts/payment_kit/payment_kit.js.map +7 -0
- package/dist/cjs/contracts/utils/index.d.ts +12 -0
- package/dist/cjs/contracts/utils/index.js +151 -0
- package/dist/cjs/contracts/utils/index.js.map +7 -0
- package/dist/cjs/error.d.ts +4 -0
- package/dist/cjs/error.js +29 -0
- package/dist/cjs/error.js.map +7 -0
- package/dist/cjs/index.d.ts +5 -0
- package/dist/cjs/index.js +35 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/transactions.d.ts +73 -0
- package/dist/cjs/transactions.js +131 -0
- package/dist/cjs/transactions.js.map +7 -0
- package/dist/cjs/types.d.ts +62 -0
- package/dist/cjs/types.js +17 -0
- package/dist/cjs/types.js.map +7 -0
- package/dist/cjs/uri.d.ts +27 -0
- package/dist/cjs/uri.js +131 -0
- package/dist/cjs/uri.js.map +7 -0
- package/dist/cjs/utils.d.ts +1 -0
- package/dist/cjs/utils.js +34 -0
- package/dist/cjs/utils.js.map +7 -0
- package/dist/esm/calls.d.ts +71 -0
- package/dist/esm/calls.js +196 -0
- package/dist/esm/calls.js.map +7 -0
- package/dist/esm/client.d.ts +36 -0
- package/dist/esm/client.js +106 -0
- package/dist/esm/client.js.map +7 -0
- package/dist/esm/constants.d.ts +11 -0
- package/dist/esm/constants.js +20 -0
- package/dist/esm/constants.js.map +7 -0
- package/dist/esm/contracts/payment_kit/config.d.ts +14 -0
- package/dist/esm/contracts/payment_kit/config.js +20 -0
- package/dist/esm/contracts/payment_kit/config.js.map +7 -0
- package/dist/esm/contracts/payment_kit/deps/std/type_name.d.ts +14 -0
- package/dist/esm/contracts/payment_kit/deps/std/type_name.js +22 -0
- package/dist/esm/contracts/payment_kit/deps/std/type_name.js.map +7 -0
- package/dist/esm/contracts/payment_kit/deps/sui/object.d.ts +5 -0
- package/dist/esm/contracts/payment_kit/deps/sui/object.js +13 -0
- package/dist/esm/contracts/payment_kit/deps/sui/object.js.map +7 -0
- package/dist/esm/contracts/payment_kit/deps/sui/vec_map.d.ts +27 -0
- package/dist/esm/contracts/payment_kit/deps/sui/vec_map.js +25 -0
- package/dist/esm/contracts/payment_kit/deps/sui/vec_map.js.map +7 -0
- package/dist/esm/contracts/payment_kit/payment_kit.d.ts +233 -0
- package/dist/esm/contracts/payment_kit/payment_kit.js +222 -0
- package/dist/esm/contracts/payment_kit/payment_kit.js.map +7 -0
- package/dist/esm/contracts/utils/index.d.ts +12 -0
- package/dist/esm/contracts/utils/index.js +131 -0
- package/dist/esm/contracts/utils/index.js.map +7 -0
- package/dist/esm/error.d.ts +4 -0
- package/dist/esm/error.js +9 -0
- package/dist/esm/error.js.map +7 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +15 -0
- package/dist/esm/index.js.map +7 -0
- package/dist/esm/package.json +5 -0
- package/dist/esm/transactions.d.ts +73 -0
- package/dist/esm/transactions.js +111 -0
- package/dist/esm/transactions.js.map +7 -0
- package/dist/esm/types.d.ts +62 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/types.js.map +7 -0
- package/dist/esm/uri.d.ts +27 -0
- package/dist/esm/uri.js +111 -0
- package/dist/esm/uri.js.map +7 -0
- package/dist/esm/utils.d.ts +1 -0
- package/dist/esm/utils.js +14 -0
- package/dist/esm/utils.js.map +7 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/contracts/utils/index.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\nimport type { BcsType, TypeTag } from '@haneullabs/haneul/bcs';\nimport { bcs, TypeTagSerializer, BcsStruct, BcsEnum, BcsTuple } from '@haneullabs/haneul/bcs';\nimport { normalizeHaneulAddress } from '@haneullabs/haneul/utils';\nimport type { TransactionArgument } from '@haneullabs/haneul/transactions';\nimport { isArgument } from '@haneullabs/haneul/transactions';\n\nconst MOVE_STDLIB_ADDRESS = normalizeHaneulAddress('0x1');\nconst HANEUL_FRAMEWORK_ADDRESS = normalizeHaneulAddress('0x2');\nconst HANEUL_SYSTEM_ADDRESS = normalizeHaneulAddress('0x3');\n\nexport type RawTransactionArgument<T> = T | TransactionArgument;\n\nexport function getPureBcsSchema(typeTag: string | TypeTag): BcsType<any> | null {\n\tconst parsedTag = typeof typeTag === 'string' ? TypeTagSerializer.parseFromStr(typeTag) : typeTag;\n\n\tif ('u8' in parsedTag) {\n\t\treturn bcs.U8;\n\t} else if ('u16' in parsedTag) {\n\t\treturn bcs.U16;\n\t} else if ('u32' in parsedTag) {\n\t\treturn bcs.U32;\n\t} else if ('u64' in parsedTag) {\n\t\treturn bcs.U64;\n\t} else if ('u128' in parsedTag) {\n\t\treturn bcs.U128;\n\t} else if ('u256' in parsedTag) {\n\t\treturn bcs.U256;\n\t} else if ('address' in parsedTag) {\n\t\treturn bcs.Address;\n\t} else if ('bool' in parsedTag) {\n\t\treturn bcs.Bool;\n\t} else if ('vector' in parsedTag) {\n\t\tconst type = getPureBcsSchema(parsedTag.vector);\n\t\treturn type ? bcs.vector(type) : null;\n\t} else if ('struct' in parsedTag) {\n\t\tconst structTag = parsedTag.struct;\n\t\tconst pkg = normalizeHaneulAddress(parsedTag.struct.address);\n\n\t\tif (pkg === MOVE_STDLIB_ADDRESS) {\n\t\t\tif (\n\t\t\t\t(structTag.module === 'ascii' || structTag.module === 'string') &&\n\t\t\t\tstructTag.name === 'String'\n\t\t\t) {\n\t\t\t\treturn bcs.String;\n\t\t\t}\n\n\t\t\tif (structTag.module === 'option' && structTag.name === 'Option') {\n\t\t\t\tconst type = getPureBcsSchema(structTag.typeParams[0]!);\n\t\t\t\treturn type ? bcs.option(type) : null;\n\t\t\t}\n\t\t}\n\n\t\tif (pkg === HANEUL_FRAMEWORK_ADDRESS && structTag.module === 'Object' && structTag.name === 'ID') {\n\t\t\treturn bcs.Address;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function normalizeMoveArguments(\n\targs: unknown[] | object,\n\targTypes: string[],\n\tparameterNames?: string[],\n) {\n\tconst argLen = Array.isArray(args) ? args.length : Object.keys(args).length;\n\tif (parameterNames && argLen !== parameterNames.length) {\n\t\tthrow new Error(\n\t\t\t`Invalid number of arguments, expected ${parameterNames.length}, got ${argLen}`,\n\t\t);\n\t}\n\n\tconst normalizedArgs: TransactionArgument[] = [];\n\n\tlet index = 0;\n\tfor (const [i, argType] of argTypes.entries()) {\n\t\tif (argType === `${HANEUL_FRAMEWORK_ADDRESS}::deny_list::DenyList`) {\n\t\t\tnormalizedArgs.push((tx) => tx.object.denyList());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === `${HANEUL_FRAMEWORK_ADDRESS}::random::Random`) {\n\t\t\tnormalizedArgs.push((tx) => tx.object.random());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === `${HANEUL_FRAMEWORK_ADDRESS}::clock::Clock`) {\n\t\t\tnormalizedArgs.push((tx) => tx.object.clock());\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (argType === `${HANEUL_SYSTEM_ADDRESS}::haneul_system::HaneulSystemState`) {\n\t\t\tnormalizedArgs.push((tx) => tx.object.system());\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet arg;\n\t\tif (Array.isArray(args)) {\n\t\t\tif (index >= args.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid number of arguments, expected at least ${index + 1}, got ${args.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\targ = args[index];\n\t\t} else {\n\t\t\tif (!parameterNames) {\n\t\t\t\tthrow new Error(`Expected arguments to be passed as an array`);\n\t\t\t}\n\t\t\tconst name = parameterNames[index];\n\t\t\targ = args[name as keyof typeof args];\n\n\t\t\tif (arg == null) {\n\t\t\t\tthrow new Error(`Parameter ${name} is required`);\n\t\t\t}\n\t\t}\n\n\t\tindex += 1;\n\n\t\tif (typeof arg === 'function' || isArgument(arg)) {\n\t\t\tnormalizedArgs.push(arg as TransactionArgument);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst type = argTypes[i]!;\n\t\tconst bcsType = getPureBcsSchema(type);\n\n\t\tif (bcsType) {\n\t\t\tconst bytes = bcsType.serialize(arg as never);\n\t\t\tnormalizedArgs.push((tx) => tx.pure(bytes));\n\t\t\tcontinue;\n\t\t} else if (typeof arg === 'string') {\n\t\t\tnormalizedArgs.push((tx) => tx.object(arg));\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(`Invalid argument ${stringify(arg)} for type ${type}`);\n\t}\n\n\treturn normalizedArgs;\n}\n\nexport class MoveStruct<\n\tT extends Record<string, BcsType<any>>,\n\tconst Name extends string = string,\n> extends BcsStruct<T, Name> {}\n\nexport class MoveEnum<\n\tT extends Record<string, BcsType<any> | null>,\n\tconst Name extends string,\n> extends BcsEnum<T, Name> {}\n\nexport class MoveTuple<\n\tT extends readonly BcsType<any>[],\n\tconst Name extends string,\n> extends BcsTuple<T, Name> {}\n\nfunction stringify(val: unknown) {\n\tif (typeof val === 'object') {\n\t\treturn JSON.stringify(val, (val: unknown) => val);\n\t}\n\tif (typeof val === 'bigint') {\n\t\treturn val.toString();\n\t}\n\n\treturn val;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["val"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/error.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport class PaymentKitClientError extends Error {}\n\nexport class PaymentKitUriError extends PaymentKitClientError {}\n"],
|
|
5
|
+
"mappings": "AAGO,MAAM,8BAA8B,MAAM;AAAC;AAE3C,MAAM,2BAA2B,sBAAsB;AAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { PaymentKitClient, paymentKit } from './client.js';
|
|
2
|
+
export type { PaymentKitCompatibleClient, PaymentKitClientOptions, PaymentKitPackageConfig, GetPaymentRecordOptions, ProcessRegistryPaymentOptions, ProcessEphemeralPaymentOptions, GetPaymentRecordResponse, CreateRegistryOptions, SetEpochExpirationDurationOptions, SetRegistryManagedFundsOptions, WithdrawFromRegistryOptions, DeletePaymentRecordOptions, PaymentUriParams, } from './types.js';
|
|
3
|
+
export { PaymentKitClientError, PaymentKitUriError } from './error.js';
|
|
4
|
+
export { DEFAULT_REGISTRY_NAME, SUI_PAYMENT_KIT_PROTOCOL } from './constants.js';
|
|
5
|
+
export { createPaymentTransactionUri, parsePaymentTransactionUri } from './uri.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PaymentKitClient, paymentKit } from "./client.js";
|
|
2
|
+
import { PaymentKitClientError, PaymentKitUriError } from "./error.js";
|
|
3
|
+
import { DEFAULT_REGISTRY_NAME, SUI_PAYMENT_KIT_PROTOCOL } from "./constants.js";
|
|
4
|
+
import { createPaymentTransactionUri, parsePaymentTransactionUri } from "./uri.js";
|
|
5
|
+
export {
|
|
6
|
+
DEFAULT_REGISTRY_NAME,
|
|
7
|
+
PaymentKitClient,
|
|
8
|
+
PaymentKitClientError,
|
|
9
|
+
PaymentKitUriError,
|
|
10
|
+
SUI_PAYMENT_KIT_PROTOCOL,
|
|
11
|
+
createPaymentTransactionUri,
|
|
12
|
+
parsePaymentTransactionUri,
|
|
13
|
+
paymentKit
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport { PaymentKitClient, paymentKit } from './client.js';\nexport type {\n\tPaymentKitCompatibleClient,\n\tPaymentKitClientOptions,\n\tPaymentKitPackageConfig,\n\tGetPaymentRecordOptions,\n\tProcessRegistryPaymentOptions,\n\tProcessEphemeralPaymentOptions,\n\tGetPaymentRecordResponse,\n\tCreateRegistryOptions,\n\tSetEpochExpirationDurationOptions,\n\tSetRegistryManagedFundsOptions,\n\tWithdrawFromRegistryOptions,\n\tDeletePaymentRecordOptions,\n\tPaymentUriParams,\n} from './types.js';\nexport { PaymentKitClientError, PaymentKitUriError } from './error.js';\nexport { DEFAULT_REGISTRY_NAME, SUI_PAYMENT_KIT_PROTOCOL } from './constants.js';\nexport { createPaymentTransactionUri, parsePaymentTransactionUri } from './uri.js';\n"],
|
|
5
|
+
"mappings": "AAGA,SAAS,kBAAkB,kBAAkB;AAgB7C,SAAS,uBAAuB,0BAA0B;AAC1D,SAAS,uBAAuB,gCAAgC;AAChE,SAAS,6BAA6B,kCAAkC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Transaction } from '@haneullabs/haneul/transactions';
|
|
2
|
+
import type { CreateRegistryOptions, DeletePaymentRecordOptions, ProcessEphemeralPaymentOptions, ProcessRegistryPaymentOptions, SetEpochExpirationDurationOptions, SetRegistryManagedFundsOptions, WithdrawFromRegistryOptions } from './types.js';
|
|
3
|
+
import type { PaymentKitCalls } from './calls.js';
|
|
4
|
+
export interface PaymentKitTransactionsOptions {
|
|
5
|
+
calls: PaymentKitCalls;
|
|
6
|
+
}
|
|
7
|
+
export declare class PaymentKitTransactions {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(options: PaymentKitTransactionsOptions);
|
|
10
|
+
/**
|
|
11
|
+
* Creates a `processRegistryPayment` transaction
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const tx = client.paymentKit.tx.processRegistryPayment({ nonce, coinType, sender, amount, receiver, registryName });
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
processRegistryPayment(options: ProcessRegistryPaymentOptions): Transaction;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a `processEphemeralPayment` transaction
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const tx = client.paymentKit.tx.processEphemeralPayment({ nonce, coinType, sender, amount, receiver });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
processEphemeralPayment(options: ProcessEphemeralPaymentOptions): Transaction;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a `createRegistry` transaction
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const tx = client.paymentKit.tx.createRegistry({ registryName });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
createRegistry(options: CreateRegistryOptions): Transaction;
|
|
37
|
+
/**
|
|
38
|
+
* Creates a `setConfigEpochExpirationDuration` transaction
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```ts
|
|
42
|
+
* const tx = client.paymentKit.tx.setConfigEpochExpirationDuration({ registryName, epochExpirationDuration, adminCapId });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
setConfigEpochExpirationDuration(options: SetEpochExpirationDurationOptions): Transaction;
|
|
46
|
+
/**
|
|
47
|
+
* Creates a `setConfigRegistryManagedFunds` transaction
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* const tx = client.paymentKit.tx.setConfigRegistryManagedFunds({ registryName, registryManagedFunds, adminCapId });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
setConfigRegistryManagedFunds(options: SetRegistryManagedFundsOptions): Transaction;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a `withdrawFromRegistry` transaction
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```ts
|
|
60
|
+
* const tx = client.paymentKit.tx.withdrawFromRegistry({ coinType, registryName, adminCapId });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
withdrawFromRegistry(options: WithdrawFromRegistryOptions): Transaction;
|
|
64
|
+
/**
|
|
65
|
+
* Creates a `deletePaymentRecord` transaction
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* const tx = client.paymentKit.tx.deletePaymentRecord({ coinType, nonce, amount, receiver, registryName });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
deletePaymentRecord(options: DeletePaymentRecordOptions): Transaction;
|
|
73
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
var _calls;
|
|
9
|
+
import { Transaction } from "@haneullabs/haneul/transactions";
|
|
10
|
+
class PaymentKitTransactions {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
__privateAdd(this, _calls);
|
|
13
|
+
__privateSet(this, _calls, options.calls);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates a `processRegistryPayment` transaction
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const tx = client.paymentKit.tx.processRegistryPayment({ nonce, coinType, sender, amount, receiver, registryName });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
processRegistryPayment(options) {
|
|
24
|
+
const tx = new Transaction();
|
|
25
|
+
tx.add(__privateGet(this, _calls).processRegistryPayment(options));
|
|
26
|
+
return tx;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a `processEphemeralPayment` transaction
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const tx = client.paymentKit.tx.processEphemeralPayment({ nonce, coinType, sender, amount, receiver });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
processEphemeralPayment(options) {
|
|
37
|
+
const tx = new Transaction();
|
|
38
|
+
tx.add(__privateGet(this, _calls).processEphemeralPayment(options));
|
|
39
|
+
return tx;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a `createRegistry` transaction
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* const tx = client.paymentKit.tx.createRegistry({ registryName });
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
createRegistry(options) {
|
|
50
|
+
const tx = new Transaction();
|
|
51
|
+
tx.add(__privateGet(this, _calls).createRegistry(options));
|
|
52
|
+
return tx;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a `setConfigEpochExpirationDuration` transaction
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```ts
|
|
59
|
+
* const tx = client.paymentKit.tx.setConfigEpochExpirationDuration({ registryName, epochExpirationDuration, adminCapId });
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
setConfigEpochExpirationDuration(options) {
|
|
63
|
+
const tx = new Transaction();
|
|
64
|
+
tx.add(__privateGet(this, _calls).setConfigEpochExpirationDuration(options));
|
|
65
|
+
return tx;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Creates a `setConfigRegistryManagedFunds` transaction
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```ts
|
|
72
|
+
* const tx = client.paymentKit.tx.setConfigRegistryManagedFunds({ registryName, registryManagedFunds, adminCapId });
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
setConfigRegistryManagedFunds(options) {
|
|
76
|
+
const tx = new Transaction();
|
|
77
|
+
tx.add(__privateGet(this, _calls).setConfigRegistryManagedFunds(options));
|
|
78
|
+
return tx;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates a `withdrawFromRegistry` transaction
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* const tx = client.paymentKit.tx.withdrawFromRegistry({ coinType, registryName, adminCapId });
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
withdrawFromRegistry(options) {
|
|
89
|
+
const tx = new Transaction();
|
|
90
|
+
tx.add(__privateGet(this, _calls).withdrawFromRegistry(options));
|
|
91
|
+
return tx;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Creates a `deletePaymentRecord` transaction
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* const tx = client.paymentKit.tx.deletePaymentRecord({ coinType, nonce, amount, receiver, registryName });
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
deletePaymentRecord(options) {
|
|
102
|
+
const tx = new Transaction();
|
|
103
|
+
tx.add(__privateGet(this, _calls).deletePaymentRecord(options));
|
|
104
|
+
return tx;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
_calls = new WeakMap();
|
|
108
|
+
export {
|
|
109
|
+
PaymentKitTransactions
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/transactions.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Transaction } from '@haneullabs/haneul/transactions';\nimport type {\n\tCreateRegistryOptions,\n\tDeletePaymentRecordOptions,\n\tProcessEphemeralPaymentOptions,\n\tProcessRegistryPaymentOptions,\n\tSetEpochExpirationDurationOptions,\n\tSetRegistryManagedFundsOptions,\n\tWithdrawFromRegistryOptions,\n} from './types.js';\nimport type { PaymentKitCalls } from './calls.js';\n\nexport interface PaymentKitTransactionsOptions {\n\tcalls: PaymentKitCalls;\n}\n\nexport class PaymentKitTransactions {\n\t#calls: PaymentKitCalls;\n\n\tconstructor(options: PaymentKitTransactionsOptions) {\n\t\tthis.#calls = options.calls;\n\t}\n\n\t/**\n\t * Creates a `processRegistryPayment` transaction\n\t *\n\t * @example\n\t * ```ts\n\t * const tx = client.paymentKit.tx.processRegistryPayment({ nonce, coinType, sender, amount, receiver, registryName });\n\t * ```\n\t */\n\tprocessRegistryPayment(options: ProcessRegistryPaymentOptions) {\n\t\tconst tx = new Transaction();\n\t\ttx.add(this.#calls.processRegistryPayment(options));\n\n\t\treturn tx;\n\t}\n\n\t/**\n\t * Creates a `processEphemeralPayment` transaction\n\t *\n\t * @example\n\t * ```ts\n\t * const tx = client.paymentKit.tx.processEphemeralPayment({ nonce, coinType, sender, amount, receiver });\n\t * ```\n\t */\n\tprocessEphemeralPayment(options: ProcessEphemeralPaymentOptions) {\n\t\tconst tx = new Transaction();\n\t\ttx.add(this.#calls.processEphemeralPayment(options));\n\n\t\treturn tx;\n\t}\n\n\t/**\n\t * Creates a `createRegistry` transaction\n\t *\n\t * @example\n\t * ```ts\n\t * const tx = client.paymentKit.tx.createRegistry({ registryName });\n\t * ```\n\t */\n\tcreateRegistry(options: CreateRegistryOptions) {\n\t\tconst tx = new Transaction();\n\t\ttx.add(this.#calls.createRegistry(options));\n\n\t\treturn tx;\n\t}\n\n\t/**\n\t * Creates a `setConfigEpochExpirationDuration` transaction\n\t *\n\t * @example\n\t * ```ts\n\t * const tx = client.paymentKit.tx.setConfigEpochExpirationDuration({ registryName, epochExpirationDuration, adminCapId });\n\t * ```\n\t */\n\tsetConfigEpochExpirationDuration(options: SetEpochExpirationDurationOptions) {\n\t\tconst tx = new Transaction();\n\t\ttx.add(this.#calls.setConfigEpochExpirationDuration(options));\n\n\t\treturn tx;\n\t}\n\n\t/**\n\t * Creates a `setConfigRegistryManagedFunds` transaction\n\t *\n\t * @example\n\t * ```ts\n\t * const tx = client.paymentKit.tx.setConfigRegistryManagedFunds({ registryName, registryManagedFunds, adminCapId });\n\t * ```\n\t */\n\tsetConfigRegistryManagedFunds(options: SetRegistryManagedFundsOptions) {\n\t\tconst tx = new Transaction();\n\t\ttx.add(this.#calls.setConfigRegistryManagedFunds(options));\n\n\t\treturn tx;\n\t}\n\n\t/**\n\t * Creates a `withdrawFromRegistry` transaction\n\t *\n\t * @example\n\t * ```ts\n\t * const tx = client.paymentKit.tx.withdrawFromRegistry({ coinType, registryName, adminCapId });\n\t * ```\n\t */\n\twithdrawFromRegistry(options: WithdrawFromRegistryOptions) {\n\t\tconst tx = new Transaction();\n\t\ttx.add(this.#calls.withdrawFromRegistry(options));\n\n\t\treturn tx;\n\t}\n\n\t/**\n\t * Creates a `deletePaymentRecord` transaction\n\t *\n\t * @example\n\t * ```ts\n\t * const tx = client.paymentKit.tx.deletePaymentRecord({ coinType, nonce, amount, receiver, registryName });\n\t * ```\n\t */\n\tdeletePaymentRecord(options: DeletePaymentRecordOptions) {\n\t\tconst tx = new Transaction();\n\t\ttx.add(this.#calls.deletePaymentRecord(options));\n\n\t\treturn tx;\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAAA;AAGA,SAAS,mBAAmB;AAgBrB,MAAM,uBAAuB;AAAA,EAGnC,YAAY,SAAwC;AAFpD;AAGC,uBAAK,QAAS,QAAQ;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,uBAAuB,SAAwC;AAC9D,UAAM,KAAK,IAAI,YAAY;AAC3B,OAAG,IAAI,mBAAK,QAAO,uBAAuB,OAAO,CAAC;AAElD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,wBAAwB,SAAyC;AAChE,UAAM,KAAK,IAAI,YAAY;AAC3B,OAAG,IAAI,mBAAK,QAAO,wBAAwB,OAAO,CAAC;AAEnD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,eAAe,SAAgC;AAC9C,UAAM,KAAK,IAAI,YAAY;AAC3B,OAAG,IAAI,mBAAK,QAAO,eAAe,OAAO,CAAC;AAE1C,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,iCAAiC,SAA4C;AAC5E,UAAM,KAAK,IAAI,YAAY;AAC3B,OAAG,IAAI,mBAAK,QAAO,iCAAiC,OAAO,CAAC;AAE5D,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,8BAA8B,SAAyC;AACtE,UAAM,KAAK,IAAI,YAAY;AAC3B,OAAG,IAAI,mBAAK,QAAO,8BAA8B,OAAO,CAAC;AAEzD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,qBAAqB,SAAsC;AAC1D,UAAM,KAAK,IAAI,YAAY;AAC3B,OAAG,IAAI,mBAAK,QAAO,qBAAqB,OAAO,CAAC;AAEhD,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,oBAAoB,SAAqC;AACxD,UAAM,KAAK,IAAI,YAAY;AAC3B,OAAG,IAAI,mBAAK,QAAO,oBAAoB,OAAO,CAAC;AAE/C,WAAO;AAAA,EACR;AACD;AA9GC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { TransactionResult } from '@haneullabs/haneul/transactions';
|
|
2
|
+
import type { ClientWithCoreApi } from '@haneullabs/haneul/experimental';
|
|
3
|
+
export type PaymentKitPackageConfig = {
|
|
4
|
+
packageId: string;
|
|
5
|
+
namespaceId: string;
|
|
6
|
+
};
|
|
7
|
+
export interface PaymentKitCompatibleClient extends ClientWithCoreApi {
|
|
8
|
+
}
|
|
9
|
+
export interface PaymentKitClientOptions {
|
|
10
|
+
client: PaymentKitCompatibleClient;
|
|
11
|
+
}
|
|
12
|
+
export type Registry = {
|
|
13
|
+
registryName?: string;
|
|
14
|
+
registryId?: never;
|
|
15
|
+
} | {
|
|
16
|
+
registryName?: never;
|
|
17
|
+
registryId: string;
|
|
18
|
+
};
|
|
19
|
+
export type RegistryAndAdminCap = {
|
|
20
|
+
adminCapId: string;
|
|
21
|
+
} & Registry;
|
|
22
|
+
export type PaymentKeyArgs = {
|
|
23
|
+
coinType: string;
|
|
24
|
+
nonce: string;
|
|
25
|
+
amount: number | bigint;
|
|
26
|
+
receiver: string;
|
|
27
|
+
};
|
|
28
|
+
export type GetPaymentRecordOptions = PaymentKeyArgs & Registry;
|
|
29
|
+
export interface GetPaymentRecordResponse {
|
|
30
|
+
key: string;
|
|
31
|
+
paymentTransactionDigest: string | null;
|
|
32
|
+
epochAtTimeOfRecord: string;
|
|
33
|
+
}
|
|
34
|
+
export type ProcessEphemeralPaymentOptions = {
|
|
35
|
+
sender: string;
|
|
36
|
+
sourceCoin?: TransactionResult;
|
|
37
|
+
} & PaymentKeyArgs;
|
|
38
|
+
export type ProcessRegistryPaymentOptions = ProcessEphemeralPaymentOptions & Registry;
|
|
39
|
+
export type CreateRegistryOptions = {
|
|
40
|
+
registryName: string;
|
|
41
|
+
};
|
|
42
|
+
export type SetEpochExpirationDurationOptions = {
|
|
43
|
+
epochExpirationDuration: number | bigint;
|
|
44
|
+
} & RegistryAndAdminCap;
|
|
45
|
+
export type SetRegistryManagedFundsOptions = {
|
|
46
|
+
registryManagedFunds: boolean;
|
|
47
|
+
} & RegistryAndAdminCap;
|
|
48
|
+
export type WithdrawFromRegistryOptions = {
|
|
49
|
+
coinType: string;
|
|
50
|
+
} & RegistryAndAdminCap;
|
|
51
|
+
export type DeletePaymentRecordOptions = {
|
|
52
|
+
coinType: string;
|
|
53
|
+
} & PaymentKeyArgs & Registry;
|
|
54
|
+
export type PaymentUriParams = {
|
|
55
|
+
receiverAddress: string;
|
|
56
|
+
amount: bigint;
|
|
57
|
+
coinType: string;
|
|
58
|
+
nonce: string;
|
|
59
|
+
label?: string;
|
|
60
|
+
message?: string;
|
|
61
|
+
iconUrl?: string;
|
|
62
|
+
} & Partial<Registry>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { PaymentUriParams } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a payment transaction URI from the given parameters.
|
|
4
|
+
* Returns the constructed URI string.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* const uri = createPaymentTransactionUri({
|
|
9
|
+
* receiverAddress: "0x...",
|
|
10
|
+
* amount: "10000000", (0.01 SUI)
|
|
11
|
+
* coinType: "0x2::haneul::HANEUL",
|
|
12
|
+
* nonce: <nonce>,
|
|
13
|
+
* registryName: "my-registry"
|
|
14
|
+
* });
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const createPaymentTransactionUri: (params: PaymentUriParams) => string;
|
|
18
|
+
/**
|
|
19
|
+
* Parse a payment transaction URI into its components.
|
|
20
|
+
* Returns the parsed payment URI parameters.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const params = parsePaymentTransactionUri("sui:0x...?amount=1000000&coinType=0x...&nonce=...");
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const parsePaymentTransactionUri: (uri: string) => PaymentUriParams;
|
package/dist/esm/uri.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { isValidNamedType, isValidHaneulAddress, isValidHaneulObjectId } from "@haneullabs/haneul/utils";
|
|
2
|
+
import { PaymentKitUriError } from "./error.js";
|
|
3
|
+
import { SUI_PAYMENT_KIT_PROTOCOL } from "./constants.js";
|
|
4
|
+
const isValidNonce = (nonce) => {
|
|
5
|
+
return nonce.length <= 36;
|
|
6
|
+
};
|
|
7
|
+
const isValidAmount = (amount) => {
|
|
8
|
+
return amount > 0n;
|
|
9
|
+
};
|
|
10
|
+
const isValidCoinType = (coinType) => {
|
|
11
|
+
return isValidNamedType(coinType);
|
|
12
|
+
};
|
|
13
|
+
const createPaymentTransactionUri = (params) => {
|
|
14
|
+
const { receiverAddress, amount, coinType, nonce, registryId, registryName } = params;
|
|
15
|
+
const uri = new URL(SUI_PAYMENT_KIT_PROTOCOL);
|
|
16
|
+
if (isValidHaneulAddress(receiverAddress)) {
|
|
17
|
+
uri.searchParams.append("receiver", receiverAddress);
|
|
18
|
+
} else {
|
|
19
|
+
throw new PaymentKitUriError("Invalid Haneul address");
|
|
20
|
+
}
|
|
21
|
+
if (isValidAmount(amount)) {
|
|
22
|
+
uri.searchParams.append("amount", amount.toString());
|
|
23
|
+
} else {
|
|
24
|
+
throw new PaymentKitUriError("Amount must be a positive numeric string");
|
|
25
|
+
}
|
|
26
|
+
if (isValidCoinType(coinType)) {
|
|
27
|
+
uri.searchParams.append("coinType", coinType);
|
|
28
|
+
} else {
|
|
29
|
+
throw new PaymentKitUriError("Invalid Coin Type");
|
|
30
|
+
}
|
|
31
|
+
if (isValidNonce(nonce)) {
|
|
32
|
+
uri.searchParams.append("nonce", nonce);
|
|
33
|
+
} else {
|
|
34
|
+
throw new PaymentKitUriError("Nonce length exceeds maximum of 36 characters");
|
|
35
|
+
}
|
|
36
|
+
if (registryId) {
|
|
37
|
+
if (isValidHaneulObjectId(registryId)) {
|
|
38
|
+
uri.searchParams.append("registry", registryId);
|
|
39
|
+
} else {
|
|
40
|
+
throw new PaymentKitUriError("Invalid Haneul Object Id for Registry Id");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (registryName) {
|
|
44
|
+
uri.searchParams.append("registry", registryName);
|
|
45
|
+
}
|
|
46
|
+
if (params.label) {
|
|
47
|
+
uri.searchParams.append("label", params.label);
|
|
48
|
+
}
|
|
49
|
+
if (params.message) {
|
|
50
|
+
uri.searchParams.append("message", params.message);
|
|
51
|
+
}
|
|
52
|
+
if (params.iconUrl) {
|
|
53
|
+
uri.searchParams.append("iconUrl", params.iconUrl);
|
|
54
|
+
}
|
|
55
|
+
return uri.toString();
|
|
56
|
+
};
|
|
57
|
+
const parsePaymentTransactionUri = (uri) => {
|
|
58
|
+
if (!uri.startsWith(SUI_PAYMENT_KIT_PROTOCOL + "?")) {
|
|
59
|
+
throw new PaymentKitUriError("Invalid URI: Must start with sui:pay?");
|
|
60
|
+
}
|
|
61
|
+
const url = new URL(uri);
|
|
62
|
+
const params = url.searchParams;
|
|
63
|
+
const receiver = params.get("receiver");
|
|
64
|
+
const amount = params.get("amount");
|
|
65
|
+
const coinType = params.get("coinType");
|
|
66
|
+
const nonce = params.get("nonce");
|
|
67
|
+
if (!receiver || !amount || !coinType || !nonce) {
|
|
68
|
+
throw new PaymentKitUriError("Invalid URI: Missing required parameters");
|
|
69
|
+
}
|
|
70
|
+
if (!isValidHaneulAddress(receiver)) {
|
|
71
|
+
throw new PaymentKitUriError("Invalid URI: Receiver address is not valid");
|
|
72
|
+
}
|
|
73
|
+
if (!isValidCoinType(coinType)) {
|
|
74
|
+
throw new PaymentKitUriError("Invalid URI: Coin Type is not valid");
|
|
75
|
+
}
|
|
76
|
+
if (!isValidNonce(nonce)) {
|
|
77
|
+
throw new PaymentKitUriError("Invalid URI: Nonce length exceeds maximum of 36 characters");
|
|
78
|
+
}
|
|
79
|
+
const bigIntAmount = BigInt(amount);
|
|
80
|
+
if (!isValidAmount(bigIntAmount)) {
|
|
81
|
+
throw new PaymentKitUriError("Invalid URI: Amount must be a positive number");
|
|
82
|
+
}
|
|
83
|
+
const registry = params.get("registry") ?? void 0;
|
|
84
|
+
let registryId;
|
|
85
|
+
let registryName;
|
|
86
|
+
if (registry) {
|
|
87
|
+
if (isValidHaneulObjectId(registry)) {
|
|
88
|
+
registryId = registry;
|
|
89
|
+
} else {
|
|
90
|
+
registryName = registry;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const baseParams = {
|
|
94
|
+
receiverAddress: receiver,
|
|
95
|
+
amount: bigIntAmount,
|
|
96
|
+
coinType,
|
|
97
|
+
nonce,
|
|
98
|
+
label: params.get("label") ?? void 0,
|
|
99
|
+
message: params.get("message") ?? void 0,
|
|
100
|
+
iconUrl: params.get("icon") ?? void 0
|
|
101
|
+
};
|
|
102
|
+
if (registryId) {
|
|
103
|
+
return { ...baseParams, registryId };
|
|
104
|
+
}
|
|
105
|
+
return { ...baseParams, registryName };
|
|
106
|
+
};
|
|
107
|
+
export {
|
|
108
|
+
createPaymentTransactionUri,
|
|
109
|
+
parsePaymentTransactionUri
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=uri.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/uri.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isValidNamedType, isValidHaneulAddress, isValidHaneulObjectId } from '@haneullabs/haneul/utils';\nimport type { PaymentUriParams } from './types.js';\nimport { PaymentKitUriError } from './error.js';\nimport { SUI_PAYMENT_KIT_PROTOCOL } from './constants.js';\n\nconst isValidNonce = (nonce: string) => {\n\treturn nonce.length <= 36;\n};\n\nconst isValidAmount = (amount: bigint) => {\n\treturn amount > 0n;\n};\n\nconst isValidCoinType = (coinType: string) => {\n\treturn isValidNamedType(coinType);\n};\n\n/**\n * Create a payment transaction URI from the given parameters.\n * Returns the constructed URI string.\n *\n * @example\n * ```ts\n * const uri = createPaymentTransactionUri({\n * receiverAddress: \"0x...\",\n * amount: \"10000000\", (0.01 SUI)\n * coinType: \"0x2::haneul::HANEUL\",\n * nonce: <nonce>,\n * registryName: \"my-registry\"\n * });\n * ```\n */\nexport const createPaymentTransactionUri = (params: PaymentUriParams): string => {\n\tconst { receiverAddress, amount, coinType, nonce, registryId, registryName } = params;\n\n\tconst uri = new URL(SUI_PAYMENT_KIT_PROTOCOL);\n\n\tif (isValidHaneulAddress(receiverAddress)) {\n\t\turi.searchParams.append('receiver', receiverAddress);\n\t} else {\n\t\tthrow new PaymentKitUriError('Invalid Haneul address');\n\t}\n\n\tif (isValidAmount(amount)) {\n\t\turi.searchParams.append('amount', amount.toString());\n\t} else {\n\t\tthrow new PaymentKitUriError('Amount must be a positive numeric string');\n\t}\n\n\tif (isValidCoinType(coinType)) {\n\t\turi.searchParams.append('coinType', coinType);\n\t} else {\n\t\tthrow new PaymentKitUriError('Invalid Coin Type');\n\t}\n\n\tif (isValidNonce(nonce)) {\n\t\turi.searchParams.append('nonce', nonce);\n\t} else {\n\t\tthrow new PaymentKitUriError('Nonce length exceeds maximum of 36 characters');\n\t}\n\n\tif (registryId) {\n\t\tif (isValidHaneulObjectId(registryId)) {\n\t\t\turi.searchParams.append('registry', registryId);\n\t\t} else {\n\t\t\tthrow new PaymentKitUriError('Invalid Haneul Object Id for Registry Id');\n\t\t}\n\t}\n\n\tif (registryName) {\n\t\turi.searchParams.append('registry', registryName);\n\t}\n\n\tif (params.label) {\n\t\turi.searchParams.append('label', params.label);\n\t}\n\n\tif (params.message) {\n\t\turi.searchParams.append('message', params.message);\n\t}\n\n\tif (params.iconUrl) {\n\t\turi.searchParams.append('iconUrl', params.iconUrl);\n\t}\n\n\treturn uri.toString();\n};\n\n/**\n * Parse a payment transaction URI into its components.\n * Returns the parsed payment URI parameters.\n *\n * @example\n * ```ts\n * const params = parsePaymentTransactionUri(\"sui:0x...?amount=1000000&coinType=0x...&nonce=...\");\n * ```\n */\nexport const parsePaymentTransactionUri = (uri: string): PaymentUriParams => {\n\tif (!uri.startsWith(SUI_PAYMENT_KIT_PROTOCOL + '?')) {\n\t\tthrow new PaymentKitUriError('Invalid URI: Must start with sui:pay?');\n\t}\n\n\tconst url = new URL(uri);\n\n\t// Extract query parameters\n\tconst params = url.searchParams;\n\tconst receiver = params.get('receiver');\n\tconst amount = params.get('amount');\n\tconst coinType = params.get('coinType');\n\tconst nonce = params.get('nonce');\n\n\t// Amount and CoinType are required\n\tif (!receiver || !amount || !coinType || !nonce) {\n\t\tthrow new PaymentKitUriError('Invalid URI: Missing required parameters');\n\t}\n\n\t// Validate the receiver address\n\tif (!isValidHaneulAddress(receiver)) {\n\t\tthrow new PaymentKitUriError('Invalid URI: Receiver address is not valid');\n\t}\n\n\tif (!isValidCoinType(coinType)) {\n\t\tthrow new PaymentKitUriError('Invalid URI: Coin Type is not valid');\n\t}\n\n\tif (!isValidNonce(nonce)) {\n\t\tthrow new PaymentKitUriError('Invalid URI: Nonce length exceeds maximum of 36 characters');\n\t}\n\n\t// Validate amount is a valid numeric string (int or float) and positive\n\tconst bigIntAmount = BigInt(amount);\n\tif (!isValidAmount(bigIntAmount)) {\n\t\tthrow new PaymentKitUriError('Invalid URI: Amount must be a positive number');\n\t}\n\n\t// Extract optional registry parameter\n\tconst registry = params.get('registry') ?? undefined;\n\n\t// Determine if registry is an ID or name\n\tlet registryId: string | undefined;\n\tlet registryName: string | undefined;\n\n\tif (registry) {\n\t\tif (isValidHaneulObjectId(registry)) {\n\t\t\tregistryId = registry;\n\t\t} else {\n\t\t\tregistryName = registry;\n\t\t}\n\t}\n\n\tconst baseParams = {\n\t\treceiverAddress: receiver,\n\t\tamount: bigIntAmount,\n\t\tcoinType,\n\t\tnonce: nonce,\n\t\tlabel: params.get('label') ?? undefined,\n\t\tmessage: params.get('message') ?? undefined,\n\t\ticonUrl: params.get('icon') ?? undefined,\n\t};\n\n\tif (registryId) {\n\t\treturn { ...baseParams, registryId };\n\t}\n\n\treturn { ...baseParams, registryName };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getRegistryIdFromName: (registryName: string | undefined, namespaceId: string) => string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { bcs } from "@haneullabs/haneul/bcs";
|
|
2
|
+
import { deriveObjectID } from "@haneullabs/haneul/utils";
|
|
3
|
+
import { DEFAULT_REGISTRY_NAME } from "./constants.js";
|
|
4
|
+
const getRegistryIdFromName = (registryName = DEFAULT_REGISTRY_NAME, namespaceId) => {
|
|
5
|
+
return deriveObjectID(
|
|
6
|
+
namespaceId,
|
|
7
|
+
"0x1::ascii::String",
|
|
8
|
+
bcs.String.serialize(registryName).toBytes()
|
|
9
|
+
);
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
getRegistryIdFromName
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '@haneullabs/haneul/bcs';\nimport { deriveObjectID } from '@haneullabs/haneul/utils';\nimport { DEFAULT_REGISTRY_NAME } from './constants.js';\n\nexport const getRegistryIdFromName = (\n\tregistryName: string = DEFAULT_REGISTRY_NAME,\n\tnamespaceId: string,\n) => {\n\treturn deriveObjectID(\n\t\tnamespaceId,\n\t\t'0x1::ascii::String',\n\t\tbcs.String.serialize(registryName).toBytes(),\n\t);\n};\n"],
|
|
5
|
+
"mappings": "AAGA,SAAS,WAAW;AACpB,SAAS,sBAAsB;AAC/B,SAAS,6BAA6B;AAE/B,MAAM,wBAAwB,CACpC,eAAuB,uBACvB,gBACI;AACJ,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,IAAI,OAAO,UAAU,YAAY,EAAE,QAAQ;AAAA,EAC5C;AACD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|