@andrewkimjoseph/celina-sdk 0.14.0 → 0.15.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/build/aa/create-aa-client.d.ts +10 -3
- package/build/aa/create-aa-client.js +6 -3
- package/build/aa/create-aa-client.js.map +1 -1
- package/build/aa/prepared-calls.d.ts +6 -2
- package/build/aa/prepared-calls.js +13 -3
- package/build/aa/prepared-calls.js.map +1 -1
- package/build/aa/types.d.ts +10 -2
- package/build/src/aa/create-aa-client.d.ts +10 -3
- package/build/src/aa/create-aa-client.js +6 -3
- package/build/src/aa/create-aa-client.js.map +1 -1
- package/build/src/aa/prepared-calls.d.ts +6 -2
- package/build/src/aa/prepared-calls.js +13 -3
- package/build/src/aa/prepared-calls.js.map +1 -1
- package/build/src/aa/types.d.ts +10 -2
- package/package.json +1 -1
|
@@ -19,9 +19,15 @@ export type AAClient = {
|
|
|
19
19
|
smartAccountAddress: `0x${string}`;
|
|
20
20
|
/** Underlying sponsorship service (URLs, paymaster, fees). */
|
|
21
21
|
gasSponsorship: GasSponsorshipService;
|
|
22
|
+
/**
|
|
23
|
+
* Tags applied in `sendPreparedFlow` via `appendCelinaCalldataTag`.
|
|
24
|
+
* `undefined` means step `data` is passed through unchanged.
|
|
25
|
+
*/
|
|
26
|
+
attributionTags: string[] | undefined;
|
|
22
27
|
/**
|
|
23
28
|
* Submit `prepare*` output (ordered `steps` / prepared transactions) as sponsored UserOp(s).
|
|
24
|
-
*
|
|
29
|
+
* When `attributionTags` were set on this client, each step’s `data` is dual-tagged
|
|
30
|
+
* before submit; otherwise `data` is used as-is (including tags from `prepare*`).
|
|
25
31
|
*/
|
|
26
32
|
sendPreparedFlow: (flow: PreparedFlow | SerializedPreparedFlow, options?: SendPreparedFlowOptions) => Promise<SendPreparedFlowResult>;
|
|
27
33
|
};
|
|
@@ -31,7 +37,8 @@ export type AAClient = {
|
|
|
31
37
|
* Pass an explicit `gasSponsorship` provider object — credentials are app-owned
|
|
32
38
|
* and never stored by Celina. v1 supports `provider: "pimlico"`.
|
|
33
39
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
40
|
+
* Optional `attributionTags` are applied in `sendPreparedFlow` via
|
|
41
|
+
* `appendCelinaCalldataTag` (same dual format as `prepare*`). Omit them to
|
|
42
|
+
* pass step calldata through unchanged.
|
|
36
43
|
*/
|
|
37
44
|
export declare function createAAClient(options: CreateAAClientOptions): Promise<AAClient>;
|
|
@@ -44,12 +44,14 @@ export async function deriveSmartAccountAddress(owner, publicClient) {
|
|
|
44
44
|
* Pass an explicit `gasSponsorship` provider object — credentials are app-owned
|
|
45
45
|
* and never stored by Celina. v1 supports `provider: "pimlico"`.
|
|
46
46
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
47
|
+
* Optional `attributionTags` are applied in `sendPreparedFlow` via
|
|
48
|
+
* `appendCelinaCalldataTag` (same dual format as `prepare*`). Omit them to
|
|
49
|
+
* pass step calldata through unchanged.
|
|
49
50
|
*/
|
|
50
51
|
export async function createAAClient(options) {
|
|
51
52
|
const eoaAccount = resolveOwner(options.owner);
|
|
52
53
|
const publicClient = options.publicClient ?? defaultPublicClient();
|
|
54
|
+
const attributionTags = options.attributionTags;
|
|
53
55
|
const gasSponsorship = new GasSponsorshipService(options.gasSponsorship, CHAIN.id);
|
|
54
56
|
const smartAccount = await toSimpleSmartAccount({
|
|
55
57
|
client: publicClient,
|
|
@@ -71,7 +73,7 @@ export async function createAAClient(options) {
|
|
|
71
73
|
});
|
|
72
74
|
async function sendPreparedFlow(flow, sendOptions) {
|
|
73
75
|
const mode = sendOptions?.mode ?? "batch";
|
|
74
|
-
const calls = preparedStepsToUserOpCalls(flow.steps);
|
|
76
|
+
const calls = preparedStepsToUserOpCalls(flow.steps, attributionTags);
|
|
75
77
|
const userOpHashes = [];
|
|
76
78
|
const transactionHashes = [];
|
|
77
79
|
if (mode === "batch") {
|
|
@@ -106,6 +108,7 @@ export async function createAAClient(options) {
|
|
|
106
108
|
eoaAddress: eoaAccount.address,
|
|
107
109
|
smartAccountAddress: smartAccount.address,
|
|
108
110
|
gasSponsorship,
|
|
111
|
+
attributionTags,
|
|
109
112
|
sendPreparedFlow,
|
|
110
113
|
};
|
|
111
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-aa-client.js","sourceRoot":"","sources":["../../src/aa/create-aa-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,IAAI,GAIL,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAK7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAQjE,SAAS,YAAY,CAAC,KAA8B;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,kBAAkB,CAAC;QACxB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC;KACjC,CAAiB,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAA8B,EAC9B,YAA2B;IAK3B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,YAAY,IAAI,mBAAmB,EAAE,CAAC;IACrD,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC;QAC9C,MAAM;QACN,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE;YACV,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IACH,OAAO;QACL,UAAU,EAAE,UAAU,CAAC,OAAO;QAC9B,mBAAmB,EAAE,YAAY,CAAC,OAAO;KAC1C,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"create-aa-client.js","sourceRoot":"","sources":["../../src/aa/create-aa-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { PreparedTx } from "../types/prepared.js";
|
|
2
2
|
import type { UserOpCall } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Map Celina prepared steps to smart-account `calls`.
|
|
5
|
+
* When `attributionTags` is provided, each step's `data` is dual-tagged
|
|
6
|
+
* via {@link appendCelinaCalldataTag}; otherwise `data` is preserved as-is.
|
|
7
|
+
*/
|
|
8
|
+
export declare function preparedStepsToUserOpCalls(steps: PreparedTx[], attributionTags?: string[]): UserOpCall[];
|
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { appendCelinaCalldataTag } from "../config/celina-tag.js";
|
|
2
|
+
/**
|
|
3
|
+
* Map Celina prepared steps to smart-account `calls`.
|
|
4
|
+
* When `attributionTags` is provided, each step's `data` is dual-tagged
|
|
5
|
+
* via {@link appendCelinaCalldataTag}; otherwise `data` is preserved as-is.
|
|
6
|
+
*/
|
|
7
|
+
export function preparedStepsToUserOpCalls(steps, attributionTags) {
|
|
3
8
|
if (!steps.length) {
|
|
4
9
|
throw new Error("prepared flow has no steps");
|
|
5
10
|
}
|
|
11
|
+
const shouldTag = attributionTags !== undefined;
|
|
6
12
|
return steps.map((step) => {
|
|
7
13
|
const value = step.value !== undefined && step.value !== ""
|
|
8
14
|
? BigInt(step.value)
|
|
9
15
|
: undefined;
|
|
16
|
+
let data = step.data;
|
|
17
|
+
if (shouldTag && data !== undefined) {
|
|
18
|
+
data = appendCelinaCalldataTag(data, attributionTags);
|
|
19
|
+
}
|
|
10
20
|
return {
|
|
11
21
|
to: step.to,
|
|
12
|
-
...(
|
|
22
|
+
...(data !== undefined ? { data } : {}),
|
|
13
23
|
...(value !== undefined && value > 0n ? { value } : {}),
|
|
14
24
|
};
|
|
15
25
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared-calls.js","sourceRoot":"","sources":["../../src/aa/prepared-calls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepared-calls.js","sourceRoot":"","sources":["../../src/aa/prepared-calls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAmB,EACnB,eAA0B;IAE1B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,KAAK,SAAS,CAAC;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE;YAC3C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,GAAG,uBAAuB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACxD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/build/aa/types.d.ts
CHANGED
|
@@ -16,8 +16,10 @@ export type GasSponsorshipConfig = {
|
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
18
|
* Options for {@link createAAClient}.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
*
|
|
20
|
+
* Set `attributionTags` here for hand-built prepared steps (tagged at `sendPreparedFlow`).
|
|
21
|
+
* For `prepare*` flows, you can set the same tags on `createCelinaClient` instead —
|
|
22
|
+
* use one consistent list per send path so suffixes do not stack with mismatched tags.
|
|
21
23
|
*/
|
|
22
24
|
export type CreateAAClientOptions = {
|
|
23
25
|
/** EOA owner of the Simple Smart Account (account or private key hex). */
|
|
@@ -26,6 +28,12 @@ export type CreateAAClientOptions = {
|
|
|
26
28
|
gasSponsorship: GasSponsorshipConfig;
|
|
27
29
|
/** Optional Celo public client; defaults to Forno mainnet. */
|
|
28
30
|
publicClient?: PublicClient;
|
|
31
|
+
/**
|
|
32
|
+
* Optional custom tags applied via `appendCelinaCalldataTag` on each step's `data`
|
|
33
|
+
* in `sendPreparedFlow` (legacy `CELINA|…` + ERC-8021). When omitted, step data
|
|
34
|
+
* is passed through unchanged.
|
|
35
|
+
*/
|
|
36
|
+
attributionTags?: string[];
|
|
29
37
|
};
|
|
30
38
|
/** How to map prepared transactions (`prepare*` output / ordered `steps`) into UserOperations. */
|
|
31
39
|
export type SendPreparedFlowMode = "batch" | "sequential";
|
|
@@ -19,9 +19,15 @@ export type AAClient = {
|
|
|
19
19
|
smartAccountAddress: `0x${string}`;
|
|
20
20
|
/** Underlying sponsorship service (URLs, paymaster, fees). */
|
|
21
21
|
gasSponsorship: GasSponsorshipService;
|
|
22
|
+
/**
|
|
23
|
+
* Tags applied in `sendPreparedFlow` via `appendCelinaCalldataTag`.
|
|
24
|
+
* `undefined` means step `data` is passed through unchanged.
|
|
25
|
+
*/
|
|
26
|
+
attributionTags: string[] | undefined;
|
|
22
27
|
/**
|
|
23
28
|
* Submit `prepare*` output (ordered `steps` / prepared transactions) as sponsored UserOp(s).
|
|
24
|
-
*
|
|
29
|
+
* When `attributionTags` were set on this client, each step’s `data` is dual-tagged
|
|
30
|
+
* before submit; otherwise `data` is used as-is (including tags from `prepare*`).
|
|
25
31
|
*/
|
|
26
32
|
sendPreparedFlow: (flow: PreparedFlow | SerializedPreparedFlow, options?: SendPreparedFlowOptions) => Promise<SendPreparedFlowResult>;
|
|
27
33
|
};
|
|
@@ -31,7 +37,8 @@ export type AAClient = {
|
|
|
31
37
|
* Pass an explicit `gasSponsorship` provider object — credentials are app-owned
|
|
32
38
|
* and never stored by Celina. v1 supports `provider: "pimlico"`.
|
|
33
39
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
40
|
+
* Optional `attributionTags` are applied in `sendPreparedFlow` via
|
|
41
|
+
* `appendCelinaCalldataTag` (same dual format as `prepare*`). Omit them to
|
|
42
|
+
* pass step calldata through unchanged.
|
|
36
43
|
*/
|
|
37
44
|
export declare function createAAClient(options: CreateAAClientOptions): Promise<AAClient>;
|
|
@@ -44,12 +44,14 @@ export async function deriveSmartAccountAddress(owner, publicClient) {
|
|
|
44
44
|
* Pass an explicit `gasSponsorship` provider object — credentials are app-owned
|
|
45
45
|
* and never stored by Celina. v1 supports `provider: "pimlico"`.
|
|
46
46
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
47
|
+
* Optional `attributionTags` are applied in `sendPreparedFlow` via
|
|
48
|
+
* `appendCelinaCalldataTag` (same dual format as `prepare*`). Omit them to
|
|
49
|
+
* pass step calldata through unchanged.
|
|
49
50
|
*/
|
|
50
51
|
export async function createAAClient(options) {
|
|
51
52
|
const eoaAccount = resolveOwner(options.owner);
|
|
52
53
|
const publicClient = options.publicClient ?? defaultPublicClient();
|
|
54
|
+
const attributionTags = options.attributionTags;
|
|
53
55
|
const gasSponsorship = new GasSponsorshipService(options.gasSponsorship, CHAIN.id);
|
|
54
56
|
const smartAccount = await toSimpleSmartAccount({
|
|
55
57
|
client: publicClient,
|
|
@@ -71,7 +73,7 @@ export async function createAAClient(options) {
|
|
|
71
73
|
});
|
|
72
74
|
async function sendPreparedFlow(flow, sendOptions) {
|
|
73
75
|
const mode = sendOptions?.mode ?? "batch";
|
|
74
|
-
const calls = preparedStepsToUserOpCalls(flow.steps);
|
|
76
|
+
const calls = preparedStepsToUserOpCalls(flow.steps, attributionTags);
|
|
75
77
|
const userOpHashes = [];
|
|
76
78
|
const transactionHashes = [];
|
|
77
79
|
if (mode === "batch") {
|
|
@@ -106,6 +108,7 @@ export async function createAAClient(options) {
|
|
|
106
108
|
eoaAddress: eoaAccount.address,
|
|
107
109
|
smartAccountAddress: smartAccount.address,
|
|
108
110
|
gasSponsorship,
|
|
111
|
+
attributionTags,
|
|
109
112
|
sendPreparedFlow,
|
|
110
113
|
};
|
|
111
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-aa-client.js","sourceRoot":"","sources":["../../../src/aa/create-aa-client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,IAAI,GAIL,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAK7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAQjE,SAAS,YAAY,CAAC,KAA8B;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,kBAAkB,CAAC;QACxB,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC;KACjC,CAAiB,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAA8B,EAC9B,YAA2B;IAK3B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,YAAY,IAAI,mBAAmB,EAAE,CAAC;IACrD,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC;QAC9C,MAAM;QACN,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE;YACV,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,KAAK;SACf;KACF,CAAC,CAAC;IACH,OAAO;QACL,UAAU,EAAE,UAAU,CAAC,OAAO;QAC9B,mBAAmB,EAAE,YAAY,CAAC,OAAO;KAC1C,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"create-aa-client.js","sourceRoot":"","sources":["../../../src/aa/create-aa-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { PreparedTx } from "../types/prepared.js";
|
|
2
2
|
import type { UserOpCall } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Map Celina prepared steps to smart-account `calls`.
|
|
5
|
+
* When `attributionTags` is provided, each step's `data` is dual-tagged
|
|
6
|
+
* via {@link appendCelinaCalldataTag}; otherwise `data` is preserved as-is.
|
|
7
|
+
*/
|
|
8
|
+
export declare function preparedStepsToUserOpCalls(steps: PreparedTx[], attributionTags?: string[]): UserOpCall[];
|
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { appendCelinaCalldataTag } from "../config/celina-tag.js";
|
|
2
|
+
/**
|
|
3
|
+
* Map Celina prepared steps to smart-account `calls`.
|
|
4
|
+
* When `attributionTags` is provided, each step's `data` is dual-tagged
|
|
5
|
+
* via {@link appendCelinaCalldataTag}; otherwise `data` is preserved as-is.
|
|
6
|
+
*/
|
|
7
|
+
export function preparedStepsToUserOpCalls(steps, attributionTags) {
|
|
3
8
|
if (!steps.length) {
|
|
4
9
|
throw new Error("prepared flow has no steps");
|
|
5
10
|
}
|
|
11
|
+
const shouldTag = attributionTags !== undefined;
|
|
6
12
|
return steps.map((step) => {
|
|
7
13
|
const value = step.value !== undefined && step.value !== ""
|
|
8
14
|
? BigInt(step.value)
|
|
9
15
|
: undefined;
|
|
16
|
+
let data = step.data;
|
|
17
|
+
if (shouldTag && data !== undefined) {
|
|
18
|
+
data = appendCelinaCalldataTag(data, attributionTags);
|
|
19
|
+
}
|
|
10
20
|
return {
|
|
11
21
|
to: step.to,
|
|
12
|
-
...(
|
|
22
|
+
...(data !== undefined ? { data } : {}),
|
|
13
23
|
...(value !== undefined && value > 0n ? { value } : {}),
|
|
14
24
|
};
|
|
15
25
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepared-calls.js","sourceRoot":"","sources":["../../../src/aa/prepared-calls.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prepared-calls.js","sourceRoot":"","sources":["../../../src/aa/prepared-calls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAmB,EACnB,eAA0B;IAE1B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,SAAS,GAAG,eAAe,KAAK,SAAS,CAAC;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE;YAC3C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACpB,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,IAAI,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,GAAG,uBAAuB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACxD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/build/src/aa/types.d.ts
CHANGED
|
@@ -16,8 +16,10 @@ export type GasSponsorshipConfig = {
|
|
|
16
16
|
};
|
|
17
17
|
/**
|
|
18
18
|
* Options for {@link createAAClient}.
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
*
|
|
20
|
+
* Set `attributionTags` here for hand-built prepared steps (tagged at `sendPreparedFlow`).
|
|
21
|
+
* For `prepare*` flows, you can set the same tags on `createCelinaClient` instead —
|
|
22
|
+
* use one consistent list per send path so suffixes do not stack with mismatched tags.
|
|
21
23
|
*/
|
|
22
24
|
export type CreateAAClientOptions = {
|
|
23
25
|
/** EOA owner of the Simple Smart Account (account or private key hex). */
|
|
@@ -26,6 +28,12 @@ export type CreateAAClientOptions = {
|
|
|
26
28
|
gasSponsorship: GasSponsorshipConfig;
|
|
27
29
|
/** Optional Celo public client; defaults to Forno mainnet. */
|
|
28
30
|
publicClient?: PublicClient;
|
|
31
|
+
/**
|
|
32
|
+
* Optional custom tags applied via `appendCelinaCalldataTag` on each step's `data`
|
|
33
|
+
* in `sendPreparedFlow` (legacy `CELINA|…` + ERC-8021). When omitted, step data
|
|
34
|
+
* is passed through unchanged.
|
|
35
|
+
*/
|
|
36
|
+
attributionTags?: string[];
|
|
29
37
|
};
|
|
30
38
|
/** How to map prepared transactions (`prepare*` output / ordered `steps`) into UserOperations. */
|
|
31
39
|
export type SendPreparedFlowMode = "batch" | "sequential";
|
package/package.json
CHANGED