@fairmint/canton-node-sdk 0.0.115 → 0.0.117
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 +45 -0
- package/build/src/clients/ledger-json-api/operations/v2/state/get-active-contracts.js +1 -1
- package/build/src/clients/ledger-json-api/operations/v2/state/get-active-contracts.js.map +1 -1
- package/build/src/clients/ledger-json-api/operations/v2/updates/subscribe-to-updates.js +1 -1
- package/build/src/clients/ledger-json-api/operations/v2/updates/subscribe-to-updates.js.map +1 -1
- package/build/src/clients/ledger-json-api/operations/v2/utils/event-format-builder.d.ts +22 -19
- package/build/src/clients/ledger-json-api/operations/v2/utils/event-format-builder.d.ts.map +1 -1
- package/build/src/clients/ledger-json-api/operations/v2/utils/event-format-builder.js +34 -24
- package/build/src/clients/ledger-json-api/operations/v2/utils/event-format-builder.js.map +1 -1
- package/build/src/core/http/HttpClient.d.ts +13 -5
- package/build/src/core/http/HttpClient.d.ts.map +1 -1
- package/build/src/core/http/HttpClient.js +50 -20
- package/build/src/core/http/HttpClient.js.map +1 -1
- package/build/src/utils/amulet/get-amulets-for-transfer.d.ts +28 -3
- package/build/src/utils/amulet/get-amulets-for-transfer.d.ts.map +1 -1
- package/build/src/utils/amulet/get-amulets-for-transfer.js +87 -45
- package/build/src/utils/amulet/get-amulets-for-transfer.js.map +1 -1
- package/build/src/utils/amulet/pre-approve-transfers.d.ts +2 -0
- package/build/src/utils/amulet/pre-approve-transfers.d.ts.map +1 -1
- package/build/src/utils/amulet/pre-approve-transfers.js +5 -3
- package/build/src/utils/amulet/pre-approve-transfers.js.map +1 -1
- package/example.env.localnet +103 -0
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -24,3 +24,48 @@ const version = await client.getVersion();
|
|
|
24
24
|
|
|
25
25
|
See [CONTRIBUTING.md](./CONTRIBUTING.md) for information about setting up the development
|
|
26
26
|
environment.
|
|
27
|
+
|
|
28
|
+
## Testing with LocalNet
|
|
29
|
+
|
|
30
|
+
The SDK includes comprehensive integration testing against a local Splice network (LocalNet). See
|
|
31
|
+
the [LocalNet Testing Guide](./docs/LOCALNET_TESTING.md) for detailed instructions.
|
|
32
|
+
|
|
33
|
+
### Quick Start
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Setup LocalNet
|
|
37
|
+
npm run localnet:setup
|
|
38
|
+
|
|
39
|
+
# Set environment variables (shown by setup script)
|
|
40
|
+
export LOCALNET_DIR="/tmp/splice-localnet/splice-node/docker-compose/localnet"
|
|
41
|
+
export IMAGE_TAG="0.4.22"
|
|
42
|
+
|
|
43
|
+
# Start LocalNet
|
|
44
|
+
npm run localnet:start
|
|
45
|
+
|
|
46
|
+
# Run regression tests
|
|
47
|
+
npm run test:regression
|
|
48
|
+
|
|
49
|
+
# Stop LocalNet
|
|
50
|
+
npm run localnet:stop
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Available Commands
|
|
54
|
+
|
|
55
|
+
- `npm run localnet:setup` - Download and setup LocalNet
|
|
56
|
+
- `npm run localnet:start` - Start LocalNet services
|
|
57
|
+
- `npm run localnet:stop` - Stop LocalNet services
|
|
58
|
+
- `npm run localnet:status` - Check LocalNet status
|
|
59
|
+
- `npm run test:localnet` - Run tests against LocalNet
|
|
60
|
+
- `npm run test:regression` - Alias for test:localnet
|
|
61
|
+
|
|
62
|
+
## CI/CD
|
|
63
|
+
|
|
64
|
+
The project uses CircleCI for continuous integration:
|
|
65
|
+
|
|
66
|
+
- **Unit Tests**: Run on every commit
|
|
67
|
+
- **Linting**: Code quality checks on every commit
|
|
68
|
+
- **Integration Tests**: LocalNet regression tests on every commit
|
|
69
|
+
- **Nightly Regression**: Scheduled daily tests at 2 AM UTC
|
|
70
|
+
|
|
71
|
+
See [.circleci/config.yml](./.circleci/config.yml) for the complete CI configuration.
|
|
@@ -33,7 +33,7 @@ class GetActiveContracts {
|
|
|
33
33
|
const ledgerEnd = await this.client.getLedgerEnd({});
|
|
34
34
|
activeAtOffset = ledgerEnd.offset;
|
|
35
35
|
}
|
|
36
|
-
// Build party list
|
|
36
|
+
// Build party list - default to client's party list if not provided
|
|
37
37
|
const partyList = validated.parties && validated.parties.length > 0 ? validated.parties : this.client.buildPartyList();
|
|
38
38
|
// Build event format
|
|
39
39
|
const eventFormat = (0, event_format_builder_1.buildEventFormat)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-active-contracts.js","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/state/get-active-contracts.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,4EAAyE;AAIzE,wEAAiE;AAEjE,MAAM,IAAI,GAAG,4BAAqC,CAAC;AAEnD;;;;;GAKG;AAEH,MAAM,2BAA2B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,oDAAoD;IACpD,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,qDAAqD;IACrD,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,4EAA4E;IAC5E,uBAAuB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/C,uEAAuE;IACvE,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAOH,MAAa,kBAAkB;IAC7B,YAA6B,MAA2B;QAA3B,WAAM,GAAN,MAAM,CAAqB;IAAG,CAAC;IAErD,KAAK,CAAC,OAAO,CAAC,MAAgC;QACnD,MAAM,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5D,oEAAoE;QACpE,IAAI,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;QACnC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrD,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"get-active-contracts.js","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/state/get-active-contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,7 @@ class SubscribeToUpdates {
|
|
|
62
62
|
const ledgerEnd = await this.client.getLedgerEnd({});
|
|
63
63
|
beginExclusive = ledgerEnd.offset;
|
|
64
64
|
}
|
|
65
|
-
// Build party list
|
|
65
|
+
// Build party list - default to client's party list if not provided
|
|
66
66
|
const partyList = validated.parties && validated.parties.length > 0 ? validated.parties : this.client.buildPartyList();
|
|
67
67
|
// Build event format
|
|
68
68
|
const eventFormat = (0, event_format_builder_1.buildEventFormat)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe-to-updates.js","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/updates/subscribe-to-updates.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,4EAAyE;AAIzE,wEAAiE;AAEjE,MAAM,IAAI,GAAG,aAAsB,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,+EAA2D,CAAA;IAC3D,yFAAqE,CAAA;AACvE,CAAC,EAHW,gBAAgB,gCAAhB,gBAAgB,QAG3B;AAED,MAAM,8BAA8B,GAAG,OAAC,CAAC,MAAM,CAAC;IAC9C,oDAAoD;IACpD,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,qDAAqD;IACrD,WAAW,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,4EAA4E;IAC5E,uBAAuB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/C,yFAAyF;IACzF,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,sDAAsD;IACtD,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,0DAA0D;IAC1D,oBAAoB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC5C,6DAA6D;IAC7D,qBAAqB,EAAE,OAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7C,oEAAoE;IACpE,gBAAgB,EAAE,OAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;CAC5D,CAAC,CAAC;AAaH,MAAa,kBAAkB;IAC7B,YAA6B,MAA2B;QAA3B,WAAM,GAAN,MAAM,CAAqB;IAAG,CAAC;IAErD,KAAK,CAAC,OAAO,CAAC,MAAgC;QACnD,MAAM,SAAS,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE/D,oEAAoE;QACpE,IAAI,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;QACnC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACrD,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,
|
|
1
|
+
{"version":3,"file":"subscribe-to-updates.js","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/updates/subscribe-to-updates.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,41 +3,44 @@
|
|
|
3
3
|
* provides a consistent way to construct the complex eventFormat structure from simple parameters.
|
|
4
4
|
*/
|
|
5
5
|
export interface EventFormatBuilderParams {
|
|
6
|
-
/** List of parties to scope the filter. */
|
|
6
|
+
/** List of parties to scope the filter. At least one party is required. */
|
|
7
7
|
parties: string[];
|
|
8
8
|
/** Optional template filters applied server-side. */
|
|
9
9
|
templateIds?: string[] | undefined;
|
|
10
10
|
/** Include created event blob in TemplateFilter results (default false). */
|
|
11
11
|
includeCreatedEventBlob?: boolean | undefined;
|
|
12
12
|
}
|
|
13
|
+
type FilterCumulative = Array<{
|
|
14
|
+
identifierFilter: {
|
|
15
|
+
TemplateFilter: {
|
|
16
|
+
value: {
|
|
17
|
+
templateId: string;
|
|
18
|
+
includeCreatedEventBlob: boolean;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
} | {
|
|
23
|
+
identifierFilter: {
|
|
24
|
+
WildcardFilter: {
|
|
25
|
+
value: {
|
|
26
|
+
includeCreatedEventBlob: boolean;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
}>;
|
|
13
31
|
/**
|
|
14
32
|
* Builds the eventFormat object structure used in various Ledger JSON API operations. This centralizes the logic for
|
|
15
33
|
* creating filtersByParty configurations from simple parameters.
|
|
16
34
|
*
|
|
17
35
|
* @param params - Configuration parameters for building the event format
|
|
18
36
|
* @returns An eventFormat object ready to be used in API requests
|
|
37
|
+
* @throws Error if no parties are provided
|
|
19
38
|
*/
|
|
20
39
|
export declare function buildEventFormat(params: EventFormatBuilderParams): {
|
|
21
40
|
verbose: boolean;
|
|
22
41
|
filtersByParty: Record<string, {
|
|
23
|
-
cumulative:
|
|
24
|
-
identifierFilter: {
|
|
25
|
-
TemplateFilter: {
|
|
26
|
-
value: {
|
|
27
|
-
templateId: string;
|
|
28
|
-
includeCreatedEventBlob: boolean;
|
|
29
|
-
};
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
} | {
|
|
33
|
-
identifierFilter: {
|
|
34
|
-
WildcardFilter: {
|
|
35
|
-
value: {
|
|
36
|
-
includeCreatedEventBlob: boolean;
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
}>;
|
|
42
|
+
cumulative: FilterCumulative;
|
|
41
43
|
}>;
|
|
42
44
|
};
|
|
45
|
+
export {};
|
|
43
46
|
//# sourceMappingURL=event-format-builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-format-builder.d.ts","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/utils/event-format-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,wBAAwB;IACvC,
|
|
1
|
+
{"version":3,"file":"event-format-builder.d.ts","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/utils/event-format-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,wBAAwB;IACvC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,4EAA4E;IAC5E,uBAAuB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/C;AAED,KAAK,gBAAgB,GAAG,KAAK,CACzB;IACE,gBAAgB,EAAE;QAChB,cAAc,EAAE;YACd,KAAK,EAAE;gBACL,UAAU,EAAE,MAAM,CAAC;gBACnB,uBAAuB,EAAE,OAAO,CAAC;aAClC,CAAC;SACH,CAAC;KACH,CAAC;CACH,GACD;IACE,gBAAgB,EAAE;QAChB,cAAc,EAAE;YACd,KAAK,EAAE;gBACL,uBAAuB,EAAE,OAAO,CAAC;aAClC,CAAC;SACH,CAAC;KACH,CAAC;CACH,CACJ,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,wBAAwB,GAAG;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,gBAAgB,CAAA;KAAE,CAAC,CAAC;CAClE,CA8CA"}
|
|
@@ -11,37 +11,47 @@ exports.buildEventFormat = buildEventFormat;
|
|
|
11
11
|
*
|
|
12
12
|
* @param params - Configuration parameters for building the event format
|
|
13
13
|
* @returns An eventFormat object ready to be used in API requests
|
|
14
|
+
* @throws Error if no parties are provided
|
|
14
15
|
*/
|
|
15
16
|
function buildEventFormat(params) {
|
|
17
|
+
if (params.parties.length === 0) {
|
|
18
|
+
throw new Error('At least one party is required for event format filters');
|
|
19
|
+
}
|
|
20
|
+
// Build the cumulative filter array
|
|
21
|
+
const buildCumulative = () => {
|
|
22
|
+
if (params.templateIds && params.templateIds.length > 0) {
|
|
23
|
+
return params.templateIds.map((templateId) => ({
|
|
24
|
+
identifierFilter: {
|
|
25
|
+
TemplateFilter: {
|
|
26
|
+
value: {
|
|
27
|
+
templateId,
|
|
28
|
+
includeCreatedEventBlob: params.includeCreatedEventBlob ?? false,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
if (params.includeCreatedEventBlob) {
|
|
35
|
+
return [
|
|
36
|
+
{
|
|
37
|
+
identifierFilter: {
|
|
38
|
+
WildcardFilter: {
|
|
39
|
+
value: {
|
|
40
|
+
includeCreatedEventBlob: true,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
return [];
|
|
48
|
+
};
|
|
16
49
|
return {
|
|
17
50
|
verbose: false,
|
|
18
51
|
filtersByParty: Object.fromEntries(params.parties.map((p) => [
|
|
19
52
|
p,
|
|
20
53
|
{
|
|
21
|
-
cumulative:
|
|
22
|
-
? params.templateIds.map((templateId) => ({
|
|
23
|
-
identifierFilter: {
|
|
24
|
-
TemplateFilter: {
|
|
25
|
-
value: {
|
|
26
|
-
templateId,
|
|
27
|
-
includeCreatedEventBlob: params.includeCreatedEventBlob ?? false,
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
}))
|
|
32
|
-
: params.includeCreatedEventBlob
|
|
33
|
-
? [
|
|
34
|
-
{
|
|
35
|
-
identifierFilter: {
|
|
36
|
-
WildcardFilter: {
|
|
37
|
-
value: {
|
|
38
|
-
includeCreatedEventBlob: true,
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
]
|
|
44
|
-
: [],
|
|
54
|
+
cumulative: buildCumulative(),
|
|
45
55
|
},
|
|
46
56
|
])),
|
|
47
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-format-builder.js","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/utils/event-format-builder.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"event-format-builder.js","sourceRoot":"","sources":["../../../../../../../src/clients/ledger-json-api/operations/v2/utils/event-format-builder.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAyCH,4CAiDC;AAzDD;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAAC,MAAgC;IAI/D,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,oCAAoC;IACpC,MAAM,eAAe,GAAG,GAAqB,EAAE;QAC7C,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC7C,gBAAgB,EAAE;oBAChB,cAAc,EAAE;wBACd,KAAK,EAAE;4BACL,UAAU;4BACV,uBAAuB,EAAE,MAAM,CAAC,uBAAuB,IAAI,KAAK;yBACjE;qBACF;iBACF;aACF,CAAC,CAAC,CAAC;QACN,CAAC;QACD,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;YACnC,OAAO;gBACL;oBACE,gBAAgB,EAAE;wBAChB,cAAc,EAAE;4BACd,KAAK,EAAE;gCACL,uBAAuB,EAAE,IAAI;6BAC9B;yBACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,KAAK;QACd,cAAc,EAAE,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACxB,CAAC;YACD;gBACE,UAAU,EAAE,eAAe,EAAE;aAC9B;SACF,CAAC,CACH;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -5,17 +5,25 @@ export declare class HttpClient {
|
|
|
5
5
|
private readonly axiosInstance;
|
|
6
6
|
private readonly logger;
|
|
7
7
|
constructor(logger?: Logger);
|
|
8
|
-
makeGetRequest<T>(url: string, config?: RequestConfig,
|
|
9
|
-
makePostRequest<T>(url: string, data: unknown, config?: RequestConfig,
|
|
10
|
-
makeDeleteRequest<T>(url: string, config?: RequestConfig,
|
|
11
|
-
makePatchRequest<T>(url: string, data: unknown, config?: RequestConfig,
|
|
8
|
+
makeGetRequest<T>(url: string, config?: RequestConfig, _retryCount?: number): Promise<T>;
|
|
9
|
+
makePostRequest<T>(url: string, data: unknown, config?: RequestConfig, _retryCount?: number): Promise<T>;
|
|
10
|
+
makeDeleteRequest<T>(url: string, config?: RequestConfig, _retryCount?: number): Promise<T>;
|
|
11
|
+
makePatchRequest<T>(url: string, data: unknown, config?: RequestConfig, _retryCount?: number): Promise<T>;
|
|
12
12
|
private buildHeaders;
|
|
13
13
|
setBearerToken(token: string): void;
|
|
14
14
|
clearBearerToken(): void;
|
|
15
15
|
private logRequestResponse;
|
|
16
16
|
private handleRequestError;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Determines whether a request error is retryable. Retries on:
|
|
19
|
+
*
|
|
20
|
+
* - HTTP 5xx server errors
|
|
21
|
+
* - Network errors
|
|
22
|
+
* - Canton-specific transient errors: UNKNOWN_CONTRACT_SYNCHRONIZERS (400), SEQUENCER_BACKPRESSURE (409), HTTP 503
|
|
23
|
+
*/
|
|
18
24
|
private isRetryableError;
|
|
25
|
+
/** Sleep for the specified number of milliseconds */
|
|
26
|
+
private sleep;
|
|
19
27
|
/**
|
|
20
28
|
* Prepares request data for retry by updating commandId fields to avoid duplicate command rejection. If the data
|
|
21
29
|
* contains a commandId field, appends a retry suffix with timestamp to make it unique.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/http/HttpClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,6EAA6E;AAC7E,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBAEhC,MAAM,CAAC,EAAE,MAAM;IAKd,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../../../src/core/http/HttpClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,6EAA6E;AAC7E,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;gBAEhC,MAAM,CAAC,EAAE,MAAM;IAKd,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,EAAE,WAAW,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IA2BvF,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAE,aAAkB,EAAE,WAAW,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IA2BvG,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,aAAkB,EAAE,WAAW,SAAI,GAAG,OAAO,CAAC,CAAC,CAAC;IA0B1F,gBAAgB,CAAC,CAAC,EAC7B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,MAAM,GAAE,aAAkB,EAC1B,WAAW,SAAI,GACd,OAAO,CAAC,CAAC,CAAC;IA2Bb,OAAO,CAAC,YAAY;IAiBb,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,gBAAgB,IAAI,IAAI;YAIjB,kBAAkB;IAMhC,OAAO,CAAC,kBAAkB;IAa1B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IA+BxB,qDAAqD;YACvC,KAAK;IAInB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;CAQ5B"}
|
|
@@ -12,7 +12,7 @@ class HttpClient {
|
|
|
12
12
|
this.axiosInstance = axios_1.default.create();
|
|
13
13
|
this.logger = logger;
|
|
14
14
|
}
|
|
15
|
-
async makeGetRequest(url, config = {},
|
|
15
|
+
async makeGetRequest(url, config = {}, _retryCount = 0) {
|
|
16
16
|
try {
|
|
17
17
|
const headers = this.buildHeaders(config);
|
|
18
18
|
const response = await this.axiosInstance.get(url, { headers });
|
|
@@ -20,10 +20,11 @@ class HttpClient {
|
|
|
20
20
|
return response.data;
|
|
21
21
|
}
|
|
22
22
|
catch (error) {
|
|
23
|
-
// Attempt
|
|
24
|
-
if (
|
|
25
|
-
await this.logRequestResponse(url, { method: 'GET', retry:
|
|
26
|
-
|
|
23
|
+
// Attempt up to 3 retries for transient errors
|
|
24
|
+
if (_retryCount < 3 && this.isRetryableError(error)) {
|
|
25
|
+
await this.logRequestResponse(url, { method: 'GET', retry: _retryCount + 1 }, `Retrying after error (attempt ${_retryCount + 1}/3): ${axios_1.default.isAxiosError(error) ? (error.response?.status ?? 'network error') : String(error)}`);
|
|
26
|
+
await this.sleep(6000);
|
|
27
|
+
return this.makeGetRequest(url, config, _retryCount + 1);
|
|
27
28
|
}
|
|
28
29
|
// Log the error response before throwing
|
|
29
30
|
if (axios_1.default.isAxiosError(error)) {
|
|
@@ -32,7 +33,7 @@ class HttpClient {
|
|
|
32
33
|
throw this.handleRequestError(error);
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
|
-
async makePostRequest(url, data, config = {},
|
|
36
|
+
async makePostRequest(url, data, config = {}, _retryCount = 0) {
|
|
36
37
|
try {
|
|
37
38
|
const headers = this.buildHeaders(config);
|
|
38
39
|
const response = await this.axiosInstance.post(url, data, { headers });
|
|
@@ -40,10 +41,11 @@ class HttpClient {
|
|
|
40
41
|
return response.data;
|
|
41
42
|
}
|
|
42
43
|
catch (error) {
|
|
43
|
-
if (
|
|
44
|
-
await this.logRequestResponse(url, { method: 'POST', retry:
|
|
44
|
+
if (_retryCount < 3 && this.isRetryableError(error)) {
|
|
45
|
+
await this.logRequestResponse(url, { method: 'POST', retry: _retryCount + 1, data }, `Retrying after error (attempt ${_retryCount + 1}/3): ${axios_1.default.isAxiosError(error) ? (error.response?.status ?? 'network error') : String(error)}`);
|
|
46
|
+
await this.sleep(6000);
|
|
45
47
|
const retryData = this.prepareDataForRetry(data);
|
|
46
|
-
return this.makePostRequest(url, retryData, config,
|
|
48
|
+
return this.makePostRequest(url, retryData, config, _retryCount + 1);
|
|
47
49
|
}
|
|
48
50
|
// Log the error response before throwing
|
|
49
51
|
if (axios_1.default.isAxiosError(error)) {
|
|
@@ -52,7 +54,7 @@ class HttpClient {
|
|
|
52
54
|
throw this.handleRequestError(error);
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
|
-
async makeDeleteRequest(url, config = {},
|
|
57
|
+
async makeDeleteRequest(url, config = {}, _retryCount = 0) {
|
|
56
58
|
try {
|
|
57
59
|
const headers = this.buildHeaders(config);
|
|
58
60
|
const response = await this.axiosInstance.delete(url, { headers });
|
|
@@ -60,9 +62,10 @@ class HttpClient {
|
|
|
60
62
|
return response.data;
|
|
61
63
|
}
|
|
62
64
|
catch (error) {
|
|
63
|
-
if (
|
|
64
|
-
await this.logRequestResponse(url, { method: 'DELETE', retry:
|
|
65
|
-
|
|
65
|
+
if (_retryCount < 3 && this.isRetryableError(error)) {
|
|
66
|
+
await this.logRequestResponse(url, { method: 'DELETE', retry: _retryCount + 1 }, `Retrying after error (attempt ${_retryCount + 1}/3): ${axios_1.default.isAxiosError(error) ? (error.response?.status ?? 'network error') : String(error)}`);
|
|
67
|
+
await this.sleep(6000);
|
|
68
|
+
return this.makeDeleteRequest(url, config, _retryCount + 1);
|
|
66
69
|
}
|
|
67
70
|
// Log the error response before throwing
|
|
68
71
|
if (axios_1.default.isAxiosError(error)) {
|
|
@@ -71,7 +74,7 @@ class HttpClient {
|
|
|
71
74
|
throw this.handleRequestError(error);
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
|
-
async makePatchRequest(url, data, config = {},
|
|
77
|
+
async makePatchRequest(url, data, config = {}, _retryCount = 0) {
|
|
75
78
|
try {
|
|
76
79
|
const headers = this.buildHeaders(config);
|
|
77
80
|
const response = await this.axiosInstance.patch(url, data, { headers });
|
|
@@ -79,10 +82,11 @@ class HttpClient {
|
|
|
79
82
|
return response.data;
|
|
80
83
|
}
|
|
81
84
|
catch (error) {
|
|
82
|
-
if (
|
|
83
|
-
await this.logRequestResponse(url, { method: 'PATCH', retry:
|
|
85
|
+
if (_retryCount < 3 && this.isRetryableError(error)) {
|
|
86
|
+
await this.logRequestResponse(url, { method: 'PATCH', retry: _retryCount + 1, data }, `Retrying after error (attempt ${_retryCount + 1}/3): ${axios_1.default.isAxiosError(error) ? (error.response?.status ?? 'network error') : String(error)}`);
|
|
87
|
+
await this.sleep(6000);
|
|
84
88
|
const retryData = this.prepareDataForRetry(data);
|
|
85
|
-
return this.makePatchRequest(url, retryData, config,
|
|
89
|
+
return this.makePatchRequest(url, retryData, config, _retryCount + 1);
|
|
86
90
|
}
|
|
87
91
|
// Log the error response before throwing
|
|
88
92
|
if (axios_1.default.isAxiosError(error)) {
|
|
@@ -128,16 +132,42 @@ class HttpClient {
|
|
|
128
132
|
}
|
|
129
133
|
return new errors_1.NetworkError(`Request failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
130
134
|
}
|
|
131
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* Determines whether a request error is retryable. Retries on:
|
|
137
|
+
*
|
|
138
|
+
* - HTTP 5xx server errors
|
|
139
|
+
* - Network errors
|
|
140
|
+
* - Canton-specific transient errors: UNKNOWN_CONTRACT_SYNCHRONIZERS (400), SEQUENCER_BACKPRESSURE (409), HTTP 503
|
|
141
|
+
*/
|
|
132
142
|
isRetryableError(error) {
|
|
133
143
|
if (axios_1.default.isAxiosError(error)) {
|
|
134
144
|
const status = error.response?.status;
|
|
135
|
-
|
|
136
|
-
|
|
145
|
+
const data = error.response?.data ?? {};
|
|
146
|
+
const { code } = data;
|
|
147
|
+
// Retry on undefined status (network error)
|
|
148
|
+
if (status === undefined) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
// Retry on 5xx server errors
|
|
152
|
+
if (status >= 500 && status < 600) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
// Retry on Canton-specific transient errors
|
|
156
|
+
if (status === 400 && code === 'UNKNOWN_CONTRACT_SYNCHRONIZERS') {
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
if (status === 409 && code === 'SEQUENCER_BACKPRESSURE') {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
137
163
|
}
|
|
138
164
|
// Only retry non-Axios errors that are instances of NetworkError
|
|
139
165
|
return error instanceof errors_1.NetworkError;
|
|
140
166
|
}
|
|
167
|
+
/** Sleep for the specified number of milliseconds */
|
|
168
|
+
async sleep(ms) {
|
|
169
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
170
|
+
}
|
|
141
171
|
/**
|
|
142
172
|
* Prepares request data for retry by updating commandId fields to avoid duplicate command rejection. If the data
|
|
143
173
|
* contains a commandId field, appends a retry suffix with timestamp to make it unique.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../../../src/core/http/HttpClient.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAkD;AAClD,sCAAmD;AAInD,6EAA6E;AAC7E,MAAa,UAAU;IAIrB,YAAY,MAAe;QACzB,IAAI,CAAC,aAAa,GAAG,eAAK,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,cAAc,CAAI,GAAW,EAAE,SAAwB,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../../../src/core/http/HttpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,17 +5,42 @@ export interface AmuletForTransfer {
|
|
|
5
5
|
effectiveAmount: string;
|
|
6
6
|
owner: string;
|
|
7
7
|
}
|
|
8
|
+
export type TransferInputForTransfer = {
|
|
9
|
+
tag: 'InputAmulet';
|
|
10
|
+
contractId: string;
|
|
11
|
+
templateId: string;
|
|
12
|
+
effectiveAmount: string;
|
|
13
|
+
owner: string;
|
|
14
|
+
} | {
|
|
15
|
+
tag: 'InputAppRewardCoupon';
|
|
16
|
+
contractId: string;
|
|
17
|
+
templateId: string;
|
|
18
|
+
effectiveAmount: string;
|
|
19
|
+
beneficiary: string;
|
|
20
|
+
} | {
|
|
21
|
+
tag: 'InputValidatorRewardCoupon';
|
|
22
|
+
contractId: string;
|
|
23
|
+
templateId: string;
|
|
24
|
+
effectiveAmount: string;
|
|
25
|
+
beneficiary: string;
|
|
26
|
+
};
|
|
8
27
|
export interface GetAmuletsForTransferParams {
|
|
9
28
|
/** Ledger JSON API client for querying active contracts */
|
|
10
29
|
jsonApiClient: LedgerJsonApiClient;
|
|
11
30
|
/** Party IDs to read as (first one is used as sender) */
|
|
12
31
|
readAs?: string[];
|
|
32
|
+
/**
|
|
33
|
+
* If true, returns all valid transfer inputs (Amulet, AppRewardCoupon, ValidatorRewardCoupon). Defaults to false
|
|
34
|
+
* (only Amulet).
|
|
35
|
+
*/
|
|
36
|
+
includeAllTransferInputs?: boolean;
|
|
13
37
|
}
|
|
14
38
|
/**
|
|
15
|
-
* Gets unlocked amulets owned by the sender party that can be used for transfers
|
|
39
|
+
* Gets unlocked amulets owned by the sender party that can be used for transfers. Optionally returns all valid transfer
|
|
40
|
+
* inputs (Amulet, AppRewardCoupon, ValidatorRewardCoupon).
|
|
16
41
|
*
|
|
17
|
-
* @param params - Parameters for getting
|
|
18
|
-
* @returns Promise resolving to array of
|
|
42
|
+
* @param params - Parameters for getting transfer inputs
|
|
43
|
+
* @returns Promise resolving to array of transfer inputs suitable for transfer
|
|
19
44
|
*/
|
|
20
45
|
export declare function getAmuletsForTransfer(params: GetAmuletsForTransferParams): Promise<AmuletForTransfer[]>;
|
|
21
46
|
//# sourceMappingURL=get-amulets-for-transfer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-amulets-for-transfer.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/get-amulets-for-transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,2BAA2B;IAC1C,2DAA2D;IAC3D,aAAa,EAAE,mBAAmB,CAAC;IACnC,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"get-amulets-for-transfer.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/get-amulets-for-transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,GAAG,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACtG;IACE,GAAG,EAAE,sBAAsB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,GAAG,EAAE,4BAA4B,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEN,MAAM,WAAW,2BAA2B;IAC1C,2DAA2D;IAC3D,aAAa,EAAE,mBAAmB,CAAC;IACnC,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AA0BD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA+I7G"}
|
|
@@ -2,23 +2,32 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAmuletsForTransfer = getAmuletsForTransfer;
|
|
4
4
|
/**
|
|
5
|
-
* Gets unlocked amulets owned by the sender party that can be used for transfers
|
|
5
|
+
* Gets unlocked amulets owned by the sender party that can be used for transfers. Optionally returns all valid transfer
|
|
6
|
+
* inputs (Amulet, AppRewardCoupon, ValidatorRewardCoupon).
|
|
6
7
|
*
|
|
7
|
-
* @param params - Parameters for getting
|
|
8
|
-
* @returns Promise resolving to array of
|
|
8
|
+
* @param params - Parameters for getting transfer inputs
|
|
9
|
+
* @returns Promise resolving to array of transfer inputs suitable for transfer
|
|
9
10
|
*/
|
|
10
11
|
async function getAmuletsForTransfer(params) {
|
|
11
|
-
const { jsonApiClient, readAs } = params;
|
|
12
|
-
// Query ledger for active contracts for this party
|
|
12
|
+
const { jsonApiClient, readAs, includeAllTransferInputs } = params;
|
|
13
|
+
// Query ledger for active contracts for this party
|
|
13
14
|
if (!readAs?.[0]) {
|
|
14
15
|
return [];
|
|
15
16
|
}
|
|
16
17
|
const senderParty = readAs[0];
|
|
18
|
+
// Build template IDs to query based on includeAllTransferInputs flag
|
|
19
|
+
const templateIds = includeAllTransferInputs
|
|
20
|
+
? [
|
|
21
|
+
'#splice-amulet:Splice.Amulet:Amulet',
|
|
22
|
+
'#splice-amulet:Splice.Amulet:AppRewardCoupon',
|
|
23
|
+
'#splice-amulet:Splice.Amulet:ValidatorRewardCoupon',
|
|
24
|
+
]
|
|
25
|
+
: ['#splice-amulet:Splice.Amulet:Amulet'];
|
|
17
26
|
const activeContracts = await jsonApiClient.getActiveContracts({
|
|
18
27
|
parties: [senderParty],
|
|
19
|
-
templateIds
|
|
28
|
+
templateIds,
|
|
20
29
|
});
|
|
21
|
-
const
|
|
30
|
+
const allContracts = [];
|
|
22
31
|
const contractsArr = Array.isArray(activeContracts) ? activeContracts : [];
|
|
23
32
|
contractsArr.forEach((ctr) => {
|
|
24
33
|
const typedCtr = ctr;
|
|
@@ -38,56 +47,89 @@ async function getAmuletsForTransfer(params) {
|
|
|
38
47
|
}
|
|
39
48
|
if (!payload || !templateId || !contractId)
|
|
40
49
|
return;
|
|
50
|
+
// Filter for valid transfer input contracts
|
|
41
51
|
const isUnlockedAmulet = templateId.includes('Splice.Amulet:Amulet') && !templateId.includes('LockedAmulet');
|
|
42
|
-
|
|
52
|
+
const isAppRewardCoupon = templateId.includes('AppRewardCoupon');
|
|
53
|
+
const isValidatorRewardCoupon = templateId.includes('ValidatorRewardCoupon');
|
|
54
|
+
if (!isUnlockedAmulet && !isAppRewardCoupon && !isValidatorRewardCoupon)
|
|
43
55
|
return;
|
|
44
|
-
|
|
56
|
+
allContracts.push({ contractId, templateId, payload });
|
|
45
57
|
});
|
|
46
|
-
// Helper to extract owner and numeric amount from diverse
|
|
47
|
-
const extract = (
|
|
48
|
-
const
|
|
49
|
-
const payload =
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
// Helper to extract owner/beneficiary and numeric amount from diverse contract shapes
|
|
59
|
+
const extract = (contract) => {
|
|
60
|
+
const contractPayload = 'payload' in contract ? contract.payload : undefined;
|
|
61
|
+
const payload = contractPayload ?? contract.contract?.contract?.payload ?? {};
|
|
62
|
+
const contractRecord = contract;
|
|
63
|
+
const templateId = 'templateId' in contract ? contract.templateId : undefined;
|
|
64
|
+
// Extract owner/beneficiary based on contract type
|
|
65
|
+
let ownerFull = '';
|
|
66
|
+
if (templateId?.includes('AppRewardCoupon') || templateId?.includes('ValidatorRewardCoupon')) {
|
|
67
|
+
// For coupons, beneficiary is optional and falls back to provider
|
|
68
|
+
const beneficiary = payload['beneficiary'];
|
|
69
|
+
const provider = payload['provider'];
|
|
70
|
+
ownerFull = beneficiary ?? provider ?? '';
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// For amulets, use owner field
|
|
74
|
+
ownerFull =
|
|
75
|
+
payload['owner'] ??
|
|
76
|
+
contractRecord['owner'] ??
|
|
77
|
+
contractRecord['partyId'] ??
|
|
78
|
+
contractRecord['party_id'] ??
|
|
79
|
+
'';
|
|
80
|
+
}
|
|
81
|
+
// Extract amount based on contract type
|
|
82
|
+
let rawAmount = '0';
|
|
83
|
+
if (templateId?.includes('AppRewardCoupon') || templateId?.includes('ValidatorRewardCoupon')) {
|
|
84
|
+
// For coupons, amount is directly in payload
|
|
85
|
+
rawAmount = payload['amount'] ?? '0';
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// For amulets, amount might be nested
|
|
89
|
+
const rawAmountCandidate = payload['amount'] ??
|
|
90
|
+
contractRecord['amount'] ??
|
|
91
|
+
contractRecord['effective_amount'] ??
|
|
92
|
+
contractRecord['effectiveAmount'] ??
|
|
93
|
+
contractRecord['initialAmount'] ??
|
|
94
|
+
'0';
|
|
95
|
+
rawAmount = rawAmountCandidate;
|
|
96
|
+
if (typeof rawAmountCandidate === 'object') {
|
|
97
|
+
rawAmount = rawAmountCandidate['initialAmount'] ?? '0';
|
|
98
|
+
}
|
|
65
99
|
}
|
|
66
100
|
const numericAmount = parseFloat(rawAmount);
|
|
67
101
|
return { owner: ownerFull, numericAmount };
|
|
68
102
|
};
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const { owner, numericAmount } = extract(a);
|
|
103
|
+
// Filter contracts owned by sender (readAs[0]) and with positive balance
|
|
104
|
+
const partyContracts = allContracts.filter((c) => {
|
|
105
|
+
const { owner, numericAmount } = extract(c);
|
|
73
106
|
return numericAmount > 0 && owner === senderParty;
|
|
74
107
|
});
|
|
75
|
-
if (
|
|
108
|
+
if (partyContracts.length === 0) {
|
|
76
109
|
return [];
|
|
77
110
|
}
|
|
78
|
-
// Sort biggest → smallest so we pick high-value
|
|
79
|
-
|
|
80
|
-
//
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
111
|
+
// Sort biggest → smallest so we pick high-value contracts first
|
|
112
|
+
partyContracts.sort((a, b) => extract(b).numericAmount - extract(a).numericAmount);
|
|
113
|
+
// Map to the structure expected by buildAmuletInputs (maintaining backward compatibility)
|
|
114
|
+
const result = partyContracts.map((c) => {
|
|
115
|
+
const { payload, templateId } = c;
|
|
116
|
+
// Extract amount based on contract type
|
|
117
|
+
let effectiveAmount = '0';
|
|
118
|
+
if (templateId.includes('AppRewardCoupon') || templateId.includes('ValidatorRewardCoupon')) {
|
|
119
|
+
// For coupons, amount is directly in payload
|
|
120
|
+
effectiveAmount = payload['amount'] ?? '0';
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// For amulets, amount might be nested
|
|
124
|
+
const amtObj = payload['amount'] ?? {};
|
|
125
|
+
const intAmount = typeof amtObj === 'object' ? amtObj['initialAmount'] : amtObj;
|
|
126
|
+
effectiveAmount = intAmount ?? '0';
|
|
127
|
+
}
|
|
86
128
|
return {
|
|
87
|
-
contractId:
|
|
88
|
-
templateId:
|
|
89
|
-
effectiveAmount
|
|
90
|
-
owner:
|
|
129
|
+
contractId: c.contractId,
|
|
130
|
+
templateId: c.templateId,
|
|
131
|
+
effectiveAmount,
|
|
132
|
+
owner: extract(c).owner,
|
|
91
133
|
};
|
|
92
134
|
});
|
|
93
135
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-amulets-for-transfer.js","sourceRoot":"","sources":["../../../../src/utils/amulet/get-amulets-for-transfer.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"get-amulets-for-transfer.js","sourceRoot":"","sources":["../../../../src/utils/amulet/get-amulets-for-transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import { type ValidatorApiClient } from '../../clients/validator-api';
|
|
|
3
3
|
export interface PreApproveTransfersParams {
|
|
4
4
|
/** Party ID to enable pre-approved transfers for (receiver) */
|
|
5
5
|
receiverPartyId: string;
|
|
6
|
+
/** Party ID of the provider (defaults to receiverPartyId if not specified) */
|
|
7
|
+
providerPartyId?: string;
|
|
6
8
|
/** When the pre-approval expires (defaults to 1 day from now) */
|
|
7
9
|
expiresAt?: Date;
|
|
8
10
|
/** Contract details for disclosed contracts (optional - will be fetched if not provided) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-approve-transfers.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAItE,MAAM,WAAW,yBAAyB;IACxC,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,4FAA4F;IAC5F,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,eAAe,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;QACvE,mBAAmB,CAAC,EAAE,KAAK,CAAC;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,gBAAgB,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;KACzE,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,kBAAkB,EACnC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,
|
|
1
|
+
{"version":3,"file":"pre-approve-transfers.d.ts","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAGzE,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAItE,MAAM,WAAW,yBAAyB;IACxC,+DAA+D;IAC/D,eAAe,EAAE,MAAM,CAAC;IACxB,8EAA8E;IAC9E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,4FAA4F;IAC5F,eAAe,CAAC,EAAE;QAChB,WAAW,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,eAAe,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;QACvE,mBAAmB,CAAC,EAAE,KAAK,CAAC;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAClF,gBAAgB,CAAC,EAAE;YAAE,gBAAgB,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAA;SAAE,CAAC;KACzE,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,mBAAmB,EACjC,eAAe,EAAE,kBAAkB,EACnC,MAAM,EAAE,yBAAyB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CA2HpC"}
|
|
@@ -12,8 +12,10 @@ const get_amulets_for_transfer_1 = require("./get-amulets-for-transfer");
|
|
|
12
12
|
* @returns Promise resolving to the pre-approval result
|
|
13
13
|
*/
|
|
14
14
|
async function preApproveTransfers(ledgerClient, validatorClient, params) {
|
|
15
|
-
// Set default expiration to 1
|
|
16
|
-
const expiresAt = params.expiresAt ?? new Date(Date.now() + 24 * 60 * 60 * 1000);
|
|
15
|
+
// Set default expiration to 1 year from now if not provided
|
|
16
|
+
const expiresAt = params.expiresAt ?? new Date(Date.now() + 365 * 24 * 60 * 60 * 1000);
|
|
17
|
+
// Use receiverPartyId as provider if not specified
|
|
18
|
+
const providerPartyId = params.providerPartyId ?? params.receiverPartyId;
|
|
17
19
|
// Get network information
|
|
18
20
|
const [amuletRules, dsoPartyId, miningRoundContext, featuredAppRight] = await Promise.all([
|
|
19
21
|
validatorClient.getAmuletRules(),
|
|
@@ -80,7 +82,7 @@ async function preApproveTransfers(ledgerClient, validatorClient, params) {
|
|
|
80
82
|
},
|
|
81
83
|
inputs,
|
|
82
84
|
receiver: params.receiverPartyId,
|
|
83
|
-
provider:
|
|
85
|
+
provider: providerPartyId,
|
|
84
86
|
expiresAt: expiresAt.toISOString(),
|
|
85
87
|
expectedDso: dsoPartyId.dso_party_id,
|
|
86
88
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pre-approve-transfers.js","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pre-approve-transfers.js","sourceRoot":"","sources":["../../../../src/utils/amulet/pre-approve-transfers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
DOTENV_CONFIG_QUIET=true
|
|
2
|
+
|
|
3
|
+
# ============================================================================
|
|
4
|
+
# Canton Node SDK LocalNet Configuration
|
|
5
|
+
# ============================================================================
|
|
6
|
+
# This configuration is used for testing against a local Splice network
|
|
7
|
+
# Copy this file to .env when running tests locally against LocalNet
|
|
8
|
+
|
|
9
|
+
# =============================================================================
|
|
10
|
+
# CURRENT SELECTION
|
|
11
|
+
# =============================================================================
|
|
12
|
+
CANTON_CURRENT_NETWORK=localnet
|
|
13
|
+
CANTON_CURRENT_PROVIDER=app-provider
|
|
14
|
+
|
|
15
|
+
# =============================================================================
|
|
16
|
+
# LOCALNET - APP-PROVIDER CONFIGURATION
|
|
17
|
+
# =============================================================================
|
|
18
|
+
# LocalNet uses predictable ports based on the pattern: {validator_prefix}${port_suffix}
|
|
19
|
+
# App Provider uses prefix "3", so:
|
|
20
|
+
# - JSON API: 39750 (3 + 9750)
|
|
21
|
+
# - Validator API: 39030 (3 + 9030)
|
|
22
|
+
# - Admin API: 39020 (3 + 9020)
|
|
23
|
+
# - Ledger API: 39010 (3 + 9010)
|
|
24
|
+
# - Healthcheck: 39000 (3 + 9000)
|
|
25
|
+
|
|
26
|
+
# Ledger JSON API Configuration
|
|
27
|
+
CANTON_LOCALNET_APP_PROVIDER_LEDGER_JSON_API_URI=http://localhost:39750
|
|
28
|
+
CANTON_LOCALNET_APP_PROVIDER_LEDGER_JSON_API_CLIENT_ID=admin
|
|
29
|
+
CANTON_LOCALNET_APP_PROVIDER_LEDGER_JSON_API_CLIENT_SECRET=admin
|
|
30
|
+
|
|
31
|
+
# Validator API Configuration
|
|
32
|
+
CANTON_LOCALNET_APP_PROVIDER_VALIDATOR_API_URI=http://localhost:39030
|
|
33
|
+
CANTON_LOCALNET_APP_PROVIDER_VALIDATOR_API_CLIENT_ID=admin
|
|
34
|
+
CANTON_LOCALNET_APP_PROVIDER_VALIDATOR_API_CLIENT_SECRET=admin
|
|
35
|
+
|
|
36
|
+
# Scan API Configuration
|
|
37
|
+
CANTON_LOCALNET_APP_PROVIDER_SCAN_API_URI=http://localhost:4000/api/scan
|
|
38
|
+
CANTON_LOCALNET_APP_PROVIDER_SCAN_API_CLIENT_ID=admin
|
|
39
|
+
CANTON_LOCALNET_APP_PROVIDER_SCAN_API_CLIENT_SECRET=admin
|
|
40
|
+
|
|
41
|
+
# Auth URL (LocalNet uses simple auth, not OAuth)
|
|
42
|
+
CANTON_LOCALNET_APP_PROVIDER_AUTH_URL=http://localhost:3000/auth
|
|
43
|
+
|
|
44
|
+
# Party and User IDs
|
|
45
|
+
# Note: These need to be discovered from your LocalNet instance
|
|
46
|
+
# You can find them by accessing the Canton Console or wallet UI
|
|
47
|
+
CANTON_LOCALNET_APP_PROVIDER_PARTY_ID=
|
|
48
|
+
CANTON_LOCALNET_APP_PROVIDER_USER_ID=app-provider
|
|
49
|
+
|
|
50
|
+
# =============================================================================
|
|
51
|
+
# LOCALNET - APP-USER CONFIGURATION (Optional)
|
|
52
|
+
# =============================================================================
|
|
53
|
+
# App User uses prefix "2", so:
|
|
54
|
+
# - JSON API: 29750 (2 + 9750)
|
|
55
|
+
# - Validator API: 29030 (2 + 9030)
|
|
56
|
+
|
|
57
|
+
CANTON_LOCALNET_APP_USER_LEDGER_JSON_API_URI=http://localhost:29750
|
|
58
|
+
CANTON_LOCALNET_APP_USER_LEDGER_JSON_API_CLIENT_ID=admin
|
|
59
|
+
CANTON_LOCALNET_APP_USER_LEDGER_JSON_API_CLIENT_SECRET=admin
|
|
60
|
+
|
|
61
|
+
CANTON_LOCALNET_APP_USER_VALIDATOR_API_URI=http://localhost:29030
|
|
62
|
+
CANTON_LOCALNET_APP_USER_VALIDATOR_API_CLIENT_ID=admin
|
|
63
|
+
CANTON_LOCALNET_APP_USER_VALIDATOR_API_CLIENT_SECRET=admin
|
|
64
|
+
|
|
65
|
+
CANTON_LOCALNET_APP_USER_AUTH_URL=http://localhost:2000/auth
|
|
66
|
+
CANTON_LOCALNET_APP_USER_PARTY_ID=
|
|
67
|
+
CANTON_LOCALNET_APP_USER_USER_ID=app-user
|
|
68
|
+
|
|
69
|
+
# =============================================================================
|
|
70
|
+
# LOCALNET - SUPER VALIDATOR CONFIGURATION (Optional)
|
|
71
|
+
# =============================================================================
|
|
72
|
+
# Super Validator uses prefix "4", so:
|
|
73
|
+
# - JSON API: 49750 (4 + 9750)
|
|
74
|
+
# - Validator API: 49030 (4 + 9030)
|
|
75
|
+
|
|
76
|
+
CANTON_LOCALNET_SV_LEDGER_JSON_API_URI=http://localhost:49750
|
|
77
|
+
CANTON_LOCALNET_SV_LEDGER_JSON_API_CLIENT_ID=admin
|
|
78
|
+
CANTON_LOCALNET_SV_LEDGER_JSON_API_CLIENT_SECRET=admin
|
|
79
|
+
|
|
80
|
+
CANTON_LOCALNET_SV_VALIDATOR_API_URI=http://localhost:49030
|
|
81
|
+
CANTON_LOCALNET_SV_VALIDATOR_API_CLIENT_ID=admin
|
|
82
|
+
CANTON_LOCALNET_SV_VALIDATOR_API_CLIENT_SECRET=admin
|
|
83
|
+
|
|
84
|
+
CANTON_LOCALNET_SV_AUTH_URL=http://localhost:4000/auth
|
|
85
|
+
CANTON_LOCALNET_SV_PARTY_ID=
|
|
86
|
+
CANTON_LOCALNET_SV_USER_ID=sv
|
|
87
|
+
|
|
88
|
+
# =============================================================================
|
|
89
|
+
# LIGHTHOUSE API CONFIGURATION
|
|
90
|
+
# =============================================================================
|
|
91
|
+
# Lighthouse API is typically not available in LocalNet
|
|
92
|
+
# CANTON_LOCALNET_LIGHTHOUSE_API_URI=http://localhost:8080/api
|
|
93
|
+
|
|
94
|
+
# =============================================================================
|
|
95
|
+
# Contract IDs
|
|
96
|
+
# =============================================================================
|
|
97
|
+
# These contract IDs need to be discovered from your LocalNet instance
|
|
98
|
+
# You can find them through the Scan UI or by querying the ledger
|
|
99
|
+
CANTON_VALIDATOR_WALLET_APP_INSTALL_CONTRACT_ID_LOCALNET=
|
|
100
|
+
CANTON_AMULET_RULES_CONTRACT_ID_LOCALNET=
|
|
101
|
+
CANTON_WALLET_TEMPLATE_ID_LOCALNET=
|
|
102
|
+
CANTON_PREAPPROVAL_TEMPLATE_ID_LOCALNET=
|
|
103
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fairmint/canton-node-sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.117",
|
|
4
4
|
"description": "Canton Node SDK",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"canton",
|
|
@@ -36,16 +36,22 @@
|
|
|
36
36
|
"format": "prettier --check .",
|
|
37
37
|
"format:fix": "prettier --write .",
|
|
38
38
|
"generate:openapi-types": "tsx scripts/generate-openapi-types.ts",
|
|
39
|
-
"lint": "eslint .
|
|
40
|
-
"lint:fix": "eslint . --fix
|
|
39
|
+
"lint": "eslint .",
|
|
40
|
+
"lint:fix": "eslint . --fix",
|
|
41
41
|
"lint:npm": "npmPkgJsonLint . --fix",
|
|
42
42
|
"lint:npm:check": "npmPkgJsonLint .",
|
|
43
|
+
"localnet:setup": "./scripts/setup-localnet.sh",
|
|
44
|
+
"localnet:start": "./scripts/start-localnet.sh",
|
|
45
|
+
"localnet:status": "./scripts/localnet-status.sh",
|
|
46
|
+
"localnet:stop": "./scripts/stop-localnet.sh",
|
|
43
47
|
"prepack": "npm run clean && npm run build:core",
|
|
44
48
|
"prepare-release": "tsx scripts/prepare-release.ts",
|
|
45
49
|
"prepublishOnly": "npm run prepack",
|
|
46
50
|
"simulate": "tsx --tsconfig tsconfig.lint.json scripts/run-simulations.ts",
|
|
47
51
|
"simulate:events": "tsx --tsconfig tsconfig.lint.json scripts/run-events-simulation.ts",
|
|
48
52
|
"test": "jest",
|
|
53
|
+
"test:localnet": "npm run build:core && npm run simulate",
|
|
54
|
+
"test:regression": "npm run test:localnet",
|
|
49
55
|
"test:watch": "jest --watch"
|
|
50
56
|
},
|
|
51
57
|
"dependencies": {
|