@towns-labs/app-framework 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +147 -0
  2. package/dist/app.d.ts +680 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +2324 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/app.test.d.ts +2 -0
  7. package/dist/app.test.d.ts.map +1 -0
  8. package/dist/app.test.js +2070 -0
  9. package/dist/app.test.js.map +1 -0
  10. package/dist/identity-types.d.ts +43 -0
  11. package/dist/identity-types.d.ts.map +1 -0
  12. package/dist/identity-types.js +2 -0
  13. package/dist/identity-types.js.map +1 -0
  14. package/dist/index.d.ts +9 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +9 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/modules/eventDedup.d.ts +73 -0
  19. package/dist/modules/eventDedup.d.ts.map +1 -0
  20. package/dist/modules/eventDedup.js +105 -0
  21. package/dist/modules/eventDedup.js.map +1 -0
  22. package/dist/modules/eventDedup.test.d.ts +2 -0
  23. package/dist/modules/eventDedup.test.d.ts.map +1 -0
  24. package/dist/modules/eventDedup.test.js +222 -0
  25. package/dist/modules/eventDedup.test.js.map +1 -0
  26. package/dist/modules/interaction-api.d.ts +101 -0
  27. package/dist/modules/interaction-api.d.ts.map +1 -0
  28. package/dist/modules/interaction-api.js +213 -0
  29. package/dist/modules/interaction-api.js.map +1 -0
  30. package/dist/modules/payments.d.ts +89 -0
  31. package/dist/modules/payments.d.ts.map +1 -0
  32. package/dist/modules/payments.js +139 -0
  33. package/dist/modules/payments.js.map +1 -0
  34. package/dist/modules/user.d.ts +17 -0
  35. package/dist/modules/user.d.ts.map +1 -0
  36. package/dist/modules/user.js +54 -0
  37. package/dist/modules/user.js.map +1 -0
  38. package/dist/snapshot-getter.d.ts +21 -0
  39. package/dist/snapshot-getter.d.ts.map +1 -0
  40. package/dist/snapshot-getter.js +27 -0
  41. package/dist/snapshot-getter.js.map +1 -0
  42. package/package.json +66 -0
