@reown/appkit-experimental 1.1.1-40d0859f0.0 → 1.1.4

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 (41) hide show
  1. package/dist/esm/exports/smart-session/index.js +3 -0
  2. package/dist/esm/exports/smart-session/index.js.map +1 -1
  3. package/dist/esm/src/smart-session/grantPermissions.js +5 -1
  4. package/dist/esm/src/smart-session/grantPermissions.js.map +1 -1
  5. package/dist/esm/src/smart-session/schema/index.js +37 -5
  6. package/dist/esm/src/smart-session/schema/index.js.map +1 -1
  7. package/dist/esm/src/smart-session/ui/permissions/wui-permission-contract-call/index.js +71 -0
  8. package/dist/esm/src/smart-session/ui/permissions/wui-permission-contract-call/index.js.map +1 -0
  9. package/dist/esm/src/smart-session/ui/permissions/wui-permission-contract-call/styles.js +11 -0
  10. package/dist/esm/src/smart-session/ui/permissions/wui-permission-contract-call/styles.js.map +1 -0
  11. package/dist/esm/src/smart-session/ui/views/w3m-smart-session-created-view/index.js +79 -0
  12. package/dist/esm/src/smart-session/ui/views/w3m-smart-session-created-view/index.js.map +1 -0
  13. package/dist/esm/src/smart-session/ui/views/w3m-smart-session-created-view/styles.js +7 -0
  14. package/dist/esm/src/smart-session/ui/views/w3m-smart-session-created-view/styles.js.map +1 -0
  15. package/dist/esm/tests/smart-session/requestValidation/mockRequest.js +14 -0
  16. package/dist/esm/tests/smart-session/requestValidation/mockRequest.js.map +1 -0
  17. package/dist/esm/tests/smart-session/requestValidation/validateCommonFields.test.js +290 -0
  18. package/dist/esm/tests/smart-session/requestValidation/validateCommonFields.test.js.map +1 -0
  19. package/dist/esm/tests/smart-session/requestValidation/validateContractCallPermission.test.js +135 -0
  20. package/dist/esm/tests/smart-session/requestValidation/validateContractCallPermission.test.js.map +1 -0
  21. package/dist/esm/tests/smart-session/requestValidation/validateERC20RecurringAllowancePermission.test.js +175 -0
  22. package/dist/esm/tests/smart-session/requestValidation/validateERC20RecurringAllowancePermission.test.js.map +1 -0
  23. package/dist/esm/tests/smart-session/requestValidation/validateNativeTokenRecurringAllowancePermission.test.js +137 -0
  24. package/dist/esm/tests/smart-session/requestValidation/validateNativeTokenRecurringAllowancePermission.test.js.map +1 -0
  25. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  26. package/dist/types/exports/smart-session/index.d.ts +3 -1
  27. package/dist/types/src/smart-session/helper/index.d.ts +32 -2
  28. package/dist/types/src/smart-session/schema/index.d.ts +133 -8
  29. package/dist/types/src/smart-session/ui/permissions/wui-permission-contract-call/index.d.ts +20 -0
  30. package/dist/types/src/smart-session/ui/permissions/wui-permission-contract-call/styles.d.ts +2 -0
  31. package/dist/types/src/smart-session/ui/views/w3m-smart-session-created-view/index.d.ts +13 -0
  32. package/dist/types/src/smart-session/ui/views/w3m-smart-session-created-view/styles.d.ts +2 -0
  33. package/dist/types/src/smart-session/utils/TypeUtils.d.ts +18 -1
  34. package/dist/types/tests/smart-session/requestValidation/mockRequest.d.ts +2 -0
  35. package/dist/types/tests/smart-session/requestValidation/validateContractCallPermission.test.d.ts +1 -0
  36. package/dist/types/tests/smart-session/requestValidation/validateERC20RecurringAllowancePermission.test.d.ts +1 -0
  37. package/dist/types/tests/smart-session/requestValidation/validateNativeTokenRecurringAllowancePermission.test.d.ts +1 -0
  38. package/package.json +6 -4
  39. package/dist/esm/tests/smart-session/requestValidation.test.js +0 -423
  40. package/dist/esm/tests/smart-session/requestValidation.test.js.map +0 -1
  41. /package/dist/types/tests/smart-session/{requestValidation.test.d.ts → requestValidation/validateCommonFields.test.d.ts} +0 -0
@@ -1,2 +1,5 @@
1
1
  export { grantPermissions, isSmartSessionSupported } from '../../src/smart-session/grantPermissions.js';
