@decaf-ts/for-fabric 0.0.28 → 0.1.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 (105) hide show
  1. package/dist/for-fabric.cjs +1 -1
  2. package/dist/for-fabric.cjs.map +1 -1
  3. package/dist/for-fabric.js +1 -1
  4. package/dist/for-fabric.js.map +1 -1
  5. package/lib/client/FabricClientAdapter.cjs +10 -3
  6. package/lib/client/FabricClientAdapter.d.ts +5 -3
  7. package/lib/client/FabricClientAdapter.js.map +1 -1
  8. package/lib/client/FabricClientRepository.cjs +15 -0
  9. package/lib/client/FabricClientRepository.d.ts +4 -1
  10. package/lib/client/FabricClientRepository.js.map +1 -1
  11. package/lib/client/services/FabricEnrollmentService.d.ts +1 -1
  12. package/lib/contract/Product.cjs +3 -2
  13. package/lib/contract/Product.d.ts +1 -1
  14. package/lib/contract/Product.js.map +1 -1
  15. package/lib/contract/User.cjs +3 -2
  16. package/lib/contract/User.d.ts +1 -1
  17. package/lib/contract/User.js.map +1 -1
  18. package/lib/contracts/ContractAdapter.cjs +28 -36
  19. package/lib/contracts/ContractAdapter.d.ts +2 -1
  20. package/lib/contracts/ContractAdapter.js.map +1 -1
  21. package/lib/contracts/FabricConstruction.cjs +3 -3
  22. package/lib/contracts/FabricConstruction.js.map +1 -1
  23. package/lib/contracts/FabricContractRepository.d.ts +2 -1
  24. package/lib/contracts/FabricContractRepository.js.map +1 -1
  25. package/lib/contracts/FabricContractStatement.cjs +5 -4
  26. package/lib/contracts/FabricContractStatement.js.map +1 -1
  27. package/lib/contracts/crud/crud-contract.d.ts +2 -1
  28. package/lib/contracts/crud/crud-contract.js.map +1 -1
  29. package/lib/contracts/crud/serialized-crud-contract.d.ts +2 -1
  30. package/lib/contracts/crud/serialized-crud-contract.js.map +1 -1
  31. package/lib/contracts/private-data.cjs +13 -14
  32. package/lib/contracts/private-data.js.map +1 -1
  33. package/lib/esm/client/FabricClientAdapter.d.ts +5 -3
  34. package/lib/esm/client/FabricClientAdapter.js +13 -6
  35. package/lib/esm/client/FabricClientAdapter.js.map +1 -1
  36. package/lib/esm/client/FabricClientRepository.d.ts +4 -1
  37. package/lib/esm/client/FabricClientRepository.js +15 -0
  38. package/lib/esm/client/FabricClientRepository.js.map +1 -1
  39. package/lib/esm/client/services/FabricEnrollmentService.d.ts +1 -1
  40. package/lib/esm/contract/Product.d.ts +1 -1
  41. package/lib/esm/contract/Product.js +3 -2
  42. package/lib/esm/contract/Product.js.map +1 -1
  43. package/lib/esm/contract/User.d.ts +1 -1
  44. package/lib/esm/contract/User.js +3 -2
  45. package/lib/esm/contract/User.js.map +1 -1
  46. package/lib/esm/contracts/ContractAdapter.d.ts +2 -1
  47. package/lib/esm/contracts/ContractAdapter.js +25 -33
  48. package/lib/esm/contracts/ContractAdapter.js.map +1 -1
  49. package/lib/esm/contracts/FabricConstruction.js +4 -4
  50. package/lib/esm/contracts/FabricConstruction.js.map +1 -1
  51. package/lib/esm/contracts/FabricContractRepository.d.ts +2 -1
  52. package/lib/esm/contracts/FabricContractRepository.js.map +1 -1
  53. package/lib/esm/contracts/FabricContractStatement.js +5 -4
  54. package/lib/esm/contracts/FabricContractStatement.js.map +1 -1
  55. package/lib/esm/contracts/crud/crud-contract.d.ts +2 -1
  56. package/lib/esm/contracts/crud/crud-contract.js.map +1 -1
  57. package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +2 -1
  58. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +1 -1
  59. package/lib/esm/contracts/private-data.js +14 -15
  60. package/lib/esm/contracts/private-data.js.map +1 -1
  61. package/lib/esm/shared/ClientSerializer.d.ts +3 -3
  62. package/lib/esm/shared/ClientSerializer.js +12 -15
  63. package/lib/esm/shared/ClientSerializer.js.map +1 -1
  64. package/lib/esm/shared/constants.d.ts +1 -0
  65. package/lib/esm/shared/constants.js +1 -0
  66. package/lib/esm/shared/constants.js.map +1 -1
  67. package/lib/esm/shared/crypto.js.map +1 -1
  68. package/lib/esm/shared/decorators.d.ts +3 -2
  69. package/lib/esm/shared/decorators.js +32 -12
  70. package/lib/esm/shared/decorators.js.map +1 -1
  71. package/lib/esm/shared/events.js.map +1 -1
  72. package/lib/esm/shared/overrides/Model.d.ts +0 -0
  73. package/lib/esm/shared/overrides/Model.js +19 -0
  74. package/lib/esm/shared/overrides/Model.js.map +1 -0
  75. package/lib/esm/shared/overrides/index.d.ts +0 -0
  76. package/lib/esm/shared/overrides/index.js +4 -0
  77. package/lib/esm/shared/overrides/index.js.map +1 -0
  78. package/lib/esm/shared/overrides/overrides.d.ts +0 -0
  79. package/lib/esm/shared/overrides/overrides.js +89 -0
  80. package/lib/esm/shared/overrides/overrides.js.map +1 -0
  81. package/lib/esm/shared/types.d.ts +7 -0
  82. package/lib/esm/shared/utils.js.map +1 -1
  83. package/lib/shared/ClientSerializer.cjs +11 -14
  84. package/lib/shared/ClientSerializer.d.ts +3 -3
  85. package/lib/shared/ClientSerializer.js.map +1 -1
  86. package/lib/shared/constants.cjs +1 -0
  87. package/lib/shared/constants.d.ts +1 -0
  88. package/lib/shared/constants.js.map +1 -1
  89. package/lib/shared/crypto.js.map +1 -1
  90. package/lib/shared/decorators.cjs +33 -13
  91. package/lib/shared/decorators.d.ts +3 -2
  92. package/lib/shared/decorators.js.map +1 -1
  93. package/lib/shared/events.js.map +1 -1
  94. package/lib/shared/overrides/Model.cjs +19 -0
  95. package/lib/shared/overrides/Model.d.ts +0 -0
  96. package/lib/shared/overrides/Model.js.map +1 -0
  97. package/lib/shared/overrides/index.cjs +4 -0
  98. package/lib/shared/overrides/index.d.ts +0 -0
  99. package/lib/shared/overrides/index.js.map +1 -0
  100. package/lib/shared/overrides/overrides.cjs +89 -0
  101. package/lib/shared/overrides/overrides.d.ts +0 -0
  102. package/lib/shared/overrides/overrides.js.map +1 -0
  103. package/lib/shared/types.d.ts +7 -0
  104. package/lib/shared/utils.js.map +1 -1
  105. package/package.json +2 -2
