{"version":3,"file":"policy.mjs","names":[],"sources":["../../../src/auto-approvals/schemas/policy.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as v from 'valibot';\nimport { normalizeStructTag } from '@mysten/sui/utils';\n\nconst AccessLevelSchema = v.union([v.literal('read'), v.literal('mutate'), v.literal('transfer')]);\n\nconst BasePermissionSchema = v.object({\n\tdescription: v.string(),\n});\n\nconst CoinTypeSchema = v.pipe(\n\tv.string(),\n\tv.transform((coinType) => normalizeStructTag(coinType)),\n);\n\nconst ObjectTypePermissionSchema = v.object({\n\t...BasePermissionSchema.entries,\n\t$kind: v.literal('ObjectType'),\n\tobjectType: v.string(),\n\taccessLevel: AccessLevelSchema,\n});\n\nconst CoinBalancePermissionSchema = v.object({\n\t...BasePermissionSchema.entries,\n\t$kind: v.literal('CoinBalance'),\n\tcoinType: CoinTypeSchema,\n});\n\nconst AnyBalancesPermissionSchema = v.object({\n\t...BasePermissionSchema.entries,\n\t$kind: v.literal('AnyBalance'),\n});\n\nexport type PolicyPermission = v.InferOutput<\n\t| typeof CoinBalancePermissionSchema\n\t| typeof AnyBalancesPermissionSchema\n\t| typeof ObjectTypePermissionSchema\n>;\n\nconst AutoApprovalOperationSchema = v.object({\n\tid: v.string(),\n\tdescription: v.string(),\n\tpermissions: v.object({\n\t\townedObjects: v.optional(v.array(ObjectTypePermissionSchema)),\n\t\tbalances: v.optional(v.array(CoinBalancePermissionSchema)),\n\t\tanyBalance: v.optional(AnyBalancesPermissionSchema),\n\t}),\n});\n\n// TODO: do we want to support custom settings\nexport const AutoApprovalSettingsSchema = v.looseObject({\n\tapprovedOperations: v.array(v.string()),\n\texpiration: v.number(),\n\t// TODO: figure out a better name\n\tremainingTransactions: v.nullable(v.number()),\n\tsharedBudget: v.nullable(v.number()),\n\tcoinBudgets: v.record(CoinTypeSchema, v.string()),\n});\n\nexport const AutoApprovalPolicySchema = v.object({\n\tschemaVersion: v.literal('1.0.0'),\n\toperations: v.array(AutoApprovalOperationSchema),\n\t// TODO: do we want to split suggested settings into a different type (not everything makes sense as a suggestion)\n\tsuggestedSettings: v.optional(v.partial(AutoApprovalSettingsSchema)),\n});\n\nexport type AutoApprovalSettings = v.InferOutput<typeof AutoApprovalSettingsSchema>;\nexport type AutoApprovalPolicy = v.InferOutput<typeof AutoApprovalPolicySchema>;\nexport type AutoApprovalOperation = v.InferOutput<typeof AutoApprovalOperationSchema>;\n"],"mappings":";;;;AAMA,MAAM,oBAAoB,EAAE,MAAM;CAAC,EAAE,QAAQ,OAAO;CAAE,EAAE,QAAQ,SAAS;CAAE,EAAE,QAAQ,WAAW;CAAC,CAAC;AAElG,MAAM,uBAAuB,EAAE,OAAO,EACrC,aAAa,EAAE,QAAQ,EACvB,CAAC;AAEF,MAAM,iBAAiB,EAAE,KACxB,EAAE,QAAQ,EACV,EAAE,WAAW,aAAa,mBAAmB,SAAS,CAAC,CACvD;AAED,MAAM,6BAA6B,EAAE,OAAO;CAC3C,GAAG,qBAAqB;CACxB,OAAO,EAAE,QAAQ,aAAa;CAC9B,YAAY,EAAE,QAAQ;CACtB,aAAa;CACb,CAAC;AAEF,MAAM,8BAA8B,EAAE,OAAO;CAC5C,GAAG,qBAAqB;CACxB,OAAO,EAAE,QAAQ,cAAc;CAC/B,UAAU;CACV,CAAC;AAEF,MAAM,8BAA8B,EAAE,OAAO;CAC5C,GAAG,qBAAqB;CACxB,OAAO,EAAE,QAAQ,aAAa;CAC9B,CAAC;AAQF,MAAM,8BAA8B,EAAE,OAAO;CAC5C,IAAI,EAAE,QAAQ;CACd,aAAa,EAAE,QAAQ;CACvB,aAAa,EAAE,OAAO;EACrB,cAAc,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;EAC7D,UAAU,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;EAC1D,YAAY,EAAE,SAAS,4BAA4B;EACnD,CAAC;CACF,CAAC;AAGF,MAAa,6BAA6B,EAAE,YAAY;CACvD,oBAAoB,EAAE,MAAM,EAAE,QAAQ,CAAC;CACvC,YAAY,EAAE,QAAQ;CAEtB,uBAAuB,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC7C,cAAc,EAAE,SAAS,EAAE,QAAQ,CAAC;CACpC,aAAa,EAAE,OAAO,gBAAgB,EAAE,QAAQ,CAAC;CACjD,CAAC;AAEF,MAAa,2BAA2B,EAAE,OAAO;CAChD,eAAe,EAAE,QAAQ,QAAQ;CACjC,YAAY,EAAE,MAAM,4BAA4B;CAEhD,mBAAmB,EAAE,SAAS,EAAE,QAAQ,2BAA2B,CAAC;CACpE,CAAC"}