@openzeppelin/ui-builder-adapter-stellar 1.3.0 → 1.5.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.d.cts CHANGED
@@ -35,6 +35,10 @@ declare class StellarAdapter implements ContractAdapter {
35
35
  latency?: number;
36
36
  error?: string;
37
37
  }>;
38
+ /**
39
+ * @inheritdoc
40
+ */
41
+ getDefaultServiceConfig(serviceId: string): Record<string, unknown> | null;
38
42
  /**
39
43
  * NOTE about artifact inputs (single input with auto-detection):
40
44
  *
package/dist/index.d.ts CHANGED
@@ -35,6 +35,10 @@ declare class StellarAdapter implements ContractAdapter {
35
35
  latency?: number;
36
36
  error?: string;
37
37
  }>;
38
+ /**
39
+ * @inheritdoc
40
+ */
41
+ getDefaultServiceConfig(serviceId: string): Record<string, unknown> | null;
38
42
  /**
39
43
  * NOTE about artifact inputs (single input with auto-detection):
40
44
  *
package/dist/index.js CHANGED
@@ -3663,11 +3663,12 @@ var StellarIndexerClient = class {
3663
3663
  }
3664
3664
  const grantMap = /* @__PURE__ */ new Map();
3665
3665
  for (const entry of result.data.accessControlEvents.nodes) {
3666
- if (!grantMap.has(entry.account)) {
3667
- grantMap.set(entry.account, {
3666
+ const account = entry.account || "";
3667
+ if (account && !grantMap.has(account)) {
3668
+ grantMap.set(account, {
3668
3669
  timestamp: entry.timestamp,
3669
3670
  txId: entry.txHash,
3670
- ledger: parseInt(entry.blockHeight, 10)
3671
+ ledger: parseInt(entry.blockNumber, 10)
3671
3672
  });
3672
3673
  }
3673
3674
  }
@@ -3784,10 +3785,17 @@ var StellarIndexerClient = class {
3784
3785
  logger19.debug(LOG_SYSTEM3, `Ownership transfer was completed for ${contractAddress}`);
3785
3786
  return null;
3786
3787
  }
3787
- if (!latestInitiation.admin) {
3788
+ if (!latestInitiation.previousOwner) {
3788
3789
  logger19.warn(
3789
3790
  LOG_SYSTEM3,
3790
- `Indexer returned OWNERSHIP_TRANSFER_STARTED event without admin field for ${contractAddress}. This indicates incomplete indexer data. Treating as no valid pending transfer.`
3791
+ `Indexer returned OWNERSHIP_TRANSFER_STARTED event without previousOwner field for ${contractAddress}. This indicates incomplete indexer data. Treating as no valid pending transfer.`
3792
+ );
3793
+ return null;
3794
+ }
3795
+ if (!latestInitiation.newOwner) {
3796
+ logger19.warn(
3797
+ LOG_SYSTEM3,
3798
+ `Indexer returned OWNERSHIP_TRANSFER_STARTED event without newOwner field for ${contractAddress}. This indicates incomplete indexer data. Treating as no valid pending transfer.`
3791
3799
  );
3792
3800
  return null;
3793
3801
  }
@@ -3800,14 +3808,14 @@ var StellarIndexerClient = class {
3800
3808
  }
3801
3809
  logger19.info(
3802
3810
  LOG_SYSTEM3,
3803
- `Found pending ownership transfer for ${contractAddress}: pending owner=${latestInitiation.account}, expires at ledger ${latestInitiation.liveUntilLedger}`
3811
+ `Found pending ownership transfer for ${contractAddress}: pending owner=${latestInitiation.newOwner}, expires at ledger ${latestInitiation.liveUntilLedger}`
3804
3812
  );
3805
3813
  return {
3806
- previousOwner: latestInitiation.admin,
3807
- pendingOwner: latestInitiation.account,
3814
+ previousOwner: latestInitiation.previousOwner,
3815
+ pendingOwner: latestInitiation.newOwner,
3808
3816
  txHash: latestInitiation.txHash,
3809
3817
  timestamp: latestInitiation.timestamp,
3810
- ledger: parseInt(latestInitiation.ledger || latestInitiation.blockHeight, 10),
3818
+ ledger: parseInt(latestInitiation.blockNumber, 10),
3811
3819
  liveUntilLedger: latestInitiation.liveUntilLedger
3812
3820
  };
3813
3821
  } catch (error) {
@@ -3925,10 +3933,17 @@ var StellarIndexerClient = class {
3925
3933
  logger19.debug(LOG_SYSTEM3, `Admin transfer was completed for ${contractAddress}`);
3926
3934
  return null;
3927
3935
  }
3928
- if (!latestInitiation.admin) {
3936
+ if (!latestInitiation.previousAdmin) {
3937
+ logger19.warn(
3938
+ LOG_SYSTEM3,
3939
+ `Indexer returned ADMIN_TRANSFER_INITIATED event without previousAdmin field for ${contractAddress}. This indicates incomplete indexer data. Treating as no valid pending transfer.`
3940
+ );
3941
+ return null;
3942
+ }
3943
+ if (!latestInitiation.newAdmin) {
3929
3944
  logger19.warn(
3930
3945
  LOG_SYSTEM3,
3931
- `Indexer returned ADMIN_TRANSFER_INITIATED event without admin field for ${contractAddress}. This indicates incomplete indexer data. Treating as no valid pending transfer.`
3946
+ `Indexer returned ADMIN_TRANSFER_INITIATED event without newAdmin field for ${contractAddress}. This indicates incomplete indexer data. Treating as no valid pending transfer.`
3932
3947
  );
3933
3948
  return null;
3934
3949
  }
@@ -3941,14 +3956,14 @@ var StellarIndexerClient = class {
3941
3956
  }
3942
3957
  logger19.info(
3943
3958
  LOG_SYSTEM3,
3944
- `Found pending admin transfer for ${contractAddress}: pending admin=${latestInitiation.account}, expires at ledger ${latestInitiation.liveUntilLedger}`
3959
+ `Found pending admin transfer for ${contractAddress}: pending admin=${latestInitiation.newAdmin}, expires at ledger ${latestInitiation.liveUntilLedger}`
3945
3960
  );
3946
3961
  return {
3947
- previousAdmin: latestInitiation.admin,
3948
- pendingAdmin: latestInitiation.account,
3962
+ previousAdmin: latestInitiation.previousAdmin,
3963
+ pendingAdmin: latestInitiation.newAdmin,
3949
3964
  txHash: latestInitiation.txHash,
3950
3965
  timestamp: latestInitiation.timestamp,
3951
- ledger: parseInt(latestInitiation.ledger || latestInitiation.blockHeight, 10),
3966
+ ledger: parseInt(latestInitiation.blockNumber, 10),
3952
3967
  liveUntilLedger: latestInitiation.liveUntilLedger
3953
3968
  };
3954
3969
  } catch (error) {
@@ -3972,11 +3987,6 @@ var StellarIndexerClient = class {
3972
3987
  * Note: The OpenZeppelin Stellar contract emits `ownership_transfer` event
3973
3988
  * which is indexed as `OWNERSHIP_TRANSFER_STARTED`.
3974
3989
  *
3975
- * Schema mapping:
3976
- * - `account`: pending new owner
3977
- * - `admin`: current owner who initiated the transfer
3978
- * - `ledger`: block height of the event
3979
- * - `liveUntilLedger`: expiration ledger for the pending transfer
3980
3990
  */
3981
3991
  buildOwnershipTransferStartedQuery() {
3982
3992
  return `
@@ -3984,19 +3994,18 @@ var StellarIndexerClient = class {
3984
3994
  accessControlEvents(
3985
3995
  filter: {
3986
3996
  contract: { equalTo: $contract }
3987
- type: { equalTo: OWNERSHIP_TRANSFER_STARTED }
3997
+ eventType: { equalTo: OWNERSHIP_TRANSFER_STARTED }
3988
3998
  }
3989
3999
  orderBy: TIMESTAMP_DESC
3990
4000
  first: 1
3991
4001
  ) {
3992
4002
  nodes {
3993
4003
  id
3994
- account
3995
- admin
4004
+ previousOwner
4005
+ newOwner
3996
4006
  txHash
3997
4007
  timestamp
3998
- ledger
3999
- blockHeight
4008
+ blockNumber
4000
4009
  liveUntilLedger
4001
4010
  }
4002
4011
  }
@@ -4012,7 +4021,7 @@ var StellarIndexerClient = class {
4012
4021
  accessControlEvents(
4013
4022
  filter: {
4014
4023
  contract: { equalTo: $contract }
4015
- type: { equalTo: OWNERSHIP_TRANSFER_COMPLETED }
4024
+ eventType: { equalTo: OWNERSHIP_TRANSFER_COMPLETED }
4016
4025
  timestamp: { greaterThan: $afterTimestamp }
4017
4026
  }
4018
4027
  orderBy: TIMESTAMP_DESC
@@ -4032,12 +4041,6 @@ var StellarIndexerClient = class {
4032
4041
  *
4033
4042
  * Note: The OpenZeppelin Stellar contract emits `admin_transfer_initiated` event
4034
4043
  * which is indexed as `ADMIN_TRANSFER_INITIATED`.
4035
- *
4036
- * Schema mapping:
4037
- * - `account`: pending new admin
4038
- * - `admin`: current admin who initiated the transfer
4039
- * - `ledger`: block height of the event
4040
- * - `liveUntilLedger`: expiration ledger for the pending transfer
4041
4044
  */
4042
4045
  buildAdminTransferInitiatedQuery() {
4043
4046
  return `
@@ -4045,19 +4048,18 @@ var StellarIndexerClient = class {
4045
4048
  accessControlEvents(
4046
4049
  filter: {
4047
4050
  contract: { equalTo: $contract }
4048
- type: { equalTo: ADMIN_TRANSFER_INITIATED }
4051
+ eventType: { equalTo: ADMIN_TRANSFER_INITIATED }
4049
4052
  }
4050
4053
  orderBy: TIMESTAMP_DESC
4051
4054
  first: 1
4052
4055
  ) {
4053
4056
  nodes {
4054
4057
  id
4055
- account
4056
- admin
4058
+ previousAdmin
4059
+ newAdmin
4057
4060
  txHash
4058
4061
  timestamp
4059
- ledger
4060
- blockHeight
4062
+ blockNumber
4061
4063
  liveUntilLedger
4062
4064
  }
4063
4065
  }
@@ -4073,7 +4075,7 @@ var StellarIndexerClient = class {
4073
4075
  accessControlEvents(
4074
4076
  filter: {
4075
4077
  contract: { equalTo: $contract }
4076
- type: { equalTo: ADMIN_TRANSFER_COMPLETED }
4078
+ eventType: { equalTo: ADMIN_TRANSFER_COMPLETED }
4077
4079
  timestamp: { greaterThan: $afterTimestamp }
4078
4080
  }
4079
4081
  orderBy: TIMESTAMP_DESC
@@ -4170,17 +4172,18 @@ var StellarIndexerClient = class {
4170
4172
  }
4171
4173
  /**
4172
4174
  * Maps internal changeType to GraphQL EventType enum
4173
- * GraphQL enum values: ROLE_GRANTED, ROLE_REVOKED, OWNERSHIP_TRANSFER_STARTED,
4174
- * OWNERSHIP_TRANSFER_COMPLETED, ADMIN_TRANSFER_INITIATED, ADMIN_TRANSFER_COMPLETED
4175
4175
  */
4176
4176
  mapChangeTypeToGraphQLEnum(changeType) {
4177
4177
  const mapping = {
4178
4178
  GRANTED: "ROLE_GRANTED",
4179
4179
  REVOKED: "ROLE_REVOKED",
4180
+ ROLE_ADMIN_CHANGED: "ROLE_ADMIN_CHANGED",
4180
4181
  OWNERSHIP_TRANSFER_STARTED: "OWNERSHIP_TRANSFER_STARTED",
4181
4182
  OWNERSHIP_TRANSFER_COMPLETED: "OWNERSHIP_TRANSFER_COMPLETED",
4183
+ OWNERSHIP_RENOUNCED: "OWNERSHIP_RENOUNCED",
4182
4184
  ADMIN_TRANSFER_INITIATED: "ADMIN_TRANSFER_INITIATED",
4183
4185
  ADMIN_TRANSFER_COMPLETED: "ADMIN_TRANSFER_COMPLETED",
4186
+ ADMIN_RENOUNCED: "ADMIN_RENOUNCED",
4184
4187
  UNKNOWN: "UNKNOWN"
4185
4188
  };
4186
4189
  return mapping[changeType];
@@ -4191,7 +4194,7 @@ var StellarIndexerClient = class {
4191
4194
  buildHistoryQuery(_contractAddress, options) {
4192
4195
  const roleFilter = options?.roleId ? ", role: { equalTo: $role }" : "";
4193
4196
  const accountFilter = options?.account ? ", account: { equalTo: $account }" : "";
4194
- const typeFilter = options?.changeType ? `, type: { equalTo: ${this.mapChangeTypeToGraphQLEnum(options.changeType)} }` : "";
4197
+ const typeFilter = options?.changeType ? `, eventType: { equalTo: ${this.mapChangeTypeToGraphQLEnum(options.changeType)} }` : "";
4195
4198
  const txFilter = options?.txId ? ", txHash: { equalTo: $txHash }" : "";
4196
4199
  const timestampConditions = [];
4197
4200
  if (options?.timestampFrom) {
@@ -4201,7 +4204,7 @@ var StellarIndexerClient = class {
4201
4204
  timestampConditions.push("lessThanOrEqualTo: $timestampTo");
4202
4205
  }
4203
4206
  const timestampFilter = timestampConditions.length > 0 ? `, timestamp: { ${timestampConditions.join(", ")} }` : "";
4204
- const ledgerFilter = options?.ledger ? ", blockHeight: { equalTo: $blockHeight }" : "";
4207
+ const ledgerFilter = options?.ledger ? ", blockNumber: { equalTo: $blockNumber }" : "";
4205
4208
  const limitClause = options?.limit ? ", first: $limit" : "";
4206
4209
  const cursorClause = options?.cursor ? ", after: $cursor" : "";
4207
4210
  const varDeclarations = [
@@ -4211,7 +4214,7 @@ var StellarIndexerClient = class {
4211
4214
  options?.txId ? "$txHash: String" : "",
4212
4215
  options?.timestampFrom ? "$timestampFrom: Datetime" : "",
4213
4216
  options?.timestampTo ? "$timestampTo: Datetime" : "",
4214
- options?.ledger ? "$blockHeight: BigFloat" : "",
4217
+ options?.ledger ? "$blockNumber: BigFloat" : "",
4215
4218
  options?.limit ? "$limit: Int" : "",
4216
4219
  options?.cursor ? "$cursor: Cursor" : ""
4217
4220
  ].filter(Boolean).join(", ");
@@ -4227,10 +4230,14 @@ var StellarIndexerClient = class {
4227
4230
  id
4228
4231
  role
4229
4232
  account
4230
- type
4233
+ eventType
4231
4234
  txHash
4232
4235
  timestamp
4233
- blockHeight
4236
+ blockNumber
4237
+ previousOwner
4238
+ newOwner
4239
+ previousAdmin
4240
+ newAdmin
4234
4241
  }
4235
4242
  pageInfo {
4236
4243
  hasNextPage
@@ -4263,7 +4270,7 @@ var StellarIndexerClient = class {
4263
4270
  variables.timestampTo = options.timestampTo;
4264
4271
  }
4265
4272
  if (options?.ledger) {
4266
- variables.blockHeight = String(options.ledger);
4273
+ variables.blockNumber = String(options.ledger);
4267
4274
  }
4268
4275
  if (options?.limit) {
4269
4276
  variables.limit = options.limit;
@@ -4284,7 +4291,7 @@ var StellarIndexerClient = class {
4284
4291
  accessControlEvents(
4285
4292
  filter: {
4286
4293
  contract: { equalTo: $contract }
4287
- type: { in: [ROLE_GRANTED, ROLE_REVOKED] }
4294
+ eventType: { in: [ROLE_GRANTED, ROLE_REVOKED] }
4288
4295
  }
4289
4296
  ) {
4290
4297
  nodes {
@@ -4307,7 +4314,7 @@ var StellarIndexerClient = class {
4307
4314
  contract: { equalTo: $contract }
4308
4315
  role: { equalTo: $role }
4309
4316
  account: { in: $accounts }
4310
- type: { equalTo: ROLE_GRANTED }
4317
+ eventType: { equalTo: ROLE_GRANTED }
4311
4318
  }
4312
4319
  orderBy: TIMESTAMP_DESC
4313
4320
  ) {
@@ -4315,12 +4322,32 @@ var StellarIndexerClient = class {
4315
4322
  account
4316
4323
  txHash
4317
4324
  timestamp
4318
- blockHeight
4325
+ blockNumber
4319
4326
  }
4320
4327
  }
4321
4328
  }
4322
4329
  `;
4323
4330
  }
4331
+ /**
4332
+ * Normalize account from indexer entry
4333
+ *
4334
+ * Multi-chain schema uses different fields for different event types:
4335
+ * - Role events: `account` field
4336
+ * - Ownership events: `newOwner` field (pending/new owner)
4337
+ * - Admin events: `newAdmin` field (pending/new admin)
4338
+ */
4339
+ normalizeAccount(entry) {
4340
+ if (entry.eventType === "ROLE_GRANTED" || entry.eventType === "ROLE_REVOKED" || entry.eventType === "ROLE_ADMIN_CHANGED") {
4341
+ return entry.account || "";
4342
+ }
4343
+ if (entry.eventType === "OWNERSHIP_TRANSFER_STARTED" || entry.eventType === "OWNERSHIP_TRANSFER_COMPLETED" || entry.eventType === "OWNERSHIP_RENOUNCED") {
4344
+ return entry.newOwner || "";
4345
+ }
4346
+ if (entry.eventType === "ADMIN_TRANSFER_INITIATED" || entry.eventType === "ADMIN_TRANSFER_COMPLETED" || entry.eventType === "ADMIN_RENOUNCED") {
4347
+ return entry.newAdmin || "";
4348
+ }
4349
+ return entry.account || "";
4350
+ }
4324
4351
  /**
4325
4352
  * Transform indexer entries to standard HistoryEntry format
4326
4353
  */
@@ -4331,39 +4358,48 @@ var StellarIndexerClient = class {
4331
4358
  // Map ownership events to special role
4332
4359
  };
4333
4360
  let changeType;
4334
- switch (entry.type) {
4361
+ switch (entry.eventType) {
4335
4362
  case "ROLE_GRANTED":
4336
4363
  changeType = "GRANTED";
4337
4364
  break;
4338
4365
  case "ROLE_REVOKED":
4339
4366
  changeType = "REVOKED";
4340
4367
  break;
4368
+ case "ROLE_ADMIN_CHANGED":
4369
+ changeType = "ROLE_ADMIN_CHANGED";
4370
+ break;
4341
4371
  case "OWNERSHIP_TRANSFER_STARTED":
4342
4372
  changeType = "OWNERSHIP_TRANSFER_STARTED";
4343
4373
  break;
4344
4374
  case "OWNERSHIP_TRANSFER_COMPLETED":
4345
4375
  changeType = "OWNERSHIP_TRANSFER_COMPLETED";
4346
4376
  break;
4377
+ case "OWNERSHIP_RENOUNCED":
4378
+ changeType = "OWNERSHIP_RENOUNCED";
4379
+ break;
4347
4380
  case "ADMIN_TRANSFER_INITIATED":
4348
4381
  changeType = "ADMIN_TRANSFER_INITIATED";
4349
4382
  break;
4350
4383
  case "ADMIN_TRANSFER_COMPLETED":
4351
4384
  changeType = "ADMIN_TRANSFER_COMPLETED";
4352
4385
  break;
4386
+ case "ADMIN_RENOUNCED":
4387
+ changeType = "ADMIN_RENOUNCED";
4388
+ break;
4353
4389
  default:
4354
4390
  logger19.warn(
4355
4391
  LOG_SYSTEM3,
4356
- `Unknown event type: ${entry.type}, assigning changeType to UNKNOWN`
4392
+ `Unknown event type: ${entry.eventType}, assigning changeType to UNKNOWN`
4357
4393
  );
4358
4394
  changeType = "UNKNOWN";
4359
4395
  }
4360
4396
  return {
4361
4397
  role,
4362
- account: entry.account,
4398
+ account: this.normalizeAccount(entry),
4363
4399
  changeType,
4364
4400
  txId: entry.txHash,
4365
4401
  timestamp: entry.timestamp,
4366
- ledger: parseInt(entry.blockHeight, 10)
4402
+ ledger: parseInt(entry.blockNumber, 10)
4367
4403
  };
4368
4404
  });
4369
4405
  }
@@ -5651,6 +5687,24 @@ async function testWithFallbackMethod(rpcConfig, signal, startTime) {
5651
5687
  }
5652
5688
 
5653
5689
  // src/configuration/network-services.ts
5690
+ function getStellarDefaultServiceConfig(networkConfig, serviceId) {
5691
+ switch (serviceId) {
5692
+ case "rpc":
5693
+ if (networkConfig.sorobanRpcUrl) {
5694
+ return { sorobanRpcUrl: networkConfig.sorobanRpcUrl };
5695
+ }
5696
+ break;
5697
+ case "indexer":
5698
+ if (networkConfig.indexerUri && networkConfig.indexerWsUri) {
5699
+ return {
5700
+ indexerUri: networkConfig.indexerUri,
5701
+ indexerWsUri: networkConfig.indexerWsUri
5702
+ };
5703
+ }
5704
+ break;
5705
+ }
5706
+ return null;
5707
+ }
5654
5708
  function getStellarNetworkServiceForms(exclude = []) {
5655
5709
  const forms = [
5656
5710
  {
@@ -8019,6 +8073,12 @@ var StellarAdapter = class {
8019
8073
  async testNetworkServiceConnection(serviceId, values) {
8020
8074
  return testStellarNetworkServiceConnection(serviceId, values);
8021
8075
  }
8076
+ /**
8077
+ * @inheritdoc
8078
+ */
8079
+ getDefaultServiceConfig(serviceId) {
8080
+ return getStellarDefaultServiceConfig(this.networkConfig, serviceId);
8081
+ }
8022
8082
  /**
8023
8083
  * NOTE about artifact inputs (single input with auto-detection):
8024
8084
  *
@@ -8461,8 +8521,8 @@ var stellarAdapterConfig = {
8461
8521
  "lossless-json": "^4.0.2",
8462
8522
  // Wallet connection and integration
8463
8523
  "@creit.tech/stellar-wallets-kit": "^1.9.5",
8464
- // OpenZeppelin Relayer integration (optional, for gasless transactions)
8465
- "@openzeppelin/relayer-sdk": "1.1.0",
8524
+ // OpenZeppelin Relayer integration for gasless transactions
8525
+ "@openzeppelin/relayer-sdk": "1.9.0",
8466
8526
  // React integration for wallet components
8467
8527
  react: "^19.0.0",
8468
8528
  "react-dom": "^19.0.0"