Transaction

fcc746c5d2d483c9574358e622d87d298aa50236a379c8150527ecfb666e6a48
( - )
187,053
2021-05-02 15:50:59
1
6,571 B

4 Outputs

Total Output:
  • jrunM{"in":0,"ref":["native://Jig","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1","b44a203acd6215d2d24b33a41f730e9acf2591c4ae27ecafc8d88ef83da9ddea_o1?berry=5de5ca0a3a67ffa2ce87a6cf242df668a6137be63426ea655793cd934a39f659&hash=6b7481feb6dbf77edd16ac84b83d265452ea930fd38bae046baf872727612166&version=5"],"out":["faf274c09cd7c090fb143ad9eb0daaed65250ab0aae7058ce4e900eaf3ccd311","ae60bc958073c0ef328cf9c88ea9bbb491b6dc54c5440a4d175a39e774edc293"],"del":[],"cre":["mvhhqGDd6FKwi3oUBwncN5m7r4nJ7NAJsT","mvhhqGDd6FKwi3oUBwncN5m7r4nJ7NAJsT"],"exec":[{"op":"DEPLOY","data":["class MediaItem extends Jig {\n init(ownerPubKey, data) {\n expect(ownerPubKey).toBeString();\n expect(caller).toBeInstanceOf(MediaDispenser);\n MediaItem.validateProps(data);\n this.data = data;\n this.owner = ownerPubKey;\n }\n send(to, key, validationMsg) {\n expect(key).toBeString('Key is not a string');\n expect(key.length).toBeGreaterThan(0, 'Empty key is invalid');\n expect(validationMsg).toBeString('Validation msg is not a string');\n expect(validationMsg.length).toBeGreaterThan(0, 'Empty validation msg string is invalid');\n // TODO get PubKey.fromString working w/ Run\n expect(to).toBeString('Recipient is not a string');\n expect(to.length).toBeGreaterThan(0, 'Recipient is invalid');\n this.owner = to;\n this.data.key = key;\n this.data.validationMsg = validationMsg;\n }\n static validateProps(props) {\n const { Item, ItemRequired, ItemContent, ItemContentRequired, Media, MediaRequired, } = MediaItem.validation;\n function entriesLoop(obj, fn) {\n Object\n .entries(obj)\n .forEach(fn);\n }\n function validateRequired(obj, requiredList) {\n return requiredList.every(key => expect(obj[key]).toBeDefined(`Missing required property \"${key}\". Obj: ${JSON.stringify(obj)}`));\n }\n validateRequired(props, ItemRequired);\n entriesLoop(props, ([key, val]) => {\n expect(val)[Item[key]]?.(`Item validation failed: Key \"${key}\" / Val: \"${val}\"`);\n });\n const media = [\n props.thumb,\n ...props.content.map(c => c.media),\n ];\n media.forEach(m => {\n validateRequired(m, MediaRequired);\n entriesLoop(m, ([key, val]) => {\n if (key === 'mimeType') {\n expect(MIME_TYPES.includes(val))\n .toBe(true, `Media mime type not recognized: ${val}`);\n }\n else {\n expect(val)[Media[key]](`Media item validation failed: Key \"${key}\" / Val: ${val}`);\n }\n });\n });\n props\n .content\n .forEach(c => {\n entriesLoop(c, ([key, val]) => {\n if (key !== 'media') {\n validateRequired(c, ItemContentRequired);\n expect(val)[ItemContent[key]]('Content validation failed: ', key, val);\n }\n });\n });\n }\n}",{"deps":{"Jig":{"$jig":0},"MIME_TYPES":["application/epub+zip","application/pdf","audio/aac","audio/mpeg","audio/ogg","audio/wav","audio/webm","image/bmp","image/gif","image/jpeg","image/png","image/webp","video/mpeg","video/ogg","video/webm"],"MediaDispenser":{"$jig":4},"expect":{"$jig":1}},"metadata":{"author":"DavidDoesStuff","description":"Media collection with public and private content.","emoji":"📖","image":{"$jig":2}},"validation":{"Item":{"batchItemNumber":"toBeNumber","batchNumber":"toBeNumber","categories":"toBeArray","content":"toBeArray","createdBy":"toBeString","creationDate":"toBeString","description":"toBeString","instantiatedBy":"toBeString","itemNumber":"toBeNumber","key":"toBeString","meta":"toBeObject","thumb":"toBeObject","title":"toBeString","type":"toBeString","validationMsg":"toBeString"},"ItemContent":{"description":"toBeString","title":"toBeString"},"ItemContentRequired":["title","description"],"ItemRequired":["creationDate","createdBy","title","type","description","thumb","content"],"ItemValidation":{"key":"toBeString","msg":"toBeString"},"Media":{"encrypted":"toBeBoolean","tx":"toBeString"},"MediaRequired":["tx"]}},"class MediaDispenser extends Jig {\n init(ownerPubKey, data) {\n const { maxBatches = 0, maxIssues = 0, mediaData, } = data;\n expect(maxBatches).toBeNumber();\n expect(maxIssues).toBeNumber();\n expect(ownerPubKey).toBeString();\n MediaItem.validateProps(mediaData);\n const { creationDate, createdBy, categories = [], } = mediaData;\n this.owner = ownerPubKey;\n this.data = {\n maxIssues,\n maxBatches,\n mediaData,\n creationDate,\n batchRuns: [],\n createdBy,\n categories,\n };\n }\n send(to) {\n this.owner = to;\n }\n create(count) {\n expect(count).toBeNumber();\n expect(count).toBeGreaterThan(0);\n const data = this.data;\n if (data.maxBatches) {\n expect(data.batchRuns.length).toBeLessThan(data.maxBatches);\n }\n const totalIssued = data.batchRuns.reduce((sum, issued) => sum + issued, 0);\n if (data.maxIssues) {\n expect(totalIssued + count).toBeLessThan(data.maxIssues);\n }\n const batchNumber = data.batchRuns.length + 1;\n const newIssues = [];\n for (let x = 0; x < count; x++) {\n const batchItemNumber = x + 1;\n newIssues.push(new MediaItem(this.owner, {\n instantiatedBy: this.origin,\n batchNumber,\n itemNumber: totalIssued + batchItemNumber,\n batchItemNumber,\n ...this.data.mediaData,\n }));\n }\n this.data.batchRuns.push(count);\n return newIssues;\n }\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]},"MediaItem":{"$jig":3},"expect":{"$dup":["1","deps","expect"]}},"metadata":{"author":"DavidDoesStuff","description":"Creates and tracks media items.","emoji":"📖","image":{"$dup":["1","metadata","image"]}}}]}]}
    https://whatsonchain.com/tx/fcc746c5d2d483c9574358e622d87d298aa50236a379c8150527ecfb666e6a48