@frontiertower/frontier-sdk 0.3.4 → 0.7.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/dist/index.mjs CHANGED
@@ -6,6 +6,11 @@ import {
6
6
  } from "./chunk-7VB6TETG.mjs";
7
7
 
8
8
  // src/access/wallet.ts
9
+ var SwapResultStatus = /* @__PURE__ */ ((SwapResultStatus2) => {
10
+ SwapResultStatus2["COMPLETED"] = "COMPLETED";
11
+ SwapResultStatus2["SUBMITTED"] = "SUBMITTED";
12
+ return SwapResultStatus2;
13
+ })(SwapResultStatus || {});
9
14
  var WalletAccess = class {
10
15
  constructor(sdk) {
11
16
  this.sdk = sdk;
@@ -236,6 +241,126 @@ var WalletAccess = class {
236
241
  overrides
237
242
  });
238
243
  }
244
+ /**
245
+ * Execute multiple calls atomically with a single signature
246
+ *
247
+ * Executes multiple contract interactions in a single transaction.
248
+ * All calls are executed atomically - if one fails, all fail.
249
+ *
250
+ * @param calls - Array of execute call parameters
251
+ * @param overrides - Optional gas overrides
252
+ * @returns User operation receipt with transaction details
253
+ * @throws {Error} If any transaction fails
254
+ *
255
+ * @example
256
+ * ```typescript
257
+ * import { encodeFunctionData } from 'viem';
258
+ *
259
+ * const receipt = await sdk.getWallet().executeBatchCall([
260
+ * {
261
+ * to: '0xToken1',
262
+ * value: 0n,
263
+ * data: encodeFunctionData({ abi: erc20Abi, functionName: 'approve', args: [...] })
264
+ * },
265
+ * {
266
+ * to: '0xProtocol',
267
+ * value: 0n,
268
+ * data: encodeFunctionData({ abi: protocolAbi, functionName: 'deposit', args: [...] })
269
+ * }
270
+ * ]);
271
+ * ```
272
+ */
273
+ async executeBatchCall(calls, overrides) {
274
+ return this.sdk.request("wallet:executeBatchCall", {
275
+ calls,
276
+ overrides
277
+ });
278
+ }
279
+ /**
280
+ * Get list of supported token symbols for the current chain
281
+ *
282
+ * Returns an array of token symbols that are supported for swaps
283
+ * and other operations on the current network.
284
+ *
285
+ * @returns Array of token symbols (e.g., ['FTD', 'USDC', 'WETH'])
286
+ *
287
+ * @example
288
+ * ```typescript
289
+ * const tokens = await sdk.getWallet().getSupportedTokens();
290
+ * console.log('Supported tokens:', tokens); // ['FTD', 'USDC', 'WETH']
291
+ * ```
292
+ */
293
+ async getSupportedTokens() {
294
+ return this.sdk.request("wallet:getSupportedTokens");
295
+ }
296
+ /**
297
+ * Execute a token swap
298
+ *
299
+ * @param sourceToken - Symbol of the token to swap from (e.g., 'USDC')
300
+ * @param targetToken - Symbol of the token to swap to (e.g., 'WETH')
301
+ * @param sourceNetwork - Network identifier for source chain (e.g., 'base')
302
+ * @param targetNetwork - Network identifier for target chain (e.g., 'ethereum')
303
+ * @param amount - Amount to swap in human-readable format (e.g., '100.5')
304
+ * @returns Swap result with status and transaction details
305
+ * @throws {Error} If swap fails or tokens/networks are not supported
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * const result = await sdk.getWallet().swap(
310
+ * 'USDC',
311
+ * 'WETH',
312
+ * 'base',
313
+ * 'ethereum',
314
+ * '100.5'
315
+ * );
316
+ * console.log('Swap status:', result.status);
317
+ * ```
318
+ */
319
+ async swap(sourceToken, targetToken, sourceNetwork, targetNetwork, amount) {
320
+ return this.sdk.request("wallet:swap", {
321
+ sourceToken,
322
+ targetToken,
323
+ sourceNetwork,
324
+ targetNetwork,
325
+ amount
326
+ });
327
+ }
328
+ /**
329
+ * Get a quote for a token swap without executing it
330
+ *
331
+ * Returns the expected output amount for a given swap.
332
+ * Useful for displaying swap previews to users before confirmation.
333
+ *
334
+ * @param sourceToken - Symbol of the token to swap from (e.g., 'USDC')
335
+ * @param targetToken - Symbol of the token to swap to (e.g., 'WETH')
336
+ * @param sourceNetwork - Network identifier for source chain (e.g., 'base')
337
+ * @param targetNetwork - Network identifier for target chain (e.g., 'ethereum')
338
+ * @param amount - Amount to swap in human-readable format (e.g., '100.5')
339
+ * @returns Quote with expected and minimum output amounts
340
+ * @throws {Error} If tokens/networks are not supported
341
+ *
342
+ * @example
343
+ * ```typescript
344
+ * const quote = await sdk.getWallet().quoteSwap(
345
+ * 'USDC',
346
+ * 'WETH',
347
+ * 'base',
348
+ * 'ethereum',
349
+ * '100.5'
350
+ * );
351
+ * console.log('Expected output:', quote.expectedAmountOut);
352
+ * console.log('Minimum output:', quote.minAmountOut);
353
+ * ```
354
+ */
355
+ async quoteSwap(sourceToken, targetToken, sourceNetwork, targetNetwork, amount) {
356
+ return this.sdk.request("wallet:quoteSwap", {
357
+ sourceToken,
358
+ targetToken,
359
+ sourceNetwork,
360
+ targetNetwork,
361
+ amount
362
+ });
363
+ }
239
364
  };