@@ -1,2 +1,2 @@
1
- import{CouchDBKeys as e,CouchDBStatement as t,CouchDBGroupOperator as r,CouchDBOperator as i,CouchDBAdapter as n}from"@decaf-ts/for-couchdb";import{Model as a,ModelKeys as s,propMetadata as o,required as l,model as c,JSONSerializer as p,Decoration as d,prop as u,type as h,list as g}from"@decaf-ts/decorator-validation";import{Context as f,OperationKeys as y,BulkCrudOperationKeys as w,NotFoundError as m,transient as b,getAllPropertyDecoratorsRecursive as v,SerializationError as S,modelToTransient as A,InternalError as k,BaseError as O,enforceDBDecorators as R,ValidationError as N,ConflictError as x,findPrimaryKey as $,onCreate as E,onCreateUpdate as P,DBKeys as z,readonly as T,onUpdate as C,onDelete as F,afterAny as I}from"@decaf-ts/db-decorators";import{Property as j,Object as D,Contract as B,Transaction as J,Context as q}from"fabric-contract-api";import{Logging as M,MiniLogger as L,NumericLogLevels as _,LogLevel as W}from"@decaf-ts/logging";import{ObserverHandler as V,AuthorizationError as U,Repository as H,pk as K,index as Q,table as Y,BaseModel as G,Sequence as X,Condition as Z,repositoryFromTypeMetadata as ee,cacheModelForPopulate as te,Cascade as re,createOrUpdate as ie,getPopulateKey as ne,UnsupportedError as ae,PersistenceKeys as se,OrderDirection as oe,NumericSequence as le,Adapter as ce,sequenceNameForModel as pe,oneToManyOnUpdate as de,column as ue}from"@decaf-ts/core";import{apply as he}from"@decaf-ts/reflection";import{__decorate as ge,__metadata as fe}from"tslib";import{Metadata as ye}from"@decaf-ts/decoration";class we extends f{constructor(){super()}get stub(){return this.get("stub")}get timestamp(){return this.stub.getDateTimestamp()}get identity(){return this.get("clientIdentity")}get logger(){return this.get("logger")}}class me extends V{constructor(e=[y.CREATE,y.UPDATE,y.DELETE,w.CREATE_ALL,w.UPDATE_ALL,w.DELETE_ALL]){super(),this.supportedEvents=e}async updateObservers(e,t,r,i,n,a,s){const{stub:o}=n;if(-1!==this.supportedEvents.indexOf(r)){e.debug(`Emitting ${r} event`);const n=((e,t,r)=>{const i=[e,t];return r&&i.push(r),i.join("_")})(t,r,a);o.setEvent(n,Buffer.from(JSON.stringify({id:i})))}else o.setEvent(r,Buffer.from(JSON.stringify(s)))}}var be,ve;(e=>{e.PRIVATE="private",e.FABRIC="fabric.",e.OWNEDBY="owned-by"})(be||(be={})),(e=>{e.X509="X.509"})(ve||(ve={}));const Se="hlf-fabric";function Ae(){return function(e,t,r){const i=r.value;return r.value=async function(...e){const r=e[0],n=r.clientIdentity.getID(),a=await this.tokenRepository.selectWithContext(void 0,r),s=await a.execute();if(0==s.length)throw new m("No tokens avaialble");if(s.length>1)throw new m("To many token available : "+s.length);if(s[0].owner!=n)throw new U(`User not authorized to run ${t} on the token`);return await i.apply(this,e)},r}}function ke(e){return a.key(be.FABRIC+e)}function Oe(e){if(!e)throw Error("Collection name is required");const t=ke(be.PRIVATE);return(r,i)=>{const n=i||void 0,a=Reflect.getMetadata(t,r[s.ANCHOR]||r,n),l=a?.collections||[];o(ke(be.PRIVATE),{...!i&&{collections:l?[...new Set([...l,e])]:[e]},isPrivate:!i})(i?r.constructor:r[s.ANCHOR]||r),i&&(o(ke(be.PRIVATE),{collections:l?[...new Set([...l,e])]:[e]})(r,i),b()(r,i))}}const Re=/private\s+data\s+matching\s+public\s+hash\s+version\s+is\s+not\s+available/i;function Ne(e){let t=Reflect.getMetadata(ke(be.PRIVATE),e);return t=t||Reflect.getMetadata(ke(be.PRIVATE),e.constructor),t}function xe(e){const t=Ne(e);return!(!t||void 0===t.isPrivate)&&t.isPrivate}function $e(e){if(!(e=>!!Ne(e))(e))return{model:e};const t=v(e,void 0,ke(be.PRIVATE)),r=xe(e),i=Ne(e);let n={model:e,private:void 0};if(n=r?Object.keys(e).reduce((t,r)=>{const n=i.collections;t.private=t.private||{};for(const i of n)try{t.private[i]=t.private[i]||{},t.private[i][r]=e[r]}catch(e){throw new S(`Failed to serialize private property ${r}: ${e}`)}return t},{model:{}}):Object.entries(t).reduce((t,[r,i])=>{const n=i.find(e=>""===e.key);if(n){const i=n.props.collections;t.private=t.private||{};for(const n of i)try{t.private[n]=t.private[n]||{},t.private[n][r]=e[r]}catch(e){throw new S(`Failed to serialize private property ${r}: ${e}`)}}else t.model=t.model||{},t.model[r]=e[r];return t},{}),n.model=n.model||{},n.model=a.build(n.model,e.constructor.name),n.private){const t=Object.keys(n.private);for(const r of t)n.private[r]=a.build(n.private[r],e.constructor.name)}return n}class Ee extends k{constructor(e){super(e,Ee.name)}}class Pe extends k{constructor(e){super(e,Pe.name)}}class ze extends k{constructor(e){super(e,ze.name)}}class Te extends k{constructor(e){super(e,Te.name,500)}}class Ce extends O{constructor(e="private data matching public hash version is not available ..."){super(Ce.name,e,403)}}class Fe extends O{constructor(e){super(Fe.name,e,409)}}let Ie=class extends G{constructor(e){super(e)}};ge([K(),fe("design:type",String)],Ie.prototype,"id",void 0),ge([l(),Q(),fe("design:type",Object)],Ie.prototype,"current",void 0),Ie=ge([Y(e.SEQUENCE),c(),fe("design:paramtypes",[Object])],Ie);class je extends X{constructor(e,t,r){super(e);for(const e of r||[])Oe(e)(Ie);this.repo=H.forModel(Ie,t.alias)}async current(e){if(!e)throw new Te("Context is required");const{name:t,startWith:r}=this.options;try{const r=await this.repo.read(t,e);return this.parse(r.current)}catch(e){if(e instanceof m){if(void 0===r)throw new k("Starting value is not defined for a non existing sequence");try{return this.parse(r)}catch(e){throw new k(`Failed to parse initial value for sequence ${r}: ${e}`)}}throw new k(`Failed to retrieve current value for sequence ${t}: ${e}`)}}parse(e){return X.parseValue(this.options.type,e)}async increment(e,t,r){if(!r)throw new Te("Context is required");const{type:i,incrementBy:n,name:a}=this.options;let s;const o=t||n;if(o%n!==0)throw new k("Value to increment does not consider the incrementBy setting: "+n);switch(i){case"Number":s=this.parse(e)+o;break;case"BigInt":s=this.parse(e)+BigInt(o);break;default:throw new k("Should never happen")}let l;try{l=await this.repo.update(new Ie({id:a,current:s}),r)}catch(e){if(!(e instanceof m))throw e;l=await this.repo.create(new Ie({id:a,current:s}),r)}return l.current}async next(e){if(!e)throw new Te("Context is required");const t=await this.current(e);return this.increment(t,void 0,e)}async range(e,t){if(!t)throw new Te("Context is required");const r=await this.current(t),i=this.parse(this.options.incrementBy),n=await this.increment(r,this.parse(e)*i,t),a=[];for(let t=1;e>=t;t++)a.push(r+i*this.parse(t));if(a[a.length-1]!==n)throw new k("Miscalculation of range");return a}}class De extends H{constructor(e,t,r){super(e,t),this.trackedEvents=r}logFor(e){return M.for(De,{},e)}async create(e,...t){const r=t[t.length-1],i=this.logFor(r).for(this.create);i.info("Preparing model: "+JSON.stringify(e));let n,{record:a,id:s,transient:o}=this.adapter.prepare(e,this.pk,this.tableName,...t);return i.info("Creating model: "+JSON.stringify(e)),a=await this.adapter.create(this.tableName,s,a,...t),t.length&&(n=t[t.length-1]),i.info("Reverting model: "+JSON.stringify(e)),this.adapter.revert(a,this.class,this.pk,s,n&&n.get("rebuildWithTransient")?o:void 0)}async read(e,...t){const r=await this.adapter.read(this.tableName,e,new this.class,...t);return this.adapter.revert(r,this.class,this.pk,e)}async delete(e,...t){const r=await this.adapter.delete(this.tableName,e,new this.class,...t);return this.adapter.revert(r,this.class,this.pk,e)}async update(e,...t){const r=t[t.length-1],i=this.logFor(r).for(this.update);i.info("Preparing model: "+JSON.stringify(e));let n,{record:a,id:s,transient:o}=this.adapter.prepare(e,this.pk,this.tableName,...t);return i.info("Updating model: "+JSON.stringify(e)),a=await this.adapter.update(this.tableName,s,a,...t),t.length&&(n=t[t.length-1]),i.info("Reverting model: "+JSON.stringify(e)),this.adapter.revert(a,this.class,this.pk,s,n&&n.get("rebuildWithTransient")?o:void 0)}ObserverHandler(){return new me}async createAll(e,...t){if(!e.length)return e;const r=e.map(e=>this.adapter.prepare(e,this.pk,this.tableName,...t)),i=r.map(e=>e.id);let n=r.map(e=>e.record);const a=r.map(e=>e.transient).filter(e=>!!e);let s;return t.length&&(s=t[t.length-1]),n=await this.adapter.createAll(this.tableName,i,n,...t),n.map((e,t)=>this.adapter.revert(e,this.class,this.pk,i[t],s&&s.get("rebuildWithTransient")?a:void 0))}async updateAll(e,...t){if(!e.length)return e;const r=e.map(e=>this.adapter.prepare(e,this.pk,this.tableName,...t)),i=r.map(e=>e.transient).filter(e=>!!e);let n;return t.length&&(n=t[t.length-1]),(await this.adapter.updateAll(this.tableName,r.map(e=>e.id),r.map(e=>e.record),...t)).map((e,t)=>this.adapter.revert(e,this.class,this.pk,r[t].id,n&&n.get("rebuildWithTransient")?i:void 0))}async raw(e,t,...r){const i=r.pop(),n=await f.args("QUERY",this.class,[i],this.adapter,{});return this.adapter.raw(e,t,new this.class,...n.args)}async updateObservers(e,t,r,i,...n){if(!this.trackedEvents||-1!==this.trackedEvents.indexOf(t))return await super.updateObservers(e,t,r,i,...n)}async selectWithContext(e,t){let r;return t instanceof we?r.context=t:r=await f.args(y.CREATE,this.class,[t],this.adapter,this._overrides||{}),e?this.adapter.Statement(r.context).select(e).from(this.class):this.adapter.Statement(r.context).select().from(this.class)}async createAllPrefix(e,...t){const r=t[t.length-1],i=await f.args(y.CREATE,this.class,t,this.adapter,this._overrides||{});if(!e.length)return[e,...i.args];const n=H.getSequenceOptions(e[0]);let a=[];n.type?(n.name||(n.name=je.pk(e[0])),a=await(await this.adapter.Sequence(n)).range(e.length,r)):a=e.map((e,t)=>{if(void 0===e[this.pk])throw new k("Primary key is not defined for model in position "+t);return e[this.pk]}),e=await Promise.all(e.map(async(e,t)=>(e=new this.class(e),n.type&&(e[this.pk]=a[t]),await R(this,i.context,e,y.CREATE,y.ON),e)));const s=i.context.get("ignoredValidationProperties")||[],o=(await Promise.all(e.map(e=>Promise.resolve(e.hasErrors(...s))))).reduce((e,t,r)=>(t&&(e="string"==typeof e?e+`\n - ${r}: ${t.toString()}`:` - ${r}: ${t.toString()}`),e),void 0);if(o)throw new N(o);return[e,...i.args]}async createPrefix(e,...t){const r=await super.createPrefix(e,...t),i=r[0][this.pk];try{if(await this.read(i+"",...t))throw new x(`Conflict detected while creating model with id: ${i} already exists`)}catch(e){if(404!==e.code)throw e;this.logFor(t[t.length-1]).info(`Record entry with pk ${i} does not exist, creating it now...`)}return r}}class Be extends t{constructor(e,t){super(e),this.ctx=t}async raw(e){const t=await this.adapter.raw(e,!0,this.ctx),r=$(new this.fromSelector),i=r.id,n=r.props.type;return this.selectSelector?t:t.map(e=>this.processRecord(e,i,n))}build(){const t={};t[e.TABLE]={},t[e.TABLE]=H.table(this.fromSelector);const n={selector:t};if(this.selectSelector&&(n.fields=this.selectSelector),this.whereCondition){const t=this.parseCondition(Z.and(this.whereCondition,Z.attribute(e.TABLE).eq(n.selector[e.TABLE]))).selector,i=Object.keys(t);if(1===i.length&&-1!==Object.values(r).indexOf(i[0]))switch(i[0]){case r.AND:t[r.AND]=[...Object.values(t[r.AND]).reduce((e,t)=>{const i=Object.keys(t);if(1!==i.length)throw Error("Too many keys in query selector. should be one");const n=i[0];return n===r.AND?e.push(...t[n]):e.push(t),e},[])],n.selector=t;break;case r.OR:{const e={};e[r.AND]=[t,...Object.entries(n.selector).map(([e,t])=>{const r={};return r[e]=t,r})],n.selector=e;break}default:throw Error("This should be impossible")}else Object.entries(t).forEach(([e,t])=>{n.selector[e],n.selector[e]=t})}if(this.orderBySelector){n.sort=n.sort||[],n.selector=n.selector||{};const[e,t]=this.orderBySelector,r={};r[e]=t,n.sort.push(r),n.selector[e]||(n.selector[e]={},n.selector[e][i.BIGGER]=null)}return this.limitSelector&&(n.limit=this.limitSelector),this.offsetSelector&&(n.skip=this.offsetSelector),n}}class Je extends p{constructor(){super()}deserialize(e,t){return JSON.parse(e)}serialize(e){return require("json-stringify-deterministic")(require("sort-keys-recursive")(this.preSerialize(e)))}preSerialize(e){return Object.assign({},e)}}async function qe(e,t,r,i){const n=i[r];if(!n)return;if("object"!=typeof n){const t=ee(i,r,this.adapter.alias),a=await t.read(n,e);return await te(e,i,r,n,a),void(i[r]=n)}t.class="string"==typeof t.class?t.class:t.class().name;const s=a.get(t.class);if(!s)throw new k("Could not find model "+t.class);const o=H.forModel(s,this.adapter.alias),l=await o.create(n,e),c=$(l).id;await te(e,i,r,l[c],l),i[r]=l[c]}async function Me(e,t,r,i){const n=i[r];if(!n)return;if(t.cascade.update!==re.CASCADE)return;if("object"!=typeof n){const t=ee(i,r,this.adapter.alias),a=await t.read(n,e);return await te(e,i,r,n,a),void(i[r]=n)}const a=await ie(i[r],e,this.adapter.alias),s=$(a).id;await te(e,i,r,a[s],a),i[r]=a[s]}async function Le(e,t,r,i){const n=i[r];if(!n)return;if(t.cascade.update!==re.CASCADE)return;const s=ee(i,r,this.adapter.alias);let o;o=n instanceof a?await s.delete(i[r][s.pk],e):await s.delete(i[r],e),await te(e,i,r,o[s.pk],o)}async function _e(e,t,r,i){const n=i[r];if(!n||!n.length)return;const a=typeof n[0];if(!n.every(e=>typeof e===a))throw new k(`Invalid operation. All elements of property ${r} must match the same type.`);const s=new Set([...n]);if("object"!==a){const t=ee(i,r,this.adapter.alias);for(const n of s){const a=await t.read(n,e);await te(e,i,r,n,a)}return void(i[r]=[...s])}const o=$(n[0]).id,l=new Set;for(const t of n){const n=await ie(t,e,this.adapter.alias);await te(e,i,r,n[o],n),l.add(n[o])}i[r]=[...l]}async function We(e,t,r,i){if(t.cascade.delete!==re.CASCADE)return;const n=i[r];if(!n||!n.length)return;const a=typeof n[0];if(!n.every(e=>typeof e===a))throw new k(`Invalid operation. All elements of property ${r} must match the same type.`);const s="object"===a,o=s?H.forModel(n[0],this.adapter.alias):ee(i,r,this.adapter.alias),l=new Set([...s?n.map(e=>e[o.pk]):n]);for(const t of l.values()){const n=await o.delete(t,e);await te(e,i,r,t,n)}i[r]=[...l]}async function Ve(e,t,r,i){if(!t.populate)return;const n=i[r],a=Array.isArray(n);if(void 0===n||a&&0===n.length)return;const s=await(async(t,r,i,n,a)=>{let s,o;const l=[];for(const c of n){s=ne(r.constructor.name,i,c);try{o=await t.get(s)}catch(t){const n=ee(r,i,a);if(!n)throw new k("Could not find repo");o=await n.read(c,e)}l.push(o)}return l})(e,i,r,a?n:[n],this.adapter.alias);i[r]=a?s:s[0]}async function Ue(e,t,r,i){try{const t=e.get("clientIdentity");i[r]=t.getID()}catch(e){throw new ae("No User found in context. Please provide a user in the context")}}async function He(e,t,r,i){if(!t.type||i[r])return;let n;t.name||(t.name=pe(i,"pk"));try{n=await this.adapter.Sequence(t)}catch(e){throw new k(`Failed to instantiate Sequence ${t.name}: ${e}`)}const a=await n.next(e);Object.defineProperty(i,r,{enumerable:!0,writable:!1,configurable:!0,value:a})}class Ke extends n{getClient(){throw new ae("Client is not supported in Fabric contracts")}static{this.textDecoder=new TextDecoder("utf8")}static{this.serializer=new Je}logFor(e){return M.for(Ke,{},e)}repository(){return De}constructor(e,t){super(e,Se,t),this.Context=we}for(e,...t){return super.for(e,...t)}async create(e,t,r,...i){const{stub:n,logger:a}=i.pop(),s=a.for(this.create);try{s.info(`adding entry to ${e} table with pk ${t}`),r=await this.putState(n,t.toString(),r)}catch(e){throw this.parseError(e)}return r}async read(e,t,...r){const{stub:i,logger:n}=r.pop(),a=n.for(this.read);let s;try{const r=await this.readState(i,e,t.toString());if(1>r.length)throw a.debug(`No record found for id ${t} in ${e} table`),new m(`No record found for id ${t} in ${e} table`);2>r.length?(a.debug(`No record found for id ${t} in ${e} table`),s=r.pop()):s=this.mergeModels(r)}catch(e){throw this.parseError(e)}return s}async update(e,t,r,...i){const{stub:n,logger:a}=i.pop(),s=a.for(this.update);try{s.info(`updating entry to ${e} table with pk ${t}`),r=await this.putState(n,t.toString(),r)}catch(e){throw this.parseError(e)}return r}async delete(e,t,...r){const i=r.pop(),{stub:n,logger:a}=i,s=a.for(this.delete);let o;r.push(i);try{o=await this.read(e,t,...r),s.verbose(`deleting entry with pk ${t} from ${e} table`),this.deleteState(n,e,t.toString())}catch(e){throw this.parseError(e)}return o}async deleteState(e,t,r,...i){const n=e.createCompositeKey(t,[r+""]);await e.deleteState(n)}async putState(e,t,r,...i){let n;try{n=Buffer.from(Ke.serializer.serialize(r))}catch(e){throw new S(`Failed to serialize record with id ${t}: ${e}`)}return await e.putState(t.toString(),n),r}async readState(e,t,r,...i){const n=e.createCompositeKey(t,[r+""]),a=[];let s=await e.getState(n);if(""===s.toString())throw new m(`Record with id ${r} not found`);try{s=Ke.serializer.deserialize(s.toString())}catch(e){throw new S("Failed to parse record: "+e)}return a.push(s),a}async queryResult(e,t,...r){return await e.getQueryResult(JSON.stringify(t))}async queryResultPaginated(e,t,r=250,i,...n){return await e.getQueryResultWithPagination(JSON.stringify(t),r,i?.toString())}mergeModels(e){const t=e=>Object.entries(e).reduce((e,[t,r])=>(void 0!==r&&(e[t]=r),e),{});let r=e.pop();for(const i of e)r=Object.assign({},t(r),t(i));return r}decode(e){return Ke.textDecoder.decode(e)}async flags(e,t,r,i,...n){return Object.assign(await super.flags(e,t,r,...n),{stub:i.stub,identity:i.clientIdentity??i.identity,logger:i.logger??this.logFor(i)})}index(e){return Promise.resolve(void 0)}async resultIterator(e,t,r=!1){const i=[];let n=await t.next();for(;!n.done;){if(n.value&&n.value.value.toString()){let t={};if(e.debug(n.value.value.toString("utf8")),r){t.TxId=n.value.txId,t.Timestamp=n.value.timestamp;try{t.Value=JSON.parse(n.value.value.toString("utf8"))}catch(r){e.error(r),t.Value=n.value.value.toString("utf8")}}else try{t=JSON.parse(n.value.value.toString("utf8"))}catch(r){e.error(r),t=n.value.value.toString("utf8")}i.push(t)}n=await t.next()}return e.debug(`Closing iterator after ${i.length} results`),t.close(),i}async raw(e,t,...r){const{stub:i,logger:n}=r.pop(),a=n.for(this.raw),{skip:s,limit:o}=e;let l;o||s?(delete e.limit,delete e.skip,a.debug(`Retrieving paginated iterator: limit: ${o}/ skip: ${s}`),l=(await this.queryResultPaginated(i,e,o||250,s?.toString())).iterator):(a.debug("Retrieving iterator"),l=await this.queryResult(i,e)),a.debug("Iterator acquired");const c=await this.resultIterator(a,l);return a.debug("returning {0} results",""+(Array.isArray(c)?c.length:1)),c}Statement(e){if(!e)throw new Te("Context is required");return new Be(this,e)}async Sequence(e){return new je(e,this)}async createAll(e,t,r,...i){if(t.length!==r.length)throw new k("Ids and models must have the same length");const{logger:n}=i[i.length-1],a=n.for(this.createAll);return a.info(`Creating ${t.length} entries ${e} table`),a.debug("pks: "+t),Promise.all(t.map(async(t,n)=>this.create(e,t,r[n],...i)))}async updateAll(e,t,r,...i){if(t.length!==r.length)throw new k("Ids and models must have the same length");const{logger:n}=i[i.length-1],a=n.for(this.createAll);return a.info(`Updating ${t.length} entries ${e} table`),a.debug("pks: "+t),Promise.all(t.map(async(t,n)=>this.update(e,t,r[n],...i)))}prepare(e,t,...r){const{stub:i,logger:n}=r.pop(),a=r.shift(),s=n.for(this.prepare),o=A(e),l=Object.entries(o.model).reduce((t,[r,i])=>{if(void 0===i)return t;const n=H.column(e,r);if(this.isReserved(n))throw new k(`Property name ${n} is reserved`);return t[n]=i,t},{});return e[se.METADATA]&&(s.silly("Passing along persistence metadata for "+e[se.METADATA]),Object.defineProperty(l,se.METADATA,{enumerable:!1,writable:!1,configurable:!0,value:e[se.METADATA]})),s.info(`Preparing record for ${a} table with pk ${e[t]}`),{record:l,id:i.createCompositeKey(a,[e[t]+""]),transient:o.transient}}revert(e,t,r,i,n){const s=this.log.for(this.revert),o={};o[r]=i;const l="string"==typeof t?a.build(o,t):new t(o);s.silly(`Rebuilding model ${l.constructor.name} id ${i}`);const c=e[se.METADATA],p=Object.keys(l).reduce((t,r)=>(t[r]=e[H.column(t,r)],t),l);return n&&(s.verbose("re-adding transient properties: "+Object.keys(n).join(", ")),Object.entries(n).forEach(([e,t])=>{if(e in p&&void 0!==p[e])throw new k(`Transient property ${e} already exists on model ${l.constructor.name}. should be impossible`);p[e]=t})),c&&(s.silly(`Passing along ${this.flavour} persistence metadata for ${l.constructor.name} id ${i}: ${c}`),Object.defineProperty(p,se.METADATA,{enumerable:!1,configurable:!1,writable:!1,value:c})),p}createPrefix(t,r,i,...n){const a=n.pop(),s={};return s[e.TABLE]=t,Object.assign(s,i),[t,r,s,a]}updatePrefix(t,r,i,...n){const a=n.pop(),s={};return s[e.TABLE]=t,Object.assign(s,i),[t,r,s,a]}createAllPrefix(t,r,i,...n){if(r.length!==i.length)throw new k("Ids and models must have the same length");const a=n.pop(),s=r.map((r,n)=>{const a={};return a[e.TABLE]=t,Object.assign(a,i[n]),a});return[t,r,s,a]}updateAllPrefix(t,r,i,...n){if(r.length!==i.length)throw new k("Ids and models must have the same length");const a=n.pop(),s=r.map((r,n)=>{const a={};return a[e.TABLE]=t,Object.assign(a,i[n]),a});return[t,r,s,a]}static decoration(){super.decoration();const e=H.key(se.CREATED_BY),t=H.key(se.UPDATED_BY);d.flavouredAs(Se).for(e).define(E(Ue),o(e,{})).apply(),d.flavouredAs(Se).for(t).define(P(Ue),o(t,{})).apply();const r=H.key(z.ID);d.flavouredAs(Se).for(r).define(Q([oe.ASC,oe.DSC]),l(),T(),o(r,le),E(He,le)).apply();const i=ce.key(se.COLUMN);d.flavouredAs(Se).for(i).extend(j()).apply();const n=ce.key(se.TABLE);d.flavouredAs(Se).for(n).extend(e=>D()(e)).apply();const a=H.key(se.ONE_TO_ONE);d.flavouredAs(Se).for(a).define({decorator:(e,t,r,i,n)=>{const s={class:e.name?e.name:e,cascade:t,populate:r};return i&&(s.joinTable=i),n&&(s.name=n),he(u(se.RELATIONS),h([e.name?e.name:e,String.name,Number.name,BigInt.name]),E(qe,s),C(Me,s),F(Le,s),I(Ve,s),o(a,s))}}).apply();const s=H.key(se.ONE_TO_MANY);d.for(s).define({decorator:(e,t,r,i,n)=>{const a={class:e.name?e.name:e,cascade:t,populate:r};return i&&(a.joinTable=i),n&&(a.name=n),he(u(se.RELATIONS),g([e,String,Number]),E(_e,a),C(de,a),F(We,a),I(Ve,a),o(s,a))}}).apply()}}Ke.decoration(),ce.setCurrent(Se);class Qe extends p{constructor(){super()}deserialize(e){return super.deserialize(e)}serialize(e){return require("json-stringify-deterministic")(require("sort-keys-recursive")(this.preSerialize(e)))}}class Ye extends Ke{constructor(e,t,r){super(e,t),this.collections=r,this.collections=r||[]}async Sequence(e){return new je(e,this,this.collections)}async read(e,t,r,...i){const{stub:n,logger:a}=i.pop(),s=a.for(this.read);let o;try{const i=await this.readState(n,e,t.toString(),r);if(1>i.length)throw s.debug(`No record found for id ${t} in ${e} table`),new m(`No record found for id ${t} in ${e} table`);2>i.length?(s.debug(`No record found for id ${t} in ${e} table`),o=i.pop()):o=this.mergeModels(i)}catch(e){throw this.parseError(e)}return o}async delete(e,t,r,...i){const n=i.pop(),{stub:a,logger:s}=n,o=s.for(this.delete);let l;i.push(n);try{l=await this.read(e,t,r,...i),o.verbose(`deleting entry with pk ${t} from ${e} table`),this.deleteState(a,e,t.toString(),r)}catch(e){throw this.parseError(e)}return l}prepare(e,t,...r){const{stub:i,logger:n}=r.pop(),a=r.shift(),s=n.for(this.prepare),o=((e,t)=>{const r=A(t),i=$e(t),n=t=>Object.entries(t).reduce((r,[i,n])=>{if(void 0===n)return r;const a=H.column(t,i);if(e.isReserved(a))throw new k(`Property name ${a} is reserved`);return r[a]=n,r},{});if(i.private){const e=Object.keys(i.private);for(const t of e)i.private[t]=n(i.private[t])}return{model:r.model,transient:r.transient,privateData:i.private,result:n(r.model)}})(this,e);return s.info(`Preparing record for ${a} table with pk ${e[t]}`),{record:o.privateData,id:i.createCompositeKey(a,[e[t]+""]),transient:o.transient}}createPrefix(t,r,i,...n){const a=n.pop(),s=Object.keys(i);for(const r of s)i[r][e.TABLE]=t;return[t,r,i,a]}updatePrefix(t,r,i,...n){const a=n.pop(),s=Object.keys(i);for(const r of s)i[r][e.TABLE]=t;return[t,r,i,a]}async putState(e,t,r,...i){const n=Object.keys(r);let a,s={};for(const i of n){s=r[i];try{a=Buffer.from(Ke.serializer.serialize(r[i]))}catch(e){throw new S(`Failed to serialize record with id ${t}: ${e}`)}await e.putPrivateData(i,t.toString(),a)}return s}async readState(e,t,r,i,...n){const a=e.createCompositeKey(t,[r+""]),s=$e(i),o=Object.keys(s.private),l=[];for(const t of o)try{let i=await e.getPrivateData(t,a);if(""===i.toString())throw new m(`Entry with id ${r} doesn't exist...`);try{i=Ke.serializer.deserialize(i.toString())}catch(e){throw new S("Failed to parse private data: "+e)}l.push(i)}catch(e){if(Re.test(e.message))throw new Ce(e);throw e}return l}async deleteState(e,t,r,i,...n){const a=e.createCompositeKey(t,[r+""]),s=$e(i),o=Object.keys(s.private);for(const t of o)await e.deletePrivateData(t,a)}async queryResult(e,t,r){const i=$e(r).private,n=Object.keys(i)[0]||"";return(await e.getPrivateDataQueryResult(n,JSON.stringify(t))).iterator}async queryResultPaginated(e,t,r=250,i=void 0,n){const a=$e(n).private,s=Object.keys(a)[0]||"",o=await e.getPrivateDataQueryResult(s,JSON.stringify(t)),l=[];let c=0,p=!i,d=null;for(;;){const e=await o.next();if(e.value&&e.value.value.toString()){const t=e.value.key,n=e.value.value.toString("utf8");if(!p){t===i?.toString()&&(p=!0);continue}if(l.push({Key:t,Record:JSON.parse(n)}),d=t,c++,c>=r)return await o.close(),{iterator:l,metadata:{fetchedRecordsCount:l.length,bookmark:d}}}if(e.done)return await o.close(),{iterator:l,metadata:{fetchedRecordsCount:l.length,bookmark:""}}}}async raw(e,t,...r){const{stub:i,logger:n}=r.pop(),a=n.for(this.raw),{skip:s,limit:o}=e,l=r.shift();let c;o||s?(delete e.limit,delete e.skip,a.debug(`Retrieving paginated iterator: limit: ${o}/ skip: ${s}`),c=(await this.queryResultPaginated(i,e,o||250,s?.toString(),l)).iterator):(a.debug("Retrieving iterator"),c=await this.queryResult(i,e,l)),a.debug("Iterator acquired");const p=await this.resultIterator(a,c);return a.debug("returning {0} results",""+(Array.isArray(p)?p.length:1)),p}}class Ge extends B{static{this.serializer=new Qe}constructor(e,t){super(e),this.clazz=t,this.initialized=!1,Ge.adapter=this.getAdapter(t),this.repo=H.forModel(t,Ge.adapter.alias)}getAdapter(e){const t=new e;if(xe(t)){const e=$e(t),r=Object.keys(e.private);return new Ye(void 0,"fabric-private-data-adapter",r)}return new Ke(void 0,[Se,e.name].join("_"))}logFor(e){return M.for(Ge.name,{},e)}async create(e,t,...r){const i=this.logFor(e).for(this.create);"string"==typeof t&&(t=this.deserialize(t)),i.info("Creating model: "+JSON.stringify(t));const n=this.getTransientData(e);return i.info("Merging transient data..."),t=this.repo.merge(t,n),this.repo.create(t,e,...r)}async read(e,t,...r){return this.logFor(e).for(this.read).info(`reading entry with pk ${t} `),this.repo.read(t,e,...r)}getTransientData(e){const t=e.stub.getTransient();let r={};return t.has(this.repo.tableName)&&(r=JSON.parse(t.get(this.repo.tableName)?.toString("utf8"))),r}async update(e,t,...r){const i=this.logFor(e).for(this.update);"string"==typeof t&&(t=this.deserialize(t)),i.info("Updating model: "+JSON.stringify(t));const n=this.getTransientData(e);return i.info("Merging transient data..."),t=this.repo.merge(t,n),this.repo.update(t,e,...r)}async delete(e,t,...r){return this.logFor(e).for(this.delete).info(`deleting entry with pk ${t} `),this.repo.delete(t+"",e,...r)}async deleteAll(e,t,...r){return"string"==typeof t&&(t=JSON.parse(t)),this.repo.deleteAll(t,e,...r)}async readAll(e,t,...r){return"string"==typeof t&&(t=JSON.parse(t)),this.repo.readAll(t,e,...r)}async updateAll(e,t,...r){const i=this.logFor(e).for(this.updateAll);return"string"==typeof t&&(t=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e))),i.info(`updating ${t.length} entries to the table`),this.repo.updateAll(t,e,...r)}async raw(e,t,r,...i){return"string"==typeof t&&(t=JSON.parse(t)),this.repo.raw(t,r,e,...i)}serialize(e){return Ge.serializer.serialize(e)}deserialize(e){return Ge.serializer.deserialize(e)}async init(e){const t=this.logFor(e).for(this.init);t.info("Running contract initialization..."),this.initialized=!0,t.info("Contract initialization completed.")}async healthcheck(e){return this.logFor(e).for(this.healthcheck).info(`Running Healthcheck: ${this.initialized}...`),{healthcheck:this.initialized}}async createAll(e,t,...r){const i=this.logFor(e).for(this.createAll);return"string"==typeof t&&(t=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e))),i.info(`adding ${t.length} entries to the table`),this.repo.createAll(t,e,...r)}}class Xe extends Ge{constructor(e,t){super(e,t)}logFor(e){return M.for(Xe,{},e)}async create(e,t){const r=this.logFor(e).for(this.create);r.info("Creating model: "+t);const i=this.deserialize(t);return r.info("Model deserialized: "+JSON.stringify(i)),this.serialize(await super.create(e,i))}async read(e,t){return this.logFor(e).for(this.read).info("Reading id: "+t),this.serialize(await super.read(e,t))}async update(e,t){return this.logFor(e).for(this.update).info("Updating model: "+t),this.serialize(await super.update(e,t))}async delete(e,t){return this.logFor(e).for(this.delete).info("Deleting id: "+t),this.serialize(await super.delete(e,t))}async deleteAll(e,t){const r=JSON.parse(t);return this.logFor(e).for(this.deleteAll).info(`deleting ${r.length} entries from the table`),JSON.stringify((await super.deleteAll(e,r)).map(e=>this.serialize(e)))}async readAll(e,t){const r=JSON.parse(t);return this.logFor(e).for(this.readAll).info(`reading ${r.length} entries from the table`),JSON.stringify((await super.readAll(e,r)).map(e=>this.serialize(e)))}async updateAll(e,t){const r=this.logFor(e).for(this.updateAll),i=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e));return r.info(`Updating ${i.length} entries to the table`),JSON.stringify((await super.updateAll(e,i)).map(e=>this.serialize(e)))}async raw(e,t,r){const i=JSON.parse(t);return super.raw(e,i,r)}async init(e){await super.init(e)}async healthcheck(e){return JSON.stringify(await super.healthcheck(e))}async createAll(e,t){const r=this.logFor(e).for(this.createAll),i=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e));return r.info(`Adding ${i.length} entries to the table`),JSON.stringify((await super.createAll(e,i)).map(e=>this.serialize(e)))}}function Ze(e,t){const r=e+t;if(e!==r-t||t!==r-e)throw new Ee(`Addition overflow: ${e} + ${t}`);return r}function et(e,t){const r=e-t;if(e!==r+t||t!==e-r)throw new Ee(`Subtraction overflow: ${e} - ${t}`);return r}ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"create",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"read",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"update",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"delete",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"deleteAll",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"readAll",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"updateAll",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q,String,Boolean]),fe("design:returntype",Promise)],Xe.prototype,"raw",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],Xe.prototype,"init",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],Xe.prototype,"healthcheck",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],Xe.prototype,"createAll",null);let tt=class extends G{constructor(e){super(e)}};ge([K({type:"String"}),fe("design:type",String)],tt.prototype,"name",void 0),ge([ue(),l(),fe("design:type",String)],tt.prototype,"owner",void 0),ge([ue(),l(),fe("design:type",String)],tt.prototype,"symbol",void 0),ge([ue(),l(),fe("design:type",Number)],tt.prototype,"decimals",void 0),tt=ge([Y("erc20_tokens"),c(),fe("design:paramtypes",[Object])],tt);let rt=class extends G{constructor(e){super(e)}};ge([K({type:"String"}),fe("design:type",String)],rt.prototype,"id",void 0),ge([ue(),l(),fe("design:type",String)],rt.prototype,"token",void 0),ge([ue(),l(),fe("design:type",Number)],rt.prototype,"balance",void 0),ge([ue(),fe("design:type",String)],rt.prototype,"captive",void 0),rt=ge([Y("erc20_wallets"),c(),fe("design:paramtypes",[Object])],rt);let it=class extends G{constructor(e){super(e)}};var nt;ge([K({type:"String"}),ue(),l(),fe("design:type",String)],it.prototype,"owner",void 0),ge([ue(),l(),fe("design:type",String)],it.prototype,"spender",void 0),ge([ue(),l(),fe("design:type",Number)],it.prototype,"value",void 0),it=ge([Y("erc20_allowances"),c(),fe("design:paramtypes",[Object])],it),(e=>{e.TRANSFER="Transfer",e.APPROVAL="Approval"})(nt||(nt={}));class at extends Ge{constructor(e){super(e,rt),at.adapter=at.adapter||new Ke,this.walletRepository=De.forModel(rt,at.adapter.alias),this.tokenRepository=De.forModel(tt,at.adapter.alias),this.allowanceRepository=De.forModel(it,at.adapter.alias)}async TokenName(e){await this.CheckInitialized(e);const t=await this.tokenRepository.selectWithContext(void 0,e);return(await t.execute())[0].name}async Symbol(e){await this.CheckInitialized(e);const t=await this.tokenRepository.selectWithContext(void 0,e);return(await t.execute())[0].symbol}async Decimals(e){await this.CheckInitialized(e);const t=await this.tokenRepository.selectWithContext(void 0,e);return(await t.execute())[0].decimals}async TotalSupply(e){await this.CheckInitialized(e);const t=await this.walletRepository.selectWithContext(void 0,e),r=await t.execute();if(0==r.length)throw new m(`The token ${this.getName()} does not exist`);let i=0;return r.forEach(e=>{i+=e.balance}),i}async BalanceOf(e,t){return await this.CheckInitialized(e),(await this.walletRepository.read(t,e)).balance}async Transfer(e,t,r){await this.CheckInitialized(e);const i=e.clientIdentity.getID();if(!await this._transfer(e,i,t,r))throw new k("Failed to transfer");return!0}async TransferFrom(e,t,r,i){await this.CheckInitialized(e);const n=e.clientIdentity.getID(),a=await this._getAllowance(e,t,n);if(!a||0>a.value)throw new ze(`spender ${n} has no allowance from ${t}`);const s=a.value;if(i>s)throw new Pe("The spender does not have enough allowance to spend.");const o=et(s,i),l=Object.assign({},a,{value:o});if(await this.allowanceRepository.update(l,e),!await this._transfer(e,t,r,i))throw new k("Failed to transfer");return!0}async _transfer(e,t,r,i){const n=this.logFor(e).for(this._transfer);if(t===r)throw new U("cannot transfer to and from same client account");if(0>i)throw new Pe("transfer amount cannot be negative");const a=await this.walletRepository.read(t,e),s=a.balance;if(i>s)throw new Pe(`client account ${t} has insufficient funds.`);let o,l=!1;try{o=await this.walletRepository.read(r,e)}catch(t){if(!(t instanceof O))throw new k(t);if(404!==t.code)throw new k(t.message);o=new rt({id:r,balance:0,token:await this.TokenName(e)}),l=!0}const c=o.balance,p=et(s,i),d=Ze(c,i),u=Object.assign({},a,{balance:p});await this.walletRepository.update(u,e);const h=Object.assign({},o,{balance:d});l?await this.walletRepository.create(h,e):await this.walletRepository.update(h,e);const g={from:t,to:r,value:i};return this.repo.ObserverHandler().updateObservers(n,"",nt.TRANSFER,"",e,"",g),!0}async Approve(e,t,r){await this.CheckInitialized(e);const i=this.logFor(e).for(this.Approve),n=e.clientIdentity.getID();let a=await this._getAllowance(e,n,t);if((await this.walletRepository.read(n,e)).balance<r)throw new Pe(`client account ${n} has insufficient funds.`);a?(a.value=r,await this.allowanceRepository.update(a,e)):(a=new it({owner:n,spender:t,value:r}),await this.allowanceRepository.create(a,e));const s={owner:n,spender:t,value:r};return this.repo.ObserverHandler().updateObservers(i,"",nt.APPROVAL,"",e,"",s),!0}async Allowance(e,t,r){await this.CheckInitialized(e);const i=await this._getAllowance(e,t,r);if(!i)throw new ze(`spender ${r} has no allowance from ${t}`);return i.value}async _getAllowance(e,t,r){const i=Z.and(Z.attribute("owner").eq(t),Z.attribute("spender").eq(r)),n=await this.allowanceRepository.selectWithContext(void 0,e),a=await n.where(i).execute();return a?.[0]}async Initialize(e,t){const r=await this.tokenRepository.selectWithContext(void 0,e);if((await r.execute()).length>0)throw new U("contract options are already set, client is not authorized to change them");return t.owner=e.clientIdentity.getID(),await this.tokenRepository.create(t,e),!0}async CheckInitialized(e){const t=await this.tokenRepository.selectWithContext(void 0,e);if(0==(await t.execute()).length)throw new Fe("contract options need to be set before calling any function, call Initialize() to initialize contract")}async Mint(e,t){await this.CheckInitialized(e);const r=this.logFor(e).for(this.Mint),i=e.clientIdentity.getID();if(0>=t)throw new N("mint amount must be a positive integer");let n;try{n=await this.walletRepository.read(i,e);const r=Ze(n.balance,t),a=Object.assign({},n,{balance:r});await this.walletRepository.update(a,e)}catch(r){if(!(r instanceof O))throw new k(r);if(404!==r.code)throw new k(r.message);{const r=new rt({id:i,balance:t,token:await this.TokenName(e)});await this.walletRepository.create(r,e)}}const a={from:"0x0",to:i,value:t};this.repo.ObserverHandler().updateObservers(r,"",nt.TRANSFER,"",e,"",a)}async Burn(e,t){await this.CheckInitialized(e);const r=this.logFor(e).for(this.Burn),i=e.clientIdentity.getID(),n=await this.walletRepository.read(i,e),a=n.balance;if(t>a)throw new Pe("Minter has insufficient funds.");const s=et(a,t),o=Object.assign({},n,{balance:s});await this.walletRepository.update(o,e),r.info(t+" tokens were burned");const l={from:i,to:"0x0",value:t};this.repo.ObserverHandler().updateObservers(r,"",nt.TRANSFER,"",e,"",l)}async BurnFrom(e,t,r){await this.CheckInitialized(e);const i=this.logFor(e).for(this.BurnFrom),n=await this.walletRepository.read(t,e),a=n.balance;if(r>a)throw new Pe(t+" has insufficient funds.");const s=et(a,r),o=Object.assign({},n,{balance:s});await this.walletRepository.update(o,e),i.info(`${r} tokens were berned from ${t}`);const l={from:t,to:"0x0",value:r};this.repo.ObserverHandler().updateObservers(i,"",nt.TRANSFER,"",e,"",l)}async ClientAccountBalance(e){await this.CheckInitialized(e);const t=e.clientIdentity.getID(),r=await this.walletRepository.read(t,e);if(!r)throw new Pe(`The account ${t} does not exist`);return r.balance}async ClientAccountID(e){return await this.CheckInitialized(e),e.clientIdentity.getID()}}ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],at.prototype,"TokenName",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],at.prototype,"Symbol",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],at.prototype,"Decimals",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],at.prototype,"TotalSupply",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q,String]),fe("design:returntype",Promise)],at.prototype,"BalanceOf",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String,Number]),fe("design:returntype",Promise)],at.prototype,"Transfer",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String,String,Number]),fe("design:returntype",Promise)],at.prototype,"TransferFrom",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String,Number]),fe("design:returntype",Promise)],at.prototype,"Approve",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,String,String]),fe("design:returntype",Promise)],at.prototype,"Allowance",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q,tt]),fe("design:returntype",Promise)],at.prototype,"Initialize",null),ge([J(!1),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],at.prototype,"CheckInitialized",null),ge([Ae(),J(),fe("design:type",Function),fe("design:paramtypes",[q,Number]),fe("design:returntype",Promise)],at.prototype,"Mint",null),ge([Ae(),J(),fe("design:type",Function),fe("design:paramtypes",[q,Number]),fe("design:returntype",Promise)],at.prototype,"Burn",null),ge([Ae(),J(),fe("design:type",Function),fe("design:paramtypes",[q,String,Number]),fe("design:returntype",Promise)],at.prototype,"BurnFrom",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],at.prototype,"ClientAccountBalance",null),ge([J(),fe("design:type",Function),fe("design:paramtypes",[q]),fe("design:returntype",Promise)],at.prototype,"ClientAccountID",null);const st=[at];class ot extends L{constructor(e,t,r){if(super(e,t),r){if(r instanceof we)throw new Te("Receiving incorrect context... It should be the contract context!!!");this.logger=r.logging.getLogger(e)}else this.logger=new L(e,t)}log(e,t,r){if(_[this.config("level")]<_[e])return;let i;switch(e){case W.info:i=this.logger.info;break;case W.verbose:i=this.logger.verbose;break;case W.debug:i=this.logger.debug;break;case W.error:i=this.logger.error;break;case W.silly:i=this.logger.silly;break;default:throw Error("Invalid log level")}i.call(this.logger,this.createLog(e,t,r))}}M.setFactory((e,t,r)=>new ot(e,t||{},r));const lt="##VERSION##",ct="##PACKAGE##";ye.registerLibrary(ct,lt);export{ot as ContractLogger,Ke as FabricContractAdapter,we as FabricContractContext,De as FabricContractRepository,me as FabricContractRepositoryObservableHandler,je as FabricContractSequence,Ge as FabricCrudContract,Be as FabricStatement,ct as PACKAGE_NAME,Xe as SerializedCrudContract,lt as VERSION,st as contracts,Ue as createdByOnFabricCreateUpdate,He as pkFabricOnCreate};
1
+ import{CouchDBKeys as e,CouchDBStatement as t,CouchDBGroupOperator as r,CouchDBOperator as i,CouchDBAdapter as n}from"@decaf-ts/for-couchdb";import{Model as s,required as a,model as o,JSONSerializer as l,type as c,list as p}from"@decaf-ts/decorator-validation";import{Context as d,OperationKeys as u,BulkCrudOperationKeys as h,SerializationError as g,InternalError as f,BaseError as y,NotFoundError as w,transient as m,enforceDBDecorators as b,ValidationError as v,ConflictError as S,DBKeys as A,onCreate as k,onCreateUpdate as O,readonly as N,onUpdate as x,onDelete as E,afterAny as $}from"@decaf-ts/db-decorators";import{Property as R,Object as T,Contract as z,Transaction as P,Context as F}from"fabric-contract-api";import{Logging as C,MiniLogger as I,NumericLogLevels as D,LogLevel as j}from"@decaf-ts/logging";import{ObserverHandler as B,Repository as J,pk as _,index as q,table as M,BaseModel as L,AuthorizationError as W,Sequence as U,Condition as V,repositoryFromTypeMetadata as Y,cacheModelForPopulate as H,Cascade as K,createOrUpdate as Q,getPopulateKey as G,UnsupportedError as X,PersistenceKeys as Z,Adapter as ee,sequenceNameForModel as te,relation as re,oneToManyOnUpdate as ie,column as ne}from"@decaf-ts/core";import{Metadata as se,propMetadata as ae,Decoration as oe,apply as le,prop as ce}from"@decaf-ts/decoration";import{__decorate as pe,__metadata as de}from"tslib";class ue extends d{constructor(){super()}get stub(){return this.get("stub")}get timestamp(){return this.stub.getDateTimestamp()}get identity(){return this.get("clientIdentity")}get logger(){return this.get("logger")}}class he extends B{constructor(e=[u.CREATE,u.UPDATE,u.DELETE,h.CREATE_ALL,h.UPDATE_ALL,h.DELETE_ALL]){super(),this.supportedEvents=e}async updateObservers(e,t,r,i,n,s,a){const{stub:o}=n;if(-1!==this.supportedEvents.indexOf(r)){e.debug(`Emitting ${r} event`);const n=((e,t,r)=>{const i=[e,t];return r&&i.push(r),i.join("_")})(t,r,s);o.setEvent(n,Buffer.from(JSON.stringify({id:i})))}else o.setEvent(r,Buffer.from(JSON.stringify(a)))}}var ge,fe;(e=>{e.PRIVATE="private",e.SHARED="shared",e.FABRIC="fabric.",e.OWNEDBY="owned-by"})(ge||(ge={})),(e=>{e.X509="X.509"})(fe||(fe={}));const ye="hlf-fabric",we=/private\s+data\s+matching\s+public\s+hash\s+version\s+is\s+not\s+available/i;function me(e){return se.get(e.constructor,ge.PRIVATE)}function be(e){const t=me(e);return!(!t||void 0===t.isPrivate)&&t.isPrivate}function ve(e){if(!(e=>!!me(e))(e))return{model:e};const t=be(e),r=me(e);let i={model:e,private:void 0};if(t){const t=r.collections;i=(se.properties(e.constructor)||[]).reduce((t,i)=>{const n=r.collections;t.private=t.private||{};for(const r of n)try{t.private[r]=t.private[r]||{},t.private[r][i]=e[i]}catch(e){throw new g(`Failed to serialize private property ${i}: ${e}`)}return t},{model:{},private:t})}else i=Object.entries(r).reduce((t,[r,i])=>{const n=se.properties(e.constructor);if(!n?.includes(r))return t;const s=i.collections;if(s?.length){t.private=t.private||{};for(const i of s)try{t.private[i]=t.private[i]||{},t.private[i][r]=e[r]}catch(e){throw new g(`Failed to serialize private property ${r}: ${e}`)}}else t.model=t.model||{},t.model[r]=e[r];return t},{});if(i.model=i.model||{},i.model=s.build(i.model,e.constructor.name),i.private){const t=Object.keys(i.private);for(const r of t)i.private[r]=s.build(i.private[r],e.constructor.name)}return i}class Se extends f{constructor(e){super(e,Se.name)}}class Ae extends f{constructor(e){super(e,Ae.name)}}class ke extends f{constructor(e){super(e,ke.name)}}class Oe extends f{constructor(e){super(e,Oe.name,500)}}class Ne extends y{constructor(e="private data matching public hash version is not available ..."){super(Ne.name,e,403)}}class xe extends y{constructor(e){super(xe.name,e,409)}}let Ee=class extends L{constructor(e){super(e)}};function $e(){return function(e,t,r){const i=r.value;return r.value=async function(...e){const r=e[0],n=r.clientIdentity.getID(),s=await this.tokenRepository.selectWithContext(void 0,r),a=await s.execute();if(0==a.length)throw new w("No tokens avaialble");if(a.length>1)throw new w("To many token available : "+a.length);if(a[0].owner!=n)throw new W(`User not authorized to run ${t} on the token`);return await i.apply(this,e)},r}}function Re(e){if(!e)throw Error("Collection name is required");const t=ge.PRIVATE;return(r,i)=>{const n=r instanceof s?r.constructor:r,a=se.get(n),o=a?.private?.collections||[];if(ae(t,{...!i&&{collections:o?[...new Set([...o,e])]:[e]},isPrivate:!i})(i?n:r),i){const n=a?.private?.[i]?.collections||[];ae(se.key(t,i),{collections:n?[...new Set([...n,e])]:[e]})(r,i),m()(r,i)}}}pe([_(),de("design:type",String)],Ee.prototype,"id",void 0),pe([a(),q(),de("design:type",Object)],Ee.prototype,"current",void 0),Ee=pe([M(e.SEQUENCE),o(),de("design:paramtypes",[Object])],Ee);class Te extends U{constructor(e,t,r){super(e);for(const e of r||[])Re(e)(Ee);this.repo=J.forModel(Ee,t.alias)}async current(e){if(!e)throw new Oe("Context is required");const{name:t,startWith:r}=this.options;try{const r=await this.repo.read(t,e);return this.parse(r.current)}catch(e){if(e instanceof w){if(void 0===r)throw new f("Starting value is not defined for a non existing sequence");try{return this.parse(r)}catch(e){throw new f(`Failed to parse initial value for sequence ${r}: ${e}`)}}throw new f(`Failed to retrieve current value for sequence ${t}: ${e}`)}}parse(e){return U.parseValue(this.options.type,e)}async increment(e,t,r){if(!r)throw new Oe("Context is required");const{type:i,incrementBy:n,name:s}=this.options;let a;const o=t||n;if(o%n!==0)throw new f("Value to increment does not consider the incrementBy setting: "+n);switch(i){case"Number":a=this.parse(e)+o;break;case"BigInt":a=this.parse(e)+BigInt(o);break;default:throw new f("Should never happen")}let l;try{l=await this.repo.update(new Ee({id:s,current:a}),r)}catch(e){if(!(e instanceof w))throw e;l=await this.repo.create(new Ee({id:s,current:a}),r)}return l.current}async next(e){if(!e)throw new Oe("Context is required");const t=await this.current(e);return this.increment(t,void 0,e)}async range(e,t){if(!t)throw new Oe("Context is required");const r=await this.current(t),i=this.parse(this.options.incrementBy),n=await this.increment(r,this.parse(e)*i,t),s=[];for(let t=1;e>=t;t++)s.push(r+i*this.parse(t));if(s[s.length-1]!==n)throw new f("Miscalculation of range");return s}}class ze extends J{constructor(e,t,r){super(e,t),this.trackedEvents=r}logFor(e){return C.for(ze,{},e)}async create(e,...t){const r=t[t.length-1],i=this.logFor(r).for(this.create);i.info("Preparing model: "+JSON.stringify(e));let n,{record:s,id:a,transient:o}=this.adapter.prepare(e,this.pk,this.tableName,...t);return i.info("Creating model: "+JSON.stringify(e)),s=await this.adapter.create(this.tableName,a,s,...t),t.length&&(n=t[t.length-1]),i.info("Reverting model: "+JSON.stringify(e)),this.adapter.revert(s,this.class,this.pk,a,n&&n.get("rebuildWithTransient")?o:void 0)}async read(e,...t){const r=await this.adapter.read(this.tableName,e,new this.class,...t);return this.adapter.revert(r,this.class,this.pk,e)}async delete(e,...t){const r=await this.adapter.delete(this.tableName,e,new this.class,...t);return this.adapter.revert(r,this.class,this.pk,e)}async update(e,...t){const r=t[t.length-1],i=this.logFor(r).for(this.update);i.info("Preparing model: "+JSON.stringify(e));let n,{record:s,id:a,transient:o}=this.adapter.prepare(e,this.pk,this.tableName,...t);return i.info("Updating model: "+JSON.stringify(e)),s=await this.adapter.update(this.tableName,a,s,...t),t.length&&(n=t[t.length-1]),i.info("Reverting model: "+JSON.stringify(e)),this.adapter.revert(s,this.class,this.pk,a,n&&n.get("rebuildWithTransient")?o:void 0)}ObserverHandler(){return new he}async createAll(e,...t){if(!e.length)return e;const r=e.map(e=>this.adapter.prepare(e,this.pk,this.tableName,...t)),i=r.map(e=>e.id);let n=r.map(e=>e.record);const s=r.map(e=>e.transient).filter(e=>!!e);let a;return t.length&&(a=t[t.length-1]),n=await this.adapter.createAll(this.tableName,i,n,...t),n.map((e,t)=>this.adapter.revert(e,this.class,this.pk,i[t],a&&a.get("rebuildWithTransient")?s:void 0))}async updateAll(e,...t){if(!e.length)return e;const r=e.map(e=>this.adapter.prepare(e,this.pk,this.tableName,...t)),i=r.map(e=>e.transient).filter(e=>!!e);let n;return t.length&&(n=t[t.length-1]),(await this.adapter.updateAll(this.tableName,r.map(e=>e.id),r.map(e=>e.record),...t)).map((e,t)=>this.adapter.revert(e,this.class,this.pk,r[t].id,n&&n.get("rebuildWithTransient")?i:void 0))}async raw(e,t,...r){const i=r.pop(),n=await d.args("QUERY",this.class,[i],this.adapter,{});return this.adapter.raw(e,t,new this.class,...n.args)}async updateObservers(e,t,r,i,...n){if(!this.trackedEvents||-1!==this.trackedEvents.indexOf(t))return await super.updateObservers(e,t,r,i,...n)}async selectWithContext(e,t){let r;return t instanceof ue?r.context=t:r=await d.args(u.CREATE,this.class,[t],this.adapter,this._overrides||{}),e?this.adapter.Statement(r.context).select(e).from(this.class):this.adapter.Statement(r.context).select().from(this.class)}async createAllPrefix(e,...t){const r=t[t.length-1],i=await d.args(u.CREATE,this.class,t,this.adapter,this._overrides||{});if(!e.length)return[e,...i.args];const n=J.getSequenceOptions(e[0]);let s=[];n.type?(n.name||(n.name=Te.pk(e[0])),s=await(await this.adapter.Sequence(n)).range(e.length,r)):s=e.map((e,t)=>{if(void 0===e[this.pk])throw new f("Primary key is not defined for model in position "+t);return e[this.pk]}),e=await Promise.all(e.map(async(e,t)=>(e=new this.class(e),n.type&&(e[this.pk]=s[t]),await b(this,i.context,e,u.CREATE,u.ON),e)));const a=i.context.get("ignoredValidationProperties")||[],o=(await Promise.all(e.map(e=>Promise.resolve(e.hasErrors(...a))))).reduce((e,t,r)=>(t&&(e="string"==typeof e?e+`\n - ${r}: ${t.toString()}`:` - ${r}: ${t.toString()}`),e),void 0);if(o)throw new v(o);return[e,...i.args]}async createPrefix(e,...t){const r=await super.createPrefix(e,...t),i=r[0][this.pk];try{if(await this.read(i+"",...t))throw new S(`Conflict detected while creating model with id: ${i} already exists`)}catch(e){if(404!==e.code)throw e;this.logFor(t[t.length-1]).info(`Record entry with pk ${i} does not exist, creating it now...`)}return r}}class Pe extends t{constructor(e,t){super(e),this.ctx=t}async raw(e){const t=await this.adapter.raw(e,!0,this.ctx),r=s.pk(this.fromSelector),i=se.get(this.fromSelector,se.key(A.ID,r))?.type;return this.selectSelector?t:t.map(e=>this.processRecord(e,r,i))}build(){const t={};t[e.TABLE]={},t[e.TABLE]=J.table(this.fromSelector);const n={selector:t};if(this.selectSelector&&(n.fields=this.selectSelector),this.whereCondition){const t=this.parseCondition(V.and(this.whereCondition,V.attribute(e.TABLE).eq(n.selector[e.TABLE]))).selector,i=Object.keys(t);if(1===i.length&&-1!==Object.values(r).indexOf(i[0]))switch(i[0]){case r.AND:t[r.AND]=[...Object.values(t[r.AND]).reduce((e,t)=>{const i=Object.keys(t);if(1!==i.length)throw Error("Too many keys in query selector. should be one");const n=i[0];return n===r.AND?e.push(...t[n]):e.push(t),e},[])],n.selector=t;break;case r.OR:{const e={};e[r.AND]=[t,...Object.entries(n.selector).map(([e,t])=>{const r={};return r[e]=t,r})],n.selector=e;break}default:throw Error("This should be impossible")}else Object.entries(t).forEach(([e,t])=>{n.selector[e],n.selector[e]=t})}if(this.orderBySelector){n.sort=n.sort||[],n.selector=n.selector||{};const[e,t]=this.orderBySelector,r={};r[e]=t,n.sort.push(r),n.selector[e]||(n.selector[e]={},n.selector[e][i.BIGGER]=null)}return this.limitSelector&&(n.limit=this.limitSelector),this.offsetSelector&&(n.skip=this.offsetSelector),n}}class Fe extends l{constructor(){super()}deserialize(e,t){return JSON.parse(e)}serialize(e){return require("json-stringify-deterministic")(require("sort-keys-recursive")(this.preSerialize(e)))}preSerialize(e){return Object.assign({},e)}}async function Ce(e,t,r,i){const n=i[r];if(!n)return;if("object"!=typeof n){const t=Y(i,r,this.adapter.alias),s=await t.read(n,e);return await H(e,i,r,n,s),void(i[r]=n)}t.class="string"==typeof t.class?t.class:t.class().name;const a=s.get(t.class);if(!a)throw new f("Could not find model "+t.class);const o=J.forModel(a,this.adapter.alias),l=await o.create(n,e),c=s.pk(l);await H(e,i,r,l[c],l),i[r]=l[c]}async function Ie(e,t,r,i){const n=i[r];if(!n)return;if(t.cascade.update!==K.CASCADE)return;if("object"!=typeof n){const t=Y(i,r,this.adapter.alias),s=await t.read(n,e);return await H(e,i,r,n,s),void(i[r]=n)}const a=await Q(i[r],e,this.adapter.alias),o=s.pk(a);await H(e,i,r,a[o],a),i[r]=a[o]}async function De(e,t,r,i){const n=i[r];if(!n)return;if(t.cascade.update!==K.CASCADE)return;const a=Y(i,r,this.adapter.alias);let o;o=n instanceof s?await a.delete(i[r][a.pk],e):await a.delete(i[r],e),await H(e,i,r,o[a.pk],o)}async function je(e,t,r,i){const n=i[r];if(!n||!n.length)return;const a=typeof n[0];if(!n.every(e=>typeof e===a))throw new f(`Invalid operation. All elements of property ${r} must match the same type.`);const o=new Set([...n]);if("object"!==a){const t=Y(i,r,this.adapter.alias);for(const n of o){const s=await t.read(n,e);await H(e,i,r,n,s)}return void(i[r]=[...o])}const l=s.pk(n[0]),c=new Set;for(const t of n){const n=await Q(t,e,this.adapter.alias);await H(e,i,r,n[l],n),c.add(n[l])}i[r]=[...c]}async function Be(e,t,r,i){if(t.cascade.delete!==K.CASCADE)return;const n=i[r];if(!n||!n.length)return;const s=typeof n[0];if(!n.every(e=>typeof e===s))throw new f(`Invalid operation. All elements of property ${r} must match the same type.`);const a="object"===s,o=a?J.forModel(n[0],this.adapter.alias):Y(i,r,this.adapter.alias),l=new Set([...a?n.map(e=>e[o.pk]):n]);for(const t of l.values()){const n=await o.delete(t,e);await H(e,i,r,t,n)}i[r]=[...l]}async function Je(e,t,r,i){if(!t.populate)return;const n=i[r],s=Array.isArray(n);if(void 0===n||s&&0===n.length)return;const a=await(async(t,r,i,n,s)=>{let a,o;const l=[];for(const c of n){a=G(r.constructor.name,i,c);try{o=await t.get(a)}catch(t){const n=Y(r,i,s);if(!n)throw new f("Could not find repo");o=await n.read(c,e)}l.push(o)}return l})(e,i,r,s?n:[n],this.adapter.alias);i[r]=s?a:a[0]}async function _e(e,t,r,i){try{const t=e.get("clientIdentity");i[r]=t.getID()}catch(e){throw new X("No User found in context. Please provide a user in the context")}}async function qe(e,t,r,i){if(!t.type||i[r])return;let n;t.name||(t.name=te(i,"pk"));try{n=await this.adapter.Sequence(t)}catch(e){throw new f(`Failed to instantiate Sequence ${t.name}: ${e}`)}const s=await n.next(e);Object.defineProperty(i,r,{enumerable:!0,writable:!1,configurable:!0,value:s})}class Me extends n{getClient(){throw new X("Client is not supported in Fabric contracts")}static{this.textDecoder=new TextDecoder("utf8")}static{this.serializer=new Fe}logFor(e){return C.for(Me,{},e)}repository(){return ze}constructor(e,t){super(e,ye,t),this.Context=ue}for(e,...t){return super.for(e,...t)}async create(e,t,r,...i){const{stub:n,logger:s}=i.pop(),a=s.for(this.create);try{a.info(`adding entry to ${e} table with pk ${t}`),r=await this.putState(n,t.toString(),r)}catch(e){throw this.parseError(e)}return r}async read(e,t,...r){const{stub:i,logger:n}=r.pop(),s=n.for(this.read);let a;try{const r=await this.readState(i,e,t.toString());if(1>r.length)throw s.debug(`No record found for id ${t} in ${e} table`),new w(`No record found for id ${t} in ${e} table`);2>r.length?(s.debug(`No record found for id ${t} in ${e} table`),a=r.pop()):a=this.mergeModels(r)}catch(e){throw this.parseError(e)}return a}async update(e,t,r,...i){const{stub:n,logger:s}=i.pop(),a=s.for(this.update);try{a.info(`updating entry to ${e} table with pk ${t}`),r=await this.putState(n,t.toString(),r)}catch(e){throw this.parseError(e)}return r}async delete(e,t,...r){const i=r.pop(),{stub:n,logger:s}=i,a=s.for(this.delete);let o;r.push(i);try{o=await this.read(e,t,...r),a.verbose(`deleting entry with pk ${t} from ${e} table`),this.deleteState(n,e,t.toString())}catch(e){throw this.parseError(e)}return o}async deleteState(e,t,r,...i){const n=e.createCompositeKey(t,[r+""]);await e.deleteState(n)}async putState(e,t,r,...i){let n;try{n=Buffer.from(Me.serializer.serialize(r))}catch(e){throw new g(`Failed to serialize record with id ${t}: ${e}`)}return await e.putState(t.toString(),n),r}async readState(e,t,r,...i){const n=e.createCompositeKey(t,[r+""]),s=[];let a=await e.getState(n);if(""===a.toString())throw new w(`Record with id ${r} not found`);try{a=Me.serializer.deserialize(a.toString())}catch(e){throw new g("Failed to parse record: "+e)}return s.push(a),s}async queryResult(e,t,...r){return await e.getQueryResult(JSON.stringify(t))}async queryResultPaginated(e,t,r=250,i,...n){return await e.getQueryResultWithPagination(JSON.stringify(t),r,i?.toString())}mergeModels(e){const t=e=>Object.entries(e).reduce((e,[t,r])=>(void 0!==r&&(e[t]=r),e),{});let r=e.pop();for(const i of e)r=Object.assign({},t(r),t(i));return r}decode(e){return Me.textDecoder.decode(e)}async flags(e,t,r,i,...n){return Object.assign(await super.flags(e,t,r,...n),{stub:i.stub,identity:i.clientIdentity??i.identity,logger:i.logger??this.logFor(i)})}index(e){return Promise.resolve(void 0)}async resultIterator(e,t,r=!1){const i=[];let n=await t.next();for(;!n.done;){if(n.value&&n.value.value.toString()){let t={};if(e.debug(n.value.value.toString("utf8")),r){t.TxId=n.value.txId,t.Timestamp=n.value.timestamp;try{t.Value=JSON.parse(n.value.value.toString("utf8"))}catch(r){e.error(r),t.Value=n.value.value.toString("utf8")}}else try{t=JSON.parse(n.value.value.toString("utf8"))}catch(r){e.error(r),t=n.value.value.toString("utf8")}i.push(t)}n=await t.next()}return e.debug(`Closing iterator after ${i.length} results`),t.close(),i}async raw(e,t,...r){const{stub:i,logger:n}=r.pop(),s=n.for(this.raw),{skip:a,limit:o}=e;let l;o||a?(delete e.limit,delete e.skip,s.debug(`Retrieving paginated iterator: limit: ${o}/ skip: ${a}`),l=(await this.queryResultPaginated(i,e,o||250,a?.toString())).iterator):(s.debug("Retrieving iterator"),l=await this.queryResult(i,e)),s.debug("Iterator acquired");const c=await this.resultIterator(s,l);return s.debug("returning {0} results",""+(Array.isArray(c)?c.length:1)),c}Statement(e){if(!e)throw new Oe("Context is required");return new Pe(this,e)}async Sequence(e){return new Te(e,this)}async createAll(e,t,r,...i){if(t.length!==r.length)throw new f("Ids and models must have the same length");const{logger:n}=i[i.length-1],s=n.for(this.createAll);return s.info(`Creating ${t.length} entries ${e} table`),s.debug("pks: "+t),Promise.all(t.map(async(t,n)=>this.create(e,t,r[n],...i)))}async updateAll(e,t,r,...i){if(t.length!==r.length)throw new f("Ids and models must have the same length");const{logger:n}=i[i.length-1],s=n.for(this.createAll);return s.info(`Updating ${t.length} entries ${e} table`),s.debug("pks: "+t),Promise.all(t.map(async(t,n)=>this.update(e,t,r[n],...i)))}prepare(e,t,...r){const{stub:i,logger:n}=r.pop(),a=r.shift(),o=n.for(this.prepare),l=s.toTransient(e),c=Object.entries(l.model).reduce((t,[r,i])=>{if(void 0===i)return t;const n=J.column(e,r);if(this.isReserved(n))throw new f(`Property name ${n} is reserved`);return t[n]=i,t},{});return e[Z.METADATA]&&(o.silly("Passing along persistence metadata for "+e[Z.METADATA]),Object.defineProperty(c,Z.METADATA,{enumerable:!1,writable:!1,configurable:!0,value:e[Z.METADATA]})),o.info(`Preparing record for ${a} table with pk ${e[t]}`),{record:c,id:i.createCompositeKey(a,[e[t]+""]),transient:l.transient}}revert(e,t,r,i,n){const a=this.log.for(this.revert),o={};o[r]=i;const l="string"==typeof t?s.build(o,t):new t(o);a.silly(`Rebuilding model ${l.constructor.name} id ${i}`);const c=e[Z.METADATA],p=Object.keys(l).reduce((t,r)=>(t[r]=e[J.column(t,r)],t),l);return n&&(a.verbose("re-adding transient properties: "+Object.keys(n).join(", ")),Object.entries(n).forEach(([e,t])=>{if(e in p&&void 0!==p[e])throw new f(`Transient property ${e} already exists on model ${l.constructor.name}. should be impossible`);p[e]=t})),c&&(a.silly(`Passing along ${this.flavour} persistence metadata for ${l.constructor.name} id ${i}: ${c}`),Object.defineProperty(p,Z.METADATA,{enumerable:!1,configurable:!1,writable:!1,value:c})),p}createPrefix(t,r,i,...n){const s=n.pop(),a={};return a[e.TABLE]=t,Object.assign(a,i),[t,r,a,s]}updatePrefix(t,r,i,...n){const s=n.pop(),a={};return a[e.TABLE]=t,Object.assign(a,i),[t,r,a,s]}createAllPrefix(t,r,i,...n){if(r.length!==i.length)throw new f("Ids and models must have the same length");const s=n.pop(),a=r.map((r,n)=>{const s={};return s[e.TABLE]=t,Object.assign(s,i[n]),s});return[t,r,a,s]}updateAllPrefix(t,r,i,...n){if(r.length!==i.length)throw new f("Ids and models must have the same length");const s=n.pop(),a=r.map((r,n)=>{const s={};return s[e.TABLE]=t,Object.assign(s,i[n]),s});return[t,r,a,s]}static decoration(){super.decoration(),oe.flavouredAs(ye).for(Z.CREATED_BY).define(k(_e),ae(Z.CREATED_BY,{})).apply(),oe.flavouredAs(ye).for(Z.UPDATED_BY).define(O(_e),ae(Z.UPDATED_BY,{})).apply(),oe.flavouredAs(ye).for(A.ID).define({decorator:(e,t)=>(r,i)=>le(a(),N(),ae(se.key(A.ID,i),e),k(qe,e,t))(r,i)}).apply(),oe.flavouredAs(ye).for(Z.COLUMN).extend(R()).apply(),oe.flavouredAs(ye).for(Z.TABLE).extend(e=>T()(e)).apply(),oe.flavouredAs(ye).for(Z.ONE_TO_ONE).define({decorator:(e,t,r,i,n)=>{const s={class:e,cascade:t,populate:r};return i&&(s.joinTable=i),n&&(s.name=n),le(ce(),re(Z.ONE_TO_ONE,s),c([e,String,Number,BigInt]),k(Ce,s),x(Ie,s),E(De,s),$(Je,s),ae(Z.ONE_TO_ONE,s))}}).apply(),oe.for(Z.ONE_TO_MANY).define({decorator:(e,t,r,i,n)=>{const s={class:e,cascade:t,populate:r};return i&&(s.joinTable=i),n&&(s.name=n),le(ce(),re(Z.ONE_TO_MANY,s),p([e,String,Number]),k(je,s),x(ie,s),E(Be,s),$(Je,s),ae(Z.ONE_TO_MANY,s))}}).apply()}}Me.decoration(),ee.setCurrent(ye);class Le extends l{constructor(){super()}deserialize(e){return super.deserialize(e)}serialize(e){return require("json-stringify-deterministic")(require("sort-keys-recursive")(this.preSerialize(e)))}}class We extends Me{constructor(e,t,r){super(e,t),this.collections=r,this.collections=r||[]}async Sequence(e){return new Te(e,this,this.collections)}async read(e,t,r,...i){const{stub:n,logger:s}=i.pop(),a=s.for(this.read);let o;try{const i=await this.readState(n,e,t.toString(),r);if(1>i.length)throw a.debug(`No record found for id ${t} in ${e} table`),new w(`No record found for id ${t} in ${e} table`);2>i.length?(a.debug(`No record found for id ${t} in ${e} table`),o=i.pop()):o=this.mergeModels(i)}catch(e){throw this.parseError(e)}return o}async delete(e,t,r,...i){const n=i.pop(),{stub:s,logger:a}=n,o=a.for(this.delete);let l;i.push(n);try{l=await this.read(e,t,r,...i),o.verbose(`deleting entry with pk ${t} from ${e} table`),this.deleteState(s,e,t.toString(),r)}catch(e){throw this.parseError(e)}return l}prepare(e,t,...r){const{stub:i,logger:n}=r.pop(),a=r.shift(),o=n.for(this.prepare),l=((e,t)=>{const r=s.toTransient(t),i=ve(t),n=t=>Object.entries(t).reduce((r,[i,n])=>{if(void 0===n)return r;const s=J.column(t,i);if(e.isReserved(s))throw new f(`Property name ${s} is reserved`);return r[s]=n,r},{});if(i.private){const e=Object.keys(i.private);for(const t of e)i.private[t]=n(i.private[t])}return{model:r.model,transient:r.transient,privateData:i.private,result:n(r.model)}})(this,e);return o.info(`Preparing record for ${a} table with pk ${e[t]}`),{record:l.privateData,id:i.createCompositeKey(a,[e[t]+""]),transient:l.transient}}createPrefix(t,r,i,...n){const s=n.pop(),a=Object.keys(i);for(const r of a)i[r][e.TABLE]=t;return[t,r,i,s]}updatePrefix(t,r,i,...n){const s=n.pop(),a=Object.keys(i);for(const r of a)i[r][e.TABLE]=t;return[t,r,i,s]}async putState(e,t,r,...i){const n=Object.keys(r);let s,a={};for(const i of n){a=r[i];try{s=Buffer.from(Me.serializer.serialize(r[i]))}catch(e){throw new g(`Failed to serialize record with id ${t}: ${e}`)}await e.putPrivateData(i,t.toString(),s)}return a}async readState(e,t,r,i,...n){const s=e.createCompositeKey(t,[r+""]),a=ve(i),o=Object.keys(a.private),l=[];for(const t of o)try{let i=await e.getPrivateData(t,s);if(""===i.toString())throw new w(`Entry with id ${r} doesn't exist...`);try{i=Me.serializer.deserialize(i.toString())}catch(e){throw new g("Failed to parse private data: "+e)}l.push(i)}catch(e){if(we.test(e.message))throw new Ne(e);throw e}return l}async deleteState(e,t,r,i,...n){const s=e.createCompositeKey(t,[r+""]),a=ve(i),o=Object.keys(a.private);for(const t of o)await e.deletePrivateData(t,s)}async queryResult(e,t,r){const i=ve(r).private,n=Object.keys(i)[0]||"";return(await e.getPrivateDataQueryResult(n,JSON.stringify(t))).iterator}async queryResultPaginated(e,t,r=250,i=void 0,n){const s=ve(n).private,a=Object.keys(s)[0]||"",o=await e.getPrivateDataQueryResult(a,JSON.stringify(t)),l=[];let c=0,p=!i,d=null;for(;;){const e=await o.next();if(e.value&&e.value.value.toString()){const t=e.value.key,n=e.value.value.toString("utf8");if(!p){t===i?.toString()&&(p=!0);continue}if(l.push({Key:t,Record:JSON.parse(n)}),d=t,c++,c>=r)return await o.close(),{iterator:l,metadata:{fetchedRecordsCount:l.length,bookmark:d}}}if(e.done)return await o.close(),{iterator:l,metadata:{fetchedRecordsCount:l.length,bookmark:""}}}}async raw(e,t,...r){const{stub:i,logger:n}=r.pop(),s=n.for(this.raw),{skip:a,limit:o}=e,l=r.shift();let c;o||a?(delete e.limit,delete e.skip,s.debug(`Retrieving paginated iterator: limit: ${o}/ skip: ${a}`),c=(await this.queryResultPaginated(i,e,o||250,a?.toString(),l)).iterator):(s.debug("Retrieving iterator"),c=await this.queryResult(i,e,l)),s.debug("Iterator acquired");const p=await this.resultIterator(s,c);return s.debug("returning {0} results",""+(Array.isArray(p)?p.length:1)),p}}class Ue extends z{static{this.serializer=new Le}constructor(e,t){super(e),this.clazz=t,this.initialized=!1,Ue.adapter=this.getAdapter(t),this.repo=J.forModel(t,Ue.adapter.alias)}getAdapter(e){const t=new e;if(be(t)){const e=ve(t),r=Object.keys(e.private);return new We(void 0,"fabric-private-data-adapter",r)}return new Me(void 0,[ye,e.name].join("_"))}logFor(e){return C.for(Ue.name,{},e)}async create(e,t,...r){const i=this.logFor(e).for(this.create);"string"==typeof t&&(t=this.deserialize(t)),i.info("Creating model: "+JSON.stringify(t));const n=this.getTransientData(e);return i.info("Merging transient data..."),t=this.repo.merge(t,n),this.repo.create(t,e,...r)}async read(e,t,...r){return this.logFor(e).for(this.read).info(`reading entry with pk ${t} `),this.repo.read(t,e,...r)}getTransientData(e){const t=e.stub.getTransient();let r={};return t.has(this.repo.tableName)&&(r=JSON.parse(t.get(this.repo.tableName)?.toString("utf8"))),r}async update(e,t,...r){const i=this.logFor(e).for(this.update);"string"==typeof t&&(t=this.deserialize(t)),i.info("Updating model: "+JSON.stringify(t));const n=this.getTransientData(e);return i.info("Merging transient data..."),t=this.repo.merge(t,n),this.repo.update(t,e,...r)}async delete(e,t,...r){return this.logFor(e).for(this.delete).info(`deleting entry with pk ${t} `),this.repo.delete(t+"",e,...r)}async deleteAll(e,t,...r){return"string"==typeof t&&(t=JSON.parse(t)),this.repo.deleteAll(t,e,...r)}async readAll(e,t,...r){return"string"==typeof t&&(t=JSON.parse(t)),this.repo.readAll(t,e,...r)}async updateAll(e,t,...r){const i=this.logFor(e).for(this.updateAll);return"string"==typeof t&&(t=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e))),i.info(`updating ${t.length} entries to the table`),this.repo.updateAll(t,e,...r)}async raw(e,t,r,...i){return"string"==typeof t&&(t=JSON.parse(t)),this.repo.raw(t,r,e,...i)}serialize(e){return Ue.serializer.serialize(e)}deserialize(e){return Ue.serializer.deserialize(e)}async init(e){const t=this.logFor(e).for(this.init);t.info("Running contract initialization..."),this.initialized=!0,t.info("Contract initialization completed.")}async healthcheck(e){return this.logFor(e).for(this.healthcheck).info(`Running Healthcheck: ${this.initialized}...`),{healthcheck:this.initialized}}async createAll(e,t,...r){const i=this.logFor(e).for(this.createAll);return"string"==typeof t&&(t=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e))),i.info(`adding ${t.length} entries to the table`),this.repo.createAll(t,e,...r)}}class Ve extends Ue{constructor(e,t){super(e,t)}logFor(e){return C.for(Ve,{},e)}async create(e,t){const r=this.logFor(e).for(this.create);r.info("Creating model: "+t);const i=this.deserialize(t);return r.info("Model deserialized: "+JSON.stringify(i)),this.serialize(await super.create(e,i))}async read(e,t){return this.logFor(e).for(this.read).info("Reading id: "+t),this.serialize(await super.read(e,t))}async update(e,t){return this.logFor(e).for(this.update).info("Updating model: "+t),this.serialize(await super.update(e,t))}async delete(e,t){return this.logFor(e).for(this.delete).info("Deleting id: "+t),this.serialize(await super.delete(e,t))}async deleteAll(e,t){const r=JSON.parse(t);return this.logFor(e).for(this.deleteAll).info(`deleting ${r.length} entries from the table`),JSON.stringify((await super.deleteAll(e,r)).map(e=>this.serialize(e)))}async readAll(e,t){const r=JSON.parse(t);return this.logFor(e).for(this.readAll).info(`reading ${r.length} entries from the table`),JSON.stringify((await super.readAll(e,r)).map(e=>this.serialize(e)))}async updateAll(e,t){const r=this.logFor(e).for(this.updateAll),i=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e));return r.info(`Updating ${i.length} entries to the table`),JSON.stringify((await super.updateAll(e,i)).map(e=>this.serialize(e)))}async raw(e,t,r){const i=JSON.parse(t);return super.raw(e,i,r)}async init(e){await super.init(e)}async healthcheck(e){return JSON.stringify(await super.healthcheck(e))}async createAll(e,t){const r=this.logFor(e).for(this.createAll),i=JSON.parse(t).map(e=>this.deserialize(e)).map(e=>new this.clazz(e));return r.info(`Adding ${i.length} entries to the table`),JSON.stringify((await super.createAll(e,i)).map(e=>this.serialize(e)))}}function Ye(e,t){const r=e+t;if(e!==r-t||t!==r-e)throw new Se(`Addition overflow: ${e} + ${t}`);return r}function He(e,t){const r=e-t;if(e!==r+t||t!==e-r)throw new Se(`Subtraction overflow: ${e} - ${t}`);return r}pe([P(),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"create",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"read",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"update",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"delete",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"deleteAll",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"readAll",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"updateAll",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F,String,Boolean]),de("design:returntype",Promise)],Ve.prototype,"raw",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ve.prototype,"init",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ve.prototype,"healthcheck",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ve.prototype,"createAll",null);let Ke=class extends L{constructor(e){super(e)}};pe([_({type:"String"}),de("design:type",String)],Ke.prototype,"name",void 0),pe([ne(),a(),de("design:type",String)],Ke.prototype,"owner",void 0),pe([ne(),a(),de("design:type",String)],Ke.prototype,"symbol",void 0),pe([ne(),a(),de("design:type",Number)],Ke.prototype,"decimals",void 0),Ke=pe([M("erc20_tokens"),o(),de("design:paramtypes",[Object])],Ke);let Qe=class extends L{constructor(e){super(e)}};pe([_({type:"String"}),de("design:type",String)],Qe.prototype,"id",void 0),pe([ne(),a(),de("design:type",String)],Qe.prototype,"token",void 0),pe([ne(),a(),de("design:type",Number)],Qe.prototype,"balance",void 0),pe([ne(),de("design:type",String)],Qe.prototype,"captive",void 0),Qe=pe([M("erc20_wallets"),o(),de("design:paramtypes",[Object])],Qe);let Ge=class extends L{constructor(e){super(e)}};var Xe;pe([_({type:"String"}),ne(),a(),de("design:type",String)],Ge.prototype,"owner",void 0),pe([ne(),a(),de("design:type",String)],Ge.prototype,"spender",void 0),pe([ne(),a(),de("design:type",Number)],Ge.prototype,"value",void 0),Ge=pe([M("erc20_allowances"),o(),de("design:paramtypes",[Object])],Ge),(e=>{e.TRANSFER="Transfer",e.APPROVAL="Approval"})(Xe||(Xe={}));class Ze extends Ue{constructor(e){super(e,Qe),Ze.adapter=Ze.adapter||new Me,this.walletRepository=ze.forModel(Qe,Ze.adapter.alias),this.tokenRepository=ze.forModel(Ke,Ze.adapter.alias),this.allowanceRepository=ze.forModel(Ge,Ze.adapter.alias)}async TokenName(e){await this.CheckInitialized(e);const t=await this.tokenRepository.selectWithContext(void 0,e);return(await t.execute())[0].name}async Symbol(e){await this.CheckInitialized(e);const t=await this.tokenRepository.selectWithContext(void 0,e);return(await t.execute())[0].symbol}async Decimals(e){await this.CheckInitialized(e);const t=await this.tokenRepository.selectWithContext(void 0,e);return(await t.execute())[0].decimals}async TotalSupply(e){await this.CheckInitialized(e);const t=await this.walletRepository.selectWithContext(void 0,e),r=await t.execute();if(0==r.length)throw new w(`The token ${this.getName()} does not exist`);let i=0;return r.forEach(e=>{i+=e.balance}),i}async BalanceOf(e,t){return await this.CheckInitialized(e),(await this.walletRepository.read(t,e)).balance}async Transfer(e,t,r){await this.CheckInitialized(e);const i=e.clientIdentity.getID();if(!await this._transfer(e,i,t,r))throw new f("Failed to transfer");return!0}async TransferFrom(e,t,r,i){await this.CheckInitialized(e);const n=e.clientIdentity.getID(),s=await this._getAllowance(e,t,n);if(!s||0>s.value)throw new ke(`spender ${n} has no allowance from ${t}`);const a=s.value;if(i>a)throw new Ae("The spender does not have enough allowance to spend.");const o=He(a,i),l=Object.assign({},s,{value:o});if(await this.allowanceRepository.update(l,e),!await this._transfer(e,t,r,i))throw new f("Failed to transfer");return!0}async _transfer(e,t,r,i){const n=this.logFor(e).for(this._transfer);if(t===r)throw new W("cannot transfer to and from same client account");if(0>i)throw new Ae("transfer amount cannot be negative");const s=await this.walletRepository.read(t,e),a=s.balance;if(i>a)throw new Ae(`client account ${t} has insufficient funds.`);let o,l=!1;try{o=await this.walletRepository.read(r,e)}catch(t){if(!(t instanceof y))throw new f(t);if(404!==t.code)throw new f(t.message);o=new Qe({id:r,balance:0,token:await this.TokenName(e)}),l=!0}const c=o.balance,p=He(a,i),d=Ye(c,i),u=Object.assign({},s,{balance:p});await this.walletRepository.update(u,e);const h=Object.assign({},o,{balance:d});l?await this.walletRepository.create(h,e):await this.walletRepository.update(h,e);const g={from:t,to:r,value:i};return this.repo.ObserverHandler().updateObservers(n,"",Xe.TRANSFER,"",e,"",g),!0}async Approve(e,t,r){await this.CheckInitialized(e);const i=this.logFor(e).for(this.Approve),n=e.clientIdentity.getID();let s=await this._getAllowance(e,n,t);if((await this.walletRepository.read(n,e)).balance<r)throw new Ae(`client account ${n} has insufficient funds.`);s?(s.value=r,await this.allowanceRepository.update(s,e)):(s=new Ge({owner:n,spender:t,value:r}),await this.allowanceRepository.create(s,e));const a={owner:n,spender:t,value:r};return this.repo.ObserverHandler().updateObservers(i,"",Xe.APPROVAL,"",e,"",a),!0}async Allowance(e,t,r){await this.CheckInitialized(e);const i=await this._getAllowance(e,t,r);if(!i)throw new ke(`spender ${r} has no allowance from ${t}`);return i.value}async _getAllowance(e,t,r){const i=V.and(V.attribute("owner").eq(t),V.attribute("spender").eq(r)),n=await this.allowanceRepository.selectWithContext(void 0,e),s=await n.where(i).execute();return s?.[0]}async Initialize(e,t){const r=await this.tokenRepository.selectWithContext(void 0,e);if((await r.execute()).length>0)throw new W("contract options are already set, client is not authorized to change them");return t.owner=e.clientIdentity.getID(),await this.tokenRepository.create(t,e),!0}async CheckInitialized(e){const t=await this.tokenRepository.selectWithContext(void 0,e);if(0==(await t.execute()).length)throw new xe("contract options need to be set before calling any function, call Initialize() to initialize contract")}async Mint(e,t){await this.CheckInitialized(e);const r=this.logFor(e).for(this.Mint),i=e.clientIdentity.getID();if(0>=t)throw new v("mint amount must be a positive integer");let n;try{n=await this.walletRepository.read(i,e);const r=Ye(n.balance,t),s=Object.assign({},n,{balance:r});await this.walletRepository.update(s,e)}catch(r){if(!(r instanceof y))throw new f(r);if(404!==r.code)throw new f(r.message);{const r=new Qe({id:i,balance:t,token:await this.TokenName(e)});await this.walletRepository.create(r,e)}}const s={from:"0x0",to:i,value:t};this.repo.ObserverHandler().updateObservers(r,"",Xe.TRANSFER,"",e,"",s)}async Burn(e,t){await this.CheckInitialized(e);const r=this.logFor(e).for(this.Burn),i=e.clientIdentity.getID(),n=await this.walletRepository.read(i,e),s=n.balance;if(t>s)throw new Ae("Minter has insufficient funds.");const a=He(s,t),o=Object.assign({},n,{balance:a});await this.walletRepository.update(o,e),r.info(t+" tokens were burned");const l={from:i,to:"0x0",value:t};this.repo.ObserverHandler().updateObservers(r,"",Xe.TRANSFER,"",e,"",l)}async BurnFrom(e,t,r){await this.CheckInitialized(e);const i=this.logFor(e).for(this.BurnFrom),n=await this.walletRepository.read(t,e),s=n.balance;if(r>s)throw new Ae(t+" has insufficient funds.");const a=He(s,r),o=Object.assign({},n,{balance:a});await this.walletRepository.update(o,e),i.info(`${r} tokens were berned from ${t}`);const l={from:t,to:"0x0",value:r};this.repo.ObserverHandler().updateObservers(i,"",Xe.TRANSFER,"",e,"",l)}async ClientAccountBalance(e){await this.CheckInitialized(e);const t=e.clientIdentity.getID(),r=await this.walletRepository.read(t,e);if(!r)throw new Ae(`The account ${t} does not exist`);return r.balance}async ClientAccountID(e){return await this.CheckInitialized(e),e.clientIdentity.getID()}}pe([P(!1),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ze.prototype,"TokenName",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ze.prototype,"Symbol",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ze.prototype,"Decimals",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ze.prototype,"TotalSupply",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F,String]),de("design:returntype",Promise)],Ze.prototype,"BalanceOf",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String,Number]),de("design:returntype",Promise)],Ze.prototype,"Transfer",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String,String,Number]),de("design:returntype",Promise)],Ze.prototype,"TransferFrom",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String,Number]),de("design:returntype",Promise)],Ze.prototype,"Approve",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,String,String]),de("design:returntype",Promise)],Ze.prototype,"Allowance",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F,Ke]),de("design:returntype",Promise)],Ze.prototype,"Initialize",null),pe([P(!1),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ze.prototype,"CheckInitialized",null),pe([$e(),P(),de("design:type",Function),de("design:paramtypes",[F,Number]),de("design:returntype",Promise)],Ze.prototype,"Mint",null),pe([$e(),P(),de("design:type",Function),de("design:paramtypes",[F,Number]),de("design:returntype",Promise)],Ze.prototype,"Burn",null),pe([$e(),P(),de("design:type",Function),de("design:paramtypes",[F,String,Number]),de("design:returntype",Promise)],Ze.prototype,"BurnFrom",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ze.prototype,"ClientAccountBalance",null),pe([P(),de("design:type",Function),de("design:paramtypes",[F]),de("design:returntype",Promise)],Ze.prototype,"ClientAccountID",null);const et=[Ze];class tt extends I{constructor(e,t,r){if(super(e,t),r){if(r instanceof ue)throw new Oe("Receiving incorrect context... It should be the contract context!!!");this.logger=r.logging.getLogger(e)}else this.logger=new I(e,t)}log(e,t,r){if(D[this.config("level")]<D[e])return;let i;switch(e){case j.info:i=this.logger.info;break;case j.verbose:i=this.logger.verbose;break;case j.debug:i=this.logger.debug;break;case j.error:i=this.logger.error;break;case j.silly:i=this.logger.silly;break;default:throw Error("Invalid log level")}i.call(this.logger,this.createLog(e,t,r))}}C.setFactory((e,t,r)=>new tt(e,t||{},r));const rt="##VERSION##",it="##PACKAGE##";se.registerLibrary(it,rt);export{tt as ContractLogger,Me as FabricContractAdapter,ue as FabricContractContext,ze as FabricContractRepository,he as FabricContractRepositoryObservableHandler,Te as FabricContractSequence,Ue as FabricCrudContract,Pe as FabricStatement,it as PACKAGE_NAME,Ve as SerializedCrudContract,rt as VERSION,et as contracts,_e as createdByOnFabricCreateUpdate,qe as pkFabricOnCreate};
2
2
  //# sourceMappingURL=for-fabric.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"for-fabric.js","sources":["../src/contracts/ContractContext.ts","../src/contracts/FabricContractRepositoryObservableHandler.ts","../src/shared/events.ts","../src/shared/constants.ts","../src/shared/decorators.ts","../src/contracts/private-data.ts","../src/shared/errors.ts","../src/contracts/PrivateSequence.ts","../src/contracts/FabricContractSequence.ts","../src/contracts/FabricContractRepository.ts","../src/contracts/FabricContractStatement.ts","../src/shared/SimpleDeterministicSerializer.ts","../src/contracts/FabricConstruction.ts","../src/contracts/ContractAdapter.ts","../src/shared/DeterministicSerializer.ts","../src/contracts/ContractPrivateDataAdapter.ts","../src/contracts/crud/crud-contract.ts","../src/contracts/crud/serialized-crud-contract.ts","../src/shared/math.ts","../src/contracts/erc20/models.ts","../src/shared/erc20/erc20-constants.ts","../src/contracts/erc20/erc20contract.ts","../src/contracts/erc20/index.ts","../src/contracts/logging.ts","../src/version.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["FabricContractContext","Context","constructor","super","stub","this","get","timestamp","getDateTimestamp","identity","logger","FabricContractRepositoryObservableHandler","ObserverHandler","supportedEvents","OperationKeys","CREATE","UPDATE","DELETE","BulkCrudOperationKeys","CREATE_ALL","UPDATE_ALL","DELETE_ALL","updateObservers","log","table","event","id","ctx","owner","payload","indexOf","debug","eventName","params","push","join","generateFabricEventName","setEvent","Buffer","from","JSON","stringify","FabricModelKeys","IdentityType","FabricFlavour","Owner","target","propertyKey","descriptor","originalMethod","value","async","args","acountId","clientIdentity","getID","select","selectWithContext","undefined","tokens","execute","length","NotFoundError","AuthorizationError","apply","getFabricModelKey","key","Model","FABRIC","privateData","collection","Error","PRIVATE","model","attribute","meta","Reflect","getMetadata","ModelKeys","ANCHOR","data","collections","propMetadata","Set","isPrivate","transient","MISSING_PRIVATE_DATA_REGEX","getClassPrivateDataMetadata","metadata","isModelPrivate","modelToPrivate","hasPrivateData","decs","getAllPropertyDecoratorsRecursive","modelCollections","result","private","Object","keys","reduce","accum","k","e","SerializationError","entries","val","find","el","props","build","name","OverflowError","InternalError","msg","BalanceError","AllowanceError","MissingContextError","UnauthorizedPrivateDataAccess","BaseError","NotInitializedError","CustomizableSequence","BaseModel","seq","__decorate","pk","prototype","required","index","CouchDBKeys","SEQUENCE","FabricContractSequence","Sequence","options","adapter","repo","Repository","forModel","alias","current","startWith","sequence","read","parse","parseValue","type","increment","count","incrementBy","next","toIncrementBy","BigInt","update","create","range","i","FabricContractRepository","clazz","trackedEvents","logFor","Logging","for","info","c","record","prepare","tableName","revert","class","m","delete","createAll","models","prepared","map","ids","p","records","transients","filter","r","updateAll","u","raw","rawInput","docsOnly","pop","transformedArgs","CTX","selector","contextArgs","context","Ctx","_overrides","Statement","createAllPrefix","opts","getSequenceOptions","Promise","all","enforceDBDecorators","ON","ignoredProps","errorMessages","resolve","hasErrors","toString","ValidationError","createPrefix","String","ConflictError","code","FabricStatement","CouchDBStatement","results","pkDef","findPrimaryKey","fromSelector","pkAttr","selectSelector","processRecord","selectors","TABLE","query","fields","whereCondition","condition","parseCondition","Condition","and","eq","selectorKeys","values","CouchDBGroupOperator","AND","OR","s","forEach","orderBySelector","sort","rec","CouchDBOperator","BIGGER","limitSelector","limit","offsetSelector","skip","SimpleDeterministicSerializer","JSONSerializer","deserialize","str","serialize","require","sortKeysRecursive","preSerialize","assign","oneToOneOnCreate","propertyValue","innerRepo","repositoryFromTypeMetadata","cacheModelForPopulate","created","oneToOneOnUpdate","cascade","Cascade","CASCADE","updated","createOrUpdate","oneToOneOnDelete","deleted","oneToManyOnCreate","propertyValues","arrayType","every","item","uniqueValues","pkName","add","oneToManyOnDelete","isInstantiated","v","populate","nested","isArr","Array","isArray","res","propName","propKeyValues","cacheKey","proKeyValue","getPopulateKey","fetchPopulateValues","createdByOnFabricCreateUpdate","user","UnsupportedError","pkFabricOnCreate","sequenceNameForModel","defineProperty","enumerable","writable","configurable","FabricContractAdapter","CouchDBAdapter","getClient","textDecoder","TextDecoder","serializer","repository","scope","config","putState","parseError","readState","mergeModels","verbose","deleteState","composedKey","createCompositeKey","getState","queryResult","getQueryResult","queryResultPaginated","getQueryResultWithPagination","extract","finalModel","decode","buffer","flags","operation","resultIterator","iterator","isHistory","allResults","done","jsonRes","TxId","txId","Timestamp","Value","err","error","close","shift","split","modelToTransient","mappedProp","column","isReserved","PersistenceKeys","METADATA","silly","obj","ob","flavour","updatePrefix","updateAllPrefix","decoration","createdByKey","CREATED_BY","updatedByKey","UPDATED_BY","Decoration","flavouredAs","define","onCreate","onCreateUpdate","pkKey","DBKeys","ID","OrderDirection","ASC","DSC","readonly","NumericSequence","columnKey","Adapter","COLUMN","extend","FabricProperty","tableKey","FabricObject","oneToOnekey","ONE_TO_ONE","decorator","joinColumnOpts","fk","joinTable","prop","RELATIONS","Number","onUpdate","onDelete","afterAny","oneToManyKey","ONE_TO_MANY","joinTableOpts","list","oneToManyOnUpdate","setCurrent","DeterministicSerializer","FabricContractPrivateDataAdapter","instance","transformModel","processModel","putPrivateData","getPrivateData","test","message","deletePrivateData","getPrivateDataQueryResult","reachedBookmark","lastKey","recordKey","recordValue","Key","Record","fetchedRecordsCount","bookmark","FabricCrudContract","Contract","initialized","getAdapter","pvt","getTransientData","merge","transientMap","getTransient","has","deleteAll","readAll","init","healthcheck","SerializedCrudContract","parsedKeys","modelList","parsedInput","a","b","sub","Transaction","Boolean","ERC20Token","ERC20Wallet","Allowance","ERC20Events","FabricERC20Contract","walletRepository","tokenRepository","allowanceRepository","TokenName","CheckInitialized","Symbol","symbol","Decimals","decimals","TotalSupply","wallets","getName","total","wallet","balance","BalanceOf","Transfer","to","_transfer","TransferFrom","spender","allowance","_getAllowance","currentAllowance","updatedAllowance","newAllowance","fromWallet","fromBalance","toWallet","newToWallet","token","toBalance","fromUpdatedBalance","toUpdatedBalance","updatedFromWallet","updatedToWallet","transferEvent","TRANSFER","Approve","approvalEvent","APPROVAL","allowanceCondition","where","Initialize","Mint","amount","minter","minterWallet","updatedBalance","updatedminter","newWallet","Burn","currentBalance","BurnFrom","account","accountWallet","updatedaccount","ClientAccountBalance","clientAccountID","clientWallet","ClientAccountID","__metadata","contracts","ContractLogger","MiniLogger","conf","logging","getLogger","level","stack","NumericLogLevels","method","LogLevel","call","createLog","setFactory","object","VERSION","PACKAGE_NAME","Metadata","registerLibrary"],"mappings":"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"}
1
+ {"version":3,"file":"for-fabric.js","sources":["../src/contracts/ContractContext.ts","../src/contracts/FabricContractRepositoryObservableHandler.ts","../src/shared/events.ts","../src/shared/constants.ts","../src/contracts/private-data.ts","../src/shared/errors.ts","../src/contracts/PrivateSequence.ts","../src/shared/decorators.ts","../src/contracts/FabricContractSequence.ts","../src/contracts/FabricContractRepository.ts","../src/contracts/FabricContractStatement.ts","../src/shared/SimpleDeterministicSerializer.ts","../src/contracts/FabricConstruction.ts","../src/contracts/ContractAdapter.ts","../src/shared/DeterministicSerializer.ts","../src/contracts/ContractPrivateDataAdapter.ts","../src/contracts/crud/crud-contract.ts","../src/contracts/crud/serialized-crud-contract.ts","../src/shared/math.ts","../src/contracts/erc20/models.ts","../src/shared/erc20/erc20-constants.ts","../src/contracts/erc20/erc20contract.ts","../src/contracts/erc20/index.ts","../src/contracts/logging.ts","../src/version.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["FabricContractContext","Context","constructor","super","stub","this","get","timestamp","getDateTimestamp","identity","logger","FabricContractRepositoryObservableHandler","ObserverHandler","supportedEvents","OperationKeys","CREATE","UPDATE","DELETE","BulkCrudOperationKeys","CREATE_ALL","UPDATE_ALL","DELETE_ALL","updateObservers","log","table","event","id","ctx","owner","payload","indexOf","debug","eventName","params","push","join","generateFabricEventName","setEvent","Buffer","from","JSON","stringify","FabricModelKeys","IdentityType","FabricFlavour","MISSING_PRIVATE_DATA_REGEX","getClassPrivateDataMetadata","model","Metadata","PRIVATE","isModelPrivate","metadata","undefined","isPrivate","modelToPrivate","hasPrivateData","modelCollections","result","private","privatePart","collections","properties","reduce","accum","k","collection","e","SerializationError","Object","entries","val","props","includes","length","Model","build","name","keys","OverflowError","InternalError","msg","BalanceError","AllowanceError","MissingContextError","UnauthorizedPrivateDataAccess","BaseError","NotInitializedError","CustomizableSequence","BaseModel","seq","Owner","target","propertyKey","descriptor","originalMethod","value","async","args","acountId","clientIdentity","getID","select","selectWithContext","tokens","execute","NotFoundError","AuthorizationError","apply","privateData","Error","key","attribute","constr","metaData","modeldata","propMetadata","Set","attributeData","transient","__decorate","pk","prototype","required","index","CouchDBKeys","SEQUENCE","FabricContractSequence","Sequence","options","adapter","repo","Repository","forModel","alias","current","startWith","sequence","read","parse","parseValue","type","increment","count","incrementBy","next","toIncrementBy","BigInt","update","create","range","i","FabricContractRepository","clazz","trackedEvents","logFor","Logging","for","info","c","record","prepare","tableName","revert","class","m","delete","createAll","models","prepared","map","ids","p","records","transients","filter","r","updateAll","u","raw","rawInput","docsOnly","pop","transformedArgs","CTX","selector","contextArgs","context","Ctx","_overrides","Statement","createAllPrefix","opts","getSequenceOptions","Promise","all","enforceDBDecorators","ON","ignoredProps","errorMessages","resolve","hasErrors","toString","ValidationError","createPrefix","String","ConflictError","code","FabricStatement","CouchDBStatement","results","pkAttr","fromSelector","DBKeys","ID","selectSelector","processRecord","selectors","TABLE","query","fields","whereCondition","condition","parseCondition","Condition","and","eq","selectorKeys","values","CouchDBGroupOperator","AND","OR","s","forEach","orderBySelector","sort","rec","CouchDBOperator","BIGGER","limitSelector","limit","offsetSelector","skip","SimpleDeterministicSerializer","JSONSerializer","deserialize","str","serialize","require","sortKeysRecursive","preSerialize","assign","oneToOneOnCreate","data","propertyValue","innerRepo","repositoryFromTypeMetadata","cacheModelForPopulate","created","oneToOneOnUpdate","cascade","Cascade","CASCADE","updated","createOrUpdate","oneToOneOnDelete","deleted","oneToManyOnCreate","propertyValues","arrayType","every","item","uniqueValues","pkName","add","oneToManyOnDelete","isInstantiated","v","populate","nested","isArr","Array","isArray","res","propName","propKeyValues","cacheKey","proKeyValue","getPopulateKey","fetchPopulateValues","createdByOnFabricCreateUpdate","user","UnsupportedError","pkFabricOnCreate","sequenceNameForModel","defineProperty","enumerable","writable","configurable","FabricContractAdapter","CouchDBAdapter","getClient","textDecoder","TextDecoder","serializer","repository","scope","config","putState","parseError","readState","mergeModels","verbose","deleteState","composedKey","createCompositeKey","getState","queryResult","getQueryResult","queryResultPaginated","getQueryResultWithPagination","extract","finalModel","decode","buffer","flags","operation","resultIterator","iterator","isHistory","allResults","done","jsonRes","TxId","txId","Timestamp","Value","err","error","close","shift","split","toTransient","mappedProp","column","isReserved","PersistenceKeys","METADATA","silly","obj","ob","flavour","updatePrefix","updateAllPrefix","decoration","Decoration","flavouredAs","CREATED_BY","define","onCreate","UPDATED_BY","onCreateUpdate","decorator","groupsort","attr","readonly","COLUMN","extend","FabricProperty","FabricObject","ONE_TO_ONE","joinColumnOpts","fk","meta","joinTable","prop","relation","Number","onUpdate","onDelete","afterAny","ONE_TO_MANY","joinTableOpts","list","oneToManyOnUpdate","Adapter","setCurrent","DeterministicSerializer","FabricContractPrivateDataAdapter","instance","transformModel","processModel","putPrivateData","getPrivateData","test","message","deletePrivateData","getPrivateDataQueryResult","reachedBookmark","lastKey","recordKey","recordValue","Key","Record","fetchedRecordsCount","bookmark","FabricCrudContract","Contract","initialized","getAdapter","pvt","getTransientData","merge","transientMap","getTransient","has","deleteAll","readAll","init","healthcheck","SerializedCrudContract","parsedKeys","modelList","parsedInput","a","b","sub","Transaction","Boolean","ERC20Token","ERC20Wallet","Allowance","ERC20Events","FabricERC20Contract","walletRepository","tokenRepository","allowanceRepository","TokenName","CheckInitialized","Symbol","symbol","Decimals","decimals","TotalSupply","wallets","getName","total","wallet","balance","BalanceOf","Transfer","to","_transfer","TransferFrom","spender","allowance","_getAllowance","currentAllowance","updatedAllowance","newAllowance","fromWallet","fromBalance","toWallet","newToWallet","token","toBalance","fromUpdatedBalance","toUpdatedBalance","updatedFromWallet","updatedToWallet","transferEvent","TRANSFER","Approve","approvalEvent","APPROVAL","allowanceCondition","where","Initialize","Mint","amount","minter","minterWallet","updatedBalance","updatedminter","newWallet","Burn","currentBalance","BurnFrom","account","accountWallet","updatedaccount","ClientAccountBalance","clientAccountID","clientWallet","ClientAccountID","__metadata","contracts","ContractLogger","MiniLogger","conf","logging","getLogger","level","stack","NumericLogLevels","method","LogLevel","call","createLog","setFactory","object","VERSION","PACKAGE_NAME","registerLibrary"],"mappings":"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"}
@@ -243,7 +243,7 @@ class FabricClientAdapter extends for_couchdb_1.CouchDBAdapter {
243
243
  */
244
244
  prepare(model, pk) {
245
245
  const log = this.log.for(this.prepare);
246
- const split = (0, db_decorators_1.modelToTransient)(model);
246
+ const split = decorator_validation_1.Model.toTransient(model);
247
247
  if (model[core_1.PersistenceKeys.METADATA]) {
248
248
  log.silly(`Passing along persistence metadata for ${model[core_1.PersistenceKeys.METADATA]}`);
249
249
  Object.defineProperty(split.model, core_1.PersistenceKeys.METADATA, {
@@ -343,6 +343,13 @@ class FabricClientAdapter extends for_couchdb_1.CouchDBAdapter {
343
343
  ]);
344
344
  return this.serializer.deserialize(this.decode(result));
345
345
  }
346
+ updatePrefix(tableName, id, model) {
347
+ const record = {};
348
+ record[for_couchdb_1.CouchDBKeys.TABLE] = tableName;
349
+ record[for_couchdb_1.CouchDBKeys.ID] = this.generateId(tableName, id);
350
+ Object.assign(record, model);
351
+ return [tableName, id, record];
352
+ }
346
353
  /**
347
354
  * @description Updates a single record
348
355
  * @summary Submits a transaction to update a record in the Fabric ledger
@@ -371,8 +378,7 @@ class FabricClientAdapter extends for_couchdb_1.CouchDBAdapter {
371
378
  log.verbose(`deleting entry from ${tableName} table`);
372
379
  log.debug(`pk: ${id}`);
373
380
  const result = await this.submitTransaction(db_decorators_1.OperationKeys.DELETE, [
374
- tableName,
375
- id,
381
+ id.toString(),
376
382
  ]);
377
383
  return this.serializer.deserialize(this.decode(result));
378
384
  }
@@ -701,6 +707,7 @@ class FabricClientAdapter extends for_couchdb_1.CouchDBAdapter {
701
707
  };
702
708
  log.debug(`Connecting to ${config.mspId}`);
703
709
  const gateway = (0, fabric_gateway_1.connect)(options);
710
+ // TODO: replace?
704
711
  if (config.hsm) {
705
712
  gateway.close = new Proxy(gateway.close, {
706
713
  apply(target, thisArg, argArray) {
@@ -1,12 +1,13 @@
1
1
  import { CouchDBAdapter, type MangoQuery } from "@decaf-ts/for-couchdb";
2
2
  import { Client } from "@grpc/grpc-js";
3
- import { type Constructor, Model, type Serializer } from "@decaf-ts/decorator-validation";
4
- import { Logger } from "@decaf-ts/logging";
5
- import { FabricFlags, PeerConfig } from "../shared/types";
3
+ import { Model, type Serializer } from "@decaf-ts/decorator-validation";
4
+ import { type Logger } from "@decaf-ts/logging";
5
+ import { type FabricFlags, type PeerConfig } from "../shared/types";
6
6
  import { Gateway, Network, Contract as Contrakt } from "@hyperledger/fabric-gateway";
7
7
  import { BaseError, Context } from "@decaf-ts/db-decorators";
8
8
  import { Adapter, Repository } from "@decaf-ts/core";
9
9
  import type { FabricClientDispatch } from "./FabricClientDispatch";
10
+ import { type Constructor } from "@decaf-ts/decoration";
10
11
  /**
11
12
  * @description Adapter for interacting with Hyperledger Fabric networks
12
13
  * @summary The FabricAdapter extends CouchDBAdapter to provide a seamless interface for interacting with Hyperledger Fabric networks.
@@ -180,6 +181,7 @@ export declare class FabricClientAdapter extends CouchDBAdapter<PeerConfig, Clie
180
181
  * @return {Promise<Record<string, any>>} Promise resolving to the retrieved record
181
182
  */
182
183
  read(tableName: string, id: string | number): Promise<Record<string, any>>;
184
+ updatePrefix(tableName: string, id: string | number, model: Record<string, any>): (string | number | Record<string, any>)[];
183
185
  /**
184
186
  * @description Updates a single record
185
187
  * @summary Submits a transaction to update a record in the Fabric ledger