@@ -0,0 +1,222 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest';
2
+ import { EventDedup } from './eventDedup';
3
+ describe('EventDedup', () => {
4
+ let dedup;
5
+ beforeEach(() => {
6
+ dedup = new EventDedup();
7
+ });
8
+ describe('checkAndAdd', () => {
9
+ it('returns false for new events', () => {
10
+ const streamId = '0xstream1';
11
+ const eventId = '0x1234567890abcdef';
12
+ expect(dedup.checkAndAdd(streamId, eventId)).toBe(false);
13
+ });
14
+ it('returns true for duplicate events in same stream', () => {
15
+ const streamId = '0xstream1';
16
+ const eventId = '0x1234567890abcdef';
17
+ expect(dedup.checkAndAdd(streamId, eventId)).toBe(false);
18
+ expect(dedup.checkAndAdd(streamId, eventId)).toBe(true);
19
+ });
20
+ it('returns false for same event ID in different streams', () => {
21
+ const streamId1 = '0xstream1';
22
+ const streamId2 = '0xstream2';
23
+ const eventId = '0x1234567890abcdef';
24
+ expect(dedup.checkAndAdd(streamId1, eventId)).toBe(false);
25
+ expect(dedup.checkAndAdd(streamId2, eventId)).toBe(false); // Different stream, not a duplicate
26
+ });
27
+ it('returns false for different event IDs in same stream', () => {
28
+ const streamId = '0xstream1';
29
+ const eventId1 = '0x1111111111111111';
30
+ const eventId2 = '0x2222222222222222';
31
+ expect(dedup.checkAndAdd(streamId, eventId1)).toBe(false);
32
+ expect(dedup.checkAndAdd(streamId, eventId2)).toBe(false);
33
+ });
34
+ it('correctly identifies duplicates after many events', () => {
35
+ const streamId = '0xstream1';
36
+ const eventIds = Array.from({ length: 100 }, (_, i) => `0x${i.toString(16).padStart(64, '0')}`);
37
+ // Add all events
38
+ for (const eventId of eventIds) {
39
+ expect(dedup.checkAndAdd(streamId, eventId)).toBe(false);
40
+ }
41
+ // All should be duplicates now
42
+ for (const eventId of eventIds) {
43
+ expect(dedup.checkAndAdd(streamId, eventId)).toBe(true);
44
+ }
45
+ });
46
+ });
47
+ describe('has', () => {
48
+ it('returns false for unseen events', () => {
49
+ expect(dedup.has('0xstream1', '0xunknown')).toBe(false);
50
+ });
51
+ it('returns true for seen events', () => {
52
+ const streamId = '0xstream1';
53
+ const eventId = '0x1234567890abcdef';
54
+ dedup.add(streamId, eventId);
55
+ expect(dedup.has(streamId, eventId)).toBe(true);
56
+ });
57
+ it('returns false for event in different stream', () => {
58
+ const streamId1 = '0xstream1';
59
+ const streamId2 = '0xstream2';
60
+ const eventId = '0x1234567890abcdef';
61
+ dedup.add(streamId1, eventId);
62
+ expect(dedup.has(streamId1, eventId)).toBe(true);
63
+ expect(dedup.has(streamId2, eventId)).toBe(false);
64
+ });
65
+ it('does not modify the cache', () => {
66
+ const streamId = '0xstream1';
67
+ const eventId = '0x1234567890abcdef';
68
+ expect(dedup.has(streamId, eventId)).toBe(false);
69
+ expect(dedup.has(streamId, eventId)).toBe(false); // Still false, not added
70
+ expect(dedup.size).toBe(0);
71
+ });
72
+ });
73
+ describe('add', () => {
74
+ it('adds an event to the cache', () => {
75
+ const streamId = '0xstream1';
76
+ const eventId = '0x1234567890abcdef';
77
+ dedup.add(streamId, eventId);
78
+ expect(dedup.has(streamId, eventId)).toBe(true);
79
+ expect(dedup.size).toBe(1);
80
+ });
81
+ it('does not create duplicate entries', () => {
82
+ const streamId = '0xstream1';
83
+ const eventId = '0x1234567890abcdef';
84
+ dedup.add(streamId, eventId);
85
+ dedup.add(streamId, eventId);
86
+ expect(dedup.size).toBe(1); // Still only one entry
87
+ });
88
+ it('creates separate caches for different streams', () => {
89
+ const streamId1 = '0xstream1';
90
+ const streamId2 = '0xstream2';
91
+ dedup.add(streamId1, '0x1111');
92
+ dedup.add(streamId2, '0x2222');
93
+ expect(dedup.size).toBe(2);
94
+ expect(dedup.streamCount).toBe(2);
95
+ });
96
+ });
97
+ describe('clear', () => {
98
+ it('removes all entries from all stream caches', () => {
99
+ dedup.add('0xstream1', '0x1111');
100
+ dedup.add('0xstream1', '0x2222');
101
+ dedup.add('0xstream2', '0x3333');
102
+ expect(dedup.size).toBe(3);
103
+ expect(dedup.streamCount).toBe(2);
104
+ dedup.clear();
105
+ expect(dedup.size).toBe(0);
106
+ expect(dedup.streamCount).toBe(0);
107
+ expect(dedup.has('0xstream1', '0x1111')).toBe(false);
108
+ });
109
+ });
110
+ describe('size', () => {
111
+ it('returns 0 for empty cache', () => {
112
+ expect(dedup.size).toBe(0);
113
+ });
114
+ it('returns correct count across all streams', () => {
115
+ dedup.add('0xstream1', '0x1111');
116
+ expect(dedup.size).toBe(1);
117
+ dedup.add('0xstream1', '0x2222');
118
+ expect(dedup.size).toBe(2);
119
+ dedup.add('0xstream2', '0x3333');
120
+ expect(dedup.size).toBe(3);
121
+ });
122
+ });
123
+ describe('streamCount', () => {
124
+ it('returns 0 for empty cache', () => {
125
+ expect(dedup.streamCount).toBe(0);
126
+ });
127
+ it('returns correct number of streams', () => {
128
+ dedup.add('0xstream1', '0x1111');
129
+ expect(dedup.streamCount).toBe(1);
130
+ dedup.add('0xstream1', '0x2222'); // Same stream
131
+ expect(dedup.streamCount).toBe(1);
132
+ dedup.add('0xstream2', '0x3333'); // Different stream
133
+ expect(dedup.streamCount).toBe(2);
134
+ dedup.add('0xstream3', '0x4444');
135
+ expect(dedup.streamCount).toBe(3);
136
+ });
137
+ });
138
+ describe('per-stream max size eviction', () => {
139
+ it('evicts oldest entries when max size per stream is reached', () => {
140
+ const smallDedup = new EventDedup({ maxSizePerStream: 3 });
141
+ const streamId = '0xstream1';
142
+ smallDedup.add(streamId, '0x0001');
143
+ smallDedup.add(streamId, '0x0002');
144
+ smallDedup.add(streamId, '0x0003');
145
+ expect(smallDedup.size).toBe(3);
146
+ // Adding a 4th should evict the oldest (0x0001)
147
+ smallDedup.add(streamId, '0x0004');
148
+ expect(smallDedup.size).toBe(3);
149
+ expect(smallDedup.has(streamId, '0x0001')).toBe(false); // Evicted
150
+ expect(smallDedup.has(streamId, '0x0002')).toBe(true);
151
+ expect(smallDedup.has(streamId, '0x0003')).toBe(true);
152
+ expect(smallDedup.has(streamId, '0x0004')).toBe(true);
153
+ });
154
+ it('evicts in FIFO order per stream', () => {
155
+ const smallDedup = new EventDedup({ maxSizePerStream: 2 });
156
+ const streamId = '0xstream1';
157
+ smallDedup.add(streamId, '0x0001');
158
+ smallDedup.add(streamId, '0x0002');
159
+ smallDedup.add(streamId, '0x0003'); // Evicts 0x0001
160
+ smallDedup.add(streamId, '0x0004'); // Evicts 0x0002
161
+ expect(smallDedup.size).toBe(2);
162
+ expect(smallDedup.has(streamId, '0x0001')).toBe(false);
163
+ expect(smallDedup.has(streamId, '0x0002')).toBe(false);
164
+ expect(smallDedup.has(streamId, '0x0003')).toBe(true);
165
+ expect(smallDedup.has(streamId, '0x0004')).toBe(true);
166
+ });
167
+ it('does not affect other streams when evicting', () => {
168
+ const smallDedup = new EventDedup({ maxSizePerStream: 2 });
169
+ const stream1 = '0xstream1';
170
+ const stream2 = '0xstream2';
171
+ // Fill stream1
172
+ smallDedup.add(stream1, '0x0001');
173
+ smallDedup.add(stream1, '0x0002');
174
+ // Fill stream2
175
+ smallDedup.add(stream2, '0x1001');
176
+ smallDedup.add(stream2, '0x1002');
177
+ expect(smallDedup.size).toBe(4);
178
+ expect(smallDedup.streamCount).toBe(2);
179
+ // Add to stream1, causing eviction in stream1 only
180
+ smallDedup.add(stream1, '0x0003');
181
+ // Stream1 should have evicted 0x0001
182
+ expect(smallDedup.has(stream1, '0x0001')).toBe(false);
183
+ expect(smallDedup.has(stream1, '0x0002')).toBe(true);
184
+ expect(smallDedup.has(stream1, '0x0003')).toBe(true);
185
+ // Stream2 should be unaffected
186
+ expect(smallDedup.has(stream2, '0x1001')).toBe(true);
187
+ expect(smallDedup.has(stream2, '0x1002')).toBe(true);
188
+ expect(smallDedup.size).toBe(4); // 2 in each stream
189
+ });
190
+ });
191
+ describe('stream isolation', () => {
192
+ it('hot stream does not push out events from quiet stream', () => {
193
+ const smallDedup = new EventDedup({ maxSizePerStream: 3 });
194
+ const hotStream = '0xhot';
195
+ const quietStream = '0xquiet';
196
+ // Add event to quiet stream
197
+ smallDedup.add(quietStream, '0xquiet_event');
198
+ // Flood hot stream with many events
199
+ for (let i = 0; i < 100; i++) {
200
+ smallDedup.add(hotStream, `0xhot_${i.toString(16).padStart(4, '0')}`);
201
+ }
202
+ // Quiet stream event should still be there
203
+ expect(smallDedup.has(quietStream, '0xquiet_event')).toBe(true);
204
+ // Hot stream should only have last 3 events
205
+ expect(smallDedup.has(hotStream, '0xhot_0061')).toBe(true); // 97
206
+ expect(smallDedup.has(hotStream, '0xhot_0062')).toBe(true); // 98
207
+ expect(smallDedup.has(hotStream, '0xhot_0063')).toBe(true); // 99
208
+ expect(smallDedup.has(hotStream, '0xhot_0000')).toBe(false); // Old, evicted
209
+ });
210
+ });
211
+ describe('custom configuration', () => {
212
+ it('respects custom maxSizePerStream', () => {
213
+ const customDedup = new EventDedup({ maxSizePerStream: 5 });
214
+ const streamId = '0xstream1';
215
+ for (let i = 0; i < 10; i++) {
216
+ customDedup.add(streamId, `0x${i.toString(16)}`);
217
+ }
218
+ expect(customDedup.size).toBe(5);
219
+ });
220
+ });
221
+ });
222
+ //# sourceMappingURL=eventDedup.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eventDedup.test.js","sourceRoot":"","sources":["../../src/modules/eventDedup.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import type { Address } from 'viem';
2
+ import { InteractionRequestPayload, InteractionRequestPayload_Signature_SignatureType, InteractionRequestPayload_Signature_SignatureValidation, InteractionRequestPayload_Form_Component, type PlainMessage } from '@towns-labs/proto';
3
+ type EnumStringKeys<E> = Exclude<keyof E, number>;
4
+ type EnumToLowercase<E> = Lowercase<EnumStringKeys<E> & string>;
5
+ export type SignatureMethod = EnumToLowercase<typeof InteractionRequestPayload_Signature_SignatureType>;
6
+ export type SignatureValidation = EnumToLowercase<typeof InteractionRequestPayload_Signature_SignatureValidation>;
7
+ type ContentCase = NonNullable<InteractionRequestPayload['content']['case']>;
8
+ type ContentValue<C extends ContentCase> = Extract<InteractionRequestPayload['content'], {
9
+ case: C;
10
+ }>['value'];
11
+ type ComponentCase = NonNullable<InteractionRequestPayload_Form_Component['component']['case']>;
12
+ type ComponentValue<C extends ComponentCase> = Extract<InteractionRequestPayload_Form_Component['component'], {
13
+ case: C;
14
+ }>['value'];
15
+ type FlattenedComponent<C extends ComponentCase> = {
16
+ id: string;
17
+ type: C;
18
+ } & PlainMessage<ComponentValue<C>>;
19
+ export type FlattenedFormComponent = {
20
+ [C in ComponentCase]: FlattenedComponent<C>;
21
+ }[ComponentCase];
22
+ type FlattenedRequestBase = {
23
+ recipient?: Address;
24
+ };
25
+ export type FlattenedSignatureRequest = FlattenedRequestBase & {
26
+ type: 'signature';
27
+ } & Omit<PlainMessage<ContentValue<'signature'>>, 'type' | 'signatureValidation' | 'signerWallet' | 'id'> & {
28
+ id?: string;
29
+ method: SignatureMethod;
30
+ signatureValidation?: SignatureValidation;
31
+ signerWallet: Address;
32
+ };
33
+ export type FlattenedFormRequest = FlattenedRequestBase & {
34
+ type: 'form';
35
+ } & Omit<PlainMessage<ContentValue<'form'>>, 'components' | 'id'> & {
36
+ id?: string;
37
+ components: FlattenedFormComponent[];
38
+ };
39
+ type EVMBatchValue = Extract<ContentValue<'transaction'>['content'], {
40
+ case: 'evm';
41
+ }>['value'];
42
+ type EVMContentValue = EVMBatchValue['transactions'][number];
43
+ export type EVMTransaction = Omit<PlainMessage<EVMContentValue>, 'to'> & {
44
+ to: Address;
45
+ };
46
+ export type FlattenedTransactionRequest = FlattenedRequestBase & {
47
+ type: 'transaction';
48
+ } & Omit<PlainMessage<ContentValue<'transaction'>>, 'content' | 'id'> & {
49
+ id?: string;
50
+ chainId: string;
51
+ signerWallet?: Address;
52
+ txs: EVMTransaction[];
53
+ };
54
+ export type FlattenedBatchStep = Omit<FlattenedSignatureRequest, 'recipient'> | Omit<FlattenedPreparedCallsRequest, 'recipient'>;
55
+ export type FlattenedBatchRequest = FlattenedRequestBase & {
56
+ type: 'batch';
57
+ id?: string;
58
+ title?: string;
59
+ subtitle?: string;
60
+ steps: FlattenedBatchStep[];
61
+ };
62
+ export type FlattenedInteractionRequest = FlattenedSignatureRequest | FlattenedFormRequest | FlattenedTransactionRequest | FlattenedAddMemberRequest | FlattenedPreparedCallsRequest | FlattenedBatchRequest;
63
+ export type FlattenedAddMemberRequest = FlattenedRequestBase & {
64
+ type: 'addMember';
65
+ } & Omit<PlainMessage<ContentValue<'addMember'>>, 'userId' | 'id'> & {
66
+ id?: string;
67
+ userId: Address;
68
+ };
69
+ export type FlattenedPreparedCallsPermission = {
70
+ type: 'call';
71
+ to?: string;
72
+ selector?: string;
73
+ } | {
74
+ type: 'spend';
75
+ token?: string;
76
+ limit?: string;
77
+ period?: string;
78
+ };
79
+ export type FlattenedPreparedCallsAuthorizeKey = {
80
+ expiry: string;
81
+ type: string;
82
+ role: string;
83
+ publicKey: string;
84
+ permissions?: FlattenedPreparedCallsPermission[];
85
+ };
86
+ export type FlattenedPreparedCallsRequest = FlattenedRequestBase & {
87
+ type: 'preparedCalls';
88
+ } & Omit<PlainMessage<ContentValue<'preparedCalls'>>, 'authorizeKeys' | 'id'> & {
89
+ id?: string;
90
+ authorizeKeys?: FlattenedPreparedCallsAuthorizeKey[];
91
+ };
92
+ export declare function signatureMethodToEnum(method: SignatureMethod): InteractionRequestPayload_Signature_SignatureType;
93
+ export declare function signatureValidationToEnum(validation: SignatureValidation): InteractionRequestPayload_Signature_SignatureValidation;
94
+ export declare function isFlattenedRequest(content: PlainMessage<InteractionRequestPayload['content']> | FlattenedInteractionRequest): content is FlattenedInteractionRequest;
95
+ export declare function flattenedComponentToPayload(component: FlattenedFormComponent): PlainMessage<InteractionRequestPayload_Form_Component>;
96
+ export declare function flattenedToPayloadContent(payload: FlattenedInteractionRequest): {
97
+ content: PlainMessage<InteractionRequestPayload['content']>;
98
+ requestId: string;
99
+ };
100
+ export {};
101
+ //# sourceMappingURL=interaction-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-api.d.ts","sourceRoot":"","sources":["../../src/modules/interaction-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ import { InteractionRequestPayload_Signature_SignatureType, InteractionRequestPayload_Signature_SignatureValidation, InteractionRequestPayload_PreparedCalls_Permission_Type, } from '@towns-labs/proto';
2
+ import { checkNever } from '@towns-labs/sdk';
3
+ import { bin_fromHexString } from '@towns-labs/utils';
4
+ // Runtime conversion: lowercase string -> enum value
5
+ export function signatureMethodToEnum(method) {
6
+ const key = method.toUpperCase();
7
+ const result = InteractionRequestPayload_Signature_SignatureType[key];
8
+ if (result === undefined) {
9
+ throw new Error(`Invalid signature method: ${method}`);
10
+ }
11
+ return result;
12
+ }
13
+ export function signatureValidationToEnum(validation) {
14
+ const key = validation.toUpperCase();
15
+ const result = InteractionRequestPayload_Signature_SignatureValidation[key];
16
+ if (result === undefined) {
17
+ throw new Error(`Invalid signature validation: ${validation}`);
18
+ }
19
+ return result;
20
+ }
21
+ // Type guard to detect flattened vs original format
22
+ export function isFlattenedRequest(content) {
23
+ return ('type' in content &&
24
+ typeof content.type === 'string' &&
25
+ ['signature', 'form', 'transaction', 'addMember', 'preparedCalls', 'batch'].includes(content.type));
26
+ }
27
+ // Convert flattened component to payload format
28
+ export function flattenedComponentToPayload(component) {
29
+ const { id, type } = component;
30
+ if (type === 'button') {
31
+ return { id, component: { case: 'button', value: { label: component.label } } };
32
+ }
33
+ if (type === 'textInput') {
34
+ return {
35
+ id,
36
+ component: { case: 'textInput', value: { placeholder: component.placeholder } },
37
+ };
38
+ }
39
+ checkNever(type, `Unknown component type: ${type}`);
40
+ }
41
+ // Convert flattened request to payload content, auto-generating id when not provided
42
+ export function flattenedToPayloadContent(payload) {
43
+ switch (payload.type) {
44
+ case 'signature': {
45
+ const { type, id, method, signatureValidation, recipient, signerWallet, ...rest } = payload;
46
+ const requestId = id ?? crypto.randomUUID();
47
+ return {
48
+ content: {
49
+ case: 'signature',
50
+ value: {
51
+ ...rest,
52
+ id: requestId,
53
+ signerWallet,
54
+ type: signatureMethodToEnum(method),
55
+ signatureValidation: signatureValidation
56
+ ? signatureValidationToEnum(signatureValidation)
57
+ : undefined,
58
+ },
59
+ },
60
+ requestId,
61
+ };
62
+ }
63
+ case 'form': {
64
+ const { type, id, components, recipient, ...rest } = payload;
65
+ const requestId = id ?? crypto.randomUUID();
66
+ return {
67
+ content: {
68
+ case: 'form',
69
+ value: {
70
+ ...rest,
71
+ id: requestId,
72
+ components: components.map(flattenedComponentToPayload),
73
+ },
74
+ },
75
+ requestId,
76
+ };
77
+ }
78
+ case 'transaction': {
79
+ const { type, id, recipient, chainId, signerWallet, txs, ...rest } = payload;
80
+ const requestId = id ?? crypto.randomUUID();
81
+ return {
82
+ content: {
83
+ case: 'transaction',
84
+ value: {
85
+ ...rest,
86
+ id: requestId,
87
+ content: {
88
+ case: 'evm',
89
+ value: {
90
+ chainId,
91
+ signerWallet,
92
+ transactions: txs,
93
+ },
94
+ },
95
+ },
96
+ },
97
+ requestId,
98
+ };
99
+ }
100
+ case 'addMember': {
101
+ const { type, id, recipient, userId, ...rest } = payload;
102
+ const requestId = id ?? crypto.randomUUID();
103
+ return {
104
+ content: {
105
+ case: 'addMember',
106
+ value: {
107
+ ...rest,
108
+ id: requestId,
109
+ userId: bin_fromHexString(userId),
110
+ },
111
+ },
112
+ requestId,
113
+ };
114
+ }
115
+ case 'preparedCalls': {
116
+ const { type, id, recipient, authorizeKeys, ...rest } = payload;
117
+ const requestId = id ?? crypto.randomUUID();
118
+ return {
119
+ content: {
120
+ case: 'preparedCalls',
121
+ value: {
122
+ ...rest,
123
+ id: requestId,
124
+ authorizeKeys: authorizeKeys?.map((key) => ({
125
+ ...key,
126
+ permissions: key.permissions?.map(flattenedPermissionToPayload) ?? [],
127
+ })) ?? [],
128
+ },
129
+ },
130
+ requestId,
131
+ };
132
+ }
133
+ case 'batch': {
134
+ const { type, id, recipient, steps, ...rest } = payload;
135
+ const requestId = id ?? crypto.randomUUID();
136
+ return {
137
+ content: {
138
+ case: 'batch',
139
+ value: {
140
+ ...rest,
141
+ id: requestId,
142
+ steps: steps.map(flattenedBatchStepToPayload),
143
+ },
144
+ },
145
+ requestId,
146
+ };
147
+ }
148
+ default:
149
+ checkNever(payload, `Unknown request type: ${payload.type}`);
150
+ }
151
+ }
152
+ function flattenedBatchStepToPayload(step) {
153
+ switch (step.type) {
154
+ case 'signature': {
155
+ const { type, id, method, signatureValidation, signerWallet, ...rest } = step;
156
+ return {
157
+ content: {
158
+ case: 'signature',
159
+ value: {
160
+ ...rest,
161
+ id: id ?? crypto.randomUUID(),
162
+ signerWallet,
163
+ type: signatureMethodToEnum(method),
164
+ signatureValidation: signatureValidation
165
+ ? signatureValidationToEnum(signatureValidation)
166
+ : undefined,
167
+ },
168
+ },
169
+ };
170
+ }
171
+ case 'preparedCalls': {
172
+ const { type, id, authorizeKeys, ...rest } = step;
173
+ return {
174
+ content: {
175
+ case: 'preparedCalls',
176
+ value: {
177
+ ...rest,
178
+ id: id ?? crypto.randomUUID(),
179
+ authorizeKeys: authorizeKeys?.map((key) => ({
180
+ ...key,
181
+ permissions: key.permissions?.map(flattenedPermissionToPayload) ?? [],
182
+ })) ?? [],
183
+ },
184
+ },
185
+ };
186
+ }
187
+ default:
188
+ checkNever(step, `Unknown batch step type: ${step.type}`);
189
+ }
190
+ }
191
+ function flattenedPermissionToPayload(perm) {
192
+ switch (perm.type) {
193
+ case 'call':
194
+ return {
195
+ type: InteractionRequestPayload_PreparedCalls_Permission_Type.CALL,
196
+ permission: {
197
+ case: 'call',
198
+ value: { to: perm.to, selector: perm.selector },
199
+ },
200
+ };
201
+ case 'spend':
202
+ return {
203
+ type: InteractionRequestPayload_PreparedCalls_Permission_Type.SPEND,
204
+ permission: {
205
+ case: 'spend',
206
+ value: { token: perm.token, limit: perm.limit, period: perm.period },
207
+ },
208
+ };
209
+ default:
210
+ checkNever(perm, `Unknown permission type: ${perm.type}`);
211
+ }
212
+ }
213
+ //# sourceMappingURL=interaction-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-api.js","sourceRoot":"","sources":["../../src/modules/interaction-api.ts"],"names":[],"mappings":"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"}