240
365
 
241
366
  // src/access/storage.ts
@@ -460,6 +585,395 @@ var UserAccess = class {
460
585
  }
461
586
  };
462
587
 
588
+ // src/access/partnerships.ts
589
+ var PartnershipsAccess = class {
590
+ constructor(sdk) {
591
+ this.sdk = sdk;
592
+ }
593
+ /**
594
+ * Create a SponsorPass
595
+ * Requires permission: `partnerships:createSponsorPass` or `partnerships:*`
596
+ *
597
+ * @param payload - SponsorPass creation payload
598
+ * @returns Created SponsorPass
599
+ *
600
+ * @example
601
+ * ```typescript
602
+ * const pass = await sdk.getPartnerships().createSponsorPass({
603
+ * sponsor: 123,
604
+ * firstName: 'Ada',
605
+ * lastName: 'Lovelace',
606
+ * email: 'ada@example.com',
607
+ * });
608
+ * console.log('Created SponsorPass:', pass.id);
609
+ * ```
610
+ */
611
+ async createSponsorPass(payload) {
612
+ return this.sdk.request("partnerships:createSponsorPass", payload);
613
+ }
614
+ /**
615
+ * List active SponsorPasses (paginated)
616
+ * Requires permission: `partnerships:listActiveSponsorPasses` or `partnerships:*`
617
+ *
618
+ * @param payload.limit - Maximum number of results to return
619
+ * @param payload.offset - Offset into the result set
620
+ * @returns Paginated response of active SponsorPasses
621
+ *
622
+ * @example
623
+ * ```typescript
624
+ * const active = await sdk.getPartnerships().listActiveSponsorPasses({ limit: 20, offset: 0 });
625
+ * console.log('Active count:', active.count);
626
+ * ```
627
+ */
628
+ async listActiveSponsorPasses(payload) {
629
+ return this.sdk.request("partnerships:listActiveSponsorPasses", payload);
630
+ }
631
+ /**
632
+ * List all SponsorPasses (paginated)
633
+ * Requires permission: `partnerships:listAllSponsorPasses` or `partnerships:*`
634
+ *
635
+ * @param payload.includeRevoked - When true, include revoked passes
636
+ * @returns Paginated response of SponsorPasses
637
+ *
638
+ * @example
639
+ * ```typescript
640
+ * const all = await sdk.getPartnerships().listAllSponsorPasses({ includeRevoked: true, limit: 50, offset: 0 });
641
+ * console.log('Total passes:', all.count);
642
+ * ```
643
+ */
644
+ async listAllSponsorPasses(payload) {
645
+ return this.sdk.request("partnerships:listAllSponsorPasses", payload);
646
+ }
647
+ async listSponsors(payload) {
648
+ return this.sdk.request("partnerships:listSponsors", payload);
649
+ }
650
+ async getSponsor(payload) {
651
+ return this.sdk.request("partnerships:getSponsor", payload);
652
+ }
653
+ /**
654
+ * Retrieve a specific SponsorPass by ID
655
+ * Requires permission: `partnerships:getSponsorPass` or `partnerships:*`
656
+ *
657
+ * @param payload.id - SponsorPass ID
658
+ * @returns SponsorPass
659
+ *
660
+ * @example
661
+ * ```typescript
662
+ * const pass = await sdk.getPartnerships().getSponsorPass({ id: 123 });
663
+ * console.log('SponsorPass:', pass);
664
+ * ```
665
+ */
666
+ async getSponsorPass(payload) {
667
+ return this.sdk.request("partnerships:getSponsorPass", payload);
668
+ }
669
+ /**
670
+ * Revoke a SponsorPass by ID
671
+ * Requires permission: `partnerships:revokeSponsorPass` or `partnerships:*`
672
+ *
673
+ * Note: backend revokes (does not delete).
674
+ *
675
+ * @param payload.id - SponsorPass ID
676
+ *
677
+ * @example
678
+ * ```typescript
679
+ * await sdk.getPartnerships().revokeSponsorPass({ id: 123 });
680
+ * ```
681
+ */
682
+ async revokeSponsorPass(payload) {
683
+ return this.sdk.request("partnerships:revokeSponsorPass", payload);
684
+ }
685
+ };
686
+
687
+ // src/access/third-party.ts
688
+ var ThirdPartyAccess = class {
689
+ constructor(sdk) {
690
+ this.sdk = sdk;
691
+ }
692
+ // ===========================================================================
693
+ // Developer Methods
694
+ // ===========================================================================
695
+ /**
696
+ * List developer accounts (paginated)
697
+ * Requires permission: `thirdParty:listDevelopers` or `thirdParty:*`
698
+ *
699
+ * @param payload.limit - Maximum number of results to return
700
+ * @param payload.offset - Offset into the result set
701
+ * @returns Paginated response of developers
702
+ *
703
+ * @example
704
+ * ```typescript
705
+ * const developers = await sdk.getThirdParty().listDevelopers({ limit: 20, offset: 0 });
706
+ * console.log('Total developers:', developers.count);
707
+ * ```
708
+ */
709
+ async listDevelopers(payload) {
710
+ return this.sdk.request("thirdParty:listDevelopers", payload);
711
+ }
712
+ /**
713
+ * Get developer details by ID
714
+ * Requires permission: `thirdParty:getDeveloper` or `thirdParty:*`
715
+ *
716
+ * @param payload.id - Developer ID
717
+ * @returns Developer details
718
+ *
719
+ * @example
720
+ * ```typescript
721
+ * const developer = await sdk.getThirdParty().getDeveloper({ id: 123 });
722
+ * console.log('Developer:', developer.name);
723
+ * ```
724
+ */
725
+ async getDeveloper(payload) {
726
+ return this.sdk.request("thirdParty:getDeveloper", payload);
727
+ }
728
+ /**
729
+ * Update developer information
730
+ * Requires permission: `thirdParty:updateDeveloper` or `thirdParty:*`
731
+ *
732
+ * @param payload.id - Developer ID
733
+ * @param payload.data - Update data
734
+ * @returns Updated developer
735
+ *
736
+ * @example
737
+ * ```typescript
738
+ * const developer = await sdk.getThirdParty().updateDeveloper({
739
+ * id: 123,
740
+ * data: { name: 'New Name', website: 'https://example.com' }
741
+ * });
742
+ * ```
743
+ */
744
+ async updateDeveloper(payload) {
745
+ return this.sdk.request("thirdParty:updateDeveloper", payload);
746
+ }
747
+ /**
748
+ * Rotate developer API key
749
+ * Requires permission: `thirdParty:rotateDeveloperApiKey` or `thirdParty:*`
750
+ *
751
+ * Note: The new API key is only shown once in the response
752
+ *
753
+ * @param payload.id - Developer ID
754
+ * @returns Response containing the new API key
755
+ *
756
+ * @example
757
+ * ```typescript
758
+ * const result = await sdk.getThirdParty().rotateDeveloperApiKey({ id: 123 });
759
+ * console.log('New API key:', result.apiKey);
760
+ * // Store this key securely - it won't be shown again!
761
+ * ```
762
+ */
763
+ async rotateDeveloperApiKey(payload) {
764
+ return this.sdk.request("thirdParty:rotateDeveloperApiKey", payload);
765
+ }
766
+ // ===========================================================================
767
+ // App Methods
768
+ // ===========================================================================
769
+ /**
770
+ * List registered apps (paginated)
771
+ * Requires permission: `thirdParty:listApps` or `thirdParty:*`
772
+ *
773
+ * @param payload.limit - Maximum number of results to return
774
+ * @param payload.offset - Offset into the result set
775
+ * @param payload.developerId - Filter by developer ID
776
+ * @returns Paginated response of apps
777
+ *
778
+ * @example
779
+ * ```typescript
780
+ * const apps = await sdk.getThirdParty().listApps({ limit: 20, offset: 0 });
781
+ * console.log('Total apps:', apps.count);
782
+ *
783
+ * // Filter by developer
784
+ * const devApps = await sdk.getThirdParty().listApps({ developerId: 123 });
785
+ * ```
786
+ */
787
+ async listApps(payload) {
788
+ return this.sdk.request("thirdParty:listApps", payload);
789
+ }
790
+ /**
791
+ * Register a new app
792
+ * Requires permission: `thirdParty:createApp` or `thirdParty:*`
793
+ *
794
+ * Note: App name, description, and icon are automatically fetched from the URL's metadata
795
+ *
796
+ * @param payload - App creation payload with URL
797
+ * @returns Created app
798
+ *
799
+ * @example
800
+ * ```typescript
801
+ * const app = await sdk.getThirdParty().createApp({
802
+ * url: 'https://myapp.example.com'
803
+ * });
804
+ * console.log('Created app:', app.id, app.name);
805
+ * ```
806
+ */
807
+ async createApp(payload) {
808
+ return this.sdk.request("thirdParty:createApp", payload);
809
+ }
810
+ /**
811
+ * Get app details by ID
812
+ * Requires permission: `thirdParty:getApp` or `thirdParty:*`
813
+ *
814
+ * @param payload.id - App ID
815
+ * @returns App details
816
+ *
817
+ * @example
818
+ * ```typescript
819
+ * const app = await sdk.getThirdParty().getApp({ id: 123 });
820
+ * console.log('App:', app.name, app.status);
821
+ * ```
822
+ */
823
+ async getApp(payload) {
824
+ return this.sdk.request("thirdParty:getApp", payload);
825
+ }
826
+ /**
827
+ * Update an app
828
+ * Requires permission: `thirdParty:updateApp` or `thirdParty:*`
829
+ *
830
+ * @param payload.id - App ID
831
+ * @param payload.data - Update data
832
+ * @returns Updated app
833
+ *
834
+ * @example
835
+ * ```typescript
836
+ * const app = await sdk.getThirdParty().updateApp({
837
+ * id: 123,
838
+ * data: { name: 'Updated App Name', description: 'New description' }
839
+ * });
840
+ * ```
841
+ */
842
+ async updateApp(payload) {
843
+ return this.sdk.request("thirdParty:updateApp", payload);
844
+ }
845
+ /**
846
+ * Request app deactivation
847
+ * Requires permission: `thirdParty:deleteApp` or `thirdParty:*`
848
+ *
849
+ * @param payload.id - App ID
850
+ *
851
+ * @example
852
+ * ```typescript
853
+ * await sdk.getThirdParty().deleteApp({ id: 123 });
854
+ * ```
855
+ */
856
+ async deleteApp(payload) {
857
+ return this.sdk.request("thirdParty:deleteApp", payload);
858
+ }
859
+ // ===========================================================================
860
+ // Webhook Methods
861
+ // ===========================================================================
862
+ /**
863
+ * List webhooks (paginated)
864
+ * Requires permission: `thirdParty:listWebhooks` or `thirdParty:*`
865
+ *
866
+ * Note: Maximum 3 webhooks per developer account
867
+ *
868
+ * @param payload.limit - Maximum number of results to return
869
+ * @param payload.offset - Offset into the result set
870
+ * @param payload.developerId - Filter by developer ID
871
+ * @returns Paginated response of webhooks
872
+ *
873
+ * @example
874
+ * ```typescript
875
+ * const webhooks = await sdk.getThirdParty().listWebhooks({ limit: 10, offset: 0 });
876
+ * console.log('Total webhooks:', webhooks.count);
877
+ *
878
+ * // Filter by developer
879
+ * const devWebhooks = await sdk.getThirdParty().listWebhooks({ developerId: 123 });
880
+ * ```
881
+ */
882
+ async listWebhooks(payload) {
883
+ return this.sdk.request("thirdParty:listWebhooks", payload);
884
+ }
885
+ /**
886
+ * Create a new webhook
887
+ * Requires permission: `thirdParty:createWebhook` or `thirdParty:*`
888
+ *
889
+ * Note: New webhooks require admin approval before going live
890
+ *
891
+ * @param payload - Webhook creation payload
892
+ * @returns Created webhook
893
+ *
894
+ * @example
895
+ * ```typescript
896
+ * const webhook = await sdk.getThirdParty().createWebhook({
897
+ * url: 'https://myapp.example.com/webhooks',
898
+ * events: ['app.approved', 'user.registered']
899
+ * });
900
+ * console.log('Created webhook:', webhook.id);
901
+ * ```
902
+ */
903
+ async createWebhook(payload) {
904
+ return this.sdk.request("thirdParty:createWebhook", payload);
905
+ }
906
+ /**
907
+ * Get webhook details by ID
908
+ * Requires permission: `thirdParty:getWebhook` or `thirdParty:*`
909
+ *
910
+ * @param payload.id - Webhook ID
911
+ * @returns Webhook details
912
+ *
913
+ * @example
914
+ * ```typescript
915
+ * const webhook = await sdk.getThirdParty().getWebhook({ id: 123 });
916
+ * console.log('Webhook:', webhook.url, webhook.status);
917
+ * ```
918
+ */
919
+ async getWebhook(payload) {
920
+ return this.sdk.request("thirdParty:getWebhook", payload);
921
+ }
922
+ /**
923
+ * Update a webhook
924
+ * Requires permission: `thirdParty:updateWebhook` or `thirdParty:*`
925
+ *
926
+ * Note: Config changes require admin approval before going live
927
+ *
928
+ * @param payload.id - Webhook ID
929
+ * @param payload.data - Update data
930
+ * @returns Updated webhook
931
+ *
932
+ * @example
933
+ * ```typescript
934
+ * const webhook = await sdk.getThirdParty().updateWebhook({
935
+ * id: 123,
936
+ * data: { url: 'https://newurl.example.com/webhooks' }
937
+ * });
938
+ * ```
939
+ */
940
+ async updateWebhook(payload) {
941
+ return this.sdk.request("thirdParty:updateWebhook", payload);
942
+ }
943
+ /**
944
+ * Delete a webhook
945
+ * Requires permission: `thirdParty:deleteWebhook` or `thirdParty:*`
946
+ *
947
+ * @param payload.id - Webhook ID
948
+ *
949
+ * @example
950
+ * ```typescript
951
+ * await sdk.getThirdParty().deleteWebhook({ id: 123 });
952
+ * ```
953
+ */
954
+ async deleteWebhook(payload) {
955
+ return this.sdk.request("thirdParty:deleteWebhook", payload);
956
+ }
957
+ /**
958
+ * Rotate webhook signing key
959
+ * Requires permission: `thirdParty:rotateWebhookSigningKey` or `thirdParty:*`
960
+ *
961
+ * Note: The new signing public key is returned in the response
962
+ *
963
+ * @param payload.id - Webhook ID
964
+ * @returns Response containing the new signing public key
965
+ *
966
+ * @example
967
+ * ```typescript
968
+ * const result = await sdk.getThirdParty().rotateWebhookSigningKey({ id: 123 });
969
+ * console.log('New signing key:', result.signingPublicKey);
970
+ * ```
971
+ */
972
+ async rotateWebhookSigningKey(payload) {
973
+ return this.sdk.request("thirdParty:rotateWebhookSigningKey", payload);
974
+ }
975
+ };
976
+
463
977
  // src/sdk.ts