2
+ export * from '../../src/smart-session/utils/TypeUtils.js';
3
+ export * from '../../src/smart-session/ui/views/w3m-smart-session-created-view/index.js';
4
+ export * from '../../src/smart-session/ui/permissions/wui-permission-contract-call/index.js';
2
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../exports/smart-session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,6CAA6C,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../exports/smart-session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,6CAA6C,CAAA;AAEpD,cAAc,4CAA4C,CAAA;AAG1D,cAAc,0EAA0E,CAAA;AACxF,cAAc,8EAA8E,CAAA"}
@@ -1,4 +1,4 @@
1
- import { ChainController, ConnectionController, OptionsController } from '@reown/appkit-core';
1
+ import { ChainController, ConnectionController, OptionsController, RouterController } from '@reown/appkit-core';
2
2
  import { ProviderUtil } from '@reown/appkit/store';
3
3
  import { ConstantsUtil as CommonConstantsUtil } from '@reown/appkit-common';
4
4
  import { assertWalletGrantPermissionsResponse, extractChainAndAddress, updateRequestSigner, validateRequest } from './helper/index.js';
@@ -27,6 +27,10 @@ export async function grantPermissions(request) {
27
27
  const cosignerService = new CosignerService(projectId);
28
28
  const addPermissionResponse = await cosignerService.addPermission(activeCaipAddress, request);
29
29
  updateRequestSigner(request, addPermissionResponse.key);
30
+ RouterController.pushTransactionStack({
31
+ view: 'SmartSessionCreated',
32
+ goBack: false
33
+ });
30
34
  const rawResponse = await connectionControllerClient.grantPermissions([request]);
31
35
  const response = assertWalletGrantPermissionsResponse(rawResponse);
32
36
  await cosignerService.activatePermissions(activeCaipAddress, {
@@ -1 +1 @@
1
- {"version":3,"file":"grantPermissions.js","sourceRoot":"","sources":["../../../../src/smart-session/grantPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAK3E,OAAO,EACL,oCAAoC,EACpC,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAkBzD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA4C;IAE5C,eAAe,CAAC,OAAO,CAAC,CAAA;IAExB,MAAM,WAAW,GAAG,uBAAuB,EAAE,CAAA;IAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IAED,MAAM,EAAE,iBAAiB,EAAE,GAAG,eAAe,CAAC,KAAK,CAAA;IAGnD,MAAM,eAAe,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;IACjE,IAAI,CAAC,iBAAiB,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAAA;IACjD,CAAC;IAED,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,UAAU,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAGjG,MAAM,kBAAkB,GAAG,CAAC,MAAM,0BAA0B,CAAC,eAAe,CAC1E,eAAe,CAAC,OAAO,CACxB,CAAuB,CAAA;IAExB,MAAM,UAAU,GAAkB,KAAK,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAA;IACzF,MAAM,uBAAuB,GAAG,kBAAkB,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,CAAA;IAE7E,IAAI,uBAAuB,EAAE,CAAC;QAC5B,gDAAgD,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAA;IACpF,CAAC;IAGD,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAA;IAG7C,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAA;IACtD,MAAM,qBAAqB,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;IAG7F,mBAAmB,CAAC,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAEvD,MAAM,WAAW,GAAG,MAAM,0BAA0B,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAGhF,MAAM,QAAQ,GAAG,oCAAoC,CAAC,WAAW,CAAC,CAAA;IAGlE,MAAM,eAAe,CAAC,mBAAmB,CAAC,iBAAiB,EAAE;QAC3D,GAAG,EAAE,qBAAqB,CAAC,GAAG;QAC9B,GAAG,QAAQ;KACZ,CAAC,CAAA;IAGF,OAAO;QACL,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,OAAO,EAAE,qBAAqB,CAAC,GAAG;QAClC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,eAAe,CAAC,OAAO;QACpD,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gDAAgD,CAC9D,OAA4C,EAC5C,YAAmC;IAEnC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,oBAAoB,GAAG,YAAY,CAAC,eAAe,CAAA;IACzD,MAAM,gBAAgB,GAAG,YAAY,CAAC,WAAW,CAAA;IACjD,MAAM,iBAAiB,GAAG,YAAY,CAAC,WAAW,CAAA;IAElD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QACvC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,mBAAmB,UAAU,CAAC,IAAI,2CAA2C,CAAC,CAAA;QAChG,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,CAAC,MAAM,CAAC,IAAI,2CAA2C,CAAC,CAAA;IAChG,CAAC;IAED,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAChC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,eAAe,MAAM,CAAC,IAAI,2CAA2C,CAAC,CAAA;QACxF,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAExE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,KAAK,CAAA;IACd,CAAC;IAGD,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;IAGD,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAClF,MAAM,gBAAgB,GAAG,YAAY,EAAE,OAAO,IAAI,EAAE,CAAA;IAEpD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;AAClD,CAAC"}
1
+ {"version":3,"file":"grantPermissions.js","sourceRoot":"","sources":["../../../../src/smart-session/grantPermissions.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,9 @@ export const ERROR_MESSAGES = {
14
14
  INVALID_PUBLIC_KEY_FORMAT: 'Invalid public key: must start with "0x"',
15
15
  INVALID_PERMISSIONS: 'Invalid permissions: must be a non-empty array',
16
16
  INVALID_PERMISSIONS_TYPE: 'Invalid permissions: Expected array, received object',
17
- INVALID_PERMISSIONS_TYPE_LITERALS: 'Invalid literal value, expected "contract-call"',
17
+ INVALID_ALLOWANCE_FORMAT: 'Invalid allowance: must be a hexadecimal string starting with "0x"',
18
+ INVALID_START: 'Invalid start time: must be a positive integer and in the future',
19
+ INVALID_PERIOD: 'Invalid period: must be a positive integer',
18
20
  INVALID_POLICIES: 'Invalid policies: must be a non-empty array',
19
21
  INVALID_POLICIES_TYPE: 'Invalid policies: Expected array, received object',
20
22
  INVALID_GRANT_PERMISSIONS_RESPONSE: 'Invalid grantPermissions response'
@@ -64,15 +66,45 @@ const FunctionPermissionSchema = z.object({
64
66
  operation: z.nativeEnum(Operation).optional()
65
67
  });
66
68
  const ContractCallPermissionSchema = z.object({
67
- type: z.literal('contract-call').refine(val => val === 'contract-call', {
68
- message: ERROR_MESSAGES.INVALID_PERMISSIONS_TYPE_LITERALS
69
- }),
69
+ type: z.literal('contract-call'),
70
70
  data: z.object({
71
71
  address: z.string().startsWith('0x', { message: ERROR_MESSAGES.INVALID_ADDRESS }),
72
72
  abi: z.array(z.record(z.unknown())),
73
73
  functions: z.array(FunctionPermissionSchema)
74
74
  })
75
75
  });
76
+ const NativeTokenRecurringAllowancePermissionSchema = z.object({
77
+ type: z.literal('native-token-recurring-allowance'),
78
+ data: z.object({
79
+ allowance: z.string().startsWith('0x', { message: ERROR_MESSAGES.INVALID_ALLOWANCE_FORMAT }),
80
+ start: z
81
+ .number()
82
+ .positive({ message: ERROR_MESSAGES.INVALID_START })
83
+ .refine(value => value > Math.floor(Date.now() / 1000), {
84
+ message: ERROR_MESSAGES.INVALID_START
85
+ }),
86
+ period: z.number().positive({ message: ERROR_MESSAGES.INVALID_PERIOD })
87
+ })
88
+ });
89
+ const ERC20RecurringAllowancePermissionSchema = z.object({
90
+ type: z.literal('erc20-recurring-allowance'),
91
+ data: z.object({
92
+ token: z.string().startsWith('0x', { message: ERROR_MESSAGES.INVALID_ADDRESS }),
93
+ allowance: z.string().startsWith('0x', { message: ERROR_MESSAGES.INVALID_ALLOWANCE_FORMAT }),
94
+ start: z
95
+ .number()
96
+ .positive({ message: ERROR_MESSAGES.INVALID_START })
97
+ .refine(value => value > Math.floor(Date.now() / 1000), {
98
+ message: ERROR_MESSAGES.INVALID_START
99
+ }),
100
+ period: z.number().positive({ message: ERROR_MESSAGES.INVALID_PERIOD })
101
+ })
102
+ });
103
+ const PermissionSchema = z.union([
104
+ ContractCallPermissionSchema,
105
+ NativeTokenRecurringAllowancePermissionSchema,
106
+ ERC20RecurringAllowancePermissionSchema
107
+ ]);
76
108
  const PolicySchema = z.object({
77
109
  type: z.string(),
78
110
  data: z.record(z.unknown())
@@ -84,7 +116,7 @@ export const SmartSessionGrantPermissionsRequestSchema = z
84
116
  expiry: ExpirySchema,
85
117
  signer: SignerSchema,
86
118
  permissions: z
87
- .array(ContractCallPermissionSchema)
119
+ .array(PermissionSchema)
88
120
  .nonempty({ message: ERROR_MESSAGES.INVALID_PERMISSIONS }),
89
121
  policies: z.array(PolicySchema)
90
122
  })
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/smart-session/schema/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/smart-session/schema/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement, UiHelperUtil } from '@reown/appkit-ui';
8
+ import { LitElement, html } from 'lit';
9
+ import styles from './styles.js';
10
+ import { property } from 'lit/decorators.js';
11
+ let WuiPermissionContractCall = class WuiPermissionContractCall extends LitElement {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.functions = [];
15
+ }
16
+ render() {
17
+ if (!this.contractAddress || !this.expiry) {
18
+ return null;
19
+ }
20
+ return html `
21
+ <wui-flex flexDirection="column" padding=${['l', '0', '0', '0']} alignItems="center">
22
+ <wui-details-group>
23
+ <wui-details-group-item name="Type">
24
+ <wui-text variant="paragraph-400" color="fg-100"> Contract Call </wui-text>
25
+ </wui-details-group-item>
26
+ <wui-details-group-item name="Contract">
27
+ <wui-text variant="paragraph-400" color="fg-100">
28
+ ${UiHelperUtil.getTruncateString({
29
+ string: this.contractAddress,
30
+ truncate: 'middle',
31
+ charsStart: 4,
32
+ charsEnd: 4
33
+ })}
34
+ </wui-text>
35
+ </wui-details-group-item>
36
+ <wui-details-group-item name="Functions">
37
+ <wui-text variant="paragraph-400" color="fg-100">
38
+ ${this.functions?.map(f => f.functionName).join(', ')}
39
+ </wui-text>
40
+ </wui-details-group-item>
41
+ <wui-flex justifyContent="space-between">
42
+ <wui-text color="fg-200">Duration</wui-text>
43
+ <wui-flex flexDirection="column" alignItems="flex-end" gap="s">
44
+ <wui-text variant="paragraph-400" color="fg-100">
45
+ ~ ${Math.round((1000 * this.expiry - Date.now()) / 1000 / 3600)} hours
46
+ </wui-text>
47
+ <wui-text variant="tiny-600" color="fg-300">
48
+ Expiring ${new Date(1000 * this.expiry).toDateString()}
49
+ </wui-text>
50
+ </wui-flex>
51
+ </wui-flex>
52
+ </wui-details-group>
53
+ </wui-flex>
54
+ `;
55
+ }
56
+ };
57
+ WuiPermissionContractCall.styles = styles;
58
+ __decorate([
59
+ property({ type: Array })
60
+ ], WuiPermissionContractCall.prototype, "functions", void 0);
61
+ __decorate([
62
+ property({ type: String })
63
+ ], WuiPermissionContractCall.prototype, "contractAddress", void 0);
64
+ __decorate([
65
+ property({ type: Number })
66
+ ], WuiPermissionContractCall.prototype, "expiry", void 0);
67
+ WuiPermissionContractCall = __decorate([
68
+ customElement('wui-permission-contract-call')
69
+ ], WuiPermissionContractCall);
70
+ export { WuiPermissionContractCall };
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/smart-session/ui/permissions/wui-permission-contract-call/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGrC,IAAM,yBAAyB,GAA/B,MAAM,yBAA0B,SAAQ,UAAU;IAAlD;;QAI6B,cAAS,GAAgC,EAAE,CAAA;IA8C/E,CAAC;IAzCiB,MAAM;QACpB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,IAAI,CAAA;iDACkC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;;;;;;;gBAOrD,YAAY,CAAC,iBAAiB,CAAC;YAC/B,MAAM,EAAE,IAAI,CAAC,eAAe;YAC5B,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;SACZ,CAAC;;;;;gBAKA,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;oBAO/C,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;;;2BAGpD,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;;;;;;KAMjE,CAAA;IACH,CAAC;;AA/CsB,gCAAM,GAAG,MAAM,AAAT,CAAS;AAEJ;IAAjC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;4DAAmD;AAC1C;IAAlC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kEAAuC;AAC/B;IAAlC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;yDAAuB;AANvC,yBAAyB;IADrC,aAAa,CAAC,8BAA8B,CAAC;GACjC,yBAAyB,CAkDrC"}
@@ -0,0 +1,11 @@
1
+ import { css } from 'lit';
2
+ export default css `
3
+ :host {
4
+ width: 100%;
5
+ }
6
+
7
+ wui-flex {
8
+ width: 100%;
9
+ }
10
+ `;
11
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../../src/smart-session/ui/permissions/wui-permission-contract-call/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAGzB,eAAe,GAAG,CAAA;;;;;;;;CAQjB,CAAA"}
@@ -0,0 +1,79 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { customElement } from '@reown/appkit-ui';
8
+ import { CoreHelperUtil, RouterController } from '@reown/appkit-core';
9
+ import { LitElement, html } from 'lit';
10
+ import styles from './styles.js';
11
+ import { NavigationUtil } from '@reown/appkit-common';
12
+ let W3mSmartSessionCreatedView = class W3mSmartSessionCreatedView extends LitElement {
13
+ render() {
14
+ return html `
15
+ <wui-flex
16
+ flexDirection="column"
17
+ alignItems="center"
18
+ gap="xxl"
19
+ .padding=${['0', '0', 'l', '0']}
20
+ >
21
+ ${this.onboardingTemplate()}
22
+ <wui-link
23
+ @click=${() => {
24
+ CoreHelperUtil.openHref(NavigationUtil.URLS.FAQ, '_blank');
25
+ }}
26
+ >
27
+ What's a Smart Session?
28
+ </wui-link>
29
+ ${this.buttonsTemplate()}
30
+ </wui-flex>
31
+ `;
32
+ }
33
+ onboardingTemplate() {
34
+ return html ` <wui-flex
35
+ flexDirection="column"
36
+ gap="xxl"
37
+ alignItems="center"
38
+ .padding=${['0', 'xxl', '0', 'xxl']}
39
+ >
40
+ <wui-flex gap="s" alignItems="center" justifyContent="center">
41
+ <wui-icon-box
42
+ size="xl"
43
+ iconcolor="fg-100"
44
+ backgroundcolor="inverse-100"
45
+ icon="clock"
46
+ background="opaque"
47
+ ></wui-icon-box>
48
+ </wui-flex>
49
+ <wui-flex flexDirection="column" alignItems="center" gap="s">
50
+ <wui-text align="center" variant="medium-600" color="fg-100">
51
+ Smart Session created successfully
52
+ </wui-text>
53
+ <wui-text align="center" variant="paragraph-400" color="fg-100">
54
+ You can manage your session from your account settings.
55
+ </wui-text>
56
+ </wui-flex>
57
+ </wui-flex>`;
58
+ }
59
+ buttonsTemplate() {
60
+ return html `<wui-flex
61
+ .padding=${['0', '2l', '0', '2l']}
62
+ gap="s"
63
+ class="continue-button-container"
64
+ >
65
+ <wui-button fullWidth size="lg" borderRadius="xs" @click=${this.redirectToAccount.bind(this)}>
66
+ Got it!
67
+ </wui-button>
68
+ </wui-flex>`;
69
+ }
70
+ redirectToAccount() {
71
+ RouterController.replace('Account');
72
+ }
73
+ };
74
+ W3mSmartSessionCreatedView.styles = styles;
75
+ W3mSmartSessionCreatedView = __decorate([
76
+ customElement('w3m-smart-session-created-view')
77
+ ], W3mSmartSessionCreatedView);
78
+ export { W3mSmartSessionCreatedView };
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/smart-session/ui/views/w3m-smart-session-created-view/index.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AACtC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAG9C,IAAM,0BAA0B,GAAhC,MAAM,0BAA2B,SAAQ,UAAU;IAIxC,MAAM;QACpB,OAAO,IAAI,CAAA;;;;;mBAKI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU;;UAEtC,IAAI,CAAC,kBAAkB,EAAE;;mBAEhB,GAAG,EAAE;YACZ,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAC5D,CAAC;;;;UAID,IAAI,CAAC,eAAe,EAAE;;KAE3B,CAAA;IACH,CAAC;IAGO,kBAAkB;QACxB,OAAO,IAAI,CAAA;;;;iBAIE,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,CAAU;;;;;;;;;;;;;;;;;;;gBAmBlC,CAAA;IACd,CAAC;IAEO,eAAe;QACrB,OAAO,IAAI,CAAA;iBACE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAU;;;;iEAIiB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;;;gBAGlF,CAAA;IACd,CAAC;IAEO,iBAAiB;QACvB,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC;;AAlEsB,iCAAM,GAAG,MAAM,AAAT,CAAS;AAD3B,0BAA0B;IADtC,aAAa,CAAC,gCAAgC,CAAC;GACnC,0BAA0B,CAoEtC"}
@@ -0,0 +1,7 @@
1
+ import { css } from 'lit';
2
+ export default css `
3
+ .continue-button-container {
4
+ width: 100%;
5
+ }
6
+ `;
7
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../../../../../src/smart-session/ui/views/w3m-smart-session-created-view/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAEzB,eAAe,GAAG,CAAA;;;;CAIjB,CAAA"}
@@ -0,0 +1,14 @@
1
+ export function mockRequest() {
2
+ return {
3
+ chainId: '0x1',
4
+ expiry: Date.now() + 10000,
5
+ signer: {
6
+ type: 'keys',
7
+ data: {
8
+ keys: [{ type: 'secp256k1', publicKey: '0x123456' }]
9
+ }
10
+ },
11
+ policies: []
12
+ };
13
+ }
14
+ //# sourceMappingURL=mockRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockRequest.js","sourceRoot":"","sources":["../../../../../tests/smart-session/requestValidation/mockRequest.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,OAAO,EAAE,KAAsB;QAC/B,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;QAC1B,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE;gBACJ,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,UAA2B,EAAE,CAAC;aACtE;SACF;QACD,QAAQ,EAAE,EAAE;KAC+C,CAAA;AAC/D,CAAC"}
@@ -0,0 +1,290 @@
1
+ import { describe, expect, it, beforeEach } from 'vitest';
2
+ import { validateRequest } from '../../../src/smart-session/helper/index.js';
3
+ import { donutContractAbi } from '../../data/abi.js';
4
+ import { ERROR_MESSAGES } from '../../../src/smart-session/schema/index.js';
5
+ import { mockRequest } from './mockRequest.js';
6
+ describe('Common field validation', () => {
7
+ let testRequest;
8
+ beforeEach(() => {
9
+ testRequest = {
10
+ ...mockRequest(),
11
+ permissions: [
12
+ {
13
+ type: 'contract-call',
14
+ data: {
15
+ address: '0x2E65BAfA07238666c3b239E94F32DaD3cDD6498D',
16
+ abi: donutContractAbi,
17
+ functions: [
18
+ {
19
+ functionName: 'purchase'
20
+ }
21
+ ]
22
+ }
23
+ }
24
+ ]
25
+ };
26
+ });
27
+ it('should pass for a valid request', () => {
28
+ expect(() => validateRequest(testRequest)).not.toThrow();
29
+ });
30
+ it('should fail for missing chainId', () => {
31
+ const { chainId, ...requestWithoutChainId } = testRequest;
32
+ expect(() => validateRequest(requestWithoutChainId)).toThrow('Invalid chainId: Required');
33
+ });
34
+ describe('ChainIdSchema Validation', () => {
35
+ it('should pass for valid chainId', () => {
36
+ const request = { ...testRequest, chainId: '0x1' };
37
+ expect(() => validateRequest(request)).not.toThrow();
38
+ });
39
+ it.each([
40
+ [null, 'null'],
41
+ [undefined, 'undefined'],
42
+ [123, 'number'],
43
+ [{}, 'object'],
44
+ [[], 'array'],
45
+ ['', 'empty string'],
46
+ ['123456', 'string without 0x prefix'],
47
+ ['0x', 'only 0x'],
48
+ ['0xZZZZZZ', 'invalid hexadecimal']
49
+ ])('should fail for %s chainId', (chainId, _description) => {
50
+ const request = { ...testRequest, chainId };
51
+ if (chainId === undefined) {
52
+ const { chainId, ...requestWithoutChainId } = request;
53
+ expect(() => validateRequest(requestWithoutChainId)).toThrow(/Invalid chainId/);
54
+ }
55
+ else {
56
+ expect(() => validateRequest(request)).toThrow(/Invalid chainId/);
57
+ }
58
+ });
59
+ it('should handle chainIds with leading zeros', () => {
60
+ const request = { ...testRequest, chainId: '0x01' };
61
+ expect(() => validateRequest(request)).not.toThrow();
62
+ });
63
+ it('should be case insensitive for hex characters', () => {
64
+ const request1 = { ...testRequest, chainId: '0xaB1' };
65
+ const request2 = { ...testRequest, chainId: '0xAb1' };
66
+ expect(() => validateRequest(request1)).not.toThrow();
67
+ expect(() => validateRequest(request2)).not.toThrow();
68
+ });
69
+ });
70
+ describe('Address field validation', () => {
71
+ it('should pass for valid Ethereum address', () => {
72
+ const request = {
73
+ ...testRequest,
74
+ address: '0x1234567890123456789012345678901234567890'
75
+ };
76
+ expect(() => validateRequest(request)).not.toThrow();
77
+ });
78
+ it('should pass when address is omitted', () => {
79
+ const { address, ...requestWithoutAddress } = testRequest;
80
+ expect(() => validateRequest(requestWithoutAddress)).not.toThrow();
81
+ });
82
+ it('should fail for address not starting with 0x', () => {
83
+ const request = {
84
+ ...testRequest,
85
+ address: '1234567890123456789012345678901234567890'
86
+ };
87
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
88
+ });
89
+ it('should fail for empty string address', () => {
90
+ const request = { ...testRequest, address: '' };
91
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
92
+ });
93
+ it('should fail for non-string address', () => {
94
+ const request = { ...testRequest, address: 123 };
95
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
96
+ });
97
+ it('should fail for null address', () => {
98
+ const request = { ...testRequest, address: null };
99
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_ADDRESS);
100
+ });
101
+ it('should fail for undefined address', () => {
102
+ const request = { ...testRequest, address: undefined };
103
+ expect(() => validateRequest(request)).not.toThrow();
104
+ });
105
+ it('should be case insensitive for hex characters', () => {
106
+ const request = { ...testRequest, address: ('0xAbCd' + '0'.repeat(36)) };
107
+ expect(() => validateRequest(request)).not.toThrow();
108
+ });
109
+ });
110
+ describe('Expiry field validation', () => {
111
+ const currentTimestamp = Math.floor(Date.now() / 1000);
112
+ it('should pass for a valid future expiry', () => {
113
+ const request = { ...testRequest, expiry: currentTimestamp + 3600 };
114
+ expect(() => validateRequest(request)).not.toThrow();
115
+ });
116
+ it('should fail for a negative expiry', () => {
117
+ const request = { ...testRequest, expiry: -1 };
118
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
119
+ });
120
+ it('should fail for a zero expiry', () => {
121
+ const request = { ...testRequest, expiry: 0 };
122
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
123
+ });
124
+ it('should fail for a past expiry', () => {
125
+ const request = { ...testRequest, expiry: currentTimestamp - 3600 };
126
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
127
+ });
128
+ it('should fail for a current timestamp expiry', () => {
129
+ const request = { ...testRequest, expiry: currentTimestamp };
130
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_EXPIRY);
131
+ });
132
+ it('should fail for a non-number expiry', () => {
133
+ const request = { ...testRequest, expiry: '1234567890' };
134
+ expect(() => validateRequest(request)).toThrow('Invalid expiry: Expected number, received string');
135
+ });
136
+ it('should fail for an undefined expiry', () => {
137
+ const { expiry, ...requestWithoutExpiry } = testRequest;
138
+ expect(() => validateRequest(requestWithoutExpiry)).toThrow('Invalid expiry: Required');
139
+ });
140
+ it('should fail for a null expiry', () => {
141
+ const request = { ...testRequest, expiry: null };
142
+ expect(() => validateRequest(request)).toThrow('Invalid expiry: Expected number, received null');
143
+ });
144
+ it('should pass for an expiry 1 hour in the future', () => {
145
+ const request = { ...testRequest, expiry: currentTimestamp + 3600 };
146
+ expect(() => validateRequest(request)).not.toThrow();
147
+ });
148
+ });
149
+ describe('Signer field validation', () => {
150
+ it('should fail for unsupported signer', () => {
151
+ const request = {
152
+ ...testRequest,
153
+ signer: {
154
+ type: 'key',
155
+ data: { type: 'secp256k1', publicKey: '0x1234567890abcdef' }
156
+ }
157
+ };
158
+ expect(() => validateRequest(request)).toThrow();
159
+ });
160
+ it('should pass for valid multi-key signer', () => {
161
+ const request = {
162
+ ...testRequest,
163
+ signer: {
164
+ type: 'keys',
165
+ data: {
166
+ keys: [
167
+ { type: 'secp256k1', publicKey: '0x1234567890abcdef' },
168
+ { type: 'secp256r1', publicKey: '0xabcdef1234567890' }
169
+ ]
170
+ }
171
+ }
172
+ };
173
+ expect(() => validateRequest(request)).not.toThrow();
174
+ });
175
+ it('should fail for empty keys array in multi-key signer', () => {
176
+ const request = {
177
+ ...testRequest,
178
+ signer: { type: 'keys', data: { keys: [] } }
179
+ };
180
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_KEYS_SIGNER);
181
+ });
182
+ it('should fail for missing data in multi-key signer', () => {
183
+ const request = {
184
+ ...testRequest,
185
+ signer: { type: 'keys' }
186
+ };
187
+ expect(() => validateRequest(request)).toThrow('Invalid signer.data: Required');
188
+ });
189
+ it('should fail for missing keys in multi-key signer', () => {
190
+ const request = {
191
+ ...testRequest,
192
+ signer: { type: 'keys', data: {} }
193
+ };
194
+ expect(() => validateRequest(request)).toThrow('Invalid signer.data.keys: Required');
195
+ });
196
+ it('should fail for non-object signer', () => {
197
+ const request = {
198
+ ...testRequest,
199
+ signer: 'invalid'
200
+ };
201
+ expect(() => validateRequest(request)).toThrow('Invalid signer: Expected object, received string');
202
+ });
203
+ it('should fail for null signer', () => {
204
+ const request = {
205
+ ...testRequest,
206
+ signer: null
207
+ };
208
+ expect(() => validateRequest(request)).toThrow('Invalid signer: Expected object, received null');
209
+ });
210
+ it('should fail for signer with invalid key type', () => {
211
+ const request = {
212
+ ...testRequest,
213
+ signer: {
214
+ type: 'keys',
215
+ data: {
216
+ keys: [{ type: 'invalid', publicKey: '0x1234567890abcdef' }]
217
+ }
218
+ }
219
+ };
220
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.UNSUPPORTED_KEY_TYPE);
221
+ });
222
+ it('should fail for signer with invalid public key format', () => {
223
+ const request = {
224
+ ...testRequest,
225
+ signer: {
226
+ type: 'keys',
227
+ data: {
228
+ keys: [{ type: 'secp256k1', publicKey: 'invalid' }]
229
+ }
230
+ }
231
+ };
232
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_PUBLIC_KEY_FORMAT);
233
+ });
234
+ });
235
+ describe('Policy field validation', () => {
236
+ it('should pass for valid policies array', () => {
237
+ const request = {
238
+ ...testRequest,
239
+ policies: [
240
+ { type: 'someType', data: { someKey: 'someValue' } },
241
+ { type: 'anotherType', data: { anotherKey: 'anotherValue' } }
242
+ ]
243
+ };
244
+ expect(() => validateRequest(request)).not.toThrow();
245
+ });
246
+ it('should pass for empty policies array', () => {
247
+ const request = {
248
+ ...testRequest,
249
+ policies: []
250
+ };
251
+ expect(() => validateRequest(request)).not.toThrow();
252
+ });
253
+ it('should fail for non-array policies', () => {
254
+ const request = {
255
+ ...testRequest,
256
+ policies: { type: 'someType', data: {} }
257
+ };
258
+ expect(() => validateRequest(request)).toThrow(ERROR_MESSAGES.INVALID_POLICIES_TYPE);
259
+ });
260
+ it('should fail for policies with invalid structure', () => {
261
+ const request = {
262
+ ...testRequest,
263
+ policies: [{ invalidKey: 'value' }]
264
+ };
265
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.type: Required; Invalid policies.0.data: Required');
266
+ });
267
+ it('should fail for policies with missing type', () => {
268
+ const request = {
269
+ ...testRequest,
270
+ policies: [{ data: { key: 'value' } }]
271
+ };
272
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.type: Required');
273
+ });
274
+ it('should fail for policies with missing data', () => {
275
+ const request = {
276
+ ...testRequest,
277
+ policies: [{ type: 'someType' }]
278
+ };
279
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.data: Required');
280
+ });
281
+ it('should fail for policies with non-object data', () => {
282
+ const request = {
283
+ ...testRequest,
284
+ policies: [{ type: 'someType', data: 'invalidData' }]
285
+ };
286
+ expect(() => validateRequest(request)).toThrow('Invalid policies.0.data: Expected object, received string');
287
+ });
288
+ });
289
+ });
290
+ //# sourceMappingURL=validateCommonFields.test.js.map