Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 45 additions & 46 deletions package-lock.json

Large diffs are not rendered by default.

11 changes: 8 additions & 3 deletions src/acceptance-of-delivery/logic/logic.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
import {
import type {
ITemplateModel,
IInspectDeliverable,
IInspectionResponse,
InspectionStatus,
} from './generated/org.accordproject.acceptanceofdelivery@0.1.0';

type AcceptanceOfDeliveryResponse = {
result: IInspectionResponse;
};

const InspectionStatus = {
PASSED_TESTING: 'PASSED_TESTING',
FAILED_TESTING: 'FAILED_TESTING',
OUTSIDE_INSPECTION_PERIOD: 'OUTSIDE_INSPECTION_PERIOD',
} as const satisfies Record<string, IInspectionResponse['status']>;

// @ts-ignore TemplateLogic is injected by the runtime
class AcceptanceOfDeliveryLogic extends TemplateLogic<ITemplateModel> {

Expand All @@ -28,7 +33,7 @@ class AcceptanceOfDeliveryLogic extends TemplateLogic<ITemplateModel> {
const MS_PER_DAY = 24 * 60 * 60 * 1000;
const inspectionDeadline = new Date(received.getTime() + data.businessDays * MS_PER_DAY);

let status: InspectionStatus;
let status: IInspectionResponse['status'];
if (now > inspectionDeadline) {
status = InspectionStatus.OUTSIDE_INSPECTION_PERIOD;
} else if (request.inspectionPassed) {
Expand Down
2 changes: 1 addition & 1 deletion src/demandforecast/logic/logic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class DemandForecastLogic extends TemplateLogic<ITemplateModel> {
async trigger(data: ITemplateModel, request: IForecastRequest): Promise<DemandForecastResponse> {
const now = new Date();

// isLastDayOfQuarter check kept always-true per original Ergo logic
// isLastDayOfQuarter check - kept always-true per original Ergo logic
const isLastDayOfQuarter = true;
if (!isLastDayOfQuarter) {
throw new Error('Forecast was not received on last day of quarter');
Expand Down
3 changes: 2 additions & 1 deletion src/docusign-connect/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "contract",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"docusign",
Expand Down
24 changes: 10 additions & 14 deletions src/docusign-po-failure/logic/logic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import {
IPurchaseOrderFailureState,
IPurchaseOrderPaymentEvent
} from "./generated/org.accordproject.docusignpofailure@0.2.0";
import type { IDuration } from './generated/org.accordproject.time@0.3.0';
import { IMonetaryAmount, CurrencyCode } from './generated/org.accordproject.money@0.3.0';

function monetary(doubleValue: number, currencyCode: CurrencyCode): IMonetaryAmount {
Expand All @@ -14,22 +15,17 @@ function monetary(doubleValue: number, currencyCode: CurrencyCode): IMonetaryAmo
};
}

// Inline types from org.accordproject.time@0.3.0 — generated files may not be available at runtime
enum TemporalUnit {
seconds = 'seconds',
minutes = 'minutes',
hours = 'hours',
days = 'days',
weeks = 'weeks',
}
type DurationUnit = IDuration['unit'];

interface IDuration {
$class?: string;
amount: number;
unit: TemporalUnit;
}
const TemporalUnit = {
seconds: 'seconds' as DurationUnit,
minutes: 'minutes' as DurationUnit,
hours: 'hours' as DurationUnit,
days: 'days' as DurationUnit,
weeks: 'weeks' as DurationUnit,
};

// Inline types from com.docusign.connect generated files reference these types
// Inline types from com.docusign.connect - generated files reference these types
interface ITabStatus {
$class: string;
tabType: string;
Expand Down
3 changes: 2 additions & 1 deletion src/docusign-po-failure/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "contract",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"docusign",
Expand Down
15 changes: 1 addition & 14 deletions src/fragile-goods/logic/logic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,9 @@ import {
IFragileGoodsEvent,
ITemplateModel,
} from "./generated/org.accordproject.fragilegoods@0.2.0";
import type { IDuration } from './generated/org.accordproject.time@0.3.0';
import { IMonetaryAmount, CurrencyCode } from './generated/org.accordproject.money@0.3.0';

// Inline types from org.accordproject.time@0.3.0 — generated files may not be available at runtime
enum TemporalUnit {
seconds = "seconds",
minutes = "minutes",
hours = "hours",
days = "days",
weeks = "weeks",
}

interface IDuration {
amount: number;
unit: TemporalUnit;
}

type FragileGoodsResponse = {
result: IPayOut;
events: object[];
Expand Down
3 changes: 2 additions & 1 deletion src/full-payment-upon-demand/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "contract",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"full",
Expand Down
3 changes: 2 additions & 1 deletion src/full-payment-upon-signature/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "contract",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"full",
Expand Down
3 changes: 2 additions & 1 deletion src/helloworldstate/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"template": "clause",
"runtime": "typescript",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"hello",
Expand Down
9 changes: 6 additions & 3 deletions src/installment-sale/logic/logic.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
import {
import type {
ITemplateModel,
IInstallment,
IClosingPayment,
IBalance,
IInstallmentSaleState,
IInstallmentSalePaymentEvent,
ContractStatus
} from "./generated/org.accordproject.installmentsale@0.2.0";
import { IMonetaryAmount } from "./generated/org.accordproject.money@0.3.0";
import type { IMonetaryAmount } from "./generated/org.accordproject.money@0.3.0";

const NS = 'org.accordproject.installmentsale@0.2.0';
const MONEY_NS = 'org.accordproject.money@0.3.0.MonetaryAmount';
const ContractStatus = {
WaitingForFirstDayOfNextMonth: 'WaitingForFirstDayOfNextMonth' as IInstallmentSaleState['status'],
Fulfilled: 'Fulfilled' as IInstallmentSaleState['status'],
};

// @ts-expect-error EngineResponse is imported by the runtime
interface InstallmentSaleContractResponse extends EngineResponse<IInstallmentSaleState> {
Expand Down
3 changes: 2 additions & 1 deletion src/installment-sale/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "clause",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"installment",
Expand Down
22 changes: 9 additions & 13 deletions src/ip-payment/logic/logic.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ITemplateModel, IPaymentRequest, IPayOut } from './generated/org.accordproject.ippayment@0.2.0';
import type { IDuration } from './generated/org.accordproject.time@0.3.0';
import { IMonetaryAmount, CurrencyCode } from './generated/org.accordproject.money@0.3.0';

function monetary(doubleValue: number, currencyCode: CurrencyCode): IMonetaryAmount {
Expand All @@ -9,20 +10,15 @@ function monetary(doubleValue: number, currencyCode: CurrencyCode): IMonetaryAmo
};
}

// Inline types from org.accordproject.time@0.3.0 — generated files may not be available at runtime
enum TemporalUnit {
seconds = 'seconds',
minutes = 'minutes',
hours = 'hours',
days = 'days',
weeks = 'weeks',
}
type DurationUnit = IDuration['unit'];

interface IDuration {
$class?: string;
amount: number;
unit: TemporalUnit;
}
const TemporalUnit = {
seconds: 'seconds' as DurationUnit,
minutes: 'minutes' as DurationUnit,
hours: 'hours' as DurationUnit,
days: 'days' as DurationUnit,
weeks: 'weeks' as DurationUnit,
};

type IPPaymentResponse = {
result: IPayOut;
Expand Down
16 changes: 13 additions & 3 deletions src/latedeliveryandpenalty/logic/logic.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
import { ITemplateModel, ILateDeliveryAndPenaltyRequest, ILateDeliveryAndPenaltyResponse, IPaymentObligationEvent } from './generated/org.accordproject.latedeliveryandpenalty@0.2.0';
import { IDuration, TemporalUnit } from './generated/org.accordproject.time@0.3.0';
import { IMonetaryAmount, CurrencyCode } from './generated/org.accordproject.money@0.3.0';
import type { ITemplateModel, ILateDeliveryAndPenaltyRequest, ILateDeliveryAndPenaltyResponse, IPaymentObligationEvent } from './generated/org.accordproject.latedeliveryandpenalty@0.2.0';
import type { IDuration } from './generated/org.accordproject.time@0.3.0';
import type { IMonetaryAmount, CurrencyCode } from './generated/org.accordproject.money@0.3.0';

type LateDeliveryAndPenaltyResult = {
result: ILateDeliveryAndPenaltyResponse;
events: object[];
};

type DurationUnit = IDuration['unit'];

const TemporalUnit = {
seconds: 'seconds' as DurationUnit,
minutes: 'minutes' as DurationUnit,
hours: 'hours' as DurationUnit,
days: 'days' as DurationUnit,
weeks: 'weeks' as DurationUnit,
};

function durationToDays(duration: IDuration): number {
switch (duration.unit) {
case TemporalUnit.days: return duration.amount;
Expand Down
14 changes: 12 additions & 2 deletions src/lateinvoicewithpayment/logic/logic.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import { ITemplateModel, ILateInvoiceRequest, ILateInvoiceResponse, IPaymentObligationEvent } from './generated/org.accordproject.lateinvoicewithpayment@0.2.0';
import { IDuration, TemporalUnit } from './generated/org.accordproject.time@0.3.0';
import type { ITemplateModel, ILateInvoiceRequest, ILateInvoiceResponse, IPaymentObligationEvent } from './generated/org.accordproject.lateinvoicewithpayment@0.2.0';
import type { IDuration } from './generated/org.accordproject.time@0.3.0';

type LateInvoicePaymentResponse = {
result: ILateInvoiceResponse;
events: object[];
};

type DurationUnit = IDuration['unit'];

const TemporalUnit = {
seconds: 'seconds' as DurationUnit,
minutes: 'minutes' as DurationUnit,
hours: 'hours' as DurationUnit,
days: 'days' as DurationUnit,
weeks: 'weeks' as DurationUnit,
};

// @ts-ignore TemplateLogic is injected by the runtime
class LateInvoiceWithPaymentLogic extends TemplateLogic<ITemplateModel> {

Expand Down
16 changes: 13 additions & 3 deletions src/minilatedeliveryandpenalty/logic/logic.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import { ITemplateModel, ILateRequest, ILateResponse } from './generated/org.accordproject.minilatedeliveryandpenalty@0.2.0';
import { IDuration, TemporalUnit } from './generated/org.accordproject.time@0.3.0';
import { IMonetaryAmount, CurrencyCode } from './generated/org.accordproject.money@0.3.0';
import type { ITemplateModel, ILateRequest, ILateResponse } from './generated/org.accordproject.minilatedeliveryandpenalty@0.2.0';
import type { IDuration } from './generated/org.accordproject.time@0.3.0';
import type { IMonetaryAmount, CurrencyCode } from './generated/org.accordproject.money@0.3.0';

type MiniLateDeliveryResponse = {
result: ILateResponse;
};

type DurationUnit = IDuration['unit'];

const TemporalUnit = {
seconds: 'seconds' as DurationUnit,
minutes: 'minutes' as DurationUnit,
hours: 'hours' as DurationUnit,
days: 'days' as DurationUnit,
weeks: 'weeks' as DurationUnit,
};

function durationToDays(duration: IDuration): number {
switch (duration.unit) {
case TemporalUnit.days: return duration.amount;
Expand Down
3 changes: 2 additions & 1 deletion src/one-time-payment-tr/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "contract",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"turkish",
Expand Down
19 changes: 11 additions & 8 deletions src/payment-upon-iot/logic/logic.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {
import type {
ICounterResponse,
ICounterState,
IPaymentObligationEvent,
Expand All @@ -8,11 +8,14 @@ import {
IDoubleButtonPress,
ILongButtonPress,
IPaymentReceived,
ContractLifecycleStatus,
} from "./generated/org.accordproject.paymentuponiot@0.2.0";
import { IRequest } from "./generated/org.accordproject.runtime@0.2.0";

const NS = "org.accordproject.paymentuponiot@0.2.0";
const ContractLifecycleStatus = {
INITIALIZED: 'INITIALIZED' as ICounterState['status'],
RUNNING: 'RUNNING' as ICounterState['status'],
COMPLETED: 'COMPLETED' as ICounterState['status'],
};

// Union of all possible request types for this contract
type IoTRequest =
Expand All @@ -38,7 +41,7 @@ class PaymentUponIoTLogic extends TemplateLogic<ITemplateModel, ICounterState> {
state: {
$class: `${NS}.CounterState`,
$identifier: data.$identifier,
status: "INITIALIZED" as ContractLifecycleStatus,
status: ContractLifecycleStatus.INITIALIZED,
counter: 0.0,
paymentCount: 0.0,
}
Expand Down Expand Up @@ -66,7 +69,7 @@ class PaymentUponIoTLogic extends TemplateLogic<ITemplateModel, ICounterState> {
}
const newState: ICounterState = {
...state,
status: "RUNNING" as ContractLifecycleStatus,
status: ContractLifecycleStatus.RUNNING,
};
return {
result: this.makeCounterResponse(newState),
Expand Down Expand Up @@ -168,7 +171,7 @@ class PaymentUponIoTLogic extends TemplateLogic<ITemplateModel, ICounterState> {
}

const newPaymentCount = state.paymentCount + 1.0;
const newStatus: ContractLifecycleStatus =
const newStatus: ICounterState['status'] =
newPaymentCount >= data.paymentCount ? ContractLifecycleStatus.COMPLETED : ContractLifecycleStatus.RUNNING;

const unitsPaid = Math.max(
Expand All @@ -194,10 +197,10 @@ class PaymentUponIoTLogic extends TemplateLogic<ITemplateModel, ICounterState> {

async trigger(
data: ITemplateModel,
request: IRequest,
request: IoTRequest,
state: ICounterState
): Promise<IoTResponse> {
const req = request as IoTRequest;
const req = request;

switch (req.$class) {
case `${NS}.ContractSigned`:
Expand Down
3 changes: 2 additions & 1 deletion src/payment-upon-iot/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "contract",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"payment",
Expand Down
5 changes: 3 additions & 2 deletions src/payment-upon-iot/request.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
{
"$class": "org.accordproject.paymentuponiot@0.2.0.SingleButtonPress",
"$identifier": "req-001"
"$class": "org.accordproject.paymentuponiot@0.2.0.ContractSigned",
"$identifier": "req-001",
"contractId": "contract-001"
}
3 changes: 2 additions & 1 deletion src/payment-upon-signature/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
"accordproject": {
"runtime": "typescript",
"template": "contract",
"cicero": "^1.0.0"
"cicero": "^1.0.0",
"stateful": true
},
"keywords": [
"payment",
Expand Down
Loading
Loading