464
978
  var FrontierSDK = class {
465
979
  constructor() {
@@ -482,6 +996,8 @@ var FrontierSDK = class {
482
996
  this.storage = new StorageAccess(this);
483
997
  this.chain = new ChainAccess(this);
484
998
  this.user = new UserAccess(this);
999
+ this.partnerships = new PartnershipsAccess(this);
1000
+ this.thirdParty = new ThirdPartyAccess(this);
485
1001
  window.addEventListener("message", this.handleMessage);
486
1002
  this.notifyReady();
487
1003
  }
@@ -530,6 +1046,18 @@ var FrontierSDK = class {
530
1046
  getUser() {
531
1047
  return this.user;
532
1048
  }
1049
+ /**
1050
+ * Get partnerships access instance
1051
+ */
1052
+ getPartnerships() {
1053
+ return this.partnerships;
1054
+ }
1055
+ /**
1056
+ * Get third-party access instance
1057
+ */
1058
+ getThirdParty() {
1059
+ return this.thirdParty;
1060
+ }
533
1061
  /**
534
1062
  * Cleanup: Remove event listeners
535
1063
  * Call this when your app is being destroyed
@@ -542,7 +1070,10 @@ var FrontierSDK = class {
542
1070
  export {
543
1071
  ChainAccess,
544
1072
  FrontierSDK,
1073
+ PartnershipsAccess,
545
1074
  StorageAccess,
1075
+ SwapResultStatus,
1076
+ ThirdPartyAccess,
546
1077
  UserAccess,
547
1078
  WalletAccess,
548
1079
  createStandaloneHTML,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontiertower/frontier-sdk",
3
- "version": "0.3.4",
3
+ "version": "0.7.0",
4
4
  "description": "SDK for building apps on Frontier Wallet",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -47,8 +47,5 @@
47
47
  "type": "git",
48
48
  "url": "git+https://github.com/BerlinhouseLabs/frontier-sdk.git"
49
49
  },
50
- "readme": "README.md",
51
- "dependencies": {
52
- "@frontiertower/frontier-sdk": "^0.3.0"
53
- }
50
+ "readme": "README.md"
54
51
  }